From 8c543bac36ba9dd488b9a788799712e81d417748 Mon Sep 17 00:00:00 2001 From: Li Zheng Date: Mon, 8 May 2017 13:13:29 +0800 Subject: [PATCH 001/102] work with react@16.0.0-alpha.6 from react-native@0.43.0, and the reason we set react-dom@16.0.0-alpha.2 but not react-dom@16.0.0-alpha.6 is: 1. react@16.0.0-alpha.6 -> ReactBaseClasses.js -> setState -> enqueueSetState() is not compatible with the parameters defined in react-dom@15.4.2 -> ReactUpdateQueue.js -> enqueueSetState(), so we need upgrade react-dom, othewise navigator can't route to new page because it use setState; 2. ReactAnimated use animated, but animated has not suppor React v16 for now, see https://github.com/animatedjs/animated/issues/63 , and react-dom@16.0.0-alpha.3 to react-dom@16.0.0-alpha.6 will crash the animated but accurate react-dom@16.0.0-alpha.2 is good. --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index c493f76..c6bc66f 100644 --- a/package.json +++ b/package.json @@ -44,8 +44,8 @@ "webpack-merge": "0.1.1" }, "peerDependencies": { - "react": "^15.4", - "react-dom": "^15.4" + "react": "16.0.0-alpha.6", + "react-dom": "16.0.0-alpha.2" }, "dependencies": { "animated": "0.1.3", From 0e5a5a0438b826faf0cf0e80c6957a32d7db7c27 Mon Sep 17 00:00:00 2001 From: Li Zheng Date: Mon, 8 May 2017 13:15:17 +0800 Subject: [PATCH 002/102] work with react-navigation recommended by react-native@0.44.0 when use import { StackNavigator } from 'react-navigation/src/react-navigation.js' not import { StackNavigator } from 'react-navigation'; // it will use react-navigation.web.js instead and replace PlatformHelpers with PlatformHelpers.native in react-navigation/src/createNavigationContainer.js --- Libraries/BackAndroid/BackAndroid.web.js | 21 ++++++++++ Libraries/I18nManager/I18nManager.web.js | 53 ++++++++++++++++++++++++ Libraries/Linking/Linking.web.js | 2 +- Libraries/index.js | 2 + 4 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 Libraries/BackAndroid/BackAndroid.web.js create mode 100644 Libraries/I18nManager/I18nManager.web.js diff --git a/Libraries/BackAndroid/BackAndroid.web.js b/Libraries/BackAndroid/BackAndroid.web.js new file mode 100644 index 0000000..7686ef8 --- /dev/null +++ b/Libraries/BackAndroid/BackAndroid.web.js @@ -0,0 +1,21 @@ +/** + * Copyright (c) 2015-present, Alibaba Group Holding Limited. + * All rights reserved. + * + * @providesModule ReactBackAndroid + */ +'use strict'; + +function emptyFunction() {} + +const BackAndroid = { + exitApp: emptyFunction, + addEventListener() { + return { + remove: emptyFunction + }; + }, + removeEventListener: emptyFunction +}; + +export default BackAndroid; diff --git a/Libraries/I18nManager/I18nManager.web.js b/Libraries/I18nManager/I18nManager.web.js new file mode 100644 index 0000000..e21471b --- /dev/null +++ b/Libraries/I18nManager/I18nManager.web.js @@ -0,0 +1,53 @@ +/** + * Copyright (c) 2015-present, Alibaba Group Holding Limited. + * All rights reserved. + * + * @providesModule ReactI18nManager + */ +'use strict'; + +import ExecutionEnvironment from 'fbjs/lib/ExecutionEnvironment'; + +type I18nManagerStatus = { + allowRTL: (allowRTL: boolean) => {}, + forceRTL: (forceRTL: boolean) => {}, + setRTL: (setRTL: boolean) => {}, + isRTL: boolean +}; + +let isPreferredLanguageRTL = false; +let isRTLAllowed = true; +let isRTLForced = false; + +const isRTL = () => { + if (isRTLForced) { + return true; + } + return isRTLAllowed && isPreferredLanguageRTL; +}; + +const onChange = () => { + if (ExecutionEnvironment.canUseDOM) { + document.documentElement.setAttribute('dir', isRTL() ? 'rtl' : 'ltr'); + } +}; + +const I18nManager: I18nManagerStatus = { + allowRTL(bool) { + isRTLAllowed = bool; + onChange(); + }, + forceRTL(bool) { + isRTLForced = bool; + onChange(); + }, + setPreferredLanguageRTL(bool) { + isPreferredLanguageRTL = bool; + onChange(); + }, + get isRTL() { + return isRTL(); + } +}; + +export default I18nManager; diff --git a/Libraries/Linking/Linking.web.js b/Libraries/Linking/Linking.web.js index d752e84..8eb2461 100644 --- a/Libraries/Linking/Linking.web.js +++ b/Libraries/Linking/Linking.web.js @@ -20,7 +20,7 @@ var Linking = { canOpenURL: (url) => { return true; }, - getInitialURL: emptyFunction, + getInitialURL: () => Promise.resolve() }; module.exports = Linking; diff --git a/Libraries/index.js b/Libraries/index.js index 3b54e86..99854bc 100644 --- a/Libraries/index.js +++ b/Libraries/index.js @@ -58,8 +58,10 @@ export AlertIOS from 'ReactAlert'; export Animated from 'ReactAnimated'; export AppRegistry from 'ReactAppRegistry'; export AsyncStorage from 'ReactAsyncStorage'; +export BackAndroid from 'ReactBackAndroid'; export Dimensions from 'ReactDimensions'; export Easing from 'animated/lib/Easing'; +export I18nManager from 'ReactI18nManager'; export InteractionManager from 'ReactInteractionManager'; export LayoutAnimation from 'ReactLayoutAnimation'; export PanResponder from 'ReactPanResponder'; From 53e125d42e32e4735fb91cdeb35ecc9c7c841cde Mon Sep 17 00:00:00 2001 From: Li Zheng Date: Mon, 8 May 2017 17:30:27 +0800 Subject: [PATCH 003/102] findNodeHandle: added, ref to https://github.com/necolas/react-native-web/blob/master/src/modules/findNodeHandle/index.js --- Libraries/Utilties/findNodeHandle.js | 12 ++++++++++++ Libraries/index.js | 1 + 2 files changed, 13 insertions(+) create mode 100644 Libraries/Utilties/findNodeHandle.js diff --git a/Libraries/Utilties/findNodeHandle.js b/Libraries/Utilties/findNodeHandle.js new file mode 100644 index 0000000..d1e088c --- /dev/null +++ b/Libraries/Utilties/findNodeHandle.js @@ -0,0 +1,12 @@ +/** + * Copyright (c) 2015-present, Alibaba Group Holding Limited. + * All rights reserved. + * + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * @providesModule ReactfindNodeHandle + */ + +import { findDOMNode } from 'react-dom'; +export default findDOMNode; diff --git a/Libraries/index.js b/Libraries/index.js index 99854bc..4b4fc01 100644 --- a/Libraries/index.js +++ b/Libraries/index.js @@ -70,6 +70,7 @@ export StyleSheet from 'ReactStyleSheet'; export AppState from 'ReactAppState'; // Plugins +export findNodeHandle from 'ReactfindNodeHandle'; export NativeModules from 'ReactNativeModules'; export Platform from 'ReactPlatform'; export processColor from 'ReactProcessColor'; From e7bf0f239b77762fb2f14e98c48864309974eb75 Mon Sep 17 00:00:00 2001 From: Li Zheng Date: Mon, 8 May 2017 17:07:10 +0800 Subject: [PATCH 004/102] FlatList(step 1): just copy from react-native@0.43.3 --- Libraries/Interaction/Batchinator.js | 77 +++ Libraries/Lists/FlatList.js | 390 ++++++++++++ Libraries/Lists/MetroListView.js | 176 +++++ Libraries/Lists/SectionList.js | 191 ++++++ Libraries/Lists/ViewabilityHelper.js | 261 ++++++++ Libraries/Lists/VirtualizeUtils.js | 163 +++++ Libraries/Lists/VirtualizedList.js | 740 ++++++++++++++++++++++ Libraries/Lists/VirtualizedSectionList.js | 319 ++++++++++ Libraries/Utilties/infoLog.js | 20 + 9 files changed, 2337 insertions(+) create mode 100644 Libraries/Interaction/Batchinator.js create mode 100644 Libraries/Lists/FlatList.js create mode 100644 Libraries/Lists/MetroListView.js create mode 100644 Libraries/Lists/SectionList.js create mode 100644 Libraries/Lists/ViewabilityHelper.js create mode 100644 Libraries/Lists/VirtualizeUtils.js create mode 100644 Libraries/Lists/VirtualizedList.js create mode 100644 Libraries/Lists/VirtualizedSectionList.js create mode 100644 Libraries/Utilties/infoLog.js diff --git a/Libraries/Interaction/Batchinator.js b/Libraries/Interaction/Batchinator.js new file mode 100644 index 0000000..e807e55 --- /dev/null +++ b/Libraries/Interaction/Batchinator.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 Batchinator + * @flow + */ +'use strict'; + +const InteractionManager = require('InteractionManager'); + +/** + * A simple class for batching up invocations of a low-pri callback. A timeout is set to run the + * callback once after a delay, no matter how many times it's scheduled. Once the delay is reached, + * InteractionManager.runAfterInteractions is used to invoke the callback after any hi-pri + * interactions are done running. + * + * Make sure to cleanup with dispose(). Example: + * + * class Widget extends React.Component { + * _batchedSave: new Batchinator(() => this._saveState, 1000); + * _saveSate() { + * // save this.state to disk + * } + * componentDidUpdate() { + * this._batchedSave.schedule(); + * } + * componentWillUnmount() { + * this._batchedSave.dispose(); + * } + * ... + * } + */ +class Batchinator { + _callback: () => void; + _delay: number; + _taskHandle: ?{cancel: () => void}; + constructor(callback: () => void, delayMS: number) { + this._delay = delayMS; + this._callback = callback; + } + /* + * Cleanup any pending tasks. + * + * By default, if there is a pending task the callback is run immediately. Set the option abort to + * true to not call the callback if it was pending. + */ + dispose(options: {abort: boolean} = {abort: false}) { + if (this._taskHandle) { + this._taskHandle.cancel(); + if (!options.abort) { + this._callback(); + } + this._taskHandle = null; + } + } + schedule() { + if (this._taskHandle) { + return; + } + const timeoutHandle = setTimeout(() => { + this._taskHandle = InteractionManager.runAfterInteractions(() => { + // Note that we clear the handle before invoking the callback so that if the callback calls + // schedule again, it will actually schedule another task. + this._taskHandle = null; + this._callback(); + }); + }, this._delay); + this._taskHandle = {cancel: () => clearTimeout(timeoutHandle)}; + } +} + +module.exports = Batchinator; diff --git a/Libraries/Lists/FlatList.js b/Libraries/Lists/FlatList.js new file mode 100644 index 0000000..10a47cc --- /dev/null +++ b/Libraries/Lists/FlatList.js @@ -0,0 +1,390 @@ +/** + * 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. + * + * Facebook, Inc. ("Facebook") owns all right, title and interest, including + * all intellectual property and other proprietary rights, in and to the React + * Native CustomComponents software (the "Software"). Subject to your + * compliance with these terms, you are hereby granted a non-exclusive, + * worldwide, royalty-free copyright license to (1) use and copy the Software; + * and (2) reproduce and distribute the Software as part of your own software + * ("Your Software"). Facebook reserves all rights not expressly granted to + * you in this license agreement. + * + * THE SOFTWARE AND DOCUMENTATION, IF ANY, ARE PROVIDED "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES (INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE) ARE DISCLAIMED. + * IN NO EVENT SHALL FACEBOOK OR ITS AFFILIATES, OFFICERS, DIRECTORS OR + * EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * @providesModule FlatList + * @flow + */ +'use strict'; + +const MetroListView = require('MetroListView'); // Used as a fallback legacy option +const React = require('React'); +const ReactNative = require('ReactNative'); +const View = require('View'); +const VirtualizedList = require('VirtualizedList'); + +const invariant = require('fbjs/lib/invariant'); + +import type {StyleObj} from 'StyleSheetTypes'; +import type {ViewabilityConfig, ViewToken} from 'ViewabilityHelper'; +import type {Props as VirtualizedListProps} from 'VirtualizedList'; + +type RequiredProps = { + /** + * Takes an item from `data` and renders it into the list. Typical usage: + * + * _renderItem = ({item}) => ( + * this._onPress(item)}> + * {item.title}} + * + * ); + * ... + * + * + * Provides additional metadata like `index` if you need it. + */ + renderItem: (info: {item: ItemT, index: number}) => ?React.Element, + /** + * For simplicity, data is just a plain array. If you want to use something else, like an + * immutable list, use the underlying `VirtualizedList` directly. + */ + data: ?Array, +}; +type OptionalProps = { + /** + * Rendered in between each item, but not at the top or bottom. + */ + ItemSeparatorComponent?: ?ReactClass, + /** + * Rendered at the bottom of all the items. + */ + ListFooterComponent?: ?ReactClass, + /** + * Rendered at the top of all the items. + */ + ListHeaderComponent?: ?ReactClass, + /** + * `getItemLayout` is an optional optimizations that let us skip measurement of dynamic content if + * you know the height of items a priori. `getItemLayout` is the most efficient, and is easy to + * use if you have fixed height items, for example: + * + * getItemLayout={(data, index) => ( + * {length: ITEM_HEIGHT, offset: ITEM_HEIGHT * index, index} + * )} + * + * Remember to include separator length (height or width) in your offset calculation if you + * specify `ItemSeparatorComponent`. + */ + getItemLayout?: (data: ?Array, index: number) => + {length: number, offset: number, index: number}, + /** + * If true, renders items next to each other horizontally instead of stacked vertically. + */ + horizontal?: ?boolean, + /** + * Used to extract a unique key for a given item at the specified index. Key is used for caching + * and as the react key to track item re-ordering. The default extractor checks `item.key`, then + * falls back to using the index, like React does. + */ + keyExtractor: (item: ItemT, index: number) => string, + /** + * Multiple columns can only be rendered with `horizontal={false}`` and will zig-zag like a + * `flexWrap` layout. Items should all be the same height - masonry layouts are not supported. + */ + numColumns: number, + /** + * Called once when the scroll position gets within `onEndReachedThreshold` of the rendered + * content. + */ + onEndReached?: ?(info: {distanceFromEnd: number}) => void, + onEndReachedThreshold?: ?number, + /** + * If provided, a standard RefreshControl will be added for "Pull to Refresh" functionality. Make + * sure to also set the `refreshing` prop correctly. + */ + onRefresh?: ?() => void, + /** + * Called when the viewability of rows changes, as defined by the + * `viewablePercentThreshold` prop. + */ + onViewableItemsChanged?: ?(info: {viewableItems: Array, changed: Array}) => void, + legacyImplementation?: ?boolean, + /** + * Set this true while waiting for new data from a refresh. + */ + refreshing?: ?boolean, + /** + * Optional custom style for multi-item rows generated when numColumns > 1 + */ + columnWrapperStyle?: StyleObj, + /** + * See `ViewabilityHelper` for flow type and further documentation. + */ + viewabilityConfig?: ViewabilityConfig, +}; +type Props = RequiredProps & OptionalProps & VirtualizedListProps; + +const defaultProps = { + ...VirtualizedList.defaultProps, + getItem: undefined, + getItemCount: undefined, + numColumns: 1, +}; +type DefaultProps = typeof defaultProps; + +/** + * A performant interface for rendering simple, flat lists, supporting the most handy features: + * + * - Fully cross-platform. + * - Optional horizontal mode. + * - Configurable viewability callbacks. + * - Header support. + * - Footer support. + * - Separator support. + * - Pull to Refresh. + * - Scroll loading. + * + * If you need section support, use [``](/react-native/docs/sectionlist.html). + * + * Minimal Example: + * + * {item.key}} + * /> + * + * This is a convenience wrapper around [``](/react-native/docs/virtualizedlist.html), + * and thus inherits the following caveats: + * + * - Internal state is not preserved when content scrolls out of the render window. Make sure all + * your data is captured in the item data or external stores like Flux, Redux, or Relay. + * - This is a `PureComponent` which means that it will not re-render if `props` remain shallow- + * equal. Make sure that everything your `renderItem` function depends on is passed as a prop that + * is not `===` after updates, otherwise your UI may not update on changes. This includes the + * `data` prop and parent component state. + * - In order to constrain memory and enable smooth scrolling, content is rendered asynchronously + * offscreen. This means it's possible to scroll faster than the fill rate ands momentarily see + * blank content. This is a tradeoff that can be adjusted to suit the needs of each application, + * and we are working on improving it behind the scenes. + * - By default, the list looks for a `key` prop on each item and uses that for the React key. + * Alternatively, you can provide a custom `keyExtractor` prop. + */ +class FlatList extends React.PureComponent, void> { + static defaultProps: DefaultProps = defaultProps; + props: Props; + /** + * Scrolls to the end of the content. May be janky without `getItemLayout` prop. + */ + scrollToEnd(params?: ?{animated?: ?boolean}) { + this._listRef.scrollToEnd(params); + } + + /** + * Scrolls to the item at a the specified index such that it is positioned in the viewable area + * such that `viewPosition` 0 places it at the top, 1 at the bottom, and 0.5 centered in the + * middle. + * + * May be janky without `getItemLayout` prop. + */ + scrollToIndex(params: {animated?: ?boolean, index: number, viewPosition?: number}) { + this._listRef.scrollToIndex(params); + } + + /** + * Requires linear scan through data - use `scrollToIndex` instead if possible. May be janky + * without `getItemLayout` prop. + */ + scrollToItem(params: {animated?: ?boolean, item: ItemT, viewPosition?: number}) { + this._listRef.scrollToItem(params); + } + + /** + * Scroll to a specific content pixel offset, like a normal `ScrollView`. + */ + scrollToOffset(params: {animated?: ?boolean, offset: number}) { + this._listRef.scrollToOffset(params); + } + + /** + * Tells the list an interaction has occured, which should trigger viewability calculations, e.g. + * if `waitForInteractions` is true and the user has not scrolled. This is typically called by + * taps on items or by navigation actions. + */ + recordInteraction() { + this._listRef.recordInteraction(); + } + + getScrollableNode() { + if (this._listRef && this._listRef.getScrollableNode) { + return this._listRef.getScrollableNode(); + } else { + return ReactNative.findNodeHandle(this._listRef); + } + } + + componentWillMount() { + this._checkProps(this.props); + } + + componentWillReceiveProps(nextProps: Props) { + this._checkProps(nextProps); + } + + _hasWarnedLegacy = false; + _listRef: VirtualizedList; + + _captureRef = (ref) => { this._listRef = ref; }; + + _checkProps(props: Props) { + const { + getItem, + getItemCount, + horizontal, + legacyImplementation, + numColumns, + columnWrapperStyle, + } = props; + invariant(!getItem && !getItemCount, 'FlatList does not support custom data formats.'); + if (numColumns > 1) { + invariant(!horizontal, 'numColumns does not support horizontal.'); + } else { + invariant(!columnWrapperStyle, 'columnWrapperStyle not supported for single column lists'); + } + if (legacyImplementation) { + invariant(numColumns === 1, 'Legacy list does not support multiple columns.'); + // Warning: may not have full feature parity and is meant more for debugging and performance + // comparison. + if (!this._hasWarnedLegacy) { + console.warn( + 'FlatList: Using legacyImplementation - some features not supported and performance ' + + 'may suffer' + ); + this._hasWarnedLegacy = true; + } + } + } + + _getItem = (data: Array, index: number) => { + const {numColumns} = this.props; + if (numColumns > 1) { + const ret = []; + for (let kk = 0; kk < numColumns; kk++) { + const item = data[index * numColumns + kk]; + item && ret.push(item); + } + return ret; + } else { + return data[index]; + } + }; + + _getItemCount = (data: ?Array): number => { + return data ? Math.ceil(data.length / this.props.numColumns) : 0; + }; + + _keyExtractor = (items: ItemT | Array, index: number) => { + const {keyExtractor, numColumns} = this.props; + if (numColumns > 1) { + invariant( + Array.isArray(items), + 'FlatList: Encountered internal consistency error, expected each item to consist of an ' + + 'array with 1-%s columns; instead, received a single item.', + numColumns, + ); + return items.map((it, kk) => keyExtractor(it, index * numColumns + kk)).join(':'); + } else { + return keyExtractor(items, index); + } + }; + + _pushMultiColumnViewable(arr: Array, v: ViewToken): void { + const {numColumns, keyExtractor} = this.props; + v.item.forEach((item, ii) => { + invariant(v.index != null, 'Missing index!'); + const index = v.index * numColumns + ii; + arr.push({...v, item, key: keyExtractor(item, index), index}); + }); + } + _onViewableItemsChanged = (info) => { + const {numColumns, onViewableItemsChanged} = this.props; + if (!onViewableItemsChanged) { + return; + } + if (numColumns > 1) { + const changed = []; + const viewableItems = []; + info.viewableItems.forEach((v) => this._pushMultiColumnViewable(viewableItems, v)); + info.changed.forEach((v) => this._pushMultiColumnViewable(changed, v)); + onViewableItemsChanged({viewableItems, changed}); + } else { + onViewableItemsChanged(info); + } + }; + + _renderItem = (info: {item: ItemT | Array, index: number}) => { + const {renderItem, numColumns, columnWrapperStyle} = this.props; + if (numColumns > 1) { + const {item, index} = info; + invariant(Array.isArray(item), 'Expected array of items with numColumns > 1'); + return ( + + {item.map((it, kk) => { + const element = renderItem({item: it, index: index * numColumns + kk}); + return element && React.cloneElement(element, {key: kk}); + })} + + ); + } else { + return renderItem(info); + } + }; + + _shouldItemUpdate = (prev, next) => { + const {numColumns, shouldItemUpdate} = this.props; + if (numColumns > 1) { + return prev.item.length !== next.item.length || + prev.item.some((prevItem, ii) => shouldItemUpdate( + {item: prevItem, index: prev.index + ii}, + {item: next.item[ii], index: next.index + ii}, + )); + } else { + return shouldItemUpdate(prev, next); + } + }; + + render() { + if (this.props.legacyImplementation) { + return ; + } else { + return ( + + ); + } + } +} + +module.exports = FlatList; diff --git a/Libraries/Lists/MetroListView.js b/Libraries/Lists/MetroListView.js new file mode 100644 index 0000000..9352412 --- /dev/null +++ b/Libraries/Lists/MetroListView.js @@ -0,0 +1,176 @@ +/** + * 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. + * + * Facebook, Inc. ("Facebook") owns all right, title and interest, including + * all intellectual property and other proprietary rights, in and to the React + * Native CustomComponents software (the "Software"). Subject to your + * compliance with these terms, you are hereby granted a non-exclusive, + * worldwide, royalty-free copyright license to (1) use and copy the Software; + * and (2) reproduce and distribute the Software as part of your own software + * ("Your Software"). Facebook reserves all rights not expressly granted to + * you in this license agreement. + * + * THE SOFTWARE AND DOCUMENTATION, IF ANY, ARE PROVIDED "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES (INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE) ARE DISCLAIMED. + * IN NO EVENT SHALL FACEBOOK OR ITS AFFILIATES, OFFICERS, DIRECTORS OR + * EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * @providesModule MetroListView + * @flow + */ +'use strict'; + +const ListView = require('ListView'); +const React = require('React'); +const RefreshControl = require('RefreshControl'); +const ScrollView = require('ScrollView'); + +const invariant = require('fbjs/lib/invariant'); + +type Item = any; + +type NormalProps = { + FooterComponent?: ReactClass<*>, + renderItem: ({item: Item, index: number}) => ?React.Element<*>, + renderSectionHeader?: ({section: Object}) => ?React.Element<*>, + SeparatorComponent?: ?ReactClass<*>, // not supported yet + + // Provide either `items` or `sections` + items?: ?Array, // By default, an Item is assumed to be {key: string} + sections?: ?Array<{key: string, data: Array}>, + + /** + * If provided, a standard RefreshControl will be added for "Pull to Refresh" functionality. Make + * sure to also set the `refreshing` prop correctly. + */ + onRefresh?: ?Function, + /** + * Set this true while waiting for new data from a refresh. + */ + refreshing?: boolean, +}; +type DefaultProps = { + shouldItemUpdate: (curr: {item: Item}, next: {item: Item}) => boolean, + keyExtractor: (item: Item) => string, +}; +type Props = NormalProps & DefaultProps; + +/** + * This is just a wrapper around the legacy ListView that matches the new API of FlatList, but with + * some section support tacked on. It is recommended to just use FlatList directly, this component + * is mostly for debugging and performance comparison. + */ +class MetroListView extends React.Component { + props: Props; + scrollToEnd(params?: ?{animated?: ?boolean}) { + throw new Error('scrollToEnd not supported in legacy ListView.'); + } + scrollToIndex(params: {animated?: ?boolean, index: number, viewPosition?: number}) { + throw new Error('scrollToIndex not supported in legacy ListView.'); + } + scrollToItem(params: {animated?: ?boolean, item: Item, viewPosition?: number}) { + throw new Error('scrollToItem not supported in legacy ListView.'); + } + scrollToOffset(params: {animated?: ?boolean, offset: number}) { + const {animated, offset} = params; + this._listRef.scrollTo( + this.props.horizontal ? {x: offset, animated} : {y: offset, animated} + ); + } + static defaultProps: DefaultProps = { + shouldItemUpdate: () => true, + keyExtractor: (item, index) => item.key || index, + renderScrollComponent: (props: Props) => { + if (props.onRefresh) { + return ( + + } + /> + ); + } else { + return ; + } + }, + }; + state = this._computeState( + this.props, + { + ds: new ListView.DataSource({ + rowHasChanged: (itemA, itemB) => this.props.shouldItemUpdate({item: itemA}, {item: itemB}), + sectionHeaderHasChanged: () => true, + getSectionHeaderData: (dataBlob, sectionID) => this.state.sectionHeaderData[sectionID], + }), + sectionHeaderData: {}, + }, + ); + componentWillReceiveProps(newProps: Props) { + this.setState((state) => this._computeState(newProps, state)); + } + render() { + return ( + + ); + } + _listRef: ListView; + _captureRef = (ref) => { this._listRef = ref; }; + _computeState(props: Props, state) { + const sectionHeaderData = {}; + if (props.sections) { + invariant(!props.items, 'Cannot have both sections and items props.'); + const sections = {}; + props.sections.forEach((sectionIn, ii) => { + const sectionID = 's' + ii; + sections[sectionID] = sectionIn.data; + sectionHeaderData[sectionID] = sectionIn; + }); + return { + ds: state.ds.cloneWithRowsAndSections(sections), + sectionHeaderData, + }; + } else { + invariant(!props.sections, 'Cannot have both sections and items props.'); + return { + ds: state.ds.cloneWithRows(props.items), + sectionHeaderData, + }; + } + } + _renderFooter = () => ; + _renderRow = (item, sectionID, rowID, highlightRow) => { + return this.props.renderItem({item, index: rowID}); + }; + _renderSectionHeader = (section, sectionID) => { + const {renderSectionHeader} = this.props; + invariant(renderSectionHeader, 'Must provide renderSectionHeader with sections prop'); + return renderSectionHeader({section}); + } + _renderSeparator = (sID, rID) => ; +} + +module.exports = MetroListView; diff --git a/Libraries/Lists/SectionList.js b/Libraries/Lists/SectionList.js new file mode 100644 index 0000000..2bc66a6 --- /dev/null +++ b/Libraries/Lists/SectionList.js @@ -0,0 +1,191 @@ +/** + * 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. + * + * Facebook, Inc. ("Facebook") owns all right, title and interest, including + * all intellectual property and other proprietary rights, in and to the React + * Native CustomComponents software (the "Software"). Subject to your + * compliance with these terms, you are hereby granted a non-exclusive, + * worldwide, royalty-free copyright license to (1) use and copy the Software; + * and (2) reproduce and distribute the Software as part of your own software + * ("Your Software"). Facebook reserves all rights not expressly granted to + * you in this license agreement. + * + * THE SOFTWARE AND DOCUMENTATION, IF ANY, ARE PROVIDED "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES (INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE) ARE DISCLAIMED. + * IN NO EVENT SHALL FACEBOOK OR ITS AFFILIATES, OFFICERS, DIRECTORS OR + * EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * @providesModule SectionList + * @flow + */ +'use strict'; + +const MetroListView = require('MetroListView'); +const React = require('React'); +const VirtualizedSectionList = require('VirtualizedSectionList'); + +import type {ViewToken} from 'ViewabilityHelper'; +import type {Props as VirtualizedSectionListProps} from 'VirtualizedSectionList'; + +type Item = any; + +type SectionBase = { + // Must be provided directly on each section. + data: Array, + key: string, + + // Optional props will override list-wide props just for this section. + renderItem?: ?(info: {item: SectionItemT, index: number}) => ?React.Element, + SeparatorComponent?: ?ReactClass, + keyExtractor?: (item: SectionItemT) => string, + + // TODO: support more optional/override props + // FooterComponent?: ?ReactClass<*>, + // HeaderComponent?: ?ReactClass<*>, + // onViewableItemsChanged?: ({viewableItems: Array, changed: Array}) => void, +}; + +type RequiredProps> = { + sections: Array, +}; + +type OptionalProps> = { + /** + * Default renderer for every item in every section. Can be over-ridden on a per-section basis. + */ + renderItem: (info: {item: Item, index: number}) => ?React.Element, + /** + * Rendered in between adjacent Items within each section. + */ + ItemSeparatorComponent?: ?ReactClass, + /** + * Rendered at the very beginning of the list. + */ + ListHeaderComponent?: ?ReactClass, + /** + * Rendered at the very end of the list. + */ + ListFooterComponent?: ?ReactClass, + /** + * Rendered at the top of each section. Sticky headers are not yet supported. + */ + renderSectionHeader?: ?(info: {section: SectionT}) => ?React.Element, + /** + * Rendered in between each section. + */ + SectionSeparatorComponent?: ?ReactClass, + /** + * Used to extract a unique key for a given item at the specified index. Key is used for caching + * and as the react key to track item re-ordering. The default extractor checks item.key, then + * falls back to using the index, like react does. + */ + keyExtractor: (item: Item, index: number) => string, + onEndReached?: ?(info: {distanceFromEnd: number}) => void, + /** + * If provided, a standard RefreshControl will be added for "Pull to Refresh" functionality. Make + * sure to also set the `refreshing` prop correctly. + */ + onRefresh?: ?() => void, + /** + * Called when the viewability of rows changes, as defined by the + * `viewabilityConfig` prop. + */ + onViewableItemsChanged?: ?(info: {viewableItems: Array, changed: Array}) => void, + /** + * Set this true while waiting for new data from a refresh. + */ + refreshing?: ?boolean, + /** + * This is an optional optimization to minimize re-rendering items. + */ + shouldItemUpdate: ( + prevProps: {item: Item, index: number}, + nextProps: {item: Item, index: number} + ) => boolean, +}; + +type Props = RequiredProps + & OptionalProps + & VirtualizedSectionListProps; + +type DefaultProps = typeof VirtualizedSectionList.defaultProps; + +/** + * A performant interface for rendering sectioned lists, supporting the most handy features: + * + * - Fully cross-platform. + * - Configurable viewability callbacks. + * - List header support. + * - List footer support. + * - Item separator support. + * - Section header support. + * - Section separator support. + * - Heterogeneous data and item rendering support. + * - Pull to Refresh. + * - Scroll loading. + * + * If you don't need section support and want a simpler interface, use [``](/react-native/docs/flatlist.html). + * + * If you need _sticky_ section header support, use `ListView` for now. + * + * Simple Examples: + * + *

} + * sections={[ // homogenous rendering between sections + * {data: [...], key: ...}, + * {data: [...], key: ...}, + * {data: [...], key: ...}, + * ]} + * /> + * + * + * + * This is a convenience wrapper around [``](/react-native/docs/virtualizedlist.html), + * and thus inherits the following caveats: + * + * - Internal state is not preserved when content scrolls out of the render window. Make sure all + * your data is captured in the item data or external stores like Flux, Redux, or Relay. + * - This is a `PureComponent` which means that it will not re-render if `props` remain shallow- + * equal. Make sure that everything your `renderItem` function depends on is passed as a prop that + * is not `===` after updates, otherwise your UI may not update on changes. This includes the + * `data` prop and parent component state. + * - In order to constrain memory and enable smooth scrolling, content is rendered asynchronously + * offscreen. This means it's possible to scroll faster than the fill rate ands momentarily see + * blank content. This is a tradeoff that can be adjusted to suit the needs of each application, + * and we are working on improving it behind the scenes. + * - By default, the list looks for a `key` prop on each item and uses that for the React key. + * Alternatively, you can provide a custom `keyExtractor` prop. + */ +class SectionList> + extends React.PureComponent, void> +{ + props: Props; + static defaultProps: DefaultProps = VirtualizedSectionList.defaultProps; + + render() { + const List = this.props.legacyImplementation ? MetroListView : VirtualizedSectionList; + return ; + } +} + +module.exports = SectionList; diff --git a/Libraries/Lists/ViewabilityHelper.js b/Libraries/Lists/ViewabilityHelper.js new file mode 100644 index 0000000..31ce384 --- /dev/null +++ b/Libraries/Lists/ViewabilityHelper.js @@ -0,0 +1,261 @@ +/** + * 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 ViewabilityHelper + * @flow + */ +'use strict'; + +const invariant = require('fbjs/lib/invariant'); + +export type ViewToken = {item: any, key: string, index: ?number, isViewable: boolean, section?: any}; + +export type ViewabilityConfig = {| + /** + * Minimum amount of time (in milliseconds) that an item must be physically viewable before the + * viewability callback will be fired. A high number means that scrolling through content without + * stopping will not mark the content as viewable. + */ + minimumViewTime?: number, + + /** + * Percent of viewport that must be covered for a partially occluded item to count as + * "viewable", 0-100. Fully visible items are always considered viewable. A value of 0 means + * that a single pixel in the viewport makes the item viewable, and a value of 100 means that + * an item must be either entirely visible or cover the entire viewport to count as viewable. + */ + viewAreaCoveragePercentThreshold?: number, + + /** + * Similar to `viewAreaPercentThreshold`, but considers the percent of the item that is visible, + * rather than the fraction of the viewable area it covers. + */ + itemVisiblePercentThreshold?: number, + + /** + * Nothing is considered viewable until the user scrolls or `recordInteraction` is called after + * render. + */ + waitForInteraction?: boolean, +|}; + +/** +* A Utility class for calculating viewable items based on current metrics like scroll position and +* layout. +* +* An item is said to be in a "viewable" state when any of the following +* is true for longer than `minimumViewTime` milliseconds (after an interaction if `waitForInteraction` +* is true): +* +* - Occupying >= `viewAreaCoveragePercentThreshold` of the view area XOR fraction of the item +* visible in the view area >= `itemVisiblePercentThreshold`. +* - Entirely visible on screen +*/ +class ViewabilityHelper { + _config: ViewabilityConfig; + _hasInteracted: boolean = false; + _lastUpdateTime: number = 0; + _timers: Set = new Set(); + _viewableIndices: Array = []; + _viewableItems: Map = new Map(); + + constructor(config: ViewabilityConfig = {viewAreaCoveragePercentThreshold: 0}) { + this._config = config; + } + + /** + * Cleanup, e.g. on unmount. Clears any pending timers. + */ + dispose() { + this._timers.forEach(clearTimeout); + } + + /** + * Determines which items are viewable based on the current metrics and config. + */ + computeViewableItems( + itemCount: number, + scrollOffset: number, + viewportHeight: number, + getFrameMetrics: (index: number) => ?{length: number, offset: number}, + renderRange?: {first: number, last: number}, // Optional optimization to reduce the scan size + ): Array { + const {itemVisiblePercentThreshold, viewAreaCoveragePercentThreshold} = this._config; + const viewAreaMode = viewAreaCoveragePercentThreshold != null; + const viewablePercentThreshold = viewAreaMode ? + viewAreaCoveragePercentThreshold : + itemVisiblePercentThreshold; + invariant( + viewablePercentThreshold != null && + (itemVisiblePercentThreshold != null) !== (viewAreaCoveragePercentThreshold != null), + 'Must set exactly one of itemVisiblePercentThreshold or viewAreaCoveragePercentThreshold', + ); + const viewableIndices = []; + if (itemCount === 0) { + return viewableIndices; + } + let firstVisible = -1; + const {first, last} = renderRange || {first: 0, last: itemCount - 1}; + invariant( + last < itemCount, + 'Invalid render range ' + JSON.stringify({renderRange, itemCount}) + ); + for (let idx = first; idx <= last; idx++) { + const metrics = getFrameMetrics(idx); + if (!metrics) { + continue; + } + const top = metrics.offset - scrollOffset; + const bottom = top + metrics.length; + if ((top < viewportHeight) && (bottom > 0)) { + firstVisible = idx; + if (_isViewable( + viewAreaMode, + viewablePercentThreshold, + top, + bottom, + viewportHeight, + metrics.length, + )) { + viewableIndices.push(idx); + } + } else if (firstVisible >= 0) { + break; + } + } + return viewableIndices; + } + + /** + * Figures out which items are viewable and how that has changed from before and calls + * `onViewableItemsChanged` as appropriate. + */ + onUpdate( + itemCount: number, + scrollOffset: number, + viewportHeight: number, + getFrameMetrics: (index: number) => ?{length: number, offset: number}, + createViewToken: (index: number, isViewable: boolean) => ViewToken, + onViewableItemsChanged: ({viewableItems: Array, changed: Array}) => void, + renderRange?: {first: number, last: number}, // Optional optimization to reduce the scan size + ): void { + const updateTime = Date.now(); + if (this._lastUpdateTime === 0 && itemCount > 0 && getFrameMetrics(0)) { + // Only count updates after the first item is rendered and has a frame. + this._lastUpdateTime = updateTime; + } + const updateElapsed = this._lastUpdateTime ? updateTime - this._lastUpdateTime : 0; + if (this._config.waitForInteraction && !this._hasInteracted) { + return; + } + let viewableIndices = []; + if (itemCount) { + viewableIndices = this.computeViewableItems( + itemCount, + scrollOffset, + viewportHeight, + getFrameMetrics, + renderRange, + ); + } + if (this._viewableIndices.length === viewableIndices.length && + this._viewableIndices.every((v, ii) => v === viewableIndices[ii])) { + // We might get a lot of scroll events where visibility doesn't change and we don't want to do + // extra work in those cases. + return; + } + this._viewableIndices = viewableIndices; + this._lastUpdateTime = updateTime; + if (this._config.minimumViewTime && updateElapsed < this._config.minimumViewTime) { + const handle = setTimeout( + () => { + this._timers.delete(handle); + this._onUpdateSync(viewableIndices, onViewableItemsChanged, createViewToken); + }, + this._config.minimumViewTime, + ); + this._timers.add(handle); + } else { + this._onUpdateSync(viewableIndices, onViewableItemsChanged, createViewToken); + } + } + + /** + * Records that an interaction has happened even if there has been no scroll. + */ + recordInteraction() { + this._hasInteracted = true; + } + + _onUpdateSync(viewableIndicesToCheck, onViewableItemsChanged, createViewToken) { + // Filter out indices that have gone out of view since this call was scheduled. + viewableIndicesToCheck = viewableIndicesToCheck.filter( + (ii) => this._viewableIndices.includes(ii) + ); + const prevItems = this._viewableItems; + const nextItems = new Map( + viewableIndicesToCheck.map(ii => { + const viewable = createViewToken(ii, true); + return [viewable.key, viewable]; + }) + ); + + const changed = []; + for (const [key, viewable] of nextItems) { + if (!prevItems.has(key)) { + changed.push(viewable); + } + } + for (const [key, viewable] of prevItems) { + if (!nextItems.has(key)) { + changed.push({...viewable, isViewable: false}); + } + } + if (changed.length > 0) { + this._viewableItems = nextItems; + onViewableItemsChanged({viewableItems: Array.from(nextItems.values()), changed}); + } + } +} + + +function _isViewable( + viewAreaMode: boolean, + viewablePercentThreshold: number, + top: number, + bottom: number, + viewportHeight: number, + itemLength: number, +): bool { + if (_isEntirelyVisible(top, bottom, viewportHeight)) { + return true; + } else { + const pixels = _getPixelsVisible(top, bottom, viewportHeight); + const percent = 100 * (viewAreaMode ? pixels / viewportHeight : pixels / itemLength); + return percent >= viewablePercentThreshold; + } +} + +function _getPixelsVisible( + top: number, + bottom: number, + viewportHeight: number +): number { + const visibleHeight = Math.min(bottom, viewportHeight) - Math.max(top, 0); + return Math.max(0, visibleHeight); +} + +function _isEntirelyVisible( + top: number, + bottom: number, + viewportHeight: number +): bool { + return top >= 0 && bottom <= viewportHeight && bottom > top; +} + +module.exports = ViewabilityHelper; diff --git a/Libraries/Lists/VirtualizeUtils.js b/Libraries/Lists/VirtualizeUtils.js new file mode 100644 index 0000000..e03fa4d --- /dev/null +++ b/Libraries/Lists/VirtualizeUtils.js @@ -0,0 +1,163 @@ +/** + * 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 VirtualizeUtils + * @flow + */ +'use strict'; + +const invariant = require('fbjs/lib/invariant'); + +/** + * Used to find the indices of the frames that overlap the given offsets. Useful for finding the + * items that bound different windows of content, such as the visible area or the buffered overscan + * area. + */ +function elementsThatOverlapOffsets( + offsets: Array, + itemCount: number, + getFrameMetrics: (index: number) => {length: number, offset: number}, +): Array { + const out = []; + for (let ii = 0; ii < itemCount; ii++) { + const frame = getFrameMetrics(ii); + const trailingOffset = frame.offset + frame.length; + for (let kk = 0; kk < offsets.length; kk++) { + if (out[kk] == null && trailingOffset >= offsets[kk]) { + out[kk] = ii; + if (kk === offsets.length - 1) { + invariant( + out.length === offsets.length, + 'bad offsets input, should be in increasing order ' + JSON.stringify(offsets) + ); + return out; + } + } + } + } + return out; +} + +/** + * Computes the number of elements in the `next` range that are new compared to the `prev` range. + * Handy for calculating how many new items will be rendered when the render window changes so we + * can restrict the number of new items render at once so that content can appear on the screen + * faster. + */ +function newRangeCount( + prev: {first: number, last: number}, + next: {first: number, last: number}, +): number { + return (next.last - next.first + 1) - + Math.max( + 0, + 1 + Math.min(next.last, prev.last) - Math.max(next.first, prev.first) + ); +} + +/** + * Custom logic for determining which items should be rendered given the current frame and scroll + * metrics, as well as the previous render state. The algorithm may evolve over time, but generally + * prioritizes the visible area first, then expands that with overscan regions ahead and behind, + * biased in the direction of scroll. + */ +function computeWindowedRenderLimits( + props: { + data: any, + getItemCount: (data: any) => number, + maxToRenderPerBatch: number, + windowSize: number, + }, + prev: {first: number, last: number}, + getFrameMetricsApprox: (index: number) => {length: number, offset: number}, + scrollMetrics: {dt: number, offset: number, velocity: number, visibleLength: number}, +): {first: number, last: number} { + const {data, getItemCount, maxToRenderPerBatch, windowSize} = props; + const itemCount = getItemCount(data); + if (itemCount === 0) { + return prev; + } + const {offset, velocity, visibleLength} = scrollMetrics; + + // Start with visible area, then compute maximum overscan region by expanding from there, biased + // in the direction of scroll. Total overscan area is capped, which should cap memory consumption + // too. + const visibleBegin = Math.max(0, offset); + const visibleEnd = visibleBegin + visibleLength; + const overscanLength = (windowSize - 1) * visibleLength; + const leadFactor = Math.max(0, Math.min(1, velocity / 5 + 0.5)); + const overscanBegin = Math.max(0, visibleBegin - (1 - leadFactor) * overscanLength); + const overscanEnd = Math.max(0, visibleEnd + leadFactor * overscanLength); + + // Find the indices that correspond to the items at the render boundaries we're targetting. + let [overscanFirst, first, last, overscanLast] = elementsThatOverlapOffsets( + [overscanBegin, visibleBegin, visibleEnd, overscanEnd], + props.getItemCount(props.data), + getFrameMetricsApprox, + ); + overscanFirst = overscanFirst == null ? 0 : overscanFirst; + first = first == null ? Math.max(0, overscanFirst) : first; + overscanLast = overscanLast == null ? (itemCount - 1) : overscanLast; + last = last == null ? Math.min(overscanLast, first + maxToRenderPerBatch - 1) : last; + const visible = {first, last}; + + // We want to limit the number of new cells we're rendering per batch so that we can fill the + // content on the screen quickly. If we rendered the entire overscan window at once, the user + // could be staring at white space for a long time waiting for a bunch of offscreen content to + // render. + let newCellCount = newRangeCount(prev, visible); + + while (true) { + if (first <= overscanFirst && last >= overscanLast) { + // If we fill the entire overscan range, we're done. + break; + } + const maxNewCells = newCellCount >= maxToRenderPerBatch; + const firstWillAddMore = first <= prev.first || first > prev.last; + const firstShouldIncrement = first > overscanFirst && (!maxNewCells || !firstWillAddMore); + const lastWillAddMore = last >= prev.last || last < prev.first; + const lastShouldIncrement = last < overscanLast && (!maxNewCells || !lastWillAddMore); + if (maxNewCells && !firstShouldIncrement && !lastShouldIncrement) { + // We only want to stop if we've hit maxNewCells AND we cannot increment first or last + // without rendering new items. This let's us preserve as many already rendered items as + // possible, reducing render churn and keeping the rendered overscan range as large as + // possible. + break; + } + if (firstShouldIncrement) { + if (firstWillAddMore) { + newCellCount++; + } + first--; + } + if (lastShouldIncrement) { + if (lastWillAddMore) { + newCellCount++; + } + last++; + } + } + if (!( + last >= first && + first >= 0 && last < itemCount && + first >= overscanFirst && last <= overscanLast && + first <= visible.first && last >= visible.last + )) { + throw new Error('Bad window calculation ' + + JSON.stringify({first, last, itemCount, overscanFirst, overscanLast, visible})); + } + return {first, last}; +} + +const VirtualizeUtils = { + computeWindowedRenderLimits, + elementsThatOverlapOffsets, + newRangeCount, +}; + +module.exports = VirtualizeUtils; diff --git a/Libraries/Lists/VirtualizedList.js b/Libraries/Lists/VirtualizedList.js new file mode 100644 index 0000000..c532e1a --- /dev/null +++ b/Libraries/Lists/VirtualizedList.js @@ -0,0 +1,740 @@ +/** + * 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. + * + * Facebook, Inc. ("Facebook") owns all right, title and interest, including + * all intellectual property and other proprietary rights, in and to the React + * Native CustomComponents software (the "Software"). Subject to your + * compliance with these terms, you are hereby granted a non-exclusive, + * worldwide, royalty-free copyright license to (1) use and copy the Software; + * and (2) reproduce and distribute the Software as part of your own software + * ("Your Software"). Facebook reserves all rights not expressly granted to + * you in this license agreement. + * + * THE SOFTWARE AND DOCUMENTATION, IF ANY, ARE PROVIDED "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES (INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE) ARE DISCLAIMED. + * IN NO EVENT SHALL FACEBOOK OR ITS AFFILIATES, OFFICERS, DIRECTORS OR + * EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * @providesModule VirtualizedList + * @flow + */ +'use strict'; + +const Batchinator = require('Batchinator'); +const React = require('React'); +const ReactNative = require('ReactNative'); +const RefreshControl = require('RefreshControl'); +const ScrollView = require('ScrollView'); +const View = require('View'); +const ViewabilityHelper = require('ViewabilityHelper'); + +const infoLog = require('infoLog'); +const invariant = require('fbjs/lib/invariant'); + +const {computeWindowedRenderLimits} = require('VirtualizeUtils'); + +import type {ViewabilityConfig, ViewToken} from 'ViewabilityHelper'; + +type Item = any; +type renderItemType = (info: {item: Item, index: number}) => ?React.Element; + +type RequiredProps = { + renderItem: renderItemType, + /** + * The default accessor functions assume this is an Array<{key: string}> but you can override + * getItem, getItemCount, and keyExtractor to handle any type of index-based data. + */ + data?: any, +}; +type OptionalProps = { + /** + * `debug` will turn on extra logging and visual overlays to aid with debugging both usage and + * implementation, but with a significant perf hit. + */ + debug?: ?boolean, + /** + * DEPRECATED: Virtualization provides significant performance and memory optimizations, but fully + * unmounts react instances that are outside of the render window. You should only need to disable + * this for debugging purposes. + */ + disableVirtualization: boolean, + /** + * A generic accessor for extracting an item from any sort of data blob. + */ + getItem: (data: any, index: number) => ?Item, + /** + * Determines how many items are in the data blob. + */ + getItemCount: (data: any) => number, + getItemLayout?: (data: any, index: number) => + {length: number, offset: number, index: number}, // e.g. height, y + horizontal?: ?boolean, + /** + * How many items to render in the initial batch. This should be enough to fill the screen but not + * much more. + */ + initialNumToRender: number, + keyExtractor: (item: Item, index: number) => string, + /** + * The maximum number of items to render in each incremental render batch. The more rendered at + * once, the better the fill rate, but responsiveness my suffer because rendering content may + * interfere with responding to button taps or other interactions. + */ + maxToRenderPerBatch: number, + onEndReached?: ?(info: {distanceFromEnd: number}) => void, + onEndReachedThreshold?: ?number, // units of visible length + onLayout?: ?Function, + /** + * If provided, a standard RefreshControl will be added for "Pull to Refresh" functionality. Make + * sure to also set the `refreshing` prop correctly. + */ + onRefresh?: ?Function, + /** + * Called when the viewability of rows changes, as defined by the + * `viewabilityConfig` prop. + */ + onViewableItemsChanged?: ?(info: {viewableItems: Array, changed: Array}) => void, + /** + * Set this true while waiting for new data from a refresh. + */ + refreshing?: ?boolean, + /** + * A native optimization that removes clipped subviews (those outside the parent) from the view + * hierarchy to offload work from the native rendering system. They are still kept around so no + * memory is saved and state is preserved. + */ + removeClippedSubviews?: boolean, + /** + * Render a custom scroll component, e.g. with a differently styled `RefreshControl`. + */ + renderScrollComponent: (props: Object) => React.Element, + shouldItemUpdate: ( + props: {item: Item, index: number}, + nextProps: {item: Item, index: number} + ) => boolean, + /** + * Amount of time between low-pri item render batches, e.g. for rendering items quite a ways off + * screen. Similar fill rate/responsiveness tradeoff as `maxToRenderPerBatch`. + */ + updateCellsBatchingPeriod: number, + viewabilityConfig?: ViewabilityConfig, + /** + * Determines the maximum number of items rendered outside of the visible area, in units of + * visible lengths. So if your list fills the screen, then `windowSize={21}` (the default) will + * render the visible screen area plus up to 10 screens above and 10 below the viewport. Reducing + * this number will reduce memory consumption and may improve performance, but will increase the + * chance that fast scrolling may reveal momentary blank areas of unrendered content. + */ + windowSize: number, +}; +export type Props = RequiredProps & OptionalProps; + +let _usedIndexForKey = false; + +type State = {first: number, last: number}; + +/** + * Base implementation for the more convenient [``](/react-native/docs/flatlist.html) + * and [``](/react-native/docs/sectionlist.html) components, which are also better + * documented. In general, this should only really be used if you need more flexibility than + * `FlatList` provides, e.g. for use with immutable data instead of plain arrays. + * + * Virtualization massively improves memory consumption and performance of large lists by + * maintaining a finite render window of active items and replacing all items outside of the render + * window with appropriately sized blank space. The window adapts to scrolling behavior, and items + * are rendered incrementally with low-pri (after any running interactions) if they are far from the + * visible area, or with hi-pri otherwise to minimize the potential of seeing blank space. + * + * Some caveats: + * + * - Internal state is not preserved when content scrolls out of the render window. Make sure all + * your data is captured in the item data or external stores like Flux, Redux, or Relay. + * - This is a `PureComponent` which means that it will not re-render if `props` remain shallow- + * equal. Make sure that everything your `renderItem` function depends on is passed as a prop that + * is not `===` after updates, otherwise your UI may not update on changes. This includes the + * `data` prop and parent component state. + * - In order to constrain memory and enable smooth scrolling, content is rendered asynchronously + * offscreen. This means it's possible to scroll faster than the fill rate ands momentarily see + * blank content. This is a tradeoff that can be adjusted to suit the needs of each application, + * and we are working on improving it behind the scenes. + * - By default, the list looks for a `key` prop on each item and uses that for the React key. + * Alternatively, you can provide a custom `keyExtractor` prop. + * + * NOTE: `LayoutAnimation` and sticky section headers both have bugs when used with this and are + * therefore not officially supported yet. + * + * NOTE: `removeClippedSubviews` might not be necessary and may cause bugs. If you see issues with + * content not rendering, try disabling it, and we may change the default there. + */ +class VirtualizedList extends React.PureComponent { + props: Props; + + // scrollToEnd may be janky without getItemLayout prop + scrollToEnd(params?: ?{animated?: ?boolean}) { + const animated = params ? params.animated : true; + const veryLast = this.props.getItemCount(this.props.data) - 1; + const frame = this._getFrameMetricsApprox(veryLast); + const offset = frame.offset + frame.length + this._footerLength - + this._scrollMetrics.visibleLength; + this._scrollRef.scrollTo( + this.props.horizontal ? {x: offset, animated} : {y: offset, animated} + ); + } + + // scrollToIndex may be janky without getItemLayout prop + scrollToIndex(params: {animated?: ?boolean, index: number, viewPosition?: number}) { + const {data, horizontal, getItemCount} = this.props; + const {animated, index, viewPosition} = params; + if (!(index >= 0 && index < getItemCount(data))) { + console.warn('scrollToIndex out of range ' + index); + return; + } + const frame = this._getFrameMetricsApprox(index); + const offset = Math.max( + 0, + frame.offset - (viewPosition || 0) * (this._scrollMetrics.visibleLength - frame.length), + ); + this._scrollRef.scrollTo(horizontal ? {x: offset, animated} : {y: offset, animated}); + } + + // scrollToItem may be janky without getItemLayout prop. Required linear scan through items - + // use scrollToIndex instead if possible. + scrollToItem(params: {animated?: ?boolean, item: Item, viewPosition?: number}) { + const {item} = params; + const {data, getItem, getItemCount} = this.props; + const itemCount = getItemCount(data); + for (let index = 0; index < itemCount; index++) { + if (getItem(data, index) === item) { + this.scrollToIndex({...params, index}); + break; + } + } + } + + scrollToOffset(params: {animated?: ?boolean, offset: number}) { + const {animated, offset} = params; + this._scrollRef.scrollTo( + this.props.horizontal ? {x: offset, animated} : {y: offset, animated} + ); + } + + recordInteraction() { + this._viewabilityHelper.recordInteraction(); + this._updateViewableItems(this.props.data); + } + + getScrollableNode() { + if (this._scrollRef && this._scrollRef.getScrollableNode) { + return this._scrollRef.getScrollableNode(); + } else { + return ReactNative.findNodeHandle(this._scrollRef); + } + } + + static defaultProps = { + disableVirtualization: false, + getItem: (data: any, index: number) => data[index], + getItemCount: (data: any) => data ? data.length : 0, + horizontal: false, + initialNumToRender: 10, + keyExtractor: (item: Item, index: number) => { + if (item.key != null) { + return item.key; + } + _usedIndexForKey = true; + return String(index); + }, + maxToRenderPerBatch: 10, + onEndReached: () => {}, + onEndReachedThreshold: 2, // multiples of length + removeClippedSubviews: true, + renderScrollComponent: (props: Props) => { + if (props.onRefresh) { + invariant( + typeof props.refreshing === 'boolean', + '`refreshing` prop must be set as a boolean in order to use `onRefresh`, but got `' + + JSON.stringify(props.refreshing) + '`', + ); + return ( + + } + /> + ); + } else { + return ; + } + }, + shouldItemUpdate: ( + props: {item: Item, index: number}, + nextProps: {item: Item, index: number}, + ) => true, + updateCellsBatchingPeriod: 50, + windowSize: 21, // multiples of length + }; + + state: State = { + first: 0, + last: this.props.initialNumToRender, + }; + + constructor(props: Props) { + super(props); + invariant( + !props.onScroll || !props.onScroll.__isNative, + 'Components based on VirtualizedList must be wrapped with Animated.createAnimatedComponent ' + + 'to support native onScroll events with useNativeDriver', + ); + + this._updateCellsToRenderBatcher = new Batchinator( + this._updateCellsToRender, + this.props.updateCellsBatchingPeriod, + ); + this._viewabilityHelper = new ViewabilityHelper(this.props.viewabilityConfig); + this.state = { + first: 0, + last: Math.min(this.props.getItemCount(this.props.data), this.props.initialNumToRender) - 1, + }; + } + + componentWillUnmount() { + this._updateViewableItems(null); + this._updateCellsToRenderBatcher.dispose(); + this._viewabilityHelper.dispose(); + } + + componentWillReceiveProps(newProps: Props) { + const {data, getItemCount, maxToRenderPerBatch} = newProps; + // first and last could be stale (e.g. if a new, shorter items props is passed in), so we make + // sure we're rendering a reasonable range here. + this.setState({ + first: Math.max(0, Math.min(this.state.first, getItemCount(data) - 1 - maxToRenderPerBatch)), + last: Math.max(0, Math.min(this.state.last, getItemCount(data) - 1)), + }); + this._updateCellsToRenderBatcher.schedule(); + } + + _pushCells(cells, first, last) { + const {ItemSeparatorComponent, data, getItem, getItemCount, keyExtractor} = this.props; + const end = getItemCount(data) - 1; + last = Math.min(end, last); + for (let ii = first; ii <= last; ii++) { + const item = getItem(data, ii); + invariant(item, 'No item for index ' + ii); + const key = keyExtractor(item, ii); + cells.push( + + ); + if (ItemSeparatorComponent && ii < end) { + cells.push(); + } + } + } + render() { + const {ListFooterComponent, ListHeaderComponent} = this.props; + const {data, disableVirtualization, horizontal} = this.props; + const cells = []; + if (ListHeaderComponent) { + cells.push( + + + + ); + } + const itemCount = this.props.getItemCount(data); + if (itemCount > 0) { + _usedIndexForKey = false; + const lastInitialIndex = this.props.initialNumToRender - 1; + const {first, last} = this.state; + this._pushCells(cells, 0, lastInitialIndex); + if (!disableVirtualization && first > lastInitialIndex) { + const initBlock = this._getFrameMetricsApprox(lastInitialIndex); + const firstSpace = this._getFrameMetricsApprox(first).offset - + (initBlock.offset + initBlock.length); + cells.push( + + ); + } + this._pushCells(cells, Math.max(lastInitialIndex + 1, first), last); + if (!this._hasWarned.keys && _usedIndexForKey) { + console.warn( + 'VirtualizedList: missing keys for items, make sure to specify a key property on each ' + + 'item or provide a custom keyExtractor.' + ); + this._hasWarned.keys = true; + } + if (!disableVirtualization && last < itemCount - 1) { + const lastFrame = this._getFrameMetricsApprox(last); + const end = this.props.getItemLayout ? + itemCount - 1 : + Math.min(itemCount - 1, this._highestMeasuredFrameIndex); + const endFrame = this._getFrameMetricsApprox(end); + const tailSpacerLength = + (endFrame.offset + endFrame.length) - + (lastFrame.offset + lastFrame.length); + cells.push( + + ); + } + } + if (ListFooterComponent) { + cells.push( + + + + ); + } + const ret = React.cloneElement( + this.props.renderScrollComponent(this.props), + { + onContentSizeChange: this._onContentSizeChange, + onLayout: this._onLayout, + onScroll: this._onScroll, + onScrollBeginDrag: this._onScrollBeginDrag, + ref: this._captureScrollRef, + scrollEventThrottle: 50, // TODO: Android support + }, + cells, + ); + if (this.props.debug) { + return {ret}{this._renderDebugOverlay()}; + } else { + return ret; + } + } + + componentDidUpdate() { + this._updateCellsToRenderBatcher.schedule(); + } + + _averageCellLength = 0; + _hasWarned = {}; + _highestMeasuredFrameIndex = 0; + _headerLength = 0; + _frames = {}; + _footerLength = 0; + _scrollMetrics = { + visibleLength: 0, contentLength: 0, offset: 0, dt: 10, velocity: 0, timestamp: 0, + }; + _scrollRef = (null: any); + _sentEndForContentLength = 0; + _totalCellLength = 0; + _totalCellsMeasured = 0; + _updateCellsToRenderBatcher: Batchinator; + _viewabilityHelper: ViewabilityHelper; + + _captureScrollRef = (ref) => { + this._scrollRef = ref; + }; + + _onCellLayout = (e, cellKey, index) => { + const layout = e.nativeEvent.layout; + const next = { + offset: this._selectOffset(layout), + length: this._selectLength(layout), + index, + inLayout: true, + }; + const curr = this._frames[cellKey]; + if (!curr || + next.offset !== curr.offset || + next.length !== curr.length || + index !== curr.index + ) { + this._totalCellLength += next.length - (curr ? curr.length : 0); + this._totalCellsMeasured += (curr ? 0 : 1); + this._averageCellLength = this._totalCellLength / this._totalCellsMeasured; + this._frames[cellKey] = next; + this._highestMeasuredFrameIndex = Math.max(this._highestMeasuredFrameIndex, index); + this._updateCellsToRenderBatcher.schedule(); + } + }; + + _onCellUnmount = (cellKey: string) => { + const curr = this._frames[cellKey]; + if (curr) { + this._frames[cellKey] = {...curr, inLayout: false}; + } + }; + + _onLayout = (e: Object) => { + this._scrollMetrics.visibleLength = this._selectLength(e.nativeEvent.layout); + this.props.onLayout && this.props.onLayout(e); + this._updateCellsToRenderBatcher.schedule(); + }; + + _onLayoutFooter = (e) => { + this._footerLength = this._selectLength(e.nativeEvent.layout); + }; + + _onLayoutHeader = (e) => { + this._headerLength = this._selectLength(e.nativeEvent.layout); + }; + + _renderDebugOverlay() { + const normalize = this._scrollMetrics.visibleLength / this._scrollMetrics.contentLength; + const framesInLayout = []; + const itemCount = this.props.getItemCount(this.props.data); + for (let ii = 0; ii < itemCount; ii++) { + const frame = this._getFrameMetricsApprox(ii); + if (frame.inLayout) { + framesInLayout.push(frame); + } + } + const windowTop = this._getFrameMetricsApprox(this.state.first).offset; + const frameLast = this._getFrameMetricsApprox(this.state.last); + const windowLen = frameLast.offset + frameLast.length - windowTop; + const visTop = this._scrollMetrics.offset; + const visLen = this._scrollMetrics.visibleLength; + const baseStyle = {position: 'absolute', top: 0, right: 0}; + return ( + + {framesInLayout.map((f, ii) => + + )} + + + + ); + } + + _selectLength(metrics: {height: number, width: number}): number { + return !this.props.horizontal ? metrics.height : metrics.width; + } + + _selectOffset(metrics: {x: number, y: number}): number { + return !this.props.horizontal ? metrics.y : metrics.x; + } + + _onContentSizeChange = (width: number, height: number) => { + this._scrollMetrics.contentLength = this._selectLength({height, width}); + this._updateCellsToRenderBatcher.schedule(); + }; + + _onScroll = (e: Object) => { + if (this.props.onScroll) { + this.props.onScroll(e); + } + const timestamp = e.timeStamp; + const visibleLength = this._selectLength(e.nativeEvent.layoutMeasurement); + const contentLength = this._selectLength(e.nativeEvent.contentSize); + const offset = this._selectOffset(e.nativeEvent.contentOffset); + const dt = Math.max(1, timestamp - this._scrollMetrics.timestamp); + if (dt > 500 && this._scrollMetrics.dt > 500 && (contentLength > (5 * visibleLength)) && + !this._hasWarned.perf) { + infoLog( + 'VirtualizedList: You have a large list that is slow to update - make sure ' + + 'shouldItemUpdate is implemented effectively and consider getItemLayout, PureComponent, ' + + 'etc.', + {dt, prevDt: this._scrollMetrics.dt, contentLength}, + ); + this._hasWarned.perf = true; + } + const dOffset = offset - this._scrollMetrics.offset; + const velocity = dOffset / dt; + this._scrollMetrics = {contentLength, dt, offset, timestamp, velocity, visibleLength}; + const {data, getItemCount, onEndReached, onEndReachedThreshold, windowSize} = this.props; + this._updateViewableItems(data); + if (!data) { + return; + } + const distanceFromEnd = contentLength - visibleLength - offset; + const itemCount = getItemCount(data); + if (distanceFromEnd < onEndReachedThreshold * visibleLength && + this._scrollMetrics.contentLength !== this._sentEndForContentLength && + this.state.last === itemCount - 1) { + // Only call onEndReached for a given content length once. + this._sentEndForContentLength = this._scrollMetrics.contentLength; + onEndReached({distanceFromEnd}); + } + const {first, last} = this.state; + if ((first > 0 && velocity < 0) || (last < itemCount - 1 && velocity > 0)) { + const distanceToContentEdge = Math.min( + Math.abs(this._getFrameMetricsApprox(first).offset - offset), + Math.abs(this._getFrameMetricsApprox(last).offset - (offset + visibleLength)), + ); + const hiPri = distanceToContentEdge < (windowSize * visibleLength / 4); + if (hiPri) { + // Don't worry about interactions when scrolling quickly; focus on filling content as fast + // as possible. + this._updateCellsToRenderBatcher.dispose({abort: true}); + this._updateCellsToRender(); + return; + } + } + this._updateCellsToRenderBatcher.schedule(); + }; + + _onScrollBeginDrag = (e): void => { + this._viewabilityHelper.recordInteraction(); + this.props.onScrollBeginDrag && this.props.onScrollBeginDrag(e); + }; + _updateCellsToRender = () => { + const {data, disableVirtualization, getItemCount, onEndReachedThreshold} = this.props; + this._updateViewableItems(data); + if (!data) { + return; + } + this.setState((state) => { + let newState; + if (!disableVirtualization) { + newState = computeWindowedRenderLimits( + this.props, state, this._getFrameMetricsApprox, this._scrollMetrics, + ); + } else { + const {contentLength, offset, visibleLength} = this._scrollMetrics; + const distanceFromEnd = contentLength - visibleLength - offset; + const renderAhead = distanceFromEnd < onEndReachedThreshold * visibleLength ? + this.props.maxToRenderPerBatch : 0; + newState = { + first: 0, + last: Math.min(state.last + renderAhead, getItemCount(data) - 1), + }; + } + return newState; + }); + }; + + _createViewToken = (index: number, isViewable: boolean) => { + const {data, getItem, keyExtractor} = this.props; + const item = getItem(data, index); + invariant(item, 'Missing item for index ' + index); + return {index, item, key: keyExtractor(item, index), isViewable}; + }; + + _getFrameMetricsApprox = (index: number): {length: number, offset: number} => { + const frame = this._getFrameMetrics(index); + if (frame && frame.index === index) { // check for invalid frames due to row re-ordering + return frame; + } else { + const {getItemLayout} = this.props; + invariant( + !getItemLayout, + 'Should not have to estimate frames when a measurement metrics function is provided' + ); + return { + length: this._averageCellLength, + offset: this._averageCellLength * index, + }; + } + }; + + _getFrameMetrics = (index: number): ?{length: number, offset: number, index: number} => { + const {data, getItem, getItemCount, getItemLayout, keyExtractor} = this.props; + invariant(getItemCount(data) > index, 'Tried to get frame for out of range index ' + index); + const item = getItem(data, index); + let frame = item && this._frames[keyExtractor(item, index)]; + if (!frame || frame.index !== index) { + if (getItemLayout) { + frame = getItemLayout(data, index); + } + } + return frame; + }; + + _updateViewableItems(data: any) { + const {getItemCount, onViewableItemsChanged} = this.props; + if (!onViewableItemsChanged) { + return; + } + this._viewabilityHelper.onUpdate( + getItemCount(data), + this._scrollMetrics.offset, + this._scrollMetrics.visibleLength, + this._getFrameMetrics, + this._createViewToken, + onViewableItemsChanged, + this.state, + ); + } +} + +class CellRenderer extends React.Component { + props: { + cellKey: string, + index: number, + item: Item, + onLayout: (event: Object, cellKey: string, index: number) => void, + onUnmount: (cellKey: string) => void, + parentProps: { + renderItem: renderItemType, + getItemLayout?: ?Function, + shouldItemUpdate: ( + props: {item: Item, index: number}, + nextProps: {item: Item, index: number} + ) => boolean, + }, + }; + _onLayout = (e) => { + this.props.onLayout(e, this.props.cellKey, this.props.index); + } + componentWillUnmount() { + this.props.onUnmount(this.props.cellKey); + } + shouldComponentUpdate(nextProps, nextState) { + const curr = {item: this.props.item, index: this.props.index}; + const next = {item: nextProps.item, index: nextProps.index}; + return nextProps.parentProps.shouldItemUpdate(curr, next); + } + render() { + const {item, index, parentProps} = this.props; + const {renderItem, getItemLayout} = parentProps; + invariant(renderItem, 'no renderItem!'); + const element = renderItem({item, index}); + if (getItemLayout && !parentProps.debug) { + return element; + } + return ( + + {element} + + ); + } +} + +module.exports = VirtualizedList; diff --git a/Libraries/Lists/VirtualizedSectionList.js b/Libraries/Lists/VirtualizedSectionList.js new file mode 100644 index 0000000..cd4312e --- /dev/null +++ b/Libraries/Lists/VirtualizedSectionList.js @@ -0,0 +1,319 @@ +/** + * 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. + * + * Facebook, Inc. ("Facebook") owns all right, title and interest, including + * all intellectual property and other proprietary rights, in and to the React + * Native CustomComponents software (the "Software"). Subject to your + * compliance with these terms, you are hereby granted a non-exclusive, + * worldwide, royalty-free copyright license to (1) use and copy the Software; + * and (2) reproduce and distribute the Software as part of your own software + * ("Your Software"). Facebook reserves all rights not expressly granted to + * you in this license agreement. + * + * THE SOFTWARE AND DOCUMENTATION, IF ANY, ARE PROVIDED "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES (INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE) ARE DISCLAIMED. + * IN NO EVENT SHALL FACEBOOK OR ITS AFFILIATES, OFFICERS, DIRECTORS OR + * EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * @providesModule VirtualizedSectionList + * @flow + */ +'use strict'; + +const React = require('React'); +const View = require('View'); +const VirtualizedList = require('VirtualizedList'); + +const invariant = require('fbjs/lib/invariant'); +const warning = require('fbjs/lib/warning'); + +import type {ViewToken} from 'ViewabilityHelper'; +import type {Props as VirtualizedListProps} from 'VirtualizedList'; + +type Item = any; +type SectionItem = any; + +type SectionBase = { + // Must be provided directly on each section. + data: Array, + key: string, + + // Optional props will override list-wide props just for this section. + renderItem?: ?({item: SectionItem, index: number}) => ?React.Element<*>, + SeparatorComponent?: ?ReactClass<*>, + keyExtractor?: (item: SectionItem) => string, + + // TODO: support more optional/override props + // FooterComponent?: ?ReactClass<*>, + // HeaderComponent?: ?ReactClass<*>, + // onViewableItemsChanged?: ({viewableItems: Array, changed: Array}) => void, +}; + +type RequiredProps = { + sections: Array, +}; + +type OptionalProps = { + /** + * Rendered after the last item in the last section. + */ + ListFooterComponent?: ?ReactClass<*>, + /** + * Rendered at the very beginning of the list. + */ + ListHeaderComponent?: ?ReactClass<*>, + /** + * Default renderer for every item in every section. + */ + renderItem: ({item: Item, index: number}) => ?React.Element<*>, + /** + * Rendered at the top of each section. In the future, a sticky option will be added. + */ + renderSectionHeader?: ?({section: SectionT}) => ?React.Element<*>, + /** + * Rendered at the bottom of every Section, except the very last one, in place of the normal + * ItemSeparatorComponent. + */ + SectionSeparatorComponent?: ?ReactClass<*>, + /** + * Rendered at the bottom of every Item except the very last one in the last section. + */ + ItemSeparatorComponent?: ?ReactClass<*>, + /** + * Warning: Virtualization can drastically improve memory consumption for long lists, but trashes + * the state of items when they scroll out of the render window, so make sure all relavent data is + * stored outside of the recursive `renderItem` instance tree. + */ + enableVirtualization?: ?boolean, + keyExtractor: (item: Item, index: number) => string, + onEndReached?: ?({distanceFromEnd: number}) => void, + /** + * If provided, a standard RefreshControl will be added for "Pull to Refresh" functionality. Make + * sure to also set the `refreshing` prop correctly. + */ + onRefresh?: ?Function, + /** + * Called when the viewability of rows changes, as defined by the + * `viewabilityConfig` prop. + */ + onViewableItemsChanged?: ?({viewableItems: Array, changed: Array}) => void, + /** + * Set this true while waiting for new data from a refresh. + */ + refreshing?: ?boolean, + /** + * This is an optional optimization to minimize re-rendering items. + */ + shouldItemUpdate: ( + prevProps: {item: Item, index: number}, + nextProps: {item: Item, index: number} + ) => boolean, +}; + +export type Props = + RequiredProps & + OptionalProps & + VirtualizedListProps; + +type DefaultProps = (typeof VirtualizedList.defaultProps) & {data: Array}; +type State = {childProps: VirtualizedListProps}; + +/** + * Right now this just flattens everything into one list and uses VirtualizedList under the + * hood. The only operation that might not scale well is concatting the data arrays of all the + * sections when new props are received, which should be plenty fast for up to ~10,000 items. + */ +class VirtualizedSectionList + extends React.PureComponent, State> +{ + props: Props; + + state: State; + + static defaultProps: DefaultProps = { + ...VirtualizedList.defaultProps, + data: [], + }; + + _keyExtractor = (item: Item, index: number) => { + const info = this._subExtractor(index); + return (info && info.key) || String(index); + }; + + _subExtractor( + index: number, + ): ?{ + section: SectionT, + key: string, // Key of the section or combined key for section + item + index: ?number, // Relative index within the section + } { + let itemIndex = index; + const defaultKeyExtractor = this.props.keyExtractor; + for (let ii = 0; ii < this.props.sections.length; ii++) { + const section = this.props.sections[ii]; + const key = section.key; + warning( + key != null, + 'VirtualizedSectionList: A `section` you supplied is missing the `key` property.' + ); + itemIndex -= 1; // The section itself is an item + if (itemIndex >= section.data.length) { + itemIndex -= section.data.length; + } else if (itemIndex === -1) { + return {section, key, index: null}; + } else { + const keyExtractor = section.keyExtractor || defaultKeyExtractor; + return { + section, + key: key + ':' + keyExtractor(section.data[itemIndex], itemIndex), + index: itemIndex, + }; + } + } + } + + _convertViewable = (viewable: ViewToken): ?ViewToken => { + invariant(viewable.index != null, 'Received a broken ViewToken'); + const info = this._subExtractor(viewable.index); + if (!info) { + return null; + } + const keyExtractor = info.section.keyExtractor || this.props.keyExtractor; + return { + ...viewable, + index: info.index, + key: keyExtractor(viewable.item, info.index), + section: info.section, + }; + }; + + _onViewableItemsChanged = ( + {viewableItems, changed}: {viewableItems: Array, changed: Array} + ) => { + if (this.props.onViewableItemsChanged) { + this.props.onViewableItemsChanged({ + viewableItems: viewableItems.map(this._convertViewable, this).filter(Boolean), + changed: changed.map(this._convertViewable, this).filter(Boolean), + }); + } + } + + _isItemSticky = (item, index) => { + const info = this._subExtractor(index); + return info && info.index == null; + }; + + _renderItem = ({item, index}: {item: Item, index: number}) => { + const info = this._subExtractor(index); + if (!info) { + return null; + } else if (info.index == null) { + const {renderSectionHeader} = this.props; + return renderSectionHeader ? renderSectionHeader({section: info.section}) : null; + } else { + const renderItem = info.section.renderItem || + this.props.renderItem; + const SeparatorComponent = this._getSeparatorComponent(index, info); + invariant(renderItem, 'no renderItem!'); + return ( + + {renderItem({item, index: info.index || 0})} + {SeparatorComponent && } + + ); + } + }; + + _getSeparatorComponent(index: number, info?: ?Object): ?ReactClass<*> { + info = info || this._subExtractor(index); + if (!info) { + return null; + } + const SeparatorComponent = info.section.SeparatorComponent || this.props.ItemSeparatorComponent; + const {SectionSeparatorComponent} = this.props; + const isLastItemInList = index === this.state.childProps.getItemCount() - 1; + const isLastItemInSection = info.index === info.section.data.length - 1; + if (SectionSeparatorComponent && isLastItemInSection && !isLastItemInList) { + return SectionSeparatorComponent; + } + if (SeparatorComponent && !isLastItemInSection && !isLastItemInList) { + return SeparatorComponent; + } + return null; + } + + _shouldItemUpdate = (prev, next) => { + const {shouldItemUpdate} = this.props; + if (!shouldItemUpdate || shouldItemUpdate(prev, next)) { + return true; + } + return this._getSeparatorComponent(prev.index) !== this._getSeparatorComponent(next.index); + } + + _computeState(props: Props): State { + const itemCount = props.sections.reduce((v, section) => v + section.data.length + 1, 0); + return { + childProps: { + ...props, + renderItem: this._renderItem, + ItemSeparatorComponent: undefined, // Rendered with renderItem + data: props.sections, + getItemCount: () => itemCount, + getItem, + isItemSticky: this._isItemSticky, + keyExtractor: this._keyExtractor, + onViewableItemsChanged: + props.onViewableItemsChanged ? this._onViewableItemsChanged : undefined, + shouldItemUpdate: this._shouldItemUpdate, + }, + }; + } + + constructor(props: Props, context: Object) { + super(props, context); + warning( + !props.stickySectionHeadersEnabled, + 'VirtualizedSectionList: Sticky headers only supported with legacyImplementation for now.' + ); + this.state = this._computeState(props); + } + + componentWillReceiveProps(nextProps: Props) { + this.setState(this._computeState(nextProps)); + } + + render() { + return ; + } +} + +function getItem(sections: ?Array, index: number): ?Item { + if (!sections) { + return null; + } + let itemIdx = index - 1; + for (let ii = 0; ii < sections.length; ii++) { + if (itemIdx === -1) { + return sections[ii]; // The section itself is the item + } else if (itemIdx < sections[ii].data.length) { + return sections[ii].data[itemIdx]; + } else { + itemIdx -= (sections[ii].data.length + 1); + } + } + return null; +} + +module.exports = VirtualizedSectionList; diff --git a/Libraries/Utilties/infoLog.js b/Libraries/Utilties/infoLog.js new file mode 100644 index 0000000..a3798fb --- /dev/null +++ b/Libraries/Utilties/infoLog.js @@ -0,0 +1,20 @@ +/** + * 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 infoLog + */ +'use strict'; + +/** + * Intentional info-level logging for clear separation from ad-hoc console debug logging. + */ +function infoLog(...args) { + return console.log(...args); // eslint-disable-line no-console-disallow +} + +module.exports = infoLog; From f6e8f535a5832f1c81d7f579262df0a0f1a3a69f Mon Sep 17 00:00:00 2001 From: Li Zheng Date: Tue, 9 May 2017 08:13:38 +0800 Subject: [PATCH 005/102] FlatList(step 2): worked well --- Libraries/Interaction/Batchinator.js | 2 +- Libraries/Lists/FlatList.js | 14 +++++++------- Libraries/Lists/MetroListView.js | 8 ++++---- Libraries/Lists/SectionList.js | 6 +++--- Libraries/Lists/VirtualizedList.js | 16 ++++++++-------- Libraries/Lists/VirtualizedSectionList.js | 6 +++--- Libraries/index.js | 3 +++ 7 files changed, 29 insertions(+), 26 deletions(-) diff --git a/Libraries/Interaction/Batchinator.js b/Libraries/Interaction/Batchinator.js index e807e55..a64613e 100644 --- a/Libraries/Interaction/Batchinator.js +++ b/Libraries/Interaction/Batchinator.js @@ -11,7 +11,7 @@ */ 'use strict'; -const InteractionManager = require('InteractionManager'); +import InteractionManager from 'ReactInteractionManager'; /** * A simple class for batching up invocations of a low-pri callback. A timeout is set to run the diff --git a/Libraries/Lists/FlatList.js b/Libraries/Lists/FlatList.js index 10a47cc..ae866b8 100644 --- a/Libraries/Lists/FlatList.js +++ b/Libraries/Lists/FlatList.js @@ -27,16 +27,16 @@ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * @providesModule FlatList + * @providesModule ReactFlatList * @flow */ 'use strict'; const MetroListView = require('MetroListView'); // Used as a fallback legacy option -const React = require('React'); -const ReactNative = require('ReactNative'); -const View = require('View'); -const VirtualizedList = require('VirtualizedList'); +import React from 'react'; +import findNodeHandle from 'ReactfindNodeHandle'; +import View from 'ReactView'; +import VirtualizedList from 'ReactVirtualizedList'; const invariant = require('fbjs/lib/invariant'); @@ -233,7 +233,7 @@ class FlatList extends React.PureComponent, vo if (this._listRef && this._listRef.getScrollableNode) { return this._listRef.getScrollableNode(); } else { - return ReactNative.findNodeHandle(this._listRef); + return findNodeHandle(this._listRef); } } @@ -387,4 +387,4 @@ class FlatList extends React.PureComponent, vo } } -module.exports = FlatList; +export default FlatList; diff --git a/Libraries/Lists/MetroListView.js b/Libraries/Lists/MetroListView.js index 9352412..646bc70 100644 --- a/Libraries/Lists/MetroListView.js +++ b/Libraries/Lists/MetroListView.js @@ -32,10 +32,10 @@ */ 'use strict'; -const ListView = require('ListView'); -const React = require('React'); -const RefreshControl = require('RefreshControl'); -const ScrollView = require('ScrollView'); +import ListView from 'ReactListView'; +import React from 'react'; +import RefreshControl from 'ReactRefreshControl'; +import ScrollView from 'ReactScrollView'; const invariant = require('fbjs/lib/invariant'); diff --git a/Libraries/Lists/SectionList.js b/Libraries/Lists/SectionList.js index 2bc66a6..e43794d 100644 --- a/Libraries/Lists/SectionList.js +++ b/Libraries/Lists/SectionList.js @@ -27,13 +27,13 @@ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * @providesModule SectionList + * @providesModule ReactSectionList * @flow */ 'use strict'; const MetroListView = require('MetroListView'); -const React = require('React'); +import React from 'react'; const VirtualizedSectionList = require('VirtualizedSectionList'); import type {ViewToken} from 'ViewabilityHelper'; @@ -188,4 +188,4 @@ class SectionList> } } -module.exports = SectionList; +export default SectionList; diff --git a/Libraries/Lists/VirtualizedList.js b/Libraries/Lists/VirtualizedList.js index c532e1a..4ae4e4f 100644 --- a/Libraries/Lists/VirtualizedList.js +++ b/Libraries/Lists/VirtualizedList.js @@ -27,17 +27,17 @@ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * @providesModule VirtualizedList + * @providesModule ReactVirtualizedList * @flow */ 'use strict'; const Batchinator = require('Batchinator'); -const React = require('React'); -const ReactNative = require('ReactNative'); -const RefreshControl = require('RefreshControl'); -const ScrollView = require('ScrollView'); -const View = require('View'); +import React from 'react'; +import findNodeHandle from 'ReactfindNodeHandle'; +import RefreshControl from 'ReactRefreshControl'; +import ScrollView from 'ReactScrollView'; +import View from 'ReactView'; const ViewabilityHelper = require('ViewabilityHelper'); const infoLog = require('infoLog'); @@ -239,7 +239,7 @@ class VirtualizedList extends React.PureComponent { if (this._scrollRef && this._scrollRef.getScrollableNode) { return this._scrollRef.getScrollableNode(); } else { - return ReactNative.findNodeHandle(this._scrollRef); + return findNodeHandle(this._scrollRef); } } @@ -737,4 +737,4 @@ class CellRenderer extends React.Component { } } -module.exports = VirtualizedList; +export default VirtualizedList; diff --git a/Libraries/Lists/VirtualizedSectionList.js b/Libraries/Lists/VirtualizedSectionList.js index cd4312e..d96afe3 100644 --- a/Libraries/Lists/VirtualizedSectionList.js +++ b/Libraries/Lists/VirtualizedSectionList.js @@ -32,9 +32,9 @@ */ 'use strict'; -const React = require('React'); -const View = require('View'); -const VirtualizedList = require('VirtualizedList'); +import React from 'react'; +import View from 'ReactView'; +import VirtualizedList from 'ReactVirtualizedList'; const invariant = require('fbjs/lib/invariant'); const warning = require('fbjs/lib/warning'); diff --git a/Libraries/index.js b/Libraries/index.js index 4b4fc01..27b67a5 100644 --- a/Libraries/index.js +++ b/Libraries/index.js @@ -20,6 +20,7 @@ export ActivityIndicatorIOS from 'ReactActivityIndicator'; export ActivityIndicator from 'ReactActivityIndicator'; // export DatePicker from 'ReactDatePicker'; export DrawerLayoutAndroid from 'ReactDrawerLayout'; +export FlatList from 'ReactFlatList'; export Image from 'ReactImage'; export ListView from 'ReactListView'; export Linking from 'ReactLinking'; @@ -29,6 +30,7 @@ export PickerIOS from 'ReactPicker'; export Picker from 'ReactPicker'; export ProgressViewIOS from 'ReactProgressView'; export ScrollView from 'ReactScrollView'; +export SectionList from 'ReactSectionList'; export SegmentedControlIOS from 'ReactSegmentedControl'; export Slider from 'ReactSlider'; export SliderIOS from 'ReactSlider'; @@ -50,6 +52,7 @@ export RefreshControl from 'ReactRefreshControl'; export View from 'ReactView'; export ViewPagerAndroid from 'ReactViewPager'; export ViewPager from 'ReactViewPager'; +export VirtualizedList from 'ReactVirtualizedList'; // APIs From 0d6f5de09319b5a2d53a60dfcbb7b4a2ec89ca9c Mon Sep 17 00:00:00 2001 From: Li Zheng Date: Wed, 10 May 2017 13:23:26 +0800 Subject: [PATCH 006/102] NetInfo: added, ref to https://github.com/necolas/react-native-web/blob/master/src/apis/NetInfo/index.js --- Libraries/NetInfo/NetInfo.web.js | 114 +++++++++++++++++++++++++++++++ Libraries/index.js | 1 + 2 files changed, 115 insertions(+) create mode 100644 Libraries/NetInfo/NetInfo.web.js diff --git a/Libraries/NetInfo/NetInfo.web.js b/Libraries/NetInfo/NetInfo.web.js new file mode 100644 index 0000000..523603e --- /dev/null +++ b/Libraries/NetInfo/NetInfo.web.js @@ -0,0 +1,114 @@ +/** + * Copyright (c) 2015-present, Alibaba Group Holding Limited. + * All rights reserved. + * + * @providesModule ReactNetInfo + */ +'use strict'; + +import ExecutionEnvironment from 'fbjs/lib/ExecutionEnvironment'; +import findIndex from 'array-find-index'; +import invariant from 'fbjs/lib/invariant'; + +const connection = + ExecutionEnvironment.canUseDOM && + (window.navigator.connection || + window.navigator.mozConnection || + window.navigator.webkitConnection); + +const eventTypes = ['change']; + +const connectionListeners = []; + +/** + * Navigator online: https://developer.mozilla.org/en-US/docs/Web/API/NavigatorOnLine/onLine + * Network Connection API: https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation + */ +const NetInfo = { + addEventListener(type: string, handler: Function): { remove: () => void } { + invariant(eventTypes.indexOf(type) !== -1, 'Trying to subscribe to unknown event: "%s"', type); + if (!connection) { + console.error( + 'Network Connection API is not supported. Not listening for connection type changes.' + ); + return { + remove: () => {} + }; + } + + connection.addEventListener(type, handler); + return { + remove: () => NetInfo.removeEventListener(type, handler) + }; + }, + + removeEventListener(type: string, handler: Function): void { + invariant(eventTypes.indexOf(type) !== -1, 'Trying to subscribe to unknown event: "%s"', type); + if (!connection) { + return; + } + connection.removeEventListener(type, handler); + }, + + fetch(): Promise { + return new Promise((resolve, reject) => { + try { + resolve(connection.type); + } catch (err) { + resolve('unknown'); + } + }); + }, + + isConnected: { + addEventListener(type: string, handler: Function): { remove: () => void } { + invariant( + eventTypes.indexOf(type) !== -1, + 'Trying to subscribe to unknown event: "%s"', + type + ); + const onlineCallback = () => handler(true); + const offlineCallback = () => handler(false); + connectionListeners.push([handler, onlineCallback, offlineCallback]); + + window.addEventListener('online', onlineCallback, false); + window.addEventListener('offline', offlineCallback, false); + + return { + remove: () => NetInfo.isConnected.removeEventListener(type, handler) + }; + }, + + removeEventListener(type: string, handler: Function): void { + invariant( + eventTypes.indexOf(type) !== -1, + 'Trying to subscribe to unknown event: "%s"', + type + ); + + const listenerIndex = findIndex(connectionListeners, pair => pair[0] === handler); + invariant( + listenerIndex !== -1, + 'Trying to remove NetInfo connection listener for unregistered handler' + ); + const [, onlineCallback, offlineCallback] = connectionListeners[listenerIndex]; + + window.removeEventListener('online', onlineCallback, false); + window.removeEventListener('offline', offlineCallback, false); + + connectionListeners.splice(listenerIndex, 1); + }, + + fetch(): Promise { + return new Promise((resolve, reject) => { + try { + resolve(window.navigator.onLine); + } catch (err) { + resolve(true); + } + }); + } + } +}; + +export default NetInfo; diff --git a/Libraries/index.js b/Libraries/index.js index 27b67a5..20e22ab 100644 --- a/Libraries/index.js +++ b/Libraries/index.js @@ -67,6 +67,7 @@ export Easing from 'animated/lib/Easing'; export I18nManager from 'ReactI18nManager'; export InteractionManager from 'ReactInteractionManager'; export LayoutAnimation from 'ReactLayoutAnimation'; +export NetInfo from 'ReactNetInfo'; export PanResponder from 'ReactPanResponder'; export PixelRatio from 'ReactPixelRatio'; export StyleSheet from 'ReactStyleSheet'; From a2a0e3b9f7b6aba53a67e73458f0da424f6e4ba8 Mon Sep 17 00:00:00 2001 From: Li Zheng Date: Tue, 6 Jun 2017 11:37:46 +0800 Subject: [PATCH 007/102] NetInfo: add origin Copyright --- Libraries/NetInfo/NetInfo.web.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Libraries/NetInfo/NetInfo.web.js b/Libraries/NetInfo/NetInfo.web.js index 523603e..3a59b21 100644 --- a/Libraries/NetInfo/NetInfo.web.js +++ b/Libraries/NetInfo/NetInfo.web.js @@ -1,5 +1,7 @@ /** * Copyright (c) 2015-present, Alibaba Group Holding Limited. + * Copyright (c) 2015-present, Nicolas Gallagher. + * Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * * @providesModule ReactNetInfo From d5bacbb80dfd5cc4c0b47f2c9ad3e15fca82f36b Mon Sep 17 00:00:00 2001 From: Li Zheng Date: Tue, 6 Jun 2017 11:43:55 +0800 Subject: [PATCH 008/102] FlatList(step 3): worked well when scroll --- Libraries/Lists/VirtualizedList.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/Libraries/Lists/VirtualizedList.js b/Libraries/Lists/VirtualizedList.js index 4ae4e4f..1b00e5d 100644 --- a/Libraries/Lists/VirtualizedList.js +++ b/Libraries/Lists/VirtualizedList.js @@ -34,6 +34,7 @@ const Batchinator = require('Batchinator'); import React from 'react'; +import ReactDOM from 'react-dom'; import findNodeHandle from 'ReactfindNodeHandle'; import RefreshControl from 'ReactRefreshControl'; import ScrollView from 'ReactScrollView'; @@ -561,9 +562,16 @@ class VirtualizedList extends React.PureComponent { this.props.onScroll(e); } const timestamp = e.timeStamp; - const visibleLength = this._selectLength(e.nativeEvent.layoutMeasurement); - const contentLength = this._selectLength(e.nativeEvent.contentSize); - const offset = this._selectOffset(e.nativeEvent.contentOffset); + let target = ReactDOM.findDOMNode(this._scrollRef); + const visibleLength = target[ + !this.props.horizontal ? 'offsetHeight' : 'offsetWidth' + ]; + const contentLength = target[ + !this.props.horizontal ? 'scrollHeight' : 'scrollWidth' + ]; + const offset = target[ + !this.props.horizontal ? 'scrollTop' : 'scrollLeft' + ]; const dt = Math.max(1, timestamp - this._scrollMetrics.timestamp); if (dt > 500 && this._scrollMetrics.dt > 500 && (contentLength > (5 * visibleLength)) && !this._hasWarned.perf) { From f0256609698a543d06868fa5f7c9df0da24c881c Mon Sep 17 00:00:00 2001 From: Li Zheng Date: Tue, 6 Jun 2017 14:51:16 +0800 Subject: [PATCH 009/102] FlatList(step 4): refactor faster when scroll --- Libraries/Lists/VirtualizedList.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Libraries/Lists/VirtualizedList.js b/Libraries/Lists/VirtualizedList.js index 1b00e5d..2162b52 100644 --- a/Libraries/Lists/VirtualizedList.js +++ b/Libraries/Lists/VirtualizedList.js @@ -562,15 +562,16 @@ class VirtualizedList extends React.PureComponent { this.props.onScroll(e); } const timestamp = e.timeStamp; + let isVertical = !this.props.horizontal; let target = ReactDOM.findDOMNode(this._scrollRef); const visibleLength = target[ - !this.props.horizontal ? 'offsetHeight' : 'offsetWidth' + isVertical ? 'offsetHeight' : 'offsetWidth' ]; const contentLength = target[ - !this.props.horizontal ? 'scrollHeight' : 'scrollWidth' + isVertical ? 'scrollHeight' : 'scrollWidth' ]; const offset = target[ - !this.props.horizontal ? 'scrollTop' : 'scrollLeft' + isVertical ? 'scrollTop' : 'scrollLeft' ]; const dt = Math.max(1, timestamp - this._scrollMetrics.timestamp); if (dt > 500 && this._scrollMetrics.dt > 500 && (contentLength > (5 * visibleLength)) && From 876c5ca33f47f57e9cc435b6358c2827a32f2261 Mon Sep 17 00:00:00 2001 From: Li Zheng Date: Wed, 14 Jun 2017 14:43:53 +0800 Subject: [PATCH 010/102] support scrollEnabled prop for ViewPager --- Libraries/ViewPager/ViewPager.web.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/Libraries/ViewPager/ViewPager.web.js b/Libraries/ViewPager/ViewPager.web.js index 45ddc64..243fe1c 100644 --- a/Libraries/ViewPager/ViewPager.web.js +++ b/Libraries/ViewPager/ViewPager.web.js @@ -57,11 +57,18 @@ class ViewPager extends React.Component { keyboardDismissMode: PropTypes.oneOf([ 'none', // default 'on-drag' - ]) + ]), + + /** + * When false, the content does not scroll. + * The default value is true. + */ + scrollEnabled: PropTypes.bool } static defaultProps = { - initialPage: 0 + initialPage: 0, + scrollEnabled: true } state = { @@ -88,7 +95,7 @@ class ViewPager extends React.Component { // }); // }); - this._panResponder = PanResponder.create({ + this._panResponder = this.props.scrollEnabled && PanResponder.create({ onStartShouldSetResponder: () => true, onMoveShouldSetPanResponder: this._shouldSetPanResponder, onPanResponderGrant: () => { }, From d4411cb13b020cf6932a57745720baeaa84ed127 Mon Sep 17 00:00:00 2001 From: Li Zheng Date: Wed, 14 Jun 2017 16:00:59 +0800 Subject: [PATCH 011/102] support Animated.ScrollView --- Libraries/Animated/Animated.web.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Libraries/Animated/Animated.web.js b/Libraries/Animated/Animated.web.js index 1809763..e91f85e 100644 --- a/Libraries/Animated/Animated.web.js +++ b/Libraries/Animated/Animated.web.js @@ -17,6 +17,7 @@ import flattenStyle from 'ReactFlattenStyle'; import Image from 'ReactImage'; import Text from 'ReactText'; import View from 'ReactView'; +import ScrollView from 'ReactScrollView'; // { scale: 2 } => 'scale(2)' function mapTransform(t) { @@ -52,6 +53,7 @@ Animated.inject.FlattenStyle(flattenStyle); export default { ...Animated, + ScrollView: Animated.createAnimatedComponent(ScrollView), View: Animated.createAnimatedComponent(View), Text: Animated.createAnimatedComponent(Text), Image: Animated.createAnimatedComponent(Image), From 32afc9430bb793e5fd5d3722148bb0955795f34c Mon Sep 17 00:00:00 2001 From: Li Zheng Date: Thu, 15 Jun 2017 13:55:29 +0800 Subject: [PATCH 012/102] support scrollEnabled prop for ScrollView --- Libraries/ScrollView/ScrollView.web.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Libraries/ScrollView/ScrollView.web.js b/Libraries/ScrollView/ScrollView.web.js index 88d0442..00303f5 100644 --- a/Libraries/ScrollView/ScrollView.web.js +++ b/Libraries/ScrollView/ScrollView.web.js @@ -166,7 +166,7 @@ class ScrollView extends Component { alwaysBounceVertical, style: ([ styles.base, - this.props.horizontal ? styles.horizontal : null, + (this.props.horizontal && this.props.scrollEnabled) ? styles.horizontal : null, this.props.style, ]: ?Array), onTouchStart: this.scrollResponderHandleTouchStart, From daed0c0879a00f5076493b855981d41a6dec3b1d Mon Sep 17 00:00:00 2001 From: Li Jie Date: Mon, 19 Jun 2017 11:07:33 +0800 Subject: [PATCH 013/102] Remove dependency of react-dom/lib/CSSPropertyOperations --- Libraries/Animated/Animated.web.js | 4 +- Libraries/Utilties/setNativeProps.web.js | 4 +- Libraries/Utilties/setValueForStyles.web.js | 236 ++++++++++++++++++++ Libraries/Utilties/unitlessNumbers.js | 45 ++++ 4 files changed, 285 insertions(+), 4 deletions(-) create mode 100644 Libraries/Utilties/setValueForStyles.web.js create mode 100644 Libraries/Utilties/unitlessNumbers.js diff --git a/Libraries/Animated/Animated.web.js b/Libraries/Animated/Animated.web.js index e91f85e..31e90c7 100644 --- a/Libraries/Animated/Animated.web.js +++ b/Libraries/Animated/Animated.web.js @@ -11,7 +11,7 @@ 'use strict'; import Animated from 'animated'; -import CSSPropertyOperations from 'react-dom/lib/CSSPropertyOperations'; +import setValueForStyles from '../Utilties/setValueForStyles.web'; import flattenStyle from 'ReactFlattenStyle'; import Image from 'ReactImage'; @@ -40,7 +40,7 @@ function ApplyAnimatedValues(instance, props) { if (instance.setNativeProps) { instance.setNativeProps(props); } else if (instance.nodeType && instance.setAttribute !== undefined) { - CSSPropertyOperations.setValueForStyles(instance, mapStyle(props.style)); + setValueForStyles(instance, mapStyle(props.style)); } else { return false; } diff --git a/Libraries/Utilties/setNativeProps.web.js b/Libraries/Utilties/setNativeProps.web.js index 1e5ac12..14f4eef 100644 --- a/Libraries/Utilties/setNativeProps.web.js +++ b/Libraries/Utilties/setNativeProps.web.js @@ -5,7 +5,7 @@ */ 'use strict'; -var CSSPropertyOperations = require('react-dom/lib/CSSPropertyOperations'); +import setValueForStyles from '../Utilties/setValueForStyles.web'; // some number that react not auto add px var numberTransformProperties = { @@ -82,7 +82,7 @@ function setNativeProps(node, props, component) { style = convertTransform(style); } - CSSPropertyOperations.setValueForStyles(node, style, component); + setValueForStyles(node, style, component); } else { node.setAttribute(name, props[name]); } diff --git a/Libraries/Utilties/setValueForStyles.web.js b/Libraries/Utilties/setValueForStyles.web.js new file mode 100644 index 0000000..3870d7c --- /dev/null +++ b/Libraries/Utilties/setValueForStyles.web.js @@ -0,0 +1,236 @@ +/** + * Copyright 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. + * + */ + +'use strict'; + +import unitlessNumbers from './unitlessNumbers'; + +if (process.env.NODE_ENV !== 'production') { + var camelizeStyleName = require('fbjs/lib/camelizeStyleName'); + var warning = require('fbjs/lib/warning'); + + // 'msTransform' is correct, but the other prefixes should be capitalized + var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/; + + // style values shouldn't contain a semicolon + var badStyleValueWithSemicolonPattern = /;\s*$/; + + var warnedStyleNames = {}; + var warnedStyleValues = {}; + var warnedForNaNValue = false; + + var warnHyphenatedStyleName = function(name, owner) { + if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) { + return; + } + + warnedStyleNames[name] = true; + process.env.NODE_ENV !== 'production' + ? warning( + false, + 'Unsupported style property %s. Did you mean %s?%s', + name, + camelizeStyleName(name), + checkRenderMessage(owner) + ) + : void 0; + }; + + var warnBadVendoredStyleName = function(name, owner) { + if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) { + return; + } + + warnedStyleNames[name] = true; + process.env.NODE_ENV !== 'production' + ? warning( + false, + 'Unsupported vendor-prefixed style property %s. Did you mean %s?%s', + name, + name.charAt(0).toUpperCase() + name.slice(1), + checkRenderMessage(owner) + ) + : void 0; + }; + + var warnStyleValueWithSemicolon = function(name, value, owner) { + if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) { + return; + } + + warnedStyleValues[value] = true; + process.env.NODE_ENV !== 'production' + ? warning( + false, + "Style property values shouldn't contain a semicolon.%s " + 'Try "%s: %s" instead.', + checkRenderMessage(owner), + name, + value.replace(badStyleValueWithSemicolonPattern, '') + ) + : void 0; + }; + + var warnStyleValueIsNaN = function(name, value, owner) { + if (warnedForNaNValue) { + return; + } + + warnedForNaNValue = true; + process.env.NODE_ENV !== 'production' + ? warning( + false, + '`NaN` is an invalid value for the `%s` css style property.%s', + name, + checkRenderMessage(owner) + ) + : void 0; + }; + + var checkRenderMessage = function(owner) { + if (owner) { + var name = owner.getName(); + if (name) { + return ' Check the render method of `' + name + '`.'; + } + } + return ''; + }; + + /** + * @param {string} name + * @param {*} value + * @param {ReactDOMComponent} component + */ + var warnValidStyle = function(name, value, component) { + var owner; + if (component) { + owner = component._currentElement._owner; + } + if (name.indexOf('-') > -1) { + warnHyphenatedStyleName(name, owner); + } else if (badVendoredStyleNamePattern.test(name)) { + warnBadVendoredStyleName(name, owner); + } else if (badStyleValueWithSemicolonPattern.test(value)) { + warnStyleValueWithSemicolon(name, value, owner); + } + + if (typeof value === 'number' && isNaN(value)) { + warnStyleValueIsNaN(name, value, owner); + } + }; +} + +var styleWarnings = {}; + +/** + * Convert a value into the proper css writable value. The style name `name` + * should be logical (no hyphens) + * + * @param {string} name CSS property name such as `topMargin`. + * @param {*} value CSS property value such as `10px`. + * @param {ReactDOMComponent} component + * @return {string} Normalized style value with dimensions applied. + */ +function dangerousStyleValue(name, value, component) { + // Note that we've removed escapeTextForBrowser() calls here since the + // whole string will be escaped when the attribute is injected into + // the markup. If you provide unsafe user data here they can inject + // arbitrary CSS which may be problematic (I couldn't repro this): + // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet + // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/ + // This is not an XSS hole but instead a potential CSS injection issue + // which has lead to a greater discussion about how we're going to + // trust URLs moving forward. See #2115901 + + var isEmpty = value == null || typeof value === 'boolean' || value === ''; + if (isEmpty) { + return ''; + } + + var isNonNumeric = isNaN(value); + if ( + isNonNumeric || + value === 0 || + (unitlessNumbers.hasOwnProperty(name) && unitlessNumbers[name]) + ) { + return '' + value; // cast to string + } + + if (typeof value === 'string') { + if (process.env.NODE_ENV !== 'production') { + var warning = require('fbjs/lib/warning'); + + // Allow '0' to pass through without warning. 0 is already special and + // doesn't require units, so we don't need to warn about it. + if (component && value !== '0') { + var owner = component._currentElement._owner; + var ownerName = owner ? owner.getName() : null; + if (ownerName && !styleWarnings[ownerName]) { + styleWarnings[ownerName] = {}; + } + var warned = false; + if (ownerName) { + var warnings = styleWarnings[ownerName]; + warned = warnings[name]; + if (!warned) { + warnings[name] = true; + } + } + if (!warned) { + process.env.NODE_ENV !== 'production' + ? warning( + false, + 'a `%s` tag (owner: `%s`) was passed a numeric string value ' + + 'for CSS property `%s` (value: `%s`) which will be treated ' + + 'as a unitless number in a future version of React.', + component._currentElement.type, + ownerName || 'unknown', + name, + value + ) + : void 0; + } + } + } + value = value.trim(); + } + return value + 'px'; +} + +/** + * 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) { + if (!styles.hasOwnProperty(styleName)) { + continue; + } + if (process.env.NODE_ENV !== 'production') { + // warnValidStyle(styleName, styles[styleName], component); + } + var styleValue = dangerousStyleValue(styleName, styles[styleName], component); + if (styleName === 'float' || styleName === 'cssFloat') { + styleName = 'cssFloat'; + } + if (styleValue) { + style[styleName] = styleValue; + } else { + style[styleName] = ''; + } + } +}; + +module.exports = setValueForStyles; diff --git a/Libraries/Utilties/unitlessNumbers.js b/Libraries/Utilties/unitlessNumbers.js new file mode 100644 index 0000000..4bc5316 --- /dev/null +++ b/Libraries/Utilties/unitlessNumbers.js @@ -0,0 +1,45 @@ +const unitlessNumbers = { + animationIterationCount: true, + borderImageOutset: true, + borderImageSlice: true, + borderImageWidth: true, + boxFlex: true, + boxFlexGroup: true, + boxOrdinalGroup: true, + columnCount: true, + flex: true, + flexGrow: true, + flexOrder: true, + flexPositive: true, + flexShrink: true, + flexNegative: true, + fontWeight: true, + gridRow: true, + gridColumn: true, + lineClamp: true, + opacity: true, + order: true, + orphans: true, + tabSize: true, + widows: true, + zIndex: true, + zoom: true, + // SVG-related + fillOpacity: true, + floodOpacity: true, + stopOpacity: true, + strokeDasharray: true, + strokeDashoffset: true, + strokeMiterlimit: true, + strokeOpacity: true, + strokeWidth: true, + // transform types + scale: true, + scaleX: true, + scaleY: true, + scaleZ: true, + // RN properties + shadowOpacity: true +}; + +module.exports = unitlessNumbers; From 6bb16a92ae35e7f943e593c64f93d27c4e68d560 Mon Sep 17 00:00:00 2001 From: Li Jie Date: Mon, 19 Jun 2017 11:08:29 +0800 Subject: [PATCH 014/102] Import PropTypes from prop-types --- .../ActivityIndicator/ActivityIndicator.web.js | 3 ++- Libraries/DrawerLayout/DrawerLayout.web.js | 3 ++- Libraries/Image/Image.web.js | 5 +++-- Libraries/ListView/ListView.web.js | 11 ++++++----- Libraries/ListView/StaticRenderer.web.js | 3 ++- Libraries/Modal/Modal.web.js | 3 ++- Libraries/Navigator/Navigator.web.js | 3 ++- .../NavigatorBreadcrumbNavigationBar.js | 9 +++++---- Libraries/Navigator/NavigatorNavigationBar.js | 3 ++- Libraries/Picker/Picker.web.js | 3 ++- Libraries/ScrollView/ScrollView.web.js | 3 ++- .../SegmentedControl/SegmentedControl.web.js | 3 ++- Libraries/Slider/Slider.web.js | 3 ++- Libraries/Switch/Switch.web.js | 3 ++- Libraries/TabBar/TabBar.web.js | 9 +++++---- Libraries/TabBar/TabBarItem.web.js | 3 ++- Libraries/Text/Text.web.js | 17 +++++++++-------- Libraries/TextInput/TextInput.web.js | 3 ++- Libraries/Touchable/TouchableBounce.web.js | 11 ++++++----- Libraries/Touchable/TouchableHighlight.web.js | 9 +++++---- Libraries/Touchable/TouchableOpacity.web.js | 3 ++- .../Touchable/TouchableWithoutFeedback.web.js | 15 ++++++++------- Libraries/View/View.web.js | 3 ++- Libraries/ViewPager/ViewPager.web.js | 3 ++- 24 files changed, 79 insertions(+), 55 deletions(-) diff --git a/Libraries/ActivityIndicator/ActivityIndicator.web.js b/Libraries/ActivityIndicator/ActivityIndicator.web.js index 462aa82..74bbf8e 100644 --- a/Libraries/ActivityIndicator/ActivityIndicator.web.js +++ b/Libraries/ActivityIndicator/ActivityIndicator.web.js @@ -9,7 +9,8 @@ */ 'use strict'; -import React, { Component, PropTypes } from 'react'; +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; import View from 'ReactView'; import StyleSheet from 'ReactStyleSheet'; import assign from 'domkit/appendVendorPrefix'; diff --git a/Libraries/DrawerLayout/DrawerLayout.web.js b/Libraries/DrawerLayout/DrawerLayout.web.js index a54f43f..623599b 100644 --- a/Libraries/DrawerLayout/DrawerLayout.web.js +++ b/Libraries/DrawerLayout/DrawerLayout.web.js @@ -6,7 +6,8 @@ */ 'use strict'; -import React, { Component, PropTypes } from 'react'; +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; import StyleSheet from 'ReactStyleSheet'; import View from 'ReactView'; import Animated from 'ReactAnimated'; diff --git a/Libraries/Image/Image.web.js b/Libraries/Image/Image.web.js index e18a34a..412f515 100644 --- a/Libraries/Image/Image.web.js +++ b/Libraries/Image/Image.web.js @@ -6,7 +6,8 @@ */ 'use strict'; -import React, {Component, PropTypes} from 'react'; +import React, {Component} from 'react'; +import PropTypes from 'prop-types'; import View from 'ReactView'; import { Mixin as LayoutMixin } from 'ReactLayoutMixin'; import ImageResizeMode from './ImageResizeMode'; @@ -34,7 +35,7 @@ class Image extends Component { } static contextTypes = { - isInAParentText: React.PropTypes.bool + isInAParentText: PropTypes.bool } static getSize = function( diff --git a/Libraries/ListView/ListView.web.js b/Libraries/ListView/ListView.web.js index b7cce7b..69b21fb 100644 --- a/Libraries/ListView/ListView.web.js +++ b/Libraries/ListView/ListView.web.js @@ -8,7 +8,8 @@ */ 'use strict'; -import React, { Component, PropTypes } from 'react'; +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; import ReactDOM from 'react-dom'; import ListViewDataSource from 'ReactListViewDataSource'; import ScrollView from 'ReactScrollView'; @@ -159,12 +160,12 @@ class ListView extends Component { * A function that returns the scrollable component in which the list rows * are rendered. Defaults to returning a ScrollView with the given props. */ - renderScrollComponent: React.PropTypes.func.isRequired, + renderScrollComponent: PropTypes.func.isRequired, /** * How early to start rendering rows before they come on screen, in * pixels. */ - scrollRenderAheadDistance: React.PropTypes.number, + scrollRenderAheadDistance: PropTypes.number, /** * (visibleRows, changedRows) => void * @@ -174,13 +175,13 @@ class ListView extends Component { * that have changed their visibility, with true indicating visible, and * false indicating the view has moved out of view. */ - onChangeVisibleRows: React.PropTypes.func, + onChangeVisibleRows: PropTypes.func, /** * A performance optimization for improving scroll perf of * large lists, used in conjunction with overflow: 'hidden' on the row * containers. This is enabled by default. */ - removeClippedSubviews: React.PropTypes.bool, + removeClippedSubviews: PropTypes.bool, /** * An array of child indices determining which children get docked to the * top of the screen when scrolling. For example, passing diff --git a/Libraries/ListView/StaticRenderer.web.js b/Libraries/ListView/StaticRenderer.web.js index 36af765..6d87be4 100644 --- a/Libraries/ListView/StaticRenderer.web.js +++ b/Libraries/ListView/StaticRenderer.web.js @@ -6,7 +6,8 @@ */ 'use strict'; -import React, { Component, PropTypes } from 'react'; +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; class StaticRenderer extends Component { static propTypes = { diff --git a/Libraries/Modal/Modal.web.js b/Libraries/Modal/Modal.web.js index b98fcfa..82b8a01 100644 --- a/Libraries/Modal/Modal.web.js +++ b/Libraries/Modal/Modal.web.js @@ -6,7 +6,8 @@ */ 'use strict'; -import React, { PropTypes, Component } from 'react'; +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; import StyleSheet from 'ReactStyleSheet'; import View from 'ReactView'; diff --git a/Libraries/Navigator/Navigator.web.js b/Libraries/Navigator/Navigator.web.js index 3228139..cf3b063 100644 --- a/Libraries/Navigator/Navigator.web.js +++ b/Libraries/Navigator/Navigator.web.js @@ -9,7 +9,8 @@ /* eslint-disable no-extra-boolean-cast*/ 'use strict'; -import React, { PropTypes } from 'react'; +import React from 'react'; +import PropTypes from 'prop-types'; import Dimensions from 'ReactDimensions'; import InteractionMixin from 'ReactInteractionMixin'; import Map from 'core-js/library/fn/map'; diff --git a/Libraries/Navigator/NavigatorBreadcrumbNavigationBar.js b/Libraries/Navigator/NavigatorBreadcrumbNavigationBar.js index a791d16..d6aa1ce 100644 --- a/Libraries/Navigator/NavigatorBreadcrumbNavigationBar.js +++ b/Libraries/Navigator/NavigatorBreadcrumbNavigationBar.js @@ -9,7 +9,8 @@ */ 'use strict'; -import React, { Component, PropTypes } from 'react'; +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; import NavigatorBreadcrumbNavigationBarStyles from 'ReactNavigatorBreadcrumbNavigationBarStyles'; import NavigatorNavigationBarStylesAndroid from 'ReactNavigatorNavigationBarStylesAndroid'; import NavigatorNavigationBarStylesIOS from 'ReactNavigatorNavigationBarStylesIOS'; @@ -70,9 +71,9 @@ class NavigatorBreadcrumbNavigationBar extends Component { titleContentForRoute: PropTypes.func, iconForRoute: PropTypes.func, }), - navState: React.PropTypes.shape({ - routeStack: React.PropTypes.arrayOf(React.PropTypes.object), - presentedIndex: React.PropTypes.number, + navState: PropTypes.shape({ + routeStack: PropTypes.arrayOf(PropTypes.object), + presentedIndex: PropTypes.number, }), style: View.propTypes.style, } diff --git a/Libraries/Navigator/NavigatorNavigationBar.js b/Libraries/Navigator/NavigatorNavigationBar.js index eb91d99..95bed11 100644 --- a/Libraries/Navigator/NavigatorNavigationBar.js +++ b/Libraries/Navigator/NavigatorNavigationBar.js @@ -9,7 +9,8 @@ */ 'use strict'; -import React, { Component, PropTypes } from 'react'; +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; import NavigatorNavigationBarStylesAndroid from 'ReactNavigatorNavigationBarStylesAndroid'; import NavigatorNavigationBarStylesIOS from 'ReactNavigatorNavigationBarStylesIOS'; import Platform from 'ReactStyleSheet'; diff --git a/Libraries/Picker/Picker.web.js b/Libraries/Picker/Picker.web.js index e1d3d1b..68e1754 100644 --- a/Libraries/Picker/Picker.web.js +++ b/Libraries/Picker/Picker.web.js @@ -6,7 +6,8 @@ */ 'use strict'; -import React, { Component, PropTypes } from 'react'; +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; import autobind from 'autobind-decorator'; const PICKER = 'picker'; diff --git a/Libraries/ScrollView/ScrollView.web.js b/Libraries/ScrollView/ScrollView.web.js index 00303f5..53dbfd3 100644 --- a/Libraries/ScrollView/ScrollView.web.js +++ b/Libraries/ScrollView/ScrollView.web.js @@ -8,7 +8,8 @@ */ 'use strict'; -import React, { PropTypes, Component} from 'react'; +import React, { Component} from 'react'; +import PropTypes from 'prop-types'; import ReactDOM from 'react-dom'; import ScrollResponder from 'ReactScrollResponder'; import StyleSheet from 'ReactStyleSheet'; diff --git a/Libraries/SegmentedControl/SegmentedControl.web.js b/Libraries/SegmentedControl/SegmentedControl.web.js index 144f731..e5c300e 100644 --- a/Libraries/SegmentedControl/SegmentedControl.web.js +++ b/Libraries/SegmentedControl/SegmentedControl.web.js @@ -8,7 +8,8 @@ */ 'use strict'; -import React, { Component, PropTypes } from 'react'; +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; import View from 'ReactView'; import Text from 'ReactText'; import StyleSheet from 'ReactStyleSheet'; diff --git a/Libraries/Slider/Slider.web.js b/Libraries/Slider/Slider.web.js index 97b3881..cec04a1 100644 --- a/Libraries/Slider/Slider.web.js +++ b/Libraries/Slider/Slider.web.js @@ -9,7 +9,8 @@ */ 'use strict'; -import React, { PropTypes, Component } from 'react'; +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; import ReactDOM from 'react-dom'; import StyleSheet from 'ReactStyleSheet'; import View from 'ReactView'; diff --git a/Libraries/Switch/Switch.web.js b/Libraries/Switch/Switch.web.js index 7b9c14c..d7e1d75 100644 --- a/Libraries/Switch/Switch.web.js +++ b/Libraries/Switch/Switch.web.js @@ -6,7 +6,8 @@ */ 'use strict'; -import React, { Component, PropTypes } from 'react'; +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; import { Mixin as NativeMethodsMixin } from 'NativeMethodsMixin'; import StyleSheet from 'ReactStyleSheet'; import mixin from 'react-mixin'; diff --git a/Libraries/TabBar/TabBar.web.js b/Libraries/TabBar/TabBar.web.js index b59c4b7..2d9c7ea 100644 --- a/Libraries/TabBar/TabBar.web.js +++ b/Libraries/TabBar/TabBar.web.js @@ -7,6 +7,7 @@ 'use strict'; import React from 'react'; +import PropTypes from 'prop-types'; import View from 'ReactView'; import TabBarItem from './TabBarItem.web'; import TabBarContents from './TabBarContents.web'; @@ -25,17 +26,17 @@ let TabBar = React.createClass({ }, propTypes: { - style: React.PropTypes.object, + style: PropTypes.object, /** * Color of the currently selected tab icon */ - tintColor: React.PropTypes.string, + tintColor: PropTypes.string, /** * Background color of the tab bar */ - barTintColor: React.PropTypes.string, + barTintColor: PropTypes.string, - clientHeight: React.PropTypes.number + clientHeight: PropTypes.number }, getStyles() { diff --git a/Libraries/TabBar/TabBarItem.web.js b/Libraries/TabBar/TabBarItem.web.js index 5eb59e1..28b8624 100644 --- a/Libraries/TabBar/TabBarItem.web.js +++ b/Libraries/TabBar/TabBarItem.web.js @@ -5,7 +5,8 @@ */ 'use strict'; -import React, { PropTypes } from 'react'; +import React from 'react'; +import PropTypes from 'prop-types'; import Image from 'ReactImage'; import Text from 'ReactText'; import View from 'ReactView'; diff --git a/Libraries/Text/Text.web.js b/Libraries/Text/Text.web.js index 2eb2bff..163820e 100644 --- a/Libraries/Text/Text.web.js +++ b/Libraries/Text/Text.web.js @@ -9,6 +9,7 @@ 'use strict'; import React from 'react'; +import PropTypes from 'prop-types'; import { Mixin as TouchableMixin } from 'ReactTouchable'; import { Mixin as LayoutMixin } from 'ReactLayoutMixin'; import { Mixin as NativeMethodsMixin } from 'NativeMethodsMixin'; @@ -56,31 +57,31 @@ let Text = React.createClass({ * layout, including line wrapping, such that the total number of lines * does not exceed this number. */ - numberOfLines: React.PropTypes.number, + numberOfLines: PropTypes.number, /** * Invoked on mount and layout changes with * * `{nativeEvent: {layout: {x, y, width, height}}}` */ - onLayout: React.PropTypes.func, + onLayout: PropTypes.func, /** * This function is called on press. */ - onPress: React.PropTypes.func, + onPress: PropTypes.func, /** * When true, no visual change is made when text is pressed down. By * default, a gray oval highlights the text on press down. * @platform ios */ - suppressHighlighting: React.PropTypes.bool, + suppressHighlighting: PropTypes.bool, /** * Used to locate this view in end-to-end tests. */ - testID: React.PropTypes.string, + testID: PropTypes.string, /** * Specifies should fonts scale to respect Text Size accessibility setting on iOS. */ - allowFontScaling: React.PropTypes.bool, + allowFontScaling: PropTypes.bool, }, getInitialState(): Object { @@ -177,11 +178,11 @@ let Text = React.createClass({ }, contextTypes: { - isInAParentText: React.PropTypes.bool + isInAParentText: PropTypes.bool }, childContextTypes: { - isInAParentText: React.PropTypes.bool + isInAParentText: PropTypes.bool }, render() { diff --git a/Libraries/TextInput/TextInput.web.js b/Libraries/TextInput/TextInput.web.js index 333eae1..127c88f 100644 --- a/Libraries/TextInput/TextInput.web.js +++ b/Libraries/TextInput/TextInput.web.js @@ -8,7 +8,8 @@ */ 'use strict'; -import React, { Component, PropTypes } from 'react'; +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; import ReactDOM from 'react-dom'; import View from 'ReactView'; import autobind from 'autobind-decorator'; diff --git a/Libraries/Touchable/TouchableBounce.web.js b/Libraries/Touchable/TouchableBounce.web.js index 56a853a..f7e8c81 100644 --- a/Libraries/Touchable/TouchableBounce.web.js +++ b/Libraries/Touchable/TouchableBounce.web.js @@ -10,6 +10,7 @@ import Animated from 'ReactAnimated'; import React, { Component } from 'react'; +import PropTypes from 'prop-types'; import { Mixin as TouchableMixin } from 'ReactTouchable'; import mixin from 'react-mixin'; import autobind from 'autobind-decorator'; @@ -36,15 +37,15 @@ var PRESS_RECT_OFFSET = {top: 20, left: 20, right: 20, bottom: 30}; class TouchableBounce extends Component { static propTypes = { - onPress: React.PropTypes.func, - onPressIn: React.PropTypes.func, - onPressOut: React.PropTypes.func, + onPress: PropTypes.func, + onPressIn: PropTypes.func, + onPressOut: PropTypes.func, // The function passed takes a callback to start the animation which should // be run after this onPress handler is done. You can use this (for example) // to update UI before starting the animation. - onPressWithCompletion: React.PropTypes.func, + onPressWithCompletion: PropTypes.func, // the function passed is called after the animation is complete - onPressAnimationComplete: React.PropTypes.func, + onPressAnimationComplete: PropTypes.func, } state = { diff --git a/Libraries/Touchable/TouchableHighlight.web.js b/Libraries/Touchable/TouchableHighlight.web.js index a700e7e..b3b1714 100644 --- a/Libraries/Touchable/TouchableHighlight.web.js +++ b/Libraries/Touchable/TouchableHighlight.web.js @@ -9,6 +9,7 @@ 'use strict'; import React, { Component } from 'react'; +import PropTypes from 'prop-types'; import View from 'ReactView'; import TimerMixin from 'react-timer-mixin'; import TouchableWithoutFeedback from 'ReactTouchableWithoutFeedback'; @@ -51,20 +52,20 @@ class TouchableHighlight extends Component { * Determines what the opacity of the wrapped view should be when touch is * active. */ - activeOpacity: React.PropTypes.number, + activeOpacity: PropTypes.number, /** * The color of the underlay that will show through when the touch is * active. */ - underlayColor: React.PropTypes.string, + underlayColor: PropTypes.string, /** * Called immediately after the underlay is shown */ - onShowUnderlay: React.PropTypes.func, + onShowUnderlay: PropTypes.func, /** * Called immediately after the underlay is hidden */ - onHideUnderlay: React.PropTypes.func, + onHideUnderlay: PropTypes.func, } static defaultProps = DEFAULT_PROPS diff --git a/Libraries/Touchable/TouchableOpacity.web.js b/Libraries/Touchable/TouchableOpacity.web.js index f6080c7..e17c074 100644 --- a/Libraries/Touchable/TouchableOpacity.web.js +++ b/Libraries/Touchable/TouchableOpacity.web.js @@ -10,6 +10,7 @@ import Animated from 'ReactAnimated'; import React from 'react'; +import PropTypes from 'prop-types'; import TimerMixin from 'react-timer-mixin'; import { Mixin as TouchableMixin } from 'ReactTouchable'; import TouchableWithoutFeedback from 'ReactTouchableWithoutFeedback'; @@ -60,7 +61,7 @@ class TouchableOpacity extends React.Component { * Determines what the opacity of the wrapped view should be when touch is * active. */ - activeOpacity: React.PropTypes.number, + activeOpacity: PropTypes.number, }; static defaultProps = DEFAULT_PROPS; diff --git a/Libraries/Touchable/TouchableWithoutFeedback.web.js b/Libraries/Touchable/TouchableWithoutFeedback.web.js index 8c372fb..22c7c70 100644 --- a/Libraries/Touchable/TouchableWithoutFeedback.web.js +++ b/Libraries/Touchable/TouchableWithoutFeedback.web.js @@ -10,6 +10,7 @@ import 'ReactPanResponder'; import React, { Component } from 'react'; +import PropTypes from 'prop-types'; import Touchable from 'ReactTouchable'; import mixin from 'react-mixin'; import autobind from 'autobind-decorator'; @@ -40,24 +41,24 @@ class TouchableWithoutFeedback extends Component { * Called when the touch is released, but not if cancelled (e.g. by a scroll * that steals the responder lock). */ - onPress: React.PropTypes.func, - onPressIn: React.PropTypes.func, - onPressOut: React.PropTypes.func, + onPress: PropTypes.func, + onPressIn: PropTypes.func, + onPressOut: PropTypes.func, - onLongPress: React.PropTypes.func, + onLongPress: PropTypes.func, /** * Delay in ms, from the start of the touch, before onPressIn is called. */ - delayPressIn: React.PropTypes.number, + delayPressIn: PropTypes.number, /** * Delay in ms, from the release of the touch, before onPressOut is called. */ - delayPressOut: React.PropTypes.number, + delayPressOut: PropTypes.number, /** * Delay in ms, from onPressIn, before onLongPress is called. */ - delayLongPress: React.PropTypes.number, + delayLongPress: PropTypes.number, } state = this.touchableGetInitialState() diff --git a/Libraries/View/View.web.js b/Libraries/View/View.web.js index 76a4b8b..a74e7c8 100644 --- a/Libraries/View/View.web.js +++ b/Libraries/View/View.web.js @@ -8,7 +8,8 @@ */ 'use strict'; -import React, { PropTypes } from 'react'; +import React from 'react'; +import PropTypes from 'prop-types'; import StyleSheet from 'ReactStyleSheet'; import { Mixin as LayoutMixin } from 'ReactLayoutMixin'; import { Mixin as NativeMethodsMixin } from 'NativeMethodsMixin'; diff --git a/Libraries/ViewPager/ViewPager.web.js b/Libraries/ViewPager/ViewPager.web.js index 243fe1c..fe028a0 100644 --- a/Libraries/ViewPager/ViewPager.web.js +++ b/Libraries/ViewPager/ViewPager.web.js @@ -7,7 +7,8 @@ */ 'use strict'; -import React, { PropTypes, cloneElement } from 'react'; +import React, { cloneElement } from 'react'; +import PropTypes from 'prop-types'; import assign from 'object-assign'; import View from 'ReactView'; import Animated from 'ReactAnimated'; From c49dff75d2f0a1a12923bf304a12dc672a387dc8 Mon Sep 17 00:00:00 2001 From: Li Jie Date: Fri, 23 Jun 2017 14:45:51 +0800 Subject: [PATCH 015/102] Convert React.createClass to ES6 class --- Libraries/Navigator/Navigator.web.js | 254 +++++++++++++------------ Libraries/Picker/Picker.web.js | 14 +- Libraries/TabBar/TabBar.web.js | 29 ++- Libraries/TabBar/TabBarContents.web.js | 22 +-- Libraries/TabBar/TabBarItem.web.js | 15 +- Libraries/Text/Text.web.js | 69 +++---- Libraries/View/View.web.js | 17 +- 7 files changed, 216 insertions(+), 204 deletions(-) diff --git a/Libraries/Navigator/Navigator.web.js b/Libraries/Navigator/Navigator.web.js index cf3b063..2a180ab 100644 --- a/Libraries/Navigator/Navigator.web.js +++ b/Libraries/Navigator/Navigator.web.js @@ -9,7 +9,7 @@ /* eslint-disable no-extra-boolean-cast*/ 'use strict'; -import React from 'react'; +import React, {Component} from 'react'; import PropTypes from 'prop-types'; import Dimensions from 'ReactDimensions'; import InteractionMixin from 'ReactInteractionMixin'; @@ -22,6 +22,8 @@ import PanResponder from 'ReactPanResponder'; import StyleSheet from 'ReactStyleSheet'; import Subscribable from './polyfills/Subscribable'; import TimerMixin from 'react-timer-mixin'; +import mixin from 'react-mixin'; +import autobind from 'autobind-decorator'; import View from 'ReactView'; import clamp from './polyfills/clamp'; import flattenStyle from 'ReactFlattenStyle'; @@ -166,9 +168,9 @@ const GESTURE_ACTIONS = [ * other scene * */ -let Navigator = React.createClass({ +class Navigator extends Component { - propTypes: { + static propTypes = { /** * Optional function that allows configuration about scene animations and * gestures. Will be invoked with the route and should return a scene @@ -238,42 +240,37 @@ let Navigator = React.createClass({ * Styles to apply to the container of each scene */ sceneStyle: View.propTypes.style, - }, + }; - statics: { - BreadcrumbNavigationBar: NavigatorBreadcrumbNavigationBar, - NavigationBar: NavigatorNavigationBar, - SceneConfigs: NavigatorSceneConfigs, - }, + static BreadcrumbNavigationBar = NavigatorBreadcrumbNavigationBar; + static NavigationBar = NavigatorNavigationBar; + static SceneConfigs = NavigatorSceneConfigs; - mixins: [TimerMixin, InteractionMixin, Subscribable.Mixin], + static defaultProps = { + configureScene: () => NavigatorSceneConfigs.PushFromRight, + sceneStyle: styles.defaultSceneStyle, + }; - getDefaultProps: function() { - return { - configureScene: () => NavigatorSceneConfigs.PushFromRight, - sceneStyle: styles.defaultSceneStyle, - }; - }, - - getInitialState: function() { + constructor(props) { + super(props); this._renderedSceneMap = new Map(); - let routeStack = this.props.initialRouteStack || [this.props.initialRoute]; + let routeStack = props.initialRouteStack || [props.initialRoute]; invariant( routeStack.length >= 1, 'Navigator requires props.initialRoute or props.initialRouteStack.' ); let initialRouteIndex = routeStack.length - 1; - if (this.props.initialRoute) { - initialRouteIndex = routeStack.indexOf(this.props.initialRoute); + if (props.initialRoute) { + initialRouteIndex = routeStack.indexOf(props.initialRoute); invariant( initialRouteIndex !== -1, 'initialRoute is not in initialRouteStack.' ); } - return { + this.state = { sceneConfigStack: routeStack.map( - (route) => this.props.configureScene(route) + (route) => props.configureScene(route) ), routeStack, presentedIndex: initialRouteIndex, @@ -282,9 +279,9 @@ let Navigator = React.createClass({ pendingGestureProgress: null, transitionQueue: [], }; - }, + } - componentWillMount: function() { + componentWillMount() { // TODO(t7489503): Don't need this once ES6 Class landed. this.__defineGetter__('navigationContext', this._getNavigationContext); @@ -318,9 +315,9 @@ let Navigator = React.createClass({ this._interactionHandle = null; this._emitWillFocus(this.state.routeStack[this.state.presentedIndex]); this.hashChanged = false; - }, + } - componentDidMount: function() { + componentDidMount() { this._handleSpringUpdate(); this._emitDidFocus(this.state.routeStack[this.state.presentedIndex]); @@ -337,9 +334,9 @@ let Navigator = React.createClass({ this.hashChanged = false; } }.bind(this)); - }, + } - componentWillUnmount: function() { + componentWillUnmount() { if (this._navigationContext) { this._navigationContext.dispose(); this._navigationContext = null; @@ -348,7 +345,7 @@ let Navigator = React.createClass({ // When you're finished, stop the listener. _unlisten(); - }, + } /** * @param {RouteStack} nextRouteStack Next route stack to reinitialize. This @@ -357,7 +354,7 @@ let Navigator = React.createClass({ * not animate, immediately replaces and rerenders navigation bar and stack * items. */ - immediatelyResetRouteStack: function(nextRouteStack) { + immediatelyResetRouteStack(nextRouteStack) { let destIndex = nextRouteStack.length - 1; this.setState({ routeStack: nextRouteStack, @@ -371,9 +368,9 @@ let Navigator = React.createClass({ }, () => { this._handleSpringUpdate(); }); - }, + } - _transitionTo: function(destIndex, velocity, jumpSpringTo, cb) { + _transitionTo(destIndex, velocity, jumpSpringTo, cb) { if (destIndex === this.state.presentedIndex) { return; } @@ -406,13 +403,13 @@ let Navigator = React.createClass({ this.spring.getSpringConfig().tension = sceneConfig.springTension; this.spring.setVelocity(velocity || sceneConfig.defaultTransitionVelocity); this.spring.setEndValue(1); - }, + } /** * This happens for each frame of either a gesture or a transition. If both are * happening, we only set values for the transition and the gesture will catch up later */ - _handleSpringUpdate: function() { + _handleSpringUpdate() { // Prioritize handling transition in progress over a gesture: if (this.state.transitionFromIndex != null) { this._transitionBetween( @@ -428,12 +425,12 @@ let Navigator = React.createClass({ this.spring.getCurrentValue() ); } - }, + } /** * This happens at the end of a transition started by transitionTo, and when the spring catches up to a pending gesture */ - _completeTransition: function() { + _completeTransition() { if (this.spring.getCurrentValue() !== 1 && this.spring.getCurrentValue() !== 0) { // The spring has finished catching up to a gesture in progress. Remove the pending progress // and we will be in a normal activeGesture state @@ -479,17 +476,17 @@ let Navigator = React.createClass({ queuedTransition.cb ); } - }, + } - _emitDidFocus: function(route) { + _emitDidFocus(route) { this.navigationContext.emit('didfocus', {route: route}); if (this.props.onDidFocus) { this.props.onDidFocus(route); } - }, + } - _emitWillFocus: function(route) { + _emitWillFocus(route) { this.navigationContext.emit('willfocus', {route: route}); let navBar = this._navBar; @@ -499,12 +496,12 @@ let Navigator = React.createClass({ if (this.props.onWillFocus) { this.props.onWillFocus(route); } - }, + } /** * Hides all scenes that we are not currently on, gesturing to, or transitioning from */ - _hideScenes: function() { + _hideScenes() { let gesturingToIndex = null; if (this.state.activeGesture) { gesturingToIndex = this.state.presentedIndex + this._deltaForGestureAction(this.state.activeGesture); @@ -517,20 +514,20 @@ let Navigator = React.createClass({ } this._disableScene(i); } - }, + } /** * Push a scene off the screen, so that opacity:0 scenes will not block touches sent to the presented scenes */ - _disableScene: function(sceneIndex) { + _disableScene(sceneIndex) { this.refs['scene_' + sceneIndex] && this.refs['scene_' + sceneIndex].setNativeProps(SCENE_DISABLED_NATIVE_PROPS); - }, + } /** * Put the scene back into the state as defined by props.sceneStyle, so transitions can happen normally */ - _enableScene: function(sceneIndex) { + _enableScene(sceneIndex) { // First, determine what the defined styles are for scenes in this navigator let sceneStyle = flattenStyle([styles.baseScene, this.props.sceneStyle]); // Then restore the pointer events and top value for this scene @@ -549,9 +546,9 @@ let Navigator = React.createClass({ } this.refs['scene_' + sceneIndex] && this.refs['scene_' + sceneIndex].setNativeProps(enabledSceneNativeProps); - }, + } - _onAnimationStart: function() { + _onAnimationStart() { let fromIndex = this.state.presentedIndex; let toIndex = this.state.presentedIndex; if (this.state.transitionFromIndex != null) { @@ -565,9 +562,9 @@ let Navigator = React.createClass({ if (navBar && navBar.onAnimationStart) { navBar.onAnimationStart(fromIndex, toIndex); } - }, + } - _onAnimationEnd: function() { + _onAnimationEnd() { let max = this.state.routeStack.length - 1; for (let index = 0; index <= max; index++) { this._setRenderSceneToHardwareTextureAndroid(index, false); @@ -577,38 +574,38 @@ let Navigator = React.createClass({ if (navBar && navBar.onAnimationEnd) { navBar.onAnimationEnd(); } - }, + } - _setRenderSceneToHardwareTextureAndroid: function(sceneIndex, shouldRenderToHardwareTexture) { + _setRenderSceneToHardwareTextureAndroid(sceneIndex, shouldRenderToHardwareTexture) { let viewAtIndex = this.refs['scene_' + sceneIndex]; if (viewAtIndex === null || viewAtIndex === undefined) { return; } viewAtIndex.setNativeProps( {renderToHardwareTextureAndroid: shouldRenderToHardwareTexture}); - }, + } - _handleTouchStart: function() { + _handleTouchStart() { this._eligibleGestures = GESTURE_ACTIONS; - }, + } - _handleMoveShouldSetPanResponder: function(e, gestureState) { + _handleMoveShouldSetPanResponder(e, gestureState) { let sceneConfig = this.state.sceneConfigStack[this.state.presentedIndex]; if (!sceneConfig) { return false; } this._expectingGestureGrant = this._matchGestureAction(this._eligibleGestures, sceneConfig.gestures, gestureState); return !!this._expectingGestureGrant; - }, + } - _doesGestureOverswipe: function(gestureName) { + _doesGestureOverswipe(gestureName) { let wouldOverswipeBack = this.state.presentedIndex <= 0 && (gestureName === 'pop' || gestureName === 'jumpBack'); let wouldOverswipeForward = this.state.presentedIndex >= this.state.routeStack.length - 1 && gestureName === 'jumpForward'; return wouldOverswipeForward || wouldOverswipeBack; - }, + } - _handlePanResponderGrant: function(e, gestureState) { + _handlePanResponderGrant(e, gestureState) { invariant( this._expectingGestureGrant, 'Responder granted unexpectedly.' @@ -616,9 +613,9 @@ let Navigator = React.createClass({ this._attachGesture(this._expectingGestureGrant); this._onAnimationStart(); this._expectingGestureGrant = null; - }, + } - _deltaForGestureAction: function(gestureAction) { + _deltaForGestureAction(gestureAction) { switch (gestureAction) { case 'pop': case 'jumpBack': @@ -629,9 +626,9 @@ let Navigator = React.createClass({ invariant(false, 'Unsupported gesture action ' + gestureAction); return; } - }, + } - _handlePanResponderRelease: function(e, gestureState) { + _handlePanResponderRelease(e, gestureState) { let sceneConfig = this.state.sceneConfigStack[this.state.presentedIndex]; let releaseGestureAction = this.state.activeGesture; if (!releaseGestureAction) { @@ -691,9 +688,9 @@ let Navigator = React.createClass({ ); } this._detachGesture(); - }, + } - _handlePanResponderTerminate: function(e, gestureState) { + _handlePanResponderTerminate(e, gestureState) { if (this.state.activeGesture == null) { return; } @@ -707,21 +704,21 @@ let Navigator = React.createClass({ null, 1 - this.spring.getCurrentValue() ); - }, + } - _attachGesture: function(gestureId) { + _attachGesture(gestureId) { this.state.activeGesture = gestureId; let gesturingToIndex = this.state.presentedIndex + this._deltaForGestureAction(this.state.activeGesture); this._enableScene(gesturingToIndex); - }, + } - _detachGesture: function() { + _detachGesture() { this.state.activeGesture = null; this.state.pendingGestureProgress = null; this._hideScenes(); - }, + } - _handlePanResponderMove: function(e, gestureState) { + _handlePanResponderMove(e, gestureState) { let sceneConfig = this.state.sceneConfigStack[this.state.presentedIndex]; if (this.state.activeGesture) { let gesture = sceneConfig.gestures[this.state.activeGesture]; @@ -731,9 +728,9 @@ let Navigator = React.createClass({ if (matchedGesture) { this._attachGesture(matchedGesture); } - }, + } - _moveAttachedGesture: function(gesture, gestureState) { + _moveAttachedGesture(gesture, gestureState) { let isTravelVertical = gesture.direction === 'top-to-bottom' || gesture.direction === 'bottom-to-top'; let isTravelInverted = gesture.direction === 'right-to-left' || gesture.direction === 'bottom-to-top'; let distance = isTravelVertical ? gestureState.dy : gestureState.dx; @@ -764,9 +761,9 @@ let Navigator = React.createClass({ } else { this.spring.setCurrentValue(nextProgress); } - }, + } - _matchGestureAction: function(eligibleGestures, gestures, gestureState) { + _matchGestureAction(eligibleGestures, gestures, gestureState) { if (!gestures) { return null; } @@ -813,9 +810,9 @@ let Navigator = React.createClass({ } }); return matchedGesture; - }, + } - _transitionSceneStyle: function(fromIndex, toIndex, progress, index) { + _transitionSceneStyle(fromIndex, toIndex, progress, index) { let viewAtIndex = this.refs['scene_' + index]; if (viewAtIndex === null || viewAtIndex === undefined) { return; @@ -836,22 +833,22 @@ let Navigator = React.createClass({ if (didChange) { viewAtIndex.setNativeProps({style: styleToUse}); } - }, + } - _transitionBetween: function(fromIndex, toIndex, progress) { + _transitionBetween(fromIndex, toIndex, progress) { this._transitionSceneStyle(fromIndex, toIndex, progress, fromIndex); this._transitionSceneStyle(fromIndex, toIndex, progress, toIndex); let navBar = this._navBar; if (navBar && navBar.updateProgress && toIndex >= 0 && fromIndex >= 0) { navBar.updateProgress(progress, fromIndex, toIndex); } - }, + } - _handleResponderTerminationRequest: function() { + _handleResponderTerminationRequest() { return false; - }, + } - _getDestIndexWithinBounds: function(n) { + _getDestIndexWithinBounds(n) { let currentIndex = this.state.presentedIndex; let destIndex = currentIndex + n; invariant( @@ -864,9 +861,9 @@ let Navigator = React.createClass({ 'Cannot jump past the last route.' ); return destIndex; - }, + } - _jumpN: function(n) { + _jumpN(n) { let destIndex = this._getDestIndexWithinBounds(n); this._enableScene(destIndex); this._emitWillFocus(this.state.routeStack[destIndex]); @@ -883,26 +880,26 @@ let Navigator = React.createClass({ // __uid should be non-negative __uid = Math.max(__uid + n, 0); } - }, + } - jumpTo: function(route) { + jumpTo(route) { let destIndex = this.state.routeStack.indexOf(route); invariant( destIndex !== -1, 'Cannot jump to route that is not in the route stack' ); this._jumpN(destIndex - this.state.presentedIndex); - }, + } - jumpForward: function() { + jumpForward() { this._jumpN(1); - }, + } - jumpBack: function() { + jumpBack() { this._jumpN(-1); - }, + } - push: function(route) { + push(route) { invariant(!!route, 'Must supply route to push'); let activeLength = this.state.presentedIndex + 1; let activeStack = this.state.routeStack.slice(0, activeLength); @@ -921,9 +918,9 @@ let Navigator = React.createClass({ this._enableScene(destIndex); this._transitionTo(destIndex); }); - }, + } - _popN: function(n) { + _popN(n) { if (n === 0) { return; } @@ -943,9 +940,9 @@ let Navigator = React.createClass({ this._cleanScenesPastIndex(popIndex); } ); - }, + } - pop: function() { + pop() { if (this.state.transitionQueue.length) { // This is the workaround to prevent user from firing multiple `pop()` // calls that may pop the routes beyond the limit. @@ -959,7 +956,7 @@ let Navigator = React.createClass({ if (this.state.presentedIndex > 0) { this._popN(1); } - }, + } /** * Replace a route in the navigation stack. @@ -967,7 +964,7 @@ let Navigator = React.createClass({ * `index` specifies the route in the stack that should be replaced. * If it's negative, it counts from the back. */ - replaceAtIndex: function(route, index, cb) { + replaceAtIndex(route, index, cb) { invariant(!!route, 'Must supply route to replace'); if (index < 0) { index += this.state.routeStack.length; @@ -994,27 +991,27 @@ let Navigator = React.createClass({ } cb && cb(); }); - }, + } /** * Replaces the current scene in the stack. */ - replace: function(route) { + replace(route) { this.replaceAtIndex(route, this.state.presentedIndex); - }, + } /** * Replace the current route's parent. */ - replacePrevious: function(route) { + replacePrevious(route) { this.replaceAtIndex(route, this.state.presentedIndex - 1); - }, + } - popToTop: function() { + popToTop() { this.popToRoute(this.state.routeStack[0]); - }, + } - popToRoute: function(route) { + popToRoute(route) { let indexOfRoute = this.state.routeStack.indexOf(route); invariant( indexOfRoute !== -1, @@ -1022,17 +1019,17 @@ let Navigator = React.createClass({ ); let numToPop = this.state.presentedIndex - indexOfRoute; this._popN(numToPop); - }, + } - replacePreviousAndPop: function(route) { + replacePreviousAndPop(route) { if (this.state.routeStack.length < 2) { return; } this.replacePrevious(route); this.pop(); - }, + } - resetTo: function(route) { + resetTo(route) { invariant(!!route, 'Must supply route to push'); this.replaceAtIndex(route, 0, () => { // Do not use popToRoute here, because race conditions could prevent the @@ -1041,14 +1038,14 @@ let Navigator = React.createClass({ this._popN(this.state.presentedIndex); } }); - }, + } - getCurrentRoutes: function() { + getCurrentRoutes() { // Clone before returning to avoid caller mutating the stack return this.state.routeStack.slice(); - }, + } - _cleanScenesPastIndex: function(index) { + _cleanScenesPastIndex(index) { let newStackLength = index + 1; // Remove any unneeded rendered routes. if (newStackLength < this.state.routeStack.length) { @@ -1057,9 +1054,9 @@ let Navigator = React.createClass({ routeStack: this.state.routeStack.slice(0, newStackLength), }); } - }, + } - _renderScene: function(route, i) { + _renderScene(route, i) { let disabledSceneStyle = null; let disabledScenePointerEvents = 'auto'; if (i !== this.state.presentedIndex) { @@ -1082,9 +1079,9 @@ let Navigator = React.createClass({ )} ); - }, + } - _renderNavigationBar: function() { + _renderNavigationBar() { if (!this.props.navigationBar) { return null; } @@ -1095,9 +1092,9 @@ let Navigator = React.createClass({ navigator: this, navState: this.state, }); - }, + } - render: function() { + render() { let newRenderedSceneMap = new Map(); let scenes = this.state.routeStack.map((route, index) => { let renderedScene; @@ -1125,15 +1122,20 @@ let Navigator = React.createClass({ {this._renderNavigationBar()} ); - }, + } - _getNavigationContext: function() { + _getNavigationContext() { if (!this._navigationContext) { this._navigationContext = new NavigationContext(); } return this._navigationContext; } -}); +} + +mixin.onClass(Navigator, TimerMixin); +mixin.onClass(Navigator, InteractionMixin); +mixin.onClass(Navigator, Subscribable.Mixin); +autobind(Navigator); Navigator.isReactNativeComponent = true; diff --git a/Libraries/Picker/Picker.web.js b/Libraries/Picker/Picker.web.js index 68e1754..1e91037 100644 --- a/Libraries/Picker/Picker.web.js +++ b/Libraries/Picker/Picker.web.js @@ -49,16 +49,18 @@ class Picker extends Component { } }; -Picker.Item = React.createClass({ - propTypes: { +class Item extends Component { + static propTypes = { value: PropTypes.any, // string or integer basically label: PropTypes.string, - }, + } - render: function() { + render() { return ; - }, -}); + } +} + +Picker.Item = Item; autobind(Picker); diff --git a/Libraries/TabBar/TabBar.web.js b/Libraries/TabBar/TabBar.web.js index 2d9c7ea..168a939 100644 --- a/Libraries/TabBar/TabBar.web.js +++ b/Libraries/TabBar/TabBar.web.js @@ -6,26 +6,23 @@ */ 'use strict'; -import React from 'react'; +import React, { Component } from 'react'; import PropTypes from 'prop-types'; import View from 'ReactView'; import TabBarItem from './TabBarItem.web'; import TabBarContents from './TabBarContents.web'; import assign from 'object-assign'; import StyleSheet from 'ReactStyleSheet'; +import autobind from 'autobind-decorator'; -let TabBar = React.createClass({ - getInitialState() { - return { - selectedIndex: 0 - }; - }, +class TabBar extends Component { + state = { + selectedIndex: 0 + } - statics: { - Item: TabBarItem - }, + static Item = TabBarItem - propTypes: { + static propTypes = { style: PropTypes.object, /** * Color of the currently selected tab icon @@ -37,7 +34,7 @@ let TabBar = React.createClass({ barTintColor: PropTypes.string, clientHeight: PropTypes.number - }, + } getStyles() { return StyleSheet.create({ @@ -64,13 +61,13 @@ let TabBar = React.createClass({ display: 'table' } }); - }, + } handleTouchTap(index) { this.setState({ selectedIndex: index }); - }, + } render() { let self = this; @@ -115,8 +112,10 @@ let TabBar = React.createClass({ ); } -}); +} TabBar.isReactNativeComponent = true; +autobind(TabBar); + export default TabBar; diff --git a/Libraries/TabBar/TabBarContents.web.js b/Libraries/TabBar/TabBarContents.web.js index 643e0eb..ac72002 100644 --- a/Libraries/TabBar/TabBarContents.web.js +++ b/Libraries/TabBar/TabBarContents.web.js @@ -5,17 +5,15 @@ */ 'use strict'; -import React from 'react'; +import React, { Component } from 'react'; import View from 'ReactView'; import StyleSheet from 'ReactStyleSheet'; +import autobind from 'autobind-decorator'; -let TabBarContents = React.createClass({ - - getInitialState() { - return { - hasBeenSelected: false - }; - }, +class TabBarContents extends Component { + state = { + hasBeenSelected: false + } componentWillMount() { if (this.props.selected) { @@ -23,7 +21,7 @@ let TabBarContents = React.createClass({ hasBeenSelected: true }); } - }, + } componentWillReceiveProps(nextProps) { if (this.state.hasBeenSelected || nextProps.selected) { @@ -31,7 +29,7 @@ let TabBarContents = React.createClass({ hasBeenSelected: true }); } - }, + } render() { @@ -58,8 +56,8 @@ let TabBarContents = React.createClass({ return (tabContents); } -}); - +} +autobind(TabBarContents); export default TabBarContents; diff --git a/Libraries/TabBar/TabBarItem.web.js b/Libraries/TabBar/TabBarItem.web.js index 28b8624..65caa51 100644 --- a/Libraries/TabBar/TabBarItem.web.js +++ b/Libraries/TabBar/TabBarItem.web.js @@ -5,15 +5,16 @@ */ 'use strict'; -import React from 'react'; +import React, { Component } from 'react'; import PropTypes from 'prop-types'; import Image from 'ReactImage'; import Text from 'ReactText'; import View from 'ReactView'; import StyleSheet from 'ReactStyleSheet'; +import autobind from 'autobind-decorator'; -let TabBarItem = React.createClass({ - propTypes: { +class TabBarItem extends Component { + static propTypes = { /** * Little red bubble that sits at the top right of the icon. */ @@ -52,7 +53,7 @@ let TabBarItem = React.createClass({ * Color of the currently selected tab icon */ selectedColor: PropTypes.string - }, + } _onClick() { if (this.props.onPress) { @@ -61,7 +62,7 @@ let TabBarItem = React.createClass({ if (this.props.handleTouchTap) { this.props.handleTouchTap(this.props.index); } - }, + } render() { @@ -79,7 +80,7 @@ let TabBarItem = React.createClass({ ); } -}); +} let styles = StyleSheet.create({ tab: { @@ -114,4 +115,6 @@ let styles = StyleSheet.create({ } }); +autobind(TabBarItem); + export default TabBarItem; diff --git a/Libraries/Text/Text.web.js b/Libraries/Text/Text.web.js index 163820e..0e1f9b2 100644 --- a/Libraries/Text/Text.web.js +++ b/Libraries/Text/Text.web.js @@ -8,11 +8,13 @@ */ 'use strict'; -import React from 'react'; +import React, { Component } from 'react'; import PropTypes from 'prop-types'; +import mixin from 'react-mixin'; import { Mixin as TouchableMixin } from 'ReactTouchable'; import { Mixin as LayoutMixin } from 'ReactLayoutMixin'; import { Mixin as NativeMethodsMixin } from 'NativeMethodsMixin'; +import autobind from 'autobind-decorator'; /** * A React component for displaying text which supports nesting, @@ -47,11 +49,9 @@ import { Mixin as NativeMethodsMixin } from 'NativeMethodsMixin'; * ``` */ -let Text = React.createClass({ +class Text extends Component { - mixins: [LayoutMixin, TouchableMixin, NativeMethodsMixin], - - propTypes: { + static propTypes = { /** * Used to truncate the text with an elipsis after computing the text * layout, including line wrapping, such that the total number of lines @@ -82,19 +82,19 @@ let Text = React.createClass({ * Specifies should fonts scale to respect Text Size accessibility setting on iOS. */ allowFontScaling: PropTypes.bool, - }, + }; - getInitialState(): Object { - return {...this.touchableGetInitialState(), ...{ - isHighlighted: false, - }}; - }, + static defaultProps: Object = { + allowFontScaling: true + }; - getDefaultProps(): Object { - return { - allowFontScaling: true, + constructor(props) { + super(props); + this.state = { + ...this.touchableGetInitialState(), + isHighlighted: false, }; - }, + } // componentDidMount() { // console.log('mount') @@ -108,7 +108,7 @@ let Text = React.createClass({ let shouldSetFromProps = this.props.onStartShouldSetResponder && this.props.onStartShouldSetResponder(); return shouldSetFromProps || !!this.props.onPress; - }, + } /* * Returns true to allow responder termination @@ -121,31 +121,31 @@ let Text = React.createClass({ allowTermination = this.props.onResponderTerminationRequest(); } return allowTermination; - }, + } handleResponderGrant(e: SyntheticEvent, dispatchID: string) { this.touchableHandleResponderGrant(e, dispatchID); this.props.onResponderGrant && this.props.onResponderGrant.apply(this, arguments); - }, + } handleResponderMove(e: SyntheticEvent) { this.touchableHandleResponderMove(e); this.props.onResponderMove && this.props.onResponderMove.apply(this, arguments); - }, + } handleResponderRelease(e: SyntheticEvent) { this.touchableHandleResponderRelease(e); this.props.onResponderRelease && this.props.onResponderRelease.apply(this, arguments); - }, + } handleResponderTerminate(e: SyntheticEvent) { this.touchableHandleResponderTerminate(e); this.props.onResponderTerminate && this.props.onResponderTerminate.apply(this, arguments); - }, + } touchableHandleActivePressIn() { if (this.props.suppressHighlighting || !this.props.onPress) { @@ -154,7 +154,7 @@ let Text = React.createClass({ this.setState({ isHighlighted: true, }); - }, + } touchableHandleActivePressOut() { if (this.props.suppressHighlighting || !this.props.onPress) { @@ -163,27 +163,27 @@ let Text = React.createClass({ this.setState({ isHighlighted: false, }); - }, + } touchableHandlePress() { this.props.onPress && this.props.onPress(); - }, + } touchableGetPressRectOffset(): RectOffset { return PRESS_RECT_OFFSET; - }, + } getChildContext(): Object { return {isInAParentText: true}; - }, + } - contextTypes: { + static contextTypes = { isInAParentText: PropTypes.bool - }, + }; - childContextTypes: { + static childContextTypes = { isInAParentText: PropTypes.bool - }, + }; render() { let props = {...this.props}; @@ -248,8 +248,8 @@ let Text = React.createClass({ }) }} /> ); - }, -}); + } +} type RectOffset = { top: number; @@ -260,6 +260,11 @@ type RectOffset = { let PRESS_RECT_OFFSET = {top: 20, left: 20, right: 20, bottom: 30}; +mixin.onClass(Text, LayoutMixin); +mixin.onClass(Text, TouchableMixin); +mixin.onClass(Text, NativeMethodsMixin); +autobind(Text); + Text.isReactNativeComponent = true; export default Text; diff --git a/Libraries/View/View.web.js b/Libraries/View/View.web.js index a74e7c8..82be77c 100644 --- a/Libraries/View/View.web.js +++ b/Libraries/View/View.web.js @@ -8,16 +8,16 @@ */ 'use strict'; -import React from 'react'; +import React, { Component } from 'react'; import PropTypes from 'prop-types'; import StyleSheet from 'ReactStyleSheet'; +import mixin from 'react-mixin'; import { Mixin as LayoutMixin } from 'ReactLayoutMixin'; import { Mixin as NativeMethodsMixin } from 'NativeMethodsMixin'; -var View = React.createClass({ - mixins: [LayoutMixin, NativeMethodsMixin], +class View extends Component { - propTypes: { + static propTypes = { /** * Used to locate this view in end-to-end tests. NB: disables the 'layout-only * view removal' optimization for this view! @@ -91,16 +91,19 @@ var View = React.createClass({ PropTypes.object, PropTypes.array ]), - }, + }; - render: function() { + render() { return (
{this.props.children}
); } -}); +} + +mixin.onClass(View, LayoutMixin); +mixin.onClass(View, NativeMethodsMixin); View.isReactNativeComponent = true; From 2ae8bc9fcca77e353952fd8573df6daadf81bd95 Mon Sep 17 00:00:00 2001 From: Li Jie Date: Fri, 23 Jun 2017 15:41:41 +0800 Subject: [PATCH 016/102] Use Array.prototype.find instead of array-find-index --- Libraries/NetInfo/NetInfo.web.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Libraries/NetInfo/NetInfo.web.js b/Libraries/NetInfo/NetInfo.web.js index 3a59b21..cc8bbf3 100644 --- a/Libraries/NetInfo/NetInfo.web.js +++ b/Libraries/NetInfo/NetInfo.web.js @@ -9,7 +9,6 @@ 'use strict'; import ExecutionEnvironment from 'fbjs/lib/ExecutionEnvironment'; -import findIndex from 'array-find-index'; import invariant from 'fbjs/lib/invariant'; const connection = @@ -88,7 +87,7 @@ const NetInfo = { type ); - const listenerIndex = findIndex(connectionListeners, pair => pair[0] === handler); + const listenerIndex = connectionListeners.findIndex(pair => pair[0] === handler); invariant( listenerIndex !== -1, 'Trying to remove NetInfo connection listener for unregistered handler' From 3aa60cc11b885fb6ebb19b21ab23325ae6664d3a Mon Sep 17 00:00:00 2001 From: Li Jie Date: Fri, 23 Jun 2017 18:34:07 +0800 Subject: [PATCH 017/102] ScrollView scrolls with animation --- Libraries/ListView/ScrollResponder.web.js | 10 ++-- Libraries/ScrollView/ScrollView.web.js | 20 +++----- Libraries/Utilties/animatedScrollTo.js | 57 +++++++++++++++++++++++ 3 files changed, 70 insertions(+), 17 deletions(-) create mode 100644 Libraries/Utilties/animatedScrollTo.js diff --git a/Libraries/ListView/ScrollResponder.web.js b/Libraries/ListView/ScrollResponder.web.js index 04eb969..2487fe9 100644 --- a/Libraries/ListView/ScrollResponder.web.js +++ b/Libraries/ListView/ScrollResponder.web.js @@ -13,6 +13,7 @@ import React from 'react'; import ReactDOM from 'react-dom'; import warning from 'fbjs/lib/warning'; +import animatedScrollTo from '../Utilties/animatedScrollTo'; /** * Mixin that can be integrated in order to handle scrolling that plays well @@ -93,6 +94,7 @@ import warning from 'fbjs/lib/warning'; */ const IS_ANIMATING_TOUCH_START_THRESHOLD_MS = 16; +const ANIMATION_DURATION_MS = 300; type State = { isTouching: boolean; @@ -351,7 +353,9 @@ let ScrollResponderMixin = { */ scrollResponderScrollTo: function(offsetX: number, offsetY: number) { // TODO: Add scroll animation - this.scrollResponderScrollWithouthAnimationTo(offsetX, offsetY); + let node = ReactDOM.findDOMNode(this); + + animatedScrollTo(node, {y: offsetY, x: offsetX}, ANIMATION_DURATION_MS); }, /** @@ -361,8 +365,8 @@ let ScrollResponderMixin = { scrollResponderScrollWithouthAnimationTo: function(offsetX: number, offsetY: number) { let node = ReactDOM.findDOMNode(this); - node.offsetX = offsetX; - node.offsetY = offsetY; + node.scrollLeft = offsetX; + node.scrollTop = offsetY; }, /** diff --git a/Libraries/ScrollView/ScrollView.web.js b/Libraries/ScrollView/ScrollView.web.js index 53dbfd3..23c1f39 100644 --- a/Libraries/ScrollView/ScrollView.web.js +++ b/Libraries/ScrollView/ScrollView.web.js @@ -55,26 +55,18 @@ class ScrollView extends Component { return this.refs[INNERVIEW]; } - scrollTo(opts) { + scrollTo(opts: { x?: number, y?: number, animated?: boolean }) { // $FlowFixMe - Don't know how to pass Mixin correctly. Postpone for now // this.getScrollResponder().scrollResponderScrollTo(destX || 0, destY || 0); if (typeof opts === 'number') { opts = { y: opts, x: arguments[1] }; } - this.scrollWithoutAnimationTo(opts.y, opts.x); - } - - scrollWithoutAnimationTo(destY?: number, destX?: number) { - // $FlowFixMe - Don't know how to pass Mixin correctly. Postpone for now - // this.getScrollResponder().scrollResponderScrollWithouthAnimationTo( - // destX || 0, - // destY || 0, - // ); - - this._scrollViewDom = ReactDOM.findDOMNode(this.refs[SCROLLVIEW]); - this._scrollViewDom.scrollTop = destY || 0; - this._scrollViewDom.scrollLeft = destX || 0; + if (opts.animated) { + this.getScrollResponder().scrollResponderScrollTo(opts.x || 0, opts.y || 0); + } else { + this.getScrollResponder().scrollResponderScrollWithouthAnimationTo(opts.x || 0, opts.y || 0); + } } handleScroll(e: Event) { diff --git a/Libraries/Utilties/animatedScrollTo.js b/Libraries/Utilties/animatedScrollTo.js new file mode 100644 index 0000000..a42f634 --- /dev/null +++ b/Libraries/Utilties/animatedScrollTo.js @@ -0,0 +1,57 @@ +// Modified from https://github.com/madebysource/animated-scrollto/blob/master/animatedScrollTo.js + +(function (window) { + var requestAnimFrame = (function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(callback){window.setTimeout(callback,1000/60);};})(); + + var easeInOutQuad = function (t, b, c, d) { + t /= d/2; + if (t < 1) return c/2*t*t + b; + t--; + return -c/2 * (t*(t-2) - 1) + b; + }; + + var animatedScrollTo = function (element, to, duration, callback) { + var startY = element.scrollTop; + var startX = element.scrollLeft; + var changeY = to.y - startY; + var changeX = to.x - startX; + var animationStart = +new Date(); + var animating = true; + var lastposX = null; + var lastposY = null; + + var animateScroll = function() { + if (!animating) { + return; + } + requestAnimFrame(animateScroll); + var now = +new Date(); + var valY = Math.floor(easeInOutQuad(now - animationStart, startY, changeY, duration)); + var valX = Math.floor(easeInOutQuad(now - animationStart, startX, changeX, duration)); + + // If last position is not element's scroll position, maybe user was scrolled. + if (lastposY === null || + (lastposY === element.scrollTop && lastposX === element.scrollLeft)) { + lastposY = valY; + lastposX = valX; + element.scrollTop = valY; + element.scrollLeft = valX; + } else { + animating = false; + } + if (now > animationStart + duration) { + element.scrollTop = to.y; + element.scrollLeft = to.x; + animating = false; + if (callback) { callback(); } + } + }; + requestAnimFrame(animateScroll); + }; + + if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') { + module.exports = animatedScrollTo; + } else { + window.animatedScrollTo = animatedScrollTo; + } +})(window); From 372b4216953c30fd947f3d8586fa142d5b85530e Mon Sep 17 00:00:00 2001 From: Li Jie Date: Sat, 24 Jun 2017 20:45:05 +0800 Subject: [PATCH 018/102] Make ScrollView.defaultProps.scrollEnabled default true --- Libraries/ScrollView/ScrollView.web.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Libraries/ScrollView/ScrollView.web.js b/Libraries/ScrollView/ScrollView.web.js index 53dbfd3..fffb30f 100644 --- a/Libraries/ScrollView/ScrollView.web.js +++ b/Libraries/ScrollView/ScrollView.web.js @@ -38,6 +38,9 @@ const CONTENT_EXT_STYLE = ['padding', 'paddingTop', 'paddingBottom', 'paddingLef * view from becoming the responder. */ class ScrollView extends Component { + static defaultProps = { + scrollEnabled: true + }; state = this.scrollResponderMixinGetInitialState(); From d759183ab3bede34ec5e4001272af8f00c434308 Mon Sep 17 00:00:00 2001 From: Li Jie Date: Sat, 1 Jul 2017 01:37:51 +0800 Subject: [PATCH 019/102] Add TextInput.State --- Libraries/TextInput/TextInput.web.js | 3 ++ Libraries/TextInput/TextInputState.web.js | 66 +++++++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 Libraries/TextInput/TextInputState.web.js diff --git a/Libraries/TextInput/TextInput.web.js b/Libraries/TextInput/TextInput.web.js index 127c88f..0b4aac3 100644 --- a/Libraries/TextInput/TextInput.web.js +++ b/Libraries/TextInput/TextInput.web.js @@ -13,6 +13,7 @@ import PropTypes from 'prop-types'; import ReactDOM from 'react-dom'; import View from 'ReactView'; import autobind from 'autobind-decorator'; +import TextInputState from './TextInputState'; let typeMap = { 'default': 'text', @@ -198,4 +199,6 @@ autobind(TextInput); TextInput.isReactNativeComponent = true; +TextInput.State = TextInputState; + export default TextInput; diff --git a/Libraries/TextInput/TextInputState.web.js b/Libraries/TextInput/TextInputState.web.js new file mode 100644 index 0000000..e45a3da --- /dev/null +++ b/Libraries/TextInput/TextInputState.web.js @@ -0,0 +1,66 @@ +/** + * 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 TextInputState + * @flow + * + * This class is responsible for coordinating the "focused" + * state for TextInputs. All calls relating to the keyboard + * should be funneled through here + */ +'use strict'; + +var TextInputState = { + + /** + * Returns the ID of the currently focused text field, if one exists + * If no text field is focused it returns null + */ + currentlyFocusedField: function(): ?Object { + var focused = document.activeElement; + if (!focused || focused == document.body) { + return null; + } else if (document.querySelector) { + focused = document.querySelector(":focus"); + } + + if (!focused) { + return null; + } + + if ((focused.tagName === 'INPUT' && focused.type === 'text') || + (focused.tagName === 'TEXTAREA')) { + return focused; + } + return null; + }, + + /** + * @param {Object} TextInputID id of the text field to focus + * Focuses the specified text field + * noop if the text field was already focused + */ + focusTextInput: function(textFieldID: ?Object) { + if (textFieldID) { + textFieldID.focus(); + } + }, + + /** + * @param {Object} textFieldID id of the text field to focus + * Unfocuses the specified text field + * noop if it wasn't focused + */ + blurTextInput: function(textFieldID: ?Object) { + if (textFieldID) { + textFieldID.blur(); + } + } +}; + +module.exports = TextInputState; From 81159682243a9d57bc1a4d6f5ab88b79c105f7d7 Mon Sep 17 00:00:00 2001 From: Li Jie Date: Sat, 1 Jul 2017 10:51:28 +0800 Subject: [PATCH 020/102] Add storybook --- Storybook/.babelrc | 3 + Storybook/.buckconfig | 6 + Storybook/.flowconfig | 47 + Storybook/.gitattributes | 1 + Storybook/.gitignore | 53 + Storybook/.storybook/addons.js | 4 + Storybook/.storybook/config.js | 9 + Storybook/.storybook/webpack.config.js | 56 + Storybook/.watchmanconfig | 1 + Storybook/__tests__/index.android.js | 12 + Storybook/__tests__/index.ios.js | 12 + Storybook/android/app/BUCK | 65 + Storybook/android/app/build.gradle | 146 + Storybook/android/app/proguard-rules.pro | 70 + .../android/app/src/main/AndroidManifest.xml | 32 + .../main/java/com/storybook/MainActivity.java | 15 + .../java/com/storybook/MainApplication.java | 40 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3418 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2206 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4842 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7718 bytes .../app/src/main/res/values/strings.xml | 3 + .../app/src/main/res/values/styles.xml | 8 + Storybook/android/build.gradle | 24 + Storybook/android/gradle.properties | 20 + .../android/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 52266 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + Storybook/android/gradlew | 164 + Storybook/android/gradlew.bat | 90 + Storybook/android/keystores/BUCK | 8 + .../keystores/debug.keystore.properties | 4 + Storybook/android/settings.gradle | 3 + Storybook/app.json | 4 + Storybook/index.android.js | 53 + Storybook/index.ios.js | 53 + Storybook/ios/Storybook-tvOS/Info.plist | 54 + Storybook/ios/Storybook-tvOSTests/Info.plist | 24 + .../ios/Storybook.xcodeproj/project.pbxproj | 1251 +++ .../xcschemes/Storybook-tvOS.xcscheme | 129 + .../xcshareddata/xcschemes/Storybook.xcscheme | 129 + Storybook/ios/Storybook/AppDelegate.h | 16 + Storybook/ios/Storybook/AppDelegate.m | 37 + .../ios/Storybook/Base.lproj/LaunchScreen.xib | 42 + .../AppIcon.appiconset/Contents.json | 38 + Storybook/ios/Storybook/Info.plist | 56 + Storybook/ios/Storybook/main.m | 18 + Storybook/ios/StorybookTests/Info.plist | 24 + Storybook/ios/StorybookTests/StorybookTests.m | 70 + Storybook/package.json | 29 + Storybook/stories/Button/index.android.js | 23 + Storybook/stories/Button/index.ios.js | 23 + Storybook/stories/CenterView/index.js | 22 + Storybook/stories/CenterView/style.js | 8 + Storybook/stories/Welcome/index.js | 55 + Storybook/stories/index.js | 27 + Storybook/storybook/addons.js | 4 + Storybook/storybook/index.android.js | 3 + Storybook/storybook/index.ios.js | 3 + Storybook/storybook/storybook.js | 13 + Storybook/yarn.lock | 8276 +++++++++++++++++ package.json | 7 +- 61 files changed, 11390 insertions(+), 2 deletions(-) create mode 100644 Storybook/.babelrc create mode 100644 Storybook/.buckconfig create mode 100644 Storybook/.flowconfig create mode 100644 Storybook/.gitattributes create mode 100644 Storybook/.gitignore create mode 100644 Storybook/.storybook/addons.js create mode 100644 Storybook/.storybook/config.js create mode 100644 Storybook/.storybook/webpack.config.js create mode 100644 Storybook/.watchmanconfig create mode 100644 Storybook/__tests__/index.android.js create mode 100644 Storybook/__tests__/index.ios.js create mode 100644 Storybook/android/app/BUCK create mode 100644 Storybook/android/app/build.gradle create mode 100644 Storybook/android/app/proguard-rules.pro create mode 100644 Storybook/android/app/src/main/AndroidManifest.xml create mode 100644 Storybook/android/app/src/main/java/com/storybook/MainActivity.java create mode 100644 Storybook/android/app/src/main/java/com/storybook/MainApplication.java create mode 100644 Storybook/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 Storybook/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 Storybook/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 Storybook/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 Storybook/android/app/src/main/res/values/strings.xml create mode 100644 Storybook/android/app/src/main/res/values/styles.xml create mode 100644 Storybook/android/build.gradle create mode 100644 Storybook/android/gradle.properties create mode 100644 Storybook/android/gradle/wrapper/gradle-wrapper.jar create mode 100644 Storybook/android/gradle/wrapper/gradle-wrapper.properties create mode 100755 Storybook/android/gradlew create mode 100644 Storybook/android/gradlew.bat create mode 100644 Storybook/android/keystores/BUCK create mode 100644 Storybook/android/keystores/debug.keystore.properties create mode 100644 Storybook/android/settings.gradle create mode 100644 Storybook/app.json create mode 100644 Storybook/index.android.js create mode 100644 Storybook/index.ios.js create mode 100644 Storybook/ios/Storybook-tvOS/Info.plist create mode 100644 Storybook/ios/Storybook-tvOSTests/Info.plist create mode 100644 Storybook/ios/Storybook.xcodeproj/project.pbxproj create mode 100644 Storybook/ios/Storybook.xcodeproj/xcshareddata/xcschemes/Storybook-tvOS.xcscheme create mode 100644 Storybook/ios/Storybook.xcodeproj/xcshareddata/xcschemes/Storybook.xcscheme create mode 100644 Storybook/ios/Storybook/AppDelegate.h create mode 100644 Storybook/ios/Storybook/AppDelegate.m create mode 100644 Storybook/ios/Storybook/Base.lproj/LaunchScreen.xib create mode 100644 Storybook/ios/Storybook/Images.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Storybook/ios/Storybook/Info.plist create mode 100644 Storybook/ios/Storybook/main.m create mode 100644 Storybook/ios/StorybookTests/Info.plist create mode 100644 Storybook/ios/StorybookTests/StorybookTests.m create mode 100644 Storybook/package.json create mode 100644 Storybook/stories/Button/index.android.js create mode 100644 Storybook/stories/Button/index.ios.js create mode 100644 Storybook/stories/CenterView/index.js create mode 100644 Storybook/stories/CenterView/style.js create mode 100644 Storybook/stories/Welcome/index.js create mode 100644 Storybook/stories/index.js create mode 100644 Storybook/storybook/addons.js create mode 100644 Storybook/storybook/index.android.js create mode 100644 Storybook/storybook/index.ios.js create mode 100644 Storybook/storybook/storybook.js create mode 100644 Storybook/yarn.lock diff --git a/Storybook/.babelrc b/Storybook/.babelrc new file mode 100644 index 0000000..a9ce136 --- /dev/null +++ b/Storybook/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": ["react-native"] +} diff --git a/Storybook/.buckconfig b/Storybook/.buckconfig new file mode 100644 index 0000000..934256c --- /dev/null +++ b/Storybook/.buckconfig @@ -0,0 +1,6 @@ + +[android] + target = Google Inc.:Google APIs:23 + +[maven_repositories] + central = https://repo1.maven.org/maven2 diff --git a/Storybook/.flowconfig b/Storybook/.flowconfig new file mode 100644 index 0000000..694b720 --- /dev/null +++ b/Storybook/.flowconfig @@ -0,0 +1,47 @@ +[ignore] +; We fork some components by platform +.*/*[.]android.js + +; Ignore "BUCK" generated dirs +/\.buckd/ + +; Ignore unexpected extra "@providesModule" +.*/node_modules/.*/node_modules/fbjs/.* + +; Ignore duplicate module providers +; For RN Apps installed via npm, "Libraries" folder is inside +; "node_modules/react-native" but in the source repo it is in the root +.*/Libraries/react-native/React.js +.*/Libraries/react-native/ReactNative.js + +[include] + +[libs] +node_modules/react-native/Libraries/react-native/react-native-interface.js +node_modules/react-native/flow +flow/ + +[options] +emoji=true + +module.system=haste + +experimental.strict_type_args=true + +munge_underscores=true + +module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub' + +suppress_type=$FlowIssue +suppress_type=$FlowFixMe +suppress_type=$FixMe + +suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(4[0-5]\\|[1-3][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) +suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(4[0-5]\\|[1-3][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ +suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy +suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError + +unsafe.enable_getters_and_setters=true + +[version] +^0.45.0 diff --git a/Storybook/.gitattributes b/Storybook/.gitattributes new file mode 100644 index 0000000..d42ff18 --- /dev/null +++ b/Storybook/.gitattributes @@ -0,0 +1 @@ +*.pbxproj -text diff --git a/Storybook/.gitignore b/Storybook/.gitignore new file mode 100644 index 0000000..10be197 --- /dev/null +++ b/Storybook/.gitignore @@ -0,0 +1,53 @@ +# OSX +# +.DS_Store + +# Xcode +# +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.hmap +*.ipa +*.xcuserstate +project.xcworkspace + +# Android/IntelliJ +# +build/ +.idea +.gradle +local.properties +*.iml + +# node.js +# +node_modules/ +npm-debug.log +yarn-error.log + +# BUCK +buck-out/ +\.buckd/ +*.keystore + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the +# screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md + +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots diff --git a/Storybook/.storybook/addons.js b/Storybook/.storybook/addons.js new file mode 100644 index 0000000..967b205 --- /dev/null +++ b/Storybook/.storybook/addons.js @@ -0,0 +1,4 @@ +/* eslint-disable import/no-extraneous-dependencies, import/no-unresolved, import/extensions */ + +import '@storybook/addon-actions/register'; +import '@storybook/addon-links/register'; diff --git a/Storybook/.storybook/config.js b/Storybook/.storybook/config.js new file mode 100644 index 0000000..00e3153 --- /dev/null +++ b/Storybook/.storybook/config.js @@ -0,0 +1,9 @@ +/* eslint-disable import/no-extraneous-dependencies, import/no-unresolved, import/extensions */ + +import { configure } from '@storybook/react'; + +function loadStories() { + require('../stories'); +} + +configure(loadStories, module); diff --git a/Storybook/.storybook/webpack.config.js b/Storybook/.storybook/webpack.config.js new file mode 100644 index 0000000..1710c0d --- /dev/null +++ b/Storybook/.storybook/webpack.config.js @@ -0,0 +1,56 @@ +const path = require('path') + +// Export a function. Accept the base config as the only param. +module.exports = (storybookBaseConfig) => { + // configType has a value of 'DEVELOPMENT' or 'PRODUCTION' + // You can change the configuration based on that. + // 'PRODUCTION' is used when building the static version of storybook. + + // Make whatever fine-grained changes you need + if (!storybookBaseConfig.resolve.alias) { + storybookBaseConfig.resolve.alias = {} + } + storybookBaseConfig.resolve.extensions = ['.web.js', '.jsx', '.js', '.ios.js', '.json'] + storybookBaseConfig.resolve.alias['react-native'] = path.resolve(__dirname, '../../lib') + storybookBaseConfig.resolve.alias['@storybook/react-native'] = '@storybook/react' + + storybookBaseConfig.module.rules[0].include = [ + path.resolve(__dirname, '../../lib'), + path.resolve(__dirname, '../stories'), + path.resolve(__dirname, '../*.js') + ] + + storybookBaseConfig.module.rules[0].test = /\.(js|jsx)$/ + delete storybookBaseConfig.module.rules[0].exclude + + storybookBaseConfig.module.rules.push({ + test: [/\.bmp$/, /\.gif$/, /\.jpe?g$/, /\.png$/], + loader: require.resolve('url-loader'), + options: { + limit: 10000, + name: 'static/media/[name].[hash:8].[ext]', + }, + }) + + storybookBaseConfig.module.rules.push({ + test: /\.css$/, + loaders: ['style-loader', 'css-loader'] + }) + + storybookBaseConfig.module.rules.push({ + exclude: [ + /\.html$/, + /\.(js|jsx)$/, + /\.css$/, + /\.json$/, + /\.bmp$/, + /\.gif$/, + /\.jpe?g$/, + /\.png$/, + ], + loader: 'file-loader' + }) + + // Return the altered config + return storybookBaseConfig +} diff --git a/Storybook/.watchmanconfig b/Storybook/.watchmanconfig new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/Storybook/.watchmanconfig @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/Storybook/__tests__/index.android.js b/Storybook/__tests__/index.android.js new file mode 100644 index 0000000..b49b908 --- /dev/null +++ b/Storybook/__tests__/index.android.js @@ -0,0 +1,12 @@ +import 'react-native'; +import React from 'react'; +import Index from '../index.android.js'; + +// Note: test renderer must be required after react-native. +import renderer from 'react-test-renderer'; + +it('renders correctly', () => { + const tree = renderer.create( + + ); +}); diff --git a/Storybook/__tests__/index.ios.js b/Storybook/__tests__/index.ios.js new file mode 100644 index 0000000..ba7c5b5 --- /dev/null +++ b/Storybook/__tests__/index.ios.js @@ -0,0 +1,12 @@ +import 'react-native'; +import React from 'react'; +import Index from '../index.ios.js'; + +// Note: test renderer must be required after react-native. +import renderer from 'react-test-renderer'; + +it('renders correctly', () => { + const tree = renderer.create( + + ); +}); diff --git a/Storybook/android/app/BUCK b/Storybook/android/app/BUCK new file mode 100644 index 0000000..3bb225c --- /dev/null +++ b/Storybook/android/app/BUCK @@ -0,0 +1,65 @@ +# To learn about Buck see [Docs](https://buckbuild.com/). +# To run your application with Buck: +# - install Buck +# - `npm start` - to start the packager +# - `cd android` +# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"` +# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck +# - `buck install -r android/app` - compile, install and run application +# + +lib_deps = [] + +for jarfile in glob(['libs/*.jar']): + name = 'jars__' + jarfile[jarfile.rindex('/') + 1: jarfile.rindex('.jar')] + lib_deps.append(':' + name) + prebuilt_jar( + name = name, + binary_jar = jarfile, + ) + +for aarfile in glob(['libs/*.aar']): + name = 'aars__' + aarfile[aarfile.rindex('/') + 1: aarfile.rindex('.aar')] + lib_deps.append(':' + name) + android_prebuilt_aar( + name = name, + aar = aarfile, + ) + +android_library( + name = "all-libs", + exported_deps = lib_deps, +) + +android_library( + name = "app-code", + srcs = glob([ + "src/main/java/**/*.java", + ]), + deps = [ + ":all-libs", + ":build_config", + ":res", + ], +) + +android_build_config( + name = "build_config", + package = "com.storybook", +) + +android_resource( + name = "res", + package = "com.storybook", + res = "src/main/res", +) + +android_binary( + name = "app", + keystore = "//android/keystores:debug", + manifest = "src/main/AndroidManifest.xml", + package_type = "debug", + deps = [ + ":app-code", + ], +) diff --git a/Storybook/android/app/build.gradle b/Storybook/android/app/build.gradle new file mode 100644 index 0000000..6b70f42 --- /dev/null +++ b/Storybook/android/app/build.gradle @@ -0,0 +1,146 @@ +apply plugin: "com.android.application" + +import com.android.build.OutputFile + +/** + * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets + * and bundleReleaseJsAndAssets). + * These basically call `react-native bundle` with the correct arguments during the Android build + * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the + * bundle directly from the development server. Below you can see all the possible configurations + * and their defaults. If you decide to add a configuration block, make sure to add it before the + * `apply from: "../../node_modules/react-native/react.gradle"` line. + * + * project.ext.react = [ + * // the name of the generated asset file containing your JS bundle + * bundleAssetName: "index.android.bundle", + * + * // the entry file for bundle generation + * entryFile: "index.android.js", + * + * // whether to bundle JS and assets in debug mode + * bundleInDebug: false, + * + * // whether to bundle JS and assets in release mode + * bundleInRelease: true, + * + * // whether to bundle JS and assets in another build variant (if configured). + * // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants + * // The configuration property can be in the following formats + * // 'bundleIn${productFlavor}${buildType}' + * // 'bundleIn${buildType}' + * // bundleInFreeDebug: true, + * // bundleInPaidRelease: true, + * // bundleInBeta: true, + * + * // whether to disable dev mode in custom build variants (by default only disabled in release) + * // for example: to disable dev mode in the staging build type (if configured) + * devDisabledInStaging: true, + * // The configuration property can be in the following formats + * // 'devDisabledIn${productFlavor}${buildType}' + * // 'devDisabledIn${buildType}' + * + * // the root of your project, i.e. where "package.json" lives + * root: "../../", + * + * // where to put the JS bundle asset in debug mode + * jsBundleDirDebug: "$buildDir/intermediates/assets/debug", + * + * // where to put the JS bundle asset in release mode + * jsBundleDirRelease: "$buildDir/intermediates/assets/release", + * + * // where to put drawable resources / React Native assets, e.g. the ones you use via + * // require('./image.png')), in debug mode + * resourcesDirDebug: "$buildDir/intermediates/res/merged/debug", + * + * // where to put drawable resources / React Native assets, e.g. the ones you use via + * // require('./image.png')), in release mode + * resourcesDirRelease: "$buildDir/intermediates/res/merged/release", + * + * // by default the gradle tasks are skipped if none of the JS files or assets change; this means + * // that we don't look at files in android/ or ios/ to determine whether the tasks are up to + * // date; if you have any other folders that you want to ignore for performance reasons (gradle + * // indexes the entire tree), add them here. Alternatively, if you have JS files in android/ + * // for example, you might want to remove it from here. + * inputExcludes: ["android/**", "ios/**"], + * + * // override which node gets called and with what additional arguments + * nodeExecutableAndArgs: ["node"], + * + * // supply additional arguments to the packager + * extraPackagerArgs: [] + * ] + */ + +apply from: "../../node_modules/react-native/react.gradle" + +/** + * Set this to true to create two separate APKs instead of one: + * - An APK that only works on ARM devices + * - An APK that only works on x86 devices + * The advantage is the size of the APK is reduced by about 4MB. + * Upload all the APKs to the Play Store and people will download + * the correct one based on the CPU architecture of their device. + */ +def enableSeparateBuildPerCPUArchitecture = false + +/** + * Run Proguard to shrink the Java bytecode in release builds. + */ +def enableProguardInReleaseBuilds = false + +android { + compileSdkVersion 23 + buildToolsVersion "23.0.1" + + defaultConfig { + applicationId "com.storybook" + minSdkVersion 16 + targetSdkVersion 22 + versionCode 1 + versionName "1.0" + ndk { + abiFilters "armeabi-v7a", "x86" + } + } + splits { + abi { + reset() + enable enableSeparateBuildPerCPUArchitecture + universalApk false // If true, also generate a universal APK + include "armeabi-v7a", "x86" + } + } + buildTypes { + release { + minifyEnabled enableProguardInReleaseBuilds + proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" + } + } + // applicationVariants are e.g. debug, release + applicationVariants.all { variant -> + variant.outputs.each { output -> + // For each separate APK per architecture, set a unique version code as described here: + // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits + def versionCodes = ["armeabi-v7a":1, "x86":2] + def abi = output.getFilter(OutputFile.ABI) + if (abi != null) { // null for the universal-debug, universal-release variants + output.versionCodeOverride = + versionCodes.get(abi) * 1048576 + defaultConfig.versionCode + } + } + } +} + +dependencies { + compile fileTree(dir: "libs", include: ["*.jar"]) + compile "com.android.support:appcompat-v7:23.0.1" + compile "com.facebook.react:react-native:+" // From node_modules +} + +// Run this once to be able to run the application with BUCK +// puts all compile dependencies into folder libs for BUCK to use +task copyDownloadableDepsToLibs(type: Copy) { + from configurations.compile + into 'libs' +} diff --git a/Storybook/android/app/proguard-rules.pro b/Storybook/android/app/proguard-rules.pro new file mode 100644 index 0000000..6e8516c --- /dev/null +++ b/Storybook/android/app/proguard-rules.pro @@ -0,0 +1,70 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Disabling obfuscation is useful if you collect stack traces from production crashes +# (unless you are using a system that supports de-obfuscate the stack traces). +-dontobfuscate + +# React Native + +# Keep our interfaces so they can be used by other ProGuard rules. +# See http://sourceforge.net/p/proguard/bugs/466/ +-keep,allowobfuscation @interface com.facebook.proguard.annotations.DoNotStrip +-keep,allowobfuscation @interface com.facebook.proguard.annotations.KeepGettersAndSetters +-keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip + +# Do not strip any method/class that is annotated with @DoNotStrip +-keep @com.facebook.proguard.annotations.DoNotStrip class * +-keep @com.facebook.common.internal.DoNotStrip class * +-keepclassmembers class * { + @com.facebook.proguard.annotations.DoNotStrip *; + @com.facebook.common.internal.DoNotStrip *; +} + +-keepclassmembers @com.facebook.proguard.annotations.KeepGettersAndSetters class * { + void set*(***); + *** get*(); +} + +-keep class * extends com.facebook.react.bridge.JavaScriptModule { *; } +-keep class * extends com.facebook.react.bridge.NativeModule { *; } +-keepclassmembers,includedescriptorclasses class * { native ; } +-keepclassmembers class * { @com.facebook.react.uimanager.UIProp ; } +-keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactProp ; } +-keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactPropGroup ; } + +-dontwarn com.facebook.react.** + +# TextLayoutBuilder uses a non-public Android constructor within StaticLayout. +# See libs/proxy/src/main/java/com/facebook/fbui/textlayoutbuilder/proxy for details. +-dontwarn android.text.StaticLayout + +# okhttp + +-keepattributes Signature +-keepattributes *Annotation* +-keep class okhttp3.** { *; } +-keep interface okhttp3.** { *; } +-dontwarn okhttp3.** + +# okio + +-keep class sun.misc.Unsafe { *; } +-dontwarn java.nio.file.* +-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement +-dontwarn okio.** diff --git a/Storybook/android/app/src/main/AndroidManifest.xml b/Storybook/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..e41cec4 --- /dev/null +++ b/Storybook/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + diff --git a/Storybook/android/app/src/main/java/com/storybook/MainActivity.java b/Storybook/android/app/src/main/java/com/storybook/MainActivity.java new file mode 100644 index 0000000..545131d --- /dev/null +++ b/Storybook/android/app/src/main/java/com/storybook/MainActivity.java @@ -0,0 +1,15 @@ +package com.storybook; + +import com.facebook.react.ReactActivity; + +public class MainActivity extends ReactActivity { + + /** + * Returns the name of the main component registered from JavaScript. + * This is used to schedule rendering of the component. + */ + @Override + protected String getMainComponentName() { + return "Storybook"; + } +} diff --git a/Storybook/android/app/src/main/java/com/storybook/MainApplication.java b/Storybook/android/app/src/main/java/com/storybook/MainApplication.java new file mode 100644 index 0000000..f18aa05 --- /dev/null +++ b/Storybook/android/app/src/main/java/com/storybook/MainApplication.java @@ -0,0 +1,40 @@ +package com.storybook; + +import android.app.Application; + +import com.facebook.react.ReactApplication; +import com.facebook.react.ReactNativeHost; +import com.facebook.react.ReactPackage; +import com.facebook.react.shell.MainReactPackage; +import com.facebook.soloader.SoLoader; + +import java.util.Arrays; +import java.util.List; + +public class MainApplication extends Application implements ReactApplication { + + private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { + @Override + public boolean getUseDeveloperSupport() { + return BuildConfig.DEBUG; + } + + @Override + protected List getPackages() { + return Arrays.asList( + new MainReactPackage() + ); + } + }; + + @Override + public ReactNativeHost getReactNativeHost() { + return mReactNativeHost; + } + + @Override + public void onCreate() { + super.onCreate(); + SoLoader.init(this, /* native exopackage */ false); + } +} diff --git a/Storybook/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/Storybook/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..cde69bcccec65160d92116f20ffce4fce0b5245c GIT binary patch literal 3418 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 literal 0 HcmV?d00001 diff --git a/Storybook/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/Storybook/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..bfa42f0e7b91d006d22352c9ff2f134e504e3c1d GIT binary patch literal 4842 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 literal 0 HcmV?d00001 diff --git a/Storybook/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/Storybook/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..324e72cdd7480cb983fa1bcc7ce686e51ef87fe7 GIT binary patch literal 7718 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 literal 0 HcmV?d00001 diff --git a/Storybook/android/app/src/main/res/values/strings.xml b/Storybook/android/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..0b0b23c --- /dev/null +++ b/Storybook/android/app/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + Storybook + diff --git a/Storybook/android/app/src/main/res/values/styles.xml b/Storybook/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..319eb0c --- /dev/null +++ b/Storybook/android/app/src/main/res/values/styles.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/Storybook/android/build.gradle b/Storybook/android/build.gradle new file mode 100644 index 0000000..eed9972 --- /dev/null +++ b/Storybook/android/build.gradle @@ -0,0 +1,24 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + repositories { + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:2.2.3' + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +allprojects { + repositories { + mavenLocal() + jcenter() + maven { + // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm + url "$rootDir/../node_modules/react-native/android" + } + } +} diff --git a/Storybook/android/gradle.properties b/Storybook/android/gradle.properties new file mode 100644 index 0000000..1fd964e --- /dev/null +++ b/Storybook/android/gradle.properties @@ -0,0 +1,20 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +# Default value: -Xmx10248m -XX:MaxPermSize=256m +# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true + +android.useDeprecatedNdk=true diff --git a/Storybook/android/gradle/wrapper/gradle-wrapper.jar b/Storybook/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..b5166dad4d90021f6a0b45268c0755719f1d5cd4 GIT binary patch literal 52266 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 z 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 literal 0 HcmV?d00001 diff --git a/Storybook/android/gradle/wrapper/gradle-wrapper.properties b/Storybook/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..dbdc05d --- /dev/null +++ b/Storybook/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip diff --git a/Storybook/android/gradlew b/Storybook/android/gradlew new file mode 100755 index 0000000..91a7e26 --- /dev/null +++ b/Storybook/android/gradlew @@ -0,0 +1,164 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; +esac + +# For Cygwin, ensure paths are in UNIX format before anything is touched. +if $cygwin ; then + [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` +fi + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >&- +APP_HOME="`pwd -P`" +cd "$SAVED" >&- + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/Storybook/android/gradlew.bat b/Storybook/android/gradlew.bat new file mode 100644 index 0000000..aec9973 --- /dev/null +++ b/Storybook/android/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/Storybook/android/keystores/BUCK b/Storybook/android/keystores/BUCK new file mode 100644 index 0000000..88e4c31 --- /dev/null +++ b/Storybook/android/keystores/BUCK @@ -0,0 +1,8 @@ +keystore( + name = "debug", + properties = "debug.keystore.properties", + store = "debug.keystore", + visibility = [ + "PUBLIC", + ], +) diff --git a/Storybook/android/keystores/debug.keystore.properties b/Storybook/android/keystores/debug.keystore.properties new file mode 100644 index 0000000..121bfb4 --- /dev/null +++ b/Storybook/android/keystores/debug.keystore.properties @@ -0,0 +1,4 @@ +key.store=debug.keystore +key.alias=androiddebugkey +key.store.password=android +key.alias.password=android diff --git a/Storybook/android/settings.gradle b/Storybook/android/settings.gradle new file mode 100644 index 0000000..b45e436 --- /dev/null +++ b/Storybook/android/settings.gradle @@ -0,0 +1,3 @@ +rootProject.name = 'Storybook' + +include ':app' diff --git a/Storybook/app.json b/Storybook/app.json new file mode 100644 index 0000000..88f0ea3 --- /dev/null +++ b/Storybook/app.json @@ -0,0 +1,4 @@ +{ + "name": "Storybook", + "displayName": "Storybook" +} \ No newline at end of file diff --git a/Storybook/index.android.js b/Storybook/index.android.js new file mode 100644 index 0000000..d717c6c --- /dev/null +++ b/Storybook/index.android.js @@ -0,0 +1,53 @@ +/** + * Sample React Native App + * https://github.com/facebook/react-native + * @flow + */ + +import React, { Component } from 'react'; +import { + AppRegistry, + StyleSheet, + Text, + View +} from 'react-native'; + +export default class Storybook extends Component { + render() { + return ( + + + Welcome to React Native! + + + To get started, edit index.android.js + + + Double tap R on your keyboard to reload,{'\n'} + Shake or press menu button for dev menu + + + ); + } +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + backgroundColor: '#F5FCFF', + }, + welcome: { + fontSize: 20, + textAlign: 'center', + margin: 10, + }, + instructions: { + textAlign: 'center', + color: '#333333', + marginBottom: 5, + }, +}); + +AppRegistry.registerComponent('Storybook', () => Storybook); diff --git a/Storybook/index.ios.js b/Storybook/index.ios.js new file mode 100644 index 0000000..ab8b8e9 --- /dev/null +++ b/Storybook/index.ios.js @@ -0,0 +1,53 @@ +/** + * Sample React Native App + * https://github.com/facebook/react-native + * @flow + */ + +import React, { Component } from 'react'; +import { + AppRegistry, + StyleSheet, + Text, + View +} from 'react-native'; + +export default class Storybook extends Component { + render() { + return ( + + + Welcome to React Native! + + + To get started, edit index.ios.js + + + Press Cmd+R to reload,{'\n'} + Cmd+D or shake for dev menu + + + ); + } +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + backgroundColor: '#F5FCFF', + }, + welcome: { + fontSize: 20, + textAlign: 'center', + margin: 10, + }, + instructions: { + textAlign: 'center', + color: '#333333', + marginBottom: 5, + }, +}); + +AppRegistry.registerComponent('Storybook', () => Storybook); diff --git a/Storybook/ios/Storybook-tvOS/Info.plist b/Storybook/ios/Storybook-tvOS/Info.plist new file mode 100644 index 0000000..2fb6a11 --- /dev/null +++ b/Storybook/ios/Storybook-tvOS/Info.plist @@ -0,0 +1,54 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + NSLocationWhenInUseUsageDescription + + NSAppTransportSecurity + + + NSExceptionDomains + + localhost + + NSExceptionAllowsInsecureHTTPLoads + + + + + + diff --git a/Storybook/ios/Storybook-tvOSTests/Info.plist b/Storybook/ios/Storybook-tvOSTests/Info.plist new file mode 100644 index 0000000..886825c --- /dev/null +++ b/Storybook/ios/Storybook-tvOSTests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/Storybook/ios/Storybook.xcodeproj/project.pbxproj b/Storybook/ios/Storybook.xcodeproj/project.pbxproj new file mode 100644 index 0000000..37e627d --- /dev/null +++ b/Storybook/ios/Storybook.xcodeproj/project.pbxproj @@ -0,0 +1,1251 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; }; + 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; }; + 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; }; + 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; }; + 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; }; + 00E356F31AD99517003FC87E /* StorybookTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* StorybookTests.m */; }; + 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; }; + 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; }; + 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; }; + 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; + 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; + 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; + 140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; + 146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; + 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; + 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; + 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; + 2D02E4C21E0B4AEC006451C7 /* libRCTAnimation-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation-tvOS.a */; }; + 2D02E4C31E0B4AEC006451C7 /* libRCTImage-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */; }; + 2D02E4C41E0B4AEC006451C7 /* libRCTLinking-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */; }; + 2D02E4C51E0B4AEC006451C7 /* libRCTNetwork-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */; }; + 2D02E4C61E0B4AEC006451C7 /* libRCTSettings-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */; }; + 2D02E4C71E0B4AEC006451C7 /* libRCTText-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */; }; + 2D02E4C81E0B4AEC006451C7 /* libRCTWebSocket-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */; }; + 2D02E4C91E0B4AEC006451C7 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3EA31DF850E9000B6D8A /* libReact.a */; }; + 2DCD954D1E0B4F2C00145EB5 /* StorybookTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* StorybookTests.m */; }; + 5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */; }; + 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RCTActionSheet; + }; + 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RCTGeolocation; + }; + 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 58B5115D1A9E6B3D00147676; + remoteInfo = RCTImage; + }; + 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 58B511DB1A9E6C8500147676; + remoteInfo = RCTNetwork; + }; + 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 832C81801AAF6DEF007FA2F7; + remoteInfo = RCTVibration; + }; + 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 13B07F861A680F5B00A75B9A; + remoteInfo = Storybook; + }; + 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RCTSettings; + }; + 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3C86DF461ADF2C930047B81A; + remoteInfo = RCTWebSocket; + }; + 146834031AC3E56700842450 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192; + remoteInfo = React; + }; + 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 2D02E47A1E0B4A5D006451C7; + remoteInfo = "Storybook-tvOS"; + }; + 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A283A1D9B042B00D4039D; + remoteInfo = "RCTImage-tvOS"; + }; + 3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28471D9B043800D4039D; + remoteInfo = "RCTLinking-tvOS"; + }; + 3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28541D9B044C00D4039D; + remoteInfo = "RCTNetwork-tvOS"; + }; + 3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28611D9B046600D4039D; + remoteInfo = "RCTSettings-tvOS"; + }; + 3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A287B1D9B048500D4039D; + remoteInfo = "RCTText-tvOS"; + }; + 3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28881D9B049200D4039D; + remoteInfo = "RCTWebSocket-tvOS"; + }; + 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28131D9B038B00D4039D; + remoteInfo = "React-tvOS"; + }; + 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3C059A1DE3340900C268FA; + remoteInfo = yoga; + }; + 3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3C06751DE3340C00C268FA; + remoteInfo = "yoga-tvOS"; + }; + 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3CD9251DE5FBEC00167DC4; + remoteInfo = cxxreact; + }; + 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3CD9321DE5FBEE00167DC4; + remoteInfo = "cxxreact-tvOS"; + }; + 3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3CD90B1DE5FBD600167DC4; + remoteInfo = jschelpers; + }; + 3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3CD9181DE5FBD800167DC4; + remoteInfo = "jschelpers-tvOS"; + }; + 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RCTAnimation; + }; + 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28201D9B03D100D4039D; + remoteInfo = "RCTAnimation-tvOS"; + }; + 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RCTLinking; + }; + 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 58B5119B1A9E6C1200147676; + remoteInfo = RCTText; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; }; + 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = "../node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj"; sourceTree = ""; }; + 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTGeolocation.xcodeproj; path = "../node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj"; sourceTree = ""; }; + 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = ""; }; + 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = "../node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj"; sourceTree = ""; }; + 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = "../node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj"; sourceTree = ""; }; + 00E356EE1AD99517003FC87E /* StorybookTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = StorybookTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 00E356F21AD99517003FC87E /* StorybookTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = StorybookTests.m; sourceTree = ""; }; + 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = ""; }; + 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = ""; }; + 13B07F961A680F5B00A75B9A /* Storybook.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Storybook.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = Storybook/AppDelegate.h; sourceTree = ""; }; + 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = Storybook/AppDelegate.m; sourceTree = ""; }; + 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; + 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Storybook/Images.xcassets; sourceTree = ""; }; + 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Storybook/Info.plist; sourceTree = ""; }; + 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Storybook/main.m; sourceTree = ""; }; + 146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = ""; }; + 2D02E47B1E0B4A5D006451C7 /* Storybook-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Storybook-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 2D02E4901E0B4A5D006451C7 /* Storybook-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Storybook-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; + 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAnimation.xcodeproj; path = "../node_modules/react-native/Libraries/NativeAnimation/RCTAnimation.xcodeproj"; sourceTree = ""; }; + 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = ""; }; + 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 00E356EB1AD99517003FC87E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 146834051AC3E58100842450 /* libReact.a in Frameworks */, + 5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */, + 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */, + 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */, + 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */, + 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */, + 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */, + 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */, + 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */, + 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */, + 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D02E4781E0B4A5D006451C7 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 2D02E4C91E0B4AEC006451C7 /* libReact.a in Frameworks */, + 2D02E4C21E0B4AEC006451C7 /* libRCTAnimation-tvOS.a in Frameworks */, + 2D02E4C31E0B4AEC006451C7 /* libRCTImage-tvOS.a in Frameworks */, + 2D02E4C41E0B4AEC006451C7 /* libRCTLinking-tvOS.a in Frameworks */, + 2D02E4C51E0B4AEC006451C7 /* libRCTNetwork-tvOS.a in Frameworks */, + 2D02E4C61E0B4AEC006451C7 /* libRCTSettings-tvOS.a in Frameworks */, + 2D02E4C71E0B4AEC006451C7 /* libRCTText-tvOS.a in Frameworks */, + 2D02E4C81E0B4AEC006451C7 /* libRCTWebSocket-tvOS.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D02E48D1E0B4A5D006451C7 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 00C302A81ABCB8CE00DB3ED1 /* Products */ = { + isa = PBXGroup; + children = ( + 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */, + ); + name = Products; + sourceTree = ""; + }; + 00C302B61ABCB90400DB3ED1 /* Products */ = { + isa = PBXGroup; + children = ( + 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */, + ); + name = Products; + sourceTree = ""; + }; + 00C302BC1ABCB91800DB3ED1 /* Products */ = { + isa = PBXGroup; + children = ( + 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */, + 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 00C302D41ABCB9D200DB3ED1 /* Products */ = { + isa = PBXGroup; + children = ( + 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */, + 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 00C302E01ABCB9EE00DB3ED1 /* Products */ = { + isa = PBXGroup; + children = ( + 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */, + ); + name = Products; + sourceTree = ""; + }; + 00E356EF1AD99517003FC87E /* StorybookTests */ = { + isa = PBXGroup; + children = ( + 00E356F21AD99517003FC87E /* StorybookTests.m */, + 00E356F01AD99517003FC87E /* Supporting Files */, + ); + path = StorybookTests; + sourceTree = ""; + }; + 00E356F01AD99517003FC87E /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 00E356F11AD99517003FC87E /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 139105B71AF99BAD00B5F7CC /* Products */ = { + isa = PBXGroup; + children = ( + 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */, + 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 139FDEE71B06529A00C62182 /* Products */ = { + isa = PBXGroup; + children = ( + 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */, + 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 13B07FAE1A68108700A75B9A /* Storybook */ = { + isa = PBXGroup; + children = ( + 008F07F21AC5B25A0029DE68 /* main.jsbundle */, + 13B07FAF1A68108700A75B9A /* AppDelegate.h */, + 13B07FB01A68108700A75B9A /* AppDelegate.m */, + 13B07FB51A68108700A75B9A /* Images.xcassets */, + 13B07FB61A68108700A75B9A /* Info.plist */, + 13B07FB11A68108700A75B9A /* LaunchScreen.xib */, + 13B07FB71A68108700A75B9A /* main.m */, + ); + name = Storybook; + sourceTree = ""; + }; + 146834001AC3E56700842450 /* Products */ = { + isa = PBXGroup; + children = ( + 146834041AC3E56700842450 /* libReact.a */, + 3DAD3EA31DF850E9000B6D8A /* libReact.a */, + 3DAD3EA51DF850E9000B6D8A /* libyoga.a */, + 3DAD3EA71DF850E9000B6D8A /* libyoga.a */, + 3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */, + 3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */, + 3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */, + 3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */, + ); + name = Products; + sourceTree = ""; + }; + 5E91572E1DD0AC6500FF2AA8 /* Products */ = { + isa = PBXGroup; + children = ( + 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */, + 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 78C398B11ACF4ADC00677621 /* Products */ = { + isa = PBXGroup; + children = ( + 78C398B91ACF4ADC00677621 /* libRCTLinking.a */, + 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 832341AE1AAA6A7D00B99B32 /* Libraries */ = { + isa = PBXGroup; + children = ( + 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */, + 146833FF1AC3E56700842450 /* React.xcodeproj */, + 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */, + 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */, + 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */, + 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */, + 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */, + 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */, + 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */, + 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */, + 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */, + ); + name = Libraries; + sourceTree = ""; + }; + 832341B11AAA6A8300B99B32 /* Products */ = { + isa = PBXGroup; + children = ( + 832341B51AAA6A8300B99B32 /* libRCTText.a */, + 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 83CBB9F61A601CBA00E9B192 = { + isa = PBXGroup; + children = ( + 13B07FAE1A68108700A75B9A /* Storybook */, + 832341AE1AAA6A7D00B99B32 /* Libraries */, + 00E356EF1AD99517003FC87E /* StorybookTests */, + 83CBBA001A601CBA00E9B192 /* Products */, + ); + indentWidth = 2; + sourceTree = ""; + tabWidth = 2; + }; + 83CBBA001A601CBA00E9B192 /* Products */ = { + isa = PBXGroup; + children = ( + 13B07F961A680F5B00A75B9A /* Storybook.app */, + 00E356EE1AD99517003FC87E /* StorybookTests.xctest */, + 2D02E47B1E0B4A5D006451C7 /* Storybook-tvOS.app */, + 2D02E4901E0B4A5D006451C7 /* Storybook-tvOSTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 00E356ED1AD99517003FC87E /* StorybookTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "StorybookTests" */; + buildPhases = ( + 00E356EA1AD99517003FC87E /* Sources */, + 00E356EB1AD99517003FC87E /* Frameworks */, + 00E356EC1AD99517003FC87E /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 00E356F51AD99517003FC87E /* PBXTargetDependency */, + ); + name = StorybookTests; + productName = StorybookTests; + productReference = 00E356EE1AD99517003FC87E /* StorybookTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 13B07F861A680F5B00A75B9A /* Storybook */ = { + isa = PBXNativeTarget; + buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Storybook" */; + buildPhases = ( + 13B07F871A680F5B00A75B9A /* Sources */, + 13B07F8C1A680F5B00A75B9A /* Frameworks */, + 13B07F8E1A680F5B00A75B9A /* Resources */, + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Storybook; + productName = "Hello World"; + productReference = 13B07F961A680F5B00A75B9A /* Storybook.app */; + productType = "com.apple.product-type.application"; + }; + 2D02E47A1E0B4A5D006451C7 /* Storybook-tvOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "Storybook-tvOS" */; + buildPhases = ( + 2D02E4771E0B4A5D006451C7 /* Sources */, + 2D02E4781E0B4A5D006451C7 /* Frameworks */, + 2D02E4791E0B4A5D006451C7 /* Resources */, + 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Storybook-tvOS"; + productName = "Storybook-tvOS"; + productReference = 2D02E47B1E0B4A5D006451C7 /* Storybook-tvOS.app */; + productType = "com.apple.product-type.application"; + }; + 2D02E48F1E0B4A5D006451C7 /* Storybook-tvOSTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "Storybook-tvOSTests" */; + buildPhases = ( + 2D02E48C1E0B4A5D006451C7 /* Sources */, + 2D02E48D1E0B4A5D006451C7 /* Frameworks */, + 2D02E48E1E0B4A5D006451C7 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */, + ); + name = "Storybook-tvOSTests"; + productName = "Storybook-tvOSTests"; + productReference = 2D02E4901E0B4A5D006451C7 /* Storybook-tvOSTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 83CBB9F71A601CBA00E9B192 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0610; + ORGANIZATIONNAME = Facebook; + TargetAttributes = { + 00E356ED1AD99517003FC87E = { + CreatedOnToolsVersion = 6.2; + TestTargetID = 13B07F861A680F5B00A75B9A; + }; + 2D02E47A1E0B4A5D006451C7 = { + CreatedOnToolsVersion = 8.2.1; + ProvisioningStyle = Automatic; + }; + 2D02E48F1E0B4A5D006451C7 = { + CreatedOnToolsVersion = 8.2.1; + ProvisioningStyle = Automatic; + TestTargetID = 2D02E47A1E0B4A5D006451C7; + }; + }; + }; + buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "Storybook" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 83CBB9F61A601CBA00E9B192; + productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */; + ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; + }, + { + ProductGroup = 5E91572E1DD0AC6500FF2AA8 /* Products */; + ProjectRef = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; + }, + { + ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */; + ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; + }, + { + ProductGroup = 00C302BC1ABCB91800DB3ED1 /* Products */; + ProjectRef = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; + }, + { + ProductGroup = 78C398B11ACF4ADC00677621 /* Products */; + ProjectRef = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; + }, + { + ProductGroup = 00C302D41ABCB9D200DB3ED1 /* Products */; + ProjectRef = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; + }, + { + ProductGroup = 139105B71AF99BAD00B5F7CC /* Products */; + ProjectRef = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; + }, + { + ProductGroup = 832341B11AAA6A8300B99B32 /* Products */; + ProjectRef = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; + }, + { + ProductGroup = 00C302E01ABCB9EE00DB3ED1 /* Products */; + ProjectRef = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; + }, + { + ProductGroup = 139FDEE71B06529A00C62182 /* Products */; + ProjectRef = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; + }, + { + ProductGroup = 146834001AC3E56700842450 /* Products */; + ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */; + }, + ); + projectRoot = ""; + targets = ( + 13B07F861A680F5B00A75B9A /* Storybook */, + 00E356ED1AD99517003FC87E /* StorybookTests */, + 2D02E47A1E0B4A5D006451C7 /* Storybook-tvOS */, + 2D02E48F1E0B4A5D006451C7 /* Storybook-tvOSTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXReferenceProxy section */ + 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTActionSheet.a; + remoteRef = 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTGeolocation.a; + remoteRef = 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTImage.a; + remoteRef = 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTNetwork.a; + remoteRef = 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTVibration.a; + remoteRef = 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTSettings.a; + remoteRef = 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTWebSocket.a; + remoteRef = 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 146834041AC3E56700842450 /* libReact.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libReact.a; + remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTImage-tvOS.a"; + remoteRef = 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTLinking-tvOS.a"; + remoteRef = 3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTNetwork-tvOS.a"; + remoteRef = 3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTSettings-tvOS.a"; + remoteRef = 3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTText-tvOS.a"; + remoteRef = 3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTWebSocket-tvOS.a"; + remoteRef = 3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EA31DF850E9000B6D8A /* libReact.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libReact.a; + remoteRef = 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EA51DF850E9000B6D8A /* libyoga.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libyoga.a; + remoteRef = 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EA71DF850E9000B6D8A /* libyoga.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libyoga.a; + remoteRef = 3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libcxxreact.a; + remoteRef = 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libcxxreact.a; + remoteRef = 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libjschelpers.a; + remoteRef = 3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libjschelpers.a; + remoteRef = 3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTAnimation.a; + remoteRef = 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTAnimation-tvOS.a"; + remoteRef = 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTLinking.a; + remoteRef = 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 832341B51AAA6A8300B99B32 /* libRCTText.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTText.a; + remoteRef = 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + +/* Begin PBXResourcesBuildPhase section */ + 00E356EC1AD99517003FC87E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 13B07F8E1A680F5B00A75B9A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, + 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D02E4791E0B4A5D006451C7 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D02E48E1E0B4A5D006451C7 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Bundle React Native code and images"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "export NODE_BINARY=node\n../node_modules/react-native/packager/react-native-xcode.sh"; + }; + 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Bundle React Native Code And Images"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "export NODE_BINARY=node\n../node_modules/react-native/packager/react-native-xcode.sh"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 00E356EA1AD99517003FC87E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 00E356F31AD99517003FC87E /* StorybookTests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 13B07F871A680F5B00A75B9A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */, + 13B07FC11A68108700A75B9A /* main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D02E4771E0B4A5D006451C7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */, + 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D02E48C1E0B4A5D006451C7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2DCD954D1E0B4F2C00145EB5 /* StorybookTests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 00E356F51AD99517003FC87E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 13B07F861A680F5B00A75B9A /* Storybook */; + targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; + }; + 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 2D02E47A1E0B4A5D006451C7 /* Storybook-tvOS */; + targetProxy = 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = { + isa = PBXVariantGroup; + children = ( + 13B07FB21A68108700A75B9A /* Base */, + ); + name = LaunchScreen.xib; + path = Storybook; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 00E356F61AD99517003FC87E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = StorybookTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + OTHER_LDFLAGS = ( + "-ObjC", + "-lc++", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Storybook.app/Storybook"; + }; + name = Debug; + }; + 00E356F71AD99517003FC87E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + COPY_PHASE_STRIP = NO; + INFOPLIST_FILE = StorybookTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + OTHER_LDFLAGS = ( + "-ObjC", + "-lc++", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Storybook.app/Storybook"; + }; + name = Release; + }; + 13B07F941A680F5B00A75B9A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = NO; + INFOPLIST_FILE = Storybook/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + PRODUCT_NAME = Storybook; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 13B07F951A680F5B00A75B9A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CURRENT_PROJECT_VERSION = 1; + INFOPLIST_FILE = Storybook/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + PRODUCT_NAME = Storybook; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; + 2D02E4971E0B4A5E006451C7 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_TESTABILITY = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Storybook-tvOS/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = ( + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.Storybook-tvOS"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = appletvos; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 9.2; + }; + name = Debug; + }; + 2D02E4981E0B4A5E006451C7 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Storybook-tvOS/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = ( + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.Storybook-tvOS"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = appletvos; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 9.2; + }; + name = Release; + }; + 2D02E4991E0B4A5E006451C7 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_TESTABILITY = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Storybook-tvOSTests/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.Storybook-tvOSTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = appletvos; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Storybook-tvOS.app/Storybook-tvOS"; + TVOS_DEPLOYMENT_TARGET = 10.1; + }; + name = Debug; + }; + 2D02E49A1E0B4A5E006451C7 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Storybook-tvOSTests/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.Storybook-tvOSTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = appletvos; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Storybook-tvOS.app/Storybook-tvOS"; + TVOS_DEPLOYMENT_TARGET = 10.1; + }; + name = Release; + }; + 83CBBA201A601CBA00E9B192 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + 83CBBA211A601CBA00E9B192 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "StorybookTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 00E356F61AD99517003FC87E /* Debug */, + 00E356F71AD99517003FC87E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Storybook" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 13B07F941A680F5B00A75B9A /* Debug */, + 13B07F951A680F5B00A75B9A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "Storybook-tvOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2D02E4971E0B4A5E006451C7 /* Debug */, + 2D02E4981E0B4A5E006451C7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "Storybook-tvOSTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2D02E4991E0B4A5E006451C7 /* Debug */, + 2D02E49A1E0B4A5E006451C7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "Storybook" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 83CBBA201A601CBA00E9B192 /* Debug */, + 83CBBA211A601CBA00E9B192 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; +} diff --git a/Storybook/ios/Storybook.xcodeproj/xcshareddata/xcschemes/Storybook-tvOS.xcscheme b/Storybook/ios/Storybook.xcodeproj/xcshareddata/xcschemes/Storybook-tvOS.xcscheme new file mode 100644 index 0000000..a2b5471 --- /dev/null +++ b/Storybook/ios/Storybook.xcodeproj/xcshareddata/xcschemes/Storybook-tvOS.xcscheme @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Storybook/ios/Storybook.xcodeproj/xcshareddata/xcschemes/Storybook.xcscheme b/Storybook/ios/Storybook.xcodeproj/xcshareddata/xcschemes/Storybook.xcscheme new file mode 100644 index 0000000..f205ad0 --- /dev/null +++ b/Storybook/ios/Storybook.xcodeproj/xcshareddata/xcschemes/Storybook.xcscheme @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Storybook/ios/Storybook/AppDelegate.h b/Storybook/ios/Storybook/AppDelegate.h new file mode 100644 index 0000000..a9654d5 --- /dev/null +++ b/Storybook/ios/Storybook/AppDelegate.h @@ -0,0 +1,16 @@ +/** + * 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. + */ + +#import + +@interface AppDelegate : UIResponder + +@property (nonatomic, strong) UIWindow *window; + +@end diff --git a/Storybook/ios/Storybook/AppDelegate.m b/Storybook/ios/Storybook/AppDelegate.m new file mode 100644 index 0000000..31b4f77 --- /dev/null +++ b/Storybook/ios/Storybook/AppDelegate.m @@ -0,0 +1,37 @@ +/** + * 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. + */ + +#import "AppDelegate.h" + +#import +#import + +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + NSURL *jsCodeLocation; + + jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil]; + + RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation + moduleName:@"Storybook" + initialProperties:nil + launchOptions:launchOptions]; + rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; + + self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; + UIViewController *rootViewController = [UIViewController new]; + rootViewController.view = rootView; + self.window.rootViewController = rootViewController; + [self.window makeKeyAndVisible]; + return YES; +} + +@end diff --git a/Storybook/ios/Storybook/Base.lproj/LaunchScreen.xib b/Storybook/ios/Storybook/Base.lproj/LaunchScreen.xib new file mode 100644 index 0000000..8a186a0 --- /dev/null +++ b/Storybook/ios/Storybook/Base.lproj/LaunchScreen.xib @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Storybook/ios/Storybook/Images.xcassets/AppIcon.appiconset/Contents.json b/Storybook/ios/Storybook/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..118c98f --- /dev/null +++ b/Storybook/ios/Storybook/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,38 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Storybook/ios/Storybook/Info.plist b/Storybook/ios/Storybook/Info.plist new file mode 100644 index 0000000..365af10 --- /dev/null +++ b/Storybook/ios/Storybook/Info.plist @@ -0,0 +1,56 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + Storybook + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + NSLocationWhenInUseUsageDescription + + NSAppTransportSecurity + + + NSExceptionDomains + + localhost + + NSExceptionAllowsInsecureHTTPLoads + + + + + + diff --git a/Storybook/ios/Storybook/main.m b/Storybook/ios/Storybook/main.m new file mode 100644 index 0000000..3d767fc --- /dev/null +++ b/Storybook/ios/Storybook/main.m @@ -0,0 +1,18 @@ +/** + * 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. + */ + +#import + +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} diff --git a/Storybook/ios/StorybookTests/Info.plist b/Storybook/ios/StorybookTests/Info.plist new file mode 100644 index 0000000..886825c --- /dev/null +++ b/Storybook/ios/StorybookTests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/Storybook/ios/StorybookTests/StorybookTests.m b/Storybook/ios/StorybookTests/StorybookTests.m new file mode 100644 index 0000000..fb10a01 --- /dev/null +++ b/Storybook/ios/StorybookTests/StorybookTests.m @@ -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. + */ + +#import +#import + +#import +#import + +#define TIMEOUT_SECONDS 600 +#define TEXT_TO_LOOK_FOR @"Welcome to React Native!" + +@interface StorybookTests : XCTestCase + +@end + +@implementation StorybookTests + +- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test +{ + if (test(view)) { + return YES; + } + for (UIView *subview in [view subviews]) { + if ([self findSubviewInView:subview matching:test]) { + return YES; + } + } + return NO; +} + +- (void)testRendersWelcomeScreen +{ + UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController]; + NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS]; + BOOL foundElement = NO; + + __block NSString *redboxError = nil; + RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) { + if (level >= RCTLogLevelError) { + redboxError = message; + } + }); + + while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) { + [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; + [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; + + foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) { + if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) { + return YES; + } + return NO; + }]; + } + + RCTSetLogFunction(RCTDefaultLogFunction); + + XCTAssertNil(redboxError, @"RedBox error: %@", redboxError); + XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS); +} + + +@end diff --git a/Storybook/package.json b/Storybook/package.json new file mode 100644 index 0000000..e1c1428 --- /dev/null +++ b/Storybook/package.json @@ -0,0 +1,29 @@ +{ + "name": "Storybook", + "version": "0.0.1", + "private": true, + "scripts": { + "start": "node node_modules/react-native/local-cli/cli.js start", + "test": "jest", + "web-storybook": "start-storybook -p 6006", + "rn-storybook": "storybook start -p 7007" + }, + "dependencies": { + "prop-types": "^15.5.10", + "react": "16.0.0-alpha.6", + "react-dom": "16.0.0-alpha.6", + "react-native": "^0.44.2" + }, + "devDependencies": { + "@storybook/react": "^3.1.7", + "@storybook/react-native": "^3.1.6", + "babel-jest": "20.0.3", + "babel-preset-react-native": "2.0.0", + "jest": "20.0.4", + "react-scripts": "1.0.10", + "react-test-renderer": "16.0.0-alpha.6" + }, + "jest": { + "preset": "react-native" + } +} diff --git a/Storybook/stories/Button/index.android.js b/Storybook/stories/Button/index.android.js new file mode 100644 index 0000000..7516629 --- /dev/null +++ b/Storybook/stories/Button/index.android.js @@ -0,0 +1,23 @@ +/* eslint-disable import/no-extraneous-dependencies, import/no-unresolved, import/extensions */ + +import React from 'react'; +import PropTypes from 'prop-types'; +import { TouchableNativeFeedback } from 'react-native'; + +export default function Button(props) { + return ( + + {props.children} + + ); +} + +Button.defaultProps = { + children: null, + onPress: () => {}, +}; + +Button.propTypes = { + children: PropTypes.node, + onPress: PropTypes.func, +}; diff --git a/Storybook/stories/Button/index.ios.js b/Storybook/stories/Button/index.ios.js new file mode 100644 index 0000000..4886626 --- /dev/null +++ b/Storybook/stories/Button/index.ios.js @@ -0,0 +1,23 @@ +/* eslint-disable import/no-extraneous-dependencies, import/no-unresolved, import/extensions */ + +import React from 'react'; +import PropTypes from 'prop-types'; +import { TouchableHighlight } from 'react-native'; + +export default function Button(props) { + return ( + + {props.children} + + ); +} + +Button.defaultProps = { + children: null, + onPress: () => {}, +}; + +Button.propTypes = { + children: PropTypes.node, + onPress: PropTypes.func, +}; diff --git a/Storybook/stories/CenterView/index.js b/Storybook/stories/CenterView/index.js new file mode 100644 index 0000000..dcf34c7 --- /dev/null +++ b/Storybook/stories/CenterView/index.js @@ -0,0 +1,22 @@ +/* eslint-disable import/no-extraneous-dependencies, import/no-unresolved, import/extensions */ + +import React from 'react'; +import PropTypes from 'prop-types'; +import { View } from 'react-native'; +import style from './style'; + +export default function CenterView(props) { + return ( + + {props.children} + + ); +} + +CenterView.defaultProps = { + children: null, +}; + +CenterView.propTypes = { + children: PropTypes.node, +}; diff --git a/Storybook/stories/CenterView/style.js b/Storybook/stories/CenterView/style.js new file mode 100644 index 0000000..ff347fd --- /dev/null +++ b/Storybook/stories/CenterView/style.js @@ -0,0 +1,8 @@ +export default { + main: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + backgroundColor: '#F5FCFF', + }, +}; diff --git a/Storybook/stories/Welcome/index.js b/Storybook/stories/Welcome/index.js new file mode 100644 index 0000000..f01c937 --- /dev/null +++ b/Storybook/stories/Welcome/index.js @@ -0,0 +1,55 @@ +/* eslint-disable import/no-extraneous-dependencies, import/no-unresolved, import/extensions */ + +import React from 'react'; +import PropTypes from 'prop-types'; +import { View, Text } from 'react-native'; + +export default class Welcome extends React.Component { + styles = { + wrapper: { + flex: 1, + padding: 24, + justifyContent: 'center', + }, + header: { + fontSize: 18, + marginBottom: 18, + }, + content: { + fontSize: 12, + marginBottom: 10, + lineHeight: 18, + }, + }; + + showApp(event) { + event.preventDefault(); + if (this.props.showApp) this.props.showApp(); + } + + render() { + return ( + + Welcome to React Native Storybook + + This is a UI Component development environment for your React Native app. Here you can + display and interact with your UI components as stories. A story is a single state of one + or more UI components. You can have as many stories as you want. In other words a story is + like a visual test case. + + + We have added some stories inside the "storybook/stories" directory for examples. Try + editing the "storybook/stories/Welcome.js" file to edit this message. + + + ); + } +} + +Welcome.defaultProps = { + showApp: null, +}; + +Welcome.propTypes = { + showApp: PropTypes.func, +}; diff --git a/Storybook/stories/index.js b/Storybook/stories/index.js new file mode 100644 index 0000000..0da44cc --- /dev/null +++ b/Storybook/stories/index.js @@ -0,0 +1,27 @@ +/* eslint-disable import/no-extraneous-dependencies, import/no-unresolved, import/extensions */ + +import React from 'react'; +import { Text } from 'react-native'; + +import { storiesOf } from '@storybook/react-native'; +import { action } from '@storybook/addon-actions'; +import { linkTo } from '@storybook/addon-links'; + +import Button from './Button'; +import CenterView from './CenterView'; +import Welcome from './Welcome'; + +storiesOf('Welcome', module).add('to Storybook', () => ); + +storiesOf('Button', module) + .addDecorator(getStory => {getStory()}) + .add('with text', () => + + ) + .add('with some emoji', () => + + ); diff --git a/Storybook/storybook/addons.js b/Storybook/storybook/addons.js new file mode 100644 index 0000000..967b205 --- /dev/null +++ b/Storybook/storybook/addons.js @@ -0,0 +1,4 @@ +/* eslint-disable import/no-extraneous-dependencies, import/no-unresolved, import/extensions */ + +import '@storybook/addon-actions/register'; +import '@storybook/addon-links/register'; diff --git a/Storybook/storybook/index.android.js b/Storybook/storybook/index.android.js new file mode 100644 index 0000000..f0513c5 --- /dev/null +++ b/Storybook/storybook/index.android.js @@ -0,0 +1,3 @@ +import StorybookUI from './storybook'; + +export default StorybookUI; diff --git a/Storybook/storybook/index.ios.js b/Storybook/storybook/index.ios.js new file mode 100644 index 0000000..f0513c5 --- /dev/null +++ b/Storybook/storybook/index.ios.js @@ -0,0 +1,3 @@ +import StorybookUI from './storybook'; + +export default StorybookUI; diff --git a/Storybook/storybook/storybook.js b/Storybook/storybook/storybook.js new file mode 100644 index 0000000..14479d0 --- /dev/null +++ b/Storybook/storybook/storybook.js @@ -0,0 +1,13 @@ +/* eslint-disable import/no-extraneous-dependencies, import/no-unresolved, import/extensions, global-require */ + +import { AppRegistry } from 'react-native'; +import { getStorybookUI, configure } from '@storybook/react-native'; + +// import stories +configure(() => { + require('../stories'); +}, module); + +const StorybookUI = getStorybookUI({ port: 7007, host: 'localhost' }); +AppRegistry.registerComponent('Storybook', () => StorybookUI); +export default StorybookUI; diff --git a/Storybook/yarn.lock b/Storybook/yarn.lock new file mode 100644 index 0000000..f10d358 --- /dev/null +++ b/Storybook/yarn.lock @@ -0,0 +1,8276 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@storybook/addon-actions@^3.1.6": + version "3.1.6" + resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-3.1.6.tgz#0cbf00ede57ff00d1dfe02e554043d6963940064" + dependencies: + "@storybook/addons" "^3.1.6" + deep-equal "^1.0.1" + json-stringify-safe "^5.0.1" + prop-types "^15.5.8" + react-inspector "^2.0.0" + uuid "^3.1.0" + +"@storybook/addon-links@^3.1.6": + version "3.1.6" + resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-3.1.6.tgz#62c8a839e54ff0adb04c6023dae467b336ced5d9" + dependencies: + "@storybook/addons" "^3.1.6" + +"@storybook/addons@^3.1.6": + version "3.1.6" + resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-3.1.6.tgz#29ef2348550f5a74d5e83dd75d04714cac751c39" + +"@storybook/channel-postmessage@^3.1.6": + version "3.1.6" + resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-3.1.6.tgz#867768a2ca2efbd796432300fe5e9b834d9c2ca5" + dependencies: + "@storybook/channels" "^3.1.6" + global "^4.3.2" + json-stringify-safe "^5.0.1" + +"@storybook/channel-websocket@^3.1.6": + version "3.1.6" + resolved "https://registry.yarnpkg.com/@storybook/channel-websocket/-/channel-websocket-3.1.6.tgz#3ea53d7989f1bb3dc24175cc87ebf6082c1142f5" + dependencies: + "@storybook/channels" "^3.1.6" + global "^4.3.2" + +"@storybook/channels@^3.1.6": + version "3.1.6" + resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-3.1.6.tgz#81d61591bf7613dd2bcd81d26da40aeaa2899034" + +"@storybook/react-fuzzy@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@storybook/react-fuzzy/-/react-fuzzy-0.4.0.tgz#2961e8a1f6c1afcce97e9e9a14d1dfe9d9061087" + dependencies: + babel-runtime "^6.23.0" + classnames "^2.2.5" + fuse.js "^3.0.1" + prop-types "^15.5.9" + +"@storybook/react-native@^3.1.6": + version "3.1.6" + resolved "https://registry.yarnpkg.com/@storybook/react-native/-/react-native-3.1.6.tgz#bac7deb6d8598476e1888c778ce2a2f2c7b99485" + dependencies: + "@storybook/addon-actions" "^3.1.6" + "@storybook/addon-links" "^3.1.6" + "@storybook/addons" "^3.1.6" + "@storybook/channel-websocket" "^3.1.6" + "@storybook/ui" "^3.1.6" + autoprefixer "^7.0.1" + babel-core "^6.24.1" + babel-loader "^7.0.0" + babel-plugin-syntax-async-functions "^6.13.0" + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-class-properties "^6.24.1" + babel-plugin-transform-object-rest-spread "^6.23.0" + babel-plugin-transform-react-constant-elements "^6.23.0" + babel-plugin-transform-regenerator "^6.24.1" + babel-plugin-transform-runtime "^6.23.0" + babel-polyfill "^6.23.0" + babel-preset-es2015 "^6.24.1" + babel-preset-es2016 "^6.24.1" + babel-preset-react "^6.24.1" + babel-preset-stage-0 "^6.24.1" + babel-runtime "^6.23.0" + case-sensitive-paths-webpack-plugin "^2.0.0" + commander "^2.9.0" + css-loader "^0.28.0" + events "^1.1.1" + express "^4.15.2" + file-loader "^0.11.1" + find-cache-dir "^1.0.0" + global "^4.3.2" + json-loader "^0.5.4" + json5 "^0.5.1" + postcss-loader "^2.0.3" + shelljs "^0.7.7" + style-loader "^0.17.0" + url-loader "^0.5.8" + util-deprecate "^1.0.2" + uuid "^3.0.1" + webpack "^2.4.1" + webpack-dev-middleware "^1.10.1" + webpack-hot-middleware "^2.18.0" + ws "^3.0.0" + +"@storybook/react@^3.1.7": + version "3.1.7" + resolved "https://registry.yarnpkg.com/@storybook/react/-/react-3.1.7.tgz#ed89c792ff6c210b15d9d726fcf91a826d8f246b" + dependencies: + "@storybook/addon-actions" "^3.1.6" + "@storybook/addon-links" "^3.1.6" + "@storybook/addons" "^3.1.6" + "@storybook/channel-postmessage" "^3.1.6" + "@storybook/ui" "^3.1.6" + airbnb-js-shims "^1.1.1" + autoprefixer "^7.1.1" + babel-core "^6.24.1" + babel-loader "^7.0.0" + babel-plugin-react-docgen "^1.5.0" + babel-preset-es2015 "^6.24.1" + babel-preset-es2016 "^6.24.1" + babel-preset-react "^6.24.1" + babel-preset-react-app "^3.0.0" + babel-preset-stage-0 "^6.24.1" + babel-runtime "^6.23.0" + case-sensitive-paths-webpack-plugin "^2.0.0" + chalk "^1.1.3" + commander "^2.9.0" + common-tags "^1.4.0" + configstore "^3.1.0" + css-loader "^0.28.1" + express "^4.15.3" + file-loader "^0.11.1" + find-cache-dir "^1.0.0" + glamor "^2.20.25" + glamorous "^3.22.1" + global "^4.3.2" + json-loader "^0.5.4" + json-stringify-safe "^5.0.1" + json5 "^0.5.1" + lodash.pick "^4.4.0" + postcss-flexbugs-fixes "^3.0.0" + postcss-loader "^2.0.5" + prop-types "^15.5.10" + qs "^6.4.0" + react-modal "^1.7.7" + redux "^3.6.0" + request "^2.81.0" + serve-favicon "^2.4.3" + shelljs "^0.7.7" + style-loader "^0.17.0" + url-loader "^0.5.8" + util-deprecate "^1.0.2" + uuid "^3.0.1" + webpack "^2.5.1" + webpack-dev-middleware "^1.10.2" + webpack-hot-middleware "^2.18.0" + +"@storybook/ui@^3.1.6": + version "3.1.6" + resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-3.1.6.tgz#5d47c6003a2d78c06ede43861089747d986d918e" + dependencies: + "@storybook/react-fuzzy" "^0.4.0" + babel-runtime "^6.23.0" + deep-equal "^1.0.1" + events "^1.1.1" + fuzzysearch "^1.0.3" + global "^4.3.2" + json-stringify-safe "^5.0.1" + keycode "^2.1.8" + lodash.pick "^4.4.0" + lodash.sortby "^4.7.0" + mantra-core "^1.7.0" + podda "^1.2.2" + prop-types "^15.5.8" + qs "^6.4.0" + react-inspector "^2.0.0" + react-komposer "^2.0.0" + react-modal "^1.7.6" + react-split-pane "^0.1.63" + redux "^3.6.0" + +abab@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" + +abbrev@1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f" + +absolute-path@^0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/absolute-path/-/absolute-path-0.0.0.tgz#a78762fbdadfb5297be99b15d35a785b2f095bf7" + +accepts@~1.2.12, accepts@~1.2.13: + version "1.2.13" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.2.13.tgz#e5f1f3928c6d95fd96558c36ec3d9d0de4a6ecea" + dependencies: + mime-types "~2.1.6" + negotiator "0.5.3" + +accepts@~1.3.0, accepts@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" + dependencies: + mime-types "~2.1.11" + negotiator "0.6.1" + +acorn-dynamic-import@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" + dependencies: + acorn "^4.0.3" + +acorn-globals@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" + dependencies: + acorn "^4.0.4" + +acorn-jsx@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" + dependencies: + acorn "^3.0.4" + +acorn@^3.0.4: + version "3.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + +acorn@^4.0.3, acorn@^4.0.4: + version "4.0.13" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + +acorn@^5.0.0, acorn@^5.0.1: + version "5.0.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d" + +address@1.0.2, address@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.0.2.tgz#480081e82b587ba319459fef512f516fe03d58af" + +airbnb-js-shims@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/airbnb-js-shims/-/airbnb-js-shims-1.1.1.tgz#27224f0030f244e6570442ed1020772c1434aec2" + dependencies: + array-includes "^3.0.2" + es5-shim "^4.5.9" + es6-shim "^0.35.1" + object.entries "^1.0.3" + object.getownpropertydescriptors "^2.0.3" + object.values "^1.0.3" + string.prototype.padend "^3.0.0" + string.prototype.padstart "^3.0.0" + +ajv-keywords@^1.0.0, ajv-keywords@^1.1.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" + +ajv@^4.7.0, ajv@^4.9.1: + version "4.11.8" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + +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" + +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" + dependencies: + kind-of "^3.0.2" + 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" + +anser@1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/anser/-/anser-1.2.5.tgz#5dcfc956eaa373b9c23010dd20dabec2ce19475b" + +anser@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.1.tgz#c3641863a962cebef941ea2c8706f2cb4f0716bd" + +ansi-align@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-1.1.0.tgz#2f0c1658829739add5ebb15e6b0c6e3423f016ba" + dependencies: + string-width "^1.0.1" + +ansi-escapes@^1.1.0, ansi-escapes@^1.4.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-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + +ansi-regex@^2.0.0, ansi-regex@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + +ansi-styles@^3.0.0, ansi-styles@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.1.0.tgz#09c202d5c917ec23188caa5c9cb9179cd9547750" + dependencies: + color-convert "^1.0.0" + +ansi@^0.3.0, ansi@~0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/ansi/-/ansi-0.3.1.tgz#0c42d4fb17160d5a9af1e484bace1c66922c1b21" + +anymatch@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" + dependencies: + arrify "^1.0.0" + micromatch "^2.1.5" + +append-transform@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" + dependencies: + default-require-extensions "^1.0.0" + +aproba@^1.0.3: + version "1.1.2" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.2.tgz#45c6629094de4e96f693ef7eab74ae079c240fc1" + +are-we-there-yet@~1.1.2: + 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.6" + +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" + +aria-query@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.5.0.tgz#85e3152cd8cc5bab18dbed61cd9c4fce54fa79c3" + dependencies: + ast-types-flow "0.0.7" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +arr-flatten@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.3.tgz#a274ed85ac08849b6bd7847c4580745dc51adfb1" + +array-differ@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" + +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + +array-filter@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + +array-flatten@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296" + +array-includes@^3.0.2, array-includes@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.7.0" + +array-map@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" + +array-reduce@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1, array-uniq@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + +arrify@^1.0.0, arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + +art@^0.10.0: + 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" + +asn1.js@^4.0.0: + version "4.9.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.1.tgz#48ba240b45a9280e94748990ba597d216617fd40" + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +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@^1.1.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" + dependencies: + util "0.10.3" + +ast-types-flow@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + +ast-types@0.9.6: + version "0.9.6" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" + +async-each@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + +async@^1.4.0, async@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + +async@^2.0.1, async@^2.1.2, async@^2.1.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d" + dependencies: + lodash "^4.14.0" + +async@~0.2.6: + version "0.2.10" + resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +autoprefixer@7.1.1, autoprefixer@^7.0.1, autoprefixer@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.1.tgz#97bc854c7d0b979f8d6489de547a0d17fb307f6d" + dependencies: + browserslist "^2.1.3" + caniuse-lite "^1.0.30000670" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^6.0.1" + postcss-value-parser "^3.2.3" + +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" + +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.6.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + +axobject-query@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-0.1.0.tgz#62f59dbc59c9f9242759ca349960e7a2fe3c36c0" + dependencies: + ast-types-flow "0.0.7" + +babel-code-frame@6.22.0, babel-code-frame@^6.11.0, babel-code-frame@^6.16.0, babel-code-frame@^6.22.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-core@6.25.0, babel-core@^6.0.0, babel-core@^6.21.0, babel-core@^6.24.1, babel-core@^6.7.2: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.25.0.tgz#7dd42b0463c742e9d5296deb3ec67a9322dad729" + dependencies: + babel-code-frame "^6.22.0" + babel-generator "^6.25.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.25.0" + babel-traverse "^6.25.0" + babel-types "^6.25.0" + babylon "^6.17.2" + convert-source-map "^1.1.0" + debug "^2.1.1" + json5 "^0.5.0" + lodash "^4.2.0" + minimatch "^3.0.2" + path-is-absolute "^1.0.0" + private "^0.1.6" + slash "^1.0.0" + source-map "^0.5.0" + +babel-eslint@7.2.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.2.3.tgz#b2fe2d80126470f5c19442dc757253a897710827" + dependencies: + babel-code-frame "^6.22.0" + babel-traverse "^6.23.1" + babel-types "^6.23.0" + babylon "^6.17.0" + +babel-generator@^6.18.0, babel-generator@^6.21.0, babel-generator@^6.25.0: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.25.0.tgz#33a1af70d5f2890aeb465a4a7793c1df6a9ea9fc" + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-types "^6.25.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.2.0" + source-map "^0.5.0" + trim-right "^1.0.1" + +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.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.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.24.1.tgz#0ad7917e33c8d751e646daca4e77cc19377d2cbc" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + esutils "^2.0.0" + +babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^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" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + lodash "^4.2.0" + +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" + +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-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: + babel-helper-get-function-arity "^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-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +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" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-regex@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.24.1.tgz#d36e22fab1008d79d88648e32116868128456ce8" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + lodash "^4.2.0" + +babel-helper-remap-async-to-generator@^6.16.0, 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-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" + dependencies: + babel-helper-optimise-call-expression "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-jest@20.0.3, babel-jest@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-20.0.3.tgz#e4a03b13dc10389e140fc645d09ffc4ced301671" + dependencies: + babel-core "^6.0.0" + babel-plugin-istanbul "^4.0.0" + babel-preset-jest "^20.0.3" + +babel-loader@7.0.0, babel-loader@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.0.0.tgz#2e43a66bee1fff4470533d0402c8a4532fafbaf7" + dependencies: + find-cache-dir "^0.1.1" + loader-utils "^1.0.2" + mkdirp "^0.5.1" + +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.22.0, babel-plugin-check-es2015-constants@^6.5.0, babel-plugin-check-es2015-constants@^6.7.2, babel-plugin-check-es2015-constants@^6.8.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.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-1.0.2.tgz#adb5bc8f48a89311540395ae9f0cc3ed4b10bb2e" + dependencies: + babel-plugin-syntax-dynamic-import "^6.18.0" + babel-template "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-external-helpers@^6.18.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-external-helpers/-/babel-plugin-external-helpers-6.22.0.tgz#2285f48b02bd5dede85175caf8c62e86adccefa1" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-istanbul@^4.0.0: + version "4.1.4" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.4.tgz#18dde84bf3ce329fddf3f4103fae921456d8e587" + dependencies: + find-up "^2.1.0" + istanbul-lib-instrument "^1.7.2" + test-exclude "^4.1.1" + +babel-plugin-jest-hoist@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-20.0.3.tgz#afedc853bd3f8dc3548ea671fbe69d03cc2c1767" + +babel-plugin-react-docgen@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-react-docgen/-/babel-plugin-react-docgen-1.5.0.tgz#0339717ad51f4a5ce4349330b8266ea5a56f53b4" + dependencies: + babel-types "^6.24.1" + lodash "4.x.x" + react-docgen "^2.15.0" + +babel-plugin-react-transform@2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/babel-plugin-react-transform/-/babel-plugin-react-transform-2.0.2.tgz#515bbfa996893981142d90b1f9b1635de2995109" + dependencies: + lodash "^4.6.1" + +babel-plugin-syntax-async-functions@^6.13.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-async-generators@^6.5.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" + +babel-plugin-syntax-class-constructor-call@^6.18.0: + version "6.18.0" + 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, babel-plugin-syntax-flow@^6.8.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-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.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" + +babel-plugin-syntax-object-rest-spread@^6.5.0, babel-plugin-syntax-object-rest-spread@^6.8.0: + 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.20.0, babel-plugin-syntax-trailing-function-commas@^6.22.0, babel-plugin-syntax-trailing-function-commas@^6.5.0, babel-plugin-syntax-trailing-function-commas@^6.8.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" + +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-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-generators "^6.5.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-async-to-generator@6.16.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.16.0.tgz#19ec36cb1486b59f9f468adfa42ce13908ca2999" + dependencies: + babel-helper-remap-async-to-generator "^6.16.0" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.0.0" + +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-class-constructor-call@^6.24.1: + version "6.24.1" + 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, babel-plugin-transform-class-properties@^6.6.0, babel-plugin-transform-class-properties@^6.8.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-types "^6.24.1" + +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, babel-plugin-transform-es2015-arrow-functions@^6.5.2, babel-plugin-transform-es2015-arrow-functions@^6.8.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, babel-plugin-transform-es2015-block-scoped-functions@^6.6.5, babel-plugin-transform-es2015-block-scoped-functions@^6.8.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.24.1, babel-plugin-transform-es2015-block-scoping@^6.5.0, babel-plugin-transform-es2015-block-scoping@^6.7.1, babel-plugin-transform-es2015-block-scoping@^6.8.0: + 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" + dependencies: + 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.23.0, babel-plugin-transform-es2015-classes@^6.24.1, babel-plugin-transform-es2015-classes@^6.5.0, babel-plugin-transform-es2015-classes@^6.6.5, babel-plugin-transform-es2015-classes@^6.8.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: + babel-helper-define-map "^6.24.1" + babel-helper-function-name "^6.24.1" + babel-helper-optimise-call-expression "^6.24.1" + babel-helper-replace-supers "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-computed-properties@^6.22.0, babel-plugin-transform-es2015-computed-properties@^6.24.1, babel-plugin-transform-es2015-computed-properties@^6.5.0, babel-plugin-transform-es2015-computed-properties@^6.6.5, babel-plugin-transform-es2015-computed-properties@^6.8.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.x, babel-plugin-transform-es2015-destructuring@^6.22.0, babel-plugin-transform-es2015-destructuring@^6.23.0, babel-plugin-transform-es2015-destructuring@^6.5.0, babel-plugin-transform-es2015-destructuring@^6.6.5, babel-plugin-transform-es2015-destructuring@^6.8.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-duplicate-keys@^6.22.0, babel-plugin-transform-es2015-duplicate-keys@^6.24.1: + 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.22.0, babel-plugin-transform-es2015-for-of@^6.23.0, babel-plugin-transform-es2015-for-of@^6.5.0, babel-plugin-transform-es2015-for-of@^6.6.0, babel-plugin-transform-es2015-for-of@^6.8.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.x, babel-plugin-transform-es2015-function-name@^6.22.0, babel-plugin-transform-es2015-function-name@^6.24.1, babel-plugin-transform-es2015-function-name@^6.5.0, babel-plugin-transform-es2015-function-name@^6.8.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: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-literals@^6.22.0, babel-plugin-transform-es2015-literals@^6.5.0, babel-plugin-transform-es2015-literals@^6.8.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-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-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.x, 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, babel-plugin-transform-es2015-modules-commonjs@^6.7.0, babel-plugin-transform-es2015-modules-commonjs@^6.8.0: + 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" + dependencies: + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-modules-systemjs@^6.23.0, babel-plugin-transform-es2015-modules-systemjs@^6.24.1: + 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-plugin-transform-es2015-modules-umd@^6.23.0, babel-plugin-transform-es2015-modules-umd@^6.24.1: + 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, babel-plugin-transform-es2015-object-super@^6.24.1, babel-plugin-transform-es2015-object-super@^6.6.5, babel-plugin-transform-es2015-object-super@^6.8.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.x, babel-plugin-transform-es2015-parameters@^6.23.0, babel-plugin-transform-es2015-parameters@^6.24.1, babel-plugin-transform-es2015-parameters@^6.5.0, babel-plugin-transform-es2015-parameters@^6.7.0, babel-plugin-transform-es2015-parameters@^6.8.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: + babel-helper-call-delegate "^6.24.1" + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-shorthand-properties@6.x, babel-plugin-transform-es2015-shorthand-properties@^6.22.0, babel-plugin-transform-es2015-shorthand-properties@^6.24.1, babel-plugin-transform-es2015-shorthand-properties@^6.5.0, babel-plugin-transform-es2015-shorthand-properties@^6.8.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.x, babel-plugin-transform-es2015-spread@^6.22.0, babel-plugin-transform-es2015-spread@^6.5.0, babel-plugin-transform-es2015-spread@^6.6.5, babel-plugin-transform-es2015-spread@^6.8.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-sticky-regex@6.x, babel-plugin-transform-es2015-sticky-regex@^6.22.0, babel-plugin-transform-es2015-sticky-regex@^6.24.1: + 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, babel-plugin-transform-es2015-template-literals@^6.6.5, babel-plugin-transform-es2015-template-literals@^6.8.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-es2015-typeof-symbol@^6.22.0, 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.x, babel-plugin-transform-es2015-unicode-regex@^6.22.0, babel-plugin-transform-es2015-unicode-regex@^6.24.1: + 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-es3-member-expression-literals@^6.5.0, babel-plugin-transform-es3-member-expression-literals@^6.8.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es3-member-expression-literals/-/babel-plugin-transform-es3-member-expression-literals-6.22.0.tgz#733d3444f3ecc41bef8ed1a6a4e09657b8969ebb" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es3-property-literals@^6.5.0, babel-plugin-transform-es3-property-literals@^6.8.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es3-property-literals/-/babel-plugin-transform-es3-property-literals-6.22.0.tgz#b2078d5842e22abf40f73e8cde9cd3711abd5758" + dependencies: + babel-runtime "^6.22.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.21.0, babel-plugin-transform-flow-strip-types@^6.22.0, babel-plugin-transform-flow-strip-types@^6.5.0, babel-plugin-transform-flow-strip-types@^6.7.0, babel-plugin-transform-flow-strip-types@^6.8.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.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-object-assign@^6.5.0: + 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.22.0" + +babel-plugin-transform-object-rest-spread@6.23.0, babel-plugin-transform-object-rest-spread@^6.20.2, babel-plugin-transform-object-rest-spread@^6.22.0, babel-plugin-transform-object-rest-spread@^6.23.0, babel-plugin-transform-object-rest-spread@^6.5.0, babel-plugin-transform-object-rest-spread@^6.6.5, babel-plugin-transform-object-rest-spread@^6.8.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.23.0.tgz#875d6bc9be761c58a2ae3feee5dc4895d8c7f921" + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-react-constant-elements@6.23.0, 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, babel-plugin-transform-react-display-name@^6.8.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-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-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +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.22.0" + +babel-plugin-transform-react-jsx@6.24.1, babel-plugin-transform-react-jsx@^6.24.1, babel-plugin-transform-react-jsx@^6.5.0, babel-plugin-transform-react-jsx@^6.8.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.24.1" + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-regenerator@6.24.1, babel-plugin-transform-regenerator@^6.22.0, babel-plugin-transform-regenerator@^6.24.1, babel-plugin-transform-regenerator@^6.5.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.24.1.tgz#b8da305ad43c3c99b4848e4fe4037b770d23c418" + dependencies: + regenerator-transform "0.9.11" + +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-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-polyfill@^6.20.0, babel-polyfill@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d" + dependencies: + babel-runtime "^6.22.0" + core-js "^2.4.0" + regenerator-runtime "^0.10.0" + +babel-preset-env@1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.5.2.tgz#cd4ae90a6e94b709f97374b33e5f8b983556adef" + 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-es2015-node@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-preset-es2015-node/-/babel-preset-es2015-node-6.1.1.tgz#60b23157024b0cfebf3a63554cb05ee035b4e55f" + dependencies: + babel-plugin-transform-es2015-destructuring "6.x" + babel-plugin-transform-es2015-function-name "6.x" + babel-plugin-transform-es2015-modules-commonjs "6.x" + babel-plugin-transform-es2015-parameters "6.x" + babel-plugin-transform-es2015-shorthand-properties "6.x" + babel-plugin-transform-es2015-spread "6.x" + babel-plugin-transform-es2015-sticky-regex "6.x" + babel-plugin-transform-es2015-unicode-regex "6.x" + semver "5.x" + +babel-preset-es2015@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" + dependencies: + babel-plugin-check-es2015-constants "^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.24.1" + babel-plugin-transform-es2015-classes "^6.24.1" + babel-plugin-transform-es2015-computed-properties "^6.24.1" + babel-plugin-transform-es2015-destructuring "^6.22.0" + babel-plugin-transform-es2015-duplicate-keys "^6.24.1" + babel-plugin-transform-es2015-for-of "^6.22.0" + babel-plugin-transform-es2015-function-name "^6.24.1" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-plugin-transform-es2015-modules-systemjs "^6.24.1" + babel-plugin-transform-es2015-modules-umd "^6.24.1" + babel-plugin-transform-es2015-object-super "^6.24.1" + babel-plugin-transform-es2015-parameters "^6.24.1" + babel-plugin-transform-es2015-shorthand-properties "^6.24.1" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.24.1" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.22.0" + babel-plugin-transform-es2015-unicode-regex "^6.24.1" + babel-plugin-transform-regenerator "^6.24.1" + +babel-preset-es2016@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-es2016/-/babel-preset-es2016-6.24.1.tgz#f900bf93e2ebc0d276df9b8ab59724ebfd959f8b" + dependencies: + babel-plugin-transform-exponentiation-operator "^6.24.1" + +babel-preset-fbjs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-1.0.0.tgz#c972e5c9b301d4ec9e7971f4aec3e14ac017a8b0" + dependencies: + babel-plugin-check-es2015-constants "^6.7.2" + babel-plugin-syntax-flow "^6.5.0" + babel-plugin-syntax-object-rest-spread "^6.5.0" + babel-plugin-syntax-trailing-function-commas "^6.5.0" + babel-plugin-transform-class-properties "^6.6.0" + babel-plugin-transform-es2015-arrow-functions "^6.5.2" + babel-plugin-transform-es2015-block-scoped-functions "^6.6.5" + babel-plugin-transform-es2015-block-scoping "^6.7.1" + babel-plugin-transform-es2015-classes "^6.6.5" + babel-plugin-transform-es2015-computed-properties "^6.6.5" + babel-plugin-transform-es2015-destructuring "^6.6.5" + babel-plugin-transform-es2015-for-of "^6.6.0" + babel-plugin-transform-es2015-literals "^6.5.0" + babel-plugin-transform-es2015-modules-commonjs "^6.7.0" + babel-plugin-transform-es2015-object-super "^6.6.5" + babel-plugin-transform-es2015-parameters "^6.7.0" + babel-plugin-transform-es2015-shorthand-properties "^6.5.0" + babel-plugin-transform-es2015-spread "^6.6.5" + babel-plugin-transform-es2015-template-literals "^6.6.5" + babel-plugin-transform-es3-member-expression-literals "^6.5.0" + babel-plugin-transform-es3-property-literals "^6.5.0" + babel-plugin-transform-flow-strip-types "^6.7.0" + babel-plugin-transform-object-rest-spread "^6.6.5" + object-assign "^4.0.1" + +babel-preset-fbjs@^2.1.0: + version "2.1.4" + resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-2.1.4.tgz#22f358e6654073acf61e47a052a777d7bccf03af" + dependencies: + babel-plugin-check-es2015-constants "^6.8.0" + babel-plugin-syntax-class-properties "^6.8.0" + babel-plugin-syntax-flow "^6.8.0" + babel-plugin-syntax-jsx "^6.8.0" + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-plugin-syntax-trailing-function-commas "^6.8.0" + babel-plugin-transform-class-properties "^6.8.0" + babel-plugin-transform-es2015-arrow-functions "^6.8.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.8.0" + babel-plugin-transform-es2015-block-scoping "^6.8.0" + babel-plugin-transform-es2015-classes "^6.8.0" + babel-plugin-transform-es2015-computed-properties "^6.8.0" + babel-plugin-transform-es2015-destructuring "^6.8.0" + babel-plugin-transform-es2015-for-of "^6.8.0" + babel-plugin-transform-es2015-function-name "^6.8.0" + babel-plugin-transform-es2015-literals "^6.8.0" + babel-plugin-transform-es2015-modules-commonjs "^6.8.0" + babel-plugin-transform-es2015-object-super "^6.8.0" + babel-plugin-transform-es2015-parameters "^6.8.0" + babel-plugin-transform-es2015-shorthand-properties "^6.8.0" + babel-plugin-transform-es2015-spread "^6.8.0" + babel-plugin-transform-es2015-template-literals "^6.8.0" + babel-plugin-transform-es3-member-expression-literals "^6.8.0" + babel-plugin-transform-es3-property-literals "^6.8.0" + babel-plugin-transform-flow-strip-types "^6.8.0" + babel-plugin-transform-object-rest-spread "^6.8.0" + babel-plugin-transform-react-display-name "^6.8.0" + babel-plugin-transform-react-jsx "^6.8.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@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-20.0.3.tgz#cbacaadecb5d689ca1e1de1360ebfc66862c178a" + dependencies: + babel-plugin-jest-hoist "^20.0.3" + +babel-preset-react-app@^3.0.0, babel-preset-react-app@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-3.0.1.tgz#8b744cbe47fd57c868e6f913552ceae26ae31860" + dependencies: + babel-plugin-dynamic-import-node "1.0.2" + babel-plugin-syntax-dynamic-import "6.18.0" + babel-plugin-transform-class-properties "6.24.1" + babel-plugin-transform-object-rest-spread "6.23.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.24.1" + babel-plugin-transform-runtime "6.23.0" + babel-preset-env "1.5.2" + babel-preset-react "6.24.1" + +babel-preset-react-native@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/babel-preset-react-native/-/babel-preset-react-native-2.0.0.tgz#c26c7066c7399df30926fa03c012ef87f2cce5b7" + dependencies: + babel-plugin-check-es2015-constants "^6.5.0" + babel-plugin-react-transform "2.0.2" + babel-plugin-syntax-async-functions "^6.5.0" + babel-plugin-syntax-class-properties "^6.5.0" + babel-plugin-syntax-flow "^6.5.0" + babel-plugin-syntax-jsx "^6.5.0" + babel-plugin-syntax-trailing-function-commas "^6.5.0" + babel-plugin-transform-class-properties "^6.5.0" + babel-plugin-transform-es2015-arrow-functions "^6.5.0" + babel-plugin-transform-es2015-block-scoping "^6.5.0" + babel-plugin-transform-es2015-classes "^6.5.0" + babel-plugin-transform-es2015-computed-properties "^6.5.0" + babel-plugin-transform-es2015-destructuring "^6.5.0" + babel-plugin-transform-es2015-for-of "^6.5.0" + babel-plugin-transform-es2015-function-name "^6.5.0" + babel-plugin-transform-es2015-literals "^6.5.0" + babel-plugin-transform-es2015-modules-commonjs "^6.5.0" + babel-plugin-transform-es2015-parameters "^6.5.0" + babel-plugin-transform-es2015-shorthand-properties "^6.5.0" + babel-plugin-transform-es2015-spread "^6.5.0" + babel-plugin-transform-es2015-template-literals "^6.5.0" + babel-plugin-transform-flow-strip-types "^6.5.0" + babel-plugin-transform-object-assign "^6.5.0" + babel-plugin-transform-object-rest-spread "^6.5.0" + babel-plugin-transform-react-display-name "^6.5.0" + babel-plugin-transform-react-jsx "^6.5.0" + babel-plugin-transform-react-jsx-source "^6.5.0" + babel-plugin-transform-regenerator "^6.5.0" + react-transform-hmr "^1.0.4" + +babel-preset-react-native@^1.9.1: + version "1.9.2" + resolved "https://registry.yarnpkg.com/babel-preset-react-native/-/babel-preset-react-native-1.9.2.tgz#b22addd2e355ff3b39671b79be807e52dfa145f2" + dependencies: + babel-plugin-check-es2015-constants "^6.5.0" + babel-plugin-react-transform "2.0.2" + babel-plugin-syntax-async-functions "^6.5.0" + babel-plugin-syntax-class-properties "^6.5.0" + babel-plugin-syntax-flow "^6.5.0" + babel-plugin-syntax-jsx "^6.5.0" + babel-plugin-syntax-trailing-function-commas "^6.5.0" + babel-plugin-transform-class-properties "^6.5.0" + babel-plugin-transform-es2015-arrow-functions "^6.5.0" + babel-plugin-transform-es2015-block-scoping "^6.5.0" + babel-plugin-transform-es2015-classes "^6.5.0" + babel-plugin-transform-es2015-computed-properties "^6.5.0" + babel-plugin-transform-es2015-destructuring "^6.5.0" + babel-plugin-transform-es2015-for-of "^6.5.0" + babel-plugin-transform-es2015-function-name "^6.5.0" + babel-plugin-transform-es2015-literals "^6.5.0" + babel-plugin-transform-es2015-modules-commonjs "^6.5.0" + babel-plugin-transform-es2015-parameters "^6.5.0" + babel-plugin-transform-es2015-shorthand-properties "^6.5.0" + babel-plugin-transform-es2015-spread "^6.5.0" + babel-plugin-transform-es2015-template-literals "^6.5.0" + babel-plugin-transform-flow-strip-types "^6.5.0" + babel-plugin-transform-object-assign "^6.5.0" + babel-plugin-transform-object-rest-spread "^6.5.0" + babel-plugin-transform-react-display-name "^6.5.0" + babel-plugin-transform-react-jsx "^6.5.0" + babel-plugin-transform-react-jsx-source "^6.5.0" + babel-plugin-transform-regenerator "^6.5.0" + 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.18.0, babel-register@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.1.tgz#7e10e13a2f71065bdfad5a1787ba45bca6ded75f" + dependencies: + babel-core "^6.24.1" + babel-runtime "^6.22.0" + core-js "^2.4.0" + home-or-tmp "^2.0.0" + lodash "^4.2.0" + mkdirp "^0.5.1" + source-map-support "^0.4.2" + +babel-runtime@6.23.0, babel-runtime@6.x.x, babel-runtime@^6.0.0, babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.20.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.5.0, babel-runtime@^6.9.2: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.10.0" + +babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.25.0: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.25.0.tgz#665241166b7c2aa4c619d71e192969552b10c071" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.25.0" + babel-types "^6.25.0" + babylon "^6.17.2" + lodash "^4.2.0" + +babel-traverse@^6.18.0, babel-traverse@^6.21.0, babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-traverse@^6.25.0: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.25.0.tgz#2257497e2fcd19b89edc13c4c91381f9512496f1" + dependencies: + babel-code-frame "^6.22.0" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-types "^6.25.0" + babylon "^6.17.2" + debug "^2.2.0" + globals "^9.0.0" + invariant "^2.2.0" + lodash "^4.2.0" + +babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.21.0, babel-types@^6.23.0, babel-types@^6.24.1, babel-types@^6.25.0: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.25.0.tgz#70afb248d5660e5d18f811d91c8303b54134a18e" + dependencies: + babel-runtime "^6.22.0" + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^1.0.1" + +babylon@^6.16.1, babylon@^6.17.0, babylon@^6.17.2, babylon@^6.17.4: + version "6.17.4" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.4.tgz#3e8b7402b88d22c3423e137a1577883b15ff869a" + +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@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978" + +base64-js@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.1.2.tgz#d6400cac1c4c660976d90d07a04351d89395f5e8" + +base64-js@^1.0.2, base64-js@^1.1.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886" + +base64-url@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/base64-url/-/base64-url-1.2.1.tgz#199fd661702a0e7b7dcae6e0698bb089c52f6d78" + +basic-auth-connect@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz#fdb0b43962ca7b40456a7c2bb48fe173da2d2122" + +basic-auth@~1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.0.4.tgz#030935b01de7c9b94a824b29f3fccb750d3a5290" + +batch@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.5.3.tgz#3f3414f380321743bfc1042f9a83ff1d5824d464" + +bcrypt-pbkdf@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + dependencies: + tweetnacl "^0.14.3" + +beeper@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" + +big-integer@^1.6.7: + version "1.6.23" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.23.tgz#e85d508220c74e3f43a4ce72eed51f3da4db94d1" + +big.js@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978" + +binary-extensions@^1.0.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" + +block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + dependencies: + inherits "~2.0.0" + +bluebird@^3.4.7: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.7" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.7.tgz#ddb048e50d9482790094c13eb3fcfc833ce7ab46" + +body-parser@~1.13.3: + version "1.13.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.13.3.tgz#c08cf330c3358e151016a05746f13f029c97fa97" + dependencies: + bytes "2.1.0" + content-type "~1.0.1" + debug "~2.2.0" + depd "~1.0.1" + http-errors "~1.3.1" + iconv-lite "0.4.11" + on-finished "~2.3.0" + qs "4.0.0" + raw-body "~2.1.2" + type-is "~1.6.6" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + +boom@2.x.x: + version "2.10.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + dependencies: + hoek "2.x.x" + +bowser@^1.6.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-1.7.0.tgz#169de4018711f994242bff9a8009e77a1f35e003" + +boxen@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-0.6.0.tgz#8364d4248ac34ff0ef1b2f2bf49a6c60ce0d81b6" + dependencies: + ansi-align "^1.1.0" + camelcase "^2.1.0" + chalk "^1.1.1" + cli-boxes "^1.0.0" + filled-array "^1.0.0" + object-assign "^4.0.1" + repeating "^2.0.0" + string-width "^1.0.1" + widest-line "^1.0.0" + +bplist-creator@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.7.tgz#37df1536092824b87c42f957b01344117372ae45" + dependencies: + stream-buffers "~2.2.0" + +bplist-parser@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.1.1.tgz#d60d5dcc20cba6dc7e1f299b35d3e1f95dafbae6" + dependencies: + big-integer "^1.6.7" + +brace-expansion@^1.0.0, brace-expansion@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +brcast@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brcast/-/brcast-2.0.1.tgz#4311508f0634a6f5a2465b6cf2db27f06902aaca" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + +browser-resolve@^1.11.2: + version "1.11.2" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" + dependencies: + 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" + dependencies: + buffer-xor "^1.0.2" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + inherits "^2.0.1" + +browserify-cipher@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a" + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd" + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" + +browserify-zlib@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" + dependencies: + pako "~0.2.0" + +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-db "^1.0.30000639" + electron-to-chromium "^1.2.7" + +browserslist@^2.1.2, browserslist@^2.1.3: + version "2.1.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.1.5.tgz#e882550df3d1cd6d481c1a3e0038f2baf13a4711" + dependencies: + caniuse-lite "^1.0.30000684" + electron-to-chromium "^1.3.14" + +bser@1.0.2, bser@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169" + dependencies: + node-int64 "^0.4.0" + +bser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" + dependencies: + node-int64 "^0.4.0" + +buffer-indexof@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.0.tgz#f54f647c4f4e25228baa656a2e57e43d5f270982" + +buffer-xor@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + +buffer@^4.3.0: + version "4.9.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-modules@^1.0.0, builtin-modules@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + +bytes@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.1.0.tgz#ac93c410e2ffc9cc7cf4b464b38289067f5e47b4" + +bytes@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339" + +caller-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + dependencies: + callsites "^0.2.0" + +callsites@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + +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" + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +camelcase@^2.0.0, camelcase@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + +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-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: + version "1.0.30000696" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000696.tgz#e71f5c61e1f96c7a3af4e791ac5db55e11737604" + +caniuse-lite@^1.0.30000670, caniuse-lite@^1.0.30000684: + version "1.0.30000696" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000696.tgz#30f2695d2a01a0dfd779a26ab83f4d134b3da5cc" + +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" + +case-sensitive-paths-webpack-plugin@2.1.1, case-sensitive-paths-webpack-plugin@^2.0.0: + 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" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.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" + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.0.1.tgz#dbec49436d2ae15f536114e76d14656cdbc0f44d" + dependencies: + ansi-styles "^3.1.0" + escape-string-regexp "^1.0.5" + supports-color "^4.0.0" + +chokidar@^1.4.3, chokidar@^1.6.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" + 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" + +ci-info@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.3.tgz#eeabf194419ce900da3018c207d212f2a6df0a07" + dependencies: + inherits "^2.0.1" + +circular-json@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" + +clap@^1.0.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.0.tgz#59c90fe3e137104746ff19469a27a634ff68c857" + 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" + +clean-css@4.1.x: + version "4.1.5" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.5.tgz#d09a87a02a5375117589796ae76a063cacdb541a" + 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" + +cli-cursor@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" + dependencies: + restore-cursor "^1.0.1" + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + dependencies: + restore-cursor "^2.0.0" + +cli-width@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" + +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +clone-stats@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" + +clone@^1.0.0, 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.3" + resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.3.tgz#1b54a5e1dcf77c990455d4deea98c564416dc893" + 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.0.0, 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.2" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d" + +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" + +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.9.x, commander@~2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" + dependencies: + graceful-readlink ">= 1.0.0" + +commander@^2.9.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.10.0.tgz#e1f5d3245de246d1a5ca04702fa1ad1bd7e405fe" + dependencies: + graceful-readlink ">= 1.0.0" + +common-tags@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.4.0.tgz#1187be4f3d4cf0c0427d43f74eef1f73501614c0" + dependencies: + babel-runtime "^6.18.0" + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + +compressible@~2.0.5: + version "2.0.10" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.10.tgz#feda1c7f7617912732b29bf8cf26252a20b9eecd" + dependencies: + mime-db ">= 1.27.0 < 2" + +compression@^1.5.2, compression@~1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.5.2.tgz#b03b8d86e6f8ad29683cba8df91ddc6ffc77b395" + dependencies: + accepts "~1.2.12" + bytes "2.1.0" + compressible "~2.0.5" + debug "~2.2.0" + on-headers "~1.0.0" + vary "~1.0.1" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +concat-stream@^1.5.2, concat-stream@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" + dependencies: + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +configstore@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-2.1.0.tgz#737a3a7036e9886102aa6099e47bb33ab1aba1a1" + dependencies: + dot-prop "^3.0.0" + graceful-fs "^4.1.2" + mkdirp "^0.5.0" + object-assign "^4.0.1" + os-tmpdir "^1.0.0" + osenv "^0.1.0" + uuid "^2.0.1" + write-file-atomic "^1.1.2" + xdg-basedir "^2.0.0" + +configstore@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.0.tgz#45df907073e26dfa1cf4b2d52f5b60545eaa11d1" + dependencies: + dot-prop "^4.1.0" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + unique-string "^1.0.0" + write-file-atomic "^2.0.0" + xdg-basedir "^3.0.0" + +connect-history-api-fallback@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz#e51d17f8f0ef0db90a64fdb47de3051556e9f169" + +connect-timeout@~1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/connect-timeout/-/connect-timeout-1.6.2.tgz#de9a5ec61e33a12b6edaab7b5f062e98c599b88e" + dependencies: + debug "~2.2.0" + http-errors "~1.3.1" + ms "0.7.1" + on-headers "~1.0.0" + +connect@^2.8.3: + version "2.30.2" + resolved "https://registry.yarnpkg.com/connect/-/connect-2.30.2.tgz#8da9bcbe8a054d3d318d74dfec903b5c39a1b609" + dependencies: + basic-auth-connect "1.0.0" + body-parser "~1.13.3" + bytes "2.1.0" + compression "~1.5.2" + connect-timeout "~1.6.2" + content-type "~1.0.1" + cookie "0.1.3" + cookie-parser "~1.3.5" + cookie-signature "1.0.6" + csurf "~1.8.3" + debug "~2.2.0" + depd "~1.0.1" + errorhandler "~1.4.2" + express-session "~1.11.3" + finalhandler "0.4.0" + fresh "0.3.0" + http-errors "~1.3.1" + method-override "~2.3.5" + morgan "~1.6.1" + multiparty "3.3.2" + on-headers "~1.0.0" + parseurl "~1.3.0" + pause "0.1.0" + qs "4.0.0" + response-time "~2.3.1" + serve-favicon "~2.3.0" + serve-index "~1.7.2" + serve-static "~1.10.0" + type-is "~1.6.6" + utils-merge "1.0.0" + vhost "~3.0.1" + +console-browserify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + dependencies: + date-now "^0.1.4" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + +content-type-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.1, content-type@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" + +convert-source-map@^1.1.0, convert-source-map@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" + +cookie-parser@~1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.3.5.tgz#9d755570fb5d17890771227a02314d9be7cf8356" + dependencies: + cookie "0.1.3" + cookie-signature "1.0.6" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + +cookie@0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.1.3.tgz#e734a5c1417fce472d5aef82c381cabb64d1a435" + +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + +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.2.2, core-js@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" + +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@^2.1.0, cosmiconfig@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.1.3.tgz#952771eb0dddc1cb3fa2f6fbe51a522e93b3ee0a" + 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" + +crc@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/crc/-/crc-3.3.0.tgz#fa622e1bc388bf257309082d6b65200ce67090ba" + +create-ecdh@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-error-class@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + dependencies: + capture-stack-trace "^1.0.0" + +create-hash@^1.1.0, create-hash@^1.1.1, 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 "^2.0.0" + sha.js "^2.4.0" + +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.5.2: + version "15.6.0" + resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.0.tgz#ab448497c26566e1e29413e883207d57cfe7bed4" + dependencies: + fbjs "^0.8.9" + loose-envify "^1.3.1" + object-assign "^4.1.1" + +cross-spawn@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" + dependencies: + lru-cache "^4.0.1" + which "^1.2.9" + +cross-spawn@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" + dependencies: + lru-cache "^4.0.1" + which "^1.2.9" + +cryptiles@2.x.x: + version "2.0.5" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + dependencies: + boom "2.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" + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + +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" + +csrf@~3.0.0: + version "3.0.6" + resolved "https://registry.yarnpkg.com/csrf/-/csrf-3.0.6.tgz#b61120ddceeafc91e76ed5313bb5c0b2667b710a" + dependencies: + rndm "1.2.0" + tsscmp "1.0.5" + uid-safe "2.1.4" + +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-loader@0.28.4, css-loader@^0.28.0, css-loader@^0.28.1: + version "0.28.4" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.4.tgz#6cf3579192ce355e8b38d5f42dd7a1f2ec898d0f" + 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 "^0.1.7" + +css-select@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-selector-tokenizer@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86" + dependencies: + cssesc "^0.1.0" + fastparse "^1.1.1" + regexpu-core "^1.0.0" + +css-what@2.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" + +cssesc@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" + +"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" + +"cssstyle@>= 0.2.37 < 0.3.0": + version "0.2.37" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" + dependencies: + cssom "0.3.x" + +csurf@~1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/csurf/-/csurf-1.8.3.tgz#23f2a13bf1d8fce1d0c996588394442cba86a56a" + dependencies: + cookie "0.1.3" + cookie-signature "1.0.6" + csrf "~3.0.0" + http-errors "~1.3.1" + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + dependencies: + array-find-index "^1.0.1" + +d@1: + version "1.0.0" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" + dependencies: + es5-ext "^0.10.9" + +damerau-levenshtein@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + +date-now@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + +dateformat@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.0.0.tgz#2743e3abb5c3fc2462e527dca445e04e9f4dee17" + +debug@2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.7.tgz#92bad1f6d05bbb6bba22cca88bcd0ec894c2861e" + dependencies: + ms "2.0.0" + +debug@2.6.8, debug@^2.1.1, debug@^2.2.0, debug@^2.6.0, debug@^2.6.3, debug@^2.6.6, debug@^2.6.8: + version "2.6.8" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" + 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-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.2" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + +default-require-extensions@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" + dependencies: + strip-bom "^2.0.0" + +define-properties@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" + dependencies: + foreach "^2.0.5" + object-keys "^1.0.8" + +defined@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + +del@^2.0.2, del@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + +del@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" + dependencies: + globby "^6.1.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + p-map "^1.1.1" + pify "^3.0.0" + rimraf "^2.2.8" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +denodeify@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631" + +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.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.0.1.tgz#80aec64c9d6d97e65cc2a9caa93c0aa6abf73aaa" + +des.js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + dependencies: + repeating "^2.0.0" + +detect-node@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127" + +detect-port-alt@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.3.tgz#a4d2f061d757a034ecf37c514260a98750f2b131" + dependencies: + address "^1.0.1" + debug "^2.6.0" + +diff@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" + +diffie-hellman@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + +dns-packet@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.1.1.tgz#2369d45038af045f3898e6fa56862aed3f40296c" + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + dependencies: + buffer-indexof "^1.0.0" + +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +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" + +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-serializer@0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" + dependencies: + domelementtype "~1.1.1" + entities "~1.1.1" + +dom-urls@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/dom-urls/-/dom-urls-1.1.0.tgz#001ddf81628cd1e706125c7176f53ccec55d918e" + dependencies: + urijs "^1.16.1" + +dom-walk@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" + +domain-browser@^1.1.1: + version "1.1.7" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" + +domelementtype@1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" + +domelementtype@~1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" + +domhandler@2.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594" + dependencies: + domelementtype "1" + +domutils@1.1: + version "1.1.6" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485" + dependencies: + domelementtype "1" + +domutils@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + dependencies: + dom-serializer "0" + domelementtype "1" + +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" + dependencies: + is-obj "^1.0.0" + +dotenv@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-4.0.0.tgz#864ef1379aced55ce6f95debecdce179f7a0cd1d" + +duplexer2@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" + dependencies: + readable-stream "~1.1.9" + +duplexer2@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + dependencies: + readable-stream "^2.0.2" + +duplexer@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.14: + version "1.3.15" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.15.tgz#08397934891cbcfaebbd18b82a95b5a481138369" + +element-class@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/element-class/-/element-class-0.2.2.tgz#9d3bbd0767f9013ef8e1c8ebe722c1402a60050e" + +elliptic@^6.0.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +emoji-regex@^6.1.0: + version "6.4.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.4.2.tgz#a30b6fee353d406d96cfb9fa765bdc82897eff6e" + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + +encodeurl@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" + +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" + +enhanced-resolve@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.1.0.tgz#9f4b626f577245edcf4b2ad83d86e17f4f421dec" + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + object-assign "^4.0.1" + tapable "^0.2.5" + +entities@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" + +errno@^0.1.3, errno@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" + dependencies: + prr "~0.0.0" + +error-ex@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + dependencies: + is-arrayish "^0.2.1" + +errorhandler@~1.4.2: + version "1.4.3" + resolved "https://registry.yarnpkg.com/errorhandler/-/errorhandler-1.4.3.tgz#b7b70ed8f359e9db88092f2d20c0f831420ad83f" + dependencies: + accepts "~1.3.0" + escape-html "~1.0.3" + +es-abstract@^1.4.3, es-abstract@^1.5.1, 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" + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.0" + is-callable "^1.1.3" + is-regex "^1.0.3" + +es-to-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + dependencies: + is-callable "^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" + dependencies: + es6-iterator "2" + es6-symbol "~3.1" + +es5-shim@^4.5.9: + version "4.5.9" + resolved "https://registry.yarnpkg.com/es5-shim/-/es5-shim-4.5.9.tgz#2a1e2b9e583ff5fed0c20a3ee2cbf3f75230a5c0" + +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" + dependencies: + d "1" + es5-ext "^0.10.14" + es6-symbol "^3.1" + +es6-map@^0.1.3: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-set "~0.1.5" + es6-symbol "~3.1.1" + event-emitter "~0.3.5" + +es6-promise@^4.0.5: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.1.1.tgz#8811e90915d9a0dba36274f0b242dbda78f9c92a" + +es6-set@~0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-symbol "3.1.1" + event-emitter "~0.3.5" + +es6-shim@^0.35.1: + 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, es6-symbol@^3.1.1, es6-symbol@~3.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: + d "1" + es5-ext "~0.10.14" + +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" + dependencies: + d "1" + es5-ext "^0.10.14" + es6-iterator "^2.0.1" + es6-symbol "^3.1.1" + +escape-html@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.2.tgz#d77d32fa98e38c2f41ae85e9278e0e0e6ba1022c" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +escodegen@^1.6.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" + dependencies: + esprima "^2.7.1" + estraverse "^1.9.1" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.2.0" + +escope@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" + dependencies: + es6-map "^0.1.3" + es6-weak-map "^2.0.1" + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-config-react-app@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-1.0.5.tgz#98337597bc01cc22991fcbdda07451f3b4511718" + +eslint-import-resolver-node@^0.2.0: + version "0.2.3" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz#5add8106e8c928db2cba232bcd9efa846e3da16c" + dependencies: + debug "^2.2.0" + object-assign "^4.0.1" + resolve "^1.1.6" + +eslint-loader@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-1.7.1.tgz#50b158dd6272dcefb97e984254837f81a5802ce0" + dependencies: + find-cache-dir "^0.1.1" + loader-fs-cache "^1.0.0" + loader-utils "^1.0.2" + object-assign "^4.0.1" + object-hash "^1.1.4" + rimraf "^2.6.1" + +eslint-module-utils@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz#abaec824177613b8a95b299639e1b6facf473449" + dependencies: + debug "^2.6.8" + pkg-dir "^1.0.0" + +eslint-plugin-flowtype@2.34.0: + version "2.34.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.34.0.tgz#b9875f314652e5081623c9d2b18a346bbb759c09" + dependencies: + lodash "^4.15.0" + +eslint-plugin-import@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.2.0.tgz#72ba306fad305d67c4816348a4699a4229ac8b4e" + dependencies: + builtin-modules "^1.1.1" + contains-path "^0.1.0" + debug "^2.2.0" + doctrine "1.5.0" + eslint-import-resolver-node "^0.2.0" + eslint-module-utils "^2.0.0" + has "^1.0.1" + lodash.cond "^4.3.0" + minimatch "^3.0.3" + pkg-up "^1.0.0" + +eslint-plugin-jsx-a11y@5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-5.0.3.tgz#4a939f76ec125010528823331bf948cc573380b6" + dependencies: + aria-query "^0.5.0" + array-includes "^3.0.3" + ast-types-flow "0.0.7" + axobject-query "^0.1.0" + damerau-levenshtein "^1.0.0" + emoji-regex "^6.1.0" + jsx-ast-utils "^1.4.0" + +eslint-plugin-react@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.1.0.tgz#27770acf39f5fd49cd0af4083ce58104eb390d4c" + dependencies: + doctrine "^2.0.0" + has "^1.0.1" + jsx-ast-utils "^1.4.1" + +eslint@3.19.0: + version "3.19.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc" + dependencies: + babel-code-frame "^6.16.0" + chalk "^1.1.3" + concat-stream "^1.5.2" + debug "^2.1.1" + doctrine "^2.0.0" + escope "^3.6.0" + espree "^3.4.0" + esquery "^1.0.0" + estraverse "^4.2.0" + esutils "^2.0.2" + file-entry-cache "^2.0.0" + glob "^7.0.3" + globals "^9.14.0" + ignore "^3.2.0" + imurmurhash "^0.1.4" + inquirer "^0.12.0" + is-my-json-valid "^2.10.0" + is-resolvable "^1.0.0" + js-yaml "^3.5.1" + json-stable-stringify "^1.0.0" + levn "^0.3.0" + lodash "^4.0.0" + mkdirp "^0.5.0" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.1" + pluralize "^1.2.1" + progress "^1.1.8" + require-uncached "^1.0.2" + shelljs "^0.7.5" + strip-bom "^3.0.0" + strip-json-comments "~2.0.1" + table "^3.7.8" + text-table "~0.2.0" + user-home "^2.0.0" + +espree@^3.4.0: + version "3.4.3" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.3.tgz#2910b5ccd49ce893c2ffffaab4fd8b3a31b82374" + dependencies: + acorn "^5.0.1" + acorn-jsx "^3.0.0" + +esprima@^2.6.0, esprima@^2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + +esprima@^3.1.1, esprima@~3.1.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + +esquery@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" + dependencies: + estraverse "^4.0.0" + +esrecurse@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163" + dependencies: + 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.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" + +esutils@^2.0.0, esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +etag@~1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz#03d30b5f67dd6e632d2945d30d6652731a34d5d8" + +etag@~1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051" + +event-emitter@~0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + dependencies: + d "1" + es5-ext "~0.10.14" + +event-target-shim@^1.0.5: + version "1.1.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-1.1.1.tgz#a86e5ee6bdaa16054475da797ccddf0c55698491" + +eventemitter3@1.x.x: + version "1.2.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" + +events@^1.0.0, events@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + +eventsource@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" + dependencies: + original ">=0.0.5" + +evp_bytestokey@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz#497b66ad9fef65cd7c08a6180824ba1476b66e53" + dependencies: + create-hash "^1.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" + dependencies: + merge "^1.1.3" + +exenv@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.0.tgz#3835f127abf075bfe082d0aed4484057c78e3c89" + +exit-hook@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + dependencies: + is-posix-bracket "^0.1.0" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + +express-session@~1.11.3: + version "1.11.3" + resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.11.3.tgz#5cc98f3f5ff84ed835f91cbf0aabd0c7107400af" + dependencies: + cookie "0.1.3" + cookie-signature "1.0.6" + crc "3.3.0" + debug "~2.2.0" + depd "~1.0.1" + on-headers "~1.0.0" + parseurl "~1.3.0" + uid-safe "~2.0.0" + utils-merge "1.0.0" + +express@^4.13.3, express@^4.15.2, express@^4.15.3: + version "4.15.3" + resolved "https://registry.yarnpkg.com/express/-/express-4.15.3.tgz#bab65d0f03aa80c358408972fc700f916944b662" + dependencies: + accepts "~1.3.3" + array-flatten "1.1.1" + content-disposition "0.5.2" + content-type "~1.0.2" + cookie "0.3.1" + cookie-signature "1.0.6" + debug "2.6.7" + depd "~1.1.0" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.8.0" + finalhandler "~1.0.3" + fresh "0.5.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.1" + path-to-regexp "0.1.7" + proxy-addr "~1.1.4" + qs "6.4.0" + range-parser "~1.2.0" + send "0.15.3" + serve-static "1.12.3" + setprototypeof "1.0.3" + statuses "~1.3.1" + type-is "~1.6.15" + utils-merge "1.0.0" + vary "~1.1.1" + +extend@~3.0.0: + 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" + dependencies: + iconv-lite "^0.4.17" + jschardet "^1.4.2" + tmp "^0.0.31" + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + +extract-text-webpack-plugin@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-2.1.2.tgz#756ef4efa8155c3681833fbc34da53b941746d6c" + dependencies: + async "^2.1.2" + loader-utils "^1.0.2" + schema-utils "^0.3.0" + webpack-sources "^1.0.1" + +extsprintf@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" + +fancy-log@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.0.tgz#45be17d02bb9917d60ccffd4995c999e6c8c9948" + dependencies: + chalk "^1.1.1" + time-stamp "^1.0.0" + +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" + +fast-levenshtein@~2.0.4: + 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.7" + resolved "https://registry.yarnpkg.com/fast-memoize/-/fast-memoize-2.2.7.tgz#f145c5c22039cedf0a1d4ff6ca592ad0268470ca" + +fastparse@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" + +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" + dependencies: + websocket-driver ">=0.5.1" + +fb-watchman@^1.8.0: + version "1.9.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.2.tgz#a24cf47827f82d38fb59a69ad70b76e3b6ae7383" + dependencies: + bser "1.0.2" + +fb-watchman@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" + dependencies: + bser "^2.0.0" + +fbjs-scripts@^0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/fbjs-scripts/-/fbjs-scripts-0.7.1.tgz#4f115e218e243e3addbf0eddaac1e3c62f703fac" + dependencies: + babel-core "^6.7.2" + babel-preset-fbjs "^1.0.0" + core-js "^1.0.0" + cross-spawn "^3.0.1" + gulp-util "^3.0.4" + object-assign "^4.0.1" + semver "^5.1.0" + through2 "^2.0.0" + +fbjs@^0.8.8, fbjs@^0.8.9, 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" + +figures@^1.3.5: + version "1.7.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + dependencies: + flat-cache "^1.2.1" + object-assign "^4.0.1" + +file-loader@0.11.2, file-loader@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.11.2.tgz#4ff1df28af38719a6098093b88c82c71d1794a34" + dependencies: + loader-utils "^1.0.2" + +filename-regex@^2.0.0: + 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" + resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" + dependencies: + glob "^7.0.3" + minimatch "^3.0.3" + +filesize@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.3.0.tgz#53149ea3460e3b2e024962a51648aa572cf98122" + +fill-range@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^1.1.3" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +filled-array@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/filled-array/-/filled-array-1.1.0.tgz#c3c4f6c663b923459a9aa29912d2d031f1507f84" + +finalhandler@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.4.0.tgz#965a52d9e8d05d2b857548541fb89b53a2497d9b" + dependencies: + debug "~2.2.0" + escape-html "1.0.2" + on-finished "~2.3.0" + unpipe "~1.0.0" + +finalhandler@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.3.tgz#ef47e77950e999780e86022a560e3217e0d0cc89" + dependencies: + debug "2.6.7" + encodeurl "~1.0.1" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.1" + statuses "~1.3.1" + unpipe "~1.0.0" + +find-cache-dir@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" + dependencies: + commondir "^1.0.1" + mkdirp "^0.5.1" + pkg-dir "^1.0.0" + +find-cache-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" + dependencies: + commondir "^1.0.1" + make-dir "^1.0.0" + pkg-dir "^2.0.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + dependencies: + locate-path "^2.0.0" + +flat-cache@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96" + dependencies: + circular-json "^0.3.1" + del "^2.0.2" + graceful-fs "^4.1.2" + write "^0.2.1" + +flatten@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" + +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.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + dependencies: + for-in "^1.0.1" + +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@^2.1.1, form-data@~2.1.1: + 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" + +fresh@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f" + +fresh@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e" + +fs-extra@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^3.0.0" + universalify "^0.1.0" + +fs-extra@^0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + path-is-absolute "^1.0.0" + rimraf "^2.2.8" + +fs-extra@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + +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.1.2, fsevents@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.2.tgz#3282b713fb3ad80ede0e9fcf4611b5aa6fc033f4" + dependencies: + nan "^2.3.0" + node-pre-gyp "^0.6.36" + +fstream-ignore@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" + dependencies: + fstream "^1.0.0" + inherits "2" + minimatch "^3.0.0" + +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: + version "1.1.0" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" + +fuse.js@^3.0.1: + version "3.0.5" + resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-3.0.5.tgz#b58d85878802321de94461654947b93af1086727" + +fuzzysearch@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/fuzzysearch/-/fuzzysearch-1.0.3.tgz#dffc80f6d6b04223f2226aa79dd194231096d008" + +gauge@~1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-1.2.7.tgz#e9cec5483d3d4ee0ef44b60a7d99e4935e136d93" + dependencies: + ansi "^0.3.0" + has-unicode "^2.0.0" + lodash.pad "^4.1.0" + lodash.padend "^4.1.0" + lodash.padstart "^4.1.0" + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +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-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + dependencies: + assert-plus "^1.0.0" + +glamor@^2.20.25: + version "2.20.25" + resolved "https://registry.yarnpkg.com/glamor/-/glamor-2.20.25.tgz#71b84b82b67a9327771ac59de53ee915d148a4a3" + dependencies: + babel-runtime "^6.18.0" + fbjs "^0.8.8" + object-assign "^4.1.0" + prop-types "^15.5.8" + +glamorous@^3.22.1: + version "3.23.5" + resolved "https://registry.yarnpkg.com/glamorous/-/glamorous-3.23.5.tgz#49f613a29f64cdee80948679c66dbcd4084e5fd5" + dependencies: + brcast "^2.0.0" + fast-memoize "^2.2.7" + html-tag-names "^1.1.1" + 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" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global@^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" + +globals@^9.0.0, globals@^9.14.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + +globby@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +glogg@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.0.tgz#7fe0f199f57ac906cf512feead8f90ee4a284fc5" + dependencies: + sparkles "^1.0.0" + +got@^5.0.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/got/-/got-5.7.1.tgz#5f81635a61e4a6589f180569ea4e381680a51f35" + dependencies: + create-error-class "^3.0.1" + duplexer2 "^0.1.4" + is-redirect "^1.0.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + lowercase-keys "^1.0.0" + node-status-codes "^1.0.0" + object-assign "^4.0.1" + parse-json "^2.1.0" + pinkie-promise "^2.0.0" + read-all-stream "^3.0.0" + readable-stream "^2.0.5" + timed-out "^3.0.0" + unzip-response "^1.0.2" + url-parse-lax "^1.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + +gulp-util@^3.0.4: + version "3.0.8" + resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" + dependencies: + array-differ "^1.0.0" + array-uniq "^1.0.2" + beeper "^1.0.0" + chalk "^1.0.0" + dateformat "^2.0.0" + fancy-log "^1.1.0" + gulplog "^1.0.0" + has-gulplog "^0.1.0" + lodash._reescape "^3.0.0" + lodash._reevaluate "^3.0.0" + lodash._reinterpolate "^3.0.0" + lodash.template "^3.0.0" + minimist "^1.1.0" + multipipe "^0.1.2" + object-assign "^3.0.0" + replace-ext "0.0.1" + through2 "^2.0.0" + vinyl "^0.5.0" + +gulplog@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" + dependencies: + glogg "^1.0.0" + +gzip-size@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520" + dependencies: + duplexer "^0.1.1" + +handle-thing@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4" + +handlebars@^4.0.3: + version "4.0.10" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.10.tgz#3d30c718b09a3d96f23ea4cc1f403c4d3ba9ff4f" + dependencies: + async "^1.4.0" + optimist "^0.6.1" + source-map "^0.4.4" + optionalDependencies: + uglify-js "^2.6" + +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@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + dependencies: + ajv "^4.9.1" + har-schema "^1.0.5" + +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-gulplog@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" + dependencies: + sparkles "^1.0.0" + +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: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + +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.js@^1.0.0, hash.js@^1.0.3: + version "1.1.2" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.2.tgz#bf5c887825cfe40b9efde7bf11bd2db26e6bf01b" + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.0" + +hawk@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + dependencies: + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.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" + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hoek@2.x.x: + version "2.16.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + +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" + +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" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +hosted-git-info@^2.1.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-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" + dependencies: + whatwg-encoding "^1.0.1" + +html-entities@1.2.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-minifier@^3.2.3: + version "3.5.2" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.2.tgz#d73bc3ff448942408818ce609bf3fb0ea7ef4eb7" + dependencies: + camel-case "3.0.x" + clean-css "4.1.x" + commander "2.9.x" + he "1.1.x" + ncname "1.0.x" + param-case "2.1.x" + relateurl "0.2.x" + uglify-js "3.0.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.29.0: + version "2.29.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-2.29.0.tgz#e987f421853d3b6938c8c4c8171842e5fd17af23" + 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.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe" + dependencies: + domelementtype "1" + domhandler "2.1" + domutils "1.1" + readable-stream "1.0" + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + +http-errors@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.3.1.tgz#197e22cdebd4198585e8694ef6786197b91ed942" + dependencies: + inherits "~2.0.1" + statuses "1" + +http-errors@~1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257" + dependencies: + depd "1.1.0" + inherits "2.0.3" + setprototypeof "1.0.3" + statuses ">= 1.3.1 < 2" + +http-proxy-middleware@~0.17.4: + version "0.17.4" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz#642e8848851d66f09d4f124912846dbaeb41b833" + dependencies: + http-proxy "^1.16.2" + is-glob "^3.1.0" + lodash "^4.17.2" + micromatch "^2.3.11" + +http-proxy@^1.16.2: + version "1.16.2" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742" + dependencies: + eventemitter3 "1.x.x" + requires-port "1.x.x" + +http-signature@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + dependencies: + assert-plus "^0.2.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" + +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.11: + version "0.4.11" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.11.tgz#2ecb42fd294744922209a2e7c404dac8793d8ade" + +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.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" + +ignore@^3.2.0: + version "3.3.3" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.3.tgz#432352e57accd87ab3110e82d3fea0e47812156d" + +image-size@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.3.5.tgz#83240eab2fb5b00b04aab8c74b0471e9cba7ad8c" + +immutable@^3.8.1: + version "3.8.1" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.1.tgz#200807f11ab0f72710ea485542de088075f68cd2" + +immutable@~3.7.6: + version "3.7.6" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.7.6.tgz#13b4d3cb12befa15482a26fe1b2ebae640071e4b" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + dependencies: + repeating "^2.0.0" + +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" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + +ini@~1.3.0: + version "1.3.4" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" + +inline-style-prefixer@^3.0.2: + 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" + +inquirer@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.1.1.tgz#87621c4fba4072f48a8dd71c9f9df6f100b2d534" + dependencies: + ansi-escapes "^2.0.0" + chalk "^1.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.0.4" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + 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" + through "^2.3.6" + +inquirer@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" + dependencies: + ansi-escapes "^1.1.0" + ansi-regex "^2.0.0" + chalk "^1.0.0" + cli-cursor "^1.0.1" + cli-width "^2.0.0" + figures "^1.3.5" + lodash "^4.3.0" + readline2 "^1.0.1" + run-async "^0.1.0" + rx-lite "^3.1.2" + string-width "^1.0.1" + strip-ansi "^3.0.0" + through "^2.3.6" + +internal-ip@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-1.2.0.tgz#ae9fbf93b984878785d50a8de1b356956058cf5c" + dependencies: + meow "^3.3.0" + +interpret@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90" + +invariant@2.x.x, invariant@^2.2.0, invariant@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" + dependencies: + loose-envify "^1.0.0" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + +ip@^1.1.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + +ipaddr.js@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.3.0.tgz#1e03a52fdad83a8bbb2b25cbf4998b4cffcd3dec" + +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-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" + +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + dependencies: + builtin-modules "^1.0.0" + +is-callable@^1.1.1, is-callable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" + +is-ci@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" + dependencies: + ci-info "^1.0.0" + +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + +is-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.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" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-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.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + 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-my-json-valid@^2.10.0: + version "2.16.0" + resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz#f079dd9bfdae65ee2038aae8acbc86ab109e3693" + dependencies: + generate-function "^2.0.0" + generate-object-property "^1.1.0" + jsonpointer "^4.0.0" + xtend "^4.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.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: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + +is-path-in-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" + dependencies: + 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" + 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-posix-bracket@^0.1.0: + version "0.1.1" + 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" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + +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.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + dependencies: + has "^1.0.1" + +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" + +is-retry-allowed@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" + +is-root@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-root/-/is-root-1.0.0.tgz#07b6c233bc394cd9d02ba15c966bd6660d6342d5" + +is-stream@^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" + +is-symbol@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isemail@1.x.x: + version "1.2.0" + resolved "https://registry.yarnpkg.com/isemail/-/isemail-1.2.0.tgz#be03df8cc3e29de4d2c5df6501263f1fa4595e9a" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isomorphic-fetch@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +istanbul-api@^1.1.1: + version "1.1.10" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.10.tgz#f27e5e7125c8de13f6a80661af78f512e5439b2b" + 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.3" + istanbul-lib-report "^1.1.1" + istanbul-lib-source-maps "^1.2.1" + istanbul-reports "^1.1.1" + js-yaml "^3.7.0" + mkdirp "^0.5.1" + once "^1.4.0" + +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" + dependencies: + append-transform "^0.4.0" + +istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.2, istanbul-lib-instrument@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.3.tgz#925b239163eabdd68cc4048f52c2fa4f899ecfa7" + dependencies: + babel-generator "^6.18.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babylon "^6.17.4" + 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" + 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, 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" + dependencies: + debug "^2.6.3" + 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" + dependencies: + handlebars "^4.0.3" + +jest-changed-files@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-20.0.3.tgz#9394d5cc65c438406149bef1bf4d52b68e03e3f8" + +jest-cli@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-20.0.4.tgz#e532b19d88ae5bc6c417e8b0593a6fe954b1dc93" + dependencies: + ansi-escapes "^1.4.0" + callsites "^2.0.0" + chalk "^1.1.3" + graceful-fs "^4.1.11" + is-ci "^1.0.10" + istanbul-api "^1.1.1" + istanbul-lib-coverage "^1.0.1" + istanbul-lib-instrument "^1.4.2" + istanbul-lib-source-maps "^1.1.0" + jest-changed-files "^20.0.3" + jest-config "^20.0.4" + jest-docblock "^20.0.3" + jest-environment-jsdom "^20.0.3" + jest-haste-map "^20.0.4" + jest-jasmine2 "^20.0.4" + jest-message-util "^20.0.3" + jest-regex-util "^20.0.3" + jest-resolve-dependencies "^20.0.3" + jest-runtime "^20.0.4" + jest-snapshot "^20.0.3" + jest-util "^20.0.3" + micromatch "^2.3.11" + node-notifier "^5.0.2" + pify "^2.3.0" + slash "^1.0.0" + string-length "^1.0.1" + throat "^3.0.0" + which "^1.2.12" + worker-farm "^1.3.1" + yargs "^7.0.2" + +jest-config@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-20.0.4.tgz#e37930ab2217c913605eff13e7bd763ec48faeea" + dependencies: + chalk "^1.1.3" + glob "^7.1.1" + jest-environment-jsdom "^20.0.3" + jest-environment-node "^20.0.3" + jest-jasmine2 "^20.0.4" + jest-matcher-utils "^20.0.3" + jest-regex-util "^20.0.3" + jest-resolve "^20.0.4" + jest-validate "^20.0.3" + pretty-format "^20.0.3" + +jest-diff@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-20.0.3.tgz#81f288fd9e675f0fb23c75f1c2b19445fe586617" + dependencies: + chalk "^1.1.3" + diff "^3.2.0" + jest-matcher-utils "^20.0.3" + pretty-format "^20.0.3" + +jest-docblock@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-20.0.3.tgz#17bea984342cc33d83c50fbe1545ea0efaa44712" + +jest-environment-jsdom@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-20.0.3.tgz#048a8ac12ee225f7190417713834bb999787de99" + dependencies: + jest-mock "^20.0.3" + jest-util "^20.0.3" + jsdom "^9.12.0" + +jest-environment-node@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-20.0.3.tgz#d488bc4612af2c246e986e8ae7671a099163d403" + dependencies: + jest-mock "^20.0.3" + jest-util "^20.0.3" + +jest-haste-map@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-20.0.4.tgz#653eb55c889ce3c021f7b94693f20a4159badf03" + dependencies: + fb-watchman "^2.0.0" + graceful-fs "^4.1.11" + jest-docblock "^20.0.3" + micromatch "^2.3.11" + sane "~1.6.0" + worker-farm "^1.3.1" + +jest-jasmine2@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-20.0.4.tgz#fcc5b1411780d911d042902ef1859e852e60d5e1" + dependencies: + chalk "^1.1.3" + graceful-fs "^4.1.11" + jest-diff "^20.0.3" + jest-matcher-utils "^20.0.3" + jest-matchers "^20.0.3" + jest-message-util "^20.0.3" + jest-snapshot "^20.0.3" + once "^1.4.0" + p-map "^1.1.1" + +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-matchers@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-20.0.3.tgz#ca69db1c32db5a6f707fa5e0401abb55700dfd60" + dependencies: + jest-diff "^20.0.3" + jest-matcher-utils "^20.0.3" + jest-message-util "^20.0.3" + jest-regex-util "^20.0.3" + +jest-message-util@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-20.0.3.tgz#6aec2844306fcb0e6e74d5796c1006d96fdd831c" + dependencies: + chalk "^1.1.3" + micromatch "^2.3.11" + slash "^1.0.0" + +jest-mock@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-20.0.3.tgz#8bc070e90414aa155c11a8d64c869a0d5c71da59" + +jest-regex-util@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-20.0.3.tgz#85bbab5d133e44625b19faf8c6aa5122d085d762" + +jest-resolve-dependencies@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-20.0.3.tgz#6e14a7b717af0f2cb3667c549de40af017b1723a" + dependencies: + jest-regex-util "^20.0.3" + +jest-resolve@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-20.0.4.tgz#9448b3e8b6bafc15479444c6499045b7ffe597a5" + dependencies: + browser-resolve "^1.11.2" + is-builtin-module "^1.0.0" + resolve "^1.3.2" + +jest-runtime@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-20.0.4.tgz#a2c802219c4203f754df1404e490186169d124d8" + dependencies: + babel-core "^6.0.0" + babel-jest "^20.0.3" + babel-plugin-istanbul "^4.0.0" + chalk "^1.1.3" + convert-source-map "^1.4.0" + graceful-fs "^4.1.11" + jest-config "^20.0.4" + jest-haste-map "^20.0.4" + jest-regex-util "^20.0.3" + jest-resolve "^20.0.4" + jest-util "^20.0.3" + json-stable-stringify "^1.0.1" + micromatch "^2.3.11" + strip-bom "3.0.0" + yargs "^7.0.2" + +jest-snapshot@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-20.0.3.tgz#5b847e1adb1a4d90852a7f9f125086e187c76566" + dependencies: + chalk "^1.1.3" + jest-diff "^20.0.3" + jest-matcher-utils "^20.0.3" + jest-util "^20.0.3" + natural-compare "^1.4.0" + pretty-format "^20.0.3" + +jest-util@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-20.0.3.tgz#0c07f7d80d82f4e5a67c6f8b9c3fe7f65cfd32ad" + dependencies: + chalk "^1.1.3" + graceful-fs "^4.1.11" + jest-message-util "^20.0.3" + jest-mock "^20.0.3" + jest-validate "^20.0.3" + leven "^2.1.0" + 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@20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest/-/jest-20.0.4.tgz#3dd260c2989d6dad678b1e9cc4d91944f6d602ac" + dependencies: + jest-cli "^20.0.4" + +joi@^6.6.1: + version "6.10.1" + resolved "https://registry.yarnpkg.com/joi/-/joi-6.10.1.tgz#4d50c318079122000fe5f16af1ff8e1917b77e06" + dependencies: + hoek "2.x.x" + isemail "1.x.x" + moment "2.x.x" + topo "1.x.x" + +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.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + +js-yaml@^3.4.3, js-yaml@^3.5.1, js-yaml@^3.7.0: + version "3.8.4" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.4.tgz#520b4564f86573ba96662af85a8cafa7b4b5a6f6" + dependencies: + argparse "^1.0.7" + esprima "^3.1.1" + +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" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +jschardet@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/jschardet/-/jschardet-1.4.2.tgz#2aa107f142af4121d145659d44f50830961e699a" + +jsdom@^9.12.0: + version "9.12.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" + dependencies: + abab "^1.0.3" + acorn "^4.0.4" + acorn-globals "^3.1.0" + array-equal "^1.0.0" + content-type-parser "^1.0.1" + cssom ">= 0.3.2 < 0.4.0" + cssstyle ">= 0.2.37 < 0.3.0" + escodegen "^1.6.1" + html-encoding-sniffer "^1.0.1" + nwmatcher ">= 1.3.9 < 2.0.0" + parse5 "^1.5.1" + request "^2.79.0" + sax "^1.2.1" + symbol-tree "^3.2.1" + tough-cookie "^2.3.2" + webidl-conversions "^4.0.0" + whatwg-encoding "^1.0.1" + whatwg-url "^4.3.0" + xml-name-validator "^2.0.1" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + +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: + version "0.5.4" + resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.4.tgz#8baa1365a632f58a3c46d20175fc6002c96e37de" + +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stable-stringify@^1.0.0, 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" + +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" + +json3@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + +json5@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.4.0.tgz#054352e4c4c80c86c0923877d449de176a732c8d" + +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@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.0.tgz#92e7c7444e5ffd5fa32e6a9ae8b85034df8347d0" + 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.1" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" + +jsprim@^1.2.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" + dependencies: + assert-plus "1.0.0" + extsprintf "1.0.2" + json-schema "0.2.3" + verror "1.3.6" + +jsx-ast-utils@^1.4.0, jsx-ast-utils@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1" + +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.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + dependencies: + is-buffer "^1.1.5" + +klaw@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + optionalDependencies: + graceful-fs "^4.1.9" + +latest-version@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-2.0.0.tgz#56f8d6139620847b8017f8f1f4d78e211324168b" + dependencies: + package-json "^2.0.0" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + +lazy-req@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/lazy-req/-/lazy-req-1.1.0.tgz#bdaebead30f8d824039ce0ce149d4daa07ba1fac" + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + dependencies: + invert-kv "^1.0.0" + +left-pad@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.1.3.tgz#612f61c033f3a9e08e939f1caebeea41b6f3199a" + +leven@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +loader-fs-cache@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz#56e0bf08bd9708b26a765b68509840c8dec9fdbc" + dependencies: + find-cache-dir "^0.1.1" + mkdirp "0.5.1" + +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" + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +lodash-es@^4.2.1: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7" + +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + +lodash._basetostring@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" + +lodash._basevalues@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + +lodash._reescape@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a" + +lodash._reevaluate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed" + +lodash._reinterpolate@^3.0.0, lodash._reinterpolate@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + +lodash._root@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" + +lodash.assign@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + +lodash.cond@^4.3.0: + version "4.5.2" + resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5" + +lodash.defaults@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + +lodash.escape@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" + dependencies: + lodash._root "^3.0.0" + +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.keys@^3.0.0, 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" + +lodash.pad@^4.1.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/lodash.pad/-/lodash.pad-4.5.1.tgz#4330949a833a7c8da22cc20f6a26c4d59debba70" + +lodash.padend@^4.1.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.padend/-/lodash.padend-4.6.1.tgz#53ccba047d06e158d311f45da625f4e49e6f166e" + +lodash.padstart@^4.1.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b" + +lodash.pick@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" + +lodash.restparam@^3.0.0: + version "3.6.1" + resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + +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@^3.0.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" + dependencies: + lodash._basecopy "^3.0.0" + lodash._basetostring "^3.0.0" + lodash._basevalues "^3.0.0" + lodash._isiterateecall "^3.0.0" + lodash._reinterpolate "^3.0.0" + lodash.escape "^3.0.0" + lodash.keys "^3.0.0" + lodash.restparam "^3.0.0" + lodash.templatesettings "^3.0.0" + +lodash.template@^4.4.0: + 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@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5" + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.escape "^3.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.x.x, "lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.16.6, lodash@^4.17.2, lodash@^4.17.3, 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.5.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" + +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + +loose-envify@^1.0.0, loose-envify@^1.1.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" + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lower-case@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" + +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: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" + dependencies: + 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" + dependencies: + pify "^2.3.0" + +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + dependencies: + tmpl "1.0.x" + +mantra-core@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/mantra-core/-/mantra-core-1.7.0.tgz#a8c83e8cee83ef6a7383131519fe8031ad546386" + dependencies: + babel-runtime "6.x.x" + react-komposer "^1.9.0" + react-simple-di "^1.2.0" + +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" + +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" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +memory-fs@^0.4.0, memory-fs@~0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +meow@^3.3.0, meow@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + +merge@^1.1.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" + +method-override@~2.3.5: + version "2.3.9" + resolved "https://registry.yarnpkg.com/method-override/-/method-override-2.3.9.tgz#bd151f2ce34cf01a76ca400ab95c012b102d8f71" + dependencies: + debug "2.6.8" + methods "~1.1.2" + parseurl "~1.3.1" + vary "~1.1.1" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + +micromatch@^2.1.5, micromatch@^2.3.11: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + 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" + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +"mime-db@>= 1.27.0 < 2", mime-db@~1.27.0: + version "1.27.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" + +mime-db@~1.23.0: + version "1.23.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.23.0.tgz#a31b4070adaea27d732ea333740a64d0ec9a6659" + +mime-types@2.1.11: + version "2.1.11" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.11.tgz#c259c471bda808a85d6cd193b430a5fae4473b3c" + dependencies: + mime-db "~1.23.0" + +mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.6, mime-types@~2.1.7, mime-types@~2.1.9: + version "2.1.15" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" + dependencies: + mime-db "~1.27.0" + +mime@1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" + +mime@1.3.x, mime@^1.3.4: + version "1.3.6" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.6.tgz#591d84d3653a6b0b4a3b9df8de5aa8108e72e5e0" + +mimic-fn@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + dependencies: + dom-walk "^0.1.0" + +minimalistic-assert@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + +minimatch@3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" + dependencies: + brace-expansion "^1.0.0" + +minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8, minimist@~0.0.1: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^1.1.0, 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" + +mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +mobx@^2.3.4: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mobx/-/mobx-2.7.0.tgz#cf3d82d18c0ca7f458d8f2a240817b3dc7e54a01" + +moment@2.x.x: + version "2.18.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f" + +morgan@~1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.6.1.tgz#5fd818398c6819cba28a7cd6664f292fe1c0bbf2" + dependencies: + basic-auth "~1.0.3" + debug "~2.2.0" + depd "~1.0.1" + on-finished "~2.3.0" + on-headers "~1.0.0" + +ms@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" + +ms@0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + +multicast-dns@^6.0.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.1.1.tgz#6e7de86a570872ab17058adea7160bbeca814dde" + dependencies: + dns-packet "^1.0.1" + thunky "^0.1.0" + +multiparty@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/multiparty/-/multiparty-3.3.2.tgz#35de6804dc19643e5249f3d3e3bdc6c8ce301d3f" + dependencies: + readable-stream "~1.1.9" + stream-counter "~0.2.0" + +multipipe@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b" + dependencies: + duplexer2 "0.0.2" + +mute-stream@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + +nan@^2.3.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45" + +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" + +negotiator@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.5.3.tgz#269d5c476810ec92edbe7b6c2f28316384f9a7e8" + +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.1" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.1.tgz#7aeba1c73a52184265554b7dc03baf720df80081" + 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" + dependencies: + minimatch "^3.0.2" + +node-fetch@^1.0.1, node-fetch@^1.3.3: + version "1.7.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.1.tgz#899cb3d0a3c92f952c47f1b876f4c8aeabd400d5" + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + +node-forge@0.6.33: + version "0.6.33" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.6.33.tgz#463811879f573d45155ad6a9f43dc296e8e85ebc" + +node-int64@^0.4.0: + version "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" + dependencies: + assert "^1.1.1" + browserify-zlib "^0.1.4" + 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" + path-browserify "0.0.0" + process "^0.11.0" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.0.5" + stream-browserify "^2.0.1" + stream-http "^2.3.1" + string_decoder "^0.10.25" + timers-browserify "^2.0.2" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.10.3" + vm-browserify "0.0.4" + +node-notifier@^5.0.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff" + dependencies: + growly "^1.3.0" + semver "^5.3.0" + shellwords "^0.1.0" + which "^1.2.12" + +node-pre-gyp@^0.6.36: + version "0.6.36" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz#db604112cb74e0d477554e9b505b17abddfab786" + dependencies: + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.0.2" + rc "^1.1.7" + request "^2.81.0" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^2.2.1" + tar-pack "^3.4.0" + +node-status-codes@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-status-codes/-/node-status-codes-1.0.0.tgz#5ae5541d024645d32a58fcddc9ceecea7ae3ac2f" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: + version "2.4.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.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" + +npmlog@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.4.tgz#98b52530f2514ca90d09ec5b22c8846722375692" + dependencies: + ansi "~0.3.1" + are-we-there-yet "~1.1.2" + gauge "~1.2.5" + +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +nth-check@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" + dependencies: + boolbase "~1.0.0" + +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.4.1" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.1.tgz#7ae9b07b0ea804db7e25f05cb5fe4097d4e4949f" + +oauth-sign@~0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + +object-assign@4.1.1, 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-assign@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" + +object-hash@^1.1.4: + version "1.1.8" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.1.8.tgz#28a659cf987d96a4dabe7860289f3b5326c4a03c" + +object-keys@^1.0.8: + version "1.0.11" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" + +object.entries@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.0.4.tgz#1bf9a4dd2288f5b33f3a993d257661f05d161a5f" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.6.1" + 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" + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + +object.values@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.0.4.tgz#e524da09b4f66ff05df457546ec72ac99f13069a" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.6.1" + function-bind "^1.1.0" + has "^1.0.1" + +obuf@^1.0.0, obuf@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.1.tgz#104124b6c602c6796881a042541d36db43a5264e" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.0, on-headers@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" + +once@^1.3.0, once@^1.3.3, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +onetime@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + dependencies: + mimic-fn "^1.0.0" + +opn@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/opn/-/opn-4.0.2.tgz#7abc22e644dff63b0a96d5ab7f2790c0f01abc95" + dependencies: + object-assign "^4.0.1" + pinkie-promise "^2.0.0" + +opn@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.1.0.tgz#72ce2306a17dbea58ff1041853352b4a8fc77519" + dependencies: + is-wsl "^1.1.0" + +opn@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/opn/-/opn-3.0.3.tgz#b6d99e7399f78d65c3baaffef1fb288e9b85243a" + dependencies: + object-assign "^4.0.1" + +optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optionator@^0.8.1, optionator@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +options@>=0.0.5: + version "0.0.6" + resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" + +original@>=0.0.5: + version "1.0.0" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.0.tgz#9147f93fa1696d04be61e01bd50baeaca656bd3b" + dependencies: + url-parse "1.0.x" + +os-browserify@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f" + +os-homedir@^1.0.0, os-homedir@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + dependencies: + lcid "^1.0.0" + +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +osenv@^0.1.0, osenv@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-limit@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + dependencies: + p-limit "^1.1.0" + +p-map@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.1.1.tgz#05f5e4ae97a068371bc2a5cc86bfbdbc19c4ae7a" + +package-json@^2.0.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-2.4.0.tgz#0d15bd67d1cbbddbb2ca222ff2edb86bcb31a8bb" + dependencies: + got "^5.0.0" + registry-auth-token "^3.0.1" + 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" + +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" + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +parse-json@^2.1.0, parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + dependencies: + error-ex "^1.2.0" + +parse5@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" + +parseurl@~1.3.0, parseurl@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" + +path-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + +path-to-regexp@^1.0.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" + dependencies: + isarray "0.0.1" + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +pause@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/pause/-/pause-0.1.0.tgz#ebc8a4a8619ff0b8a81ac1513c3434ff469fdb74" + +pbkdf2@^3.0.3: + version "3.0.12" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.12.tgz#be36785c5067ea48d806ff923288c5f750b6b8a2" + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +pegjs@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/pegjs/-/pegjs-0.10.0.tgz#cf8bafae6eddff4b5a7efb185269eaaf4610ddbd" + +performance-now@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + +pify@^2.0.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + +pkg-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + dependencies: + find-up "^1.0.0" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + dependencies: + find-up "^2.1.0" + +pkg-up@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-1.0.0.tgz#3e08fb461525c4421624a33b9f7e6d0af5b05a26" + dependencies: + find-up "^1.0.0" + +plist@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/plist/-/plist-2.0.1.tgz#0a32ca9481b1c364e92e18dc55c876de9d01da8b" + dependencies: + base64-js "1.1.2" + xmlbuilder "8.2.2" + xmldom "0.1.x" + +plist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/plist/-/plist-1.2.0.tgz#084b5093ddc92506e259f874b8d9b1afb8c79593" + dependencies: + base64-js "0.0.8" + util-deprecate "1.0.2" + xmlbuilder "4.0.0" + xmldom "0.1.x" + +pluralize@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" + +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" + +portfinder@^1.0.9: + version "1.0.13" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9" + dependencies: + async "^1.5.2" + debug "^2.2.0" + mkdirp "0.5.x" + +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.0.0, postcss-flexbugs-fixes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-3.0.0.tgz#7b31cb6c27d0417a35a67914c295f83c403c7ed4" + 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.6, postcss-loader@^2.0.3, postcss-loader@^2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-2.0.6.tgz#8c7e0055a3df1889abc6bad52dd45b2f41bbc6fc" + dependencies: + loader-utils "^1.1.0" + postcss "^6.0.2" + 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.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz#66140ecece38ef06bf0d3e355d69bf59d141ea85" + dependencies: + postcss "^6.0.1" + +postcss-modules-local-by-default@^1.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.17" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.17.tgz#cf4f597b864d65c8a492b2eabe9d706c879c388b" + dependencies: + chalk "^1.1.3" + js-base64 "^2.1.9" + source-map "^0.5.6" + supports-color "^3.2.3" + +postcss@^6.0.1, postcss@^6.0.2: + version "6.0.4" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.4.tgz#573acddf73f42ecb24aa618d40ee3d5a7c04a654" + dependencies: + chalk "^2.0.1" + source-map "^0.5.6" + supports-color "^4.0.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.0, prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + +pretty-bytes@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9" + +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@^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" + +pretty-format@^4.2.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-4.3.1.tgz#530be5c42b3c05b36414a7a2a4337aa80acd0e8d" + +private@^0.1.6, private@~0.1.5: + version "0.1.7" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" + +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.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + +process@~0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" + +progress@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" + +promise@7.1.1, 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.7, 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" + +proxy-addr@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.4.tgz#27e545f6960a44a627d9b44467e35c1b6b4ce2f3" + dependencies: + forwarded "~0.1.0" + ipaddr.js "1.3.0" + +prr@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + +public-encrypt@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6" + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + +punycode@^1.2.4, punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +q@^1.1.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.0.tgz#dd01bac9d06d30e6f219aecb8253ee9ebdc308f1" + +qs@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-4.0.0.tgz#c31d9b74ec27df75e543a86c78728ed8d4623607" + +qs@6.4.0, qs@^6.4.0, qs@~6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + +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: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + +querystringify@0.0.x: + version "0.0.4" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-0.0.4.tgz#0cf7f84f9463ff0ae51c4c4b142d95be37724d9c" + +querystringify@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb" + +random-bytes@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" + +randomatic@^1.1.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +randombytes@^2.0.0, randombytes@^2.0.1: + 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.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" + +range-parser@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.0.3.tgz#6872823535c692e2c2a0103826afd82c2e0ff175" + +raw-body@~2.1.2: + version "2.1.7" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.1.7.tgz#adfeace2e4fb3098058014d08c072dcc59758774" + dependencies: + bytes "2.4.0" + iconv-lite "0.4.13" + unpipe "1.0.0" + +rc@^1.0.1, rc@^1.1.6, rc@^1.1.7: + version "1.2.1" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" + dependencies: + deep-extend "~0.4.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-clone-referenced-element@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/react-clone-referenced-element/-/react-clone-referenced-element-1.0.1.tgz#2bba8c69404c5e4a944398600bcc4c941f860682" + +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-dev-utils@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-3.0.2.tgz#1a42263e9b6aa11dcb45d69dfe5eb1b354bd5531" + dependencies: + address "1.0.2" + anser "1.4.1" + babel-code-frame "6.22.0" + chalk "1.1.3" + cross-spawn "4.0.2" + detect-port-alt "1.1.3" + escape-string-regexp "1.0.5" + filesize "3.3.0" + gzip-size "3.0.0" + html-entities "1.2.1" + inquirer "3.1.1" + is-root "1.0.0" + opn "5.1.0" + recursive-readdir "2.2.1" + shell-quote "1.6.1" + sockjs-client "1.1.4" + strip-ansi "3.0.1" + text-table "0.2.0" + +react-devtools-core@^2.0.8: + version "2.4.0" + resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-2.4.0.tgz#8f261b2fcfb02ecef1f15e17d75ee1b521f02029" + dependencies: + shell-quote "^1.6.1" + ws "^2.0.3" + +react-docgen@^2.15.0: + version "2.16.0" + resolved "https://registry.yarnpkg.com/react-docgen/-/react-docgen-2.16.0.tgz#03c9eba935de8031d791ab62657b7b6606ec5da6" + 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.11.5" + +react-dom-factories@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/react-dom-factories/-/react-dom-factories-1.0.0.tgz#f43c05e5051b304f33251618d5bc859b29e46b6d" + +react-dom@16.0.0-alpha.6: + version "16.0.0-alpha.6" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.0.0-alpha.6.tgz#a70fa5dd62d7cc11c6a01868b45de95dc2095c90" + dependencies: + fbjs "^0.8.9" + loose-envify "^1.1.0" + object-assign "^4.1.0" + +react-error-overlay@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-1.0.9.tgz#988e48f6f343afa97a719c4ddae51b8fe8ccfee8" + dependencies: + anser "1.2.5" + babel-code-frame "6.22.0" + babel-runtime "6.23.0" + react-dev-utils "^3.0.2" + settle-promise "1.0.0" + source-map "0.5.6" + +react-html-attributes@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/react-html-attributes/-/react-html-attributes-1.3.0.tgz#c97896e9cac47ad9c4e6618b835029a826f5d28c" + dependencies: + html-element-attributes "^1.0.0" + +react-inspector@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/react-inspector/-/react-inspector-2.1.0.tgz#45504d1e13bc4d10707b977c1ca11484d14616c7" + dependencies: + babel-runtime "^6.23.0" + is-dom "^1.0.9" + +react-komposer@^1.9.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/react-komposer/-/react-komposer-1.13.1.tgz#4b8ac4bcc71323bd7413dcab95c831197f50eed0" + dependencies: + babel-runtime "6.x.x" + hoist-non-react-statics "1.x.x" + invariant "2.x.x" + mobx "^2.3.4" + shallowequal "0.2.x" + +react-komposer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/react-komposer/-/react-komposer-2.0.0.tgz#b964738014a9b4aee494a83c0b5b833d66072a90" + dependencies: + babel-runtime "^6.11.6" + hoist-non-react-statics "^1.2.0" + lodash.pick "^4.4.0" + react-stubber "^1.0.0" + shallowequal "^0.2.2" + +react-modal@^1.7.6, react-modal@^1.7.7: + version "1.9.7" + resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-1.9.7.tgz#07ef56790b953e3b98ef1e2989e347983c72871d" + dependencies: + create-react-class "^15.5.2" + element-class "^0.2.0" + exenv "1.2.0" + lodash.assign "^4.2.0" + prop-types "^15.5.7" + react-dom-factories "^1.0.0" + +react-native@^0.44.2: + version "0.44.3" + resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.44.3.tgz#04550e1cdfc619a712f3f5969d68cd7c2dc4c073" + dependencies: + absolute-path "^0.0.0" + art "^0.10.0" + async "^2.0.1" + babel-core "^6.21.0" + babel-generator "^6.21.0" + babel-plugin-external-helpers "^6.18.0" + babel-plugin-syntax-trailing-function-commas "^6.20.0" + babel-plugin-transform-async-to-generator "6.16.0" + babel-plugin-transform-flow-strip-types "^6.21.0" + babel-plugin-transform-object-rest-spread "^6.20.2" + babel-polyfill "^6.20.0" + babel-preset-es2015-node "^6.1.1" + babel-preset-fbjs "^2.1.0" + babel-preset-react-native "^1.9.1" + babel-register "^6.18.0" + babel-runtime "^6.20.0" + babel-traverse "^6.21.0" + babel-types "^6.21.0" + babylon "^6.16.1" + base64-js "^1.1.2" + bser "^1.0.2" + chalk "^1.1.1" + commander "^2.9.0" + concat-stream "^1.6.0" + connect "^2.8.3" + core-js "^2.2.2" + debug "^2.2.0" + denodeify "^1.2.1" + event-target-shim "^1.0.5" + fbjs "~0.8.9" + fbjs-scripts "^0.7.0" + form-data "^2.1.1" + fs-extra "^1.0.0" + glob "^7.1.1" + graceful-fs "^4.1.3" + image-size "^0.3.5" + immutable "~3.7.6" + imurmurhash "^0.1.4" + inquirer "^0.12.0" + jest-haste-map "^20.0.4" + joi "^6.6.1" + json-stable-stringify "^1.0.1" + json5 "^0.4.0" + left-pad "^1.1.3" + lodash "^4.16.6" + mime "^1.3.4" + mime-types "2.1.11" + minimist "^1.2.0" + mkdirp "^0.5.1" + node-fetch "^1.3.3" + npmlog "^2.0.4" + opn "^3.0.2" + optimist "^0.6.1" + plist "^1.2.0" + pretty-format "^4.2.1" + promise "^7.1.1" + react-clone-referenced-element "^1.0.1" + react-devtools-core "^2.0.8" + react-timer-mixin "^0.13.2" + react-transform-hmr "^1.0.4" + rebound "^0.0.13" + regenerator-runtime "^0.9.5" + request "^2.79.0" + rimraf "^2.5.4" + sane "~1.4.1" + semver "^5.0.3" + shell-quote "1.6.1" + source-map "^0.5.6" + stacktrace-parser "^0.1.3" + temp "0.8.3" + throat "^3.0.0" + uglify-js "2.7.5" + whatwg-fetch "^1.0.0" + wordwrap "^1.0.0" + worker-farm "^1.3.1" + write-file-atomic "^1.2.0" + ws "^1.1.0" + xcode "^0.9.1" + xmldoc "^0.4.0" + xpipe "^1.0.5" + yargs "^6.4.0" + +react-proxy@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/react-proxy/-/react-proxy-1.1.8.tgz#9dbfd9d927528c3aa9f444e4558c37830ab8c26a" + dependencies: + lodash "^4.6.1" + react-deep-force-update "^1.0.0" + +react-scripts@1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-1.0.10.tgz#876035594742220f40ffb865a4c7e8dc0fa7ae23" + dependencies: + autoprefixer "7.1.1" + babel-core "6.25.0" + babel-eslint "7.2.3" + babel-jest "20.0.3" + babel-loader "7.0.0" + babel-preset-react-app "^3.0.1" + babel-runtime "6.23.0" + case-sensitive-paths-webpack-plugin "2.1.1" + chalk "1.1.3" + css-loader "0.28.4" + dotenv "4.0.0" + eslint "3.19.0" + eslint-config-react-app "^1.0.5" + eslint-loader "1.7.1" + eslint-plugin-flowtype "2.34.0" + eslint-plugin-import "2.2.0" + eslint-plugin-jsx-a11y "5.0.3" + eslint-plugin-react "7.1.0" + extract-text-webpack-plugin "2.1.2" + file-loader "0.11.2" + fs-extra "3.0.1" + html-webpack-plugin "2.29.0" + jest "20.0.4" + object-assign "4.1.1" + postcss-flexbugs-fixes "3.0.0" + postcss-loader "2.0.6" + promise "7.1.1" + react-dev-utils "^3.0.2" + react-error-overlay "^1.0.9" + style-loader "0.18.2" + sw-precache-webpack-plugin "0.11.3" + url-loader "0.5.9" + webpack "2.6.1" + webpack-dev-server "2.5.0" + webpack-manifest-plugin "1.1.0" + whatwg-fetch "2.0.3" + optionalDependencies: + fsevents "1.1.2" + +react-simple-di@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/react-simple-di/-/react-simple-di-1.2.0.tgz#dde0e5bf689f391ef2ab02c9043b213fe239c6d0" + dependencies: + babel-runtime "6.x.x" + hoist-non-react-statics "1.x.x" + +react-split-pane@^0.1.63: + version "0.1.63" + resolved "https://registry.yarnpkg.com/react-split-pane/-/react-split-pane-0.1.63.tgz#fadb3960cc659911dd05ffbc88acee4be9f53583" + dependencies: + inline-style-prefixer "^3.0.2" + prop-types "^15.5.8" + react-style-proptype "^3.0.0" + +react-stubber@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/react-stubber/-/react-stubber-1.0.0.tgz#41ee2cac72d4d4fd70a63896da98e13739b84628" + dependencies: + babel-runtime "^6.5.0" + +react-style-proptype@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/react-style-proptype/-/react-style-proptype-3.0.0.tgz#89e0b646f266c656abb0f0dd8202dbd5036c31e6" + dependencies: + prop-types "^15.5.4" + +react-test-renderer@16.0.0-alpha.6: + version "16.0.0-alpha.6" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.0.0-alpha.6.tgz#c032def0dc8319cee39caa4e4373a60019cb3786" + dependencies: + fbjs "^0.8.9" + object-assign "^4.1.0" + +react-timer-mixin@^0.13.2: + version "0.13.3" + resolved "https://registry.yarnpkg.com/react-timer-mixin/-/react-timer-mixin-0.13.3.tgz#0da8b9f807ec07dc3e854d082c737c65605b3d22" + +react-transform-hmr@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/react-transform-hmr/-/react-transform-hmr-1.0.4.tgz#e1a40bd0aaefc72e8dfd7a7cda09af85066397bb" + dependencies: + global "^4.3.0" + react-proxy "^1.1.7" + +react@16.0.0-alpha.6: + version "16.0.0-alpha.6" + resolved "https://registry.yarnpkg.com/react/-/react-16.0.0-alpha.6.tgz#2ccb1afb4425ccc12f78a123a666f2e4c141adb9" + dependencies: + fbjs "^0.8.9" + loose-envify "^1.1.0" + object-assign "^4.1.0" + +read-all-stream@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/read-all-stream/-/read-all-stream-3.1.0.tgz#35c3e177f2078ef789ee4bfafa4373074eaef4fa" + dependencies: + pinkie-promise "^2.0.0" + readable-stream "^2.0.0" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +readable-stream@1.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" + +readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, 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.2.9: + version "2.3.3" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + safe-buffer "~5.1.1" + string_decoder "~1.0.3" + util-deprecate "~1.0.1" + +readable-stream@~1.1.8, readable-stream@~1.1.9: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + 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" + dependencies: + graceful-fs "^4.1.2" + minimatch "^3.0.2" + readable-stream "^2.0.2" + set-immediate-shim "^1.0.1" + +readline2@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + mute-stream "0.0.5" + +rebound@^0.0.13: + version "0.0.13" + resolved "https://registry.yarnpkg.com/rebound/-/rebound-0.0.13.tgz#4a225254caf7da756797b19c5817bf7a7941fac1" + +recast@^0.11.5: + 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" + dependencies: + resolve "^1.1.6" + +recursive-readdir@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.1.tgz#90ef231d0778c5ce093c9a48d74e5c5422d13a99" + dependencies: + minimatch "3.0.3" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +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.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.1.tgz#bfc535c757d3849562ead0af18ac52122cd7268e" + 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.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" + +regenerator-runtime@^0.10.0: + version "0.10.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + +regenerator-runtime@^0.9.5: + version "0.9.6" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.9.6.tgz#d33eb95d0d2001a4be39659707c51b0cb71ce029" + +regenerator-transform@0.9.11: + version "0.9.11" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.11.tgz#3a7d067520cb7b7176769eb5ff868691befe1283" + 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" + 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.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" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + 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" + +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.0.2" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz#69b062d978727ad14dc6b56ba4ab772fd8d70511" + +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" + +repeat-string@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + dependencies: + is-finite "^1.0.0" + +replace-ext@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" + +request@^2.79.0, 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.12.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~4.2.1" + hawk "~3.1.3" + http-signature "~1.1.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" + tunnel-agent "^0.6.0" + uuid "^3.0.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + +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-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" + +require-uncached@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" + dependencies: + caller-path "^0.1.0" + resolve-from "^1.0.0" + +requires-port@1.0.x, requires-port@1.x.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + +resolve-from@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + +resolve@1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + +resolve@^1.1.6, resolve@^1.3.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" + dependencies: + path-parse "^1.0.5" + +response-time@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/response-time/-/response-time-2.3.2.tgz#ffa71bab952d62f7c1d49b7434355fbc68dffc5a" + dependencies: + depd "~1.1.0" + on-headers "~1.0.1" + +restore-cursor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" + dependencies: + exit-hook "^1.0.0" + onetime "^1.0.0" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + dependencies: + align-text "^0.1.1" + +rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" + dependencies: + glob "^7.0.5" + +rimraf@~2.2.6: + version "2.2.8" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" + +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: + hash-base "^2.0.0" + inherits "^2.0.1" + +rndm@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/rndm/-/rndm-1.2.0.tgz#f33fe9cfb52bbfd520aa18323bc65db110a1b76c" + +run-async@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" + dependencies: + once "^1.3.0" + +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + dependencies: + is-promise "^2.1.0" + +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" + dependencies: + rx-lite "*" + +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" + +rx-lite@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" + +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.0.1, safe-buffer@^5.1.0, 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@~1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/sane/-/sane-1.4.1.tgz#88f763d74040f5f0c256b6163db399bf110ac715" + dependencies: + exec-sh "^0.2.0" + fb-watchman "^1.8.0" + minimatch "^3.0.2" + minimist "^1.1.1" + walker "~1.0.5" + watch "~0.10.0" + +sane@~1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-1.6.0.tgz#9610c452307a135d29c1fdfe2547034180c46775" + dependencies: + anymatch "^1.3.0" + exec-sh "^0.2.0" + fb-watchman "^1.8.0" + minimatch "^3.0.2" + minimist "^1.1.1" + walker "~1.0.5" + watch "~0.10.0" + +sax@^1.2.1, sax@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + +sax@~1.1.1: + version "1.1.6" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.1.6.tgz#5d616be8a5e607d54e114afae55b7eaf2fcc3240" + +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" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + +selfsigned@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.9.1.tgz#cdda4492d70d486570f87c65546023558e1dfa5a" + dependencies: + node-forge "0.6.33" + +semver-diff@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" + dependencies: + semver "^5.0.3" + +"semver@2 || 3 || 4 || 5", semver@5.x, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + +send@0.13.2: + version "0.13.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.13.2.tgz#765e7607c8055452bba6f0b052595350986036de" + dependencies: + debug "~2.2.0" + depd "~1.1.0" + destroy "~1.0.4" + escape-html "~1.0.3" + etag "~1.7.0" + fresh "0.3.0" + http-errors "~1.3.1" + mime "1.3.4" + ms "0.7.1" + on-finished "~2.3.0" + range-parser "~1.0.3" + statuses "~1.2.1" + +send@0.15.3: + version "0.15.3" + resolved "https://registry.yarnpkg.com/send/-/send-0.15.3.tgz#5013f9f99023df50d1bd9892c19e3defd1d53309" + dependencies: + debug "2.6.7" + depd "~1.1.0" + 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 "2.0.0" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.3.1" + +serve-favicon@^2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/serve-favicon/-/serve-favicon-2.4.3.tgz#5986b17b0502642b641c21f818b1acce32025d23" + dependencies: + etag "~1.8.0" + fresh "0.5.0" + ms "2.0.0" + parseurl "~1.3.1" + safe-buffer "5.0.1" + +serve-favicon@~2.3.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/serve-favicon/-/serve-favicon-2.3.2.tgz#dd419e268de012ab72b319d337f2105013f9381f" + dependencies: + etag "~1.7.0" + fresh "0.3.0" + ms "0.7.2" + parseurl "~1.3.1" + +serve-index@^1.7.2, serve-index@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.7.3.tgz#7a057fc6ee28dc63f64566e5fa57b111a86aecd2" + dependencies: + accepts "~1.2.13" + batch "0.5.3" + debug "~2.2.0" + escape-html "~1.0.3" + http-errors "~1.3.1" + mime-types "~2.1.9" + parseurl "~1.3.1" + +serve-static@1.12.3: + version "1.12.3" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.3.tgz#9f4ba19e2f3030c547f8af99107838ec38d5b1e2" + dependencies: + encodeurl "~1.0.1" + escape-html "~1.0.3" + parseurl "~1.3.1" + send "0.15.3" + +serve-static@~1.10.0: + version "1.10.3" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.10.3.tgz#ce5a6ecd3101fed5ec09827dac22a9c29bfb0535" + dependencies: + escape-html "~1.0.3" + parseurl "~1.3.1" + send "0.13.2" + +serviceworker-cache-polyfill@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serviceworker-cache-polyfill/-/serviceworker-cache-polyfill-4.0.0.tgz#de19ee73bef21ab3c0740a37b33db62464babdeb" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + +setimmediate@^1.0.4, setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + +setprototypeof@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" + +settle-promise@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/settle-promise/-/settle-promise-1.0.0.tgz#697adb58b821f387ce2757c06efc9de5f0ee33d8" + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.8" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.8.tgz#37068c2c476b6baf402d14a49c67f597921f634f" + dependencies: + inherits "^2.0.1" + +shallowequal@0.2.x, 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" + +shell-quote@1.6.1, shell-quote@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" + dependencies: + array-filter "~0.0.0" + array-map "~0.0.0" + array-reduce "~0.0.0" + jsonify "~0.0.0" + +shelljs@^0.7.5, shelljs@^0.7.7: + 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" + +shellwords@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14" + +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" + +simple-plist@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-0.2.1.tgz#71766db352326928cf3a807242ba762322636723" + dependencies: + bplist-creator "0.0.7" + bplist-parser "0.1.1" + plist "2.0.1" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + +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" + +sntp@1.x.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" + +sockjs-client@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.2.tgz#f0212a8550e4c9468c8cceaeefd2e3493c033ad5" + dependencies: + debug "^2.2.0" + eventsource "0.1.6" + faye-websocket "~0.11.0" + inherits "^2.0.1" + json3 "^3.3.2" + url-parse "^1.1.1" + +sockjs-client@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12" + dependencies: + debug "^2.6.6" + eventsource "0.1.6" + faye-websocket "~0.11.0" + inherits "^2.0.1" + json3 "^3.3.2" + url-parse "^1.1.8" + +sockjs@0.3.18: + version "0.3.18" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.18.tgz#d9b289316ca7df77595ef299e075f0f937eb4207" + dependencies: + faye-websocket "^0.10.0" + uuid "^2.0.2" + +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@^0.1.7: + version "0.1.8" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106" + +source-list-map@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-1.1.2.tgz#9889019d1024cce55cdc069498337ef6186a11a1" + +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.2: + version "0.4.15" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.15.tgz#03202df65c06d2bd8c7ec2362a193056fef8d3b1" + dependencies: + source-map "^0.5.6" + +source-map@0.5.6, source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.0, 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.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.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" + +sparkles@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3" + +spdx-correct@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" + dependencies: + spdx-license-ids "^1.0.2" + +spdx-expression-parse@~1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" + +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" + +spdy-transport@^2.0.18: + version "2.0.20" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.0.20.tgz#735e72054c486b2354fe89e702256004a39ace4d" + dependencies: + debug "^2.6.8" + detect-node "^2.0.3" + hpack.js "^2.1.6" + obuf "^1.1.1" + readable-stream "^2.2.9" + safe-buffer "^5.0.1" + wbuf "^1.7.2" + +spdy@^3.4.1: + version "3.4.7" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-3.4.7.tgz#42ff41ece5cc0f99a3a6c28aabb73f5c3b03acbc" + dependencies: + debug "^2.6.8" + handle-thing "^1.2.5" + http-deceiver "^1.2.7" + safe-buffer "^5.0.1" + select-hose "^2.0.0" + spdy-transport "^2.0.18" + +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.13.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +stacktrace-parser@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.4.tgz#01397922e5f62ecf30845522c95c4fe1d25e7d4e" + +statuses@1, "statuses@>= 1.3.1 < 2", statuses@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" + +statuses@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.2.1.tgz#dded45cc18256d51ed40aec142489d5c61026d28" + +stream-browserify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-buffers@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" + +stream-counter@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/stream-counter/-/stream-counter-0.2.0.tgz#ded266556319c8b0e222812b9cf3b26fa7d947de" + dependencies: + readable-stream "~1.1.8" + +stream-http@^2.3.1: + 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" + readable-stream "^2.2.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +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-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac" + dependencies: + strip-ansi "^3.0.0" + +string-width@^1.0.1, string-width@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.0.tgz#030664561fc146c9423ec7d978fe2457437fe6d0" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +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.4.3" + function-bind "^1.0.2" + +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@^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_decoder@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" + dependencies: + safe-buffer "~5.1.0" + +stringstream@~0.0.4: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + +strip-ansi@3.0.1, strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.0.0" + +strip-bom@3.0.0, strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + dependencies: + is-utf8 "^0.2.0" + +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + dependencies: + get-stdin "^4.0.1" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + +style-loader@0.18.2: + version "0.18.2" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.18.2.tgz#cc31459afbcd6d80b7220ee54b291a9fd66ff5eb" + dependencies: + loader-utils "^1.0.2" + schema-utils "^0.3.0" + +style-loader@^0.17.0: + version "0.17.0" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.17.0.tgz#e8254bccdb7af74bd58274e36107b4d5ab4df310" + dependencies: + loader-utils "^1.0.2" + +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.0, supports-color@^3.1.1, 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: + version "4.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.1.0.tgz#92cc14bb3dad8928ca5656c33e19a19f20af5c7a" + dependencies: + has-flag "^2.0.0" + +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" + +sw-precache-webpack-plugin@0.11.3: + version "0.11.3" + resolved "https://registry.yarnpkg.com/sw-precache-webpack-plugin/-/sw-precache-webpack-plugin-0.11.3.tgz#4b5308eaf64f8afc8b0e9528a6f50a8f9cd9edac" + dependencies: + del "^2.2.2" + sw-precache "^5.1.1" + uglify-js "^3.0.13" + +sw-precache@^5.1.1: + version "5.2.0" + resolved "https://registry.yarnpkg.com/sw-precache/-/sw-precache-5.2.0.tgz#eb6225ce580ceaae148194578a0ad01ab7ea199c" + dependencies: + dom-urls "^1.1.0" + es6-promise "^4.0.5" + glob "^7.1.1" + lodash.defaults "^4.2.0" + lodash.template "^4.4.0" + meow "^3.7.0" + mkdirp "^0.5.1" + pretty-bytes "^4.0.2" + sw-toolbox "^3.4.0" + update-notifier "^1.0.3" + +sw-toolbox@^3.4.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/sw-toolbox/-/sw-toolbox-3.6.0.tgz#26df1d1c70348658e4dea2884319149b7b3183b5" + dependencies: + path-to-regexp "^1.0.1" + serviceworker-cache-polyfill "^4.0.0" + +symbol-observable@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" + +symbol-tree@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + +table@^3.7.8: + version "3.8.3" + resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" + 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" + +tapable@^0.2.5, tapable@~0.2.5: + version "0.2.6" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.6.tgz#206be8e188860b514425375e6f1ae89bfb01fd8d" + +tar-pack@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" + 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: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + dependencies: + block-stream "*" + fstream "^1.0.2" + inherits "2" + +temp@0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" + dependencies: + os-tmpdir "^1.0.0" + rimraf "~2.2.6" + +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" + object-assign "^4.1.0" + read-pkg-up "^1.0.1" + require-main-filename "^1.0.1" + +text-table@0.2.0, text-table@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + +throat@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-3.2.0.tgz#50cb0670edbc40237b9e347d7e1f88e4620af836" + +through2@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" + dependencies: + readable-stream "^2.1.5" + xtend "~4.0.1" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +thunky@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-0.1.0.tgz#bf30146824e2b6e67b0f2d7a4ac8beb26908684e" + +time-stamp@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" + +timed-out@^3.0.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-3.1.3.tgz#95860bfcc5c76c277f8f8326fd0f5b2e20eba217" + +timers-browserify@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.2.tgz#ab4883cf597dcd50af211349a00fbca56ac86b86" + 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" + dependencies: + os-tmpdir "~1.0.1" + +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + +to-fast-properties@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + +topo@1.x.x: + version "1.1.0" + resolved "https://registry.yarnpkg.com/topo/-/topo-1.1.0.tgz#e9d751615d1bb87dc865db182fa1ca0a5ef536d5" + dependencies: + hoek "2.x.x" + +toposort@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.3.tgz#f02cd8a74bd8be2fc0e98611c3bacb95a171869c" + +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" + dependencies: + punycode "^1.4.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + +tryit@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" + +tsscmp@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.5.tgz#7dc4a33af71581ab4337da91d85ca5427ebd9a97" + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + dependencies: + prelude-ls "~1.1.2" + +type-is@~1.6.15, type-is@~1.6.6: + 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.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.13" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.13.tgz#cd9dd2f86493b3f44dbeeef3780fda74c5ee14be" + +uglify-js@2.7.5: + version "2.7.5" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8" + dependencies: + async "~0.2.6" + source-map "~0.5.1" + uglify-to-browserify "~1.0.0" + yargs "~3.10.0" + +uglify-js@3.0.x, uglify-js@^3.0.13: + version "3.0.22" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.0.22.tgz#0a4d957cf381b38c3f40e9295c442043f04f5805" + dependencies: + commander "~2.9.0" + source-map "~0.5.1" + +uglify-js@^2.6, uglify-js@^2.8.27: + version "2.8.29" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + +uid-number@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + +uid-safe@2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.4.tgz#3ad6f38368c6d4c8c75ec17623fb79aa1d071d81" + dependencies: + random-bytes "~1.0.0" + +uid-safe@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.0.0.tgz#a7f3c6ca64a1f6a5d04ec0ef3e4c3d5367317137" + dependencies: + base64-url "1.2.1" + +ultron@1.0.x: + version "1.0.2" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" + +ultron@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.0.tgz#b07a2e6a541a815fc6a34ccd4533baec307ca864" + +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" + +universalify@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.0.tgz#9eb1c4651debcc670cc94f1a75762332bb967778" + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + +unzip-response@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-1.0.2.tgz#b984f0877fc0a89c2c773cc1ef7b5b232b5b06fe" + +update-notifier@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-1.0.3.tgz#8f92c515482bd6831b7c93013e70f87552c7cf5a" + dependencies: + boxen "^0.6.0" + chalk "^1.0.0" + configstore "^2.0.0" + is-npm "^1.0.0" + latest-version "^2.0.0" + lazy-req "^1.1.0" + semver-diff "^2.0.0" + xdg-basedir "^2.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" + +urijs@^1.16.1: + version "1.18.10" + resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.18.10.tgz#b94463eaba59a1a796036a467bb633c667f221ab" + +url-loader@0.5.9, url-loader@^0.5.8: + version "0.5.9" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.5.9.tgz#cc8fea82c7b906e7777019250869e569e995c295" + dependencies: + loader-utils "^1.0.2" + mime "1.3.x" + +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + dependencies: + prepend-http "^1.0.1" + +url-parse@1.0.x: + version "1.0.5" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.0.5.tgz#0854860422afdcfefeb6c965c662d4800169927b" + dependencies: + querystringify "0.0.x" + requires-port "1.0.x" + +url-parse@^1.1.1, url-parse@^1.1.8: + version "1.1.9" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.1.9.tgz#c67f1d775d51f0a18911dd7b3ffad27bb9e5bd19" + dependencies: + querystringify "~1.0.0" + requires-port "1.0.x" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +user-home@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" + dependencies: + os-homedir "^1.0.0" + +util-deprecate@1.0.2, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +util@0.10.3, util@^0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + dependencies: + inherits "2.0.1" + +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.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" + +uuid@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" + +uuid@^2.0.1, uuid@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" + +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" + +validate-npm-package-license@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + dependencies: + spdx-correct "~1.0.0" + spdx-expression-parse "~1.0.0" + +vary@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.0.1.tgz#99e4981566a286118dfb2b817357df7993376d10" + +vary@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.1.tgz#67535ebb694c1d52257457984665323f587e8d37" + +vendors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22" + +verror@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" + dependencies: + extsprintf "1.0.2" + +vhost@~3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/vhost/-/vhost-3.0.2.tgz#2fb1decd4c466aa88b0f9341af33dc1aff2478d5" + +vinyl@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde" + dependencies: + clone "^1.0.0" + clone-stats "^0.0.1" + replace-ext "0.0.1" + +vm-browserify@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" + dependencies: + indexof "0.0.1" + +walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + 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" + +watchpack@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.3.1.tgz#7d8693907b28ce6013e7f3610aa2a1acf07dad87" + dependencies: + async "^2.1.2" + chokidar "^1.4.3" + graceful-fs "^4.1.2" + +wbuf@^1.1.0, wbuf@^1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.2.tgz#d697b99f1f59512df2751be42769c1580b5801fe" + dependencies: + minimalistic-assert "^1.0.0" + +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" + +webpack-dev-middleware@^1.10.1, webpack-dev-middleware@^1.10.2: + version "1.11.0" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.11.0.tgz#09691d0973a30ad1f82ac73a12e2087f0a4754f9" + dependencies: + memory-fs "~0.4.1" + mime "^1.3.4" + path-is-absolute "^1.0.0" + range-parser "^1.0.3" + +webpack-dev-server@2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.5.0.tgz#4d36a728b03b8b2afa48ed302428847cea2840ad" + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^1.6.0" + compression "^1.5.2" + connect-history-api-fallback "^1.3.0" + del "^3.0.0" + express "^4.13.3" + html-entities "^1.2.0" + http-proxy-middleware "~0.17.4" + internal-ip "^1.2.0" + opn "4.0.2" + portfinder "^1.0.9" + selfsigned "^1.9.1" + serve-index "^1.7.2" + sockjs "0.3.18" + sockjs-client "1.1.2" + spdy "^3.4.1" + strip-ansi "^3.0.0" + supports-color "^3.1.1" + webpack-dev-middleware "^1.10.2" + yargs "^6.0.0" + +webpack-hot-middleware@^2.18.0: + version "2.18.0" + resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.18.0.tgz#a16bb535b83a6ac94a78ac5ebce4f3059e8274d3" + dependencies: + ansi-html "0.0.7" + html-entities "^1.2.0" + querystring "^0.2.0" + strip-ansi "^3.0.0" + +webpack-manifest-plugin@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-1.1.0.tgz#6b6c718aade8a2537995784b46bd2e9836057caa" + dependencies: + fs-extra "^0.30.0" + lodash ">=3.5 <5" + +webpack-sources@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.2.3.tgz#17c62bfaf13c707f9d02c479e0dcdde8380697fb" + dependencies: + source-list-map "^1.1.1" + source-map "~0.5.3" + +webpack-sources@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.0.1.tgz#c7356436a4d13123be2e2426a05d1dad9cbe65cf" + dependencies: + source-list-map "^2.0.0" + source-map "~0.5.3" + +webpack@2.6.1, webpack@^2.4.1, webpack@^2.5.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.6.1.tgz#2e0457f0abb1ac5df3ab106c69c672f236785f07" + dependencies: + acorn "^5.0.0" + acorn-dynamic-import "^2.0.0" + ajv "^4.7.0" + ajv-keywords "^1.1.1" + async "^2.1.2" + enhanced-resolve "^3.0.0" + interpret "^1.0.0" + json-loader "^0.5.4" + json5 "^0.5.1" + loader-runner "^2.3.0" + loader-utils "^0.2.16" + memory-fs "~0.4.1" + mkdirp "~0.5.0" + node-libs-browser "^2.0.0" + source-map "^0.5.3" + supports-color "^3.1.0" + tapable "~0.2.5" + uglify-js "^2.8.27" + watchpack "^1.3.1" + webpack-sources "^0.2.3" + yargs "^6.0.0" + +websocket-driver@>=0.5.1: + version "0.6.5" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" + dependencies: + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.1.tgz#76899499c184b6ef754377c2dbb0cd6cb55d29e7" + +whatwg-encoding@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4" + dependencies: + iconv-lite "0.4.13" + +whatwg-fetch@2.0.3, whatwg-fetch@>=0.10.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" + +whatwg-fetch@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-1.1.1.tgz#ac3c9d39f320c6dce5339969d054ef43dd333319" + +whatwg-url@^4.3.0: + 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@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + +which@^1.2.12, which@^1.2.9: + version "1.2.14" + resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" + dependencies: + 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" + dependencies: + string-width "^1.0.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: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +wordwrap@^1.0.0, 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.4.1" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.4.1.tgz#a438bc993a7a7d133bcb6547c95eca7cff4897d8" + dependencies: + errno "^0.1.4" + xtend "^4.0.1" + +wrap-ansi@^2.0.0: + 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@^1.1.2, write-file-atomic@^1.2.0: + version "1.3.4" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f" + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + slide "^1.1.5" + +write-file-atomic@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.1.0.tgz#1769f4b551eedce419f0505deae2e26763542d37" + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + slide "^1.1.5" + +write@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + dependencies: + mkdirp "^0.5.1" + +ws@^1.1.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.4.tgz#57f40d036832e5f5055662a397c4de76ed66bf61" + dependencies: + options ">=0.0.5" + ultron "1.0.x" + +ws@^2.0.3: + version "2.3.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-2.3.1.tgz#6b94b3e447cb6a363f785eaf94af6359e8e81c80" + dependencies: + safe-buffer "~5.0.1" + ultron "~1.1.0" + +ws@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.0.0.tgz#98ddb00056c8390cb751e7788788497f99103b6c" + dependencies: + safe-buffer "~5.0.1" + ultron "~1.1.0" + +xcode@^0.9.1: + version "0.9.3" + resolved "https://registry.yarnpkg.com/xcode/-/xcode-0.9.3.tgz#910a89c16aee6cc0b42ca805a6d0b4cf87211cf3" + dependencies: + pegjs "^0.10.0" + simple-plist "^0.2.1" + uuid "3.0.1" + +xdg-basedir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-2.0.0.tgz#edbc903cc385fc04523d966a335504b5504d1bd2" + dependencies: + os-homedir "^1.0.0" + +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" + +xmlbuilder@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.0.0.tgz#98b8f651ca30aa624036f127d11cc66dc7b907a3" + dependencies: + lodash "^3.5.0" + +xmlbuilder@8.2.2: + version "8.2.2" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773" + +xmldoc@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/xmldoc/-/xmldoc-0.4.0.tgz#d257224be8393eaacbf837ef227fd8ec25b36888" + dependencies: + sax "~1.1.1" + +xmldom@0.1.x: + version "0.1.27" + resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9" + +xpipe@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/xpipe/-/xpipe-1.0.5.tgz#8dd8bf45fc3f7f55f0e054b878f43a62614dafdf" + +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" + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + +yargs-parser@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" + dependencies: + camelcase "^3.0.0" + +yargs-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" + dependencies: + camelcase "^3.0.0" + +yargs@^6.0.0, yargs@^6.4.0: + version "6.6.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.2" + which-module "^1.0.0" + y18n "^3.2.1" + yargs-parser "^4.2.0" + +yargs@^7.0.2: + version "7.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.2" + which-module "^1.0.0" + y18n "^3.2.1" + yargs-parser "^5.0.0" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" diff --git a/package.json b/package.json index c6bc66f..c5e2315 100644 --- a/package.json +++ b/package.json @@ -27,8 +27,8 @@ "babel-eslint": "7.0.0", "babel-loader": "6.2.5", "babel-polyfill": "6.16.0", - "babel-preset-stage-1": "6.16.0", "babel-preset-react-native": "1.9.0", + "babel-preset-stage-1": "6.16.0", "eslint": "3.6.1", "eslint-loader": "1.5.0", "eslint-plugin-react": "6.3.0", @@ -38,6 +38,8 @@ "haste-resolver-webpack-plugin": "0.2.2", "jest-cli": "0.4.5", "json-loader": "0.5.4", + "react": "16.0.0-alpha.6", + "react-dom": "16.0.0-alpha.6", "react-hot-loader": "1.3.1", "url-loader": "0.5.6", "webpack-html-plugin": "0.1.1", @@ -45,7 +47,7 @@ }, "peerDependencies": { "react": "16.0.0-alpha.6", - "react-dom": "16.0.0-alpha.2" + "react-dom": "16.0.0-alpha.6" }, "dependencies": { "animated": "0.1.3", @@ -62,6 +64,7 @@ "immutable": "3.7.6", "object-assign": "3.0.0", "promise": "7.0.4", + "prop-types": "^15.5.10", "react-mixin": "3.0.3", "react-timer-mixin": "0.13.2", "rebound": "0.0.13", From 5aff96e9c53696357e95b2e28328cce940cf72a1 Mon Sep 17 00:00:00 2001 From: Li Jie Date: Sat, 1 Jul 2017 16:03:05 +0800 Subject: [PATCH 021/102] Upgrade ref to new usage --- .../AppRegistry/renderApplication.web.js | 1 - Libraries/ListView/ListView.web.js | 27 ++++---- Libraries/Navigator/Navigator.web.js | 22 ++++--- .../NavigatorBreadcrumbNavigationBar.js | 61 ++++++++++++++----- Libraries/Picker/Picker.web.js | 9 +-- Libraries/ScrollView/ScrollView.web.js | 18 ++++-- Libraries/Slider/Slider.web.js | 26 +++++--- Libraries/TextInput/TextInput.web.js | 8 ++- Libraries/Touchable/TouchableHighlight.web.js | 28 +++++---- Libraries/ViewPager/ViewPager.web.js | 9 ++- 10 files changed, 140 insertions(+), 69 deletions(-) diff --git a/Libraries/AppRegistry/renderApplication.web.js b/Libraries/AppRegistry/renderApplication.web.js index ef587a5..a60f332 100644 --- a/Libraries/AppRegistry/renderApplication.web.js +++ b/Libraries/AppRegistry/renderApplication.web.js @@ -18,7 +18,6 @@ class AppContainer extends Component { let RootComponent = this.props.rootComponent; let appView = { + this._ref = ref; + } + /** * Private methods */ @@ -578,7 +581,7 @@ class ListView extends Component { // isVertical ? 'y' : 'x' // ]; - let target = ReactDOM.findDOMNode(this.refs[SCROLLVIEW_REF]); + let target = ReactDOM.findDOMNode(this._ref); this.scrollProperties.visibleLength = target[ isVertical ? 'offsetHeight' : 'offsetWidth' ]; diff --git a/Libraries/Navigator/Navigator.web.js b/Libraries/Navigator/Navigator.web.js index 2a180ab..e0d5912 100644 --- a/Libraries/Navigator/Navigator.web.js +++ b/Libraries/Navigator/Navigator.web.js @@ -520,8 +520,8 @@ class Navigator extends Component { * Push a scene off the screen, so that opacity:0 scenes will not block touches sent to the presented scenes */ _disableScene(sceneIndex) { - this.refs['scene_' + sceneIndex] && - this.refs['scene_' + sceneIndex].setNativeProps(SCENE_DISABLED_NATIVE_PROPS); + this._sceneRefs[sceneIndex] && + this._sceneRefs[sceneIndex].setNativeProps(SCENE_DISABLED_NATIVE_PROPS); } /** @@ -544,8 +544,8 @@ class Navigator extends Component { // to prevent the enabled scene from flashing over the presented scene enabledSceneNativeProps.style.opacity = 0; } - this.refs['scene_' + sceneIndex] && - this.refs['scene_' + sceneIndex].setNativeProps(enabledSceneNativeProps); + this._sceneRefs[sceneIndex] && + this._sceneRefs[sceneIndex].setNativeProps(enabledSceneNativeProps); } _onAnimationStart() { @@ -577,7 +577,7 @@ class Navigator extends Component { } _setRenderSceneToHardwareTextureAndroid(sceneIndex, shouldRenderToHardwareTexture) { - let viewAtIndex = this.refs['scene_' + sceneIndex]; + let viewAtIndex = this._sceneRefs[sceneIndex]; if (viewAtIndex === null || viewAtIndex === undefined) { return; } @@ -813,7 +813,7 @@ class Navigator extends Component { } _transitionSceneStyle(fromIndex, toIndex, progress, index) { - let viewAtIndex = this.refs['scene_' + index]; + let viewAtIndex = this._sceneRefs[index]; if (viewAtIndex === null || viewAtIndex === undefined) { return; } @@ -1045,6 +1045,14 @@ class Navigator extends Component { return this.state.routeStack.slice(); } + _sceneRefs = {} + + _captureSceneRef(index) { + return ref => { + this._sceneRefs[index] = ref; + } + } + _cleanScenesPastIndex(index) { let newStackLength = index + 1; // Remove any unneeded rendered routes. @@ -1067,7 +1075,7 @@ class Navigator extends Component { return ( { return (this.state.transitionFromIndex != null) || (this.state.transitionFromIndex != null); }} diff --git a/Libraries/Navigator/NavigatorBreadcrumbNavigationBar.js b/Libraries/Navigator/NavigatorBreadcrumbNavigationBar.js index d6aa1ce..e2731e1 100644 --- a/Libraries/Navigator/NavigatorBreadcrumbNavigationBar.js +++ b/Libraries/Navigator/NavigatorBreadcrumbNavigationBar.js @@ -104,18 +104,18 @@ class NavigatorBreadcrumbNavigationBar extends Component { } if (interpolate.Crumb(CRUMB_PROPS[index].style, amount)) { - this._setPropsIfExists('crumb_' + index, CRUMB_PROPS[index]); + this._setPropsIfExists(this._crumbRefs[index], CRUMB_PROPS[index]); } if (interpolate.Icon(ICON_PROPS[index].style, amount)) { - this._setPropsIfExists('icon_' + index, ICON_PROPS[index]); + this._setPropsIfExists(this._iconRefs[index], ICON_PROPS[index]); } if (interpolate.Separator(SEPARATOR_PROPS[index].style, amount)) { - this._setPropsIfExists('separator_' + index, SEPARATOR_PROPS[index]); + this._setPropsIfExists(this._separatorRefs[index], SEPARATOR_PROPS[index]); } if (interpolate.Title(TITLE_PROPS[index].style, amount)) { - this._setPropsIfExists('title_' + index, TITLE_PROPS[index]); + this._setPropsIfExists(this._titleRefs[index], TITLE_PROPS[index]); } - var right = this.refs['right_' + index]; + var right = this._rightRefs[index]; if (right && interpolate.RightItem(RIGHT_BUTTON_PROPS[index].style, amount)) { right.setNativeProps(RIGHT_BUTTON_PROPS[index]) @@ -150,10 +150,10 @@ class NavigatorBreadcrumbNavigationBar extends Component { renderToHardwareTextureAndroid: renderToHardwareTexture, }; - this._setPropsIfExists('icon_' + index, props); - this._setPropsIfExists('separator_' + index, props); - this._setPropsIfExists('title_' + index, props); - this._setPropsIfExists('right_' + index, props); + this._setPropsIfExists(this._iconRefs[index], props); + this._setPropsIfExists(this._separatorRefs[index], props); + this._setPropsIfExists(this._titleRefs[index], props); + this._setPropsIfExists(this._rightRefs[index], props); } componentWillMount() { @@ -178,6 +178,38 @@ class NavigatorBreadcrumbNavigationBar extends Component { ); } + _crumbRefs = {} + _iconRefs = {} + _separatorRefs = {} + _titleRefs = {} + _rightRefs = {} + + _captureCrumbRef(index) { + return ref => { + this._crumbRefs[index] = ref; + } + } + _captureIconRef(index) { + return ref => { + this._iconRefs[index] = ref; + } + } + _captureSeparatorRef(index) { + return ref => { + this._separatorRefs[index] = ref; + } + } + _captureTitleRef(index) { + return ref => { + this._titleRefs[index] = ref; + } + } + _captureRightRef(index) { + return ref => { + this._rightRefs[index] = ref; + } + } + _getBreadcrumb(route, index) { if (this._descriptors.crumb.has(route)) { return this._descriptors.crumb.get(route); @@ -187,11 +219,11 @@ class NavigatorBreadcrumbNavigationBar extends Component { var firstStyles = initStyle(index, navStatePresentedIndex(this.props.navState)); var breadcrumbDescriptor = ( - - + + {navBarRouteMapper.iconForRoute(route, this.props.navigator)} - + {navBarRouteMapper.separatorForRoute(route, this.props.navigator)} @@ -213,7 +245,7 @@ class NavigatorBreadcrumbNavigationBar extends Component { var firstStyles = initStyle(index, navStatePresentedIndex(this.props.navState)); var titleDescriptor = ( - + {titleContent} ); @@ -235,7 +267,7 @@ class NavigatorBreadcrumbNavigationBar extends Component { } var firstStyles = initStyle(index, navStatePresentedIndex(this.props.navState)); var rightButtonDescriptor = ( - + {rightContent} ); @@ -244,7 +276,6 @@ class NavigatorBreadcrumbNavigationBar extends Component { } _setPropsIfExists(ref, props) { - var ref = this.refs[ref]; ref && ref.setNativeProps(props); } diff --git a/Libraries/Picker/Picker.web.js b/Libraries/Picker/Picker.web.js index 1e91037..4c21df4 100644 --- a/Libraries/Picker/Picker.web.js +++ b/Libraries/Picker/Picker.web.js @@ -10,8 +10,6 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import autobind from 'autobind-decorator'; -const PICKER = 'picker'; - class Picker extends Component { static propTypes = { onValueChange: PropTypes.func, @@ -20,7 +18,7 @@ class Picker extends Component { _onChange(event) { // shim the native event - event.nativeEvent.newValue = this.refs[PICKER].value; + event.nativeEvent.newValue = this._ref.value; if (this.props.onChange) { this.props.onChange(event); @@ -31,10 +29,13 @@ class Picker extends Component { } } + _captureRef = ref => { + this._ref = ref; + } + render() { return ( Date: Fri, 23 Jun 2017 23:00:19 +0800 Subject: [PATCH 024/102] Fix first rendering of transform --- Libraries/StyleSheet/extendProperties.web.js | 3 ++- Libraries/Utilties/setNativeProps.web.js | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Libraries/StyleSheet/extendProperties.web.js b/Libraries/StyleSheet/extendProperties.web.js index 7ab3aeb..c861396 100644 --- a/Libraries/StyleSheet/extendProperties.web.js +++ b/Libraries/StyleSheet/extendProperties.web.js @@ -7,6 +7,7 @@ import getVendorPropertyName from 'domkit/getVendorPropertyName'; import CSSProperty from 'CSSProperty'; +import { convertTransform } from '../Utilties/setNativeProps' var shorthandProperties = { margin: true, @@ -217,7 +218,7 @@ function extendProperties(style) { result[property] = value; } } - + Object.assign(result, convertTransform(result)); return result; } diff --git a/Libraries/Utilties/setNativeProps.web.js b/Libraries/Utilties/setNativeProps.web.js index 14f4eef..c41abf3 100644 --- a/Libraries/Utilties/setNativeProps.web.js +++ b/Libraries/Utilties/setNativeProps.web.js @@ -90,3 +90,4 @@ function setNativeProps(node, props, component) { } module.exports = setNativeProps; +module.exports.convertTransform = convertTransform; From 0d1db62321a870343654ed02147c6e08fb18249c Mon Sep 17 00:00:00 2001 From: Li Zheng Date: Fri, 14 Jul 2017 14:16:52 +0800 Subject: [PATCH 025/102] just refactor --- Libraries/StyleSheet/extendProperties.web.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Libraries/StyleSheet/extendProperties.web.js b/Libraries/StyleSheet/extendProperties.web.js index c861396..5f756a9 100644 --- a/Libraries/StyleSheet/extendProperties.web.js +++ b/Libraries/StyleSheet/extendProperties.web.js @@ -218,7 +218,11 @@ function extendProperties(style) { result[property] = value; } } - Object.assign(result, convertTransform(result)); + + if ('transformMatrix' in result || 'transform' in result) { + result = convertTransform(result); + } + return result; } From 7ba7628336db27fc2e5d6ee8eb6e7b1eaa260a06 Mon Sep 17 00:00:00 2001 From: Li Zheng Date: Fri, 14 Jul 2017 14:32:38 +0800 Subject: [PATCH 026/102] typo --- Libraries/StyleSheet/flattenStyle.web.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Libraries/StyleSheet/flattenStyle.web.js b/Libraries/StyleSheet/flattenStyle.web.js index db4d4e1..602694c 100644 --- a/Libraries/StyleSheet/flattenStyle.web.js +++ b/Libraries/StyleSheet/flattenStyle.web.js @@ -25,7 +25,7 @@ function flattenStyle(style, processor) { } } - return (processor && processor(result)) || result;; + return (processor && processor(result)) || result; } } From e811cedce99d6e28ad01662c6173528ffd92f4f4 Mon Sep 17 00:00:00 2001 From: yuzhiyi <956579491@qq.com> Date: Tue, 18 Jul 2017 09:29:34 +0800 Subject: [PATCH 027/102] =?UTF-8?q?=E8=A7=A3=E5=86=B3=20Alert=20=E6=B2=A1?= =?UTF-8?q?=E6=9C=89=20message=20=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Libraries/Alert/Alert.web.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Libraries/Alert/Alert.web.js b/Libraries/Alert/Alert.web.js index e977cbd..0f4ac61 100644 --- a/Libraries/Alert/Alert.web.js +++ b/Libraries/Alert/Alert.web.js @@ -66,10 +66,10 @@ class AlertIOS { const confirmCallback = callbacks.pop() || noop; const cancelCallback = callbacks.pop() || noop; if (buttons.length === 1) { - alert(title); + alert(title + '\n' + message); confirmCallback(); } else if (buttons.length === 2) { - if (confirm(title)) { + if (confirm(title + '\n' + message)) { confirmCallback(); } else { cancelCallback(); From ba50655167cdcbbbe92075ad84f2316a4f561ff0 Mon Sep 17 00:00:00 2001 From: yuzhiyi <956579491@qq.com> Date: Wed, 26 Jul 2017 19:31:07 +0800 Subject: [PATCH 028/102] Update extendProperties.web.js --- Libraries/StyleSheet/extendProperties.web.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Libraries/StyleSheet/extendProperties.web.js b/Libraries/StyleSheet/extendProperties.web.js index 5f756a9..6761d2d 100644 --- a/Libraries/StyleSheet/extendProperties.web.js +++ b/Libraries/StyleSheet/extendProperties.web.js @@ -219,9 +219,7 @@ function extendProperties(style) { } } - if ('transformMatrix' in result || 'transform' in result) { - result = convertTransform(result); - } + Object.assign(result, convertTransform(result)); return result; } From 845c3be5bd81b5fc71d024ae364bce525cb0546e Mon Sep 17 00:00:00 2001 From: Li Jie Date: Sat, 5 Aug 2017 23:09:45 +0800 Subject: [PATCH 029/102] Compatible with react/react-dom@^16.0.0-alpha.7 --- .../PanResponder/injectResponderEventPlugin.web.js | 14 ++++++++++---- package.json | 8 ++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/Libraries/PanResponder/injectResponderEventPlugin.web.js b/Libraries/PanResponder/injectResponderEventPlugin.web.js index 62ae5eb..72a4964 100644 --- a/Libraries/PanResponder/injectResponderEventPlugin.web.js +++ b/Libraries/PanResponder/injectResponderEventPlugin.web.js @@ -5,10 +5,16 @@ */ 'use strict'; -import EventPluginRegistry from 'react-dom/lib/EventPluginRegistry'; -import ResponderEventPlugin from 'react-dom/lib/ResponderEventPlugin'; -import ResponderTouchHistoryStore from 'react-dom/lib/ResponderTouchHistoryStore'; +import ReactDOM from 'react-dom'; +import ReactDOMUnstableNativeDependencies from 'react-dom/unstable-native-dependencies'; +const { + EventPluginHub, +} = ReactDOM.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; +const { + ResponderEventPlugin, + ResponderTouchHistoryStore, +} = ReactDOMUnstableNativeDependencies; let eventTypes = ResponderEventPlugin.eventTypes; eventTypes.startShouldSetResponder.dependencies = [ @@ -93,6 +99,6 @@ ResponderTouchHistoryStore.recordTouchTrack = (topLevelType, nativeEvent) => { }); }; -EventPluginRegistry.injectEventPluginsByName({ +EventPluginHub.injection.injectEventPluginsByName({ ResponderEventPlugin }); diff --git a/package.json b/package.json index c5e2315..b45bcba 100644 --- a/package.json +++ b/package.json @@ -38,16 +38,16 @@ "haste-resolver-webpack-plugin": "0.2.2", "jest-cli": "0.4.5", "json-loader": "0.5.4", - "react": "16.0.0-alpha.6", - "react-dom": "16.0.0-alpha.6", + "react": "16.0.0-beta.3", + "react-dom": "16.0.0-beta.3", "react-hot-loader": "1.3.1", "url-loader": "0.5.6", "webpack-html-plugin": "0.1.1", "webpack-merge": "0.1.1" }, "peerDependencies": { - "react": "16.0.0-alpha.6", - "react-dom": "16.0.0-alpha.6" + "react": "16.0.0-beta.3", + "react-dom": "16.0.0-beta.3" }, "dependencies": { "animated": "0.1.3", From 489b5aeb15cbf9d2be9d1aaf603e7b19c0b57eae Mon Sep 17 00:00:00 2001 From: Li Jie Date: Sun, 6 Aug 2017 11:00:14 +0800 Subject: [PATCH 030/102] Compatible demo --- Libraries/StyleSheet/extendProperties.web.js | 2 +- Libraries/TextInput/TextInput.web.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Libraries/StyleSheet/extendProperties.web.js b/Libraries/StyleSheet/extendProperties.web.js index 6761d2d..f34510d 100644 --- a/Libraries/StyleSheet/extendProperties.web.js +++ b/Libraries/StyleSheet/extendProperties.web.js @@ -7,7 +7,7 @@ import getVendorPropertyName from 'domkit/getVendorPropertyName'; import CSSProperty from 'CSSProperty'; -import { convertTransform } from '../Utilties/setNativeProps' +import { convertTransform } from '../Utilties/setNativeProps.web' var shorthandProperties = { margin: true, diff --git a/Libraries/TextInput/TextInput.web.js b/Libraries/TextInput/TextInput.web.js index 3852aa0..47a7bcf 100644 --- a/Libraries/TextInput/TextInput.web.js +++ b/Libraries/TextInput/TextInput.web.js @@ -13,7 +13,7 @@ import PropTypes from 'prop-types'; import ReactDOM from 'react-dom'; import View from 'ReactView'; import autobind from 'autobind-decorator'; -import TextInputState from './TextInputState'; +import TextInputState from 'TextInputState'; let typeMap = { 'default': 'text', From 7397448fa84932744f5a422e09d00fae37fef307 Mon Sep 17 00:00:00 2001 From: Li Jie Date: Sun, 6 Aug 2017 11:06:01 +0800 Subject: [PATCH 031/102] Use prop-types, create-react-class in demo --- Examples/Movies/MovieCell.js | 3 +- Examples/Movies/MovieScreen.js | 7 +-- Examples/Movies/MoviesApp.android.js | 3 +- Examples/Movies/MoviesApp.ios.js | 3 +- Examples/Movies/MoviesApp.web.js | 3 +- Examples/Movies/SearchBar.android.js | 3 +- Examples/Movies/SearchBar.ios.js | 3 +- Examples/Movies/SearchBar.web.js | 3 +- Examples/Movies/SearchScreen.js | 5 +- Examples/TicTacToe/TicTacToeApp.js | 7 +-- .../AccessibilityAndroidExample.android.js | 3 +- .../UIExplorer/AccessibilityIOSExample.js | 3 +- Examples/UIExplorer/ActionSheetIOSExample.js | 5 +- .../UIExplorer/ActivityIndicatorIOSExample.js | 3 +- Examples/UIExplorer/AdSupportIOSExample.js | 3 +- Examples/UIExplorer/AppStateIOSExample.js | 3 +- .../UIExplorer/AssetScaledImageExample.js | 3 +- Examples/UIExplorer/AsyncStorageExample.js | 3 +- Examples/UIExplorer/CameraRollExample.ios.js | 3 +- Examples/UIExplorer/CameraRollView.ios.js | 14 ++--- Examples/UIExplorer/DatePickerIOSExample.js | 7 +-- .../UIExplorer/DrawerLayoutExample.web.js | 3 +- Examples/UIExplorer/GeolocationExample.js | 3 +- Examples/UIExplorer/ImageCapInsetsExample.js | 3 +- Examples/UIExplorer/ImageExample.js | 3 +- Examples/UIExplorer/LayoutEventsExample.js | 3 +- Examples/UIExplorer/LayoutExample.js | 7 +-- Examples/UIExplorer/ListViewExample.js | 3 +- .../UIExplorer/ListViewGridLayoutExample.js | 3 +- Examples/UIExplorer/ListViewPagingExample.js | 5 +- Examples/UIExplorer/MapViewExample.js | 18 ++++--- Examples/UIExplorer/ModalExample.js | 5 +- .../Navigator/BreadcrumbNavSample.js | 3 +- .../UIExplorer/Navigator/JumpingNavSample.js | 3 +- .../Navigator/NavigationBarSample.js | 3 +- .../UIExplorer/Navigator/NavigatorExample.js | 3 +- .../UIExplorer/NavigatorIOSColorsExample.js | 5 +- Examples/UIExplorer/NavigatorIOSExample.js | 5 +- Examples/UIExplorer/NetInfoExample.js | 7 +-- Examples/UIExplorer/PanResponderExample.js | 3 +- Examples/UIExplorer/PickerIOSExample.js | 3 +- Examples/UIExplorer/PointerEventsExample.js | 11 ++-- .../ProgressBarAndroidExample.android.js | 3 +- Examples/UIExplorer/ProgressViewIOSExample.js | 3 +- .../UIExplorer/PushNotificationIOSExample.js | 3 +- Examples/UIExplorer/ScrollViewExample.js | 3 +- .../UIExplorer/ScrollViewSimpleExample.js | 3 +- .../UIExplorer/SegmentedControlIOSExample.js | 13 ++--- Examples/UIExplorer/SliderIOSExample.js | 3 +- .../SwitchAndroidExample.android.js | 3 +- Examples/UIExplorer/SwitchIOSExample.js | 9 ++-- Examples/UIExplorer/TabBarIOSExample.js | 3 +- Examples/UIExplorer/TextExample.android.js | 7 +-- Examples/UIExplorer/TextExample.ios.js | 5 +- .../UIExplorer/TextInputExample.android.js | 3 +- Examples/UIExplorer/TextInputExample.ios.js | 5 +- Examples/UIExplorer/TimerExample.js | 5 +- .../UIExplorer/ToastAndroidExample.android.js | 3 +- .../ToolbarAndroidExample.android.js | 3 +- Examples/UIExplorer/TouchableExample.js | 7 +-- Examples/UIExplorer/TransformExample.js | 3 +- Examples/UIExplorer/UIExplorerApp.android.js | 5 +- Examples/UIExplorer/UIExplorerApp.ios.js | 3 +- Examples/UIExplorer/UIExplorerApp.web.js | 3 +- Examples/UIExplorer/UIExplorerBlock.js | 8 +-- Examples/UIExplorer/UIExplorerButton.js | 6 ++- Examples/UIExplorer/UIExplorerList.ios.js | 3 +- Examples/UIExplorer/UIExplorerPage.js | 10 ++-- Examples/UIExplorer/UIExplorerTitle.js | 3 +- Examples/UIExplorer/ViewExample.js | 3 +- .../ViewPagerAndroidExample.android.js | 9 ++-- Examples/UIExplorer/WebViewExample.js | 3 +- Examples/UIExplorer/createExamplePage.ios.js | 3 +- Examples/UIExplorer/createExamplePage.web.js | 3 +- package.json | 1 + pages/game2048.html | 4 +- pages/game2048.js | 2 +- pages/game2048.js.map | 2 +- pages/movies.html | 4 +- pages/movies.js | 2 +- pages/movies.js.map | 2 +- pages/react-web.js | 53 ++++++++----------- pages/react-web.js.map | 2 +- pages/tictactoe.html | 4 +- pages/tictactoe.js | 2 +- pages/tictactoe.js.map | 2 +- pages/uiexplorer.html | 4 +- pages/uiexplorer.js | 9 ++-- pages/uiexplorer.js.map | 2 +- 89 files changed, 255 insertions(+), 181 deletions(-) diff --git a/Examples/Movies/MovieCell.js b/Examples/Movies/MovieCell.js index 62062cb..453a0b4 100644 --- a/Examples/Movies/MovieCell.js +++ b/Examples/Movies/MovieCell.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { Image, PixelRatio, @@ -31,7 +32,7 @@ var getStyleFromScore = require('./getStyleFromScore'); var getImageSource = require('./getImageSource'); var getTextFromScore = require('./getTextFromScore'); -var MovieCell = React.createClass({ +var MovieCell = createClass({ render: function() { var criticsScore = this.props.movie.ratings.critics_score; var TouchableElement = TouchableHighlight; diff --git a/Examples/Movies/MovieScreen.js b/Examples/Movies/MovieScreen.js index 09d6544..2377106 100644 --- a/Examples/Movies/MovieScreen.js +++ b/Examples/Movies/MovieScreen.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { Image, PixelRatio, @@ -29,7 +30,7 @@ var getImageSource = require('./getImageSource'); var getStyleFromScore = require('./getStyleFromScore'); var getTextFromScore = require('./getTextFromScore'); -var MovieScreen = React.createClass({ +var MovieScreen = createClass({ render: function() { return ( @@ -63,7 +64,7 @@ var MovieScreen = React.createClass({ }, }); -var Ratings = React.createClass({ +var Ratings = createClass({ render: function() { var criticsScore = this.props.ratings.critics_score; var audienceScore = this.props.ratings.audience_score; @@ -87,7 +88,7 @@ var Ratings = React.createClass({ }, }); -var Cast = React.createClass({ +var Cast = createClass({ render: function() { if (!this.props.actors) { return null; diff --git a/Examples/Movies/MoviesApp.android.js b/Examples/Movies/MoviesApp.android.js index 5dfb57f..8103270 100644 --- a/Examples/Movies/MoviesApp.android.js +++ b/Examples/Movies/MoviesApp.android.js @@ -17,6 +17,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { AppRegistry, BackAndroid, @@ -64,7 +65,7 @@ var RouteMapper = function(route, navigationOperations, onComponentRef) { } }; -var MoviesApp = React.createClass({ +var MoviesApp = createClass({ render: function() { var initialRoute = {name: 'search'}; return ( diff --git a/Examples/Movies/MoviesApp.ios.js b/Examples/Movies/MoviesApp.ios.js index 1c6fc4b..228ad28 100644 --- a/Examples/Movies/MoviesApp.ios.js +++ b/Examples/Movies/MoviesApp.ios.js @@ -17,6 +17,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { AppRegistry, NavigatorIOS, @@ -25,7 +26,7 @@ var { var SearchScreen = require('./SearchScreen'); -var MoviesApp = React.createClass({ +var MoviesApp = createClass({ render: function() { return ( = 21; -var SearchBar = React.createClass({ +var SearchBar = createClass({ render: function() { var loadingView; if (this.props.isLoading) { diff --git a/Examples/Movies/SearchBar.ios.js b/Examples/Movies/SearchBar.ios.js index f4a2354..eecf212 100644 --- a/Examples/Movies/SearchBar.ios.js +++ b/Examples/Movies/SearchBar.ios.js @@ -17,6 +17,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { ActivityIndicatorIOS, TextInput, @@ -24,7 +25,7 @@ var { View, } = React; -var SearchBar = React.createClass({ +var SearchBar = createClass({ render: function() { return ( diff --git a/Examples/Movies/SearchBar.web.js b/Examples/Movies/SearchBar.web.js index ea524e8..5a141dd 100644 --- a/Examples/Movies/SearchBar.web.js +++ b/Examples/Movies/SearchBar.web.js @@ -17,6 +17,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { ActivityIndicatorIOS, TextInput, @@ -24,7 +25,7 @@ var { View, } = React; -var SearchBar = React.createClass({ +var SearchBar = createClass({ render: function() { return ( diff --git a/Examples/Movies/SearchScreen.js b/Examples/Movies/SearchScreen.js index 1633e02..7af85a9 100644 --- a/Examples/Movies/SearchScreen.js +++ b/Examples/Movies/SearchScreen.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { ActivityIndicatorIOS, ListView, @@ -59,7 +60,7 @@ var resultsCache = { var LOADING = {}; -var SearchScreen = React.createClass({ +var SearchScreen = createClass({ mixins: [TimerMixin], timeoutID: (null: any), @@ -335,7 +336,7 @@ var SearchScreen = React.createClass({ }, }); -var NoMovies = React.createClass({ +var NoMovies = createClass({ render: function() { var text = ''; if (this.props.filter) { diff --git a/Examples/TicTacToe/TicTacToeApp.js b/Examples/TicTacToe/TicTacToeApp.js index 51f7e67..466c018 100644 --- a/Examples/TicTacToe/TicTacToeApp.js +++ b/Examples/TicTacToe/TicTacToeApp.js @@ -17,6 +17,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { AppRegistry, StyleSheet, @@ -95,7 +96,7 @@ class Board { } } -var Cell = React.createClass({ +var Cell = createClass({ cellStyle() { switch (this.props.player) { case 1: @@ -145,7 +146,7 @@ var Cell = React.createClass({ } }); -var GameEndOverlay = React.createClass({ +var GameEndOverlay = createClass({ render() { var board = this.props.board; @@ -178,7 +179,7 @@ var GameEndOverlay = React.createClass({ } }); -var TicTacToeApp = React.createClass({ +var TicTacToeApp = createClass({ getInitialState() { return { board: new Board(), player: 1 }; }, diff --git a/Examples/UIExplorer/AccessibilityAndroidExample.android.js b/Examples/UIExplorer/AccessibilityAndroidExample.android.js index 3df94c6..69b565c 100644 --- a/Examples/UIExplorer/AccessibilityAndroidExample.android.js +++ b/Examples/UIExplorer/AccessibilityAndroidExample.android.js @@ -15,6 +15,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { StyleSheet, Text, @@ -28,7 +29,7 @@ var UIExplorerPage = require('./UIExplorerPage'); var importantForAccessibilityValues = ['auto', 'yes', 'no', 'no-hide-descendants']; -var AccessibilityAndroidExample = React.createClass({ +var AccessibilityAndroidExample = createClass({ statics: { title: 'Accessibility', diff --git a/Examples/UIExplorer/AccessibilityIOSExample.js b/Examples/UIExplorer/AccessibilityIOSExample.js index d543d72..42e1a58 100644 --- a/Examples/UIExplorer/AccessibilityIOSExample.js +++ b/Examples/UIExplorer/AccessibilityIOSExample.js @@ -16,12 +16,13 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { Text, View, } = React; -var AccessibilityIOSExample = React.createClass({ +var AccessibilityIOSExample = createClass({ render() { return ( diff --git a/Examples/UIExplorer/ActionSheetIOSExample.js b/Examples/UIExplorer/ActionSheetIOSExample.js index 31aedca..44225ca 100644 --- a/Examples/UIExplorer/ActionSheetIOSExample.js +++ b/Examples/UIExplorer/ActionSheetIOSExample.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { ActionSheetIOS, StyleSheet, @@ -33,7 +34,7 @@ var BUTTONS = [ var DESTRUCTIVE_INDEX = 3; var CANCEL_INDEX = 4; -var ActionSheetExample = React.createClass({ +var ActionSheetExample = createClass({ getInitialState() { return { clicked: 'none', @@ -65,7 +66,7 @@ var ActionSheetExample = React.createClass({ } }); -var ShareActionSheetExample = React.createClass({ +var ShareActionSheetExample = createClass({ getInitialState() { return { text: '' diff --git a/Examples/UIExplorer/ActivityIndicatorIOSExample.js b/Examples/UIExplorer/ActivityIndicatorIOSExample.js index 9655d68..135836a 100644 --- a/Examples/UIExplorer/ActivityIndicatorIOSExample.js +++ b/Examples/UIExplorer/ActivityIndicatorIOSExample.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { ActivityIndicatorIOS, StyleSheet, @@ -23,7 +24,7 @@ var { } = React; var TimerMixin = require('react-timer-mixin'); -var ToggleAnimatingActivityIndicator = React.createClass({ +var ToggleAnimatingActivityIndicator = createClass({ mixins: [TimerMixin], getInitialState: function() { diff --git a/Examples/UIExplorer/AdSupportIOSExample.js b/Examples/UIExplorer/AdSupportIOSExample.js index 1626249..b05f24a 100644 --- a/Examples/UIExplorer/AdSupportIOSExample.js +++ b/Examples/UIExplorer/AdSupportIOSExample.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { AdSupportIOS, StyleSheet, @@ -36,7 +37,7 @@ exports.examples = [ } ]; -var AdSupportIOSExample = React.createClass({ +var AdSupportIOSExample = createClass({ getInitialState: function() { return { deviceID: 'No IDFA yet', diff --git a/Examples/UIExplorer/AppStateIOSExample.js b/Examples/UIExplorer/AppStateIOSExample.js index 9cf15fa..5f07dc0 100644 --- a/Examples/UIExplorer/AppStateIOSExample.js +++ b/Examples/UIExplorer/AppStateIOSExample.js @@ -17,13 +17,14 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { AppStateIOS, Text, View } = React; -var AppStateSubscription = React.createClass({ +var AppStateSubscription = createClass({ getInitialState() { return { appState: AppStateIOS.currentState, diff --git a/Examples/UIExplorer/AssetScaledImageExample.js b/Examples/UIExplorer/AssetScaledImageExample.js index dbfe7af..ec963b5 100644 --- a/Examples/UIExplorer/AssetScaledImageExample.js +++ b/Examples/UIExplorer/AssetScaledImageExample.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { Image, StyleSheet, @@ -23,7 +24,7 @@ var { ScrollView } = React; -var AssetScaledImageExample = React.createClass({ +var AssetScaledImageExample = createClass({ getInitialState() { return { diff --git a/Examples/UIExplorer/AsyncStorageExample.js b/Examples/UIExplorer/AsyncStorageExample.js index 8a6a45b..1ea2740 100644 --- a/Examples/UIExplorer/AsyncStorageExample.js +++ b/Examples/UIExplorer/AsyncStorageExample.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { AsyncStorage, PickerIOS, @@ -27,7 +28,7 @@ var PickerItemIOS = PickerIOS.Item; var STORAGE_KEY = '@AsyncStorageExample:key'; var COLORS = ['red', 'orange', 'yellow', 'green', 'blue']; -var BasicStorageExample = React.createClass({ +var BasicStorageExample = createClass({ componentDidMount() { this._loadInitialState().done(); }, diff --git a/Examples/UIExplorer/CameraRollExample.ios.js b/Examples/UIExplorer/CameraRollExample.ios.js index d783d9d..3756e07 100644 --- a/Examples/UIExplorer/CameraRollExample.ios.js +++ b/Examples/UIExplorer/CameraRollExample.ios.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { CameraRoll, Image, @@ -32,7 +33,7 @@ var AssetScaledImageExampleView = require('./AssetScaledImageExample'); var CAMERA_ROLL_VIEW = 'camera_roll_view'; -var CameraRollExample = React.createClass({ +var CameraRollExample = createClass({ getInitialState() { return { diff --git a/Examples/UIExplorer/CameraRollView.ios.js b/Examples/UIExplorer/CameraRollView.ios.js index 74507aa..072a5c0 100644 --- a/Examples/UIExplorer/CameraRollView.ios.js +++ b/Examples/UIExplorer/CameraRollView.ios.js @@ -17,6 +17,8 @@ 'use strict'; var React = require('react-native'); +var PropTypes = require('prop-types'); +var createClass = require('create-react-class') var { ActivityIndicatorIOS, CameraRoll, @@ -35,7 +37,7 @@ var propTypes = { * values are 'Album', 'All', 'Event', 'Faces', 'Library', 'PhotoStream' * and SavedPhotos. */ - groupTypes: React.PropTypes.oneOf([ + groupTypes: PropTypes.oneOf([ 'Album', 'All', 'Event', @@ -48,22 +50,22 @@ var propTypes = { /** * Number of images that will be fetched in one page. */ - batchSize: React.PropTypes.number, + batchSize: PropTypes.number, /** * A function that takes a single image as a parameter and renders it. */ - renderImage: React.PropTypes.func, + renderImage: PropTypes.func, /** * imagesPerRow: Number of images to be shown in each row. */ - imagesPerRow: React.PropTypes.number, + imagesPerRow: PropTypes.number, /** * The asset type, one of 'Photos', 'Videos' or 'All' */ - assetType: React.PropTypes.oneOf([ + assetType: PropTypes.oneOf([ 'Photos', 'Videos', 'All', @@ -71,7 +73,7 @@ var propTypes = { }; -var CameraRollView = React.createClass({ +var CameraRollView = createClass({ propTypes: propTypes, getDefaultProps: function(): Object { diff --git a/Examples/UIExplorer/DatePickerIOSExample.js b/Examples/UIExplorer/DatePickerIOSExample.js index fc76868..642c64e 100644 --- a/Examples/UIExplorer/DatePickerIOSExample.js +++ b/Examples/UIExplorer/DatePickerIOSExample.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { DatePickerIOS, StyleSheet, @@ -24,7 +25,7 @@ var { View, } = React; -var DatePickerExample = React.createClass({ +var DatePickerExample = createClass({ getDefaultProps: function () { return { date: new Date(), @@ -98,7 +99,7 @@ var DatePickerExample = React.createClass({ }, }); -var WithLabel = React.createClass({ +var WithLabel = createClass({ render: function() { return ( @@ -113,7 +114,7 @@ var WithLabel = React.createClass({ } }); -var Heading = React.createClass({ +var Heading = createClass({ render: function() { return ( diff --git a/Examples/UIExplorer/DrawerLayoutExample.web.js b/Examples/UIExplorer/DrawerLayoutExample.web.js index 731009c..b933fce 100644 --- a/Examples/UIExplorer/DrawerLayoutExample.web.js +++ b/Examples/UIExplorer/DrawerLayoutExample.web.js @@ -1,6 +1,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { AppRegistry, StyleSheet, @@ -9,7 +10,7 @@ var { DrawerLayoutAndroid, } = React; -var DrawerLayoutExample = React.createClass({ +var DrawerLayoutExample = createClass({ statics: { title: '', description: 'DrawerLayout', diff --git a/Examples/UIExplorer/GeolocationExample.js b/Examples/UIExplorer/GeolocationExample.js index d9dd4e8..20da092 100644 --- a/Examples/UIExplorer/GeolocationExample.js +++ b/Examples/UIExplorer/GeolocationExample.js @@ -18,6 +18,7 @@ var React = require('react-native'); +var createClass = require('create-react-class'); var { StyleSheet, Text, @@ -37,7 +38,7 @@ exports.examples = [ } ]; -var GeolocationExample = React.createClass({ +var GeolocationExample = createClass({ watchID: (null: ?number), getInitialState: function() { diff --git a/Examples/UIExplorer/ImageCapInsetsExample.js b/Examples/UIExplorer/ImageCapInsetsExample.js index 8e17ac9..0083eb8 100644 --- a/Examples/UIExplorer/ImageCapInsetsExample.js +++ b/Examples/UIExplorer/ImageCapInsetsExample.js @@ -17,6 +17,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { Image, StyleSheet, @@ -24,7 +25,7 @@ var { View, } = React; -var ImageCapInsetsExample = React.createClass({ +var ImageCapInsetsExample = createClass({ render: function() { return ( diff --git a/Examples/UIExplorer/ImageExample.js b/Examples/UIExplorer/ImageExample.js index b29d7b9..d8cf2e9 100644 --- a/Examples/UIExplorer/ImageExample.js +++ b/Examples/UIExplorer/ImageExample.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { Image, StyleSheet, @@ -28,7 +29,7 @@ var base64Icon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAQAAACS // var ImageCapInsetsExample = require('./ImageCapInsetsExample'); -var NetworkImageExample = React.createClass({ +var NetworkImageExample = createClass({ watchID: (null: ?number), getInitialState: function() { diff --git a/Examples/UIExplorer/LayoutEventsExample.js b/Examples/UIExplorer/LayoutEventsExample.js index 368cee8..66ffe45 100644 --- a/Examples/UIExplorer/LayoutEventsExample.js +++ b/Examples/UIExplorer/LayoutEventsExample.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { Image, StyleSheet, @@ -34,7 +35,7 @@ type LayoutEvent = { }; }; -var LayoutEventExample = React.createClass({ +var LayoutEventExample = createClass({ getInitialState: function() { return { viewStyle: { diff --git a/Examples/UIExplorer/LayoutExample.js b/Examples/UIExplorer/LayoutExample.js index ef9b1c6..eb4fc86 100644 --- a/Examples/UIExplorer/LayoutExample.js +++ b/Examples/UIExplorer/LayoutExample.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { StyleSheet, Text, @@ -25,7 +26,7 @@ var { var UIExplorerBlock = require('./UIExplorerBlock'); var UIExplorerPage = require('./UIExplorerPage'); -var Circle = React.createClass({ +var Circle = createClass({ render: function() { var size = this.props.size || 20; return ( @@ -42,7 +43,7 @@ var Circle = React.createClass({ } }); -var CircleBlock = React.createClass({ +var CircleBlock = createClass({ render: function() { var circleStyle = { flexDirection: 'row', @@ -59,7 +60,7 @@ var CircleBlock = React.createClass({ } }); -var LayoutExample = React.createClass({ +var LayoutExample = createClass({ statics: { title: 'Layout - Flexbox', description: 'Examples of using the flexbox API to layout views.', diff --git a/Examples/UIExplorer/ListViewExample.js b/Examples/UIExplorer/ListViewExample.js index 4b711a0..808f7a2 100644 --- a/Examples/UIExplorer/ListViewExample.js +++ b/Examples/UIExplorer/ListViewExample.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { Image, ListView, @@ -27,7 +28,7 @@ var { var UIExplorerPage = require('./UIExplorerPage'); -var ListViewSimpleExample = React.createClass({ +var ListViewSimpleExample = createClass({ statics: { title: ' - Simple', description: 'Performant, scrollable list of data.' diff --git a/Examples/UIExplorer/ListViewGridLayoutExample.js b/Examples/UIExplorer/ListViewGridLayoutExample.js index 272bdde..7b96c2f 100644 --- a/Examples/UIExplorer/ListViewGridLayoutExample.js +++ b/Examples/UIExplorer/ListViewGridLayoutExample.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { Image, ListView, @@ -40,7 +41,7 @@ var THUMB_URLS = [ 'https://fbcdn-dragon-a.akamaihd.net/hphotos-ak-prn1/t39.1997/p128x128/851583_767334573292952_1519550680_n.png', ]; -var ListViewGridLayoutExample = React.createClass({ +var ListViewGridLayoutExample = createClass({ statics: { title: ' - Grid Layout', diff --git a/Examples/UIExplorer/ListViewPagingExample.js b/Examples/UIExplorer/ListViewPagingExample.js index f51d299..1871490 100644 --- a/Examples/UIExplorer/ListViewPagingExample.js +++ b/Examples/UIExplorer/ListViewPagingExample.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { Image, // LayoutAnimation, @@ -35,7 +36,7 @@ var THUMB_URLS = ['https://fbcdn-dragon-a.akamaihd.net/hphotos-ak-ash3/t39.1997/ var NUM_SECTIONS = 100; var NUM_ROWS_PER_SECTION = 10; -var Thumb = React.createClass({ +var Thumb = createClass({ getInitialState: function() { return {thumbIndex: this._getThumbIdx(), dir: 'row'}; }, @@ -74,7 +75,7 @@ var Thumb = React.createClass({ } }); -var ListViewPagingExample = React.createClass({ +var ListViewPagingExample = createClass({ statics: { title: ' - Paging', description: 'Floating headers & layout animations.' diff --git a/Examples/UIExplorer/MapViewExample.js b/Examples/UIExplorer/MapViewExample.js index 5720175..9e37c01 100644 --- a/Examples/UIExplorer/MapViewExample.js +++ b/Examples/UIExplorer/MapViewExample.js @@ -16,6 +16,8 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); +var PropTypes = require('prop-types'); var { MapView, StyleSheet, @@ -31,16 +33,16 @@ var regionText = { longitudeDelta: '0', }; -var MapRegionInput = React.createClass({ +var MapRegionInput = createClass({ propTypes: { - region: React.PropTypes.shape({ - latitude: React.PropTypes.number.isRequired, - longitude: React.PropTypes.number.isRequired, - latitudeDelta: React.PropTypes.number.isRequired, - longitudeDelta: React.PropTypes.number.isRequired, + region: PropTypes.shape({ + latitude: PropTypes.number.isRequired, + longitude: PropTypes.number.isRequired, + latitudeDelta: PropTypes.number.isRequired, + longitudeDelta: PropTypes.number.isRequired, }), - onChange: React.PropTypes.func.isRequired, + onChange: PropTypes.func.isRequired, }, getInitialState: function() { @@ -145,7 +147,7 @@ var MapRegionInput = React.createClass({ }); -var MapViewExample = React.createClass({ +var MapViewExample = createClass({ getInitialState() { return { diff --git a/Examples/UIExplorer/ModalExample.js b/Examples/UIExplorer/ModalExample.js index 3202cb6..8547c8e 100644 --- a/Examples/UIExplorer/ModalExample.js +++ b/Examples/UIExplorer/ModalExample.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { Modal, StyleSheet, @@ -30,7 +31,7 @@ exports.framework = 'React'; exports.title = ''; exports.description = 'Component for presenting modal views.'; -var Button = React.createClass({ +var Button = createClass({ getInitialState() { return { active: false, @@ -62,7 +63,7 @@ var Button = React.createClass({ } }); -var ModalExample = React.createClass({ +var ModalExample = createClass({ getInitialState() { return { animated: true, diff --git a/Examples/UIExplorer/Navigator/BreadcrumbNavSample.js b/Examples/UIExplorer/Navigator/BreadcrumbNavSample.js index 62196e5..81405b0 100644 --- a/Examples/UIExplorer/Navigator/BreadcrumbNavSample.js +++ b/Examples/UIExplorer/Navigator/BreadcrumbNavSample.js @@ -14,6 +14,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { PixelRatio, Navigator, @@ -43,7 +44,7 @@ class NavButton extends React.Component { } } -var BreadcrumbNavSample = React.createClass({ +var BreadcrumbNavSample = createClass({ componentWillMount: function() { this._navBarRouteMapper = { diff --git a/Examples/UIExplorer/Navigator/JumpingNavSample.js b/Examples/UIExplorer/Navigator/JumpingNavSample.js index 707ea4f..826badd 100644 --- a/Examples/UIExplorer/Navigator/JumpingNavSample.js +++ b/Examples/UIExplorer/Navigator/JumpingNavSample.js @@ -14,6 +14,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { Navigator, PixelRatio, @@ -101,7 +102,7 @@ class JumpingNavBar extends React.Component { } } -var JumpingNavSample = React.createClass({ +var JumpingNavSample = createClass({ render: function() { return ( ', diff --git a/Examples/UIExplorer/NavigatorIOSColorsExample.js b/Examples/UIExplorer/NavigatorIOSColorsExample.js index 4078cac..e9788cd 100644 --- a/Examples/UIExplorer/NavigatorIOSColorsExample.js +++ b/Examples/UIExplorer/NavigatorIOSColorsExample.js @@ -14,6 +14,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { NavigatorIOS, StatusBarIOS, @@ -22,7 +23,7 @@ var { View } = React; -var EmptyPage = React.createClass({ +var EmptyPage = createClass({ render: function() { return ( @@ -36,7 +37,7 @@ var EmptyPage = React.createClass({ }); -var NavigatorIOSColors = React.createClass({ +var NavigatorIOSColors = createClass({ statics: { title: ' - Custom', diff --git a/Examples/UIExplorer/NavigatorIOSExample.js b/Examples/UIExplorer/NavigatorIOSExample.js index 4a2011a..0dd0c53 100644 --- a/Examples/UIExplorer/NavigatorIOSExample.js +++ b/Examples/UIExplorer/NavigatorIOSExample.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var ViewExample = require('./ViewExample'); var createExamplePage = require('./createExamplePage'); var { @@ -28,7 +29,7 @@ var { View, } = React; -var EmptyPage = React.createClass({ +var EmptyPage = createClass({ render: function() { return ( @@ -42,7 +43,7 @@ var EmptyPage = React.createClass({ }); -var NavigatorIOSExample = React.createClass({ +var NavigatorIOSExample = createClass({ statics: { title: '', diff --git a/Examples/UIExplorer/NetInfoExample.js b/Examples/UIExplorer/NetInfoExample.js index 6ab1805..302e9f3 100644 --- a/Examples/UIExplorer/NetInfoExample.js +++ b/Examples/UIExplorer/NetInfoExample.js @@ -16,13 +16,14 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { NetInfo, Text, View } = React; -var ReachabilitySubscription = React.createClass({ +var ReachabilitySubscription = createClass({ getInitialState() { return { reachabilityHistory: [], @@ -56,7 +57,7 @@ var ReachabilitySubscription = React.createClass({ } }); -var ReachabilityCurrent = React.createClass({ +var ReachabilityCurrent = createClass({ getInitialState() { return { reachability: null, @@ -91,7 +92,7 @@ var ReachabilityCurrent = React.createClass({ } }); -var IsConnected = React.createClass({ +var IsConnected = createClass({ getInitialState() { return { isConnected: null, diff --git a/Examples/UIExplorer/PanResponderExample.js b/Examples/UIExplorer/PanResponderExample.js index dc96b53..8a6af64 100644 --- a/Examples/UIExplorer/PanResponderExample.js +++ b/Examples/UIExplorer/PanResponderExample.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { PanResponder, StyleSheet, @@ -28,7 +29,7 @@ var CIRCLE_SIZE = 80; var CIRCLE_COLOR = 'blue'; var CIRCLE_HIGHLIGHT_COLOR = 'green'; -var PanResponderExample = React.createClass({ +var PanResponderExample = createClass({ statics: { title: 'PanResponder Sample', diff --git a/Examples/UIExplorer/PickerIOSExample.js b/Examples/UIExplorer/PickerIOSExample.js index 31c81cc..37a9d09 100644 --- a/Examples/UIExplorer/PickerIOSExample.js +++ b/Examples/UIExplorer/PickerIOSExample.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { PickerIOS, Text, @@ -65,7 +66,7 @@ var CAR_MAKES_AND_MODELS = { }, }; -var PickerExample = React.createClass({ +var PickerExample = createClass({ getInitialState: function() { return { carMake: 'cadillac', diff --git a/Examples/UIExplorer/PointerEventsExample.js b/Examples/UIExplorer/PointerEventsExample.js index 735a595..1ce2339 100644 --- a/Examples/UIExplorer/PointerEventsExample.js +++ b/Examples/UIExplorer/PointerEventsExample.js @@ -16,13 +16,14 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { StyleSheet, Text, View, } = React; -var ExampleBox = React.createClass({ +var ExampleBox = createClass({ getInitialState: function() { return { log: [], @@ -61,7 +62,7 @@ var ExampleBox = React.createClass({ }); -var NoneExample = React.createClass({ +var NoneExample = createClass({ render: function() { return ( @@ -107,7 +108,7 @@ var DemoText = React.createClass({ } }); -var BoxNoneExample = React.createClass({ +var BoxNoneExample = createClass({ render: function() { return ( ', diff --git a/Examples/UIExplorer/ProgressViewIOSExample.js b/Examples/UIExplorer/ProgressViewIOSExample.js index 0020d64..54053ae 100644 --- a/Examples/UIExplorer/ProgressViewIOSExample.js +++ b/Examples/UIExplorer/ProgressViewIOSExample.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { ProgressViewIOS, StyleSheet, @@ -23,7 +24,7 @@ var { } = React; var TimerMixin = require('react-timer-mixin'); -var ProgressViewExample = React.createClass({ +var ProgressViewExample = createClass({ mixins: [TimerMixin], getInitialState() { diff --git a/Examples/UIExplorer/PushNotificationIOSExample.js b/Examples/UIExplorer/PushNotificationIOSExample.js index bd6109f..4c1f17d 100644 --- a/Examples/UIExplorer/PushNotificationIOSExample.js +++ b/Examples/UIExplorer/PushNotificationIOSExample.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { AlertIOS, PushNotificationIOS, @@ -25,7 +26,7 @@ var { View, } = React; -var Button = React.createClass({ +var Button = createClass({ render: function() { return ( ', description: 'Component that enables scrolling through child components.' diff --git a/Examples/UIExplorer/SegmentedControlIOSExample.js b/Examples/UIExplorer/SegmentedControlIOSExample.js index a0794d1..2cf8013 100644 --- a/Examples/UIExplorer/SegmentedControlIOSExample.js +++ b/Examples/UIExplorer/SegmentedControlIOSExample.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { SegmentedControlIOS, Text, @@ -23,7 +24,7 @@ var { StyleSheet } = React; -var BasicSegmentedControlExample = React.createClass({ +var BasicSegmentedControlExample = createClass({ render() { return ( @@ -38,7 +39,7 @@ var BasicSegmentedControlExample = React.createClass({ } }); -var PreSelectedSegmentedControlExample = React.createClass({ +var PreSelectedSegmentedControlExample = createClass({ render() { return ( @@ -50,7 +51,7 @@ var PreSelectedSegmentedControlExample = React.createClass({ } }); -var MomentarySegmentedControlExample = React.createClass({ +var MomentarySegmentedControlExample = createClass({ render() { return ( @@ -62,7 +63,7 @@ var MomentarySegmentedControlExample = React.createClass({ } }); -var DisabledSegmentedControlExample = React.createClass({ +var DisabledSegmentedControlExample = createClass({ render() { return ( @@ -74,7 +75,7 @@ var DisabledSegmentedControlExample = React.createClass({ }, }); -var ColorSegmentedControlExample = React.createClass({ +var ColorSegmentedControlExample = createClass({ render() { return ( @@ -89,7 +90,7 @@ var ColorSegmentedControlExample = React.createClass({ }, }); -var EventSegmentedControlExample = React.createClass({ +var EventSegmentedControlExample = createClass({ getInitialState() { return { values: ['One', 'Two', 'Three'], diff --git a/Examples/UIExplorer/SliderIOSExample.js b/Examples/UIExplorer/SliderIOSExample.js index f19b71e..c5ff477 100644 --- a/Examples/UIExplorer/SliderIOSExample.js +++ b/Examples/UIExplorer/SliderIOSExample.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { SliderIOS, Text, @@ -23,7 +24,7 @@ var { View, } = React; -var SliderExample = React.createClass({ +var SliderExample = createClass({ getInitialState() { return { value: 0.2, diff --git a/Examples/UIExplorer/SwitchAndroidExample.android.js b/Examples/UIExplorer/SwitchAndroidExample.android.js index 7b6f38e..6ef2cc8 100644 --- a/Examples/UIExplorer/SwitchAndroidExample.android.js +++ b/Examples/UIExplorer/SwitchAndroidExample.android.js @@ -4,13 +4,14 @@ 'use strict'; var React = require('React'); +var createClass = require('create-react-class'); var SwitchAndroid = require('SwitchAndroid'); var Text = require('Text'); var UIExplorerBlock = require('UIExplorerBlock'); var UIExplorerPage = require('UIExplorerPage'); -var SwitchAndroidExample = React.createClass({ +var SwitchAndroidExample = createClass({ statics: { title: '', description: 'Standard Android two-state toggle component.' diff --git a/Examples/UIExplorer/SwitchIOSExample.js b/Examples/UIExplorer/SwitchIOSExample.js index feedfbf..ecc4049 100644 --- a/Examples/UIExplorer/SwitchIOSExample.js +++ b/Examples/UIExplorer/SwitchIOSExample.js @@ -16,13 +16,14 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { SwitchIOS, Text, View } = React; -var BasicSwitchExample = React.createClass({ +var BasicSwitchExample = createClass({ getInitialState() { return { trueSwitchIsOn: true, @@ -44,7 +45,7 @@ var BasicSwitchExample = React.createClass({ } }); -var DisabledSwitchExample = React.createClass({ +var DisabledSwitchExample = createClass({ render() { return ( @@ -60,7 +61,7 @@ var DisabledSwitchExample = React.createClass({ }, }); -var ColorSwitchExample = React.createClass({ +var ColorSwitchExample = createClass({ getInitialState() { return { colorTrueSwitchIsOn: true, @@ -88,7 +89,7 @@ var ColorSwitchExample = React.createClass({ }, }); -var EventSwitchExample = React.createClass({ +var EventSwitchExample = createClass({ getInitialState() { return { eventSwitchIsOn: false, diff --git a/Examples/UIExplorer/TabBarIOSExample.js b/Examples/UIExplorer/TabBarIOSExample.js index eeec28e..8a399be 100644 --- a/Examples/UIExplorer/TabBarIOSExample.js +++ b/Examples/UIExplorer/TabBarIOSExample.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { StyleSheet, TabBarIOS, @@ -25,7 +26,7 @@ var { var base64Icon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAQAAACSR7JhAAADtUlEQVR4Ac3YA2Bj6QLH0XPT1Fzbtm29tW3btm3bfLZtv7e2ObZnms7d8Uw098tuetPzrxv8wiISrtVudrG2JXQZ4VOv+qUfmqCGGl1mqLhoA52oZlb0mrjsnhKpgeUNEs91Z0pd1kvihA3ULGVHiQO2narKSHKkEMulm9VgUyE60s1aWoMQUbpZOWE+kaqs4eLEjdIlZTcFZB0ndc1+lhB1lZrIuk5P2aib1NBpZaL+JaOGIt0ls47SKzLC7CqrlGF6RZ09HGoNy1lYl2aRSWL5GuzqWU1KafRdoRp0iOQEiDzgZPnG6DbldcomadViflnl/cL93tOoVbsOLVM2jylvdWjXolWX1hmfZbGR/wjypDjFLSZIRov09BgYmtUqPQPlQrPapecLgTIy0jMgPKtTeob2zWtrGH3xvjUkPCtNg/tm1rjwrMa+mdUkPd3hWbH0jArPGiU9ufCsNNWFZ40wpwn+62/66R2RUtoso1OB34tnLOcy7YB1fUdc9e0q3yru8PGM773vXsuZ5YIZX+5xmHwHGVvlrGPN6ZSiP1smOsMMde40wKv2VmwPPVXNut4sVpUreZiLBHi0qln/VQeI/LTMYXpsJtFiclUN+5HVZazim+Ky+7sAvxWnvjXrJFneVtLWLyPJu9K3cXLWeOlbMTlrIelbMDlrLenrjEQOtIF+fuI9xRp9ZBFp6+b6WT8RrxEpdK64BuvHgDk+vUy+b5hYk6zfyfs051gRoNO1usU12WWRWL73/MMEy9pMi9qIrR4ZpV16Rrvduxazmy1FSvuFXRkqTnE7m2kdb5U8xGjLw/spRr1uTov4uOgQE+0N/DvFrG/Jt7i/FzwxbA9kDanhf2w+t4V97G8lrT7wc08aA2QNUkuTfW/KimT01wdlfK4yEw030VfT0RtZbzjeMprNq8m8tnSTASrTLti64oBNdpmMQm0eEwvfPwRbUBywG5TzjPCsdwk3IeAXjQblLCoXnDVeoAz6SfJNk5TTzytCNZk/POtTSV40NwOFWzw86wNJRpubpXsn60NJFlHeqlYRbslqZm2jnEZ3qcSKgm0kTli3zZVS7y/iivZTweYXJ26Y+RTbV1zh3hYkgyFGSTKPfRVbRqWWVReaxYeSLarYv1Qqsmh1s95S7G+eEWK0f3jYKTbV6bOwepjfhtafsvUsqrQvrGC8YhmnO9cSCk3yuY984F1vesdHYhWJ5FvASlacshUsajFt2mUM9pqzvKGcyNJW0arTKN1GGGzQlH0tXwLDgQTurS8eIQAAAABJRU5ErkJggg=='; -var TabBarExample = React.createClass({ +var TabBarExample = createClass({ statics: { title: '', description: 'Tab-based navigation.', diff --git a/Examples/UIExplorer/TextExample.android.js b/Examples/UIExplorer/TextExample.android.js index 42d17ed..401661f 100644 --- a/Examples/UIExplorer/TextExample.android.js +++ b/Examples/UIExplorer/TextExample.android.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { StyleSheet, Text, @@ -24,7 +25,7 @@ var { var UIExplorerBlock = require('./UIExplorerBlock'); var UIExplorerPage = require('./UIExplorerPage'); -var Entity = React.createClass({ +var Entity = createClass({ render: function() { return ( @@ -34,7 +35,7 @@ var Entity = React.createClass({ } }); -var AttributeToggler = React.createClass({ +var AttributeToggler = createClass({ getInitialState: function() { return {fontWeight: 'bold', fontSize: 15}; }, @@ -70,7 +71,7 @@ var AttributeToggler = React.createClass({ } }); -var TextExample = React.createClass({ +var TextExample = createClass({ statics: { title: '', description: 'Base component for rendering styled text.', diff --git a/Examples/UIExplorer/TextExample.ios.js b/Examples/UIExplorer/TextExample.ios.js index 23111f8..47562f9 100644 --- a/Examples/UIExplorer/TextExample.ios.js +++ b/Examples/UIExplorer/TextExample.ios.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { Image, StyleSheet, @@ -23,7 +24,7 @@ var { View, } = React; -var Entity = React.createClass({ +var Entity = createClass({ render: function() { return ( @@ -33,7 +34,7 @@ var Entity = React.createClass({ } }); -var AttributeToggler = React.createClass({ +var AttributeToggler = createClass({ getInitialState: function() { return {fontWeight: 'bold', fontSize: 15}; }, diff --git a/Examples/UIExplorer/TextInputExample.android.js b/Examples/UIExplorer/TextInputExample.android.js index b70f2d9..b026a7e 100644 --- a/Examples/UIExplorer/TextInputExample.android.js +++ b/Examples/UIExplorer/TextInputExample.android.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { Text, TextInput, @@ -23,7 +24,7 @@ var { StyleSheet, } = React; -var TextEventsExample = React.createClass({ +var TextEventsExample = createClass({ getInitialState: function() { return { curText: '', diff --git a/Examples/UIExplorer/TextInputExample.ios.js b/Examples/UIExplorer/TextInputExample.ios.js index d51a95e..e29cb9d 100644 --- a/Examples/UIExplorer/TextInputExample.ios.js +++ b/Examples/UIExplorer/TextInputExample.ios.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { Text, TextInput, @@ -23,7 +24,7 @@ var { StyleSheet, } = React; -var WithLabel = React.createClass({ +var WithLabel = createClass({ render: function() { return ( @@ -36,7 +37,7 @@ var WithLabel = React.createClass({ }, }); -var TextEventsExample = React.createClass({ +var TextEventsExample = createClass({ getInitialState: function() { return { curText: '', diff --git a/Examples/UIExplorer/TimerExample.js b/Examples/UIExplorer/TimerExample.js index 55272a8..6bdd2c1 100644 --- a/Examples/UIExplorer/TimerExample.js +++ b/Examples/UIExplorer/TimerExample.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { AlertIOS, Platform, @@ -25,7 +26,7 @@ var { var TimerMixin = require('react-timer-mixin'); var UIExplorerButton = require('./UIExplorerButton'); -var TimerTester = React.createClass({ +var TimerTester = createClass({ mixins: [TimerMixin], _ii: 0, @@ -149,7 +150,7 @@ exports.examples = [ description: 'Execute function fn every t milliseconds until cancelled ' + 'or component is unmounted.', render: function(): ReactElement { - var IntervalExample = React.createClass({ + var IntervalExample = createClass({ getInitialState: function() { return { showTimer: true, diff --git a/Examples/UIExplorer/ToastAndroidExample.android.js b/Examples/UIExplorer/ToastAndroidExample.android.js index 7f9cedf..b414249 100644 --- a/Examples/UIExplorer/ToastAndroidExample.android.js +++ b/Examples/UIExplorer/ToastAndroidExample.android.js @@ -17,6 +17,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { StyleSheet, Text, @@ -27,7 +28,7 @@ var { var UIExplorerBlock = require('UIExplorerBlock'); var UIExplorerPage = require('UIExplorerPage'); -var ToastExample = React.createClass({ +var ToastExample = createClass({ statics: { title: 'Toast Example', diff --git a/Examples/UIExplorer/ToolbarAndroidExample.android.js b/Examples/UIExplorer/ToolbarAndroidExample.android.js index 769737a..2285f0b 100644 --- a/Examples/UIExplorer/ToolbarAndroidExample.android.js +++ b/Examples/UIExplorer/ToolbarAndroidExample.android.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { StyleSheet, Text, @@ -27,7 +28,7 @@ var UIExplorerPage = require('./UIExplorerPage'); var SwitchAndroid = require('SwitchAndroid'); var ToolbarAndroid = require('ToolbarAndroid'); -var ToolbarAndroidExample = React.createClass({ +var ToolbarAndroidExample = createClass({ statics: { title: '', description: 'Examples of using the Android toolbar.' diff --git a/Examples/UIExplorer/TouchableExample.js b/Examples/UIExplorer/TouchableExample.js index f8ced26..5fe47b1 100644 --- a/Examples/UIExplorer/TouchableExample.js +++ b/Examples/UIExplorer/TouchableExample.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { PixelRatio, Image, @@ -87,7 +88,7 @@ exports.examples = [ }, }]; -var TextOnPressBox = React.createClass({ +var TextOnPressBox = createClass({ getInitialState: function() { return { timesPressed: 0, @@ -123,7 +124,7 @@ var TextOnPressBox = React.createClass({ } }); -var TouchableFeedbackEvents = React.createClass({ +var TouchableFeedbackEvents = createClass({ getInitialState: function() { return { eventLog: [], @@ -159,7 +160,7 @@ var TouchableFeedbackEvents = React.createClass({ }, }); -var TouchableDelayEvents = React.createClass({ +var TouchableDelayEvents = createClass({ getInitialState: function() { return { eventLog: [], diff --git a/Examples/UIExplorer/TransformExample.js b/Examples/UIExplorer/TransformExample.js index 7da9eb5..9dcd909 100644 --- a/Examples/UIExplorer/TransformExample.js +++ b/Examples/UIExplorer/TransformExample.js @@ -14,6 +14,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { Animated, StyleSheet, @@ -21,7 +22,7 @@ var { View, } = React; -var Flip = React.createClass({ +var Flip = createClass({ getInitialState() { return { theta: new Animated.Value(45), diff --git a/Examples/UIExplorer/UIExplorerApp.android.js b/Examples/UIExplorer/UIExplorerApp.android.js index c9bd241..4186119 100644 --- a/Examples/UIExplorer/UIExplorerApp.android.js +++ b/Examples/UIExplorer/UIExplorerApp.android.js @@ -17,6 +17,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { AppRegistry, BackAndroid, @@ -30,7 +31,7 @@ var UIExplorerList = require('./UIExplorerList.android'); var DRAWER_WIDTH_LEFT = 56; -var UIExplorerApp = React.createClass({ +var UIExplorerApp = createClass({ getInitialState: function() { return { example: this._getUIExplorerHome(), @@ -82,7 +83,7 @@ var UIExplorerApp = React.createClass({ _renderHome: function() { var onSelectExample = this.onSelectExample; - return React.createClass({ + return createClass({ render: function() { return ( { if (Example.displayName) { - var Snapshotter = React.createClass({ + var Snapshotter = createClass({ render: function() { var Renderable = UIExplorerListBase.makeRenderable(Example); return ( diff --git a/Examples/UIExplorer/UIExplorerPage.js b/Examples/UIExplorer/UIExplorerPage.js index 2c74497..49edc5a 100644 --- a/Examples/UIExplorer/UIExplorerPage.js +++ b/Examples/UIExplorer/UIExplorerPage.js @@ -17,6 +17,8 @@ 'use strict'; var React = require('react-native'); +var PropTypes = require('prop-types'); +var createClass = require('create-react-class'); var { ScrollView, StyleSheet, @@ -25,12 +27,12 @@ var { var UIExplorerTitle = require('./UIExplorerTitle'); -var UIExplorerPage = React.createClass({ +var UIExplorerPage = createClass({ propTypes: { - keyboardShouldPersistTaps: React.PropTypes.bool, - noScroll: React.PropTypes.bool, - noSpacer: React.PropTypes.bool, + keyboardShouldPersistTaps: PropTypes.bool, + noScroll: PropTypes.bool, + noSpacer: PropTypes.bool, }, render: function() { diff --git a/Examples/UIExplorer/UIExplorerTitle.js b/Examples/UIExplorer/UIExplorerTitle.js index 1652498..87d8ec0 100644 --- a/Examples/UIExplorer/UIExplorerTitle.js +++ b/Examples/UIExplorer/UIExplorerTitle.js @@ -17,13 +17,14 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { StyleSheet, Text, View, } = React; -var UIExplorerTitle = React.createClass({ +var UIExplorerTitle = createClass({ render: function() { return ( diff --git a/Examples/UIExplorer/ViewExample.js b/Examples/UIExplorer/ViewExample.js index b5bb18c..0d46178 100644 --- a/Examples/UIExplorer/ViewExample.js +++ b/Examples/UIExplorer/ViewExample.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { StyleSheet, Text, @@ -32,7 +33,7 @@ var styles = StyleSheet.create({ } }); -var ViewBorderStyleExample = React.createClass({ +var ViewBorderStyleExample = createClass({ getInitialState() { return { showBorder: true diff --git a/Examples/UIExplorer/ViewPagerAndroidExample.android.js b/Examples/UIExplorer/ViewPagerAndroidExample.android.js index 51a1312..2308f65 100644 --- a/Examples/UIExplorer/ViewPagerAndroidExample.android.js +++ b/Examples/UIExplorer/ViewPagerAndroidExample.android.js @@ -15,6 +15,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { Image, StyleSheet, @@ -35,7 +36,7 @@ var IMAGE_URIS = [ 'http://apod.nasa.gov/apod/image/1510/lunareclipse_27Sep_beletskycrop4.jpg', ]; -var LikeCount = React.createClass({ +var LikeCount = createClass({ getInitialState: function() { return { likes: 7, @@ -61,7 +62,7 @@ var LikeCount = React.createClass({ }, }); -var Button = React.createClass({ +var Button = createClass({ _handlePress: function() { if (this.props.enabled && this.props.onPress) { this.props.onPress(); @@ -78,7 +79,7 @@ var Button = React.createClass({ } }); -var ProgressBar = React.createClass({ +var ProgressBar = createClass({ render: function() { var fractionalPosition = (this.props.progress.position + this.props.progress.offset); var progressBarSize = (fractionalPosition / (PAGES - 1)) * this.props.size; @@ -90,7 +91,7 @@ var ProgressBar = React.createClass({ } }); -var ViewPagerAndroidExample = React.createClass({ +var ViewPagerAndroidExample = createClass({ statics: { title: '', description: 'Container that allows to flip left and right between child views.' diff --git a/Examples/UIExplorer/WebViewExample.js b/Examples/UIExplorer/WebViewExample.js index 41f6b4d..2abc49c 100644 --- a/Examples/UIExplorer/WebViewExample.js +++ b/Examples/UIExplorer/WebViewExample.js @@ -16,6 +16,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { StyleSheet, Text, @@ -33,7 +34,7 @@ var TEXT_INPUT_REF = 'urlInput'; var WEBVIEW_REF = 'webview'; var DEFAULT_URL = 'https://m.facebook.com'; -var WebViewExample = React.createClass({ +var WebViewExample = createClass({ getInitialState: function() { return { diff --git a/Examples/UIExplorer/createExamplePage.ios.js b/Examples/UIExplorer/createExamplePage.ios.js index 4106881..193ec68 100644 --- a/Examples/UIExplorer/createExamplePage.ios.js +++ b/Examples/UIExplorer/createExamplePage.ios.js @@ -17,6 +17,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { Platform, } = React; @@ -32,7 +33,7 @@ var createExamplePage = function(title: ?string, exampleModule: ExampleModule) : ReactClass { invariant(!!exampleModule.examples, 'The module must have examples'); - var ExamplePage = React.createClass({ + var ExamplePage = createClass({ statics: { title: exampleModule.title, description: exampleModule.description, diff --git a/Examples/UIExplorer/createExamplePage.web.js b/Examples/UIExplorer/createExamplePage.web.js index 6698be1..5a3ddfb 100644 --- a/Examples/UIExplorer/createExamplePage.web.js +++ b/Examples/UIExplorer/createExamplePage.web.js @@ -17,6 +17,7 @@ 'use strict'; var React = require('react-native'); +var createClass = require('create-react-class'); var { Platform, } = React; @@ -28,7 +29,7 @@ import type { Example, ExampleModule } from 'ExampleTypes'; var createExamplePage = function(title: ?string, exampleModule: ExampleModule) : ReactClass { - var ExamplePage = React.createClass({ + var ExamplePage = createClass({ statics: { title: exampleModule.title, description: exampleModule.description, diff --git a/package.json b/package.json index b45bcba..36c23ee 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "babel-polyfill": "6.16.0", "babel-preset-react-native": "1.9.0", "babel-preset-stage-1": "6.16.0", + "create-react-class": "^15.6.0", "eslint": "3.6.1", "eslint-loader": "1.5.0", "eslint-plugin-react": "6.3.0", diff --git a/pages/game2048.html b/pages/game2048.html index 7a3962c..540b56d 100644 --- a/pages/game2048.html +++ b/pages/game2048.html @@ -9,9 +9,9 @@ - + - + diff --git a/pages/game2048.js b/pages/game2048.js index a07e490..abf94d0 100644 --- a/pages/game2048.js +++ b/pages/game2048.js @@ -1,2 +1,2 @@ -webpackJsonp([0],{0:function(t,e,o){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function r(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function l(t){if("web"==d.OS){var e=t.nativeEvent.changedTouches[0];return{pageX:e.pageX,pageY:e.pageY}}return{pageX:t.nativeEvent.pageX,pageY:t.nativeEvent.pageY}}var a=function(){function t(t,e){for(var o=0;o4&&_.whiteText,t.value>100&&_.threeDigits,t.value>1e3&&_.fourDigits];return s.createElement(p.View,{style:e},s.createElement(h,{style:o},t.value))}}]),e}(s.Component),k=function(t){function e(){return n(this,e),r(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),a(e,[{key:"render",value:function(){var t=this.props.board;if(!t.hasWon()&&!t.hasLost())return s.createElement(f,null);var e=t.hasWon()?"Good Job!":"Game Over";return s.createElement(f,{style:_.overlay},s.createElement(h,{style:_.overlayMessage},e),s.createElement(m,{onPress:this.props.onRestart,style:_.tryAgain},s.createElement(h,{style:_.tryAgainText},"Try Again?")))}}]),e}(s.Component),T=function(t){function e(t){n(this,e);var o=r(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return o.state={board:new g},o.startX=0,o.startY=0,o}return i(e,t),a(e,[{key:"restartGame",value:function(){this.setState({board:new g})}},{key:"handleTouchStart",value:function(t){if(!this.state.board.hasWon()){var e=l(t);this.startX=e.pageX,this.startY=e.pageY}}},{key:"handleTouchEnd",value:function(t){if(!this.state.board.hasWon()){var e=l(t),o=e.pageX-this.startX,n=e.pageY-this.startY,r=-1;Math.abs(o)>3*Math.abs(n)&&Math.abs(o)>30?r=o>0?2:0:Math.abs(n)>3*Math.abs(o)&&Math.abs(n)>30&&(r=n>0?3:1),r!==-1&&this.setState({board:this.state.board.move(r)})}}},{key:"render",value:function(){var t=this,e=this.state.board.tiles.filter(function(t){return t.value}).map(function(t){return s.createElement(C,{ref:t.id,key:t.id,tile:t})});return s.createElement(f,{style:_.container,onTouchStart:function(e){return t.handleTouchStart(e)},onTouchEnd:function(e){return t.handleTouchEnd(e)}},s.createElement(E,null,e),s.createElement(k,{board:this.state.board,onRestart:function(){return t.restartGame()}}))}}]),e}(s.Component),_=c.create({container:{flex:1,justifyContent:"center",alignItems:"center"},board:{padding:v,backgroundColor:"#bbaaaa",borderRadius:5},overlay:{position:"absolute",top:0,bottom:0,left:0,right:0,backgroundColor:"rgba(221, 221, 221, 0.5)",flex:1,flexDirection:"column",justifyContent:"center",alignItems:"center"},overlayMessage:{fontSize:40,marginBottom:20},tryAgain:{backgroundColor:"#887766",padding:20,borderRadius:5},tryAgainText:{color:"#ffffff",fontSize:20,fontWeight:"500"},cell:{width:b,height:b,borderRadius:5,backgroundColor:"#ddccbb",margin:y},row:{flexDirection:"row"},tile:{position:"absolute",width:b,height:b,backgroundColor:"#ddccbb",borderRadius:5,flex:1,justifyContent:"center",alignItems:"center"},value:{fontSize:24,color:"#776666",fontFamily:"Verdana",fontWeight:"500"},tile2:{backgroundColor:"#eeeeee"},tile4:{backgroundColor:"#eeeecc"},tile8:{backgroundColor:"#ffbb88"},tile16:{backgroundColor:"#ff9966"},tile32:{backgroundColor:"#ff7755"},tile64:{backgroundColor:"#ff5533"},tile128:{backgroundColor:"#eecc77"},tile256:{backgroundColor:"#eecc66"},tile512:{backgroundColor:"#eecc55"},tile1024:{backgroundColor:"#eecc33"},tile2048:{backgroundColor:"#eecc22"},whiteText:{color:"#ffffff"},threeDigits:{fontSize:20},fourDigits:{fontSize:18}});if(u.registerComponent("Game2048",function(){return T}),"web"==d.OS){var O=document.createElement("div");document.body.appendChild(O),u.runApplication("Game2048",{rootTag:O})}t.exports=T},446:function(t,e){"use strict";var o=function(t){for(var e=t.length,o=t[0].length,n=[],r=0;r0&&o[0].value===l.value){var a=l;l=this.addTile(l.value),a.mergedInto=l;var s=o.shift();s.mergedInto=l,l.value+=s.value}n[i]=l,this.won=this.won||2048===l.value,t=t||l.value!==this.cells[e][i].value}this.cells[e]=n}return t},r.prototype.setPositions=function(){this.cells.forEach(function(t,e){t.forEach(function(t,o){t.oldRow=t.row,t.oldColumn=t.column,t.row=e,t.column=o,t.markForDeletion=!1})})},r.fourProbability=.1,r.prototype.addRandomTile=function(){for(var t=[],e=0;e=r.size||l<0||l>=r.size||(t=t||this.cells[e][o].value===this.cells[i][l].value)}}return!t},t.exports=r}}); +webpackJsonp([0],{0:function(t,e,o){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function r(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function l(t){if("web"==d.OS){var e=t.nativeEvent.changedTouches[0];return{pageX:e.pageX,pageY:e.pageY}}return{pageX:t.nativeEvent.pageX,pageY:t.nativeEvent.pageY}}var a=function(){function t(t,e){for(var o=0;o4&&_.whiteText,t.value>100&&_.threeDigits,t.value>1e3&&_.fourDigits];return s.createElement(p.View,{style:e},s.createElement(h,{style:o},t.value))}}]),e}(s.Component),k=function(t){function e(){return n(this,e),r(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),a(e,[{key:"render",value:function(){var t=this.props.board;if(!t.hasWon()&&!t.hasLost())return s.createElement(f,null);var e=t.hasWon()?"Good Job!":"Game Over";return s.createElement(f,{style:_.overlay},s.createElement(h,{style:_.overlayMessage},e),s.createElement(m,{onPress:this.props.onRestart,style:_.tryAgain},s.createElement(h,{style:_.tryAgainText},"Try Again?")))}}]),e}(s.Component),T=function(t){function e(t){n(this,e);var o=r(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return o.state={board:new g},o.startX=0,o.startY=0,o}return i(e,t),a(e,[{key:"restartGame",value:function(){this.setState({board:new g})}},{key:"handleTouchStart",value:function(t){if(!this.state.board.hasWon()){var e=l(t);this.startX=e.pageX,this.startY=e.pageY}}},{key:"handleTouchEnd",value:function(t){if(!this.state.board.hasWon()){var e=l(t),o=e.pageX-this.startX,n=e.pageY-this.startY,r=-1;Math.abs(o)>3*Math.abs(n)&&Math.abs(o)>30?r=o>0?2:0:Math.abs(n)>3*Math.abs(o)&&Math.abs(n)>30&&(r=n>0?3:1),r!==-1&&this.setState({board:this.state.board.move(r)})}}},{key:"render",value:function(){var t=this,e=this.state.board.tiles.filter(function(t){return t.value}).map(function(t){return s.createElement(C,{ref:t.id,key:t.id,tile:t})});return s.createElement(f,{style:_.container,onTouchStart:function(e){return t.handleTouchStart(e)},onTouchEnd:function(e){return t.handleTouchEnd(e)}},s.createElement(E,null,e),s.createElement(k,{board:this.state.board,onRestart:function(){return t.restartGame()}}))}}]),e}(s.Component),_=c.create({container:{flex:1,justifyContent:"center",alignItems:"center"},board:{padding:v,backgroundColor:"#bbaaaa",borderRadius:5},overlay:{position:"absolute",top:0,bottom:0,left:0,right:0,backgroundColor:"rgba(221, 221, 221, 0.5)",flex:1,flexDirection:"column",justifyContent:"center",alignItems:"center"},overlayMessage:{fontSize:40,marginBottom:20},tryAgain:{backgroundColor:"#887766",padding:20,borderRadius:5},tryAgainText:{color:"#ffffff",fontSize:20,fontWeight:"500"},cell:{width:b,height:b,borderRadius:5,backgroundColor:"#ddccbb",margin:y},row:{flexDirection:"row"},tile:{position:"absolute",width:b,height:b,backgroundColor:"#ddccbb",borderRadius:5,flex:1,justifyContent:"center",alignItems:"center"},value:{fontSize:24,color:"#776666",fontFamily:"Verdana",fontWeight:"500"},tile2:{backgroundColor:"#eeeeee"},tile4:{backgroundColor:"#eeeecc"},tile8:{backgroundColor:"#ffbb88"},tile16:{backgroundColor:"#ff9966"},tile32:{backgroundColor:"#ff7755"},tile64:{backgroundColor:"#ff5533"},tile128:{backgroundColor:"#eecc77"},tile256:{backgroundColor:"#eecc66"},tile512:{backgroundColor:"#eecc55"},tile1024:{backgroundColor:"#eecc33"},tile2048:{backgroundColor:"#eecc22"},whiteText:{color:"#ffffff"},threeDigits:{fontSize:20},fourDigits:{fontSize:18}});if(u.registerComponent("Game2048",function(){return T}),"web"==d.OS){var O=document.createElement("div");document.body.appendChild(O),u.runApplication("Game2048",{rootTag:O})}t.exports=T},330:function(t,e){"use strict";var o=function(t){for(var e=t.length,o=t[0].length,n=[],r=0;r0&&o[0].value===l.value){var a=l;l=this.addTile(l.value),a.mergedInto=l;var s=o.shift();s.mergedInto=l,l.value+=s.value}n[i]=l,this.won=this.won||2048===l.value,t=t||l.value!==this.cells[e][i].value}this.cells[e]=n}return t},r.prototype.setPositions=function(){this.cells.forEach(function(t,e){t.forEach(function(t,o){t.oldRow=t.row,t.oldColumn=t.column,t.row=e,t.column=o,t.markForDeletion=!1})})},r.fourProbability=.1,r.prototype.addRandomTile=function(){for(var t=[],e=0;e=r.size||l<0||l>=r.size||(t=t||this.cells[e][o].value===this.cells[i][l].value)}}return!t},t.exports=r}}); //# sourceMappingURL=game2048.js.map \ No newline at end of file diff --git a/pages/game2048.js.map b/pages/game2048.js.map index 71caabd..9a221f0 100644 --- a/pages/game2048.js.map +++ b/pages/game2048.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///game2048.js","webpack:///./Examples/2048/Game2048.js","webpack:///./Examples/2048/GameBoard.js"],"names":["webpackJsonp","0","module","exports","__webpack_require__","_classCallCheck","instance","Constructor","TypeError","_possibleConstructorReturn","self","call","ReferenceError","_inherits","subClass","superClass","prototype","Object","create","constructor","value","enumerable","writable","configurable","setPrototypeOf","__proto__","getPageXY","event","Platform","OS","touch","nativeEvent","changedTouches","pageX","pageY","_createClass","defineProperties","target","props","i","length","descriptor","defineProperty","key","protoProps","staticProps","React","AppRegistry","StyleSheet","Text","View","Animated","TouchableBounce","GameBoard","BOARD_PADDING","CELL_MARGIN","CELL_SIZE","Cell","_React$Component","this","getPrototypeOf","apply","arguments","createElement","style","styles","cell","Component","Board","_React$Component2","board","row","children","Tile","_React$Component3","_this3","tile","state","opacity","Value","top","_getPosition","toRow","left","toColumn","index","offset","isNew","timing","duration","toValue","start","parallel","tileStyles","calculateOffset","textStyles","whiteText","threeDigits","fourDigits","GameEndOverlay","_React$Component4","hasWon","hasLost","message","overlay","overlayMessage","onPress","onRestart","tryAgain","tryAgainText","Game2048","_React$Component5","_this5","startX","startY","setState","deltaX","deltaY","direction","Math","abs","move","_this6","tiles","filter","map","ref","id","container","onTouchStart","handleTouchStart","onTouchEnd","handleTouchEnd","restartGame","flex","justifyContent","alignItems","padding","backgroundColor","borderRadius","position","bottom","right","flexDirection","fontSize","marginBottom","color","fontWeight","width","height","margin","fontFamily","tile2","tile4","tile8","tile16","tile32","tile64","tile128","tile256","tile512","tile1024","tile2048","registerComponent","app","document","body","appendChild","runApplication","rootTag","446","rotateLeft","matrix","rows","columns","res","push","column","oldRow","oldColumn","markForDeletion","mergedInto","moveTo","hasMoved","fromRow","fromColumn","cells","size","addTile","addRandomTile","setPositions","won","moveLeft","hasChanged","currentRow","resultRow","targetTile","shift","tile1","forEach","rowIndex","columnIndex","fourProbability","emptyCells","r","c","floor","random","newValue","clearOldTiles","canMove","dir","newRow","newColumn"],"mappings":"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","file":"game2048.js","sourcesContent":["webpackJsonp([0],{\n\n/***/ 0:\n/***/ function(module, exports, __webpack_require__) {\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t'use strict';var _createClass=function(){function defineProperties(target,props){for(var i=0;i4&&styles.whiteText,\n\ttile.value>100&&styles.threeDigits,\n\ttile.value>1000&&styles.fourDigits];\n\t\n\t\n\treturn(\n\tReact.createElement(Animated.View,{style:tileStyles},\n\tReact.createElement(Text,{style:textStyles},tile.value)));\n\t\n\t\n\t}}]);return Tile;}(React.Component);var\n\t\n\t\n\tGameEndOverlay=function(_React$Component4){_inherits(GameEndOverlay,_React$Component4);function GameEndOverlay(){_classCallCheck(this,GameEndOverlay);return _possibleConstructorReturn(this,(GameEndOverlay.__proto__||Object.getPrototypeOf(GameEndOverlay)).apply(this,arguments));}_createClass(GameEndOverlay,[{key:'render',value:function render()\n\t{\n\tvar board=this.props.board;\n\t\n\tif(!board.hasWon()&&!board.hasLost()){\n\treturn React.createElement(View,null);\n\t}\n\t\n\tvar message=board.hasWon()?\n\t'Good Job!':'Game Over';\n\t\n\treturn(\n\tReact.createElement(View,{style:styles.overlay},\n\tReact.createElement(Text,{style:styles.overlayMessage},message),\n\tReact.createElement(TouchableBounce,{onPress:this.props.onRestart,style:styles.tryAgain},\n\tReact.createElement(Text,{style:styles.tryAgainText},'Try Again?'))));\n\t\n\t\n\t\n\t}}]);return GameEndOverlay;}(React.Component);var\n\t\n\t\n\tGame2048=function(_React$Component5){_inherits(Game2048,_React$Component5);\n\t\n\t\n\t\n\tfunction Game2048(props){_classCallCheck(this,Game2048);var _this5=_possibleConstructorReturn(this,(Game2048.__proto__||Object.getPrototypeOf(Game2048)).call(this,\n\tprops));\n\t_this5.state={\n\tboard:new GameBoard()};\n\t\n\t_this5.startX=0;\n\t_this5.startY=0;return _this5;\n\t}_createClass(Game2048,[{key:'restartGame',value:function restartGame()\n\t\n\t{\n\tthis.setState({board:new GameBoard()});\n\t}},{key:'handleTouchStart',value:function handleTouchStart(\n\t\n\tevent){\n\tif(this.state.board.hasWon()){\n\treturn;\n\t}\n\t\n\tvar touch=getPageXY(event);\n\tthis.startX=touch.pageX;\n\tthis.startY=touch.pageY;\n\t\n\t}},{key:'handleTouchEnd',value:function handleTouchEnd(\n\t\n\tevent){\n\tif(this.state.board.hasWon()){\n\treturn;\n\t}\n\t\n\tvar touch=getPageXY(event);\n\tvar deltaX=touch.pageX-this.startX;\n\tvar deltaY=touch.pageY-this.startY;\n\t\n\tvar direction=-1;\n\tif(Math.abs(deltaX)>3*Math.abs(deltaY)&&Math.abs(deltaX)>30){\n\tdirection=deltaX>0?2:0;\n\t}else if(Math.abs(deltaY)>3*Math.abs(deltaX)&&Math.abs(deltaY)>30){\n\tdirection=deltaY>0?3:1;\n\t}\n\t\n\tif(direction!==-1){\n\tthis.setState({board:this.state.board.move(direction)});\n\t}\n\t}},{key:'render',value:function render()\n\t\n\t{var _this6=this;\n\tvar tiles=this.state.board.tiles.\n\tfilter(function(tile){return tile.value;}).\n\tmap(function(tile){return React.createElement(Tile,{ref:tile.id,key:tile.id,tile:tile});});\n\t\n\treturn(\n\tReact.createElement(View,{\n\tstyle:styles.container,\n\tonTouchStart:function onTouchStart(event){return _this6.handleTouchStart(event);},\n\tonTouchEnd:function onTouchEnd(event){return _this6.handleTouchEnd(event);}},\n\tReact.createElement(Board,null,\n\ttiles),\n\t\n\tReact.createElement(GameEndOverlay,{board:this.state.board,onRestart:function onRestart(){return _this6.restartGame();}})));\n\t\n\t\n\t}}]);return Game2048;}(React.Component);\n\t\n\t\n\tvar styles=StyleSheet.create({\n\tcontainer:{\n\tflex:1,\n\tjustifyContent:'center',\n\talignItems:'center'},\n\t\n\tboard:{\n\tpadding:BOARD_PADDING,\n\tbackgroundColor:'#bbaaaa',\n\tborderRadius:5},\n\t\n\toverlay:{\n\tposition:'absolute',\n\ttop:0,\n\tbottom:0,\n\tleft:0,\n\tright:0,\n\tbackgroundColor:'rgba(221, 221, 221, 0.5)',\n\tflex:1,\n\tflexDirection:'column',\n\tjustifyContent:'center',\n\talignItems:'center'},\n\t\n\toverlayMessage:{\n\tfontSize:40,\n\tmarginBottom:20},\n\t\n\ttryAgain:{\n\tbackgroundColor:'#887766',\n\tpadding:20,\n\tborderRadius:5},\n\t\n\ttryAgainText:{\n\tcolor:'#ffffff',\n\tfontSize:20,\n\tfontWeight:'500'},\n\t\n\tcell:{\n\twidth:CELL_SIZE,\n\theight:CELL_SIZE,\n\tborderRadius:5,\n\tbackgroundColor:'#ddccbb',\n\tmargin:CELL_MARGIN},\n\t\n\trow:{\n\tflexDirection:'row'},\n\t\n\ttile:{\n\tposition:'absolute',\n\twidth:CELL_SIZE,\n\theight:CELL_SIZE,\n\tbackgroundColor:'#ddccbb',\n\tborderRadius:5,\n\tflex:1,\n\tjustifyContent:'center',\n\talignItems:'center'},\n\t\n\tvalue:{\n\tfontSize:24,\n\tcolor:'#776666',\n\tfontFamily:'Verdana',\n\tfontWeight:'500'},\n\t\n\ttile2:{\n\tbackgroundColor:'#eeeeee'},\n\t\n\ttile4:{\n\tbackgroundColor:'#eeeecc'},\n\t\n\ttile8:{\n\tbackgroundColor:'#ffbb88'},\n\t\n\ttile16:{\n\tbackgroundColor:'#ff9966'},\n\t\n\ttile32:{\n\tbackgroundColor:'#ff7755'},\n\t\n\ttile64:{\n\tbackgroundColor:'#ff5533'},\n\t\n\ttile128:{\n\tbackgroundColor:'#eecc77'},\n\t\n\ttile256:{\n\tbackgroundColor:'#eecc66'},\n\t\n\ttile512:{\n\tbackgroundColor:'#eecc55'},\n\t\n\ttile1024:{\n\tbackgroundColor:'#eecc33'},\n\t\n\ttile2048:{\n\tbackgroundColor:'#eecc22'},\n\t\n\twhiteText:{\n\tcolor:'#ffffff'},\n\t\n\tthreeDigits:{\n\tfontSize:20},\n\t\n\tfourDigits:{\n\tfontSize:18}});\n\t\n\t\n\t\n\tAppRegistry.registerComponent('Game2048',function(){return Game2048;});\n\t\n\tif(Platform.OS=='web'){\n\tvar app=document.createElement('div');\n\tdocument.body.appendChild(app);\n\t\n\tAppRegistry.runApplication('Game2048',{\n\trootTag:app});\n\t\n\t}\n\t\n\tmodule.exports=Game2048;\n\n/***/ },\n\n/***/ 446:\n/***/ function(module, exports) {\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t'use strict';\n\t\n\t\n\t\n\t\n\tvar rotateLeft=function rotateLeft(matrix){\n\tvar rows=matrix.length;\n\tvar columns=matrix[0].length;\n\tvar res=[];\n\tfor(var row=0;row0&¤tRow[0].value===targetTile.value){\n\tvar tile1=targetTile;\n\ttargetTile=this.addTile(targetTile.value);\n\ttile1.mergedInto=targetTile;\n\tvar tile2=currentRow.shift();\n\ttile2.mergedInto=targetTile;\n\ttargetTile.value+=tile2.value;\n\t}\n\tresultRow[target]=targetTile;\n\tthis.won=this.won||targetTile.value===2048;\n\thasChanged=hasChanged||targetTile.value!==this.cells[row][target].value;\n\t}\n\tthis.cells[row]=resultRow;\n\t}\n\treturn hasChanged;\n\t};\n\t\n\tBoard.prototype.setPositions=function(){\n\tthis.cells.forEach(function(row,rowIndex){\n\trow.forEach(function(tile,columnIndex){\n\ttile.oldRow=tile.row;\n\ttile.oldColumn=tile.column;\n\ttile.row=rowIndex;\n\ttile.column=columnIndex;\n\ttile.markForDeletion=false;\n\t});\n\t});\n\t};\n\t\n\tBoard.fourProbability=0.1;\n\t\n\tBoard.prototype.addRandomTile=function(){\n\tvar emptyCells=[];\n\tfor(var r=0;r=Board.size||newColumn<0||newColumn>=Board.size){\n\tcontinue;\n\t}\n\tcanMove=canMove||this.cells[row][column].value===this.cells[newRow][newColumn].value;\n\t}\n\t}\n\t}\n\treturn!canMove;\n\t};\n\t\n\tmodule.exports=Board;\n\n/***/ }\n\n});\n\n\n/** WEBPACK FOOTER **\n ** game2048.js\n **/","/**\n * The examples provided by Facebook are for non-commercial testing and\n * evaluation purposes only.\n *\n * Facebook reserves all rights not expressly granted.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL\n * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\n * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * @providesModule Game2048\n * @flow\n */\n'use strict';\n\nvar React = require('react-native');\nvar {\n AppRegistry,\n StyleSheet,\n Text,\n View,\n Platform,\n Animated,\n TouchableBounce,\n} = React;\n\nfunction getPageXY(event){\n if (Platform.OS == 'web') {\n var touch = event.nativeEvent.changedTouches[0];\n return {\n pageX: touch.pageX,\n pageY: touch.pageY\n }\n } else {\n return {\n pageX: event.nativeEvent.pageX,\n pageY: event.nativeEvent.pageY\n }\n }\n}\n\nvar GameBoard = require('GameBoard');\n\nvar BOARD_PADDING = 3;\nvar CELL_MARGIN = 4;\nvar CELL_SIZE = 60;\n\nclass Cell extends React.Component {\n render() {\n return ;\n }\n}\n\nclass Board extends React.Component {\n render() {\n return (\n \n \n \n \n \n {this.props.children}\n \n );\n }\n}\n\nclass Tile extends React.Component {\n static _getPosition(index): number {\n return BOARD_PADDING + (index * (CELL_SIZE + CELL_MARGIN * 2) + CELL_MARGIN);\n }\n\n constructor(props: {}) {\n super(props);\n\n var tile = this.props.tile;\n\n this.state = {\n opacity: new Animated.Value(0),\n top: new Animated.Value(Tile._getPosition(tile.toRow())),\n left: new Animated.Value(Tile._getPosition(tile.toColumn())),\n };\n }\n\n calculateOffset(): {top: number; left: number; opacity: number} {\n var tile = this.props.tile;\n\n var offset = {\n top: this.state.top,\n left: this.state.left,\n opacity: this.state.opacity,\n };\n\n if (tile.isNew()) {\n Animated.timing(this.state.opacity, {\n duration: 100,\n toValue: 1,\n }).start();\n } else {\n Animated.parallel([\n Animated.timing(offset.top, {\n duration: 100,\n toValue: Tile._getPosition(tile.toRow()),\n }),\n Animated.timing(offset.left, {\n duration: 100,\n toValue: Tile._getPosition(tile.toColumn()),\n }),\n ]).start();\n }\n return offset;\n }\n\n render() {\n var tile = this.props.tile;\n\n var tileStyles = [\n styles.tile,\n styles['tile' + tile.value],\n this.calculateOffset(),\n ];\n\n var textStyles = [\n styles.value,\n tile.value > 4 && styles.whiteText,\n tile.value > 100 && styles.threeDigits,\n tile.value > 1000 && styles.fourDigits,\n ];\n\n return (\n \n {tile.value}\n \n );\n }\n}\n\nclass GameEndOverlay extends React.Component {\n render() {\n var board = this.props.board;\n\n if (!board.hasWon() && !board.hasLost()) {\n return ;\n }\n\n var message = board.hasWon() ?\n 'Good Job!' : 'Game Over';\n\n return (\n \n {message}\n \n Try Again?\n \n \n );\n }\n}\n\nclass Game2048 extends React.Component {\n startX: number;\n startY: number;\n\n constructor(props: {}) {\n super(props);\n this.state = {\n board: new GameBoard(),\n };\n this.startX = 0;\n this.startY = 0;\n }\n\n restartGame() {\n this.setState({board: new GameBoard()});\n }\n\n handleTouchStart(event: Object) {\n if (this.state.board.hasWon()) {\n return;\n }\n\n var touch = getPageXY(event);\n this.startX = touch.pageX;\n this.startY = touch.pageY;\n\n }\n\n handleTouchEnd(event: Object) {\n if (this.state.board.hasWon()) {\n return;\n }\n\n var touch = getPageXY(event);\n var deltaX = touch.pageX - this.startX;\n var deltaY = touch.pageY - this.startY;\n\n var direction = -1;\n if (Math.abs(deltaX) > 3 * Math.abs(deltaY) && Math.abs(deltaX) > 30) {\n direction = deltaX > 0 ? 2 : 0;\n } else if (Math.abs(deltaY) > 3 * Math.abs(deltaX) && Math.abs(deltaY) > 30) {\n direction = deltaY > 0 ? 3 : 1;\n }\n\n if (direction !== -1) {\n this.setState({board: this.state.board.move(direction)});\n }\n }\n\n render() {\n var tiles = this.state.board.tiles\n .filter((tile) => tile.value)\n .map((tile) => );\n\n return (\n this.handleTouchStart(event)}\n onTouchEnd={(event) => this.handleTouchEnd(event)}>\n \n {tiles}\n \n this.restartGame()} />\n \n );\n }\n}\n\nvar styles = StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n },\n board: {\n padding: BOARD_PADDING,\n backgroundColor: '#bbaaaa',\n borderRadius: 5,\n },\n overlay: {\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n backgroundColor: 'rgba(221, 221, 221, 0.5)',\n flex: 1,\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n },\n overlayMessage: {\n fontSize: 40,\n marginBottom: 20,\n },\n tryAgain: {\n backgroundColor: '#887766',\n padding: 20,\n borderRadius: 5,\n },\n tryAgainText: {\n color: '#ffffff',\n fontSize: 20,\n fontWeight: '500',\n },\n cell: {\n width: CELL_SIZE,\n height: CELL_SIZE,\n borderRadius: 5,\n backgroundColor: '#ddccbb',\n margin: CELL_MARGIN,\n },\n row: {\n flexDirection: 'row',\n },\n tile: {\n position: 'absolute',\n width: CELL_SIZE,\n height: CELL_SIZE,\n backgroundColor: '#ddccbb',\n borderRadius: 5,\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n },\n value: {\n fontSize: 24,\n color: '#776666',\n fontFamily: 'Verdana',\n fontWeight: '500',\n },\n tile2: {\n backgroundColor: '#eeeeee',\n },\n tile4: {\n backgroundColor: '#eeeecc',\n },\n tile8: {\n backgroundColor: '#ffbb88',\n },\n tile16: {\n backgroundColor: '#ff9966',\n },\n tile32: {\n backgroundColor: '#ff7755',\n },\n tile64: {\n backgroundColor: '#ff5533',\n },\n tile128: {\n backgroundColor: '#eecc77',\n },\n tile256: {\n backgroundColor: '#eecc66',\n },\n tile512: {\n backgroundColor: '#eecc55',\n },\n tile1024: {\n backgroundColor: '#eecc33',\n },\n tile2048: {\n backgroundColor: '#eecc22',\n },\n whiteText: {\n color: '#ffffff',\n },\n threeDigits: {\n fontSize: 20,\n },\n fourDigits: {\n fontSize: 18,\n },\n});\n\nAppRegistry.registerComponent('Game2048', () => Game2048);\n\nif(Platform.OS == 'web'){\n var app = document.createElement('div');\n document.body.appendChild(app);\n\n AppRegistry.runApplication('Game2048', {\n rootTag: app\n })\n}\n\nmodule.exports = Game2048;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Examples/2048/Game2048.js\n **/","/**\n * The examples provided by Facebook are for non-commercial testing and\n * evaluation purposes only.\n *\n * Facebook reserves all rights not expressly granted.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL\n * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\n * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * @providesModule GameBoard\n * @flow\n */\n'use strict';\n\n// NB: Taken straight from: https://github.com/IvanVergiliev/2048-react/blob/master/src/board.js\n// with no modificiation except to format it for CommonJS and fix lint/flow errors\n\nvar rotateLeft = function (matrix) {\n var rows = matrix.length;\n var columns = matrix[0].length;\n var res = [];\n for (var row = 0; row < rows; ++row) {\n res.push([]);\n for (var column = 0; column < columns; ++column) {\n res[row][column] = matrix[column][columns - row - 1];\n }\n }\n return res;\n};\n\nvar Tile = function (value?: number, row?: number, column?: number) {\n this.value = value || 0;\n this.row = row || -1;\n\n this.column = column || -1;\n this.oldRow = -1;\n this.oldColumn = -1;\n this.markForDeletion = false;\n this.mergedInto = null;\n this.id = Tile.id++;\n};\n\nTile.id = 0;\n\nTile.prototype.moveTo = function (row, column) {\n this.oldRow = this.row;\n this.oldColumn = this.column;\n this.row = row;\n this.column = column;\n};\n\nTile.prototype.isNew = function () {\n return this.oldRow === -1 && !this.mergedInto;\n};\n\nTile.prototype.hasMoved = function () {\n return (this.fromRow() !== -1 && (this.fromRow() !== this.toRow() || this.fromColumn() !== this.toColumn())) ||\n this.mergedInto;\n};\n\nTile.prototype.fromRow = function () {\n return this.mergedInto ? this.row : this.oldRow;\n};\n\nTile.prototype.fromColumn = function () {\n return this.mergedInto ? this.column : this.oldColumn;\n};\n\nTile.prototype.toRow = function () {\n return this.mergedInto ? this.mergedInto.row : this.row;\n};\n\nTile.prototype.toColumn = function () {\n return this.mergedInto ? this.mergedInto.column : this.column;\n};\n\nvar Board = function () {\n this.tiles = [];\n this.cells = [];\n for (var i = 0; i < Board.size; ++i) {\n this.cells[i] = [this.addTile(), this.addTile(), this.addTile(), this.addTile()];\n }\n this.addRandomTile();\n this.setPositions();\n this.won = false;\n};\n\nBoard.prototype.addTile = function () {\n var res = new Tile();\n Tile.apply(res, arguments);\n this.tiles.push(res);\n return res;\n};\n\nBoard.size = 4;\n\nBoard.prototype.moveLeft = function () {\n var hasChanged = false;\n for (var row = 0; row < Board.size; ++row) {\n var currentRow = this.cells[row].filter(function (tile) { return tile.value !== 0; });\n var resultRow = [];\n for (var target = 0; target < Board.size; ++target) {\n var targetTile = currentRow.length ? currentRow.shift() : this.addTile();\n if (currentRow.length > 0 && currentRow[0].value === targetTile.value) {\n var tile1 = targetTile;\n targetTile = this.addTile(targetTile.value);\n tile1.mergedInto = targetTile;\n var tile2 = currentRow.shift();\n tile2.mergedInto = targetTile;\n targetTile.value += tile2.value;\n }\n resultRow[target] = targetTile;\n this.won = this.won || (targetTile.value === 2048);\n hasChanged = hasChanged || (targetTile.value !== this.cells[row][target].value);\n }\n this.cells[row] = resultRow;\n }\n return hasChanged;\n};\n\nBoard.prototype.setPositions = function () {\n this.cells.forEach(function (row, rowIndex) {\n row.forEach(function (tile, columnIndex) {\n tile.oldRow = tile.row;\n tile.oldColumn = tile.column;\n tile.row = rowIndex;\n tile.column = columnIndex;\n tile.markForDeletion = false;\n });\n });\n};\n\nBoard.fourProbability = 0.1;\n\nBoard.prototype.addRandomTile = function () {\n var emptyCells = [];\n for (var r = 0; r < Board.size; ++r) {\n for (var c = 0; c < Board.size; ++c) {\n if (this.cells[r][c].value === 0) {\n emptyCells.push({r: r, c: c});\n }\n }\n }\n var index = Math.floor(Math.random() * emptyCells.length);\n var cell = emptyCells[index];\n var newValue = Math.random() < Board.fourProbability ? 4 : 2;\n this.cells[cell.r][cell.c] = this.addTile(newValue);\n};\n\nBoard.prototype.move = function (direction) {\n // 0 -> left, 1 -> up, 2 -> right, 3 -> down\n this.clearOldTiles();\n for (var i = 0; i < direction; ++i) {\n this.cells = rotateLeft(this.cells);\n }\n var hasChanged = this.moveLeft();\n for (var i = direction; i < 4; ++i) {\n this.cells = rotateLeft(this.cells);\n }\n if (hasChanged) {\n this.addRandomTile();\n }\n this.setPositions();\n return this;\n};\n\nBoard.prototype.clearOldTiles = function () {\n this.tiles = this.tiles.filter(function (tile) { return tile.markForDeletion === false; });\n this.tiles.forEach(function (tile) { tile.markForDeletion = true; });\n};\n\nBoard.prototype.hasWon = function () {\n return this.won;\n};\n\nBoard.deltaX = [-1, 0, 1, 0];\nBoard.deltaY = [0, -1, 0, 1];\n\nBoard.prototype.hasLost = function () {\n var canMove = false;\n for (var row = 0; row < Board.size; ++row) {\n for (var column = 0; column < Board.size; ++column) {\n canMove = canMove || (this.cells[row][column].value === 0);\n for (var dir = 0; dir < 4; ++dir) {\n var newRow = row + Board.deltaX[dir];\n var newColumn = column + Board.deltaY[dir];\n if (newRow < 0 || newRow >= Board.size || newColumn < 0 || newColumn >= Board.size) {\n continue;\n }\n canMove = canMove || (this.cells[row][column].value === this.cells[newRow][newColumn].value);\n }\n }\n }\n return !canMove;\n};\n\nmodule.exports = Board;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Examples/2048/GameBoard.js\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///game2048.js","webpack:///./Examples/2048/Game2048.js","webpack:///./Examples/2048/GameBoard.js"],"names":["webpackJsonp","0","module","exports","__webpack_require__","_classCallCheck","instance","Constructor","TypeError","_possibleConstructorReturn","self","call","ReferenceError","_inherits","subClass","superClass","prototype","Object","create","constructor","value","enumerable","writable","configurable","setPrototypeOf","__proto__","getPageXY","event","Platform","OS","touch","nativeEvent","changedTouches","pageX","pageY","_createClass","defineProperties","target","props","i","length","descriptor","defineProperty","key","protoProps","staticProps","React","AppRegistry","StyleSheet","Text","View","Animated","TouchableBounce","GameBoard","BOARD_PADDING","CELL_MARGIN","CELL_SIZE","Cell","_React$Component","this","getPrototypeOf","apply","arguments","createElement","style","styles","cell","Component","Board","_React$Component2","board","row","children","Tile","_React$Component3","_this3","tile","state","opacity","Value","top","_getPosition","toRow","left","toColumn","index","offset","isNew","timing","duration","toValue","start","parallel","tileStyles","calculateOffset","textStyles","whiteText","threeDigits","fourDigits","GameEndOverlay","_React$Component4","hasWon","hasLost","message","overlay","overlayMessage","onPress","onRestart","tryAgain","tryAgainText","Game2048","_React$Component5","_this5","startX","startY","setState","deltaX","deltaY","direction","Math","abs","move","_this6","tiles","filter","map","ref","id","container","onTouchStart","handleTouchStart","onTouchEnd","handleTouchEnd","restartGame","flex","justifyContent","alignItems","padding","backgroundColor","borderRadius","position","bottom","right","flexDirection","fontSize","marginBottom","color","fontWeight","width","height","margin","fontFamily","tile2","tile4","tile8","tile16","tile32","tile64","tile128","tile256","tile512","tile1024","tile2048","registerComponent","app","document","body","appendChild","runApplication","rootTag","330","rotateLeft","matrix","rows","columns","res","push","column","oldRow","oldColumn","markForDeletion","mergedInto","moveTo","hasMoved","fromRow","fromColumn","cells","size","addTile","addRandomTile","setPositions","won","moveLeft","hasChanged","currentRow","resultRow","targetTile","shift","tile1","forEach","rowIndex","columnIndex","fourProbability","emptyCells","r","c","floor","random","newValue","clearOldTiles","canMove","dir","newRow","newColumn"],"mappings":"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","file":"game2048.js","sourcesContent":["webpackJsonp([0],{\n\n/***/ 0:\n/***/ function(module, exports, __webpack_require__) {\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t'use strict';var _createClass=function(){function defineProperties(target,props){for(var i=0;i4&&styles.whiteText,\n\ttile.value>100&&styles.threeDigits,\n\ttile.value>1000&&styles.fourDigits];\n\t\n\t\n\treturn(\n\tReact.createElement(Animated.View,{style:tileStyles},\n\tReact.createElement(Text,{style:textStyles},tile.value)));\n\t\n\t\n\t}}]);return Tile;}(React.Component);var\n\t\n\t\n\tGameEndOverlay=function(_React$Component4){_inherits(GameEndOverlay,_React$Component4);function GameEndOverlay(){_classCallCheck(this,GameEndOverlay);return _possibleConstructorReturn(this,(GameEndOverlay.__proto__||Object.getPrototypeOf(GameEndOverlay)).apply(this,arguments));}_createClass(GameEndOverlay,[{key:'render',value:function render()\n\t{\n\tvar board=this.props.board;\n\t\n\tif(!board.hasWon()&&!board.hasLost()){\n\treturn React.createElement(View,null);\n\t}\n\t\n\tvar message=board.hasWon()?\n\t'Good Job!':'Game Over';\n\t\n\treturn(\n\tReact.createElement(View,{style:styles.overlay},\n\tReact.createElement(Text,{style:styles.overlayMessage},message),\n\tReact.createElement(TouchableBounce,{onPress:this.props.onRestart,style:styles.tryAgain},\n\tReact.createElement(Text,{style:styles.tryAgainText},'Try Again?'))));\n\t\n\t\n\t\n\t}}]);return GameEndOverlay;}(React.Component);var\n\t\n\t\n\tGame2048=function(_React$Component5){_inherits(Game2048,_React$Component5);\n\t\n\t\n\t\n\tfunction Game2048(props){_classCallCheck(this,Game2048);var _this5=_possibleConstructorReturn(this,(Game2048.__proto__||Object.getPrototypeOf(Game2048)).call(this,\n\tprops));\n\t_this5.state={\n\tboard:new GameBoard()};\n\t\n\t_this5.startX=0;\n\t_this5.startY=0;return _this5;\n\t}_createClass(Game2048,[{key:'restartGame',value:function restartGame()\n\t\n\t{\n\tthis.setState({board:new GameBoard()});\n\t}},{key:'handleTouchStart',value:function handleTouchStart(\n\t\n\tevent){\n\tif(this.state.board.hasWon()){\n\treturn;\n\t}\n\t\n\tvar touch=getPageXY(event);\n\tthis.startX=touch.pageX;\n\tthis.startY=touch.pageY;\n\t\n\t}},{key:'handleTouchEnd',value:function handleTouchEnd(\n\t\n\tevent){\n\tif(this.state.board.hasWon()){\n\treturn;\n\t}\n\t\n\tvar touch=getPageXY(event);\n\tvar deltaX=touch.pageX-this.startX;\n\tvar deltaY=touch.pageY-this.startY;\n\t\n\tvar direction=-1;\n\tif(Math.abs(deltaX)>3*Math.abs(deltaY)&&Math.abs(deltaX)>30){\n\tdirection=deltaX>0?2:0;\n\t}else if(Math.abs(deltaY)>3*Math.abs(deltaX)&&Math.abs(deltaY)>30){\n\tdirection=deltaY>0?3:1;\n\t}\n\t\n\tif(direction!==-1){\n\tthis.setState({board:this.state.board.move(direction)});\n\t}\n\t}},{key:'render',value:function render()\n\t\n\t{var _this6=this;\n\tvar tiles=this.state.board.tiles.\n\tfilter(function(tile){return tile.value;}).\n\tmap(function(tile){return React.createElement(Tile,{ref:tile.id,key:tile.id,tile:tile});});\n\t\n\treturn(\n\tReact.createElement(View,{\n\tstyle:styles.container,\n\tonTouchStart:function onTouchStart(event){return _this6.handleTouchStart(event);},\n\tonTouchEnd:function onTouchEnd(event){return _this6.handleTouchEnd(event);}},\n\tReact.createElement(Board,null,\n\ttiles),\n\t\n\tReact.createElement(GameEndOverlay,{board:this.state.board,onRestart:function onRestart(){return _this6.restartGame();}})));\n\t\n\t\n\t}}]);return Game2048;}(React.Component);\n\t\n\t\n\tvar styles=StyleSheet.create({\n\tcontainer:{\n\tflex:1,\n\tjustifyContent:'center',\n\talignItems:'center'},\n\t\n\tboard:{\n\tpadding:BOARD_PADDING,\n\tbackgroundColor:'#bbaaaa',\n\tborderRadius:5},\n\t\n\toverlay:{\n\tposition:'absolute',\n\ttop:0,\n\tbottom:0,\n\tleft:0,\n\tright:0,\n\tbackgroundColor:'rgba(221, 221, 221, 0.5)',\n\tflex:1,\n\tflexDirection:'column',\n\tjustifyContent:'center',\n\talignItems:'center'},\n\t\n\toverlayMessage:{\n\tfontSize:40,\n\tmarginBottom:20},\n\t\n\ttryAgain:{\n\tbackgroundColor:'#887766',\n\tpadding:20,\n\tborderRadius:5},\n\t\n\ttryAgainText:{\n\tcolor:'#ffffff',\n\tfontSize:20,\n\tfontWeight:'500'},\n\t\n\tcell:{\n\twidth:CELL_SIZE,\n\theight:CELL_SIZE,\n\tborderRadius:5,\n\tbackgroundColor:'#ddccbb',\n\tmargin:CELL_MARGIN},\n\t\n\trow:{\n\tflexDirection:'row'},\n\t\n\ttile:{\n\tposition:'absolute',\n\twidth:CELL_SIZE,\n\theight:CELL_SIZE,\n\tbackgroundColor:'#ddccbb',\n\tborderRadius:5,\n\tflex:1,\n\tjustifyContent:'center',\n\talignItems:'center'},\n\t\n\tvalue:{\n\tfontSize:24,\n\tcolor:'#776666',\n\tfontFamily:'Verdana',\n\tfontWeight:'500'},\n\t\n\ttile2:{\n\tbackgroundColor:'#eeeeee'},\n\t\n\ttile4:{\n\tbackgroundColor:'#eeeecc'},\n\t\n\ttile8:{\n\tbackgroundColor:'#ffbb88'},\n\t\n\ttile16:{\n\tbackgroundColor:'#ff9966'},\n\t\n\ttile32:{\n\tbackgroundColor:'#ff7755'},\n\t\n\ttile64:{\n\tbackgroundColor:'#ff5533'},\n\t\n\ttile128:{\n\tbackgroundColor:'#eecc77'},\n\t\n\ttile256:{\n\tbackgroundColor:'#eecc66'},\n\t\n\ttile512:{\n\tbackgroundColor:'#eecc55'},\n\t\n\ttile1024:{\n\tbackgroundColor:'#eecc33'},\n\t\n\ttile2048:{\n\tbackgroundColor:'#eecc22'},\n\t\n\twhiteText:{\n\tcolor:'#ffffff'},\n\t\n\tthreeDigits:{\n\tfontSize:20},\n\t\n\tfourDigits:{\n\tfontSize:18}});\n\t\n\t\n\t\n\tAppRegistry.registerComponent('Game2048',function(){return Game2048;});\n\t\n\tif(Platform.OS=='web'){\n\tvar app=document.createElement('div');\n\tdocument.body.appendChild(app);\n\t\n\tAppRegistry.runApplication('Game2048',{\n\trootTag:app});\n\t\n\t}\n\t\n\tmodule.exports=Game2048;\n\n/***/ },\n\n/***/ 330:\n/***/ function(module, exports) {\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t'use strict';\n\t\n\t\n\t\n\t\n\tvar rotateLeft=function rotateLeft(matrix){\n\tvar rows=matrix.length;\n\tvar columns=matrix[0].length;\n\tvar res=[];\n\tfor(var row=0;row0&¤tRow[0].value===targetTile.value){\n\tvar tile1=targetTile;\n\ttargetTile=this.addTile(targetTile.value);\n\ttile1.mergedInto=targetTile;\n\tvar tile2=currentRow.shift();\n\ttile2.mergedInto=targetTile;\n\ttargetTile.value+=tile2.value;\n\t}\n\tresultRow[target]=targetTile;\n\tthis.won=this.won||targetTile.value===2048;\n\thasChanged=hasChanged||targetTile.value!==this.cells[row][target].value;\n\t}\n\tthis.cells[row]=resultRow;\n\t}\n\treturn hasChanged;\n\t};\n\t\n\tBoard.prototype.setPositions=function(){\n\tthis.cells.forEach(function(row,rowIndex){\n\trow.forEach(function(tile,columnIndex){\n\ttile.oldRow=tile.row;\n\ttile.oldColumn=tile.column;\n\ttile.row=rowIndex;\n\ttile.column=columnIndex;\n\ttile.markForDeletion=false;\n\t});\n\t});\n\t};\n\t\n\tBoard.fourProbability=0.1;\n\t\n\tBoard.prototype.addRandomTile=function(){\n\tvar emptyCells=[];\n\tfor(var r=0;r=Board.size||newColumn<0||newColumn>=Board.size){\n\tcontinue;\n\t}\n\tcanMove=canMove||this.cells[row][column].value===this.cells[newRow][newColumn].value;\n\t}\n\t}\n\t}\n\treturn!canMove;\n\t};\n\t\n\tmodule.exports=Board;\n\n/***/ }\n\n});\n\n\n/** WEBPACK FOOTER **\n ** game2048.js\n **/","/**\n * The examples provided by Facebook are for non-commercial testing and\n * evaluation purposes only.\n *\n * Facebook reserves all rights not expressly granted.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL\n * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\n * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * @providesModule Game2048\n * @flow\n */\n'use strict';\n\nvar React = require('react-native');\nvar {\n AppRegistry,\n StyleSheet,\n Text,\n View,\n Platform,\n Animated,\n TouchableBounce,\n} = React;\n\nfunction getPageXY(event){\n if (Platform.OS == 'web') {\n var touch = event.nativeEvent.changedTouches[0];\n return {\n pageX: touch.pageX,\n pageY: touch.pageY\n }\n } else {\n return {\n pageX: event.nativeEvent.pageX,\n pageY: event.nativeEvent.pageY\n }\n }\n}\n\nvar GameBoard = require('GameBoard');\n\nvar BOARD_PADDING = 3;\nvar CELL_MARGIN = 4;\nvar CELL_SIZE = 60;\n\nclass Cell extends React.Component {\n render() {\n return ;\n }\n}\n\nclass Board extends React.Component {\n render() {\n return (\n \n \n \n \n \n {this.props.children}\n \n );\n }\n}\n\nclass Tile extends React.Component {\n static _getPosition(index): number {\n return BOARD_PADDING + (index * (CELL_SIZE + CELL_MARGIN * 2) + CELL_MARGIN);\n }\n\n constructor(props: {}) {\n super(props);\n\n var tile = this.props.tile;\n\n this.state = {\n opacity: new Animated.Value(0),\n top: new Animated.Value(Tile._getPosition(tile.toRow())),\n left: new Animated.Value(Tile._getPosition(tile.toColumn())),\n };\n }\n\n calculateOffset(): {top: number; left: number; opacity: number} {\n var tile = this.props.tile;\n\n var offset = {\n top: this.state.top,\n left: this.state.left,\n opacity: this.state.opacity,\n };\n\n if (tile.isNew()) {\n Animated.timing(this.state.opacity, {\n duration: 100,\n toValue: 1,\n }).start();\n } else {\n Animated.parallel([\n Animated.timing(offset.top, {\n duration: 100,\n toValue: Tile._getPosition(tile.toRow()),\n }),\n Animated.timing(offset.left, {\n duration: 100,\n toValue: Tile._getPosition(tile.toColumn()),\n }),\n ]).start();\n }\n return offset;\n }\n\n render() {\n var tile = this.props.tile;\n\n var tileStyles = [\n styles.tile,\n styles['tile' + tile.value],\n this.calculateOffset(),\n ];\n\n var textStyles = [\n styles.value,\n tile.value > 4 && styles.whiteText,\n tile.value > 100 && styles.threeDigits,\n tile.value > 1000 && styles.fourDigits,\n ];\n\n return (\n \n {tile.value}\n \n );\n }\n}\n\nclass GameEndOverlay extends React.Component {\n render() {\n var board = this.props.board;\n\n if (!board.hasWon() && !board.hasLost()) {\n return ;\n }\n\n var message = board.hasWon() ?\n 'Good Job!' : 'Game Over';\n\n return (\n \n {message}\n \n Try Again?\n \n \n );\n }\n}\n\nclass Game2048 extends React.Component {\n startX: number;\n startY: number;\n\n constructor(props: {}) {\n super(props);\n this.state = {\n board: new GameBoard(),\n };\n this.startX = 0;\n this.startY = 0;\n }\n\n restartGame() {\n this.setState({board: new GameBoard()});\n }\n\n handleTouchStart(event: Object) {\n if (this.state.board.hasWon()) {\n return;\n }\n\n var touch = getPageXY(event);\n this.startX = touch.pageX;\n this.startY = touch.pageY;\n\n }\n\n handleTouchEnd(event: Object) {\n if (this.state.board.hasWon()) {\n return;\n }\n\n var touch = getPageXY(event);\n var deltaX = touch.pageX - this.startX;\n var deltaY = touch.pageY - this.startY;\n\n var direction = -1;\n if (Math.abs(deltaX) > 3 * Math.abs(deltaY) && Math.abs(deltaX) > 30) {\n direction = deltaX > 0 ? 2 : 0;\n } else if (Math.abs(deltaY) > 3 * Math.abs(deltaX) && Math.abs(deltaY) > 30) {\n direction = deltaY > 0 ? 3 : 1;\n }\n\n if (direction !== -1) {\n this.setState({board: this.state.board.move(direction)});\n }\n }\n\n render() {\n var tiles = this.state.board.tiles\n .filter((tile) => tile.value)\n .map((tile) => );\n\n return (\n this.handleTouchStart(event)}\n onTouchEnd={(event) => this.handleTouchEnd(event)}>\n \n {tiles}\n \n this.restartGame()} />\n \n );\n }\n}\n\nvar styles = StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n },\n board: {\n padding: BOARD_PADDING,\n backgroundColor: '#bbaaaa',\n borderRadius: 5,\n },\n overlay: {\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n backgroundColor: 'rgba(221, 221, 221, 0.5)',\n flex: 1,\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n },\n overlayMessage: {\n fontSize: 40,\n marginBottom: 20,\n },\n tryAgain: {\n backgroundColor: '#887766',\n padding: 20,\n borderRadius: 5,\n },\n tryAgainText: {\n color: '#ffffff',\n fontSize: 20,\n fontWeight: '500',\n },\n cell: {\n width: CELL_SIZE,\n height: CELL_SIZE,\n borderRadius: 5,\n backgroundColor: '#ddccbb',\n margin: CELL_MARGIN,\n },\n row: {\n flexDirection: 'row',\n },\n tile: {\n position: 'absolute',\n width: CELL_SIZE,\n height: CELL_SIZE,\n backgroundColor: '#ddccbb',\n borderRadius: 5,\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n },\n value: {\n fontSize: 24,\n color: '#776666',\n fontFamily: 'Verdana',\n fontWeight: '500',\n },\n tile2: {\n backgroundColor: '#eeeeee',\n },\n tile4: {\n backgroundColor: '#eeeecc',\n },\n tile8: {\n backgroundColor: '#ffbb88',\n },\n tile16: {\n backgroundColor: '#ff9966',\n },\n tile32: {\n backgroundColor: '#ff7755',\n },\n tile64: {\n backgroundColor: '#ff5533',\n },\n tile128: {\n backgroundColor: '#eecc77',\n },\n tile256: {\n backgroundColor: '#eecc66',\n },\n tile512: {\n backgroundColor: '#eecc55',\n },\n tile1024: {\n backgroundColor: '#eecc33',\n },\n tile2048: {\n backgroundColor: '#eecc22',\n },\n whiteText: {\n color: '#ffffff',\n },\n threeDigits: {\n fontSize: 20,\n },\n fourDigits: {\n fontSize: 18,\n },\n});\n\nAppRegistry.registerComponent('Game2048', () => Game2048);\n\nif(Platform.OS == 'web'){\n var app = document.createElement('div');\n document.body.appendChild(app);\n\n AppRegistry.runApplication('Game2048', {\n rootTag: app\n })\n}\n\nmodule.exports = Game2048;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Examples/2048/Game2048.js\n **/","/**\n * The examples provided by Facebook are for non-commercial testing and\n * evaluation purposes only.\n *\n * Facebook reserves all rights not expressly granted.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL\n * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\n * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * @providesModule GameBoard\n * @flow\n */\n'use strict';\n\n// NB: Taken straight from: https://github.com/IvanVergiliev/2048-react/blob/master/src/board.js\n// with no modificiation except to format it for CommonJS and fix lint/flow errors\n\nvar rotateLeft = function (matrix) {\n var rows = matrix.length;\n var columns = matrix[0].length;\n var res = [];\n for (var row = 0; row < rows; ++row) {\n res.push([]);\n for (var column = 0; column < columns; ++column) {\n res[row][column] = matrix[column][columns - row - 1];\n }\n }\n return res;\n};\n\nvar Tile = function (value?: number, row?: number, column?: number) {\n this.value = value || 0;\n this.row = row || -1;\n\n this.column = column || -1;\n this.oldRow = -1;\n this.oldColumn = -1;\n this.markForDeletion = false;\n this.mergedInto = null;\n this.id = Tile.id++;\n};\n\nTile.id = 0;\n\nTile.prototype.moveTo = function (row, column) {\n this.oldRow = this.row;\n this.oldColumn = this.column;\n this.row = row;\n this.column = column;\n};\n\nTile.prototype.isNew = function () {\n return this.oldRow === -1 && !this.mergedInto;\n};\n\nTile.prototype.hasMoved = function () {\n return (this.fromRow() !== -1 && (this.fromRow() !== this.toRow() || this.fromColumn() !== this.toColumn())) ||\n this.mergedInto;\n};\n\nTile.prototype.fromRow = function () {\n return this.mergedInto ? this.row : this.oldRow;\n};\n\nTile.prototype.fromColumn = function () {\n return this.mergedInto ? this.column : this.oldColumn;\n};\n\nTile.prototype.toRow = function () {\n return this.mergedInto ? this.mergedInto.row : this.row;\n};\n\nTile.prototype.toColumn = function () {\n return this.mergedInto ? this.mergedInto.column : this.column;\n};\n\nvar Board = function () {\n this.tiles = [];\n this.cells = [];\n for (var i = 0; i < Board.size; ++i) {\n this.cells[i] = [this.addTile(), this.addTile(), this.addTile(), this.addTile()];\n }\n this.addRandomTile();\n this.setPositions();\n this.won = false;\n};\n\nBoard.prototype.addTile = function () {\n var res = new Tile();\n Tile.apply(res, arguments);\n this.tiles.push(res);\n return res;\n};\n\nBoard.size = 4;\n\nBoard.prototype.moveLeft = function () {\n var hasChanged = false;\n for (var row = 0; row < Board.size; ++row) {\n var currentRow = this.cells[row].filter(function (tile) { return tile.value !== 0; });\n var resultRow = [];\n for (var target = 0; target < Board.size; ++target) {\n var targetTile = currentRow.length ? currentRow.shift() : this.addTile();\n if (currentRow.length > 0 && currentRow[0].value === targetTile.value) {\n var tile1 = targetTile;\n targetTile = this.addTile(targetTile.value);\n tile1.mergedInto = targetTile;\n var tile2 = currentRow.shift();\n tile2.mergedInto = targetTile;\n targetTile.value += tile2.value;\n }\n resultRow[target] = targetTile;\n this.won = this.won || (targetTile.value === 2048);\n hasChanged = hasChanged || (targetTile.value !== this.cells[row][target].value);\n }\n this.cells[row] = resultRow;\n }\n return hasChanged;\n};\n\nBoard.prototype.setPositions = function () {\n this.cells.forEach(function (row, rowIndex) {\n row.forEach(function (tile, columnIndex) {\n tile.oldRow = tile.row;\n tile.oldColumn = tile.column;\n tile.row = rowIndex;\n tile.column = columnIndex;\n tile.markForDeletion = false;\n });\n });\n};\n\nBoard.fourProbability = 0.1;\n\nBoard.prototype.addRandomTile = function () {\n var emptyCells = [];\n for (var r = 0; r < Board.size; ++r) {\n for (var c = 0; c < Board.size; ++c) {\n if (this.cells[r][c].value === 0) {\n emptyCells.push({r: r, c: c});\n }\n }\n }\n var index = Math.floor(Math.random() * emptyCells.length);\n var cell = emptyCells[index];\n var newValue = Math.random() < Board.fourProbability ? 4 : 2;\n this.cells[cell.r][cell.c] = this.addTile(newValue);\n};\n\nBoard.prototype.move = function (direction) {\n // 0 -> left, 1 -> up, 2 -> right, 3 -> down\n this.clearOldTiles();\n for (var i = 0; i < direction; ++i) {\n this.cells = rotateLeft(this.cells);\n }\n var hasChanged = this.moveLeft();\n for (var i = direction; i < 4; ++i) {\n this.cells = rotateLeft(this.cells);\n }\n if (hasChanged) {\n this.addRandomTile();\n }\n this.setPositions();\n return this;\n};\n\nBoard.prototype.clearOldTiles = function () {\n this.tiles = this.tiles.filter(function (tile) { return tile.markForDeletion === false; });\n this.tiles.forEach(function (tile) { tile.markForDeletion = true; });\n};\n\nBoard.prototype.hasWon = function () {\n return this.won;\n};\n\nBoard.deltaX = [-1, 0, 1, 0];\nBoard.deltaY = [0, -1, 0, 1];\n\nBoard.prototype.hasLost = function () {\n var canMove = false;\n for (var row = 0; row < Board.size; ++row) {\n for (var column = 0; column < Board.size; ++column) {\n canMove = canMove || (this.cells[row][column].value === 0);\n for (var dir = 0; dir < 4; ++dir) {\n var newRow = row + Board.deltaX[dir];\n var newColumn = column + Board.deltaY[dir];\n if (newRow < 0 || newRow >= Board.size || newColumn < 0 || newColumn >= Board.size) {\n continue;\n }\n canMove = canMove || (this.cells[row][column].value === this.cells[newRow][newColumn].value);\n }\n }\n }\n return !canMove;\n};\n\nmodule.exports = Board;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Examples/2048/GameBoard.js\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/pages/movies.html b/pages/movies.html index b8230fa..916fec3 100644 --- a/pages/movies.html +++ b/pages/movies.html @@ -9,9 +9,9 @@ - + - + diff --git a/pages/movies.js b/pages/movies.js index 00a5fa4..90f75a3 100644 --- a/pages/movies.js +++ b/pages/movies.js @@ -1,2 +1,2 @@ -webpackJsonp([1],{0:function(e,t,r){"use strict";var n=r(1),o=n.AppRegistry,i=n.Navigator,a=n.StyleSheet,s=n.Platform,l=n.View,c=r(447),u=r(451),d=function(e,t,r){return"search"===e.name?n.createElement(u,{navigator:t}):"movie"===e.name?n.createElement(l,{style:{flex:1}},n.createElement(c,{style:{flex:1},navigator:t,movie:e.movie})):void 0},h=n.createClass({displayName:"MoviesApp",render:function(){var e={name:"search"};return n.createElement(i,{style:p.container,initialRoute:e,renderScene:d})}}),p=a.create({container:{flex:1,backgroundColor:"white"}});if(o.registerComponent("MoviesApp",function(){return h}),"web"==s.OS){var f=document.createElement("div");document.body.appendChild(f),o.runApplication("MoviesApp",{rootTag:f})}e.exports=h},447:function(e,t,r){"use strict";var n=r(1),o=n.Image,i=n.PixelRatio,a=n.ScrollView,s=n.StyleSheet,l=n.Text,c=n.View,u=r(448),d=r(449),h=r(450),p=n.createClass({displayName:"MovieScreen",render:function(){return n.createElement(a,{contentContainerStyle:y.contentContainer},n.createElement(c,{style:y.mainSection},n.createElement(o,{source:u(this.props.movie,"det"),style:y.detailsImage}),n.createElement(c,{style:y.rightPane},n.createElement(l,{style:y.movieTitle},this.props.movie.title),n.createElement(l,null,this.props.movie.year),n.createElement(c,{style:y.mpaaWrapper},n.createElement(l,{style:y.mpaaText},this.props.movie.mpaa_rating)),n.createElement(f,{ratings:this.props.movie.ratings}))),n.createElement(c,{style:y.separator}),n.createElement(l,null,this.props.movie.synopsis),n.createElement(c,{style:y.separator}),n.createElement(m,{actors:this.props.movie.abridged_cast}))}}),f=n.createClass({displayName:"Ratings",render:function(){var e=this.props.ratings.critics_score,t=this.props.ratings.audience_score;return n.createElement(c,null,n.createElement(c,{style:y.rating},n.createElement(l,{style:y.ratingTitle},"Critics:"),n.createElement(l,{style:[y.ratingValue,d(e)]},h(e))),n.createElement(c,{style:y.rating},n.createElement(l,{style:y.ratingTitle},"Audience:"),n.createElement(l,{style:[y.ratingValue,d(t)]},h(t))))}}),m=n.createClass({displayName:"Cast",render:function(){return this.props.actors?n.createElement(c,null,n.createElement(l,{style:y.castTitle},"Actors"),this.props.actors.map(function(e){return n.createElement(l,{key:e.name,style:y.castActor},"• ",e.name)})):null}}),y=s.create({contentContainer:{padding:10},rightPane:{justifyContent:"space-between",flex:1},movieTitle:{flex:1,fontSize:16,fontWeight:"500"},rating:{marginTop:10},ratingTitle:{fontSize:14},ratingValue:{fontSize:28,fontWeight:"500"},mpaaWrapper:{alignSelf:"flex-start",borderColor:"black",borderWidth:1,paddingHorizontal:3,marginVertical:5},mpaaText:{fontFamily:"Palatino",fontSize:13,fontWeight:"500"},mainSection:{flexDirection:"row"},detailsImage:{width:134,height:200,backgroundColor:"#eaeaea",marginRight:10},separator:{backgroundColor:"rgba(0, 0, 0, 0.1)",height:1/i.get(),marginVertical:10},castTitle:{fontWeight:"500",marginBottom:3},castActor:{marginLeft:2}});e.exports=p},448:function(e,t){"use strict";function r(e,t){var r=e&&e.posters?e.posters.thumbnail:null;return r&&t&&(r=r.replace("tmb",t)),{uri:r}}e.exports=r},449:function(e,t,r){"use strict";function n(e){if(e<0)return s.noScore;var t=Math.round(e/100*a);return{color:"rgb("+(a-t)+", "+t+", 0)"}}var o=r(1),i=o.StyleSheet,a=200,s=i.create({noScore:{color:"#999999"}});e.exports=n},450:function(e,t){"use strict";function r(e){return e>0?e+"%":"N/A"}e.exports=r},451:function(e,t,r){"use strict";var n=r(1),o=n.ActivityIndicatorIOS,i=n.ListView,a=n.Platform,s=n.ProgressBarAndroid,l=n.StyleSheet,c=n.Text,u=n.View,d=r(297),h=r("web"===a.OS?452:453),p=r(276),f=r(431),m=r(454),y=r(447),g=r(455),v="http://api.rottentomatoes.com/api/public/v1.0/",b=["7waqfqbprs7pajbz28mqf6vz"],w={dataForQuery:{},nextPageNumberForQuery:{},totalForQuery:{}},S={},E=n.createClass({displayName:"SearchScreen",mixins:[d],timeoutID:null,getInitialState:function(){return{isLoading:!1,isLoadingTail:!1,dataSource:new i.DataSource({rowHasChanged:function(e,t){return e!==t}}),filter:"",queryNumber:0}},componentDidMount:function(){this.searchMovies("")},_urlForQueryAndPage:function(e,t){var r=b[this.state.queryNumber%b.length];return e?v+"movies.json?apikey="+r+"&q="+encodeURIComponent(e)+"&page_limit=20&page="+t:v+"lists/movies/in_theaters.json?apikey="+r+"&page_limit=20&page="+t},searchMovies:function(e){var t=this;this.timeoutID=null,this.setState({filter:e});var r=w.dataForQuery[e];return r?void(S[e]?this.setState({isLoading:!0}):this.setState({dataSource:this.getDataSource(r),isLoading:!1})):(S[e]=!0,w.dataForQuery[e]=null,this.setState({isLoading:!0,queryNumber:this.state.queryNumber+1,isLoadingTail:!1}),void h(this._urlForQueryAndPage(e,1)).then(function(e){return e.json()})["catch"](function(r){S[e]=!1,w.dataForQuery[e]=void 0,t.setState({dataSource:t.getDataSource([]),isLoading:!1})}).then(function(r){S[e]=!1,w.totalForQuery[e]=r.total,w.dataForQuery[e]=r.movies,w.nextPageNumberForQuery[e]=2,t.state.filter===e&&t.setState({isLoading:!1,dataSource:t.getDataSource(r.movies)})}).done())},hasMore:function(){var e=this.state.filter;return!w.dataForQuery[e]||w.totalForQuery[e]!==w.dataForQuery[e].length},onEndReached:function(){var e=this,t=this.state.filter;if(this.hasMore()&&!this.state.isLoadingTail&&!S[t]){S[t]=!0,this.setState({queryNumber:this.state.queryNumber+1,isLoadingTail:!0});var r=w.nextPageNumberForQuery[t];p(null!=r,'Next page number for "%s" is missing',t),h(this._urlForQueryAndPage(t,r)).then(function(e){return e.json()})["catch"](function(r){console.error(r),S[t]=!1,e.setState({isLoadingTail:!1})}).then(function(r){var n=w.dataForQuery[t].slice();if(S[t]=!1,r.movies){for(var o in r.movies)n.push(r.movies[o]);w.dataForQuery[t]=n,w.nextPageNumberForQuery[t]+=1}else w.totalForQuery[t]=n.length;e.state.filter===t&&e.setState({isLoadingTail:!1,dataSource:e.getDataSource(w.dataForQuery[t])})}).done()}},getDataSource:function(e){return this.state.dataSource.cloneWithRows(e)},selectMovie:function(e){"ios"===a.OS?this.props.navigator.push({title:e.title,component:y,passProps:{movie:e}}):(f(),this.props.navigator.push({title:e.title,name:"movie",movie:e}))},onSearchChange:function(e){var t=this,r=e.nativeEvent.text.toLowerCase();this.clearTimeout(this.timeoutID),this.timeoutID=this.setTimeout(function(){return t.searchMovies(r)},100)},renderFooter:function(){return this.hasMore()&&this.state.isLoadingTail?"ios"===a.OS?n.createElement(o,{style:x.scrollSpinner}):"web"===a.OS?n.createElement(u,{style:{alignItems:"center"}},n.createElement(o,{style:x.scrollSpinner})):n.createElement(u,{style:{alignItems:"center"}},n.createElement(s,{styleAttr:"Large"})):n.createElement(u,{style:x.scrollSpinner})},renderSeparator:function(e,t,r){var o=x.rowSeparator;return r&&(o=[o,x.rowSeparatorHide]),n.createElement(u,{key:"SEP_"+e+"_"+t,style:o})},renderRow:function(e,t,r,o){var i=this;return n.createElement(m,{key:e.id,onSelect:function(){return i.selectMovie(e)},onHighlight:function(){return o(t,r)},onUnhighlight:function(){return o(null,null)},movie:e})},render:function(){var e=this,t=0===this.state.dataSource.getRowCount()?n.createElement(T,{filter:this.state.filter,isLoading:this.state.isLoading}):n.createElement(i,{ref:"listview",renderSeparator:this.renderSeparator,dataSource:this.state.dataSource,renderFooter:this.renderFooter,renderRow:this.renderRow,onEndReached:this.onEndReached,automaticallyAdjustContentInsets:!1,keyboardDismissMode:"on-drag",keyboardShouldPersistTaps:!0,showsVerticalScrollIndicator:!1});return n.createElement(u,{style:x.container},n.createElement(g,{onSearchChange:this.onSearchChange,isLoading:this.state.isLoading,onFocus:function(){return e.refs.listview&&e.refs.listview.getScrollResponder().scrollTo(0,0)}}),n.createElement(u,{style:x.separator}),t)}}),T=n.createClass({displayName:"NoMovies",render:function(){var e="";return this.props.filter?e='No results for "'+this.props.filter+'"':this.props.isLoading||(e="No movies found"),n.createElement(u,{style:[x.container,x.centerText]},n.createElement(c,{style:x.noMoviesText},e))}}),x=l.create({container:{flex:1,backgroundColor:"white"},centerText:{alignItems:"center"},noMoviesText:{marginTop:80,color:"#888888"},separator:{height:1,backgroundColor:"#eeeeee"},scrollSpinner:{marginVertical:20},rowSeparator:{backgroundColor:"rgba(0, 0, 0, 0.1)",height:1,marginLeft:4},rowSeparatorHide:{opacity:0}});e.exports=E},452:function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function o(){return"jsonp_"+Date.now()+"_"+Math.ceil(1e5*Math.random())}function i(e){try{delete window[e]}catch(t){window[e]=void 0}}function a(e){var t=document.getElementById(e);document.getElementsByTagName("head")[0].removeChild(t)}var s=r(436),l=n(s),c={timeout:5e3,jsonpCallback:"callback"},u=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=null!=t.timeout?t.timeout:c.timeout,n=null!=t.jsonpCallback?t.jsonpCallback:c.jsonpCallback,s=void 0;return new l["default"](function(t,c){var u=o();window[u]=function(e){t({ok:!0,json:function(){return l["default"].resolve(e)}}),s&&clearTimeout(s),a(n+"_"+u),i(u)},e+=e.indexOf("?")===-1?"?":"&";var d=document.createElement("script");d.setAttribute("src",e+n+"="+u),d.id=n+"_"+u,document.getElementsByTagName("head")[0].appendChild(d),s=setTimeout(function(){c(new Error("JSONP request to "+e+" timed out")),i(u),a(n+"_"+u)},r)})};e.exports=u},453:function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}var o=r(436),i=n(o);if(!self.fetch){var a,s,l;!function(){function e(e){if("string"!=typeof e&&(e=String(e)),/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(e))throw new TypeError("Invalid character in header field name");return e.toLowerCase()}function t(e){return"string"!=typeof e&&(e=String(e)),e}function r(e){this.map={},e instanceof r?e.forEach(function(e,t){this.append(t,e)},this):e&&Object.getOwnPropertyNames(e).forEach(function(t){this.append(t,e[t])},this)}function n(e){return e.bodyUsed?i["default"].reject(new TypeError("Already read")):void(e.bodyUsed=!0)}function o(e){return new i["default"](function(t,r){e.onload=function(){t(e.result)},e.onerror=function(){r(e.error)}})}function c(e){var t=new FileReader;return t.readAsArrayBuffer(e),o(t)}function u(e){var t=new FileReader;return t.readAsText(e),o(t)}function d(){return this.bodyUsed=!1,this._initBody=function(e){if(this._bodyInit=e,"string"==typeof e)this._bodyText=e;else if(a.blob&&Blob.prototype.isPrototypeOf(e))this._bodyBlob=e;else if(a.formData&&FormData.prototype.isPrototypeOf(e))this._bodyFormData=e;else if(e){if(!a.arrayBuffer||!ArrayBuffer.prototype.isPrototypeOf(e))throw new Error("unsupported BodyInit type")}else this._bodyText=""},a.blob?(this.blob=function(){var e=n(this);if(e)return e;if(this._bodyBlob)return i["default"].resolve(this._bodyBlob);if(this._bodyFormData)throw new Error("could not read FormData body as blob");return i["default"].resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this.blob().then(c)},this.text=function(){var e=n(this);if(e)return e;if(this._bodyBlob)return u(this._bodyBlob);if(this._bodyFormData)throw new Error("could not read FormData body as text");return i["default"].resolve(this._bodyText)}):this.text=function(){var e=n(this);return e?e:i["default"].resolve(this._bodyText)},a.formData&&(this.formData=function(){return this.text().then(f)}),this.json=function(){return this.text().then(JSON.parse)},this}function h(e){var t=e.toUpperCase();return s.indexOf(t)>-1?t:e}function p(e,t){t=t||{};var n=t.body;if(p.prototype.isPrototypeOf(e)){if(e.bodyUsed)throw new TypeError("Already read");this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new r(e.headers)),this.method=e.method,this.mode=e.mode,n||(n=e._bodyInit,e.bodyUsed=!0)}else this.url=e;if(this.credentials=t.credentials||this.credentials||"omit",!t.headers&&this.headers||(this.headers=new r(t.headers)),this.method=h(t.method||this.method||"GET"),this.mode=t.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&n)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(n)}function f(e){var t=new FormData;return e.trim().split("&").forEach(function(e){if(e){var r=e.split("="),n=r.shift().replace(/\+/g," "),o=r.join("=").replace(/\+/g," ");t.append(decodeURIComponent(n),decodeURIComponent(o))}}),t}function m(e){var t=new r,n=e.getAllResponseHeaders().trim().split("\n");return n.forEach(function(e){var r=e.trim().split(":"),n=r.shift().trim(),o=r.join(":").trim();t.append(n,o)}),t}function y(e,t){t||(t={}),this._initBody(e),this.type="default",this.status=t.status,this.ok=this.status>=200&&this.status<300,this.statusText=t.statusText,this.headers=t.headers instanceof r?t.headers:new r(t.headers),this.url=t.url||""}r.prototype.append=function(r,n){r=e(r),n=t(n);var o=this.map[r];o||(o=[],this.map[r]=o),o.push(n)},r.prototype["delete"]=function(t){delete this.map[e(t)]},r.prototype.get=function(t){var r=this.map[e(t)];return r?r[0]:null},r.prototype.getAll=function(t){return this.map[e(t)]||[]},r.prototype.has=function(t){return this.map.hasOwnProperty(e(t))},r.prototype.set=function(r,n){this.map[e(r)]=[t(n)]},r.prototype.forEach=function(e,t){Object.getOwnPropertyNames(this.map).forEach(function(r){this.map[r].forEach(function(n){e.call(t,n,r,this)},this)},this)},a={blob:"FileReader"in self&&"Blob"in self&&function(){try{return new Blob,!0}catch(e){return!1}}(),formData:"FormData"in self,arrayBuffer:"ArrayBuffer"in self},s=["DELETE","GET","HEAD","OPTIONS","POST","PUT"],p.prototype.clone=function(){return new p(this)},d.call(p.prototype),d.call(y.prototype),y.prototype.clone=function(){return new y(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new r(this.headers),url:this.url})},y.error=function(){var e=new y(null,{status:0,statusText:""});return e.type="error",e},l=[301,302,303,307,308],y.redirect=function(e,t){if(l.indexOf(t)===-1)throw new RangeError("Invalid status code");return new y(null,{status:t,headers:{location:e}})},self.Headers=r,self.Request=p,self.Response=y,self.fetch=function(e,t){return new i["default"](function(r,n){function o(){return"responseURL"in s?s.responseURL:/^X-Request-URL:/m.test(s.getAllResponseHeaders())?s.getResponseHeader("X-Request-URL"):void 0}var i;i=p.prototype.isPrototypeOf(e)&&!t?e:new p(e,t);var s=new XMLHttpRequest;s.onload=function(){var e=1223===s.status?204:s.status;if(e<100||e>599)return void n(new TypeError("Network request failed"));var t={status:e,statusText:s.statusText,headers:m(s),url:o()},i="response"in s?s.response:s.responseText;r(new y(i,t))},s.onerror=function(){n(new TypeError("Network request failed"))},s.open(i.method,i.url,!0),"include"===i.credentials&&(s.withCredentials=!0),"responseType"in s&&a.blob&&(s.responseType="blob"),i.headers.forEach(function(e,t){s.setRequestHeader(t,e)}),s.send("undefined"==typeof i._bodyInit?null:i._bodyInit)})},self.fetch.polyfill=!0}()}e.exports=self.fetch},454:function(e,t,r){"use strict";var n=r(1),o=n.Image,i=n.PixelRatio,a=n.Platform,s=n.StyleSheet,l=n.Text,c=n.TouchableHighlight,u=n.TouchableNativeFeedback,d=n.View,h=r(449),p=r(448),f=r(450),m=n.createClass({displayName:"MovieCell",render:function(){var e=this.props.movie.ratings.critics_score,t=c;return"android"===a.OS&&(t=u),n.createElement(d,null,n.createElement(t,{onPress:this.props.onSelect,onShowUnderlay:this.props.onHighlight,onHideUnderlay:this.props.onUnhighlight},n.createElement(d,{style:y.row},n.createElement(o,{source:p(this.props.movie,"det"),style:y.cellImage}),n.createElement(d,{style:y.textContainer},n.createElement(l,{style:y.movieTitle,numberOfLines:2},this.props.movie.title),n.createElement(l,{style:y.movieYear,numberOfLines:1},this.props.movie.year," ","•"," ",n.createElement(l,{style:h(e)},"Critics ",f(e)))))))}}),y=s.create({textContainer:{flex:1},movieTitle:{flex:1,fontSize:16,fontWeight:"500",marginBottom:2},movieYear:{color:"#999999",fontSize:12},row:{alignItems:"center",backgroundColor:"white",flexDirection:"row",padding:5},cellImage:{backgroundColor:"#dddddd",height:93,marginRight:10,width:60},cellBorder:{backgroundColor:"rgba(0, 0, 0, 0.1)",height:1/i.get(),marginLeft:4}});e.exports=m},455:function(e,t,r){"use strict";var n=r(1),o=n.ActivityIndicatorIOS,i=n.TextInput,a=n.StyleSheet,s=n.View,l=n.createClass({displayName:"SearchBar",render:function(){return n.createElement(s,{style:c.searchBar},n.createElement(i,{autoCapitalize:"none",autoCorrect:!1,onChange:this.props.onSearchChange,placeholder:"Search a movie...",onFocus:this.props.onFocus,style:c.searchBarInput}),n.createElement(o,{animating:this.props.isLoading,style:c.spinner}))}}),c=a.create({searchBar:{marginTop:0,padding:3,paddingLeft:8,flexDirection:"row",alignItems:"center"},searchBarInput:{fontSize:15,flex:1,height:30},spinner:{width:30}});e.exports=l}}); +webpackJsonp([1],{0:function(e,t,r){"use strict";var n=r(1),o=r(331),i=n.AppRegistry,a=n.Navigator,s=n.StyleSheet,l=n.Platform,u=n.View,c=r(336),p=r(340),h=function(e,t,r){return"search"===e.name?n.createElement(p,{navigator:t}):"movie"===e.name?n.createElement(u,{style:{flex:1}},n.createElement(c,{style:{flex:1},navigator:t,movie:e.movie})):void 0},d=o({render:function(){var e={name:"search"};return n.createElement(a,{style:f.container,initialRoute:e,renderScene:h})}}),f=s.create({container:{flex:1,backgroundColor:"white"}});if(i.registerComponent("MoviesApp",function(){return d}),"web"==l.OS){var m=document.createElement("div");document.body.appendChild(m),i.runApplication("MoviesApp",{rootTag:m})}e.exports=d},331:function(e,t,r){"use strict";var n=r(2),o=r(332);if("undefined"==typeof n)throw Error("create-react-class could not find the React object. If you are using script tags, make sure that React is being loaded before create-react-class.");var i=(new n.Component).updater;e.exports=o(n.Component,n.isValidElement,i)},332:function(e,t,r){"use strict";function n(e){return e}function o(e,t,r){function o(e,t){var r=E.hasOwnProperty(t)?E[t]:null;S.hasOwnProperty(t)&&l("OVERRIDE_BASE"===r,"ReactClassInterface: You are attempting to override `%s` from your class specification. Ensure that your method names do not overlap with React methods.",t),e&&l("DEFINE_MANY"===r||"DEFINE_MANY_MERGED"===r,"ReactClassInterface: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.",t)}function i(e,r){if(r){l("function"!=typeof r,"ReactClass: You're attempting to use a component class or function as a mixin. Instead, just use a regular object."),l(!t(r),"ReactClass: You're attempting to use a component as a mixin. Instead, just use a regular object.");var n=e.prototype,i=n.__reactAutoBindPairs;r.hasOwnProperty(u)&&v.mixins(e,r.mixins);for(var a in r)if(r.hasOwnProperty(a)&&a!==u){var s=r[a],c=n.hasOwnProperty(a);if(o(c,a),v.hasOwnProperty(a))v[a](e,s);else{var p=E.hasOwnProperty(a),f="function"==typeof s,m=f&&!p&&!c&&r.autobind!==!1;if(m)i.push(a,s),n[a]=s;else if(c){var y=E[a];l(p&&("DEFINE_MANY_MERGED"===y||"DEFINE_MANY"===y),"ReactClass: Unexpected spec policy %s for key %s when mixing in component specs.",y,a),"DEFINE_MANY_MERGED"===y?n[a]=h(n[a],s):"DEFINE_MANY"===y&&(n[a]=d(n[a],s))}else n[a]=s}}}else;}function c(e,t){if(t)for(var r in t){var n=t[r];if(t.hasOwnProperty(r)){var o=r in v;l(!o,'ReactClass: You are attempting to define a reserved property, `%s`, that shouldn\'t be on the "statics" key. Define it as an instance property instead; it will still be accessible on the constructor.',r);var i=r in e;l(!i,"ReactClass: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.",r),e[r]=n}}}function p(e,t){l(e&&t&&"object"==typeof e&&"object"==typeof t,"mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.");for(var r in t)t.hasOwnProperty(r)&&(l(void 0===e[r],"mergeIntoWithNoDuplicateKeys(): Tried to merge two objects with the same key: `%s`. This conflict may be due to a mixin; in particular, this may be caused by two getInitialState() or getDefaultProps() methods returning objects with clashing keys.",r),e[r]=t[r]);return e}function h(e,t){return function(){var r=e.apply(this,arguments),n=t.apply(this,arguments);if(null==r)return n;if(null==n)return r;var o={};return p(o,r),p(o,n),o}}function d(e,t){return function(){e.apply(this,arguments),t.apply(this,arguments)}}function f(e,t){var r=t.bind(e);return r}function m(e){for(var t=e.__reactAutoBindPairs,r=0;r0?e+"%":"N/A"}e.exports=r},340:function(e,t,r){"use strict";var n=r(1),o=r(331),i=n.ActivityIndicatorIOS,a=n.ListView,s=n.Platform,l=n.ProgressBarAndroid,u=n.StyleSheet,c=n.Text,p=n.View,h=r(176),d=r("web"===s.OS?341:342),f=r(146),m=r(312),y=r(343),g=r(336),E=r(344),v="http://api.rottentomatoes.com/api/public/v1.0/",b=["7waqfqbprs7pajbz28mqf6vz"],w={dataForQuery:{},nextPageNumberForQuery:{},totalForQuery:{}},S={},x=o({mixins:[h],timeoutID:null,getInitialState:function(){return{isLoading:!1,isLoadingTail:!1,dataSource:new a.DataSource({rowHasChanged:function(e,t){return e!==t}}),filter:"",queryNumber:0}},componentDidMount:function(){this.searchMovies("")},_urlForQueryAndPage:function(e,t){var r=b[this.state.queryNumber%b.length];return e?v+"movies.json?apikey="+r+"&q="+encodeURIComponent(e)+"&page_limit=20&page="+t:v+"lists/movies/in_theaters.json?apikey="+r+"&page_limit=20&page="+t},searchMovies:function(e){var t=this;this.timeoutID=null,this.setState({filter:e});var r=w.dataForQuery[e];return r?void(S[e]?this.setState({isLoading:!0}):this.setState({dataSource:this.getDataSource(r),isLoading:!1})):(S[e]=!0,w.dataForQuery[e]=null,this.setState({isLoading:!0,queryNumber:this.state.queryNumber+1,isLoadingTail:!1}),void d(this._urlForQueryAndPage(e,1)).then(function(e){return e.json()})["catch"](function(r){S[e]=!1,w.dataForQuery[e]=void 0,t.setState({dataSource:t.getDataSource([]),isLoading:!1})}).then(function(r){S[e]=!1,w.totalForQuery[e]=r.total,w.dataForQuery[e]=r.movies,w.nextPageNumberForQuery[e]=2,t.state.filter===e&&t.setState({isLoading:!1,dataSource:t.getDataSource(r.movies)})}).done())},hasMore:function(){var e=this.state.filter;return!w.dataForQuery[e]||w.totalForQuery[e]!==w.dataForQuery[e].length},onEndReached:function(){var e=this,t=this.state.filter;if(this.hasMore()&&!this.state.isLoadingTail&&!S[t]){S[t]=!0,this.setState({queryNumber:this.state.queryNumber+1,isLoadingTail:!0});var r=w.nextPageNumberForQuery[t];f(null!=r,'Next page number for "%s" is missing',t),d(this._urlForQueryAndPage(t,r)).then(function(e){return e.json()})["catch"](function(r){console.error(r),S[t]=!1,e.setState({isLoadingTail:!1})}).then(function(r){var n=w.dataForQuery[t].slice();if(S[t]=!1,r.movies){for(var o in r.movies)n.push(r.movies[o]);w.dataForQuery[t]=n,w.nextPageNumberForQuery[t]+=1}else w.totalForQuery[t]=n.length;e.state.filter===t&&e.setState({isLoadingTail:!1,dataSource:e.getDataSource(w.dataForQuery[t])})}).done()}},getDataSource:function(e){return this.state.dataSource.cloneWithRows(e)},selectMovie:function(e){"ios"===s.OS?this.props.navigator.push({title:e.title,component:g,passProps:{movie:e}}):(m(),this.props.navigator.push({title:e.title,name:"movie",movie:e}))},onSearchChange:function(e){var t=this,r=e.nativeEvent.text.toLowerCase();this.clearTimeout(this.timeoutID),this.timeoutID=this.setTimeout(function(){return t.searchMovies(r)},100)},renderFooter:function(){return this.hasMore()&&this.state.isLoadingTail?"ios"===s.OS?n.createElement(i,{style:T.scrollSpinner}):"web"===s.OS?n.createElement(p,{style:{alignItems:"center"}},n.createElement(i,{style:T.scrollSpinner})):n.createElement(p,{style:{alignItems:"center"}},n.createElement(l,{styleAttr:"Large"})):n.createElement(p,{style:T.scrollSpinner})},renderSeparator:function(e,t,r){var o=T.rowSeparator;return r&&(o=[o,T.rowSeparatorHide]),n.createElement(p,{key:"SEP_"+e+"_"+t,style:o})},renderRow:function(e,t,r,o){var i=this;return n.createElement(y,{key:e.id,onSelect:function(){return i.selectMovie(e)},onHighlight:function(){return o(t,r)},onUnhighlight:function(){return o(null,null)},movie:e})},render:function(){var e=this,t=0===this.state.dataSource.getRowCount()?n.createElement(_,{filter:this.state.filter,isLoading:this.state.isLoading}):n.createElement(a,{ref:"listview",renderSeparator:this.renderSeparator,dataSource:this.state.dataSource,renderFooter:this.renderFooter,renderRow:this.renderRow,onEndReached:this.onEndReached,automaticallyAdjustContentInsets:!1,keyboardDismissMode:"on-drag",keyboardShouldPersistTaps:!0,showsVerticalScrollIndicator:!1});return n.createElement(p,{style:T.container},n.createElement(E,{onSearchChange:this.onSearchChange,isLoading:this.state.isLoading,onFocus:function(){return e.refs.listview&&e.refs.listview.getScrollResponder().scrollTo(0,0)}}),n.createElement(p,{style:T.separator}),t)}}),_=o({render:function(){var e="";return this.props.filter?e='No results for "'+this.props.filter+'"':this.props.isLoading||(e="No movies found"),n.createElement(p,{style:[T.container,T.centerText]},n.createElement(c,{style:T.noMoviesText},e))}}),T=u.create({container:{flex:1,backgroundColor:"white"},centerText:{alignItems:"center"},noMoviesText:{marginTop:80,color:"#888888"},separator:{height:1,backgroundColor:"#eeeeee"},scrollSpinner:{marginVertical:20},rowSeparator:{backgroundColor:"rgba(0, 0, 0, 0.1)",height:1,marginLeft:4},rowSeparatorHide:{opacity:0}});e.exports=x},341:function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function o(){return"jsonp_"+Date.now()+"_"+Math.ceil(1e5*Math.random())}function i(e){try{delete window[e]}catch(t){window[e]=void 0}}function a(e){var t=document.getElementById(e);document.getElementsByTagName("head")[0].removeChild(t)}var s=r(317),l=n(s),u={timeout:5e3,jsonpCallback:"callback"},c=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=null!=t.timeout?t.timeout:u.timeout,n=null!=t.jsonpCallback?t.jsonpCallback:u.jsonpCallback,s=void 0;return new l["default"](function(t,u){var c=o();window[c]=function(e){t({ok:!0,json:function(){return l["default"].resolve(e)}}),s&&clearTimeout(s),a(n+"_"+c),i(c)},e+=e.indexOf("?")===-1?"?":"&";var p=document.createElement("script");p.setAttribute("src",e+n+"="+c),p.id=n+"_"+c,document.getElementsByTagName("head")[0].appendChild(p),s=setTimeout(function(){u(new Error("JSONP request to "+e+" timed out")),i(c),a(n+"_"+c)},r)})};e.exports=c},342:function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function o(e){if("string"!=typeof e&&(e=String(e)),/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(e))throw new TypeError("Invalid character in header field name");return e.toLowerCase()}function i(e){return"string"!=typeof e&&(e=String(e)),e}function a(e){this.map={},e instanceof a?e.forEach(function(e,t){this.append(t,e)},this):e&&Object.getOwnPropertyNames(e).forEach(function(t){this.append(t,e[t])},this)}function s(e){return e.bodyUsed?E["default"].reject(new TypeError("Already read")):void(e.bodyUsed=!0)}function l(e){return new E["default"](function(t,r){e.onload=function(){t(e.result)},e.onerror=function(){r(e.error)}})}function u(e){var t=new FileReader;return t.readAsArrayBuffer(e),l(t)}function c(e){var t=new FileReader;return t.readAsText(e),l(t)}function p(){return this.bodyUsed=!1,this._initBody=function(e){if(this._bodyInit=e,"string"==typeof e)this._bodyText=e;else if(v.blob&&Blob.prototype.isPrototypeOf(e))this._bodyBlob=e;else if(v.formData&&FormData.prototype.isPrototypeOf(e))this._bodyFormData=e;else if(e){if(!v.arrayBuffer||!ArrayBuffer.prototype.isPrototypeOf(e))throw new Error("unsupported BodyInit type")}else this._bodyText=""},v.blob?(this.blob=function(){var e=s(this);if(e)return e;if(this._bodyBlob)return E["default"].resolve(this._bodyBlob);if(this._bodyFormData)throw new Error("could not read FormData body as blob");return E["default"].resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this.blob().then(u)},this.text=function(){var e=s(this);if(e)return e;if(this._bodyBlob)return c(this._bodyBlob);if(this._bodyFormData)throw new Error("could not read FormData body as text");return E["default"].resolve(this._bodyText)}):this.text=function(){var e=s(this);return e?e:E["default"].resolve(this._bodyText)},v.formData&&(this.formData=function(){return this.text().then(f)}),this.json=function(){return this.text().then(JSON.parse)},this}function h(e){var t=e.toUpperCase();return b.indexOf(t)>-1?t:e}function d(e,t){t=t||{};var r=t.body;if(d.prototype.isPrototypeOf(e)){if(e.bodyUsed)throw new TypeError("Already read");this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new a(e.headers)),this.method=e.method,this.mode=e.mode,r||(r=e._bodyInit,e.bodyUsed=!0)}else this.url=e;if(this.credentials=t.credentials||this.credentials||"omit",!t.headers&&this.headers||(this.headers=new a(t.headers)),this.method=h(t.method||this.method||"GET"),this.mode=t.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&r)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(r)}function f(e){var t=new FormData;return e.trim().split("&").forEach(function(e){if(e){var r=e.split("="),n=r.shift().replace(/\+/g," "),o=r.join("=").replace(/\+/g," ");t.append(decodeURIComponent(n),decodeURIComponent(o))}}),t}function m(e){var t=new a,r=e.getAllResponseHeaders().trim().split("\n");return r.forEach(function(e){var r=e.trim().split(":"),n=r.shift().trim(),o=r.join(":").trim();t.append(n,o)}),t}function y(e,t){t||(t={}),this._initBody(e),this.type="default",this.status=t.status,this.ok=this.status>=200&&this.status<300,this.statusText=t.statusText,this.headers=t.headers instanceof a?t.headers:new a(t.headers),this.url=t.url||""}var g=r(317),E=n(g);if(!self.fetch){a.prototype.append=function(e,t){e=o(e),t=i(t);var r=this.map[e];r||(r=[],this.map[e]=r),r.push(t)},a.prototype["delete"]=function(e){delete this.map[o(e)]},a.prototype.get=function(e){var t=this.map[o(e)];return t?t[0]:null},a.prototype.getAll=function(e){return this.map[o(e)]||[]},a.prototype.has=function(e){return this.map.hasOwnProperty(o(e))},a.prototype.set=function(e,t){this.map[o(e)]=[i(t)]},a.prototype.forEach=function(e,t){Object.getOwnPropertyNames(this.map).forEach(function(r){this.map[r].forEach(function(n){e.call(t,n,r,this)},this)},this)};var v={blob:"FileReader"in self&&"Blob"in self&&function(){try{return new Blob,!0}catch(e){return!1}}(),formData:"FormData"in self,arrayBuffer:"ArrayBuffer"in self},b=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];d.prototype.clone=function(){return new d(this)},p.call(d.prototype),p.call(y.prototype),y.prototype.clone=function(){return new y(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new a(this.headers),url:this.url})},y.error=function(){var e=new y(null,{status:0,statusText:""});return e.type="error",e};var w=[301,302,303,307,308];y.redirect=function(e,t){if(w.indexOf(t)===-1)throw new RangeError("Invalid status code");return new y(null,{status:t,headers:{location:e}})},self.Headers=a,self.Request=d,self.Response=y,self.fetch=function(e,t){return new E["default"](function(r,n){function o(){return"responseURL"in a?a.responseURL:/^X-Request-URL:/m.test(a.getAllResponseHeaders())?a.getResponseHeader("X-Request-URL"):void 0}var i;i=d.prototype.isPrototypeOf(e)&&!t?e:new d(e,t);var a=new XMLHttpRequest;a.onload=function(){var e=1223===a.status?204:a.status;if(e<100||e>599)return void n(new TypeError("Network request failed"));var t={status:e,statusText:a.statusText,headers:m(a),url:o()},i="response"in a?a.response:a.responseText;r(new y(i,t))},a.onerror=function(){n(new TypeError("Network request failed"))},a.open(i.method,i.url,!0),"include"===i.credentials&&(a.withCredentials=!0),"responseType"in a&&v.blob&&(a.responseType="blob"),i.headers.forEach(function(e,t){a.setRequestHeader(t,e)}),a.send("undefined"==typeof i._bodyInit?null:i._bodyInit)})},self.fetch.polyfill=!0}e.exports=self.fetch},343:function(e,t,r){"use strict";var n=r(1),o=r(331),i=n.Image,a=n.PixelRatio,s=n.Platform,l=n.StyleSheet,u=n.Text,c=n.TouchableHighlight,p=n.TouchableNativeFeedback,h=n.View,d=r(338),f=r(337),m=r(339),y=o({render:function(){var e=this.props.movie.ratings.critics_score,t=c;return"android"===s.OS&&(t=p),n.createElement(h,null,n.createElement(t,{onPress:this.props.onSelect,onShowUnderlay:this.props.onHighlight,onHideUnderlay:this.props.onUnhighlight},n.createElement(h,{style:g.row},n.createElement(i,{source:f(this.props.movie,"det"),style:g.cellImage}),n.createElement(h,{style:g.textContainer},n.createElement(u,{style:g.movieTitle,numberOfLines:2},this.props.movie.title),n.createElement(u,{style:g.movieYear,numberOfLines:1},this.props.movie.year," ","•"," ",n.createElement(u,{style:d(e)},"Critics ",m(e)))))))}}),g=l.create({textContainer:{flex:1},movieTitle:{flex:1,fontSize:16,fontWeight:"500",marginBottom:2},movieYear:{color:"#999999",fontSize:12},row:{alignItems:"center",backgroundColor:"white",flexDirection:"row",padding:5},cellImage:{backgroundColor:"#dddddd",height:93,marginRight:10,width:60},cellBorder:{backgroundColor:"rgba(0, 0, 0, 0.1)",height:1/a.get(),marginLeft:4}});e.exports=y},344:function(e,t,r){"use strict";var n=r(1),o=r(331),i=n.ActivityIndicatorIOS,a=n.TextInput,s=n.StyleSheet,l=n.View,u=o({render:function(){return n.createElement(l,{style:c.searchBar},n.createElement(a,{autoCapitalize:"none",autoCorrect:!1,onChange:this.props.onSearchChange,placeholder:"Search a movie...",onFocus:this.props.onFocus,style:c.searchBarInput}),n.createElement(i,{animating:this.props.isLoading,style:c.spinner}))}}),c=s.create({searchBar:{marginTop:0,padding:3,paddingLeft:8,flexDirection:"row",alignItems:"center"},searchBarInput:{fontSize:15,flex:1,height:30},spinner:{width:30}});e.exports=u}}); //# sourceMappingURL=movies.js.map \ No newline at end of file diff --git a/pages/movies.js.map b/pages/movies.js.map index 7c53ac7..7a5a45b 100644 --- a/pages/movies.js.map +++ b/pages/movies.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///movies.js","webpack:///./Examples/Movies/MoviesApp.web.js","webpack:///./Examples/Movies/MovieScreen.js","webpack:///./Examples/Movies/getImageSource.js","webpack:///./Examples/Movies/getStyleFromScore.js","webpack:///./Examples/Movies/getTextFromScore.js","webpack:///./Examples/Movies/SearchScreen.js","webpack:///./Libraries/Fetch/Jsonp.web.js","webpack:///./Libraries/Fetch/Fetch.web.js","webpack:///./Examples/Movies/MovieCell.js","webpack:///./Examples/Movies/SearchBar.web.js"],"names":["webpackJsonp","0","module","exports","__webpack_require__","React","AppRegistry","Navigator","StyleSheet","Platform","View","MovieScreen","SearchScreen","RouteMapper","route","navigationOperations","onComponentRef","name","createElement","navigator","style","flex","movie","MoviesApp","createClass","displayName","render","initialRoute","styles","container","renderScene","create","backgroundColor","registerComponent","OS","app","document","body","appendChild","runApplication","rootTag","447","Image","PixelRatio","ScrollView","Text","getImageSource","getStyleFromScore","getTextFromScore","contentContainerStyle","contentContainer","mainSection","source","this","props","detailsImage","rightPane","movieTitle","title","year","mpaaWrapper","mpaaText","mpaa_rating","Ratings","ratings","separator","synopsis","Cast","actors","abridged_cast","criticsScore","critics_score","audienceScore","audience_score","rating","ratingTitle","ratingValue","castTitle","map","actor","key","castActor","padding","justifyContent","fontSize","fontWeight","marginTop","alignSelf","borderColor","borderWidth","paddingHorizontal","marginVertical","fontFamily","flexDirection","width","height","marginRight","get","marginBottom","marginLeft","448","kind","uri","posters","thumbnail","replace","449","score","noScore","normalizedScore","Math","round","MAX_VALUE","color","450","451","ActivityIndicatorIOS","ListView","ProgressBarAndroid","TimerMixin","fetch","invariant","dismissKeyboard","MovieCell","SearchBar","API_URL","API_KEYS","resultsCache","dataForQuery","nextPageNumberForQuery","totalForQuery","LOADING","mixins","timeoutID","getInitialState","isLoading","isLoadingTail","dataSource","DataSource","rowHasChanged","row1","row2","filter","queryNumber","componentDidMount","searchMovies","_urlForQueryAndPage","query","pageNumber","apiKey","state","length","encodeURIComponent","_this","setState","cachedResultsForQuery","getDataSource","then","response","json","error","undefined","responseData","total","movies","done","hasMore","onEndReached","_this2","page","console","moviesForQuery","slice","i","push","cloneWithRows","selectMovie","component","passProps","onSearchChange","event","_this3","nativeEvent","text","toLowerCase","clearTimeout","setTimeout","renderFooter","scrollSpinner","alignItems","styleAttr","renderSeparator","sectionID","rowID","adjacentRowHighlighted","rowSeparator","rowSeparatorHide","renderRow","highlightRowFunc","_this4","id","onSelect","onHighlight","onUnhighlight","_this5","content","getRowCount","NoMovies","ref","automaticallyAdjustContentInsets","keyboardDismissMode","keyboardShouldPersistTaps","showsVerticalScrollIndicator","onFocus","refs","listview","getScrollResponder","scrollTo","centerText","noMoviesText","opacity","452","_interopRequireDefault","obj","__esModule","default","generateCallbackFunction","Date","now","ceil","random","clearFunction","functionName","window","e","removeScript","scriptId","script","getElementById","getElementsByTagName","removeChild","_ReactPromise","_ReactPromise2","defaultOptions","timeout","jsonpCallback","fetchJsonp","url","options","arguments","timeoutId","resolve","reject","callbackFunction","ok","indexOf","jsonpScript","setAttribute","Error","453","self","support","methods","redirectStatuses","normalizeName","String","test","TypeError","normalizeValue","value","Headers","headers","forEach","append","Object","getOwnPropertyNames","consumed","bodyUsed","fileReaderReady","reader","onload","result","onerror","readBlobAsArrayBuffer","blob","FileReader","readAsArrayBuffer","readBlobAsText","readAsText","Body","_initBody","_bodyInit","_bodyText","Blob","prototype","isPrototypeOf","_bodyBlob","formData","FormData","_bodyFormData","arrayBuffer","ArrayBuffer","rejected","decode","JSON","parse","normalizeMethod","method","upcased","toUpperCase","Request","input","credentials","mode","referrer","form","trim","split","bytes","shift","join","decodeURIComponent","xhr","head","pairs","getAllResponseHeaders","header","Response","bodyInit","type","status","statusText","list","values","getAll","has","hasOwnProperty","set","callback","thisArg","call","clone","redirect","RangeError","location","init","responseURL","getResponseHeader","request","XMLHttpRequest","responseText","open","withCredentials","responseType","setRequestHeader","send","polyfill","454","TouchableHighlight","TouchableNativeFeedback","TouchableElement","onPress","onShowUnderlay","onHideUnderlay","row","cellImage","textContainer","numberOfLines","movieYear","cellBorder","455","TextInput","searchBar","autoCapitalize","autoCorrect","onChange","placeholder","searchBarInput","animating","spinner","paddingLeft"],"mappings":"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","file":"movies.js","sourcesContent":["webpackJsonp([1],{\n\n/***/ 0:\n/***/ function(module, exports, __webpack_require__) {\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t'use strict';\n\t\n\tvar React=__webpack_require__(1);var\n\t\n\tAppRegistry=\n\t\n\t\n\t\n\t\n\tReact.AppRegistry;var Navigator=React.Navigator;var StyleSheet=React.StyleSheet;var Platform=React.Platform;var View=React.View;\n\t\n\tvar MovieScreen=__webpack_require__(447);\n\tvar SearchScreen=__webpack_require__(451);\n\t\n\tvar RouteMapper=function RouteMapper(route,navigationOperations,onComponentRef){\n\t\n\tif(route.name==='search'){\n\treturn(\n\tReact.createElement(SearchScreen,{navigator:navigationOperations}));\n\t\n\t}else if(route.name==='movie'){\n\treturn(\n\tReact.createElement(View,{style:{flex:1}},\n\tReact.createElement(MovieScreen,{\n\tstyle:{flex:1},\n\tnavigator:navigationOperations,\n\tmovie:route.movie})));\n\t\n\t\n\t\n\t}\n\t};\n\t\n\tvar MoviesApp=React.createClass({displayName:'MoviesApp',\n\trender:function render(){\n\tvar initialRoute={name:'search'};\n\treturn(\n\tReact.createElement(Navigator,{\n\tstyle:styles.container,\n\tinitialRoute:initialRoute,\n\trenderScene:RouteMapper}));\n\t\n\t\n\t}});\n\t\n\t\n\tvar styles=StyleSheet.create({\n\tcontainer:{\n\tflex:1,\n\tbackgroundColor:'white'}});\n\t\n\t\n\t\n\tAppRegistry.registerComponent('MoviesApp',function(){return MoviesApp;});\n\t\n\tif(Platform.OS=='web'){\n\tvar app=document.createElement('div');\n\tdocument.body.appendChild(app);\n\t\n\tAppRegistry.runApplication('MoviesApp',{\n\trootTag:app});\n\t\n\t}\n\t\n\tmodule.exports=MoviesApp;\n\n/***/ },\n\n/***/ 447:\n/***/ function(module, exports, __webpack_require__) {\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t'use strict';\n\t\n\tvar React=__webpack_require__(1);var\n\t\n\tImage=\n\t\n\t\n\t\n\t\n\t\n\tReact.Image;var PixelRatio=React.PixelRatio;var ScrollView=React.ScrollView;var StyleSheet=React.StyleSheet;var Text=React.Text;var View=React.View;\n\t\n\tvar getImageSource=__webpack_require__(448);\n\tvar getStyleFromScore=__webpack_require__(449);\n\tvar getTextFromScore=__webpack_require__(450);\n\t\n\tvar MovieScreen=React.createClass({displayName:'MovieScreen',\n\trender:function render(){\n\treturn(\n\tReact.createElement(ScrollView,{contentContainerStyle:styles.contentContainer},\n\tReact.createElement(View,{style:styles.mainSection},\n\t\n\t\n\t\n\tReact.createElement(Image,{\n\tsource:getImageSource(this.props.movie,'det'),\n\tstyle:styles.detailsImage}),\n\t\n\tReact.createElement(View,{style:styles.rightPane},\n\tReact.createElement(Text,{style:styles.movieTitle},this.props.movie.title),\n\tReact.createElement(Text,null,this.props.movie.year),\n\tReact.createElement(View,{style:styles.mpaaWrapper},\n\tReact.createElement(Text,{style:styles.mpaaText},\n\tthis.props.movie.mpaa_rating)),\n\t\n\t\n\tReact.createElement(Ratings,{ratings:this.props.movie.ratings}))),\n\t\n\t\n\tReact.createElement(View,{style:styles.separator}),\n\tReact.createElement(Text,null,\n\tthis.props.movie.synopsis),\n\t\n\tReact.createElement(View,{style:styles.separator}),\n\tReact.createElement(Cast,{actors:this.props.movie.abridged_cast})));\n\t\n\t\n\t}});\n\t\n\t\n\tvar Ratings=React.createClass({displayName:'Ratings',\n\trender:function render(){\n\tvar criticsScore=this.props.ratings.critics_score;\n\tvar audienceScore=this.props.ratings.audience_score;\n\t\n\treturn(\n\tReact.createElement(View,null,\n\tReact.createElement(View,{style:styles.rating},\n\tReact.createElement(Text,{style:styles.ratingTitle},'Critics:'),\n\tReact.createElement(Text,{style:[styles.ratingValue,getStyleFromScore(criticsScore)]},\n\tgetTextFromScore(criticsScore))),\n\t\n\t\n\tReact.createElement(View,{style:styles.rating},\n\tReact.createElement(Text,{style:styles.ratingTitle},'Audience:'),\n\tReact.createElement(Text,{style:[styles.ratingValue,getStyleFromScore(audienceScore)]},\n\tgetTextFromScore(audienceScore)))));\n\t\n\t\n\t\n\t\n\t}});\n\t\n\t\n\tvar Cast=React.createClass({displayName:'Cast',\n\trender:function render(){\n\tif(!this.props.actors){\n\treturn null;\n\t}\n\t\n\treturn(\n\tReact.createElement(View,null,\n\tReact.createElement(Text,{style:styles.castTitle},'Actors'),\n\tthis.props.actors.map(function(actor){return(\n\tReact.createElement(Text,{key:actor.name,style:styles.castActor},'\\u2022 ',\n\tactor.name));})));\n\t\n\t\n\t\n\t\n\t}});\n\t\n\t\n\tvar styles=StyleSheet.create({\n\tcontentContainer:{\n\tpadding:10},\n\t\n\trightPane:{\n\tjustifyContent:'space-between',\n\tflex:1},\n\t\n\tmovieTitle:{\n\tflex:1,\n\tfontSize:16,\n\tfontWeight:'500'},\n\t\n\trating:{\n\tmarginTop:10},\n\t\n\tratingTitle:{\n\tfontSize:14},\n\t\n\tratingValue:{\n\tfontSize:28,\n\tfontWeight:'500'},\n\t\n\tmpaaWrapper:{\n\talignSelf:'flex-start',\n\tborderColor:'black',\n\tborderWidth:1,\n\tpaddingHorizontal:3,\n\tmarginVertical:5},\n\t\n\tmpaaText:{\n\tfontFamily:'Palatino',\n\tfontSize:13,\n\tfontWeight:'500'},\n\t\n\tmainSection:{\n\tflexDirection:'row'},\n\t\n\tdetailsImage:{\n\twidth:134,\n\theight:200,\n\tbackgroundColor:'#eaeaea',\n\tmarginRight:10},\n\t\n\tseparator:{\n\tbackgroundColor:'rgba(0, 0, 0, 0.1)',\n\theight:1/PixelRatio.get(),\n\tmarginVertical:10},\n\t\n\tcastTitle:{\n\tfontWeight:'500',\n\tmarginBottom:3},\n\t\n\tcastActor:{\n\tmarginLeft:2}});\n\t\n\t\n\t\n\tmodule.exports=MovieScreen;\n\n/***/ },\n\n/***/ 448:\n/***/ function(module, exports) {\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t'use strict';\n\t\n\tfunction getImageSource(movie,kind){\n\tvar uri=movie&&movie.posters?movie.posters.thumbnail:null;\n\tif(uri&&kind){\n\turi=uri.replace('tmb',kind);\n\t}\n\treturn{uri:uri};\n\t}\n\t\n\tmodule.exports=getImageSource;\n\n/***/ },\n\n/***/ 449:\n/***/ function(module, exports, __webpack_require__) {\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t'use strict';\n\t\n\tvar React=__webpack_require__(1);var\n\t\n\tStyleSheet=\n\tReact.StyleSheet;\n\t\n\tvar MAX_VALUE=200;\n\t\n\t\n\t\n\tfunction getStyleFromScore(score){\n\tif(score<0){\n\treturn styles.noScore;\n\t}\n\t\n\tvar normalizedScore=Math.round(score/100*MAX_VALUE);\n\treturn{\n\tcolor:'rgb('+(\n\tMAX_VALUE-normalizedScore)+', '+\n\tnormalizedScore+', '+\n\t0+\n\t')'};\n\t\n\t}\n\t\n\tvar styles=StyleSheet.create({\n\tnoScore:{\n\tcolor:'#999999'}});\n\t\n\t\n\t\n\tmodule.exports=getStyleFromScore;\n\n/***/ },\n\n/***/ 450:\n/***/ function(module, exports) {\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t'use strict';\n\t\n\tfunction getTextFromScore(score){\n\treturn score>0?score+'%':'N/A';\n\t}\n\t\n\tmodule.exports=getTextFromScore;\n\n/***/ },\n\n/***/ 451:\n/***/ function(module, exports, __webpack_require__) {\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t'use strict';\n\t\n\tvar React=__webpack_require__(1);var\n\t\n\tActivityIndicatorIOS=\n\t\n\t\n\t\n\t\n\t\n\t\n\tReact.ActivityIndicatorIOS;var ListView=React.ListView;var Platform=React.Platform;var ProgressBarAndroid=React.ProgressBarAndroid;var StyleSheet=React.StyleSheet;var Text=React.Text;var View=React.View;\n\tvar TimerMixin=__webpack_require__(297);\n\t\n\tvar fetch=Platform.OS==='web'?__webpack_require__(452):__webpack_require__(453);\n\t\n\tvar invariant=__webpack_require__(276);\n\tvar dismissKeyboard=__webpack_require__(431);\n\t\n\tvar MovieCell=__webpack_require__(454);\n\tvar MovieScreen=__webpack_require__(447);\n\tvar SearchBar=__webpack_require__(455);\n\t\n\t\n\t\n\t\n\t\n\t\n\tvar API_URL='http://api.rottentomatoes.com/api/public/v1.0/';\n\tvar API_KEYS=[\n\t'7waqfqbprs7pajbz28mqf6vz'];\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\tvar resultsCache={\n\tdataForQuery:{},\n\tnextPageNumberForQuery:{},\n\ttotalForQuery:{}};\n\t\n\t\n\tvar LOADING={};\n\t\n\tvar SearchScreen=React.createClass({displayName:'SearchScreen',\n\tmixins:[TimerMixin],\n\t\n\ttimeoutID:null,\n\t\n\tgetInitialState:function getInitialState(){\n\treturn{\n\tisLoading:false,\n\tisLoadingTail:false,\n\tdataSource:new ListView.DataSource({\n\trowHasChanged:function rowHasChanged(row1,row2){return row1!==row2;}}),\n\t\n\tfilter:'',\n\tqueryNumber:0};\n\t\n\t},\n\t\n\tcomponentDidMount:function componentDidMount(){\n\tthis.searchMovies('');\n\t},\n\t\n\t_urlForQueryAndPage:function _urlForQueryAndPage(query,pageNumber){\n\tvar apiKey=API_KEYS[this.state.queryNumber%API_KEYS.length];\n\tif(query){\n\treturn(\n\tAPI_URL+'movies.json?apikey='+apiKey+'&q='+\n\tencodeURIComponent(query)+'&page_limit=20&page='+pageNumber);\n\t\n\t}else{\n\t\n\treturn(\n\tAPI_URL+'lists/movies/in_theaters.json?apikey='+apiKey+\n\t'&page_limit=20&page='+pageNumber);\n\t\n\t}\n\t},\n\t\n\tsearchMovies:function searchMovies(query){var _this=this;\n\tthis.timeoutID=null;\n\t\n\tthis.setState({filter:query});\n\t\n\tvar cachedResultsForQuery=resultsCache.dataForQuery[query];\n\tif(cachedResultsForQuery){\n\tif(!LOADING[query]){\n\tthis.setState({\n\tdataSource:this.getDataSource(cachedResultsForQuery),\n\tisLoading:false});\n\t\n\t}else{\n\tthis.setState({isLoading:true});\n\t}\n\treturn;\n\t}\n\t\n\tLOADING[query]=true;\n\tresultsCache.dataForQuery[query]=null;\n\tthis.setState({\n\tisLoading:true,\n\tqueryNumber:this.state.queryNumber+1,\n\tisLoadingTail:false});\n\t\n\t\n\t\n\tfetch(this._urlForQueryAndPage(query,1)).\n\tthen(function(response){return response.json();}).\n\tcatch(function(error){\n\tLOADING[query]=false;\n\tresultsCache.dataForQuery[query]=undefined;\n\t\n\t_this.setState({\n\tdataSource:_this.getDataSource([]),\n\tisLoading:false});\n\t\n\t}).\n\tthen(function(responseData){\n\tLOADING[query]=false;\n\tresultsCache.totalForQuery[query]=responseData.total;\n\tresultsCache.dataForQuery[query]=responseData.movies;\n\tresultsCache.nextPageNumberForQuery[query]=2;\n\t\n\tif(_this.state.filter!==query){\n\t\n\treturn;\n\t}\n\t\n\t_this.setState({\n\tisLoading:false,\n\tdataSource:_this.getDataSource(responseData.movies)});\n\t\n\t}).\n\tdone();\n\t},\n\t\n\thasMore:function hasMore(){\n\tvar query=this.state.filter;\n\tif(!resultsCache.dataForQuery[query]){\n\treturn true;\n\t}\n\treturn(\n\tresultsCache.totalForQuery[query]!==\n\tresultsCache.dataForQuery[query].length);\n\t\n\t},\n\t\n\tonEndReached:function onEndReached(){var _this2=this;\n\tvar query=this.state.filter;\n\tif(!this.hasMore()||this.state.isLoadingTail){\n\t\n\treturn;\n\t}\n\t\n\tif(LOADING[query]){\n\treturn;\n\t}\n\t\n\tLOADING[query]=true;\n\tthis.setState({\n\tqueryNumber:this.state.queryNumber+1,\n\tisLoadingTail:true});\n\t\n\t\n\tvar page=resultsCache.nextPageNumberForQuery[query];\n\tinvariant(page!=null,'Next page number for \"%s\" is missing',query);\n\t\n\tfetch(this._urlForQueryAndPage(query,page)).\n\tthen(function(response){return response.json();}).\n\tcatch(function(error){\n\tconsole.error(error);\n\tLOADING[query]=false;\n\t_this2.setState({\n\tisLoadingTail:false});\n\t\n\t}).\n\tthen(function(responseData){\n\tvar moviesForQuery=resultsCache.dataForQuery[query].slice();\n\t\n\tLOADING[query]=false;\n\t\n\tif(!responseData.movies){\n\tresultsCache.totalForQuery[query]=moviesForQuery.length;\n\t}else{\n\tfor(var i in responseData.movies){\n\tmoviesForQuery.push(responseData.movies[i]);\n\t}\n\tresultsCache.dataForQuery[query]=moviesForQuery;\n\tresultsCache.nextPageNumberForQuery[query]+=1;\n\t}\n\t\n\tif(_this2.state.filter!==query){\n\t\n\treturn;\n\t}\n\t\n\t_this2.setState({\n\tisLoadingTail:false,\n\tdataSource:_this2.getDataSource(resultsCache.dataForQuery[query])});\n\t\n\t}).\n\tdone();\n\t},\n\t\n\tgetDataSource:function getDataSource(movies){\n\treturn this.state.dataSource.cloneWithRows(movies);\n\t},\n\t\n\tselectMovie:function selectMovie(movie){\n\tif(Platform.OS==='ios'){\n\tthis.props.navigator.push({\n\ttitle:movie.title,\n\tcomponent:MovieScreen,\n\tpassProps:{movie:movie}});\n\t\n\t}else{\n\tdismissKeyboard();\n\tthis.props.navigator.push({\n\ttitle:movie.title,\n\tname:'movie',\n\tmovie:movie});\n\t\n\t}\n\t},\n\t\n\tonSearchChange:function onSearchChange(event){var _this3=this;\n\tvar filter=event.nativeEvent.text.toLowerCase();\n\t\n\tthis.clearTimeout(this.timeoutID);\n\tthis.timeoutID=this.setTimeout(function(){return _this3.searchMovies(filter);},100);\n\t},\n\t\n\trenderFooter:function renderFooter(){\n\tif(!this.hasMore()||!this.state.isLoadingTail){\n\treturn React.createElement(View,{style:styles.scrollSpinner});\n\t}\n\tif(Platform.OS==='ios'){\n\treturn React.createElement(ActivityIndicatorIOS,{style:styles.scrollSpinner});\n\t}else if(Platform.OS==='web'){\n\treturn(\n\tReact.createElement(View,{style:{alignItems:'center'}},\n\tReact.createElement(ActivityIndicatorIOS,{style:styles.scrollSpinner})));\n\t\n\t\n\t}else{\n\treturn(\n\tReact.createElement(View,{style:{alignItems:'center'}},\n\tReact.createElement(ProgressBarAndroid,{styleAttr:'Large'})));\n\t\n\t\n\t}\n\t},\n\t\n\trenderSeparator:function renderSeparator(\n\tsectionID,\n\trowID,\n\tadjacentRowHighlighted)\n\t{\n\tvar style=styles.rowSeparator;\n\tif(adjacentRowHighlighted){\n\tstyle=[style,styles.rowSeparatorHide];\n\t}\n\treturn(\n\tReact.createElement(View,{key:'SEP_'+sectionID+'_'+rowID,style:style}));\n\t\n\t},\n\t\n\trenderRow:function renderRow(\n\tmovie,\n\tsectionID,\n\trowID,\n\thighlightRowFunc)\n\t{var _this4=this;\n\treturn(\n\tReact.createElement(MovieCell,{\n\tkey:movie.id,\n\tonSelect:function onSelect(){return _this4.selectMovie(movie);},\n\tonHighlight:function onHighlight(){return highlightRowFunc(sectionID,rowID);},\n\tonUnhighlight:function onUnhighlight(){return highlightRowFunc(null,null);},\n\tmovie:movie}));\n\t\n\t\n\t},\n\t\n\trender:function render(){var _this5=this;\n\tvar content=this.state.dataSource.getRowCount()===0?\n\tReact.createElement(NoMovies,{\n\tfilter:this.state.filter,\n\tisLoading:this.state.isLoading}):\n\t\n\tReact.createElement(ListView,{\n\tref:'listview',\n\trenderSeparator:this.renderSeparator,\n\tdataSource:this.state.dataSource,\n\trenderFooter:this.renderFooter,\n\trenderRow:this.renderRow,\n\tonEndReached:this.onEndReached,\n\tautomaticallyAdjustContentInsets:false,\n\tkeyboardDismissMode:'on-drag',\n\tkeyboardShouldPersistTaps:true,\n\tshowsVerticalScrollIndicator:false});\n\t\n\t\n\treturn(\n\tReact.createElement(View,{style:styles.container},\n\tReact.createElement(SearchBar,{\n\tonSearchChange:this.onSearchChange,\n\tisLoading:this.state.isLoading,\n\tonFocus:function onFocus(){return(\n\t_this5.refs.listview&&_this5.refs.listview.getScrollResponder().scrollTo(0,0));}}),\n\t\n\tReact.createElement(View,{style:styles.separator}),\n\tcontent));\n\t\n\t\n\t}});\n\t\n\t\n\tvar NoMovies=React.createClass({displayName:'NoMovies',\n\trender:function render(){\n\tvar text='';\n\tif(this.props.filter){\n\ttext='No results for \"'+this.props.filter+'\"';\n\t}else if(!this.props.isLoading){\n\t\n\t\n\ttext='No movies found';\n\t}\n\t\n\treturn(\n\tReact.createElement(View,{style:[styles.container,styles.centerText]},\n\tReact.createElement(Text,{style:styles.noMoviesText},text)));\n\t\n\t\n\t}});\n\t\n\t\n\tvar styles=StyleSheet.create({\n\tcontainer:{\n\tflex:1,\n\tbackgroundColor:'white'},\n\t\n\tcenterText:{\n\talignItems:'center'},\n\t\n\tnoMoviesText:{\n\tmarginTop:80,\n\tcolor:'#888888'},\n\t\n\tseparator:{\n\theight:1,\n\tbackgroundColor:'#eeeeee'},\n\t\n\tscrollSpinner:{\n\tmarginVertical:20},\n\t\n\trowSeparator:{\n\tbackgroundColor:'rgba(0, 0, 0, 0.1)',\n\theight:1,\n\tmarginLeft:4},\n\t\n\trowSeparatorHide:{\n\topacity:0.0}});\n\t\n\t\n\t\n\tmodule.exports=SearchScreen;\n\n/***/ },\n\n/***/ 452:\n/***/ function(module, exports, __webpack_require__) {\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t'use strict';\n\t\n\tvar _ReactPromise=__webpack_require__(436);var _ReactPromise2=_interopRequireDefault(_ReactPromise);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}\n\t\n\t\n\tvar defaultOptions={\n\ttimeout:5000,\n\tjsonpCallback:'callback'};\n\t\n\t\n\tfunction generateCallbackFunction(){\n\treturn'jsonp_'+Date.now()+'_'+Math.ceil(Math.random()*100000);\n\t}\n\t\n\t\n\tfunction clearFunction(functionName){\n\t\n\t\n\ttry{\n\tdelete window[functionName];\n\t}catch(e){\n\twindow[functionName]=undefined;\n\t}\n\t}\n\t\n\tfunction removeScript(scriptId){\n\tvar script=document.getElementById(scriptId);\n\tdocument.getElementsByTagName(\"head\")[0].removeChild(script);\n\t}\n\t\n\tvar fetchJsonp=function fetchJsonp(url){var options=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};\n\tvar timeout=options.timeout!=null?options.timeout:defaultOptions.timeout;\n\tvar jsonpCallback=options.jsonpCallback!=null?options.jsonpCallback:defaultOptions.jsonpCallback;\n\t\n\tvar timeoutId=void 0;\n\t\n\treturn new _ReactPromise2.default(function(resolve,reject){\n\tvar callbackFunction=generateCallbackFunction();\n\t\n\twindow[callbackFunction]=function(response){\n\tresolve({\n\tok:true,\n\t\n\tjson:function json(){\n\treturn _ReactPromise2.default.resolve(response);\n\t}});\n\t\n\t\n\tif(timeoutId)clearTimeout(timeoutId);\n\t\n\tremoveScript(jsonpCallback+'_'+callbackFunction);\n\t\n\tclearFunction(callbackFunction);\n\t};\n\t\n\t\n\turl+=url.indexOf('?')===-1?'?':'&';\n\t\n\tvar jsonpScript=document.createElement('script');\n\tjsonpScript.setAttribute(\"src\",url+jsonpCallback+'='+callbackFunction);\n\tjsonpScript.id=jsonpCallback+'_'+callbackFunction;\n\tdocument.getElementsByTagName(\"head\")[0].appendChild(jsonpScript);\n\t\n\ttimeoutId=setTimeout(function(){\n\treject(new Error('JSONP request to '+url+' timed out'));\n\t\n\tclearFunction(callbackFunction);\n\tremoveScript(jsonpCallback+'_'+callbackFunction);\n\t},timeout);\n\t});\n\t};\n\t\n\tmodule.exports=fetchJsonp;\n\n/***/ },\n\n/***/ 453:\n/***/ function(module, exports, __webpack_require__) {\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t'use strict';\n\t\n\tvar _ReactPromise=__webpack_require__(436);var _ReactPromise2=_interopRequireDefault(_ReactPromise);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}\n\t\n\t\n\tif(!self.fetch){var\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\tsupport;var\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\tmethods;var\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\tredirectStatuses;(function(){function normalizeName(name){if(typeof name!=='string'){name=String(name);}if(/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)){throw new TypeError('Invalid character in header field name');}return name.toLowerCase();}function normalizeValue(value){if(typeof value!=='string'){value=String(value);}return value;}function Headers(headers){this.map={};if(headers instanceof Headers){headers.forEach(function(value,name){this.append(name,value);},this);}else if(headers){Object.getOwnPropertyNames(headers).forEach(function(name){this.append(name,headers[name]);},this);}}Headers.prototype.append=function(name,value){name=normalizeName(name);value=normalizeValue(value);var list=this.map[name];if(!list){list=[];this.map[name]=list;}list.push(value);};Headers.prototype['delete']=function(name){delete this.map[normalizeName(name)];};Headers.prototype.get=function(name){var values=this.map[normalizeName(name)];return values?values[0]:null;};Headers.prototype.getAll=function(name){return this.map[normalizeName(name)]||[];};Headers.prototype.has=function(name){return this.map.hasOwnProperty(normalizeName(name));};Headers.prototype.set=function(name,value){this.map[normalizeName(name)]=[normalizeValue(value)];};Headers.prototype.forEach=function(callback,thisArg){Object.getOwnPropertyNames(this.map).forEach(function(name){this.map[name].forEach(function(value){callback.call(thisArg,value,name,this);},this);},this);};function consumed(body){if(body.bodyUsed){return _ReactPromise2.default.reject(new TypeError('Already read'));}body.bodyUsed=true;}function fileReaderReady(reader){return new _ReactPromise2.default(function(resolve,reject){reader.onload=function(){resolve(reader.result);};reader.onerror=function(){reject(reader.error);};});}function readBlobAsArrayBuffer(blob){var reader=new FileReader();reader.readAsArrayBuffer(blob);return fileReaderReady(reader);}function readBlobAsText(blob){var reader=new FileReader();reader.readAsText(blob);return fileReaderReady(reader);}support={blob:'FileReader'in self&&'Blob'in self&&function(){try{new Blob();return true;}catch(e){return false;}}(),formData:'FormData'in self,arrayBuffer:'ArrayBuffer'in self};function Body(){this.bodyUsed=false;this._initBody=function(body){this._bodyInit=body;if(typeof body==='string'){this._bodyText=body;}else if(support.blob&&Blob.prototype.isPrototypeOf(body)){this._bodyBlob=body;}else if(support.formData&&FormData.prototype.isPrototypeOf(body)){this._bodyFormData=body;}else if(!body){this._bodyText='';}else if(support.arrayBuffer&&ArrayBuffer.prototype.isPrototypeOf(body)){}else{throw new Error('unsupported BodyInit type');}};if(support.blob){this.blob=function(){var rejected=consumed(this);if(rejected){return rejected;}if(this._bodyBlob){return _ReactPromise2.default.resolve(this._bodyBlob);}else if(this._bodyFormData){throw new Error('could not read FormData body as blob');}else{return _ReactPromise2.default.resolve(new Blob([this._bodyText]));}};this.arrayBuffer=function(){return this.blob().then(readBlobAsArrayBuffer);};this.text=function(){var rejected=consumed(this);if(rejected){return rejected;}if(this._bodyBlob){return readBlobAsText(this._bodyBlob);}else if(this._bodyFormData){throw new Error('could not read FormData body as text');}else{return _ReactPromise2.default.resolve(this._bodyText);}};}else{this.text=function(){var rejected=consumed(this);return rejected?rejected:_ReactPromise2.default.resolve(this._bodyText);};}if(support.formData){this.formData=function(){return this.text().then(decode);};}this.json=function(){return this.text().then(JSON.parse);};return this;}methods=['DELETE','GET','HEAD','OPTIONS','POST','PUT'];function normalizeMethod(method){var upcased=method.toUpperCase();return methods.indexOf(upcased)>-1?upcased:method;}function Request(input,options){options=options||{};var body=options.body;if(Request.prototype.isPrototypeOf(input)){if(input.bodyUsed){throw new TypeError('Already read');}this.url=input.url;this.credentials=input.credentials;if(!options.headers){this.headers=new Headers(input.headers);}this.method=input.method;this.mode=input.mode;if(!body){body=input._bodyInit;input.bodyUsed=true;}}else{this.url=input;}this.credentials=options.credentials||this.credentials||'omit';if(options.headers||!this.headers){this.headers=new Headers(options.headers);}this.method=normalizeMethod(options.method||this.method||'GET');this.mode=options.mode||this.mode||null;this.referrer=null;if((this.method==='GET'||this.method==='HEAD')&&body){throw new TypeError('Body not allowed for GET or HEAD requests');}this._initBody(body);}Request.prototype.clone=function(){return new Request(this);};function decode(body){var form=new FormData();body.trim().split('&').forEach(function(bytes){if(bytes){var split=bytes.split('=');var name=split.shift().replace(/\\+/g,' ');var value=split.join('=').replace(/\\+/g,' ');form.append(decodeURIComponent(name),decodeURIComponent(value));}});return form;}function headers(xhr){var head=new Headers();var pairs=xhr.getAllResponseHeaders().trim().split('\\n');pairs.forEach(function(header){var split=header.trim().split(':');var key=split.shift().trim();var value=split.join(':').trim();head.append(key,value);});return head;}Body.call(Request.prototype);function Response(bodyInit,options){if(!options){options={};}this._initBody(bodyInit);this.type='default';this.status=options.status;this.ok=this.status>=200&&this.status<300;this.statusText=options.statusText;this.headers=options.headers instanceof Headers?options.headers:new Headers(options.headers);this.url=options.url||'';}Body.call(Response.prototype);Response.prototype.clone=function(){return new Response(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new Headers(this.headers),url:this.url});};Response.error=function(){var response=new Response(null,{status:0,statusText:''});response.type='error';return response;};redirectStatuses=[301,302,303,307,308];\n\t\n\tResponse.redirect=function(url,status){\n\tif(redirectStatuses.indexOf(status)===-1){\n\tthrow new RangeError('Invalid status code');\n\t}\n\t\n\treturn new Response(null,{status:status,headers:{location:url}});\n\t};\n\t\n\tself.Headers=Headers;\n\tself.Request=Request;\n\tself.Response=Response;\n\t\n\tself.fetch=function(input,init){\n\treturn new _ReactPromise2.default(function(resolve,reject){\n\tvar request;\n\tif(Request.prototype.isPrototypeOf(input)&&!init){\n\trequest=input;\n\t}else{\n\trequest=new Request(input,init);\n\t}\n\t\n\tvar xhr=new XMLHttpRequest();\n\t\n\tfunction responseURL(){\n\tif('responseURL'in xhr){\n\treturn xhr.responseURL;\n\t}\n\t\n\t\n\tif(/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())){\n\treturn xhr.getResponseHeader('X-Request-URL');\n\t}\n\t\n\treturn;\n\t}\n\t\n\txhr.onload=function(){\n\tvar status=xhr.status===1223?204:xhr.status;\n\tif(status<100||status>599){\n\treject(new TypeError('Network request failed'));\n\treturn;\n\t}\n\tvar options={\n\tstatus:status,\n\tstatusText:xhr.statusText,\n\theaders:headers(xhr),\n\turl:responseURL()};\n\t\n\tvar body='response'in xhr?xhr.response:xhr.responseText;\n\tresolve(new Response(body,options));\n\t};\n\t\n\txhr.onerror=function(){\n\treject(new TypeError('Network request failed'));\n\t};\n\t\n\txhr.open(request.method,request.url,true);\n\t\n\tif(request.credentials==='include'){\n\txhr.withCredentials=true;\n\t}\n\t\n\tif('responseType'in xhr&&support.blob){\n\txhr.responseType='blob';\n\t}\n\t\n\trequest.headers.forEach(function(value,name){\n\txhr.setRequestHeader(name,value);\n\t});\n\t\n\txhr.send(typeof request._bodyInit==='undefined'?null:request._bodyInit);\n\t});\n\t};\n\t\n\tself.fetch.polyfill=true;})();\n\t}\n\t\n\tmodule.exports=self.fetch;\n\n/***/ },\n\n/***/ 454:\n/***/ function(module, exports, __webpack_require__) {\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t'use strict';\n\t\n\tvar React=__webpack_require__(1);var\n\t\n\tImage=\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\tReact.Image;var PixelRatio=React.PixelRatio;var Platform=React.Platform;var StyleSheet=React.StyleSheet;var Text=React.Text;var TouchableHighlight=React.TouchableHighlight;var TouchableNativeFeedback=React.TouchableNativeFeedback;var View=React.View;\n\t\n\tvar getStyleFromScore=__webpack_require__(449);\n\tvar getImageSource=__webpack_require__(448);\n\tvar getTextFromScore=__webpack_require__(450);\n\t\n\tvar MovieCell=React.createClass({displayName:'MovieCell',\n\trender:function render(){\n\tvar criticsScore=this.props.movie.ratings.critics_score;\n\tvar TouchableElement=TouchableHighlight;\n\tif(Platform.OS==='android'){\n\tTouchableElement=TouchableNativeFeedback;\n\t}\n\treturn(\n\tReact.createElement(View,null,\n\tReact.createElement(TouchableElement,{\n\tonPress:this.props.onSelect,\n\tonShowUnderlay:this.props.onHighlight,\n\tonHideUnderlay:this.props.onUnhighlight},\n\tReact.createElement(View,{style:styles.row},\n\t\n\t\n\t\n\tReact.createElement(Image,{\n\tsource:getImageSource(this.props.movie,'det'),\n\tstyle:styles.cellImage}),\n\t\n\tReact.createElement(View,{style:styles.textContainer},\n\tReact.createElement(Text,{style:styles.movieTitle,numberOfLines:2},\n\tthis.props.movie.title),\n\t\n\tReact.createElement(Text,{style:styles.movieYear,numberOfLines:1},\n\tthis.props.movie.year,\n\t' ','\\u2022',' ',\n\tReact.createElement(Text,{style:getStyleFromScore(criticsScore)},'Critics ',\n\tgetTextFromScore(criticsScore))))))));\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t}});\n\t\n\t\n\tvar styles=StyleSheet.create({\n\ttextContainer:{\n\tflex:1},\n\t\n\tmovieTitle:{\n\tflex:1,\n\tfontSize:16,\n\tfontWeight:'500',\n\tmarginBottom:2},\n\t\n\tmovieYear:{\n\tcolor:'#999999',\n\tfontSize:12},\n\t\n\trow:{\n\talignItems:'center',\n\tbackgroundColor:'white',\n\tflexDirection:'row',\n\tpadding:5},\n\t\n\tcellImage:{\n\tbackgroundColor:'#dddddd',\n\theight:93,\n\tmarginRight:10,\n\twidth:60},\n\t\n\tcellBorder:{\n\tbackgroundColor:'rgba(0, 0, 0, 0.1)',\n\t\n\theight:1/PixelRatio.get(),\n\tmarginLeft:4}});\n\t\n\t\n\t\n\tmodule.exports=MovieCell;\n\n/***/ },\n\n/***/ 455:\n/***/ function(module, exports, __webpack_require__) {\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t'use strict';\n\t\n\tvar React=__webpack_require__(1);var\n\t\n\tActivityIndicatorIOS=\n\t\n\t\n\t\n\tReact.ActivityIndicatorIOS;var TextInput=React.TextInput;var StyleSheet=React.StyleSheet;var View=React.View;\n\t\n\tvar SearchBar=React.createClass({displayName:'SearchBar',\n\trender:function render(){\n\treturn(\n\tReact.createElement(View,{style:styles.searchBar},\n\tReact.createElement(TextInput,{\n\tautoCapitalize:'none',\n\tautoCorrect:false,\n\tonChange:this.props.onSearchChange,\n\tplaceholder:'Search a movie...',\n\tonFocus:this.props.onFocus,\n\tstyle:styles.searchBarInput}),\n\t\n\tReact.createElement(ActivityIndicatorIOS,{\n\tanimating:this.props.isLoading,\n\tstyle:styles.spinner})));\n\t\n\t\n\t\n\t}});\n\t\n\t\n\tvar styles=StyleSheet.create({\n\tsearchBar:{\n\tmarginTop:0,\n\tpadding:3,\n\tpaddingLeft:8,\n\tflexDirection:'row',\n\talignItems:'center'},\n\t\n\tsearchBarInput:{\n\tfontSize:15,\n\tflex:1,\n\theight:30},\n\t\n\tspinner:{\n\twidth:30}});\n\t\n\t\n\t\n\tmodule.exports=SearchBar;\n\n/***/ }\n\n});\n\n\n/** WEBPACK FOOTER **\n ** movies.js\n **/","/**\n * The examples provided by Facebook are for non-commercial testing and\n * evaluation purposes only.\n *\n * Facebook reserves all rights not expressly granted.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL\n * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\n * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * @providesModule MoviesApp\n * @flow\n */\n'use strict';\n\nvar React = require('react-native');\nvar {\n AppRegistry,\n Navigator,\n StyleSheet,\n Platform,\n View\n} = React;\n\nvar MovieScreen = require('./MovieScreen');\nvar SearchScreen = require('./SearchScreen');\n\nvar RouteMapper = function(route, navigationOperations, onComponentRef) {\n\n if (route.name === 'search') {\n return (\n \n );\n } else if (route.name === 'movie') {\n return (\n \n \n \n );\n }\n};\n\nvar MoviesApp = React.createClass({\n render: function() {\n var initialRoute = {name: 'search'};\n return (\n \n );\n }\n});\n\nvar styles = StyleSheet.create({\n container: {\n flex: 1,\n backgroundColor: 'white',\n },\n});\n\nAppRegistry.registerComponent('MoviesApp', () => MoviesApp);\n\nif(Platform.OS == 'web'){\n var app = document.createElement('div');\n document.body.appendChild(app);\n\n AppRegistry.runApplication('MoviesApp', {\n rootTag: app\n })\n}\n\nmodule.exports = MoviesApp;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Examples/Movies/MoviesApp.web.js\n **/","/**\n * The examples provided by Facebook are for non-commercial testing and\n * evaluation purposes only.\n *\n * Facebook reserves all rights not expressly granted.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL\n * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\n * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * @flow\n */\n'use strict';\n\nvar React = require('react-native');\nvar {\n Image,\n PixelRatio,\n ScrollView,\n StyleSheet,\n Text,\n View,\n} = React;\n\nvar getImageSource = require('./getImageSource');\nvar getStyleFromScore = require('./getStyleFromScore');\nvar getTextFromScore = require('./getTextFromScore');\n\nvar MovieScreen = React.createClass({\n render: function() {\n return (\n \n \n {/* $FlowIssue #7363964 - There's a bug in Flow where you cannot\n * omit a property or set it to undefined if it's inside a shape,\n * even if it isn't required */}\n \n \n {this.props.movie.title}\n {this.props.movie.year}\n \n \n {this.props.movie.mpaa_rating}\n \n \n \n \n \n \n \n {this.props.movie.synopsis}\n \n \n \n \n );\n },\n});\n\nvar Ratings = React.createClass({\n render: function() {\n var criticsScore = this.props.ratings.critics_score;\n var audienceScore = this.props.ratings.audience_score;\n\n return (\n \n \n Critics:\n \n {getTextFromScore(criticsScore)}\n \n \n \n Audience:\n \n {getTextFromScore(audienceScore)}\n \n \n \n );\n },\n});\n\nvar Cast = React.createClass({\n render: function() {\n if (!this.props.actors) {\n return null;\n }\n\n return (\n \n Actors\n {this.props.actors.map(actor =>\n \n • {actor.name}\n \n )}\n \n );\n },\n});\n\nvar styles = StyleSheet.create({\n contentContainer: {\n padding: 10,\n },\n rightPane: {\n justifyContent: 'space-between',\n flex: 1,\n },\n movieTitle: {\n flex: 1,\n fontSize: 16,\n fontWeight: '500',\n },\n rating: {\n marginTop: 10,\n },\n ratingTitle: {\n fontSize: 14,\n },\n ratingValue: {\n fontSize: 28,\n fontWeight: '500',\n },\n mpaaWrapper: {\n alignSelf: 'flex-start',\n borderColor: 'black',\n borderWidth: 1,\n paddingHorizontal: 3,\n marginVertical: 5,\n },\n mpaaText: {\n fontFamily: 'Palatino',\n fontSize: 13,\n fontWeight: '500',\n },\n mainSection: {\n flexDirection: 'row',\n },\n detailsImage: {\n width: 134,\n height: 200,\n backgroundColor: '#eaeaea',\n marginRight: 10,\n },\n separator: {\n backgroundColor: 'rgba(0, 0, 0, 0.1)',\n height: 1 / PixelRatio.get(),\n marginVertical: 10,\n },\n castTitle: {\n fontWeight: '500',\n marginBottom: 3,\n },\n castActor: {\n marginLeft: 2,\n },\n});\n\nmodule.exports = MovieScreen;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Examples/Movies/MovieScreen.js\n **/","/**\n * The examples provided by Facebook are for non-commercial testing and\n * evaluation purposes only.\n *\n * Facebook reserves all rights not expressly granted.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL\n * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\n * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * @flow\n */\n'use strict';\n\nfunction getImageSource(movie: Object, kind: ?string): {uri: ?string} {\n var uri = movie && movie.posters ? movie.posters.thumbnail : null;\n if (uri && kind) {\n uri = uri.replace('tmb', kind);\n }\n return { uri };\n}\n\nmodule.exports = getImageSource;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Examples/Movies/getImageSource.js\n **/","/**\n * The examples provided by Facebook are for non-commercial testing and\n * evaluation purposes only.\n *\n * Facebook reserves all rights not expressly granted.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL\n * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\n * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * @flow\n */\n'use strict';\n\nvar React = require('react-native');\nvar {\n StyleSheet,\n} = React;\n\nvar MAX_VALUE = 200;\n\n// import type { StyleObj } from 'StyleSheetTypes';\n\nfunction getStyleFromScore(score: number) {\n if (score < 0) {\n return styles.noScore;\n }\n\n var normalizedScore = Math.round((score / 100) * MAX_VALUE);\n return {\n color: 'rgb(' +\n (MAX_VALUE - normalizedScore) + ', ' +\n normalizedScore + ', ' +\n 0 +\n ')'\n };\n}\n\nvar styles = StyleSheet.create({\n noScore: {\n color: '#999999',\n },\n});\n\nmodule.exports = getStyleFromScore;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Examples/Movies/getStyleFromScore.js\n **/","/**\n * The examples provided by Facebook are for non-commercial testing and\n * evaluation purposes only.\n *\n * Facebook reserves all rights not expressly granted.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL\n * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\n * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * @flow\n */\n'use strict';\n\nfunction getTextFromScore(score: number): string {\n return score > 0 ? score + '%' : 'N/A';\n}\n\nmodule.exports = getTextFromScore;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Examples/Movies/getTextFromScore.js\n **/","/**\n * The examples provided by Facebook are for non-commercial testing and\n * evaluation purposes only.\n *\n * Facebook reserves all rights not expressly granted.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL\n * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\n * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * @flow\n */\n'use strict';\n\nvar React = require('react-native');\nvar {\n ActivityIndicatorIOS,\n ListView,\n Platform,\n ProgressBarAndroid,\n StyleSheet,\n Text,\n View,\n} = React;\nvar TimerMixin = require('react-timer-mixin');\n\nvar fetch = Platform.OS === 'web'? require('ReactJsonp'): require('ReactFetch');\n\nvar invariant = require('fbjs/lib/invariant');\nvar dismissKeyboard = require('ReactDismissKeyboard');\n\nvar MovieCell = require('./MovieCell');\nvar MovieScreen = require('./MovieScreen');\nvar SearchBar = require('SearchBar');\n\n/**\n * This is for demo purposes only, and rate limited.\n * In case you want to use the Rotten Tomatoes' API on a real app you should\n * create an account at http://developer.rottentomatoes.com/\n */\nvar API_URL = 'http://api.rottentomatoes.com/api/public/v1.0/';\nvar API_KEYS = [\n '7waqfqbprs7pajbz28mqf6vz',\n // 'y4vwv8m33hed9ety83jmv52f', Fallback api_key\n];\n\n// Results should be cached keyed by the query\n// with values of null meaning \"being fetched\"\n// and anything besides null and undefined\n// as the result of a valid query\nvar resultsCache = {\n dataForQuery: {},\n nextPageNumberForQuery: {},\n totalForQuery: {},\n};\n\nvar LOADING = {};\n\nvar SearchScreen = React.createClass({\n mixins: [TimerMixin],\n\n timeoutID: (null: any),\n\n getInitialState: function() {\n return {\n isLoading: false,\n isLoadingTail: false,\n dataSource: new ListView.DataSource({\n rowHasChanged: (row1, row2) => row1 !== row2,\n }),\n filter: '',\n queryNumber: 0,\n };\n },\n\n componentDidMount: function() {\n this.searchMovies('');\n },\n\n _urlForQueryAndPage: function(query: string, pageNumber: number): string {\n var apiKey = API_KEYS[this.state.queryNumber % API_KEYS.length];\n if (query) {\n return (\n API_URL + 'movies.json?apikey=' + apiKey + '&q=' +\n encodeURIComponent(query) + '&page_limit=20&page=' + pageNumber\n );\n } else {\n // With no query, load latest movies\n return (\n API_URL + 'lists/movies/in_theaters.json?apikey=' + apiKey +\n '&page_limit=20&page=' + pageNumber\n );\n }\n },\n\n searchMovies: function(query: string) {\n this.timeoutID = null;\n\n this.setState({filter: query});\n\n var cachedResultsForQuery = resultsCache.dataForQuery[query];\n if (cachedResultsForQuery) {\n if (!LOADING[query]) {\n this.setState({\n dataSource: this.getDataSource(cachedResultsForQuery),\n isLoading: false\n });\n } else {\n this.setState({isLoading: true});\n }\n return;\n }\n\n LOADING[query] = true;\n resultsCache.dataForQuery[query] = null;\n this.setState({\n isLoading: true,\n queryNumber: this.state.queryNumber + 1,\n isLoadingTail: false,\n });\n\n\n fetch(this._urlForQueryAndPage(query, 1))\n .then((response) => response.json())\n .catch((error) => {\n LOADING[query] = false;\n resultsCache.dataForQuery[query] = undefined;\n\n this.setState({\n dataSource: this.getDataSource([]),\n isLoading: false,\n });\n })\n .then((responseData) => {\n LOADING[query] = false;\n resultsCache.totalForQuery[query] = responseData.total;\n resultsCache.dataForQuery[query] = responseData.movies;\n resultsCache.nextPageNumberForQuery[query] = 2;\n\n if (this.state.filter !== query) {\n // do not update state if the query is stale\n return;\n }\n\n this.setState({\n isLoading: false,\n dataSource: this.getDataSource(responseData.movies),\n });\n })\n .done();\n },\n\n hasMore: function(): boolean {\n var query = this.state.filter;\n if (!resultsCache.dataForQuery[query]) {\n return true;\n }\n return (\n resultsCache.totalForQuery[query] !==\n resultsCache.dataForQuery[query].length\n );\n },\n\n onEndReached: function() {\n var query = this.state.filter;\n if (!this.hasMore() || this.state.isLoadingTail) {\n // We're already fetching or have all the elements so noop\n return;\n }\n\n if (LOADING[query]) {\n return;\n }\n\n LOADING[query] = true;\n this.setState({\n queryNumber: this.state.queryNumber + 1,\n isLoadingTail: true,\n });\n\n var page = resultsCache.nextPageNumberForQuery[query];\n invariant(page != null, 'Next page number for \"%s\" is missing', query);\n\n fetch(this._urlForQueryAndPage(query, page))\n .then((response) => response.json())\n .catch((error) => {\n console.error(error);\n LOADING[query] = false;\n this.setState({\n isLoadingTail: false,\n });\n })\n .then((responseData) => {\n var moviesForQuery = resultsCache.dataForQuery[query].slice();\n\n LOADING[query] = false;\n // We reached the end of the list before the expected number of results\n if (!responseData.movies) {\n resultsCache.totalForQuery[query] = moviesForQuery.length;\n } else {\n for (var i in responseData.movies) {\n moviesForQuery.push(responseData.movies[i]);\n }\n resultsCache.dataForQuery[query] = moviesForQuery;\n resultsCache.nextPageNumberForQuery[query] += 1;\n }\n\n if (this.state.filter !== query) {\n // do not update state if the query is stale\n return;\n }\n\n this.setState({\n isLoadingTail: false,\n dataSource: this.getDataSource(resultsCache.dataForQuery[query]),\n });\n })\n .done();\n },\n\n getDataSource: function(movies: Array): ListView.DataSource {\n return this.state.dataSource.cloneWithRows(movies);\n },\n\n selectMovie: function(movie: Object) {\n if (Platform.OS === 'ios') {\n this.props.navigator.push({\n title: movie.title,\n component: MovieScreen,\n passProps: {movie},\n });\n } else {\n dismissKeyboard();\n this.props.navigator.push({\n title: movie.title,\n name: 'movie',\n movie: movie,\n });\n }\n },\n\n onSearchChange: function(event: Object) {\n var filter = event.nativeEvent.text.toLowerCase();\n\n this.clearTimeout(this.timeoutID);\n this.timeoutID = this.setTimeout(() => this.searchMovies(filter), 100);\n },\n\n renderFooter: function() {\n if (!this.hasMore() || !this.state.isLoadingTail) {\n return ;\n }\n if (Platform.OS === 'ios') {\n return ;\n } else if (Platform.OS === 'web'){\n return (\n \n \n \n );\n } else {\n return (\n \n \n \n );\n }\n },\n\n renderSeparator: function(\n sectionID: number | string,\n rowID: number | string,\n adjacentRowHighlighted: boolean\n ) {\n var style = styles.rowSeparator;\n if (adjacentRowHighlighted) {\n style = [style, styles.rowSeparatorHide];\n }\n return (\n \n );\n },\n\n renderRow: function(\n movie: Object,\n sectionID: number | string,\n rowID: number | string,\n highlightRowFunc: (sectionID: ?number | string, rowID: ?number | string) => void,\n ) {\n return (\n this.selectMovie(movie)}\n onHighlight={() => highlightRowFunc(sectionID, rowID)}\n onUnhighlight={() => highlightRowFunc(null, null)}\n movie={movie}\n />\n );\n },\n\n render: function() {\n var content = this.state.dataSource.getRowCount() === 0 ?\n :\n ;\n\n return (\n \n \n this.refs.listview && this.refs.listview.getScrollResponder().scrollTo(0, 0)}\n />\n \n {content}\n \n );\n },\n});\n\nvar NoMovies = React.createClass({\n render: function() {\n var text = '';\n if (this.props.filter) {\n text = `No results for \"${this.props.filter}\"`;\n } else if (!this.props.isLoading) {\n // If we're looking at the latest movies, aren't currently loading, and\n // still have no results, show a message\n text = 'No movies found';\n }\n\n return (\n \n {text}\n \n );\n }\n});\n\nvar styles = StyleSheet.create({\n container: {\n flex: 1,\n backgroundColor: 'white',\n },\n centerText: {\n alignItems: 'center',\n },\n noMoviesText: {\n marginTop: 80,\n color: '#888888',\n },\n separator: {\n height: 1,\n backgroundColor: '#eeeeee',\n },\n scrollSpinner: {\n marginVertical: 20,\n },\n rowSeparator: {\n backgroundColor: 'rgba(0, 0, 0, 0.1)',\n height: 1,\n marginLeft: 4,\n },\n rowSeparatorHide: {\n opacity: 0.0,\n },\n});\n\nmodule.exports = SearchScreen;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Examples/Movies/SearchScreen.js\n **/","/**\n * Copyright (c) 2015-present, Alibaba Group Holding Limited.\n * All rights reserved.\n *\n * @providesModule ReactJsonp\n */\n'use strict';\n\nimport Promise from 'ReactPromise';\n\n// From https://github.com/camsong/fetch-jsonp\nconst defaultOptions = {\n timeout: 5000,\n jsonpCallback: 'callback'\n};\n\nfunction generateCallbackFunction() {\n return `jsonp_${Date.now()}_${Math.ceil(Math.random() * 100000)}`;\n}\n\n// Known issue: Will throw 'Uncaught ReferenceError: callback_*** is not defined' error if request timeout\nfunction clearFunction(functionName) {\n // IE8 throws an exception when you try to delete a property on window\n // http://stackoverflow.com/a/1824228/751089\n try {\n delete window[functionName];\n } catch(e) {\n window[functionName] = undefined;\n }\n}\n\nfunction removeScript(scriptId) {\n const script = document.getElementById(scriptId);\n document.getElementsByTagName(\"head\")[0].removeChild(script);\n}\n\nconst fetchJsonp = function(url, options = {}) {\n const timeout = options.timeout != null ? options.timeout : defaultOptions.timeout;\n const jsonpCallback = options.jsonpCallback != null ? options.jsonpCallback : defaultOptions.jsonpCallback;\n\n let timeoutId;\n\n return new Promise((resolve, reject) => {\n const callbackFunction = generateCallbackFunction();\n\n window[callbackFunction] = function(response) {\n resolve({\n ok: true,\n // keep consistent with fetch API\n json: function() {\n return Promise.resolve(response);\n }\n });\n\n if (timeoutId) clearTimeout(timeoutId);\n\n removeScript(jsonpCallback + '_' + callbackFunction);\n\n clearFunction(callbackFunction);\n };\n\n // Check if the user set their own params, and if not add a ? to start a list of params\n url += (url.indexOf('?') === -1) ? '?' : '&';\n\n const jsonpScript = document.createElement('script');\n jsonpScript.setAttribute(\"src\", url + jsonpCallback + '=' + callbackFunction);\n jsonpScript.id = jsonpCallback + '_' + callbackFunction;\n document.getElementsByTagName(\"head\")[0].appendChild(jsonpScript);\n\n timeoutId = setTimeout(() => {\n reject(new Error(`JSONP request to ${url} timed out`));\n\n clearFunction(callbackFunction);\n removeScript(jsonpCallback + '_' + callbackFunction);\n }, timeout);\n });\n};\n\nmodule.exports = fetchJsonp;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Libraries/Fetch/Jsonp.web.js\n **/","/**\n * Copyright (c) 2015-present, Alibaba Group Holding Limited.\n * All rights reserved.\n *\n * @providesModule ReactFetch\n */\n'use strict';\n\nimport Promise from 'ReactPromise';\n\n// https://github.com/github/fetch\nif (!self.fetch) {\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value)\n }\n return value\n }\n\n function Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var list = this.map[name]\n if (!list) {\n list = []\n this.map[name] = list\n }\n list.push(value)\n }\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)]\n }\n\n Headers.prototype.get = function(name) {\n var values = this.map[normalizeName(name)]\n return values ? values[0] : null\n }\n\n Headers.prototype.getAll = function(name) {\n return this.map[normalizeName(name)] || []\n }\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n }\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = [normalizeValue(value)]\n }\n\n Headers.prototype.forEach = function(callback, thisArg) {\n Object.getOwnPropertyNames(this.map).forEach(function(name) {\n this.map[name].forEach(function(value) {\n callback.call(thisArg, value, name, this)\n }, this)\n }, this)\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n reader.readAsArrayBuffer(blob)\n return fileReaderReady(reader)\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader()\n reader.readAsText(blob)\n return fileReaderReady(reader)\n }\n\n var support = {\n blob: 'FileReader' in self && 'Blob' in self && (function() {\n try {\n new Blob();\n return true\n } catch(e) {\n return false\n }\n })(),\n formData: 'FormData' in self,\n arrayBuffer: 'ArrayBuffer' in self\n }\n\n function Body() {\n this.bodyUsed = false\n\n\n this._initBody = function(body) {\n this._bodyInit = body\n if (typeof body === 'string') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (!body) {\n this._bodyText = ''\n } else if (support.arrayBuffer && ArrayBuffer.prototype.isPrototypeOf(body)) {\n // Only support ArrayBuffers for POST method.\n // Receiving ArrayBuffers happens via Blobs, instead.\n } else {\n throw new Error('unsupported BodyInit type')\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n\n this.arrayBuffer = function() {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n } else {\n this.text = function() {\n var rejected = consumed(this)\n return rejected ? rejected : Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return (methods.indexOf(upcased) > -1) ? upcased : method\n }\n\n function Request(input, options) {\n options = options || {}\n var body = options.body\n if (Request.prototype.isPrototypeOf(input)) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n if (!body) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = input\n }\n\n this.credentials = options.credentials || this.credentials || 'omit'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || 'GET')\n this.mode = options.mode || this.mode || null\n this.referrer = null\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body)\n }\n\n Request.prototype.clone = function() {\n return new Request(this)\n }\n\n function decode(body) {\n var form = new FormData()\n body.trim().split('&').forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=')\n var name = split.shift().replace(/\\+/g, ' ')\n var value = split.join('=').replace(/\\+/g, ' ')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n }\n\n function headers(xhr) {\n var head = new Headers()\n var pairs = xhr.getAllResponseHeaders().trim().split('\\n')\n pairs.forEach(function(header) {\n var split = header.trim().split(':')\n var key = split.shift().trim()\n var value = split.join(':').trim()\n head.append(key, value)\n })\n return head\n }\n\n Body.call(Request.prototype)\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {}\n }\n\n this._initBody(bodyInit)\n this.type = 'default'\n this.status = options.status\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = options.statusText\n this.headers = options.headers instanceof Headers ? options.headers : new Headers(options.headers)\n this.url = options.url || ''\n }\n\n Body.call(Response.prototype)\n\n Response.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n }\n\n Response.error = function() {\n var response = new Response(null, {status: 0, statusText: ''})\n response.type = 'error'\n return response\n }\n\n var redirectStatuses = [301, 302, 303, 307, 308]\n\n Response.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n }\n\n self.Headers = Headers;\n self.Request = Request;\n self.Response = Response;\n\n self.fetch = function(input, init) {\n return new Promise(function(resolve, reject) {\n var request\n if (Request.prototype.isPrototypeOf(input) && !init) {\n request = input\n } else {\n request = new Request(input, init)\n }\n\n var xhr = new XMLHttpRequest()\n\n function responseURL() {\n if ('responseURL' in xhr) {\n return xhr.responseURL\n }\n\n // Avoid security warnings on getResponseHeader when not allowed by CORS\n if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {\n return xhr.getResponseHeader('X-Request-URL')\n }\n\n return;\n }\n\n xhr.onload = function() {\n var status = (xhr.status === 1223) ? 204 : xhr.status\n if (status < 100 || status > 599) {\n reject(new TypeError('Network request failed'))\n return\n }\n var options = {\n status: status,\n statusText: xhr.statusText,\n headers: headers(xhr),\n url: responseURL()\n }\n var body = 'response' in xhr ? xhr.response : xhr.responseText;\n resolve(new Response(body, options))\n }\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.open(request.method, request.url, true)\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob'\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n })\n }\n\n self.fetch.polyfill = true\n}\n\nmodule.exports = self.fetch;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Libraries/Fetch/Fetch.web.js\n **/","/**\n * The examples provided by Facebook are for non-commercial testing and\n * evaluation purposes only.\n *\n * Facebook reserves all rights not expressly granted.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL\n * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\n * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * @flow\n */\n'use strict';\n\nvar React = require('react-native');\nvar {\n Image,\n PixelRatio,\n Platform,\n StyleSheet,\n Text,\n TouchableHighlight,\n TouchableNativeFeedback,\n View\n} = React;\n\nvar getStyleFromScore = require('./getStyleFromScore');\nvar getImageSource = require('./getImageSource');\nvar getTextFromScore = require('./getTextFromScore');\n\nvar MovieCell = React.createClass({\n render: function() {\n var criticsScore = this.props.movie.ratings.critics_score;\n var TouchableElement = TouchableHighlight;\n if (Platform.OS === 'android') {\n TouchableElement = TouchableNativeFeedback;\n }\n return (\n \n \n \n {/* $FlowIssue #7363964 - There's a bug in Flow where you cannot\n * omit a property or set it to undefined if it's inside a shape,\n * even if it isn't required */}\n \n \n \n {this.props.movie.title}\n \n \n {this.props.movie.year}\n {' '}•{' '}\n \n Critics {getTextFromScore(criticsScore)}\n \n \n \n \n \n \n );\n }\n});\n\nvar styles = StyleSheet.create({\n textContainer: {\n flex: 1,\n },\n movieTitle: {\n flex: 1,\n fontSize: 16,\n fontWeight: '500',\n marginBottom: 2,\n },\n movieYear: {\n color: '#999999',\n fontSize: 12,\n },\n row: {\n alignItems: 'center',\n backgroundColor: 'white',\n flexDirection: 'row',\n padding: 5,\n },\n cellImage: {\n backgroundColor: '#dddddd',\n height: 93,\n marginRight: 10,\n width: 60,\n },\n cellBorder: {\n backgroundColor: 'rgba(0, 0, 0, 0.1)',\n // Trick to get the thinest line the device can display\n height: 1 / PixelRatio.get(),\n marginLeft: 4,\n },\n});\n\nmodule.exports = MovieCell;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Examples/Movies/MovieCell.js\n **/","/**\n * The examples provided by Facebook are for non-commercial testing and\n * evaluation purposes only.\n *\n * Facebook reserves all rights not expressly granted.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL\n * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\n * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * @providesModule SearchBar\n * @flow\n */\n'use strict';\n\nvar React = require('react-native');\nvar {\n ActivityIndicatorIOS,\n TextInput,\n StyleSheet,\n View,\n} = React;\n\nvar SearchBar = React.createClass({\n render: function() {\n return (\n \n \n \n \n );\n }\n});\n\nvar styles = StyleSheet.create({\n searchBar: {\n marginTop: 0,\n padding: 3,\n paddingLeft: 8,\n flexDirection: 'row',\n alignItems: 'center',\n },\n searchBarInput: {\n fontSize: 15,\n flex: 1,\n height: 30,\n },\n spinner: {\n width: 30,\n },\n});\n\nmodule.exports = SearchBar;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Examples/Movies/SearchBar.web.js\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///movies.js","webpack:///./Examples/Movies/MoviesApp.web.js","webpack:///./~/create-react-class/index.js","webpack:///./~/create-react-class/factory.js","webpack:///./Examples/Movies/MovieScreen.js","webpack:///./Examples/Movies/getImageSource.js","webpack:///./Examples/Movies/getStyleFromScore.js","webpack:///./Examples/Movies/getTextFromScore.js","webpack:///./Examples/Movies/SearchScreen.js","webpack:///./Libraries/Fetch/Jsonp.web.js","webpack:///./Libraries/Fetch/Fetch.web.js","webpack:///./Examples/Movies/MovieCell.js","webpack:///./Examples/Movies/SearchBar.web.js"],"names":["webpackJsonp","0","module","exports","__webpack_require__","React","createClass","AppRegistry","Navigator","StyleSheet","Platform","View","MovieScreen","SearchScreen","RouteMapper","route","navigationOperations","onComponentRef","name","createElement","navigator","style","flex","movie","MoviesApp","render","initialRoute","styles","container","renderScene","create","backgroundColor","registerComponent","OS","app","document","body","appendChild","runApplication","rootTag","331","factory","Error","ReactNoopUpdateQueue","Component","updater","isValidElement","332","identity","fn","ReactComponent","validateMethodOverride","isAlreadyDefined","specPolicy","ReactClassInterface","hasOwnProperty","ReactClassMixin","_invariant","mixSpecIntoComponent","Constructor","spec","proto","prototype","autoBindPairs","__reactAutoBindPairs","MIXINS_KEY","RESERVED_SPEC_KEYS","mixins","property","isReactClassMethod","isFunction","shouldAutoBind","autobind","push","createMergedResultFunction","createChainedFunction","mixStaticSpecIntoComponent","statics","isReserved","isInherited","mergeIntoWithNoDuplicateKeys","one","two","key","undefined","a","apply","this","arguments","b","c","bindAutoBindMethod","component","method","boundMethod","bind","bindAutoBindMethods","pairs","i","length","autoBindKey","props","context","refs","emptyObject","state","initialState","getInitialState","Array","isArray","displayName","ReactClassComponent","constructor","injectedMixins","forEach","IsMountedPreMixin","IsMountedPostMixin","getDefaultProps","defaultProps","methodName","propTypes","contextTypes","childContextTypes","getChildContext","componentWillMount","componentDidMount","componentWillReceiveProps","shouldComponentUpdate","componentWillUpdate","componentDidUpdate","componentWillUnmount","updateComponent","_assign","__isMounted","replaceState","newState","callback","enqueueReplaceState","isMounted","ReactPropTypeLocationNames","333","334","335","336","Image","PixelRatio","ScrollView","Text","getImageSource","getStyleFromScore","getTextFromScore","contentContainerStyle","contentContainer","mainSection","source","detailsImage","rightPane","movieTitle","title","year","mpaaWrapper","mpaaText","mpaa_rating","Ratings","ratings","separator","synopsis","Cast","actors","abridged_cast","criticsScore","critics_score","audienceScore","audience_score","rating","ratingTitle","ratingValue","castTitle","map","actor","castActor","padding","justifyContent","fontSize","fontWeight","marginTop","alignSelf","borderColor","borderWidth","paddingHorizontal","marginVertical","fontFamily","flexDirection","width","height","marginRight","get","marginBottom","marginLeft","337","kind","uri","posters","thumbnail","replace","338","score","noScore","normalizedScore","Math","round","MAX_VALUE","color","339","340","ActivityIndicatorIOS","ListView","ProgressBarAndroid","TimerMixin","fetch","invariant","dismissKeyboard","MovieCell","SearchBar","API_URL","API_KEYS","resultsCache","dataForQuery","nextPageNumberForQuery","totalForQuery","LOADING","timeoutID","isLoading","isLoadingTail","dataSource","DataSource","rowHasChanged","row1","row2","filter","queryNumber","searchMovies","_urlForQueryAndPage","query","pageNumber","apiKey","encodeURIComponent","_this","setState","cachedResultsForQuery","getDataSource","then","response","json","error","responseData","total","movies","done","hasMore","onEndReached","_this2","page","console","moviesForQuery","slice","cloneWithRows","selectMovie","passProps","onSearchChange","event","_this3","nativeEvent","text","toLowerCase","clearTimeout","setTimeout","renderFooter","scrollSpinner","alignItems","styleAttr","renderSeparator","sectionID","rowID","adjacentRowHighlighted","rowSeparator","rowSeparatorHide","renderRow","highlightRowFunc","_this4","id","onSelect","onHighlight","onUnhighlight","_this5","content","getRowCount","NoMovies","ref","automaticallyAdjustContentInsets","keyboardDismissMode","keyboardShouldPersistTaps","showsVerticalScrollIndicator","onFocus","listview","getScrollResponder","scrollTo","centerText","noMoviesText","opacity","341","_interopRequireDefault","obj","__esModule","default","generateCallbackFunction","Date","now","ceil","random","clearFunction","functionName","window","e","removeScript","scriptId","script","getElementById","getElementsByTagName","removeChild","_ReactPromise","_ReactPromise2","defaultOptions","timeout","jsonpCallback","fetchJsonp","url","options","timeoutId","resolve","reject","callbackFunction","ok","indexOf","jsonpScript","setAttribute","342","normalizeName","String","test","TypeError","normalizeValue","value","Headers","headers","append","Object","getOwnPropertyNames","consumed","bodyUsed","fileReaderReady","reader","onload","result","onerror","readBlobAsArrayBuffer","blob","FileReader","readAsArrayBuffer","readBlobAsText","readAsText","Body","_initBody","_bodyInit","_bodyText","support","Blob","isPrototypeOf","_bodyBlob","formData","FormData","_bodyFormData","arrayBuffer","ArrayBuffer","rejected","decode","JSON","parse","normalizeMethod","upcased","toUpperCase","methods","Request","input","credentials","mode","referrer","form","trim","split","bytes","shift","join","decodeURIComponent","xhr","head","getAllResponseHeaders","header","Response","bodyInit","type","status","statusText","self","list","values","getAll","has","set","thisArg","call","clone","redirectStatuses","redirect","RangeError","location","init","responseURL","getResponseHeader","request","XMLHttpRequest","responseText","open","withCredentials","responseType","setRequestHeader","send","polyfill","343","TouchableHighlight","TouchableNativeFeedback","TouchableElement","onPress","onShowUnderlay","onHideUnderlay","row","cellImage","textContainer","numberOfLines","movieYear","cellBorder","344","TextInput","searchBar","autoCapitalize","autoCorrect","onChange","placeholder","searchBarInput","animating","spinner","paddingLeft"],"mappings":"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","file":"movies.js","sourcesContent":["webpackJsonp([1],{\n\n/***/ 0:\n/***/ function(module, exports, __webpack_require__) {\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t'use strict';\n\t\n\tvar React=__webpack_require__(1);\n\tvar createClass=__webpack_require__(331);var\n\t\n\tAppRegistry=\n\t\n\t\n\t\n\t\n\tReact.AppRegistry,Navigator=React.Navigator,StyleSheet=React.StyleSheet,Platform=React.Platform,View=React.View;\n\t\n\tvar MovieScreen=__webpack_require__(336);\n\tvar SearchScreen=__webpack_require__(340);\n\t\n\tvar RouteMapper=function RouteMapper(route,navigationOperations,onComponentRef){\n\t\n\tif(route.name==='search'){\n\treturn(\n\tReact.createElement(SearchScreen,{navigator:navigationOperations}));\n\t\n\t}else if(route.name==='movie'){\n\treturn(\n\tReact.createElement(View,{style:{flex:1}},\n\tReact.createElement(MovieScreen,{\n\tstyle:{flex:1},\n\tnavigator:navigationOperations,\n\tmovie:route.movie})));\n\t\n\t\n\t\n\t}\n\t};\n\t\n\tvar MoviesApp=createClass({\n\trender:function render(){\n\tvar initialRoute={name:'search'};\n\treturn(\n\tReact.createElement(Navigator,{\n\tstyle:styles.container,\n\tinitialRoute:initialRoute,\n\trenderScene:RouteMapper}));\n\t\n\t\n\t}});\n\t\n\t\n\tvar styles=StyleSheet.create({\n\tcontainer:{\n\tflex:1,\n\tbackgroundColor:'white'}});\n\t\n\t\n\t\n\tAppRegistry.registerComponent('MoviesApp',function(){return MoviesApp;});\n\t\n\tif(Platform.OS=='web'){\n\tvar app=document.createElement('div');\n\tdocument.body.appendChild(app);\n\t\n\tAppRegistry.runApplication('MoviesApp',{\n\trootTag:app});\n\t\n\t}\n\t\n\tmodule.exports=MoviesApp;\n\n/***/ },\n\n/***/ 331:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2013-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t */\n\t\n\t'use strict';\n\t\n\tvar React = __webpack_require__(2);\n\tvar factory = __webpack_require__(332);\n\t\n\tif (typeof React === 'undefined') {\n\t throw Error(\n\t 'create-react-class could not find the React object. If you are using script tags, ' +\n\t 'make sure that React is being loaded before create-react-class.'\n\t );\n\t}\n\t\n\t// Hack to grab NoopUpdateQueue from isomorphic React\n\tvar ReactNoopUpdateQueue = new React.Component().updater;\n\t\n\tmodule.exports = factory(\n\t React.Component,\n\t React.isValidElement,\n\t ReactNoopUpdateQueue\n\t);\n\n\n/***/ },\n\n/***/ 332:\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2013-present, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t */\n\t\n\t'use strict';\n\t\n\tvar _assign = __webpack_require__(333);\n\t\n\tvar emptyObject = __webpack_require__(334);\n\tvar _invariant = __webpack_require__(335);\n\t\n\tif (false) {\n\t var warning = require('fbjs/lib/warning');\n\t}\n\t\n\tvar MIXINS_KEY = 'mixins';\n\t\n\t// Helper function to allow the creation of anonymous functions which do not\n\t// have .name set to the name of the variable being assigned to.\n\tfunction identity(fn) {\n\t return fn;\n\t}\n\t\n\tvar ReactPropTypeLocationNames;\n\tif (false) {\n\t ReactPropTypeLocationNames = {\n\t prop: 'prop',\n\t context: 'context',\n\t childContext: 'child context'\n\t };\n\t} else {\n\t ReactPropTypeLocationNames = {};\n\t}\n\t\n\tfunction factory(ReactComponent, isValidElement, ReactNoopUpdateQueue) {\n\t /**\n\t * Policies that describe methods in `ReactClassInterface`.\n\t */\n\t\n\t var injectedMixins = [];\n\t\n\t /**\n\t * Composite components are higher-level components that compose other composite\n\t * or host components.\n\t *\n\t * To create a new type of `ReactClass`, pass a specification of\n\t * your new class to `React.createClass`. The only requirement of your class\n\t * specification is that you implement a `render` method.\n\t *\n\t * var MyComponent = React.createClass({\n\t * render: function() {\n\t * return
Hello World
;\n\t * }\n\t * });\n\t *\n\t * The class specification supports a specific protocol of methods that have\n\t * special meaning (e.g. `render`). See `ReactClassInterface` for\n\t * more the comprehensive protocol. Any other properties and methods in the\n\t * class specification will be available on the prototype.\n\t *\n\t * @interface ReactClassInterface\n\t * @internal\n\t */\n\t var ReactClassInterface = {\n\t /**\n\t * An array of Mixin objects to include when defining your component.\n\t *\n\t * @type {array}\n\t * @optional\n\t */\n\t mixins: 'DEFINE_MANY',\n\t\n\t /**\n\t * An object containing properties and methods that should be defined on\n\t * the component's constructor instead of its prototype (static methods).\n\t *\n\t * @type {object}\n\t * @optional\n\t */\n\t statics: 'DEFINE_MANY',\n\t\n\t /**\n\t * Definition of prop types for this component.\n\t *\n\t * @type {object}\n\t * @optional\n\t */\n\t propTypes: 'DEFINE_MANY',\n\t\n\t /**\n\t * Definition of context types for this component.\n\t *\n\t * @type {object}\n\t * @optional\n\t */\n\t contextTypes: 'DEFINE_MANY',\n\t\n\t /**\n\t * Definition of context types this component sets for its children.\n\t *\n\t * @type {object}\n\t * @optional\n\t */\n\t childContextTypes: 'DEFINE_MANY',\n\t\n\t // ==== Definition methods ====\n\t\n\t /**\n\t * Invoked when the component is mounted. Values in the mapping will be set on\n\t * `this.props` if that prop is not specified (i.e. using an `in` check).\n\t *\n\t * This method is invoked before `getInitialState` and therefore cannot rely\n\t * on `this.state` or use `this.setState`.\n\t *\n\t * @return {object}\n\t * @optional\n\t */\n\t getDefaultProps: 'DEFINE_MANY_MERGED',\n\t\n\t /**\n\t * Invoked once before the component is mounted. The return value will be used\n\t * as the initial value of `this.state`.\n\t *\n\t * getInitialState: function() {\n\t * return {\n\t * isOn: false,\n\t * fooBaz: new BazFoo()\n\t * }\n\t * }\n\t *\n\t * @return {object}\n\t * @optional\n\t */\n\t getInitialState: 'DEFINE_MANY_MERGED',\n\t\n\t /**\n\t * @return {object}\n\t * @optional\n\t */\n\t getChildContext: 'DEFINE_MANY_MERGED',\n\t\n\t /**\n\t * Uses props from `this.props` and state from `this.state` to render the\n\t * structure of the component.\n\t *\n\t * No guarantees are made about when or how often this method is invoked, so\n\t * it must not have side effects.\n\t *\n\t * render: function() {\n\t * var name = this.props.name;\n\t * return
Hello, {name}!
;\n\t * }\n\t *\n\t * @return {ReactComponent}\n\t * @required\n\t */\n\t render: 'DEFINE_ONCE',\n\t\n\t // ==== Delegate methods ====\n\t\n\t /**\n\t * Invoked when the component is initially created and about to be mounted.\n\t * This may have side effects, but any external subscriptions or data created\n\t * by this method must be cleaned up in `componentWillUnmount`.\n\t *\n\t * @optional\n\t */\n\t componentWillMount: 'DEFINE_MANY',\n\t\n\t /**\n\t * Invoked when the component has been mounted and has a DOM representation.\n\t * However, there is no guarantee that the DOM node is in the document.\n\t *\n\t * Use this as an opportunity to operate on the DOM when the component has\n\t * been mounted (initialized and rendered) for the first time.\n\t *\n\t * @param {DOMElement} rootNode DOM element representing the component.\n\t * @optional\n\t */\n\t componentDidMount: 'DEFINE_MANY',\n\t\n\t /**\n\t * Invoked before the component receives new props.\n\t *\n\t * Use this as an opportunity to react to a prop transition by updating the\n\t * state using `this.setState`. Current props are accessed via `this.props`.\n\t *\n\t * componentWillReceiveProps: function(nextProps, nextContext) {\n\t * this.setState({\n\t * likesIncreasing: nextProps.likeCount > this.props.likeCount\n\t * });\n\t * }\n\t *\n\t * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop\n\t * transition may cause a state change, but the opposite is not true. If you\n\t * need it, you are probably looking for `componentWillUpdate`.\n\t *\n\t * @param {object} nextProps\n\t * @optional\n\t */\n\t componentWillReceiveProps: 'DEFINE_MANY',\n\t\n\t /**\n\t * Invoked while deciding if the component should be updated as a result of\n\t * receiving new props, state and/or context.\n\t *\n\t * Use this as an opportunity to `return false` when you're certain that the\n\t * transition to the new props/state/context will not require a component\n\t * update.\n\t *\n\t * shouldComponentUpdate: function(nextProps, nextState, nextContext) {\n\t * return !equal(nextProps, this.props) ||\n\t * !equal(nextState, this.state) ||\n\t * !equal(nextContext, this.context);\n\t * }\n\t *\n\t * @param {object} nextProps\n\t * @param {?object} nextState\n\t * @param {?object} nextContext\n\t * @return {boolean} True if the component should update.\n\t * @optional\n\t */\n\t shouldComponentUpdate: 'DEFINE_ONCE',\n\t\n\t /**\n\t * Invoked when the component is about to update due to a transition from\n\t * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`\n\t * and `nextContext`.\n\t *\n\t * Use this as an opportunity to perform preparation before an update occurs.\n\t *\n\t * NOTE: You **cannot** use `this.setState()` in this method.\n\t *\n\t * @param {object} nextProps\n\t * @param {?object} nextState\n\t * @param {?object} nextContext\n\t * @param {ReactReconcileTransaction} transaction\n\t * @optional\n\t */\n\t componentWillUpdate: 'DEFINE_MANY',\n\t\n\t /**\n\t * Invoked when the component's DOM representation has been updated.\n\t *\n\t * Use this as an opportunity to operate on the DOM when the component has\n\t * been updated.\n\t *\n\t * @param {object} prevProps\n\t * @param {?object} prevState\n\t * @param {?object} prevContext\n\t * @param {DOMElement} rootNode DOM element representing the component.\n\t * @optional\n\t */\n\t componentDidUpdate: 'DEFINE_MANY',\n\t\n\t /**\n\t * Invoked when the component is about to be removed from its parent and have\n\t * its DOM representation destroyed.\n\t *\n\t * Use this as an opportunity to deallocate any external resources.\n\t *\n\t * NOTE: There is no `componentDidUnmount` since your component will have been\n\t * destroyed by that point.\n\t *\n\t * @optional\n\t */\n\t componentWillUnmount: 'DEFINE_MANY',\n\t\n\t // ==== Advanced methods ====\n\t\n\t /**\n\t * Updates the component's currently mounted DOM representation.\n\t *\n\t * By default, this implements React's rendering and reconciliation algorithm.\n\t * Sophisticated clients may wish to override this.\n\t *\n\t * @param {ReactReconcileTransaction} transaction\n\t * @internal\n\t * @overridable\n\t */\n\t updateComponent: 'OVERRIDE_BASE'\n\t };\n\t\n\t /**\n\t * Mapping from class specification keys to special processing functions.\n\t *\n\t * Although these are declared like instance properties in the specification\n\t * when defining classes using `React.createClass`, they are actually static\n\t * and are accessible on the constructor instead of the prototype. Despite\n\t * being static, they must be defined outside of the \"statics\" key under\n\t * which all other static methods are defined.\n\t */\n\t var RESERVED_SPEC_KEYS = {\n\t displayName: function(Constructor, displayName) {\n\t Constructor.displayName = displayName;\n\t },\n\t mixins: function(Constructor, mixins) {\n\t if (mixins) {\n\t for (var i = 0; i < mixins.length; i++) {\n\t mixSpecIntoComponent(Constructor, mixins[i]);\n\t }\n\t }\n\t },\n\t childContextTypes: function(Constructor, childContextTypes) {\n\t if (false) {\n\t validateTypeDef(Constructor, childContextTypes, 'childContext');\n\t }\n\t Constructor.childContextTypes = _assign(\n\t {},\n\t Constructor.childContextTypes,\n\t childContextTypes\n\t );\n\t },\n\t contextTypes: function(Constructor, contextTypes) {\n\t if (false) {\n\t validateTypeDef(Constructor, contextTypes, 'context');\n\t }\n\t Constructor.contextTypes = _assign(\n\t {},\n\t Constructor.contextTypes,\n\t contextTypes\n\t );\n\t },\n\t /**\n\t * Special case getDefaultProps which should move into statics but requires\n\t * automatic merging.\n\t */\n\t getDefaultProps: function(Constructor, getDefaultProps) {\n\t if (Constructor.getDefaultProps) {\n\t Constructor.getDefaultProps = createMergedResultFunction(\n\t Constructor.getDefaultProps,\n\t getDefaultProps\n\t );\n\t } else {\n\t Constructor.getDefaultProps = getDefaultProps;\n\t }\n\t },\n\t propTypes: function(Constructor, propTypes) {\n\t if (false) {\n\t validateTypeDef(Constructor, propTypes, 'prop');\n\t }\n\t Constructor.propTypes = _assign({}, Constructor.propTypes, propTypes);\n\t },\n\t statics: function(Constructor, statics) {\n\t mixStaticSpecIntoComponent(Constructor, statics);\n\t },\n\t autobind: function() {}\n\t };\n\t\n\t function validateTypeDef(Constructor, typeDef, location) {\n\t for (var propName in typeDef) {\n\t if (typeDef.hasOwnProperty(propName)) {\n\t // use a warning instead of an _invariant so components\n\t // don't show up in prod but only in __DEV__\n\t if (false) {\n\t warning(\n\t typeof typeDef[propName] === 'function',\n\t '%s: %s type `%s` is invalid; it must be a function, usually from ' +\n\t 'React.PropTypes.',\n\t Constructor.displayName || 'ReactClass',\n\t ReactPropTypeLocationNames[location],\n\t propName\n\t );\n\t }\n\t }\n\t }\n\t }\n\t\n\t function validateMethodOverride(isAlreadyDefined, name) {\n\t var specPolicy = ReactClassInterface.hasOwnProperty(name)\n\t ? ReactClassInterface[name]\n\t : null;\n\t\n\t // Disallow overriding of base class methods unless explicitly allowed.\n\t if (ReactClassMixin.hasOwnProperty(name)) {\n\t _invariant(\n\t specPolicy === 'OVERRIDE_BASE',\n\t 'ReactClassInterface: You are attempting to override ' +\n\t '`%s` from your class specification. Ensure that your method names ' +\n\t 'do not overlap with React methods.',\n\t name\n\t );\n\t }\n\t\n\t // Disallow defining methods more than once unless explicitly allowed.\n\t if (isAlreadyDefined) {\n\t _invariant(\n\t specPolicy === 'DEFINE_MANY' || specPolicy === 'DEFINE_MANY_MERGED',\n\t 'ReactClassInterface: You are attempting to define ' +\n\t '`%s` on your component more than once. This conflict may be due ' +\n\t 'to a mixin.',\n\t name\n\t );\n\t }\n\t }\n\t\n\t /**\n\t * Mixin helper which handles policy validation and reserved\n\t * specification keys when building React classes.\n\t */\n\t function mixSpecIntoComponent(Constructor, spec) {\n\t if (!spec) {\n\t if (false) {\n\t var typeofSpec = typeof spec;\n\t var isMixinValid = typeofSpec === 'object' && spec !== null;\n\t\n\t if (process.env.NODE_ENV !== 'production') {\n\t warning(\n\t isMixinValid,\n\t \"%s: You're attempting to include a mixin that is either null \" +\n\t 'or not an object. Check the mixins included by the component, ' +\n\t 'as well as any mixins they include themselves. ' +\n\t 'Expected object but got %s.',\n\t Constructor.displayName || 'ReactClass',\n\t spec === null ? null : typeofSpec\n\t );\n\t }\n\t }\n\t\n\t return;\n\t }\n\t\n\t _invariant(\n\t typeof spec !== 'function',\n\t \"ReactClass: You're attempting to \" +\n\t 'use a component class or function as a mixin. Instead, just use a ' +\n\t 'regular object.'\n\t );\n\t _invariant(\n\t !isValidElement(spec),\n\t \"ReactClass: You're attempting to \" +\n\t 'use a component as a mixin. Instead, just use a regular object.'\n\t );\n\t\n\t var proto = Constructor.prototype;\n\t var autoBindPairs = proto.__reactAutoBindPairs;\n\t\n\t // By handling mixins before any other properties, we ensure the same\n\t // chaining order is applied to methods with DEFINE_MANY policy, whether\n\t // mixins are listed before or after these methods in the spec.\n\t if (spec.hasOwnProperty(MIXINS_KEY)) {\n\t RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins);\n\t }\n\t\n\t for (var name in spec) {\n\t if (!spec.hasOwnProperty(name)) {\n\t continue;\n\t }\n\t\n\t if (name === MIXINS_KEY) {\n\t // We have already handled mixins in a special case above.\n\t continue;\n\t }\n\t\n\t var property = spec[name];\n\t var isAlreadyDefined = proto.hasOwnProperty(name);\n\t validateMethodOverride(isAlreadyDefined, name);\n\t\n\t if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) {\n\t RESERVED_SPEC_KEYS[name](Constructor, property);\n\t } else {\n\t // Setup methods on prototype:\n\t // The following member methods should not be automatically bound:\n\t // 1. Expected ReactClass methods (in the \"interface\").\n\t // 2. Overridden methods (that were mixed in).\n\t var isReactClassMethod = ReactClassInterface.hasOwnProperty(name);\n\t var isFunction = typeof property === 'function';\n\t var shouldAutoBind =\n\t isFunction &&\n\t !isReactClassMethod &&\n\t !isAlreadyDefined &&\n\t spec.autobind !== false;\n\t\n\t if (shouldAutoBind) {\n\t autoBindPairs.push(name, property);\n\t proto[name] = property;\n\t } else {\n\t if (isAlreadyDefined) {\n\t var specPolicy = ReactClassInterface[name];\n\t\n\t // These cases should already be caught by validateMethodOverride.\n\t _invariant(\n\t isReactClassMethod &&\n\t (specPolicy === 'DEFINE_MANY_MERGED' ||\n\t specPolicy === 'DEFINE_MANY'),\n\t 'ReactClass: Unexpected spec policy %s for key %s ' +\n\t 'when mixing in component specs.',\n\t specPolicy,\n\t name\n\t );\n\t\n\t // For methods which are defined more than once, call the existing\n\t // methods before calling the new property, merging if appropriate.\n\t if (specPolicy === 'DEFINE_MANY_MERGED') {\n\t proto[name] = createMergedResultFunction(proto[name], property);\n\t } else if (specPolicy === 'DEFINE_MANY') {\n\t proto[name] = createChainedFunction(proto[name], property);\n\t }\n\t } else {\n\t proto[name] = property;\n\t if (false) {\n\t // Add verbose displayName to the function, which helps when looking\n\t // at profiling tools.\n\t if (typeof property === 'function' && spec.displayName) {\n\t proto[name].displayName = spec.displayName + '_' + name;\n\t }\n\t }\n\t }\n\t }\n\t }\n\t }\n\t }\n\t\n\t function mixStaticSpecIntoComponent(Constructor, statics) {\n\t if (!statics) {\n\t return;\n\t }\n\t for (var name in statics) {\n\t var property = statics[name];\n\t if (!statics.hasOwnProperty(name)) {\n\t continue;\n\t }\n\t\n\t var isReserved = name in RESERVED_SPEC_KEYS;\n\t _invariant(\n\t !isReserved,\n\t 'ReactClass: You are attempting to define a reserved ' +\n\t 'property, `%s`, that shouldn\\'t be on the \"statics\" key. Define it ' +\n\t 'as an instance property instead; it will still be accessible on the ' +\n\t 'constructor.',\n\t name\n\t );\n\t\n\t var isInherited = name in Constructor;\n\t _invariant(\n\t !isInherited,\n\t 'ReactClass: You are attempting to define ' +\n\t '`%s` on your component more than once. This conflict may be ' +\n\t 'due to a mixin.',\n\t name\n\t );\n\t Constructor[name] = property;\n\t }\n\t }\n\t\n\t /**\n\t * Merge two objects, but throw if both contain the same key.\n\t *\n\t * @param {object} one The first object, which is mutated.\n\t * @param {object} two The second object\n\t * @return {object} one after it has been mutated to contain everything in two.\n\t */\n\t function mergeIntoWithNoDuplicateKeys(one, two) {\n\t _invariant(\n\t one && two && typeof one === 'object' && typeof two === 'object',\n\t 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.'\n\t );\n\t\n\t for (var key in two) {\n\t if (two.hasOwnProperty(key)) {\n\t _invariant(\n\t one[key] === undefined,\n\t 'mergeIntoWithNoDuplicateKeys(): ' +\n\t 'Tried to merge two objects with the same key: `%s`. This conflict ' +\n\t 'may be due to a mixin; in particular, this may be caused by two ' +\n\t 'getInitialState() or getDefaultProps() methods returning objects ' +\n\t 'with clashing keys.',\n\t key\n\t );\n\t one[key] = two[key];\n\t }\n\t }\n\t return one;\n\t }\n\t\n\t /**\n\t * Creates a function that invokes two functions and merges their return values.\n\t *\n\t * @param {function} one Function to invoke first.\n\t * @param {function} two Function to invoke second.\n\t * @return {function} Function that invokes the two argument functions.\n\t * @private\n\t */\n\t function createMergedResultFunction(one, two) {\n\t return function mergedResult() {\n\t var a = one.apply(this, arguments);\n\t var b = two.apply(this, arguments);\n\t if (a == null) {\n\t return b;\n\t } else if (b == null) {\n\t return a;\n\t }\n\t var c = {};\n\t mergeIntoWithNoDuplicateKeys(c, a);\n\t mergeIntoWithNoDuplicateKeys(c, b);\n\t return c;\n\t };\n\t }\n\t\n\t /**\n\t * Creates a function that invokes two functions and ignores their return vales.\n\t *\n\t * @param {function} one Function to invoke first.\n\t * @param {function} two Function to invoke second.\n\t * @return {function} Function that invokes the two argument functions.\n\t * @private\n\t */\n\t function createChainedFunction(one, two) {\n\t return function chainedFunction() {\n\t one.apply(this, arguments);\n\t two.apply(this, arguments);\n\t };\n\t }\n\t\n\t /**\n\t * Binds a method to the component.\n\t *\n\t * @param {object} component Component whose method is going to be bound.\n\t * @param {function} method Method to be bound.\n\t * @return {function} The bound method.\n\t */\n\t function bindAutoBindMethod(component, method) {\n\t var boundMethod = method.bind(component);\n\t if (false) {\n\t boundMethod.__reactBoundContext = component;\n\t boundMethod.__reactBoundMethod = method;\n\t boundMethod.__reactBoundArguments = null;\n\t var componentName = component.constructor.displayName;\n\t var _bind = boundMethod.bind;\n\t boundMethod.bind = function(newThis) {\n\t for (\n\t var _len = arguments.length,\n\t args = Array(_len > 1 ? _len - 1 : 0),\n\t _key = 1;\n\t _key < _len;\n\t _key++\n\t ) {\n\t args[_key - 1] = arguments[_key];\n\t }\n\t\n\t // User is trying to bind() an autobound method; we effectively will\n\t // ignore the value of \"this\" that the user is trying to use, so\n\t // let's warn.\n\t if (newThis !== component && newThis !== null) {\n\t if (process.env.NODE_ENV !== 'production') {\n\t warning(\n\t false,\n\t 'bind(): React component methods may only be bound to the ' +\n\t 'component instance. See %s',\n\t componentName\n\t );\n\t }\n\t } else if (!args.length) {\n\t if (process.env.NODE_ENV !== 'production') {\n\t warning(\n\t false,\n\t 'bind(): You are binding a component method to the component. ' +\n\t 'React does this for you automatically in a high-performance ' +\n\t 'way, so you can safely remove this call. See %s',\n\t componentName\n\t );\n\t }\n\t return boundMethod;\n\t }\n\t var reboundMethod = _bind.apply(boundMethod, arguments);\n\t reboundMethod.__reactBoundContext = component;\n\t reboundMethod.__reactBoundMethod = method;\n\t reboundMethod.__reactBoundArguments = args;\n\t return reboundMethod;\n\t };\n\t }\n\t return boundMethod;\n\t }\n\t\n\t /**\n\t * Binds all auto-bound methods in a component.\n\t *\n\t * @param {object} component Component whose method is going to be bound.\n\t */\n\t function bindAutoBindMethods(component) {\n\t var pairs = component.__reactAutoBindPairs;\n\t for (var i = 0; i < pairs.length; i += 2) {\n\t var autoBindKey = pairs[i];\n\t var method = pairs[i + 1];\n\t component[autoBindKey] = bindAutoBindMethod(component, method);\n\t }\n\t }\n\t\n\t var IsMountedPreMixin = {\n\t componentDidMount: function() {\n\t this.__isMounted = true;\n\t }\n\t };\n\t\n\t var IsMountedPostMixin = {\n\t componentWillUnmount: function() {\n\t this.__isMounted = false;\n\t }\n\t };\n\t\n\t /**\n\t * Add more to the ReactClass base class. These are all legacy features and\n\t * therefore not already part of the modern ReactComponent.\n\t */\n\t var ReactClassMixin = {\n\t /**\n\t * TODO: This will be deprecated because state should always keep a consistent\n\t * type signature and the only use case for this, is to avoid that.\n\t */\n\t replaceState: function(newState, callback) {\n\t this.updater.enqueueReplaceState(this, newState, callback);\n\t },\n\t\n\t /**\n\t * Checks whether or not this composite component is mounted.\n\t * @return {boolean} True if mounted, false otherwise.\n\t * @protected\n\t * @final\n\t */\n\t isMounted: function() {\n\t if (false) {\n\t warning(\n\t this.__didWarnIsMounted,\n\t '%s: isMounted is deprecated. Instead, make sure to clean up ' +\n\t 'subscriptions and pending requests in componentWillUnmount to ' +\n\t 'prevent memory leaks.',\n\t (this.constructor && this.constructor.displayName) ||\n\t this.name ||\n\t 'Component'\n\t );\n\t this.__didWarnIsMounted = true;\n\t }\n\t return !!this.__isMounted;\n\t }\n\t };\n\t\n\t var ReactClassComponent = function() {};\n\t _assign(\n\t ReactClassComponent.prototype,\n\t ReactComponent.prototype,\n\t ReactClassMixin\n\t );\n\t\n\t /**\n\t * Creates a composite component class given a class specification.\n\t * See https://facebook.github.io/react/docs/top-level-api.html#react.createclass\n\t *\n\t * @param {object} spec Class specification (which must define `render`).\n\t * @return {function} Component constructor function.\n\t * @public\n\t */\n\t function createClass(spec) {\n\t // To keep our warnings more understandable, we'll use a little hack here to\n\t // ensure that Constructor.name !== 'Constructor'. This makes sure we don't\n\t // unnecessarily identify a class without displayName as 'Constructor'.\n\t var Constructor = identity(function(props, context, updater) {\n\t // This constructor gets overridden by mocks. The argument is used\n\t // by mocks to assert on what gets mounted.\n\t\n\t if (false) {\n\t warning(\n\t this instanceof Constructor,\n\t 'Something is calling a React component directly. Use a factory or ' +\n\t 'JSX instead. See: https://fb.me/react-legacyfactory'\n\t );\n\t }\n\t\n\t // Wire up auto-binding\n\t if (this.__reactAutoBindPairs.length) {\n\t bindAutoBindMethods(this);\n\t }\n\t\n\t this.props = props;\n\t this.context = context;\n\t this.refs = emptyObject;\n\t this.updater = updater || ReactNoopUpdateQueue;\n\t\n\t this.state = null;\n\t\n\t // ReactClasses doesn't have constructors. Instead, they use the\n\t // getInitialState and componentWillMount methods for initialization.\n\t\n\t var initialState = this.getInitialState ? this.getInitialState() : null;\n\t if (false) {\n\t // We allow auto-mocks to proceed as if they're returning null.\n\t if (\n\t initialState === undefined &&\n\t this.getInitialState._isMockFunction\n\t ) {\n\t // This is probably bad practice. Consider warning here and\n\t // deprecating this convenience.\n\t initialState = null;\n\t }\n\t }\n\t _invariant(\n\t typeof initialState === 'object' && !Array.isArray(initialState),\n\t '%s.getInitialState(): must return an object or null',\n\t Constructor.displayName || 'ReactCompositeComponent'\n\t );\n\t\n\t this.state = initialState;\n\t });\n\t Constructor.prototype = new ReactClassComponent();\n\t Constructor.prototype.constructor = Constructor;\n\t Constructor.prototype.__reactAutoBindPairs = [];\n\t\n\t injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor));\n\t\n\t mixSpecIntoComponent(Constructor, IsMountedPreMixin);\n\t mixSpecIntoComponent(Constructor, spec);\n\t mixSpecIntoComponent(Constructor, IsMountedPostMixin);\n\t\n\t // Initialize the defaultProps property after all mixins have been merged.\n\t if (Constructor.getDefaultProps) {\n\t Constructor.defaultProps = Constructor.getDefaultProps();\n\t }\n\t\n\t if (false) {\n\t // This is a tag to indicate that the use of these method names is ok,\n\t // since it's used with createClass. If it's not, then it's likely a\n\t // mistake so we'll warn you to use the static property, property\n\t // initializer or constructor respectively.\n\t if (Constructor.getDefaultProps) {\n\t Constructor.getDefaultProps.isReactClassApproved = {};\n\t }\n\t if (Constructor.prototype.getInitialState) {\n\t Constructor.prototype.getInitialState.isReactClassApproved = {};\n\t }\n\t }\n\t\n\t _invariant(\n\t Constructor.prototype.render,\n\t 'createClass(...): Class specification must implement a `render` method.'\n\t );\n\t\n\t if (false) {\n\t warning(\n\t !Constructor.prototype.componentShouldUpdate,\n\t '%s has a method called ' +\n\t 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' +\n\t 'The name is phrased as a question because the function is ' +\n\t 'expected to return a value.',\n\t spec.displayName || 'A component'\n\t );\n\t warning(\n\t !Constructor.prototype.componentWillRecieveProps,\n\t '%s has a method called ' +\n\t 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?',\n\t spec.displayName || 'A component'\n\t );\n\t }\n\t\n\t // Reduce time spent doing lookups by setting these on the prototype.\n\t for (var methodName in ReactClassInterface) {\n\t if (!Constructor.prototype[methodName]) {\n\t Constructor.prototype[methodName] = null;\n\t }\n\t }\n\t\n\t return Constructor;\n\t }\n\t\n\t return createClass;\n\t}\n\t\n\tmodule.exports = factory;\n\n\n/***/ },\n\n/***/ 333:\n4,\n\n/***/ 334:\n5,\n\n/***/ 335:\n6,\n\n/***/ 336:\n/***/ function(module, exports, __webpack_require__) {\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t'use strict';\n\t\n\tvar React=__webpack_require__(1);\n\tvar createClass=__webpack_require__(331);var\n\t\n\tImage=\n\t\n\t\n\t\n\t\n\t\n\tReact.Image,PixelRatio=React.PixelRatio,ScrollView=React.ScrollView,StyleSheet=React.StyleSheet,Text=React.Text,View=React.View;\n\t\n\tvar getImageSource=__webpack_require__(337);\n\tvar getStyleFromScore=__webpack_require__(338);\n\tvar getTextFromScore=__webpack_require__(339);\n\t\n\tvar MovieScreen=createClass({\n\trender:function render(){\n\treturn(\n\tReact.createElement(ScrollView,{contentContainerStyle:styles.contentContainer},\n\tReact.createElement(View,{style:styles.mainSection},\n\t\n\t\n\t\n\tReact.createElement(Image,{\n\tsource:getImageSource(this.props.movie,'det'),\n\tstyle:styles.detailsImage}),\n\t\n\tReact.createElement(View,{style:styles.rightPane},\n\tReact.createElement(Text,{style:styles.movieTitle},this.props.movie.title),\n\tReact.createElement(Text,null,this.props.movie.year),\n\tReact.createElement(View,{style:styles.mpaaWrapper},\n\tReact.createElement(Text,{style:styles.mpaaText},\n\tthis.props.movie.mpaa_rating)),\n\t\n\t\n\tReact.createElement(Ratings,{ratings:this.props.movie.ratings}))),\n\t\n\t\n\tReact.createElement(View,{style:styles.separator}),\n\tReact.createElement(Text,null,\n\tthis.props.movie.synopsis),\n\t\n\tReact.createElement(View,{style:styles.separator}),\n\tReact.createElement(Cast,{actors:this.props.movie.abridged_cast})));\n\t\n\t\n\t}});\n\t\n\t\n\tvar Ratings=createClass({\n\trender:function render(){\n\tvar criticsScore=this.props.ratings.critics_score;\n\tvar audienceScore=this.props.ratings.audience_score;\n\t\n\treturn(\n\tReact.createElement(View,null,\n\tReact.createElement(View,{style:styles.rating},\n\tReact.createElement(Text,{style:styles.ratingTitle},'Critics:'),\n\tReact.createElement(Text,{style:[styles.ratingValue,getStyleFromScore(criticsScore)]},\n\tgetTextFromScore(criticsScore))),\n\t\n\t\n\tReact.createElement(View,{style:styles.rating},\n\tReact.createElement(Text,{style:styles.ratingTitle},'Audience:'),\n\tReact.createElement(Text,{style:[styles.ratingValue,getStyleFromScore(audienceScore)]},\n\tgetTextFromScore(audienceScore)))));\n\t\n\t\n\t\n\t\n\t}});\n\t\n\t\n\tvar Cast=createClass({\n\trender:function render(){\n\tif(!this.props.actors){\n\treturn null;\n\t}\n\t\n\treturn(\n\tReact.createElement(View,null,\n\tReact.createElement(Text,{style:styles.castTitle},'Actors'),\n\tthis.props.actors.map(function(actor){return(\n\tReact.createElement(Text,{key:actor.name,style:styles.castActor},'\\u2022 ',\n\tactor.name));})));\n\t\n\t\n\t\n\t\n\t}});\n\t\n\t\n\tvar styles=StyleSheet.create({\n\tcontentContainer:{\n\tpadding:10},\n\t\n\trightPane:{\n\tjustifyContent:'space-between',\n\tflex:1},\n\t\n\tmovieTitle:{\n\tflex:1,\n\tfontSize:16,\n\tfontWeight:'500'},\n\t\n\trating:{\n\tmarginTop:10},\n\t\n\tratingTitle:{\n\tfontSize:14},\n\t\n\tratingValue:{\n\tfontSize:28,\n\tfontWeight:'500'},\n\t\n\tmpaaWrapper:{\n\talignSelf:'flex-start',\n\tborderColor:'black',\n\tborderWidth:1,\n\tpaddingHorizontal:3,\n\tmarginVertical:5},\n\t\n\tmpaaText:{\n\tfontFamily:'Palatino',\n\tfontSize:13,\n\tfontWeight:'500'},\n\t\n\tmainSection:{\n\tflexDirection:'row'},\n\t\n\tdetailsImage:{\n\twidth:134,\n\theight:200,\n\tbackgroundColor:'#eaeaea',\n\tmarginRight:10},\n\t\n\tseparator:{\n\tbackgroundColor:'rgba(0, 0, 0, 0.1)',\n\theight:1/PixelRatio.get(),\n\tmarginVertical:10},\n\t\n\tcastTitle:{\n\tfontWeight:'500',\n\tmarginBottom:3},\n\t\n\tcastActor:{\n\tmarginLeft:2}});\n\t\n\t\n\t\n\tmodule.exports=MovieScreen;\n\n/***/ },\n\n/***/ 337:\n/***/ function(module, exports) {\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t'use strict';\n\t\n\tfunction getImageSource(movie,kind){\n\tvar uri=movie&&movie.posters?movie.posters.thumbnail:null;\n\tif(uri&&kind){\n\turi=uri.replace('tmb',kind);\n\t}\n\treturn{uri:uri};\n\t}\n\t\n\tmodule.exports=getImageSource;\n\n/***/ },\n\n/***/ 338:\n/***/ function(module, exports, __webpack_require__) {\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t'use strict';\n\t\n\tvar React=__webpack_require__(1);var\n\t\n\tStyleSheet=\n\tReact.StyleSheet;\n\t\n\tvar MAX_VALUE=200;\n\t\n\t\n\t\n\tfunction getStyleFromScore(score){\n\tif(score<0){\n\treturn styles.noScore;\n\t}\n\t\n\tvar normalizedScore=Math.round(score/100*MAX_VALUE);\n\treturn{\n\tcolor:'rgb('+(\n\tMAX_VALUE-normalizedScore)+', '+\n\tnormalizedScore+', '+\n\t0+\n\t')'};\n\t\n\t}\n\t\n\tvar styles=StyleSheet.create({\n\tnoScore:{\n\tcolor:'#999999'}});\n\t\n\t\n\t\n\tmodule.exports=getStyleFromScore;\n\n/***/ },\n\n/***/ 339:\n/***/ function(module, exports) {\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t'use strict';\n\t\n\tfunction getTextFromScore(score){\n\treturn score>0?score+'%':'N/A';\n\t}\n\t\n\tmodule.exports=getTextFromScore;\n\n/***/ },\n\n/***/ 340:\n/***/ function(module, exports, __webpack_require__) {\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t'use strict';\n\t\n\tvar React=__webpack_require__(1);\n\tvar createClass=__webpack_require__(331);var\n\t\n\tActivityIndicatorIOS=\n\t\n\t\n\t\n\t\n\t\n\t\n\tReact.ActivityIndicatorIOS,ListView=React.ListView,Platform=React.Platform,ProgressBarAndroid=React.ProgressBarAndroid,StyleSheet=React.StyleSheet,Text=React.Text,View=React.View;\n\tvar TimerMixin=__webpack_require__(176);\n\t\n\tvar fetch=Platform.OS==='web'?__webpack_require__(341):__webpack_require__(342);\n\t\n\tvar invariant=__webpack_require__(146);\n\tvar dismissKeyboard=__webpack_require__(312);\n\t\n\tvar MovieCell=__webpack_require__(343);\n\tvar MovieScreen=__webpack_require__(336);\n\tvar SearchBar=__webpack_require__(344);\n\t\n\t\n\t\n\t\n\t\n\t\n\tvar API_URL='http://api.rottentomatoes.com/api/public/v1.0/';\n\tvar API_KEYS=[\n\t'7waqfqbprs7pajbz28mqf6vz'];\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\tvar resultsCache={\n\tdataForQuery:{},\n\tnextPageNumberForQuery:{},\n\ttotalForQuery:{}};\n\t\n\t\n\tvar LOADING={};\n\t\n\tvar SearchScreen=createClass({\n\tmixins:[TimerMixin],\n\t\n\ttimeoutID:null,\n\t\n\tgetInitialState:function getInitialState(){\n\treturn{\n\tisLoading:false,\n\tisLoadingTail:false,\n\tdataSource:new ListView.DataSource({\n\trowHasChanged:function rowHasChanged(row1,row2){return row1!==row2;}}),\n\t\n\tfilter:'',\n\tqueryNumber:0};\n\t\n\t},\n\t\n\tcomponentDidMount:function componentDidMount(){\n\tthis.searchMovies('');\n\t},\n\t\n\t_urlForQueryAndPage:function _urlForQueryAndPage(query,pageNumber){\n\tvar apiKey=API_KEYS[this.state.queryNumber%API_KEYS.length];\n\tif(query){\n\treturn(\n\tAPI_URL+'movies.json?apikey='+apiKey+'&q='+\n\tencodeURIComponent(query)+'&page_limit=20&page='+pageNumber);\n\t\n\t}else{\n\t\n\treturn(\n\tAPI_URL+'lists/movies/in_theaters.json?apikey='+apiKey+\n\t'&page_limit=20&page='+pageNumber);\n\t\n\t}\n\t},\n\t\n\tsearchMovies:function searchMovies(query){var _this=this;\n\tthis.timeoutID=null;\n\t\n\tthis.setState({filter:query});\n\t\n\tvar cachedResultsForQuery=resultsCache.dataForQuery[query];\n\tif(cachedResultsForQuery){\n\tif(!LOADING[query]){\n\tthis.setState({\n\tdataSource:this.getDataSource(cachedResultsForQuery),\n\tisLoading:false});\n\t\n\t}else{\n\tthis.setState({isLoading:true});\n\t}\n\treturn;\n\t}\n\t\n\tLOADING[query]=true;\n\tresultsCache.dataForQuery[query]=null;\n\tthis.setState({\n\tisLoading:true,\n\tqueryNumber:this.state.queryNumber+1,\n\tisLoadingTail:false});\n\t\n\t\n\t\n\tfetch(this._urlForQueryAndPage(query,1)).\n\tthen(function(response){return response.json();}).\n\tcatch(function(error){\n\tLOADING[query]=false;\n\tresultsCache.dataForQuery[query]=undefined;\n\t\n\t_this.setState({\n\tdataSource:_this.getDataSource([]),\n\tisLoading:false});\n\t\n\t}).\n\tthen(function(responseData){\n\tLOADING[query]=false;\n\tresultsCache.totalForQuery[query]=responseData.total;\n\tresultsCache.dataForQuery[query]=responseData.movies;\n\tresultsCache.nextPageNumberForQuery[query]=2;\n\t\n\tif(_this.state.filter!==query){\n\t\n\treturn;\n\t}\n\t\n\t_this.setState({\n\tisLoading:false,\n\tdataSource:_this.getDataSource(responseData.movies)});\n\t\n\t}).\n\tdone();\n\t},\n\t\n\thasMore:function hasMore(){\n\tvar query=this.state.filter;\n\tif(!resultsCache.dataForQuery[query]){\n\treturn true;\n\t}\n\treturn(\n\tresultsCache.totalForQuery[query]!==\n\tresultsCache.dataForQuery[query].length);\n\t\n\t},\n\t\n\tonEndReached:function onEndReached(){var _this2=this;\n\tvar query=this.state.filter;\n\tif(!this.hasMore()||this.state.isLoadingTail){\n\t\n\treturn;\n\t}\n\t\n\tif(LOADING[query]){\n\treturn;\n\t}\n\t\n\tLOADING[query]=true;\n\tthis.setState({\n\tqueryNumber:this.state.queryNumber+1,\n\tisLoadingTail:true});\n\t\n\t\n\tvar page=resultsCache.nextPageNumberForQuery[query];\n\tinvariant(page!=null,'Next page number for \"%s\" is missing',query);\n\t\n\tfetch(this._urlForQueryAndPage(query,page)).\n\tthen(function(response){return response.json();}).\n\tcatch(function(error){\n\tconsole.error(error);\n\tLOADING[query]=false;\n\t_this2.setState({\n\tisLoadingTail:false});\n\t\n\t}).\n\tthen(function(responseData){\n\tvar moviesForQuery=resultsCache.dataForQuery[query].slice();\n\t\n\tLOADING[query]=false;\n\t\n\tif(!responseData.movies){\n\tresultsCache.totalForQuery[query]=moviesForQuery.length;\n\t}else{\n\tfor(var i in responseData.movies){\n\tmoviesForQuery.push(responseData.movies[i]);\n\t}\n\tresultsCache.dataForQuery[query]=moviesForQuery;\n\tresultsCache.nextPageNumberForQuery[query]+=1;\n\t}\n\t\n\tif(_this2.state.filter!==query){\n\t\n\treturn;\n\t}\n\t\n\t_this2.setState({\n\tisLoadingTail:false,\n\tdataSource:_this2.getDataSource(resultsCache.dataForQuery[query])});\n\t\n\t}).\n\tdone();\n\t},\n\t\n\tgetDataSource:function getDataSource(movies){\n\treturn this.state.dataSource.cloneWithRows(movies);\n\t},\n\t\n\tselectMovie:function selectMovie(movie){\n\tif(Platform.OS==='ios'){\n\tthis.props.navigator.push({\n\ttitle:movie.title,\n\tcomponent:MovieScreen,\n\tpassProps:{movie:movie}});\n\t\n\t}else{\n\tdismissKeyboard();\n\tthis.props.navigator.push({\n\ttitle:movie.title,\n\tname:'movie',\n\tmovie:movie});\n\t\n\t}\n\t},\n\t\n\tonSearchChange:function onSearchChange(event){var _this3=this;\n\tvar filter=event.nativeEvent.text.toLowerCase();\n\t\n\tthis.clearTimeout(this.timeoutID);\n\tthis.timeoutID=this.setTimeout(function(){return _this3.searchMovies(filter);},100);\n\t},\n\t\n\trenderFooter:function renderFooter(){\n\tif(!this.hasMore()||!this.state.isLoadingTail){\n\treturn React.createElement(View,{style:styles.scrollSpinner});\n\t}\n\tif(Platform.OS==='ios'){\n\treturn React.createElement(ActivityIndicatorIOS,{style:styles.scrollSpinner});\n\t}else if(Platform.OS==='web'){\n\treturn(\n\tReact.createElement(View,{style:{alignItems:'center'}},\n\tReact.createElement(ActivityIndicatorIOS,{style:styles.scrollSpinner})));\n\t\n\t\n\t}else{\n\treturn(\n\tReact.createElement(View,{style:{alignItems:'center'}},\n\tReact.createElement(ProgressBarAndroid,{styleAttr:'Large'})));\n\t\n\t\n\t}\n\t},\n\t\n\trenderSeparator:function renderSeparator(\n\tsectionID,\n\trowID,\n\tadjacentRowHighlighted)\n\t{\n\tvar style=styles.rowSeparator;\n\tif(adjacentRowHighlighted){\n\tstyle=[style,styles.rowSeparatorHide];\n\t}\n\treturn(\n\tReact.createElement(View,{key:'SEP_'+sectionID+'_'+rowID,style:style}));\n\t\n\t},\n\t\n\trenderRow:function renderRow(\n\tmovie,\n\tsectionID,\n\trowID,\n\thighlightRowFunc)\n\t{var _this4=this;\n\treturn(\n\tReact.createElement(MovieCell,{\n\tkey:movie.id,\n\tonSelect:function onSelect(){return _this4.selectMovie(movie);},\n\tonHighlight:function onHighlight(){return highlightRowFunc(sectionID,rowID);},\n\tonUnhighlight:function onUnhighlight(){return highlightRowFunc(null,null);},\n\tmovie:movie}));\n\t\n\t\n\t},\n\t\n\trender:function render(){var _this5=this;\n\tvar content=this.state.dataSource.getRowCount()===0?\n\tReact.createElement(NoMovies,{\n\tfilter:this.state.filter,\n\tisLoading:this.state.isLoading}):\n\t\n\tReact.createElement(ListView,{\n\tref:'listview',\n\trenderSeparator:this.renderSeparator,\n\tdataSource:this.state.dataSource,\n\trenderFooter:this.renderFooter,\n\trenderRow:this.renderRow,\n\tonEndReached:this.onEndReached,\n\tautomaticallyAdjustContentInsets:false,\n\tkeyboardDismissMode:'on-drag',\n\tkeyboardShouldPersistTaps:true,\n\tshowsVerticalScrollIndicator:false});\n\t\n\t\n\treturn(\n\tReact.createElement(View,{style:styles.container},\n\tReact.createElement(SearchBar,{\n\tonSearchChange:this.onSearchChange,\n\tisLoading:this.state.isLoading,\n\tonFocus:function onFocus(){return(\n\t_this5.refs.listview&&_this5.refs.listview.getScrollResponder().scrollTo(0,0));}}),\n\t\n\tReact.createElement(View,{style:styles.separator}),\n\tcontent));\n\t\n\t\n\t}});\n\t\n\t\n\tvar NoMovies=createClass({\n\trender:function render(){\n\tvar text='';\n\tif(this.props.filter){\n\ttext='No results for \"'+this.props.filter+'\"';\n\t}else if(!this.props.isLoading){\n\t\n\t\n\ttext='No movies found';\n\t}\n\t\n\treturn(\n\tReact.createElement(View,{style:[styles.container,styles.centerText]},\n\tReact.createElement(Text,{style:styles.noMoviesText},text)));\n\t\n\t\n\t}});\n\t\n\t\n\tvar styles=StyleSheet.create({\n\tcontainer:{\n\tflex:1,\n\tbackgroundColor:'white'},\n\t\n\tcenterText:{\n\talignItems:'center'},\n\t\n\tnoMoviesText:{\n\tmarginTop:80,\n\tcolor:'#888888'},\n\t\n\tseparator:{\n\theight:1,\n\tbackgroundColor:'#eeeeee'},\n\t\n\tscrollSpinner:{\n\tmarginVertical:20},\n\t\n\trowSeparator:{\n\tbackgroundColor:'rgba(0, 0, 0, 0.1)',\n\theight:1,\n\tmarginLeft:4},\n\t\n\trowSeparatorHide:{\n\topacity:0.0}});\n\t\n\t\n\t\n\tmodule.exports=SearchScreen;\n\n/***/ },\n\n/***/ 341:\n/***/ function(module, exports, __webpack_require__) {\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t'use strict';\n\t\n\tvar _ReactPromise=__webpack_require__(317);var _ReactPromise2=_interopRequireDefault(_ReactPromise);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}\n\t\n\t\n\tvar defaultOptions={\n\ttimeout:5000,\n\tjsonpCallback:'callback'};\n\t\n\t\n\tfunction generateCallbackFunction(){\n\treturn'jsonp_'+Date.now()+'_'+Math.ceil(Math.random()*100000);\n\t}\n\t\n\t\n\tfunction clearFunction(functionName){\n\t\n\t\n\ttry{\n\tdelete window[functionName];\n\t}catch(e){\n\twindow[functionName]=undefined;\n\t}\n\t}\n\t\n\tfunction removeScript(scriptId){\n\tvar script=document.getElementById(scriptId);\n\tdocument.getElementsByTagName(\"head\")[0].removeChild(script);\n\t}\n\t\n\tvar fetchJsonp=function fetchJsonp(url){var options=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};\n\tvar timeout=options.timeout!=null?options.timeout:defaultOptions.timeout;\n\tvar jsonpCallback=options.jsonpCallback!=null?options.jsonpCallback:defaultOptions.jsonpCallback;\n\t\n\tvar timeoutId=void 0;\n\t\n\treturn new _ReactPromise2.default(function(resolve,reject){\n\tvar callbackFunction=generateCallbackFunction();\n\t\n\twindow[callbackFunction]=function(response){\n\tresolve({\n\tok:true,\n\t\n\tjson:function json(){\n\treturn _ReactPromise2.default.resolve(response);\n\t}});\n\t\n\t\n\tif(timeoutId)clearTimeout(timeoutId);\n\t\n\tremoveScript(jsonpCallback+'_'+callbackFunction);\n\t\n\tclearFunction(callbackFunction);\n\t};\n\t\n\t\n\turl+=url.indexOf('?')===-1?'?':'&';\n\t\n\tvar jsonpScript=document.createElement('script');\n\tjsonpScript.setAttribute(\"src\",url+jsonpCallback+'='+callbackFunction);\n\tjsonpScript.id=jsonpCallback+'_'+callbackFunction;\n\tdocument.getElementsByTagName(\"head\")[0].appendChild(jsonpScript);\n\t\n\ttimeoutId=setTimeout(function(){\n\treject(new Error('JSONP request to '+url+' timed out'));\n\t\n\tclearFunction(callbackFunction);\n\tremoveScript(jsonpCallback+'_'+callbackFunction);\n\t},timeout);\n\t});\n\t};\n\t\n\tmodule.exports=fetchJsonp;\n\n/***/ },\n\n/***/ 342:\n/***/ function(module, exports, __webpack_require__) {\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t'use strict';\n\t\n\tvar _ReactPromise=__webpack_require__(317);var _ReactPromise2=_interopRequireDefault(_ReactPromise);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}\n\t\n\t\n\tif(!self.fetch){\n\tfunction normalizeName(name){\n\tif(typeof name!=='string'){\n\tname=String(name);\n\t}\n\tif(/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)){\n\tthrow new TypeError('Invalid character in header field name');\n\t}\n\treturn name.toLowerCase();\n\t}\n\t\n\tfunction normalizeValue(value){\n\tif(typeof value!=='string'){\n\tvalue=String(value);\n\t}\n\treturn value;\n\t}\n\t\n\tfunction Headers(headers){\n\tthis.map={};\n\t\n\tif(headers instanceof Headers){\n\theaders.forEach(function(value,name){\n\tthis.append(name,value);\n\t},this);\n\t\n\t}else if(headers){\n\tObject.getOwnPropertyNames(headers).forEach(function(name){\n\tthis.append(name,headers[name]);\n\t},this);\n\t}\n\t}\n\t\n\tHeaders.prototype.append=function(name,value){\n\tname=normalizeName(name);\n\tvalue=normalizeValue(value);\n\tvar list=this.map[name];\n\tif(!list){\n\tlist=[];\n\tthis.map[name]=list;\n\t}\n\tlist.push(value);\n\t};\n\t\n\tHeaders.prototype['delete']=function(name){\n\tdelete this.map[normalizeName(name)];\n\t};\n\t\n\tHeaders.prototype.get=function(name){\n\tvar values=this.map[normalizeName(name)];\n\treturn values?values[0]:null;\n\t};\n\t\n\tHeaders.prototype.getAll=function(name){\n\treturn this.map[normalizeName(name)]||[];\n\t};\n\t\n\tHeaders.prototype.has=function(name){\n\treturn this.map.hasOwnProperty(normalizeName(name));\n\t};\n\t\n\tHeaders.prototype.set=function(name,value){\n\tthis.map[normalizeName(name)]=[normalizeValue(value)];\n\t};\n\t\n\tHeaders.prototype.forEach=function(callback,thisArg){\n\tObject.getOwnPropertyNames(this.map).forEach(function(name){\n\tthis.map[name].forEach(function(value){\n\tcallback.call(thisArg,value,name,this);\n\t},this);\n\t},this);\n\t};\n\t\n\tfunction consumed(body){\n\tif(body.bodyUsed){\n\treturn _ReactPromise2.default.reject(new TypeError('Already read'));\n\t}\n\tbody.bodyUsed=true;\n\t}\n\t\n\tfunction fileReaderReady(reader){\n\treturn new _ReactPromise2.default(function(resolve,reject){\n\treader.onload=function(){\n\tresolve(reader.result);\n\t};\n\treader.onerror=function(){\n\treject(reader.error);\n\t};\n\t});\n\t}\n\t\n\tfunction readBlobAsArrayBuffer(blob){\n\tvar reader=new FileReader();\n\treader.readAsArrayBuffer(blob);\n\treturn fileReaderReady(reader);\n\t}\n\t\n\tfunction readBlobAsText(blob){\n\tvar reader=new FileReader();\n\treader.readAsText(blob);\n\treturn fileReaderReady(reader);\n\t}\n\t\n\tvar support={\n\tblob:'FileReader'in self&&'Blob'in self&&function(){\n\ttry{\n\tnew Blob();\n\treturn true;\n\t}catch(e){\n\treturn false;\n\t}\n\t}(),\n\tformData:'FormData'in self,\n\tarrayBuffer:'ArrayBuffer'in self};\n\t\n\t\n\tfunction Body(){\n\tthis.bodyUsed=false;\n\t\n\t\n\tthis._initBody=function(body){\n\tthis._bodyInit=body;\n\tif(typeof body==='string'){\n\tthis._bodyText=body;\n\t}else if(support.blob&&Blob.prototype.isPrototypeOf(body)){\n\tthis._bodyBlob=body;\n\t}else if(support.formData&&FormData.prototype.isPrototypeOf(body)){\n\tthis._bodyFormData=body;\n\t}else if(!body){\n\tthis._bodyText='';\n\t}else if(support.arrayBuffer&&ArrayBuffer.prototype.isPrototypeOf(body)){\n\t\n\t\n\t}else{\n\tthrow new Error('unsupported BodyInit type');\n\t}\n\t};\n\t\n\tif(support.blob){\n\tthis.blob=function(){\n\tvar rejected=consumed(this);\n\tif(rejected){\n\treturn rejected;\n\t}\n\t\n\tif(this._bodyBlob){\n\treturn _ReactPromise2.default.resolve(this._bodyBlob);\n\t}else if(this._bodyFormData){\n\tthrow new Error('could not read FormData body as blob');\n\t}else{\n\treturn _ReactPromise2.default.resolve(new Blob([this._bodyText]));\n\t}\n\t};\n\t\n\tthis.arrayBuffer=function(){\n\treturn this.blob().then(readBlobAsArrayBuffer);\n\t};\n\t\n\tthis.text=function(){\n\tvar rejected=consumed(this);\n\tif(rejected){\n\treturn rejected;\n\t}\n\t\n\tif(this._bodyBlob){\n\treturn readBlobAsText(this._bodyBlob);\n\t}else if(this._bodyFormData){\n\tthrow new Error('could not read FormData body as text');\n\t}else{\n\treturn _ReactPromise2.default.resolve(this._bodyText);\n\t}\n\t};\n\t}else{\n\tthis.text=function(){\n\tvar rejected=consumed(this);\n\treturn rejected?rejected:_ReactPromise2.default.resolve(this._bodyText);\n\t};\n\t}\n\t\n\tif(support.formData){\n\tthis.formData=function(){\n\treturn this.text().then(decode);\n\t};\n\t}\n\t\n\tthis.json=function(){\n\treturn this.text().then(JSON.parse);\n\t};\n\t\n\treturn this;\n\t}\n\t\n\t\n\tvar methods=['DELETE','GET','HEAD','OPTIONS','POST','PUT'];\n\t\n\tfunction normalizeMethod(method){\n\tvar upcased=method.toUpperCase();\n\treturn methods.indexOf(upcased)>-1?upcased:method;\n\t}\n\t\n\tfunction Request(input,options){\n\toptions=options||{};\n\tvar body=options.body;\n\tif(Request.prototype.isPrototypeOf(input)){\n\tif(input.bodyUsed){\n\tthrow new TypeError('Already read');\n\t}\n\tthis.url=input.url;\n\tthis.credentials=input.credentials;\n\tif(!options.headers){\n\tthis.headers=new Headers(input.headers);\n\t}\n\tthis.method=input.method;\n\tthis.mode=input.mode;\n\tif(!body){\n\tbody=input._bodyInit;\n\tinput.bodyUsed=true;\n\t}\n\t}else{\n\tthis.url=input;\n\t}\n\t\n\tthis.credentials=options.credentials||this.credentials||'omit';\n\tif(options.headers||!this.headers){\n\tthis.headers=new Headers(options.headers);\n\t}\n\tthis.method=normalizeMethod(options.method||this.method||'GET');\n\tthis.mode=options.mode||this.mode||null;\n\tthis.referrer=null;\n\t\n\tif((this.method==='GET'||this.method==='HEAD')&&body){\n\tthrow new TypeError('Body not allowed for GET or HEAD requests');\n\t}\n\tthis._initBody(body);\n\t}\n\t\n\tRequest.prototype.clone=function(){\n\treturn new Request(this);\n\t};\n\t\n\tfunction decode(body){\n\tvar form=new FormData();\n\tbody.trim().split('&').forEach(function(bytes){\n\tif(bytes){\n\tvar split=bytes.split('=');\n\tvar name=split.shift().replace(/\\+/g,' ');\n\tvar value=split.join('=').replace(/\\+/g,' ');\n\tform.append(decodeURIComponent(name),decodeURIComponent(value));\n\t}\n\t});\n\treturn form;\n\t}\n\t\n\tfunction headers(xhr){\n\tvar head=new Headers();\n\tvar pairs=xhr.getAllResponseHeaders().trim().split('\\n');\n\tpairs.forEach(function(header){\n\tvar split=header.trim().split(':');\n\tvar key=split.shift().trim();\n\tvar value=split.join(':').trim();\n\thead.append(key,value);\n\t});\n\treturn head;\n\t}\n\t\n\tBody.call(Request.prototype);\n\t\n\tfunction Response(bodyInit,options){\n\tif(!options){\n\toptions={};\n\t}\n\t\n\tthis._initBody(bodyInit);\n\tthis.type='default';\n\tthis.status=options.status;\n\tthis.ok=this.status>=200&&this.status<300;\n\tthis.statusText=options.statusText;\n\tthis.headers=options.headers instanceof Headers?options.headers:new Headers(options.headers);\n\tthis.url=options.url||'';\n\t}\n\t\n\tBody.call(Response.prototype);\n\t\n\tResponse.prototype.clone=function(){\n\treturn new Response(this._bodyInit,{\n\tstatus:this.status,\n\tstatusText:this.statusText,\n\theaders:new Headers(this.headers),\n\turl:this.url});\n\t\n\t};\n\t\n\tResponse.error=function(){\n\tvar response=new Response(null,{status:0,statusText:''});\n\tresponse.type='error';\n\treturn response;\n\t};\n\t\n\tvar redirectStatuses=[301,302,303,307,308];\n\t\n\tResponse.redirect=function(url,status){\n\tif(redirectStatuses.indexOf(status)===-1){\n\tthrow new RangeError('Invalid status code');\n\t}\n\t\n\treturn new Response(null,{status:status,headers:{location:url}});\n\t};\n\t\n\tself.Headers=Headers;\n\tself.Request=Request;\n\tself.Response=Response;\n\t\n\tself.fetch=function(input,init){\n\treturn new _ReactPromise2.default(function(resolve,reject){\n\tvar request;\n\tif(Request.prototype.isPrototypeOf(input)&&!init){\n\trequest=input;\n\t}else{\n\trequest=new Request(input,init);\n\t}\n\t\n\tvar xhr=new XMLHttpRequest();\n\t\n\tfunction responseURL(){\n\tif('responseURL'in xhr){\n\treturn xhr.responseURL;\n\t}\n\t\n\t\n\tif(/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())){\n\treturn xhr.getResponseHeader('X-Request-URL');\n\t}\n\t\n\treturn;\n\t}\n\t\n\txhr.onload=function(){\n\tvar status=xhr.status===1223?204:xhr.status;\n\tif(status<100||status>599){\n\treject(new TypeError('Network request failed'));\n\treturn;\n\t}\n\tvar options={\n\tstatus:status,\n\tstatusText:xhr.statusText,\n\theaders:headers(xhr),\n\turl:responseURL()};\n\t\n\tvar body='response'in xhr?xhr.response:xhr.responseText;\n\tresolve(new Response(body,options));\n\t};\n\t\n\txhr.onerror=function(){\n\treject(new TypeError('Network request failed'));\n\t};\n\t\n\txhr.open(request.method,request.url,true);\n\t\n\tif(request.credentials==='include'){\n\txhr.withCredentials=true;\n\t}\n\t\n\tif('responseType'in xhr&&support.blob){\n\txhr.responseType='blob';\n\t}\n\t\n\trequest.headers.forEach(function(value,name){\n\txhr.setRequestHeader(name,value);\n\t});\n\t\n\txhr.send(typeof request._bodyInit==='undefined'?null:request._bodyInit);\n\t});\n\t};\n\t\n\tself.fetch.polyfill=true;\n\t}\n\t\n\tmodule.exports=self.fetch;\n\n/***/ },\n\n/***/ 343:\n/***/ function(module, exports, __webpack_require__) {\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t'use strict';\n\t\n\tvar React=__webpack_require__(1);\n\tvar createClass=__webpack_require__(331);var\n\t\n\tImage=\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\tReact.Image,PixelRatio=React.PixelRatio,Platform=React.Platform,StyleSheet=React.StyleSheet,Text=React.Text,TouchableHighlight=React.TouchableHighlight,TouchableNativeFeedback=React.TouchableNativeFeedback,View=React.View;\n\t\n\tvar getStyleFromScore=__webpack_require__(338);\n\tvar getImageSource=__webpack_require__(337);\n\tvar getTextFromScore=__webpack_require__(339);\n\t\n\tvar MovieCell=createClass({\n\trender:function render(){\n\tvar criticsScore=this.props.movie.ratings.critics_score;\n\tvar TouchableElement=TouchableHighlight;\n\tif(Platform.OS==='android'){\n\tTouchableElement=TouchableNativeFeedback;\n\t}\n\treturn(\n\tReact.createElement(View,null,\n\tReact.createElement(TouchableElement,{\n\tonPress:this.props.onSelect,\n\tonShowUnderlay:this.props.onHighlight,\n\tonHideUnderlay:this.props.onUnhighlight},\n\tReact.createElement(View,{style:styles.row},\n\t\n\t\n\t\n\tReact.createElement(Image,{\n\tsource:getImageSource(this.props.movie,'det'),\n\tstyle:styles.cellImage}),\n\t\n\tReact.createElement(View,{style:styles.textContainer},\n\tReact.createElement(Text,{style:styles.movieTitle,numberOfLines:2},\n\tthis.props.movie.title),\n\t\n\tReact.createElement(Text,{style:styles.movieYear,numberOfLines:1},\n\tthis.props.movie.year,\n\t' ','\\u2022',' ',\n\tReact.createElement(Text,{style:getStyleFromScore(criticsScore)},'Critics ',\n\tgetTextFromScore(criticsScore))))))));\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t}});\n\t\n\t\n\tvar styles=StyleSheet.create({\n\ttextContainer:{\n\tflex:1},\n\t\n\tmovieTitle:{\n\tflex:1,\n\tfontSize:16,\n\tfontWeight:'500',\n\tmarginBottom:2},\n\t\n\tmovieYear:{\n\tcolor:'#999999',\n\tfontSize:12},\n\t\n\trow:{\n\talignItems:'center',\n\tbackgroundColor:'white',\n\tflexDirection:'row',\n\tpadding:5},\n\t\n\tcellImage:{\n\tbackgroundColor:'#dddddd',\n\theight:93,\n\tmarginRight:10,\n\twidth:60},\n\t\n\tcellBorder:{\n\tbackgroundColor:'rgba(0, 0, 0, 0.1)',\n\t\n\theight:1/PixelRatio.get(),\n\tmarginLeft:4}});\n\t\n\t\n\t\n\tmodule.exports=MovieCell;\n\n/***/ },\n\n/***/ 344:\n/***/ function(module, exports, __webpack_require__) {\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t'use strict';\n\t\n\tvar React=__webpack_require__(1);\n\tvar createClass=__webpack_require__(331);var\n\t\n\tActivityIndicatorIOS=\n\t\n\t\n\t\n\tReact.ActivityIndicatorIOS,TextInput=React.TextInput,StyleSheet=React.StyleSheet,View=React.View;\n\t\n\tvar SearchBar=createClass({\n\trender:function render(){\n\treturn(\n\tReact.createElement(View,{style:styles.searchBar},\n\tReact.createElement(TextInput,{\n\tautoCapitalize:'none',\n\tautoCorrect:false,\n\tonChange:this.props.onSearchChange,\n\tplaceholder:'Search a movie...',\n\tonFocus:this.props.onFocus,\n\tstyle:styles.searchBarInput}),\n\t\n\tReact.createElement(ActivityIndicatorIOS,{\n\tanimating:this.props.isLoading,\n\tstyle:styles.spinner})));\n\t\n\t\n\t\n\t}});\n\t\n\t\n\tvar styles=StyleSheet.create({\n\tsearchBar:{\n\tmarginTop:0,\n\tpadding:3,\n\tpaddingLeft:8,\n\tflexDirection:'row',\n\talignItems:'center'},\n\t\n\tsearchBarInput:{\n\tfontSize:15,\n\tflex:1,\n\theight:30},\n\t\n\tspinner:{\n\twidth:30}});\n\t\n\t\n\t\n\tmodule.exports=SearchBar;\n\n/***/ }\n\n});\n\n\n/** WEBPACK FOOTER **\n ** movies.js\n **/","/**\n * The examples provided by Facebook are for non-commercial testing and\n * evaluation purposes only.\n *\n * Facebook reserves all rights not expressly granted.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL\n * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\n * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * @providesModule MoviesApp\n * @flow\n */\n'use strict';\n\nvar React = require('react-native');\nvar createClass = require('create-react-class');\nvar {\n AppRegistry,\n Navigator,\n StyleSheet,\n Platform,\n View\n} = React;\n\nvar MovieScreen = require('./MovieScreen');\nvar SearchScreen = require('./SearchScreen');\n\nvar RouteMapper = function(route, navigationOperations, onComponentRef) {\n\n if (route.name === 'search') {\n return (\n \n );\n } else if (route.name === 'movie') {\n return (\n \n \n \n );\n }\n};\n\nvar MoviesApp = createClass({\n render: function() {\n var initialRoute = {name: 'search'};\n return (\n \n );\n }\n});\n\nvar styles = StyleSheet.create({\n container: {\n flex: 1,\n backgroundColor: 'white',\n },\n});\n\nAppRegistry.registerComponent('MoviesApp', () => MoviesApp);\n\nif(Platform.OS == 'web'){\n var app = document.createElement('div');\n document.body.appendChild(app);\n\n AppRegistry.runApplication('MoviesApp', {\n rootTag: app\n })\n}\n\nmodule.exports = MoviesApp;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Examples/Movies/MoviesApp.web.js\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar React = require('react');\nvar factory = require('./factory');\n\nif (typeof React === 'undefined') {\n throw Error(\n 'create-react-class could not find the React object. If you are using script tags, ' +\n 'make sure that React is being loaded before create-react-class.'\n );\n}\n\n// Hack to grab NoopUpdateQueue from isomorphic React\nvar ReactNoopUpdateQueue = new React.Component().updater;\n\nmodule.exports = factory(\n React.Component,\n React.isValidElement,\n ReactNoopUpdateQueue\n);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/create-react-class/index.js\n ** module id = 331\n ** module chunks = 1 3 4\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar emptyObject = require('fbjs/lib/emptyObject');\nvar _invariant = require('fbjs/lib/invariant');\n\nif (process.env.NODE_ENV !== 'production') {\n var warning = require('fbjs/lib/warning');\n}\n\nvar MIXINS_KEY = 'mixins';\n\n// Helper function to allow the creation of anonymous functions which do not\n// have .name set to the name of the variable being assigned to.\nfunction identity(fn) {\n return fn;\n}\n\nvar ReactPropTypeLocationNames;\nif (process.env.NODE_ENV !== 'production') {\n ReactPropTypeLocationNames = {\n prop: 'prop',\n context: 'context',\n childContext: 'child context'\n };\n} else {\n ReactPropTypeLocationNames = {};\n}\n\nfunction factory(ReactComponent, isValidElement, ReactNoopUpdateQueue) {\n /**\n * Policies that describe methods in `ReactClassInterface`.\n */\n\n var injectedMixins = [];\n\n /**\n * Composite components are higher-level components that compose other composite\n * or host components.\n *\n * To create a new type of `ReactClass`, pass a specification of\n * your new class to `React.createClass`. The only requirement of your class\n * specification is that you implement a `render` method.\n *\n * var MyComponent = React.createClass({\n * render: function() {\n * return
Hello World
;\n * }\n * });\n *\n * The class specification supports a specific protocol of methods that have\n * special meaning (e.g. `render`). See `ReactClassInterface` for\n * more the comprehensive protocol. Any other properties and methods in the\n * class specification will be available on the prototype.\n *\n * @interface ReactClassInterface\n * @internal\n */\n var ReactClassInterface = {\n /**\n * An array of Mixin objects to include when defining your component.\n *\n * @type {array}\n * @optional\n */\n mixins: 'DEFINE_MANY',\n\n /**\n * An object containing properties and methods that should be defined on\n * the component's constructor instead of its prototype (static methods).\n *\n * @type {object}\n * @optional\n */\n statics: 'DEFINE_MANY',\n\n /**\n * Definition of prop types for this component.\n *\n * @type {object}\n * @optional\n */\n propTypes: 'DEFINE_MANY',\n\n /**\n * Definition of context types for this component.\n *\n * @type {object}\n * @optional\n */\n contextTypes: 'DEFINE_MANY',\n\n /**\n * Definition of context types this component sets for its children.\n *\n * @type {object}\n * @optional\n */\n childContextTypes: 'DEFINE_MANY',\n\n // ==== Definition methods ====\n\n /**\n * Invoked when the component is mounted. Values in the mapping will be set on\n * `this.props` if that prop is not specified (i.e. using an `in` check).\n *\n * This method is invoked before `getInitialState` and therefore cannot rely\n * on `this.state` or use `this.setState`.\n *\n * @return {object}\n * @optional\n */\n getDefaultProps: 'DEFINE_MANY_MERGED',\n\n /**\n * Invoked once before the component is mounted. The return value will be used\n * as the initial value of `this.state`.\n *\n * getInitialState: function() {\n * return {\n * isOn: false,\n * fooBaz: new BazFoo()\n * }\n * }\n *\n * @return {object}\n * @optional\n */\n getInitialState: 'DEFINE_MANY_MERGED',\n\n /**\n * @return {object}\n * @optional\n */\n getChildContext: 'DEFINE_MANY_MERGED',\n\n /**\n * Uses props from `this.props` and state from `this.state` to render the\n * structure of the component.\n *\n * No guarantees are made about when or how often this method is invoked, so\n * it must not have side effects.\n *\n * render: function() {\n * var name = this.props.name;\n * return
Hello, {name}!
;\n * }\n *\n * @return {ReactComponent}\n * @required\n */\n render: 'DEFINE_ONCE',\n\n // ==== Delegate methods ====\n\n /**\n * Invoked when the component is initially created and about to be mounted.\n * This may have side effects, but any external subscriptions or data created\n * by this method must be cleaned up in `componentWillUnmount`.\n *\n * @optional\n */\n componentWillMount: 'DEFINE_MANY',\n\n /**\n * Invoked when the component has been mounted and has a DOM representation.\n * However, there is no guarantee that the DOM node is in the document.\n *\n * Use this as an opportunity to operate on the DOM when the component has\n * been mounted (initialized and rendered) for the first time.\n *\n * @param {DOMElement} rootNode DOM element representing the component.\n * @optional\n */\n componentDidMount: 'DEFINE_MANY',\n\n /**\n * Invoked before the component receives new props.\n *\n * Use this as an opportunity to react to a prop transition by updating the\n * state using `this.setState`. Current props are accessed via `this.props`.\n *\n * componentWillReceiveProps: function(nextProps, nextContext) {\n * this.setState({\n * likesIncreasing: nextProps.likeCount > this.props.likeCount\n * });\n * }\n *\n * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop\n * transition may cause a state change, but the opposite is not true. If you\n * need it, you are probably looking for `componentWillUpdate`.\n *\n * @param {object} nextProps\n * @optional\n */\n componentWillReceiveProps: 'DEFINE_MANY',\n\n /**\n * Invoked while deciding if the component should be updated as a result of\n * receiving new props, state and/or context.\n *\n * Use this as an opportunity to `return false` when you're certain that the\n * transition to the new props/state/context will not require a component\n * update.\n *\n * shouldComponentUpdate: function(nextProps, nextState, nextContext) {\n * return !equal(nextProps, this.props) ||\n * !equal(nextState, this.state) ||\n * !equal(nextContext, this.context);\n * }\n *\n * @param {object} nextProps\n * @param {?object} nextState\n * @param {?object} nextContext\n * @return {boolean} True if the component should update.\n * @optional\n */\n shouldComponentUpdate: 'DEFINE_ONCE',\n\n /**\n * Invoked when the component is about to update due to a transition from\n * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`\n * and `nextContext`.\n *\n * Use this as an opportunity to perform preparation before an update occurs.\n *\n * NOTE: You **cannot** use `this.setState()` in this method.\n *\n * @param {object} nextProps\n * @param {?object} nextState\n * @param {?object} nextContext\n * @param {ReactReconcileTransaction} transaction\n * @optional\n */\n componentWillUpdate: 'DEFINE_MANY',\n\n /**\n * Invoked when the component's DOM representation has been updated.\n *\n * Use this as an opportunity to operate on the DOM when the component has\n * been updated.\n *\n * @param {object} prevProps\n * @param {?object} prevState\n * @param {?object} prevContext\n * @param {DOMElement} rootNode DOM element representing the component.\n * @optional\n */\n componentDidUpdate: 'DEFINE_MANY',\n\n /**\n * Invoked when the component is about to be removed from its parent and have\n * its DOM representation destroyed.\n *\n * Use this as an opportunity to deallocate any external resources.\n *\n * NOTE: There is no `componentDidUnmount` since your component will have been\n * destroyed by that point.\n *\n * @optional\n */\n componentWillUnmount: 'DEFINE_MANY',\n\n // ==== Advanced methods ====\n\n /**\n * Updates the component's currently mounted DOM representation.\n *\n * By default, this implements React's rendering and reconciliation algorithm.\n * Sophisticated clients may wish to override this.\n *\n * @param {ReactReconcileTransaction} transaction\n * @internal\n * @overridable\n */\n updateComponent: 'OVERRIDE_BASE'\n };\n\n /**\n * Mapping from class specification keys to special processing functions.\n *\n * Although these are declared like instance properties in the specification\n * when defining classes using `React.createClass`, they are actually static\n * and are accessible on the constructor instead of the prototype. Despite\n * being static, they must be defined outside of the \"statics\" key under\n * which all other static methods are defined.\n */\n var RESERVED_SPEC_KEYS = {\n displayName: function(Constructor, displayName) {\n Constructor.displayName = displayName;\n },\n mixins: function(Constructor, mixins) {\n if (mixins) {\n for (var i = 0; i < mixins.length; i++) {\n mixSpecIntoComponent(Constructor, mixins[i]);\n }\n }\n },\n childContextTypes: function(Constructor, childContextTypes) {\n if (process.env.NODE_ENV !== 'production') {\n validateTypeDef(Constructor, childContextTypes, 'childContext');\n }\n Constructor.childContextTypes = _assign(\n {},\n Constructor.childContextTypes,\n childContextTypes\n );\n },\n contextTypes: function(Constructor, contextTypes) {\n if (process.env.NODE_ENV !== 'production') {\n validateTypeDef(Constructor, contextTypes, 'context');\n }\n Constructor.contextTypes = _assign(\n {},\n Constructor.contextTypes,\n contextTypes\n );\n },\n /**\n * Special case getDefaultProps which should move into statics but requires\n * automatic merging.\n */\n getDefaultProps: function(Constructor, getDefaultProps) {\n if (Constructor.getDefaultProps) {\n Constructor.getDefaultProps = createMergedResultFunction(\n Constructor.getDefaultProps,\n getDefaultProps\n );\n } else {\n Constructor.getDefaultProps = getDefaultProps;\n }\n },\n propTypes: function(Constructor, propTypes) {\n if (process.env.NODE_ENV !== 'production') {\n validateTypeDef(Constructor, propTypes, 'prop');\n }\n Constructor.propTypes = _assign({}, Constructor.propTypes, propTypes);\n },\n statics: function(Constructor, statics) {\n mixStaticSpecIntoComponent(Constructor, statics);\n },\n autobind: function() {}\n };\n\n function validateTypeDef(Constructor, typeDef, location) {\n for (var propName in typeDef) {\n if (typeDef.hasOwnProperty(propName)) {\n // use a warning instead of an _invariant so components\n // don't show up in prod but only in __DEV__\n if (process.env.NODE_ENV !== 'production') {\n warning(\n typeof typeDef[propName] === 'function',\n '%s: %s type `%s` is invalid; it must be a function, usually from ' +\n 'React.PropTypes.',\n Constructor.displayName || 'ReactClass',\n ReactPropTypeLocationNames[location],\n propName\n );\n }\n }\n }\n }\n\n function validateMethodOverride(isAlreadyDefined, name) {\n var specPolicy = ReactClassInterface.hasOwnProperty(name)\n ? ReactClassInterface[name]\n : null;\n\n // Disallow overriding of base class methods unless explicitly allowed.\n if (ReactClassMixin.hasOwnProperty(name)) {\n _invariant(\n specPolicy === 'OVERRIDE_BASE',\n 'ReactClassInterface: You are attempting to override ' +\n '`%s` from your class specification. Ensure that your method names ' +\n 'do not overlap with React methods.',\n name\n );\n }\n\n // Disallow defining methods more than once unless explicitly allowed.\n if (isAlreadyDefined) {\n _invariant(\n specPolicy === 'DEFINE_MANY' || specPolicy === 'DEFINE_MANY_MERGED',\n 'ReactClassInterface: You are attempting to define ' +\n '`%s` on your component more than once. This conflict may be due ' +\n 'to a mixin.',\n name\n );\n }\n }\n\n /**\n * Mixin helper which handles policy validation and reserved\n * specification keys when building React classes.\n */\n function mixSpecIntoComponent(Constructor, spec) {\n if (!spec) {\n if (process.env.NODE_ENV !== 'production') {\n var typeofSpec = typeof spec;\n var isMixinValid = typeofSpec === 'object' && spec !== null;\n\n if (process.env.NODE_ENV !== 'production') {\n warning(\n isMixinValid,\n \"%s: You're attempting to include a mixin that is either null \" +\n 'or not an object. Check the mixins included by the component, ' +\n 'as well as any mixins they include themselves. ' +\n 'Expected object but got %s.',\n Constructor.displayName || 'ReactClass',\n spec === null ? null : typeofSpec\n );\n }\n }\n\n return;\n }\n\n _invariant(\n typeof spec !== 'function',\n \"ReactClass: You're attempting to \" +\n 'use a component class or function as a mixin. Instead, just use a ' +\n 'regular object.'\n );\n _invariant(\n !isValidElement(spec),\n \"ReactClass: You're attempting to \" +\n 'use a component as a mixin. Instead, just use a regular object.'\n );\n\n var proto = Constructor.prototype;\n var autoBindPairs = proto.__reactAutoBindPairs;\n\n // By handling mixins before any other properties, we ensure the same\n // chaining order is applied to methods with DEFINE_MANY policy, whether\n // mixins are listed before or after these methods in the spec.\n if (spec.hasOwnProperty(MIXINS_KEY)) {\n RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins);\n }\n\n for (var name in spec) {\n if (!spec.hasOwnProperty(name)) {\n continue;\n }\n\n if (name === MIXINS_KEY) {\n // We have already handled mixins in a special case above.\n continue;\n }\n\n var property = spec[name];\n var isAlreadyDefined = proto.hasOwnProperty(name);\n validateMethodOverride(isAlreadyDefined, name);\n\n if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) {\n RESERVED_SPEC_KEYS[name](Constructor, property);\n } else {\n // Setup methods on prototype:\n // The following member methods should not be automatically bound:\n // 1. Expected ReactClass methods (in the \"interface\").\n // 2. Overridden methods (that were mixed in).\n var isReactClassMethod = ReactClassInterface.hasOwnProperty(name);\n var isFunction = typeof property === 'function';\n var shouldAutoBind =\n isFunction &&\n !isReactClassMethod &&\n !isAlreadyDefined &&\n spec.autobind !== false;\n\n if (shouldAutoBind) {\n autoBindPairs.push(name, property);\n proto[name] = property;\n } else {\n if (isAlreadyDefined) {\n var specPolicy = ReactClassInterface[name];\n\n // These cases should already be caught by validateMethodOverride.\n _invariant(\n isReactClassMethod &&\n (specPolicy === 'DEFINE_MANY_MERGED' ||\n specPolicy === 'DEFINE_MANY'),\n 'ReactClass: Unexpected spec policy %s for key %s ' +\n 'when mixing in component specs.',\n specPolicy,\n name\n );\n\n // For methods which are defined more than once, call the existing\n // methods before calling the new property, merging if appropriate.\n if (specPolicy === 'DEFINE_MANY_MERGED') {\n proto[name] = createMergedResultFunction(proto[name], property);\n } else if (specPolicy === 'DEFINE_MANY') {\n proto[name] = createChainedFunction(proto[name], property);\n }\n } else {\n proto[name] = property;\n if (process.env.NODE_ENV !== 'production') {\n // Add verbose displayName to the function, which helps when looking\n // at profiling tools.\n if (typeof property === 'function' && spec.displayName) {\n proto[name].displayName = spec.displayName + '_' + name;\n }\n }\n }\n }\n }\n }\n }\n\n function mixStaticSpecIntoComponent(Constructor, statics) {\n if (!statics) {\n return;\n }\n for (var name in statics) {\n var property = statics[name];\n if (!statics.hasOwnProperty(name)) {\n continue;\n }\n\n var isReserved = name in RESERVED_SPEC_KEYS;\n _invariant(\n !isReserved,\n 'ReactClass: You are attempting to define a reserved ' +\n 'property, `%s`, that shouldn\\'t be on the \"statics\" key. Define it ' +\n 'as an instance property instead; it will still be accessible on the ' +\n 'constructor.',\n name\n );\n\n var isInherited = name in Constructor;\n _invariant(\n !isInherited,\n 'ReactClass: You are attempting to define ' +\n '`%s` on your component more than once. This conflict may be ' +\n 'due to a mixin.',\n name\n );\n Constructor[name] = property;\n }\n }\n\n /**\n * Merge two objects, but throw if both contain the same key.\n *\n * @param {object} one The first object, which is mutated.\n * @param {object} two The second object\n * @return {object} one after it has been mutated to contain everything in two.\n */\n function mergeIntoWithNoDuplicateKeys(one, two) {\n _invariant(\n one && two && typeof one === 'object' && typeof two === 'object',\n 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.'\n );\n\n for (var key in two) {\n if (two.hasOwnProperty(key)) {\n _invariant(\n one[key] === undefined,\n 'mergeIntoWithNoDuplicateKeys(): ' +\n 'Tried to merge two objects with the same key: `%s`. This conflict ' +\n 'may be due to a mixin; in particular, this may be caused by two ' +\n 'getInitialState() or getDefaultProps() methods returning objects ' +\n 'with clashing keys.',\n key\n );\n one[key] = two[key];\n }\n }\n return one;\n }\n\n /**\n * Creates a function that invokes two functions and merges their return values.\n *\n * @param {function} one Function to invoke first.\n * @param {function} two Function to invoke second.\n * @return {function} Function that invokes the two argument functions.\n * @private\n */\n function createMergedResultFunction(one, two) {\n return function mergedResult() {\n var a = one.apply(this, arguments);\n var b = two.apply(this, arguments);\n if (a == null) {\n return b;\n } else if (b == null) {\n return a;\n }\n var c = {};\n mergeIntoWithNoDuplicateKeys(c, a);\n mergeIntoWithNoDuplicateKeys(c, b);\n return c;\n };\n }\n\n /**\n * Creates a function that invokes two functions and ignores their return vales.\n *\n * @param {function} one Function to invoke first.\n * @param {function} two Function to invoke second.\n * @return {function} Function that invokes the two argument functions.\n * @private\n */\n function createChainedFunction(one, two) {\n return function chainedFunction() {\n one.apply(this, arguments);\n two.apply(this, arguments);\n };\n }\n\n /**\n * Binds a method to the component.\n *\n * @param {object} component Component whose method is going to be bound.\n * @param {function} method Method to be bound.\n * @return {function} The bound method.\n */\n function bindAutoBindMethod(component, method) {\n var boundMethod = method.bind(component);\n if (process.env.NODE_ENV !== 'production') {\n boundMethod.__reactBoundContext = component;\n boundMethod.__reactBoundMethod = method;\n boundMethod.__reactBoundArguments = null;\n var componentName = component.constructor.displayName;\n var _bind = boundMethod.bind;\n boundMethod.bind = function(newThis) {\n for (\n var _len = arguments.length,\n args = Array(_len > 1 ? _len - 1 : 0),\n _key = 1;\n _key < _len;\n _key++\n ) {\n args[_key - 1] = arguments[_key];\n }\n\n // User is trying to bind() an autobound method; we effectively will\n // ignore the value of \"this\" that the user is trying to use, so\n // let's warn.\n if (newThis !== component && newThis !== null) {\n if (process.env.NODE_ENV !== 'production') {\n warning(\n false,\n 'bind(): React component methods may only be bound to the ' +\n 'component instance. See %s',\n componentName\n );\n }\n } else if (!args.length) {\n if (process.env.NODE_ENV !== 'production') {\n warning(\n false,\n 'bind(): You are binding a component method to the component. ' +\n 'React does this for you automatically in a high-performance ' +\n 'way, so you can safely remove this call. See %s',\n componentName\n );\n }\n return boundMethod;\n }\n var reboundMethod = _bind.apply(boundMethod, arguments);\n reboundMethod.__reactBoundContext = component;\n reboundMethod.__reactBoundMethod = method;\n reboundMethod.__reactBoundArguments = args;\n return reboundMethod;\n };\n }\n return boundMethod;\n }\n\n /**\n * Binds all auto-bound methods in a component.\n *\n * @param {object} component Component whose method is going to be bound.\n */\n function bindAutoBindMethods(component) {\n var pairs = component.__reactAutoBindPairs;\n for (var i = 0; i < pairs.length; i += 2) {\n var autoBindKey = pairs[i];\n var method = pairs[i + 1];\n component[autoBindKey] = bindAutoBindMethod(component, method);\n }\n }\n\n var IsMountedPreMixin = {\n componentDidMount: function() {\n this.__isMounted = true;\n }\n };\n\n var IsMountedPostMixin = {\n componentWillUnmount: function() {\n this.__isMounted = false;\n }\n };\n\n /**\n * Add more to the ReactClass base class. These are all legacy features and\n * therefore not already part of the modern ReactComponent.\n */\n var ReactClassMixin = {\n /**\n * TODO: This will be deprecated because state should always keep a consistent\n * type signature and the only use case for this, is to avoid that.\n */\n replaceState: function(newState, callback) {\n this.updater.enqueueReplaceState(this, newState, callback);\n },\n\n /**\n * Checks whether or not this composite component is mounted.\n * @return {boolean} True if mounted, false otherwise.\n * @protected\n * @final\n */\n isMounted: function() {\n if (process.env.NODE_ENV !== 'production') {\n warning(\n this.__didWarnIsMounted,\n '%s: isMounted is deprecated. Instead, make sure to clean up ' +\n 'subscriptions and pending requests in componentWillUnmount to ' +\n 'prevent memory leaks.',\n (this.constructor && this.constructor.displayName) ||\n this.name ||\n 'Component'\n );\n this.__didWarnIsMounted = true;\n }\n return !!this.__isMounted;\n }\n };\n\n var ReactClassComponent = function() {};\n _assign(\n ReactClassComponent.prototype,\n ReactComponent.prototype,\n ReactClassMixin\n );\n\n /**\n * Creates a composite component class given a class specification.\n * See https://facebook.github.io/react/docs/top-level-api.html#react.createclass\n *\n * @param {object} spec Class specification (which must define `render`).\n * @return {function} Component constructor function.\n * @public\n */\n function createClass(spec) {\n // To keep our warnings more understandable, we'll use a little hack here to\n // ensure that Constructor.name !== 'Constructor'. This makes sure we don't\n // unnecessarily identify a class without displayName as 'Constructor'.\n var Constructor = identity(function(props, context, updater) {\n // This constructor gets overridden by mocks. The argument is used\n // by mocks to assert on what gets mounted.\n\n if (process.env.NODE_ENV !== 'production') {\n warning(\n this instanceof Constructor,\n 'Something is calling a React component directly. Use a factory or ' +\n 'JSX instead. See: https://fb.me/react-legacyfactory'\n );\n }\n\n // Wire up auto-binding\n if (this.__reactAutoBindPairs.length) {\n bindAutoBindMethods(this);\n }\n\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n\n this.state = null;\n\n // ReactClasses doesn't have constructors. Instead, they use the\n // getInitialState and componentWillMount methods for initialization.\n\n var initialState = this.getInitialState ? this.getInitialState() : null;\n if (process.env.NODE_ENV !== 'production') {\n // We allow auto-mocks to proceed as if they're returning null.\n if (\n initialState === undefined &&\n this.getInitialState._isMockFunction\n ) {\n // This is probably bad practice. Consider warning here and\n // deprecating this convenience.\n initialState = null;\n }\n }\n _invariant(\n typeof initialState === 'object' && !Array.isArray(initialState),\n '%s.getInitialState(): must return an object or null',\n Constructor.displayName || 'ReactCompositeComponent'\n );\n\n this.state = initialState;\n });\n Constructor.prototype = new ReactClassComponent();\n Constructor.prototype.constructor = Constructor;\n Constructor.prototype.__reactAutoBindPairs = [];\n\n injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor));\n\n mixSpecIntoComponent(Constructor, IsMountedPreMixin);\n mixSpecIntoComponent(Constructor, spec);\n mixSpecIntoComponent(Constructor, IsMountedPostMixin);\n\n // Initialize the defaultProps property after all mixins have been merged.\n if (Constructor.getDefaultProps) {\n Constructor.defaultProps = Constructor.getDefaultProps();\n }\n\n if (process.env.NODE_ENV !== 'production') {\n // This is a tag to indicate that the use of these method names is ok,\n // since it's used with createClass. If it's not, then it's likely a\n // mistake so we'll warn you to use the static property, property\n // initializer or constructor respectively.\n if (Constructor.getDefaultProps) {\n Constructor.getDefaultProps.isReactClassApproved = {};\n }\n if (Constructor.prototype.getInitialState) {\n Constructor.prototype.getInitialState.isReactClassApproved = {};\n }\n }\n\n _invariant(\n Constructor.prototype.render,\n 'createClass(...): Class specification must implement a `render` method.'\n );\n\n if (process.env.NODE_ENV !== 'production') {\n warning(\n !Constructor.prototype.componentShouldUpdate,\n '%s has a method called ' +\n 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' +\n 'The name is phrased as a question because the function is ' +\n 'expected to return a value.',\n spec.displayName || 'A component'\n );\n warning(\n !Constructor.prototype.componentWillRecieveProps,\n '%s has a method called ' +\n 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?',\n spec.displayName || 'A component'\n );\n }\n\n // Reduce time spent doing lookups by setting these on the prototype.\n for (var methodName in ReactClassInterface) {\n if (!Constructor.prototype[methodName]) {\n Constructor.prototype[methodName] = null;\n }\n }\n\n return Constructor;\n }\n\n return createClass;\n}\n\nmodule.exports = factory;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/create-react-class/factory.js\n ** module id = 332\n ** module chunks = 1 3 4\n **/","/**\n * The examples provided by Facebook are for non-commercial testing and\n * evaluation purposes only.\n *\n * Facebook reserves all rights not expressly granted.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL\n * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\n * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * @flow\n */\n'use strict';\n\nvar React = require('react-native');\nvar createClass = require('create-react-class');\nvar {\n Image,\n PixelRatio,\n ScrollView,\n StyleSheet,\n Text,\n View,\n} = React;\n\nvar getImageSource = require('./getImageSource');\nvar getStyleFromScore = require('./getStyleFromScore');\nvar getTextFromScore = require('./getTextFromScore');\n\nvar MovieScreen = createClass({\n render: function() {\n return (\n \n \n {/* $FlowIssue #7363964 - There's a bug in Flow where you cannot\n * omit a property or set it to undefined if it's inside a shape,\n * even if it isn't required */}\n \n \n {this.props.movie.title}\n {this.props.movie.year}\n \n \n {this.props.movie.mpaa_rating}\n \n \n \n \n \n \n \n {this.props.movie.synopsis}\n \n \n \n \n );\n },\n});\n\nvar Ratings = createClass({\n render: function() {\n var criticsScore = this.props.ratings.critics_score;\n var audienceScore = this.props.ratings.audience_score;\n\n return (\n \n \n Critics:\n \n {getTextFromScore(criticsScore)}\n \n \n \n Audience:\n \n {getTextFromScore(audienceScore)}\n \n \n \n );\n },\n});\n\nvar Cast = createClass({\n render: function() {\n if (!this.props.actors) {\n return null;\n }\n\n return (\n \n Actors\n {this.props.actors.map(actor =>\n \n • {actor.name}\n \n )}\n \n );\n },\n});\n\nvar styles = StyleSheet.create({\n contentContainer: {\n padding: 10,\n },\n rightPane: {\n justifyContent: 'space-between',\n flex: 1,\n },\n movieTitle: {\n flex: 1,\n fontSize: 16,\n fontWeight: '500',\n },\n rating: {\n marginTop: 10,\n },\n ratingTitle: {\n fontSize: 14,\n },\n ratingValue: {\n fontSize: 28,\n fontWeight: '500',\n },\n mpaaWrapper: {\n alignSelf: 'flex-start',\n borderColor: 'black',\n borderWidth: 1,\n paddingHorizontal: 3,\n marginVertical: 5,\n },\n mpaaText: {\n fontFamily: 'Palatino',\n fontSize: 13,\n fontWeight: '500',\n },\n mainSection: {\n flexDirection: 'row',\n },\n detailsImage: {\n width: 134,\n height: 200,\n backgroundColor: '#eaeaea',\n marginRight: 10,\n },\n separator: {\n backgroundColor: 'rgba(0, 0, 0, 0.1)',\n height: 1 / PixelRatio.get(),\n marginVertical: 10,\n },\n castTitle: {\n fontWeight: '500',\n marginBottom: 3,\n },\n castActor: {\n marginLeft: 2,\n },\n});\n\nmodule.exports = MovieScreen;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Examples/Movies/MovieScreen.js\n **/","/**\n * The examples provided by Facebook are for non-commercial testing and\n * evaluation purposes only.\n *\n * Facebook reserves all rights not expressly granted.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL\n * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\n * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * @flow\n */\n'use strict';\n\nfunction getImageSource(movie: Object, kind: ?string): {uri: ?string} {\n var uri = movie && movie.posters ? movie.posters.thumbnail : null;\n if (uri && kind) {\n uri = uri.replace('tmb', kind);\n }\n return { uri };\n}\n\nmodule.exports = getImageSource;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Examples/Movies/getImageSource.js\n **/","/**\n * The examples provided by Facebook are for non-commercial testing and\n * evaluation purposes only.\n *\n * Facebook reserves all rights not expressly granted.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL\n * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\n * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * @flow\n */\n'use strict';\n\nvar React = require('react-native');\nvar {\n StyleSheet,\n} = React;\n\nvar MAX_VALUE = 200;\n\n// import type { StyleObj } from 'StyleSheetTypes';\n\nfunction getStyleFromScore(score: number) {\n if (score < 0) {\n return styles.noScore;\n }\n\n var normalizedScore = Math.round((score / 100) * MAX_VALUE);\n return {\n color: 'rgb(' +\n (MAX_VALUE - normalizedScore) + ', ' +\n normalizedScore + ', ' +\n 0 +\n ')'\n };\n}\n\nvar styles = StyleSheet.create({\n noScore: {\n color: '#999999',\n },\n});\n\nmodule.exports = getStyleFromScore;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Examples/Movies/getStyleFromScore.js\n **/","/**\n * The examples provided by Facebook are for non-commercial testing and\n * evaluation purposes only.\n *\n * Facebook reserves all rights not expressly granted.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL\n * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\n * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * @flow\n */\n'use strict';\n\nfunction getTextFromScore(score: number): string {\n return score > 0 ? score + '%' : 'N/A';\n}\n\nmodule.exports = getTextFromScore;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Examples/Movies/getTextFromScore.js\n **/","/**\n * The examples provided by Facebook are for non-commercial testing and\n * evaluation purposes only.\n *\n * Facebook reserves all rights not expressly granted.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL\n * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\n * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * @flow\n */\n'use strict';\n\nvar React = require('react-native');\nvar createClass = require('create-react-class');\nvar {\n ActivityIndicatorIOS,\n ListView,\n Platform,\n ProgressBarAndroid,\n StyleSheet,\n Text,\n View,\n} = React;\nvar TimerMixin = require('react-timer-mixin');\n\nvar fetch = Platform.OS === 'web'? require('ReactJsonp'): require('ReactFetch');\n\nvar invariant = require('fbjs/lib/invariant');\nvar dismissKeyboard = require('ReactDismissKeyboard');\n\nvar MovieCell = require('./MovieCell');\nvar MovieScreen = require('./MovieScreen');\nvar SearchBar = require('SearchBar');\n\n/**\n * This is for demo purposes only, and rate limited.\n * In case you want to use the Rotten Tomatoes' API on a real app you should\n * create an account at http://developer.rottentomatoes.com/\n */\nvar API_URL = 'http://api.rottentomatoes.com/api/public/v1.0/';\nvar API_KEYS = [\n '7waqfqbprs7pajbz28mqf6vz',\n // 'y4vwv8m33hed9ety83jmv52f', Fallback api_key\n];\n\n// Results should be cached keyed by the query\n// with values of null meaning \"being fetched\"\n// and anything besides null and undefined\n// as the result of a valid query\nvar resultsCache = {\n dataForQuery: {},\n nextPageNumberForQuery: {},\n totalForQuery: {},\n};\n\nvar LOADING = {};\n\nvar SearchScreen = createClass({\n mixins: [TimerMixin],\n\n timeoutID: (null: any),\n\n getInitialState: function() {\n return {\n isLoading: false,\n isLoadingTail: false,\n dataSource: new ListView.DataSource({\n rowHasChanged: (row1, row2) => row1 !== row2,\n }),\n filter: '',\n queryNumber: 0,\n };\n },\n\n componentDidMount: function() {\n this.searchMovies('');\n },\n\n _urlForQueryAndPage: function(query: string, pageNumber: number): string {\n var apiKey = API_KEYS[this.state.queryNumber % API_KEYS.length];\n if (query) {\n return (\n API_URL + 'movies.json?apikey=' + apiKey + '&q=' +\n encodeURIComponent(query) + '&page_limit=20&page=' + pageNumber\n );\n } else {\n // With no query, load latest movies\n return (\n API_URL + 'lists/movies/in_theaters.json?apikey=' + apiKey +\n '&page_limit=20&page=' + pageNumber\n );\n }\n },\n\n searchMovies: function(query: string) {\n this.timeoutID = null;\n\n this.setState({filter: query});\n\n var cachedResultsForQuery = resultsCache.dataForQuery[query];\n if (cachedResultsForQuery) {\n if (!LOADING[query]) {\n this.setState({\n dataSource: this.getDataSource(cachedResultsForQuery),\n isLoading: false\n });\n } else {\n this.setState({isLoading: true});\n }\n return;\n }\n\n LOADING[query] = true;\n resultsCache.dataForQuery[query] = null;\n this.setState({\n isLoading: true,\n queryNumber: this.state.queryNumber + 1,\n isLoadingTail: false,\n });\n\n\n fetch(this._urlForQueryAndPage(query, 1))\n .then((response) => response.json())\n .catch((error) => {\n LOADING[query] = false;\n resultsCache.dataForQuery[query] = undefined;\n\n this.setState({\n dataSource: this.getDataSource([]),\n isLoading: false,\n });\n })\n .then((responseData) => {\n LOADING[query] = false;\n resultsCache.totalForQuery[query] = responseData.total;\n resultsCache.dataForQuery[query] = responseData.movies;\n resultsCache.nextPageNumberForQuery[query] = 2;\n\n if (this.state.filter !== query) {\n // do not update state if the query is stale\n return;\n }\n\n this.setState({\n isLoading: false,\n dataSource: this.getDataSource(responseData.movies),\n });\n })\n .done();\n },\n\n hasMore: function(): boolean {\n var query = this.state.filter;\n if (!resultsCache.dataForQuery[query]) {\n return true;\n }\n return (\n resultsCache.totalForQuery[query] !==\n resultsCache.dataForQuery[query].length\n );\n },\n\n onEndReached: function() {\n var query = this.state.filter;\n if (!this.hasMore() || this.state.isLoadingTail) {\n // We're already fetching or have all the elements so noop\n return;\n }\n\n if (LOADING[query]) {\n return;\n }\n\n LOADING[query] = true;\n this.setState({\n queryNumber: this.state.queryNumber + 1,\n isLoadingTail: true,\n });\n\n var page = resultsCache.nextPageNumberForQuery[query];\n invariant(page != null, 'Next page number for \"%s\" is missing', query);\n\n fetch(this._urlForQueryAndPage(query, page))\n .then((response) => response.json())\n .catch((error) => {\n console.error(error);\n LOADING[query] = false;\n this.setState({\n isLoadingTail: false,\n });\n })\n .then((responseData) => {\n var moviesForQuery = resultsCache.dataForQuery[query].slice();\n\n LOADING[query] = false;\n // We reached the end of the list before the expected number of results\n if (!responseData.movies) {\n resultsCache.totalForQuery[query] = moviesForQuery.length;\n } else {\n for (var i in responseData.movies) {\n moviesForQuery.push(responseData.movies[i]);\n }\n resultsCache.dataForQuery[query] = moviesForQuery;\n resultsCache.nextPageNumberForQuery[query] += 1;\n }\n\n if (this.state.filter !== query) {\n // do not update state if the query is stale\n return;\n }\n\n this.setState({\n isLoadingTail: false,\n dataSource: this.getDataSource(resultsCache.dataForQuery[query]),\n });\n })\n .done();\n },\n\n getDataSource: function(movies: Array): ListView.DataSource {\n return this.state.dataSource.cloneWithRows(movies);\n },\n\n selectMovie: function(movie: Object) {\n if (Platform.OS === 'ios') {\n this.props.navigator.push({\n title: movie.title,\n component: MovieScreen,\n passProps: {movie},\n });\n } else {\n dismissKeyboard();\n this.props.navigator.push({\n title: movie.title,\n name: 'movie',\n movie: movie,\n });\n }\n },\n\n onSearchChange: function(event: Object) {\n var filter = event.nativeEvent.text.toLowerCase();\n\n this.clearTimeout(this.timeoutID);\n this.timeoutID = this.setTimeout(() => this.searchMovies(filter), 100);\n },\n\n renderFooter: function() {\n if (!this.hasMore() || !this.state.isLoadingTail) {\n return ;\n }\n if (Platform.OS === 'ios') {\n return ;\n } else if (Platform.OS === 'web'){\n return (\n \n \n \n );\n } else {\n return (\n \n \n \n );\n }\n },\n\n renderSeparator: function(\n sectionID: number | string,\n rowID: number | string,\n adjacentRowHighlighted: boolean\n ) {\n var style = styles.rowSeparator;\n if (adjacentRowHighlighted) {\n style = [style, styles.rowSeparatorHide];\n }\n return (\n \n );\n },\n\n renderRow: function(\n movie: Object,\n sectionID: number | string,\n rowID: number | string,\n highlightRowFunc: (sectionID: ?number | string, rowID: ?number | string) => void,\n ) {\n return (\n this.selectMovie(movie)}\n onHighlight={() => highlightRowFunc(sectionID, rowID)}\n onUnhighlight={() => highlightRowFunc(null, null)}\n movie={movie}\n />\n );\n },\n\n render: function() {\n var content = this.state.dataSource.getRowCount() === 0 ?\n :\n ;\n\n return (\n \n \n this.refs.listview && this.refs.listview.getScrollResponder().scrollTo(0, 0)}\n />\n \n {content}\n \n );\n },\n});\n\nvar NoMovies = createClass({\n render: function() {\n var text = '';\n if (this.props.filter) {\n text = `No results for \"${this.props.filter}\"`;\n } else if (!this.props.isLoading) {\n // If we're looking at the latest movies, aren't currently loading, and\n // still have no results, show a message\n text = 'No movies found';\n }\n\n return (\n \n {text}\n \n );\n }\n});\n\nvar styles = StyleSheet.create({\n container: {\n flex: 1,\n backgroundColor: 'white',\n },\n centerText: {\n alignItems: 'center',\n },\n noMoviesText: {\n marginTop: 80,\n color: '#888888',\n },\n separator: {\n height: 1,\n backgroundColor: '#eeeeee',\n },\n scrollSpinner: {\n marginVertical: 20,\n },\n rowSeparator: {\n backgroundColor: 'rgba(0, 0, 0, 0.1)',\n height: 1,\n marginLeft: 4,\n },\n rowSeparatorHide: {\n opacity: 0.0,\n },\n});\n\nmodule.exports = SearchScreen;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Examples/Movies/SearchScreen.js\n **/","/**\n * Copyright (c) 2015-present, Alibaba Group Holding Limited.\n * All rights reserved.\n *\n * @providesModule ReactJsonp\n */\n'use strict';\n\nimport Promise from 'ReactPromise';\n\n// From https://github.com/camsong/fetch-jsonp\nconst defaultOptions = {\n timeout: 5000,\n jsonpCallback: 'callback'\n};\n\nfunction generateCallbackFunction() {\n return `jsonp_${Date.now()}_${Math.ceil(Math.random() * 100000)}`;\n}\n\n// Known issue: Will throw 'Uncaught ReferenceError: callback_*** is not defined' error if request timeout\nfunction clearFunction(functionName) {\n // IE8 throws an exception when you try to delete a property on window\n // http://stackoverflow.com/a/1824228/751089\n try {\n delete window[functionName];\n } catch(e) {\n window[functionName] = undefined;\n }\n}\n\nfunction removeScript(scriptId) {\n const script = document.getElementById(scriptId);\n document.getElementsByTagName(\"head\")[0].removeChild(script);\n}\n\nconst fetchJsonp = function(url, options = {}) {\n const timeout = options.timeout != null ? options.timeout : defaultOptions.timeout;\n const jsonpCallback = options.jsonpCallback != null ? options.jsonpCallback : defaultOptions.jsonpCallback;\n\n let timeoutId;\n\n return new Promise((resolve, reject) => {\n const callbackFunction = generateCallbackFunction();\n\n window[callbackFunction] = function(response) {\n resolve({\n ok: true,\n // keep consistent with fetch API\n json: function() {\n return Promise.resolve(response);\n }\n });\n\n if (timeoutId) clearTimeout(timeoutId);\n\n removeScript(jsonpCallback + '_' + callbackFunction);\n\n clearFunction(callbackFunction);\n };\n\n // Check if the user set their own params, and if not add a ? to start a list of params\n url += (url.indexOf('?') === -1) ? '?' : '&';\n\n const jsonpScript = document.createElement('script');\n jsonpScript.setAttribute(\"src\", url + jsonpCallback + '=' + callbackFunction);\n jsonpScript.id = jsonpCallback + '_' + callbackFunction;\n document.getElementsByTagName(\"head\")[0].appendChild(jsonpScript);\n\n timeoutId = setTimeout(() => {\n reject(new Error(`JSONP request to ${url} timed out`));\n\n clearFunction(callbackFunction);\n removeScript(jsonpCallback + '_' + callbackFunction);\n }, timeout);\n });\n};\n\nmodule.exports = fetchJsonp;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Libraries/Fetch/Jsonp.web.js\n **/","/**\n * Copyright (c) 2015-present, Alibaba Group Holding Limited.\n * All rights reserved.\n *\n * @providesModule ReactFetch\n */\n'use strict';\n\nimport Promise from 'ReactPromise';\n\n// https://github.com/github/fetch\nif (!self.fetch) {\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value)\n }\n return value\n }\n\n function Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var list = this.map[name]\n if (!list) {\n list = []\n this.map[name] = list\n }\n list.push(value)\n }\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)]\n }\n\n Headers.prototype.get = function(name) {\n var values = this.map[normalizeName(name)]\n return values ? values[0] : null\n }\n\n Headers.prototype.getAll = function(name) {\n return this.map[normalizeName(name)] || []\n }\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n }\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = [normalizeValue(value)]\n }\n\n Headers.prototype.forEach = function(callback, thisArg) {\n Object.getOwnPropertyNames(this.map).forEach(function(name) {\n this.map[name].forEach(function(value) {\n callback.call(thisArg, value, name, this)\n }, this)\n }, this)\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n reader.readAsArrayBuffer(blob)\n return fileReaderReady(reader)\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader()\n reader.readAsText(blob)\n return fileReaderReady(reader)\n }\n\n var support = {\n blob: 'FileReader' in self && 'Blob' in self && (function() {\n try {\n new Blob();\n return true\n } catch(e) {\n return false\n }\n })(),\n formData: 'FormData' in self,\n arrayBuffer: 'ArrayBuffer' in self\n }\n\n function Body() {\n this.bodyUsed = false\n\n\n this._initBody = function(body) {\n this._bodyInit = body\n if (typeof body === 'string') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (!body) {\n this._bodyText = ''\n } else if (support.arrayBuffer && ArrayBuffer.prototype.isPrototypeOf(body)) {\n // Only support ArrayBuffers for POST method.\n // Receiving ArrayBuffers happens via Blobs, instead.\n } else {\n throw new Error('unsupported BodyInit type')\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n\n this.arrayBuffer = function() {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n } else {\n this.text = function() {\n var rejected = consumed(this)\n return rejected ? rejected : Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return (methods.indexOf(upcased) > -1) ? upcased : method\n }\n\n function Request(input, options) {\n options = options || {}\n var body = options.body\n if (Request.prototype.isPrototypeOf(input)) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n if (!body) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = input\n }\n\n this.credentials = options.credentials || this.credentials || 'omit'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || 'GET')\n this.mode = options.mode || this.mode || null\n this.referrer = null\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body)\n }\n\n Request.prototype.clone = function() {\n return new Request(this)\n }\n\n function decode(body) {\n var form = new FormData()\n body.trim().split('&').forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=')\n var name = split.shift().replace(/\\+/g, ' ')\n var value = split.join('=').replace(/\\+/g, ' ')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n }\n\n function headers(xhr) {\n var head = new Headers()\n var pairs = xhr.getAllResponseHeaders().trim().split('\\n')\n pairs.forEach(function(header) {\n var split = header.trim().split(':')\n var key = split.shift().trim()\n var value = split.join(':').trim()\n head.append(key, value)\n })\n return head\n }\n\n Body.call(Request.prototype)\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {}\n }\n\n this._initBody(bodyInit)\n this.type = 'default'\n this.status = options.status\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = options.statusText\n this.headers = options.headers instanceof Headers ? options.headers : new Headers(options.headers)\n this.url = options.url || ''\n }\n\n Body.call(Response.prototype)\n\n Response.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n }\n\n Response.error = function() {\n var response = new Response(null, {status: 0, statusText: ''})\n response.type = 'error'\n return response\n }\n\n var redirectStatuses = [301, 302, 303, 307, 308]\n\n Response.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n }\n\n self.Headers = Headers;\n self.Request = Request;\n self.Response = Response;\n\n self.fetch = function(input, init) {\n return new Promise(function(resolve, reject) {\n var request\n if (Request.prototype.isPrototypeOf(input) && !init) {\n request = input\n } else {\n request = new Request(input, init)\n }\n\n var xhr = new XMLHttpRequest()\n\n function responseURL() {\n if ('responseURL' in xhr) {\n return xhr.responseURL\n }\n\n // Avoid security warnings on getResponseHeader when not allowed by CORS\n if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {\n return xhr.getResponseHeader('X-Request-URL')\n }\n\n return;\n }\n\n xhr.onload = function() {\n var status = (xhr.status === 1223) ? 204 : xhr.status\n if (status < 100 || status > 599) {\n reject(new TypeError('Network request failed'))\n return\n }\n var options = {\n status: status,\n statusText: xhr.statusText,\n headers: headers(xhr),\n url: responseURL()\n }\n var body = 'response' in xhr ? xhr.response : xhr.responseText;\n resolve(new Response(body, options))\n }\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.open(request.method, request.url, true)\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob'\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n })\n }\n\n self.fetch.polyfill = true\n}\n\nmodule.exports = self.fetch;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Libraries/Fetch/Fetch.web.js\n **/","/**\n * The examples provided by Facebook are for non-commercial testing and\n * evaluation purposes only.\n *\n * Facebook reserves all rights not expressly granted.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL\n * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\n * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * @flow\n */\n'use strict';\n\nvar React = require('react-native');\nvar createClass = require('create-react-class');\nvar {\n Image,\n PixelRatio,\n Platform,\n StyleSheet,\n Text,\n TouchableHighlight,\n TouchableNativeFeedback,\n View\n} = React;\n\nvar getStyleFromScore = require('./getStyleFromScore');\nvar getImageSource = require('./getImageSource');\nvar getTextFromScore = require('./getTextFromScore');\n\nvar MovieCell = createClass({\n render: function() {\n var criticsScore = this.props.movie.ratings.critics_score;\n var TouchableElement = TouchableHighlight;\n if (Platform.OS === 'android') {\n TouchableElement = TouchableNativeFeedback;\n }\n return (\n \n \n \n {/* $FlowIssue #7363964 - There's a bug in Flow where you cannot\n * omit a property or set it to undefined if it's inside a shape,\n * even if it isn't required */}\n \n \n \n {this.props.movie.title}\n \n \n {this.props.movie.year}\n {' '}•{' '}\n \n Critics {getTextFromScore(criticsScore)}\n \n \n \n \n \n \n );\n }\n});\n\nvar styles = StyleSheet.create({\n textContainer: {\n flex: 1,\n },\n movieTitle: {\n flex: 1,\n fontSize: 16,\n fontWeight: '500',\n marginBottom: 2,\n },\n movieYear: {\n color: '#999999',\n fontSize: 12,\n },\n row: {\n alignItems: 'center',\n backgroundColor: 'white',\n flexDirection: 'row',\n padding: 5,\n },\n cellImage: {\n backgroundColor: '#dddddd',\n height: 93,\n marginRight: 10,\n width: 60,\n },\n cellBorder: {\n backgroundColor: 'rgba(0, 0, 0, 0.1)',\n // Trick to get the thinest line the device can display\n height: 1 / PixelRatio.get(),\n marginLeft: 4,\n },\n});\n\nmodule.exports = MovieCell;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Examples/Movies/MovieCell.js\n **/","/**\n * The examples provided by Facebook are for non-commercial testing and\n * evaluation purposes only.\n *\n * Facebook reserves all rights not expressly granted.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL\n * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\n * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * @providesModule SearchBar\n * @flow\n */\n'use strict';\n\nvar React = require('react-native');\nvar createClass = require('create-react-class');\nvar {\n ActivityIndicatorIOS,\n TextInput,\n StyleSheet,\n View,\n} = React;\n\nvar SearchBar = createClass({\n render: function() {\n return (\n \n \n \n \n );\n }\n});\n\nvar styles = StyleSheet.create({\n searchBar: {\n marginTop: 0,\n padding: 3,\n paddingLeft: 8,\n flexDirection: 'row',\n alignItems: 'center',\n },\n searchBarInput: {\n fontSize: 15,\n flex: 1,\n height: 30,\n },\n spinner: {\n width: 30,\n },\n});\n\nmodule.exports = SearchBar;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Examples/Movies/SearchBar.web.js\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/pages/react-web.js b/pages/react-web.js index 5c80cb8..893791f 100644 --- a/pages/react-web.js +++ b/pages/react-web.js @@ -1,31 +1,24 @@ -!function(t){function e(n){if(r[n])return r[n].exports;var o=r[n]={exports:{},id:n,loaded:!1};return t[n].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var n=window.webpackJsonp;window.webpackJsonp=function(i,a){for(var s,u,l=0,c=[];l1){for(var y=Array(v),_=0;_1){for(var g=Array(m),b=0;b>"),P={array:a("array"),bool:a("boolean"),func:a("function"),number:a("number"),object:a("object"),string:a("string"),symbol:a("symbol"),any:s(),arrayOf:u,element:l(),instanceOf:c,node:d(),objectOf:f,oneOf:p,oneOfType:h,shape:v};o.prototype=Error.prototype,t.exports=P},function(t,e){"use strict";var n="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";t.exports=n},function(t,e){"use strict";t.exports="15.3.2"},function(t,e,n){"use strict";function r(t){return i.isValidElement(t)?void 0:o("143"),t}var o=n(7),i=n(9);n(8);t.exports=r},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}var o=n(32),i=r(o),a=n(36),s=r(a),u=n(37),l=r(u),c=n(38),p=r(c),f=n(39),h=r(f),d=!1,v="react-root",y="react-view",_={hairlineWidth:1,create:function(t){return t},extendCreateElement:function(t,e){(0,p["default"])(t,function(t){return d||(d=!0,(0,l["default"])({reference:s["default"].getWidth(),rootClassName:v,viewClassName:y})),(0,h["default"])(t,i["default"])},e)},setReferenceWidth:s["default"].setWidth,rootClassName:v,viewClassName:y,flatten:h["default"]};t.exports=_},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}function o(t,e,n){if("2009"===p){var r=S[e]||e,o=b[t]||t;if("WebkitBoxOrient"===o){r=e.indexOf("row")!=-1?"horizontal":"vertical";var i="";i=e.indexOf("reverse")!=-1?"reverse":"normal",n.WebkitBoxDirection=i}return n[o]=r}return"finalVendor"===p?n[(0,h["default"])(t)]=e:n[t]=e}function i(t,e){var n=t.flex||0,r=t.flexShrink||1,o=t.flexBasis||"auto",i=void 0;i="auto"===n?C:"initial"===n?P:isNaN(n)?n:n+" "+r+" "+o,e.flex=i}function a(t,e,n){var r="padding",o="margin",i="Horizontal",a="Vertical",s=0==t.indexOf(o)?o:r,u=t.indexOf(a)!==-1?a:i;u==i?n[s+"Left"]=n[s+"Right"]=e:u==a&&(n[s+"Top"]=n[s+"Bottom"]=e)}function s(t){return""!==t&&null!==t&&void 0!==t}function u(t,e){return"number"==typeof t&&(!v["default"].isUnitlessNumber[e]&&t>0&&t<1&&(t=1),_[e]&&"number"==typeof t&&(t+="px")),y[e]&&"string"==typeof t&&(t=t.replace(/\d*\.?\d+(rem|em|in|cm|mm|pt|pc|px|vh|vw|vmin|vmax|%)*/g,function(t,e){return e?t:t+"px"})),t}function l(t,e){t.borderStyle||e.borderStyle||(e.borderStyle="solid"),t.borderWidth||e.borderWidth||(e.borderWidth=0),t.borderColor||e.borderColor||(e.borderColor="black")}function c(t){var e={};for(var n in t){var r=t[n];s(r)&&(g[n]&&l(t,e),m[n]?a(n,r,e):b[n]?(o(n,r,e),"flex"===n&&R&&i(t,e)):(r=u(r,n),n=(0,h["default"])(n),e[n]=r))}return e}var p,f=n(33),h=r(f),d=n(35),v=r(d),y={margin:!0,padding:!0,borderWidth:!0,borderRadius:!0},_={lineHeight:!0},m={paddingHorizontal:!0,paddingVertical:!0,marginHorizontal:!0,marginVertical:!0},g={borderColor:!0,borderWidth:!0,borderTopColor:!0,borderRightColor:!0,borderBottomColor:!0,borderLeftColor:!0,borderTopWidth:!0,borderRightWidth:!0,borderBottomWidth:!0,borderLeftWidth:!0},b={flex:"WebkitBoxFlex",order:"WebkitBoxOrdinalGroup",flexDirection:"WebkitBoxOrient",alignItems:"WebkitBoxAlign",justifyContent:"WebkitBoxPack",flexWrap:null,alignSelf:null},S={"flex-end":"end","flex-start":"start","space-between":"justify","space-around":"distribute"},w=document.createElement("div").style;p="alignSelf"in w?"final":"webkitAlignSelf"in w?"finalVendor":"2009";var E=/UCBrowser/i.test(navigator.userAgent),T=/UCBS/i.test(navigator.userAgent);E&&!T&&(p="2009");var R=/Trident/i.test(navigator.userAgent),C="1 1 auto",P="0 1 auto";t.exports=c},function(t,e,n){"use strict";var r,o=n(34),i=["Moz","Webkit","O","ms"];t.exports=function(t,e){var n;if(t in o)return t;var a=t.charAt(0).toUpperCase()+t.substr(1);if(r){if(n=r+a,n in o)return n}else for(var s=0;s ."+r+" {\n height: 100%;\n }\n ."+n+" ."+r+" {\n position: relative;\n "+s+"\n }\n "}function r(t){var e=document.querySelector('meta[name="viewport"]');return e?(window.addEventListener("resize",function(){n(t)},!1),void n(t)):console.warn("Viewport meta not set")}t.exports=r},function(t,e){"use strict";function n(t,e){var n=t.createElement;t.createElement=function(t,r){var o=arguments;if(r&&r.style&&(Array.isArray(r.style)||"object"==typeof r.style)&&t&&t.isReactNativeComponent){var i=e(r.style),a={};for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&(a[s]=r[s]);a.style=i,r=a}return n.apply(this,[t,r].concat(Array.prototype.slice.call(o,2)))}}t.exports=n},function(t,e){"use strict";function n(t,e){if(t){if(Array.isArray(t)){for(var r={},o=0;o8&&E<=11),C=32,P=String.fromCharCode(C),O=h.topLevelTypes,x={beforeInput:{phasedRegistrationNames:{bubbled:g({onBeforeInput:null}),captured:g({onBeforeInputCapture:null})},dependencies:[O.topCompositionEnd,O.topKeyPress,O.topTextInput,O.topPaste]},compositionEnd:{phasedRegistrationNames:{bubbled:g({onCompositionEnd:null}),captured:g({onCompositionEndCapture:null})},dependencies:[O.topBlur,O.topCompositionEnd,O.topKeyDown,O.topKeyPress,O.topKeyUp,O.topMouseDown]},compositionStart:{phasedRegistrationNames:{bubbled:g({onCompositionStart:null}),captured:g({onCompositionStartCapture:null})},dependencies:[O.topBlur,O.topCompositionStart,O.topKeyDown,O.topKeyPress,O.topKeyUp,O.topMouseDown]},compositionUpdate:{phasedRegistrationNames:{bubbled:g({onCompositionUpdate:null}),captured:g({onCompositionUpdateCapture:null})},dependencies:[O.topBlur,O.topCompositionUpdate,O.topKeyDown,O.topKeyPress,O.topKeyUp,O.topMouseDown]}},k=!1,I=null,M={eventTypes:x,extractEvents:function(t,e,n,r){return[l(t,e,n,r),f(t,e,n,r)]}};t.exports=M},function(t,e,n){"use strict";var r=n(23),o=r({bubbled:null,captured:null}),i=r({topAbort:null,topAnimationEnd:null,topAnimationIteration:null,topAnimationStart:null,topBlur:null,topCanPlay:null,topCanPlayThrough:null,topChange:null,topClick:null,topCompositionEnd:null,topCompositionStart:null,topCompositionUpdate:null,topContextMenu:null,topCopy:null,topCut:null,topDoubleClick:null,topDrag:null,topDragEnd:null,topDragEnter:null,topDragExit:null,topDragLeave:null,topDragOver:null,topDragStart:null,topDrop:null,topDurationChange:null,topEmptied:null,topEncrypted:null,topEnded:null,topError:null,topFocus:null,topInput:null,topInvalid:null,topKeyDown:null,topKeyPress:null,topKeyUp:null,topLoad:null,topLoadedData:null,topLoadedMetadata:null,topLoadStart:null,topMouseDown:null,topMouseMove:null,topMouseOut:null,topMouseOver:null,topMouseUp:null,topPaste:null,topPause:null,topPlay:null,topPlaying:null,topProgress:null,topRateChange:null,topReset:null,topScroll:null,topSeeked:null,topSeeking:null,topSelectionChange:null,topStalled:null,topSubmit:null,topSuspend:null,topTextInput:null,topTimeUpdate:null,topTouchCancel:null,topTouchEnd:null,topTouchMove:null,topTouchStart:null,topTransitionEnd:null,topVolumeChange:null,topWaiting:null,topWheel:null}),a={topLevelTypes:i,PropagationPhases:o};t.exports=a},function(t,e,n){"use strict";function r(t,e,n){var r=e.dispatchConfig.phasedRegistrationNames[n];return g(t,r)}function o(t,e,n){var o=e?m.bubbled:m.captured,i=r(t,n,o);i&&(n._dispatchListeners=y(n._dispatchListeners,i),n._dispatchInstances=y(n._dispatchInstances,t))}function i(t){t&&t.dispatchConfig.phasedRegistrationNames&&v.traverseTwoPhase(t._targetInst,o,t)}function a(t){if(t&&t.dispatchConfig.phasedRegistrationNames){var e=t._targetInst,n=e?v.getParentInstance(e):null;v.traverseTwoPhase(n,o,t)}}function s(t,e,n){if(n&&n.dispatchConfig.registrationName){var r=n.dispatchConfig.registrationName,o=g(t,r);o&&(n._dispatchListeners=y(n._dispatchListeners,o),n._dispatchInstances=y(n._dispatchInstances,t))}}function u(t){t&&t.dispatchConfig.registrationName&&s(t._targetInst,null,t)}function l(t){_(t,i)}function c(t){_(t,a)}function p(t,e,n,r){v.traverseEnterLeave(n,r,s,t,e)}function f(t){_(t,u)}var h=n(50),d=n(52),v=n(54),y=n(56),_=n(57),m=(n(11),h.PropagationPhases),g=d.getListener,b={accumulateTwoPhaseDispatches:l,accumulateTwoPhaseDispatchesSkipTarget:c,accumulateDirectDispatches:f,accumulateEnterLeaveDispatches:p};t.exports=b},function(t,e,n){"use strict";var r=n(7),o=n(53),i=n(54),a=n(55),s=n(56),u=n(57),l=(n(8),{}),c=null,p=function(t,e){t&&(i.executeDispatchesInOrder(t,e),t.isPersistent()||t.constructor.release(t))},f=function(t){return p(t,!0)},h=function(t){return p(t,!1)},d=function(t){return"."+t._rootNodeID},v={injection:{injectEventPluginOrder:o.injectEventPluginOrder,injectEventPluginsByName:o.injectEventPluginsByName},putListener:function(t,e,n){"function"!=typeof n?r("94",e,typeof n):void 0;var i=d(t),a=l[e]||(l[e]={});a[i]=n;var s=o.registrationNameModules[e];s&&s.didPutListener&&s.didPutListener(t,e,n)},getListener:function(t,e){var n=l[e],r=d(t);return n&&n[r]},deleteListener:function(t,e){var n=o.registrationNameModules[e];n&&n.willDeleteListener&&n.willDeleteListener(t,e);var r=l[e];if(r){var i=d(t);delete r[i]}},deleteAllListeners:function(t){var e=d(t);for(var n in l)if(l.hasOwnProperty(n)&&l[n][e]){var r=o.registrationNameModules[n];r&&r.willDeleteListener&&r.willDeleteListener(t,n),delete l[n][e]}},extractEvents:function(t,e,n,r){for(var i,a=o.plugins,u=0;u-1?void 0:a("96",t),!l.plugins[n]){e.extractEvents?void 0:a("97",t),l.plugins[n]=e;var r=e.eventTypes;for(var i in r)o(r[i],e,i)?void 0:a("98",i,t)}}}function o(t,e,n){l.eventNameDispatchConfigs.hasOwnProperty(n)?a("99",n):void 0,l.eventNameDispatchConfigs[n]=t;var r=t.phasedRegistrationNames;if(r){for(var o in r)if(r.hasOwnProperty(o)){var s=r[o];i(s,e,n)}return!0}return!!t.registrationName&&(i(t.registrationName,e,n),!0)}function i(t,e,n){l.registrationNameModules[t]?a("100",t):void 0,l.registrationNameModules[t]=e,l.registrationNameDependencies[t]=e.eventTypes[n].dependencies}var a=n(7),s=(n(8),null),u={},l={plugins:[],eventNameDispatchConfigs:{},registrationNameModules:{},registrationNameDependencies:{},possibleRegistrationNames:null,injectEventPluginOrder:function(t){s?a("101"):void 0,s=Array.prototype.slice.call(t),r()},injectEventPluginsByName:function(t){var e=!1;for(var n in t)if(t.hasOwnProperty(n)){var o=t[n];u.hasOwnProperty(n)&&u[n]===o||(u[n]?a("102",n):void 0,u[n]=o,e=!0)}e&&r()},getPluginModuleForEvent:function(t){var e=t.dispatchConfig;if(e.registrationName)return l.registrationNameModules[e.registrationName]||null;for(var n in e.phasedRegistrationNames)if(e.phasedRegistrationNames.hasOwnProperty(n)){var r=l.registrationNameModules[e.phasedRegistrationNames[n]];if(r)return r}return null},_resetEventPlugins:function(){s=null;for(var t in u)u.hasOwnProperty(t)&&delete u[t];l.plugins.length=0;var e=l.eventNameDispatchConfigs;for(var n in e)e.hasOwnProperty(n)&&delete e[n];var r=l.registrationNameModules;for(var o in r)r.hasOwnProperty(o)&&delete r[o]}};t.exports=l},function(t,e,n){"use strict";function r(t){return t===m.topMouseUp||t===m.topTouchEnd||t===m.topTouchCancel}function o(t){return t===m.topMouseMove||t===m.topTouchMove}function i(t){return t===m.topMouseDown||t===m.topTouchStart}function a(t,e,n,r){var o=t.type||"unknown-event";t.currentTarget=g.getNodeFromInstance(r),e?y.invokeGuardedCallbackWithCatch(o,n,t):y.invokeGuardedCallback(o,n,t),t.currentTarget=null}function s(t,e){var n=t._dispatchListeners,r=t._dispatchInstances;if(Array.isArray(n))for(var o=0;o1?1-e:void 0;return this._fallbackText=o.slice(t,s),this._fallbackText}}),i.addPoolingTo(r),t.exports=r},function(t,e,n){"use strict";function r(){return!i&&o.canUseDOM&&(i="textContent"in document.documentElement?"textContent":"innerText"),i}var o=n(58),i=null;t.exports=r},function(t,e,n){"use strict";function r(t,e,n,r){return o.call(this,t,e,n,r)}var o=n(62),i={data:null};o.augmentClass(r,i),t.exports=r},function(t,e,n){"use strict";function r(t,e,n,r){this.dispatchConfig=t,this._targetInst=e,this.nativeEvent=n;var o=this.constructor.Interface;for(var i in o)if(o.hasOwnProperty(i)){var s=o[i];s?this[i]=s(n):"target"===i?this.target=r:this[i]=n[i]}var u=null!=n.defaultPrevented?n.defaultPrevented:n.returnValue===!1;return u?this.isDefaultPrevented=a.thatReturnsTrue:this.isDefaultPrevented=a.thatReturnsFalse,this.isPropagationStopped=a.thatReturnsFalse,this}var o=n(4),i=n(6),a=n(12),s=(n(11),"function"==typeof Proxy,["dispatchConfig","_targetInst","nativeEvent","isDefaultPrevented","isPropagationStopped","_dispatchListeners","_dispatchInstances"]),u={type:null,target:null,currentTarget:a.thatReturnsNull,eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(t){return t.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null};o(r.prototype,{preventDefault:function(){this.defaultPrevented=!0;var t=this.nativeEvent;t&&(t.preventDefault?t.preventDefault():"unknown"!=typeof t.returnValue&&(t.returnValue=!1),this.isDefaultPrevented=a.thatReturnsTrue)},stopPropagation:function(){var t=this.nativeEvent;t&&(t.stopPropagation?t.stopPropagation():"unknown"!=typeof t.cancelBubble&&(t.cancelBubble=!0),this.isPropagationStopped=a.thatReturnsTrue)},persist:function(){this.isPersistent=a.thatReturnsTrue},isPersistent:a.thatReturnsFalse,destructor:function(){var t=this.constructor.Interface;for(var e in t)this[e]=null;for(var n=0;n8));var j=!1;S.canUseDOM&&(j=C("input")&&(!document.documentMode||document.documentMode>11));var L={get:function(){return D.get.call(this)},set:function(t){A=""+t,D.set.call(this,t)}},V={eventTypes:k,extractEvents:function(t,e,n,o){var i,a,s=e?w.getNodeFromInstance(e):window;if(r(s)?N?i=u:a=l:P(s)?j?i=h:(i=v,a=d):y(s)&&(i=_),i){var c=i(t,e);if(c){var p=T.getPooled(k.change,c,n,o);return p.type="change",b.accumulateTwoPhaseDispatches(p),p}}a&&a(t,s,e)}};t.exports=V},function(t,e,n){"use strict";function r(){P.ReactReconcileTransaction&&S?void 0:c("123")}function o(){this.reinitializeTransaction(),this.dirtyComponentsLength=null,this.callbackQueue=f.getPooled(),this.reconcileTransaction=P.ReactReconcileTransaction.getPooled(!0)}function i(t,e,n,o,i,a){r(),S.batchedUpdates(t,e,n,o,i,a)}function a(t,e){return t._mountOrder-e._mountOrder}function s(t){var e=t.dirtyComponentsLength;e!==_.length?c("124",e,_.length):void 0,_.sort(a),m++;for(var n=0;n]/,u=n(88),l=u(function(t,e){if(t.namespaceURI!==i.svg||"innerHTML"in t)t.innerHTML=e;else{r=r||document.createElement("div"),r.innerHTML=""+e+"";for(var n=r.firstChild;n.firstChild;)t.appendChild(n.firstChild)}});if(o.canUseDOM){var c=document.createElement("div");c.innerHTML=" ",""===c.innerHTML&&(l=function(t,e){if(t.parentNode&&t.parentNode.replaceChild(t,t),a.test(e)||"<"===e[0]&&s.test(e)){t.innerHTML=String.fromCharCode(65279)+e;var n=t.firstChild;1===n.data.length?t.removeChild(n):n.deleteData(0,1)}else t.innerHTML=e}),c=null}t.exports=l},function(t,e){"use strict";var n=function(t){return"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,n,r,o){MSApp.execUnsafeLocalFunction(function(){return t(e,n,r,o)})}:t};t.exports=n},function(t,e,n){"use strict";var r=n(58),o=n(90),i=n(87),a=function(t,e){if(e){var n=t.firstChild;if(n&&n===t.lastChild&&3===n.nodeType)return void(n.nodeValue=e)}t.textContent=e};r.canUseDOM&&("textContent"in document.documentElement||(a=function(t,e){i(t,o(e))})),t.exports=a},function(t,e){"use strict";function n(t){var e=""+t,n=o.exec(e);if(!n)return e;var r,i="",a=0,s=0;for(a=n.index;a]/;t.exports=r},function(t,e,n){"use strict";var r=n(7),o=n(85),i=n(58),a=n(92),s=n(12),u=(n(8),{dangerouslyReplaceNodeWithMarkup:function(t,e){if(i.canUseDOM?void 0:r("56"),e?void 0:r("57"),"HTML"===t.nodeName?r("58"):void 0,"string"==typeof e){var n=a(e,s)[0];t.parentNode.replaceChild(n,t)}else o.replaceChildWithTree(t,e)}});t.exports=u},function(t,e,n){"use strict";function r(t){var e=t.match(c);return e&&e[1].toLowerCase()}function o(t,e){var n=l;l?void 0:u(!1);var o=r(t),i=o&&s(o);if(i){n.innerHTML=i[1]+t+i[2];for(var c=i[0];c--;)n=n.lastChild}else n.innerHTML=t;var p=n.getElementsByTagName("script");p.length&&(e?void 0:u(!1),a(p).forEach(e));for(var f=Array.from(n.childNodes);n.lastChild;)n.removeChild(n.lastChild);return f}var i=n(58),a=n(93),s=n(94),u=n(8),l=i.canUseDOM?document.createElement("div"):null,c=/^\s*<(\w+)/;t.exports=o},function(t,e,n){"use strict";function r(t){var e=t.length;if(Array.isArray(t)||"object"!=typeof t&&"function"!=typeof t?a(!1):void 0,"number"!=typeof e?a(!1):void 0,0===e||e-1 in t?void 0:a(!1),"function"==typeof t.callee?a(!1):void 0,t.hasOwnProperty)try{return Array.prototype.slice.call(t)}catch(n){}for(var r=Array(e),o=0;o":a.innerHTML="<"+t+">",s[t]=!a.firstChild),s[t]?f[t]:null}var o=n(58),i=n(8),a=o.canUseDOM?document.createElement("div"):null,s={},u=[1,'"],l=[1,"","
"],c=[3,"","
"],p=[1,'',""],f={"*":[1,"?
","
"],area:[1,"",""],col:[2,"","
"],legend:[1,"
","
"],param:[1,"",""],tr:[2,"","
"],optgroup:u,option:u,caption:l,colgroup:l,tbody:l,tfoot:l,thead:l,td:c,th:c},h=["circle","clipPath","defs","ellipse","g","image","line","linearGradient","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","text","tspan"];h.forEach(function(t){f[t]=p,s[t]=!0}),t.exports=r},function(t,e,n){"use strict";var r=n(23),o=r({INSERT_MARKUP:null,MOVE_EXISTING:null,REMOVE_NODE:null,SET_MARKUP:null,TEXT_CONTENT:null});t.exports=o},function(t,e,n){"use strict";var r=n(84),o=n(45),i={dangerouslyProcessChildrenUpdates:function(t,e){var n=o.getNodeFromInstance(t);r.processUpdates(n,e)}};t.exports=i},function(t,e,n){"use strict";function r(t){if(t){var e=t._currentElement._owner||null;if(e){var n=e.getName();if(n)return" This DOM node was rendered by `"+n+"`."}}return""}function o(t,e){e&&(J[t._tag]&&(null!=e.children||null!=e.dangerouslySetInnerHTML?v("137",t._tag,t._currentElement._owner?" Check the render method of "+t._currentElement._owner.getName()+".":""):void 0),null!=e.dangerouslySetInnerHTML&&(null!=e.children?v("60"):void 0,"object"==typeof e.dangerouslySetInnerHTML&&G in e.dangerouslySetInnerHTML?void 0:v("61")),null!=e.style&&"object"!=typeof e.style?v("62",r(t)):void 0)}function i(t,e,n,r){if(!(r instanceof N)){var o=t._hostContainerInfo,i=o._node&&o._node.nodeType===K,s=i?o._node:o._ownerDocument;U(e,s),r.getReactMountReady().enqueue(a,{inst:t,registrationName:e,listener:n})}}function a(){var t=this;T.putListener(t.inst,t.registrationName,t.listener)}function s(){var t=this;k.postMountWrapper(t)}function u(){var t=this;A.postMountWrapper(t)}function l(){var t=this;I.postMountWrapper(t)}function c(){var t=this;t._rootNodeID?void 0:v("63");var e=H(t);switch(e?void 0:v("64"),t._tag){case"iframe":case"object":t._wrapperState.listeners=[C.trapBubbledEvent(E.topLevelTypes.topLoad,"load",e)];break;case"video":case"audio":t._wrapperState.listeners=[];for(var n in Y)Y.hasOwnProperty(n)&&t._wrapperState.listeners.push(C.trapBubbledEvent(E.topLevelTypes[n],Y[n],e));break;case"source":t._wrapperState.listeners=[C.trapBubbledEvent(E.topLevelTypes.topError,"error",e)];break;case"img":t._wrapperState.listeners=[C.trapBubbledEvent(E.topLevelTypes.topError,"error",e),C.trapBubbledEvent(E.topLevelTypes.topLoad,"load",e)];break;case"form":t._wrapperState.listeners=[C.trapBubbledEvent(E.topLevelTypes.topReset,"reset",e),C.trapBubbledEvent(E.topLevelTypes.topSubmit,"submit",e)];break;case"input":case"select":case"textarea":t._wrapperState.listeners=[C.trapBubbledEvent(E.topLevelTypes.topInvalid,"invalid",e)]}}function p(){M.postUpdateWrapper(this)}function f(t){tt.call(Z,t)||($.test(t)?void 0:v("65",t),Z[t]=!0)}function h(t,e){return t.indexOf("-")>=0||null!=e.is}function d(t){var e=t.type;f(e),this._currentElement=t,this._tag=e.toLowerCase(),this._namespaceURI=null,this._renderedChildren=null,this._previousStyle=null,this._previousStyleCopy=null,this._hostNode=null,this._hostParent=null,this._rootNodeID=0,this._domID=0,this._hostContainerInfo=null,this._wrapperState=null,this._topLevelWrapper=null,this._flags=0}var v=n(7),y=n(4),_=n(98),m=n(100),g=n(85),b=n(86),S=n(46),w=n(108),E=n(50),T=n(52),R=n(53),C=n(110),P=n(113),O=n(47),x=n(45),k=n(115),I=n(117),M=n(118),A=n(119),D=(n(71),n(120)),N=n(135),j=(n(12),n(90)),L=(n(8),n(74),n(25)),V=(n(130),n(138),n(11),O),F=T.deleteListener,H=x.getNodeFromInstance,U=C.listenTo,B=R.registrationNameModules,z={string:!0,number:!0},W=L({style:null}),G=L({__html:null}),q={children:null,dangerouslySetInnerHTML:null,suppressContentEditableWarning:null},K=11,Y={topAbort:"abort",topCanPlay:"canplay",topCanPlayThrough:"canplaythrough",topDurationChange:"durationchange",topEmptied:"emptied",topEncrypted:"encrypted",topEnded:"ended",topError:"error",topLoadedData:"loadeddata",topLoadedMetadata:"loadedmetadata",topLoadStart:"loadstart",topPause:"pause",topPlay:"play",topPlaying:"playing",topProgress:"progress",topRateChange:"ratechange",topSeeked:"seeked",topSeeking:"seeking",topStalled:"stalled",topSuspend:"suspend",topTimeUpdate:"timeupdate",topVolumeChange:"volumechange",topWaiting:"waiting"},X={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},Q={listing:!0,pre:!0,textarea:!0},J=y({menuitem:!0},X),$=/^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,Z={},tt={}.hasOwnProperty,et=1;d.displayName="ReactDOMComponent",d.Mixin={mountComponent:function(t,e,n,r){this._rootNodeID=et++,this._domID=n._idCounter++,this._hostParent=e,this._hostContainerInfo=n;var i=this._currentElement.props;switch(this._tag){case"audio":case"form":case"iframe":case"img":case"link":case"object":case"source":case"video":this._wrapperState={listeners:null},t.getReactMountReady().enqueue(c,this);break;case"button":i=P.getHostProps(this,i,e);break;case"input":k.mountWrapper(this,i,e),i=k.getHostProps(this,i),t.getReactMountReady().enqueue(c,this);break;case"option":I.mountWrapper(this,i,e),i=I.getHostProps(this,i);break;case"select":M.mountWrapper(this,i,e),i=M.getHostProps(this,i),t.getReactMountReady().enqueue(c,this);break;case"textarea":A.mountWrapper(this,i,e),i=A.getHostProps(this,i),t.getReactMountReady().enqueue(c,this)}o(this,i);var a,p;null!=e?(a=e._namespaceURI,p=e._tag):n._tag&&(a=n._namespaceURI,p=n._tag),(null==a||a===b.svg&&"foreignobject"===p)&&(a=b.html),a===b.html&&("svg"===this._tag?a=b.svg:"math"===this._tag&&(a=b.mathml)),this._namespaceURI=a;var f;if(t.useCreateElement){var h,d=n._ownerDocument;if(a===b.html)if("script"===this._tag){var v=d.createElement("div"),y=this._currentElement.type;v.innerHTML="<"+y+">",h=v.removeChild(v.firstChild)}else h=i.is?d.createElement(this._currentElement.type,i.is):d.createElement(this._currentElement.type);else h=d.createElementNS(a,this._currentElement.type);x.precacheNode(this,h),this._flags|=V.hasCachedChildNodes,this._hostParent||w.setAttributeForRoot(h),this._updateDOMProperties(null,i,t);var m=g(h);this._createInitialChildren(t,i,r,m),f=m}else{var S=this._createOpenTagMarkupAndPutListeners(t,i),E=this._createContentMarkup(t,i,r);f=!E&&X[this._tag]?S+"/>":S+">"+E+""}switch(this._tag){case"input":t.getReactMountReady().enqueue(s,this),i.autoFocus&&t.getReactMountReady().enqueue(_.focusDOMComponent,this);break;case"textarea":t.getReactMountReady().enqueue(u,this),i.autoFocus&&t.getReactMountReady().enqueue(_.focusDOMComponent,this);break;case"select":i.autoFocus&&t.getReactMountReady().enqueue(_.focusDOMComponent,this);break;case"button":i.autoFocus&&t.getReactMountReady().enqueue(_.focusDOMComponent,this);break;case"option":t.getReactMountReady().enqueue(l,this)}return f},_createOpenTagMarkupAndPutListeners:function(t,e){var n="<"+this._currentElement.type;for(var r in e)if(e.hasOwnProperty(r)){var o=e[r];if(null!=o)if(B.hasOwnProperty(r))o&&i(this,r,o,t);else{r===W&&(o&&(o=this._previousStyleCopy=y({},e.style)),o=m.createMarkupForStyles(o,this));var a=null;null!=this._tag&&h(this._tag,e)?q.hasOwnProperty(r)||(a=w.createMarkupForCustomAttribute(r,o)):a=w.createMarkupForProperty(r,o),a&&(n+=" "+a)}}return t.renderToStaticMarkup?n:(this._hostParent||(n+=" "+w.createMarkupForRoot()),n+=" "+w.createMarkupForID(this._domID))},_createContentMarkup:function(t,e,n){var r="",o=e.dangerouslySetInnerHTML;if(null!=o)null!=o.__html&&(r=o.__html);else{var i=z[typeof e.children]?e.children:null,a=null!=i?null:e.children;if(null!=i)r=j(i);else if(null!=a){var s=this.mountChildren(a,t,n);r=s.join("")}}return Q[this._tag]&&"\n"===r.charAt(0)?"\n"+r:r},_createInitialChildren:function(t,e,n,r){var o=e.dangerouslySetInnerHTML;if(null!=o)null!=o.__html&&g.queueHTML(r,o.__html);else{var i=z[typeof e.children]?e.children:null,a=null!=i?null:e.children;if(null!=i)g.queueText(r,i);else if(null!=a)for(var s=this.mountChildren(a,t,n),u=0;u1)for(var n=1;n0&&r.length<20?n+" (keys: "+r.join(", ")+")":n}function i(t,e){var n=s.get(t);if(!n){return null}return n}var a=n(7),s=(n(10),n(122)),u=(n(71),n(65)),l=(n(8),n(11),{isMounted:function(t){var e=s.get(t);return!!e&&!!e._renderedComponent},enqueueCallback:function(t,e,n){l.validateCallback(e,n);var o=i(t);return o?(o._pendingCallbacks?o._pendingCallbacks.push(e):o._pendingCallbacks=[e],void r(o)):null},enqueueCallbackInternal:function(t,e){t._pendingCallbacks?t._pendingCallbacks.push(e):t._pendingCallbacks=[e],r(t)},enqueueForceUpdate:function(t){var e=i(t,"forceUpdate");e&&(e._pendingForceUpdate=!0,r(e))},enqueueReplaceState:function(t,e){var n=i(t,"replaceState");n&&(n._pendingStateQueue=[e],n._pendingReplaceState=!0,r(n))},enqueueSetState:function(t,e){var n=i(t,"setState");if(n){var o=n._pendingStateQueue||(n._pendingStateQueue=[]);o.push(e),r(n)}},enqueueElementInternal:function(t,e,n){t._pendingElement=e,t._context=n,r(t)},validateCallback:function(t,e){t&&"function"!=typeof t?a("122",e,o(t)):void 0}});t.exports=l},function(t,e,n){"use strict";var r=(n(4),n(12)),o=(n(11),r);t.exports=o},function(t,e,n){"use strict";var r=n(4),o=n(85),i=n(45),a=function(t){this._currentElement=null,this._hostNode=null,this._hostParent=null,this._hostContainerInfo=null,this._domID=0};r(a.prototype,{mountComponent:function(t,e,n,r){var a=n._idCounter++;this._domID=a,this._hostParent=e,this._hostContainerInfo=n;var s=" react-empty: "+this._domID+" ";if(t.useCreateElement){var u=n._ownerDocument,l=u.createComment(s);return i.precacheNode(this,l),o(l)}return t.renderToStaticMarkup?"":""},receiveComponent:function(){},getHostNode:function(){return i.getNodeFromInstance(this)},unmountComponent:function(){i.uncacheNode(this)}}),t.exports=a},function(t,e,n){"use strict";function r(t,e){"_hostNode"in t?void 0:u("33"),"_hostNode"in e?void 0:u("33");for(var n=0,r=t;r;r=r._hostParent)n++;for(var o=0,i=e;i;i=i._hostParent)o++;for(;n-o>0;)t=t._hostParent,n--;for(;o-n>0;)e=e._hostParent,o--;for(var a=n;a--;){if(t===e)return t;t=t._hostParent,e=e._hostParent}return null}function o(t,e){"_hostNode"in t?void 0:u("35"),"_hostNode"in e?void 0:u("35");for(;e;){if(e===t)return!0;e=e._hostParent}return!1}function i(t){return"_hostNode"in t?void 0:u("36"),t._hostParent}function a(t,e,n){for(var r=[];t;)r.push(t),t=t._hostParent;var o;for(o=r.length;o-- >0;)e(r[o],!1,n);for(o=0;o0;)n(u[l],!1,i)}var u=n(7);n(8);t.exports={isAncestor:o,getLowestCommonAncestor:r,getParentInstance:i,traverseTwoPhase:a,traverseEnterLeave:s}},function(t,e,n){"use strict";var r=n(7),o=n(4),i=n(84),a=n(85),s=n(45),u=n(90),l=(n(8),n(138),function(t){this._currentElement=t,this._stringText=""+t,this._hostNode=null,this._hostParent=null,this._domID=0,this._mountIndex=0,this._closingComment=null,this._commentNodes=null});o(l.prototype,{mountComponent:function(t,e,n,r){var o=n._idCounter++,i=" react-text: "+o+" ",l=" /react-text ";if(this._domID=o,this._hostParent=e,t.useCreateElement){var c=n._ownerDocument,p=c.createComment(i),f=c.createComment(l),h=a(c.createDocumentFragment());return a.queueChild(h,a(p)),this._stringText&&a.queueChild(h,a(c.createTextNode(this._stringText))),a.queueChild(h,a(f)),s.precacheNode(this,p),this._closingComment=f,h}var d=u(this._stringText);return t.renderToStaticMarkup?d:""+d+""},receiveComponent:function(t,e){if(t!==this._currentElement){this._currentElement=t;var n=""+t;if(n!==this._stringText){this._stringText=n;var r=this.getHostNode();i.replaceDelimitedText(r[0],r[1],n)}}},getHostNode:function(){var t=this._commentNodes;if(t)return t;if(!this._closingComment)for(var e=s.getNodeFromInstance(this),n=e.nextSibling;;){if(null==n?r("67",this._domID):void 0,8===n.nodeType&&" /react-text "===n.nodeValue){this._closingComment=n;break}n=n.nextSibling}return t=[this._hostNode,this._closingComment],this._commentNodes=t,t},unmountComponent:function(){this._closingComment=null,this._commentNodes=null,s.uncacheNode(this)}}),t.exports=l},function(t,e,n){"use strict";function r(){this.reinitializeTransaction()}var o=n(4),i=n(65),a=n(72),s=n(12),u={initialize:s,close:function(){f.isBatchingUpdates=!1}},l={initialize:s,close:i.flushBatchedUpdates.bind(i)},c=[l,u];o(r.prototype,a.Mixin,{getTransactionWrappers:function(){return c}});var p=new r,f={isBatchingUpdates:!1,batchedUpdates:function(t,e,n,r,o,i){var a=f.isBatchingUpdates;f.isBatchingUpdates=!0,a?t(e,n,r,o,i):p.perform(t,null,e,n,r,o,i)}};t.exports=f},function(t,e,n){"use strict";function r(t){for(;t._hostParent;)t=t._hostParent;var e=p.getNodeFromInstance(t),n=e.parentNode;return p.getClosestInstanceFromNode(n)}function o(t,e){this.topLevelType=t,this.nativeEvent=e,this.ancestors=[]}function i(t){var e=h(t.nativeEvent),n=p.getClosestInstanceFromNode(e),o=n;do t.ancestors.push(o),o=o&&r(o);while(o);for(var i=0;ie.end?(n=e.end,r=e.start):(n=e.start,r=e.end),o.moveToElementText(t),o.moveStart("character",n),o.setEndPoint("EndToStart",o),o.moveEnd("character",r-n),o.select()}function s(t,e){if(window.getSelection){var n=window.getSelection(),r=t[c()].length,o=Math.min(e.start,r),i=void 0===e.end?o:Math.min(e.end,r);if(!n.extend&&o>i){var a=i;i=o,o=a}var s=l(t,o),u=l(t,i);if(s&&u){var p=document.createRange();p.setStart(s.node,s.offset),n.removeAllRanges(),o>i?(n.addRange(p),n.extend(u.node,u.offset)):(p.setEnd(u.node,u.offset),n.addRange(p))}}}var u=n(58),l=n(150),c=n(60),p=u.canUseDOM&&"selection"in document&&!("getSelection"in window),f={getOffsets:p?o:i,setOffsets:p?a:s};t.exports=f},function(t,e){"use strict";function n(t){for(;t&&t.firstChild;)t=t.firstChild;return t}function r(t){for(;t;){if(t.nextSibling)return t.nextSibling;t=t.parentNode}}function o(t,e){for(var o=n(t),i=0,a=0;o;){if(3===o.nodeType){if(a=i+o.textContent.length,i<=e&&a>=e)return{node:o,offset:e-i};i=a}o=n(r(o))}}t.exports=o},function(t,e,n){"use strict";function r(t,e){return!(!t||!e)&&(t===e||!o(t)&&(o(e)?r(t,e.parentNode):"contains"in t?t.contains(e):!!t.compareDocumentPosition&&!!(16&t.compareDocumentPosition(e))))}var o=n(152);t.exports=r},function(t,e,n){"use strict";function r(t){return o(t)&&3==t.nodeType}var o=n(153);t.exports=r},function(t,e){"use strict";function n(t){return!(!t||!("function"==typeof Node?t instanceof Node:"object"==typeof t&&"number"==typeof t.nodeType&&"string"==typeof t.nodeName))}t.exports=n},function(t,e){"use strict";function n(){if("undefined"==typeof document)return null;try{return document.activeElement||document.body}catch(t){return document.body}}t.exports=n},function(t,e){"use strict";var n={xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace"},r={accentHeight:"accent-height",accumulate:0,additive:0,alignmentBaseline:"alignment-baseline",allowReorder:"allowReorder",alphabetic:0,amplitude:0,arabicForm:"arabic-form",ascent:0,attributeName:"attributeName",attributeType:"attributeType",autoReverse:"autoReverse",azimuth:0,baseFrequency:"baseFrequency",baseProfile:"baseProfile",baselineShift:"baseline-shift",bbox:0,begin:0,bias:0,by:0,calcMode:"calcMode",capHeight:"cap-height",clip:0,clipPath:"clip-path",clipRule:"clip-rule",clipPathUnits:"clipPathUnits",colorInterpolation:"color-interpolation",colorInterpolationFilters:"color-interpolation-filters",colorProfile:"color-profile",colorRendering:"color-rendering",contentScriptType:"contentScriptType",contentStyleType:"contentStyleType",cursor:0,cx:0,cy:0,d:0,decelerate:0,descent:0,diffuseConstant:"diffuseConstant",direction:0,display:0,divisor:0,dominantBaseline:"dominant-baseline",dur:0,dx:0,dy:0,edgeMode:"edgeMode",elevation:0,enableBackground:"enable-background",end:0,exponent:0,externalResourcesRequired:"externalResourcesRequired",fill:0,fillOpacity:"fill-opacity",fillRule:"fill-rule",filter:0,filterRes:"filterRes",filterUnits:"filterUnits",floodColor:"flood-color",floodOpacity:"flood-opacity",focusable:0,fontFamily:"font-family",fontSize:"font-size",fontSizeAdjust:"font-size-adjust",fontStretch:"font-stretch",fontStyle:"font-style",fontVariant:"font-variant",fontWeight:"font-weight",format:0,from:0,fx:0,fy:0,g1:0,g2:0,glyphName:"glyph-name",glyphOrientationHorizontal:"glyph-orientation-horizontal",glyphOrientationVertical:"glyph-orientation-vertical",glyphRef:"glyphRef",gradientTransform:"gradientTransform",gradientUnits:"gradientUnits",hanging:0,horizAdvX:"horiz-adv-x",horizOriginX:"horiz-origin-x",ideographic:0,imageRendering:"image-rendering","in":0,in2:0,intercept:0,k:0,k1:0,k2:0,k3:0,k4:0,kernelMatrix:"kernelMatrix",kernelUnitLength:"kernelUnitLength",kerning:0,keyPoints:"keyPoints",keySplines:"keySplines",keyTimes:"keyTimes",lengthAdjust:"lengthAdjust",letterSpacing:"letter-spacing",lightingColor:"lighting-color",limitingConeAngle:"limitingConeAngle",local:0,markerEnd:"marker-end",markerMid:"marker-mid",markerStart:"marker-start",markerHeight:"markerHeight",markerUnits:"markerUnits",markerWidth:"markerWidth",mask:0,maskContentUnits:"maskContentUnits",maskUnits:"maskUnits",mathematical:0,mode:0,numOctaves:"numOctaves",offset:0,opacity:0,operator:0,order:0,orient:0,orientation:0,origin:0,overflow:0,overlinePosition:"overline-position",overlineThickness:"overline-thickness",paintOrder:"paint-order",panose1:"panose-1",pathLength:"pathLength",patternContentUnits:"patternContentUnits",patternTransform:"patternTransform",patternUnits:"patternUnits",pointerEvents:"pointer-events",points:0,pointsAtX:"pointsAtX",pointsAtY:"pointsAtY",pointsAtZ:"pointsAtZ",preserveAlpha:"preserveAlpha",preserveAspectRatio:"preserveAspectRatio",primitiveUnits:"primitiveUnits",r:0,radius:0,refX:"refX",refY:"refY",renderingIntent:"rendering-intent",repeatCount:"repeatCount",repeatDur:"repeatDur",requiredExtensions:"requiredExtensions",requiredFeatures:"requiredFeatures",restart:0,result:0,rotate:0,rx:0,ry:0,scale:0,seed:0,shapeRendering:"shape-rendering",slope:0,spacing:0,specularConstant:"specularConstant",specularExponent:"specularExponent",speed:0,spreadMethod:"spreadMethod",startOffset:"startOffset",stdDeviation:"stdDeviation",stemh:0,stemv:0,stitchTiles:"stitchTiles",stopColor:"stop-color",stopOpacity:"stop-opacity",strikethroughPosition:"strikethrough-position",strikethroughThickness:"strikethrough-thickness",string:0,stroke:0,strokeDasharray:"stroke-dasharray",strokeDashoffset:"stroke-dashoffset",strokeLinecap:"stroke-linecap",strokeLinejoin:"stroke-linejoin",strokeMiterlimit:"stroke-miterlimit",strokeOpacity:"stroke-opacity",strokeWidth:"stroke-width",surfaceScale:"surfaceScale",systemLanguage:"systemLanguage",tableValues:"tableValues",targetX:"targetX",targetY:"targetY",textAnchor:"text-anchor",textDecoration:"text-decoration",textRendering:"text-rendering",textLength:"textLength",to:0,transform:0,u1:0,u2:0,underlinePosition:"underline-position",underlineThickness:"underline-thickness",unicode:0,unicodeBidi:"unicode-bidi",unicodeRange:"unicode-range",unitsPerEm:"units-per-em",vAlphabetic:"v-alphabetic",vHanging:"v-hanging",vIdeographic:"v-ideographic",vMathematical:"v-mathematical",values:0,vectorEffect:"vector-effect",version:0,vertAdvY:"vert-adv-y",vertOriginX:"vert-origin-x",vertOriginY:"vert-origin-y",viewBox:"viewBox",viewTarget:"viewTarget",visibility:0,widths:0,wordSpacing:"word-spacing",writingMode:"writing-mode",x:0,xHeight:"x-height",x1:0,x2:0,xChannelSelector:"xChannelSelector",xlinkActuate:"xlink:actuate",xlinkArcrole:"xlink:arcrole",xlinkHref:"xlink:href",xlinkRole:"xlink:role",xlinkShow:"xlink:show",xlinkTitle:"xlink:title",xlinkType:"xlink:type",xmlBase:"xml:base",xmlns:0,xmlnsXlink:"xmlns:xlink",xmlLang:"xml:lang",xmlSpace:"xml:space",y:0,y1:0,y2:0,yChannelSelector:"yChannelSelector",z:0,zoomAndPan:"zoomAndPan"},o={Properties:{},DOMAttributeNamespaces:{xlinkActuate:n.xlink,xlinkArcrole:n.xlink,xlinkHref:n.xlink,xlinkRole:n.xlink,xlinkShow:n.xlink,xlinkTitle:n.xlink,xlinkType:n.xlink,xmlBase:n.xml,xmlLang:n.xml,xmlSpace:n.xml},DOMAttributeNames:{}};Object.keys(r).forEach(function(t){o.Properties[t]=0,r[t]&&(o.DOMAttributeNames[t]=r[t])}),t.exports=o},function(t,e,n){"use strict";function r(t){if("selectionStart"in t&&l.hasSelectionCapabilities(t))return{start:t.selectionStart,end:t.selectionEnd};if(window.getSelection){var e=window.getSelection();return{anchorNode:e.anchorNode,anchorOffset:e.anchorOffset,focusNode:e.focusNode,focusOffset:e.focusOffset}}if(document.selection){var n=document.selection.createRange();return{parentElement:n.parentElement(),text:n.text,top:n.boundingTop,left:n.boundingLeft}}}function o(t,e){if(S||null==m||m!==p())return null;var n=r(m);if(!b||!d(b,n)){b=n;var o=c.getPooled(_.select,g,t,e);return o.type="select",o.target=m,a.accumulateTwoPhaseDispatches(o),o}return null}var i=n(50),a=n(51),s=n(58),u=n(45),l=n(148),c=n(62),p=n(154),f=n(75),h=n(25),d=n(130),v=i.topLevelTypes,y=s.canUseDOM&&"documentMode"in document&&document.documentMode<=11,_={select:{phasedRegistrationNames:{bubbled:h({onSelect:null}),captured:h({onSelectCapture:null})},dependencies:[v.topBlur,v.topContextMenu,v.topFocus,v.topKeyDown,v.topKeyUp,v.topMouseDown,v.topMouseUp,v.topSelectionChange]}},m=null,g=null,b=null,S=!1,w=!1,E=h({onSelect:null}),T={eventTypes:_,extractEvents:function(t,e,n,r){if(!w)return null;var i=e?u.getNodeFromInstance(e):window;switch(t){case v.topFocus:(f(i)||"true"===i.contentEditable)&&(m=i,g=e,b=null);break;case v.topBlur:m=null,g=null,b=null;break;case v.topMouseDown:S=!0;break;case v.topContextMenu:case v.topMouseUp:return S=!1,o(n,r);case v.topSelectionChange:if(y)break;case v.topKeyDown:case v.topKeyUp:return o(n,r)}return null},didPutListener:function(t,e,n){e===E&&(w=!0)}};t.exports=T},function(t,e,n){"use strict";function r(t){return"."+t._rootNodeID}var o=n(7),i=n(50),a=n(144),s=n(51),u=n(45),l=n(158),c=n(159),p=n(62),f=n(160),h=n(161),d=n(78),v=n(164),y=n(165),_=n(166),m=n(79),g=n(167),b=n(12),S=n(162),w=(n(8),n(25)),E=i.topLevelTypes,T={abort:{phasedRegistrationNames:{bubbled:w({onAbort:!0}),captured:w({onAbortCapture:!0})}},animationEnd:{phasedRegistrationNames:{bubbled:w({onAnimationEnd:!0}),captured:w({onAnimationEndCapture:!0})}},animationIteration:{phasedRegistrationNames:{bubbled:w({onAnimationIteration:!0}),captured:w({onAnimationIterationCapture:!0})}},animationStart:{phasedRegistrationNames:{bubbled:w({onAnimationStart:!0}),captured:w({onAnimationStartCapture:!0})}},blur:{phasedRegistrationNames:{bubbled:w({onBlur:!0}),captured:w({onBlurCapture:!0})}},canPlay:{phasedRegistrationNames:{bubbled:w({onCanPlay:!0}),captured:w({onCanPlayCapture:!0})}},canPlayThrough:{phasedRegistrationNames:{bubbled:w({onCanPlayThrough:!0}),captured:w({onCanPlayThroughCapture:!0})}},click:{phasedRegistrationNames:{bubbled:w({onClick:!0}),captured:w({onClickCapture:!0})}},contextMenu:{phasedRegistrationNames:{bubbled:w({onContextMenu:!0}),captured:w({onContextMenuCapture:!0})}},copy:{phasedRegistrationNames:{bubbled:w({onCopy:!0}),captured:w({onCopyCapture:!0})}},cut:{phasedRegistrationNames:{bubbled:w({onCut:!0}),captured:w({onCutCapture:!0})}},doubleClick:{phasedRegistrationNames:{bubbled:w({onDoubleClick:!0}),captured:w({onDoubleClickCapture:!0})}},drag:{phasedRegistrationNames:{bubbled:w({onDrag:!0}),captured:w({onDragCapture:!0})}},dragEnd:{phasedRegistrationNames:{bubbled:w({onDragEnd:!0}),captured:w({onDragEndCapture:!0})}},dragEnter:{phasedRegistrationNames:{bubbled:w({onDragEnter:!0}),captured:w({onDragEnterCapture:!0})}},dragExit:{phasedRegistrationNames:{bubbled:w({onDragExit:!0}),captured:w({onDragExitCapture:!0})}},dragLeave:{phasedRegistrationNames:{bubbled:w({onDragLeave:!0}),captured:w({onDragLeaveCapture:!0})}},dragOver:{phasedRegistrationNames:{bubbled:w({onDragOver:!0}),captured:w({onDragOverCapture:!0})}},dragStart:{phasedRegistrationNames:{bubbled:w({onDragStart:!0}),captured:w({onDragStartCapture:!0})}},drop:{phasedRegistrationNames:{bubbled:w({onDrop:!0}),captured:w({onDropCapture:!0})}},durationChange:{phasedRegistrationNames:{bubbled:w({onDurationChange:!0}),captured:w({onDurationChangeCapture:!0})}},emptied:{phasedRegistrationNames:{bubbled:w({onEmptied:!0}),captured:w({onEmptiedCapture:!0})}},encrypted:{phasedRegistrationNames:{bubbled:w({onEncrypted:!0}),captured:w({onEncryptedCapture:!0})}},ended:{phasedRegistrationNames:{bubbled:w({onEnded:!0}),captured:w({onEndedCapture:!0})}},error:{phasedRegistrationNames:{bubbled:w({onError:!0}),captured:w({onErrorCapture:!0})}},focus:{phasedRegistrationNames:{bubbled:w({onFocus:!0}),captured:w({onFocusCapture:!0})}},input:{phasedRegistrationNames:{bubbled:w({onInput:!0}),captured:w({onInputCapture:!0})}},invalid:{phasedRegistrationNames:{bubbled:w({onInvalid:!0}),captured:w({onInvalidCapture:!0})}},keyDown:{phasedRegistrationNames:{bubbled:w({onKeyDown:!0}),captured:w({onKeyDownCapture:!0})}},keyPress:{phasedRegistrationNames:{bubbled:w({onKeyPress:!0}),captured:w({onKeyPressCapture:!0})}},keyUp:{phasedRegistrationNames:{bubbled:w({onKeyUp:!0}),captured:w({onKeyUpCapture:!0})}},load:{phasedRegistrationNames:{bubbled:w({onLoad:!0}),captured:w({onLoadCapture:!0})}},loadedData:{phasedRegistrationNames:{bubbled:w({onLoadedData:!0}),captured:w({onLoadedDataCapture:!0})}},loadedMetadata:{phasedRegistrationNames:{bubbled:w({onLoadedMetadata:!0}),captured:w({onLoadedMetadataCapture:!0})}},loadStart:{phasedRegistrationNames:{bubbled:w({onLoadStart:!0}),captured:w({onLoadStartCapture:!0})}},mouseDown:{phasedRegistrationNames:{bubbled:w({onMouseDown:!0}),captured:w({onMouseDownCapture:!0})}},mouseMove:{phasedRegistrationNames:{bubbled:w({onMouseMove:!0}),captured:w({onMouseMoveCapture:!0})}},mouseOut:{phasedRegistrationNames:{bubbled:w({onMouseOut:!0}),captured:w({onMouseOutCapture:!0})}},mouseOver:{phasedRegistrationNames:{bubbled:w({onMouseOver:!0}),captured:w({onMouseOverCapture:!0})}},mouseUp:{phasedRegistrationNames:{bubbled:w({onMouseUp:!0}),captured:w({onMouseUpCapture:!0})}},paste:{phasedRegistrationNames:{bubbled:w({onPaste:!0}),captured:w({onPasteCapture:!0})}},pause:{phasedRegistrationNames:{bubbled:w({onPause:!0}),captured:w({onPauseCapture:!0})}},play:{phasedRegistrationNames:{bubbled:w({onPlay:!0}),captured:w({onPlayCapture:!0})}},playing:{phasedRegistrationNames:{bubbled:w({onPlaying:!0}),captured:w({onPlayingCapture:!0})}},progress:{phasedRegistrationNames:{bubbled:w({onProgress:!0}),captured:w({onProgressCapture:!0})}},rateChange:{phasedRegistrationNames:{bubbled:w({onRateChange:!0}),captured:w({onRateChangeCapture:!0})}},reset:{phasedRegistrationNames:{bubbled:w({onReset:!0}),captured:w({onResetCapture:!0})}},scroll:{phasedRegistrationNames:{bubbled:w({onScroll:!0}),captured:w({onScrollCapture:!0})}},seeked:{phasedRegistrationNames:{bubbled:w({onSeeked:!0}),captured:w({onSeekedCapture:!0})}},seeking:{phasedRegistrationNames:{bubbled:w({onSeeking:!0}),captured:w({onSeekingCapture:!0})}},stalled:{phasedRegistrationNames:{bubbled:w({onStalled:!0}),captured:w({onStalledCapture:!0})}},submit:{phasedRegistrationNames:{bubbled:w({onSubmit:!0}),captured:w({onSubmitCapture:!0})}},suspend:{phasedRegistrationNames:{bubbled:w({onSuspend:!0}),captured:w({onSuspendCapture:!0})}},timeUpdate:{phasedRegistrationNames:{bubbled:w({onTimeUpdate:!0}),captured:w({onTimeUpdateCapture:!0})}},touchCancel:{phasedRegistrationNames:{bubbled:w({onTouchCancel:!0}),captured:w({onTouchCancelCapture:!0})}},touchEnd:{phasedRegistrationNames:{bubbled:w({onTouchEnd:!0}),captured:w({onTouchEndCapture:!0})}},touchMove:{phasedRegistrationNames:{bubbled:w({onTouchMove:!0}),captured:w({onTouchMoveCapture:!0})}},touchStart:{phasedRegistrationNames:{bubbled:w({onTouchStart:!0}),captured:w({onTouchStartCapture:!0})}},transitionEnd:{phasedRegistrationNames:{bubbled:w({onTransitionEnd:!0}),captured:w({onTransitionEndCapture:!0})}},volumeChange:{phasedRegistrationNames:{bubbled:w({onVolumeChange:!0}),captured:w({onVolumeChangeCapture:!0})}},waiting:{phasedRegistrationNames:{bubbled:w({onWaiting:!0}),captured:w({onWaitingCapture:!0})}},wheel:{phasedRegistrationNames:{bubbled:w({onWheel:!0}),captured:w({onWheelCapture:!0})}}},R={topAbort:T.abort,topAnimationEnd:T.animationEnd,topAnimationIteration:T.animationIteration,topAnimationStart:T.animationStart,topBlur:T.blur,topCanPlay:T.canPlay,topCanPlayThrough:T.canPlayThrough,topClick:T.click,topContextMenu:T.contextMenu,topCopy:T.copy,topCut:T.cut,topDoubleClick:T.doubleClick,topDrag:T.drag,topDragEnd:T.dragEnd,topDragEnter:T.dragEnter,topDragExit:T.dragExit,topDragLeave:T.dragLeave,topDragOver:T.dragOver,topDragStart:T.dragStart,topDrop:T.drop,topDurationChange:T.durationChange,topEmptied:T.emptied,topEncrypted:T.encrypted,topEnded:T.ended,topError:T.error,topFocus:T.focus,topInput:T.input,topInvalid:T.invalid,topKeyDown:T.keyDown,topKeyPress:T.keyPress,topKeyUp:T.keyUp,topLoad:T.load,topLoadedData:T.loadedData,topLoadedMetadata:T.loadedMetadata,topLoadStart:T.loadStart,topMouseDown:T.mouseDown,topMouseMove:T.mouseMove,topMouseOut:T.mouseOut,topMouseOver:T.mouseOver,topMouseUp:T.mouseUp,topPaste:T.paste,topPause:T.pause,topPlay:T.play,topPlaying:T.playing,topProgress:T.progress,topRateChange:T.rateChange,topReset:T.reset,topScroll:T.scroll,topSeeked:T.seeked,topSeeking:T.seeking,topStalled:T.stalled,topSubmit:T.submit,topSuspend:T.suspend,topTimeUpdate:T.timeUpdate,topTouchCancel:T.touchCancel,topTouchEnd:T.touchEnd,topTouchMove:T.touchMove,topTouchStart:T.touchStart,topTransitionEnd:T.transitionEnd,topVolumeChange:T.volumeChange,topWaiting:T.waiting,topWheel:T.wheel};for(var C in R)R[C].dependencies=[C];var P=w({onClick:null}),O={},x={eventTypes:T,extractEvents:function(t,e,n,r){var i=R[t];if(!i)return null;var a;switch(t){case E.topAbort:case E.topCanPlay:case E.topCanPlayThrough:case E.topDurationChange:case E.topEmptied:case E.topEncrypted:case E.topEnded:case E.topError:case E.topInput:case E.topInvalid:case E.topLoad:case E.topLoadedData:case E.topLoadedMetadata:case E.topLoadStart:case E.topPause:case E.topPlay:case E.topPlaying:case E.topProgress:case E.topRateChange:case E.topReset:case E.topSeeked:case E.topSeeking:case E.topStalled:case E.topSubmit:case E.topSuspend:case E.topTimeUpdate:case E.topVolumeChange:case E.topWaiting:a=p;break;case E.topKeyPress:if(0===S(n))return null;case E.topKeyDown:case E.topKeyUp:a=h;break;case E.topBlur:case E.topFocus:a=f;break;case E.topClick:if(2===n.button)return null;case E.topContextMenu:case E.topDoubleClick:case E.topMouseDown:case E.topMouseMove:case E.topMouseOut:case E.topMouseOver:case E.topMouseUp:a=d;break;case E.topDrag:case E.topDragEnd:case E.topDragEnter:case E.topDragExit:case E.topDragLeave:case E.topDragOver:case E.topDragStart:case E.topDrop:a=v;break;case E.topTouchCancel:case E.topTouchEnd:case E.topTouchMove:case E.topTouchStart:a=y;break;case E.topAnimationEnd:case E.topAnimationIteration:case E.topAnimationStart:a=l;break;case E.topTransitionEnd:a=_;break;case E.topScroll:a=m;break;case E.topWheel:a=g;break;case E.topCopy:case E.topCut:case E.topPaste:a=c}a?void 0:o("86",t);var u=a.getPooled(i,e,n,r);return s.accumulateTwoPhaseDispatches(u),u},didPutListener:function(t,e,n){if(e===P){var o=r(t),i=u.getNodeFromInstance(t);O[o]||(O[o]=a.listen(i,"click",b))}},willDeleteListener:function(t,e){if(e===P){var n=r(t);O[n].remove(),delete O[n]}}};t.exports=x},function(t,e,n){"use strict";function r(t,e,n,r){return o.call(this,t,e,n,r)}var o=n(62),i={animationName:null,elapsedTime:null,pseudoElement:null};o.augmentClass(r,i),t.exports=r},function(t,e,n){"use strict";function r(t,e,n,r){return o.call(this,t,e,n,r)}var o=n(62),i={clipboardData:function(t){return"clipboardData"in t?t.clipboardData:window.clipboardData}};o.augmentClass(r,i),t.exports=r},function(t,e,n){"use strict";function r(t,e,n,r){return o.call(this,t,e,n,r)}var o=n(79),i={relatedTarget:null};o.augmentClass(r,i),t.exports=r},function(t,e,n){"use strict";function r(t,e,n,r){return o.call(this,t,e,n,r)}var o=n(79),i=n(162),a=n(163),s=n(81),u={key:a,location:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,repeat:null,locale:null,getModifierState:s,charCode:function(t){return"keypress"===t.type?i(t):0},keyCode:function(t){return"keydown"===t.type||"keyup"===t.type?t.keyCode:0},which:function(t){return"keypress"===t.type?i(t):"keydown"===t.type||"keyup"===t.type?t.keyCode:0}};o.augmentClass(r,u),t.exports=r},function(t,e){"use strict";function n(t){var e,n=t.keyCode;return"charCode"in t?(e=t.charCode,0===e&&13===n&&(e=13)):e=n,e>=32||13===e?e:0}t.exports=n},function(t,e,n){"use strict";function r(t){if(t.key){var e=i[t.key]||t.key;if("Unidentified"!==e)return e}if("keypress"===t.type){var n=o(t);return 13===n?"Enter":String.fromCharCode(n)}return"keydown"===t.type||"keyup"===t.type?a[t.keyCode]||"Unidentified":""}var o=n(162),i={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},a={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"};t.exports=r},function(t,e,n){"use strict";function r(t,e,n,r){return o.call(this,t,e,n,r)}var o=n(78),i={dataTransfer:null};o.augmentClass(r,i),t.exports=r},function(t,e,n){"use strict";function r(t,e,n,r){return o.call(this,t,e,n,r)}var o=n(79),i=n(81),a={touches:null,targetTouches:null,changedTouches:null,altKey:null,metaKey:null,ctrlKey:null,shiftKey:null,getModifierState:i};o.augmentClass(r,a),t.exports=r},function(t,e,n){"use strict";function r(t,e,n,r){return o.call(this,t,e,n,r)}var o=n(62),i={propertyName:null,elapsedTime:null,pseudoElement:null};o.augmentClass(r,i),t.exports=r},function(t,e,n){"use strict";function r(t,e,n,r){return o.call(this,t,e,n,r)}var o=n(78),i={deltaX:function(t){return"deltaX"in t?t.deltaX:"wheelDeltaX"in t?-t.wheelDeltaX:0},deltaY:function(t){return"deltaY"in t?t.deltaY:"wheelDeltaY"in t?-t.wheelDeltaY:"wheelDelta"in t?-t.wheelDelta:0},deltaZ:null,deltaMode:null};o.augmentClass(r,i),t.exports=r},function(t,e,n){"use strict";function r(t,e){for(var n=Math.min(t.length,e.length),r=0;r.":"function"==typeof e?" Instead of passing a class like Foo, pass React.createElement(Foo) or .":null!=e&&void 0!==e.props?" This may be caused by unintentionally loading two independent copies of React.":"");var a,s=b(V,null,null,null,null,null,e);if(t){var u=w.get(t);a=u._processChildContext(u._context)}else a=P;var c=f(n);if(c){var p=c._currentElement,d=p.props;if(k(d,e)){var v=c._renderedComponent.getPublicInstance(),y=r&&function(){r.call(v)};return F._updateRootComponent(c,s,a,n,y), -v}F.unmountComponentAtNode(n)}var _=o(n),m=_&&!!i(_),g=l(n),S=m&&!c&&!g,E=F._renderNewRootComponent(s,n,S,a)._renderedComponent.getPublicInstance();return r&&r.call(E),E},render:function(t,e,n){return F._renderSubtreeIntoContainer(null,t,e,n)},unmountComponentAtNode:function(t){c(t)?void 0:h("40");var e=f(t);if(!e){l(t),1===t.nodeType&&t.hasAttribute(M);return!1}return delete j[e._instance.rootID],C.batchedUpdates(u,e,t,!1),!0},_mountImageIntoNode:function(t,e,n,i,a){if(c(e)?void 0:h("41"),i){var s=o(e);if(E.canReuseMarkup(t,s))return void _.precacheNode(n,s);var u=s.getAttribute(E.CHECKSUM_ATTR_NAME);s.removeAttribute(E.CHECKSUM_ATTR_NAME);var l=s.outerHTML;s.setAttribute(E.CHECKSUM_ATTR_NAME,u);var p=t,f=r(p,l),v=" (client) "+p.substring(f-20,f+20)+"\n (server) "+l.substring(f-20,f+20);e.nodeType===D?h("42",v):void 0}if(e.nodeType===D?h("43"):void 0,a.useCreateElement){for(;e.lastChild;)e.removeChild(e.lastChild);d.insertTreeBefore(e,t,null)}else x(e,t),_.precacheNode(n,e.firstChild)}};t.exports=F},function(t,e,n){"use strict";function r(t,e){var n={_topLevelWrapper:t,_idCounter:1,_ownerDocument:e?e.nodeType===o?e:e.ownerDocument:null,_node:e,_tag:e?e.nodeName.toLowerCase():null,_namespaceURI:e?e.namespaceURI:null};return n}var o=(n(138),9);t.exports=r},function(t,e){"use strict";var n={useCreateElement:!0};t.exports=n},function(t,e,n){"use strict";var r=n(172),o=/\/?>/,i=/^<\!\-\-/,a={CHECKSUM_ATTR_NAME:"data-react-checksum",addChecksumToMarkup:function(t){var e=r(t);return i.test(t)?t:t.replace(o," "+a.CHECKSUM_ATTR_NAME+'="'+e+'"$&')},canReuseMarkup:function(t,e){var n=e.getAttribute(a.CHECKSUM_ATTR_NAME);n=n&&parseInt(n,10);var o=r(t);return o===n}};t.exports=a},function(t,e){"use strict";function n(t){for(var e=1,n=0,o=0,i=t.length,a=i&-4;o0&&void 0!==arguments[0]?arguments[0]:{};this._emitStateChanged(I),y["default"].spring(this.state.openValue,s({toValue:1,bounciness:0,restSpeedThreshold:.1},e)).start(function(){t.props.onDrawerOpen&&t.props.onDrawerOpen(),t._emitStateChanged(x)})}},{key:"close",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._emitStateChanged(I),y["default"].spring(this.state.openValue,s({toValue:0,bounciness:0,restSpeedThreshold:1},e)).start(function(){t.props.onDrawerClose&&t.props.onDrawerClose(),t._emitStateChanged(x)})}},{key:"_handleDrawerOpen",value:function(){this.props.onDrawerOpen&&this.props.onDrawerOpen()}},{key:"_handleDrawerClose",value:function(){this.props.onDrawerClose&&this.props.onDrawerClose()}},{key:"_shouldSetPanResponder",value:function(t,e){var n=e.moveX,r=e.dx,o=e.dy,i=this.props.drawerPosition;if("left"===i){var a=C-(C-this.props.drawerWidth);if(1!==this._lastOpenValue)return n<=35&&r>0&&(this._isClosing=!1,!0);if(r<0&&Math.abs(r)>3*Math.abs(o)||n>a)return this._isClosing=!0,this._closingAnchorValue=this._getOpenValueForX(n),!0}else{var s=C-this.props.drawerWidth;if(1!==this._lastOpenValue)return n>=C-35&&r<0&&(this._isClosing=!1,!0);if(r>0&&Math.abs(r)>3*Math.abs(o)||n1?r=1:r<0&&(r=0),this.state.openValue.setValue(r)}},{key:"_panResponderRelease",value:function(t,e){var n=e.moveX,r=e.vx,o=this.props.drawerPosition,i=this._isClosing,a=r-O;"left"===o?r>0&&n>P||r>=O||a&&i&&n>P?this.open({velocity:r}):r<0&&n0&&n>P||r>O||a&&!i?this.close({velocity:-1*r}):i?this.open():this.close()}},{key:"_getOpenValueForX",value:function(t){var e=this.props,n=e.drawerPosition,r=e.drawerWidth;return"left"===n?t/r:"right"===n?(C-t)/r:void 0}}]),e}(l.Component);M.positions={Left:"left",Right:"right"},M.defaultProps={drawerWidth:0,drawerPosition:"left"},M.propTypes={drawerWidth:l.PropTypes.number.isRequired,drawerPosition:l.PropTypes.oneOf(["left","right"]).isRequired,renderNavigationView:l.PropTypes.func.isRequired,onDrawerSlide:l.PropTypes.func,onDrawerStateChanged:l.PropTypes.func,onDrawerOpen:l.PropTypes.func,onDrawerClose:l.PropTypes.func,keyboardDismissMode:l.PropTypes.oneOf(["none","on-drag"])};var A=f["default"].create({drawer:{position:"absolute",top:0,bottom:0},main:{flex:1},overlay:{backgroundColor:"#000",position:"absolute",top:0,left:0,bottom:0,right:0}});E["default"].onClass(M,S.Mixin),(0,R["default"])(M),M.isReactNativeComponent=!0,e["default"]=M},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}function o(t){var e=Object.keys(t)[0];return e+"("+t[e]+")"}function i(t){return t&&t.transform&&"string"!=typeof t.transform&&(t.transform=t.transform.map(o).join(" ")),t}function a(t,e){if(t.setNativeProps)t.setNativeProps(e);else{if(!t.nodeType||void 0===t.setAttribute)return!1;p["default"].setValueForStyles(t,i(e.style))}}Object.defineProperty(e,"__esModule",{value:!0});var s=Object.assign||function(t){for(var e=1;e1?e-1:0),r=1;rn){if("identity"===s)return u;"clamp"===s&&(u=n)}return r===o?r:e===n?t<=e?r:o:(e===-(1/0)?u=-u:n===1/0?u-=e:u=(u-e)/(n-e),u=i(u),r===-(1/0)?u=-u:o===1/0?u+=r:u=u*(o-r)+r,u)}function i(t){var e=h(t);if(null===e)return t;e=e||0;var n=(4278190080&e)>>>24,r=(16711680&e)>>>16,o=(65280&e)>>>8,i=(255&e)/255;return"rgba("+n+", "+r+", "+o+", "+i+")"}function a(t){var e=t.outputRange;d(e.length>=2,"Bad output range"),e=e.map(i),s(e);var n=e[0].match(_).map(function(){return[]});e.forEach(function(t){t.match(_).forEach(function(t,e){n[e].push(+t)})});var r=e[0].match(_).map(function(e,r){return y.create(p({},t,{outputRange:n[r]}))}),o=/^rgb/.test(e[0]);return function(t){var n=0;return e[0].replace(_,function(){var e=r[n++](t);return String(o&&n<4?Math.round(e):e)})}}function s(t){for(var e=t[0].replace(_,""),n=1;n=t);++n);return n-1}function l(t){d(t.length>=2,"inputRange must have at least 2 elements");for(var e=1;e=t[e-1],"inputRange must be monotonically increasing "+t)}function c(t,e){d(e.length>=2,t+" must have at least 2 elements"),d(2!==e.length||e[0]!==-(1/0)||e[1]!==1/0,t+"cannot be ]-infinity;+infinity[ "+e)}var p=Object.assign||function(t){for(var e=1;e>>0===t&&t>=0&&t<=4294967295?t:null:(e=f.hex6.exec(t))?parseInt(e[1]+"ff",16)>>>0:h.hasOwnProperty(t)?h[t]:(e=f.rgb.exec(t))?(a(e[1])<<24|a(e[2])<<16|a(e[3])<<8|255)>>>0:(e=f.rgba.exec(t))?(a(e[1])<<24|a(e[2])<<16|a(e[3])<<8|u(e[4]))>>>0:(e=f.hex3.exec(t))?parseInt(e[1]+e[1]+e[2]+e[2]+e[3]+e[3]+"ff",16)>>>0:(e=f.hex8.exec(t))?parseInt(e[1],16)>>>0:(e=f.hex4.exec(t))?parseInt(e[1]+e[1]+e[2]+e[2]+e[3]+e[3]+e[4]+e[4],16)>>>0:(e=f.hsl.exec(t))?(255|o(s(e[1]),l(e[2]),l(e[3])))>>>0:(e=f.hsla.exec(t))?(o(s(e[1]),l(e[2]),l(e[3]))|u(e[4]))>>>0:null}function r(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+(e-t)*(2/3-n)*6:t}function o(t,e,n){var o=n<.5?n*(1+e):n+e-n*e,i=2*n-o,a=r(i,o,t+1/3),s=r(i,o,t),u=r(i,o,t-1/3);return Math.round(255*a)<<24|Math.round(255*s)<<16|Math.round(255*u)<<8}function i(){for(var t=arguments.length,e=Array(t),n=0;n255?255:e}function s(t){var e=parseFloat(t);return(e%360+360)%360/360}function u(t){var e=parseFloat(t);return e<0?0:e>1?255:Math.round(255*e)}function l(t){var e=parseFloat(t,10);return e<0?0:e>100?1:e/100}var c="[-+]?\\d*\\.?\\d+",p=c+"%",f={rgb:new RegExp("rgb"+i(c,c,c)),rgba:new RegExp("rgba"+i(c,c,c,c)),hsl:new RegExp("hsl"+i(c,p,p)),hsla:new RegExp("hsla"+i(c,p,p,c)),hex3:/^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex4:/^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#([0-9a-fA-F]{6})$/,hex8:/^#([0-9a-fA-F]{8})$/ -},h={transparent:0,aliceblue:4042850303,antiquewhite:4209760255,aqua:16777215,aquamarine:2147472639,azure:4043309055,beige:4126530815,bisque:4293182719,black:255,blanchedalmond:4293643775,blue:65535,blueviolet:2318131967,brown:2771004159,burlywood:3736635391,burntsienna:3934150143,cadetblue:1604231423,chartreuse:2147418367,chocolate:3530104575,coral:4286533887,cornflowerblue:1687547391,cornsilk:4294499583,crimson:3692313855,cyan:16777215,darkblue:35839,darkcyan:9145343,darkgoldenrod:3095792639,darkgray:2846468607,darkgreen:6553855,darkgrey:2846468607,darkkhaki:3182914559,darkmagenta:2332068863,darkolivegreen:1433087999,darkorange:4287365375,darkorchid:2570243327,darkred:2332033279,darksalmon:3918953215,darkseagreen:2411499519,darkslateblue:1211993087,darkslategray:793726975,darkslategrey:793726975,darkturquoise:13554175,darkviolet:2483082239,deeppink:4279538687,deepskyblue:12582911,dimgray:1768516095,dimgrey:1768516095,dodgerblue:512819199,firebrick:2988581631,floralwhite:4294635775,forestgreen:579543807,fuchsia:4278255615,gainsboro:3705462015,ghostwhite:4177068031,gold:4292280575,goldenrod:3668254975,gray:2155905279,green:8388863,greenyellow:2919182335,grey:2155905279,honeydew:4043305215,hotpink:4285117695,indianred:3445382399,indigo:1258324735,ivory:4294963455,khaki:4041641215,lavender:3873897215,lavenderblush:4293981695,lawngreen:2096890111,lemonchiffon:4294626815,lightblue:2916673279,lightcoral:4034953471,lightcyan:3774873599,lightgoldenrodyellow:4210742015,lightgray:3553874943,lightgreen:2431553791,lightgrey:3553874943,lightpink:4290167295,lightsalmon:4288707327,lightseagreen:548580095,lightskyblue:2278488831,lightslategray:2005441023,lightslategrey:2005441023,lightsteelblue:2965692159,lightyellow:4294959359,lime:16711935,limegreen:852308735,linen:4210091775,magenta:4278255615,maroon:2147483903,mediumaquamarine:1724754687,mediumblue:52735,mediumorchid:3126187007,mediumpurple:2473647103,mediumseagreen:1018393087,mediumslateblue:2070474495,mediumspringgreen:16423679,mediumturquoise:1221709055,mediumvioletred:3340076543,midnightblue:421097727,mintcream:4127193855,mistyrose:4293190143,moccasin:4293178879,navajowhite:4292783615,navy:33023,oldlace:4260751103,olive:2155872511,olivedrab:1804477439,orange:4289003775,orangered:4282712319,orchid:3664828159,palegoldenrod:4008225535,palegreen:2566625535,paleturquoise:2951671551,palevioletred:3681588223,papayawhip:4293907967,peachpuff:4292524543,peru:3448061951,pink:4290825215,plum:3718307327,powderblue:2967529215,purple:2147516671,rebeccapurple:1714657791,red:4278190335,rosybrown:3163525119,royalblue:1097458175,saddlebrown:2336560127,salmon:4202722047,sandybrown:4104413439,seagreen:780883967,seashell:4294307583,sienna:2689740287,silver:3233857791,skyblue:2278484991,slateblue:1784335871,slategray:1887473919,slategrey:1887473919,snow:4294638335,springgreen:16744447,steelblue:1182971135,tan:3535047935,teal:8421631,thistle:3636451583,tomato:4284696575,turquoise:1088475391,violet:4001558271,wheat:4125012991,white:4294967295,whitesmoke:4126537215,yellow:4294902015,yellowgreen:2597139199};t.exports=n},function(t,e){"use strict";var n=0;t.exports=function(){return String(n++)}},function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var r=function(){function t(t,e){for(var n=0;n=0?u(l):r(this.length)-u(s(l)),e=l;e0?1:-1}},function(t,e,n){"use strict";t.exports=n(213)()?Object.setPrototypeOf:n(214)},function(t,e){"use strict";var n=Object.create,r=Object.getPrototypeOf,o={};t.exports=function(){var t=Object.setPrototypeOf,e=arguments[0]||n;return"function"==typeof t&&r(t(e(null),o))===o}},function(t,e,n){"use strict";var r,o=n(215),i=n(205),a=Object.prototype.isPrototypeOf,s=Object.defineProperty,u={configurable:!0,enumerable:!1,writable:!0,value:void 0};r=function(t,e){if(i(t),null===e||o(e))return t;throw new TypeError("Prototype must be null or an object")},t.exports=function(t){var e,n;return t?(2===t.level?t.set?(n=t.set,e=function(t,e){return n.call(r(t,e),e),t}):e=function(t,e){return r(t,e).__proto__=e,t}:e=function o(t,e){var n;return r(t,e),n=a.call(o.nullPolyfill,t),n&&delete o.nullPolyfill.__proto__,null===e&&(e=o.nullPolyfill),t.__proto__=e,n&&s(o.nullPolyfill,"__proto__",u),t},Object.defineProperty(e,"level",{configurable:!1,enumerable:!1,writable:!1,value:t.level})):null}(function(){var t,e=Object.create(null),n={},r=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__");if(r){try{t=r.set,t.call(e,n)}catch(o){}if(Object.getPrototypeOf(e)===n)return{set:t,level:2}}return e.__proto__=n,Object.getPrototypeOf(e)===n?{level:2}:(e={},e.__proto__=n,Object.getPrototypeOf(e)===n&&{level:1})}()),n(216)},function(t,e){"use strict";var n={"function":!0,object:!0};t.exports=function(t){return null!=t&&n[typeof t]||!1}},function(t,e,n){"use strict";var r,o=Object.create;n(213)()||(r=n(214)),t.exports=function(){var t,e,n;return r?1!==r.level?o:(t={},e={},n={configurable:!1,enumerable:!1,writable:!0,value:void 0},Object.getOwnPropertyNames(Object.prototype).forEach(function(t){return"__proto__"===t?void(e[t]={configurable:!0,enumerable:!1,writable:!0,value:void 0}):void(e[t]=n)}),Object.defineProperties(t,e),Object.defineProperty(r,"nullPolyfill",{configurable:!1,enumerable:!1,writable:!1,value:t}),function(e,n){return o(null===e?t:e,n)}):o}()},function(t,e){"use strict";t.exports=function(t){if("function"!=typeof t)throw new TypeError(t+" is not a function");return t}},function(t,e,n){"use strict";var r,o=n(219),i=n(225),a=n(226),s=n(227);r=t.exports=function(t,e){var n,r,a,u,l;return arguments.length<2||"string"!=typeof t?(u=e,e=t,t=null):u=arguments[2],null==t?(n=a=!0,r=!1):(n=s.call(t,"c"),r=s.call(t,"e"),a=s.call(t,"w")),l={value:e,configurable:n,enumerable:r,writable:a},u?o(i(u),l):l},r.gs=function(t,e,n){var r,u,l,c;return"string"!=typeof t?(l=n,n=e,e=t,t=null):l=arguments[3],null==e?e=void 0:a(e)?null==n?n=void 0:a(n)||(l=n,n=void 0):(l=e,e=n=void 0),null==t?(r=!0,u=!1):(r=s.call(t,"c"),u=s.call(t,"e")),c={get:e,set:n,configurable:r,enumerable:u},l?o(i(l),c):c}},function(t,e,n){"use strict";t.exports=n(220)()?Object.assign:n(221)},function(t,e){"use strict";t.exports=function(){var t,e=Object.assign;return"function"==typeof e&&(t={foo:"raz"},e(t,{bar:"dwa"},{trzy:"trzy"}),t.foo+t.bar+t.trzy==="razdwatrzy")}},function(t,e,n){"use strict";var r=n(222),o=n(205),i=Math.max;t.exports=function(t,e){var n,a,s,u=i(arguments.length,2);for(t=Object(o(t)),s=function(r){try{t[r]=e[r]}catch(o){n||(n=o)}},a=1;a-1}},function(t,e,n){"use strict";var r,o,i,a,s,u,l,c=n(218),p=n(217),f=Function.prototype.apply,h=Function.prototype.call,d=Object.create,v=Object.defineProperty,y=Object.defineProperties,_=Object.prototype.hasOwnProperty,m={configurable:!0,enumerable:!1,writable:!0};r=function(t,e){var n;return p(e),_.call(this,"__ee__")?n=this.__ee__:(n=m.value=d(null),v(this,"__ee__",m),m.value=null),n[t]?"object"==typeof n[t]?n[t].push(e):n[t]=[n[t],e]:n[t]=e,this},o=function(t,e){var n,o;return p(e),o=this,r.call(this,t,n=function(){i.call(o,t,n),f.call(e,this,arguments)}),n.__eeOnceListener__=e,this},i=function(t,e){var n,r,o,i;if(p(e),!_.call(this,"__ee__"))return this;if(n=this.__ee__,!n[t])return this;if(r=n[t],"object"==typeof r)for(i=0;o=r[i];++i)o!==e&&o.__eeOnceListener__!==e||(2===r.length?n[t]=r[i?0:1]:r.splice(i,1));else r!==e&&r.__eeOnceListener__!==e||delete n[t];return this},a=function(t){var e,n,r,o,i;if(_.call(this,"__ee__")&&(o=this.__ee__[t]))if("object"==typeof o){for(n=arguments.length,i=new Array(n-1),e=1;e=55296&&y<=56319&&(v+=t[++h])),u.call(e,_,v,p),!f);++h);}},function(t,e,n){"use strict";var r=n(238),o=n(239),i=n(242),a=n(249),s=n(236),u=n(231).iterator;t.exports=function(t){return"function"==typeof s(t)[u]?t[u]():r(t)?new i(t):o(t)?new a(t):new i(t)}},function(t,e,n){"use strict";var r,o=n(212),i=n(227),a=n(218),s=n(243),u=Object.defineProperty;r=t.exports=function(t,e){return this instanceof r?(s.call(this,t),e=e?i.call(e,"key+value")?"key+value":i.call(e,"key")?"key":"value":"value",void u(this,"__kind__",a("",e))):new r(t,e)},o&&o(r,s),r.prototype=Object.create(s.prototype,{constructor:a(r),_resolve:a(function(t){return"value"===this.__kind__?this.__list__[t]:"key+value"===this.__kind__?[t,this.__list__[t]]:t}),toString:a(function(){return"[object Array Iterator]"})})},function(t,e,n){"use strict";var r,o=n(204),i=n(219),a=n(217),s=n(205),u=n(218),l=n(244),c=n(231),p=Object.defineProperty,f=Object.defineProperties;t.exports=r=function(t,e){return this instanceof r?(f(this,{__list__:u("w",s(t)),__context__:u("w",e),__nextIndex__:u("w",0)}),void(e&&(a(e.on),e.on("_add",this._onAdd),e.on("_delete",this._onDelete),e.on("_clear",this._onClear)))):new r(t,e)},f(r.prototype,i({constructor:u(r),_next:u(function(){var t;if(this.__list__)return this.__redo__&&(t=this.__redo__.shift(),void 0!==t)?t:this.__nextIndex__=this.__nextIndex__)){if(++this.__nextIndex__,!this.__redo__)return void p(this,"__redo__",u("c",[t]));this.__redo__.forEach(function(e,n){e>=t&&(this.__redo__[n]=++e)},this),this.__redo__.push(t)}}),_onDelete:u(function(t){var e;t>=this.__nextIndex__||(--this.__nextIndex__,this.__redo__&&(e=this.__redo__.indexOf(t),e!==-1&&this.__redo__.splice(e,1),this.__redo__.forEach(function(e,n){e>t&&(this.__redo__[n]=--e)},this)))}),_onClear:u(function(){this.__redo__&&o.call(this.__redo__),this.__nextIndex__=0})}))),p(r.prototype,c.iterator,u(function(){return this})),p(r.prototype,c.toStringTag,u("","Iterator"))},function(t,e,n){"use strict";var r,o=n(245),i=n(246),a=n(217),s=n(205),u=Function.prototype.bind,l=Object.defineProperty,c=Object.prototype.hasOwnProperty;r=function(t,e,n){var r,i=s(e)&&a(e.value);return r=o(e),delete r.writable,delete r.value,r.get=function(){return c.call(this,t)?i:(e.value=u.call(i,null==n?this:this[n]),l(this,t,e),this[t])},r},t.exports=function(t){var e=arguments[1];return i(t,function(t,n){return r(n,t,e)})}},function(t,e,n){"use strict";var r=n(219),o=n(205);t.exports=function(t){var e=Object(o(t));return e!==t?e:r({},t)}},function(t,e,n){"use strict";var r=n(217),o=n(247),i=Function.prototype.call;t.exports=function(t,e){var n={},a=arguments[2];return r(e),o(t,function(t,r,o,s){n[r]=i.call(e,a,t,r,o,s)}),n}},function(t,e,n){"use strict";t.exports=n(248)("forEach")},function(t,e,n){"use strict";var r=n(217),o=n(205),i=Function.prototype.bind,a=Function.prototype.call,s=Object.keys,u=Object.prototype.propertyIsEnumerable;t.exports=function(t,e){return function(n,l){var c,p=arguments[2],f=arguments[3];return n=Object(o(n)),r(l),c=s(n),f&&c.sort("function"==typeof f?i.call(f,n):void 0),"function"!=typeof t&&(t=c[t]),a.call(t,c,function(t,r){return u.call(n,t)?a.call(l,p,n[t],t,n,r):e})}}},function(t,e,n){"use strict";var r,o=n(212),i=n(218),a=n(243),s=Object.defineProperty;r=t.exports=function(t){return this instanceof r?(t=String(t),a.call(this,t),void s(this,"__length__",i("",t.length))):new r(t)},o&&o(r,a),r.prototype=Object.create(a.prototype,{constructor:i(r),_next:i(function(){if(this.__list__)return this.__nextIndex__=55296&&e<=56319?n+this.__list__[this.__nextIndex__++]:n)}),toString:i(function(){return"[object String Iterator]"})})},function(t,e,n){"use strict";var r,o=n(212),i=n(227),a=n(218),s=n(243),u=n(231).toStringTag,l=Object.defineProperty;r=t.exports=function(t,e){return this instanceof r?(s.call(this,t.__setData__,t),e=e&&i.call(e,"key+value")?"key+value":"value",void l(this,"__kind__",a("",e))):new r(t,e)},o&&o(r,s),r.prototype=Object.create(s.prototype,{constructor:a(r),_resolve:a(function(t){return"value"===this.__kind__?this.__list__[t]:[this.__list__[t],this.__list__[t]]}),toString:a(function(){return"[object Set Iterator]"})}),l(r.prototype,u,a("c","Set Iterator"))},function(t,e){"use strict";t.exports=function(){return"undefined"!=typeof Set&&"[object Set]"===Object.prototype.toString.call(Set.prototype)}()},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=function(){function t(t,e){for(var n=0;n=this._startTime+this._duration?(0===this._duration?this._onUpdate(this._toValue):this._onUpdate(this._fromValue+this._easing(1)*(this._toValue-this._fromValue)),void this.__debouncedOnEnd({finished:!0})):(this._onUpdate(this._fromValue+this._easing((t-this._startTime)/this._duration)*(this._toValue-this._fromValue)),void(this.__active&&(this._animationFrame=l.current(this.onUpdate.bind(this)))))}},{key:"stop",value:function(){this.__active=!1,clearTimeout(this._timeout),c.current(this._animationFrame),this.__debouncedOnEnd({finished:!1})}}]),e}(s);t.exports=f},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var o=function(){function t(t,e){for(var n=0;n0?1:0}},{key:"step1",value:function(t){return t>=1?1:0}},{key:"linear",value:function(t){return t}},{key:"ease",value:function(t){return s(t)}},{key:"quad",value:function(t){return t*t}},{key:"cubic",value:function(t){return t*t*t}},{key:"poly",value:function(t){return function(e){return Math.pow(e,t)}}},{key:"sin",value:function(t){return 1-Math.cos(t*Math.PI/2)}},{key:"circle",value:function(t){return 1-Math.sqrt(1-t*t)}},{key:"exp",value:function(t){return Math.pow(2,10*(t-1))}},{key:"elastic",value:function(){var t=arguments.length<=0||void 0===arguments[0]?1:arguments[0],e=t*Math.PI;return function(t){return 1-Math.pow(Math.cos(t*Math.PI/2),3)*Math.cos(t*e)}}},{key:"back",value:function(t){return void 0===t&&(t=1.70158),function(e){return e*e*((t+1)*e-t)}}},{key:"bounce",value:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?(t-=1.5/2.75,7.5625*t*t+.75):t<2.5/2.75?(t-=2.25/2.75,7.5625*t*t+.9375):(t-=2.625/2.75,7.5625*t*t+.984375)}},{key:"bezier",value:function(t,e,n,r){return i(t,e,n,r)}},{key:"in",value:function(t){return t}},{key:"out",value:function(t){return function(e){return 1-t(1-e)}}},{key:"inOut",value:function(t){return function(e){return e<.5?t(2*e)/2:1-t(2*(1-e))/2}}}]),t}(),s=a.bezier(.42,0,1,1);t.exports=a},function(t,e){function n(t,e){return 1-3*e+3*t}function r(t,e){return 3*e-6*t}function o(t){return 3*t}function i(t,e,i){return((n(e,i)*t+r(e,i))*t+o(e))*t}function a(t,e,i){return 3*n(e,i)*t*t+2*r(e,i)*t+o(e)}function s(t,e,n,r,o){var a,s,u=0;do s=e+(n-e)/2,a=i(s,r,o)-t,a>0?n=s:e=s;while(Math.abs(a)>p&&++u=c?u(e,f,t,n):0===v?f:s(e,r,r+d,t,n)}if(!(0<=t&&t<=1&&0<=n&&n<=1))throw new Error("bezier x values must be in [0, 1] range");var l=v?new Float32Array(h):new Array(h);if(t!==e||n!==r)for(var p=0;pthis._lastTime+o&&(i=this._lastTime+o);for(var a=1,s=Math.floor((i-this._lastTime)/a),u=0;uthis._toValue:t18&&t<=44?l(t):c(t)}var f=o(t/1.7,0,20);f=i(f,0,.8);var h=o(e/1.7,0,20),d=i(h,.5,200),v=s(f,p(d),.01);return{tension:n(d),friction:r(v)}}t.exports={fromOrigamiTensionAndFriction:o,fromBouncinessAndSpeed:i}},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function a(t){var e="node",n=function(n){function a(){return r(this,a),o(this,Object.getPrototypeOf(a).apply(this,arguments))}return i(a,n),u(a,[{key:"componentWillUnmount",value:function(){this._propsAnimated&&this._propsAnimated.__detach()}},{key:"setNativeProps",value:function(t){var n=p.current(this.refs[e],t);n===!1&&this.forceUpdate()}},{key:"componentWillMount",value:function(){this.attachProps(this.props)}},{key:"attachProps",value:function(t){var n=this,r=this._propsAnimated,o=function(){var t=p.current(n.refs[e],n._propsAnimated.__getAnimatedValue());t===!1&&n.forceUpdate()};this._propsAnimated=new c(t,o),r&&r.__detach()}},{key:"componentWillReceiveProps",value:function(t){this.attachProps(t)}},{key:"render",value:function(){return l.createElement(t,s({},this._propsAnimated.__getValue(),{ref:e}))}}]),a}(l.Component);return n.propTypes={style:function(e,n,r){!t.propTypes}},n}var s=Object.assign||function(t){for(var e=1;em&&this._cancelLongPressDelayTimeout()}var y=p>e.left-o&&h>e.top-a&&p0,o=n&&n.length>0;return!r&&o?n[0]:r?e[0]:t}};t.exports=n},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}Object.defineProperty(e,"__esModule",{value:!0}),n(281);var o=n(286),i=r(o),a=i["default"].currentCentroidXOfTouchesChangedAfter,s=i["default"].currentCentroidYOfTouchesChangedAfter,u=i["default"].previousCentroidXOfTouchesChangedAfter,l=i["default"].previousCentroidYOfTouchesChangedAfter,c=i["default"].currentCentroidX,p=i["default"].currentCentroidY,f={_initializeGestureState:function(t){t.moveX=0,t.moveY=0,t.x0=0,t.y0=0,t.dx=0,t.dy=0,t.vx=0,t.vy=0,t.numberActiveTouches=0,t._accountsForMovesUpTo=0},_updateGestureStateOnMove:function(t,e){t.numberActiveTouches=e.numberActiveTouches,t.moveX=a(e,t._accountsForMovesUpTo),t.moveY=s(e,t._accountsForMovesUpTo);var n=t._accountsForMovesUpTo,r=u(e,n),o=a(e,n),i=l(e,n),c=s(e,n),p=t.dx+(o-r),f=t.dy+(c-i),h=e.mostRecentTimeStamp-t._accountsForMovesUpTo;t.vx=(p-t.dx)/h,t.vy=(f-t.dy)/h,t.dx=p,t.dy=f,t._accountsForMovesUpTo=e.mostRecentTimeStamp},create:function(t){var e={stateID:Math.random()};f._initializeGestureState(e);var n={onStartShouldSetResponder:function(n){return void 0!==t.onStartShouldSetPanResponder&&t.onStartShouldSetPanResponder(n,e)},onMoveShouldSetResponder:function(n){return void 0!==t.onMoveShouldSetPanResponder&&t.onMoveShouldSetPanResponder(n,e)},onStartShouldSetResponderCapture:function(n){return!!n.nativeEvent.touches&&(1===n.nativeEvent.touches.length&&f._initializeGestureState(e),e.numberActiveTouches=n.touchHistory.numberActiveTouches,void 0!==t.onStartShouldSetPanResponderCapture&&t.onStartShouldSetPanResponderCapture(n,e))},onMoveShouldSetResponderCapture:function(n){var r=n.touchHistory;return e._accountsForMovesUpTo!==r.mostRecentTimeStamp&&(f._updateGestureStateOnMove(e,r),!!t.onMoveShouldSetPanResponderCapture&&t.onMoveShouldSetPanResponderCapture(n,e))},onResponderGrant:function(n){return e.x0=c(n.touchHistory),e.y0=p(n.touchHistory),e.dx=0,e.dy=0,t.onPanResponderGrant&&t.onPanResponderGrant(n,e),void 0===t.onShouldBlockNativeResponder||t.onShouldBlockNativeResponder()},onResponderReject:function(n){t.onPanResponderReject&&t.onPanResponderReject(n,e)},onResponderRelease:function(n){t.onPanResponderRelease&&t.onPanResponderRelease(n,e),f._initializeGestureState(e)},onResponderStart:function(n){var r=n.touchHistory;e.numberActiveTouches=r.numberActiveTouches,t.onPanResponderStart&&t.onPanResponderStart(n,e)},onResponderMove:function(n){var r=n.touchHistory;e._accountsForMovesUpTo!==r.mostRecentTimeStamp&&(f._updateGestureStateOnMove(e,r),t.onPanResponderMove&&t.onPanResponderMove(n,e))},onResponderEnd:function(n){var r=n.touchHistory;e.numberActiveTouches=r.numberActiveTouches,t.onPanResponderEnd&&t.onPanResponderEnd(n,e)},onResponderTerminate:function(n){t.onPanResponderTerminate&&t.onPanResponderTerminate(n,e),f._initializeGestureState(e)},onResponderTerminationRequest:function(n){return void 0===t.onPanResponderTerminationRequest||t.onPanResponderTerminationRequest(n,e)}};return{panHandlers:n}}};e["default"]=f},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}function o(t){return t&&Array.prototype.slice.call(t)||[]}function i(t){return t>20?t%20:t}var a=n(53),s=r(a),u=n(282),l=r(u),c=n(50),p=r(c),f=n(284),h=r(f),d=p["default"].topLevelTypes,v=l["default"].eventTypes;v.startShouldSetResponder.dependencies=[d.topTouchStart],v.scrollShouldSetResponder.dependencies=[d.topScroll],v.selectionChangeShouldSetResponder.dependencies=[d.topSelectionChange],v.moveShouldSetResponder.dependencies=[d.topTouchMove],["responderStart","responderMove","responderEnd","responderRelease","responderTerminationRequest","responderGrant","responderReject","responderTerminate"].forEach(function(t){var e=void 0;e="ontouchstart"in window?[d.topTouchStart,d.topTouchCancel,d.topTouchEnd,d.topTouchMove]:[d.topMouseDown,d.topMouseUp],v[t].dependencies=e});var y=function(t,e){var n=e.timestamp||e.timeStamp;return o(t).map(function(t){return{clientX:t.clientX,clientY:t.clientY,force:t.force,pageX:t.pageX,pageY:t.pageY,radiusX:t.radiusX,radiusY:t.radiusY,rotationAngle:t.rotationAngle,screenX:t.screenX,screenY:t.screenY,target:t.target,timestamp:n,identifier:i(t.identifier)}})},_=h["default"].recordTouchTrack;h["default"].recordTouchTrack=function(t,e){_.call(h["default"],t,{changedTouches:y(e.changedTouches,e),touches:y(e.touches,e)})},s["default"].injectEventPluginsByName({ResponderEventPlugin:l["default"]})},function(t,e,n){"use strict";function r(t,e,n,r){var o=h(t)?E.startShouldSetResponder:d(t)?E.moveShouldSetResponder:t===a.topLevelTypes.topSelectionChange?E.selectionChangeShouldSetResponder:E.scrollShouldSetResponder,i=g?s.getLowestCommonAncestor(g,e):e,f=i===g,v=l.getPooled(o,i,n,r);v.touchHistory=c.touchHistory,f?u.accumulateTwoPhaseDispatchesSkipTarget(v):u.accumulateTwoPhaseDispatches(v);var b=m(v);if(v.isPersistent()||v.constructor.release(v),!b||b===g)return null;var S,T=l.getPooled(E.responderGrant,b,n,r);T.touchHistory=c.touchHistory,u.accumulateDirectDispatches(T);var R=y(T)===!0;if(g){var C=l.getPooled(E.responderTerminationRequest,g,n,r);C.touchHistory=c.touchHistory,u.accumulateDirectDispatches(C);var P=!_(C)||y(C);if(C.isPersistent()||C.constructor.release(C),P){var O=l.getPooled(E.responderTerminate,g,n,r);O.touchHistory=c.touchHistory,u.accumulateDirectDispatches(O),S=p(S,[T,O]),w(b,R)}else{var x=l.getPooled(E.responderReject,b,n,r);x.touchHistory=c.touchHistory,u.accumulateDirectDispatches(x),S=p(S,x)}}else S=p(S,T),w(b,R);return S}function o(t,e,n){return e&&(t===a.topLevelTypes.topScroll&&!n.responderIgnoreScroll||b>0&&t===a.topLevelTypes.topSelectionChange||h(t)||d(t))}function i(t){var e=t.touches;if(!e||0===e.length)return!0;for(var n=0;n=0))return console.error("Ended a touch event which was not counted in `trackedTouchCount`."),null;b-=1}c.recordTouchTrack(t,n);var f=o(t,e,n)?r(t,e,n,s):null,y=g&&h(t),_=g&&d(t),m=g&&v(t),R=y?E.responderStart:_?E.responderMove:m?E.responderEnd:null;if(R){var C=l.getPooled(R,g,n,s);C.touchHistory=c.touchHistory,u.accumulateDirectDispatches(C),f=p(f,C)}var P=g&&t===a.topLevelTypes.topTouchCancel,O=g&&!P&&v(t)&&i(n),x=P?E.responderTerminate:O?E.responderRelease:null;if(x){var k=l.getPooled(x,g,n,s);k.touchHistory=c.touchHistory,u.accumulateDirectDispatches(k),f=p(f,k),w(null)}var I=c.touchHistory.numberActiveTouches;return T.GlobalInteractionHandler&&I!==S&&T.GlobalInteractionHandler.onChange(I),S=I,f},GlobalResponderHandler:null,GlobalInteractionHandler:null,injection:{injectGlobalResponderHandler:function(t){T.GlobalResponderHandler=t},injectGlobalInteractionHandler:function(t){T.GlobalInteractionHandler=t}}};t.exports=T},function(t,e,n){"use strict";function r(t,e,n,r){return o.call(this,t,e,n,r)}var o=n(62),i={touchHistory:function(t){return null}};o.augmentClass(r,i),t.exports=r},function(t,e,n){"use strict";function r(t){return t.timeStamp||t.timestamp}function o(t){return{touchActive:!0,startPageX:t.pageX,startPageY:t.pageY,startTimeStamp:r(t),currentPageX:t.pageX,currentPageY:t.pageY,currentTimeStamp:r(t),previousPageX:t.pageX,previousPageY:t.pageY,previousTimeStamp:r(t)}}function i(t,e){t.touchActive=!0,t.startPageX=e.pageX,t.startPageY=e.pageY,t.startTimeStamp=r(e),t.currentPageX=e.pageX,t.currentPageY=e.pageY,t.currentTimeStamp=r(e),t.previousPageX=e.pageX,t.previousPageY=e.pageY,t.previousTimeStamp=r(e)}function a(t){var e=t.identifier;return null==e?f("138"):void 0,e}function s(t){var e=a(t),n=m[e];n?i(n,t):m[e]=o(t),g.mostRecentTimeStamp=r(t)}function u(t){var e=m[a(t)];e?(e.touchActive=!0,e.previousPageX=e.currentPageX,e.previousPageY=e.currentPageY,e.previousTimeStamp=e.currentTimeStamp,e.currentPageX=t.pageX,e.currentPageY=t.pageY,e.currentTimeStamp=r(t),g.mostRecentTimeStamp=r(t)):console.error("Cannot record touch move without a touch start.\nTouch Move: %s\n","Touch Bank: %s",c(t),p())}function l(t){var e=m[a(t)];e?(e.touchActive=!1,e.previousPageX=e.currentPageX,e.previousPageY=e.currentPageY,e.previousTimeStamp=e.currentTimeStamp,e.currentPageX=t.pageX,e.currentPageY=t.pageY,e.currentTimeStamp=r(t),g.mostRecentTimeStamp=r(t)):console.error("Cannot record touch end without a touch start.\nTouch End: %s\n","Touch Bank: %s",c(t),p())}function c(t){return JSON.stringify({identifier:t.identifier,pageX:t.pageX,pageY:t.pageY,timestamp:r(t)})}function p(){var t=JSON.stringify(m.slice(0,_));return m.length>_&&(t+=" (original size: "+m.length+")"),t}var f=n(7),h=n(54),d=(n(8),n(11),h.isEndish),v=h.isMoveish,y=h.isStartish,_=20,m=[],g={touchBank:m,numberActiveTouches:0,indexOfSingleActiveTouch:-1,mostRecentTimeStamp:0},b={recordTouchTrack:function(t,e){if(v(t))e.changedTouches.forEach(u);else if(y(t))e.changedTouches.forEach(s),g.numberActiveTouches=e.touches.length,1===g.numberActiveTouches&&(g.indexOfSingleActiveTouch=e.touches[0].identifier);else if(d(t)&&(e.changedTouches.forEach(l),g.numberActiveTouches=e.touches.length,1===g.numberActiveTouches)){for(var n=0;ne&&(a+=o&&r?u.currentPageX:o&&!r?u.currentPageY:!o&&r?u.previousPageX:u.previousPageY,s=1);else for(var l=0;l=e){var p=void 0;p=o&&r?c.currentPageX:o&&!r?c.currentPageY:!o&&r?c.previousPageX:c.previousPageY,a+=p,s++}}return s>0?a/s:n.noCentroid},currentCentroidXOfTouchesChangedAfter:function(t,e){return n.centroidDimension(t,e,!0,!0)},currentCentroidYOfTouchesChangedAfter:function(t,e){return n.centroidDimension(t,e,!1,!0)},previousCentroidXOfTouchesChangedAfter:function(t,e){return n.centroidDimension(t,e,!0,!1)},previousCentroidYOfTouchesChangedAfter:function(t,e){return n.centroidDimension(t,e,!1,!1)},currentCentroidX:function(t){return n.centroidDimension(t,0,!0,!0)},currentCentroidY:function(t){return n.centroidDimension(t,0,!1,!0)},noCentroid:-1};e["default"]=n},function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var n=0;n=0||Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var u=Object.assign||function(t){for(var e=1;e=this._prevRenderedRowsCount&&e.sectionHeaderShouldUpdate(l);t.push(p["default"].createElement(S["default"],{key:"s_"+c,shouldUpdate:!!h,render:this.props.renderSectionHeader.bind(null,e.getSectionHeaderData(l),c)})),i.push(u++)}for(var d=0;d=this._prevRenderedRowsCount&&e.rowShouldUpdate(l,d),m=p["default"].createElement(S["default"],{key:"r_"+y,shouldUpdate:!!_,render:this.props.renderRow.bind(null,e.getRowData(l,d),c,v,this.onRowHighlighted)});if(t.push(m),u++,this.props.renderSeparator&&(d!==f.length-1||l===n.length-1)){var g=this.state.highlightedRow.sectionID===c&&(this.state.highlightedRow.rowID===v||this.state.highlightedRow.rowID===f[d+1]),b=this.props.renderSeparator(c,v,g);b&&(t.push(b),u++)}if(++r===this.state.curRenderedRowsCount)break}if(r>=this.state.curRenderedRowsCount)break}}var w=this.props,E=w.renderScrollComponent,T=o(w,["renderScrollComponent"]);return T.scrollEventThrottle||(T.scrollEventThrottle=D),void 0===T.removeClippedSubviews&&(T.removeClippedSubviews=!0),(0,P["default"])(T,{onScroll:this._onScroll,stickyHeaderIndices:this.props.stickyHeaderIndices.concat(i),onKeyboardWillShow:void 0,onKeyboardWillHide:void 0,onKeyboardDidShow:void 0,onKeyboardDidHide:void 0}),p["default"].cloneElement(E(T),{ref:N,onContentSizeChange:this._onContentSizeChange,onLayout:this._onLayout},a,t,s)}},{key:"_measureAndUpdateScrollProps",value:function(){var t=this.getScrollResponder();!t||!t.getInnerViewNode}},{key:"_onContentSizeChange",value:function(t,e){var n=this.props.horizontal?t:e;n!==this.scrollProperties.contentLength&&(this.scrollProperties.contentLength=n,this._updateVisibleRows(),this._renderMoreRowsIfNeeded()),this.props.onContentSizeChange&&this.props.onContentSizeChange(t,e)}},{key:"_onLayout",value:function(t){var e=t.nativeEvent.layout,n=e.width,r=e.height,o=this.props.horizontal?n:r;o!==this.scrollProperties.visibleLength&&(this.scrollProperties.visibleLength=o,this._updateVisibleRows(),this._renderMoreRowsIfNeeded()),this.props.onLayout&&this.props.onLayout(t)}},{key:"_maybeCallOnEndReached",value:function(t){return!!(this.props.onEndReached&&this.scrollProperties.contentLength!==this._sentEndForContentLength&&this._getDistanceFromEnd(this.scrollProperties)this.props.onEndReachedThreshold&&(this._sentEndForContentLength=null),this.props.onScroll&&this.props.onScroll(t)}}]),e}(c.Component);j.DataSource=v["default"],j.propTypes=u({},_["default"].propTypes,{dataSource:c.PropTypes.instanceOf(v["default"]).isRequired,renderSeparator:c.PropTypes.func,renderRow:c.PropTypes.func.isRequired,initialListSize:c.PropTypes.number,onEndReached:c.PropTypes.func,onEndReachedThreshold:c.PropTypes.number,pageSize:c.PropTypes.number,renderFooter:c.PropTypes.func,renderHeader:c.PropTypes.func,renderSectionHeader:c.PropTypes.func,renderScrollComponent:p["default"].PropTypes.func.isRequired,scrollRenderAheadDistance:p["default"].PropTypes.number,onChangeVisibleRows:p["default"].PropTypes.func,removeClippedSubviews:p["default"].PropTypes.bool,stickyHeaderIndices:c.PropTypes.arrayOf(c.PropTypes.number)}),j.defaultProps={initialListSize:I,pageSize:k,renderScrollComponent:function(t){return p["default"].createElement(_["default"],t)},scrollRenderAheadDistance:M,onEndReachedThreshold:A,stickyHeaderIndices:[]},R["default"].onClass(j,g["default"].Mixin),R["default"].onClass(j,E["default"]),(0,x["default"])(j),j.isReactNativeComponent=!0,e["default"]=j},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e,n){return t[e][n]}function a(t,e){return t[e]}function s(t){for(var e=0,n=0;n=this.rowIdentities[n].length))return this.rowIdentities[n][e];e-=this.rowIdentities[n].length}return null}},{key:"getSectionIDForFlatIndex",value:function(t){for(var e=t,n=0;n=this.rowIdentities[n].length))return this.sectionIdentities[n];e-=this.rowIdentities[n].length}return null}},{key:"getSectionLengths",value:function(){for(var t=[],e=0;e=0||Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var u=Object.assign||function(t){for(var e=1;e=1,"Navigator requires props.initialRoute or props.initialRouteStack.");var n=e.length-1;return this.props.initialRoute&&(n=e.indexOf(this.props.initialRoute),(0,V["default"])(n!==-1,"initialRoute is not in initialRouteStack.")),{sceneConfigStack:e.map(function(e){return t.props.configureScene(e)}),routeStack:e,presentedIndex:n,transitionFromIndex:null,activeGesture:null,pendingGestureProgress:null,transitionQueue:[]}},componentWillMount:function(){var t=this;this.__defineGetter__("navigationContext",this._getNavigationContext),this._subRouteFocus=[],this.parentNavigator=this.props.navigator,this._handlers={},this.springSystem=new H["default"].SpringSystem,this.spring=this.springSystem.createSpring(),this.spring.setRestSpeedThreshold(.05),this.spring.setCurrentValue(0).setAtRest(),this.spring.addListener({onSpringEndStateChange:function(){t._interactionHandle||(t._interactionHandle=t.createInteractionHandle())},onSpringUpdate:function(){t._handleSpringUpdate()},onSpringAtRest:function(){t._completeTransition()}}),this.panGesture=T["default"].create({onMoveShouldSetPanResponder:this._handleMoveShouldSetPanResponder,onPanResponderGrant:this._handlePanResponderGrant,onPanResponderRelease:this._handlePanResponderRelease,onPanResponderMove:this._handlePanResponderMove,onPanResponderTerminate:this._handlePanResponderTerminate}),this._interactionHandle=null,this._emitWillFocus(this.state.routeStack[this.state.presentedIndex]),this.hashChanged=!1},componentDidMount:function(){this._handleSpringUpdate(),this._emitDidFocus(this.state.routeStack[this.state.presentedIndex]),W=z.listen(function(t){var e=0;t.pathname.indexOf("/scene_")!=-1&&(e=parseInt(t.pathname.replace("/scene_",""))),e=this.state.routeStack.length-1&&"jumpForward"===t;return n||e},_handlePanResponderGrant:function(t,e){(0,V["default"])(this._expectingGestureGrant,"Responder granted unexpectedly."),this._attachGesture(this._expectingGestureGrant),this._onAnimationStart(),this._expectingGestureGrant=null},_deltaForGestureAction:function(t){switch(t){case"pop":case"jumpBack":return-1;case"jumpForward":return 1;default:return void(0,V["default"])(!1,"Unsupported gesture action "+t)}},_handlePanResponderRelease:function(t,e){var n=this,r=this.state.sceneConfigStack[this.state.presentedIndex],o=this.state.activeGesture;if(o){var i=r.gestures[o],a=this.state.presentedIndex+this._deltaForGestureAction(this.state.activeGesture);if(0===this.spring.getCurrentValue())return this.spring.setCurrentValue(0).setAtRest(),void this._completeTransition();var s="top-to-bottom"===i.direction||"bottom-to-top"===i.direction,u="right-to-left"===i.direction||"bottom-to-top"===i.direction,l=void 0,c=void 0;s?(l=u?-e.vy:e.vy,c=u?-e.dy:e.dy):(l=u?-e.vx:e.vx,c=u?-e.dx:e.dx);var p=(0,D["default"])(-10,l,10);if(Math.abs(l)i.fullDistance*i.stillCompletionRatio;p=f?i.snapVelocity:-i.snapVelocity}if(p<0||this._doesGestureOverswipe(o)){if(null==this.state.transitionFromIndex){var h=this.state.presentedIndex;this.state.presentedIndex=a,this._transitionTo(h,-p,1-this.spring.getCurrentValue())}}else this._emitWillFocus(this.state.routeStack[a]),this._transitionTo(a,p,null,function(){"pop"===o&&n._cleanScenesPastIndex(a)});this._detachGesture()}},_handlePanResponderTerminate:function(t,e){if(null!=this.state.activeGesture){var n=this.state.presentedIndex+this._deltaForGestureAction(this.state.activeGesture);this._detachGesture();var r=this.state.presentedIndex;this.state.presentedIndex=n,this._transitionTo(r,null,1-this.spring.getCurrentValue())}},_attachGesture:function(t){this.state.activeGesture=t;var e=this.state.presentedIndex+this._deltaForGestureAction(this.state.activeGesture);this._enableScene(e)},_detachGesture:function(){this.state.activeGesture=null,this.state.pendingGestureProgress=null,this._hideScenes()},_handlePanResponderMove:function(t,e){var n=this.state.sceneConfigStack[this.state.presentedIndex];if(this.state.activeGesture){var r=n.gestures[this.state.activeGesture];return this._moveAttachedGesture(r,e)}var o=this._matchGestureAction(Q,n.gestures,e);o&&this._attachGesture(o)},_moveAttachedGesture:function(t,e){var n="top-to-bottom"===t.direction||"bottom-to-top"===t.direction,r="right-to-left"===t.direction||"bottom-to-top"===t.direction,o=n?e.dy:e.dx;o=r?-o:o;var i=t.gestureDetectMovement,a=(o-i)/(t.fullDistance-i);if(a<0&&t.isDetachable){var s=this.state.presentedIndex+this._deltaForGestureAction(this.state.activeGesture);return this._transitionBetween(this.state.presentedIndex,s,0),this._detachGesture(),void(null!=this.state.pendingGestureProgress&&this.spring.setCurrentValue(0))}if(this._doesGestureOverswipe(this.state.activeGesture)){var u=t.overswipe.frictionConstant,l=t.overswipe.frictionByDistance,c=1/(u+Math.abs(a)*l);a*=c}a=(0,D["default"])(0,a,1),null!=this.state.transitionFromIndex?this.state.pendingGestureProgress=a:this.state.pendingGestureProgress?this.spring.setEndValue(a):this.spring.setCurrentValue(a)},_matchGestureAction:function(t,e,n){var r=this;if(!e)return null;var o=null;return t.some(function(t,i){var a=e[t];if(a){if(null==a.overswipe&&r._doesGestureOverswipe(t))return!1;var s="top-to-bottom"===a.direction||"bottom-to-top"===a.direction,u="right-to-left"===a.direction||"bottom-to-top"===a.direction,l=s?n.moveY:n.moveX,c=s?n.dy:n.dx,p=s?n.dx:n.dy,f=a.edgeHitWidth;u&&(l=-l,c=-c,p=-p,f=s?-(q-f):-(G-f));var h=null==a.edgeHitWidth||l=a.gestureDetectMovement;if(!d)return!1;var v=Math.abs(c)>Math.abs(p)*a.directionRatio;return v?(o=t,!0):void(r._eligibleGestures=r._eligibleGestures.slice().splice(i,1))}}),o},_transitionSceneStyle:function(t,e,n,r){var o=this.refs["scene_"+r];if(null!==o&&void 0!==o){var i=t=0&&t>=0&&r.updateProgress(n,t,e)},_handleResponderTerminationRequest:function(){return!1},_getDestIndexWithinBounds:function(t){var e=this.state.presentedIndex,n=e+t;(0,V["default"])(n>=0,"Cannot jump before the first route.");var r=this.state.routeStack.length-1;return(0,V["default"])(r>=n,"Cannot jump past the last route."),n},_jumpN:function(t){var e=this._getDestIndexWithinBounds(t);return this._enableScene(e),this._emitWillFocus(this.state.routeStack[e]),this._transitionTo(e),this.hashChanged?void(t<0&&(Y=Math.max(Y+t,0))):void(t>0?z.pushState({index:e},"/scene_"+i(this.state.routeStack[e])):z.go(t))},jumpTo:function(t){var e=this.state.routeStack.indexOf(t);(0,V["default"])(e!==-1,"Cannot jump to route that is not in the route stack"),this._jumpN(e-this.state.presentedIndex)},jumpForward:function(){this._jumpN(1)},jumpBack:function(){this._jumpN(-1)},push:function(t){var e=this;(0,V["default"])(!!t,"Must supply route to push");var n=this.state.presentedIndex+1,r=this.state.routeStack.slice(0,n),o=this.state.sceneConfigStack.slice(0,n),a=r.concat([t]),s=a.length-1,u=o.concat([this.props.configureScene(t)]);this._emitWillFocus(a[s]),this.setState({routeStack:a,sceneConfigStack:u},function(){z.pushState({index:s},"/scene_"+i(t)),e._enableScene(s),e._transitionTo(s)})},_popN:function(t){var e=this;if(0!==t){(0,V["default"])(this.state.presentedIndex-t>=0,"Cannot pop below zero");var n=this.state.presentedIndex-t;this._enableScene(n),this._emitWillFocus(this.state.routeStack[n]),this._transitionTo(n,null,null,function(){z.go(-t),e._cleanScenesPastIndex(n)})}},pop:function(){this.state.transitionQueue.length||this.state.presentedIndex>0&&this._popN(1)},replaceAtIndex:function(t,e,n){var r=this;if((0,V["default"])(!!t,"Must supply route to replace"),e<0&&(e+=this.state.routeStack.length),!(this.state.routeStack.length<=e)){var o=this.state.routeStack.slice(),i=this.state.sceneConfigStack.slice();o[e]=t,i[e]=this.props.configureScene(t),e===this.state.presentedIndex&&this._emitWillFocus(t),this.setState({routeStack:o,sceneConfigStack:i},function(){e===r.state.presentedIndex&&r._emitDidFocus(t),n&&n()})}},replace:function(t){this.replaceAtIndex(t,this.state.presentedIndex)},replacePrevious:function(t){this.replaceAtIndex(t,this.state.presentedIndex-1)},popToTop:function(){this.popToRoute(this.state.routeStack[0])},popToRoute:function(t){var e=this.state.routeStack.indexOf(t);(0,V["default"])(e!==-1,"Calling popToRoute for a route that doesn't exist!");var n=this.state.presentedIndex-e;this._popN(n)},replacePreviousAndPop:function(t){this.state.routeStack.length<2||(this.replacePrevious(t),this.pop())},resetTo:function(t){var e=this;(0,V["default"])(!!t,"Must supply route to push"),this.replaceAtIndex(t,0,function(){e.state.presentedIndex>0&&e._popN(e.state.presentedIndex)})},getCurrentRoutes:function(){return this.state.routeStack.slice()},_cleanScenesPastIndex:function(t){var e=t+1;e=e.length?{value:void 0,done:!0}:(t=r(e,n),this._i+=t.length,{value:t,done:!1})})},function(t,e,n){var r=n(307),o=n(308);t.exports=function(t){return function(e,n){var i,a,s=String(o(e)),u=r(n),l=s.length;return u<0||u>=l?t?"":void 0:(i=s.charCodeAt(u),i<55296||i>56319||u+1===l||(a=s.charCodeAt(u+1))<56320||a>57343?t?s.charAt(u):i:t?s.slice(u,u+2):(i-55296<<10)+(a-56320)+65536)}}},function(t,e){var n=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:n)(t)}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,n){"use strict";var r=n(310),o=n(311),i=n(326),a=n(316),s=n(327),u=n(328),l=n(329),c=n(345),p=n(347),f=n(346)("iterator"),h=!([].keys&&"next"in[].keys()),d="@@iterator",v="keys",y="values",_=function(){return this};t.exports=function(t,e,n,m,g,b,S){l(n,e,m);var w,E,T,R=function(t){if(!h&&t in x)return x[t];switch(t){case v:return function(){return new n(this,t)};case y:return function(){return new n(this,t)}}return function(){return new n(this,t)}},C=e+" Iterator",P=g==y,O=!1,x=t.prototype,k=x[f]||x[d]||g&&x[g],I=k||R(g),M=g?P?R("entries"):I:void 0,A="Array"==e?x.entries||k:k;if(A&&(T=p(A.call(new t)),T!==Object.prototype&&(c(T,C,!0),r||s(T,f)||a(T,f,_))),P&&k&&k.name!==y&&(O=!0,I=function(){return k.call(this)}),r&&!S||!h&&!O&&x[f]||a(x,f,I),u[e]=I,u[C]=_,g)if(w={values:P?I:R(y),keys:b?I:R(v),entries:M},S)for(E in w)E in x||i(x,E,w[E]);else o(o.P+o.F*(h||O),e,w);return w}},function(t,e){t.exports=!0},function(t,e,n){var r=n(312),o=n(313),i=n(314),a=n(316),s="prototype",u=function(t,e,n){var l,c,p,f=t&u.F,h=t&u.G,d=t&u.S,v=t&u.P,y=t&u.B,_=t&u.W,m=h?o:o[e]||(o[e]={}),g=m[s],b=h?r:d?r[e]:(r[e]||{})[s];h&&(n=e);for(l in n)c=!f&&b&&void 0!==b[l],c&&l in m||(p=c?b[l]:n[l],m[l]=h&&"function"!=typeof b[l]?n[l]:y&&c?i(p,r):_&&b[l]==p?function(t){var e=function(e,n,r){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,n)}return new t(e,n,r)}return t.apply(this,arguments)};return e[s]=t[s],e}(p):v&&"function"==typeof p?i(Function.call,p):p,v&&((m.virtual||(m.virtual={}))[l]=p,t&u.R&&g&&!g[l]&&a(g,l,p)))};u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,t.exports=u},function(t,e){var n=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(t,e){var n=t.exports={version:"2.2.2"};"number"==typeof __e&&(__e=n)},function(t,e,n){var r=n(315);t.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,o){return t.call(e,n,r,o)}}return function(){return t.apply(e,arguments)}}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,n){var r=n(317),o=n(325);t.exports=n(321)?function(t,e,n){return r.f(t,e,o(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e,n){var r=n(318),o=n(320),i=n(324),a=Object.defineProperty;e.f=n(321)?Object.defineProperty:function(t,e,n){if(r(t),e=i(e,!0),r(n),o)try{return a(t,e,n)}catch(s){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},function(t,e,n){var r=n(319);t.exports=function(t){if(!r(t))throw TypeError(t+" is not an object!");return t}},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,n){t.exports=!n(321)&&!n(322)(function(){return 7!=Object.defineProperty(n(323)("div"),"a",{get:function(){return 7}}).a})},function(t,e,n){t.exports=!n(322)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e){t.exports=function(t){try{return!!t()}catch(e){return!0}}},function(t,e,n){var r=n(319),o=n(312).document,i=r(o)&&r(o.createElement);t.exports=function(t){return i?o.createElement(t):{}}},function(t,e,n){var r=n(319);t.exports=function(t,e){if(!r(t))return t;var n,o;if(e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;if("function"==typeof(n=t.valueOf)&&!r(o=n.call(t)))return o;if(!e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;throw TypeError("Can't convert object to primitive value")}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,n){t.exports=n(316)},function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},function(t,e){t.exports={}},function(t,e,n){"use strict";var r=n(330),o=n(325),i=n(345),a={};n(316)(a,n(346)("iterator"),function(){return this}),t.exports=function(t,e,n){t.prototype=r(a,{next:o(1,n)}),i(t,e+" Iterator")}},function(t,e,n){var r=n(318),o=n(331),i=n(343),a=n(340)("IE_PROTO"),s=function(){},u="prototype",l=function(){var t,e=n(323)("iframe"),r=i.length,o=">";for(e.style.display="none",n(344).appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write("";var s=u.firstChild;o=u.removeChild(s)}else o=t.is?i.createElement(e,{is:t.is}):i.createElement(e);else o=i.createElementNS(a,e);return o},setInitialProperties:function(e,t,n,r){var o,i=mi(t,n);switch(t){case"iframe":case"object":Po.trapBubbledEvent("topLoad","load",e),o=n;break;case"video":case"audio":for(var a in Vi)Vi.hasOwnProperty(a)&&Po.trapBubbledEvent(a,Vi[a],e);o=n;break;case"source":Po.trapBubbledEvent("topError","error",e),o=n;break;case"img":case"image":Po.trapBubbledEvent("topError","error",e),Po.trapBubbledEvent("topLoad","load",e),o=n;break;case"form":Po.trapBubbledEvent("topReset","reset",e),Po.trapBubbledEvent("topSubmit","submit",e),o=n;break;case"details":Po.trapBubbledEvent("topToggle","toggle",e),o=n;break;case"input":ti.initWrapperState(e,n),o=ti.getHostProps(e,n),Po.trapBubbledEvent("topInvalid","invalid",e),me(r,"onChange");break;case"option":ri.validateProps(e,n),o=ri.getHostProps(e,n);break;case"select":ii.initWrapperState(e,n),o=ii.getHostProps(e,n),Po.trapBubbledEvent("topInvalid","invalid",e),me(r,"onChange");break;case"textarea":ui.initWrapperState(e,n),o=ui.getHostProps(e,n),Po.trapBubbledEvent("topInvalid","invalid",e),me(r,"onChange");break;default:o=n}switch(hi(t,o,Pi),_e(e,r,o,i),t){case"input":yi.track(e),ti.postMountWrapper(e,n);break;case"textarea":yi.track(e),ui.postMountWrapper(e,n);break;case"option":ri.postMountWrapper(e,n);break;case"select":ii.postMountWrapper(e,n);break;default:"function"==typeof o.onClick&&ge(e)}},diffProperties:function(e,t,n,r,o){var i,a,u=null;switch(t){case"input":i=ti.getHostProps(e,n),a=ti.getHostProps(e,r),u=[];break;case"option":i=ri.getHostProps(e,n),a=ri.getHostProps(e,r),u=[];break;case"select":i=ii.getHostProps(e,n),a=ii.getHostProps(e,r),u=[];break;case"textarea":i=ui.getHostProps(e,n),a=ui.getHostProps(e,r),u=[];break;default:i=n,a=r,"function"!=typeof i.onClick&&"function"==typeof a.onClick&&ge(e)}hi(t,a,Pi);var s,l,c=null;for(s in i)if(!a.hasOwnProperty(s)&&i.hasOwnProperty(s)&&null!=i[s])if(s===Ni){var f=i[s];for(l in f)f.hasOwnProperty(l)&&(c||(c={}),c[l]="")}else s===Mi||s===ji||s===Ai||(Ii.hasOwnProperty(s)?u||(u=[]):(u=u||[]).push(s,null));for(s in a){var p=a[s],d=null!=i?i[s]:void 0;if(a.hasOwnProperty(s)&&p!==d&&(null!=p||null!=d))if(s===Ni)if(d){for(l in d)!d.hasOwnProperty(l)||p&&p.hasOwnProperty(l)||(c||(c={}),c[l]="");for(l in p)p.hasOwnProperty(l)&&d[l]!==p[l]&&(c||(c={}),c[l]=p[l])}else c||(u||(u=[]),u.push(s,c)),c=p;else if(s===Mi){var h=p?p[Di]:void 0,v=d?d[Di]:void 0;null!=h&&v!==h&&(u=u||[]).push(s,""+h)}else s===ji?d===p||"string"!=typeof p&&"number"!=typeof p||(u=u||[]).push(s,""+p):s===Ai||(Ii.hasOwnProperty(s)?(p&&me(o,s),u||d===p||(u=[])):(u=u||[]).push(s,p))}return c&&(u=u||[]).push(Ni,c),u},updateProperties:function(e,t,n,r,o){switch(be(e,t,mi(n,r),mi(n,o)),n){case"input":ti.updateWrapper(e,o),yi.updateValueIfChanged(e);break;case"textarea":ui.updateWrapper(e,o);break;case"select":ii.postUpdateWrapper(e,o)}},diffHydratedProperties:function(e,t,n,r){switch(t){case"iframe":case"object":Po.trapBubbledEvent("topLoad","load",e);break;case"video":case"audio":for(var o in Vi)Vi.hasOwnProperty(o)&&Po.trapBubbledEvent(o,Vi[o],e);break;case"source":Po.trapBubbledEvent("topError","error",e);break;case"img":case"image":Po.trapBubbledEvent("topError","error",e),Po.trapBubbledEvent("topLoad","load",e);break;case"form":Po.trapBubbledEvent("topReset","reset",e),Po.trapBubbledEvent("topSubmit","submit",e);break;case"details":Po.trapBubbledEvent("topToggle","toggle",e);break;case"input":ti.initWrapperState(e,n),Po.trapBubbledEvent("topInvalid","invalid",e),me(r,"onChange");break;case"option":ri.validateProps(e,n);break;case"select":ii.initWrapperState(e,n),Po.trapBubbledEvent("topInvalid","invalid",e),me(r,"onChange");break;case"textarea":ui.initWrapperState(e,n),Po.trapBubbledEvent("topInvalid","invalid",e),me(r,"onChange")}hi(t,n,Pi);var i=null;for(var a in n)if(n.hasOwnProperty(a)){var u=n[a];a===ji?"string"==typeof u?e.textContent!==u&&(i=[ji,u]):"number"==typeof u&&e.textContent!==""+u&&(i=[ji,""+u]):Ii.hasOwnProperty(a)&&u&&me(r,a)}switch(t){case"input":yi.track(e),ti.postMountWrapper(e,n);break;case"textarea":yi.track(e),ui.postMountWrapper(e,n);break;case"select":case"option":break;default:"function"==typeof n.onClick&&ge(e)}return i},diffHydratedText:function(e,t){return e.nodeValue!==t},warnForDeletedHydratableElement:function(e,t){},warnForDeletedHydratableText:function(e,t){},warnForInsertedHydratedElement:function(e,t,n){},warnForInsertedHydratedText:function(e,t){},restoreControlledState:function(e,t,n){switch(t){case"input":return void ti.restoreControlledState(e,n);case"textarea":return void ui.restoreControlledState(e,n);case"select":return void ii.restoreControlledState(e,n)}}},zi=Ui,Bi=void 0;if(gn.canUseDOM)if("function"!=typeof requestIdleCallback){var Wi=null,Gi=null,qi=!1,Yi=!1,Ki=0,Xi=33,Qi=33,$i={timeRemaining:"object"==typeof performance&&"function"==typeof performance.now?function(){return Ki-performance.now()}:function(){return Ki-Date.now()}},Ji="__reactIdleCallback$"+Math.random().toString(36).slice(2),Zi=function(e){if(e.source===window&&e.data===Ji){qi=!1;var t=Gi;Gi=null,null!==t&&t($i)}};window.addEventListener("message",Zi,!1);var ea=function(e){Yi=!1;var t=e-Ki+Qi;t-1;)ba[wa]=null,wa--},Pa={createCursor:Sa,isEmpty:Ea,pop:Ca,push:Ra,reset:Ta},Oa=_n||function(e){for(var t=1;te)?e:t},Eu={createWorkInProgress:pu,createHostRootFiber:du,createFiberFromElement:hu,createFiberFromFragment:vu,createFiberFromText:yu,createFiberFromElementType:mu,createFiberFromHostInstanceForDeletion:gu,createFiberFromCoroutine:_u,createFiberFromYield:bu,createFiberFromPortal:wu,largerPriority:Su},Cu=Eu.createHostRootFiber,Ru=function(e){var t=Cu(),n={current:t,containerInfo:e,isScheduled:!1,nextScheduledRoot:null,context:null,pendingContext:null};return t.stateNode=n,n},Tu={createFiberRoot:Ru},Pu=function(e,t,n){return"\n in "+(e||"Unknown")+(t?" (at "+t.fileName.replace(/^.*[\\\/]/,"")+":"+t.lineNumber+")":n?" (created by "+n+")":"")},Ou=Qn.IndeterminateComponent,xu=Qn.FunctionalComponent,ku=Qn.ClassComponent,Iu=Qn.HostComponent,Mu={getStackAddendumByWorkInProgressFiber:qe},Au=function(e){return!0},ju=Au,Nu={injectDialog:function(e){ju!==Au&&xn("172"),"function"!=typeof e&&xn("173"),ju=e}},Du=Ye,Lu={injection:Nu,logCapturedError:Du};"function"==typeof Symbol&&Symbol["for"]?(ta=Symbol["for"]("react.coroutine"),na=Symbol["for"]("react.yield")):(ta=60104,na=60105);var Fu=function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:ta,key:null==r?null:""+r,children:e,handler:t,props:n}},Hu=function(e){return{$$typeof:na,value:e}},Vu=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===ta},Uu=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===na},zu=na,Bu=ta,Wu={createCoroutine:Fu,createYield:Hu,isCoroutine:Vu,isYield:Uu,REACT_YIELD_TYPE:zu,REACT_COROUTINE_TYPE:Bu},Gu="function"==typeof Symbol&&Symbol["for"]&&Symbol["for"]("react.portal")||60106,qu=function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:Gu,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}},Yu=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===Gu},Ku=Gu,Xu={createPortal:qu,isPortal:Yu,REACT_PORTAL_TYPE:Ku},Qu=Wu.REACT_COROUTINE_TYPE,$u=Wu.REACT_YIELD_TYPE,Ju=Xu.REACT_PORTAL_TYPE,Zu=Eu.createWorkInProgress,es=Eu.createFiberFromElement,ts=Eu.createFiberFromFragment,ns=Eu.createFiberFromText,rs=Eu.createFiberFromCoroutine,os=Eu.createFiberFromYield,is=Eu.createFiberFromPortal,as=Array.isArray,us=Qn.FunctionalComponent,ss=Qn.ClassComponent,ls=Qn.HostText,cs=Qn.HostPortal,fs=Qn.CoroutineComponent,ps=Qn.YieldComponent,ds=Qn.Fragment,hs=yr.NoEffect,vs=yr.Placement,ys=yr.Deletion,ms="function"==typeof Symbol&&Symbol.iterator,gs="@@iterator",_s="function"==typeof Symbol&&Symbol["for"]&&Symbol["for"]("react.element")||60103,bs=$e(!0,!0),ws=$e(!1,!0),Ss=$e(!1,!1),Es=function(e,t){if(null!==e&&t.child!==e.child&&xn("153"),null!==t.child){var n=t.child,r=Zu(n,n.pendingWorkPriority);for(r.pendingProps=n.pendingProps,t.child=r,r["return"]=t;null!==n.sibling;)n=n.sibling,r=r.sibling=Zu(n,n.pendingWorkPriority),r.pendingProps=n.pendingProps,r["return"]=t;r.sibling=null}},Cs={reconcileChildFibers:bs,reconcileChildFibersInPlace:ws,mountChildFibersInPlace:Ss,cloneChildFibers:Es},Rs=yr.Update,Ts=Ja.AsyncUpdates,Ps=$a.cacheContext,Os=$a.getMaskedContext,xs=$a.getUnmaskedContext,ks=$a.isContextConsumer,Is=_a.addUpdate,Ms=_a.addReplaceUpdate,As=_a.addForceUpdate,js=_a.beginUpdateQueue,Ns=$a,Ds=Ns.hasContextChanged,Ls=Ir.isMounted,Fs=function(e,t,n,r){function o(e,t,n,r,o,i){if(null===t||null!==e.updateQueue&&e.updateQueue.hasForceUpdate)return!0;var a=e.stateNode,u=e.type;return"function"==typeof a.shouldComponentUpdate?a.shouldComponentUpdate(n,o,i):!(u.prototype&&u.prototype.isPureReactComponent&&Rn(t,n)&&Rn(r,o))}function i(e,t){t.props=e.memoizedProps,t.state=e.memoizedState}function a(e,t){t.updater=p,e.stateNode=t,fr.set(t,e)}function u(e,t){var n=e.type,r=xs(e),o=ks(e),i=o?Os(e,r):Cn,u=new n(t,i);return a(e,u),o&&Ps(e,r,i),u}function s(e,t){var n=t.state;t.componentWillMount(),n!==t.state&&p.enqueueReplaceState(t,t.state,null)}function l(e,t,n,r){var o=t.state;t.componentWillReceiveProps(n,r),t.state!==o&&p.enqueueReplaceState(t,t.state,null)}function c(e,t){var n=e.alternate,r=e.stateNode,o=r.state||null,i=e.pendingProps;i||xn("158");var a=xs(e);if(r.props=i,r.state=o,r.refs=Cn,r.context=Os(e,a),xo.enableAsyncSubtreeAPI&&null!=e.type&&null!=e.type.prototype&&!0===e.type.prototype.unstable_isAsyncReactComponent&&(e.internalContextTag|=Ts),"function"==typeof r.componentWillMount){s(e,r);var u=e.updateQueue;null!==u&&(r.state=js(n,e,u,r,o,i,t))}"function"==typeof r.componentDidMount&&(e.effectTag|=Rs)}function f(e,t,a){var u=t.stateNode;i(t,u);var s=t.memoizedProps,c=t.pendingProps;c||null==(c=s)&&xn("159");var f=u.context,p=xs(t),d=Os(t,p);"function"!=typeof u.componentWillReceiveProps||s===c&&f===d||l(t,u,c,d);var h=t.memoizedState,v=void 0;if(v=null!==t.updateQueue?js(e,t,t.updateQueue,u,h,c,a):h,!(s!==c||h!==v||Ds()||null!==t.updateQueue&&t.updateQueue.hasForceUpdate))return"function"==typeof u.componentDidUpdate&&(s===e.memoizedProps&&h===e.memoizedState||(t.effectTag|=Rs)),!1;var y=o(t,s,c,h,v,d);return y?("function"==typeof u.componentWillUpdate&&u.componentWillUpdate(c,v,d),"function"==typeof u.componentDidUpdate&&(t.effectTag|=Rs)):("function"==typeof u.componentDidUpdate&&(s===e.memoizedProps&&h===e.memoizedState||(t.effectTag|=Rs)),n(t,c),r(t,v)),u.props=c,u.state=v,u.context=d,y}var p={isMounted:Ls,enqueueSetState:function(n,r,o){var i=fr.get(n),a=t(i,!1);o=void 0===o?null:o,Is(i,r,o,a),e(i,a)},enqueueReplaceState:function(n,r,o){var i=fr.get(n),a=t(i,!1);o=void 0===o?null:o,Ms(i,r,o,a),e(i,a)},enqueueForceUpdate:function(n,r){var o=fr.get(n),i=t(o,!1);r=void 0===r?null:r,As(o,r,i),e(o,i)}};return{adoptClassInstance:a,constructClassInstance:u,mountClassInstance:c,updateClassInstance:f}},Hs=Cs.mountChildFibersInPlace,Vs=Cs.reconcileChildFibers,Us=Cs.reconcileChildFibersInPlace,zs=Cs.cloneChildFibers,Bs=_a.beginUpdateQueue,Ws=$a.getMaskedContext,Gs=$a.getUnmaskedContext,qs=$a.hasContextChanged,Ys=$a.pushContextProvider,Ks=$a.pushTopLevelContextObject,Xs=$a.invalidateContextProvider,Qs=Qn.IndeterminateComponent,$s=Qn.FunctionalComponent,Js=Qn.ClassComponent,Zs=Qn.HostRoot,el=Qn.HostComponent,tl=Qn.HostText,nl=Qn.HostPortal,rl=Qn.CoroutineComponent,ol=Qn.CoroutineHandlerPhase,il=Qn.YieldComponent,al=Qn.Fragment,ul=ia.NoWork,sl=ia.OffscreenPriority,ll=yr.PerformedWork,cl=yr.Placement,fl=yr.ContentReset,pl=yr.Err,dl=yr.Ref,hl=hr.ReactCurrentOwner,vl=function(e,t,n,r,o){function i(e,t,n){a(e,t,n,t.pendingWorkPriority)}function a(e,t,n,r){null===e?t.child=Hs(t,t.child,n,r):e.child===t.child?t.child=Vs(t,t.child,n,r):t.child=Us(t,t.child,n,r)}function u(e,t){var n=t.pendingProps;if(qs())null===n&&(n=t.memoizedProps);else if(null===n||t.memoizedProps===n)return g(e,t);return i(e,t,n),b(t,n),t.child}function s(e,t){var n=t.ref;null===n||e&&e.ref===n||(t.effectTag|=dl)}function l(e,t){var n=t.type,r=t.pendingProps,o=t.memoizedProps;if(qs())null===r&&(r=o);else if(null===r||o===r)return g(e,t);var a,u=Gs(t),s=Ws(t,u);return a=n(r,s),t.effectTag|=ll,i(e,t,a),b(t,r),t.child}function c(e,t,n){var r=Ys(t),o=void 0;return null===e?t.stateNode?xn("153"):(j(t,t.pendingProps),N(t,n),o=!0):o=D(e,t,n),f(e,t,o,r)}function f(e,t,n,r){if(s(e,t),!n)return r&&Xs(t,!1),g(e,t);var o=t.stateNode;hl.current=t;var a=void 0;return a=o.render(),t.effectTag|=ll,i(e,t,a),w(t,o.state),b(t,o.props),r&&Xs(t,!0),t.child}function p(e,t,n){var r=t.stateNode;r.pendingContext?Ks(t,r.pendingContext,r.pendingContext!==r.context):r.context&&Ks(t,r.context,!1),O(t,r.containerInfo);var o=t.updateQueue;if(null!==o){var a=t.memoizedState,u=Bs(e,t,o,null,a,null,n);if(a===u)return k(),g(e,t);var s=u.element;return null!==e&&null!==e.child||!x(t)?(k(),i(e,t,s)):(t.effectTag|=cl,t.child=Hs(t,t.child,s,n)),w(t,u),t.child}return k(),g(e,t)}function d(e,t,n){P(t),null===e&&I(t);var r=t.type,o=t.memoizedProps,a=t.pendingProps;null===a&&null===(a=o)&&xn("154");var u=null!==e?e.memoizedProps:null;if(qs());else if(null===a||o===a)return g(e,t);var l=a.children;return C(r,a)?l=null:u&&C(r,u)&&(t.effectTag|=fl),s(e,t),n!==sl&&!R&&T(r,a)?(t.pendingWorkPriority=sl,null):(i(e,t,l),b(t,a),t.child)}function h(e,t){null===e&&I(t);var n=t.pendingProps;return null===n&&(n=t.memoizedProps),b(t,n),null}function v(e,t,n){null!==e&&xn("155");var r,o=t.type,a=t.pendingProps,u=Gs(t),s=Ws(t,u);if(r=o(a,s),t.effectTag|=ll,"object"==typeof r&&null!==r&&"function"==typeof r.render){t.tag=Js;var l=Ys(t);return A(t,r),N(t,n),f(e,t,!0,l)}return t.tag=$s,i(e,t,r),b(t,a),t.child}function y(e,t){var n=t.pendingProps;qs()?null===n&&null===(n=e&&e.memoizedProps)&&xn("154"):null!==n&&t.memoizedProps!==n||(n=t.memoizedProps);var r=n.children,o=t.pendingWorkPriority;return null===e?t.stateNode=Hs(t,t.stateNode,r,o):e.child===t.child?t.stateNode=Vs(t,t.stateNode,r,o):t.stateNode=Us(t,t.stateNode,r,o),b(t,n),t.stateNode}function m(e,t){O(t,t.stateNode.containerInfo);var n=t.pendingWorkPriority,r=t.pendingProps;if(qs())null===r&&null==(r=e&&e.memoizedProps)&&xn("154");else if(null===r||t.memoizedProps===r)return g(e,t);return null===e?(t.child=Us(t,t.child,r,n),b(t,r)):(i(e,t,r),b(t,r)),t.child}function g(e,t){return zs(e,t),t.child}function _(e,t){switch(t.tag){case Js:Ys(t);break;case nl:O(t,t.stateNode.containerInfo)}return null}function b(e,t){e.memoizedProps=t}function w(e,t){e.memoizedState=t}function S(e,t,n){if(t.pendingWorkPriority===ul||t.pendingWorkPriority>n)return _(e,t);switch(t.tag){case Qs:return v(e,t,n);case $s:return l(e,t);case Js:return c(e,t,n);case Zs:return p(e,t,n);case el:return d(e,t,n);case tl:return h(e,t);case ol:t.tag=rl;case rl:return y(e,t);case il:return null;case nl:return m(e,t);case al:return u(e,t);default:xn("156")}}function E(e,t,n){switch(t.tag){case Js:Ys(t);break;case Zs:var r=t.stateNode;O(t,r.containerInfo);break;default:xn("157")}if(t.effectTag|=pl,null===e?t.child=null:t.child!==e.child&&(t.child=e.child),t.pendingWorkPriority===ul||t.pendingWorkPriority>n)return _(e,t);if(t.firstEffect=null,t.lastEffect=null,a(e,t,null,n),t.tag===Js){var o=t.stateNode;t.memoizedProps=o.props,t.memoizedState=o.state}return t.child}var C=e.shouldSetTextContent,R=e.useSyncScheduling,T=e.shouldDeprioritizeSubtree,P=t.pushHostContext,O=t.pushHostContainer,x=n.enterHydrationState,k=n.resetHydrationState,I=n.tryToClaimNextHydratableInstance,M=Fs(r,o,b,w),A=M.adoptClassInstance,j=M.constructClassInstance,N=M.mountClassInstance,D=M.updateClassInstance;return{beginWork:S,beginFailedWork:E}},yl=Cs.reconcileChildFibers,ml=$a.popContextProvider,gl=Qn.IndeterminateComponent,_l=Qn.FunctionalComponent,bl=Qn.ClassComponent,wl=Qn.HostRoot,Sl=Qn.HostComponent,El=Qn.HostText,Cl=Qn.HostPortal,Rl=Qn.CoroutineComponent,Tl=Qn.CoroutineHandlerPhase,Pl=Qn.YieldComponent,Ol=Qn.Fragment,xl=yr.Placement,kl=yr.Ref,Il=yr.Update,Ml=ia.OffscreenPriority,Al=function(e,t,n){function r(e){e.effectTag|=Il}function o(e){e.effectTag|=kl}function i(e,t){var n=t.stateNode;for(n&&(n["return"]=t);null!==n;){if(n.tag===Sl||n.tag===El||n.tag===Cl)xn("164");else if(n.tag===Pl)e.push(n.type);else if(null!==n.child){n.child["return"]=n,n=n.child;continue}for(;null===n.sibling;){if(null===n["return"]||n["return"]===t)return;n=n["return"]}n.sibling["return"]=n["return"],n=n.sibling}}function a(e,t){var n=t.memoizedProps;n||xn("165"),t.tag=Tl;var r=[];i(r,t);var o=n.handler,a=n.props,u=o(a,r),s=null!==e?e.child:null,l=t.pendingWorkPriority;return t.child=yl(t,s,u,l),t.child}function u(e,t){for(var n=t.child;null!==n;){if(n.tag===Sl||n.tag===El)f(e,n.stateNode);else if(n.tag===Cl);else if(null!==n.child){n=n.child;continue}if(n===t)return;for(;null===n.sibling;){if(null===n["return"]||n["return"]===t)return;n=n["return"]}n=n.sibling}}function s(e,t,n){var i=t.pendingProps;switch(null===i?i=t.memoizedProps:t.pendingWorkPriority===Ml&&n!==Ml||(t.pendingProps=null),t.tag){case _l:return null;case bl:return ml(t),null;case wl:var s=t.stateNode;return s.pendingContext&&(s.context=s.pendingContext,s.pendingContext=null),null!==e&&null!==e.child||(b(t),t.effectTag&=~xl),null;case Sl:v(t);var f=h(),w=t.type;if(null!==e&&null!=t.stateNode){var S=e.memoizedProps,E=t.stateNode,C=y(),R=d(E,w,S,i,f,C);t.updateQueue=R,R&&r(t),e.ref!==t.ref&&o(t)}else{if(!i)return null===t.stateNode&&xn("166"),null;var T=y();if(b(t))g(t,f)&&r(t);else{var P=l(w,i,f,T,t);u(P,t),p(P,w,i,f)&&r(t),t.stateNode=P}null!==t.ref&&o(t)}return null;case El:var O=i;if(e&&null!=t.stateNode)e.memoizedProps!==O&&r(t);else{if("string"!=typeof O)return null===t.stateNode&&xn("166"),null;var x=h(),k=y();b(t)?_(t)&&r(t):t.stateNode=c(O,x,k,t)}return null;case Rl:return a(e,t);case Tl:return t.tag=Rl,null;case Pl:case Ol:return null;case Cl:return r(t),m(t),null;case gl:xn("167");default:xn("156")}}var l=e.createInstance,c=e.createTextInstance,f=e.appendInitialChild,p=e.finalizeInitialChildren,d=e.prepareUpdate,h=t.getRootHostContainer,v=t.popHostContext,y=t.getHostContext,m=t.popHostContainer,g=n.prepareToHydrateHostInstance,_=n.prepareToHydrateHostTextInstance,b=n.popHydrationState; +return{completeWork:s}},jl=null,Nl=null,Dl=Ze,Ll=et,Fl=tt,Hl={injectInternals:Dl,onCommitRoot:Ll,onCommitUnmount:Fl},Vl=Qn.ClassComponent,Ul=Qn.HostRoot,zl=Qn.HostComponent,Bl=Qn.HostText,Wl=Qn.HostPortal,Gl=Qn.CoroutineComponent,ql=_a.commitCallbacks,Yl=Hl.onCommitUnmount,Kl=yr.Placement,Xl=yr.Update,Ql=yr.Callback,$l=yr.ContentReset,Jl=function(e,t){function n(e,n){try{n.componentWillUnmount()}catch(n){t(e,n)}}function r(e){var n=e.ref;if(null!==n)try{n(null)}catch(n){t(e,n)}}function o(e){for(var t=e["return"];null!==t;){if(i(t))return t;t=t["return"]}xn("160")}function i(e){return e.tag===zl||e.tag===Ul||e.tag===Wl}function a(e){var t=e;e:for(;;){for(;null===t.sibling;){if(null===t["return"]||i(t["return"]))return null;t=t["return"]}for(t.sibling["return"]=t["return"],t=t.sibling;t.tag!==zl&&t.tag!==Bl;){if(t.effectTag&Kl)continue e;if(null===t.child||t.tag===Wl)continue e;t.child["return"]=t,t=t.child}if(!(t.effectTag&Kl))return t.stateNode}}function u(e){var t=o(e),n=void 0,r=void 0;switch(t.tag){case zl:n=t.stateNode,r=!1;break;case Ul:case Wl:n=t.stateNode.containerInfo,r=!0;break;default:xn("161")}t.effectTag&$l&&(g(n),t.effectTag&=~$l);for(var i=a(e),u=e;;){if(u.tag===zl||u.tag===Bl)i?r?E(n,u.stateNode,i):S(n,u.stateNode,i):r?w(n,u.stateNode):b(n,u.stateNode);else if(u.tag===Wl);else if(null!==u.child){u.child["return"]=u,u=u.child;continue}if(u===e)return;for(;null===u.sibling;){if(null===u["return"]||u["return"]===e)return;u=u["return"]}u.sibling["return"]=u["return"],u=u.sibling}}function s(e){for(var t=e;;)if(f(t),null===t.child||t.tag===Wl){if(t===e)return;for(;null===t.sibling;){if(null===t["return"]||t["return"]===e)return;t=t["return"]}t.sibling["return"]=t["return"],t=t.sibling}else t.child["return"]=t,t=t.child}function l(e){for(var t=e,n=!1,r=void 0,o=void 0;;){if(!n){var i=t["return"];e:for(;;){switch(null===i&&xn("160"),i.tag){case zl:r=i.stateNode,o=!1;break e;case Ul:case Wl:r=i.stateNode.containerInfo,o=!0;break e}i=i["return"]}n=!0}if(t.tag===zl||t.tag===Bl)s(t),o?R(r,t.stateNode):C(r,t.stateNode);else if(t.tag===Wl){if(r=t.stateNode.containerInfo,null!==t.child){t.child["return"]=t,t=t.child;continue}}else if(f(t),null!==t.child){t.child["return"]=t,t=t.child;continue}if(t===e)return;for(;null===t.sibling;){if(null===t["return"]||t["return"]===e)return;t=t["return"],t.tag===Wl&&(n=!1)}t.sibling["return"]=t["return"],t=t.sibling}}function c(e){l(e),e["return"]=null,e.child=null,e.alternate&&(e.alternate.child=null,e.alternate["return"]=null)}function f(e){switch("function"==typeof Yl&&Yl(e),e.tag){case Vl:r(e);var t=e.stateNode;return void("function"==typeof t.componentWillUnmount&&n(e,t));case zl:return void r(e);case Gl:return void s(e.stateNode);case Wl:return void l(e)}}function p(e,t){switch(t.tag){case Vl:return;case zl:var n=t.stateNode;if(null!=n){var r=t.memoizedProps,o=null!==e?e.memoizedProps:r,i=t.type,a=t.updateQueue;t.updateQueue=null,null!==a&&m(n,a,i,o,r,t)}return;case Bl:null===t.stateNode&&xn("162");var u=t.stateNode,s=t.memoizedProps,l=null!==e?e.memoizedProps:s;return void _(u,l,s);case Ul:case Wl:return;default:xn("163")}}function d(e,t){switch(t.tag){case Vl:var n=t.stateNode;if(t.effectTag&Xl)if(null===e)n.componentDidMount();else{var r=e.memoizedProps,o=e.memoizedState;n.componentDidUpdate(r,o)}return void(t.effectTag&Ql&&null!==t.updateQueue&&ql(t,t.updateQueue,n));case Ul:var i=t.updateQueue;if(null!==i){var a=t.child&&t.child.stateNode;ql(t,i,a)}return;case zl:var u=t.stateNode;if(null===e&&t.effectTag&Xl){var s=t.type,l=t.memoizedProps;y(u,s,l,t)}return;case Bl:case Wl:return;default:xn("163")}}function h(e){var t=e.ref;if(null!==t){var n=e.stateNode;switch(e.tag){case zl:t(T(n));break;default:t(n)}}}function v(e){var t=e.ref;null!==t&&t(null)}var y=e.commitMount,m=e.commitUpdate,g=e.resetTextContent,_=e.commitTextUpdate,b=e.appendChild,w=e.appendChildToContainer,S=e.insertBefore,E=e.insertInContainerBefore,C=e.removeChild,R=e.removeChildFromContainer,T=e.getPublicInstance;return{commitPlacement:u,commitDeletion:c,commitWork:p,commitLifeCycles:d,commitAttachRef:h,commitDetachRef:v}},Zl=Pa.createCursor,ec=Pa.pop,tc=Pa.push,nc={},rc=function(e){function t(e){return e===nc&&xn("174"),e}function n(){return t(d.current)}function r(e,t){tc(d,t,e);var n=c(t);tc(p,e,e),tc(f,n,e)}function o(e){ec(f,e),ec(p,e),ec(d,e)}function i(){return t(f.current)}function a(e){var n=t(d.current),r=t(f.current),o=l(r,e.type,n);r!==o&&(tc(p,e,e),tc(f,o,e))}function u(e){p.current===e&&(ec(f,e),ec(p,e))}function s(){f.current=nc,d.current=nc}var l=e.getChildHostContext,c=e.getRootHostContext,f=Zl(nc),p=Zl(nc),d=Zl(nc);return{getHostContext:i,getRootHostContainer:n,popHostContainer:o,popHostContext:u,pushHostContainer:r,pushHostContext:a,resetHostContainer:s}},oc=Qn.HostComponent,ic=Qn.HostText,ac=Qn.HostRoot,uc=yr.Deletion,sc=yr.Placement,lc=Eu.createFiberFromHostInstanceForDeletion,cc=function(e){function t(e){var t=e.stateNode.containerInfo;return S=v(t),w=e,E=!0,!0}function n(e,t){var n=lc();n.stateNode=t,n["return"]=e,n.effectTag=uc,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function r(e,t){t.effectTag|=sc}function o(e,t){switch(e.tag){case oc:var n=e.type,r=e.pendingProps;return p(t,n,r);case ic:var o=e.pendingProps;return d(t,o);default:return!1}}function i(e){if(E){var t=S;if(!t)return r(w,e),E=!1,void(w=e);if(!o(e,t)){if(!(t=h(t))||!o(e,t))return r(w,e),E=!1,void(w=e);n(w,S)}e.stateNode=t,w=e,S=v(t)}}function a(e,t){var n=e.stateNode,r=y(n,e.type,e.memoizedProps,t,e);return e.updateQueue=r,null!==r}function u(e){var t=e.stateNode;return m(t,e.memoizedProps,e)}function s(e){for(var t=e["return"];null!==t&&t.tag!==oc&&t.tag!==ac;)t=t["return"];w=t}function l(e){if(e!==w)return!1;if(!E)return s(e),E=!0,!1;var t=e.type;if(e.tag!==oc||"head"!==t&&"body"!==t&&!f(t,e.memoizedProps))for(var r=S;r;)n(e,r),r=h(r);return s(e),S=w?h(e.stateNode):null,!0}function c(){w=null,S=null,E=!1}var f=e.shouldSetTextContent,p=e.canHydrateInstance,d=e.canHydrateTextInstance,h=e.getNextHydratableSibling,v=e.getFirstHydratableChild,y=e.hydrateInstance,m=e.hydrateTextInstance,g=e.didNotHydrateInstance,_=e.didNotFindHydratableInstance,b=e.didNotFindHydratableTextInstance;if(!(p&&d&&h&&v&&y&&m&&g&&_&&b))return{enterHydrationState:function(){return!1},resetHydrationState:function(){},tryToClaimNextHydratableInstance:function(){},prepareToHydrateHostInstance:function(){xn("175")},prepareToHydrateHostTextInstance:function(){xn("176")},popHydrationState:function(e){return!1}};var w=null,S=null,E=!1;return{enterHydrationState:t,resetHydrationState:c,tryToClaimNextHydratableInstance:i,prepareToHydrateHostInstance:a,prepareToHydrateHostTextInstance:u,popHydrationState:l}},fc=$a.popContextProvider,pc=Pa.reset,dc=Mu.getStackAddendumByWorkInProgressFiber,hc=Lu.logCapturedError,vc=hr.ReactCurrentOwner,yc=Eu.createWorkInProgress,mc=Eu.largerPriority,gc=Hl.onCommitRoot,_c=ia.NoWork,bc=ia.SynchronousPriority,wc=ia.TaskPriority,Sc=ia.HighPriority,Ec=ia.LowPriority,Cc=ia.OffscreenPriority,Rc=Ja.AsyncUpdates,Tc=yr.PerformedWork,Pc=yr.Placement,Oc=yr.Update,xc=yr.PlacementAndUpdate,kc=yr.Deletion,Ic=yr.ContentReset,Mc=yr.Callback,Ac=yr.Err,jc=yr.Ref,Nc=Qn.HostRoot,Dc=Qn.HostComponent,Lc=Qn.HostPortal,Fc=Qn.ClassComponent,Hc=_a.getUpdatePriority,Vc=$a,Uc=Vc.resetContext,zc=1,Bc=function(e){function t(){pc(),Uc(),A()}function n(){for(;null!==ie&&ie.current.pendingWorkPriority===_c;){ie.isScheduled=!1;var e=ie.nextScheduledRoot;if(ie.nextScheduledRoot=null,ie===ae)return ie=null,ae=null,ne=_c,null;ie=e}for(var n=ie,r=null,o=_c;null!==n;)n.current.pendingWorkPriority!==_c&&(o===_c||o>n.current.pendingWorkPriority)&&(o=n.current.pendingWorkPriority,r=n),n=n.nextScheduledRoot;return null!==r?(ne=o,t(),void(te=yc(r.current,o))):(ne=_c,void(te=null))}function r(){for(;null!==re;){var t=re.effectTag;if(t&Ic&&e.resetTextContent(re.stateNode),t&jc){var n=re.alternate;null!==n&&G(n)}switch(t&~(Mc|Ac|Ic|jc|Tc)){case Pc:V(re),re.effectTag&=~Pc;break;case xc:V(re),re.effectTag&=~Pc;var r=re.alternate;z(r,re);break;case Oc:var o=re.alternate;z(o,re);break;case kc:he=!0,U(re),he=!1}re=re.nextEffect}}function o(){for(;null!==re;){var e=re.effectTag;if(e&(Oc|Mc)){var t=re.alternate;B(t,re)}e&jc&&W(re),e&Ac&&g(re);var n=re.nextEffect;re.nextEffect=null,re=n}}function i(e){de=!0,oe=null;var t=e.stateNode;t.current===e&&xn("177"),ne!==bc&&ne!==wc||ye++,vc.current=null;var i=void 0;for(e.effectTag>Tc?null!==e.lastEffect?(e.lastEffect.nextEffect=e,i=e.firstEffect):i=e:i=e.firstEffect,K(),re=i;null!==re;){var a=!1,u=void 0;try{r()}catch(e){a=!0,u=e}a&&(null===re&&xn("178"),v(re,u),null!==re&&(re=re.nextEffect))}for(X(),t.current=e,re=i;null!==re;){var s=!1,l=void 0;try{o()}catch(e){s=!0,l=e}s&&(null===re&&xn("178"),v(re,l),null!==re&&(re=re.nextEffect))}de=!1,"function"==typeof gc&&gc(e.stateNode),ce&&(ce.forEach(E),ce=null),n()}function a(e,t){if(!(e.pendingWorkPriority!==_c&&e.pendingWorkPriority>t)){for(var n=Hc(e),r=e.child;null!==r;)n=mc(n,r.pendingWorkPriority),r=r.sibling;e.pendingWorkPriority=n}}function u(e){for(;;){var t=e.alternate,n=F(t,e,ne),r=e["return"],o=e.sibling;if(a(e,ne),null!==n)return n;if(null!==r&&(null===r.firstEffect&&(r.firstEffect=e.firstEffect),null!==e.lastEffect&&(null!==r.lastEffect&&(r.lastEffect.nextEffect=e.firstEffect),r.lastEffect=e.lastEffect),e.effectTag>Tc&&(null!==r.lastEffect?r.lastEffect.nextEffect=e:r.firstEffect=e,r.lastEffect=e)),null!==o)return o;if(null===r)return oe=e,null;e=r}return null}function s(e){var t=e.alternate,n=N(t,e,ne);return null===n&&(n=u(e)),vc.current=null,n}function l(e){var t=e.alternate,n=D(t,e,ne);return null===n&&(n=u(e)),vc.current=null,n}function c(e){h(Cc,e)}function f(){if(null!==se&&se.size>0)for(;null!==te;)if(null===(te=y(te)?l(te):s(te))){if(null===oe&&xn("179"),Q=wc,i(oe),Q=ne,null===se||0===se.size)break;ne!==wc&&xn("180")}}function p(e,t){if(null!==oe?(Q=wc,i(oe),f()):null===te&&n(),!(ne===_c||ne>e)){Q=ne;e:for(;;){if(ne<=wc)for(;null!==te&&!(null===(te=s(te))&&(null===oe&&xn("179"),Q=wc,i(oe),Q=ne,f(),ne===_c||ne>e||ne>wc)););else if(null!==t)for(;null!==te&&!J;)if(t.timeRemaining()>zc){if(null===(te=s(te)))if(null===oe&&xn("179"),t.timeRemaining()>zc){if(Q=wc,i(oe),Q=ne,f(),ne===_c||ne>e||newc&&!ue&&(q(c),ue=!0);var u=fe;if($=!1,J=!1,pe=!1,fe=null,se=null,le=null,null!==u)throw u}function v(e,t){vc.current=null;var n=null,r=!1,o=!1,i=null;if(e.tag===Nc)n=e,m(e)&&(pe=!0);else for(var a=e["return"];null!==a&&null===n;){if(a.tag===Fc){var u=a.stateNode;"function"==typeof u.componentDidCatch&&(r=!0,i=vr(a),n=a,o=!0)}else a.tag===Nc&&(n=a);if(m(a)){if(he)return null;if(null!==ce&&(ce.has(a)||null!==a.alternate&&ce.has(a.alternate)))return null;n=null,o=!1}a=a["return"]}if(null!==n){null===le&&(le=new Set),le.add(n);var s=dc(e),l=vr(e);null===se&&(se=new Map);var c={componentName:l,componentStack:s,error:t,errorBoundary:r?n.stateNode:null,errorBoundaryFound:r,errorBoundaryName:i,willRetry:o};se.set(n,c);try{hc(c)}catch(e){console.error(e)}return de?(null===ce&&(ce=new Set),ce.add(n)):E(n),n}return null===fe&&(fe=t),null}function y(e){return null!==se&&(se.has(e)||null!==e.alternate&&se.has(e.alternate))}function m(e){return null!==le&&(le.has(e)||null!==e.alternate&&le.has(e.alternate))}function g(e){var t=void 0;switch(null!==se&&(t=se.get(e),se["delete"](e),null==t&&null!==e.alternate&&(e=e.alternate,t=se.get(e),se["delete"](e))),null==t&&xn("184"),e.tag){case Fc:var n=e.stateNode,r={componentStack:t.componentStack};return void n.componentDidCatch(t.error,r);case Nc:return void(null===fe&&(fe=t.error));default:xn("157")}}function _(e,t){for(var n=e;null!==n;){switch(n.tag){case Fc:fc(n);break;case Dc:M(n);break;case Nc:case Lc:I(n)}if(n===t||n.alternate===t)break;n=n["return"]}}function b(e,t){t!==_c&&(e.isScheduled||(e.isScheduled=!0,ae?(ae.nextScheduledRoot=e,ae=e):(ie=e,ae=e)))}function w(e,t){ye>ve&&(pe=!0,xn("185")),!$&&t<=ne&&(te=null);for(var n=e,r=!0;null!==n&&r;){if(r=!1,(n.pendingWorkPriority===_c||n.pendingWorkPriority>t)&&(r=!0,n.pendingWorkPriority=t),null!==n.alternate&&(n.alternate.pendingWorkPriority===_c||n.alternate.pendingWorkPriority>t)&&(r=!0,n.alternate.pendingWorkPriority=t),null===n["return"]){if(n.tag!==Nc)return;if(b(n.stateNode,t),!$)switch(t){case bc:ee?h(bc,null):h(wc,null);break;case wc:Z||xn("186");break;default:ue||(q(c),ue=!0)}}n=n["return"]}}function S(e,t){var n=Q;return n===_c&&(n=!Y||e.internalContextTag&Rc||t?Ec:bc),n===bc&&($||Z)?wc:n}function E(e){w(e,wc)}function C(e,t){var n=Q;Q=e;try{t()}finally{Q=n}}function R(e,t){var n=Z;Z=!0;try{return e(t)}finally{Z=n,$||Z||h(wc,null)}}function T(e){var t=ee,n=Z;ee=Z,Z=!1;try{return e()}finally{Z=n,ee=t}}function P(e){var t=Z,n=Q;Z=!0,Q=bc;try{return e()}finally{Z=t,Q=n,$&&xn("187"),h(wc,null)}}function O(e){var t=Q;Q=Ec;try{return e()}finally{Q=t}}var x=rc(e),k=cc(e),I=x.popHostContainer,M=x.popHostContext,A=x.resetHostContainer,j=vl(e,x,k,w,S),N=j.beginWork,D=j.beginFailedWork,L=Al(e,x,k),F=L.completeWork,H=Jl(e,v),V=H.commitPlacement,U=H.commitDeletion,z=H.commitWork,B=H.commitLifeCycles,W=H.commitAttachRef,G=H.commitDetachRef,q=e.scheduleDeferredCallback,Y=e.useSyncScheduling,K=e.prepareForCommit,X=e.resetAfterCommit,Q=_c,$=!1,J=!1,Z=!1,ee=!1,te=null,ne=_c,re=null,oe=null,ie=null,ae=null,ue=!1,se=null,le=null,ce=null,fe=null,pe=!1,de=!1,he=!1,ve=1e3,ye=0;return{scheduleUpdate:w,getPriorityContext:S,performWithPriority:C,batchedUpdates:R,unbatchedUpdates:T,flushSync:P,deferredUpdates:O}},Wc=function(e){xn("196")};nt._injectFiber=function(e){Wc=e};var Gc=nt,qc=_a.addTopLevelUpdate,Yc=$a.findCurrentUnmaskedContext,Kc=$a.isContextProvider,Xc=$a.processChildContext,Qc=Tu.createFiberRoot,$c=Qn.HostComponent,Jc=Ir.findCurrentHostFiber,Zc=Ir.findCurrentHostFiberWithNoPortals;Gc._injectFiber(function(e){var t=Yc(e);return Kc(e)?Xc(e,t,!1):t});var ef=function(e){function t(e,t,n){var r=xo.enableAsyncSubtreeAPI&&null!=t&&null!=t.type&&null!=t.type.prototype&&!0===t.type.prototype.unstable_isAsyncReactComponent,a=i(e,r),u={element:t};n=void 0===n?null:n,qc(e,u,n,a),o(e,a)}var n=e.getPublicInstance,r=Bc(e),o=r.scheduleUpdate,i=r.getPriorityContext,a=r.performWithPriority,u=r.batchedUpdates,s=r.unbatchedUpdates,l=r.flushSync,c=r.deferredUpdates;return{createContainer:function(e){return Qc(e)},updateContainer:function(e,n,r,o){var i=n.current,a=Gc(r);null===n.context?n.context=a:n.pendingContext=a,t(i,e,o)},performWithPriority:a,batchedUpdates:u,unbatchedUpdates:s,deferredUpdates:c,flushSync:l,getPublicRootInstance:function(e){var t=e.current;if(!t.child)return null;switch(t.child.tag){case $c:return n(t.child.stateNode);default:return t.child.stateNode}},findHostInstance:function(e){var t=Jc(e);return null===t?null:t.stateNode},findHostInstanceWithNoPortals:function(e){var t=Zc(e);return null===t?null:t.stateNode}}},tf=Jn.TEXT_NODE,nf=it,rf=null,of=at,af={getOffsets:st,setOffsets:lt},uf=af,sf=Jn.ELEMENT_NODE,lf={hasSelectionCapabilities:function(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&"text"===e.type||"textarea"===t||"true"===e.contentEditable)},getSelectionInformation:function(){var e=On();return{focusedElem:e,selectionRange:lf.hasSelectionCapabilities(e)?lf.getSelection(e):null}},restoreSelection:function(e){var t=On(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&ct(n)){lf.hasSelectionCapabilities(n)&&lf.setSelection(n,r);for(var o=[],i=n;i=i.parentNode;)i.nodeType===sf&&o.push({element:i,left:i.scrollLeft,top:i.scrollTop});Pn(n);for(var a=0;a1?1-t:void 0;return this._fallbackText=o.slice(e,u),this._fallbackText}}),Bn.addPoolingTo(Pt);var Sf=Pt,Ef=["dispatchConfig","_targetInst","nativeEvent","isDefaultPrevented","isPropagationStopped","_dispatchListeners","_dispatchInstances"],Cf={type:null,target:null,currentTarget:En.thatReturnsNull,eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null};_n(Ot.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=En.thatReturnsTrue)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=En.thatReturnsTrue)},persist:function(){this.isPersistent=En.thatReturnsTrue},isPersistent:En.thatReturnsFalse,destructor:function(){var e=this.constructor.Interface;for(var t in e)this[t]=null;for(var n=0;n8&&Af<=11),Df=32,Lf=String.fromCharCode(Df),Ff={beforeInput:{phasedRegistrationNames:{bubbled:"onBeforeInput",captured:"onBeforeInputCapture"},dependencies:["topCompositionEnd","topKeyPress","topTextInput","topPaste"]},compositionEnd:{phasedRegistrationNames:{bubbled:"onCompositionEnd",captured:"onCompositionEndCapture"},dependencies:["topBlur","topCompositionEnd","topKeyDown","topKeyPress","topKeyUp","topMouseDown"]},compositionStart:{phasedRegistrationNames:{bubbled:"onCompositionStart",captured:"onCompositionStartCapture"},dependencies:["topBlur","topCompositionStart","topKeyDown","topKeyPress","topKeyUp","topMouseDown"]},compositionUpdate:{phasedRegistrationNames:{bubbled:"onCompositionUpdate",captured:"onCompositionUpdateCapture"},dependencies:["topBlur","topCompositionUpdate","topKeyDown","topKeyPress","topKeyUp","topMouseDown"]}},Hf=!1,Vf=null,Uf={eventTypes:Ff,extractEvents:function(e,t,n,r){return[Lt(e,t,n,r),Vt(e,t,n,r)]}},zf=Uf,Bf={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0},Wf=Ut,Gf={change:{phasedRegistrationNames:{bubbled:"onChange",captured:"onChangeCapture"},dependencies:["topBlur","topChange","topClick","topFocus","topInput","topKeyDown","topKeyUp","topSelectionChange"]}},qf=!1;gn.canUseDOM&&(qf=!document.documentMode||document.documentMode>9);var Yf={eventTypes:Gf,extractEvents:function(e,t,n,r){var o=t?lr.getNodeFromInstance(t):window;qf||"topSelectionChange"!==e||(r=o=On(),o&&(t=lr.getInstanceFromNode(o)));var i,a;if(i=zt(o)?Yt:Wf(o)&&!qf?Gt:qt){var u=i(e,t,o);if(u)return Bt(u,n,r)}a&&a(e,o,t),"topBlur"===e&&Kt(t,o)}},Kf=Yf,Xf=["ResponderEventPlugin","SimpleEventPlugin","TapEventPlugin","EnterLeaveEventPlugin","ChangeEventPlugin","SelectEventPlugin","BeforeInputEventPlugin"],Qf=Xf,$f={view:function(e){if(e.view)return e.view;var t=Jr(e);if(t.window===t)return t;var n=t.ownerDocument;return n?n.defaultView||n.parentWindow:window},detail:function(e){return e.detail||0}};Rf.augmentClass(Xt,$f);var Jf=Xt,Zf={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"},ep=$t,tp={screenX:null,screenY:null,clientX:null,clientY:null,pageX:null,pageY:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,getModifierState:ep,button:null,buttons:null,relatedTarget:function(e){return e.relatedTarget||(e.fromElement===e.srcElement?e.toElement:e.fromElement)}};Jf.augmentClass(Jt,tp);var np=Jt,rp={mouseEnter:{registrationName:"onMouseEnter",dependencies:["topMouseOut","topMouseOver"]},mouseLeave:{registrationName:"onMouseLeave",dependencies:["topMouseOut","topMouseOver"]}},op={eventTypes:rp,extractEvents:function(e,t,n,r){if("topMouseOver"===e&&(n.relatedTarget||n.fromElement))return null;if("topMouseOut"!==e&&"topMouseOver"!==e)return null;var o;if(r.window===r)o=r;else{var i=r.ownerDocument;o=i?i.defaultView||i.parentWindow:window}var a,u;if("topMouseOut"===e){a=t;var s=n.relatedTarget||n.toElement;u=s?lr.getClosestInstanceFromNode(s):null}else a=null,u=t;if(a===u)return null;var l=null==a?o:lr.getNodeFromInstance(a),c=null==u?o:lr.getNodeFromInstance(u),f=np.getPooled(rp.mouseLeave,a,n,r);f.type="mouseleave",f.target=l,f.relatedTarget=c;var p=np.getPooled(rp.mouseEnter,u,n,r);return p.type="mouseenter",p.target=c,p.relatedTarget=l,wf.accumulateEnterLeaveDispatches(f,p,a,u),[f,p]}},ip=op,ap=Jn.DOCUMENT_NODE,up=gn.canUseDOM&&"documentMode"in document&&document.documentMode<=11,sp={select:{phasedRegistrationNames:{bubbled:"onSelect",captured:"onSelectCapture"},dependencies:["topBlur","topContextMenu","topFocus","topKeyDown","topKeyUp","topMouseDown","topMouseUp","topSelectionChange"]}},lp=null,cp=null,fp=null,pp=!1,dp=Po.isListeningToAllDependencies,hp={eventTypes:sp,extractEvents:function(e,t,n,r){var o=r.window===r?r.document:r.nodeType===ap?r:r.ownerDocument;if(!o||!dp("onSelect",o))return null;var i=t?lr.getNodeFromInstance(t):window;switch(e){case"topFocus":(Wf(i)||"true"===i.contentEditable)&&(lp=i,cp=t,fp=null);break;case"topBlur":lp=null,cp=null,fp=null;break;case"topMouseDown":pp=!0;break;case"topContextMenu":case"topMouseUp":return pp=!1,en(n,r);case"topSelectionChange":if(up)break;case"topKeyDown":case"topKeyUp":return en(n,r)}return null}},vp=hp,yp={animationName:null,elapsedTime:null,pseudoElement:null};Rf.augmentClass(tn,yp);var mp=tn,gp={clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}};Rf.augmentClass(nn,gp);var _p=nn,bp={relatedTarget:null};Jf.augmentClass(rn,bp);var wp=rn,Sp=on,Ep={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},Cp={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},Rp=an,Tp={key:Rp,location:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,repeat:null,locale:null,getModifierState:ep,charCode:function(e){return"keypress"===e.type?Sp(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?Sp(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}};Jf.augmentClass(un,Tp);var Pp=un,Op={dataTransfer:null};np.augmentClass(sn,Op);var xp=sn,kp={touches:null,targetTouches:null,changedTouches:null,altKey:null,metaKey:null,ctrlKey:null,shiftKey:null,getModifierState:ep};Jf.augmentClass(ln,kp);var Ip=ln,Mp={propertyName:null,elapsedTime:null,pseudoElement:null};Rf.augmentClass(cn,Mp);var Ap=cn,jp={deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:null,deltaMode:null};np.augmentClass(fn,jp);var Np=fn,Dp={},Lp={};["abort","animationEnd","animationIteration","animationStart","blur","cancel","canPlay","canPlayThrough","click","close","contextMenu","copy","cut","doubleClick","drag","dragEnd","dragEnter","dragExit","dragLeave","dragOver","dragStart","drop","durationChange","emptied","encrypted","ended","error","focus","input","invalid","keyDown","keyPress","keyUp","load","loadedData","loadedMetadata","loadStart","mouseDown","mouseMove","mouseOut","mouseOver","mouseUp","paste","pause","play","playing","progress","rateChange","reset","scroll","seeked","seeking","stalled","submit","suspend","timeUpdate","toggle","touchCancel","touchEnd","touchMove","touchStart","transitionEnd","volumeChange","waiting","wheel"].forEach(function(e){var t=e[0].toUpperCase()+e.slice(1),n="on"+t,r="top"+t,o={phasedRegistrationNames:{bubbled:n,captured:n+"Capture"},dependencies:[r]};Dp[e]=o,Lp[r]=o});var Fp={eventTypes:Dp,extractEvents:function(e,t,n,r){var o=Lp[e];if(!o)return null;var i;switch(e){case"topAbort":case"topCancel":case"topCanPlay":case"topCanPlayThrough":case"topClose":case"topDurationChange":case"topEmptied":case"topEncrypted":case"topEnded":case"topError":case"topInput":case"topInvalid":case"topLoad":case"topLoadedData":case"topLoadedMetadata":case"topLoadStart":case"topPause":case"topPlay":case"topPlaying":case"topProgress":case"topRateChange":case"topReset":case"topSeeked":case"topSeeking":case"topStalled":case"topSubmit":case"topSuspend":case"topTimeUpdate":case"topToggle":case"topVolumeChange":case"topWaiting":i=Rf;break;case"topKeyPress":if(0===Sp(n))return null;case"topKeyDown":case"topKeyUp":i=Pp;break;case"topBlur":case"topFocus":i=wp;break;case"topClick":if(2===n.button)return null;case"topDoubleClick":case"topMouseDown":case"topMouseMove":case"topMouseUp":case"topMouseOut":case"topMouseOver":case"topContextMenu":i=np;break;case"topDrag":case"topDragEnd":case"topDragEnter":case"topDragExit":case"topDragLeave":case"topDragOver":case"topDragStart":case"topDrop":i=xp;break;case"topTouchCancel":case"topTouchEnd":case"topTouchMove":case"topTouchStart":i=Ip;break;case"topAnimationEnd":case"topAnimationIteration":case"topAnimationStart":i=mp;break;case"topTransitionEnd":i=Ap;break;case"topScroll":i=Jf;break;case"topWheel":i=Np;break;case"topCopy":case"topCut":case"topPaste":i=_p}i||xn("86",e);var a=i.getPooled(o,t,n,r);return wf.accumulateTwoPhaseDispatches(a),a}},Hp=Fp;no.setHandleTopLevel(Po.handleTopLevel),co.injection.injectEventPluginOrder(Qf),Fr.injection.injectComponentTree(lr),co.injection.injectEventPluginsByName({SimpleEventPlugin:Hp,EnterLeaveEventPlugin:ip,ChangeEventPlugin:Kf,SelectEventPlugin:vp,BeforeInputEventPlugin:zf});var Vp={Properties:{"aria-current":0,"aria-details":0,"aria-disabled":0,"aria-hidden":0,"aria-invalid":0,"aria-keyshortcuts":0,"aria-label":0,"aria-roledescription":0,"aria-autocomplete":0,"aria-checked":0,"aria-expanded":0,"aria-haspopup":0,"aria-level":0,"aria-modal":0,"aria-multiline":0,"aria-multiselectable":0,"aria-orientation":0,"aria-placeholder":0,"aria-pressed":0,"aria-readonly":0,"aria-required":0,"aria-selected":0,"aria-sort":0,"aria-valuemax":0,"aria-valuemin":0,"aria-valuenow":0,"aria-valuetext":0,"aria-atomic":0,"aria-busy":0,"aria-live":0,"aria-relevant":0,"aria-dropeffect":0,"aria-grabbed":0,"aria-activedescendant":0,"aria-colcount":0,"aria-colindex":0,"aria-colspan":0,"aria-controls":0,"aria-describedby":0,"aria-errormessage":0,"aria-flowto":0,"aria-labelledby":0,"aria-owns":0,"aria-posinset":0,"aria-rowcount":0,"aria-rowindex":0,"aria-rowspan":0,"aria-setsize":0},DOMAttributeNames:{},DOMPropertyNames:{}},Up=Vp,zp=Yn.injection.MUST_USE_PROPERTY,Bp=Yn.injection.HAS_BOOLEAN_VALUE,Wp=Yn.injection.HAS_NUMERIC_VALUE,Gp=Yn.injection.HAS_POSITIVE_NUMERIC_VALUE,qp=Yn.injection.HAS_OVERLOADED_BOOLEAN_VALUE,Yp={isCustomAttribute:RegExp.prototype.test.bind(new RegExp("^(data|aria)-["+Yn.ATTRIBUTE_NAME_CHAR+"]*$")),Properties:{accept:0,acceptCharset:0,accessKey:0,action:0,allowFullScreen:Bp,allowTransparency:0,alt:0,as:0,async:Bp,autoComplete:0,autoPlay:Bp,capture:Bp,cellPadding:0,cellSpacing:0,charSet:0,challenge:0,checked:zp|Bp,cite:0,classID:0,className:0,cols:Gp,colSpan:0,content:0,contentEditable:0,contextMenu:0,controls:Bp,controlsList:0,coords:0,crossOrigin:0,data:0,dateTime:0,"default":Bp,defer:Bp,dir:0,disabled:Bp,download:qp,draggable:0,encType:0,form:0,formAction:0,formEncType:0,formMethod:0,formNoValidate:Bp,formTarget:0,frameBorder:0,headers:0,height:0,hidden:Bp,high:0,href:0,hrefLang:0,htmlFor:0,httpEquiv:0,id:0,inputMode:0,integrity:0,is:0,keyParams:0,keyType:0,kind:0,label:0,lang:0,list:0,loop:Bp,low:0,manifest:0,marginHeight:0,marginWidth:0,max:0,maxLength:0,media:0,mediaGroup:0,method:0,min:0,minLength:0,multiple:zp|Bp,muted:zp|Bp,name:0,nonce:0,noValidate:Bp,open:Bp,optimum:0,pattern:0,placeholder:0,playsInline:Bp,poster:0,preload:0,profile:0,radioGroup:0,readOnly:Bp,referrerPolicy:0,rel:0,required:Bp,reversed:Bp,role:0,rows:Gp,rowSpan:Wp,sandbox:0,scope:0,scoped:Bp,scrolling:0,seamless:Bp,selected:zp|Bp,shape:0,size:Gp,sizes:0,slot:0,span:Gp,spellCheck:0,src:0,srcDoc:0,srcLang:0,srcSet:0,start:Wp,step:0,style:0,summary:0,tabIndex:0,target:0,title:0,type:0,useMap:0,value:0,width:0,wmode:0,wrap:0,about:0,datatype:0,inlist:0,prefix:0,property:0,resource:0,"typeof":0,vocab:0,autoCapitalize:0,autoCorrect:0,autoSave:0,color:0,itemProp:0,itemScope:Bp,itemType:0,itemID:0,itemRef:0,results:0,security:0,unselectable:0},DOMAttributeNames:{acceptCharset:"accept-charset",className:"class",htmlFor:"for",httpEquiv:"http-equiv"},DOMPropertyNames:{},DOMMutationMethods:{value:function(e,t){return null==t?e.removeAttribute("value"):void("number"!==e.type||!1===e.hasAttribute("value")?e.setAttribute("value",""+t):e.validity&&!e.validity.badInput&&e.ownerDocument.activeElement!==e&&e.setAttribute("value",""+t))}}},Kp=Yp,Xp={xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace"},Qp={accentHeight:"accent-height",accumulate:0,additive:0,alignmentBaseline:"alignment-baseline",allowReorder:"allowReorder",alphabetic:0,amplitude:0,arabicForm:"arabic-form",ascent:0,attributeName:"attributeName",attributeType:"attributeType",autoReverse:"autoReverse",azimuth:0,baseFrequency:"baseFrequency",baseProfile:"baseProfile",baselineShift:"baseline-shift",bbox:0,begin:0,bias:0,by:0,calcMode:"calcMode",capHeight:"cap-height",clip:0,clipPath:"clip-path",clipRule:"clip-rule",clipPathUnits:"clipPathUnits",colorInterpolation:"color-interpolation",colorInterpolationFilters:"color-interpolation-filters", +colorProfile:"color-profile",colorRendering:"color-rendering",contentScriptType:"contentScriptType",contentStyleType:"contentStyleType",cursor:0,cx:0,cy:0,d:0,decelerate:0,descent:0,diffuseConstant:"diffuseConstant",direction:0,display:0,divisor:0,dominantBaseline:"dominant-baseline",dur:0,dx:0,dy:0,edgeMode:"edgeMode",elevation:0,enableBackground:"enable-background",end:0,exponent:0,externalResourcesRequired:"externalResourcesRequired",fill:0,fillOpacity:"fill-opacity",fillRule:"fill-rule",filter:0,filterRes:"filterRes",filterUnits:"filterUnits",floodColor:"flood-color",floodOpacity:"flood-opacity",focusable:0,fontFamily:"font-family",fontSize:"font-size",fontSizeAdjust:"font-size-adjust",fontStretch:"font-stretch",fontStyle:"font-style",fontVariant:"font-variant",fontWeight:"font-weight",format:0,from:0,fx:0,fy:0,g1:0,g2:0,glyphName:"glyph-name",glyphOrientationHorizontal:"glyph-orientation-horizontal",glyphOrientationVertical:"glyph-orientation-vertical",glyphRef:"glyphRef",gradientTransform:"gradientTransform",gradientUnits:"gradientUnits",hanging:0,horizAdvX:"horiz-adv-x",horizOriginX:"horiz-origin-x",ideographic:0,imageRendering:"image-rendering","in":0,in2:0,intercept:0,k:0,k1:0,k2:0,k3:0,k4:0,kernelMatrix:"kernelMatrix",kernelUnitLength:"kernelUnitLength",kerning:0,keyPoints:"keyPoints",keySplines:"keySplines",keyTimes:"keyTimes",lengthAdjust:"lengthAdjust",letterSpacing:"letter-spacing",lightingColor:"lighting-color",limitingConeAngle:"limitingConeAngle",local:0,markerEnd:"marker-end",markerMid:"marker-mid",markerStart:"marker-start",markerHeight:"markerHeight",markerUnits:"markerUnits",markerWidth:"markerWidth",mask:0,maskContentUnits:"maskContentUnits",maskUnits:"maskUnits",mathematical:0,mode:0,numOctaves:"numOctaves",offset:0,opacity:0,operator:0,order:0,orient:0,orientation:0,origin:0,overflow:0,overlinePosition:"overline-position",overlineThickness:"overline-thickness",paintOrder:"paint-order",panose1:"panose-1",pathLength:"pathLength",patternContentUnits:"patternContentUnits",patternTransform:"patternTransform",patternUnits:"patternUnits",pointerEvents:"pointer-events",points:0,pointsAtX:"pointsAtX",pointsAtY:"pointsAtY",pointsAtZ:"pointsAtZ",preserveAlpha:"preserveAlpha",preserveAspectRatio:"preserveAspectRatio",primitiveUnits:"primitiveUnits",r:0,radius:0,refX:"refX",refY:"refY",renderingIntent:"rendering-intent",repeatCount:"repeatCount",repeatDur:"repeatDur",requiredExtensions:"requiredExtensions",requiredFeatures:"requiredFeatures",restart:0,result:0,rotate:0,rx:0,ry:0,scale:0,seed:0,shapeRendering:"shape-rendering",slope:0,spacing:0,specularConstant:"specularConstant",specularExponent:"specularExponent",speed:0,spreadMethod:"spreadMethod",startOffset:"startOffset",stdDeviation:"stdDeviation",stemh:0,stemv:0,stitchTiles:"stitchTiles",stopColor:"stop-color",stopOpacity:"stop-opacity",strikethroughPosition:"strikethrough-position",strikethroughThickness:"strikethrough-thickness",string:0,stroke:0,strokeDasharray:"stroke-dasharray",strokeDashoffset:"stroke-dashoffset",strokeLinecap:"stroke-linecap",strokeLinejoin:"stroke-linejoin",strokeMiterlimit:"stroke-miterlimit",strokeOpacity:"stroke-opacity",strokeWidth:"stroke-width",surfaceScale:"surfaceScale",systemLanguage:"systemLanguage",tableValues:"tableValues",targetX:"targetX",targetY:"targetY",textAnchor:"text-anchor",textDecoration:"text-decoration",textRendering:"text-rendering",textLength:"textLength",to:0,transform:0,u1:0,u2:0,underlinePosition:"underline-position",underlineThickness:"underline-thickness",unicode:0,unicodeBidi:"unicode-bidi",unicodeRange:"unicode-range",unitsPerEm:"units-per-em",vAlphabetic:"v-alphabetic",vHanging:"v-hanging",vIdeographic:"v-ideographic",vMathematical:"v-mathematical",values:0,vectorEffect:"vector-effect",version:0,vertAdvY:"vert-adv-y",vertOriginX:"vert-origin-x",vertOriginY:"vert-origin-y",viewBox:"viewBox",viewTarget:"viewTarget",visibility:0,widths:0,wordSpacing:"word-spacing",writingMode:"writing-mode",x:0,xHeight:"x-height",x1:0,x2:0,xChannelSelector:"xChannelSelector",xlinkActuate:"xlink:actuate",xlinkArcrole:"xlink:arcrole",xlinkHref:"xlink:href",xlinkRole:"xlink:role",xlinkShow:"xlink:show",xlinkTitle:"xlink:title",xlinkType:"xlink:type",xmlBase:"xml:base",xmlns:0,xmlnsXlink:"xmlns:xlink",xmlLang:"xml:lang",xmlSpace:"xml:space",y:0,y1:0,y2:0,yChannelSelector:"yChannelSelector",z:0,zoomAndPan:"zoomAndPan"},$p={Properties:{},DOMAttributeNamespaces:{xlinkActuate:Xp.xlink,xlinkArcrole:Xp.xlink,xlinkHref:Xp.xlink,xlinkRole:Xp.xlink,xlinkShow:Xp.xlink,xlinkTitle:Xp.xlink,xlinkType:Xp.xlink,xmlBase:Xp.xml,xmlLang:Xp.xml,xmlSpace:Xp.xml},DOMAttributeNames:{}};Object.keys(Qp).forEach(function(e){$p.Properties[e]=0,Qp[e]&&($p.DOMAttributeNames[e]=Qp[e])});var Jp=$p;Yn.injection.injectDOMPropertyConfig(Up),Yn.injection.injectDOMPropertyConfig(Kp),Yn.injection.injectDOMPropertyConfig(Jp);var Zp=Sn.isValidElement,ed=Hl.injectInternals,td=Jn.ELEMENT_NODE,nd=Jn.TEXT_NODE,rd=Jn.COMMENT_NODE,od=Jn.DOCUMENT_NODE,id=Jn.DOCUMENT_FRAGMENT_NODE,ad=Yn.ROOT_ATTRIBUTE_NAME,ud=zi.createElement,sd=zi.getChildNamespace,ld=zi.setInitialProperties,cd=zi.diffProperties,fd=zi.updateProperties,pd=zi.diffHydratedProperties,dd=zi.diffHydratedText,hd=zi.warnForDeletedHydratableElement,vd=zi.warnForDeletedHydratableText,yd=zi.warnForInsertedHydratedElement,md=zi.warnForInsertedHydratedText,gd=lr.precacheFiberNode,_d=lr.updateFiberProps;Wr.injection.injectFiberControlledHostComponent(zi),yf._injectFiber(function(e){return Sd.findHostInstance(e)});var bd=null,wd=null,Sd=ef({getRootHostContext:function(e){var t=void 0,n=void 0;if(e.nodeType===od){t="#document";var r=e.documentElement;n=r?r.namespaceURI:sd(null,"")}else{var o=e.nodeType===rd?e.parentNode:e,i=o.namespaceURI||null;t=o.tagName,n=sd(i,t)}return n},getChildHostContext:function(e,t){return sd(e,t)},getPublicInstance:function(e){return e},prepareForCommit:function(){bd=Po.isEnabled(),wd=cf.getSelectionInformation(),Po.setEnabled(!1)},resetAfterCommit:function(){cf.restoreSelection(wd),wd=null,Po.setEnabled(bd),bd=null},createInstance:function(e,t,n,r,o){var i=void 0;i=r;var a=ud(e,t,n,i);return gd(o,a),_d(a,t),a},appendInitialChild:function(e,t){e.appendChild(t)},finalizeInitialChildren:function(e,t,n,r){return ld(e,t,n,r),vn(t,n)},prepareUpdate:function(e,t,n,r,o,i){return cd(e,t,n,r,o)},commitMount:function(e,t,n,r){e.focus()},commitUpdate:function(e,t,n,r,o,i){_d(e,o),fd(e,t,n,r,o)},shouldSetTextContent:function(e,t){return"textarea"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&"string"==typeof t.dangerouslySetInnerHTML.__html},resetTextContent:function(e){e.textContent=""},shouldDeprioritizeSubtree:function(e,t){return!!t.hidden},createTextInstance:function(e,t,n,r){var o=document.createTextNode(e);return gd(r,o),o},commitTextUpdate:function(e,t,n){e.nodeValue=n},appendChild:function(e,t){e.appendChild(t)},appendChildToContainer:function(e,t){e.nodeType===rd?e.parentNode.insertBefore(t,e):e.appendChild(t)},insertBefore:function(e,t,n){e.insertBefore(t,n)},insertInContainerBefore:function(e,t,n){e.nodeType===rd?e.parentNode.insertBefore(t,n):e.insertBefore(t,n)},removeChild:function(e,t){e.removeChild(t)},removeChildFromContainer:function(e,t){e.nodeType===rd?e.parentNode.removeChild(t):e.removeChild(t)},canHydrateInstance:function(e,t,n){return e.nodeType===td&&t===e.nodeName.toLowerCase()},canHydrateTextInstance:function(e,t){return""!==t&&e.nodeType===nd},getNextHydratableSibling:function(e){for(var t=e.nextSibling;t&&t.nodeType!==td&&t.nodeType!==nd;)t=t.nextSibling;return t},getFirstHydratableChild:function(e){for(var t=e.firstChild;t&&t.nodeType!==td&&t.nodeType!==nd;)t=t.nextSibling;return t},hydrateInstance:function(e,t,n,r,o){return gd(o,e),_d(e,n),pd(e,t,n,r)},hydrateTextInstance:function(e,t,n){return gd(n,e),dd(e,t)},didNotHydrateInstance:function(e,t){1===t.nodeType?hd(e,t):vd(e,t)},didNotFindHydratableInstance:function(e,t,n){yd(e,t,n)},didNotFindHydratableTextInstance:function(e,t){md(e,t)},scheduleDeferredCallback:oa.rIC,useSyncScheduling:!Io.fiberAsyncScheduling});Qr.injection.injectFiberBatchedUpdates(Sd.batchedUpdates);var Ed={hydrate:function(e,t,n){return yn(null,e,t,!0,n)},render:function(e,t,n){return xo.disableNewFiberFeatures&&(Zp(e)||("string"==typeof e?bn(!1,"ReactDOM.render(): Invalid component element. Instead of passing a string like 'div', pass React.createElement('div') or
."):"function"==typeof e?bn(!1,"ReactDOM.render(): Invalid component element. Instead of passing a class like Foo, pass React.createElement(Foo) or ."):null!=e&&void 0!==e.props?bn(!1,"ReactDOM.render(): Invalid component element. This may be caused by unintentionally loading two independent copies of React."):bn(!1,"ReactDOM.render(): Invalid component element."))),yn(null,e,t,!1,n)},unstable_renderSubtreeIntoContainer:function(e,t,n,r){return null!=e&&fr.has(e)||xn("38"),yn(e,t,n,!1,r)},unmountComponentAtNode:function(e){return pn(e)||xn("40"),!!e._reactRootContainer&&(Sd.unbatchedUpdates(function(){yn(null,null,e,!1,function(){e._reactRootContainer=null})}),!0)},findDOMNode:yf,unstable_createPortal:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return Xu.createPortal(e,t,null,n)},unstable_batchedUpdates:Qr.batchedUpdates,unstable_deferredUpdates:Sd.deferredUpdates,flushSync:Sd.flushSync,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{EventPluginHub:co,EventPluginRegistry:An,EventPropagators:wf,ReactControlledComponent:Wr,ReactDOMComponentTree:lr,ReactDOMEventListener:no}},Cd=(ed({findFiberByHostInstance:lr.getClosestInstanceFromNode,findHostInstanceByFiber:Sd.findHostInstance,bundleType:0,version:ff}),Ed);e.exports=Cd},function(e,t){"use strict";var n=!("undefined"==typeof window||!window.document||!window.document.createElement),r={canUseDOM:n,canUseWorkers:"undefined"!=typeof Worker,canUseEventListeners:n&&!(!window.addEventListener&&!window.attachEvent),canUseViewport:n&&!!window.screen,isInWorker:!n};e.exports=r},4,6,function(e,t,n){"use strict";var r=n(37),o={listen:function(e,t,n){return e.addEventListener?(e.addEventListener(t,n,!1),{remove:function(){e.removeEventListener(t,n,!1)}}):e.attachEvent?(e.attachEvent("on"+t,n),{remove:function(){e.detachEvent("on"+t,n)}}):void 0},capture:function(e,t,n){return e.addEventListener?(e.addEventListener(t,n,!0),{remove:function(){e.removeEventListener(t,n,!0)}}):{remove:r}},registerDefault:function(){}};e.exports=o},7,5,function(e,t){"use strict";function n(e,t){return e===t?0!==e||0!==t||1/e===1/t:e!==e&&t!==t}function r(e,t){if(n(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var r=Object.keys(e),i=Object.keys(t);if(r.length!==i.length)return!1;for(var a=0;a0&&void 0!==arguments[0]?arguments[0]:{};this._emitStateChanged(A),g["default"].spring(this.state.openValue,u({toValue:1,bounciness:0,restSpeedThreshold:.1},t)).start(function(){e.props.onDrawerOpen&&e.props.onDrawerOpen(),e._emitStateChanged(I)})}},{key:"close",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._emitStateChanged(A),g["default"].spring(this.state.openValue,u({toValue:0,bounciness:0,restSpeedThreshold:1},t)).start(function(){e.props.onDrawerClose&&e.props.onDrawerClose(),e._emitStateChanged(I)})}},{key:"_handleDrawerOpen",value:function(){this.props.onDrawerOpen&&this.props.onDrawerOpen()}},{key:"_handleDrawerClose",value:function(){this.props.onDrawerClose&&this.props.onDrawerClose()}},{key:"_shouldSetPanResponder",value:function(e,t){var n=t.moveX,r=t.dx,o=t.dy,i=this.props.drawerPosition;if("left"===i){var a=O-(O-this.props.drawerWidth);if(1!==this._lastOpenValue)return n<=35&&r>0&&(this._isClosing=!1,!0);if(r<0&&Math.abs(r)>3*Math.abs(o)||n>a)return this._isClosing=!0,this._closingAnchorValue=this._getOpenValueForX(n),!0}else{var u=O-this.props.drawerWidth;if(1!==this._lastOpenValue)return n>=O-35&&r<0&&(this._isClosing=!1,!0);if(r>0&&Math.abs(r)>3*Math.abs(o)||n1?r=1:r<0&&(r=0),this.state.openValue.setValue(r)}},{key:"_panResponderRelease",value:function(e,t){var n=t.moveX,r=t.vx,o=this.props.drawerPosition,i=this._isClosing,a=r-k;"left"===o?r>0&&n>x||r>=k||a&&i&&n>x?this.open({velocity:r}):r<0&&n0&&n>x||r>k||a&&!i?this.close({velocity:-1*r}):i?this.open():this.close()}},{key:"_getOpenValueForX",value:function(e){var t=this.props,n=t.drawerPosition,r=t.drawerWidth;return"left"===n?e/r:"right"===n?(O-e)/r:void 0}}]),t}(l.Component);j.positions={Left:"left",Right:"right"},j.defaultProps={drawerWidth:0,drawerPosition:"left"},j.propTypes={drawerWidth:p["default"].number.isRequired,drawerPosition:p["default"].oneOf(["left","right"]).isRequired,renderNavigationView:p["default"].func.isRequired,onDrawerSlide:p["default"].func,onDrawerStateChanged:p["default"].func,onDrawerOpen:p["default"].func,onDrawerClose:p["default"].func,keyboardDismissMode:p["default"].oneOf(["none","on-drag"])};var N=h["default"].create({drawer:{position:"absolute",top:0,bottom:0},main:{flex:1},overlay:{backgroundColor:"#000",position:"absolute",top:0,left:0,bottom:0,right:0}});R["default"].onClass(j,E.Mixin),(0,P["default"])(j),j.isReactNativeComponent=!0,t["default"]=j},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e){var t=Object.keys(e)[0];return t+"("+e[t]+")"}function i(e){return e&&e.transform&&"string"!=typeof e.transform&&(e.transform=e.transform.map(o).join(" ")),e}function a(e,t){if(e.setNativeProps)e.setNativeProps(t);else{if(!e.nodeType||void 0===e.setAttribute)return!1;(0,f["default"])(e,i(t.style))}}Object.defineProperty(t,"__esModule",{value:!0});var u=Object.assign||function(e){for(var t=1;t1?t-1:0),r=1;rn){if("identity"===u)return s;"clamp"===u&&(s=n)}return r===o?r:t===n?e<=t?r:o:(t===-(1/0)?s=-s:n===1/0?s-=t:s=(s-t)/(n-t),s=i(s),r===-(1/0)?s=-s:o===1/0?s+=r:s=s*(o-r)+r,s)}function i(e){var t=d(e);if(null===t)return e;t=t||0;var n=(4278190080&t)>>>24,r=(16711680&t)>>>16,o=(65280&t)>>>8,i=(255&t)/255;return"rgba("+n+", "+r+", "+o+", "+i+")"}function a(e){var t=e.outputRange;h(t.length>=2,"Bad output range"),t=t.map(i),u(t);var n=t[0].match(m).map(function(){return[]});t.forEach(function(e){e.match(m).forEach(function(e,t){n[t].push(+e)})});var r=t[0].match(m).map(function(t,r){return y.create(f({},e,{outputRange:n[r]}))}),o=/^rgb/.test(t[0]);return function(e){var n=0;return t[0].replace(m,function(){var t=r[n++](e);return String(o&&n<4?Math.round(t):t)})}}function u(e){for(var t=e[0].replace(m,""),n=1;n=e);++n);return n-1}function l(e){h(e.length>=2,"inputRange must have at least 2 elements");for(var t=1;t=e[t-1],"inputRange must be monotonically increasing "+e)}function c(e,t){h(t.length>=2,e+" must have at least 2 elements"),h(2!==t.length||t[0]!==-(1/0)||t[1]!==1/0,e+"cannot be ]-infinity;+infinity[ "+t)}var f=Object.assign||function(e){for(var t=1;t>>0===e&&e>=0&&e<=4294967295?e:null:(t=p.hex6.exec(e))?parseInt(t[1]+"ff",16)>>>0:d.hasOwnProperty(e)?d[e]:(t=p.rgb.exec(e))?(a(t[1])<<24|a(t[2])<<16|a(t[3])<<8|255)>>>0:(t=p.rgba.exec(e))?(a(t[1])<<24|a(t[2])<<16|a(t[3])<<8|s(t[4]))>>>0:(t=p.hex3.exec(e))?parseInt(t[1]+t[1]+t[2]+t[2]+t[3]+t[3]+"ff",16)>>>0:(t=p.hex8.exec(e))?parseInt(t[1],16)>>>0:(t=p.hex4.exec(e))?parseInt(t[1]+t[1]+t[2]+t[2]+t[3]+t[3]+t[4]+t[4],16)>>>0:(t=p.hsl.exec(e))?(255|o(u(t[1]),l(t[2]),l(t[3])))>>>0:(t=p.hsla.exec(e))?(o(u(t[1]),l(t[2]),l(t[3]))|s(t[4]))>>>0:null}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function o(e,t,n){var o=n<.5?n*(1+t):n+t-n*t,i=2*n-o,a=r(i,o,e+1/3),u=r(i,o,e),s=r(i,o,e-1/3);return Math.round(255*a)<<24|Math.round(255*u)<<16|Math.round(255*s)<<8}function i(){for(var e=arguments.length,t=Array(e),n=0;n255?255:t}function u(e){var t=parseFloat(e);return(t%360+360)%360/360}function s(e){var t=parseFloat(e);return t<0?0:t>1?255:Math.round(255*t)}function l(e){var t=parseFloat(e,10);return t<0?0:t>100?1:t/100}var c="[-+]?\\d*\\.?\\d+",f=c+"%",p={rgb:new RegExp("rgb"+i(c,c,c)),rgba:new RegExp("rgba"+i(c,c,c,c)),hsl:new RegExp("hsl"+i(c,f,f)),hsla:new RegExp("hsla"+i(c,f,f,c)),hex3:/^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex4:/^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#([0-9a-fA-F]{6})$/,hex8:/^#([0-9a-fA-F]{8})$/},d={transparent:0,aliceblue:4042850303,antiquewhite:4209760255,aqua:16777215,aquamarine:2147472639,azure:4043309055,beige:4126530815,bisque:4293182719,black:255,blanchedalmond:4293643775,blue:65535,blueviolet:2318131967,brown:2771004159,burlywood:3736635391,burntsienna:3934150143,cadetblue:1604231423,chartreuse:2147418367,chocolate:3530104575,coral:4286533887,cornflowerblue:1687547391,cornsilk:4294499583,crimson:3692313855,cyan:16777215,darkblue:35839,darkcyan:9145343,darkgoldenrod:3095792639,darkgray:2846468607,darkgreen:6553855,darkgrey:2846468607,darkkhaki:3182914559,darkmagenta:2332068863,darkolivegreen:1433087999,darkorange:4287365375,darkorchid:2570243327,darkred:2332033279,darksalmon:3918953215,darkseagreen:2411499519,darkslateblue:1211993087,darkslategray:793726975,darkslategrey:793726975,darkturquoise:13554175,darkviolet:2483082239,deeppink:4279538687,deepskyblue:12582911,dimgray:1768516095,dimgrey:1768516095,dodgerblue:512819199,firebrick:2988581631,floralwhite:4294635775,forestgreen:579543807,fuchsia:4278255615,gainsboro:3705462015,ghostwhite:4177068031,gold:4292280575,goldenrod:3668254975,gray:2155905279,green:8388863,greenyellow:2919182335,grey:2155905279,honeydew:4043305215,hotpink:4285117695,indianred:3445382399,indigo:1258324735,ivory:4294963455,khaki:4041641215,lavender:3873897215,lavenderblush:4293981695,lawngreen:2096890111,lemonchiffon:4294626815,lightblue:2916673279,lightcoral:4034953471,lightcyan:3774873599,lightgoldenrodyellow:4210742015,lightgray:3553874943,lightgreen:2431553791,lightgrey:3553874943,lightpink:4290167295,lightsalmon:4288707327,lightseagreen:548580095,lightskyblue:2278488831,lightslategray:2005441023,lightslategrey:2005441023,lightsteelblue:2965692159,lightyellow:4294959359,lime:16711935,limegreen:852308735,linen:4210091775,magenta:4278255615,maroon:2147483903,mediumaquamarine:1724754687,mediumblue:52735,mediumorchid:3126187007,mediumpurple:2473647103,mediumseagreen:1018393087,mediumslateblue:2070474495,mediumspringgreen:16423679,mediumturquoise:1221709055,mediumvioletred:3340076543,midnightblue:421097727,mintcream:4127193855,mistyrose:4293190143,moccasin:4293178879,navajowhite:4292783615,navy:33023,oldlace:4260751103,olive:2155872511,olivedrab:1804477439,orange:4289003775,orangered:4282712319,orchid:3664828159,palegoldenrod:4008225535,palegreen:2566625535,paleturquoise:2951671551,palevioletred:3681588223,papayawhip:4293907967,peachpuff:4292524543,peru:3448061951,pink:4290825215,plum:3718307327,powderblue:2967529215,purple:2147516671,rebeccapurple:1714657791,red:4278190335,rosybrown:3163525119,royalblue:1097458175,saddlebrown:2336560127,salmon:4202722047,sandybrown:4104413439,seagreen:780883967,seashell:4294307583,sienna:2689740287,silver:3233857791,skyblue:2278484991,slateblue:1784335871,slategray:1887473919,slategrey:1887473919,snow:4294638335,springgreen:16744447,steelblue:1182971135,tan:3535047935,teal:8421631,thistle:3636451583,tomato:4284696575,turquoise:1088475391,violet:4001558271,wheat:4125012991,white:4294967295,whitesmoke:4126537215,yellow:4294902015,yellowgreen:2597139199};e.exports=n},function(e,t){"use strict";var n=0;e.exports=function(){return String(n++)}},function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n=0?s(l):r(this.length)-s(u(l)),t=l;t0?1:-1}},function(e,t,n){"use strict";e.exports=n(78)()?Object.setPrototypeOf:n(79)},function(e,t){"use strict";var n=Object.create,r=Object.getPrototypeOf,o={};e.exports=function(){var e=Object.setPrototypeOf,t=arguments[0]||n;return"function"==typeof e&&r(e(t(null),o))===o}},function(e,t,n){"use strict";var r,o=n(80),i=n(70),a=Object.prototype.isPrototypeOf,u=Object.defineProperty,s={configurable:!0,enumerable:!1,writable:!0,value:void 0};r=function(e,t){if(i(e),null===t||o(t))return e;throw new TypeError("Prototype must be null or an object")},e.exports=function(e){var t,n;return e?(2===e.level?e.set?(n=e.set,t=function(e,t){return n.call(r(e,t),t),e}):t=function(e,t){return r(e,t).__proto__=t,e}:t=function o(e,t){var n;return r(e,t),n=a.call(o.nullPolyfill,e),n&&delete o.nullPolyfill.__proto__,null===t&&(t=o.nullPolyfill),e.__proto__=t,n&&u(o.nullPolyfill,"__proto__",s),e},Object.defineProperty(t,"level",{configurable:!1,enumerable:!1,writable:!1,value:e.level})):null}(function(){var e,t=Object.create(null),n={},r=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__");if(r){try{e=r.set,e.call(t,n)}catch(o){}if(Object.getPrototypeOf(t)===n)return{set:e,level:2}}return t.__proto__=n,Object.getPrototypeOf(t)===n?{level:2}:(t={},t.__proto__=n,Object.getPrototypeOf(t)===n&&{level:1})}()),n(81)},function(e,t){"use strict";var n={"function":!0,object:!0};e.exports=function(e){return null!=e&&n[typeof e]||!1}},function(e,t,n){"use strict";var r,o=Object.create;n(78)()||(r=n(79)),e.exports=function(){var e,t,n;return r?1!==r.level?o:(e={},t={},n={configurable:!1,enumerable:!1,writable:!0,value:void 0},Object.getOwnPropertyNames(Object.prototype).forEach(function(e){return"__proto__"===e?void(t[e]={configurable:!0,enumerable:!1,writable:!0,value:void 0}):void(t[e]=n)}),Object.defineProperties(e,t),Object.defineProperty(r,"nullPolyfill",{configurable:!1,enumerable:!1,writable:!1,value:e}),function(t,n){return o(null===t?e:t,n)}):o}()},function(e,t){"use strict";e.exports=function(e){if("function"!=typeof e)throw new TypeError(e+" is not a function");return e}},function(e,t,n){"use strict";var r,o=n(84),i=n(90),a=n(91),u=n(92);r=e.exports=function(e,t){var n,r,a,s,l;return arguments.length<2||"string"!=typeof e?(s=t,t=e,e=null):s=arguments[2],null==e?(n=a=!0,r=!1):(n=u.call(e,"c"),r=u.call(e,"e"),a=u.call(e,"w")),l={value:t,configurable:n,enumerable:r,writable:a},s?o(i(s),l):l},r.gs=function(e,t,n){var r,s,l,c;return"string"!=typeof e?(l=n,n=t,t=e,e=null):l=arguments[3],null==t?t=void 0:a(t)?null==n?n=void 0:a(n)||(l=n,n=void 0):(l=t,t=n=void 0),null==e?(r=!0,s=!1):(r=u.call(e,"c"),s=u.call(e,"e")),c={get:t,set:n,configurable:r,enumerable:s},l?o(i(l),c):c}},function(e,t,n){"use strict";e.exports=n(85)()?Object.assign:n(86)},function(e,t){"use strict";e.exports=function(){var e,t=Object.assign;return"function"==typeof t&&(e={foo:"raz"},t(e,{bar:"dwa"},{trzy:"trzy"}),e.foo+e.bar+e.trzy==="razdwatrzy")}},function(e,t,n){"use strict";var r=n(87),o=n(70),i=Math.max;e.exports=function(e,t){var n,a,u,s=i(arguments.length,2);for(e=Object(o(e)),u=function(r){try{e[r]=t[r]}catch(o){n||(n=o)}},a=1;a-1}},function(e,t,n){"use strict";var r,o,i,a,u,s,l,c=n(83),f=n(82),p=Function.prototype.apply,d=Function.prototype.call,h=Object.create,v=Object.defineProperty,y=Object.defineProperties,m=Object.prototype.hasOwnProperty,g={configurable:!0,enumerable:!1,writable:!0};r=function(e,t){var n;return f(t),m.call(this,"__ee__")?n=this.__ee__:(n=g.value=h(null),v(this,"__ee__",g),g.value=null),n[e]?"object"==typeof n[e]?n[e].push(t):n[e]=[n[e],t]:n[e]=t,this},o=function(e,t){var n,o;return f(t),o=this,r.call(this,e,n=function(){i.call(o,e,n),p.call(t,this,arguments)}),n.__eeOnceListener__=t,this},i=function(e,t){var n,r,o,i;if(f(t),!m.call(this,"__ee__"))return this;if(n=this.__ee__,!n[e])return this;if(r=n[e],"object"==typeof r)for(i=0;o=r[i];++i)o!==t&&o.__eeOnceListener__!==t||(2===r.length?n[e]=r[i?0:1]:r.splice(i,1));else r!==t&&r.__eeOnceListener__!==t||delete n[e];return this},a=function(e){var t,n,r,o,i;if(m.call(this,"__ee__")&&(o=this.__ee__[e]))if("object"==typeof o){for(n=arguments.length,i=new Array(n-1),t=1;t=55296&&y<=56319&&(v+=e[++d])),s.call(t,m,v,f),!p);++d);}},function(e,t,n){"use strict";var r=n(103),o=n(104),i=n(107),a=n(119),u=n(101),s=n(96).iterator;e.exports=function(e){return"function"==typeof u(e)[s]?e[s]():r(e)?new i(e):o(e)?new a(e):new i(e)}},function(e,t,n){"use strict";var r,o=n(77),i=n(92),a=n(83),u=n(108),s=Object.defineProperty;r=e.exports=function(e,t){return this instanceof r?(u.call(this,e),t=t?i.call(t,"key+value")?"key+value":i.call(t,"key")?"key":"value":"value",void s(this,"__kind__",a("",t))):new r(e,t)},o&&o(r,u),r.prototype=Object.create(u.prototype,{constructor:a(r),_resolve:a(function(e){return"value"===this.__kind__?this.__list__[e]:"key+value"===this.__kind__?[e,this.__list__[e]]:e}),toString:a(function(){return"[object Array Iterator]"})})},function(e,t,n){"use strict";var r,o=n(69),i=n(84),a=n(82),u=n(70),s=n(83),l=n(109),c=n(96),f=Object.defineProperty,p=Object.defineProperties;e.exports=r=function(e,t){return this instanceof r?(p(this,{__list__:s("w",u(e)),__context__:s("w",t),__nextIndex__:s("w",0)}),void(t&&(a(t.on),t.on("_add",this._onAdd),t.on("_delete",this._onDelete),t.on("_clear",this._onClear)))):new r(e,t)},p(r.prototype,i({constructor:s(r),_next:s(function(){var e;if(this.__list__)return this.__redo__&&(e=this.__redo__.shift(),void 0!==e)?e:this.__nextIndex__=this.__nextIndex__)){if(++this.__nextIndex__,!this.__redo__)return void f(this,"__redo__",s("c",[e]));this.__redo__.forEach(function(t,n){t>=e&&(this.__redo__[n]=++t)},this),this.__redo__.push(e)}}),_onDelete:s(function(e){var t;e>=this.__nextIndex__||(--this.__nextIndex__,this.__redo__&&(t=this.__redo__.indexOf(e),t!==-1&&this.__redo__.splice(t,1),this.__redo__.forEach(function(t,n){t>e&&(this.__redo__[n]=--t)},this)))}),_onClear:s(function(){this.__redo__&&o.call(this.__redo__),this.__nextIndex__=0})}))),f(r.prototype,c.iterator,s(function(){return this})),f(r.prototype,c.toStringTag,s("","Iterator"))},function(e,t,n){"use strict";var r,o=n(110),i=n(90),a=n(82),u=n(116),s=n(82),l=n(70),c=Function.prototype.bind,f=Object.defineProperty,p=Object.prototype.hasOwnProperty;r=function(e,t,n){var r,i=l(t)&&s(t.value);return r=o(t),delete r.writable,delete r.value,r.get=function(){return!n.overwriteDefinition&&p.call(this,e)?i:(t.value=c.call(i,n.resolveContext?n.resolveContext(this):this),f(this,e,t),this[e])},r},e.exports=function(e){var t=i(arguments[1]);return null!=t.resolveContext&&a(t.resolveContext),u(e,function(e,n){return r(n,e,t)})}},function(e,t,n){"use strict";var r=n(111),o=n(84),i=n(70);e.exports=function(e){var t=Object(i(e)),n=arguments[1],a=Object(arguments[2]);if(t!==e&&!n)return t;var u={};return n?r(n,function(t){(a.ensure||t in e)&&(u[t]=e[t])}):o(u,e),u}},function(e,t,n){"use strict";e.exports=n(112)()?Array.from:n(113)},function(e,t){"use strict";e.exports=function(){var e,t,n=Array.from;return"function"==typeof n&&(e=["raz","dwa"],t=n(e),Boolean(t&&t!==e&&"dwa"===t[1]))}},function(e,t,n){"use strict";var r=n(96).iterator,o=n(103),i=n(114),a=n(72),u=n(82),s=n(70),l=n(104),c=Array.isArray,f=Function.prototype.call,p={configurable:!0,enumerable:!0,writable:!0,value:null},d=Object.defineProperty;e.exports=function(e){var t,n,h,v,y,m,g,_,b,w,S=arguments[1],E=arguments[2];if(e=Object(s(e)),null!=S&&u(S),this&&this!==Array&&i(this))t=this;else{if(!S){if(o(e))return y=e.length,1!==y?Array.apply(null,e):(v=new Array(1),v[0]=e[0],v);if(c(e)){for(v=new Array(y=e.length),n=0;n=55296&&m<=56319&&(w+=e[++n])),w=S?f.call(S,E,w,h):w,t?(p.value=w,d(v,h,p)):v[h]=w,++h;y=h}if(void 0===y)for(y=a(e.length),t&&(v=new t(y)),n=0;n=55296&&t<=56319?n+this.__list__[this.__nextIndex__++]:n)}),toString:i(function(){return"[object String Iterator]"})})},function(e,t,n){"use strict";var r,o=n(77),i=n(92),a=n(83),u=n(108),s=n(96).toStringTag,l=Object.defineProperty;r=e.exports=function(e,t){return this instanceof r?(u.call(this,e.__setData__,e),t=t&&i.call(t,"key+value")?"key+value":"value",void l(this,"__kind__",a("",t))):new r(e,t)},o&&o(r,u),r.prototype=Object.create(u.prototype,{constructor:a(r),_resolve:a(function(e){return"value"===this.__kind__?this.__list__[e]:[this.__list__[e],this.__list__[e]]}),toString:a(function(){return"[object Set Iterator]"})}),l(r.prototype,s,a("c","Set Iterator"))},function(e,t){"use strict";e.exports=function(){return"undefined"!=typeof Set&&"[object Set]"===Object.prototype.toString.call(Set.prototype)}()},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var a=function(){function e(e,t){for(var n=0;n=this._startTime+this._duration?(0===this._duration?this._onUpdate(this._toValue):this._onUpdate(this._fromValue+this._easing(1)*(this._toValue-this._fromValue)),void this.__debouncedOnEnd({finished:!0})):(this._onUpdate(this._fromValue+this._easing((e-this._startTime)/this._duration)*(this._toValue-this._fromValue)),void(this.__active&&(this._animationFrame=l.current(this.onUpdate.bind(this)))))}},{key:"stop",value:function(){this.__active=!1,clearTimeout(this._timeout),c.current(this._animationFrame),this.__debouncedOnEnd({finished:!1})}}]),t}(u);e.exports=p},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=function(){function e(e,t){for(var n=0;n0?1:0}},{key:"step1",value:function(e){return e>=1?1:0}},{key:"linear",value:function(e){return e}},{key:"ease",value:function(e){return u(e)}},{key:"quad",value:function(e){return e*e}},{key:"cubic",value:function(e){return e*e*e}},{key:"poly",value:function(e){return function(t){return Math.pow(t,e)}}},{key:"sin",value:function(e){return 1-Math.cos(e*Math.PI/2)}},{key:"circle",value:function(e){return 1-Math.sqrt(1-e*e)}},{key:"exp",value:function(e){return Math.pow(2,10*(e-1))}},{key:"elastic",value:function(){var e=arguments.length<=0||void 0===arguments[0]?1:arguments[0],t=e*Math.PI;return function(e){return 1-Math.pow(Math.cos(e*Math.PI/2),3)*Math.cos(e*t)}}},{key:"back",value:function(e){return void 0===e&&(e=1.70158),function(t){return t*t*((e+1)*t-e)}}},{key:"bounce",value:function(e){return e<1/2.75?7.5625*e*e:e<2/2.75?(e-=1.5/2.75,7.5625*e*e+.75):e<2.5/2.75?(e-=2.25/2.75,7.5625*e*e+.9375):(e-=2.625/2.75,7.5625*e*e+.984375)}},{key:"bezier",value:function(e,t,n,r){return i(e,t,n,r)}},{key:"in",value:function(e){return e}},{key:"out",value:function(e){return function(t){return 1-e(1-t)}}},{key:"inOut",value:function(e){return function(t){return t<.5?e(2*t)/2:1-e(2*(1-t))/2}}}]),e}(),u=a.bezier(.42,0,1,1);e.exports=a},function(e,t){function n(e,t){return 1-3*t+3*e}function r(e,t){return 3*t-6*e}function o(e){return 3*e}function i(e,t,i){return((n(t,i)*e+r(t,i))*e+o(t))*e}function a(e,t,i){return 3*n(t,i)*e*e+2*r(t,i)*e+o(t)}function u(e,t,n,r,o){var a,u,s=0;do u=t+(n-t)/2,a=i(u,r,o)-e,a>0?n=u:t=u;while(Math.abs(a)>f&&++s=c?s(t,p,e,n):0===v?p:u(t,r,r+h,e,n)}if(!(0<=e&&e<=1&&0<=n&&n<=1))throw new Error("bezier x values must be in [0, 1] range");var l=v?new Float32Array(d):new Array(d);if(e!==t||n!==r)for(var f=0;fthis._lastTime+o&&(i=this._lastTime+o);for(var a=1,u=Math.floor((i-this._lastTime)/a),s=0;sthis._toValue:e18&&e<=44?l(e):c(e)}var p=o(e/1.7,0,20);p=i(p,0,.8);var d=o(t/1.7,0,20),h=i(d,.5,200),v=u(p,f(h),.01);return{tension:n(h),friction:r(v)}}e.exports={fromOrigamiTensionAndFriction:o,fromBouncinessAndSpeed:i}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function a(e){var t="node",n=function(n){function a(){return r(this,a),o(this,Object.getPrototypeOf(a).apply(this,arguments))}return i(a,n),s(a,[{key:"componentWillUnmount",value:function(){this._propsAnimated&&this._propsAnimated.__detach()}},{key:"setNativeProps",value:function(e){var n=f.current(this.refs[t],e);n===!1&&this.forceUpdate()}},{key:"componentWillMount",value:function(){this.attachProps(this.props)}},{key:"attachProps",value:function(e){var n=this,r=this._propsAnimated,o=function(){var e=f.current(n.refs[t],n._propsAnimated.__getAnimatedValue());e===!1&&n.forceUpdate()};this._propsAnimated=new c(e,o),r&&r.__detach()}},{key:"componentWillReceiveProps",value:function(e){this.attachProps(e)}},{key:"render",value:function(){return l.createElement(e,u({},this._propsAnimated.__getValue(),{ref:t}))}}]),a}(l.Component);return n.propTypes={style:function(t,n,r){!e.propTypes}},n}var u=Object.assign||function(e){for(var t=1;tg&&this._cancelLongPressDelayTimeout()}var y=f>t.left-o&&d>t.top-a&&f0,o=n&&n.length>0;return!r&&o?n[0]:r?t[0]:e}};e.exports=n},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function u(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var s=Object.assign||function(e){for(var t=1;tc+o&&(e.scrollTop=t.y,e.scrollLeft=t.x,f=!1,i&&i())}};n(h)};"undefined"!=typeof e&&"undefined"!=typeof e.exports?e.exports=o:t.animatedScrollTo=o}(window)},function(e,t){"use strict";e.exports=function(e,t){var n=!0;return function(r){n&&(n=!1,setTimeout(function(){n=!0},t),e(r))}}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0}),n(157);var o=n(160),i=r(o),a=i["default"].currentCentroidXOfTouchesChangedAfter,u=i["default"].currentCentroidYOfTouchesChangedAfter,s=i["default"].previousCentroidXOfTouchesChangedAfter,l=i["default"].previousCentroidYOfTouchesChangedAfter,c=i["default"].currentCentroidX,f=i["default"].currentCentroidY,p={_initializeGestureState:function(e){e.moveX=0,e.moveY=0,e.x0=0,e.y0=0,e.dx=0,e.dy=0,e.vx=0,e.vy=0,e.numberActiveTouches=0,e._accountsForMovesUpTo=0},_updateGestureStateOnMove:function(e,t){e.numberActiveTouches=t.numberActiveTouches,e.moveX=a(t,e._accountsForMovesUpTo),e.moveY=u(t,e._accountsForMovesUpTo);var n=e._accountsForMovesUpTo,r=s(t,n),o=a(t,n),i=l(t,n),c=u(t,n),f=e.dx+(o-r),p=e.dy+(c-i),d=t.mostRecentTimeStamp-e._accountsForMovesUpTo;e.vx=(f-e.dx)/d,e.vy=(p-e.dy)/d,e.dx=f,e.dy=p,e._accountsForMovesUpTo=t.mostRecentTimeStamp},create:function(e){var t={stateID:Math.random()};p._initializeGestureState(t);var n={onStartShouldSetResponder:function(n){return void 0!==e.onStartShouldSetPanResponder&&e.onStartShouldSetPanResponder(n,t)},onMoveShouldSetResponder:function(n){return void 0!==e.onMoveShouldSetPanResponder&&e.onMoveShouldSetPanResponder(n,t)},onStartShouldSetResponderCapture:function(n){return!!n.nativeEvent.touches&&(1===n.nativeEvent.touches.length&&p._initializeGestureState(t),t.numberActiveTouches=n.touchHistory.numberActiveTouches,void 0!==e.onStartShouldSetPanResponderCapture&&e.onStartShouldSetPanResponderCapture(n,t))},onMoveShouldSetResponderCapture:function(n){var r=n.touchHistory;return t._accountsForMovesUpTo!==r.mostRecentTimeStamp&&(p._updateGestureStateOnMove(t,r),!!e.onMoveShouldSetPanResponderCapture&&e.onMoveShouldSetPanResponderCapture(n,t))},onResponderGrant:function(n){return t.x0=c(n.touchHistory),t.y0=f(n.touchHistory),t.dx=0,t.dy=0,e.onPanResponderGrant&&e.onPanResponderGrant(n,t),void 0===e.onShouldBlockNativeResponder||e.onShouldBlockNativeResponder()},onResponderReject:function(n){e.onPanResponderReject&&e.onPanResponderReject(n,t)},onResponderRelease:function(n){e.onPanResponderRelease&&e.onPanResponderRelease(n,t),p._initializeGestureState(t)},onResponderStart:function(n){var r=n.touchHistory;t.numberActiveTouches=r.numberActiveTouches,e.onPanResponderStart&&e.onPanResponderStart(n,t)},onResponderMove:function(n){var r=n.touchHistory;t._accountsForMovesUpTo!==r.mostRecentTimeStamp&&(p._updateGestureStateOnMove(t,r),e.onPanResponderMove&&e.onPanResponderMove(n,t))},onResponderEnd:function(n){var r=n.touchHistory;t.numberActiveTouches=r.numberActiveTouches,e.onPanResponderEnd&&e.onPanResponderEnd(n,t)},onResponderTerminate:function(n){e.onPanResponderTerminate&&e.onPanResponderTerminate(n,t),p._initializeGestureState(t)},onResponderTerminationRequest:function(n){return void 0===e.onPanResponderTerminationRequest||e.onPanResponderTerminationRequest(n,t)}};return{panHandlers:n}}};t["default"]=p},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e){return e&&Array.prototype.slice.call(e)||[]}function i(e){return e>20?e%20:e}var a=n(31),u=r(a),s=n(158),l=r(s),c=u["default"].__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.EventPluginHub,f=l["default"].ResponderEventPlugin,p=l["default"].ResponderTouchHistoryStore,d=f.eventTypes;d.startShouldSetResponder.dependencies=["topTouchStart"],d.scrollShouldSetResponder.dependencies=["topScroll"],d.selectionChangeShouldSetResponder.dependencies=["topSelectionChange"],d.moveShouldSetResponder.dependencies=["topTouchMove"],["responderStart","responderMove","responderEnd","responderRelease","responderTerminationRequest","responderGrant","responderReject","responderTerminate"].forEach(function(e){var t=void 0;t="ontouchstart"in window?["topTouchStart","topTouchCancel","topTouchEnd","topTouchMove"]:["topMouseDown","topMouseUp"],d[e].dependencies=t});var h=function(e,t){var n=t.timestamp||t.timeStamp;return o(e).map(function(e){return{clientX:e.clientX,clientY:e.clientY,force:e.force,pageX:e.pageX,pageY:e.pageY,radiusX:e.radiusX,radiusY:e.radiusY,rotationAngle:e.rotationAngle,screenX:e.screenX,screenY:e.screenY,target:e.target,timestamp:n,identifier:i(e.identifier)}})},v=p.recordTouchTrack;p.recordTouchTrack=function(e,t){v.call(p,e,{changedTouches:h(t.changedTouches,t),touches:h(t.touches,t)})},c.injection.injectEventPluginsByName({ResponderEventPlugin:f})},function(e,t,n){"use strict";e.exports=n(159)},function(e,t,n){"use strict";function r(e){for(var t=arguments.length-1,n="Minified React error #"+e+"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant="+e,r=0;r-1||te("96",e),!fe.plugins[n]){t.extractEvents||te("97",e),fe.plugins[n]=t;var r=t.eventTypes;for(var o in r)h(r[o],t,o)||te("98",o,e)}}}function h(e,t,n){fe.eventNameDispatchConfigs.hasOwnProperty(n)&&te("99",n),fe.eventNameDispatchConfigs[n]=e;var r=e.phasedRegistrationNames;if(r){for(var o in r)if(r.hasOwnProperty(o)){var i=r[o];v(i,t,n)}return!0}return!!e.registrationName&&(v(e.registrationName,t,n),!0)}function v(e,t,n){fe.registrationNameModules[e]&&te("100",e),fe.registrationNameModules[e]=t,fe.registrationNameDependencies[e]=t.eventTypes[n].dependencies}function y(e,t){return null==t&&te("30"),null==e?t:Array.isArray(e)?Array.isArray(t)?(e.push.apply(e,t),e):(e.push(t),e):Array.isArray(t)?[e].concat(t):[e,t]}function m(e,t,n){Array.isArray(e)?e.forEach(t,n):e&&t.call(n,e)}function g(e){return"button"===e||"input"===e||"select"===e||"textarea"===e}function _(e,t,n){switch(e){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":return!(!n.disabled||!g(t));default:return!1}}function b(e){if(void 0!==e._hostParent)return e._hostParent;if("number"==typeof e.tag){do e=e["return"];while(e&&e.tag!==Se);if(e)return e}return null}function w(e,t){for(var n=0,r=e;r;r=b(r))n++;for(var o=0,i=t;i;i=b(i))o++;for(;n-o>0;)e=b(e),n--;for(;o-n>0;)t=b(t),o--;for(var a=n;a--;){if(e===t||e===t.alternate)return e;e=b(e),t=b(t)}return null}function S(e,t){for(;t;){if(e===t||e===t.alternate)return!0;t=b(t)}return!1}function E(e){return b(e)}function C(e,t,n){for(var r=[];e;)r.push(e),e=b(e);var o;for(o=r.length;o-- >0;)t(r[o],"captured",n);for(o=0;o0;)n(u[s],"captured",o)}function T(e,t,n){var r=t.dispatchConfig.phasedRegistrationNames[n];return Ce(e,r)}function P(e,t,n){var r=T(e,n,t);r&&(n._dispatchListeners=de(n._dispatchListeners,r),n._dispatchInstances=de(n._dispatchInstances,e))}function O(e){e&&e.dispatchConfig.phasedRegistrationNames&&Ee.traverseTwoPhase(e._targetInst,P,e)}function x(e){if(e&&e.dispatchConfig.phasedRegistrationNames){var t=e._targetInst,n=t?Ee.getParentInstance(t):null;Ee.traverseTwoPhase(n,P,e)}}function k(e,t,n){if(e&&n&&n.dispatchConfig.registrationName){var r=n.dispatchConfig.registrationName,o=Ce(e,r);o&&(n._dispatchListeners=de(n._dispatchListeners,o),n._dispatchInstances=de(n._dispatchInstances,e))}}function I(e){e&&e.dispatchConfig.registrationName&&k(e._targetInst,null,e)}function M(e){he(e,O)}function A(e){he(e,x)}function j(e,t,n,r){Ee.traverseEnterLeave(n,r,k,e,t)}function N(e){he(e,I)}function D(e,t,n,r){this.dispatchConfig=e,this._targetInst=t,this.nativeEvent=n;var o=this.constructor.Interface;for(var i in o)if(o.hasOwnProperty(i)){var a=o[i];a?this[i]=a(n):"target"===i?this.target=r:this[i]=n[i]}var u=null!=n.defaultPrevented?n.defaultPrevented:!1===n.returnValue;return this.isDefaultPrevented=u?Z.thatReturnsTrue:Z.thatReturnsFalse,this.isPropagationStopped=Z.thatReturnsFalse,this}function L(e,t,n,r){return He.call(this,e,t,n,r)}function F(e){return e.timeStamp||e.timestamp}function H(e){return{touchActive:!0,startPageX:e.pageX,startPageY:e.pageY,startTimeStamp:F(e),currentPageX:e.pageX,currentPageY:e.pageY,currentTimeStamp:F(e),previousPageX:e.pageX,previousPageY:e.pageY,previousTimeStamp:F(e)}}function V(e,t){e.touchActive=!0,e.startPageX=t.pageX,e.startPageY=t.pageY,e.startTimeStamp=F(t),e.currentPageX=t.pageX,e.currentPageY=t.pageY,e.currentTimeStamp=F(t),e.previousPageX=t.pageX,e.previousPageY=t.pageY,e.previousTimeStamp=F(t)}function U(e){var t=e.identifier;return null==t&&te("138"),t}function z(e){var t=U(e),n=qe[t];n?V(n,e):qe[t]=H(e),Ye.mostRecentTimeStamp=F(e)}function B(e){var t=qe[U(e)];t?(t.touchActive=!0,t.previousPageX=t.currentPageX,t.previousPageY=t.currentPageY,t.previousTimeStamp=t.currentTimeStamp,t.currentPageX=e.pageX,t.currentPageY=e.pageY,t.currentTimeStamp=F(e),Ye.mostRecentTimeStamp=F(e)):console.error("Cannot record touch move without a touch start.\nTouch Move: %s\n","Touch Bank: %s",G(e),q())}function W(e){var t=qe[U(e)];t?(t.touchActive=!1,t.previousPageX=t.currentPageX,t.previousPageY=t.currentPageY,t.previousTimeStamp=t.currentTimeStamp,t.currentPageX=e.pageX,t.currentPageY=e.pageY,t.currentTimeStamp=F(e),Ye.mostRecentTimeStamp=F(e)):console.error("Cannot record touch end without a touch start.\nTouch End: %s\n","Touch Bank: %s",G(e),q())}function G(e){return JSON.stringify({identifier:e.identifier,pageX:e.pageX,pageY:e.pageY,timestamp:F(e)})}function q(){var e=JSON.stringify(qe.slice(0,Ge));return qe.length>Ge&&(e+=" (original size: "+qe.length+")"),e}function Y(e,t){return null==t&&te("29"),null==e?t:Array.isArray(e)?e.concat(t):Array.isArray(t)?[e].concat(t):[e,t]}function K(e,t,n,r){var o=$e(e)?ut.startShouldSetResponder:Je(e)?ut.moveShouldSetResponder:"topSelectionChange"===e?ut.selectionChangeShouldSetResponder:ut.scrollShouldSetResponder,i=rt?Ee.getLowestCommonAncestor(rt,t):t,a=i===rt,u=Ue.getPooled(o,i,n,r);u.touchHistory=Xe.touchHistory,a?Te.accumulateTwoPhaseDispatchesSkipTarget(u):Te.accumulateTwoPhaseDispatches(u);var s=nt(u);if(u.isPersistent()||u.constructor.release(u),!s||s===rt)return null;var l,c=Ue.getPooled(ut.responderGrant,s,n,r);c.touchHistory=Xe.touchHistory,Te.accumulateDirectDispatches(c);var f=!0===et(c);if(rt){var p=Ue.getPooled(ut.responderTerminationRequest,rt,n,r);p.touchHistory=Xe.touchHistory,Te.accumulateDirectDispatches(p);var d=!tt(p)||et(p);if(p.isPersistent()||p.constructor.release(p),d){var h=Ue.getPooled(ut.responderTerminate,rt,n,r);h.touchHistory=Xe.touchHistory,Te.accumulateDirectDispatches(h),l=Qe(l,[c,h]),at(s,f)}else{var v=Ue.getPooled(ut.responderReject,s,n,r);v.touchHistory=Xe.touchHistory,Te.accumulateDirectDispatches(v),l=Qe(l,v)}}else l=Qe(l,c),at(s,f);return l}function X(e,t,n){return t&&("topScroll"===e&&!n.responderIgnoreScroll||ot>0&&"topSelectionChange"===e||$e(e)||Je(e))}function Q(e){var t=e.touches;if(!t||0===t.length)return!0;for(var n=0;n=0))return console.error("Ended a touch event which was not counted in `trackedTouchCount`."),null;ot-=1}Xe.recordTouchTrack(e,n);var o=X(e,t,n)?K(e,t,n,r):null,i=rt&&$e(e),a=rt&&Je(e),u=rt&&Ze(e),s=i?ut.responderStart:a?ut.responderMove:u?ut.responderEnd:null;if(s){var l=Ue.getPooled(s,rt,n,r);l.touchHistory=Xe.touchHistory,Te.accumulateDirectDispatches(l),o=Qe(o,l)}var c=rt&&"topTouchCancel"===e,f=rt&&!c&&Ze(e)&&Q(n),p=c?ut.responderTerminate:f?ut.responderRelease:null;if(p){var d=Ue.getPooled(p,rt,n,r);d.touchHistory=Xe.touchHistory,Te.accumulateDirectDispatches(d),o=Qe(o,d),at(null)}var h=Xe.touchHistory.numberActiveTouches;return st.GlobalInteractionHandler&&h!==it&&st.GlobalInteractionHandler.onChange(h),it=h,o},GlobalResponderHandler:null,GlobalInteractionHandler:null,injection:{injectGlobalResponderHandler:function(e){st.GlobalResponderHandler=e},injectGlobalInteractionHandler:function(e){st.GlobalInteractionHandler=e}}},lt=st,ct={injectComponentTree:se.injection.injectComponentTree,ResponderEventPlugin:lt,ResponderTouchHistoryStore:Xe},ft=ee.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactDOMComponentTree;ct.injectComponentTree(ft);var pt=ct;e.exports=pt},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n={centroidDimension:function(e,t,r,o){var i=e.touchBank,a=0,u=0,s=1===e.numberActiveTouches?e.touchBank[e.indexOfSingleActiveTouch]:null;if(null!==s)s.touchActive&&s.currentTimeStamp>t&&(a+=o&&r?s.currentPageX:o&&!r?s.currentPageY:!o&&r?s.previousPageX:s.previousPageY,u=1);else for(var l=0;l=t){var f=void 0;f=o&&r?c.currentPageX:o&&!r?c.currentPageY:!o&&r?c.previousPageX:c.previousPageY,a+=f,u++}}return u>0?a/u:n.noCentroid},currentCentroidXOfTouchesChangedAfter:function(e,t){return n.centroidDimension(e,t,!0,!0)},currentCentroidYOfTouchesChangedAfter:function(e,t){return n.centroidDimension(e,t,!1,!0)},previousCentroidXOfTouchesChangedAfter:function(e,t){return n.centroidDimension(e,t,!0,!1)},previousCentroidYOfTouchesChangedAfter:function(e,t){return n.centroidDimension(e,t,!1,!1)},currentCentroidX:function(e){return n.centroidDimension(e,0,!0,!0)},currentCentroidY:function(e){return n.centroidDimension(e,0,!1,!0)},noCentroid:-1};t["default"]=n},function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n1){for(var o=[],i=0;i1?(g(Array.isArray(e),"FlatList: Encountered internal consistency error, expected each item to consist of an array with 1-%s columns; instead, received a single item.",i),e.map(function(e,n){return o(e,t*i+n)}).join(":")):o(e,t)},r._onViewableItemsChanged=function(e){var t=r.props,n=t.numColumns,o=t.onViewableItemsChanged;if(o)if(n>1){var i=[],a=[];e.viewableItems.forEach(function(e){return r._pushMultiColumnViewable(a,e)}),e.changed.forEach(function(e){return r._pushMultiColumnViewable(i,e)}),o({viewableItems:a,changed:i})}else o(e)},r._renderItem=function(e){var t=r.props,n=t.renderItem,o=t.numColumns,i=t.columnWrapperStyle;if(o>1){var a=e.item,u=e.index;return g(Array.isArray(a),"Expected array of items with numColumns > 1"),c["default"].createElement(h["default"],{style:[{flexDirection:"row"},i]},a.map(function(e,t){var r=n({item:e,index:u*o+t});return r&&c["default"].cloneElement(r,{key:t})}))}return n(e)},r._shouldItemUpdate=function(e,t){var n=r.props,o=n.numColumns,i=n.shouldItemUpdate;return o>1?e.item.length!==t.item.length||e.item.some(function(n,r){return i({item:n,index:e.index+r},{item:t.item[r],index:t.index+r})}):i(e,t)},a=n,i(r,a)}return a(t,e),u(t,[{key:"scrollToEnd",value:function(e){this._listRef.scrollToEnd(e)}},{key:"scrollToIndex",value:function(e){this._listRef.scrollToIndex(e)}},{key:"scrollToItem",value:function(e){this._listRef.scrollToItem(e)}},{key:"scrollToOffset",value:function(e){this._listRef.scrollToOffset(e)}},{key:"recordInteraction",value:function(){this._listRef.recordInteraction()}},{key:"getScrollableNode",value:function(){return this._listRef&&this._listRef.getScrollableNode?this._listRef.getScrollableNode():(0,p["default"])(this._listRef)}},{key:"componentWillMount",value:function(){this._checkProps(this.props)}},{key:"componentWillReceiveProps",value:function(e){this._checkProps(e)}},{key:"_checkProps",value:function(e){var t=e.getItem,n=e.getItemCount,r=e.horizontal,o=e.legacyImplementation,i=e.numColumns,a=e.columnWrapperStyle;g(!t&&!n,"FlatList does not support custom data formats."),i>1?g(!r,"numColumns does not support horizontal."):g(!a,"columnWrapperStyle not supported for single column lists"),o&&(g(1===i,"Legacy list does not support multiple columns."),this._hasWarnedLegacy||(console.warn("FlatList: Using legacyImplementation - some features not supported and performance may suffer"),this._hasWarnedLegacy=!0))}},{key:"_pushMultiColumnViewable",value:function(e,t){var n=this.props,r=n.numColumns,o=n.keyExtractor;t.item.forEach(function(n,i){g(null!=t.index,"Missing index!");var a=t.index*r+i;e.push(s({},t,{item:n,key:o(n,a),index:a}))})}},{key:"render",value:function(){return this.props.legacyImplementation?c["default"].createElement(m,s({},this.props,{items:this.props.data,ref:this._captureRef})):c["default"].createElement(y["default"],s({},this.props,{renderItem:this._renderItem,getItem:this._getItem,getItemCount:this._getItemCount,keyExtractor:this._keyExtractor,ref:this._captureRef,shouldItemUpdate:this._shouldItemUpdate,onViewableItemsChanged:this.props.onViewableItemsChanged&&this._onViewableItemsChanged}))}}]),t}(c["default"].PureComponent);b.defaultProps=_,t["default"]=b},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(31);t["default"]=r.findDOMNode},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function u(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var s=Object.assign||function(e){for(var t=1;t=0&&a0){O=!1;var c=this.props.initialNumToRender-1,p=this.state,d=p.first,h=p.last;if(this._pushCells(s,0,c),!a&&d>c){var v=this._getFrameMetricsApprox(c),y=this._getFrameMetricsApprox(d).offset-(v.offset+v.length);s.push(f["default"].createElement(w["default"],{key:"$lead_spacer",style:o({},u?"width":"height",y)}))}if(this._pushCells(s,Math.max(c+1,d),h),!this._hasWarned.keys&&O&&(console.warn("VirtualizedList: missing keys for items, make sure to specify a key property on each item or provide a custom keyExtractor."),this._hasWarned.keys=!0),!a&&h500&&e._scrollMetrics.dt>500&&a>5*i&&!e._hasWarned.perf&&(C("VirtualizedList: You have a large list that is slow to update - make sure shouldItemUpdate is implemented effectively and consider getItemLayout, PureComponent, etc.",{dt:s,prevDt:e._scrollMetrics.dt,contentLength:a}),e._hasWarned.perf=!0);var l=u-e._scrollMetrics.offset,c=l/s;e._scrollMetrics={contentLength:a,dt:s,offset:u,timestamp:n,velocity:c,visibleLength:i};var f=e.props,p=f.data,h=f.getItemCount,v=f.onEndReached,y=f.onEndReachedThreshold,m=f.windowSize;if(e._updateViewableItems(p),p){var g=a-i-u,_=h(p);g0&&c<0||S<_-1&&c>0){var E=Math.min(Math.abs(e._getFrameMetricsApprox(w).offset-u),Math.abs(e._getFrameMetricsApprox(S).offset-(u+i))),R=Et,"Tried to get frame for out of range index "+t);var s=o(r,t),l=s&&e._frames[u(s,t)];return l&&l.index===t||a&&(l=a(r,t)),l}},I=function(e){function t(){var e,n,r,o;i(this,t);for(var u=arguments.length,s=Array(u),l=0;l0&&void 0!==arguments[0]?arguments[0]:{abort:!1};this._taskHandle&&(this._taskHandle.cancel(),e.abort||this._callback(),this._taskHandle=null)}},{key:"schedule",value:function(){var e=this;if(!this._taskHandle){var t=setTimeout(function(){e._taskHandle=u["default"].runAfterInteractions(function(){e._taskHandle=null,e._callback()})},this._delay);this._taskHandle={cancel:function(){return clearTimeout(t)}}}}}]),e}();e.exports=s},function(e,t){"use strict";e.exports={createInteractionHandle:function(){},clearInteractionHandle:function(){},runAfterInteractions:function(e){e()}}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t,n,r,o,u){if(a(n,r,o))return!0;var s=i(n,r,o),l=100*(e?s/o:s/u);return l>=t}function i(e,t,n){var r=Math.min(t,n)-Math.max(e,0);return Math.max(0,r)}function a(e,t,n){return e>=0&&t<=n&&t>e}var u=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{viewAreaCoveragePercentThreshold:0};r(this,e),this._hasInteracted=!1,this._lastUpdateTime=0,this._timers=new Set,this._viewableIndices=[],this._viewableItems=new Map,this._config=t}return l(e,[{key:"dispose",value:function(){this._timers.forEach(clearTimeout)}},{key:"computeViewableItems",value:function(e,t,n,r,i){var a=this._config,u=a.itemVisiblePercentThreshold,s=a.viewAreaCoveragePercentThreshold,l=null!=s,f=l?s:u;c(null!=f&&null!=u!=(null!=s),"Must set exactly one of itemVisiblePercentThreshold or viewAreaCoveragePercentThreshold");var p=[];if(0===e)return p;var d=-1,h=i||{first:0,last:e-1},v=h.first,y=h.last;c(y0)d=m,o(l,f,_,b,n,g.length)&&p.push(m);else if(d>=0)break}}return p}},{key:"onUpdate",value:function(e,t,n,r,o,i,a){var u=this,s=Date.now();0===this._lastUpdateTime&&e>0&&r(0)&&(this._lastUpdateTime=s);var l=this._lastUpdateTime?s-this._lastUpdateTime:0;if(!this._config.waitForInteraction||this._hasInteracted){var c=[];if(e&&(c=this.computeViewableItems(e,t,n,r,a)),this._viewableIndices.length!==c.length||!this._viewableIndices.every(function(e,t){return e===c[t]}))if(this._viewableIndices=c,this._lastUpdateTime=s,this._config.minimumViewTime&&l=l.length)break;p=l[f++]}else{if(f=l.next(),f.done)break;p=f.value}var d=p,h=s(d,2),v=h[0],y=h[1];o.has(v)||a.push(y)}for(var m=o,g=Array.isArray(m),_=0,m=g?m:m["function"==typeof Symbol?Symbol.iterator:"@@iterator"]();;){var b;if(g){if(_>=m.length)break;b=m[_++]}else{if(_=m.next(),_.done)break;b=_.value}var w=b,S=s(w,2),E=S[0],C=S[1];i.has(E)||a.push(u({},C,{isViewable:!1}))}a.length>0&&(this._viewableItems=i,t({viewableItems:Array.from(i.values()),changed:a}))}}]),e}();e.exports=f},function(e,t){"use strict";function n(){var e;return(e=console).log.apply(e,arguments)}e.exports=n},function(e,t,n){"use strict";function r(e,t,n){for(var r=[],o=0;o=e[s]&&(r[s]=o,s===e.length-1))return u(r.length===e.length,"bad offsets input, should be in increasing order "+JSON.stringify(e)),r;return r}function o(e,t){return t.last-t.first+1-Math.max(0,1+Math.min(t.last,e.last)-Math.max(t.first,e.first))}function i(e,t,n,i){var u=e.data,s=e.getItemCount,l=e.maxToRenderPerBatch,c=e.windowSize,f=s(u);if(0===f)return t;var p=i.offset,d=i.velocity,h=i.visibleLength,v=Math.max(0,p),y=v+h,m=(c-1)*h,g=Math.max(0,Math.min(1,d/5+.5)),_=Math.max(0,v-(1-g)*m),b=Math.max(0,y+g*m),w=r([_,v,y,b],e.getItemCount(e.data),n),S=a(w,4),E=S[0],C=S[1],R=S[2],T=S[3];E=null==E?0:E,C=null==C?Math.max(0,E):C,T=null==T?f-1:T,R=null==R?Math.min(T,C+l-1):R;for(var P={first:C,last:R},O=o(t,P);;){if(C<=E&&R>=T)break;var x=O>=l,k=C<=t.first||C>t.last,I=C>E&&(!x||!k),M=R>=t.last||R=C&&C>=0&&R=E&&R<=T&&C<=P.first&&R>=P.last))throw new Error("Bad window calculation "+JSON.stringify({first:C,last:R,itemCount:f,overscanFirst:E,overscanLast:T,visible:P}));return{first:C,last:R}}var a=function(){function e(e,t){var n=[],r=!0,o=!1,i=void 0;try{for(var a,u=e["function"==typeof Symbol?Symbol.iterator:"@@iterator"]();!(r=(a=u.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(s){o=!0,i=s}finally{try{!r&&u["return"]&&u["return"]()}finally{if(o)throw i}}return n}return function(t,n){if(Array.isArray(t))return t;if(("function"==typeof Symbol?Symbol.iterator:"@@iterator")in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),u=n(146),s={computeWindowedRenderLimits:i,elementsThatOverlapOffsets:r,newRangeCount:o};e.exports=s},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function u(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var s=Object.assign||function(e){for(var t=1;t=this._prevRenderedRowsCount&&t.sectionHeaderShouldUpdate(l);e.push(f["default"].createElement(E["default"],{key:"s_"+c,shouldUpdate:!!d,render:this.props.renderSectionHeader.bind(null,t.getSectionHeaderData(l),c)})),i.push(s++)}for(var h=0;h=this._prevRenderedRowsCount&&t.rowShouldUpdate(l,h),g=f["default"].createElement(E["default"],{key:"r_"+y,shouldUpdate:!!m,render:this.props.renderRow.bind(null,t.getRowData(l,h),c,v,this.onRowHighlighted)});if(e.push(g),s++,this.props.renderSeparator&&(h!==p.length-1||l===n.length-1)){var _=this.state.highlightedRow.sectionID===c&&(this.state.highlightedRow.rowID===v||this.state.highlightedRow.rowID===p[h+1]),b=this.props.renderSeparator(c,v,_);b&&(e.push(b),s++)}if(++r===this.state.curRenderedRowsCount)break}if(r>=this.state.curRenderedRowsCount)break}}var w=this.props,S=w.renderScrollComponent,C=o(w,["renderScrollComponent"]);return C.scrollEventThrottle||(C.scrollEventThrottle=D),void 0===C.removeClippedSubviews&&(C.removeClippedSubviews=!0),(0,x["default"])(C,{onScroll:this._onScroll,stickyHeaderIndices:this.props.stickyHeaderIndices.concat(i),onKeyboardWillShow:void 0,onKeyboardWillHide:void 0,onKeyboardDidShow:void 0,onKeyboardDidHide:void 0}),f["default"].cloneElement(S(C),{ref:this._captureRef,onContentSizeChange:this._onContentSizeChange,onLayout:this._onLayout},a,e,u)}},{key:"_measureAndUpdateScrollProps",value:function(){var e=this.getScrollResponder();!e||!e.getInnerViewNode}},{key:"_onContentSizeChange",value:function(e,t){var n=this.props.horizontal?e:t;n!==this.scrollProperties.contentLength&&(this.scrollProperties.contentLength=n,this._updateVisibleRows(),this._renderMoreRowsIfNeeded()),this.props.onContentSizeChange&&this.props.onContentSizeChange(e,t)}},{key:"_onLayout",value:function(e){var t=e.nativeEvent.layout,n=t.width,r=t.height,o=this.props.horizontal?n:r;o!==this.scrollProperties.visibleLength&&(this.scrollProperties.visibleLength=o,this._updateVisibleRows(),this._renderMoreRowsIfNeeded()),this.props.onLayout&&this.props.onLayout(e)}},{key:"_maybeCallOnEndReached",value:function(e){return!!(this.props.onEndReached&&this.scrollProperties.contentLength!==this._sentEndForContentLength&&this._getDistanceFromEnd(this.scrollProperties)this.props.onEndReachedThreshold&&(this._sentEndForContentLength=null),this.props.onScroll&&this.props.onScroll(e)}}]),t}(c.Component);L.DataSource=m["default"],L.propTypes=s({},_["default"].propTypes,{dataSource:d["default"].instanceOf(m["default"]).isRequired,renderSeparator:d["default"].func,renderRow:d["default"].func.isRequired,initialListSize:d["default"].number,onEndReached:d["default"].func,onEndReachedThreshold:d["default"].number,pageSize:d["default"].number,renderFooter:d["default"].func,renderHeader:d["default"].func,renderSectionHeader:d["default"].func,renderScrollComponent:d["default"].func.isRequired,scrollRenderAheadDistance:d["default"].number,onChangeVisibleRows:d["default"].func,removeClippedSubviews:d["default"].bool,stickyHeaderIndices:d["default"].arrayOf(d["default"].number)}),L.defaultProps={initialListSize:A,pageSize:M,renderScrollComponent:function(e){return f["default"].createElement(_["default"],e)},scrollRenderAheadDistance:j,onEndReachedThreshold:N,stickyHeaderIndices:[]},P["default"].onClass(L,w["default"].Mixin),P["default"].onClass(L,R["default"]),(0,I["default"])(L),L.isReactNativeComponent=!0,t["default"]=L},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t,n){return e[t][n]}function a(e,t){return e[t]}function u(e){for(var t=0,n=0;n=this.rowIdentities[n].length))return this.rowIdentities[n][t];t-=this.rowIdentities[n].length}return null}},{key:"getSectionIDForFlatIndex",value:function(e){for(var t=e,n=0;n=this.rowIdentities[n].length))return this.sectionIdentities[n];t-=this.rowIdentities[n].length}return null}},{key:"getSectionLengths",value:function(){for(var e=[],t=0;t=1,"Navigator requires props.initialRoute or props.initialRouteStack.");var a=r.length-1;return e.initialRoute&&(a=r.indexOf(e.initialRoute),(0,K["default"])(a!==-1,"initialRoute is not in initialRouteStack.")),n.state={sceneConfigStack:r.map(function(t){return e.configureScene(t)}),routeStack:r,presentedIndex:a,transitionFromIndex:null,activeGesture:null,pendingGestureProgress:null,transitionQueue:[]},n}return a(t,e),c(t,[{key:"componentWillMount",value:function(){var e=this;this.__defineGetter__("navigationContext",this._getNavigationContext),this._subRouteFocus=[],this.parentNavigator=this.props.navigator,this._handlers={},this.springSystem=new Q["default"].SpringSystem,this.spring=this.springSystem.createSpring(),this.spring.setRestSpeedThreshold(.05),this.spring.setCurrentValue(0).setAtRest(),this.spring.addListener({onSpringEndStateChange:function(){e._interactionHandle||(e._interactionHandle=e.createInteractionHandle())},onSpringUpdate:function(){e._handleSpringUpdate()},onSpringAtRest:function(){e._completeTransition()}}),this.panGesture=k["default"].create({onMoveShouldSetPanResponder:this._handleMoveShouldSetPanResponder,onPanResponderGrant:this._handlePanResponderGrant,onPanResponderRelease:this._handlePanResponderRelease,onPanResponderMove:this._handlePanResponderMove,onPanResponderTerminate:this._handlePanResponderTerminate}),this._interactionHandle=null,this._emitWillFocus(this.state.routeStack[this.state.presentedIndex]),this.hashChanged=!1}},{key:"componentDidMount",value:function(){this._handleSpringUpdate(),this._emitDidFocus(this.state.routeStack[this.state.presentedIndex]),ee=Z.listen(function(e){var t=0;e.pathname.indexOf("/scene_")!=-1&&(t=parseInt(e.pathname.replace("/scene_",""))),t=this.state.routeStack.length-1&&"jumpForward"===e;return n||t}},{key:"_handlePanResponderGrant",value:function(e,t){(0,K["default"])(this._expectingGestureGrant,"Responder granted unexpectedly."),this._attachGesture(this._expectingGestureGrant),this._onAnimationStart(),this._expectingGestureGrant=null}},{key:"_deltaForGestureAction",value:function(e){switch(e){case"pop":case"jumpBack":return-1;case"jumpForward":return 1;default:return void(0,K["default"])(!1,"Unsupported gesture action "+e)}}},{key:"_handlePanResponderRelease",value:function(e,t){var n=this,r=this.state.sceneConfigStack[this.state.presentedIndex],o=this.state.activeGesture;if(o){var i=r.gestures[o],a=this.state.presentedIndex+this._deltaForGestureAction(this.state.activeGesture);if(0===this.spring.getCurrentValue())return this.spring.setCurrentValue(0).setAtRest(),void this._completeTransition();var u="top-to-bottom"===i.direction||"bottom-to-top"===i.direction,s="right-to-left"===i.direction||"bottom-to-top"===i.direction,l=void 0,c=void 0;u?(l=s?-t.vy:t.vy,c=s?-t.dy:t.dy):(l=s?-t.vx:t.vx,c=s?-t.dx:t.dx);var f=(0,W["default"])(-10,l,10);if(Math.abs(l)i.fullDistance*i.stillCompletionRatio;f=p?i.snapVelocity:-i.snapVelocity}if(f<0||this._doesGestureOverswipe(o)){if(null==this.state.transitionFromIndex){var d=this.state.presentedIndex;this.state.presentedIndex=a,this._transitionTo(d,-f,1-this.spring.getCurrentValue())}}else this._emitWillFocus(this.state.routeStack[a]),this._transitionTo(a,f,null,function(){"pop"===o&&n._cleanScenesPastIndex(a)});this._detachGesture()}}},{key:"_handlePanResponderTerminate",value:function(e,t){if(null!=this.state.activeGesture){var n=this.state.presentedIndex+this._deltaForGestureAction(this.state.activeGesture);this._detachGesture();var r=this.state.presentedIndex;this.state.presentedIndex=n,this._transitionTo(r,null,1-this.spring.getCurrentValue())}}},{key:"_attachGesture",value:function(e){this.state.activeGesture=e;var t=this.state.presentedIndex+this._deltaForGestureAction(this.state.activeGesture);this._enableScene(t)}},{key:"_detachGesture",value:function(){this.state.activeGesture=null,this.state.pendingGestureProgress=null,this._hideScenes()}},{key:"_handlePanResponderMove",value:function(e,t){var n=this.state.sceneConfigStack[this.state.presentedIndex];if(this.state.activeGesture){var r=n.gestures[this.state.activeGesture];return this._moveAttachedGesture(r,t)}var o=this._matchGestureAction(ae,n.gestures,t);o&&this._attachGesture(o)}},{key:"_moveAttachedGesture",value:function(e,t){var n="top-to-bottom"===e.direction||"bottom-to-top"===e.direction,r="right-to-left"===e.direction||"bottom-to-top"===e.direction,o=n?t.dy:t.dx;o=r?-o:o;var i=e.gestureDetectMovement,a=(o-i)/(e.fullDistance-i);if(a<0&&e.isDetachable){var u=this.state.presentedIndex+this._deltaForGestureAction(this.state.activeGesture);return this._transitionBetween(this.state.presentedIndex,u,0),this._detachGesture(),void(null!=this.state.pendingGestureProgress&&this.spring.setCurrentValue(0))}if(this._doesGestureOverswipe(this.state.activeGesture)){var s=e.overswipe.frictionConstant,l=e.overswipe.frictionByDistance,c=1/(s+Math.abs(a)*l);a*=c}a=(0,W["default"])(0,a,1),null!=this.state.transitionFromIndex?this.state.pendingGestureProgress=a:this.state.pendingGestureProgress?this.spring.setEndValue(a):this.spring.setCurrentValue(a)}},{key:"_matchGestureAction",value:function(e,t,n){var r=this;if(!t)return null;var o=null;return e.some(function(e,i){var a=t[e];if(a){if(null==a.overswipe&&r._doesGestureOverswipe(e))return!1;var u="top-to-bottom"===a.direction||"bottom-to-top"===a.direction,s="right-to-left"===a.direction||"bottom-to-top"===a.direction,l=u?n.moveY:n.moveX,c=u?n.dy:n.dx,f=u?n.dx:n.dy,p=a.edgeHitWidth;s&&(l=-l,c=-c,f=-f,p=u?-(ne-p):-(te-p));var d=null==a.edgeHitWidth||l=a.gestureDetectMovement;if(!h)return!1;var v=Math.abs(c)>Math.abs(f)*a.directionRatio;return v?(o=e,!0):void(r._eligibleGestures=r._eligibleGestures.slice().splice(i,1))}}),o}},{key:"_transitionSceneStyle",value:function(e,t,n,r){var o=this._sceneRefs[r];if(null!==o&&void 0!==o){var i=e=0&&e>=0&&r.updateProgress(n,e,t)}},{key:"_handleResponderTerminationRequest",value:function(){return!1}},{key:"_getDestIndexWithinBounds",value:function(e){var t=this.state.presentedIndex,n=t+e;(0,K["default"])(n>=0,"Cannot jump before the first route.");var r=this.state.routeStack.length-1;return(0,K["default"])(r>=n,"Cannot jump past the last route."),n}},{key:"_jumpN",value:function(e){var t=this._getDestIndexWithinBounds(e);return this._enableScene(t),this._emitWillFocus(this.state.routeStack[t]),this._transitionTo(t),this.hashChanged?void(e<0&&(oe=Math.max(oe+e,0))):void(e>0?Z.pushState({index:t},"/scene_"+s(this.state.routeStack[t])):Z.go(e))}},{key:"jumpTo",value:function(e){var t=this.state.routeStack.indexOf(e);(0,K["default"])(t!==-1,"Cannot jump to route that is not in the route stack"),this._jumpN(t-this.state.presentedIndex)}},{key:"jumpForward",value:function(){this._jumpN(1)}},{key:"jumpBack",value:function(){this._jumpN(-1)}},{key:"push",value:function(e){var t=this;(0,K["default"])(!!e,"Must supply route to push");var n=this.state.presentedIndex+1,r=this.state.routeStack.slice(0,n),o=this.state.sceneConfigStack.slice(0,n),i=r.concat([e]),a=i.length-1,u=o.concat([this.props.configureScene(e)]);this._emitWillFocus(i[a]),this.setState({routeStack:i,sceneConfigStack:u},function(){Z.pushState({index:a},"/scene_"+s(e)),t._enableScene(a),t._transitionTo(a)})}},{key:"_popN",value:function(e){var t=this;if(0!==e){(0,K["default"])(this.state.presentedIndex-e>=0,"Cannot pop below zero");var n=this.state.presentedIndex-e;this._enableScene(n),this._emitWillFocus(this.state.routeStack[n]),this._transitionTo(n,null,null,function(){Z.go(-e),t._cleanScenesPastIndex(n)})}}},{key:"pop",value:function(){this.state.transitionQueue.length||this.state.presentedIndex>0&&this._popN(1)}},{key:"replaceAtIndex",value:function(e,t,n){var r=this;if((0,K["default"])(!!e,"Must supply route to replace"),t<0&&(t+=this.state.routeStack.length),!(this.state.routeStack.length<=t)){var o=this.state.routeStack.slice(),i=this.state.sceneConfigStack.slice();o[t]=e,i[t]=this.props.configureScene(e),t===this.state.presentedIndex&&this._emitWillFocus(e),this.setState({routeStack:o,sceneConfigStack:i},function(){t===r.state.presentedIndex&&r._emitDidFocus(e),n&&n()})}}},{key:"replace",value:function(e){this.replaceAtIndex(e,this.state.presentedIndex)}},{key:"replacePrevious",value:function(e){this.replaceAtIndex(e,this.state.presentedIndex-1)}},{key:"popToTop",value:function(){this.popToRoute(this.state.routeStack[0])}},{key:"popToRoute",value:function(e){var t=this.state.routeStack.indexOf(e);(0,K["default"])(t!==-1,"Calling popToRoute for a route that doesn't exist!");var n=this.state.presentedIndex-t;this._popN(n)}},{key:"replacePreviousAndPop",value:function(e){this.state.routeStack.length<2||(this.replacePrevious(e),this.pop())}},{key:"resetTo",value:function(e){var t=this;(0,K["default"])(!!e,"Must supply route to push"),this.replaceAtIndex(e,0,function(){t.state.presentedIndex>0&&t._popN(t.state.presentedIndex)})}},{key:"getCurrentRoutes",value:function(){return this.state.routeStack.slice()}},{key:"_captureSceneRef",value:function(e){var t=this;return function(n){t._sceneRefs[e]=n}}},{key:"_cleanScenesPastIndex",value:function(e){var t=e+1;t=t.length?{value:void 0,done:!0}:(e=r(t,n),this._i+=e.length,{value:e,done:!1})})},function(e,t,n){var r=n(186),o=n(187);e.exports=function(e){return function(t,n){var i,a,u=String(o(t)),s=r(n),l=u.length;return s<0||s>=l?e?"":void 0:(i=u.charCodeAt(s),i<55296||i>56319||s+1===l||(a=u.charCodeAt(s+1))<56320||a>57343?e?u.charAt(s):i:e?u.slice(s,s+2):(i-55296<<10)+(a-56320)+65536)}}},function(e,t){var n=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:n)(e)}},function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},function(e,t,n){"use strict";var r=n(189),o=n(190),i=n(205),a=n(195),u=n(206),s=n(207),l=n(208),c=n(224),f=n(226),p=n(225)("iterator"),d=!([].keys&&"next"in[].keys()),h="@@iterator",v="keys",y="values",m=function(){return this};e.exports=function(e,t,n,g,_,b,w){l(n,t,g);var S,E,C,R=function(e){if(!d&&e in x)return x[e];switch(e){case v:return function(){return new n(this,e)};case y:return function(){return new n(this,e)}}return function(){return new n(this,e)}},T=t+" Iterator",P=_==y,O=!1,x=e.prototype,k=x[p]||x[h]||_&&x[_],I=k||R(_),M=_?P?R("entries"):I:void 0,A="Array"==t?x.entries||k:k;if(A&&(C=f(A.call(new e)),C!==Object.prototype&&(c(C,T,!0),r||u(C,p)||a(C,p,m))),P&&k&&k.name!==y&&(O=!0,I=function(){return k.call(this)}),r&&!w||!d&&!O&&x[p]||a(x,p,I),s[t]=I,s[T]=m,_)if(S={values:P?I:R(y),keys:b?I:R(v),entries:M},w)for(E in S)E in x||i(x,E,S[E]);else o(o.P+o.F*(d||O),t,S);return S}},function(e,t){e.exports=!0},function(e,t,n){var r=n(191),o=n(192),i=n(193),a=n(195),u="prototype",s=function(e,t,n){var l,c,f,p=e&s.F,d=e&s.G,h=e&s.S,v=e&s.P,y=e&s.B,m=e&s.W,g=d?o:o[t]||(o[t]={}),_=g[u],b=d?r:h?r[t]:(r[t]||{})[u];d&&(n=t);for(l in n)c=!p&&b&&void 0!==b[l],c&&l in g||(f=c?b[l]:n[l],g[l]=d&&"function"!=typeof b[l]?n[l]:y&&c?i(f,r):m&&b[l]==f?function(e){var t=function(t,n,r){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,r)}return e.apply(this,arguments)};return t[u]=e[u],t}(f):v&&"function"==typeof f?i(Function.call,f):f,v&&((g.virtual||(g.virtual={}))[l]=f,e&s.R&&_&&!_[l]&&a(_,l,f)))};s.F=1,s.G=2,s.S=4,s.P=8,s.B=16,s.W=32,s.U=64,s.R=128,e.exports=s},function(e,t){var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(e,t){var n=e.exports={version:"2.2.2"};"number"==typeof __e&&(__e=n)},function(e,t,n){var r=n(194);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}}},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t,n){var r=n(196),o=n(204);e.exports=n(200)?function(e,t,n){return r.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){var r=n(197),o=n(199),i=n(203),a=Object.defineProperty;t.f=n(200)?Object.defineProperty:function(e,t,n){if(r(e),t=i(t,!0),r(n),o)try{return a(e,t,n)}catch(u){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},function(e,t,n){var r=n(198);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t,n){e.exports=!n(200)&&!n(201)(function(){return 7!=Object.defineProperty(n(202)("div"),"a",{get:function(){return 7}}).a})},function(e,t,n){e.exports=!n(201)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,t){e.exports=function(e){try{return!!e()}catch(t){return!0}}},function(e,t,n){var r=n(198),o=n(191).document,i=r(o)&&r(o.createElement);e.exports=function(e){return i?o.createElement(e):{}}},function(e,t,n){var r=n(198);e.exports=function(e,t){if(!r(e))return e;var n,o;if(t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;if("function"==typeof(n=e.valueOf)&&!r(o=n.call(e)))return o;if(!t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;throw TypeError("Can't convert object to primitive value")}},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){e.exports=n(195)},function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t){e.exports={}},function(e,t,n){"use strict";var r=n(209),o=n(204),i=n(224),a={};n(195)(a,n(225)("iterator"),function(){return this}),e.exports=function(e,t,n){e.prototype=r(a,{next:o(1,n)}),i(e,t+" Iterator")}},function(e,t,n){var r=n(197),o=n(210),i=n(222),a=n(219)("IE_PROTO"),u=function(){},s="prototype",l=function(){var e,t=n(202)("iframe"),r=i.length,o=">";for(t.style.display="none",n(223).appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write("\n\t// \n\t//\n\t// Here's how it works.\n\t//\n\t// ```\n\t// // Get a reference to the logo element.\n\t// var el = document.getElementById('logo');\n\t//\n\t// // create a SpringSystem and a Spring with a bouncy config.\n\t// var springSystem = new rebound.SpringSystem();\n\t// var spring = springSystem.createSpring(50, 3);\n\t//\n\t// // Add a listener to the spring. Every time the physics\n\t// // solver updates the Spring's value onSpringUpdate will\n\t// // be called.\n\t// spring.addListener({\n\t// onSpringUpdate: function(spring) {\n\t// var val = spring.getCurrentValue();\n\t// val = rebound.MathUtil\n\t// .mapValueInRange(val, 0, 1, 1, 0.5);\n\t// scale(el, val);\n\t// }\n\t// });\n\t//\n\t// // Listen for mouse down/up/out and toggle the\n\t// //springs endValue from 0 to 1.\n\t// el.addEventListener('mousedown', function() {\n\t// spring.setEndValue(1);\n\t// });\n\t//\n\t// el.addEventListener('mouseout', function() {\n\t// spring.setEndValue(0);\n\t// });\n\t//\n\t// el.addEventListener('mouseup', function() {\n\t// spring.setEndValue(0);\n\t// });\n\t//\n\t// // Helper for scaling an element with css transforms.\n\t// function scale(el, val) {\n\t// el.style.mozTransform =\n\t// el.style.msTransform =\n\t// el.style.webkitTransform =\n\t// el.style.transform = 'scale3d(' +\n\t// val + ', ' + val + ', 1)';\n\t// }\n\t// ```\n\t\n\t(function() {\n\t var rebound = {};\n\t var util = rebound.util = {};\n\t var concat = Array.prototype.concat;\n\t var slice = Array.prototype.slice;\n\t\n\t // Bind a function to a context object.\n\t util.bind = function bind(func, context) {\n\t var args = slice.call(arguments, 2);\n\t return function() {\n\t func.apply(context, concat.call(args, slice.call(arguments)));\n\t };\n\t };\n\t\n\t // Add all the properties in the source to the target.\n\t util.extend = function extend(target, source) {\n\t for (var key in source) {\n\t if (source.hasOwnProperty(key)) {\n\t target[key] = source[key];\n\t }\n\t }\n\t };\n\t\n\t // SpringSystem\n\t // ------------\n\t // **SpringSystem** is a set of Springs that all run on the same physics\n\t // timing loop. To get started with a Rebound animation you first\n\t // create a new SpringSystem and then add springs to it.\n\t var SpringSystem = rebound.SpringSystem = function SpringSystem(looper) {\n\t this._springRegistry = {};\n\t this._activeSprings = [];\n\t this.listeners = [];\n\t this._idleSpringIndices = [];\n\t this.looper = looper || new AnimationLooper();\n\t this.looper.springSystem = this;\n\t };\n\t\n\t util.extend(SpringSystem.prototype, {\n\t\n\t _springRegistry: null,\n\t\n\t _isIdle: true,\n\t\n\t _lastTimeMillis: -1,\n\t\n\t _activeSprings: null,\n\t\n\t listeners: null,\n\t\n\t _idleSpringIndices: null,\n\t\n\t // A SpringSystem is iterated by a looper. The looper is responsible\n\t // for executing each frame as the SpringSystem is resolved to idle.\n\t // There are three types of Loopers described below AnimationLooper,\n\t // SimulationLooper, and SteppingSimulationLooper. AnimationLooper is\n\t // the default as it is the most useful for common UI animations.\n\t setLooper: function(looper) {\n\t this.looper = looper;\n\t looper.springSystem = this;\n\t },\n\t\n\t // Add a new spring to this SpringSystem. This Spring will now be solved for\n\t // during the physics iteration loop. By default the spring will use the\n\t // default Origami spring config with 40 tension and 7 friction, but you can\n\t // also provide your own values here.\n\t createSpring: function(tension, friction) {\n\t var springConfig;\n\t if (tension === undefined || friction === undefined) {\n\t springConfig = SpringConfig.DEFAULT_ORIGAMI_SPRING_CONFIG;\n\t } else {\n\t springConfig =\n\t SpringConfig.fromOrigamiTensionAndFriction(tension, friction);\n\t }\n\t return this.createSpringWithConfig(springConfig);\n\t },\n\t\n\t // Add a spring with a specified bounciness and speed. To replicate Origami\n\t // compositions based on PopAnimation patches, use this factory method to\n\t // create matching springs.\n\t createSpringWithBouncinessAndSpeed: function(bounciness, speed) {\n\t var springConfig;\n\t if (bounciness === undefined || speed === undefined) {\n\t springConfig = SpringConfig.DEFAULT_ORIGAMI_SPRING_CONFIG;\n\t } else {\n\t springConfig =\n\t SpringConfig.fromBouncinessAndSpeed(bounciness, speed);\n\t }\n\t return this.createSpringWithConfig(springConfig);\n\t },\n\t\n\t // Add a spring with the provided SpringConfig.\n\t createSpringWithConfig: function(springConfig) {\n\t var spring = new Spring(this);\n\t this.registerSpring(spring);\n\t spring.setSpringConfig(springConfig);\n\t return spring;\n\t },\n\t\n\t // You can check if a SpringSystem is idle or active by calling\n\t // getIsIdle. If all of the Springs in the SpringSystem are at rest,\n\t // i.e. the physics forces have reached equilibrium, then this\n\t // method will return true.\n\t getIsIdle: function() {\n\t return this._isIdle;\n\t },\n\t\n\t // Retrieve a specific Spring from the SpringSystem by id. This\n\t // can be useful for inspecting the state of a spring before\n\t // or after an integration loop in the SpringSystem executes.\n\t getSpringById: function (id) {\n\t return this._springRegistry[id];\n\t },\n\t\n\t // Get a listing of all the springs registered with this\n\t // SpringSystem.\n\t getAllSprings: function() {\n\t var vals = [];\n\t for (var id in this._springRegistry) {\n\t if (this._springRegistry.hasOwnProperty(id)) {\n\t vals.push(this._springRegistry[id]);\n\t }\n\t }\n\t return vals;\n\t },\n\t\n\t // registerSpring is called automatically as soon as you create\n\t // a Spring with SpringSystem#createSpring. This method sets the\n\t // spring up in the registry so that it can be solved in the\n\t // solver loop.\n\t registerSpring: function(spring) {\n\t this._springRegistry[spring.getId()] = spring;\n\t },\n\t\n\t // Deregister a spring with this SpringSystem. The SpringSystem will\n\t // no longer consider this Spring during its integration loop once\n\t // this is called. This is normally done automatically for you when\n\t // you call Spring#destroy.\n\t deregisterSpring: function(spring) {\n\t removeFirst(this._activeSprings, spring);\n\t delete this._springRegistry[spring.getId()];\n\t },\n\t\n\t advance: function(time, deltaTime) {\n\t while(this._idleSpringIndices.length > 0) this._idleSpringIndices.pop();\n\t for (var i = 0, len = this._activeSprings.length; i < len; i++) {\n\t var spring = this._activeSprings[i];\n\t if (spring.systemShouldAdvance()) {\n\t spring.advance(time / 1000.0, deltaTime / 1000.0);\n\t } else {\n\t this._idleSpringIndices.push(this._activeSprings.indexOf(spring));\n\t }\n\t }\n\t while(this._idleSpringIndices.length > 0) {\n\t var idx = this._idleSpringIndices.pop();\n\t idx >= 0 && this._activeSprings.splice(idx, 1);\n\t }\n\t },\n\t\n\t // This is our main solver loop called to move the simulation\n\t // forward through time. Before each pass in the solver loop\n\t // onBeforeIntegrate is called on an any listeners that have\n\t // registered themeselves with the SpringSystem. This gives you\n\t // an opportunity to apply any constraints or adjustments to\n\t // the springs that should be enforced before each iteration\n\t // loop. Next the advance method is called to move each Spring in\n\t // the systemShouldAdvance forward to the current time. After the\n\t // integration step runs in advance, onAfterIntegrate is called\n\t // on any listeners that have registered themselves with the\n\t // SpringSystem. This gives you an opportunity to run any post\n\t // integration constraints or adjustments on the Springs in the\n\t // SpringSystem.\n\t loop: function(currentTimeMillis) {\n\t var listener;\n\t if (this._lastTimeMillis === -1) {\n\t this._lastTimeMillis = currentTimeMillis -1;\n\t }\n\t var ellapsedMillis = currentTimeMillis - this._lastTimeMillis;\n\t this._lastTimeMillis = currentTimeMillis;\n\t\n\t var i = 0, len = this.listeners.length;\n\t for (i = 0; i < len; i++) {\n\t listener = this.listeners[i];\n\t listener.onBeforeIntegrate && listener.onBeforeIntegrate(this);\n\t }\n\t\n\t this.advance(currentTimeMillis, ellapsedMillis);\n\t if (this._activeSprings.length === 0) {\n\t this._isIdle = true;\n\t this._lastTimeMillis = -1;\n\t }\n\t\n\t for (i = 0; i < len; i++) {\n\t listener = this.listeners[i];\n\t listener.onAfterIntegrate && listener.onAfterIntegrate(this);\n\t }\n\t\n\t if (!this._isIdle) {\n\t this.looper.run();\n\t }\n\t },\n\t\n\t // activateSpring is used to notify the SpringSystem that a Spring\n\t // has become displaced. The system responds by starting its solver\n\t // loop up if it is currently idle.\n\t activateSpring: function(springId) {\n\t var spring = this._springRegistry[springId];\n\t if (this._activeSprings.indexOf(spring) == -1) {\n\t this._activeSprings.push(spring);\n\t }\n\t if (this.getIsIdle()) {\n\t this._isIdle = false;\n\t this.looper.run();\n\t }\n\t },\n\t\n\t // Add a listener to the SpringSystem so that you can receive\n\t // before/after integration notifications allowing Springs to be\n\t // constrained or adjusted.\n\t addListener: function(listener) {\n\t this.listeners.push(listener);\n\t },\n\t\n\t // Remove a previously added listener on the SpringSystem.\n\t removeListener: function(listener) {\n\t removeFirst(this.listeners, listener);\n\t },\n\t\n\t // Remove all previously added listeners on the SpringSystem.\n\t removeAllListeners: function() {\n\t this.listeners = [];\n\t }\n\t\n\t });\n\t\n\t // Spring\n\t // ------\n\t // **Spring** provides a model of a classical spring acting to\n\t // resolve a body to equilibrium. Springs have configurable\n\t // tension which is a force multipler on the displacement of the\n\t // spring from its rest point or `endValue` as defined by [Hooke's\n\t // law](http://en.wikipedia.org/wiki/Hooke's_law). Springs also have\n\t // configurable friction, which ensures that they do not oscillate\n\t // infinitely. When a Spring is displaced by updating it's resting\n\t // or `currentValue`, the SpringSystems that contain that Spring\n\t // will automatically start looping to solve for equilibrium. As each\n\t // timestep passes, `SpringListener` objects attached to the Spring\n\t // will be notified of the updates providing a way to drive an\n\t // animation off of the spring's resolution curve.\n\t var Spring = rebound.Spring = function Spring(springSystem) {\n\t this._id = 's' + Spring._ID++;\n\t this._springSystem = springSystem;\n\t this.listeners = [];\n\t this._currentState = new PhysicsState();\n\t this._previousState = new PhysicsState();\n\t this._tempState = new PhysicsState();\n\t };\n\t\n\t util.extend(Spring, {\n\t _ID: 0,\n\t\n\t MAX_DELTA_TIME_SEC: 0.064,\n\t\n\t SOLVER_TIMESTEP_SEC: 0.001\n\t\n\t });\n\t\n\t util.extend(Spring.prototype, {\n\t\n\t _id: 0,\n\t\n\t _springConfig: null,\n\t\n\t _overshootClampingEnabled: false,\n\t\n\t _currentState: null,\n\t\n\t _previousState: null,\n\t\n\t _tempState: null,\n\t\n\t _startValue: 0,\n\t\n\t _endValue: 0,\n\t\n\t _wasAtRest: true,\n\t\n\t _restSpeedThreshold: 0.001,\n\t\n\t _displacementFromRestThreshold: 0.001,\n\t\n\t listeners: null,\n\t\n\t _timeAccumulator: 0,\n\t\n\t _springSystem: null,\n\t\n\t // Remove a Spring from simulation and clear its listeners.\n\t destroy: function() {\n\t this.listeners = [];\n\t this.frames = [];\n\t this._springSystem.deregisterSpring(this);\n\t },\n\t\n\t // Get the id of the spring, which can be used to retrieve it from\n\t // the SpringSystems it participates in later.\n\t getId: function() {\n\t return this._id;\n\t },\n\t\n\t // Set the configuration values for this Spring. A SpringConfig\n\t // contains the tension and friction values used to solve for the\n\t // equilibrium of the Spring in the physics loop.\n\t setSpringConfig: function(springConfig) {\n\t this._springConfig = springConfig;\n\t return this;\n\t },\n\t\n\t // Retrieve the SpringConfig used by this Spring.\n\t getSpringConfig: function() {\n\t return this._springConfig;\n\t },\n\t\n\t // Set the current position of this Spring. Listeners will be updated\n\t // with this value immediately. If the rest or `endValue` is not\n\t // updated to match this value, then the spring will be dispalced and\n\t // the SpringSystem will start to loop to restore the spring to the\n\t // `endValue`.\n\t //\n\t // A common pattern is to move a Spring around without animation by\n\t // calling.\n\t //\n\t // ```\n\t // spring.setCurrentValue(n).setAtRest();\n\t // ```\n\t //\n\t // This moves the Spring to a new position `n`, sets the endValue\n\t // to `n`, and removes any velocity from the `Spring`. By doing\n\t // this you can allow the `SpringListener` to manage the position\n\t // of UI elements attached to the spring even when moving without\n\t // animation. For example, when dragging an element you can\n\t // update the position of an attached view through a spring\n\t // by calling `spring.setCurrentValue(x)`. When\n\t // the gesture ends you can update the Springs\n\t // velocity and endValue\n\t // `spring.setVelocity(gestureEndVelocity).setEndValue(flingTarget)`\n\t // to cause it to naturally animate the UI element to the resting\n\t // position taking into account existing velocity. The codepaths for\n\t // synchronous movement and spring driven animation can\n\t // be unified using this technique.\n\t setCurrentValue: function(currentValue, skipSetAtRest) {\n\t this._startValue = currentValue;\n\t this._currentState.position = currentValue;\n\t if (!skipSetAtRest) {\n\t this.setAtRest();\n\t }\n\t this.notifyPositionUpdated(false, false);\n\t return this;\n\t },\n\t\n\t // Get the position that the most recent animation started at. This\n\t // can be useful for determining the number off oscillations that\n\t // have occurred.\n\t getStartValue: function() {\n\t return this._startValue;\n\t },\n\t\n\t // Retrieve the current value of the Spring.\n\t getCurrentValue: function() {\n\t return this._currentState.position;\n\t },\n\t\n\t // Get the absolute distance of the Spring from it's resting endValue\n\t // position.\n\t getCurrentDisplacementDistance: function() {\n\t return this.getDisplacementDistanceForState(this._currentState);\n\t },\n\t\n\t getDisplacementDistanceForState: function(state) {\n\t return Math.abs(this._endValue - state.position);\n\t },\n\t\n\t // Set the endValue or resting position of the spring. If this\n\t // value is different than the current value, the SpringSystem will\n\t // be notified and will begin running its solver loop to resolve\n\t // the Spring to equilibrium. Any listeners that are registered\n\t // for onSpringEndStateChange will also be notified of this update\n\t // immediately.\n\t setEndValue: function(endValue) {\n\t if (this._endValue == endValue && this.isAtRest()) {\n\t return this;\n\t }\n\t this._startValue = this.getCurrentValue();\n\t this._endValue = endValue;\n\t this._springSystem.activateSpring(this.getId());\n\t for (var i = 0, len = this.listeners.length; i < len; i++) {\n\t var listener = this.listeners[i];\n\t var onChange = listener.onSpringEndStateChange;\n\t onChange && onChange(this);\n\t }\n\t return this;\n\t },\n\t\n\t // Retrieve the endValue or resting position of this spring.\n\t getEndValue: function() {\n\t return this._endValue;\n\t },\n\t\n\t // Set the current velocity of the Spring. As previously mentioned,\n\t // this can be useful when you are performing a direct manipulation\n\t // gesture. When a UI element is released you may call setVelocity\n\t // on its animation Spring so that the Spring continues with the\n\t // same velocity as the gesture ended with. The friction, tension,\n\t // and displacement of the Spring will then govern its motion to\n\t // return to rest on a natural feeling curve.\n\t setVelocity: function(velocity) {\n\t if (velocity === this._currentState.velocity) {\n\t return this;\n\t }\n\t this._currentState.velocity = velocity;\n\t this._springSystem.activateSpring(this.getId());\n\t return this;\n\t },\n\t\n\t // Get the current velocity of the Spring.\n\t getVelocity: function() {\n\t return this._currentState.velocity;\n\t },\n\t\n\t // Set a threshold value for the movement speed of the Spring below\n\t // which it will be considered to be not moving or resting.\n\t setRestSpeedThreshold: function(restSpeedThreshold) {\n\t this._restSpeedThreshold = restSpeedThreshold;\n\t return this;\n\t },\n\t\n\t // Retrieve the rest speed threshold for this Spring.\n\t getRestSpeedThreshold: function() {\n\t return this._restSpeedThreshold;\n\t },\n\t\n\t // Set a threshold value for displacement below which the Spring\n\t // will be considered to be not displaced i.e. at its resting\n\t // `endValue`.\n\t setRestDisplacementThreshold: function(displacementFromRestThreshold) {\n\t this._displacementFromRestThreshold = displacementFromRestThreshold;\n\t },\n\t\n\t // Retrieve the rest displacement threshold for this spring.\n\t getRestDisplacementThreshold: function() {\n\t return this._displacementFromRestThreshold;\n\t },\n\t\n\t // Enable overshoot clamping. This means that the Spring will stop\n\t // immediately when it reaches its resting position regardless of\n\t // any existing momentum it may have. This can be useful for certain\n\t // types of animations that should not oscillate such as a scale\n\t // down to 0 or alpha fade.\n\t setOvershootClampingEnabled: function(enabled) {\n\t this._overshootClampingEnabled = enabled;\n\t return this;\n\t },\n\t\n\t // Check if overshoot clamping is enabled for this spring.\n\t isOvershootClampingEnabled: function() {\n\t return this._overshootClampingEnabled;\n\t },\n\t\n\t // Check if the Spring has gone past its end point by comparing\n\t // the direction it was moving in when it started to the current\n\t // position and end value.\n\t isOvershooting: function() {\n\t var start = this._startValue;\n\t var end = this._endValue;\n\t return this._springConfig.tension > 0 &&\n\t ((start < end && this.getCurrentValue() > end) ||\n\t (start > end && this.getCurrentValue() < end));\n\t },\n\t\n\t // Spring.advance is the main solver method for the Spring. It takes\n\t // the current time and delta since the last time step and performs\n\t // an RK4 integration to get the new position and velocity state\n\t // for the Spring based on the tension, friction, velocity, and\n\t // displacement of the Spring.\n\t advance: function(time, realDeltaTime) {\n\t var isAtRest = this.isAtRest();\n\t\n\t if (isAtRest && this._wasAtRest) {\n\t return;\n\t }\n\t\n\t var adjustedDeltaTime = realDeltaTime;\n\t if (realDeltaTime > Spring.MAX_DELTA_TIME_SEC) {\n\t adjustedDeltaTime = Spring.MAX_DELTA_TIME_SEC;\n\t }\n\t\n\t this._timeAccumulator += adjustedDeltaTime;\n\t\n\t var tension = this._springConfig.tension,\n\t friction = this._springConfig.friction,\n\t\n\t position = this._currentState.position,\n\t velocity = this._currentState.velocity,\n\t tempPosition = this._tempState.position,\n\t tempVelocity = this._tempState.velocity,\n\t\n\t aVelocity, aAcceleration,\n\t bVelocity, bAcceleration,\n\t cVelocity, cAcceleration,\n\t dVelocity, dAcceleration,\n\t\n\t dxdt, dvdt;\n\t\n\t while(this._timeAccumulator >= Spring.SOLVER_TIMESTEP_SEC) {\n\t\n\t this._timeAccumulator -= Spring.SOLVER_TIMESTEP_SEC;\n\t\n\t if (this._timeAccumulator < Spring.SOLVER_TIMESTEP_SEC) {\n\t this._previousState.position = position;\n\t this._previousState.velocity = velocity;\n\t }\n\t\n\t aVelocity = velocity;\n\t aAcceleration =\n\t (tension * (this._endValue - tempPosition)) - friction * velocity;\n\t\n\t tempPosition = position + aVelocity * Spring.SOLVER_TIMESTEP_SEC * 0.5;\n\t tempVelocity =\n\t velocity + aAcceleration * Spring.SOLVER_TIMESTEP_SEC * 0.5;\n\t bVelocity = tempVelocity;\n\t bAcceleration =\n\t (tension * (this._endValue - tempPosition)) - friction * tempVelocity;\n\t\n\t tempPosition = position + bVelocity * Spring.SOLVER_TIMESTEP_SEC * 0.5;\n\t tempVelocity =\n\t velocity + bAcceleration * Spring.SOLVER_TIMESTEP_SEC * 0.5;\n\t cVelocity = tempVelocity;\n\t cAcceleration =\n\t (tension * (this._endValue - tempPosition)) - friction * tempVelocity;\n\t\n\t tempPosition = position + cVelocity * Spring.SOLVER_TIMESTEP_SEC * 0.5;\n\t tempVelocity =\n\t velocity + cAcceleration * Spring.SOLVER_TIMESTEP_SEC * 0.5;\n\t dVelocity = tempVelocity;\n\t dAcceleration =\n\t (tension * (this._endValue - tempPosition)) - friction * tempVelocity;\n\t\n\t dxdt =\n\t 1.0/6.0 * (aVelocity + 2.0 * (bVelocity + cVelocity) + dVelocity);\n\t dvdt = 1.0/6.0 * (\n\t aAcceleration + 2.0 * (bAcceleration + cAcceleration) + dAcceleration\n\t );\n\t\n\t position += dxdt * Spring.SOLVER_TIMESTEP_SEC;\n\t velocity += dvdt * Spring.SOLVER_TIMESTEP_SEC;\n\t }\n\t\n\t this._tempState.position = tempPosition;\n\t this._tempState.velocity = tempVelocity;\n\t\n\t this._currentState.position = position;\n\t this._currentState.velocity = velocity;\n\t\n\t if (this._timeAccumulator > 0) {\n\t this._interpolate(this._timeAccumulator / Spring.SOLVER_TIMESTEP_SEC);\n\t }\n\t\n\t if (this.isAtRest() ||\n\t this._overshootClampingEnabled && this.isOvershooting()) {\n\t\n\t if (this._springConfig.tension > 0) {\n\t this._startValue = this._endValue;\n\t this._currentState.position = this._endValue;\n\t } else {\n\t this._endValue = this._currentState.position;\n\t this._startValue = this._endValue;\n\t }\n\t this.setVelocity(0);\n\t isAtRest = true;\n\t }\n\t\n\t var notifyActivate = false;\n\t if (this._wasAtRest) {\n\t this._wasAtRest = false;\n\t notifyActivate = true;\n\t }\n\t\n\t var notifyAtRest = false;\n\t if (isAtRest) {\n\t this._wasAtRest = true;\n\t notifyAtRest = true;\n\t }\n\t\n\t this.notifyPositionUpdated(notifyActivate, notifyAtRest);\n\t },\n\t\n\t notifyPositionUpdated: function(notifyActivate, notifyAtRest) {\n\t for (var i = 0, len = this.listeners.length; i < len; i++) {\n\t var listener = this.listeners[i];\n\t if (notifyActivate && listener.onSpringActivate) {\n\t listener.onSpringActivate(this);\n\t }\n\t\n\t if (listener.onSpringUpdate) {\n\t listener.onSpringUpdate(this);\n\t }\n\t\n\t if (notifyAtRest && listener.onSpringAtRest) {\n\t listener.onSpringAtRest(this);\n\t }\n\t }\n\t },\n\t\n\t\n\t // Check if the SpringSystem should advance. Springs are advanced\n\t // a final frame after they reach equilibrium to ensure that the\n\t // currentValue is exactly the requested endValue regardless of the\n\t // displacement threshold.\n\t systemShouldAdvance: function() {\n\t return !this.isAtRest() || !this.wasAtRest();\n\t },\n\t\n\t wasAtRest: function() {\n\t return this._wasAtRest;\n\t },\n\t\n\t // Check if the Spring is atRest meaning that it's currentValue and\n\t // endValue are the same and that it has no velocity. The previously\n\t // described thresholds for speed and displacement define the bounds\n\t // of this equivalence check. If the Spring has 0 tension, then it will\n\t // be considered at rest whenever its absolute velocity drops below the\n\t // restSpeedThreshold.\n\t isAtRest: function() {\n\t return Math.abs(this._currentState.velocity) < this._restSpeedThreshold &&\n\t (this.getDisplacementDistanceForState(this._currentState) <=\n\t this._displacementFromRestThreshold ||\n\t this._springConfig.tension === 0);\n\t },\n\t\n\t // Force the spring to be at rest at its current position. As\n\t // described in the documentation for setCurrentValue, this method\n\t // makes it easy to do synchronous non-animated updates to ui\n\t // elements that are attached to springs via SpringListeners.\n\t setAtRest: function() {\n\t this._endValue = this._currentState.position;\n\t this._tempState.position = this._currentState.position;\n\t this._currentState.velocity = 0;\n\t return this;\n\t },\n\t\n\t _interpolate: function(alpha) {\n\t this._currentState.position = this._currentState.position *\n\t alpha + this._previousState.position * (1 - alpha);\n\t this._currentState.velocity = this._currentState.velocity *\n\t alpha + this._previousState.velocity * (1 - alpha);\n\t },\n\t\n\t getListeners: function() {\n\t return this.listeners;\n\t },\n\t\n\t addListener: function(newListener) {\n\t this.listeners.push(newListener);\n\t return this;\n\t },\n\t\n\t removeListener: function(listenerToRemove) {\n\t removeFirst(this.listeners, listenerToRemove);\n\t return this;\n\t },\n\t\n\t removeAllListeners: function() {\n\t this.listeners = [];\n\t return this;\n\t },\n\t\n\t currentValueIsApproximately: function(value) {\n\t return Math.abs(this.getCurrentValue() - value) <=\n\t this.getRestDisplacementThreshold();\n\t }\n\t\n\t });\n\t\n\t // PhysicsState\n\t // ------------\n\t // **PhysicsState** consists of a position and velocity. A Spring uses\n\t // this internally to keep track of its current and prior position and\n\t // velocity values.\n\t var PhysicsState = function PhysicsState() {};\n\t\n\t util.extend(PhysicsState.prototype, {\n\t position: 0,\n\t velocity: 0\n\t });\n\t\n\t // SpringConfig\n\t // ------------\n\t // **SpringConfig** maintains a set of tension and friction constants\n\t // for a Spring. You can use fromOrigamiTensionAndFriction to convert\n\t // values from the [Origami](http://facebook.github.io/origami/)\n\t // design tool directly to Rebound spring constants.\n\t var SpringConfig = rebound.SpringConfig =\n\t function SpringConfig(tension, friction) {\n\t this.tension = tension;\n\t this.friction = friction;\n\t };\n\t\n\t // Loopers\n\t // -------\n\t // **AnimationLooper** plays each frame of the SpringSystem on animation\n\t // timing loop. This is the default type of looper for a new spring system\n\t // as it is the most common when developing UI.\n\t var AnimationLooper = rebound.AnimationLooper = function AnimationLooper() {\n\t this.springSystem = null;\n\t var _this = this;\n\t var _run = function() {\n\t _this.springSystem.loop(Date.now());\n\t };\n\t\n\t this.run = function() {\n\t util.onFrame(_run);\n\t };\n\t };\n\t\n\t // **SimulationLooper** resolves the SpringSystem to a resting state in a\n\t // tight and blocking loop. This is useful for synchronously generating\n\t // pre-recorded animations that can then be played on a timing loop later.\n\t // Sometimes this lead to better performance to pre-record a single spring\n\t // curve and use it to drive many animations; however, it can make dynamic\n\t // response to user input a bit trickier to implement.\n\t rebound.SimulationLooper = function SimulationLooper(timestep) {\n\t this.springSystem = null;\n\t var time = 0;\n\t var running = false;\n\t timestep=timestep || 16.667;\n\t\n\t this.run = function() {\n\t if (running) {\n\t return;\n\t }\n\t running = true;\n\t while(!this.springSystem.getIsIdle()) {\n\t this.springSystem.loop(time+=timestep);\n\t }\n\t running = false;\n\t };\n\t };\n\t\n\t // **SteppingSimulationLooper** resolves the SpringSystem one step at a\n\t // time controlled by an outside loop. This is useful for testing and\n\t // verifying the behavior of a SpringSystem or if you want to control your own\n\t // timing loop for some reason e.g. slowing down or speeding up the\n\t // simulation.\n\t rebound.SteppingSimulationLooper = function(timestep) {\n\t this.springSystem = null;\n\t var time = 0;\n\t\n\t // this.run is NOOP'd here to allow control from the outside using\n\t // this.step.\n\t this.run = function(){};\n\t\n\t // Perform one step toward resolving the SpringSystem.\n\t this.step = function(timestep) {\n\t this.springSystem.loop(time+=timestep);\n\t };\n\t };\n\t\n\t // Math for converting from\n\t // [Origami](http://facebook.github.io/origami/) to\n\t // [Rebound](http://facebook.github.io/rebound).\n\t // You mostly don't need to worry about this, just use\n\t // SpringConfig.fromOrigamiTensionAndFriction(v, v);\n\t var OrigamiValueConverter = rebound.OrigamiValueConverter = {\n\t tensionFromOrigamiValue: function(oValue) {\n\t return (oValue - 30.0) * 3.62 + 194.0;\n\t },\n\t\n\t origamiValueFromTension: function(tension) {\n\t return (tension - 194.0) / 3.62 + 30.0;\n\t },\n\t\n\t frictionFromOrigamiValue: function(oValue) {\n\t return (oValue - 8.0) * 3.0 + 25.0;\n\t },\n\t\n\t origamiFromFriction: function(friction) {\n\t return (friction - 25.0) / 3.0 + 8.0;\n\t }\n\t };\n\t\n\t // BouncyConversion provides math for converting from Origami PopAnimation\n\t // config values to regular Origami tension and friction values. If you are\n\t // trying to replicate prototypes made with PopAnimation patches in Origami,\n\t // then you should create your springs with\n\t // SpringSystem.createSpringWithBouncinessAndSpeed, which uses this Math\n\t // internally to create a spring to match the provided PopAnimation\n\t // configuration from Origami.\n\t var BouncyConversion = rebound.BouncyConversion = function(bounciness, speed){\n\t this.bounciness = bounciness;\n\t this.speed = speed;\n\t var b = this.normalize(bounciness / 1.7, 0, 20.0);\n\t b = this.projectNormal(b, 0.0, 0.8);\n\t var s = this.normalize(speed / 1.7, 0, 20.0);\n\t this.bouncyTension = this.projectNormal(s, 0.5, 200)\n\t this.bouncyFriction = this.quadraticOutInterpolation(\n\t b,\n\t this.b3Nobounce(this.bouncyTension),\n\t 0.01);\n\t }\n\t\n\t util.extend(BouncyConversion.prototype, {\n\t\n\t normalize: function(value, startValue, endValue) {\n\t return (value - startValue) / (endValue - startValue);\n\t },\n\t\n\t projectNormal: function(n, start, end) {\n\t return start + (n * (end - start));\n\t },\n\t\n\t linearInterpolation: function(t, start, end) {\n\t return t * end + (1.0 - t) * start;\n\t },\n\t\n\t quadraticOutInterpolation: function(t, start, end) {\n\t return this.linearInterpolation(2*t - t*t, start, end);\n\t },\n\t\n\t b3Friction1: function(x) {\n\t return (0.0007 * Math.pow(x, 3)) -\n\t (0.031 * Math.pow(x, 2)) + 0.64 * x + 1.28;\n\t },\n\t\n\t b3Friction2: function(x) {\n\t return (0.000044 * Math.pow(x, 3)) -\n\t (0.006 * Math.pow(x, 2)) + 0.36 * x + 2.;\n\t },\n\t\n\t b3Friction3: function(x) {\n\t return (0.00000045 * Math.pow(x, 3)) -\n\t (0.000332 * Math.pow(x, 2)) + 0.1078 * x + 5.84;\n\t },\n\t\n\t b3Nobounce: function(tension) {\n\t var friction = 0;\n\t if (tension <= 18) {\n\t friction = this.b3Friction1(tension);\n\t } else if (tension > 18 && tension <= 44) {\n\t friction = this.b3Friction2(tension);\n\t } else {\n\t friction = this.b3Friction3(tension);\n\t }\n\t return friction;\n\t }\n\t });\n\t\n\t util.extend(SpringConfig, {\n\t // Convert an origami Spring tension and friction to Rebound spring\n\t // constants. If you are prototyping a design with Origami, this\n\t // makes it easy to make your springs behave exactly the same in\n\t // Rebound.\n\t fromOrigamiTensionAndFriction: function(tension, friction) {\n\t return new SpringConfig(\n\t OrigamiValueConverter.tensionFromOrigamiValue(tension),\n\t OrigamiValueConverter.frictionFromOrigamiValue(friction));\n\t },\n\t\n\t // Convert an origami PopAnimation Spring bounciness and speed to Rebound\n\t // spring constants. If you are using PopAnimation patches in Origami, this\n\t // utility will provide springs that match your prototype.\n\t fromBouncinessAndSpeed: function(bounciness, speed) {\n\t var bouncyConversion = new rebound.BouncyConversion(bounciness, speed);\n\t return this.fromOrigamiTensionAndFriction(\n\t bouncyConversion.bouncyTension,\n\t bouncyConversion.bouncyFriction);\n\t },\n\t\n\t // Create a SpringConfig with no tension or a coasting spring with some\n\t // amount of Friction so that it does not coast infininitely.\n\t coastingConfigWithOrigamiFriction: function(friction) {\n\t return new SpringConfig(\n\t 0,\n\t OrigamiValueConverter.frictionFromOrigamiValue(friction)\n\t );\n\t }\n\t });\n\t\n\t SpringConfig.DEFAULT_ORIGAMI_SPRING_CONFIG =\n\t SpringConfig.fromOrigamiTensionAndFriction(40, 7);\n\t\n\t util.extend(SpringConfig.prototype, {friction: 0, tension: 0});\n\t\n\t // Here are a couple of function to convert colors between hex codes and RGB\n\t // component values. These are handy when performing color\n\t // tweening animations.\n\t var colorCache = {};\n\t util.hexToRGB = function(color) {\n\t if (colorCache[color]) {\n\t return colorCache[color];\n\t }\n\t color = color.replace('#', '');\n\t if (color.length === 3) {\n\t color = color[0] + color[0] + color[1] + color[1] + color[2] + color[2];\n\t }\n\t var parts = color.match(/.{2}/g);\n\t\n\t var ret = {\n\t r: parseInt(parts[0], 16),\n\t g: parseInt(parts[1], 16),\n\t b: parseInt(parts[2], 16)\n\t };\n\t\n\t colorCache[color] = ret;\n\t return ret;\n\t };\n\t\n\t util.rgbToHex = function(r, g, b) {\n\t r = r.toString(16);\n\t g = g.toString(16);\n\t b = b.toString(16);\n\t r = r.length < 2 ? '0' + r : r;\n\t g = g.length < 2 ? '0' + g : g;\n\t b = b.length < 2 ? '0' + b : b;\n\t return '#' + r + g + b;\n\t };\n\t\n\t var MathUtil = rebound.MathUtil = {\n\t // This helper function does a linear interpolation of a value from\n\t // one range to another. This can be very useful for converting the\n\t // motion of a Spring to a range of UI property values. For example a\n\t // spring moving from position 0 to 1 could be interpolated to move a\n\t // view from pixel 300 to 350 and scale it from 0.5 to 1. The current\n\t // position of the `Spring` just needs to be run through this method\n\t // taking its input range in the _from_ parameters with the property\n\t // animation range in the _to_ parameters.\n\t mapValueInRange: function(value, fromLow, fromHigh, toLow, toHigh) {\n\t var fromRangeSize = fromHigh - fromLow;\n\t var toRangeSize = toHigh - toLow;\n\t var valueScale = (value - fromLow) / fromRangeSize;\n\t return toLow + (valueScale * toRangeSize);\n\t },\n\t\n\t // Interpolate two hex colors in a 0 - 1 range or optionally provide a\n\t // custom range with fromLow,fromHight. The output will be in hex by default\n\t // unless asRGB is true in which case it will be returned as an rgb string.\n\t interpolateColor:\n\t function(val, startColor, endColor, fromLow, fromHigh, asRGB) {\n\t fromLow = fromLow === undefined ? 0 : fromLow;\n\t fromHigh = fromHigh === undefined ? 1 : fromHigh;\n\t startColor = util.hexToRGB(startColor);\n\t endColor = util.hexToRGB(endColor);\n\t var r = Math.floor(\n\t util.mapValueInRange(val, fromLow, fromHigh, startColor.r, endColor.r)\n\t );\n\t var g = Math.floor(\n\t util.mapValueInRange(val, fromLow, fromHigh, startColor.g, endColor.g)\n\t );\n\t var b = Math.floor(\n\t util.mapValueInRange(val, fromLow, fromHigh, startColor.b, endColor.b)\n\t );\n\t if (asRGB) {\n\t return 'rgb(' + r + ',' + g + ',' + b + ')';\n\t } else {\n\t return util.rgbToHex(r, g, b);\n\t }\n\t },\n\t\n\t degreesToRadians: function(deg) {\n\t return (deg * Math.PI) / 180;\n\t },\n\t\n\t radiansToDegrees: function(rad) {\n\t return (rad * 180) / Math.PI;\n\t }\n\t\n\t }\n\t\n\t util.extend(util, MathUtil);\n\t\n\t\n\t // Utilities\n\t // ---------\n\t // Here are a few useful JavaScript utilities.\n\t\n\t // Lop off the first occurence of the reference in the Array.\n\t function removeFirst(array, item) {\n\t var idx = array.indexOf(item);\n\t idx != -1 && array.splice(idx, 1);\n\t }\n\t\n\t var _onFrame;\n\t if (typeof window !== 'undefined') {\n\t _onFrame = window.requestAnimationFrame ||\n\t window.webkitRequestAnimationFrame ||\n\t window.mozRequestAnimationFrame ||\n\t window.msRequestAnimationFrame ||\n\t window.oRequestAnimationFrame ||\n\t function(callback) {\n\t window.setTimeout(callback, 1000 / 60);\n\t };\n\t }\n\t if (!_onFrame && typeof process !== 'undefined' && process.title === 'node') {\n\t _onFrame = setImmediate;\n\t }\n\t\n\t // Cross browser/node timer functions.\n\t util.onFrame = function onFrame(func) {\n\t return _onFrame(func);\n\t };\n\t\n\t // Export the public api using exports for common js or the window for\n\t // normal browser inclusion.\n\t if (true) {\n\t util.extend(exports, rebound);\n\t } else if (typeof window != 'undefined') {\n\t window.rebound = rebound;\n\t }\n\t})();\n\t\n\t\n\t// Legal Stuff\n\t// -----------\n\t/**\n\t * Copyright (c) 2013, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t */\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(124), __webpack_require__(395).setImmediate))\n\n/***/ },\n/* 395 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(setImmediate, clearImmediate) {var nextTick = __webpack_require__(124).nextTick;\n\tvar apply = Function.prototype.apply;\n\tvar slice = Array.prototype.slice;\n\tvar immediateIds = {};\n\tvar nextImmediateId = 0;\n\t\n\t// DOM APIs, for completeness\n\t\n\texports.setTimeout = function() {\n\t return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n\t};\n\texports.setInterval = function() {\n\t return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n\t};\n\texports.clearTimeout =\n\texports.clearInterval = function(timeout) { timeout.close(); };\n\t\n\tfunction Timeout(id, clearFn) {\n\t this._id = id;\n\t this._clearFn = clearFn;\n\t}\n\tTimeout.prototype.unref = Timeout.prototype.ref = function() {};\n\tTimeout.prototype.close = function() {\n\t this._clearFn.call(window, this._id);\n\t};\n\t\n\t// Does not start the time, just sets up the members needed.\n\texports.enroll = function(item, msecs) {\n\t clearTimeout(item._idleTimeoutId);\n\t item._idleTimeout = msecs;\n\t};\n\t\n\texports.unenroll = function(item) {\n\t clearTimeout(item._idleTimeoutId);\n\t item._idleTimeout = -1;\n\t};\n\t\n\texports._unrefActive = exports.active = function(item) {\n\t clearTimeout(item._idleTimeoutId);\n\t\n\t var msecs = item._idleTimeout;\n\t if (msecs >= 0) {\n\t item._idleTimeoutId = setTimeout(function onTimeout() {\n\t if (item._onTimeout)\n\t item._onTimeout();\n\t }, msecs);\n\t }\n\t};\n\t\n\t// That's not how node.js implements it but the exposed api is the same.\n\texports.setImmediate = typeof setImmediate === \"function\" ? setImmediate : function(fn) {\n\t var id = nextImmediateId++;\n\t var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n\t\n\t immediateIds[id] = true;\n\t\n\t nextTick(function onNextTick() {\n\t if (immediateIds[id]) {\n\t // fn.call() is faster so we optimize for the common use-case\n\t // @see http://jsperf.com/call-apply-segu\n\t if (args) {\n\t fn.apply(null, args);\n\t } else {\n\t fn.call(null);\n\t }\n\t // Prevent ids from leaking\n\t exports.clearImmediate(id);\n\t }\n\t });\n\t\n\t return id;\n\t};\n\t\n\texports.clearImmediate = typeof clearImmediate === \"function\" ? clearImmediate : function(id) {\n\t delete immediateIds[id];\n\t};\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(395).setImmediate, __webpack_require__(395).clearImmediate))\n\n/***/ },\n/* 396 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\t\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tvar _warning = __webpack_require__(397);\n\t\n\tvar _warning2 = _interopRequireDefault(_warning);\n\t\n\tvar _invariant = __webpack_require__(398);\n\t\n\tvar _invariant2 = _interopRequireDefault(_invariant);\n\t\n\tvar _Actions = __webpack_require__(399);\n\t\n\tvar _ExecutionEnvironment = __webpack_require__(400);\n\t\n\tvar _DOMUtils = __webpack_require__(401);\n\t\n\tvar _DOMStateStorage = __webpack_require__(402);\n\t\n\tvar _createDOMHistory = __webpack_require__(403);\n\t\n\tvar _createDOMHistory2 = _interopRequireDefault(_createDOMHistory);\n\t\n\tfunction isAbsolutePath(path) {\n\t return typeof path === 'string' && path.charAt(0) === '/';\n\t}\n\t\n\tfunction ensureSlash() {\n\t var path = _DOMUtils.getHashPath();\n\t\n\t if (isAbsolutePath(path)) return true;\n\t\n\t _DOMUtils.replaceHashPath('/' + path);\n\t\n\t return false;\n\t}\n\t\n\tfunction addQueryStringValueToPath(path, key, value) {\n\t return path + (path.indexOf('?') === -1 ? '?' : '&') + (key + '=' + value);\n\t}\n\t\n\tfunction stripQueryStringValueFromPath(path, key) {\n\t return path.replace(new RegExp('[?&]?' + key + '=[a-zA-Z0-9]+'), '');\n\t}\n\t\n\tfunction getQueryStringValueFromPath(path, key) {\n\t var match = path.match(new RegExp('\\\\?.*?\\\\b' + key + '=(.+?)\\\\b'));\n\t return match && match[1];\n\t}\n\t\n\tvar DefaultQueryKey = '_k';\n\t\n\tfunction createHashHistory() {\n\t var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\t\n\t _invariant2['default'](_ExecutionEnvironment.canUseDOM, 'Hash history needs a DOM');\n\t\n\t var queryKey = options.queryKey;\n\t\n\t if (queryKey === undefined || !!queryKey) queryKey = typeof queryKey === 'string' ? queryKey : DefaultQueryKey;\n\t\n\t function getCurrentLocation() {\n\t var path = _DOMUtils.getHashPath();\n\t\n\t var key = undefined,\n\t state = undefined;\n\t if (queryKey) {\n\t key = getQueryStringValueFromPath(path, queryKey);\n\t path = stripQueryStringValueFromPath(path, queryKey);\n\t\n\t if (key) {\n\t state = _DOMStateStorage.readState(key);\n\t } else {\n\t state = null;\n\t key = history.createKey();\n\t _DOMUtils.replaceHashPath(addQueryStringValueToPath(path, queryKey, key));\n\t }\n\t } else {\n\t key = state = null;\n\t }\n\t\n\t return history.createLocation(path, state, undefined, key);\n\t }\n\t\n\t function startHashChangeListener(_ref) {\n\t var transitionTo = _ref.transitionTo;\n\t\n\t function hashChangeListener() {\n\t if (!ensureSlash()) return; // Always make sure hashes are preceeded with a /.\n\t\n\t transitionTo(getCurrentLocation());\n\t }\n\t\n\t ensureSlash();\n\t _DOMUtils.addEventListener(window, 'hashchange', hashChangeListener);\n\t\n\t return function () {\n\t _DOMUtils.removeEventListener(window, 'hashchange', hashChangeListener);\n\t };\n\t }\n\t\n\t function finishTransition(location) {\n\t var basename = location.basename;\n\t var pathname = location.pathname;\n\t var search = location.search;\n\t var state = location.state;\n\t var action = location.action;\n\t var key = location.key;\n\t\n\t if (action === _Actions.POP) return; // Nothing to do.\n\t\n\t var path = (basename || '') + pathname + search;\n\t\n\t if (queryKey) path = addQueryStringValueToPath(path, queryKey, key);\n\t\n\t if (path === _DOMUtils.getHashPath()) {\n\t _warning2['default'](false, 'You cannot %s the same path using hash history', action);\n\t } else {\n\t if (queryKey) {\n\t _DOMStateStorage.saveState(key, state);\n\t } else {\n\t // Drop key and state.\n\t location.key = location.state = null;\n\t }\n\t\n\t if (action === _Actions.PUSH) {\n\t window.location.hash = path;\n\t } else {\n\t // REPLACE\n\t _DOMUtils.replaceHashPath(path);\n\t }\n\t }\n\t }\n\t\n\t var history = _createDOMHistory2['default'](_extends({}, options, {\n\t getCurrentLocation: getCurrentLocation,\n\t finishTransition: finishTransition,\n\t saveState: _DOMStateStorage.saveState\n\t }));\n\t\n\t var listenerCount = 0,\n\t stopHashChangeListener = undefined;\n\t\n\t function listenBefore(listener) {\n\t if (++listenerCount === 1) stopHashChangeListener = startHashChangeListener(history);\n\t\n\t var unlisten = history.listenBefore(listener);\n\t\n\t return function () {\n\t unlisten();\n\t\n\t if (--listenerCount === 0) stopHashChangeListener();\n\t };\n\t }\n\t\n\t function listen(listener) {\n\t if (++listenerCount === 1) stopHashChangeListener = startHashChangeListener(history);\n\t\n\t var unlisten = history.listen(listener);\n\t\n\t return function () {\n\t unlisten();\n\t\n\t if (--listenerCount === 0) stopHashChangeListener();\n\t };\n\t }\n\t\n\t function pushState(state, path) {\n\t _warning2['default'](queryKey || state == null, 'You cannot use state without a queryKey it will be dropped');\n\t\n\t history.pushState(state, path);\n\t }\n\t\n\t function replaceState(state, path) {\n\t _warning2['default'](queryKey || state == null, 'You cannot use state without a queryKey it will be dropped');\n\t\n\t history.replaceState(state, path);\n\t }\n\t\n\t var goIsSupportedWithoutReload = _DOMUtils.supportsGoWithoutReloadUsingHash();\n\t\n\t function go(n) {\n\t _warning2['default'](goIsSupportedWithoutReload, 'Hash history go(n) causes a full page reload in this browser');\n\t\n\t history.go(n);\n\t }\n\t\n\t function createHref(path) {\n\t return '#' + history.createHref(path);\n\t }\n\t\n\t // deprecated\n\t function registerTransitionHook(hook) {\n\t if (++listenerCount === 1) stopHashChangeListener = startHashChangeListener(history);\n\t\n\t history.registerTransitionHook(hook);\n\t }\n\t\n\t // deprecated\n\t function unregisterTransitionHook(hook) {\n\t history.unregisterTransitionHook(hook);\n\t\n\t if (--listenerCount === 0) stopHashChangeListener();\n\t }\n\t\n\t return _extends({}, history, {\n\t listenBefore: listenBefore,\n\t listen: listen,\n\t pushState: pushState,\n\t replaceState: replaceState,\n\t go: go,\n\t createHref: createHref,\n\t registerTransitionHook: registerTransitionHook,\n\t unregisterTransitionHook: unregisterTransitionHook\n\t });\n\t}\n\t\n\texports['default'] = createHashHistory;\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 397 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2014-2015, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t */\n\t\n\t'use strict';\n\t\n\t/**\n\t * Similar to invariant but only logs a warning if the condition is not met.\n\t * This can be used to log issues in development environments in critical\n\t * paths. Removing the logging code for production environments will keep the\n\t * same logic and follow the same code paths.\n\t */\n\t\n\tvar warning = function() {};\n\t\n\tif (false) {\n\t warning = function(condition, format, args) {\n\t var len = arguments.length;\n\t args = new Array(len > 2 ? len - 2 : 0);\n\t for (var key = 2; key < len; key++) {\n\t args[key - 2] = arguments[key];\n\t }\n\t if (format === undefined) {\n\t throw new Error(\n\t '`warning(condition, format, ...args)` requires a warning ' +\n\t 'message argument'\n\t );\n\t }\n\t\n\t if (format.length < 10 || (/^[s\\W]*$/).test(format)) {\n\t throw new Error(\n\t 'The warning format should be able to uniquely identify this ' +\n\t 'warning. Please, use a more descriptive format than: ' + format\n\t );\n\t }\n\t\n\t if (!condition) {\n\t var argIndex = 0;\n\t var message = 'Warning: ' +\n\t format.replace(/%s/g, function() {\n\t return args[argIndex++];\n\t });\n\t if (typeof console !== 'undefined') {\n\t console.error(message);\n\t }\n\t try {\n\t // This error was thrown as a convenience so that you can use this stack\n\t // to find the callsite that caused this warning to fire.\n\t throw new Error(message);\n\t } catch(x) {}\n\t }\n\t };\n\t}\n\t\n\tmodule.exports = warning;\n\n\n/***/ },\n/* 398 */\n191,\n/* 399 */\n/***/ function(module, exports) {\n\n\t/**\n\t * Indicates that navigation was caused by a call to history.push.\n\t */\n\t'use strict';\n\t\n\texports.__esModule = true;\n\tvar PUSH = 'PUSH';\n\t\n\texports.PUSH = PUSH;\n\t/**\n\t * Indicates that navigation was caused by a call to history.replace.\n\t */\n\tvar REPLACE = 'REPLACE';\n\t\n\texports.REPLACE = REPLACE;\n\t/**\n\t * Indicates that navigation was caused by some other action such\n\t * as using a browser's back/forward buttons and/or manually manipulating\n\t * the URL in a browser's location bar. This is the default.\n\t *\n\t * See https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onpopstate\n\t * for more information.\n\t */\n\tvar POP = 'POP';\n\t\n\texports.POP = POP;\n\texports['default'] = {\n\t PUSH: PUSH,\n\t REPLACE: REPLACE,\n\t POP: POP\n\t};\n\n/***/ },\n/* 400 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\tvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\texports.canUseDOM = canUseDOM;\n\n/***/ },\n/* 401 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\texports.addEventListener = addEventListener;\n\texports.removeEventListener = removeEventListener;\n\texports.getHashPath = getHashPath;\n\texports.replaceHashPath = replaceHashPath;\n\texports.getWindowPath = getWindowPath;\n\texports.go = go;\n\texports.getUserConfirmation = getUserConfirmation;\n\texports.supportsHistory = supportsHistory;\n\texports.supportsGoWithoutReloadUsingHash = supportsGoWithoutReloadUsingHash;\n\t\n\tfunction addEventListener(node, event, listener) {\n\t if (node.addEventListener) {\n\t node.addEventListener(event, listener, false);\n\t } else {\n\t node.attachEvent('on' + event, listener);\n\t }\n\t}\n\t\n\tfunction removeEventListener(node, event, listener) {\n\t if (node.removeEventListener) {\n\t node.removeEventListener(event, listener, false);\n\t } else {\n\t node.detachEvent('on' + event, listener);\n\t }\n\t}\n\t\n\tfunction getHashPath() {\n\t // We can't use window.location.hash here because it's not\n\t // consistent across browsers - Firefox will pre-decode it!\n\t return window.location.href.split('#')[1] || '';\n\t}\n\t\n\tfunction replaceHashPath(path) {\n\t window.location.replace(window.location.pathname + window.location.search + '#' + path);\n\t}\n\t\n\tfunction getWindowPath() {\n\t return window.location.pathname + window.location.search + window.location.hash;\n\t}\n\t\n\tfunction go(n) {\n\t if (n) window.history.go(n);\n\t}\n\t\n\tfunction getUserConfirmation(message, callback) {\n\t callback(window.confirm(message));\n\t}\n\t\n\t/**\n\t * Returns true if the HTML5 history API is supported. Taken from modernizr.\n\t *\n\t * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n\t * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n\t * changed to avoid false negatives for Windows Phones: https://github.com/rackt/react-router/issues/586\n\t */\n\t\n\tfunction supportsHistory() {\n\t var ua = navigator.userAgent;\n\t if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) {\n\t return false;\n\t }\n\t return window.history && 'pushState' in window.history;\n\t}\n\t\n\t/**\n\t * Returns false if using go(n) with hash history causes a full page reload.\n\t */\n\t\n\tfunction supportsGoWithoutReloadUsingHash() {\n\t var ua = navigator.userAgent;\n\t return ua.indexOf('Firefox') === -1;\n\t}\n\n/***/ },\n/* 402 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*eslint-disable no-empty */\n\t'use strict';\n\t\n\texports.__esModule = true;\n\texports.saveState = saveState;\n\texports.readState = readState;\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tvar _warning = __webpack_require__(397);\n\t\n\tvar _warning2 = _interopRequireDefault(_warning);\n\t\n\tvar KeyPrefix = '@@History/';\n\tvar QuotaExceededError = 'QuotaExceededError';\n\t\n\tfunction createKey(key) {\n\t return KeyPrefix + key;\n\t}\n\t\n\tfunction saveState(key, state) {\n\t try {\n\t window.sessionStorage.setItem(createKey(key), JSON.stringify(state));\n\t } catch (error) {\n\t if (error.name === QuotaExceededError || window.sessionStorage.length === 0) {\n\t // Probably in Safari \"private mode\" where sessionStorage quota is 0. #42\n\t _warning2['default'](false, '[history] Unable to save state; sessionStorage is not available in Safari private mode');\n\t\n\t return;\n\t }\n\t\n\t throw error;\n\t }\n\t}\n\t\n\tfunction readState(key) {\n\t var json = window.sessionStorage.getItem(createKey(key));\n\t\n\t if (json) {\n\t try {\n\t return JSON.parse(json);\n\t } catch (error) {\n\t // Ignore invalid JSON.\n\t }\n\t }\n\t\n\t return null;\n\t}\n\n/***/ },\n/* 403 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\t\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tvar _invariant = __webpack_require__(398);\n\t\n\tvar _invariant2 = _interopRequireDefault(_invariant);\n\t\n\tvar _ExecutionEnvironment = __webpack_require__(400);\n\t\n\tvar _DOMUtils = __webpack_require__(401);\n\t\n\tvar _createHistory = __webpack_require__(404);\n\t\n\tvar _createHistory2 = _interopRequireDefault(_createHistory);\n\t\n\tfunction createDOMHistory(options) {\n\t var history = _createHistory2['default'](_extends({\n\t getUserConfirmation: _DOMUtils.getUserConfirmation\n\t }, options, {\n\t go: _DOMUtils.go\n\t }));\n\t\n\t function listen(listener) {\n\t _invariant2['default'](_ExecutionEnvironment.canUseDOM, 'DOM history needs a DOM');\n\t\n\t return history.listen(listener);\n\t }\n\t\n\t return _extends({}, history, {\n\t listen: listen\n\t });\n\t}\n\t\n\texports['default'] = createDOMHistory;\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 404 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\t\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tvar _deepEqual = __webpack_require__(405);\n\t\n\tvar _deepEqual2 = _interopRequireDefault(_deepEqual);\n\t\n\tvar _AsyncUtils = __webpack_require__(408);\n\t\n\tvar _Actions = __webpack_require__(399);\n\t\n\tvar _createLocation2 = __webpack_require__(409);\n\t\n\tvar _createLocation3 = _interopRequireDefault(_createLocation2);\n\t\n\tvar _runTransitionHook = __webpack_require__(411);\n\t\n\tvar _runTransitionHook2 = _interopRequireDefault(_runTransitionHook);\n\t\n\tvar _deprecate = __webpack_require__(412);\n\t\n\tvar _deprecate2 = _interopRequireDefault(_deprecate);\n\t\n\tfunction createRandomKey(length) {\n\t return Math.random().toString(36).substr(2, length);\n\t}\n\t\n\tfunction locationsAreEqual(a, b) {\n\t return a.pathname === b.pathname && a.search === b.search &&\n\t //a.action === b.action && // Different action !== location change.\n\t a.key === b.key && _deepEqual2['default'](a.state, b.state);\n\t}\n\t\n\tvar DefaultKeyLength = 6;\n\t\n\tfunction createHistory() {\n\t var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\t var getCurrentLocation = options.getCurrentLocation;\n\t var finishTransition = options.finishTransition;\n\t var saveState = options.saveState;\n\t var go = options.go;\n\t var keyLength = options.keyLength;\n\t var getUserConfirmation = options.getUserConfirmation;\n\t\n\t if (typeof keyLength !== 'number') keyLength = DefaultKeyLength;\n\t\n\t var transitionHooks = [];\n\t\n\t function listenBefore(hook) {\n\t transitionHooks.push(hook);\n\t\n\t return function () {\n\t transitionHooks = transitionHooks.filter(function (item) {\n\t return item !== hook;\n\t });\n\t };\n\t }\n\t\n\t var allKeys = [];\n\t var changeListeners = [];\n\t var location = undefined;\n\t\n\t function getCurrent() {\n\t if (pendingLocation && pendingLocation.action === _Actions.POP) {\n\t return allKeys.indexOf(pendingLocation.key);\n\t } else if (location) {\n\t return allKeys.indexOf(location.key);\n\t } else {\n\t return -1;\n\t }\n\t }\n\t\n\t function updateLocation(newLocation) {\n\t var current = getCurrent();\n\t\n\t location = newLocation;\n\t\n\t if (location.action === _Actions.PUSH) {\n\t allKeys = [].concat(allKeys.slice(0, current + 1), [location.key]);\n\t } else if (location.action === _Actions.REPLACE) {\n\t allKeys[current] = location.key;\n\t }\n\t\n\t changeListeners.forEach(function (listener) {\n\t listener(location);\n\t });\n\t }\n\t\n\t function listen(listener) {\n\t changeListeners.push(listener);\n\t\n\t if (location) {\n\t listener(location);\n\t } else {\n\t var _location = getCurrentLocation();\n\t allKeys = [_location.key];\n\t updateLocation(_location);\n\t }\n\t\n\t return function () {\n\t changeListeners = changeListeners.filter(function (item) {\n\t return item !== listener;\n\t });\n\t };\n\t }\n\t\n\t function confirmTransitionTo(location, callback) {\n\t _AsyncUtils.loopAsync(transitionHooks.length, function (index, next, done) {\n\t _runTransitionHook2['default'](transitionHooks[index], location, function (result) {\n\t if (result != null) {\n\t done(result);\n\t } else {\n\t next();\n\t }\n\t });\n\t }, function (message) {\n\t if (getUserConfirmation && typeof message === 'string') {\n\t getUserConfirmation(message, function (ok) {\n\t callback(ok !== false);\n\t });\n\t } else {\n\t callback(message !== false);\n\t }\n\t });\n\t }\n\t\n\t var pendingLocation = undefined;\n\t\n\t function transitionTo(nextLocation) {\n\t if (location && locationsAreEqual(location, nextLocation)) return; // Nothing to do.\n\t\n\t pendingLocation = nextLocation;\n\t\n\t confirmTransitionTo(nextLocation, function (ok) {\n\t if (pendingLocation !== nextLocation) return; // Transition was interrupted.\n\t\n\t if (ok) {\n\t if (finishTransition(nextLocation) !== false) updateLocation(nextLocation);\n\t } else if (location && nextLocation.action === _Actions.POP) {\n\t var prevIndex = allKeys.indexOf(location.key);\n\t var nextIndex = allKeys.indexOf(nextLocation.key);\n\t\n\t if (prevIndex !== -1 && nextIndex !== -1) go(prevIndex - nextIndex); // Restore the URL.\n\t }\n\t });\n\t }\n\t\n\t function pushState(state, path) {\n\t transitionTo(createLocation(path, state, _Actions.PUSH, createKey()));\n\t }\n\t\n\t function replaceState(state, path) {\n\t transitionTo(createLocation(path, state, _Actions.REPLACE, createKey()));\n\t }\n\t\n\t function goBack() {\n\t go(-1);\n\t }\n\t\n\t function goForward() {\n\t go(1);\n\t }\n\t\n\t function createKey() {\n\t return createRandomKey(keyLength);\n\t }\n\t\n\t function createPath(path) {\n\t if (path == null || typeof path === 'string') return path;\n\t\n\t var pathname = path.pathname;\n\t var search = path.search;\n\t var hash = path.hash;\n\t\n\t var result = pathname;\n\t\n\t if (search) result += search;\n\t\n\t if (hash) result += hash;\n\t\n\t return result;\n\t }\n\t\n\t function createHref(path) {\n\t return createPath(path);\n\t }\n\t\n\t function createLocation(path, state, action) {\n\t var key = arguments.length <= 3 || arguments[3] === undefined ? createKey() : arguments[3];\n\t\n\t return _createLocation3['default'](path, state, action, key);\n\t }\n\t\n\t // deprecated\n\t function setState(state) {\n\t if (location) {\n\t updateLocationState(location, state);\n\t updateLocation(location);\n\t } else {\n\t updateLocationState(getCurrentLocation(), state);\n\t }\n\t }\n\t\n\t function updateLocationState(location, state) {\n\t location.state = _extends({}, location.state, state);\n\t saveState(location.key, location.state);\n\t }\n\t\n\t // deprecated\n\t function registerTransitionHook(hook) {\n\t if (transitionHooks.indexOf(hook) === -1) transitionHooks.push(hook);\n\t }\n\t\n\t // deprecated\n\t function unregisterTransitionHook(hook) {\n\t transitionHooks = transitionHooks.filter(function (item) {\n\t return item !== hook;\n\t });\n\t }\n\t\n\t return {\n\t listenBefore: listenBefore,\n\t listen: listen,\n\t transitionTo: transitionTo,\n\t pushState: pushState,\n\t replaceState: replaceState,\n\t go: go,\n\t goBack: goBack,\n\t goForward: goForward,\n\t createKey: createKey,\n\t createPath: createPath,\n\t createHref: createHref,\n\t createLocation: createLocation,\n\t\n\t setState: _deprecate2['default'](setState, 'setState is deprecated; use location.key to save state instead'),\n\t registerTransitionHook: _deprecate2['default'](registerTransitionHook, 'registerTransitionHook is deprecated; use listenBefore instead'),\n\t unregisterTransitionHook: _deprecate2['default'](unregisterTransitionHook, 'unregisterTransitionHook is deprecated; use the callback returned from listenBefore instead')\n\t };\n\t}\n\t\n\texports['default'] = createHistory;\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 405 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar pSlice = Array.prototype.slice;\n\tvar objectKeys = __webpack_require__(406);\n\tvar isArguments = __webpack_require__(407);\n\t\n\tvar deepEqual = module.exports = function (actual, expected, opts) {\n\t if (!opts) opts = {};\n\t // 7.1. All identical values are equivalent, as determined by ===.\n\t if (actual === expected) {\n\t return true;\n\t\n\t } else if (actual instanceof Date && expected instanceof Date) {\n\t return actual.getTime() === expected.getTime();\n\t\n\t // 7.3. Other pairs that do not both pass typeof value == 'object',\n\t // equivalence is determined by ==.\n\t } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') {\n\t return opts.strict ? actual === expected : actual == expected;\n\t\n\t // 7.4. For all other Object pairs, including Array objects, equivalence is\n\t // determined by having the same number of owned properties (as verified\n\t // with Object.prototype.hasOwnProperty.call), the same set of keys\n\t // (although not necessarily the same order), equivalent values for every\n\t // corresponding key, and an identical 'prototype' property. Note: this\n\t // accounts for both named and indexed properties on Arrays.\n\t } else {\n\t return objEquiv(actual, expected, opts);\n\t }\n\t}\n\t\n\tfunction isUndefinedOrNull(value) {\n\t return value === null || value === undefined;\n\t}\n\t\n\tfunction isBuffer (x) {\n\t if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false;\n\t if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n\t return false;\n\t }\n\t if (x.length > 0 && typeof x[0] !== 'number') return false;\n\t return true;\n\t}\n\t\n\tfunction objEquiv(a, b, opts) {\n\t var i, key;\n\t if (isUndefinedOrNull(a) || isUndefinedOrNull(b))\n\t return false;\n\t // an identical 'prototype' property.\n\t if (a.prototype !== b.prototype) return false;\n\t //~~~I've managed to break Object.keys through screwy arguments passing.\n\t // Converting to array solves the problem.\n\t if (isArguments(a)) {\n\t if (!isArguments(b)) {\n\t return false;\n\t }\n\t a = pSlice.call(a);\n\t b = pSlice.call(b);\n\t return deepEqual(a, b, opts);\n\t }\n\t if (isBuffer(a)) {\n\t if (!isBuffer(b)) {\n\t return false;\n\t }\n\t if (a.length !== b.length) return false;\n\t for (i = 0; i < a.length; i++) {\n\t if (a[i] !== b[i]) return false;\n\t }\n\t return true;\n\t }\n\t try {\n\t var ka = objectKeys(a),\n\t kb = objectKeys(b);\n\t } catch (e) {//happens when one is a string literal and the other isn't\n\t return false;\n\t }\n\t // having the same number of owned properties (keys incorporates\n\t // hasOwnProperty)\n\t if (ka.length != kb.length)\n\t return false;\n\t //the same set of keys (although not necessarily the same order),\n\t ka.sort();\n\t kb.sort();\n\t //~~~cheap key test\n\t for (i = ka.length - 1; i >= 0; i--) {\n\t if (ka[i] != kb[i])\n\t return false;\n\t }\n\t //equivalent values for every corresponding key, and\n\t //~~~possibly expensive deep test\n\t for (i = ka.length - 1; i >= 0; i--) {\n\t key = ka[i];\n\t if (!deepEqual(a[key], b[key], opts)) return false;\n\t }\n\t return typeof a === typeof b;\n\t}\n\n\n/***/ },\n/* 406 */\n/***/ function(module, exports) {\n\n\texports = module.exports = typeof Object.keys === 'function'\n\t ? Object.keys : shim;\n\t\n\texports.shim = shim;\n\tfunction shim (obj) {\n\t var keys = [];\n\t for (var key in obj) keys.push(key);\n\t return keys;\n\t}\n\n\n/***/ },\n/* 407 */\n/***/ function(module, exports) {\n\n\tvar supportsArgumentsClass = (function(){\n\t return Object.prototype.toString.call(arguments)\n\t})() == '[object Arguments]';\n\t\n\texports = module.exports = supportsArgumentsClass ? supported : unsupported;\n\t\n\texports.supported = supported;\n\tfunction supported(object) {\n\t return Object.prototype.toString.call(object) == '[object Arguments]';\n\t};\n\t\n\texports.unsupported = unsupported;\n\tfunction unsupported(object){\n\t return object &&\n\t typeof object == 'object' &&\n\t typeof object.length == 'number' &&\n\t Object.prototype.hasOwnProperty.call(object, 'callee') &&\n\t !Object.prototype.propertyIsEnumerable.call(object, 'callee') ||\n\t false;\n\t};\n\n\n/***/ },\n/* 408 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\texports.loopAsync = loopAsync;\n\t\n\tfunction loopAsync(turns, work, callback) {\n\t var currentTurn = 0;\n\t var isDone = false;\n\t\n\t function done() {\n\t isDone = true;\n\t callback.apply(this, arguments);\n\t }\n\t\n\t function next() {\n\t if (isDone) return;\n\t\n\t if (currentTurn < turns) {\n\t work.call(this, currentTurn++, next, done);\n\t } else {\n\t done.apply(this, arguments);\n\t }\n\t }\n\t\n\t next();\n\t}\n\n/***/ },\n/* 409 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tvar _Actions = __webpack_require__(399);\n\t\n\tvar _parsePath = __webpack_require__(410);\n\t\n\tvar _parsePath2 = _interopRequireDefault(_parsePath);\n\t\n\tfunction createLocation() {\n\t var path = arguments.length <= 0 || arguments[0] === undefined ? '/' : arguments[0];\n\t var state = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n\t var action = arguments.length <= 2 || arguments[2] === undefined ? _Actions.POP : arguments[2];\n\t var key = arguments.length <= 3 || arguments[3] === undefined ? null : arguments[3];\n\t\n\t if (typeof path === 'string') path = _parsePath2['default'](path);\n\t\n\t var pathname = path.pathname || '/';\n\t var search = path.search || '';\n\t var hash = path.hash || '';\n\t\n\t return {\n\t pathname: pathname,\n\t search: search,\n\t hash: hash,\n\t state: state,\n\t action: action,\n\t key: key\n\t };\n\t}\n\t\n\texports['default'] = createLocation;\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 410 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tvar _warning = __webpack_require__(397);\n\t\n\tvar _warning2 = _interopRequireDefault(_warning);\n\t\n\tfunction extractPath(string) {\n\t var match = string.match(/^https?:\\/\\/[^\\/]*/);\n\t\n\t if (match == null) return string;\n\t\n\t _warning2['default'](false, 'A path must be pathname + search + hash only, not a fully qualified URL like \"%s\"', string);\n\t\n\t return string.substring(match[0].length);\n\t}\n\t\n\tfunction parsePath(path) {\n\t var pathname = extractPath(path);\n\t var search = '';\n\t var hash = '';\n\t\n\t var hashIndex = pathname.indexOf('#');\n\t if (hashIndex !== -1) {\n\t hash = pathname.substring(hashIndex);\n\t pathname = pathname.substring(0, hashIndex);\n\t }\n\t\n\t var searchIndex = pathname.indexOf('?');\n\t if (searchIndex !== -1) {\n\t search = pathname.substring(searchIndex);\n\t pathname = pathname.substring(0, searchIndex);\n\t }\n\t\n\t if (pathname === '') pathname = '/';\n\t\n\t return {\n\t pathname: pathname,\n\t search: search,\n\t hash: hash\n\t };\n\t}\n\t\n\texports['default'] = parsePath;\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 411 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tvar _warning = __webpack_require__(397);\n\t\n\tvar _warning2 = _interopRequireDefault(_warning);\n\t\n\tfunction runTransitionHook(hook, location, callback) {\n\t var result = hook(location, callback);\n\t\n\t if (hook.length < 2) {\n\t // Assume the hook runs synchronously and automatically\n\t // call the callback with the return value.\n\t callback(result);\n\t } else {\n\t _warning2['default'](result === undefined, 'You should not \"return\" in a transition hook with a callback argument; call the callback instead');\n\t }\n\t}\n\t\n\texports['default'] = runTransitionHook;\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 412 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tvar _warning = __webpack_require__(397);\n\t\n\tvar _warning2 = _interopRequireDefault(_warning);\n\t\n\tfunction deprecate(fn, message) {\n\t return function () {\n\t _warning2['default'](false, '[history] ' + message);\n\t return fn.apply(this, arguments);\n\t };\n\t}\n\t\n\texports['default'] = deprecate;\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 413 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t'use strict';Object.defineProperty(exports,\"__esModule\",{value:true});var _extends=Object.assign||function(target){for(var i=1;i=1){\n\tprogress=1;\n\t}else if(progress<=0){\n\tprogress=0;\n\t}\n\t\n\tspecificStyle.progressTint.width=100*progress+'%';\n\t\n\tspecificStyle=_ReactStyleSheet2.default.create(specificStyle);\n\t\n\treturn(\n\t_react2.default.createElement(_ReactView2.default,{style:[styles.progressView,this.props.style]},\n\t_react2.default.createElement(_ReactView2.default,{style:[styles.progressTrack,specificStyle.progressTrack]},\n\t_react2.default.createElement(_ReactView2.default,{style:[styles.progressTint,specificStyle.progressTint]}))));\n\t\n\t\n\t\n\t}}]);return ProgressView;}(_react.Component);\n\t;\n\t\n\tvar styles=_ReactStyleSheet2.default.create({\n\tprogressView:{\n\tdisplay:'block',\n\theight:'2px',\n\twidth:'100%'},\n\t\n\tprogressTint:{\n\tposition:'absolute',\n\tleft:0,\n\twidth:0,\n\theight:'100%',\n\tbackground:'#0079fe'},\n\t\n\tprogressTrack:{\n\tposition:'relative',\n\twidth:'100%',\n\theight:'100%',\n\tbackground:'#b4b4b4'}});\n\t\n\t\n\t\n\t_reactMixin2.default.onClass(ProgressView,_NativeMethodsMixin.Mixin);\n\t(0,_autobindDecorator2.default)(ProgressView);\n\tProgressView.isReactNativeComponent=true;exports.default=\n\t\n\tProgressView;\n\n/***/ },\n/* 415 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t'use strict';Object.defineProperty(exports,\"__esModule\",{value:true});var _extends=Object.assign||function(target){for(var i=1;i=0)continue;if(!Object.prototype.hasOwnProperty.call(obj,i))continue;target[i]=obj[i];}return target;}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");}return call&&(typeof call===\"object\"||typeof call===\"function\")?call:self;}function _inherits(subClass,superClass){if(typeof superClass!==\"function\"&&superClass!==null){throw new TypeError(\"Super expression must either be null or a function, not \"+typeof superClass);}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass;}\n\t\n\tvar TRACK_SIZE=4;\n\tvar THUMB_SIZE=20;\n\t\n\tfunction noop(){}var\n\t\n\tSlider=function(_Component){_inherits(Slider,_Component);\n\tfunction Slider(props){_classCallCheck(this,Slider);var _this=_possibleConstructorReturn(this,(Slider.__proto__||Object.getPrototypeOf(Slider)).call(this,\n\tprops));\n\t_this.state={\n\tvalue:props.value};return _this;\n\t\n\t}_createClass(Slider,[{key:'componentWillMount',value:function componentWillMount()\n\t{\n\tthis._panResponder=_ReactPanResponder2.default.create({\n\tonStartShouldSetPanResponder:this._handleStartShouldSetPanResponder.bind(this),\n\tonMoveShouldSetPanResponder:this._handleMoveShouldSetPanResponder.bind(this),\n\tonPanResponderGrant:this._handlePanResponderGrant.bind(this),\n\tonPanResponderMove:this._handlePanResponderMove.bind(this),\n\tonPanResponderRelease:this._handlePanResponderEnd.bind(this),\n\tonPanResponderTerminate:this._handlePanResponderEnd.bind(this)});\n\t\n\t}},{key:'render',value:function render()\n\t{var _props=\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\tthis.props;var minimumTrackTintColor=_props.minimumTrackTintColor;var maximumTrackTintColor=_props.maximumTrackTintColor;var styles=_props.styles;var style=_props.style;var trackStyle=_props.trackStyle;var thumbStyle=_props.thumbStyle;var thumbTintColor=_props.thumbTintColor;var thumbImage=_props.thumbImage;var disabled=_props.disabled;var other=_objectWithoutProperties(_props,['minimumTrackTintColor','maximumTrackTintColor','styles','style','trackStyle','thumbStyle','thumbTintColor','thumbImage','disabled']);\n\tvar mainStyles=styles||defaultStyles;\n\tvar trackHeight=trackStyle&&trackStyle.height||defaultStyles.track.height;\n\tvar thumbHeight=thumbStyle&&thumbStyle.height||defaultStyles.thumb.height;\n\tvar minTrackWidth=this._getMinTrackWidth();\n\tvar minimumTrackStyle={\n\twidth:minTrackWidth,\n\tmarginTop:-trackHeight,\n\tbackgroundColor:minimumTrackTintColor};\n\t\n\treturn(\n\t_react2.default.createElement(_ReactView2.default,{style:[mainStyles.container,style]},\n\t_react2.default.createElement(_ReactView2.default,{ref:'totalTrack',\n\tstyle:[\n\t{backgroundColor:maximumTrackTintColor},\n\tmainStyles.track,trackStyle,\n\tdisabled&&{backgroundColor:mainStyles.disabled.backgroundColor}]}),\n\t\n\t_react2.default.createElement(_ReactView2.default,{ref:'minTrack',style:[mainStyles.track,trackStyle,minimumTrackStyle]}),\n\t\n\tthumbImage&&thumbImage.uri&&\n\t_react2.default.createElement(_ReactImage2.default,_extends({ref:'thumb',source:thumbImage,style:[\n\t{width:mainStyles.thumb.width,height:mainStyles.thumb.height},\n\tthumbStyle,{left:minTrackWidth,position:'relative',display:'block'},\n\t{marginLeft:-thumbHeight/2,marginTop:-(thumbHeight+trackHeight)/2}]},\n\t\n\tthis._panResponder.panHandlers))||\n\t_react2.default.createElement(_ReactView2.default,_extends({ref:'thumb',style:[\n\t{backgroundColor:thumbTintColor,left:minTrackWidth},\n\tmainStyles.thumb,thumbStyle,\n\t{marginLeft:-thumbHeight/2,marginTop:-(thumbHeight+trackHeight)/2},\n\tdisabled&&{boxShadow:mainStyles.disabled.boxShadow}]},\n\t\n\tthis._panResponder.panHandlers))));\n\t\n\t\n\t}},{key:'_handleStartShouldSetPanResponder',value:function _handleStartShouldSetPanResponder()\n\t{\n\treturn!this.props.disabled;\n\t}},{key:'_handleMoveShouldSetPanResponder',value:function _handleMoveShouldSetPanResponder()\n\t{\n\treturn false;\n\t}},{key:'_handlePanResponderGrant',value:function _handlePanResponderGrant(\n\te,gestureState){\n\tthis.previousLeft=this._getWidth('minTrack');\n\tthis.previousValue=this.state.value;\n\tthis._fireProcessEvent('onSlidingStart');\n\t}},{key:'_handlePanResponderMove',value:function _handlePanResponderMove(\n\te,gestureState){\n\tthis.setState({value:this._getValue(gestureState)});\n\tthis._fireProcessEvent('onValueChange');\n\t}},{key:'_handlePanResponderEnd',value:function _handlePanResponderEnd(\n\te,gestureState){\n\tthis.setState({value:this._getValue(gestureState)});\n\tthis._fireProcessEvent('onSlidingComplete');\n\t}},{key:'_fireProcessEvent',value:function _fireProcessEvent(\n\tevent){\n\tif(this.props[event]){\n\tthis.props[event](this.state.value);\n\t}\n\t}},{key:'_getValue',value:function _getValue(\n\tgestureState){var _props2=\n\tthis.props;var step=_props2.step;var maximumValue=_props2.maximumValue;var minimumValue=_props2.minimumValue;\n\tvar totalWidth=this._getWidth('totalTrack');\n\tvar thumbLeft=Math.min(totalWidth,\n\tMath.max(0,this.previousLeft+gestureState.dx)),\n\tratio=thumbLeft/totalWidth,\n\tnewValue=ratio*(maximumValue-minimumValue)+minimumValue;\n\tif(step>0){\n\treturn Math.round(newValue/step)*step;\n\t}else{\n\treturn newValue;\n\t}\n\t}},{key:'_getWidth',value:function _getWidth(\n\tref){\n\tif(this.refs[ref]){\n\tvar node=_reactDom2.default.findDOMNode(this.refs[ref]),\n\trect=node.getBoundingClientRect();\n\treturn rect.width;\n\t}\n\t}},{key:'_getMinTrackWidth',value:function _getMinTrackWidth()\n\t{\n\tvar value=this.state.value;\n\treturn 100*(value-this.props.minimumValue)/(this.props.maximumValue-this.props.minimumValue)+'%';\n\t}}]);return Slider;}(_react.Component);\n\t\n\t\n\tSlider.propTypes={\n\t\n\t\n\t\n\t\n\tstyle:_ReactView2.default.propTypes.style,\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\tvalue:_react.PropTypes.number,\n\t\n\t\n\t\n\t\n\t\n\tstep:_react.PropTypes.number,\n\t\n\t\n\t\n\tminimumValue:_react.PropTypes.number,\n\t\n\t\n\t\n\tmaximumValue:_react.PropTypes.number,\n\t\n\t\n\t\n\t\n\tminimumTrackTintColor:_react.PropTypes.string,\n\t\n\t\n\t\n\t\n\tmaximumTrackTintColor:_react.PropTypes.string,\n\t\n\t\n\t\n\t\n\tdisabled:_react.PropTypes.bool,\n\t\n\t\n\t\n\ttrackImage:_react.PropTypes.any,\n\t\n\t\n\t\n\tthumbImage:_react.PropTypes.any,\n\t\n\t\n\t\n\tonValueChange:_react.PropTypes.func,\n\t\n\t\n\t\n\t\n\tonSlidingComplete:_react.PropTypes.func};\n\t\n\t\n\tSlider.defaultProps={\n\tvalue:0,\n\tstep:0,\n\tminimumValue:0,\n\tmaximumValue:1,\n\tminimumTrackTintColor:'#0f85fb',\n\tmaximumTrackTintColor:'#b3b3b3',\n\tthumbTintColor:'#fff',\n\tdisabled:false,\n\tonValueChange:noop,\n\tonSlidingComplete:noop};\n\t\n\t\n\tvar defaultStyles=_ReactStyleSheet2.default.create({\n\tcontainer:{\n\theight:40,\n\tjustifyContent:'center',\n\tposition:'relative'},\n\t\n\ttrack:{\n\theight:TRACK_SIZE,\n\tborderRadius:TRACK_SIZE/2},\n\t\n\tthumb:{\n\twidth:THUMB_SIZE,\n\theight:THUMB_SIZE,\n\tborderRadius:THUMB_SIZE/2,\n\tboxShadow:'2px 3px 10px rgba(0,0,0,0.75)'},\n\t\n\tdisabled:{\n\tbackgroundColor:'#dadada',\n\tboxShadow:'2px 3px 10px rgba(0,0,0,0.25)'}});\n\t\n\t\n\t\n\tSlider.isReactNativeComponent=true;exports.default=\n\t\n\tSlider;\n\n/***/ },\n/* 417 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t'use strict';Object.defineProperty(exports,\"__esModule\",{value:true});var _extends=Object.assign||function(target){for(var i=1;ithreshold){\n\tif(dx>0){\n\tselectedPage-=1;\n\t}else{\n\tselectedPage+=1;\n\t}\n\t}\n\t\n\tthis.setPage(selectedPage);\n\t}},{key:'setPage',value:function setPage(\n\t\n\tindex){var _this3=this;\n\tif(index<0){\n\tindex=0;\n\t}else if(index>=this.state.pageCount){\n\tindex=this.state.pageCount-1;\n\t}\n\t\n\tthis._scrolling=true;\n\t\n\t_ReactAnimated2.default.spring(this.state.offsetLeft,{\n\ttoValue:index,\n\tbounciness:0,\n\trestSpeedThreshold:1}).\n\tstart(function(){\n\t\n\t_this3._onPageScroll({\n\tnativeEvent:{\n\tposition:index,\n\toffset:0}});\n\t\n\t\n\t\n\t_this3._scrolling=false;\n\t\n\t_this3.setState({\n\tselectedPage:index},\n\tfunction(){\n\t_this3.props.onPageSelected&&_this3.props.onPageSelected({nativeEvent:{position:index}});\n\t});\n\t});\n\t}}]);return ViewPager;}(_react2.default.Component);ViewPager.propTypes={initialPage:_react.PropTypes.number,onPageScroll:_react.PropTypes.func,onPageSelected:_react.PropTypes.func,keyboardDismissMode:_react.PropTypes.oneOf(['none','on-drag'])};ViewPager.defaultProps={initialPage:0};\n\t\n\t;\n\t\n\t_reactMixin2.default.onClass(ViewPager,_NativeMethodsMixin.Mixin);\n\t(0,_autobindDecorator2.default)(ViewPager);\n\t\n\tViewPager.isReactNativeComponent=true;exports.default=\n\t\n\tViewPager;\n\n/***/ },\n/* 431 */\n/***/ function(module, exports) {\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t'use strict';\n\t\n\tfunction dismissKeyboard(){\n\tdocument.activeElement.blur();\n\t}\n\t\n\tmodule.exports=dismissKeyboard;\n\n/***/ },\n/* 432 */\n/***/ function(module, exports) {\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t'use strict';Object.defineProperty(exports,\"__esModule\",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i capacity) {\n\t // Manually shift all values starting at the index back to the\n\t // beginning of the queue.\n\t for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) {\n\t queue[scan] = queue[scan + index];\n\t }\n\t queue.length -= index;\n\t index = 0;\n\t }\n\t }\n\t queue.length = 0;\n\t index = 0;\n\t flushing = false;\n\t}\n\t\n\t// `requestFlush` is implemented using a strategy based on data collected from\n\t// every available SauceLabs Selenium web driver worker at time of writing.\n\t// https://docs.google.com/spreadsheets/d/1mG-5UYGup5qxGdEMWkhP6BWCz053NUb2E1QoUTU16uA/edit#gid=783724593\n\t\n\t// Safari 6 and 6.1 for desktop, iPad, and iPhone are the only browsers that\n\t// have WebKitMutationObserver but not un-prefixed MutationObserver.\n\t// Must use `global` or `self` instead of `window` to work in both frames and web\n\t// workers. `global` is a provision of Browserify, Mr, Mrs, or Mop.\n\t\n\t/* globals self */\n\tvar scope = typeof global !== \"undefined\" ? global : self;\n\tvar BrowserMutationObserver = scope.MutationObserver || scope.WebKitMutationObserver;\n\t\n\t// MutationObservers are desirable because they have high priority and work\n\t// reliably everywhere they are implemented.\n\t// They are implemented in all modern browsers.\n\t//\n\t// - Android 4-4.3\n\t// - Chrome 26-34\n\t// - Firefox 14-29\n\t// - Internet Explorer 11\n\t// - iPad Safari 6-7.1\n\t// - iPhone Safari 7-7.1\n\t// - Safari 6-7\n\tif (typeof BrowserMutationObserver === \"function\") {\n\t requestFlush = makeRequestCallFromMutationObserver(flush);\n\t\n\t// MessageChannels are desirable because they give direct access to the HTML\n\t// task queue, are implemented in Internet Explorer 10, Safari 5.0-1, and Opera\n\t// 11-12, and in web workers in many engines.\n\t// Although message channels yield to any queued rendering and IO tasks, they\n\t// would be better than imposing the 4ms delay of timers.\n\t// However, they do not work reliably in Internet Explorer or Safari.\n\t\n\t// Internet Explorer 10 is the only browser that has setImmediate but does\n\t// not have MutationObservers.\n\t// Although setImmediate yields to the browser's renderer, it would be\n\t// preferrable to falling back to setTimeout since it does not have\n\t// the minimum 4ms penalty.\n\t// Unfortunately there appears to be a bug in Internet Explorer 10 Mobile (and\n\t// Desktop to a lesser extent) that renders both setImmediate and\n\t// MessageChannel useless for the purposes of ASAP.\n\t// https://github.com/kriskowal/q/issues/396\n\t\n\t// Timers are implemented universally.\n\t// We fall back to timers in workers in most engines, and in foreground\n\t// contexts in the following browsers.\n\t// However, note that even this simple case requires nuances to operate in a\n\t// broad spectrum of browsers.\n\t//\n\t// - Firefox 3-13\n\t// - Internet Explorer 6-9\n\t// - iPad Safari 4.3\n\t// - Lynx 2.8.7\n\t} else {\n\t requestFlush = makeRequestCallFromTimer(flush);\n\t}\n\t\n\t// `requestFlush` requests that the high priority event queue be flushed as\n\t// soon as possible.\n\t// This is useful to prevent an error thrown in a task from stalling the event\n\t// queue if the exception handled by Node.js’s\n\t// `process.on(\"uncaughtException\")` or by a domain.\n\trawAsap.requestFlush = requestFlush;\n\t\n\t// To request a high priority event, we induce a mutation observer by toggling\n\t// the text of a text node between \"1\" and \"-1\".\n\tfunction makeRequestCallFromMutationObserver(callback) {\n\t var toggle = 1;\n\t var observer = new BrowserMutationObserver(callback);\n\t var node = document.createTextNode(\"\");\n\t observer.observe(node, {characterData: true});\n\t return function requestCall() {\n\t toggle = -toggle;\n\t node.data = toggle;\n\t };\n\t}\n\t\n\t// The message channel technique was discovered by Malte Ubl and was the\n\t// original foundation for this library.\n\t// http://www.nonblocking.io/2011/06/windownexttick.html\n\t\n\t// Safari 6.0.5 (at least) intermittently fails to create message ports on a\n\t// page's first load. Thankfully, this version of Safari supports\n\t// MutationObservers, so we don't need to fall back in that case.\n\t\n\t// function makeRequestCallFromMessageChannel(callback) {\n\t// var channel = new MessageChannel();\n\t// channel.port1.onmessage = callback;\n\t// return function requestCall() {\n\t// channel.port2.postMessage(0);\n\t// };\n\t// }\n\t\n\t// For reasons explained above, we are also unable to use `setImmediate`\n\t// under any circumstances.\n\t// Even if we were, there is another bug in Internet Explorer 10.\n\t// It is not sufficient to assign `setImmediate` to `requestFlush` because\n\t// `setImmediate` must be called *by name* and therefore must be wrapped in a\n\t// closure.\n\t// Never forget.\n\t\n\t// function makeRequestCallFromSetImmediate(callback) {\n\t// return function requestCall() {\n\t// setImmediate(callback);\n\t// };\n\t// }\n\t\n\t// Safari 6.0 has a problem where timers will get lost while the user is\n\t// scrolling. This problem does not impact ASAP because Safari 6.0 supports\n\t// mutation observers, so that implementation is used instead.\n\t// However, if we ever elect to use timers in Safari, the prevalent work-around\n\t// is to add a scroll event listener that calls for a flush.\n\t\n\t// `setTimeout` does not call the passed callback if the delay is less than\n\t// approximately 7 in web workers in Firefox 8 through 18, and sometimes not\n\t// even then.\n\t\n\tfunction makeRequestCallFromTimer(callback) {\n\t return function requestCall() {\n\t // We dispatch a timeout with a specified delay of 0 for engines that\n\t // can reliably accommodate that request. This will usually be snapped\n\t // to a 4 milisecond delay, but once we're flushing, there's no delay\n\t // between events.\n\t var timeoutHandle = setTimeout(handleTimer, 0);\n\t // However, since this timer gets frequently dropped in Firefox\n\t // workers, we enlist an interval handle that will try to fire\n\t // an event 20 times per second until it succeeds.\n\t var intervalHandle = setInterval(handleTimer, 50);\n\t\n\t function handleTimer() {\n\t // Whichever timer succeeds will cancel both timers and\n\t // execute the callback.\n\t clearTimeout(timeoutHandle);\n\t clearInterval(intervalHandle);\n\t callback();\n\t }\n\t };\n\t}\n\t\n\t// This is for `asap.js` only.\n\t// Its name will be periodically randomized to break any code that depends on\n\t// its existence.\n\trawAsap.makeRequestCallFromTimer = makeRequestCallFromTimer;\n\t\n\t// ASAP was originally a nextTick shim included in Q. This was factored out\n\t// into this ASAP package. It was later adapted to RSVP which made further\n\t// amendments. These decisions, particularly to marginalize MessageChannel and\n\t// to capture the MutationObserver implementation in a closure, were integrated\n\t// back into ASAP proper.\n\t// https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 440 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar Promise = __webpack_require__(438);\n\t\n\tmodule.exports = Promise;\n\tPromise.prototype.done = function (onFulfilled, onRejected) {\n\t var self = arguments.length ? this.then.apply(this, arguments) : this;\n\t self.then(null, function (err) {\n\t setTimeout(function () {\n\t throw err;\n\t }, 0);\n\t });\n\t};\n\n\n/***/ },\n/* 441 */\n/***/ function(module, exports) {\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t'use strict';\n\t\n\tmodule.exports={\n\tcreateInteractionHandle:function createInteractionHandle(){},\n\tclearInteractionHandle:function clearInteractionHandle(){},\n\trunAfterInteractions:function runAfterInteractions(cb){\n\tcb();\n\t}};\n\n/***/ },\n/* 442 */\n/***/ function(module, exports) {\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t'use strict';\n\t\n\tvar LayoutAnimation={\n\tTypes:{},\n\tProperties:{},\n\tconfigureNext:function configureNext(){}};\n\t\n\t\n\tmodule.exports=LayoutAnimation;\n\n/***/ },\n/* 443 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t'use strict';var _createClass=function(){function defineProperties(target,props){for(var i=0;i 1) {\n var childArray = Array(childrenLength);\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 2];\n }\n props.children = childArray;\n }\n\n // Resolve default props\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n if (key || ref) {\n if (typeof props.$$typeof === 'undefined' || props.$$typeof !== REACT_ELEMENT_TYPE) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n }\n }\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n};\n\n/**\n * Return a function that produces ReactElements of a given type.\n * See https://facebook.github.io/react/docs/top-level-api.html#react.createfactory\n */\nReactElement.createFactory = function (type) {\n var factory = ReactElement.createElement.bind(null, type);\n // Expose the type on the factory and the prototype so that it can be\n // easily accessed on elements. E.g. `.type === Foo`.\n // This should not be named `constructor` since this may not be the function\n // that created the element, and it may not even be a constructor.\n // Legacy hook TODO: Warn if this is accessed\n factory.type = type;\n return factory;\n};\n\nReactElement.cloneAndReplaceKey = function (oldElement, newKey) {\n var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);\n\n return newElement;\n};\n\n/**\n * Clone and return a new ReactElement using element as the starting point.\n * See https://facebook.github.io/react/docs/top-level-api.html#react.cloneelement\n */\nReactElement.cloneElement = function (element, config, children) {\n var propName;\n\n // Original props are copied\n var props = _assign({}, element.props);\n\n // Reserved names are extracted\n var key = element.key;\n var ref = element.ref;\n // Self is preserved since the owner is preserved.\n var self = element._self;\n // Source is preserved since cloneElement is unlikely to be targeted by a\n // transpiler, and the original source is probably a better indicator of the\n // true owner.\n var source = element._source;\n\n // Owner will be preserved, unless ref is overridden\n var owner = element._owner;\n\n if (config != null) {\n if (hasValidRef(config)) {\n // Silently steal the ref from the parent.\n ref = config.ref;\n owner = ReactCurrentOwner.current;\n }\n if (hasValidKey(config)) {\n key = '' + config.key;\n }\n\n // Remaining properties override existing props\n var defaultProps;\n if (element.type && element.type.defaultProps) {\n defaultProps = element.type.defaultProps;\n }\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n if (config[propName] === undefined && defaultProps !== undefined) {\n // Resolve default props\n props[propName] = defaultProps[propName];\n } else {\n props[propName] = config[propName];\n }\n }\n }\n }\n\n // Children can be more than one argument, and those are transferred onto\n // the newly allocated props object.\n var childrenLength = arguments.length - 2;\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 2];\n }\n props.children = childArray;\n }\n\n return ReactElement(element.type, key, ref, self, source, owner, props);\n};\n\n/**\n * Verifies the object is a ReactElement.\n * See https://facebook.github.io/react/docs/top-level-api.html#react.isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a valid component.\n * @final\n */\nReactElement.isValidElement = function (object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n};\n\nReactElement.REACT_ELEMENT_TYPE = REACT_ELEMENT_TYPE;\n\nmodule.exports = ReactElement;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactElement.js\n ** module id = 9\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactCurrentOwner\n */\n\n'use strict';\n\n/**\n * Keeps track of the current owner.\n *\n * The current owner is the component who should own any components that are\n * currently being constructed.\n */\n\nvar ReactCurrentOwner = {\n\n /**\n * @internal\n * @type {ReactComponent}\n */\n current: null\n\n};\n\nmodule.exports = ReactCurrentOwner;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactCurrentOwner.js\n ** module id = 10\n ** module chunks = 2\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar emptyFunction = require('./emptyFunction');\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = emptyFunction;\n\nif (process.env.NODE_ENV !== 'production') {\n (function () {\n var printWarning = function printWarning(format) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n\n warning = function warning(condition, format) {\n if (format === undefined) {\n throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n }\n\n if (format.indexOf('Failed Composite propType: ') === 0) {\n return; // Ignore CompositeComponent proptype check.\n }\n\n if (!condition) {\n for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n args[_key2 - 2] = arguments[_key2];\n }\n\n printWarning.apply(undefined, [format].concat(args));\n }\n };\n })();\n}\n\nmodule.exports = warning;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/warning.js\n ** module id = 11\n ** module chunks = 2\n **/","\"use strict\";\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * \n */\n\nfunction makeEmptyFunction(arg) {\n return function () {\n return arg;\n };\n}\n\n/**\n * This function accepts and discards inputs; it has no side effects. This is\n * primarily useful idiomatically for overridable function endpoints which\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n */\nvar emptyFunction = function emptyFunction() {};\n\nemptyFunction.thatReturns = makeEmptyFunction;\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\nemptyFunction.thatReturnsThis = function () {\n return this;\n};\nemptyFunction.thatReturnsArgument = function (arg) {\n return arg;\n};\n\nmodule.exports = emptyFunction;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/emptyFunction.js\n ** module id = 12\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule canDefineProperty\n */\n\n'use strict';\n\nvar canDefineProperty = false;\nif (process.env.NODE_ENV !== 'production') {\n try {\n Object.defineProperty({}, 'x', { get: function () {} });\n canDefineProperty = true;\n } catch (x) {\n // IE will fail on defineProperty\n }\n}\n\nmodule.exports = canDefineProperty;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/canDefineProperty.js\n ** module id = 13\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule traverseAllChildren\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar ReactCurrentOwner = require('./ReactCurrentOwner');\nvar ReactElement = require('./ReactElement');\n\nvar getIteratorFn = require('./getIteratorFn');\nvar invariant = require('fbjs/lib/invariant');\nvar KeyEscapeUtils = require('./KeyEscapeUtils');\nvar warning = require('fbjs/lib/warning');\n\nvar SEPARATOR = '.';\nvar SUBSEPARATOR = ':';\n\n/**\n * TODO: Test that a single child and an array with one item have the same key\n * pattern.\n */\n\nvar didWarnAboutMaps = false;\n\n/**\n * Generate a key string that identifies a component within a set.\n *\n * @param {*} component A component that could contain a manual key.\n * @param {number} index Index that is used if a manual key is not provided.\n * @return {string}\n */\nfunction getComponentKey(component, index) {\n // Do some typechecking here since we call this blindly. We want to ensure\n // that we don't block potential future ES APIs.\n if (component && typeof component === 'object' && component.key != null) {\n // Explicit key\n return KeyEscapeUtils.escape(component.key);\n }\n // Implicit key determined by the index in the set\n return index.toString(36);\n}\n\n/**\n * @param {?*} children Children tree container.\n * @param {!string} nameSoFar Name of the key path so far.\n * @param {!function} callback Callback to invoke with each child found.\n * @param {?*} traverseContext Used to pass information throughout the traversal\n * process.\n * @return {!number} The number of children in this subtree.\n */\nfunction traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {\n var type = typeof children;\n\n if (type === 'undefined' || type === 'boolean') {\n // All of the above are perceived as null.\n children = null;\n }\n\n if (children === null || type === 'string' || type === 'number' || ReactElement.isValidElement(children)) {\n callback(traverseContext, children,\n // If it's the only child, treat the name as if it was wrapped in an array\n // so that it's consistent if the number of children grows.\n nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);\n return 1;\n }\n\n var child;\n var nextName;\n var subtreeCount = 0; // Count of children found in the current subtree.\n var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;\n\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n nextName = nextNamePrefix + getComponentKey(child, i);\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n }\n } else {\n var iteratorFn = getIteratorFn(children);\n if (iteratorFn) {\n var iterator = iteratorFn.call(children);\n var step;\n if (iteratorFn !== children.entries) {\n var ii = 0;\n while (!(step = iterator.next()).done) {\n child = step.value;\n nextName = nextNamePrefix + getComponentKey(child, ii++);\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n }\n } else {\n if (process.env.NODE_ENV !== 'production') {\n var mapsAsChildrenAddendum = '';\n if (ReactCurrentOwner.current) {\n var mapsAsChildrenOwnerName = ReactCurrentOwner.current.getName();\n if (mapsAsChildrenOwnerName) {\n mapsAsChildrenAddendum = ' Check the render method of `' + mapsAsChildrenOwnerName + '`.';\n }\n }\n process.env.NODE_ENV !== 'production' ? warning(didWarnAboutMaps, 'Using Maps as children is not yet fully supported. It is an ' + 'experimental feature that might be removed. Convert it to a ' + 'sequence / iterable of keyed ReactElements instead.%s', mapsAsChildrenAddendum) : void 0;\n didWarnAboutMaps = true;\n }\n // Iterator will provide entry [k,v] tuples rather than values.\n while (!(step = iterator.next()).done) {\n var entry = step.value;\n if (entry) {\n child = entry[1];\n nextName = nextNamePrefix + KeyEscapeUtils.escape(entry[0]) + SUBSEPARATOR + getComponentKey(child, 0);\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n }\n }\n }\n } else if (type === 'object') {\n var addendum = '';\n if (process.env.NODE_ENV !== 'production') {\n addendum = ' If you meant to render a collection of children, use an array ' + 'instead or wrap the object using createFragment(object) from the ' + 'React add-ons.';\n if (children._isReactElement) {\n addendum = ' It looks like you\\'re using an element created by a different ' + 'version of React. Make sure to use only one copy of React.';\n }\n if (ReactCurrentOwner.current) {\n var name = ReactCurrentOwner.current.getName();\n if (name) {\n addendum += ' Check the render method of `' + name + '`.';\n }\n }\n }\n var childrenString = String(children);\n !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Objects are not valid as a React child (found: %s).%s', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : _prodInvariant('31', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : void 0;\n }\n }\n\n return subtreeCount;\n}\n\n/**\n * Traverses children that are typically specified as `props.children`, but\n * might also be specified through attributes:\n *\n * - `traverseAllChildren(this.props.children, ...)`\n * - `traverseAllChildren(this.props.leftPanelChildren, ...)`\n *\n * The `traverseContext` is an optional argument that is passed through the\n * entire traversal. It can be used to store accumulations or anything else that\n * the callback might find relevant.\n *\n * @param {?*} children Children tree object.\n * @param {!function} callback To invoke upon traversing each child.\n * @param {?*} traverseContext Context for traversal.\n * @return {!number} The number of children in this subtree.\n */\nfunction traverseAllChildren(children, callback, traverseContext) {\n if (children == null) {\n return 0;\n }\n\n return traverseAllChildrenImpl(children, '', callback, traverseContext);\n}\n\nmodule.exports = traverseAllChildren;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/traverseAllChildren.js\n ** module id = 14\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getIteratorFn\n * \n */\n\n'use strict';\n\n/* global Symbol */\n\nvar ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n/**\n * Returns the iterator method function contained on the iterable object.\n *\n * Be sure to invoke the function with the iterable as context:\n *\n * var iteratorFn = getIteratorFn(myIterable);\n * if (iteratorFn) {\n * var iterator = iteratorFn.call(myIterable);\n * ...\n * }\n *\n * @param {?object} maybeIterable\n * @return {?function}\n */\nfunction getIteratorFn(maybeIterable) {\n var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n if (typeof iteratorFn === 'function') {\n return iteratorFn;\n }\n}\n\nmodule.exports = getIteratorFn;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getIteratorFn.js\n ** module id = 15\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule KeyEscapeUtils\n * \n */\n\n'use strict';\n\n/**\n * Escape and wrap key so it is safe to use as a reactid\n *\n * @param {string} key to be escaped.\n * @return {string} the escaped key.\n */\n\nfunction escape(key) {\n var escapeRegex = /[=:]/g;\n var escaperLookup = {\n '=': '=0',\n ':': '=2'\n };\n var escapedString = ('' + key).replace(escapeRegex, function (match) {\n return escaperLookup[match];\n });\n\n return '$' + escapedString;\n}\n\n/**\n * Unescape and unwrap key for human-readable display\n *\n * @param {string} key to unescape.\n * @return {string} the unescaped key.\n */\nfunction unescape(key) {\n var unescapeRegex = /(=0|=2)/g;\n var unescaperLookup = {\n '=0': '=',\n '=2': ':'\n };\n var keySubstring = key[0] === '.' && key[1] === '$' ? key.substring(2) : key.substring(1);\n\n return ('' + keySubstring).replace(unescapeRegex, function (match) {\n return unescaperLookup[match];\n });\n}\n\nvar KeyEscapeUtils = {\n escape: escape,\n unescape: unescape\n};\n\nmodule.exports = KeyEscapeUtils;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/KeyEscapeUtils.js\n ** module id = 16\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactComponent\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar ReactNoopUpdateQueue = require('./ReactNoopUpdateQueue');\n\nvar canDefineProperty = require('./canDefineProperty');\nvar emptyObject = require('fbjs/lib/emptyObject');\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * Base class helpers for the updating state of a component.\n */\nfunction ReactComponent(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n // We initialize the default updater but the real one gets injected by the\n // renderer.\n this.updater = updater || ReactNoopUpdateQueue;\n}\n\nReactComponent.prototype.isReactComponent = {};\n\n/**\n * Sets a subset of the state. Always use this to mutate\n * state. You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * There is no guarantee that calls to `setState` will run synchronously,\n * as they may eventually be batched together. You can provide an optional\n * callback that will be executed when the call to setState is actually\n * completed.\n *\n * When a function is provided to setState, it will be called at some point in\n * the future (not synchronously). It will be called with the up to date\n * component arguments (state, props, context). These values can be different\n * from this.* because your function may be called after receiveProps but before\n * shouldComponentUpdate, and this new state, props, and context will not yet be\n * assigned to this.\n *\n * @param {object|function} partialState Next partial state or function to\n * produce next partial state to be merged with current state.\n * @param {?function} callback Called after state is updated.\n * @final\n * @protected\n */\nReactComponent.prototype.setState = function (partialState, callback) {\n !(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'setState(...): takes an object of state variables to update or a function which returns an object of state variables.') : _prodInvariant('85') : void 0;\n this.updater.enqueueSetState(this, partialState);\n if (callback) {\n this.updater.enqueueCallback(this, callback, 'setState');\n }\n};\n\n/**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {?function} callback Called after update is complete.\n * @final\n * @protected\n */\nReactComponent.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this);\n if (callback) {\n this.updater.enqueueCallback(this, callback, 'forceUpdate');\n }\n};\n\n/**\n * Deprecated APIs. These APIs used to exist on classic React classes but since\n * we would like to deprecate them, we're not going to move them over to this\n * modern base class. Instead, we define a getter that warns if it's accessed.\n */\nif (process.env.NODE_ENV !== 'production') {\n var deprecatedAPIs = {\n isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],\n replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']\n };\n var defineDeprecationWarning = function (methodName, info) {\n if (canDefineProperty) {\n Object.defineProperty(ReactComponent.prototype, methodName, {\n get: function () {\n process.env.NODE_ENV !== 'production' ? warning(false, '%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]) : void 0;\n return undefined;\n }\n });\n }\n };\n for (var fnName in deprecatedAPIs) {\n if (deprecatedAPIs.hasOwnProperty(fnName)) {\n defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n }\n }\n}\n\nmodule.exports = ReactComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactComponent.js\n ** module id = 17\n ** module chunks = 2\n **/","/**\n * Copyright 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactNoopUpdateQueue\n */\n\n'use strict';\n\nvar warning = require('fbjs/lib/warning');\n\nfunction warnNoop(publicInstance, callerName) {\n if (process.env.NODE_ENV !== 'production') {\n var constructor = publicInstance.constructor;\n process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, constructor && (constructor.displayName || constructor.name) || 'ReactClass') : void 0;\n }\n}\n\n/**\n * This is the abstract API for an update queue.\n */\nvar ReactNoopUpdateQueue = {\n\n /**\n * Checks whether or not this composite component is mounted.\n * @param {ReactClass} publicInstance The instance we want to test.\n * @return {boolean} True if mounted, false otherwise.\n * @protected\n * @final\n */\n isMounted: function (publicInstance) {\n return false;\n },\n\n /**\n * Enqueue a callback that will be executed after all the pending updates\n * have processed.\n *\n * @param {ReactClass} publicInstance The instance to use as `this` context.\n * @param {?function} callback Called after state is updated.\n * @internal\n */\n enqueueCallback: function (publicInstance, callback) {},\n\n /**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @internal\n */\n enqueueForceUpdate: function (publicInstance) {\n warnNoop(publicInstance, 'forceUpdate');\n },\n\n /**\n * Replaces all of the state. Always use this or `setState` to mutate state.\n * You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} completeState Next state.\n * @internal\n */\n enqueueReplaceState: function (publicInstance, completeState) {\n warnNoop(publicInstance, 'replaceState');\n },\n\n /**\n * Sets a subset of the state. This only exists because _pendingState is\n * internal. This provides a merging strategy that is not available to deep\n * properties which is confusing. TODO: Expose pendingState or don't use it\n * during the merge.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} partialState Next partial state to be merged with state.\n * @internal\n */\n enqueueSetState: function (publicInstance, partialState) {\n warnNoop(publicInstance, 'setState');\n }\n};\n\nmodule.exports = ReactNoopUpdateQueue;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactNoopUpdateQueue.js\n ** module id = 18\n ** module chunks = 2\n **/","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar emptyObject = {};\n\nif (process.env.NODE_ENV !== 'production') {\n Object.freeze(emptyObject);\n}\n\nmodule.exports = emptyObject;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/emptyObject.js\n ** module id = 19\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPureComponent\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar ReactComponent = require('./ReactComponent');\nvar ReactNoopUpdateQueue = require('./ReactNoopUpdateQueue');\n\nvar emptyObject = require('fbjs/lib/emptyObject');\n\n/**\n * Base class helpers for the updating state of a component.\n */\nfunction ReactPureComponent(props, context, updater) {\n // Duplicated from ReactComponent.\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n // We initialize the default updater but the real one gets injected by the\n // renderer.\n this.updater = updater || ReactNoopUpdateQueue;\n}\n\nfunction ComponentDummy() {}\nComponentDummy.prototype = ReactComponent.prototype;\nReactPureComponent.prototype = new ComponentDummy();\nReactPureComponent.prototype.constructor = ReactPureComponent;\n// Avoid an extra prototype jump for these methods.\n_assign(ReactPureComponent.prototype, ReactComponent.prototype);\nReactPureComponent.prototype.isPureReactComponent = true;\n\nmodule.exports = ReactPureComponent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactPureComponent.js\n ** module id = 20\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactClass\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant'),\n _assign = require('object-assign');\n\nvar ReactComponent = require('./ReactComponent');\nvar ReactElement = require('./ReactElement');\nvar ReactPropTypeLocations = require('./ReactPropTypeLocations');\nvar ReactPropTypeLocationNames = require('./ReactPropTypeLocationNames');\nvar ReactNoopUpdateQueue = require('./ReactNoopUpdateQueue');\n\nvar emptyObject = require('fbjs/lib/emptyObject');\nvar invariant = require('fbjs/lib/invariant');\nvar keyMirror = require('fbjs/lib/keyMirror');\nvar keyOf = require('fbjs/lib/keyOf');\nvar warning = require('fbjs/lib/warning');\n\nvar MIXINS_KEY = keyOf({ mixins: null });\n\n/**\n * Policies that describe methods in `ReactClassInterface`.\n */\nvar SpecPolicy = keyMirror({\n /**\n * These methods may be defined only once by the class specification or mixin.\n */\n DEFINE_ONCE: null,\n /**\n * These methods may be defined by both the class specification and mixins.\n * Subsequent definitions will be chained. These methods must return void.\n */\n DEFINE_MANY: null,\n /**\n * These methods are overriding the base class.\n */\n OVERRIDE_BASE: null,\n /**\n * These methods are similar to DEFINE_MANY, except we assume they return\n * objects. We try to merge the keys of the return values of all the mixed in\n * functions. If there is a key conflict we throw.\n */\n DEFINE_MANY_MERGED: null\n});\n\nvar injectedMixins = [];\n\n/**\n * Composite components are higher-level components that compose other composite\n * or host components.\n *\n * To create a new type of `ReactClass`, pass a specification of\n * your new class to `React.createClass`. The only requirement of your class\n * specification is that you implement a `render` method.\n *\n * var MyComponent = React.createClass({\n * render: function() {\n * return
Hello World
;\n * }\n * });\n *\n * The class specification supports a specific protocol of methods that have\n * special meaning (e.g. `render`). See `ReactClassInterface` for\n * more the comprehensive protocol. Any other properties and methods in the\n * class specification will be available on the prototype.\n *\n * @interface ReactClassInterface\n * @internal\n */\nvar ReactClassInterface = {\n\n /**\n * An array of Mixin objects to include when defining your component.\n *\n * @type {array}\n * @optional\n */\n mixins: SpecPolicy.DEFINE_MANY,\n\n /**\n * An object containing properties and methods that should be defined on\n * the component's constructor instead of its prototype (static methods).\n *\n * @type {object}\n * @optional\n */\n statics: SpecPolicy.DEFINE_MANY,\n\n /**\n * Definition of prop types for this component.\n *\n * @type {object}\n * @optional\n */\n propTypes: SpecPolicy.DEFINE_MANY,\n\n /**\n * Definition of context types for this component.\n *\n * @type {object}\n * @optional\n */\n contextTypes: SpecPolicy.DEFINE_MANY,\n\n /**\n * Definition of context types this component sets for its children.\n *\n * @type {object}\n * @optional\n */\n childContextTypes: SpecPolicy.DEFINE_MANY,\n\n // ==== Definition methods ====\n\n /**\n * Invoked when the component is mounted. Values in the mapping will be set on\n * `this.props` if that prop is not specified (i.e. using an `in` check).\n *\n * This method is invoked before `getInitialState` and therefore cannot rely\n * on `this.state` or use `this.setState`.\n *\n * @return {object}\n * @optional\n */\n getDefaultProps: SpecPolicy.DEFINE_MANY_MERGED,\n\n /**\n * Invoked once before the component is mounted. The return value will be used\n * as the initial value of `this.state`.\n *\n * getInitialState: function() {\n * return {\n * isOn: false,\n * fooBaz: new BazFoo()\n * }\n * }\n *\n * @return {object}\n * @optional\n */\n getInitialState: SpecPolicy.DEFINE_MANY_MERGED,\n\n /**\n * @return {object}\n * @optional\n */\n getChildContext: SpecPolicy.DEFINE_MANY_MERGED,\n\n /**\n * Uses props from `this.props` and state from `this.state` to render the\n * structure of the component.\n *\n * No guarantees are made about when or how often this method is invoked, so\n * it must not have side effects.\n *\n * render: function() {\n * var name = this.props.name;\n * return
Hello, {name}!
;\n * }\n *\n * @return {ReactComponent}\n * @nosideeffects\n * @required\n */\n render: SpecPolicy.DEFINE_ONCE,\n\n // ==== Delegate methods ====\n\n /**\n * Invoked when the component is initially created and about to be mounted.\n * This may have side effects, but any external subscriptions or data created\n * by this method must be cleaned up in `componentWillUnmount`.\n *\n * @optional\n */\n componentWillMount: SpecPolicy.DEFINE_MANY,\n\n /**\n * Invoked when the component has been mounted and has a DOM representation.\n * However, there is no guarantee that the DOM node is in the document.\n *\n * Use this as an opportunity to operate on the DOM when the component has\n * been mounted (initialized and rendered) for the first time.\n *\n * @param {DOMElement} rootNode DOM element representing the component.\n * @optional\n */\n componentDidMount: SpecPolicy.DEFINE_MANY,\n\n /**\n * Invoked before the component receives new props.\n *\n * Use this as an opportunity to react to a prop transition by updating the\n * state using `this.setState`. Current props are accessed via `this.props`.\n *\n * componentWillReceiveProps: function(nextProps, nextContext) {\n * this.setState({\n * likesIncreasing: nextProps.likeCount > this.props.likeCount\n * });\n * }\n *\n * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop\n * transition may cause a state change, but the opposite is not true. If you\n * need it, you are probably looking for `componentWillUpdate`.\n *\n * @param {object} nextProps\n * @optional\n */\n componentWillReceiveProps: SpecPolicy.DEFINE_MANY,\n\n /**\n * Invoked while deciding if the component should be updated as a result of\n * receiving new props, state and/or context.\n *\n * Use this as an opportunity to `return false` when you're certain that the\n * transition to the new props/state/context will not require a component\n * update.\n *\n * shouldComponentUpdate: function(nextProps, nextState, nextContext) {\n * return !equal(nextProps, this.props) ||\n * !equal(nextState, this.state) ||\n * !equal(nextContext, this.context);\n * }\n *\n * @param {object} nextProps\n * @param {?object} nextState\n * @param {?object} nextContext\n * @return {boolean} True if the component should update.\n * @optional\n */\n shouldComponentUpdate: SpecPolicy.DEFINE_ONCE,\n\n /**\n * Invoked when the component is about to update due to a transition from\n * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`\n * and `nextContext`.\n *\n * Use this as an opportunity to perform preparation before an update occurs.\n *\n * NOTE: You **cannot** use `this.setState()` in this method.\n *\n * @param {object} nextProps\n * @param {?object} nextState\n * @param {?object} nextContext\n * @param {ReactReconcileTransaction} transaction\n * @optional\n */\n componentWillUpdate: SpecPolicy.DEFINE_MANY,\n\n /**\n * Invoked when the component's DOM representation has been updated.\n *\n * Use this as an opportunity to operate on the DOM when the component has\n * been updated.\n *\n * @param {object} prevProps\n * @param {?object} prevState\n * @param {?object} prevContext\n * @param {DOMElement} rootNode DOM element representing the component.\n * @optional\n */\n componentDidUpdate: SpecPolicy.DEFINE_MANY,\n\n /**\n * Invoked when the component is about to be removed from its parent and have\n * its DOM representation destroyed.\n *\n * Use this as an opportunity to deallocate any external resources.\n *\n * NOTE: There is no `componentDidUnmount` since your component will have been\n * destroyed by that point.\n *\n * @optional\n */\n componentWillUnmount: SpecPolicy.DEFINE_MANY,\n\n // ==== Advanced methods ====\n\n /**\n * Updates the component's currently mounted DOM representation.\n *\n * By default, this implements React's rendering and reconciliation algorithm.\n * Sophisticated clients may wish to override this.\n *\n * @param {ReactReconcileTransaction} transaction\n * @internal\n * @overridable\n */\n updateComponent: SpecPolicy.OVERRIDE_BASE\n\n};\n\n/**\n * Mapping from class specification keys to special processing functions.\n *\n * Although these are declared like instance properties in the specification\n * when defining classes using `React.createClass`, they are actually static\n * and are accessible on the constructor instead of the prototype. Despite\n * being static, they must be defined outside of the \"statics\" key under\n * which all other static methods are defined.\n */\nvar RESERVED_SPEC_KEYS = {\n displayName: function (Constructor, displayName) {\n Constructor.displayName = displayName;\n },\n mixins: function (Constructor, mixins) {\n if (mixins) {\n for (var i = 0; i < mixins.length; i++) {\n mixSpecIntoComponent(Constructor, mixins[i]);\n }\n }\n },\n childContextTypes: function (Constructor, childContextTypes) {\n if (process.env.NODE_ENV !== 'production') {\n validateTypeDef(Constructor, childContextTypes, ReactPropTypeLocations.childContext);\n }\n Constructor.childContextTypes = _assign({}, Constructor.childContextTypes, childContextTypes);\n },\n contextTypes: function (Constructor, contextTypes) {\n if (process.env.NODE_ENV !== 'production') {\n validateTypeDef(Constructor, contextTypes, ReactPropTypeLocations.context);\n }\n Constructor.contextTypes = _assign({}, Constructor.contextTypes, contextTypes);\n },\n /**\n * Special case getDefaultProps which should move into statics but requires\n * automatic merging.\n */\n getDefaultProps: function (Constructor, getDefaultProps) {\n if (Constructor.getDefaultProps) {\n Constructor.getDefaultProps = createMergedResultFunction(Constructor.getDefaultProps, getDefaultProps);\n } else {\n Constructor.getDefaultProps = getDefaultProps;\n }\n },\n propTypes: function (Constructor, propTypes) {\n if (process.env.NODE_ENV !== 'production') {\n validateTypeDef(Constructor, propTypes, ReactPropTypeLocations.prop);\n }\n Constructor.propTypes = _assign({}, Constructor.propTypes, propTypes);\n },\n statics: function (Constructor, statics) {\n mixStaticSpecIntoComponent(Constructor, statics);\n },\n autobind: function () {} };\n\n// noop\nfunction validateTypeDef(Constructor, typeDef, location) {\n for (var propName in typeDef) {\n if (typeDef.hasOwnProperty(propName)) {\n // use a warning instead of an invariant so components\n // don't show up in prod but only in __DEV__\n process.env.NODE_ENV !== 'production' ? warning(typeof typeDef[propName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', Constructor.displayName || 'ReactClass', ReactPropTypeLocationNames[location], propName) : void 0;\n }\n }\n}\n\nfunction validateMethodOverride(isAlreadyDefined, name) {\n var specPolicy = ReactClassInterface.hasOwnProperty(name) ? ReactClassInterface[name] : null;\n\n // Disallow overriding of base class methods unless explicitly allowed.\n if (ReactClassMixin.hasOwnProperty(name)) {\n !(specPolicy === SpecPolicy.OVERRIDE_BASE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to override `%s` from your class specification. Ensure that your method names do not overlap with React methods.', name) : _prodInvariant('73', name) : void 0;\n }\n\n // Disallow defining methods more than once unless explicitly allowed.\n if (isAlreadyDefined) {\n !(specPolicy === SpecPolicy.DEFINE_MANY || specPolicy === SpecPolicy.DEFINE_MANY_MERGED) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.', name) : _prodInvariant('74', name) : void 0;\n }\n}\n\n/**\n * Mixin helper which handles policy validation and reserved\n * specification keys when building React classes.\n */\nfunction mixSpecIntoComponent(Constructor, spec) {\n if (!spec) {\n if (process.env.NODE_ENV !== 'production') {\n var typeofSpec = typeof spec;\n var isMixinValid = typeofSpec === 'object' && spec !== null;\n\n process.env.NODE_ENV !== 'production' ? warning(isMixinValid, '%s: You\\'re attempting to include a mixin that is either null ' + 'or not an object. Check the mixins included by the component, ' + 'as well as any mixins they include themselves. ' + 'Expected object but got %s.', Constructor.displayName || 'ReactClass', spec === null ? null : typeofSpec) : void 0;\n }\n\n return;\n }\n\n !(typeof spec !== 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You\\'re attempting to use a component class or function as a mixin. Instead, just use a regular object.') : _prodInvariant('75') : void 0;\n !!ReactElement.isValidElement(spec) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You\\'re attempting to use a component as a mixin. Instead, just use a regular object.') : _prodInvariant('76') : void 0;\n\n var proto = Constructor.prototype;\n var autoBindPairs = proto.__reactAutoBindPairs;\n\n // By handling mixins before any other properties, we ensure the same\n // chaining order is applied to methods with DEFINE_MANY policy, whether\n // mixins are listed before or after these methods in the spec.\n if (spec.hasOwnProperty(MIXINS_KEY)) {\n RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins);\n }\n\n for (var name in spec) {\n if (!spec.hasOwnProperty(name)) {\n continue;\n }\n\n if (name === MIXINS_KEY) {\n // We have already handled mixins in a special case above.\n continue;\n }\n\n var property = spec[name];\n var isAlreadyDefined = proto.hasOwnProperty(name);\n validateMethodOverride(isAlreadyDefined, name);\n\n if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) {\n RESERVED_SPEC_KEYS[name](Constructor, property);\n } else {\n // Setup methods on prototype:\n // The following member methods should not be automatically bound:\n // 1. Expected ReactClass methods (in the \"interface\").\n // 2. Overridden methods (that were mixed in).\n var isReactClassMethod = ReactClassInterface.hasOwnProperty(name);\n var isFunction = typeof property === 'function';\n var shouldAutoBind = isFunction && !isReactClassMethod && !isAlreadyDefined && spec.autobind !== false;\n\n if (shouldAutoBind) {\n autoBindPairs.push(name, property);\n proto[name] = property;\n } else {\n if (isAlreadyDefined) {\n var specPolicy = ReactClassInterface[name];\n\n // These cases should already be caught by validateMethodOverride.\n !(isReactClassMethod && (specPolicy === SpecPolicy.DEFINE_MANY_MERGED || specPolicy === SpecPolicy.DEFINE_MANY)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: Unexpected spec policy %s for key %s when mixing in component specs.', specPolicy, name) : _prodInvariant('77', specPolicy, name) : void 0;\n\n // For methods which are defined more than once, call the existing\n // methods before calling the new property, merging if appropriate.\n if (specPolicy === SpecPolicy.DEFINE_MANY_MERGED) {\n proto[name] = createMergedResultFunction(proto[name], property);\n } else if (specPolicy === SpecPolicy.DEFINE_MANY) {\n proto[name] = createChainedFunction(proto[name], property);\n }\n } else {\n proto[name] = property;\n if (process.env.NODE_ENV !== 'production') {\n // Add verbose displayName to the function, which helps when looking\n // at profiling tools.\n if (typeof property === 'function' && spec.displayName) {\n proto[name].displayName = spec.displayName + '_' + name;\n }\n }\n }\n }\n }\n }\n}\n\nfunction mixStaticSpecIntoComponent(Constructor, statics) {\n if (!statics) {\n return;\n }\n for (var name in statics) {\n var property = statics[name];\n if (!statics.hasOwnProperty(name)) {\n continue;\n }\n\n var isReserved = name in RESERVED_SPEC_KEYS;\n !!isReserved ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You are attempting to define a reserved property, `%s`, that shouldn\\'t be on the \"statics\" key. Define it as an instance property instead; it will still be accessible on the constructor.', name) : _prodInvariant('78', name) : void 0;\n\n var isInherited = name in Constructor;\n !!isInherited ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.', name) : _prodInvariant('79', name) : void 0;\n Constructor[name] = property;\n }\n}\n\n/**\n * Merge two objects, but throw if both contain the same key.\n *\n * @param {object} one The first object, which is mutated.\n * @param {object} two The second object\n * @return {object} one after it has been mutated to contain everything in two.\n */\nfunction mergeIntoWithNoDuplicateKeys(one, two) {\n !(one && two && typeof one === 'object' && typeof two === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.') : _prodInvariant('80') : void 0;\n\n for (var key in two) {\n if (two.hasOwnProperty(key)) {\n !(one[key] === undefined) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Tried to merge two objects with the same key: `%s`. This conflict may be due to a mixin; in particular, this may be caused by two getInitialState() or getDefaultProps() methods returning objects with clashing keys.', key) : _prodInvariant('81', key) : void 0;\n one[key] = two[key];\n }\n }\n return one;\n}\n\n/**\n * Creates a function that invokes two functions and merges their return values.\n *\n * @param {function} one Function to invoke first.\n * @param {function} two Function to invoke second.\n * @return {function} Function that invokes the two argument functions.\n * @private\n */\nfunction createMergedResultFunction(one, two) {\n return function mergedResult() {\n var a = one.apply(this, arguments);\n var b = two.apply(this, arguments);\n if (a == null) {\n return b;\n } else if (b == null) {\n return a;\n }\n var c = {};\n mergeIntoWithNoDuplicateKeys(c, a);\n mergeIntoWithNoDuplicateKeys(c, b);\n return c;\n };\n}\n\n/**\n * Creates a function that invokes two functions and ignores their return vales.\n *\n * @param {function} one Function to invoke first.\n * @param {function} two Function to invoke second.\n * @return {function} Function that invokes the two argument functions.\n * @private\n */\nfunction createChainedFunction(one, two) {\n return function chainedFunction() {\n one.apply(this, arguments);\n two.apply(this, arguments);\n };\n}\n\n/**\n * Binds a method to the component.\n *\n * @param {object} component Component whose method is going to be bound.\n * @param {function} method Method to be bound.\n * @return {function} The bound method.\n */\nfunction bindAutoBindMethod(component, method) {\n var boundMethod = method.bind(component);\n if (process.env.NODE_ENV !== 'production') {\n boundMethod.__reactBoundContext = component;\n boundMethod.__reactBoundMethod = method;\n boundMethod.__reactBoundArguments = null;\n var componentName = component.constructor.displayName;\n var _bind = boundMethod.bind;\n boundMethod.bind = function (newThis) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n // User is trying to bind() an autobound method; we effectively will\n // ignore the value of \"this\" that the user is trying to use, so\n // let's warn.\n if (newThis !== component && newThis !== null) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): React component methods may only be bound to the ' + 'component instance. See %s', componentName) : void 0;\n } else if (!args.length) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): You are binding a component method to the component. ' + 'React does this for you automatically in a high-performance ' + 'way, so you can safely remove this call. See %s', componentName) : void 0;\n return boundMethod;\n }\n var reboundMethod = _bind.apply(boundMethod, arguments);\n reboundMethod.__reactBoundContext = component;\n reboundMethod.__reactBoundMethod = method;\n reboundMethod.__reactBoundArguments = args;\n return reboundMethod;\n };\n }\n return boundMethod;\n}\n\n/**\n * Binds all auto-bound methods in a component.\n *\n * @param {object} component Component whose method is going to be bound.\n */\nfunction bindAutoBindMethods(component) {\n var pairs = component.__reactAutoBindPairs;\n for (var i = 0; i < pairs.length; i += 2) {\n var autoBindKey = pairs[i];\n var method = pairs[i + 1];\n component[autoBindKey] = bindAutoBindMethod(component, method);\n }\n}\n\n/**\n * Add more to the ReactClass base class. These are all legacy features and\n * therefore not already part of the modern ReactComponent.\n */\nvar ReactClassMixin = {\n\n /**\n * TODO: This will be deprecated because state should always keep a consistent\n * type signature and the only use case for this, is to avoid that.\n */\n replaceState: function (newState, callback) {\n this.updater.enqueueReplaceState(this, newState);\n if (callback) {\n this.updater.enqueueCallback(this, callback, 'replaceState');\n }\n },\n\n /**\n * Checks whether or not this composite component is mounted.\n * @return {boolean} True if mounted, false otherwise.\n * @protected\n * @final\n */\n isMounted: function () {\n return this.updater.isMounted(this);\n }\n};\n\nvar ReactClassComponent = function () {};\n_assign(ReactClassComponent.prototype, ReactComponent.prototype, ReactClassMixin);\n\n/**\n * Module for creating composite components.\n *\n * @class ReactClass\n */\nvar ReactClass = {\n\n /**\n * Creates a composite component class given a class specification.\n * See https://facebook.github.io/react/docs/top-level-api.html#react.createclass\n *\n * @param {object} spec Class specification (which must define `render`).\n * @return {function} Component constructor function.\n * @public\n */\n createClass: function (spec) {\n var Constructor = function (props, context, updater) {\n // This constructor gets overridden by mocks. The argument is used\n // by mocks to assert on what gets mounted.\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(this instanceof Constructor, 'Something is calling a React component directly. Use a factory or ' + 'JSX instead. See: https://fb.me/react-legacyfactory') : void 0;\n }\n\n // Wire up auto-binding\n if (this.__reactAutoBindPairs.length) {\n bindAutoBindMethods(this);\n }\n\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n\n this.state = null;\n\n // ReactClasses doesn't have constructors. Instead, they use the\n // getInitialState and componentWillMount methods for initialization.\n\n var initialState = this.getInitialState ? this.getInitialState() : null;\n if (process.env.NODE_ENV !== 'production') {\n // We allow auto-mocks to proceed as if they're returning null.\n if (initialState === undefined && this.getInitialState._isMockFunction) {\n // This is probably bad practice. Consider warning here and\n // deprecating this convenience.\n initialState = null;\n }\n }\n !(typeof initialState === 'object' && !Array.isArray(initialState)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getInitialState(): must return an object or null', Constructor.displayName || 'ReactCompositeComponent') : _prodInvariant('82', Constructor.displayName || 'ReactCompositeComponent') : void 0;\n\n this.state = initialState;\n };\n Constructor.prototype = new ReactClassComponent();\n Constructor.prototype.constructor = Constructor;\n Constructor.prototype.__reactAutoBindPairs = [];\n\n injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor));\n\n mixSpecIntoComponent(Constructor, spec);\n\n // Initialize the defaultProps property after all mixins have been merged.\n if (Constructor.getDefaultProps) {\n Constructor.defaultProps = Constructor.getDefaultProps();\n }\n\n if (process.env.NODE_ENV !== 'production') {\n // This is a tag to indicate that the use of these method names is ok,\n // since it's used with createClass. If it's not, then it's likely a\n // mistake so we'll warn you to use the static property, property\n // initializer or constructor respectively.\n if (Constructor.getDefaultProps) {\n Constructor.getDefaultProps.isReactClassApproved = {};\n }\n if (Constructor.prototype.getInitialState) {\n Constructor.prototype.getInitialState.isReactClassApproved = {};\n }\n }\n\n !Constructor.prototype.render ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createClass(...): Class specification must implement a `render` method.') : _prodInvariant('83') : void 0;\n\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentShouldUpdate, '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', spec.displayName || 'A component') : void 0;\n process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentWillRecieveProps, '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', spec.displayName || 'A component') : void 0;\n }\n\n // Reduce time spent doing lookups by setting these on the prototype.\n for (var methodName in ReactClassInterface) {\n if (!Constructor.prototype[methodName]) {\n Constructor.prototype[methodName] = null;\n }\n }\n\n return Constructor;\n },\n\n injection: {\n injectMixin: function (mixin) {\n injectedMixins.push(mixin);\n }\n }\n\n};\n\nmodule.exports = ReactClass;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactClass.js\n ** module id = 21\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPropTypeLocations\n */\n\n'use strict';\n\nvar keyMirror = require('fbjs/lib/keyMirror');\n\nvar ReactPropTypeLocations = keyMirror({\n prop: null,\n context: null,\n childContext: null\n});\n\nmodule.exports = ReactPropTypeLocations;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactPropTypeLocations.js\n ** module id = 22\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPropTypeLocationNames\n */\n\n'use strict';\n\nvar ReactPropTypeLocationNames = {};\n\nif (process.env.NODE_ENV !== 'production') {\n ReactPropTypeLocationNames = {\n prop: 'prop',\n context: 'context',\n childContext: 'child context'\n };\n}\n\nmodule.exports = ReactPropTypeLocationNames;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactPropTypeLocationNames.js\n ** module id = 24\n ** module chunks = 2\n **/","\"use strict\";\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n/**\n * Allows extraction of a minified key. Let's the build system minify keys\n * without losing the ability to dynamically use key strings as values\n * themselves. Pass in an object with a single key/val pair and it will return\n * you the string key of that single record. Suppose you want to grab the\n * value for a key 'className' inside of an object. Key/val minification may\n * have aliased that key to be 'xa12'. keyOf({className: null}) will return\n * 'xa12' in that case. Resolve keys you want to use once at startup time, then\n * reuse those resolutions.\n */\nvar keyOf = function keyOf(oneKeyObj) {\n var key;\n for (key in oneKeyObj) {\n if (!oneKeyObj.hasOwnProperty(key)) {\n continue;\n }\n return key;\n }\n return null;\n};\n\nmodule.exports = keyOf;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/keyOf.js\n ** module id = 25\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMFactories\n */\n\n'use strict';\n\nvar ReactElement = require('./ReactElement');\n\n/**\n * Create a factory that creates HTML tag elements.\n *\n * @private\n */\nvar createDOMFactory = ReactElement.createFactory;\nif (process.env.NODE_ENV !== 'production') {\n var ReactElementValidator = require('./ReactElementValidator');\n createDOMFactory = ReactElementValidator.createFactory;\n}\n\n/**\n * Creates a mapping from supported HTML tags to `ReactDOMComponent` classes.\n * This is also accessible via `React.DOM`.\n *\n * @public\n */\nvar ReactDOMFactories = {\n a: createDOMFactory('a'),\n abbr: createDOMFactory('abbr'),\n address: createDOMFactory('address'),\n area: createDOMFactory('area'),\n article: createDOMFactory('article'),\n aside: createDOMFactory('aside'),\n audio: createDOMFactory('audio'),\n b: createDOMFactory('b'),\n base: createDOMFactory('base'),\n bdi: createDOMFactory('bdi'),\n bdo: createDOMFactory('bdo'),\n big: createDOMFactory('big'),\n blockquote: createDOMFactory('blockquote'),\n body: createDOMFactory('body'),\n br: createDOMFactory('br'),\n button: createDOMFactory('button'),\n canvas: createDOMFactory('canvas'),\n caption: createDOMFactory('caption'),\n cite: createDOMFactory('cite'),\n code: createDOMFactory('code'),\n col: createDOMFactory('col'),\n colgroup: createDOMFactory('colgroup'),\n data: createDOMFactory('data'),\n datalist: createDOMFactory('datalist'),\n dd: createDOMFactory('dd'),\n del: createDOMFactory('del'),\n details: createDOMFactory('details'),\n dfn: createDOMFactory('dfn'),\n dialog: createDOMFactory('dialog'),\n div: createDOMFactory('div'),\n dl: createDOMFactory('dl'),\n dt: createDOMFactory('dt'),\n em: createDOMFactory('em'),\n embed: createDOMFactory('embed'),\n fieldset: createDOMFactory('fieldset'),\n figcaption: createDOMFactory('figcaption'),\n figure: createDOMFactory('figure'),\n footer: createDOMFactory('footer'),\n form: createDOMFactory('form'),\n h1: createDOMFactory('h1'),\n h2: createDOMFactory('h2'),\n h3: createDOMFactory('h3'),\n h4: createDOMFactory('h4'),\n h5: createDOMFactory('h5'),\n h6: createDOMFactory('h6'),\n head: createDOMFactory('head'),\n header: createDOMFactory('header'),\n hgroup: createDOMFactory('hgroup'),\n hr: createDOMFactory('hr'),\n html: createDOMFactory('html'),\n i: createDOMFactory('i'),\n iframe: createDOMFactory('iframe'),\n img: createDOMFactory('img'),\n input: createDOMFactory('input'),\n ins: createDOMFactory('ins'),\n kbd: createDOMFactory('kbd'),\n keygen: createDOMFactory('keygen'),\n label: createDOMFactory('label'),\n legend: createDOMFactory('legend'),\n li: createDOMFactory('li'),\n link: createDOMFactory('link'),\n main: createDOMFactory('main'),\n map: createDOMFactory('map'),\n mark: createDOMFactory('mark'),\n menu: createDOMFactory('menu'),\n menuitem: createDOMFactory('menuitem'),\n meta: createDOMFactory('meta'),\n meter: createDOMFactory('meter'),\n nav: createDOMFactory('nav'),\n noscript: createDOMFactory('noscript'),\n object: createDOMFactory('object'),\n ol: createDOMFactory('ol'),\n optgroup: createDOMFactory('optgroup'),\n option: createDOMFactory('option'),\n output: createDOMFactory('output'),\n p: createDOMFactory('p'),\n param: createDOMFactory('param'),\n picture: createDOMFactory('picture'),\n pre: createDOMFactory('pre'),\n progress: createDOMFactory('progress'),\n q: createDOMFactory('q'),\n rp: createDOMFactory('rp'),\n rt: createDOMFactory('rt'),\n ruby: createDOMFactory('ruby'),\n s: createDOMFactory('s'),\n samp: createDOMFactory('samp'),\n script: createDOMFactory('script'),\n section: createDOMFactory('section'),\n select: createDOMFactory('select'),\n small: createDOMFactory('small'),\n source: createDOMFactory('source'),\n span: createDOMFactory('span'),\n strong: createDOMFactory('strong'),\n style: createDOMFactory('style'),\n sub: createDOMFactory('sub'),\n summary: createDOMFactory('summary'),\n sup: createDOMFactory('sup'),\n table: createDOMFactory('table'),\n tbody: createDOMFactory('tbody'),\n td: createDOMFactory('td'),\n textarea: createDOMFactory('textarea'),\n tfoot: createDOMFactory('tfoot'),\n th: createDOMFactory('th'),\n thead: createDOMFactory('thead'),\n time: createDOMFactory('time'),\n title: createDOMFactory('title'),\n tr: createDOMFactory('tr'),\n track: createDOMFactory('track'),\n u: createDOMFactory('u'),\n ul: createDOMFactory('ul'),\n 'var': createDOMFactory('var'),\n video: createDOMFactory('video'),\n wbr: createDOMFactory('wbr'),\n\n // SVG\n circle: createDOMFactory('circle'),\n clipPath: createDOMFactory('clipPath'),\n defs: createDOMFactory('defs'),\n ellipse: createDOMFactory('ellipse'),\n g: createDOMFactory('g'),\n image: createDOMFactory('image'),\n line: createDOMFactory('line'),\n linearGradient: createDOMFactory('linearGradient'),\n mask: createDOMFactory('mask'),\n path: createDOMFactory('path'),\n pattern: createDOMFactory('pattern'),\n polygon: createDOMFactory('polygon'),\n polyline: createDOMFactory('polyline'),\n radialGradient: createDOMFactory('radialGradient'),\n rect: createDOMFactory('rect'),\n stop: createDOMFactory('stop'),\n svg: createDOMFactory('svg'),\n text: createDOMFactory('text'),\n tspan: createDOMFactory('tspan')\n};\n\nmodule.exports = ReactDOMFactories;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMFactories.js\n ** module id = 26\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPropTypes\n */\n\n'use strict';\n\nvar ReactElement = require('./ReactElement');\nvar ReactPropTypeLocationNames = require('./ReactPropTypeLocationNames');\nvar ReactPropTypesSecret = require('./ReactPropTypesSecret');\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar getIteratorFn = require('./getIteratorFn');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * Collection of methods that allow declaration and validation of props that are\n * supplied to React components. Example usage:\n *\n * var Props = require('ReactPropTypes');\n * var MyArticle = React.createClass({\n * propTypes: {\n * // An optional string prop named \"description\".\n * description: Props.string,\n *\n * // A required enum prop named \"category\".\n * category: Props.oneOf(['News','Photos']).isRequired,\n *\n * // A prop named \"dialog\" that requires an instance of Dialog.\n * dialog: Props.instanceOf(Dialog).isRequired\n * },\n * render: function() { ... }\n * });\n *\n * A more formal specification of how these methods are used:\n *\n * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n * decl := ReactPropTypes.{type}(.isRequired)?\n *\n * Each and every declaration produces a function with the same signature. This\n * allows the creation of custom validation functions. For example:\n *\n * var MyLink = React.createClass({\n * propTypes: {\n * // An optional string or URI prop named \"href\".\n * href: function(props, propName, componentName) {\n * var propValue = props[propName];\n * if (propValue != null && typeof propValue !== 'string' &&\n * !(propValue instanceof URI)) {\n * return new Error(\n * 'Expected a string or an URI for ' + propName + ' in ' +\n * componentName\n * );\n * }\n * }\n * },\n * render: function() {...}\n * });\n *\n * @internal\n */\n\nvar ANONYMOUS = '<>';\n\nvar ReactPropTypes = {\n array: createPrimitiveTypeChecker('array'),\n bool: createPrimitiveTypeChecker('boolean'),\n func: createPrimitiveTypeChecker('function'),\n number: createPrimitiveTypeChecker('number'),\n object: createPrimitiveTypeChecker('object'),\n string: createPrimitiveTypeChecker('string'),\n symbol: createPrimitiveTypeChecker('symbol'),\n\n any: createAnyTypeChecker(),\n arrayOf: createArrayOfTypeChecker,\n element: createElementTypeChecker(),\n instanceOf: createInstanceTypeChecker,\n node: createNodeChecker(),\n objectOf: createObjectOfTypeChecker,\n oneOf: createEnumTypeChecker,\n oneOfType: createUnionTypeChecker,\n shape: createShapeTypeChecker\n};\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\n/*eslint-disable no-self-compare*/\nfunction is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return x !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n}\n/*eslint-enable no-self-compare*/\n\n/**\n * We use an Error-like object for backward compatibility as people may call\n * PropTypes directly and inspect their output. However we don't use real\n * Errors anymore. We don't inspect their stack anyway, and creating them\n * is prohibitively expensive if they are created too often, such as what\n * happens in oneOfType() for any type before the one that matched.\n */\nfunction PropTypeError(message) {\n this.message = message;\n this.stack = '';\n}\n// Make `instanceof Error` still work for returned errors.\nPropTypeError.prototype = Error.prototype;\n\nfunction createChainableTypeChecker(validate) {\n if (process.env.NODE_ENV !== 'production') {\n var manualPropTypeCallCache = {};\n }\n function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n componentName = componentName || ANONYMOUS;\n propFullName = propFullName || propName;\n if (process.env.NODE_ENV !== 'production') {\n if (secret !== ReactPropTypesSecret && typeof console !== 'undefined') {\n var cacheKey = componentName + ':' + propName;\n if (!manualPropTypeCallCache[cacheKey]) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'You are manually calling a React.PropTypes validation ' + 'function for the `%s` prop on `%s`. This is deprecated ' + 'and will not work in the next major version. You may be ' + 'seeing this warning due to a third-party PropTypes library. ' + 'See https://fb.me/react-warning-dont-call-proptypes for details.', propFullName, componentName) : void 0;\n manualPropTypeCallCache[cacheKey] = true;\n }\n }\n }\n if (props[propName] == null) {\n var locationName = ReactPropTypeLocationNames[location];\n if (isRequired) {\n return new PropTypeError('Required ' + locationName + ' `' + propFullName + '` was not specified in ' + ('`' + componentName + '`.'));\n }\n return null;\n } else {\n return validate(props, propName, componentName, location, propFullName);\n }\n }\n\n var chainedCheckType = checkType.bind(null, false);\n chainedCheckType.isRequired = checkType.bind(null, true);\n\n return chainedCheckType;\n}\n\nfunction createPrimitiveTypeChecker(expectedType) {\n function validate(props, propName, componentName, location, propFullName, secret) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== expectedType) {\n var locationName = ReactPropTypeLocationNames[location];\n // `propValue` being instance of, say, date/regexp, pass the 'object'\n // check, but we can offer a more precise error message here rather than\n // 'of type `object`'.\n var preciseType = getPreciseType(propValue);\n\n return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createAnyTypeChecker() {\n return createChainableTypeChecker(emptyFunction.thatReturns(null));\n}\n\nfunction createArrayOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n }\n var propValue = props[propName];\n if (!Array.isArray(propValue)) {\n var locationName = ReactPropTypeLocationNames[location];\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n }\n for (var i = 0; i < propValue.length; i++) {\n var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createElementTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!ReactElement.isValidElement(propValue)) {\n var locationName = ReactPropTypeLocationNames[location];\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createInstanceTypeChecker(expectedClass) {\n function validate(props, propName, componentName, location, propFullName) {\n if (!(props[propName] instanceof expectedClass)) {\n var locationName = ReactPropTypeLocationNames[location];\n var expectedClassName = expectedClass.name || ANONYMOUS;\n var actualClassName = getClassName(props[propName]);\n return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createEnumTypeChecker(expectedValues) {\n if (!Array.isArray(expectedValues)) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid argument supplied to oneOf, expected an instance of array.') : void 0;\n return emptyFunction.thatReturnsNull;\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n for (var i = 0; i < expectedValues.length; i++) {\n if (is(propValue, expectedValues[i])) {\n return null;\n }\n }\n\n var locationName = ReactPropTypeLocationNames[location];\n var valuesString = JSON.stringify(expectedValues);\n return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createObjectOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n }\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n var locationName = ReactPropTypeLocationNames[location];\n return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n }\n for (var key in propValue) {\n if (propValue.hasOwnProperty(key)) {\n var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createUnionTypeChecker(arrayOfTypeCheckers) {\n if (!Array.isArray(arrayOfTypeCheckers)) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;\n return emptyFunction.thatReturnsNull;\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret) == null) {\n return null;\n }\n }\n\n var locationName = ReactPropTypeLocationNames[location];\n return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createNodeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n if (!isNode(props[propName])) {\n var locationName = ReactPropTypeLocationNames[location];\n return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction createShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n var locationName = ReactPropTypeLocationNames[location];\n return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n for (var key in shapeTypes) {\n var checker = shapeTypes[key];\n if (!checker) {\n continue;\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n}\n\nfunction isNode(propValue) {\n switch (typeof propValue) {\n case 'number':\n case 'string':\n case 'undefined':\n return true;\n case 'boolean':\n return !propValue;\n case 'object':\n if (Array.isArray(propValue)) {\n return propValue.every(isNode);\n }\n if (propValue === null || ReactElement.isValidElement(propValue)) {\n return true;\n }\n\n var iteratorFn = getIteratorFn(propValue);\n if (iteratorFn) {\n var iterator = iteratorFn.call(propValue);\n var step;\n if (iteratorFn !== propValue.entries) {\n while (!(step = iterator.next()).done) {\n if (!isNode(step.value)) {\n return false;\n }\n }\n } else {\n // Iterator will provide entry [k,v] tuples rather than values.\n while (!(step = iterator.next()).done) {\n var entry = step.value;\n if (entry) {\n if (!isNode(entry[1])) {\n return false;\n }\n }\n }\n }\n } else {\n return false;\n }\n\n return true;\n default:\n return false;\n }\n}\n\nfunction isSymbol(propType, propValue) {\n // Native Symbol.\n if (propType === 'symbol') {\n return true;\n }\n\n // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n if (propValue['@@toStringTag'] === 'Symbol') {\n return true;\n }\n\n // Fallback for non-spec compliant Symbols which are polyfilled.\n if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n return true;\n }\n\n return false;\n}\n\n// Equivalent of `typeof` but with special handling for array and regexp.\nfunction getPropType(propValue) {\n var propType = typeof propValue;\n if (Array.isArray(propValue)) {\n return 'array';\n }\n if (propValue instanceof RegExp) {\n // Old webkits (at least until Android 4.0) return 'function' rather than\n // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n // passes PropTypes.object.\n return 'object';\n }\n if (isSymbol(propType, propValue)) {\n return 'symbol';\n }\n return propType;\n}\n\n// This handles more types than `getPropType`. Only used for error messages.\n// See `createPrimitiveTypeChecker`.\nfunction getPreciseType(propValue) {\n var propType = getPropType(propValue);\n if (propType === 'object') {\n if (propValue instanceof Date) {\n return 'date';\n } else if (propValue instanceof RegExp) {\n return 'regexp';\n }\n }\n return propType;\n}\n\n// Returns class name of the object, if any.\nfunction getClassName(propValue) {\n if (!propValue.constructor || !propValue.constructor.name) {\n return ANONYMOUS;\n }\n return propValue.constructor.name;\n}\n\nmodule.exports = ReactPropTypes;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactPropTypes.js\n ** module id = 27\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPropTypesSecret\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactPropTypesSecret.js\n ** module id = 28\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactVersion\n */\n\n'use strict';\n\nmodule.exports = '15.3.2';\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactVersion.js\n ** module id = 29\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule onlyChild\n */\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar ReactElement = require('./ReactElement');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Returns the first child in a collection of children and verifies that there\n * is only one child in the collection.\n *\n * See https://facebook.github.io/react/docs/top-level-api.html#react.children.only\n *\n * The current implementation of this function assumes that a single child gets\n * passed without a wrapper, but the purpose of this helper function is to\n * abstract away the particular structure of children.\n *\n * @param {?object} children Child collection structure.\n * @return {ReactElement} The first and only `ReactElement` contained in the\n * structure.\n */\nfunction onlyChild(children) {\n !ReactElement.isValidElement(children) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'React.Children.only expected to receive a single React element child.') : _prodInvariant('143') : void 0;\n return children;\n}\n\nmodule.exports = onlyChild;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/onlyChild.js\n ** module id = 30\n ** module chunks = 2\n **/","/**\n * Copyright (c) 2015-present, Alibaba Group Holding Limited.\n * All rights reserved.\n *\n * @providesModule ReactStyleSheet\n */\n'use strict';\n\nimport extendProperties from './extendProperties.web';\nimport reference from './reference';\nimport setDefaultStyle from './setDefaultStyle.web';\n// Make React support array of style object like React Native\nimport extendCreateElement from './extendCreateElement';\nimport flattenStyle from './flattenStyle.web';\n\nvar inited = false;\n\nconst ROOT_CLASS_NAME = 'react-root';\nconst VIEW_CLASS_NAME = 'react-view';\n\nvar StyleSheet = {\n hairlineWidth: 1,\n create: function(styles) {\n return styles;\n },\n extendCreateElement: function(React, nativeComponents) {\n extendCreateElement(React, function(style) {\n if (!inited) {\n inited = true;\n setDefaultStyle({\n reference: reference.getWidth(),\n rootClassName: ROOT_CLASS_NAME,\n viewClassName: VIEW_CLASS_NAME,\n });\n }\n\n return flattenStyle(style, extendProperties);\n }, nativeComponents);\n },\n setReferenceWidth: reference.setWidth,\n rootClassName: ROOT_CLASS_NAME,\n viewClassName: VIEW_CLASS_NAME,\n flatten: flattenStyle\n};\n\nmodule.exports = StyleSheet;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Libraries/StyleSheet/StyleSheet.web.js\n **/","/**\n * Copyright (c) 2015-present, Alibaba Group Holding Limited.\n * All rights reserved.\n *\n */\n'use strict';\n\nimport getVendorPropertyName from 'domkit/getVendorPropertyName';\nimport CSSProperty from 'CSSProperty';\n\nvar shorthandProperties = {\n margin: true,\n padding: true,\n borderWidth: true,\n borderRadius: true,\n};\n\n// some number that react not auto add px\nvar numberProperties = {\n lineHeight: true\n};\n\nvar boxProperties = {\n paddingHorizontal: true,\n paddingVertical: true,\n marginHorizontal: true,\n marginVertical: true,\n};\n\nvar borderProperties = {\n borderColor: true,\n borderWidth: true,\n borderTopColor: true,\n borderRightColor: true,\n borderBottomColor: true,\n borderLeftColor: true,\n borderTopWidth: true,\n borderRightWidth: true,\n borderBottomWidth: true,\n borderLeftWidth: true,\n};\n\n// prefix 2009 spec\nvar flexboxProperties = {\n flex: 'WebkitBoxFlex',\n order: 'WebkitBoxOrdinalGroup',\n // https://github.com/postcss/autoprefixer/blob/master/lib/hacks/flex-direction.coffee\n flexDirection: 'WebkitBoxOrient',\n // https://github.com/postcss/autoprefixer/blob/master/lib/hacks/align-items.coffee\n alignItems: 'WebkitBoxAlign',\n // https://github.com/postcss/autoprefixer/blob/master/lib/hacks/justify-content.coffee\n justifyContent: 'WebkitBoxPack',\n flexWrap: null,\n alignSelf: null,\n};\n\nvar oldFlexboxValues = {\n 'flex-end': 'end',\n 'flex-start': 'start',\n 'space-between': 'justify',\n 'space-around': 'distribute',\n};\n\nvar builtinStyle = document.createElement('div').style;\nvar flexboxSpec;\nif ('alignSelf' in builtinStyle) flexboxSpec = 'final';\nelse if ('webkitAlignSelf' in builtinStyle) flexboxSpec = 'finalVendor';\nelse flexboxSpec = '2009';\n\n// FIXME: UCBrowser is cheat\nvar isUCBrowser = /UCBrowser/i.test(navigator.userAgent);\n// only U3 core need 2009 spec, and only this way can detect another core\nvar notU3 = /UCBS/i.test(navigator.userAgent);\nif (isUCBrowser && !notU3) flexboxSpec = '2009';\n\nconst isIE = /Trident/i.test(navigator.userAgent);\nconst FLEX_AUTO = '1 1 auto';\nconst FLEX_INITIAL = '0 1 auto';\n\n// TODO: cache the result\nfunction prefixOldFlexbox(property, value, result) {\n\n if (flexboxSpec === '2009') {\n var oldValue = oldFlexboxValues[value] || value;\n var oldProperty = flexboxProperties[property] || property;\n if (oldProperty === 'WebkitBoxOrient') {\n // boxOrient\n if (value.indexOf('row') != -1) {\n oldValue = 'horizontal';\n } else {\n oldValue = 'vertical';\n }\n // boxDirection\n var dir = '';\n if (value.indexOf('reverse') != -1) {\n dir = 'reverse';\n } else {\n dir = 'normal';\n }\n result.WebkitBoxDirection = dir;\n }\n return result[oldProperty] = oldValue;\n\n } else if (flexboxSpec === 'finalVendor') {\n return result[getVendorPropertyName(property)] = value;\n\n } else {\n return result[property] = value;\n\n }\n}\n\nfunction defaultFlexExpansion (style, result) {\n const grow = style.flex || 0;\n const shrink = style.flexShrink || 1;\n const basis = style.flexBasis || 'auto';\n let flex;\n\n if (grow === 'auto') {\n flex = FLEX_AUTO;\n } else if (grow === 'initial') {\n flex = FLEX_INITIAL;\n } else if (isNaN(grow)) {\n flex = grow;\n } else {\n flex = `${grow} ${shrink} ${basis}`;\n }\n\n result.flex = flex;\n}\n\nfunction extendBoxProperties(property, value, result) {\n var padding = 'padding';\n var margin = 'margin';\n var horizontal = 'Horizontal';\n var vertical = 'Vertical';\n var type = property.indexOf(margin) == 0 ? margin : padding;\n var directionType = property.indexOf(vertical) !== -1 ? vertical : horizontal;\n\n if (directionType == horizontal) {\n result[type + 'Left'] = result[type + 'Right'] = value;\n } else if (directionType == vertical) {\n result[type + 'Top'] = result[type + 'Bottom'] = value;\n }\n}\n\nfunction isValidValue(value) {\n return value !== '' && value !== null && value !== undefined;\n}\n\nfunction processValueForProp(value, prop) {\n\n if (typeof value == 'number') {\n // transform less then 1px value to 1px, 0.5 to be 1\n if (!CSSProperty.isUnitlessNumber[prop] && value > 0 && value < 1) {\n value = 1;\n }\n\n // Add px to numeric values\n if (numberProperties[prop] && typeof value == 'number') {\n value += 'px';\n }\n }\n\n // [\n // {scaleX: 2},\n // {scaleY: 2}\n // ] => scaleX(2) scaleY(2)\n\n if (shorthandProperties[prop] && typeof value == 'string') {\n value = value.replace(/\\d*\\.?\\d+(rem|em|in|cm|mm|pt|pc|px|vh|vw|vmin|vmax|%)*/g, function(val, unit) {\n return unit ? val : val + 'px';\n });\n }\n\n return value;\n}\n\nfunction defaultBorderStyle(style, result) {\n if (!style.borderStyle && !result.borderStyle) {\n result.borderStyle = 'solid';\n }\n\n if (!style.borderWidth && !result.borderWidth) {\n result.borderWidth = 0;\n }\n\n if (!style.borderColor && !result.borderColor) {\n result.borderColor = 'black';\n }\n}\n\nfunction extendProperties(style) {\n var result = {};\n\n for (var property in style) {\n var value = style[property];\n if (!isValidValue(value)) {\n continue;\n }\n // set a default border style if there has border about property\n if (borderProperties[property]) {\n defaultBorderStyle(style, result);\n }\n\n if (boxProperties[property]) {\n extendBoxProperties(property, value, result);\n } else if (flexboxProperties[property]) {\n prefixOldFlexbox(property, value, result);\n // https://roland.codes/blog/ie-flex-collapse-bug/\n if (property === 'flex' && isIE) {\n defaultFlexExpansion(style, result);\n }\n } else {\n value = processValueForProp(value, property);\n property = getVendorPropertyName(property);\n result[property] = value;\n }\n }\n\n return result;\n}\n\nmodule.exports = extendProperties;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Libraries/StyleSheet/extendProperties.web.js\n **/","'use strict';\n\nvar builtinStyle = require('./builtinStyle');\nvar prefixes = ['Moz', 'Webkit', 'O', 'ms'];\nvar domVendorPrefix;\n\n// Helper function to get the proper vendor property name. (transition => WebkitTransition)\nmodule.exports = function(prop, isSupportTest) {\n\n var vendorProp;\n if (prop in builtinStyle) return prop;\n\n var UpperProp = prop.charAt(0).toUpperCase() + prop.substr(1);\n\n if (domVendorPrefix) {\n\n vendorProp = domVendorPrefix + UpperProp;\n if (vendorProp in builtinStyle) {\n return vendorProp;\n }\n } else {\n\n for (var i = 0; i < prefixes.length; ++i) {\n vendorProp = prefixes[i] + UpperProp;\n if (vendorProp in builtinStyle) {\n domVendorPrefix = prefixes[i];\n return vendorProp;\n }\n }\n }\n\n // if support test, not fallback to origin prop name\n if (!isSupportTest) {\n return prop;\n }\n\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/domkit/getVendorPropertyName.js\n ** module id = 33\n ** module chunks = 2\n **/","'use strict';\n\nmodule.exports = document.createElement('div').style;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/domkit/builtinStyle.js\n ** module id = 34\n ** module chunks = 2\n **/","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule CSSProperty\n */\n\n'use strict';\n\n/**\n * CSS properties which accept numbers but are not in units of \"px\".\n */\nvar isUnitlessNumber = {\n animationIterationCount: true,\n boxFlex: true,\n boxFlexGroup: true,\n boxOrdinalGroup: true,\n columnCount: true,\n flex: true,\n flexGrow: true,\n flexPositive: true,\n flexShrink: true,\n flexNegative: true,\n flexOrder: true,\n fontWeight: true,\n lineClamp: true,\n lineHeight: true,\n opacity: true,\n order: true,\n orphans: true,\n tabSize: true,\n widows: true,\n zIndex: true,\n zoom: true,\n\n // SVG-related properties\n fillOpacity: true,\n stopOpacity: true,\n strokeDashoffset: true,\n strokeOpacity: true,\n strokeWidth: true\n};\n\n/**\n * @param {string} prefix vendor-specific prefix, eg: Webkit\n * @param {string} key style name, eg: transitionDuration\n * @return {string} style name prefixed with `prefix`, properly camelCased, eg:\n * WebkitTransitionDuration\n */\nfunction prefixKey(prefix, key) {\n return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n}\n\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\nvar prefixes = ['Webkit', 'ms', 'Moz', 'O'];\n\n// Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an\n// infinite loop, because it iterates over the newly added props too.\nObject.keys(isUnitlessNumber).forEach(function(prop) {\n prefixes.forEach(function(prefix) {\n isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];\n });\n});\n\n/**\n * Most style properties can be unset by doing .style[prop] = '' but IE8\n * doesn't like doing that with shorthand properties so for the properties that\n * IE8 breaks on, which are listed here, we instead unset each of the\n * individual properties. See http://bugs.jquery.com/ticket/12385.\n * The 4-value 'clock' properties like margin, padding, border-width seem to\n * behave without any problems. Curiously, list-style works too without any\n * special prodding.\n */\nvar shorthandPropertyExpansions = {\n background: {\n backgroundAttachment: true,\n backgroundColor: true,\n backgroundImage: true,\n backgroundPositionX: true,\n backgroundPositionY: true,\n backgroundRepeat: true\n },\n backgroundPosition: {\n backgroundPositionX: true,\n backgroundPositionY: true\n },\n border: {\n borderWidth: true,\n borderStyle: true,\n borderColor: true\n },\n borderBottom: {\n borderBottomWidth: true,\n borderBottomStyle: true,\n borderBottomColor: true\n },\n borderLeft: {\n borderLeftWidth: true,\n borderLeftStyle: true,\n borderLeftColor: true\n },\n borderRight: {\n borderRightWidth: true,\n borderRightStyle: true,\n borderRightColor: true\n },\n borderTop: {\n borderTopWidth: true,\n borderTopStyle: true,\n borderTopColor: true\n },\n font: {\n fontStyle: true,\n fontVariant: true,\n fontWeight: true,\n fontSize: true,\n lineHeight: true,\n fontFamily: true\n },\n outline: {\n outlineWidth: true,\n outlineStyle: true,\n outlineColor: true\n }\n};\n\nvar CSSProperty = {\n isUnitlessNumber: isUnitlessNumber,\n shorthandPropertyExpansions: shorthandPropertyExpansions\n};\n\nmodule.exports = CSSProperty;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Libraries/StyleSheet/CSSProperty.js\n **/","/**\n * Copyright (c) 2015-present, Alibaba Group Holding Limited.\n * All rights reserved.\n *\n */\n'use strict';\n\nvar referenceWidth = 750 / 100;\n\nmodule.exports = {\n setWidth: function(width) {\n referenceWidth = width;\n },\n getWidth: function() {\n return referenceWidth;\n }\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Libraries/StyleSheet/reference.js\n **/","/**\n * Copyright (c) 2015-present, Alibaba Group Holding Limited.\n * All rights reserved.\n *\n */\n'use strict';\n\nfunction appendSytle({\n reference,\n rootClassName,\n viewClassName\n}) {\n\n var docEl = document.documentElement;\n var styleEl = document.createElement('style');\n docEl.firstElementChild.appendChild(styleEl);\n var rem = docEl.clientWidth / reference;\n\n var boxStyle = `\n box-sizing: border-box;\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -webkit-flex-direction: column;\n -ms-flex-direction: column;\n flex-direction: column;\n `;\n\n styleEl.innerHTML = `\n html {\n font-size: ${rem}px!important;\n }\n body {\n font-size: 14px;\n margin: 0;\n }\n .${rootClassName} {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n overflow: hidden;\n }\n .${rootClassName} > .${viewClassName} {\n height: 100%;\n }\n .${rootClassName} .${viewClassName} {\n position: relative;\n ${boxStyle}\n }\n `;\n}\n\nfunction setDefaultStyle(options) {\n var metaEl = document.querySelector('meta[name=\"viewport\"]');\n if (!metaEl) {\n return console.warn('Viewport meta not set');\n }\n\n window.addEventListener('resize', function() {\n appendSytle(options);\n }, false);\n\n appendSytle(options);\n}\n\nmodule.exports = setDefaultStyle;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Libraries/StyleSheet/setDefaultStyle.web.js\n **/","/**\n * Copyright (c) 2015-present, Alibaba Group Holding Limited.\n * All rights reserved.\n *\n */\n'use strict';\n\nfunction extendCreateElement(React, processor) {\n var originalCreateElement = React.createElement;\n React.createElement = function(type, props) {\n var args = arguments;\n\n if (\n props &&\n props.style &&\n (Array.isArray(props.style) || typeof props.style === 'object') &&\n type &&\n type.isReactNativeComponent\n ) {\n var style = processor(props.style);\n // should copy it, props is read only\n var target = {};\n for (var key in props) {\n if (Object.prototype.hasOwnProperty.call(props, key)) {\n target[key] = props[key];\n }\n }\n target.style = style;\n props = target;\n }\n\n return originalCreateElement.apply(this, [type, props].concat(Array.prototype.slice.call(args, 2)));\n };\n}\n\nmodule.exports = extendCreateElement;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Libraries/StyleSheet/extendCreateElement.js\n **/","/**\n * Copyright (c) 2015-present, Alibaba Group Holding Limited.\n * All rights reserved.\n *\n * @providesModule ReactFlattenStyle\n */\n'use strict';\n\nfunction flattenStyle(style, processor) {\n if (!style) {\n return undefined;\n }\n\n if (!Array.isArray(style)) {\n return (processor && processor(style)) || style;\n } else {\n\n var result = {};\n for (var i = 0; i < style.length; ++i) {\n var computedStyle = flattenStyle(style[i]);\n if (computedStyle) {\n for (var key in computedStyle) {\n result[key] = computedStyle[key];\n }\n }\n }\n\n return (processor && processor(result)) || result;;\n }\n\n}\n\nmodule.exports = flattenStyle;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Libraries/StyleSheet/flattenStyle.web.js\n **/","/**\n * Copyright (c) 2015-present, Alibaba Group Holding Limited.\n * All rights reserved.\n *\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * @providesModule ReactActivityIndicator\n */\n'use strict';\n\nimport React, { Component, PropTypes } from 'react';\nimport View from 'ReactView';\nimport StyleSheet from 'ReactStyleSheet';\nimport assign from 'domkit/appendVendorPrefix';\nimport insertKeyframesRule from 'domkit/insertKeyframesRule';\nimport { Mixin as NativeMethodsMixin } from 'NativeMethodsMixin';\nimport mixin from 'react-mixin';\nimport autobind from 'autobind-decorator';\n\nconst keyframes = {\n '50%': {\n opacity: 0.3\n },\n '100%': {\n opacity: 1\n }\n};\n\nconst GRAY = '#999999';\n\nconst animationName = insertKeyframesRule(keyframes);\n\nclass ActivityIndicator extends Component {\n\n static propTypes = {\n /**\n * Whether to show the indicator (true, the default) or hide it (false).\n */\n animating: PropTypes.bool,\n /**\n * The foreground color of the spinner (default is gray).\n */\n color: PropTypes.string,\n /**\n * Size of the indicator. Small has a height of 20, large has a height of 36.\n */\n size: PropTypes.oneOf([\n 'small',\n 'large',\n ]),\n }\n\n static defaultProps = {\n animating: true,\n color: GRAY,\n size: 'small',\n }\n\n /**\n * @param {Number} i\n * @return {Object}\n */\n getAnimationStyle(i) {\n let animation = [animationName, '1.2s', `${i * 0.12}s`, 'infinite', 'ease-in-out'].join(' ');\n let animationFillMode = 'both';\n\n return {\n animation,\n animationFillMode,\n };\n }\n\n /**\n * @param {Number} i\n * @return {Object}\n */\n getLineStyle(i, lines) {\n return {\n backgroundColor: this.props.color,\n position: 'absolute',\n // FIXME: hacked a fixed value for align\n top: -3,\n left: -1,\n transform: 'rotate(' + ~~(360 / lines * i) + 'deg) translate(0, -' + (this.props.size === 'large' ? 12 : 7) + 'px)',\n };\n }\n\n /**\n * @param {Number} i\n * @return {Object}\n */\n getStyle(i, lines) {\n let sizeLineStyle = (this.props.size === 'large') ? styles.sizeLargeLine : styles.sizeSmallLine;\n return assign(\n this.getAnimationStyle(i),\n this.getLineStyle(i, lines),\n sizeLineStyle\n );\n }\n\n render() {\n let lines = [];\n let sizeContainerStyle = (this.props.size === 'large') ? styles.sizeLargeContainer : styles.sizeSmallContainer;\n\n if (this.props.animating) {\n for (let i = 1; i <= 12; i++) {\n lines.push();\n }\n }\n\n return (\n \n \n {lines}\n \n \n );\n }\n}\n\nlet styles = StyleSheet.create({\n container: {\n position: 'relative',\n fontSize: 0,\n alignItems: 'center',\n justifyContent: 'center',\n },\n sizeSmallContainer: {\n width: 20,\n height: 20,\n },\n sizeLargeContainer: {\n width: 36,\n height: 36,\n },\n sizeSmallLine: {\n width: 2,\n height: 5,\n borderRadius: 2\n },\n sizeLargeLine: {\n width: 3,\n height: 9,\n borderRadius: 3\n }\n});\n\nmixin.onClass(ActivityIndicator, NativeMethodsMixin);\n\nActivityIndicator.isReactNativeComponent = true;\n\nexport default ActivityIndicator;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Libraries/ActivityIndicator/ActivityIndicator.web.js\n **/","/**\n * Copyright (c) 2015-present, Alibaba Group Holding Limited.\n * All rights reserved.\n *\n * Copyright (c) 2015, Facebook, Inc. All rights reserved.\n *\n * @providesModule ReactView\n */\n'use strict';\n\nimport React, { PropTypes } from 'react';\nimport StyleSheet from 'ReactStyleSheet';\nimport { Mixin as LayoutMixin } from 'ReactLayoutMixin';\nimport { Mixin as NativeMethodsMixin } from 'NativeMethodsMixin';\n\nvar View = React.createClass({\n mixins: [LayoutMixin, NativeMethodsMixin],\n\n propTypes: {\n /**\n * Used to locate this view in end-to-end tests. NB: disables the 'layout-only\n * view removal' optimization for this view!\n */\n testID: PropTypes.string,\n\n /**\n * For most touch interactions, you'll simply want to wrap your component in\n * `TouchableHighlight` or `TouchableOpacity`. Check out `Touchable.js`,\n * `ScrollResponder.js` and `ResponderEventPlugin.js` for more discussion.\n */\n onMoveShouldSetResponder: PropTypes.func,\n onResponderGrant: PropTypes.func,\n onResponderMove: PropTypes.func,\n onResponderReject: PropTypes.func,\n onResponderRelease: PropTypes.func,\n onResponderTerminate: PropTypes.func,\n onResponderTerminationRequest: PropTypes.func,\n onStartShouldSetResponder: PropTypes.func,\n onStartShouldSetResponderCapture: PropTypes.func,\n\n /**\n * Invoked on mount and layout changes with\n *\n * {nativeEvent: { layout: {x, y, width, height}}}.\n *\n * This event is fired immediately once the layout has been calculated, but\n * the new layout may not yet be reflected on the screen at the time the\n * event is received, especially if a layout animation is in progress.\n */\n onLayout: PropTypes.func,\n\n /**\n * In the absence of `auto` property, `none` is much like `CSS`'s `none`\n * value. `box-none` is as if you had applied the `CSS` class:\n *\n * ```\n * .box-none {\n * pointer-events: none;\n * }\n * .box-none * {\n * pointer-events: all;\n * }\n * ```\n *\n * `box-only` is the equivalent of\n *\n * ```\n * .box-only {\n * pointer-events: all;\n * }\n * .box-only * {\n * pointer-events: none;\n * }\n * ```\n *\n * But since `pointerEvents` does not affect layout/appearance, and we are\n * already deviating from the spec by adding additional modes, we opt to not\n * include `pointerEvents` on `style`. On some platforms, we would need to\n * implement it as a `className` anyways. Using `style` or not is an\n * implementation detail of the platform.\n */\n pointerEvents: PropTypes.oneOf([\n 'box-none',\n 'none',\n 'box-only',\n 'auto',\n ]),\n\n style: PropTypes.oneOfType([\n PropTypes.object,\n PropTypes.array\n ]),\n },\n\n render: function() {\n return (\n
\n {this.props.children}\n
\n );\n }\n});\n\nView.isReactNativeComponent = true;\n\nexport default View;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Libraries/View/View.web.js\n **/","/**\n * Copyright (c) 2015-present, Alibaba Group Holding Limited.\n * All rights reserved.\n *\n * @providesModule ReactLayoutMixin\n */\n'use strict';\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport getLayout from 'ReactGetLayout';\n\nvar LayoutMixin = {\n getInitialState: function() {\n return {layout: {}};\n },\n\n componentDidMount: function() {\n this.layoutHandle();\n },\n\n componentDidUpdate: function() {\n this.layoutHandle();\n },\n\n layoutHandle: function() {\n if (this.props.onLayout) {\n\n var layout = getLayout(ReactDOM.findDOMNode(this));\n var stateLayout = this.state.layout;\n if (stateLayout.x !== layout.x || stateLayout.y !== layout.y || stateLayout.width !== layout.width || stateLayout.height !== layout.height) {\n this.props.onLayout({nativeEvent: {layout}});\n this.setState({layout});\n }\n }\n }\n};\n\nmodule.exports = {\n Mixin: LayoutMixin\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./Libraries/Utilties/LayoutMixin.js\n **/","'use strict';\n\nmodule.exports = require('react/lib/ReactDOM');\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react-dom/index.js\n ** module id = 43\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOM\n */\n\n/* globals __REACT_DEVTOOLS_GLOBAL_HOOK__*/\n\n'use strict';\n\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactDefaultInjection = require('./ReactDefaultInjection');\nvar ReactMount = require('./ReactMount');\nvar ReactReconciler = require('./ReactReconciler');\nvar ReactUpdates = require('./ReactUpdates');\nvar ReactVersion = require('./ReactVersion');\n\nvar findDOMNode = require('./findDOMNode');\nvar getHostComponentFromComposite = require('./getHostComponentFromComposite');\nvar renderSubtreeIntoContainer = require('./renderSubtreeIntoContainer');\nvar warning = require('fbjs/lib/warning');\n\nReactDefaultInjection.inject();\n\nvar ReactDOM = {\n findDOMNode: findDOMNode,\n render: ReactMount.render,\n unmountComponentAtNode: ReactMount.unmountComponentAtNode,\n version: ReactVersion,\n\n /* eslint-disable camelcase */\n unstable_batchedUpdates: ReactUpdates.batchedUpdates,\n unstable_renderSubtreeIntoContainer: renderSubtreeIntoContainer\n};\n\n// Inject the runtime into a devtools global hook regardless of browser.\n// Allows for debugging when the hook is injected on the page.\n/* eslint-enable camelcase */\nif (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject === 'function') {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.inject({\n ComponentTree: {\n getClosestInstanceFromNode: ReactDOMComponentTree.getClosestInstanceFromNode,\n getNodeFromInstance: function (inst) {\n // inst is an internal instance (but could be a composite)\n if (inst._renderedComponent) {\n inst = getHostComponentFromComposite(inst);\n }\n if (inst) {\n return ReactDOMComponentTree.getNodeFromInstance(inst);\n } else {\n return null;\n }\n }\n },\n Mount: ReactMount,\n Reconciler: ReactReconciler\n });\n}\n\nif (process.env.NODE_ENV !== 'production') {\n var ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n if (ExecutionEnvironment.canUseDOM && window.top === window.self) {\n\n // First check if devtools is not installed\n if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {\n // If we're in Chrome or Firefox, provide a download link if not installed.\n if (navigator.userAgent.indexOf('Chrome') > -1 && navigator.userAgent.indexOf('Edge') === -1 || navigator.userAgent.indexOf('Firefox') > -1) {\n // Firefox does not have the issue with devtools loaded over file://\n var showFileUrlMessage = window.location.protocol.indexOf('http') === -1 && navigator.userAgent.indexOf('Firefox') === -1;\n console.debug('Download the React DevTools ' + (showFileUrlMessage ? 'and use an HTTP server (instead of a file: URL) ' : '') + 'for a better development experience: ' + 'https://fb.me/react-devtools');\n }\n }\n\n var testFunc = function testFn() {};\n process.env.NODE_ENV !== 'production' ? warning((testFunc.name || testFunc.toString()).indexOf('testFn') !== -1, 'It looks like you\\'re using a minified copy of the development build ' + 'of React. When deploying React apps to production, make sure to use ' + 'the production build which skips development warnings and is faster. ' + 'See https://fb.me/react-minification for more details.') : void 0;\n\n // If we're in IE8, check to see if we are in compatibility mode and provide\n // information on preventing compatibility mode\n var ieCompatibilityMode = document.documentMode && document.documentMode < 8;\n\n process.env.NODE_ENV !== 'production' ? warning(!ieCompatibilityMode, 'Internet Explorer is running in compatibility mode; please add the ' + 'following tag to your HTML to prevent this from happening: ' + '') : void 0;\n\n var expectedFeatures = [\n // shims\n Array.isArray, Array.prototype.every, Array.prototype.forEach, Array.prototype.indexOf, Array.prototype.map, Date.now, Function.prototype.bind, Object.keys, String.prototype.split, String.prototype.trim];\n\n for (var i = 0; i < expectedFeatures.length; i++) {\n if (!expectedFeatures[i]) {\n process.env.NODE_ENV !== 'production' ? warning(false, 'One or more ES5 shims expected by React are not available: ' + 'https://fb.me/react-warning-polyfills') : void 0;\n break;\n }\n }\n }\n}\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactInstrumentation = require('./ReactInstrumentation');\n var ReactDOMUnknownPropertyHook = require('./ReactDOMUnknownPropertyHook');\n var ReactDOMNullInputValuePropHook = require('./ReactDOMNullInputValuePropHook');\n\n ReactInstrumentation.debugTool.addHook(ReactDOMUnknownPropertyHook);\n ReactInstrumentation.debugTool.addHook(ReactDOMNullInputValuePropHook);\n}\n\nmodule.exports = ReactDOM;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOM.js\n ** module id = 44\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMComponentTree\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar DOMProperty = require('./DOMProperty');\nvar ReactDOMComponentFlags = require('./ReactDOMComponentFlags');\n\nvar invariant = require('fbjs/lib/invariant');\n\nvar ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;\nvar Flags = ReactDOMComponentFlags;\n\nvar internalInstanceKey = '__reactInternalInstance$' + Math.random().toString(36).slice(2);\n\n/**\n * Drill down (through composites and empty components) until we get a host or\n * host text component.\n *\n * This is pretty polymorphic but unavoidable with the current structure we have\n * for `_renderedChildren`.\n */\nfunction getRenderedHostOrTextFromComponent(component) {\n var rendered;\n while (rendered = component._renderedComponent) {\n component = rendered;\n }\n return component;\n}\n\n/**\n * Populate `_hostNode` on the rendered host/text component with the given\n * DOM node. The passed `inst` can be a composite.\n */\nfunction precacheNode(inst, node) {\n var hostInst = getRenderedHostOrTextFromComponent(inst);\n hostInst._hostNode = node;\n node[internalInstanceKey] = hostInst;\n}\n\nfunction uncacheNode(inst) {\n var node = inst._hostNode;\n if (node) {\n delete node[internalInstanceKey];\n inst._hostNode = null;\n }\n}\n\n/**\n * Populate `_hostNode` on each child of `inst`, assuming that the children\n * match up with the DOM (element) children of `node`.\n *\n * We cache entire levels at once to avoid an n^2 problem where we access the\n * children of a node sequentially and have to walk from the start to our target\n * node every time.\n *\n * Since we update `_renderedChildren` and the actual DOM at (slightly)\n * different times, we could race here and see a newer `_renderedChildren` than\n * the DOM nodes we see. To avoid this, ReactMultiChild calls\n * `prepareToManageChildren` before we change `_renderedChildren`, at which\n * time the container's child nodes are always cached (until it unmounts).\n */\nfunction precacheChildNodes(inst, node) {\n if (inst._flags & Flags.hasCachedChildNodes) {\n return;\n }\n var children = inst._renderedChildren;\n var childNode = node.firstChild;\n outer: for (var name in children) {\n if (!children.hasOwnProperty(name)) {\n continue;\n }\n var childInst = children[name];\n var childID = getRenderedHostOrTextFromComponent(childInst)._domID;\n if (childID === 0) {\n // We're currently unmounting this child in ReactMultiChild; skip it.\n continue;\n }\n // We assume the child nodes are in the same order as the child instances.\n for (; childNode !== null; childNode = childNode.nextSibling) {\n if (childNode.nodeType === 1 && childNode.getAttribute(ATTR_NAME) === String(childID) || childNode.nodeType === 8 && childNode.nodeValue === ' react-text: ' + childID + ' ' || childNode.nodeType === 8 && childNode.nodeValue === ' react-empty: ' + childID + ' ') {\n precacheNode(childInst, childNode);\n continue outer;\n }\n }\n // We reached the end of the DOM children without finding an ID match.\n !false ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Unable to find element with ID %s.', childID) : _prodInvariant('32', childID) : void 0;\n }\n inst._flags |= Flags.hasCachedChildNodes;\n}\n\n/**\n * Given a DOM node, return the closest ReactDOMComponent or\n * ReactDOMTextComponent instance ancestor.\n */\nfunction getClosestInstanceFromNode(node) {\n if (node[internalInstanceKey]) {\n return node[internalInstanceKey];\n }\n\n // Walk up the tree until we find an ancestor whose instance we have cached.\n var parents = [];\n while (!node[internalInstanceKey]) {\n parents.push(node);\n if (node.parentNode) {\n node = node.parentNode;\n } else {\n // Top of the tree. This node must not be part of a React tree (or is\n // unmounted, potentially).\n return null;\n }\n }\n\n var closest;\n var inst;\n for (; node && (inst = node[internalInstanceKey]); node = parents.pop()) {\n closest = inst;\n if (parents.length) {\n precacheChildNodes(inst, node);\n }\n }\n\n return closest;\n}\n\n/**\n * Given a DOM node, return the ReactDOMComponent or ReactDOMTextComponent\n * instance, or null if the node was not rendered by this React.\n */\nfunction getInstanceFromNode(node) {\n var inst = getClosestInstanceFromNode(node);\n if (inst != null && inst._hostNode === node) {\n return inst;\n } else {\n return null;\n }\n}\n\n/**\n * Given a ReactDOMComponent or ReactDOMTextComponent, return the corresponding\n * DOM node.\n */\nfunction getNodeFromInstance(inst) {\n // Without this first invariant, passing a non-DOM-component triggers the next\n // invariant for a missing parent, which is super confusing.\n !(inst._hostNode !== undefined) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : _prodInvariant('33') : void 0;\n\n if (inst._hostNode) {\n return inst._hostNode;\n }\n\n // Walk up the tree until we find an ancestor whose DOM node we have cached.\n var parents = [];\n while (!inst._hostNode) {\n parents.push(inst);\n !inst._hostParent ? process.env.NODE_ENV !== 'production' ? invariant(false, 'React DOM tree root should always have a node reference.') : _prodInvariant('34') : void 0;\n inst = inst._hostParent;\n }\n\n // Now parents contains each ancestor that does *not* have a cached native\n // node, and `inst` is the deepest ancestor that does.\n for (; parents.length; inst = parents.pop()) {\n precacheChildNodes(inst, inst._hostNode);\n }\n\n return inst._hostNode;\n}\n\nvar ReactDOMComponentTree = {\n getClosestInstanceFromNode: getClosestInstanceFromNode,\n getInstanceFromNode: getInstanceFromNode,\n getNodeFromInstance: getNodeFromInstance,\n precacheChildNodes: precacheChildNodes,\n precacheNode: precacheNode,\n uncacheNode: uncacheNode\n};\n\nmodule.exports = ReactDOMComponentTree;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMComponentTree.js\n ** module id = 45\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DOMProperty\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar invariant = require('fbjs/lib/invariant');\n\nfunction checkMask(value, bitmask) {\n return (value & bitmask) === bitmask;\n}\n\nvar DOMPropertyInjection = {\n /**\n * Mapping from normalized, camelcased property names to a configuration that\n * specifies how the associated DOM property should be accessed or rendered.\n */\n MUST_USE_PROPERTY: 0x1,\n HAS_BOOLEAN_VALUE: 0x4,\n HAS_NUMERIC_VALUE: 0x8,\n HAS_POSITIVE_NUMERIC_VALUE: 0x10 | 0x8,\n HAS_OVERLOADED_BOOLEAN_VALUE: 0x20,\n\n /**\n * Inject some specialized knowledge about the DOM. This takes a config object\n * with the following properties:\n *\n * isCustomAttribute: function that given an attribute name will return true\n * if it can be inserted into the DOM verbatim. Useful for data-* or aria-*\n * attributes where it's impossible to enumerate all of the possible\n * attribute names,\n *\n * Properties: object mapping DOM property name to one of the\n * DOMPropertyInjection constants or null. If your attribute isn't in here,\n * it won't get written to the DOM.\n *\n * DOMAttributeNames: object mapping React attribute name to the DOM\n * attribute name. Attribute names not specified use the **lowercase**\n * normalized name.\n *\n * DOMAttributeNamespaces: object mapping React attribute name to the DOM\n * attribute namespace URL. (Attribute names not specified use no namespace.)\n *\n * DOMPropertyNames: similar to DOMAttributeNames but for DOM properties.\n * Property names not specified use the normalized name.\n *\n * DOMMutationMethods: Properties that require special mutation methods. If\n * `value` is undefined, the mutation method should unset the property.\n *\n * @param {object} domPropertyConfig the config as described above.\n */\n injectDOMPropertyConfig: function (domPropertyConfig) {\n var Injection = DOMPropertyInjection;\n var Properties = domPropertyConfig.Properties || {};\n var DOMAttributeNamespaces = domPropertyConfig.DOMAttributeNamespaces || {};\n var DOMAttributeNames = domPropertyConfig.DOMAttributeNames || {};\n var DOMPropertyNames = domPropertyConfig.DOMPropertyNames || {};\n var DOMMutationMethods = domPropertyConfig.DOMMutationMethods || {};\n\n if (domPropertyConfig.isCustomAttribute) {\n DOMProperty._isCustomAttributeFunctions.push(domPropertyConfig.isCustomAttribute);\n }\n\n for (var propName in Properties) {\n !!DOMProperty.properties.hasOwnProperty(propName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'injectDOMPropertyConfig(...): You\\'re trying to inject DOM property \\'%s\\' which has already been injected. You may be accidentally injecting the same DOM property config twice, or you may be injecting two configs that have conflicting property names.', propName) : _prodInvariant('48', propName) : void 0;\n\n var lowerCased = propName.toLowerCase();\n var propConfig = Properties[propName];\n\n var propertyInfo = {\n attributeName: lowerCased,\n attributeNamespace: null,\n propertyName: propName,\n mutationMethod: null,\n\n mustUseProperty: checkMask(propConfig, Injection.MUST_USE_PROPERTY),\n hasBooleanValue: checkMask(propConfig, Injection.HAS_BOOLEAN_VALUE),\n hasNumericValue: checkMask(propConfig, Injection.HAS_NUMERIC_VALUE),\n hasPositiveNumericValue: checkMask(propConfig, Injection.HAS_POSITIVE_NUMERIC_VALUE),\n hasOverloadedBooleanValue: checkMask(propConfig, Injection.HAS_OVERLOADED_BOOLEAN_VALUE)\n };\n !(propertyInfo.hasBooleanValue + propertyInfo.hasNumericValue + propertyInfo.hasOverloadedBooleanValue <= 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Value can be one of boolean, overloaded boolean, or numeric value, but not a combination: %s', propName) : _prodInvariant('50', propName) : void 0;\n\n if (process.env.NODE_ENV !== 'production') {\n DOMProperty.getPossibleStandardName[lowerCased] = propName;\n }\n\n if (DOMAttributeNames.hasOwnProperty(propName)) {\n var attributeName = DOMAttributeNames[propName];\n propertyInfo.attributeName = attributeName;\n if (process.env.NODE_ENV !== 'production') {\n DOMProperty.getPossibleStandardName[attributeName] = propName;\n }\n }\n\n if (DOMAttributeNamespaces.hasOwnProperty(propName)) {\n propertyInfo.attributeNamespace = DOMAttributeNamespaces[propName];\n }\n\n if (DOMPropertyNames.hasOwnProperty(propName)) {\n propertyInfo.propertyName = DOMPropertyNames[propName];\n }\n\n if (DOMMutationMethods.hasOwnProperty(propName)) {\n propertyInfo.mutationMethod = DOMMutationMethods[propName];\n }\n\n DOMProperty.properties[propName] = propertyInfo;\n }\n }\n};\n\n/* eslint-disable max-len */\nvar ATTRIBUTE_NAME_START_CHAR = ':A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD';\n/* eslint-enable max-len */\n\n/**\n * DOMProperty exports lookup objects that can be used like functions:\n *\n * > DOMProperty.isValid['id']\n * true\n * > DOMProperty.isValid['foobar']\n * undefined\n *\n * Although this may be confusing, it performs better in general.\n *\n * @see http://jsperf.com/key-exists\n * @see http://jsperf.com/key-missing\n */\nvar DOMProperty = {\n\n ID_ATTRIBUTE_NAME: 'data-reactid',\n ROOT_ATTRIBUTE_NAME: 'data-reactroot',\n\n ATTRIBUTE_NAME_START_CHAR: ATTRIBUTE_NAME_START_CHAR,\n ATTRIBUTE_NAME_CHAR: ATTRIBUTE_NAME_START_CHAR + '\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040',\n\n /**\n * Map from property \"standard name\" to an object with info about how to set\n * the property in the DOM. Each object contains:\n *\n * attributeName:\n * Used when rendering markup or with `*Attribute()`.\n * attributeNamespace\n * propertyName:\n * Used on DOM node instances. (This includes properties that mutate due to\n * external factors.)\n * mutationMethod:\n * If non-null, used instead of the property or `setAttribute()` after\n * initial render.\n * mustUseProperty:\n * Whether the property must be accessed and mutated as an object property.\n * hasBooleanValue:\n * Whether the property should be removed when set to a falsey value.\n * hasNumericValue:\n * Whether the property must be numeric or parse as a numeric and should be\n * removed when set to a falsey value.\n * hasPositiveNumericValue:\n * Whether the property must be positive numeric or parse as a positive\n * numeric and should be removed when set to a falsey value.\n * hasOverloadedBooleanValue:\n * Whether the property can be used as a flag as well as with a value.\n * Removed when strictly equal to false; present without a value when\n * strictly equal to true; present with a value otherwise.\n */\n properties: {},\n\n /**\n * Mapping from lowercase property names to the properly cased version, used\n * to warn in the case of missing properties. Available only in __DEV__.\n * @type {Object}\n */\n getPossibleStandardName: process.env.NODE_ENV !== 'production' ? {} : null,\n\n /**\n * All of the isCustomAttribute() functions that have been injected.\n */\n _isCustomAttributeFunctions: [],\n\n /**\n * Checks whether a property name is a custom attribute.\n * @method\n */\n isCustomAttribute: function (attributeName) {\n for (var i = 0; i < DOMProperty._isCustomAttributeFunctions.length; i++) {\n var isCustomAttributeFn = DOMProperty._isCustomAttributeFunctions[i];\n if (isCustomAttributeFn(attributeName)) {\n return true;\n }\n }\n return false;\n },\n\n injection: DOMPropertyInjection\n};\n\nmodule.exports = DOMProperty;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/DOMProperty.js\n ** module id = 46\n ** module chunks = 2\n **/","/**\n * Copyright 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMComponentFlags\n */\n\n'use strict';\n\nvar ReactDOMComponentFlags = {\n hasCachedChildNodes: 1 << 0\n};\n\nmodule.exports = ReactDOMComponentFlags;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDOMComponentFlags.js\n ** module id = 47\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDefaultInjection\n */\n\n'use strict';\n\nvar BeforeInputEventPlugin = require('./BeforeInputEventPlugin');\nvar ChangeEventPlugin = require('./ChangeEventPlugin');\nvar DefaultEventPluginOrder = require('./DefaultEventPluginOrder');\nvar EnterLeaveEventPlugin = require('./EnterLeaveEventPlugin');\nvar HTMLDOMPropertyConfig = require('./HTMLDOMPropertyConfig');\nvar ReactComponentBrowserEnvironment = require('./ReactComponentBrowserEnvironment');\nvar ReactDOMComponent = require('./ReactDOMComponent');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactDOMEmptyComponent = require('./ReactDOMEmptyComponent');\nvar ReactDOMTreeTraversal = require('./ReactDOMTreeTraversal');\nvar ReactDOMTextComponent = require('./ReactDOMTextComponent');\nvar ReactDefaultBatchingStrategy = require('./ReactDefaultBatchingStrategy');\nvar ReactEventListener = require('./ReactEventListener');\nvar ReactInjection = require('./ReactInjection');\nvar ReactReconcileTransaction = require('./ReactReconcileTransaction');\nvar SVGDOMPropertyConfig = require('./SVGDOMPropertyConfig');\nvar SelectEventPlugin = require('./SelectEventPlugin');\nvar SimpleEventPlugin = require('./SimpleEventPlugin');\n\nvar alreadyInjected = false;\n\nfunction inject() {\n if (alreadyInjected) {\n // TODO: This is currently true because these injections are shared between\n // the client and the server package. They should be built independently\n // and not share any injection state. Then this problem will be solved.\n return;\n }\n alreadyInjected = true;\n\n ReactInjection.EventEmitter.injectReactEventListener(ReactEventListener);\n\n /**\n * Inject modules for resolving DOM hierarchy and plugin ordering.\n */\n ReactInjection.EventPluginHub.injectEventPluginOrder(DefaultEventPluginOrder);\n ReactInjection.EventPluginUtils.injectComponentTree(ReactDOMComponentTree);\n ReactInjection.EventPluginUtils.injectTreeTraversal(ReactDOMTreeTraversal);\n\n /**\n * Some important event plugins included by default (without having to require\n * them).\n */\n ReactInjection.EventPluginHub.injectEventPluginsByName({\n SimpleEventPlugin: SimpleEventPlugin,\n EnterLeaveEventPlugin: EnterLeaveEventPlugin,\n ChangeEventPlugin: ChangeEventPlugin,\n SelectEventPlugin: SelectEventPlugin,\n BeforeInputEventPlugin: BeforeInputEventPlugin\n });\n\n ReactInjection.HostComponent.injectGenericComponentClass(ReactDOMComponent);\n\n ReactInjection.HostComponent.injectTextComponentClass(ReactDOMTextComponent);\n\n ReactInjection.DOMProperty.injectDOMPropertyConfig(HTMLDOMPropertyConfig);\n ReactInjection.DOMProperty.injectDOMPropertyConfig(SVGDOMPropertyConfig);\n\n ReactInjection.EmptyComponent.injectEmptyComponentFactory(function (instantiate) {\n return new ReactDOMEmptyComponent(instantiate);\n });\n\n ReactInjection.Updates.injectReconcileTransaction(ReactReconcileTransaction);\n ReactInjection.Updates.injectBatchingStrategy(ReactDefaultBatchingStrategy);\n\n ReactInjection.Component.injectEnvironment(ReactComponentBrowserEnvironment);\n}\n\nmodule.exports = {\n inject: inject\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactDefaultInjection.js\n ** module id = 48\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule BeforeInputEventPlugin\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar EventPropagators = require('./EventPropagators');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar FallbackCompositionState = require('./FallbackCompositionState');\nvar SyntheticCompositionEvent = require('./SyntheticCompositionEvent');\nvar SyntheticInputEvent = require('./SyntheticInputEvent');\n\nvar keyOf = require('fbjs/lib/keyOf');\n\nvar END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space\nvar START_KEYCODE = 229;\n\nvar canUseCompositionEvent = ExecutionEnvironment.canUseDOM && 'CompositionEvent' in window;\n\nvar documentMode = null;\nif (ExecutionEnvironment.canUseDOM && 'documentMode' in document) {\n documentMode = document.documentMode;\n}\n\n// Webkit offers a very useful `textInput` event that can be used to\n// directly represent `beforeInput`. The IE `textinput` event is not as\n// useful, so we don't use it.\nvar canUseTextInputEvent = ExecutionEnvironment.canUseDOM && 'TextEvent' in window && !documentMode && !isPresto();\n\n// In IE9+, we have access to composition events, but the data supplied\n// by the native compositionend event may be incorrect. Japanese ideographic\n// spaces, for instance (\\u3000) are not recorded correctly.\nvar useFallbackCompositionData = ExecutionEnvironment.canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11);\n\n/**\n * Opera <= 12 includes TextEvent in window, but does not fire\n * text input events. Rely on keypress instead.\n */\nfunction isPresto() {\n var opera = window.opera;\n return typeof opera === 'object' && typeof opera.version === 'function' && parseInt(opera.version(), 10) <= 12;\n}\n\nvar SPACEBAR_CODE = 32;\nvar SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE);\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\n// Events and their corresponding property names.\nvar eventTypes = {\n beforeInput: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onBeforeInput: null }),\n captured: keyOf({ onBeforeInputCapture: null })\n },\n dependencies: [topLevelTypes.topCompositionEnd, topLevelTypes.topKeyPress, topLevelTypes.topTextInput, topLevelTypes.topPaste]\n },\n compositionEnd: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onCompositionEnd: null }),\n captured: keyOf({ onCompositionEndCapture: null })\n },\n dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionEnd, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]\n },\n compositionStart: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onCompositionStart: null }),\n captured: keyOf({ onCompositionStartCapture: null })\n },\n dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionStart, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]\n },\n compositionUpdate: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onCompositionUpdate: null }),\n captured: keyOf({ onCompositionUpdateCapture: null })\n },\n dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionUpdate, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]\n }\n};\n\n// Track whether we've ever handled a keypress on the space key.\nvar hasSpaceKeypress = false;\n\n/**\n * Return whether a native keypress event is assumed to be a command.\n * This is required because Firefox fires `keypress` events for key commands\n * (cut, copy, select-all, etc.) even though no character is inserted.\n */\nfunction isKeypressCommand(nativeEvent) {\n return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) &&\n // ctrlKey && altKey is equivalent to AltGr, and is not a command.\n !(nativeEvent.ctrlKey && nativeEvent.altKey);\n}\n\n/**\n * Translate native top level events into event types.\n *\n * @param {string} topLevelType\n * @return {object}\n */\nfunction getCompositionEventType(topLevelType) {\n switch (topLevelType) {\n case topLevelTypes.topCompositionStart:\n return eventTypes.compositionStart;\n case topLevelTypes.topCompositionEnd:\n return eventTypes.compositionEnd;\n case topLevelTypes.topCompositionUpdate:\n return eventTypes.compositionUpdate;\n }\n}\n\n/**\n * Does our fallback best-guess model think this event signifies that\n * composition has begun?\n *\n * @param {string} topLevelType\n * @param {object} nativeEvent\n * @return {boolean}\n */\nfunction isFallbackCompositionStart(topLevelType, nativeEvent) {\n return topLevelType === topLevelTypes.topKeyDown && nativeEvent.keyCode === START_KEYCODE;\n}\n\n/**\n * Does our fallback mode think that this event is the end of composition?\n *\n * @param {string} topLevelType\n * @param {object} nativeEvent\n * @return {boolean}\n */\nfunction isFallbackCompositionEnd(topLevelType, nativeEvent) {\n switch (topLevelType) {\n case topLevelTypes.topKeyUp:\n // Command keys insert or clear IME input.\n return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1;\n case topLevelTypes.topKeyDown:\n // Expect IME keyCode on each keydown. If we get any other\n // code we must have exited earlier.\n return nativeEvent.keyCode !== START_KEYCODE;\n case topLevelTypes.topKeyPress:\n case topLevelTypes.topMouseDown:\n case topLevelTypes.topBlur:\n // Events are not possible without cancelling IME.\n return true;\n default:\n return false;\n }\n}\n\n/**\n * Google Input Tools provides composition data via a CustomEvent,\n * with the `data` property populated in the `detail` object. If this\n * is available on the event object, use it. If not, this is a plain\n * composition event and we have nothing special to extract.\n *\n * @param {object} nativeEvent\n * @return {?string}\n */\nfunction getDataFromCustomEvent(nativeEvent) {\n var detail = nativeEvent.detail;\n if (typeof detail === 'object' && 'data' in detail) {\n return detail.data;\n }\n return null;\n}\n\n// Track the current IME composition fallback object, if any.\nvar currentComposition = null;\n\n/**\n * @return {?object} A SyntheticCompositionEvent.\n */\nfunction extractCompositionEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n var eventType;\n var fallbackData;\n\n if (canUseCompositionEvent) {\n eventType = getCompositionEventType(topLevelType);\n } else if (!currentComposition) {\n if (isFallbackCompositionStart(topLevelType, nativeEvent)) {\n eventType = eventTypes.compositionStart;\n }\n } else if (isFallbackCompositionEnd(topLevelType, nativeEvent)) {\n eventType = eventTypes.compositionEnd;\n }\n\n if (!eventType) {\n return null;\n }\n\n if (useFallbackCompositionData) {\n // The current composition is stored statically and must not be\n // overwritten while composition continues.\n if (!currentComposition && eventType === eventTypes.compositionStart) {\n currentComposition = FallbackCompositionState.getPooled(nativeEventTarget);\n } else if (eventType === eventTypes.compositionEnd) {\n if (currentComposition) {\n fallbackData = currentComposition.getData();\n }\n }\n }\n\n var event = SyntheticCompositionEvent.getPooled(eventType, targetInst, nativeEvent, nativeEventTarget);\n\n if (fallbackData) {\n // Inject data generated from fallback path into the synthetic event.\n // This matches the property of native CompositionEventInterface.\n event.data = fallbackData;\n } else {\n var customData = getDataFromCustomEvent(nativeEvent);\n if (customData !== null) {\n event.data = customData;\n }\n }\n\n EventPropagators.accumulateTwoPhaseDispatches(event);\n return event;\n}\n\n/**\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {object} nativeEvent Native browser event.\n * @return {?string} The string corresponding to this `beforeInput` event.\n */\nfunction getNativeBeforeInputChars(topLevelType, nativeEvent) {\n switch (topLevelType) {\n case topLevelTypes.topCompositionEnd:\n return getDataFromCustomEvent(nativeEvent);\n case topLevelTypes.topKeyPress:\n /**\n * If native `textInput` events are available, our goal is to make\n * use of them. However, there is a special case: the spacebar key.\n * In Webkit, preventing default on a spacebar `textInput` event\n * cancels character insertion, but it *also* causes the browser\n * to fall back to its default spacebar behavior of scrolling the\n * page.\n *\n * Tracking at:\n * https://code.google.com/p/chromium/issues/detail?id=355103\n *\n * To avoid this issue, use the keypress event as if no `textInput`\n * event is available.\n */\n var which = nativeEvent.which;\n if (which !== SPACEBAR_CODE) {\n return null;\n }\n\n hasSpaceKeypress = true;\n return SPACEBAR_CHAR;\n\n case topLevelTypes.topTextInput:\n // Record the characters to be added to the DOM.\n var chars = nativeEvent.data;\n\n // If it's a spacebar character, assume that we have already handled\n // it at the keypress level and bail immediately. Android Chrome\n // doesn't give us keycodes, so we need to blacklist it.\n if (chars === SPACEBAR_CHAR && hasSpaceKeypress) {\n return null;\n }\n\n return chars;\n\n default:\n // For other native event types, do nothing.\n return null;\n }\n}\n\n/**\n * For browsers that do not provide the `textInput` event, extract the\n * appropriate string to use for SyntheticInputEvent.\n *\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {object} nativeEvent Native browser event.\n * @return {?string} The fallback string for this `beforeInput` event.\n */\nfunction getFallbackBeforeInputChars(topLevelType, nativeEvent) {\n // If we are currently composing (IME) and using a fallback to do so,\n // try to extract the composed characters from the fallback object.\n // If composition event is available, we extract a string only at\n // compositionevent, otherwise extract it at fallback events.\n if (currentComposition) {\n if (topLevelType === topLevelTypes.topCompositionEnd || !canUseCompositionEvent && isFallbackCompositionEnd(topLevelType, nativeEvent)) {\n var chars = currentComposition.getData();\n FallbackCompositionState.release(currentComposition);\n currentComposition = null;\n return chars;\n }\n return null;\n }\n\n switch (topLevelType) {\n case topLevelTypes.topPaste:\n // If a paste event occurs after a keypress, throw out the input\n // chars. Paste events should not lead to BeforeInput events.\n return null;\n case topLevelTypes.topKeyPress:\n /**\n * As of v27, Firefox may fire keypress events even when no character\n * will be inserted. A few possibilities:\n *\n * - `which` is `0`. Arrow keys, Esc key, etc.\n *\n * - `which` is the pressed key code, but no char is available.\n * Ex: 'AltGr + d` in Polish. There is no modified character for\n * this key combination and no character is inserted into the\n * document, but FF fires the keypress for char code `100` anyway.\n * No `input` event will occur.\n *\n * - `which` is the pressed key code, but a command combination is\n * being used. Ex: `Cmd+C`. No character is inserted, and no\n * `input` event will occur.\n */\n if (nativeEvent.which && !isKeypressCommand(nativeEvent)) {\n return String.fromCharCode(nativeEvent.which);\n }\n return null;\n case topLevelTypes.topCompositionEnd:\n return useFallbackCompositionData ? null : nativeEvent.data;\n default:\n return null;\n }\n}\n\n/**\n * Extract a SyntheticInputEvent for `beforeInput`, based on either native\n * `textInput` or fallback behavior.\n *\n * @return {?object} A SyntheticInputEvent.\n */\nfunction extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n var chars;\n\n if (canUseTextInputEvent) {\n chars = getNativeBeforeInputChars(topLevelType, nativeEvent);\n } else {\n chars = getFallbackBeforeInputChars(topLevelType, nativeEvent);\n }\n\n // If no characters are being inserted, no BeforeInput event should\n // be fired.\n if (!chars) {\n return null;\n }\n\n var event = SyntheticInputEvent.getPooled(eventTypes.beforeInput, targetInst, nativeEvent, nativeEventTarget);\n\n event.data = chars;\n EventPropagators.accumulateTwoPhaseDispatches(event);\n return event;\n}\n\n/**\n * Create an `onBeforeInput` event to match\n * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.\n *\n * This event plugin is based on the native `textInput` event\n * available in Chrome, Safari, Opera, and IE. This event fires after\n * `onKeyPress` and `onCompositionEnd`, but before `onInput`.\n *\n * `beforeInput` is spec'd but not implemented in any browsers, and\n * the `input` event does not provide any useful information about what has\n * actually been added, contrary to the spec. Thus, `textInput` is the best\n * available event to identify the characters that have actually been inserted\n * into the target node.\n *\n * This plugin is also responsible for emitting `composition` events, thus\n * allowing us to share composition fallback code for both `beforeInput` and\n * `composition` event types.\n */\nvar BeforeInputEventPlugin = {\n\n eventTypes: eventTypes,\n\n extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n return [extractCompositionEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget), extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget)];\n }\n};\n\nmodule.exports = BeforeInputEventPlugin;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/BeforeInputEventPlugin.js\n ** module id = 49\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventConstants\n */\n\n'use strict';\n\nvar keyMirror = require('fbjs/lib/keyMirror');\n\nvar PropagationPhases = keyMirror({ bubbled: null, captured: null });\n\n/**\n * Types of raw signals from the browser caught at the top level.\n */\nvar topLevelTypes = keyMirror({\n topAbort: null,\n topAnimationEnd: null,\n topAnimationIteration: null,\n topAnimationStart: null,\n topBlur: null,\n topCanPlay: null,\n topCanPlayThrough: null,\n topChange: null,\n topClick: null,\n topCompositionEnd: null,\n topCompositionStart: null,\n topCompositionUpdate: null,\n topContextMenu: null,\n topCopy: null,\n topCut: null,\n topDoubleClick: null,\n topDrag: null,\n topDragEnd: null,\n topDragEnter: null,\n topDragExit: null,\n topDragLeave: null,\n topDragOver: null,\n topDragStart: null,\n topDrop: null,\n topDurationChange: null,\n topEmptied: null,\n topEncrypted: null,\n topEnded: null,\n topError: null,\n topFocus: null,\n topInput: null,\n topInvalid: null,\n topKeyDown: null,\n topKeyPress: null,\n topKeyUp: null,\n topLoad: null,\n topLoadedData: null,\n topLoadedMetadata: null,\n topLoadStart: null,\n topMouseDown: null,\n topMouseMove: null,\n topMouseOut: null,\n topMouseOver: null,\n topMouseUp: null,\n topPaste: null,\n topPause: null,\n topPlay: null,\n topPlaying: null,\n topProgress: null,\n topRateChange: null,\n topReset: null,\n topScroll: null,\n topSeeked: null,\n topSeeking: null,\n topSelectionChange: null,\n topStalled: null,\n topSubmit: null,\n topSuspend: null,\n topTextInput: null,\n topTimeUpdate: null,\n topTouchCancel: null,\n topTouchEnd: null,\n topTouchMove: null,\n topTouchStart: null,\n topTransitionEnd: null,\n topVolumeChange: null,\n topWaiting: null,\n topWheel: null\n});\n\nvar EventConstants = {\n topLevelTypes: topLevelTypes,\n PropagationPhases: PropagationPhases\n};\n\nmodule.exports = EventConstants;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EventConstants.js\n ** module id = 50\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventPropagators\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar EventPluginHub = require('./EventPluginHub');\nvar EventPluginUtils = require('./EventPluginUtils');\n\nvar accumulateInto = require('./accumulateInto');\nvar forEachAccumulated = require('./forEachAccumulated');\nvar warning = require('fbjs/lib/warning');\n\nvar PropagationPhases = EventConstants.PropagationPhases;\nvar getListener = EventPluginHub.getListener;\n\n/**\n * Some event types have a notion of different registration names for different\n * \"phases\" of propagation. This finds listeners by a given phase.\n */\nfunction listenerAtPhase(inst, event, propagationPhase) {\n var registrationName = event.dispatchConfig.phasedRegistrationNames[propagationPhase];\n return getListener(inst, registrationName);\n}\n\n/**\n * Tags a `SyntheticEvent` with dispatched listeners. Creating this function\n * here, allows us to not have to bind or create functions for each event.\n * Mutating the event's members allows us to not have to create a wrapping\n * \"dispatch\" object that pairs the event with the listener.\n */\nfunction accumulateDirectionalDispatches(inst, upwards, event) {\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(inst, 'Dispatching inst must not be null') : void 0;\n }\n var phase = upwards ? PropagationPhases.bubbled : PropagationPhases.captured;\n var listener = listenerAtPhase(inst, event, phase);\n if (listener) {\n event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);\n event._dispatchInstances = accumulateInto(event._dispatchInstances, inst);\n }\n}\n\n/**\n * Collect dispatches (must be entirely collected before dispatching - see unit\n * tests). Lazily allocate the array to conserve memory. We must loop through\n * each event and perform the traversal for each one. We cannot perform a\n * single traversal for the entire collection of events because each event may\n * have a different target.\n */\nfunction accumulateTwoPhaseDispatchesSingle(event) {\n if (event && event.dispatchConfig.phasedRegistrationNames) {\n EventPluginUtils.traverseTwoPhase(event._targetInst, accumulateDirectionalDispatches, event);\n }\n}\n\n/**\n * Same as `accumulateTwoPhaseDispatchesSingle`, but skips over the targetID.\n */\nfunction accumulateTwoPhaseDispatchesSingleSkipTarget(event) {\n if (event && event.dispatchConfig.phasedRegistrationNames) {\n var targetInst = event._targetInst;\n var parentInst = targetInst ? EventPluginUtils.getParentInstance(targetInst) : null;\n EventPluginUtils.traverseTwoPhase(parentInst, accumulateDirectionalDispatches, event);\n }\n}\n\n/**\n * Accumulates without regard to direction, does not look for phased\n * registration names. Same as `accumulateDirectDispatchesSingle` but without\n * requiring that the `dispatchMarker` be the same as the dispatched ID.\n */\nfunction accumulateDispatches(inst, ignoredDirection, event) {\n if (event && event.dispatchConfig.registrationName) {\n var registrationName = event.dispatchConfig.registrationName;\n var listener = getListener(inst, registrationName);\n if (listener) {\n event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);\n event._dispatchInstances = accumulateInto(event._dispatchInstances, inst);\n }\n }\n}\n\n/**\n * Accumulates dispatches on an `SyntheticEvent`, but only for the\n * `dispatchMarker`.\n * @param {SyntheticEvent} event\n */\nfunction accumulateDirectDispatchesSingle(event) {\n if (event && event.dispatchConfig.registrationName) {\n accumulateDispatches(event._targetInst, null, event);\n }\n}\n\nfunction accumulateTwoPhaseDispatches(events) {\n forEachAccumulated(events, accumulateTwoPhaseDispatchesSingle);\n}\n\nfunction accumulateTwoPhaseDispatchesSkipTarget(events) {\n forEachAccumulated(events, accumulateTwoPhaseDispatchesSingleSkipTarget);\n}\n\nfunction accumulateEnterLeaveDispatches(leave, enter, from, to) {\n EventPluginUtils.traverseEnterLeave(from, to, accumulateDispatches, leave, enter);\n}\n\nfunction accumulateDirectDispatches(events) {\n forEachAccumulated(events, accumulateDirectDispatchesSingle);\n}\n\n/**\n * A small set of propagation patterns, each of which will accept a small amount\n * of information, and generate a set of \"dispatch ready event objects\" - which\n * are sets of events that have already been annotated with a set of dispatched\n * listener functions/ids. The API is designed this way to discourage these\n * propagation strategies from actually executing the dispatches, since we\n * always want to collect the entire set of dispatches before executing event a\n * single one.\n *\n * @constructor EventPropagators\n */\nvar EventPropagators = {\n accumulateTwoPhaseDispatches: accumulateTwoPhaseDispatches,\n accumulateTwoPhaseDispatchesSkipTarget: accumulateTwoPhaseDispatchesSkipTarget,\n accumulateDirectDispatches: accumulateDirectDispatches,\n accumulateEnterLeaveDispatches: accumulateEnterLeaveDispatches\n};\n\nmodule.exports = EventPropagators;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EventPropagators.js\n ** module id = 51\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventPluginHub\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar EventPluginRegistry = require('./EventPluginRegistry');\nvar EventPluginUtils = require('./EventPluginUtils');\nvar ReactErrorUtils = require('./ReactErrorUtils');\n\nvar accumulateInto = require('./accumulateInto');\nvar forEachAccumulated = require('./forEachAccumulated');\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Internal store for event listeners\n */\nvar listenerBank = {};\n\n/**\n * Internal queue of events that have accumulated their dispatches and are\n * waiting to have their dispatches executed.\n */\nvar eventQueue = null;\n\n/**\n * Dispatches an event and releases it back into the pool, unless persistent.\n *\n * @param {?object} event Synthetic event to be dispatched.\n * @param {boolean} simulated If the event is simulated (changes exn behavior)\n * @private\n */\nvar executeDispatchesAndRelease = function (event, simulated) {\n if (event) {\n EventPluginUtils.executeDispatchesInOrder(event, simulated);\n\n if (!event.isPersistent()) {\n event.constructor.release(event);\n }\n }\n};\nvar executeDispatchesAndReleaseSimulated = function (e) {\n return executeDispatchesAndRelease(e, true);\n};\nvar executeDispatchesAndReleaseTopLevel = function (e) {\n return executeDispatchesAndRelease(e, false);\n};\n\nvar getDictionaryKey = function (inst) {\n // Prevents V8 performance issue:\n // https://github.com/facebook/react/pull/7232\n return '.' + inst._rootNodeID;\n};\n\n/**\n * This is a unified interface for event plugins to be installed and configured.\n *\n * Event plugins can implement the following properties:\n *\n * `extractEvents` {function(string, DOMEventTarget, string, object): *}\n * Required. When a top-level event is fired, this method is expected to\n * extract synthetic events that will in turn be queued and dispatched.\n *\n * `eventTypes` {object}\n * Optional, plugins that fire events must publish a mapping of registration\n * names that are used to register listeners. Values of this mapping must\n * be objects that contain `registrationName` or `phasedRegistrationNames`.\n *\n * `executeDispatch` {function(object, function, string)}\n * Optional, allows plugins to override how an event gets dispatched. By\n * default, the listener is simply invoked.\n *\n * Each plugin that is injected into `EventsPluginHub` is immediately operable.\n *\n * @public\n */\nvar EventPluginHub = {\n\n /**\n * Methods for injecting dependencies.\n */\n injection: {\n\n /**\n * @param {array} InjectedEventPluginOrder\n * @public\n */\n injectEventPluginOrder: EventPluginRegistry.injectEventPluginOrder,\n\n /**\n * @param {object} injectedNamesToPlugins Map from names to plugin modules.\n */\n injectEventPluginsByName: EventPluginRegistry.injectEventPluginsByName\n\n },\n\n /**\n * Stores `listener` at `listenerBank[registrationName][key]`. Is idempotent.\n *\n * @param {object} inst The instance, which is the source of events.\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n * @param {function} listener The callback to store.\n */\n putListener: function (inst, registrationName, listener) {\n !(typeof listener === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected %s listener to be a function, instead got type %s', registrationName, typeof listener) : _prodInvariant('94', registrationName, typeof listener) : void 0;\n\n var key = getDictionaryKey(inst);\n var bankForRegistrationName = listenerBank[registrationName] || (listenerBank[registrationName] = {});\n bankForRegistrationName[key] = listener;\n\n var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];\n if (PluginModule && PluginModule.didPutListener) {\n PluginModule.didPutListener(inst, registrationName, listener);\n }\n },\n\n /**\n * @param {object} inst The instance, which is the source of events.\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n * @return {?function} The stored callback.\n */\n getListener: function (inst, registrationName) {\n var bankForRegistrationName = listenerBank[registrationName];\n var key = getDictionaryKey(inst);\n return bankForRegistrationName && bankForRegistrationName[key];\n },\n\n /**\n * Deletes a listener from the registration bank.\n *\n * @param {object} inst The instance, which is the source of events.\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n */\n deleteListener: function (inst, registrationName) {\n var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];\n if (PluginModule && PluginModule.willDeleteListener) {\n PluginModule.willDeleteListener(inst, registrationName);\n }\n\n var bankForRegistrationName = listenerBank[registrationName];\n // TODO: This should never be null -- when is it?\n if (bankForRegistrationName) {\n var key = getDictionaryKey(inst);\n delete bankForRegistrationName[key];\n }\n },\n\n /**\n * Deletes all listeners for the DOM element with the supplied ID.\n *\n * @param {object} inst The instance, which is the source of events.\n */\n deleteAllListeners: function (inst) {\n var key = getDictionaryKey(inst);\n for (var registrationName in listenerBank) {\n if (!listenerBank.hasOwnProperty(registrationName)) {\n continue;\n }\n\n if (!listenerBank[registrationName][key]) {\n continue;\n }\n\n var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];\n if (PluginModule && PluginModule.willDeleteListener) {\n PluginModule.willDeleteListener(inst, registrationName);\n }\n\n delete listenerBank[registrationName][key];\n }\n },\n\n /**\n * Allows registered plugins an opportunity to extract events from top-level\n * native browser events.\n *\n * @return {*} An accumulation of synthetic events.\n * @internal\n */\n extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n var events;\n var plugins = EventPluginRegistry.plugins;\n for (var i = 0; i < plugins.length; i++) {\n // Not every plugin in the ordering may be loaded at runtime.\n var possiblePlugin = plugins[i];\n if (possiblePlugin) {\n var extractedEvents = possiblePlugin.extractEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget);\n if (extractedEvents) {\n events = accumulateInto(events, extractedEvents);\n }\n }\n }\n return events;\n },\n\n /**\n * Enqueues a synthetic event that should be dispatched when\n * `processEventQueue` is invoked.\n *\n * @param {*} events An accumulation of synthetic events.\n * @internal\n */\n enqueueEvents: function (events) {\n if (events) {\n eventQueue = accumulateInto(eventQueue, events);\n }\n },\n\n /**\n * Dispatches all synthetic events on the event queue.\n *\n * @internal\n */\n processEventQueue: function (simulated) {\n // Set `eventQueue` to null before processing it so that we can tell if more\n // events get enqueued while processing.\n var processingEventQueue = eventQueue;\n eventQueue = null;\n if (simulated) {\n forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseSimulated);\n } else {\n forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseTopLevel);\n }\n !!eventQueue ? process.env.NODE_ENV !== 'production' ? invariant(false, 'processEventQueue(): Additional events were enqueued while processing an event queue. Support for this has not yet been implemented.') : _prodInvariant('95') : void 0;\n // This would be a good time to rethrow if any of the event handlers threw.\n ReactErrorUtils.rethrowCaughtError();\n },\n\n /**\n * These are needed for tests only. Do not use!\n */\n __purge: function () {\n listenerBank = {};\n },\n\n __getListenerBank: function () {\n return listenerBank;\n }\n\n};\n\nmodule.exports = EventPluginHub;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EventPluginHub.js\n ** module id = 52\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventPluginRegistry\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Injectable ordering of event plugins.\n */\nvar EventPluginOrder = null;\n\n/**\n * Injectable mapping from names to event plugin modules.\n */\nvar namesToPlugins = {};\n\n/**\n * Recomputes the plugin list using the injected plugins and plugin ordering.\n *\n * @private\n */\nfunction recomputePluginOrdering() {\n if (!EventPluginOrder) {\n // Wait until an `EventPluginOrder` is injected.\n return;\n }\n for (var pluginName in namesToPlugins) {\n var PluginModule = namesToPlugins[pluginName];\n var pluginIndex = EventPluginOrder.indexOf(pluginName);\n !(pluginIndex > -1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugins that do not exist in the plugin ordering, `%s`.', pluginName) : _prodInvariant('96', pluginName) : void 0;\n if (EventPluginRegistry.plugins[pluginIndex]) {\n continue;\n }\n !PluginModule.extractEvents ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Event plugins must implement an `extractEvents` method, but `%s` does not.', pluginName) : _prodInvariant('97', pluginName) : void 0;\n EventPluginRegistry.plugins[pluginIndex] = PluginModule;\n var publishedEvents = PluginModule.eventTypes;\n for (var eventName in publishedEvents) {\n !publishEventForPlugin(publishedEvents[eventName], PluginModule, eventName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.', eventName, pluginName) : _prodInvariant('98', eventName, pluginName) : void 0;\n }\n }\n}\n\n/**\n * Publishes an event so that it can be dispatched by the supplied plugin.\n *\n * @param {object} dispatchConfig Dispatch configuration for the event.\n * @param {object} PluginModule Plugin publishing the event.\n * @return {boolean} True if the event was successfully published.\n * @private\n */\nfunction publishEventForPlugin(dispatchConfig, PluginModule, eventName) {\n !!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same event name, `%s`.', eventName) : _prodInvariant('99', eventName) : void 0;\n EventPluginRegistry.eventNameDispatchConfigs[eventName] = dispatchConfig;\n\n var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;\n if (phasedRegistrationNames) {\n for (var phaseName in phasedRegistrationNames) {\n if (phasedRegistrationNames.hasOwnProperty(phaseName)) {\n var phasedRegistrationName = phasedRegistrationNames[phaseName];\n publishRegistrationName(phasedRegistrationName, PluginModule, eventName);\n }\n }\n return true;\n } else if (dispatchConfig.registrationName) {\n publishRegistrationName(dispatchConfig.registrationName, PluginModule, eventName);\n return true;\n }\n return false;\n}\n\n/**\n * Publishes a registration name that is used to identify dispatched events and\n * can be used with `EventPluginHub.putListener` to register listeners.\n *\n * @param {string} registrationName Registration name to add.\n * @param {object} PluginModule Plugin publishing the event.\n * @private\n */\nfunction publishRegistrationName(registrationName, PluginModule, eventName) {\n !!EventPluginRegistry.registrationNameModules[registrationName] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same registration name, `%s`.', registrationName) : _prodInvariant('100', registrationName) : void 0;\n EventPluginRegistry.registrationNameModules[registrationName] = PluginModule;\n EventPluginRegistry.registrationNameDependencies[registrationName] = PluginModule.eventTypes[eventName].dependencies;\n\n if (process.env.NODE_ENV !== 'production') {\n var lowerCasedName = registrationName.toLowerCase();\n EventPluginRegistry.possibleRegistrationNames[lowerCasedName] = registrationName;\n\n if (registrationName === 'onDoubleClick') {\n EventPluginRegistry.possibleRegistrationNames.ondblclick = registrationName;\n }\n }\n}\n\n/**\n * Registers plugins so that they can extract and dispatch events.\n *\n * @see {EventPluginHub}\n */\nvar EventPluginRegistry = {\n\n /**\n * Ordered list of injected plugins.\n */\n plugins: [],\n\n /**\n * Mapping from event name to dispatch config\n */\n eventNameDispatchConfigs: {},\n\n /**\n * Mapping from registration name to plugin module\n */\n registrationNameModules: {},\n\n /**\n * Mapping from registration name to event name\n */\n registrationNameDependencies: {},\n\n /**\n * Mapping from lowercase registration names to the properly cased version,\n * used to warn in the case of missing event handlers. Available\n * only in __DEV__.\n * @type {Object}\n */\n possibleRegistrationNames: process.env.NODE_ENV !== 'production' ? {} : null,\n\n /**\n * Injects an ordering of plugins (by plugin name). This allows the ordering\n * to be decoupled from injection of the actual plugins so that ordering is\n * always deterministic regardless of packaging, on-the-fly injection, etc.\n *\n * @param {array} InjectedEventPluginOrder\n * @internal\n * @see {EventPluginHub.injection.injectEventPluginOrder}\n */\n injectEventPluginOrder: function (InjectedEventPluginOrder) {\n !!EventPluginOrder ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugin ordering more than once. You are likely trying to load more than one copy of React.') : _prodInvariant('101') : void 0;\n // Clone the ordering so it cannot be dynamically mutated.\n EventPluginOrder = Array.prototype.slice.call(InjectedEventPluginOrder);\n recomputePluginOrdering();\n },\n\n /**\n * Injects plugins to be used by `EventPluginHub`. The plugin names must be\n * in the ordering injected by `injectEventPluginOrder`.\n *\n * Plugins can be injected as part of page initialization or on-the-fly.\n *\n * @param {object} injectedNamesToPlugins Map from names to plugin modules.\n * @internal\n * @see {EventPluginHub.injection.injectEventPluginsByName}\n */\n injectEventPluginsByName: function (injectedNamesToPlugins) {\n var isOrderingDirty = false;\n for (var pluginName in injectedNamesToPlugins) {\n if (!injectedNamesToPlugins.hasOwnProperty(pluginName)) {\n continue;\n }\n var PluginModule = injectedNamesToPlugins[pluginName];\n if (!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== PluginModule) {\n !!namesToPlugins[pluginName] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject two different event plugins using the same name, `%s`.', pluginName) : _prodInvariant('102', pluginName) : void 0;\n namesToPlugins[pluginName] = PluginModule;\n isOrderingDirty = true;\n }\n }\n if (isOrderingDirty) {\n recomputePluginOrdering();\n }\n },\n\n /**\n * Looks up the plugin for the supplied event.\n *\n * @param {object} event A synthetic event.\n * @return {?object} The plugin that created the supplied event.\n * @internal\n */\n getPluginModuleForEvent: function (event) {\n var dispatchConfig = event.dispatchConfig;\n if (dispatchConfig.registrationName) {\n return EventPluginRegistry.registrationNameModules[dispatchConfig.registrationName] || null;\n }\n for (var phase in dispatchConfig.phasedRegistrationNames) {\n if (!dispatchConfig.phasedRegistrationNames.hasOwnProperty(phase)) {\n continue;\n }\n var PluginModule = EventPluginRegistry.registrationNameModules[dispatchConfig.phasedRegistrationNames[phase]];\n if (PluginModule) {\n return PluginModule;\n }\n }\n return null;\n },\n\n /**\n * Exposed for unit testing.\n * @private\n */\n _resetEventPlugins: function () {\n EventPluginOrder = null;\n for (var pluginName in namesToPlugins) {\n if (namesToPlugins.hasOwnProperty(pluginName)) {\n delete namesToPlugins[pluginName];\n }\n }\n EventPluginRegistry.plugins.length = 0;\n\n var eventNameDispatchConfigs = EventPluginRegistry.eventNameDispatchConfigs;\n for (var eventName in eventNameDispatchConfigs) {\n if (eventNameDispatchConfigs.hasOwnProperty(eventName)) {\n delete eventNameDispatchConfigs[eventName];\n }\n }\n\n var registrationNameModules = EventPluginRegistry.registrationNameModules;\n for (var registrationName in registrationNameModules) {\n if (registrationNameModules.hasOwnProperty(registrationName)) {\n delete registrationNameModules[registrationName];\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n var possibleRegistrationNames = EventPluginRegistry.possibleRegistrationNames;\n for (var lowerCasedName in possibleRegistrationNames) {\n if (possibleRegistrationNames.hasOwnProperty(lowerCasedName)) {\n delete possibleRegistrationNames[lowerCasedName];\n }\n }\n }\n }\n\n};\n\nmodule.exports = EventPluginRegistry;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EventPluginRegistry.js\n ** module id = 53\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventPluginUtils\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar EventConstants = require('./EventConstants');\nvar ReactErrorUtils = require('./ReactErrorUtils');\n\nvar invariant = require('fbjs/lib/invariant');\nvar warning = require('fbjs/lib/warning');\n\n/**\n * Injected dependencies:\n */\n\n/**\n * - `ComponentTree`: [required] Module that can convert between React instances\n * and actual node references.\n */\nvar ComponentTree;\nvar TreeTraversal;\nvar injection = {\n injectComponentTree: function (Injected) {\n ComponentTree = Injected;\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(Injected && Injected.getNodeFromInstance && Injected.getInstanceFromNode, 'EventPluginUtils.injection.injectComponentTree(...): Injected ' + 'module is missing getNodeFromInstance or getInstanceFromNode.') : void 0;\n }\n },\n injectTreeTraversal: function (Injected) {\n TreeTraversal = Injected;\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== 'production' ? warning(Injected && Injected.isAncestor && Injected.getLowestCommonAncestor, 'EventPluginUtils.injection.injectTreeTraversal(...): Injected ' + 'module is missing isAncestor or getLowestCommonAncestor.') : void 0;\n }\n }\n};\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\nfunction isEndish(topLevelType) {\n return topLevelType === topLevelTypes.topMouseUp || topLevelType === topLevelTypes.topTouchEnd || topLevelType === topLevelTypes.topTouchCancel;\n}\n\nfunction isMoveish(topLevelType) {\n return topLevelType === topLevelTypes.topMouseMove || topLevelType === topLevelTypes.topTouchMove;\n}\nfunction isStartish(topLevelType) {\n return topLevelType === topLevelTypes.topMouseDown || topLevelType === topLevelTypes.topTouchStart;\n}\n\nvar validateEventDispatches;\nif (process.env.NODE_ENV !== 'production') {\n validateEventDispatches = function (event) {\n var dispatchListeners = event._dispatchListeners;\n var dispatchInstances = event._dispatchInstances;\n\n var listenersIsArr = Array.isArray(dispatchListeners);\n var listenersLen = listenersIsArr ? dispatchListeners.length : dispatchListeners ? 1 : 0;\n\n var instancesIsArr = Array.isArray(dispatchInstances);\n var instancesLen = instancesIsArr ? dispatchInstances.length : dispatchInstances ? 1 : 0;\n\n process.env.NODE_ENV !== 'production' ? warning(instancesIsArr === listenersIsArr && instancesLen === listenersLen, 'EventPluginUtils: Invalid `event`.') : void 0;\n };\n}\n\n/**\n * Dispatch the event to the listener.\n * @param {SyntheticEvent} event SyntheticEvent to handle\n * @param {boolean} simulated If the event is simulated (changes exn behavior)\n * @param {function} listener Application-level callback\n * @param {*} inst Internal component instance\n */\nfunction executeDispatch(event, simulated, listener, inst) {\n var type = event.type || 'unknown-event';\n event.currentTarget = EventPluginUtils.getNodeFromInstance(inst);\n if (simulated) {\n ReactErrorUtils.invokeGuardedCallbackWithCatch(type, listener, event);\n } else {\n ReactErrorUtils.invokeGuardedCallback(type, listener, event);\n }\n event.currentTarget = null;\n}\n\n/**\n * Standard/simple iteration through an event's collected dispatches.\n */\nfunction executeDispatchesInOrder(event, simulated) {\n var dispatchListeners = event._dispatchListeners;\n var dispatchInstances = event._dispatchInstances;\n if (process.env.NODE_ENV !== 'production') {\n validateEventDispatches(event);\n }\n if (Array.isArray(dispatchListeners)) {\n for (var i = 0; i < dispatchListeners.length; i++) {\n if (event.isPropagationStopped()) {\n break;\n }\n // Listeners and Instances are two parallel arrays that are always in sync.\n executeDispatch(event, simulated, dispatchListeners[i], dispatchInstances[i]);\n }\n } else if (dispatchListeners) {\n executeDispatch(event, simulated, dispatchListeners, dispatchInstances);\n }\n event._dispatchListeners = null;\n event._dispatchInstances = null;\n}\n\n/**\n * Standard/simple iteration through an event's collected dispatches, but stops\n * at the first dispatch execution returning true, and returns that id.\n *\n * @return {?string} id of the first dispatch execution who's listener returns\n * true, or null if no listener returned true.\n */\nfunction executeDispatchesInOrderStopAtTrueImpl(event) {\n var dispatchListeners = event._dispatchListeners;\n var dispatchInstances = event._dispatchInstances;\n if (process.env.NODE_ENV !== 'production') {\n validateEventDispatches(event);\n }\n if (Array.isArray(dispatchListeners)) {\n for (var i = 0; i < dispatchListeners.length; i++) {\n if (event.isPropagationStopped()) {\n break;\n }\n // Listeners and Instances are two parallel arrays that are always in sync.\n if (dispatchListeners[i](event, dispatchInstances[i])) {\n return dispatchInstances[i];\n }\n }\n } else if (dispatchListeners) {\n if (dispatchListeners(event, dispatchInstances)) {\n return dispatchInstances;\n }\n }\n return null;\n}\n\n/**\n * @see executeDispatchesInOrderStopAtTrueImpl\n */\nfunction executeDispatchesInOrderStopAtTrue(event) {\n var ret = executeDispatchesInOrderStopAtTrueImpl(event);\n event._dispatchInstances = null;\n event._dispatchListeners = null;\n return ret;\n}\n\n/**\n * Execution of a \"direct\" dispatch - there must be at most one dispatch\n * accumulated on the event or it is considered an error. It doesn't really make\n * sense for an event with multiple dispatches (bubbled) to keep track of the\n * return values at each dispatch execution, but it does tend to make sense when\n * dealing with \"direct\" dispatches.\n *\n * @return {*} The return value of executing the single dispatch.\n */\nfunction executeDirectDispatch(event) {\n if (process.env.NODE_ENV !== 'production') {\n validateEventDispatches(event);\n }\n var dispatchListener = event._dispatchListeners;\n var dispatchInstance = event._dispatchInstances;\n !!Array.isArray(dispatchListener) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'executeDirectDispatch(...): Invalid `event`.') : _prodInvariant('103') : void 0;\n event.currentTarget = dispatchListener ? EventPluginUtils.getNodeFromInstance(dispatchInstance) : null;\n var res = dispatchListener ? dispatchListener(event) : null;\n event.currentTarget = null;\n event._dispatchListeners = null;\n event._dispatchInstances = null;\n return res;\n}\n\n/**\n * @param {SyntheticEvent} event\n * @return {boolean} True iff number of dispatches accumulated is greater than 0.\n */\nfunction hasDispatches(event) {\n return !!event._dispatchListeners;\n}\n\n/**\n * General utilities that are useful in creating custom Event Plugins.\n */\nvar EventPluginUtils = {\n isEndish: isEndish,\n isMoveish: isMoveish,\n isStartish: isStartish,\n\n executeDirectDispatch: executeDirectDispatch,\n executeDispatchesInOrder: executeDispatchesInOrder,\n executeDispatchesInOrderStopAtTrue: executeDispatchesInOrderStopAtTrue,\n hasDispatches: hasDispatches,\n\n getInstanceFromNode: function (node) {\n return ComponentTree.getInstanceFromNode(node);\n },\n getNodeFromInstance: function (node) {\n return ComponentTree.getNodeFromInstance(node);\n },\n isAncestor: function (a, b) {\n return TreeTraversal.isAncestor(a, b);\n },\n getLowestCommonAncestor: function (a, b) {\n return TreeTraversal.getLowestCommonAncestor(a, b);\n },\n getParentInstance: function (inst) {\n return TreeTraversal.getParentInstance(inst);\n },\n traverseTwoPhase: function (target, fn, arg) {\n return TreeTraversal.traverseTwoPhase(target, fn, arg);\n },\n traverseEnterLeave: function (from, to, fn, argFrom, argTo) {\n return TreeTraversal.traverseEnterLeave(from, to, fn, argFrom, argTo);\n },\n\n injection: injection\n};\n\nmodule.exports = EventPluginUtils;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EventPluginUtils.js\n ** module id = 54\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactErrorUtils\n */\n\n'use strict';\n\nvar caughtError = null;\n\n/**\n * Call a function while guarding against errors that happens within it.\n *\n * @param {?String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} a First argument\n * @param {*} b Second argument\n */\nfunction invokeGuardedCallback(name, func, a, b) {\n try {\n return func(a, b);\n } catch (x) {\n if (caughtError === null) {\n caughtError = x;\n }\n return undefined;\n }\n}\n\nvar ReactErrorUtils = {\n invokeGuardedCallback: invokeGuardedCallback,\n\n /**\n * Invoked by ReactTestUtils.Simulate so that any errors thrown by the event\n * handler are sure to be rethrown by rethrowCaughtError.\n */\n invokeGuardedCallbackWithCatch: invokeGuardedCallback,\n\n /**\n * During execution of guarded functions we will capture the first error which\n * we will rethrow to be handled by the top level error handler.\n */\n rethrowCaughtError: function () {\n if (caughtError) {\n var error = caughtError;\n caughtError = null;\n throw error;\n }\n }\n};\n\nif (process.env.NODE_ENV !== 'production') {\n /**\n * To help development we can get better devtools integration by simulating a\n * real browser event.\n */\n if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') {\n var fakeNode = document.createElement('react');\n ReactErrorUtils.invokeGuardedCallback = function (name, func, a, b) {\n var boundFunc = func.bind(null, a, b);\n var evtType = 'react-' + name;\n fakeNode.addEventListener(evtType, boundFunc, false);\n var evt = document.createEvent('Event');\n evt.initEvent(evtType, false, false);\n fakeNode.dispatchEvent(evt);\n fakeNode.removeEventListener(evtType, boundFunc, false);\n };\n }\n}\n\nmodule.exports = ReactErrorUtils;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactErrorUtils.js\n ** module id = 55\n ** module chunks = 2\n **/","/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule accumulateInto\n * \n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * Accumulates items that must not be null or undefined into the first one. This\n * is used to conserve memory by avoiding array allocations, and thus sacrifices\n * API cleanness. Since `current` can be null before being passed in and not\n * null after this function, make sure to assign it back to `current`:\n *\n * `a = accumulateInto(a, b);`\n *\n * This API should be sparingly used. Try `accumulate` for something cleaner.\n *\n * @return {*|array<*>} An accumulation of items.\n */\n\nfunction accumulateInto(current, next) {\n !(next != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'accumulateInto(...): Accumulated items must not be null or undefined.') : _prodInvariant('30') : void 0;\n\n if (current == null) {\n return next;\n }\n\n // Both are not empty. Warning: Never call x.concat(y) when you are not\n // certain that x is an Array (x could be a string with concat method).\n if (Array.isArray(current)) {\n if (Array.isArray(next)) {\n current.push.apply(current, next);\n return current;\n }\n current.push(next);\n return current;\n }\n\n if (Array.isArray(next)) {\n // A bit too dangerous to mutate `next`.\n return [current].concat(next);\n }\n\n return [current, next];\n}\n\nmodule.exports = accumulateInto;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/accumulateInto.js\n ** module id = 56\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule forEachAccumulated\n * \n */\n\n'use strict';\n\n/**\n * @param {array} arr an \"accumulation\" of items which is either an Array or\n * a single item. Useful when paired with the `accumulate` module. This is a\n * simple utility that allows us to reason about a collection of items, but\n * handling the case when there is exactly one item (and we do not need to\n * allocate an array).\n */\n\nfunction forEachAccumulated(arr, cb, scope) {\n if (Array.isArray(arr)) {\n arr.forEach(cb, scope);\n } else if (arr) {\n cb.call(scope, arr);\n }\n}\n\nmodule.exports = forEachAccumulated;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/forEachAccumulated.js\n ** module id = 57\n ** module chunks = 2\n **/","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\n/**\n * Simple, lightweight module assisting with the detection and context of\n * Worker. Helps avoid circular dependencies and allows code to reason about\n * whether or not they are in a Worker, even if they never include the main\n * `ReactWorker` dependency.\n */\nvar ExecutionEnvironment = {\n\n canUseDOM: canUseDOM,\n\n canUseWorkers: typeof Worker !== 'undefined',\n\n canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent),\n\n canUseViewport: canUseDOM && !!window.screen,\n\n isInWorker: !canUseDOM // For now, this is true - might change in the future.\n\n};\n\nmodule.exports = ExecutionEnvironment;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/~/fbjs/lib/ExecutionEnvironment.js\n ** module id = 58\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule FallbackCompositionState\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar PooledClass = require('./PooledClass');\n\nvar getTextContentAccessor = require('./getTextContentAccessor');\n\n/**\n * This helper class stores information about text content of a target node,\n * allowing comparison of content before and after a given event.\n *\n * Identify the node where selection currently begins, then observe\n * both its text content and its current position in the DOM. Since the\n * browser may natively replace the target node during composition, we can\n * use its position to find its replacement.\n *\n * @param {DOMEventTarget} root\n */\nfunction FallbackCompositionState(root) {\n this._root = root;\n this._startText = this.getText();\n this._fallbackText = null;\n}\n\n_assign(FallbackCompositionState.prototype, {\n destructor: function () {\n this._root = null;\n this._startText = null;\n this._fallbackText = null;\n },\n\n /**\n * Get current text of input.\n *\n * @return {string}\n */\n getText: function () {\n if ('value' in this._root) {\n return this._root.value;\n }\n return this._root[getTextContentAccessor()];\n },\n\n /**\n * Determine the differing substring between the initially stored\n * text content and the current content.\n *\n * @return {string}\n */\n getData: function () {\n if (this._fallbackText) {\n return this._fallbackText;\n }\n\n var start;\n var startValue = this._startText;\n var startLength = startValue.length;\n var end;\n var endValue = this.getText();\n var endLength = endValue.length;\n\n for (start = 0; start < startLength; start++) {\n if (startValue[start] !== endValue[start]) {\n break;\n }\n }\n\n var minEnd = startLength - start;\n for (end = 1; end <= minEnd; end++) {\n if (startValue[startLength - end] !== endValue[endLength - end]) {\n break;\n }\n }\n\n var sliceTail = end > 1 ? 1 - end : undefined;\n this._fallbackText = endValue.slice(start, sliceTail);\n return this._fallbackText;\n }\n});\n\nPooledClass.addPoolingTo(FallbackCompositionState);\n\nmodule.exports = FallbackCompositionState;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/FallbackCompositionState.js\n ** module id = 59\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getTextContentAccessor\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\nvar contentKey = null;\n\n/**\n * Gets the key used to access text content on a DOM node.\n *\n * @return {?string} Key used to access text content.\n * @internal\n */\nfunction getTextContentAccessor() {\n if (!contentKey && ExecutionEnvironment.canUseDOM) {\n // Prefer textContent to innerText because many browsers support both but\n // SVG elements don't support innerText even when
does.\n contentKey = 'textContent' in document.documentElement ? 'textContent' : 'innerText';\n }\n return contentKey;\n}\n\nmodule.exports = getTextContentAccessor;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getTextContentAccessor.js\n ** module id = 60\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticCompositionEvent\n */\n\n'use strict';\n\nvar SyntheticEvent = require('./SyntheticEvent');\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents\n */\nvar CompositionEventInterface = {\n data: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticCompositionEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticCompositionEvent, CompositionEventInterface);\n\nmodule.exports = SyntheticCompositionEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticCompositionEvent.js\n ** module id = 61\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticEvent\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar PooledClass = require('./PooledClass');\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar warning = require('fbjs/lib/warning');\n\nvar didWarnForAddedNewProperty = false;\nvar isProxySupported = typeof Proxy === 'function';\n\nvar shouldBeReleasedProperties = ['dispatchConfig', '_targetInst', 'nativeEvent', 'isDefaultPrevented', 'isPropagationStopped', '_dispatchListeners', '_dispatchInstances'];\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar EventInterface = {\n type: null,\n target: null,\n // currentTarget is set when dispatching; no use in copying it here\n currentTarget: emptyFunction.thatReturnsNull,\n eventPhase: null,\n bubbles: null,\n cancelable: null,\n timeStamp: function (event) {\n return event.timeStamp || Date.now();\n },\n defaultPrevented: null,\n isTrusted: null\n};\n\n/**\n * Synthetic events are dispatched by event plugins, typically in response to a\n * top-level event delegation handler.\n *\n * These systems should generally use pooling to reduce the frequency of garbage\n * collection. The system should check `isPersistent` to determine whether the\n * event should be released into the pool after being dispatched. Users that\n * need a persisted event should invoke `persist`.\n *\n * Synthetic events (and subclasses) implement the DOM Level 3 Events API by\n * normalizing browser quirks. Subclasses do not necessarily have to implement a\n * DOM interface; custom application-specific events can also subclass this.\n *\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {*} targetInst Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @param {DOMEventTarget} nativeEventTarget Target node.\n */\nfunction SyntheticEvent(dispatchConfig, targetInst, nativeEvent, nativeEventTarget) {\n if (process.env.NODE_ENV !== 'production') {\n // these have a getter/setter for warnings\n delete this.nativeEvent;\n delete this.preventDefault;\n delete this.stopPropagation;\n }\n\n this.dispatchConfig = dispatchConfig;\n this._targetInst = targetInst;\n this.nativeEvent = nativeEvent;\n\n var Interface = this.constructor.Interface;\n for (var propName in Interface) {\n if (!Interface.hasOwnProperty(propName)) {\n continue;\n }\n if (process.env.NODE_ENV !== 'production') {\n delete this[propName]; // this has a getter/setter for warnings\n }\n var normalize = Interface[propName];\n if (normalize) {\n this[propName] = normalize(nativeEvent);\n } else {\n if (propName === 'target') {\n this.target = nativeEventTarget;\n } else {\n this[propName] = nativeEvent[propName];\n }\n }\n }\n\n var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false;\n if (defaultPrevented) {\n this.isDefaultPrevented = emptyFunction.thatReturnsTrue;\n } else {\n this.isDefaultPrevented = emptyFunction.thatReturnsFalse;\n }\n this.isPropagationStopped = emptyFunction.thatReturnsFalse;\n return this;\n}\n\n_assign(SyntheticEvent.prototype, {\n\n preventDefault: function () {\n this.defaultPrevented = true;\n var event = this.nativeEvent;\n if (!event) {\n return;\n }\n\n if (event.preventDefault) {\n event.preventDefault();\n } else if (typeof event.returnValue !== 'unknown') {\n // eslint-disable-line valid-typeof\n event.returnValue = false;\n }\n this.isDefaultPrevented = emptyFunction.thatReturnsTrue;\n },\n\n stopPropagation: function () {\n var event = this.nativeEvent;\n if (!event) {\n return;\n }\n\n if (event.stopPropagation) {\n event.stopPropagation();\n } else if (typeof event.cancelBubble !== 'unknown') {\n // eslint-disable-line valid-typeof\n // The ChangeEventPlugin registers a \"propertychange\" event for\n // IE. This event does not support bubbling or cancelling, and\n // any references to cancelBubble throw \"Member not found\". A\n // typeof check of \"unknown\" circumvents this issue (and is also\n // IE specific).\n event.cancelBubble = true;\n }\n\n this.isPropagationStopped = emptyFunction.thatReturnsTrue;\n },\n\n /**\n * We release all dispatched `SyntheticEvent`s after each event loop, adding\n * them back into the pool. This allows a way to hold onto a reference that\n * won't be added back into the pool.\n */\n persist: function () {\n this.isPersistent = emptyFunction.thatReturnsTrue;\n },\n\n /**\n * Checks if this event should be released back into the pool.\n *\n * @return {boolean} True if this should not be released, false otherwise.\n */\n isPersistent: emptyFunction.thatReturnsFalse,\n\n /**\n * `PooledClass` looks for `destructor` on each instance it releases.\n */\n destructor: function () {\n var Interface = this.constructor.Interface;\n for (var propName in Interface) {\n if (process.env.NODE_ENV !== 'production') {\n Object.defineProperty(this, propName, getPooledWarningPropertyDefinition(propName, Interface[propName]));\n } else {\n this[propName] = null;\n }\n }\n for (var i = 0; i < shouldBeReleasedProperties.length; i++) {\n this[shouldBeReleasedProperties[i]] = null;\n }\n if (process.env.NODE_ENV !== 'production') {\n Object.defineProperty(this, 'nativeEvent', getPooledWarningPropertyDefinition('nativeEvent', null));\n Object.defineProperty(this, 'preventDefault', getPooledWarningPropertyDefinition('preventDefault', emptyFunction));\n Object.defineProperty(this, 'stopPropagation', getPooledWarningPropertyDefinition('stopPropagation', emptyFunction));\n }\n }\n\n});\n\nSyntheticEvent.Interface = EventInterface;\n\nif (process.env.NODE_ENV !== 'production') {\n if (isProxySupported) {\n /*eslint-disable no-func-assign */\n SyntheticEvent = new Proxy(SyntheticEvent, {\n construct: function (target, args) {\n return this.apply(target, Object.create(target.prototype), args);\n },\n apply: function (constructor, that, args) {\n return new Proxy(constructor.apply(that, args), {\n set: function (target, prop, value) {\n if (prop !== 'isPersistent' && !target.constructor.Interface.hasOwnProperty(prop) && shouldBeReleasedProperties.indexOf(prop) === -1) {\n process.env.NODE_ENV !== 'production' ? warning(didWarnForAddedNewProperty || target.isPersistent(), 'This synthetic event is reused for performance reasons. If you\\'re ' + 'seeing this, you\\'re adding a new property in the synthetic event object. ' + 'The property is never released. See ' + 'https://fb.me/react-event-pooling for more information.') : void 0;\n didWarnForAddedNewProperty = true;\n }\n target[prop] = value;\n return true;\n }\n });\n }\n });\n /*eslint-enable no-func-assign */\n }\n}\n/**\n * Helper to reduce boilerplate when creating subclasses.\n *\n * @param {function} Class\n * @param {?object} Interface\n */\nSyntheticEvent.augmentClass = function (Class, Interface) {\n var Super = this;\n\n var E = function () {};\n E.prototype = Super.prototype;\n var prototype = new E();\n\n _assign(prototype, Class.prototype);\n Class.prototype = prototype;\n Class.prototype.constructor = Class;\n\n Class.Interface = _assign({}, Super.Interface, Interface);\n Class.augmentClass = Super.augmentClass;\n\n PooledClass.addPoolingTo(Class, PooledClass.fourArgumentPooler);\n};\n\nPooledClass.addPoolingTo(SyntheticEvent, PooledClass.fourArgumentPooler);\n\nmodule.exports = SyntheticEvent;\n\n/**\n * Helper to nullify syntheticEvent instance properties when destructing\n *\n * @param {object} SyntheticEvent\n * @param {String} propName\n * @return {object} defineProperty object\n */\nfunction getPooledWarningPropertyDefinition(propName, getVal) {\n var isFunction = typeof getVal === 'function';\n return {\n configurable: true,\n set: set,\n get: get\n };\n\n function set(val) {\n var action = isFunction ? 'setting the method' : 'setting the property';\n warn(action, 'This is effectively a no-op');\n return val;\n }\n\n function get() {\n var action = isFunction ? 'accessing the method' : 'accessing the property';\n var result = isFunction ? 'This is a no-op function' : 'This is set to null';\n warn(action, result);\n return getVal;\n }\n\n function warn(action, result) {\n var warningCondition = false;\n process.env.NODE_ENV !== 'production' ? warning(warningCondition, 'This synthetic event is reused for performance reasons. If you\\'re seeing this, ' + 'you\\'re %s `%s` on a released/nullified synthetic event. %s. ' + 'If you must keep the original synthetic event around, use event.persist(). ' + 'See https://fb.me/react-event-pooling for more information.', action, propName, result) : void 0;\n }\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticEvent.js\n ** module id = 62\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticInputEvent\n */\n\n'use strict';\n\nvar SyntheticEvent = require('./SyntheticEvent');\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105\n * /#events-inputevents\n */\nvar InputEventInterface = {\n data: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticInputEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticInputEvent, InputEventInterface);\n\nmodule.exports = SyntheticInputEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticInputEvent.js\n ** module id = 63\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ChangeEventPlugin\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar EventPluginHub = require('./EventPluginHub');\nvar EventPropagators = require('./EventPropagators');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactUpdates = require('./ReactUpdates');\nvar SyntheticEvent = require('./SyntheticEvent');\n\nvar getEventTarget = require('./getEventTarget');\nvar isEventSupported = require('./isEventSupported');\nvar isTextInputElement = require('./isTextInputElement');\nvar keyOf = require('fbjs/lib/keyOf');\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\nvar eventTypes = {\n change: {\n phasedRegistrationNames: {\n bubbled: keyOf({ onChange: null }),\n captured: keyOf({ onChangeCapture: null })\n },\n dependencies: [topLevelTypes.topBlur, topLevelTypes.topChange, topLevelTypes.topClick, topLevelTypes.topFocus, topLevelTypes.topInput, topLevelTypes.topKeyDown, topLevelTypes.topKeyUp, topLevelTypes.topSelectionChange]\n }\n};\n\n/**\n * For IE shims\n */\nvar activeElement = null;\nvar activeElementInst = null;\nvar activeElementValue = null;\nvar activeElementValueProp = null;\n\n/**\n * SECTION: handle `change` event\n */\nfunction shouldUseChangeEvent(elem) {\n var nodeName = elem.nodeName && elem.nodeName.toLowerCase();\n return nodeName === 'select' || nodeName === 'input' && elem.type === 'file';\n}\n\nvar doesChangeEventBubble = false;\nif (ExecutionEnvironment.canUseDOM) {\n // See `handleChange` comment below\n doesChangeEventBubble = isEventSupported('change') && (!document.documentMode || document.documentMode > 8);\n}\n\nfunction manualDispatchChangeEvent(nativeEvent) {\n var event = SyntheticEvent.getPooled(eventTypes.change, activeElementInst, nativeEvent, getEventTarget(nativeEvent));\n EventPropagators.accumulateTwoPhaseDispatches(event);\n\n // If change and propertychange bubbled, we'd just bind to it like all the\n // other events and have it go through ReactBrowserEventEmitter. Since it\n // doesn't, we manually listen for the events and so we have to enqueue and\n // process the abstract event manually.\n //\n // Batching is necessary here in order to ensure that all event handlers run\n // before the next rerender (including event handlers attached to ancestor\n // elements instead of directly on the input). Without this, controlled\n // components don't work properly in conjunction with event bubbling because\n // the component is rerendered and the value reverted before all the event\n // handlers can run. See https://github.com/facebook/react/issues/708.\n ReactUpdates.batchedUpdates(runEventInBatch, event);\n}\n\nfunction runEventInBatch(event) {\n EventPluginHub.enqueueEvents(event);\n EventPluginHub.processEventQueue(false);\n}\n\nfunction startWatchingForChangeEventIE8(target, targetInst) {\n activeElement = target;\n activeElementInst = targetInst;\n activeElement.attachEvent('onchange', manualDispatchChangeEvent);\n}\n\nfunction stopWatchingForChangeEventIE8() {\n if (!activeElement) {\n return;\n }\n activeElement.detachEvent('onchange', manualDispatchChangeEvent);\n activeElement = null;\n activeElementInst = null;\n}\n\nfunction getTargetInstForChangeEvent(topLevelType, targetInst) {\n if (topLevelType === topLevelTypes.topChange) {\n return targetInst;\n }\n}\nfunction handleEventsForChangeEventIE8(topLevelType, target, targetInst) {\n if (topLevelType === topLevelTypes.topFocus) {\n // stopWatching() should be a noop here but we call it just in case we\n // missed a blur event somehow.\n stopWatchingForChangeEventIE8();\n startWatchingForChangeEventIE8(target, targetInst);\n } else if (topLevelType === topLevelTypes.topBlur) {\n stopWatchingForChangeEventIE8();\n }\n}\n\n/**\n * SECTION: handle `input` event\n */\nvar isInputEventSupported = false;\nif (ExecutionEnvironment.canUseDOM) {\n // IE9 claims to support the input event but fails to trigger it when\n // deleting text, so we ignore its input events.\n // IE10+ fire input events to often, such when a placeholder\n // changes or when an input with a placeholder is focused.\n isInputEventSupported = isEventSupported('input') && (!document.documentMode || document.documentMode > 11);\n}\n\n/**\n * (For IE <=11) Replacement getter/setter for the `value` property that gets\n * set on the active element.\n */\nvar newValueProp = {\n get: function () {\n return activeElementValueProp.get.call(this);\n },\n set: function (val) {\n // Cast to a string so we can do equality checks.\n activeElementValue = '' + val;\n activeElementValueProp.set.call(this, val);\n }\n};\n\n/**\n * (For IE <=11) Starts tracking propertychange events on the passed-in element\n * and override the value property so that we can distinguish user events from\n * value changes in JS.\n */\nfunction startWatchingForValueChange(target, targetInst) {\n activeElement = target;\n activeElementInst = targetInst;\n activeElementValue = target.value;\n activeElementValueProp = Object.getOwnPropertyDescriptor(target.constructor.prototype, 'value');\n\n // Not guarded in a canDefineProperty check: IE8 supports defineProperty only\n // on DOM elements\n Object.defineProperty(activeElement, 'value', newValueProp);\n if (activeElement.attachEvent) {\n activeElement.attachEvent('onpropertychange', handlePropertyChange);\n } else {\n activeElement.addEventListener('propertychange', handlePropertyChange, false);\n }\n}\n\n/**\n * (For IE <=11) Removes the event listeners from the currently-tracked element,\n * if any exists.\n */\nfunction stopWatchingForValueChange() {\n if (!activeElement) {\n return;\n }\n\n // delete restores the original property definition\n delete activeElement.value;\n\n if (activeElement.detachEvent) {\n activeElement.detachEvent('onpropertychange', handlePropertyChange);\n } else {\n activeElement.removeEventListener('propertychange', handlePropertyChange, false);\n }\n\n activeElement = null;\n activeElementInst = null;\n activeElementValue = null;\n activeElementValueProp = null;\n}\n\n/**\n * (For IE <=11) Handles a propertychange event, sending a `change` event if\n * the value of the active element has changed.\n */\nfunction handlePropertyChange(nativeEvent) {\n if (nativeEvent.propertyName !== 'value') {\n return;\n }\n var value = nativeEvent.srcElement.value;\n if (value === activeElementValue) {\n return;\n }\n activeElementValue = value;\n\n manualDispatchChangeEvent(nativeEvent);\n}\n\n/**\n * If a `change` event should be fired, returns the target's ID.\n */\nfunction getTargetInstForInputEvent(topLevelType, targetInst) {\n if (topLevelType === topLevelTypes.topInput) {\n // In modern browsers (i.e., not IE8 or IE9), the input event is exactly\n // what we want so fall through here and trigger an abstract event\n return targetInst;\n }\n}\n\nfunction handleEventsForInputEventIE(topLevelType, target, targetInst) {\n if (topLevelType === topLevelTypes.topFocus) {\n // In IE8, we can capture almost all .value changes by adding a\n // propertychange handler and looking for events with propertyName\n // equal to 'value'\n // In IE9-11, propertychange fires for most input events but is buggy and\n // doesn't fire when text is deleted, but conveniently, selectionchange\n // appears to fire in all of the remaining cases so we catch those and\n // forward the event if the value has changed\n // In either case, we don't want to call the event handler if the value\n // is changed from JS so we redefine a setter for `.value` that updates\n // our activeElementValue variable, allowing us to ignore those changes\n //\n // stopWatching() should be a noop here but we call it just in case we\n // missed a blur event somehow.\n stopWatchingForValueChange();\n startWatchingForValueChange(target, targetInst);\n } else if (topLevelType === topLevelTypes.topBlur) {\n stopWatchingForValueChange();\n }\n}\n\n// For IE8 and IE9.\nfunction getTargetInstForInputEventIE(topLevelType, targetInst) {\n if (topLevelType === topLevelTypes.topSelectionChange || topLevelType === topLevelTypes.topKeyUp || topLevelType === topLevelTypes.topKeyDown) {\n // On the selectionchange event, the target is just document which isn't\n // helpful for us so just check activeElement instead.\n //\n // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire\n // propertychange on the first input event after setting `value` from a\n // script and fires only keydown, keypress, keyup. Catching keyup usually\n // gets it and catching keydown lets us fire an event for the first\n // keystroke if user does a key repeat (it'll be a little delayed: right\n // before the second keystroke). Other input methods (e.g., paste) seem to\n // fire selectionchange normally.\n if (activeElement && activeElement.value !== activeElementValue) {\n activeElementValue = activeElement.value;\n return activeElementInst;\n }\n }\n}\n\n/**\n * SECTION: handle `click` event\n */\nfunction shouldUseClickEvent(elem) {\n // Use the `click` event to detect changes to checkbox and radio inputs.\n // This approach works across all browsers, whereas `change` does not fire\n // until `blur` in IE8.\n return elem.nodeName && elem.nodeName.toLowerCase() === 'input' && (elem.type === 'checkbox' || elem.type === 'radio');\n}\n\nfunction getTargetInstForClickEvent(topLevelType, targetInst) {\n if (topLevelType === topLevelTypes.topClick) {\n return targetInst;\n }\n}\n\n/**\n * This plugin creates an `onChange` event that normalizes change events\n * across form elements. This event fires at a time when it's possible to\n * change the element's value without seeing a flicker.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - select\n */\nvar ChangeEventPlugin = {\n\n eventTypes: eventTypes,\n\n extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n var targetNode = targetInst ? ReactDOMComponentTree.getNodeFromInstance(targetInst) : window;\n\n var getTargetInstFunc, handleEventFunc;\n if (shouldUseChangeEvent(targetNode)) {\n if (doesChangeEventBubble) {\n getTargetInstFunc = getTargetInstForChangeEvent;\n } else {\n handleEventFunc = handleEventsForChangeEventIE8;\n }\n } else if (isTextInputElement(targetNode)) {\n if (isInputEventSupported) {\n getTargetInstFunc = getTargetInstForInputEvent;\n } else {\n getTargetInstFunc = getTargetInstForInputEventIE;\n handleEventFunc = handleEventsForInputEventIE;\n }\n } else if (shouldUseClickEvent(targetNode)) {\n getTargetInstFunc = getTargetInstForClickEvent;\n }\n\n if (getTargetInstFunc) {\n var inst = getTargetInstFunc(topLevelType, targetInst);\n if (inst) {\n var event = SyntheticEvent.getPooled(eventTypes.change, inst, nativeEvent, nativeEventTarget);\n event.type = 'change';\n EventPropagators.accumulateTwoPhaseDispatches(event);\n return event;\n }\n }\n\n if (handleEventFunc) {\n handleEventFunc(topLevelType, targetNode, targetInst);\n }\n }\n\n};\n\nmodule.exports = ChangeEventPlugin;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ChangeEventPlugin.js\n ** module id = 64\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactUpdates\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant'),\n _assign = require('object-assign');\n\nvar CallbackQueue = require('./CallbackQueue');\nvar PooledClass = require('./PooledClass');\nvar ReactFeatureFlags = require('./ReactFeatureFlags');\nvar ReactReconciler = require('./ReactReconciler');\nvar Transaction = require('./Transaction');\n\nvar invariant = require('fbjs/lib/invariant');\n\nvar dirtyComponents = [];\nvar updateBatchNumber = 0;\nvar asapCallbackQueue = CallbackQueue.getPooled();\nvar asapEnqueued = false;\n\nvar batchingStrategy = null;\n\nfunction ensureInjected() {\n !(ReactUpdates.ReactReconcileTransaction && batchingStrategy) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must inject a reconcile transaction class and batching strategy') : _prodInvariant('123') : void 0;\n}\n\nvar NESTED_UPDATES = {\n initialize: function () {\n this.dirtyComponentsLength = dirtyComponents.length;\n },\n close: function () {\n if (this.dirtyComponentsLength !== dirtyComponents.length) {\n // Additional updates were enqueued by componentDidUpdate handlers or\n // similar; before our own UPDATE_QUEUEING wrapper closes, we want to run\n // these new updates so that if A's componentDidUpdate calls setState on\n // B, B will update before the callback A's updater provided when calling\n // setState.\n dirtyComponents.splice(0, this.dirtyComponentsLength);\n flushBatchedUpdates();\n } else {\n dirtyComponents.length = 0;\n }\n }\n};\n\nvar UPDATE_QUEUEING = {\n initialize: function () {\n this.callbackQueue.reset();\n },\n close: function () {\n this.callbackQueue.notifyAll();\n }\n};\n\nvar TRANSACTION_WRAPPERS = [NESTED_UPDATES, UPDATE_QUEUEING];\n\nfunction ReactUpdatesFlushTransaction() {\n this.reinitializeTransaction();\n this.dirtyComponentsLength = null;\n this.callbackQueue = CallbackQueue.getPooled();\n this.reconcileTransaction = ReactUpdates.ReactReconcileTransaction.getPooled(\n /* useCreateElement */true);\n}\n\n_assign(ReactUpdatesFlushTransaction.prototype, Transaction.Mixin, {\n getTransactionWrappers: function () {\n return TRANSACTION_WRAPPERS;\n },\n\n destructor: function () {\n this.dirtyComponentsLength = null;\n CallbackQueue.release(this.callbackQueue);\n this.callbackQueue = null;\n ReactUpdates.ReactReconcileTransaction.release(this.reconcileTransaction);\n this.reconcileTransaction = null;\n },\n\n perform: function (method, scope, a) {\n // Essentially calls `this.reconcileTransaction.perform(method, scope, a)`\n // with this transaction's wrappers around it.\n return Transaction.Mixin.perform.call(this, this.reconcileTransaction.perform, this.reconcileTransaction, method, scope, a);\n }\n});\n\nPooledClass.addPoolingTo(ReactUpdatesFlushTransaction);\n\nfunction batchedUpdates(callback, a, b, c, d, e) {\n ensureInjected();\n batchingStrategy.batchedUpdates(callback, a, b, c, d, e);\n}\n\n/**\n * Array comparator for ReactComponents by mount ordering.\n *\n * @param {ReactComponent} c1 first component you're comparing\n * @param {ReactComponent} c2 second component you're comparing\n * @return {number} Return value usable by Array.prototype.sort().\n */\nfunction mountOrderComparator(c1, c2) {\n return c1._mountOrder - c2._mountOrder;\n}\n\nfunction runBatchedUpdates(transaction) {\n var len = transaction.dirtyComponentsLength;\n !(len === dirtyComponents.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected flush transaction\\'s stored dirty-components length (%s) to match dirty-components array length (%s).', len, dirtyComponents.length) : _prodInvariant('124', len, dirtyComponents.length) : void 0;\n\n // Since reconciling a component higher in the owner hierarchy usually (not\n // always -- see shouldComponentUpdate()) will reconcile children, reconcile\n // them before their children by sorting the array.\n dirtyComponents.sort(mountOrderComparator);\n\n // Any updates enqueued while reconciling must be performed after this entire\n // batch. Otherwise, if dirtyComponents is [A, B] where A has children B and\n // C, B could update twice in a single batch if C's render enqueues an update\n // to B (since B would have already updated, we should skip it, and the only\n // way we can know to do so is by checking the batch counter).\n updateBatchNumber++;\n\n for (var i = 0; i < len; i++) {\n // If a component is unmounted before pending changes apply, it will still\n // be here, but we assume that it has cleared its _pendingCallbacks and\n // that performUpdateIfNecessary is a noop.\n var component = dirtyComponents[i];\n\n // If performUpdateIfNecessary happens to enqueue any new updates, we\n // shouldn't execute the callbacks until the next render happens, so\n // stash the callbacks first\n var callbacks = component._pendingCallbacks;\n component._pendingCallbacks = null;\n\n var markerName;\n if (ReactFeatureFlags.logTopLevelRenders) {\n var namedComponent = component;\n // Duck type TopLevelWrapper. This is probably always true.\n if (component._currentElement.props === component._renderedComponent._currentElement) {\n namedComponent = component._renderedComponent;\n }\n markerName = 'React update: ' + namedComponent.getName();\n console.time(markerName);\n }\n\n ReactReconciler.performUpdateIfNecessary(component, transaction.reconcileTransaction, updateBatchNumber);\n\n if (markerName) {\n console.timeEnd(markerName);\n }\n\n if (callbacks) {\n for (var j = 0; j < callbacks.length; j++) {\n transaction.callbackQueue.enqueue(callbacks[j], component.getPublicInstance());\n }\n }\n }\n}\n\nvar flushBatchedUpdates = function () {\n // ReactUpdatesFlushTransaction's wrappers will clear the dirtyComponents\n // array and perform any updates enqueued by mount-ready handlers (i.e.,\n // componentDidUpdate) but we need to check here too in order to catch\n // updates enqueued by setState callbacks and asap calls.\n while (dirtyComponents.length || asapEnqueued) {\n if (dirtyComponents.length) {\n var transaction = ReactUpdatesFlushTransaction.getPooled();\n transaction.perform(runBatchedUpdates, null, transaction);\n ReactUpdatesFlushTransaction.release(transaction);\n }\n\n if (asapEnqueued) {\n asapEnqueued = false;\n var queue = asapCallbackQueue;\n asapCallbackQueue = CallbackQueue.getPooled();\n queue.notifyAll();\n CallbackQueue.release(queue);\n }\n }\n};\n\n/**\n * Mark a component as needing a rerender, adding an optional callback to a\n * list of functions which will be executed once the rerender occurs.\n */\nfunction enqueueUpdate(component) {\n ensureInjected();\n\n // Various parts of our code (such as ReactCompositeComponent's\n // _renderValidatedComponent) assume that calls to render aren't nested;\n // verify that that's the case. (This is called by each top-level update\n // function, like setState, forceUpdate, etc.; creation and\n // destruction of top-level components is guarded in ReactMount.)\n\n if (!batchingStrategy.isBatchingUpdates) {\n batchingStrategy.batchedUpdates(enqueueUpdate, component);\n return;\n }\n\n dirtyComponents.push(component);\n if (component._updateBatchNumber == null) {\n component._updateBatchNumber = updateBatchNumber + 1;\n }\n}\n\n/**\n * Enqueue a callback to be run at the end of the current batching cycle. Throws\n * if no updates are currently being performed.\n */\nfunction asap(callback, context) {\n !batchingStrategy.isBatchingUpdates ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates.asap: Can\\'t enqueue an asap callback in a context whereupdates are not being batched.') : _prodInvariant('125') : void 0;\n asapCallbackQueue.enqueue(callback, context);\n asapEnqueued = true;\n}\n\nvar ReactUpdatesInjection = {\n injectReconcileTransaction: function (ReconcileTransaction) {\n !ReconcileTransaction ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a reconcile transaction class') : _prodInvariant('126') : void 0;\n ReactUpdates.ReactReconcileTransaction = ReconcileTransaction;\n },\n\n injectBatchingStrategy: function (_batchingStrategy) {\n !_batchingStrategy ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a batching strategy') : _prodInvariant('127') : void 0;\n !(typeof _batchingStrategy.batchedUpdates === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a batchedUpdates() function') : _prodInvariant('128') : void 0;\n !(typeof _batchingStrategy.isBatchingUpdates === 'boolean') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide an isBatchingUpdates boolean attribute') : _prodInvariant('129') : void 0;\n batchingStrategy = _batchingStrategy;\n }\n};\n\nvar ReactUpdates = {\n /**\n * React references `ReactReconcileTransaction` using this property in order\n * to allow dependency injection.\n *\n * @internal\n */\n ReactReconcileTransaction: null,\n\n batchedUpdates: batchedUpdates,\n enqueueUpdate: enqueueUpdate,\n flushBatchedUpdates: flushBatchedUpdates,\n injection: ReactUpdatesInjection,\n asap: asap\n};\n\nmodule.exports = ReactUpdates;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactUpdates.js\n ** module id = 65\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule CallbackQueue\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant'),\n _assign = require('object-assign');\n\nvar PooledClass = require('./PooledClass');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * A specialized pseudo-event module to help keep track of components waiting to\n * be notified when their DOM representations are available for use.\n *\n * This implements `PooledClass`, so you should never need to instantiate this.\n * Instead, use `CallbackQueue.getPooled()`.\n *\n * @class ReactMountReady\n * @implements PooledClass\n * @internal\n */\nfunction CallbackQueue() {\n this._callbacks = null;\n this._contexts = null;\n}\n\n_assign(CallbackQueue.prototype, {\n\n /**\n * Enqueues a callback to be invoked when `notifyAll` is invoked.\n *\n * @param {function} callback Invoked when `notifyAll` is invoked.\n * @param {?object} context Context to call `callback` with.\n * @internal\n */\n enqueue: function (callback, context) {\n this._callbacks = this._callbacks || [];\n this._contexts = this._contexts || [];\n this._callbacks.push(callback);\n this._contexts.push(context);\n },\n\n /**\n * Invokes all enqueued callbacks and clears the queue. This is invoked after\n * the DOM representation of a component has been created or updated.\n *\n * @internal\n */\n notifyAll: function () {\n var callbacks = this._callbacks;\n var contexts = this._contexts;\n if (callbacks) {\n !(callbacks.length === contexts.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Mismatched list of contexts in callback queue') : _prodInvariant('24') : void 0;\n this._callbacks = null;\n this._contexts = null;\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i].call(contexts[i]);\n }\n callbacks.length = 0;\n contexts.length = 0;\n }\n },\n\n checkpoint: function () {\n return this._callbacks ? this._callbacks.length : 0;\n },\n\n rollback: function (len) {\n if (this._callbacks) {\n this._callbacks.length = len;\n this._contexts.length = len;\n }\n },\n\n /**\n * Resets the internal queue.\n *\n * @internal\n */\n reset: function () {\n this._callbacks = null;\n this._contexts = null;\n },\n\n /**\n * `PooledClass` looks for this.\n */\n destructor: function () {\n this.reset();\n }\n\n});\n\nPooledClass.addPoolingTo(CallbackQueue);\n\nmodule.exports = CallbackQueue;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/CallbackQueue.js\n ** module id = 66\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactFeatureFlags\n * \n */\n\n'use strict';\n\nvar ReactFeatureFlags = {\n // When true, call console.time() before and .timeEnd() after each top-level\n // render (both initial renders and updates). Useful when looking at prod-mode\n // timeline profiles in Chrome, for example.\n logTopLevelRenders: false\n};\n\nmodule.exports = ReactFeatureFlags;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactFeatureFlags.js\n ** module id = 67\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactReconciler\n */\n\n'use strict';\n\nvar ReactRef = require('./ReactRef');\nvar ReactInstrumentation = require('./ReactInstrumentation');\n\nvar warning = require('fbjs/lib/warning');\n\n/**\n * Helper to call ReactRef.attachRefs with this composite component, split out\n * to avoid allocations in the transaction mount-ready queue.\n */\nfunction attachRefs() {\n ReactRef.attachRefs(this, this._currentElement);\n}\n\nvar ReactReconciler = {\n\n /**\n * Initializes the component, renders markup, and registers event listeners.\n *\n * @param {ReactComponent} internalInstance\n * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n * @param {?object} the containing host component instance\n * @param {?object} info about the host container\n * @return {?string} Rendered markup to be inserted into the DOM.\n * @final\n * @internal\n */\n mountComponent: function (internalInstance, transaction, hostParent, hostContainerInfo, context, parentDebugID // 0 in production and for roots\n ) {\n if (process.env.NODE_ENV !== 'production') {\n if (internalInstance._debugID !== 0) {\n ReactInstrumentation.debugTool.onBeforeMountComponent(internalInstance._debugID, internalInstance._currentElement, parentDebugID);\n }\n }\n var markup = internalInstance.mountComponent(transaction, hostParent, hostContainerInfo, context, parentDebugID);\n if (internalInstance._currentElement && internalInstance._currentElement.ref != null) {\n transaction.getReactMountReady().enqueue(attachRefs, internalInstance);\n }\n if (process.env.NODE_ENV !== 'production') {\n if (internalInstance._debugID !== 0) {\n ReactInstrumentation.debugTool.onMountComponent(internalInstance._debugID);\n }\n }\n return markup;\n },\n\n /**\n * Returns a value that can be passed to\n * ReactComponentEnvironment.replaceNodeWithMarkup.\n */\n getHostNode: function (internalInstance) {\n return internalInstance.getHostNode();\n },\n\n /**\n * Releases any resources allocated by `mountComponent`.\n *\n * @final\n * @internal\n */\n unmountComponent: function (internalInstance, safely) {\n if (process.env.NODE_ENV !== 'production') {\n if (internalInstance._debugID !== 0) {\n ReactInstrumentation.debugTool.onBeforeUnmountComponent(internalInstance._debugID);\n }\n }\n ReactRef.detachRefs(internalInstance, internalInstance._currentElement);\n internalInstance.unmountComponent(safely);\n if (process.env.NODE_ENV !== 'production') {\n if (internalInstance._debugID !== 0) {\n ReactInstrumentation.debugTool.onUnmountComponent(internalInstance._debugID);\n }\n }\n },\n\n /**\n * Update a component using a new element.\n *\n * @param {ReactComponent} internalInstance\n * @param {ReactElement} nextElement\n * @param {ReactReconcileTransaction} transaction\n * @param {object} context\n * @internal\n */\n receiveComponent: function (internalInstance, nextElement, transaction, context) {\n var prevElement = internalInstance._currentElement;\n\n if (nextElement === prevElement && context === internalInstance._context) {\n // Since elements are immutable after the owner is rendered,\n // we can do a cheap identity compare here to determine if this is a\n // superfluous reconcile. It's possible for state to be mutable but such\n // change should trigger an update of the owner which would recreate\n // the element. We explicitly check for the existence of an owner since\n // it's possible for an element created outside a composite to be\n // deeply mutated and reused.\n\n // TODO: Bailing out early is just a perf optimization right?\n // TODO: Removing the return statement should affect correctness?\n return;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (internalInstance._debugID !== 0) {\n ReactInstrumentation.debugTool.onBeforeUpdateComponent(internalInstance._debugID, nextElement);\n }\n }\n\n var refsChanged = ReactRef.shouldUpdateRefs(prevElement, nextElement);\n\n if (refsChanged) {\n ReactRef.detachRefs(internalInstance, prevElement);\n }\n\n internalInstance.receiveComponent(nextElement, transaction, context);\n\n if (refsChanged && internalInstance._currentElement && internalInstance._currentElement.ref != null) {\n transaction.getReactMountReady().enqueue(attachRefs, internalInstance);\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (internalInstance._debugID !== 0) {\n ReactInstrumentation.debugTool.onUpdateComponent(internalInstance._debugID);\n }\n }\n },\n\n /**\n * Flush any dirty changes in a component.\n *\n * @param {ReactComponent} internalInstance\n * @param {ReactReconcileTransaction} transaction\n * @internal\n */\n performUpdateIfNecessary: function (internalInstance, transaction, updateBatchNumber) {\n if (internalInstance._updateBatchNumber !== updateBatchNumber) {\n // The component's enqueued batch number should always be the current\n // batch or the following one.\n process.env.NODE_ENV !== 'production' ? warning(internalInstance._updateBatchNumber == null || internalInstance._updateBatchNumber === updateBatchNumber + 1, 'performUpdateIfNecessary: Unexpected batch number (current %s, ' + 'pending %s)', updateBatchNumber, internalInstance._updateBatchNumber) : void 0;\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n if (internalInstance._debugID !== 0) {\n ReactInstrumentation.debugTool.onBeforeUpdateComponent(internalInstance._debugID, internalInstance._currentElement);\n }\n }\n internalInstance.performUpdateIfNecessary(transaction);\n if (process.env.NODE_ENV !== 'production') {\n if (internalInstance._debugID !== 0) {\n ReactInstrumentation.debugTool.onUpdateComponent(internalInstance._debugID);\n }\n }\n }\n\n};\n\nmodule.exports = ReactReconciler;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactReconciler.js\n ** module id = 68\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactRef\n */\n\n'use strict';\n\nvar ReactOwner = require('./ReactOwner');\n\nvar ReactRef = {};\n\nfunction attachRef(ref, component, owner) {\n if (typeof ref === 'function') {\n ref(component.getPublicInstance());\n } else {\n // Legacy ref\n ReactOwner.addComponentAsRefTo(component, ref, owner);\n }\n}\n\nfunction detachRef(ref, component, owner) {\n if (typeof ref === 'function') {\n ref(null);\n } else {\n // Legacy ref\n ReactOwner.removeComponentAsRefFrom(component, ref, owner);\n }\n}\n\nReactRef.attachRefs = function (instance, element) {\n if (element === null || element === false) {\n return;\n }\n var ref = element.ref;\n if (ref != null) {\n attachRef(ref, instance, element._owner);\n }\n};\n\nReactRef.shouldUpdateRefs = function (prevElement, nextElement) {\n // If either the owner or a `ref` has changed, make sure the newest owner\n // has stored a reference to `this`, and the previous owner (if different)\n // has forgotten the reference to `this`. We use the element instead\n // of the public this.props because the post processing cannot determine\n // a ref. The ref conceptually lives on the element.\n\n // TODO: Should this even be possible? The owner cannot change because\n // it's forbidden by shouldUpdateReactComponent. The ref can change\n // if you swap the keys of but not the refs. Reconsider where this check\n // is made. It probably belongs where the key checking and\n // instantiateReactComponent is done.\n\n var prevEmpty = prevElement === null || prevElement === false;\n var nextEmpty = nextElement === null || nextElement === false;\n\n return (\n // This has a few false positives w/r/t empty components.\n prevEmpty || nextEmpty || nextElement.ref !== prevElement.ref ||\n // If owner changes but we have an unchanged function ref, don't update refs\n typeof nextElement.ref === 'string' && nextElement._owner !== prevElement._owner\n );\n};\n\nReactRef.detachRefs = function (instance, element) {\n if (element === null || element === false) {\n return;\n }\n var ref = element.ref;\n if (ref != null) {\n detachRef(ref, instance, element._owner);\n }\n};\n\nmodule.exports = ReactRef;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactRef.js\n ** module id = 69\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactOwner\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * ReactOwners are capable of storing references to owned components.\n *\n * All components are capable of //being// referenced by owner components, but\n * only ReactOwner components are capable of //referencing// owned components.\n * The named reference is known as a \"ref\".\n *\n * Refs are available when mounted and updated during reconciliation.\n *\n * var MyComponent = React.createClass({\n * render: function() {\n * return (\n *
\n * \n *
\n * );\n * },\n * handleClick: function() {\n * this.refs.custom.handleClick();\n * },\n * componentDidMount: function() {\n * this.refs.custom.initialize();\n * }\n * });\n *\n * Refs should rarely be used. When refs are used, they should only be done to\n * control data that is not handled by React's data flow.\n *\n * @class ReactOwner\n */\nvar ReactOwner = {\n\n /**\n * @param {?object} object\n * @return {boolean} True if `object` is a valid owner.\n * @final\n */\n isValidOwner: function (object) {\n return !!(object && typeof object.attachRef === 'function' && typeof object.detachRef === 'function');\n },\n\n /**\n * Adds a component by ref to an owner component.\n *\n * @param {ReactComponent} component Component to reference.\n * @param {string} ref Name by which to refer to the component.\n * @param {ReactOwner} owner Component on which to record the ref.\n * @final\n * @internal\n */\n addComponentAsRefTo: function (component, ref, owner) {\n !ReactOwner.isValidOwner(owner) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'addComponentAsRefTo(...): Only a ReactOwner can have refs. You might be adding a ref to a component that was not created inside a component\\'s `render` method, or you have multiple copies of React loaded (details: https://fb.me/react-refs-must-have-owner).') : _prodInvariant('119') : void 0;\n owner.attachRef(ref, component);\n },\n\n /**\n * Removes a component by ref from an owner component.\n *\n * @param {ReactComponent} component Component to dereference.\n * @param {string} ref Name of the ref to remove.\n * @param {ReactOwner} owner Component on which the ref is recorded.\n * @final\n * @internal\n */\n removeComponentAsRefFrom: function (component, ref, owner) {\n !ReactOwner.isValidOwner(owner) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'removeComponentAsRefFrom(...): Only a ReactOwner can have refs. You might be removing a ref to a component that was not created inside a component\\'s `render` method, or you have multiple copies of React loaded (details: https://fb.me/react-refs-must-have-owner).') : _prodInvariant('120') : void 0;\n var ownerPublicInstance = owner.getPublicInstance();\n // Check that `component`'s owner is still alive and that `component` is still the current ref\n // because we do not want to detach the ref if another component stole it.\n if (ownerPublicInstance && ownerPublicInstance.refs[ref] === component.getPublicInstance()) {\n owner.detachRef(ref);\n }\n }\n\n};\n\nmodule.exports = ReactOwner;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactOwner.js\n ** module id = 70\n ** module chunks = 2\n **/","/**\n * Copyright 2016-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactInstrumentation\n */\n\n'use strict';\n\nvar debugTool = null;\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactDebugTool = require('./ReactDebugTool');\n debugTool = ReactDebugTool;\n}\n\nmodule.exports = { debugTool: debugTool };\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactInstrumentation.js\n ** module id = 71\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule Transaction\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar invariant = require('fbjs/lib/invariant');\n\n/**\n * `Transaction` creates a black box that is able to wrap any method such that\n * certain invariants are maintained before and after the method is invoked\n * (Even if an exception is thrown while invoking the wrapped method). Whoever\n * instantiates a transaction can provide enforcers of the invariants at\n * creation time. The `Transaction` class itself will supply one additional\n * automatic invariant for you - the invariant that any transaction instance\n * should not be run while it is already being run. You would typically create a\n * single instance of a `Transaction` for reuse multiple times, that potentially\n * is used to wrap several different methods. Wrappers are extremely simple -\n * they only require implementing two methods.\n *\n *
\n *                       wrappers (injected at creation time)\n *                                      +        +\n *                                      |        |\n *                    +-----------------|--------|--------------+\n *                    |                 v        |              |\n *                    |      +---------------+   |              |\n *                    |   +--|    wrapper1   |---|----+         |\n *                    |   |  +---------------+   v    |         |\n *                    |   |          +-------------+  |         |\n *                    |   |     +----|   wrapper2  |--------+   |\n *                    |   |     |    +-------------+  |     |   |\n *                    |   |     |                     |     |   |\n *                    |   v     v                     v     v   | wrapper\n *                    | +---+ +---+   +---------+   +---+ +---+ | invariants\n * perform(anyMethod) | |   | |   |   |         |   |   | |   | | maintained\n * +----------------->|-|---|-|---|-->|anyMethod|---|---|-|---|-|-------->\n *                    | |   | |   |   |         |   |   | |   | |\n *                    | |   | |   |   |         |   |   | |   | |\n *                    | |   | |   |   |         |   |   | |   | |\n *                    | +---+ +---+   +---------+   +---+ +---+ |\n *                    |  initialize                    close    |\n *                    +-----------------------------------------+\n * 
\n *\n * Use cases:\n * - Preserving the input selection ranges before/after reconciliation.\n * Restoring selection even in the event of an unexpected error.\n * - Deactivating events while rearranging the DOM, preventing blurs/focuses,\n * while guaranteeing that afterwards, the event system is reactivated.\n * - Flushing a queue of collected DOM mutations to the main UI thread after a\n * reconciliation takes place in a worker thread.\n * - Invoking any collected `componentDidUpdate` callbacks after rendering new\n * content.\n * - (Future use case): Wrapping particular flushes of the `ReactWorker` queue\n * to preserve the `scrollTop` (an automatic scroll aware DOM).\n * - (Future use case): Layout calculations before and after DOM updates.\n *\n * Transactional plugin API:\n * - A module that has an `initialize` method that returns any precomputation.\n * - and a `close` method that accepts the precomputation. `close` is invoked\n * when the wrapped process is completed, or has failed.\n *\n * @param {Array} transactionWrapper Wrapper modules\n * that implement `initialize` and `close`.\n * @return {Transaction} Single transaction for reuse in thread.\n *\n * @class Transaction\n */\nvar Mixin = {\n /**\n * Sets up this instance so that it is prepared for collecting metrics. Does\n * so such that this setup method may be used on an instance that is already\n * initialized, in a way that does not consume additional memory upon reuse.\n * That can be useful if you decide to make your subclass of this mixin a\n * \"PooledClass\".\n */\n reinitializeTransaction: function () {\n this.transactionWrappers = this.getTransactionWrappers();\n if (this.wrapperInitData) {\n this.wrapperInitData.length = 0;\n } else {\n this.wrapperInitData = [];\n }\n this._isInTransaction = false;\n },\n\n _isInTransaction: false,\n\n /**\n * @abstract\n * @return {Array} Array of transaction wrappers.\n */\n getTransactionWrappers: null,\n\n isInTransaction: function () {\n return !!this._isInTransaction;\n },\n\n /**\n * Executes the function within a safety window. Use this for the top level\n * methods that result in large amounts of computation/mutations that would\n * need to be safety checked. The optional arguments helps prevent the need\n * to bind in many cases.\n *\n * @param {function} method Member of scope to call.\n * @param {Object} scope Scope to invoke from.\n * @param {Object?=} a Argument to pass to the method.\n * @param {Object?=} b Argument to pass to the method.\n * @param {Object?=} c Argument to pass to the method.\n * @param {Object?=} d Argument to pass to the method.\n * @param {Object?=} e Argument to pass to the method.\n * @param {Object?=} f Argument to pass to the method.\n *\n * @return {*} Return value from `method`.\n */\n perform: function (method, scope, a, b, c, d, e, f) {\n !!this.isInTransaction() ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Transaction.perform(...): Cannot initialize a transaction when there is already an outstanding transaction.') : _prodInvariant('27') : void 0;\n var errorThrown;\n var ret;\n try {\n this._isInTransaction = true;\n // Catching errors makes debugging more difficult, so we start with\n // errorThrown set to true before setting it to false after calling\n // close -- if it's still set to true in the finally block, it means\n // one of these calls threw.\n errorThrown = true;\n this.initializeAll(0);\n ret = method.call(scope, a, b, c, d, e, f);\n errorThrown = false;\n } finally {\n try {\n if (errorThrown) {\n // If `method` throws, prefer to show that stack trace over any thrown\n // by invoking `closeAll`.\n try {\n this.closeAll(0);\n } catch (err) {}\n } else {\n // Since `method` didn't throw, we don't want to silence the exception\n // here.\n this.closeAll(0);\n }\n } finally {\n this._isInTransaction = false;\n }\n }\n return ret;\n },\n\n initializeAll: function (startIndex) {\n var transactionWrappers = this.transactionWrappers;\n for (var i = startIndex; i < transactionWrappers.length; i++) {\n var wrapper = transactionWrappers[i];\n try {\n // Catching errors makes debugging more difficult, so we start with the\n // OBSERVED_ERROR state before overwriting it with the real return value\n // of initialize -- if it's still set to OBSERVED_ERROR in the finally\n // block, it means wrapper.initialize threw.\n this.wrapperInitData[i] = Transaction.OBSERVED_ERROR;\n this.wrapperInitData[i] = wrapper.initialize ? wrapper.initialize.call(this) : null;\n } finally {\n if (this.wrapperInitData[i] === Transaction.OBSERVED_ERROR) {\n // The initializer for wrapper i threw an error; initialize the\n // remaining wrappers but silence any exceptions from them to ensure\n // that the first error is the one to bubble up.\n try {\n this.initializeAll(i + 1);\n } catch (err) {}\n }\n }\n }\n },\n\n /**\n * Invokes each of `this.transactionWrappers.close[i]` functions, passing into\n * them the respective return values of `this.transactionWrappers.init[i]`\n * (`close`rs that correspond to initializers that failed will not be\n * invoked).\n */\n closeAll: function (startIndex) {\n !this.isInTransaction() ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Transaction.closeAll(): Cannot close transaction when none are open.') : _prodInvariant('28') : void 0;\n var transactionWrappers = this.transactionWrappers;\n for (var i = startIndex; i < transactionWrappers.length; i++) {\n var wrapper = transactionWrappers[i];\n var initData = this.wrapperInitData[i];\n var errorThrown;\n try {\n // Catching errors makes debugging more difficult, so we start with\n // errorThrown set to true before setting it to false after calling\n // close -- if it's still set to true in the finally block, it means\n // wrapper.close threw.\n errorThrown = true;\n if (initData !== Transaction.OBSERVED_ERROR && wrapper.close) {\n wrapper.close.call(this, initData);\n }\n errorThrown = false;\n } finally {\n if (errorThrown) {\n // The closer for wrapper i threw an error; close the remaining\n // wrappers but silence any exceptions from them to ensure that the\n // first error is the one to bubble up.\n try {\n this.closeAll(i + 1);\n } catch (e) {}\n }\n }\n }\n this.wrapperInitData.length = 0;\n }\n};\n\nvar Transaction = {\n\n Mixin: Mixin,\n\n /**\n * Token to look for to determine if an error occurred.\n */\n OBSERVED_ERROR: {}\n\n};\n\nmodule.exports = Transaction;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/Transaction.js\n ** module id = 72\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getEventTarget\n */\n\n'use strict';\n\n/**\n * Gets the target node from a native browser event by accounting for\n * inconsistencies in browser DOM APIs.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {DOMEventTarget} Target node.\n */\n\nfunction getEventTarget(nativeEvent) {\n var target = nativeEvent.target || nativeEvent.srcElement || window;\n\n // Normalize SVG element events #4963\n if (target.correspondingUseElement) {\n target = target.correspondingUseElement;\n }\n\n // Safari may fire events on text nodes (Node.TEXT_NODE is 3).\n // @see http://www.quirksmode.org/js/events_properties.html\n return target.nodeType === 3 ? target.parentNode : target;\n}\n\nmodule.exports = getEventTarget;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getEventTarget.js\n ** module id = 73\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isEventSupported\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\nvar useHasFeature;\nif (ExecutionEnvironment.canUseDOM) {\n useHasFeature = document.implementation && document.implementation.hasFeature &&\n // always returns true in newer browsers as per the standard.\n // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n document.implementation.hasFeature('', '') !== true;\n}\n\n/**\n * Checks if an event is supported in the current execution environment.\n *\n * NOTE: This will not work correctly for non-generic events such as `change`,\n * `reset`, `load`, `error`, and `select`.\n *\n * Borrows from Modernizr.\n *\n * @param {string} eventNameSuffix Event name, e.g. \"click\".\n * @param {?boolean} capture Check if the capture phase is supported.\n * @return {boolean} True if the event is supported.\n * @internal\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\n */\nfunction isEventSupported(eventNameSuffix, capture) {\n if (!ExecutionEnvironment.canUseDOM || capture && !('addEventListener' in document)) {\n return false;\n }\n\n var eventName = 'on' + eventNameSuffix;\n var isSupported = eventName in document;\n\n if (!isSupported) {\n var element = document.createElement('div');\n element.setAttribute(eventName, 'return;');\n isSupported = typeof element[eventName] === 'function';\n }\n\n if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {\n // This is the only way to test support for the `wheel` event in IE9+.\n isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n }\n\n return isSupported;\n}\n\nmodule.exports = isEventSupported;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/isEventSupported.js\n ** module id = 74\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isTextInputElement\n * \n */\n\n'use strict';\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary\n */\n\nvar supportedInputTypes = {\n 'color': true,\n 'date': true,\n 'datetime': true,\n 'datetime-local': true,\n 'email': true,\n 'month': true,\n 'number': true,\n 'password': true,\n 'range': true,\n 'search': true,\n 'tel': true,\n 'text': true,\n 'time': true,\n 'url': true,\n 'week': true\n};\n\nfunction isTextInputElement(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n\n if (nodeName === 'input') {\n return !!supportedInputTypes[elem.type];\n }\n\n if (nodeName === 'textarea') {\n return true;\n }\n\n return false;\n}\n\nmodule.exports = isTextInputElement;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/isTextInputElement.js\n ** module id = 75\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DefaultEventPluginOrder\n */\n\n'use strict';\n\nvar keyOf = require('fbjs/lib/keyOf');\n\n/**\n * Module that is injectable into `EventPluginHub`, that specifies a\n * deterministic ordering of `EventPlugin`s. A convenient way to reason about\n * plugins, without having to package every one of them. This is better than\n * having plugins be ordered in the same order that they are injected because\n * that ordering would be influenced by the packaging order.\n * `ResponderEventPlugin` must occur before `SimpleEventPlugin` so that\n * preventing default on events is convenient in `SimpleEventPlugin` handlers.\n */\nvar DefaultEventPluginOrder = [keyOf({ ResponderEventPlugin: null }), keyOf({ SimpleEventPlugin: null }), keyOf({ TapEventPlugin: null }), keyOf({ EnterLeaveEventPlugin: null }), keyOf({ ChangeEventPlugin: null }), keyOf({ SelectEventPlugin: null }), keyOf({ BeforeInputEventPlugin: null })];\n\nmodule.exports = DefaultEventPluginOrder;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/DefaultEventPluginOrder.js\n ** module id = 76\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EnterLeaveEventPlugin\n */\n\n'use strict';\n\nvar EventConstants = require('./EventConstants');\nvar EventPropagators = require('./EventPropagators');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar SyntheticMouseEvent = require('./SyntheticMouseEvent');\n\nvar keyOf = require('fbjs/lib/keyOf');\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\nvar eventTypes = {\n mouseEnter: {\n registrationName: keyOf({ onMouseEnter: null }),\n dependencies: [topLevelTypes.topMouseOut, topLevelTypes.topMouseOver]\n },\n mouseLeave: {\n registrationName: keyOf({ onMouseLeave: null }),\n dependencies: [topLevelTypes.topMouseOut, topLevelTypes.topMouseOver]\n }\n};\n\nvar EnterLeaveEventPlugin = {\n\n eventTypes: eventTypes,\n\n /**\n * For almost every interaction we care about, there will be both a top-level\n * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that\n * we do not extract duplicate events. However, moving the mouse into the\n * browser from outside will not fire a `mouseout` event. In this case, we use\n * the `mouseover` top-level event.\n */\n extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n if (topLevelType === topLevelTypes.topMouseOver && (nativeEvent.relatedTarget || nativeEvent.fromElement)) {\n return null;\n }\n if (topLevelType !== topLevelTypes.topMouseOut && topLevelType !== topLevelTypes.topMouseOver) {\n // Must not be a mouse in or mouse out - ignoring.\n return null;\n }\n\n var win;\n if (nativeEventTarget.window === nativeEventTarget) {\n // `nativeEventTarget` is probably a window object.\n win = nativeEventTarget;\n } else {\n // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\n var doc = nativeEventTarget.ownerDocument;\n if (doc) {\n win = doc.defaultView || doc.parentWindow;\n } else {\n win = window;\n }\n }\n\n var from;\n var to;\n if (topLevelType === topLevelTypes.topMouseOut) {\n from = targetInst;\n var related = nativeEvent.relatedTarget || nativeEvent.toElement;\n to = related ? ReactDOMComponentTree.getClosestInstanceFromNode(related) : null;\n } else {\n // Moving to a node from outside the window.\n from = null;\n to = targetInst;\n }\n\n if (from === to) {\n // Nothing pertains to our managed components.\n return null;\n }\n\n var fromNode = from == null ? win : ReactDOMComponentTree.getNodeFromInstance(from);\n var toNode = to == null ? win : ReactDOMComponentTree.getNodeFromInstance(to);\n\n var leave = SyntheticMouseEvent.getPooled(eventTypes.mouseLeave, from, nativeEvent, nativeEventTarget);\n leave.type = 'mouseleave';\n leave.target = fromNode;\n leave.relatedTarget = toNode;\n\n var enter = SyntheticMouseEvent.getPooled(eventTypes.mouseEnter, to, nativeEvent, nativeEventTarget);\n enter.type = 'mouseenter';\n enter.target = toNode;\n enter.relatedTarget = fromNode;\n\n EventPropagators.accumulateEnterLeaveDispatches(leave, enter, from, to);\n\n return [leave, enter];\n }\n\n};\n\nmodule.exports = EnterLeaveEventPlugin;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/EnterLeaveEventPlugin.js\n ** module id = 77\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticMouseEvent\n */\n\n'use strict';\n\nvar SyntheticUIEvent = require('./SyntheticUIEvent');\nvar ViewportMetrics = require('./ViewportMetrics');\n\nvar getEventModifierState = require('./getEventModifierState');\n\n/**\n * @interface MouseEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar MouseEventInterface = {\n screenX: null,\n screenY: null,\n clientX: null,\n clientY: null,\n ctrlKey: null,\n shiftKey: null,\n altKey: null,\n metaKey: null,\n getModifierState: getEventModifierState,\n button: function (event) {\n // Webkit, Firefox, IE9+\n // which: 1 2 3\n // button: 0 1 2 (standard)\n var button = event.button;\n if ('which' in event) {\n return button;\n }\n // IE<9\n // which: undefined\n // button: 0 0 0\n // button: 1 4 2 (onmouseup)\n return button === 2 ? 2 : button === 4 ? 1 : 0;\n },\n buttons: null,\n relatedTarget: function (event) {\n return event.relatedTarget || (event.fromElement === event.srcElement ? event.toElement : event.fromElement);\n },\n // \"Proprietary\" Interface.\n pageX: function (event) {\n return 'pageX' in event ? event.pageX : event.clientX + ViewportMetrics.currentScrollLeft;\n },\n pageY: function (event) {\n return 'pageY' in event ? event.pageY : event.clientY + ViewportMetrics.currentScrollTop;\n }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticMouseEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticMouseEvent, MouseEventInterface);\n\nmodule.exports = SyntheticMouseEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticMouseEvent.js\n ** module id = 78\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticUIEvent\n */\n\n'use strict';\n\nvar SyntheticEvent = require('./SyntheticEvent');\n\nvar getEventTarget = require('./getEventTarget');\n\n/**\n * @interface UIEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar UIEventInterface = {\n view: function (event) {\n if (event.view) {\n return event.view;\n }\n\n var target = getEventTarget(event);\n if (target.window === target) {\n // target is a window object\n return target;\n }\n\n var doc = target.ownerDocument;\n // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\n if (doc) {\n return doc.defaultView || doc.parentWindow;\n } else {\n return window;\n }\n },\n detail: function (event) {\n return event.detail || 0;\n }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticEvent}\n */\nfunction SyntheticUIEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticUIEvent, UIEventInterface);\n\nmodule.exports = SyntheticUIEvent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/SyntheticUIEvent.js\n ** module id = 79\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ViewportMetrics\n */\n\n'use strict';\n\nvar ViewportMetrics = {\n\n currentScrollLeft: 0,\n\n currentScrollTop: 0,\n\n refreshScrollValues: function (scrollPosition) {\n ViewportMetrics.currentScrollLeft = scrollPosition.x;\n ViewportMetrics.currentScrollTop = scrollPosition.y;\n }\n\n};\n\nmodule.exports = ViewportMetrics;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ViewportMetrics.js\n ** module id = 80\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getEventModifierState\n */\n\n'use strict';\n\n/**\n * Translation from modifier key to the associated property in the event.\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers\n */\n\nvar modifierKeyToProp = {\n 'Alt': 'altKey',\n 'Control': 'ctrlKey',\n 'Meta': 'metaKey',\n 'Shift': 'shiftKey'\n};\n\n// IE8 does not implement getModifierState so we simply map it to the only\n// modifier keys exposed by the event itself, does not support Lock-keys.\n// Currently, all major browsers except Chrome seems to support Lock-keys.\nfunction modifierStateGetter(keyArg) {\n var syntheticEvent = this;\n var nativeEvent = syntheticEvent.nativeEvent;\n if (nativeEvent.getModifierState) {\n return nativeEvent.getModifierState(keyArg);\n }\n var keyProp = modifierKeyToProp[keyArg];\n return keyProp ? !!nativeEvent[keyProp] : false;\n}\n\nfunction getEventModifierState(nativeEvent) {\n return modifierStateGetter;\n}\n\nmodule.exports = getEventModifierState;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/getEventModifierState.js\n ** module id = 81\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule HTMLDOMPropertyConfig\n */\n\n'use strict';\n\nvar DOMProperty = require('./DOMProperty');\n\nvar MUST_USE_PROPERTY = DOMProperty.injection.MUST_USE_PROPERTY;\nvar HAS_BOOLEAN_VALUE = DOMProperty.injection.HAS_BOOLEAN_VALUE;\nvar HAS_NUMERIC_VALUE = DOMProperty.injection.HAS_NUMERIC_VALUE;\nvar HAS_POSITIVE_NUMERIC_VALUE = DOMProperty.injection.HAS_POSITIVE_NUMERIC_VALUE;\nvar HAS_OVERLOADED_BOOLEAN_VALUE = DOMProperty.injection.HAS_OVERLOADED_BOOLEAN_VALUE;\n\nvar HTMLDOMPropertyConfig = {\n isCustomAttribute: RegExp.prototype.test.bind(new RegExp('^(data|aria)-[' + DOMProperty.ATTRIBUTE_NAME_CHAR + ']*$')),\n Properties: {\n /**\n * Standard Properties\n */\n accept: 0,\n acceptCharset: 0,\n accessKey: 0,\n action: 0,\n allowFullScreen: HAS_BOOLEAN_VALUE,\n allowTransparency: 0,\n alt: 0,\n // specifies target context for links with `preload` type\n as: 0,\n async: HAS_BOOLEAN_VALUE,\n autoComplete: 0,\n // autoFocus is polyfilled/normalized by AutoFocusUtils\n // autoFocus: HAS_BOOLEAN_VALUE,\n autoPlay: HAS_BOOLEAN_VALUE,\n capture: HAS_BOOLEAN_VALUE,\n cellPadding: 0,\n cellSpacing: 0,\n charSet: 0,\n challenge: 0,\n checked: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n cite: 0,\n classID: 0,\n className: 0,\n cols: HAS_POSITIVE_NUMERIC_VALUE,\n colSpan: 0,\n content: 0,\n contentEditable: 0,\n contextMenu: 0,\n controls: HAS_BOOLEAN_VALUE,\n coords: 0,\n crossOrigin: 0,\n data: 0, // For `` acts as `src`.\n dateTime: 0,\n 'default': HAS_BOOLEAN_VALUE,\n defer: HAS_BOOLEAN_VALUE,\n dir: 0,\n disabled: HAS_BOOLEAN_VALUE,\n download: HAS_OVERLOADED_BOOLEAN_VALUE,\n draggable: 0,\n encType: 0,\n form: 0,\n formAction: 0,\n formEncType: 0,\n formMethod: 0,\n formNoValidate: HAS_BOOLEAN_VALUE,\n formTarget: 0,\n frameBorder: 0,\n headers: 0,\n height: 0,\n hidden: HAS_BOOLEAN_VALUE,\n high: 0,\n href: 0,\n hrefLang: 0,\n htmlFor: 0,\n httpEquiv: 0,\n icon: 0,\n id: 0,\n inputMode: 0,\n integrity: 0,\n is: 0,\n keyParams: 0,\n keyType: 0,\n kind: 0,\n label: 0,\n lang: 0,\n list: 0,\n loop: HAS_BOOLEAN_VALUE,\n low: 0,\n manifest: 0,\n marginHeight: 0,\n marginWidth: 0,\n max: 0,\n maxLength: 0,\n media: 0,\n mediaGroup: 0,\n method: 0,\n min: 0,\n minLength: 0,\n // Caution; `option.selected` is not updated if `select.multiple` is\n // disabled with `removeAttribute`.\n multiple: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n muted: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n name: 0,\n nonce: 0,\n noValidate: HAS_BOOLEAN_VALUE,\n open: HAS_BOOLEAN_VALUE,\n optimum: 0,\n pattern: 0,\n placeholder: 0,\n playsInline: HAS_BOOLEAN_VALUE,\n poster: 0,\n preload: 0,\n profile: 0,\n radioGroup: 0,\n readOnly: HAS_BOOLEAN_VALUE,\n referrerPolicy: 0,\n rel: 0,\n required: HAS_BOOLEAN_VALUE,\n reversed: HAS_BOOLEAN_VALUE,\n role: 0,\n rows: HAS_POSITIVE_NUMERIC_VALUE,\n rowSpan: HAS_NUMERIC_VALUE,\n sandbox: 0,\n scope: 0,\n scoped: HAS_BOOLEAN_VALUE,\n scrolling: 0,\n seamless: HAS_BOOLEAN_VALUE,\n selected: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n shape: 0,\n size: HAS_POSITIVE_NUMERIC_VALUE,\n sizes: 0,\n span: HAS_POSITIVE_NUMERIC_VALUE,\n spellCheck: 0,\n src: 0,\n srcDoc: 0,\n srcLang: 0,\n srcSet: 0,\n start: HAS_NUMERIC_VALUE,\n step: 0,\n style: 0,\n summary: 0,\n tabIndex: 0,\n target: 0,\n title: 0,\n // Setting .type throws on non- tags\n type: 0,\n useMap: 0,\n value: 0,\n width: 0,\n wmode: 0,\n wrap: 0,\n\n /**\n * RDFa Properties\n */\n about: 0,\n datatype: 0,\n inlist: 0,\n prefix: 0,\n // property is also supported for OpenGraph in meta tags.\n property: 0,\n resource: 0,\n 'typeof': 0,\n vocab: 0,\n\n /**\n * Non-standard Properties\n */\n // autoCapitalize and autoCorrect are supported in Mobile Safari for\n // keyboard hints.\n autoCapitalize: 0,\n autoCorrect: 0,\n // autoSave allows WebKit/Blink to persist values of input fields on page reloads\n autoSave: 0,\n // color is for Safari mask-icon link\n color: 0,\n // itemProp, itemScope, itemType are for\n // Microdata support. See http://schema.org/docs/gs.html\n itemProp: 0,\n itemScope: HAS_BOOLEAN_VALUE,\n itemType: 0,\n // itemID and itemRef are for Microdata support as well but\n // only specified in the WHATWG spec document. See\n // https://html.spec.whatwg.org/multipage/microdata.html#microdata-dom-api\n itemID: 0,\n itemRef: 0,\n // results show looking glass icon and recent searches on input\n // search fields in WebKit/Blink\n results: 0,\n // IE-only attribute that specifies security restrictions on an iframe\n // as an alternative to the sandbox attribute on IE<10\n security: 0,\n // IE-only attribute that controls focus behavior\n unselectable: 0\n },\n DOMAttributeNames: {\n acceptCharset: 'accept-charset',\n className: 'class',\n htmlFor: 'for',\n httpEquiv: 'http-equiv'\n },\n DOMPropertyNames: {}\n};\n\nmodule.exports = HTMLDOMPropertyConfig;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/HTMLDOMPropertyConfig.js\n ** module id = 82\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactComponentBrowserEnvironment\n */\n\n'use strict';\n\nvar DOMChildrenOperations = require('./DOMChildrenOperations');\nvar ReactDOMIDOperations = require('./ReactDOMIDOperations');\n\n/**\n * Abstracts away all functionality of the reconciler that requires knowledge of\n * the browser context. TODO: These callers should be refactored to avoid the\n * need for this injection.\n */\nvar ReactComponentBrowserEnvironment = {\n\n processChildrenUpdates: ReactDOMIDOperations.dangerouslyProcessChildrenUpdates,\n\n replaceNodeWithMarkup: DOMChildrenOperations.dangerouslyReplaceNodeWithMarkup\n\n};\n\nmodule.exports = ReactComponentBrowserEnvironment;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/ReactComponentBrowserEnvironment.js\n ** module id = 83\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DOMChildrenOperations\n */\n\n'use strict';\n\nvar DOMLazyTree = require('./DOMLazyTree');\nvar Danger = require('./Danger');\nvar ReactMultiChildUpdateTypes = require('./ReactMultiChildUpdateTypes');\nvar ReactDOMComponentTree = require('./ReactDOMComponentTree');\nvar ReactInstrumentation = require('./ReactInstrumentation');\n\nvar createMicrosoftUnsafeLocalFunction = require('./createMicrosoftUnsafeLocalFunction');\nvar setInnerHTML = require('./setInnerHTML');\nvar setTextContent = require('./setTextContent');\n\nfunction getNodeAfter(parentNode, node) {\n // Special case for text components, which return [open, close] comments\n // from getHostNode.\n if (Array.isArray(node)) {\n node = node[1];\n }\n return node ? node.nextSibling : parentNode.firstChild;\n}\n\n/**\n * Inserts `childNode` as a child of `parentNode` at the `index`.\n *\n * @param {DOMElement} parentNode Parent node in which to insert.\n * @param {DOMElement} childNode Child node to insert.\n * @param {number} index Index at which to insert the child.\n * @internal\n */\nvar insertChildAt = createMicrosoftUnsafeLocalFunction(function (parentNode, childNode, referenceNode) {\n // We rely exclusively on `insertBefore(node, null)` instead of also using\n // `appendChild(node)`. (Using `undefined` is not allowed by all browsers so\n // we are careful to use `null`.)\n parentNode.insertBefore(childNode, referenceNode);\n});\n\nfunction insertLazyTreeChildAt(parentNode, childTree, referenceNode) {\n DOMLazyTree.insertTreeBefore(parentNode, childTree, referenceNode);\n}\n\nfunction moveChild(parentNode, childNode, referenceNode) {\n if (Array.isArray(childNode)) {\n moveDelimitedText(parentNode, childNode[0], childNode[1], referenceNode);\n } else {\n insertChildAt(parentNode, childNode, referenceNode);\n }\n}\n\nfunction removeChild(parentNode, childNode) {\n if (Array.isArray(childNode)) {\n var closingComment = childNode[1];\n childNode = childNode[0];\n removeDelimitedText(parentNode, childNode, closingComment);\n parentNode.removeChild(closingComment);\n }\n parentNode.removeChild(childNode);\n}\n\nfunction moveDelimitedText(parentNode, openingComment, closingComment, referenceNode) {\n var node = openingComment;\n while (true) {\n var nextNode = node.nextSibling;\n insertChildAt(parentNode, node, referenceNode);\n if (node === closingComment) {\n break;\n }\n node = nextNode;\n }\n}\n\nfunction removeDelimitedText(parentNode, startNode, closingComment) {\n while (true) {\n var node = startNode.nextSibling;\n if (node === closingComment) {\n // The closing comment is removed by ReactMultiChild.\n break;\n } else {\n parentNode.removeChild(node);\n }\n }\n}\n\nfunction replaceDelimitedText(openingComment, closingComment, stringText) {\n var parentNode = openingComment.parentNode;\n var nodeAfterComment = openingComment.nextSibling;\n if (nodeAfterComment === closingComment) {\n // There are no text nodes between the opening and closing comments; insert\n // a new one if stringText isn't empty.\n if (stringText) {\n insertChildAt(parentNode, document.createTextNode(stringText), nodeAfterComment);\n }\n } else {\n if (stringText) {\n // Set the text content of the first node after the opening comment, and\n // remove all following nodes up until the closing comment.\n setTextContent(nodeAfterComment, stringText);\n removeDelimitedText(parentNode, nodeAfterComment, closingComment);\n } else {\n removeDelimitedText(parentNode, openingComment, closingComment);\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(openingComment)._debugID, 'replace text', stringText);\n }\n}\n\nvar dangerouslyReplaceNodeWithMarkup = Danger.dangerouslyReplaceNodeWithMarkup;\nif (process.env.NODE_ENV !== 'production') {\n dangerouslyReplaceNodeWithMarkup = function (oldChild, markup, prevInstance) {\n Danger.dangerouslyReplaceNodeWithMarkup(oldChild, markup);\n if (prevInstance._debugID !== 0) {\n ReactInstrumentation.debugTool.onHostOperation(prevInstance._debugID, 'replace with', markup.toString());\n } else {\n var nextInstance = ReactDOMComponentTree.getInstanceFromNode(markup.node);\n if (nextInstance._debugID !== 0) {\n ReactInstrumentation.debugTool.onHostOperation(nextInstance._debugID, 'mount', markup.toString());\n }\n }\n };\n}\n\n/**\n * Operations for updating with DOM children.\n */\nvar DOMChildrenOperations = {\n\n dangerouslyReplaceNodeWithMarkup: dangerouslyReplaceNodeWithMarkup,\n\n replaceDelimitedText: replaceDelimitedText,\n\n /**\n * Updates a component's children by processing a series of updates. The\n * update configurations are each expected to have a `parentNode` property.\n *\n * @param {array} updates List of update configurations.\n * @internal\n */\n processUpdates: function (parentNode, updates) {\n if (process.env.NODE_ENV !== 'production') {\n var parentNodeDebugID = ReactDOMComponentTree.getInstanceFromNode(parentNode)._debugID;\n }\n\n for (var k = 0; k < updates.length; k++) {\n var update = updates[k];\n switch (update.type) {\n case ReactMultiChildUpdateTypes.INSERT_MARKUP:\n insertLazyTreeChildAt(parentNode, update.content, getNodeAfter(parentNode, update.afterNode));\n if (process.env.NODE_ENV !== 'production') {\n ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'insert child', { toIndex: update.toIndex, content: update.content.toString() });\n }\n break;\n case ReactMultiChildUpdateTypes.MOVE_EXISTING:\n moveChild(parentNode, update.fromNode, getNodeAfter(parentNode, update.afterNode));\n if (process.env.NODE_ENV !== 'production') {\n ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'move child', { fromIndex: update.fromIndex, toIndex: update.toIndex });\n }\n break;\n case ReactMultiChildUpdateTypes.SET_MARKUP:\n setInnerHTML(parentNode, update.content);\n if (process.env.NODE_ENV !== 'production') {\n ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'replace children', update.content.toString());\n }\n break;\n case ReactMultiChildUpdateTypes.TEXT_CONTENT:\n setTextContent(parentNode, update.content);\n if (process.env.NODE_ENV !== 'production') {\n ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'replace text', update.content.toString());\n }\n break;\n case ReactMultiChildUpdateTypes.REMOVE_NODE:\n removeChild(parentNode, update.fromNode);\n if (process.env.NODE_ENV !== 'production') {\n ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'remove child', { fromIndex: update.fromIndex });\n }\n break;\n }\n }\n }\n\n};\n\nmodule.exports = DOMChildrenOperations;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/DOMChildrenOperations.js\n ** module id = 84\n ** module chunks = 2\n **/","/**\n * Copyright 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DOMLazyTree\n */\n\n'use strict';\n\nvar DOMNamespaces = require('./DOMNamespaces');\nvar setInnerHTML = require('./setInnerHTML');\n\nvar createMicrosoftUnsafeLocalFunction = require('./createMicrosoftUnsafeLocalFunction');\nvar setTextContent = require('./setTextContent');\n\nvar ELEMENT_NODE_TYPE = 1;\nvar DOCUMENT_FRAGMENT_NODE_TYPE = 11;\n\n/**\n * In IE (8-11) and Edge, appending nodes with no children is dramatically\n * faster than appending a full subtree, so we essentially queue up the\n * .appendChild calls here and apply them so each node is added to its parent\n * before any children are added.\n *\n * In other browsers, doing so is slower or neutral compared to the other order\n * (in Firefox, twice as slow) so we only do this inversion in IE.\n *\n * See https://github.com/spicyj/innerhtml-vs-createelement-vs-clonenode.\n */\nvar enableLazy = typeof document !== 'undefined' && typeof document.documentMode === 'number' || typeof navigator !== 'undefined' && typeof navigator.userAgent === 'string' && /\\bEdge\\/\\d/.test(navigator.userAgent);\n\nfunction insertTreeChildren(tree) {\n if (!enableLazy) {\n return;\n }\n var node = tree.node;\n var children = tree.children;\n if (children.length) {\n for (var i = 0; i < children.length; i++) {\n insertTreeBefore(node, children[i], null);\n }\n } else if (tree.html != null) {\n setInnerHTML(node, tree.html);\n } else if (tree.text != null) {\n setTextContent(node, tree.text);\n }\n}\n\nvar insertTreeBefore = createMicrosoftUnsafeLocalFunction(function (parentNode, tree, referenceNode) {\n // DocumentFragments aren't actually part of the DOM after insertion so\n // appending children won't update the DOM. We need to ensure the fragment\n // is properly populated first, breaking out of our lazy approach for just\n // this level. Also, some plugins (like Flash Player) will read\n // nodes immediately upon insertion into the DOM, so \n // must also be populated prior to insertion into the DOM.\n if (tree.node.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE || tree.node.nodeType === ELEMENT_NODE_TYPE && tree.node.nodeName.toLowerCase() === 'object' && (tree.node.namespaceURI == null || tree.node.namespaceURI === DOMNamespaces.html)) {\n insertTreeChildren(tree);\n parentNode.insertBefore(tree.node, referenceNode);\n } else {\n parentNode.insertBefore(tree.node, referenceNode);\n insertTreeChildren(tree);\n }\n});\n\nfunction replaceChildWithTree(oldNode, newTree) {\n oldNode.parentNode.replaceChild(newTree.node, oldNode);\n insertTreeChildren(newTree);\n}\n\nfunction queueChild(parentTree, childTree) {\n if (enableLazy) {\n parentTree.children.push(childTree);\n } else {\n parentTree.node.appendChild(childTree.node);\n }\n}\n\nfunction queueHTML(tree, html) {\n if (enableLazy) {\n tree.html = html;\n } else {\n setInnerHTML(tree.node, html);\n }\n}\n\nfunction queueText(tree, text) {\n if (enableLazy) {\n tree.text = text;\n } else {\n setTextContent(tree.node, text);\n }\n}\n\nfunction toString() {\n return this.node.nodeName;\n}\n\nfunction DOMLazyTree(node) {\n return {\n node: node,\n children: [],\n html: null,\n text: null,\n toString: toString\n };\n}\n\nDOMLazyTree.insertTreeBefore = insertTreeBefore;\nDOMLazyTree.replaceChildWithTree = replaceChildWithTree;\nDOMLazyTree.queueChild = queueChild;\nDOMLazyTree.queueHTML = queueHTML;\nDOMLazyTree.queueText = queueText;\n\nmodule.exports = DOMLazyTree;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/DOMLazyTree.js\n ** module id = 85\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DOMNamespaces\n */\n\n'use strict';\n\nvar DOMNamespaces = {\n html: 'http://www.w3.org/1999/xhtml',\n mathml: 'http://www.w3.org/1998/Math/MathML',\n svg: 'http://www.w3.org/2000/svg'\n};\n\nmodule.exports = DOMNamespaces;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/DOMNamespaces.js\n ** module id = 86\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule setInnerHTML\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar DOMNamespaces = require('./DOMNamespaces');\n\nvar WHITESPACE_TEST = /^[ \\r\\n\\t\\f]/;\nvar NONVISIBLE_TEST = /<(!--|link|noscript|meta|script|style)[ \\r\\n\\t\\f\\/>]/;\n\nvar createMicrosoftUnsafeLocalFunction = require('./createMicrosoftUnsafeLocalFunction');\n\n// SVG temp container for IE lacking innerHTML\nvar reusableSVGContainer;\n\n/**\n * Set the innerHTML property of a node, ensuring that whitespace is preserved\n * even in IE8.\n *\n * @param {DOMElement} node\n * @param {string} html\n * @internal\n */\nvar setInnerHTML = createMicrosoftUnsafeLocalFunction(function (node, html) {\n // IE does not have innerHTML for SVG nodes, so instead we inject the\n // new markup in a temp node and then move the child nodes across into\n // the target node\n if (node.namespaceURI === DOMNamespaces.svg && !('innerHTML' in node)) {\n reusableSVGContainer = reusableSVGContainer || document.createElement('div');\n reusableSVGContainer.innerHTML = '' + html + '';\n var svgNode = reusableSVGContainer.firstChild;\n while (svgNode.firstChild) {\n node.appendChild(svgNode.firstChild);\n }\n } else {\n node.innerHTML = html;\n }\n});\n\nif (ExecutionEnvironment.canUseDOM) {\n // IE8: When updating a just created node with innerHTML only leading\n // whitespace is removed. When updating an existing node with innerHTML\n // whitespace in root TextNodes is also collapsed.\n // @see quirksmode.org/bugreports/archives/2004/11/innerhtml_and_t.html\n\n // Feature detection; only IE8 is known to behave improperly like this.\n var testElement = document.createElement('div');\n testElement.innerHTML = ' ';\n if (testElement.innerHTML === '') {\n setInnerHTML = function (node, html) {\n // Magic theory: IE8 supposedly differentiates between added and updated\n // nodes when processing innerHTML, innerHTML on updated nodes suffers\n // from worse whitespace behavior. Re-adding a node like this triggers\n // the initial and more favorable whitespace behavior.\n // TODO: What to do on a detached node?\n if (node.parentNode) {\n node.parentNode.replaceChild(node, node);\n }\n\n // We also implement a workaround for non-visible tags disappearing into\n // thin air on IE8, this only happens if there is no visible text\n // in-front of the non-visible tags. Piggyback on the whitespace fix\n // and simply check if any non-visible tags appear in the source.\n if (WHITESPACE_TEST.test(html) || html[0] === '<' && NONVISIBLE_TEST.test(html)) {\n // Recover leading whitespace by temporarily prepending any character.\n // \\uFEFF has the potential advantage of being zero-width/invisible.\n // UglifyJS drops U+FEFF chars when parsing, so use String.fromCharCode\n // in hopes that this is preserved even if \"\\uFEFF\" is transformed to\n // the actual Unicode character (by Babel, for example).\n // https://github.com/mishoo/UglifyJS2/blob/v2.4.20/lib/parse.js#L216\n node.innerHTML = String.fromCharCode(0xFEFF) + html;\n\n // deleteData leaves an empty `TextNode` which offsets the index of all\n // children. Definitely want to avoid this.\n var textNode = node.firstChild;\n if (textNode.data.length === 1) {\n node.removeChild(textNode);\n } else {\n textNode.deleteData(0, 1);\n }\n } else {\n node.innerHTML = html;\n }\n };\n }\n testElement = null;\n}\n\nmodule.exports = setInnerHTML;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/setInnerHTML.js\n ** module id = 87\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule createMicrosoftUnsafeLocalFunction\n */\n\n/* globals MSApp */\n\n'use strict';\n\n/**\n * Create a function which has 'unsafe' privileges (required by windows8 apps)\n */\n\nvar createMicrosoftUnsafeLocalFunction = function (func) {\n if (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) {\n return function (arg0, arg1, arg2, arg3) {\n MSApp.execUnsafeLocalFunction(function () {\n return func(arg0, arg1, arg2, arg3);\n });\n };\n } else {\n return func;\n }\n};\n\nmodule.exports = createMicrosoftUnsafeLocalFunction;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/createMicrosoftUnsafeLocalFunction.js\n ** module id = 88\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule setTextContent\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\nvar escapeTextContentForBrowser = require('./escapeTextContentForBrowser');\nvar setInnerHTML = require('./setInnerHTML');\n\n/**\n * Set the textContent property of a node, ensuring that whitespace is preserved\n * even in IE8. innerText is a poor substitute for textContent and, among many\n * issues, inserts
instead of the literal newline chars. innerHTML behaves\n * as it should.\n *\n * @param {DOMElement} node\n * @param {string} text\n * @internal\n */\nvar setTextContent = function (node, text) {\n if (text) {\n var firstChild = node.firstChild;\n\n if (firstChild && firstChild === node.lastChild && firstChild.nodeType === 3) {\n firstChild.nodeValue = text;\n return;\n }\n }\n node.textContent = text;\n};\n\nif (ExecutionEnvironment.canUseDOM) {\n if (!('textContent' in document.documentElement)) {\n setTextContent = function (node, text) {\n setInnerHTML(node, escapeTextContentForBrowser(text));\n };\n }\n}\n\nmodule.exports = setTextContent;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/setTextContent.js\n ** module id = 89\n ** module chunks = 2\n **/","/**\n * Copyright 2016-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * Based on the escape-html library, which is used under the MIT License below:\n *\n * Copyright (c) 2012-2013 TJ Holowaychuk\n * Copyright (c) 2015 Andreas Lubbe\n * Copyright (c) 2015 Tiancheng \"Timothy\" Gu\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * 'Software'), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * @providesModule escapeTextContentForBrowser\n */\n\n'use strict';\n\n// code copied and modified from escape-html\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34:\n // \"\n escape = '"';\n break;\n case 38:\n // &\n escape = '&';\n break;\n case 39:\n // '\n escape = '''; // modified from escape-html; used to be '''\n break;\n case 60:\n // <\n escape = '<';\n break;\n case 62:\n // >\n escape = '>';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index ? html + str.substring(lastIndex, index) : html;\n}\n// end code copied and modified from escape-html\n\n\n/**\n * Escapes text to prevent scripting attacks.\n *\n * @param {*} text Text value to escape.\n * @return {string} An escaped string.\n */\nfunction escapeTextContentForBrowser(text) {\n if (typeof text === 'boolean' || typeof text === 'number') {\n // this shortcircuit helps perf for types that we know will never have\n // special characters, especially given that this function is used often\n // for numeric dom ids.\n return '' + text;\n }\n return escapeHtml(text);\n}\n\nmodule.exports = escapeTextContentForBrowser;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/escapeTextContentForBrowser.js\n ** module id = 90\n ** module chunks = 2\n **/","/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule Danger\n */\n\n'use strict';\n\nvar _prodInvariant = require('./reactProdInvariant');\n\nvar DOMLazyTree = require('./DOMLazyTree');\nvar ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\nvar createNodesFromMarkup = require('fbjs/lib/createNodesFromMarkup');\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar invariant = require('fbjs/lib/invariant');\n\nvar Danger = {\n\n /**\n * Replaces a node with a string of markup at its current position within its\n * parent. The markup must render into a single root node.\n *\n * @param {DOMElement} oldChild Child node to replace.\n * @param {string} markup Markup to render in place of the child node.\n * @internal\n */\n dangerouslyReplaceNodeWithMarkup: function (oldChild, markup) {\n !ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot render markup in a worker thread. Make sure `window` and `document` are available globally before requiring React when unit testing or use ReactDOMServer.renderToString() for server rendering.') : _prodInvariant('56') : void 0;\n !markup ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Missing markup.') : _prodInvariant('57') : void 0;\n !(oldChild.nodeName !== 'HTML') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot replace markup of the node. This is because browser quirks make this unreliable and/or slow. If you want to render to the root you must use server rendering. See ReactDOMServer.renderToString().') : _prodInvariant('58') : void 0;\n\n if (typeof markup === 'string') {\n var newChild = createNodesFromMarkup(markup, emptyFunction)[0];\n oldChild.parentNode.replaceChild(newChild, oldChild);\n } else {\n DOMLazyTree.replaceChildWithTree(oldChild, markup);\n }\n }\n\n};\n\nmodule.exports = Danger;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react/lib/Danger.js\n ** module id = 91\n ** module chunks = 2\n **/","'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks\n */\n\n/*eslint-disable fb-www/unsafe-html*/\n\nvar ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar createArrayFromMixed = require('./createArrayFromMixed');\nvar getMarkupWrap = require('./getMarkupWrap');\nvar invariant = require('./invariant');\n\n/**\n * Dummy container used to render all markup.\n */\nvar dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;\n\n/**\n * Pattern used by `getNodeName`.\n */\nvar nodeNamePattern = /^\\s*<(\\w+)/;\n\n/**\n * Extracts the `nodeName` of the first element in a string of markup.\n *\n * @param {string} markup String of markup.\n * @return {?string} Node name of the supplied markup.\n */\nfunction getNodeName(markup) {\n var nodeNameMatch = markup.match(nodeNamePattern);\n return nodeNameMatch && nodeNameMatch[1].toLowerCase();\n}\n\n/**\n * Creates an array containing the nodes rendered from the supplied markup. The\n * optionally supplied `handleScript` function will be invoked once for each\n * \n// \n//\n// Here's how it works.\n//\n// ```\n// // Get a reference to the logo element.\n// var el = document.getElementById('logo');\n//\n// // create a SpringSystem and a Spring with a bouncy config.\n// var springSystem = new rebound.SpringSystem();\n// var spring = springSystem.createSpring(50, 3);\n//\n// // Add a listener to the spring. Every time the physics\n// // solver updates the Spring's value onSpringUpdate will\n// // be called.\n// spring.addListener({\n// onSpringUpdate: function(spring) {\n// var val = spring.getCurrentValue();\n// val = rebound.MathUtil\n// .mapValueInRange(val, 0, 1, 1, 0.5);\n// scale(el, val);\n// }\n// });\n//\n// // Listen for mouse down/up/out and toggle the\n// //springs endValue from 0 to 1.\n// el.addEventListener('mousedown', function() {\n// spring.setEndValue(1);\n// });\n//\n// el.addEventListener('mouseout', function() {\n// spring.setEndValue(0);\n// });\n//\n// el.addEventListener('mouseup', function() {\n// spring.setEndValue(0);\n// });\n//\n// // Helper for scaling an element with css transforms.\n// function scale(el, val) {\n// el.style.mozTransform =\n// el.style.msTransform =\n// el.style.webkitTransform =\n// el.style.transform = 'scale3d(' +\n// val + ', ' + val + ', 1)';\n// }\n// ```\n\n(function() {\n var rebound = {};\n var util = rebound.util = {};\n var concat = Array.prototype.concat;\n var slice = Array.prototype.slice;\n\n // Bind a function to a context object.\n util.bind = function bind(func, context) {\n var args = slice.call(arguments, 2);\n return function() {\n func.apply(context, concat.call(args, slice.call(arguments)));\n };\n };\n\n // Add all the properties in the source to the target.\n util.extend = function extend(target, source) {\n for (var key in source) {\n if (source.hasOwnProperty(key)) {\n target[key] = source[key];\n }\n }\n };\n\n // SpringSystem\n // ------------\n // **SpringSystem** is a set of Springs that all run on the same physics\n // timing loop. To get started with a Rebound animation you first\n // create a new SpringSystem and then add springs to it.\n var SpringSystem = rebound.SpringSystem = function SpringSystem(looper) {\n this._springRegistry = {};\n this._activeSprings = [];\n this.listeners = [];\n this._idleSpringIndices = [];\n this.looper = looper || new AnimationLooper();\n this.looper.springSystem = this;\n };\n\n util.extend(SpringSystem.prototype, {\n\n _springRegistry: null,\n\n _isIdle: true,\n\n _lastTimeMillis: -1,\n\n _activeSprings: null,\n\n listeners: null,\n\n _idleSpringIndices: null,\n\n // A SpringSystem is iterated by a looper. The looper is responsible\n // for executing each frame as the SpringSystem is resolved to idle.\n // There are three types of Loopers described below AnimationLooper,\n // SimulationLooper, and SteppingSimulationLooper. AnimationLooper is\n // the default as it is the most useful for common UI animations.\n setLooper: function(looper) {\n this.looper = looper;\n looper.springSystem = this;\n },\n\n // Add a new spring to this SpringSystem. This Spring will now be solved for\n // during the physics iteration loop. By default the spring will use the\n // default Origami spring config with 40 tension and 7 friction, but you can\n // also provide your own values here.\n createSpring: function(tension, friction) {\n var springConfig;\n if (tension === undefined || friction === undefined) {\n springConfig = SpringConfig.DEFAULT_ORIGAMI_SPRING_CONFIG;\n } else {\n springConfig =\n SpringConfig.fromOrigamiTensionAndFriction(tension, friction);\n }\n return this.createSpringWithConfig(springConfig);\n },\n\n // Add a spring with a specified bounciness and speed. To replicate Origami\n // compositions based on PopAnimation patches, use this factory method to\n // create matching springs.\n createSpringWithBouncinessAndSpeed: function(bounciness, speed) {\n var springConfig;\n if (bounciness === undefined || speed === undefined) {\n springConfig = SpringConfig.DEFAULT_ORIGAMI_SPRING_CONFIG;\n } else {\n springConfig =\n SpringConfig.fromBouncinessAndSpeed(bounciness, speed);\n }\n return this.createSpringWithConfig(springConfig);\n },\n\n // Add a spring with the provided SpringConfig.\n createSpringWithConfig: function(springConfig) {\n var spring = new Spring(this);\n this.registerSpring(spring);\n spring.setSpringConfig(springConfig);\n return spring;\n },\n\n // You can check if a SpringSystem is idle or active by calling\n // getIsIdle. If all of the Springs in the SpringSystem are at rest,\n // i.e. the physics forces have reached equilibrium, then this\n // method will return true.\n getIsIdle: function() {\n return this._isIdle;\n },\n\n // Retrieve a specific Spring from the SpringSystem by id. This\n // can be useful for inspecting the state of a spring before\n // or after an integration loop in the SpringSystem executes.\n getSpringById: function (id) {\n return this._springRegistry[id];\n },\n\n // Get a listing of all the springs registered with this\n // SpringSystem.\n getAllSprings: function() {\n var vals = [];\n for (var id in this._springRegistry) {\n if (this._springRegistry.hasOwnProperty(id)) {\n vals.push(this._springRegistry[id]);\n }\n }\n return vals;\n },\n\n // registerSpring is called automatically as soon as you create\n // a Spring with SpringSystem#createSpring. This method sets the\n // spring up in the registry so that it can be solved in the\n // solver loop.\n registerSpring: function(spring) {\n this._springRegistry[spring.getId()] = spring;\n },\n\n // Deregister a spring with this SpringSystem. The SpringSystem will\n // no longer consider this Spring during its integration loop once\n // this is called. This is normally done automatically for you when\n // you call Spring#destroy.\n deregisterSpring: function(spring) {\n removeFirst(this._activeSprings, spring);\n delete this._springRegistry[spring.getId()];\n },\n\n advance: function(time, deltaTime) {\n while(this._idleSpringIndices.length > 0) this._idleSpringIndices.pop();\n for (var i = 0, len = this._activeSprings.length; i < len; i++) {\n var spring = this._activeSprings[i];\n if (spring.systemShouldAdvance()) {\n spring.advance(time / 1000.0, deltaTime / 1000.0);\n } else {\n this._idleSpringIndices.push(this._activeSprings.indexOf(spring));\n }\n }\n while(this._idleSpringIndices.length > 0) {\n var idx = this._idleSpringIndices.pop();\n idx >= 0 && this._activeSprings.splice(idx, 1);\n }\n },\n\n // This is our main solver loop called to move the simulation\n // forward through time. Before each pass in the solver loop\n // onBeforeIntegrate is called on an any listeners that have\n // registered themeselves with the SpringSystem. This gives you\n // an opportunity to apply any constraints or adjustments to\n // the springs that should be enforced before each iteration\n // loop. Next the advance method is called to move each Spring in\n // the systemShouldAdvance forward to the current time. After the\n // integration step runs in advance, onAfterIntegrate is called\n // on any listeners that have registered themselves with the\n // SpringSystem. This gives you an opportunity to run any post\n // integration constraints or adjustments on the Springs in the\n // SpringSystem.\n loop: function(currentTimeMillis) {\n var listener;\n if (this._lastTimeMillis === -1) {\n this._lastTimeMillis = currentTimeMillis -1;\n }\n var ellapsedMillis = currentTimeMillis - this._lastTimeMillis;\n this._lastTimeMillis = currentTimeMillis;\n\n var i = 0, len = this.listeners.length;\n for (i = 0; i < len; i++) {\n listener = this.listeners[i];\n listener.onBeforeIntegrate && listener.onBeforeIntegrate(this);\n }\n\n this.advance(currentTimeMillis, ellapsedMillis);\n if (this._activeSprings.length === 0) {\n this._isIdle = true;\n this._lastTimeMillis = -1;\n }\n\n for (i = 0; i < len; i++) {\n listener = this.listeners[i];\n listener.onAfterIntegrate && listener.onAfterIntegrate(this);\n }\n\n if (!this._isIdle) {\n this.looper.run();\n }\n },\n\n // activateSpring is used to notify the SpringSystem that a Spring\n // has become displaced. The system responds by starting its solver\n // loop up if it is currently idle.\n activateSpring: function(springId) {\n var spring = this._springRegistry[springId];\n if (this._activeSprings.indexOf(spring) == -1) {\n this._activeSprings.push(spring);\n }\n if (this.getIsIdle()) {\n this._isIdle = false;\n this.looper.run();\n }\n },\n\n // Add a listener to the SpringSystem so that you can receive\n // before/after integration notifications allowing Springs to be\n // constrained or adjusted.\n addListener: function(listener) {\n this.listeners.push(listener);\n },\n\n // Remove a previously added listener on the SpringSystem.\n removeListener: function(listener) {\n removeFirst(this.listeners, listener);\n },\n\n // Remove all previously added listeners on the SpringSystem.\n removeAllListeners: function() {\n this.listeners = [];\n }\n\n });\n\n // Spring\n // ------\n // **Spring** provides a model of a classical spring acting to\n // resolve a body to equilibrium. Springs have configurable\n // tension which is a force multipler on the displacement of the\n // spring from its rest point or `endValue` as defined by [Hooke's\n // law](http://en.wikipedia.org/wiki/Hooke's_law). Springs also have\n // configurable friction, which ensures that they do not oscillate\n // infinitely. When a Spring is displaced by updating it's resting\n // or `currentValue`, the SpringSystems that contain that Spring\n // will automatically start looping to solve for equilibrium. As each\n // timestep passes, `SpringListener` objects attached to the Spring\n // will be notified of the updates providing a way to drive an\n // animation off of the spring's resolution curve.\n var Spring = rebound.Spring = function Spring(springSystem) {\n this._id = 's' + Spring._ID++;\n this._springSystem = springSystem;\n this.listeners = [];\n this._currentState = new PhysicsState();\n this._previousState = new PhysicsState();\n this._tempState = new PhysicsState();\n };\n\n util.extend(Spring, {\n _ID: 0,\n\n MAX_DELTA_TIME_SEC: 0.064,\n\n SOLVER_TIMESTEP_SEC: 0.001\n\n });\n\n util.extend(Spring.prototype, {\n\n _id: 0,\n\n _springConfig: null,\n\n _overshootClampingEnabled: false,\n\n _currentState: null,\n\n _previousState: null,\n\n _tempState: null,\n\n _startValue: 0,\n\n _endValue: 0,\n\n _wasAtRest: true,\n\n _restSpeedThreshold: 0.001,\n\n _displacementFromRestThreshold: 0.001,\n\n listeners: null,\n\n _timeAccumulator: 0,\n\n _springSystem: null,\n\n // Remove a Spring from simulation and clear its listeners.\n destroy: function() {\n this.listeners = [];\n this.frames = [];\n this._springSystem.deregisterSpring(this);\n },\n\n // Get the id of the spring, which can be used to retrieve it from\n // the SpringSystems it participates in later.\n getId: function() {\n return this._id;\n },\n\n // Set the configuration values for this Spring. A SpringConfig\n // contains the tension and friction values used to solve for the\n // equilibrium of the Spring in the physics loop.\n setSpringConfig: function(springConfig) {\n this._springConfig = springConfig;\n return this;\n },\n\n // Retrieve the SpringConfig used by this Spring.\n getSpringConfig: function() {\n return this._springConfig;\n },\n\n // Set the current position of this Spring. Listeners will be updated\n // with this value immediately. If the rest or `endValue` is not\n // updated to match this value, then the spring will be dispalced and\n // the SpringSystem will start to loop to restore the spring to the\n // `endValue`.\n //\n // A common pattern is to move a Spring around without animation by\n // calling.\n //\n // ```\n // spring.setCurrentValue(n).setAtRest();\n // ```\n //\n // This moves the Spring to a new position `n`, sets the endValue\n // to `n`, and removes any velocity from the `Spring`. By doing\n // this you can allow the `SpringListener` to manage the position\n // of UI elements attached to the spring even when moving without\n // animation. For example, when dragging an element you can\n // update the position of an attached view through a spring\n // by calling `spring.setCurrentValue(x)`. When\n // the gesture ends you can update the Springs\n // velocity and endValue\n // `spring.setVelocity(gestureEndVelocity).setEndValue(flingTarget)`\n // to cause it to naturally animate the UI element to the resting\n // position taking into account existing velocity. The codepaths for\n // synchronous movement and spring driven animation can\n // be unified using this technique.\n setCurrentValue: function(currentValue, skipSetAtRest) {\n this._startValue = currentValue;\n this._currentState.position = currentValue;\n if (!skipSetAtRest) {\n this.setAtRest();\n }\n this.notifyPositionUpdated(false, false);\n return this;\n },\n\n // Get the position that the most recent animation started at. This\n // can be useful for determining the number off oscillations that\n // have occurred.\n getStartValue: function() {\n return this._startValue;\n },\n\n // Retrieve the current value of the Spring.\n getCurrentValue: function() {\n return this._currentState.position;\n },\n\n // Get the absolute distance of the Spring from it's resting endValue\n // position.\n getCurrentDisplacementDistance: function() {\n return this.getDisplacementDistanceForState(this._currentState);\n },\n\n getDisplacementDistanceForState: function(state) {\n return Math.abs(this._endValue - state.position);\n },\n\n // Set the endValue or resting position of the spring. If this\n // value is different than the current value, the SpringSystem will\n // be notified and will begin running its solver loop to resolve\n // the Spring to equilibrium. Any listeners that are registered\n // for onSpringEndStateChange will also be notified of this update\n // immediately.\n setEndValue: function(endValue) {\n if (this._endValue == endValue && this.isAtRest()) {\n return this;\n }\n this._startValue = this.getCurrentValue();\n this._endValue = endValue;\n this._springSystem.activateSpring(this.getId());\n for (var i = 0, len = this.listeners.length; i < len; i++) {\n var listener = this.listeners[i];\n var onChange = listener.onSpringEndStateChange;\n onChange && onChange(this);\n }\n return this;\n },\n\n // Retrieve the endValue or resting position of this spring.\n getEndValue: function() {\n return this._endValue;\n },\n\n // Set the current velocity of the Spring. As previously mentioned,\n // this can be useful when you are performing a direct manipulation\n // gesture. When a UI element is released you may call setVelocity\n // on its animation Spring so that the Spring continues with the\n // same velocity as the gesture ended with. The friction, tension,\n // and displacement of the Spring will then govern its motion to\n // return to rest on a natural feeling curve.\n setVelocity: function(velocity) {\n if (velocity === this._currentState.velocity) {\n return this;\n }\n this._currentState.velocity = velocity;\n this._springSystem.activateSpring(this.getId());\n return this;\n },\n\n // Get the current velocity of the Spring.\n getVelocity: function() {\n return this._currentState.velocity;\n },\n\n // Set a threshold value for the movement speed of the Spring below\n // which it will be considered to be not moving or resting.\n setRestSpeedThreshold: function(restSpeedThreshold) {\n this._restSpeedThreshold = restSpeedThreshold;\n return this;\n },\n\n // Retrieve the rest speed threshold for this Spring.\n getRestSpeedThreshold: function() {\n return this._restSpeedThreshold;\n },\n\n // Set a threshold value for displacement below which the Spring\n // will be considered to be not displaced i.e. at its resting\n // `endValue`.\n setRestDisplacementThreshold: function(displacementFromRestThreshold) {\n this._displacementFromRestThreshold = displacementFromRestThreshold;\n },\n\n // Retrieve the rest displacement threshold for this spring.\n getRestDisplacementThreshold: function() {\n return this._displacementFromRestThreshold;\n },\n\n // Enable overshoot clamping. This means that the Spring will stop\n // immediately when it reaches its resting position regardless of\n // any existing momentum it may have. This can be useful for certain\n // types of animations that should not oscillate such as a scale\n // down to 0 or alpha fade.\n setOvershootClampingEnabled: function(enabled) {\n this._overshootClampingEnabled = enabled;\n return this;\n },\n\n // Check if overshoot clamping is enabled for this spring.\n isOvershootClampingEnabled: function() {\n return this._overshootClampingEnabled;\n },\n\n // Check if the Spring has gone past its end point by comparing\n // the direction it was moving in when it started to the current\n // position and end value.\n isOvershooting: function() {\n var start = this._startValue;\n var end = this._endValue;\n return this._springConfig.tension > 0 &&\n ((start < end && this.getCurrentValue() > end) ||\n (start > end && this.getCurrentValue() < end));\n },\n\n // Spring.advance is the main solver method for the Spring. It takes\n // the current time and delta since the last time step and performs\n // an RK4 integration to get the new position and velocity state\n // for the Spring based on the tension, friction, velocity, and\n // displacement of the Spring.\n advance: function(time, realDeltaTime) {\n var isAtRest = this.isAtRest();\n\n if (isAtRest && this._wasAtRest) {\n return;\n }\n\n var adjustedDeltaTime = realDeltaTime;\n if (realDeltaTime > Spring.MAX_DELTA_TIME_SEC) {\n adjustedDeltaTime = Spring.MAX_DELTA_TIME_SEC;\n }\n\n this._timeAccumulator += adjustedDeltaTime;\n\n var tension = this._springConfig.tension,\n friction = this._springConfig.friction,\n\n position = this._currentState.position,\n velocity = this._currentState.velocity,\n tempPosition = this._tempState.position,\n tempVelocity = this._tempState.velocity,\n\n aVelocity, aAcceleration,\n bVelocity, bAcceleration,\n cVelocity, cAcceleration,\n dVelocity, dAcceleration,\n\n dxdt, dvdt;\n\n while(this._timeAccumulator >= Spring.SOLVER_TIMESTEP_SEC) {\n\n this._timeAccumulator -= Spring.SOLVER_TIMESTEP_SEC;\n\n if (this._timeAccumulator < Spring.SOLVER_TIMESTEP_SEC) {\n this._previousState.position = position;\n this._previousState.velocity = velocity;\n }\n\n aVelocity = velocity;\n aAcceleration =\n (tension * (this._endValue - tempPosition)) - friction * velocity;\n\n tempPosition = position + aVelocity * Spring.SOLVER_TIMESTEP_SEC * 0.5;\n tempVelocity =\n velocity + aAcceleration * Spring.SOLVER_TIMESTEP_SEC * 0.5;\n bVelocity = tempVelocity;\n bAcceleration =\n (tension * (this._endValue - tempPosition)) - friction * tempVelocity;\n\n tempPosition = position + bVelocity * Spring.SOLVER_TIMESTEP_SEC * 0.5;\n tempVelocity =\n velocity + bAcceleration * Spring.SOLVER_TIMESTEP_SEC * 0.5;\n cVelocity = tempVelocity;\n cAcceleration =\n (tension * (this._endValue - tempPosition)) - friction * tempVelocity;\n\n tempPosition = position + cVelocity * Spring.SOLVER_TIMESTEP_SEC * 0.5;\n tempVelocity =\n velocity + cAcceleration * Spring.SOLVER_TIMESTEP_SEC * 0.5;\n dVelocity = tempVelocity;\n dAcceleration =\n (tension * (this._endValue - tempPosition)) - friction * tempVelocity;\n\n dxdt =\n 1.0/6.0 * (aVelocity + 2.0 * (bVelocity + cVelocity) + dVelocity);\n dvdt = 1.0/6.0 * (\n aAcceleration + 2.0 * (bAcceleration + cAcceleration) + dAcceleration\n );\n\n position += dxdt * Spring.SOLVER_TIMESTEP_SEC;\n velocity += dvdt * Spring.SOLVER_TIMESTEP_SEC;\n }\n\n this._tempState.position = tempPosition;\n this._tempState.velocity = tempVelocity;\n\n this._currentState.position = position;\n this._currentState.velocity = velocity;\n\n if (this._timeAccumulator > 0) {\n this._interpolate(this._timeAccumulator / Spring.SOLVER_TIMESTEP_SEC);\n }\n\n if (this.isAtRest() ||\n this._overshootClampingEnabled && this.isOvershooting()) {\n\n if (this._springConfig.tension > 0) {\n this._startValue = this._endValue;\n this._currentState.position = this._endValue;\n } else {\n this._endValue = this._currentState.position;\n this._startValue = this._endValue;\n }\n this.setVelocity(0);\n isAtRest = true;\n }\n\n var notifyActivate = false;\n if (this._wasAtRest) {\n this._wasAtRest = false;\n notifyActivate = true;\n }\n\n var notifyAtRest = false;\n if (isAtRest) {\n this._wasAtRest = true;\n notifyAtRest = true;\n }\n\n this.notifyPositionUpdated(notifyActivate, notifyAtRest);\n },\n\n notifyPositionUpdated: function(notifyActivate, notifyAtRest) {\n for (var i = 0, len = this.listeners.length; i < len; i++) {\n var listener = this.listeners[i];\n if (notifyActivate && listener.onSpringActivate) {\n listener.onSpringActivate(this);\n }\n\n if (listener.onSpringUpdate) {\n listener.onSpringUpdate(this);\n }\n\n if (notifyAtRest && listener.onSpringAtRest) {\n listener.onSpringAtRest(this);\n }\n }\n },\n\n\n // Check if the SpringSystem should advance. Springs are advanced\n // a final frame after they reach equilibrium to ensure that the\n // currentValue is exactly the requested endValue regardless of the\n // displacement threshold.\n systemShouldAdvance: function() {\n return !this.isAtRest() || !this.wasAtRest();\n },\n\n wasAtRest: function() {\n return this._wasAtRest;\n },\n\n // Check if the Spring is atRest meaning that it's currentValue and\n // endValue are the same and that it has no velocity. The previously\n // described thresholds for speed and displacement define the bounds\n // of this equivalence check. If the Spring has 0 tension, then it will\n // be considered at rest whenever its absolute velocity drops below the\n // restSpeedThreshold.\n isAtRest: function() {\n return Math.abs(this._currentState.velocity) < this._restSpeedThreshold &&\n (this.getDisplacementDistanceForState(this._currentState) <=\n this._displacementFromRestThreshold ||\n this._springConfig.tension === 0);\n },\n\n // Force the spring to be at rest at its current position. As\n // described in the documentation for setCurrentValue, this method\n // makes it easy to do synchronous non-animated updates to ui\n // elements that are attached to springs via SpringListeners.\n setAtRest: function() {\n this._endValue = this._currentState.position;\n this._tempState.position = this._currentState.position;\n this._currentState.velocity = 0;\n return this;\n },\n\n _interpolate: function(alpha) {\n this._currentState.position = this._currentState.position *\n alpha + this._previousState.position * (1 - alpha);\n this._currentState.velocity = this._currentState.velocity *\n alpha + this._previousState.velocity * (1 - alpha);\n },\n\n getListeners: function() {\n return this.listeners;\n },\n\n addListener: function(newListener) {\n this.listeners.push(newListener);\n return this;\n },\n\n removeListener: function(listenerToRemove) {\n removeFirst(this.listeners, listenerToRemove);\n return this;\n },\n\n removeAllListeners: function() {\n this.listeners = [];\n return this;\n },\n\n currentValueIsApproximately: function(value) {\n return Math.abs(this.getCurrentValue() - value) <=\n this.getRestDisplacementThreshold();\n }\n\n });\n\n // PhysicsState\n // ------------\n // **PhysicsState** consists of a position and velocity. A Spring uses\n // this internally to keep track of its current and prior position and\n // velocity values.\n var PhysicsState = function PhysicsState() {};\n\n util.extend(PhysicsState.prototype, {\n position: 0,\n velocity: 0\n });\n\n // SpringConfig\n // ------------\n // **SpringConfig** maintains a set of tension and friction constants\n // for a Spring. You can use fromOrigamiTensionAndFriction to convert\n // values from the [Origami](http://facebook.github.io/origami/)\n // design tool directly to Rebound spring constants.\n var SpringConfig = rebound.SpringConfig =\n function SpringConfig(tension, friction) {\n this.tension = tension;\n this.friction = friction;\n };\n\n // Loopers\n // -------\n // **AnimationLooper** plays each frame of the SpringSystem on animation\n // timing loop. This is the default type of looper for a new spring system\n // as it is the most common when developing UI.\n var AnimationLooper = rebound.AnimationLooper = function AnimationLooper() {\n this.springSystem = null;\n var _this = this;\n var _run = function() {\n _this.springSystem.loop(Date.now());\n };\n\n this.run = function() {\n util.onFrame(_run);\n };\n };\n\n // **SimulationLooper** resolves the SpringSystem to a resting state in a\n // tight and blocking loop. This is useful for synchronously generating\n // pre-recorded animations that can then be played on a timing loop later.\n // Sometimes this lead to better performance to pre-record a single spring\n // curve and use it to drive many animations; however, it can make dynamic\n // response to user input a bit trickier to implement.\n rebound.SimulationLooper = function SimulationLooper(timestep) {\n this.springSystem = null;\n var time = 0;\n var running = false;\n timestep=timestep || 16.667;\n\n this.run = function() {\n if (running) {\n return;\n }\n running = true;\n while(!this.springSystem.getIsIdle()) {\n this.springSystem.loop(time+=timestep);\n }\n running = false;\n };\n };\n\n // **SteppingSimulationLooper** resolves the SpringSystem one step at a\n // time controlled by an outside loop. This is useful for testing and\n // verifying the behavior of a SpringSystem or if you want to control your own\n // timing loop for some reason e.g. slowing down or speeding up the\n // simulation.\n rebound.SteppingSimulationLooper = function(timestep) {\n this.springSystem = null;\n var time = 0;\n\n // this.run is NOOP'd here to allow control from the outside using\n // this.step.\n this.run = function(){};\n\n // Perform one step toward resolving the SpringSystem.\n this.step = function(timestep) {\n this.springSystem.loop(time+=timestep);\n };\n };\n\n // Math for converting from\n // [Origami](http://facebook.github.io/origami/) to\n // [Rebound](http://facebook.github.io/rebound).\n // You mostly don't need to worry about this, just use\n // SpringConfig.fromOrigamiTensionAndFriction(v, v);\n var OrigamiValueConverter = rebound.OrigamiValueConverter = {\n tensionFromOrigamiValue: function(oValue) {\n return (oValue - 30.0) * 3.62 + 194.0;\n },\n\n origamiValueFromTension: function(tension) {\n return (tension - 194.0) / 3.62 + 30.0;\n },\n\n frictionFromOrigamiValue: function(oValue) {\n return (oValue - 8.0) * 3.0 + 25.0;\n },\n\n origamiFromFriction: function(friction) {\n return (friction - 25.0) / 3.0 + 8.0;\n }\n };\n\n // BouncyConversion provides math for converting from Origami PopAnimation\n // config values to regular Origami tension and friction values. If you are\n // trying to replicate prototypes made with PopAnimation patches in Origami,\n // then you should create your springs with\n // SpringSystem.createSpringWithBouncinessAndSpeed, which uses this Math\n // internally to create a spring to match the provided PopAnimation\n // configuration from Origami.\n var BouncyConversion = rebound.BouncyConversion = function(bounciness, speed){\n this.bounciness = bounciness;\n this.speed = speed;\n var b = this.normalize(bounciness / 1.7, 0, 20.0);\n b = this.projectNormal(b, 0.0, 0.8);\n var s = this.normalize(speed / 1.7, 0, 20.0);\n this.bouncyTension = this.projectNormal(s, 0.5, 200)\n this.bouncyFriction = this.quadraticOutInterpolation(\n b,\n this.b3Nobounce(this.bouncyTension),\n 0.01);\n }\n\n util.extend(BouncyConversion.prototype, {\n\n normalize: function(value, startValue, endValue) {\n return (value - startValue) / (endValue - startValue);\n },\n\n projectNormal: function(n, start, end) {\n return start + (n * (end - start));\n },\n\n linearInterpolation: function(t, start, end) {\n return t * end + (1.0 - t) * start;\n },\n\n quadraticOutInterpolation: function(t, start, end) {\n return this.linearInterpolation(2*t - t*t, start, end);\n },\n\n b3Friction1: function(x) {\n return (0.0007 * Math.pow(x, 3)) -\n (0.031 * Math.pow(x, 2)) + 0.64 * x + 1.28;\n },\n\n b3Friction2: function(x) {\n return (0.000044 * Math.pow(x, 3)) -\n (0.006 * Math.pow(x, 2)) + 0.36 * x + 2.;\n },\n\n b3Friction3: function(x) {\n return (0.00000045 * Math.pow(x, 3)) -\n (0.000332 * Math.pow(x, 2)) + 0.1078 * x + 5.84;\n },\n\n b3Nobounce: function(tension) {\n var friction = 0;\n if (tension <= 18) {\n friction = this.b3Friction1(tension);\n } else if (tension > 18 && tension <= 44) {\n friction = this.b3Friction2(tension);\n } else {\n friction = this.b3Friction3(tension);\n }\n return friction;\n }\n });\n\n util.extend(SpringConfig, {\n // Convert an origami Spring tension and friction to Rebound spring\n // constants. If you are prototyping a design with Origami, this\n // makes it easy to make your springs behave exactly the same in\n // Rebound.\n fromOrigamiTensionAndFriction: function(tension, friction) {\n return new SpringConfig(\n OrigamiValueConverter.tensionFromOrigamiValue(tension),\n OrigamiValueConverter.frictionFromOrigamiValue(friction));\n },\n\n // Convert an origami PopAnimation Spring bounciness and speed to Rebound\n // spring constants. If you are using PopAnimation patches in Origami, this\n // utility will provide springs that match your prototype.\n fromBouncinessAndSpeed: function(bounciness, speed) {\n var bouncyConversion = new rebound.BouncyConversion(bounciness, speed);\n return this.fromOrigamiTensionAndFriction(\n bouncyConversion.bouncyTension,\n bouncyConversion.bouncyFriction);\n },\n\n // Create a SpringConfig with no tension or a coasting spring with some\n // amount of Friction so that it does not coast infininitely.\n coastingConfigWithOrigamiFriction: function(friction) {\n return new SpringConfig(\n 0,\n OrigamiValueConverter.frictionFromOrigamiValue(friction)\n );\n }\n });\n\n SpringConfig.DEFAULT_ORIGAMI_SPRING_CONFIG =\n SpringConfig.fromOrigamiTensionAndFriction(40, 7);\n\n util.extend(SpringConfig.prototype, {friction: 0, tension: 0});\n\n // Here are a couple of function to convert colors between hex codes and RGB\n // component values. These are handy when performing color\n // tweening animations.\n var colorCache = {};\n util.hexToRGB = function(color) {\n if (colorCache[color]) {\n return colorCache[color];\n }\n color = color.replace('#', '');\n if (color.length === 3) {\n color = color[0] + color[0] + color[1] + color[1] + color[2] + color[2];\n }\n var parts = color.match(/.{2}/g);\n\n var ret = {\n r: parseInt(parts[0], 16),\n g: parseInt(parts[1], 16),\n b: parseInt(parts[2], 16)\n };\n\n colorCache[color] = ret;\n return ret;\n };\n\n util.rgbToHex = function(r, g, b) {\n r = r.toString(16);\n g = g.toString(16);\n b = b.toString(16);\n r = r.length < 2 ? '0' + r : r;\n g = g.length < 2 ? '0' + g : g;\n b = b.length < 2 ? '0' + b : b;\n return '#' + r + g + b;\n };\n\n var MathUtil = rebound.MathUtil = {\n // This helper function does a linear interpolation of a value from\n // one range to another. This can be very useful for converting the\n // motion of a Spring to a range of UI property values. For example a\n // spring moving from position 0 to 1 could be interpolated to move a\n // view from pixel 300 to 350 and scale it from 0.5 to 1. The current\n // position of the `Spring` just needs to be run through this method\n // taking its input range in the _from_ parameters with the property\n // animation range in the _to_ parameters.\n mapValueInRange: function(value, fromLow, fromHigh, toLow, toHigh) {\n var fromRangeSize = fromHigh - fromLow;\n var toRangeSize = toHigh - toLow;\n var valueScale = (value - fromLow) / fromRangeSize;\n return toLow + (valueScale * toRangeSize);\n },\n\n // Interpolate two hex colors in a 0 - 1 range or optionally provide a\n // custom range with fromLow,fromHight. The output will be in hex by default\n // unless asRGB is true in which case it will be returned as an rgb string.\n interpolateColor:\n function(val, startColor, endColor, fromLow, fromHigh, asRGB) {\n fromLow = fromLow === undefined ? 0 : fromLow;\n fromHigh = fromHigh === undefined ? 1 : fromHigh;\n startColor = util.hexToRGB(startColor);\n endColor = util.hexToRGB(endColor);\n var r = Math.floor(\n util.mapValueInRange(val, fromLow, fromHigh, startColor.r, endColor.r)\n );\n var g = Math.floor(\n util.mapValueInRange(val, fromLow, fromHigh, startColor.g, endColor.g)\n );\n var b = Math.floor(\n util.mapValueInRange(val, fromLow, fromHigh, startColor.b, endColor.b)\n );\n if (asRGB) {\n return 'rgb(' + r + ',' + g + ',' + b + ')';\n } else {\n return util.rgbToHex(r, g, b);\n }\n },\n\n degreesToRadians: function(deg) {\n return (deg * Math.PI) / 180;\n },\n\n radiansToDegrees: function(rad) {\n return (rad * 180) / Math.PI;\n }\n\n }\n\n util.extend(util, MathUtil);\n\n\n // Utilities\n // ---------\n // Here are a few useful JavaScript utilities.\n\n // Lop off the first occurence of the reference in the Array.\n function removeFirst(array, item) {\n var idx = array.indexOf(item);\n idx != -1 && array.splice(idx, 1);\n }\n\n var _onFrame;\n if (typeof window !== 'undefined') {\n _onFrame = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n window.oRequestAnimationFrame ||\n function(callback) {\n window.setTimeout(callback, 1000 / 60);\n };\n }\n if (!_onFrame && typeof process !== 'undefined' && process.title === 'node') {\n _onFrame = setImmediate;\n }\n\n // Cross browser/node timer functions.\n util.onFrame = function onFrame(func) {\n return _onFrame(func);\n };\n\n // Export the public api using exports for common js or the window for\n // normal browser inclusion.\n if (typeof exports != 'undefined') {\n util.extend(exports, rebound);\n } else if (typeof window != 'undefined') {\n window.rebound = rebound;\n }\n})();\n\n\n// Legal Stuff\n// -----------\n/**\n * Copyright (c) 2013, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rebound/rebound.js\n ** module id = 394\n ** module chunks = 2\n **/","var nextTick = require('process/browser.js').nextTick;\nvar apply = Function.prototype.apply;\nvar slice = Array.prototype.slice;\nvar immediateIds = {};\nvar nextImmediateId = 0;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) { timeout.close(); };\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(window, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// That's not how node.js implements it but the exposed api is the same.\nexports.setImmediate = typeof setImmediate === \"function\" ? setImmediate : function(fn) {\n var id = nextImmediateId++;\n var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n\n immediateIds[id] = true;\n\n nextTick(function onNextTick() {\n if (immediateIds[id]) {\n // fn.call() is faster so we optimize for the common use-case\n // @see http://jsperf.com/call-apply-segu\n if (args) {\n fn.apply(null, args);\n } else {\n fn.call(null);\n }\n // Prevent ids from leaking\n exports.clearImmediate(id);\n }\n });\n\n return id;\n};\n\nexports.clearImmediate = typeof clearImmediate === \"function\" ? clearImmediate : function(id) {\n delete immediateIds[id];\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** (webpack)/~/node-libs-browser/~/timers-browserify/main.js\n ** module id = 395\n ** module chunks = 2\n **/","'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _Actions = require('./Actions');\n\nvar _ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar _DOMUtils = require('./DOMUtils');\n\nvar _DOMStateStorage = require('./DOMStateStorage');\n\nvar _createDOMHistory = require('./createDOMHistory');\n\nvar _createDOMHistory2 = _interopRequireDefault(_createDOMHistory);\n\nfunction isAbsolutePath(path) {\n return typeof path === 'string' && path.charAt(0) === '/';\n}\n\nfunction ensureSlash() {\n var path = _DOMUtils.getHashPath();\n\n if (isAbsolutePath(path)) return true;\n\n _DOMUtils.replaceHashPath('/' + path);\n\n return false;\n}\n\nfunction addQueryStringValueToPath(path, key, value) {\n return path + (path.indexOf('?') === -1 ? '?' : '&') + (key + '=' + value);\n}\n\nfunction stripQueryStringValueFromPath(path, key) {\n return path.replace(new RegExp('[?&]?' + key + '=[a-zA-Z0-9]+'), '');\n}\n\nfunction getQueryStringValueFromPath(path, key) {\n var match = path.match(new RegExp('\\\\?.*?\\\\b' + key + '=(.+?)\\\\b'));\n return match && match[1];\n}\n\nvar DefaultQueryKey = '_k';\n\nfunction createHashHistory() {\n var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n _invariant2['default'](_ExecutionEnvironment.canUseDOM, 'Hash history needs a DOM');\n\n var queryKey = options.queryKey;\n\n if (queryKey === undefined || !!queryKey) queryKey = typeof queryKey === 'string' ? queryKey : DefaultQueryKey;\n\n function getCurrentLocation() {\n var path = _DOMUtils.getHashPath();\n\n var key = undefined,\n state = undefined;\n if (queryKey) {\n key = getQueryStringValueFromPath(path, queryKey);\n path = stripQueryStringValueFromPath(path, queryKey);\n\n if (key) {\n state = _DOMStateStorage.readState(key);\n } else {\n state = null;\n key = history.createKey();\n _DOMUtils.replaceHashPath(addQueryStringValueToPath(path, queryKey, key));\n }\n } else {\n key = state = null;\n }\n\n return history.createLocation(path, state, undefined, key);\n }\n\n function startHashChangeListener(_ref) {\n var transitionTo = _ref.transitionTo;\n\n function hashChangeListener() {\n if (!ensureSlash()) return; // Always make sure hashes are preceeded with a /.\n\n transitionTo(getCurrentLocation());\n }\n\n ensureSlash();\n _DOMUtils.addEventListener(window, 'hashchange', hashChangeListener);\n\n return function () {\n _DOMUtils.removeEventListener(window, 'hashchange', hashChangeListener);\n };\n }\n\n function finishTransition(location) {\n var basename = location.basename;\n var pathname = location.pathname;\n var search = location.search;\n var state = location.state;\n var action = location.action;\n var key = location.key;\n\n if (action === _Actions.POP) return; // Nothing to do.\n\n var path = (basename || '') + pathname + search;\n\n if (queryKey) path = addQueryStringValueToPath(path, queryKey, key);\n\n if (path === _DOMUtils.getHashPath()) {\n _warning2['default'](false, 'You cannot %s the same path using hash history', action);\n } else {\n if (queryKey) {\n _DOMStateStorage.saveState(key, state);\n } else {\n // Drop key and state.\n location.key = location.state = null;\n }\n\n if (action === _Actions.PUSH) {\n window.location.hash = path;\n } else {\n // REPLACE\n _DOMUtils.replaceHashPath(path);\n }\n }\n }\n\n var history = _createDOMHistory2['default'](_extends({}, options, {\n getCurrentLocation: getCurrentLocation,\n finishTransition: finishTransition,\n saveState: _DOMStateStorage.saveState\n }));\n\n var listenerCount = 0,\n stopHashChangeListener = undefined;\n\n function listenBefore(listener) {\n if (++listenerCount === 1) stopHashChangeListener = startHashChangeListener(history);\n\n var unlisten = history.listenBefore(listener);\n\n return function () {\n unlisten();\n\n if (--listenerCount === 0) stopHashChangeListener();\n };\n }\n\n function listen(listener) {\n if (++listenerCount === 1) stopHashChangeListener = startHashChangeListener(history);\n\n var unlisten = history.listen(listener);\n\n return function () {\n unlisten();\n\n if (--listenerCount === 0) stopHashChangeListener();\n };\n }\n\n function pushState(state, path) {\n _warning2['default'](queryKey || state == null, 'You cannot use state without a queryKey it will be dropped');\n\n history.pushState(state, path);\n }\n\n function replaceState(state, path) {\n _warning2['default'](queryKey || state == null, 'You cannot use state without a queryKey it will be dropped');\n\n history.replaceState(state, path);\n }\n\n var goIsSupportedWithoutReload = _DOMUtils.supportsGoWithoutReloadUsingHash();\n\n function go(n) {\n _warning2['default'](goIsSupportedWithoutReload, 'Hash history go(n) causes a full page reload in this browser');\n\n history.go(n);\n }\n\n function createHref(path) {\n return '#' + history.createHref(path);\n }\n\n // deprecated\n function registerTransitionHook(hook) {\n if (++listenerCount === 1) stopHashChangeListener = startHashChangeListener(history);\n\n history.registerTransitionHook(hook);\n }\n\n // deprecated\n function unregisterTransitionHook(hook) {\n history.unregisterTransitionHook(hook);\n\n if (--listenerCount === 0) stopHashChangeListener();\n }\n\n return _extends({}, history, {\n listenBefore: listenBefore,\n listen: listen,\n pushState: pushState,\n replaceState: replaceState,\n go: go,\n createHref: createHref,\n registerTransitionHook: registerTransitionHook,\n unregisterTransitionHook: unregisterTransitionHook\n });\n}\n\nexports['default'] = createHashHistory;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/lib/createHashHistory.js\n ** module id = 396\n ** module chunks = 2\n **/","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n warning = function(condition, format, args) {\n var len = arguments.length;\n args = new Array(len > 2 ? len - 2 : 0);\n for (var key = 2; key < len; key++) {\n args[key - 2] = arguments[key];\n }\n if (format === undefined) {\n throw new Error(\n '`warning(condition, format, ...args)` requires a warning ' +\n 'message argument'\n );\n }\n\n if (format.length < 10 || (/^[s\\W]*$/).test(format)) {\n throw new Error(\n 'The warning format should be able to uniquely identify this ' +\n 'warning. Please, use a more descriptive format than: ' + format\n );\n }\n\n if (!condition) {\n var argIndex = 0;\n var message = 'Warning: ' +\n format.replace(/%s/g, function() {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch(x) {}\n }\n };\n}\n\nmodule.exports = warning;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/~/warning/browser.js\n ** module id = 397\n ** module chunks = 2\n **/","/**\n * Indicates that navigation was caused by a call to history.push.\n */\n'use strict';\n\nexports.__esModule = true;\nvar PUSH = 'PUSH';\n\nexports.PUSH = PUSH;\n/**\n * Indicates that navigation was caused by a call to history.replace.\n */\nvar REPLACE = 'REPLACE';\n\nexports.REPLACE = REPLACE;\n/**\n * Indicates that navigation was caused by some other action such\n * as using a browser's back/forward buttons and/or manually manipulating\n * the URL in a browser's location bar. This is the default.\n *\n * See https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onpopstate\n * for more information.\n */\nvar POP = 'POP';\n\nexports.POP = POP;\nexports['default'] = {\n PUSH: PUSH,\n REPLACE: REPLACE,\n POP: POP\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/lib/Actions.js\n ** module id = 399\n ** module chunks = 2\n **/","'use strict';\n\nexports.__esModule = true;\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nexports.canUseDOM = canUseDOM;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/lib/ExecutionEnvironment.js\n ** module id = 400\n ** module chunks = 2\n **/","'use strict';\n\nexports.__esModule = true;\nexports.addEventListener = addEventListener;\nexports.removeEventListener = removeEventListener;\nexports.getHashPath = getHashPath;\nexports.replaceHashPath = replaceHashPath;\nexports.getWindowPath = getWindowPath;\nexports.go = go;\nexports.getUserConfirmation = getUserConfirmation;\nexports.supportsHistory = supportsHistory;\nexports.supportsGoWithoutReloadUsingHash = supportsGoWithoutReloadUsingHash;\n\nfunction addEventListener(node, event, listener) {\n if (node.addEventListener) {\n node.addEventListener(event, listener, false);\n } else {\n node.attachEvent('on' + event, listener);\n }\n}\n\nfunction removeEventListener(node, event, listener) {\n if (node.removeEventListener) {\n node.removeEventListener(event, listener, false);\n } else {\n node.detachEvent('on' + event, listener);\n }\n}\n\nfunction getHashPath() {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n return window.location.href.split('#')[1] || '';\n}\n\nfunction replaceHashPath(path) {\n window.location.replace(window.location.pathname + window.location.search + '#' + path);\n}\n\nfunction getWindowPath() {\n return window.location.pathname + window.location.search + window.location.hash;\n}\n\nfunction go(n) {\n if (n) window.history.go(n);\n}\n\nfunction getUserConfirmation(message, callback) {\n callback(window.confirm(message));\n}\n\n/**\n * Returns true if the HTML5 history API is supported. Taken from modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/rackt/react-router/issues/586\n */\n\nfunction supportsHistory() {\n var ua = navigator.userAgent;\n if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) {\n return false;\n }\n return window.history && 'pushState' in window.history;\n}\n\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\n\nfunction supportsGoWithoutReloadUsingHash() {\n var ua = navigator.userAgent;\n return ua.indexOf('Firefox') === -1;\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/lib/DOMUtils.js\n ** module id = 401\n ** module chunks = 2\n **/","/*eslint-disable no-empty */\n'use strict';\n\nexports.__esModule = true;\nexports.saveState = saveState;\nexports.readState = readState;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar KeyPrefix = '@@History/';\nvar QuotaExceededError = 'QuotaExceededError';\n\nfunction createKey(key) {\n return KeyPrefix + key;\n}\n\nfunction saveState(key, state) {\n try {\n window.sessionStorage.setItem(createKey(key), JSON.stringify(state));\n } catch (error) {\n if (error.name === QuotaExceededError || window.sessionStorage.length === 0) {\n // Probably in Safari \"private mode\" where sessionStorage quota is 0. #42\n _warning2['default'](false, '[history] Unable to save state; sessionStorage is not available in Safari private mode');\n\n return;\n }\n\n throw error;\n }\n}\n\nfunction readState(key) {\n var json = window.sessionStorage.getItem(createKey(key));\n\n if (json) {\n try {\n return JSON.parse(json);\n } catch (error) {\n // Ignore invalid JSON.\n }\n }\n\n return null;\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/lib/DOMStateStorage.js\n ** module id = 402\n ** module chunks = 2\n **/","'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar _DOMUtils = require('./DOMUtils');\n\nvar _createHistory = require('./createHistory');\n\nvar _createHistory2 = _interopRequireDefault(_createHistory);\n\nfunction createDOMHistory(options) {\n var history = _createHistory2['default'](_extends({\n getUserConfirmation: _DOMUtils.getUserConfirmation\n }, options, {\n go: _DOMUtils.go\n }));\n\n function listen(listener) {\n _invariant2['default'](_ExecutionEnvironment.canUseDOM, 'DOM history needs a DOM');\n\n return history.listen(listener);\n }\n\n return _extends({}, history, {\n listen: listen\n });\n}\n\nexports['default'] = createDOMHistory;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/lib/createDOMHistory.js\n ** module id = 403\n ** module chunks = 2\n **/","'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _deepEqual = require('deep-equal');\n\nvar _deepEqual2 = _interopRequireDefault(_deepEqual);\n\nvar _AsyncUtils = require('./AsyncUtils');\n\nvar _Actions = require('./Actions');\n\nvar _createLocation2 = require('./createLocation');\n\nvar _createLocation3 = _interopRequireDefault(_createLocation2);\n\nvar _runTransitionHook = require('./runTransitionHook');\n\nvar _runTransitionHook2 = _interopRequireDefault(_runTransitionHook);\n\nvar _deprecate = require('./deprecate');\n\nvar _deprecate2 = _interopRequireDefault(_deprecate);\n\nfunction createRandomKey(length) {\n return Math.random().toString(36).substr(2, length);\n}\n\nfunction locationsAreEqual(a, b) {\n return a.pathname === b.pathname && a.search === b.search &&\n //a.action === b.action && // Different action !== location change.\n a.key === b.key && _deepEqual2['default'](a.state, b.state);\n}\n\nvar DefaultKeyLength = 6;\n\nfunction createHistory() {\n var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n var getCurrentLocation = options.getCurrentLocation;\n var finishTransition = options.finishTransition;\n var saveState = options.saveState;\n var go = options.go;\n var keyLength = options.keyLength;\n var getUserConfirmation = options.getUserConfirmation;\n\n if (typeof keyLength !== 'number') keyLength = DefaultKeyLength;\n\n var transitionHooks = [];\n\n function listenBefore(hook) {\n transitionHooks.push(hook);\n\n return function () {\n transitionHooks = transitionHooks.filter(function (item) {\n return item !== hook;\n });\n };\n }\n\n var allKeys = [];\n var changeListeners = [];\n var location = undefined;\n\n function getCurrent() {\n if (pendingLocation && pendingLocation.action === _Actions.POP) {\n return allKeys.indexOf(pendingLocation.key);\n } else if (location) {\n return allKeys.indexOf(location.key);\n } else {\n return -1;\n }\n }\n\n function updateLocation(newLocation) {\n var current = getCurrent();\n\n location = newLocation;\n\n if (location.action === _Actions.PUSH) {\n allKeys = [].concat(allKeys.slice(0, current + 1), [location.key]);\n } else if (location.action === _Actions.REPLACE) {\n allKeys[current] = location.key;\n }\n\n changeListeners.forEach(function (listener) {\n listener(location);\n });\n }\n\n function listen(listener) {\n changeListeners.push(listener);\n\n if (location) {\n listener(location);\n } else {\n var _location = getCurrentLocation();\n allKeys = [_location.key];\n updateLocation(_location);\n }\n\n return function () {\n changeListeners = changeListeners.filter(function (item) {\n return item !== listener;\n });\n };\n }\n\n function confirmTransitionTo(location, callback) {\n _AsyncUtils.loopAsync(transitionHooks.length, function (index, next, done) {\n _runTransitionHook2['default'](transitionHooks[index], location, function (result) {\n if (result != null) {\n done(result);\n } else {\n next();\n }\n });\n }, function (message) {\n if (getUserConfirmation && typeof message === 'string') {\n getUserConfirmation(message, function (ok) {\n callback(ok !== false);\n });\n } else {\n callback(message !== false);\n }\n });\n }\n\n var pendingLocation = undefined;\n\n function transitionTo(nextLocation) {\n if (location && locationsAreEqual(location, nextLocation)) return; // Nothing to do.\n\n pendingLocation = nextLocation;\n\n confirmTransitionTo(nextLocation, function (ok) {\n if (pendingLocation !== nextLocation) return; // Transition was interrupted.\n\n if (ok) {\n if (finishTransition(nextLocation) !== false) updateLocation(nextLocation);\n } else if (location && nextLocation.action === _Actions.POP) {\n var prevIndex = allKeys.indexOf(location.key);\n var nextIndex = allKeys.indexOf(nextLocation.key);\n\n if (prevIndex !== -1 && nextIndex !== -1) go(prevIndex - nextIndex); // Restore the URL.\n }\n });\n }\n\n function pushState(state, path) {\n transitionTo(createLocation(path, state, _Actions.PUSH, createKey()));\n }\n\n function replaceState(state, path) {\n transitionTo(createLocation(path, state, _Actions.REPLACE, createKey()));\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n function createKey() {\n return createRandomKey(keyLength);\n }\n\n function createPath(path) {\n if (path == null || typeof path === 'string') return path;\n\n var pathname = path.pathname;\n var search = path.search;\n var hash = path.hash;\n\n var result = pathname;\n\n if (search) result += search;\n\n if (hash) result += hash;\n\n return result;\n }\n\n function createHref(path) {\n return createPath(path);\n }\n\n function createLocation(path, state, action) {\n var key = arguments.length <= 3 || arguments[3] === undefined ? createKey() : arguments[3];\n\n return _createLocation3['default'](path, state, action, key);\n }\n\n // deprecated\n function setState(state) {\n if (location) {\n updateLocationState(location, state);\n updateLocation(location);\n } else {\n updateLocationState(getCurrentLocation(), state);\n }\n }\n\n function updateLocationState(location, state) {\n location.state = _extends({}, location.state, state);\n saveState(location.key, location.state);\n }\n\n // deprecated\n function registerTransitionHook(hook) {\n if (transitionHooks.indexOf(hook) === -1) transitionHooks.push(hook);\n }\n\n // deprecated\n function unregisterTransitionHook(hook) {\n transitionHooks = transitionHooks.filter(function (item) {\n return item !== hook;\n });\n }\n\n return {\n listenBefore: listenBefore,\n listen: listen,\n transitionTo: transitionTo,\n pushState: pushState,\n replaceState: replaceState,\n go: go,\n goBack: goBack,\n goForward: goForward,\n createKey: createKey,\n createPath: createPath,\n createHref: createHref,\n createLocation: createLocation,\n\n setState: _deprecate2['default'](setState, 'setState is deprecated; use location.key to save state instead'),\n registerTransitionHook: _deprecate2['default'](registerTransitionHook, 'registerTransitionHook is deprecated; use listenBefore instead'),\n unregisterTransitionHook: _deprecate2['default'](unregisterTransitionHook, 'unregisterTransitionHook is deprecated; use the callback returned from listenBefore instead')\n };\n}\n\nexports['default'] = createHistory;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/lib/createHistory.js\n ** module id = 404\n ** module chunks = 2\n **/","var pSlice = Array.prototype.slice;\nvar objectKeys = require('./lib/keys.js');\nvar isArguments = require('./lib/is_arguments.js');\n\nvar deepEqual = module.exports = function (actual, expected, opts) {\n if (!opts) opts = {};\n // 7.1. All identical values are equivalent, as determined by ===.\n if (actual === expected) {\n return true;\n\n } else if (actual instanceof Date && expected instanceof Date) {\n return actual.getTime() === expected.getTime();\n\n // 7.3. Other pairs that do not both pass typeof value == 'object',\n // equivalence is determined by ==.\n } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') {\n return opts.strict ? actual === expected : actual == expected;\n\n // 7.4. For all other Object pairs, including Array objects, equivalence is\n // determined by having the same number of owned properties (as verified\n // with Object.prototype.hasOwnProperty.call), the same set of keys\n // (although not necessarily the same order), equivalent values for every\n // corresponding key, and an identical 'prototype' property. Note: this\n // accounts for both named and indexed properties on Arrays.\n } else {\n return objEquiv(actual, expected, opts);\n }\n}\n\nfunction isUndefinedOrNull(value) {\n return value === null || value === undefined;\n}\n\nfunction isBuffer (x) {\n if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false;\n if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n return false;\n }\n if (x.length > 0 && typeof x[0] !== 'number') return false;\n return true;\n}\n\nfunction objEquiv(a, b, opts) {\n var i, key;\n if (isUndefinedOrNull(a) || isUndefinedOrNull(b))\n return false;\n // an identical 'prototype' property.\n if (a.prototype !== b.prototype) return false;\n //~~~I've managed to break Object.keys through screwy arguments passing.\n // Converting to array solves the problem.\n if (isArguments(a)) {\n if (!isArguments(b)) {\n return false;\n }\n a = pSlice.call(a);\n b = pSlice.call(b);\n return deepEqual(a, b, opts);\n }\n if (isBuffer(a)) {\n if (!isBuffer(b)) {\n return false;\n }\n if (a.length !== b.length) return false;\n for (i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n }\n try {\n var ka = objectKeys(a),\n kb = objectKeys(b);\n } catch (e) {//happens when one is a string literal and the other isn't\n return false;\n }\n // having the same number of owned properties (keys incorporates\n // hasOwnProperty)\n if (ka.length != kb.length)\n return false;\n //the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n //~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] != kb[i])\n return false;\n }\n //equivalent values for every corresponding key, and\n //~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!deepEqual(a[key], b[key], opts)) return false;\n }\n return typeof a === typeof b;\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/~/deep-equal/index.js\n ** module id = 405\n ** module chunks = 2\n **/","exports = module.exports = typeof Object.keys === 'function'\n ? Object.keys : shim;\n\nexports.shim = shim;\nfunction shim (obj) {\n var keys = [];\n for (var key in obj) keys.push(key);\n return keys;\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/~/deep-equal/lib/keys.js\n ** module id = 406\n ** module chunks = 2\n **/","var supportsArgumentsClass = (function(){\n return Object.prototype.toString.call(arguments)\n})() == '[object Arguments]';\n\nexports = module.exports = supportsArgumentsClass ? supported : unsupported;\n\nexports.supported = supported;\nfunction supported(object) {\n return Object.prototype.toString.call(object) == '[object Arguments]';\n};\n\nexports.unsupported = unsupported;\nfunction unsupported(object){\n return object &&\n typeof object == 'object' &&\n typeof object.length == 'number' &&\n Object.prototype.hasOwnProperty.call(object, 'callee') &&\n !Object.prototype.propertyIsEnumerable.call(object, 'callee') ||\n false;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/~/deep-equal/lib/is_arguments.js\n ** module id = 407\n ** module chunks = 2\n **/","\"use strict\";\n\nexports.__esModule = true;\nexports.loopAsync = loopAsync;\n\nfunction loopAsync(turns, work, callback) {\n var currentTurn = 0;\n var isDone = false;\n\n function done() {\n isDone = true;\n callback.apply(this, arguments);\n }\n\n function next() {\n if (isDone) return;\n\n if (currentTurn < turns) {\n work.call(this, currentTurn++, next, done);\n } else {\n done.apply(this, arguments);\n }\n }\n\n next();\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/lib/AsyncUtils.js\n ** module id = 408\n ** module chunks = 2\n **/","'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _Actions = require('./Actions');\n\nvar _parsePath = require('./parsePath');\n\nvar _parsePath2 = _interopRequireDefault(_parsePath);\n\nfunction createLocation() {\n var path = arguments.length <= 0 || arguments[0] === undefined ? '/' : arguments[0];\n var state = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n var action = arguments.length <= 2 || arguments[2] === undefined ? _Actions.POP : arguments[2];\n var key = arguments.length <= 3 || arguments[3] === undefined ? null : arguments[3];\n\n if (typeof path === 'string') path = _parsePath2['default'](path);\n\n var pathname = path.pathname || '/';\n var search = path.search || '';\n var hash = path.hash || '';\n\n return {\n pathname: pathname,\n search: search,\n hash: hash,\n state: state,\n action: action,\n key: key\n };\n}\n\nexports['default'] = createLocation;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/lib/createLocation.js\n ** module id = 409\n ** module chunks = 2\n **/","'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction extractPath(string) {\n var match = string.match(/^https?:\\/\\/[^\\/]*/);\n\n if (match == null) return string;\n\n _warning2['default'](false, 'A path must be pathname + search + hash only, not a fully qualified URL like \"%s\"', string);\n\n return string.substring(match[0].length);\n}\n\nfunction parsePath(path) {\n var pathname = extractPath(path);\n var search = '';\n var hash = '';\n\n var hashIndex = pathname.indexOf('#');\n if (hashIndex !== -1) {\n hash = pathname.substring(hashIndex);\n pathname = pathname.substring(0, hashIndex);\n }\n\n var searchIndex = pathname.indexOf('?');\n if (searchIndex !== -1) {\n search = pathname.substring(searchIndex);\n pathname = pathname.substring(0, searchIndex);\n }\n\n if (pathname === '') pathname = '/';\n\n return {\n pathname: pathname,\n search: search,\n hash: hash\n };\n}\n\nexports['default'] = parsePath;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/lib/parsePath.js\n ** module id = 410\n ** module chunks = 2\n **/","'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction runTransitionHook(hook, location, callback) {\n var result = hook(location, callback);\n\n if (hook.length < 2) {\n // Assume the hook runs synchronously and automatically\n // call the callback with the return value.\n callback(result);\n } else {\n _warning2['default'](result === undefined, 'You should not \"return\" in a transition hook with a callback argument; call the callback instead');\n }\n}\n\nexports['default'] = runTransitionHook;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/lib/runTransitionHook.js\n ** module id = 411\n ** module chunks = 2\n **/","'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction deprecate(fn, message) {\n return function () {\n _warning2['default'](false, '[history] ' + message);\n return fn.apply(this, arguments);\n };\n}\n\nexports['default'] = deprecate;\nmodule.exports = exports['default'];\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/history/lib/deprecate.js\n ** module id = 412\n ** module chunks = 2\n **/","/**\n * Copyright (c) 2015-present, Alibaba Group Holding Limited.\n * All rights reserved.\n *\n * @providesModule ReactPicker\n */\n'use strict';\n\nimport React, { Component, PropTypes } from 'react';\nimport autobind from 'autobind-decorator';\n\nconst PICKER = 'picker';\n\nclass Picker extends Component {\n static propTypes = {\n onValueChange: PropTypes.func,\n selectedValue: PropTypes.any, // string or integer basically\n }\n\n _onChange(event) {\n // shim the native event\n event.nativeEvent.newValue = this.refs[PICKER].value;\n\n if (this.props.onChange) {\n this.props.onChange(event);\n }\n\n if (this.props.onValueChange) {\n this.props.onValueChange(event.nativeEvent.newValue);\n }\n }\n\n render() {\n return (\n \n {this.props.children}\n \n );\n }\n};\n\nPicker.Item = React.createClass({\n propTypes: {\n value: PropTypes.any, // string or integer basically\n label: PropTypes.string,\n },\n\n render: function() {\n return ;\n },\n});\n\nautobind(Picker);\n\nPicker.isReactNativeComponent = true;\n\nexport default Picker;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Libraries/Picker/Picker.web.js\n **/","/**\n * Copyright (c) 2015-present, Alibaba Group Holding Limited.\n * All rights reserved.\n *\n * @providesModule ReactProgressView\n */\n'use strict';\n\nimport React, { Component } from 'react';\nimport View from 'ReactView';\nimport StyleSheet from 'ReactStyleSheet';\nimport { Mixin as NativeMethodsMixin } from 'NativeMethodsMixin';\nimport mixin from 'react-mixin';\nimport autobind from 'autobind-decorator';\n\nclass ProgressView extends Component {\n\n render() {\n\n let specificStyle = {\n progressTint: {},\n progressTrack: {},\n };\n\n if ( this.props.trackImage ) {\n specificStyle.progressTrack.background = 'url(' + this.props.trackImage.uri + ') no-repeat 0 0';\n specificStyle.progressTrack.backgroundSize = '100% 100%';\n }\n\n if ( this.props.trackTintColor ) {\n specificStyle.progressTrack.background = this.props.trackTintColor;\n }\n\n if ( this.props.progressViewStyle == 'bar' ) {\n specificStyle.progressTrack.background = 'transparent';\n }\n\n if ( this.props.progressImage ) {\n specificStyle.progressTint.background = 'url(' + this.props.progressImage.uri + ') no-repeat 0 0';\n specificStyle.progressTint.backgroundSize = '100% 100%';\n }\n\n if ( this.props.progressTintColor ) {\n specificStyle.progressTint.background = this.props.progressTintColor;\n }\n\n // process progress\n let progress = this.props.progress;\n if ( progress >= 1 ) {\n progress = 1;\n } else if ( progress <= 0 ) {\n progress = 0;\n }\n\n specificStyle.progressTint.width = 100 * progress + '%';\n\n specificStyle = StyleSheet.create(specificStyle);\n\n return (\n \n \n \n \n \n );\n }\n};\n\nlet styles = StyleSheet.create({\n progressView: {\n display: 'block',\n height: '2px',\n width: '100%',\n },\n progressTint: {\n position: 'absolute',\n left: 0,\n width: 0,\n height: '100%',\n background: '#0079fe',\n },\n progressTrack: {\n position: 'relative',\n width: '100%',\n height: '100%',\n background: '#b4b4b4',\n }\n});\n\nmixin.onClass(ProgressView, NativeMethodsMixin);\nautobind(ProgressView);\nProgressView.isReactNativeComponent = true;\n\nexport default ProgressView;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Libraries/ProgressView/ProgressView.web.js\n **/","/**\n * Copyright (c) 2015-present, Alibaba Group Holding Limited.\n * All rights reserved.\n *\n * Copyright (c) 2015, Facebook, Inc. All rights reserved.\n *\n * @providesModule ReactSegmentedControl\n */\n'use strict';\n\nimport React, { Component, PropTypes } from 'react';\nimport View from 'ReactView';\nimport Text from 'ReactText';\nimport StyleSheet from 'ReactStyleSheet';\nimport { Mixin as NativeMethodsMixin } from 'NativeMethodsMixin';\nimport mixin from 'react-mixin';\nimport autobind from 'autobind-decorator';\n\nclass SegmentedControl extends Component {\n\n static propTypes = {\n /**\n * The labels for the control's segment buttons, in order.\n */\n values: PropTypes.arrayOf(PropTypes.string),\n\n /**\n * The index in `props.values` of the segment to be pre-selected\n */\n selectedIndex: PropTypes.number,\n\n /**\n * Callback that is called when the user taps a segment;\n * passes the segment's value as an argument\n */\n onValueChange: PropTypes.func,\n\n /**\n * Callback that is called when the user taps a segment;\n * passes the event as an argument\n */\n onChange: PropTypes.func,\n\n /**\n * If false the user won't be able to interact with the control.\n * Default value is true.\n */\n enabled: PropTypes.bool,\n\n /**\n * Accent color of the control.\n */\n tintColor: PropTypes.string,\n\n /**\n * If true, then selecting a segment won't persist visually.\n * The `onValueChange` callback will still work as expected.\n */\n momentary: PropTypes.bool\n }\n\n static defaultProps = {\n values: [],\n enabled: true\n }\n\n state = {\n selectedIndex: this.props.selectedIndex,\n momentary: false\n }\n\n _onChange(value, index, event: Event) {\n\n if (this.state.selectedIndex == index) return;\n\n this.setState({\n selectedIndex: index\n });\n\n if (!event) {\n event = {\n nativeEvent: {}\n };\n }\n // shim the value\n event.nativeEvent.value = value;\n event.nativeEvent.selectedSegmentIndex = index;\n this.props.onChange && this.props.onChange(event);\n this.props.onValueChange && this.props.onValueChange(event.nativeEvent\n .value);\n\n if (this.props.momentary) {\n setTimeout(() => this.setState({\n selectedIndex: null\n }), 300);\n }\n }\n\n render() {\n let props = this.props;\n\n let items = props.values.map((value, index) => {\n return (\n {value} );\n });\n\n return (\n {items}\n );\n }\n};\n\nconst defaultColor = '#007AFF';\n\nlet styles = StyleSheet.create({\n segmentedControl: {\n height: 28,\n justifyContent: 'center',\n flexDirection: 'row'\n },\n segmentedControlItem: {\n flex: 1,\n backgroundColor: 'white',\n borderColor: defaultColor,\n borderStyle: 'solid',\n borderTopWidth: 1,\n borderBottomWidth: 1,\n borderRightWidth: 1,\n borderLeftWidth: 1,\n },\n segmentedControlItemSelected: {\n backgroundColor: defaultColor,\n },\n segmentedControlText: {\n color: defaultColor,\n fontSize: 12,\n lineHeight: 12,\n padding: '7 0',\n textAlign: 'center'\n },\n segmentedControlTextSelected: {\n color: 'white',\n },\n disable: {\n opacity: 0.5\n },\n firstChild: {\n borderTopLeftRadius: 3,\n borderBottomLeftRadius: 3,\n borderRightWidth: 0,\n },\n otherChild: {\n borderRightWidth: 0,\n },\n lastChild: {\n borderTopRightRadius: 3,\n borderBottomRightRadius: 3,\n borderRightWidth: 1,\n },\n});\n\nmixin.onClass(SegmentedControl, NativeMethodsMixin);\nautobind(SegmentedControl);\n\nSegmentedControl.isReactNativeComponent = true;\n\nexport default SegmentedControl;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Libraries/SegmentedControl/SegmentedControl.web.js\n **/","/**\n * Copyright (c) 2015-present, Alibaba Group Holding Limited.\n * All rights reserved.\n *\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * @providesModule ReactSlider\n */\n'use strict';\n\nimport React, { PropTypes, Component } from 'react';\nimport ReactDOM from 'react-dom';\nimport StyleSheet from 'ReactStyleSheet';\nimport View from 'ReactView';\nimport Image from 'ReactImage';\nimport PanResponder from 'ReactPanResponder';\n\nconst TRACK_SIZE = 4;\nconst THUMB_SIZE = 20;\n\nfunction noop() {}\n\nclass Slider extends Component {\n constructor(props) {\n super(props);\n this.state = {\n value: props.value,\n };\n }\n componentWillMount() {\n this._panResponder = PanResponder.create({\n onStartShouldSetPanResponder: this._handleStartShouldSetPanResponder.bind(this),\n onMoveShouldSetPanResponder: this._handleMoveShouldSetPanResponder.bind(this),\n onPanResponderGrant: this._handlePanResponderGrant.bind(this),\n onPanResponderMove: this._handlePanResponderMove.bind(this),\n onPanResponderRelease: this._handlePanResponderEnd.bind(this),\n onPanResponderTerminate: this._handlePanResponderEnd.bind(this),\n });\n }\n render() {\n let {\n minimumTrackTintColor,\n maximumTrackTintColor,\n styles,\n style,\n trackStyle,\n thumbStyle,\n thumbTintColor,\n thumbImage,\n disabled,\n ...other,\n } = this.props;\n let mainStyles = styles || defaultStyles;\n let trackHeight = (trackStyle && trackStyle.height) || defaultStyles.track.height;\n let thumbHeight = (thumbStyle && thumbStyle.height) || defaultStyles.thumb.height;\n let minTrackWidth = this._getMinTrackWidth();\n let minimumTrackStyle = {\n width: minTrackWidth,\n marginTop: -trackHeight,\n backgroundColor: minimumTrackTintColor,\n };\n return (\n \n \n \n {\n thumbImage && thumbImage.uri &&\n ||\n \n }\n );\n }\n _handleStartShouldSetPanResponder() {\n return !this.props.disabled;\n }\n _handleMoveShouldSetPanResponder() {\n return false;\n }\n _handlePanResponderGrant(e, gestureState) {\n this.previousLeft = this._getWidth('minTrack');\n this.previousValue = this.state.value;\n this._fireProcessEvent('onSlidingStart');\n }\n _handlePanResponderMove(e, gestureState) {\n this.setState({value: this._getValue(gestureState)});\n this._fireProcessEvent('onValueChange');\n }\n _handlePanResponderEnd(e, gestureState) {\n this.setState({value: this._getValue(gestureState)});\n this._fireProcessEvent('onSlidingComplete');\n }\n _fireProcessEvent(event) {\n if (this.props[event]) {\n this.props[event](this.state.value);\n }\n }\n _getValue(gestureState) {\n const {step, maximumValue, minimumValue} = this.props;\n let totalWidth = this._getWidth('totalTrack');\n let thumbLeft = Math.min(totalWidth,\n Math.max(0, this.previousLeft + gestureState.dx)),\n ratio = thumbLeft / totalWidth,\n newValue = ratio * (maximumValue - minimumValue) + minimumValue;\n if (step > 0) {\n return Math.round(newValue / step) * step;\n } else {\n return newValue;\n }\n }\n _getWidth(ref) {\n if (this.refs[ref]) {\n let node = ReactDOM.findDOMNode(this.refs[ref]),\n rect = node.getBoundingClientRect();\n return rect.width;\n }\n }\n _getMinTrackWidth() {\n let value = this.state.value;\n return 100 * (value - this.props.minimumValue) / (this.props.maximumValue - this.props.minimumValue) + '%';\n }\n}\n\nSlider.propTypes = {\n /**\n * Used to style and layout the `Slider`. See `StyleSheet.js` and\n * `ViewStylePropTypes.js` for more info.\n */\n style: View.propTypes.style,\n /**\n * Initial value of the slider. The value should be between minimumValue\n * and maximumValue, which default to 0 and 1 respectively.\n * Default value is 0.\n *\n * *This is not a controlled component*, e.g. if you don't update\n * the value, the component won't be reset to its inital value.\n */\n value: PropTypes.number,\n /**\n * Step value of the slider. The value should be\n * between 0 and (maximumValue - minimumValue).\n * Default value is 0.\n */\n step: PropTypes.number,\n /**\n * Initial minimum value of the slider. Default value is 0.\n */\n minimumValue: PropTypes.number,\n /**\n * Initial maximum value of the slider. Default value is 1.\n */\n maximumValue: PropTypes.number,\n /**\n * The color used for the track to the left of the button. Overrides the\n * default blue gradient image.\n */\n minimumTrackTintColor: PropTypes.string,\n /**\n * The color used for the track to the right of the button. Overrides the\n * default blue gradient image.\n */\n maximumTrackTintColor: PropTypes.string,\n /**\n * If true the user won't be able to move the slider.\n * Default value is false.\n */\n disabled: PropTypes.bool,\n /**\n * Sets an image for the track. It only supports images that are included as assets\n */\n trackImage: PropTypes.any,\n /**\n * Sets an image for the thumb. It only supports static images.\n */\n thumbImage: PropTypes.any,\n /**\n * Callback continuously called while the user is dragging the slider.\n */\n onValueChange: PropTypes.func,\n /**\n * Callback called when the user finishes changing the value (e.g. when\n * the slider is released).\n */\n onSlidingComplete: PropTypes.func,\n};\n\nSlider.defaultProps = {\n value: 0,\n step: 0,\n minimumValue: 0,\n maximumValue: 1,\n minimumTrackTintColor: '#0f85fb',\n maximumTrackTintColor: '#b3b3b3',\n thumbTintColor: '#fff',\n disabled: false,\n onValueChange: noop,\n onSlidingComplete: noop,\n};\n\nlet defaultStyles = StyleSheet.create({\n container: {\n height: 40,\n justifyContent: 'center',\n position: 'relative',\n },\n track: {\n height: TRACK_SIZE,\n borderRadius: TRACK_SIZE / 2,\n },\n thumb: {\n width: THUMB_SIZE,\n height: THUMB_SIZE,\n borderRadius: THUMB_SIZE / 2,\n boxShadow: '2px 3px 10px rgba(0,0,0,0.75)',\n },\n disabled: {\n backgroundColor: '#dadada',\n boxShadow: '2px 3px 10px rgba(0,0,0,0.25)',\n },\n});\n\nSlider.isReactNativeComponent = true;\n\nexport default Slider;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Libraries/Slider/Slider.web.js\n **/","/**\n * Copyright (c) 2015-present, Alibaba Group Holding Limited.\n * All rights reserved.\n *\n * @providesModule ReactSwitch\n */\n'use strict';\n\nimport React, { Component, PropTypes } from 'react';\nimport { Mixin as NativeMethodsMixin } from 'NativeMethodsMixin';\nimport StyleSheet from 'ReactStyleSheet';\nimport mixin from 'react-mixin';\nimport autobind from 'autobind-decorator';\n\nclass Switch extends Component {\n\n static propTypes = {\n value: PropTypes.bool,\n disabled: PropTypes.bool,\n onValueChange: PropTypes.func,\n onTintColor: PropTypes.string,\n thumbTintColor: PropTypes.string,\n tintColor: PropTypes.string\n }\n\n static defaultProps = {\n onTintColor: '#00e158',\n thumbTintColor: '#fff',\n tintColor: '#fff'\n }\n\n state = {\n value: this.props.value,\n disabled: this.props.disabled\n }\n\n componentWillReceiveProps(nextProps) {\n this.setState({\n value: nextProps.value,\n disabled: nextProps.disabled\n });\n }\n\n getStyles() {\n return StyleSheet.create({\n span: {\n position: 'relative',\n display: 'inline-block',\n margin: 2,\n height: 30,\n width: 50,\n cursor: 'default', // pointer will cause a grey background color on chrome\n verticalAlign: 'middle',\n borderRadius: 20,\n borderColor: '#dfdfdf',\n borderWidth: 1,\n borderStyle: 'solid',\n WebkitUserSelect: 'none',\n WebkitBoxSizing: 'content-box',\n WebkitBackfaceVisibility: 'hidden'\n },\n checkedSpan: {\n borderColor: this.props.onTintColor,\n backgroundColor: this.props.onTintColor,\n boxShadow: this.props.onTintColor + ' 0 0 0 16px inset',\n WebkitTransition: 'border 0.2s, box-shadow 0.2s, background-color 1s'\n },\n uncheckedSpan: {\n borderColor: '#dfdfdf',\n backgroundColor: this.props.tintColor,\n boxShadow: '#dfdfdf 0 0 0 0 inset',\n WebkitTransition: 'border 0.2s, box-shadow 0.2s'\n },\n disabledSpan: {\n opacity: 0.5,\n cursor: 'not-allowed',\n boxShadow: 'none'\n },\n small: {\n position: 'absolute',\n top: 0,\n width: 30,\n height: 30,\n backgroundColor: this.props.thumbTintColor,\n borderRadius: '100%',\n boxShadow: '0 1px 3px rgba(0,0,0,0.4)',\n WebkitTransition: '-webkit-transform 0.2s ease-in'\n },\n checkedSmall: {\n WebkitTransform: 'translateX(20px)'\n },\n uncheckedSmall: {\n WebkitTransform: 'translateX(0)'\n }\n });\n }\n\n handleClick(e) {\n if (this.state.disabled) {\n return null;\n }\n\n var newVal = !this.state.value;\n this.props.onValueChange && this.props.onValueChange.call(this, newVal);\n this.setState({\n value: newVal\n });\n\n var oldValue = this.props.value;\n setTimeout(function() {\n if (this.props.value == oldValue) {\n this.setState({\n value: this.props.value\n });\n }\n }.bind(this), 200);\n }\n\n render() {\n var styles = this.getStyles();\n var spancss = this.state.value ? {...styles.span, ...styles.checkedSpan} : {...styles.span, ...styles.uncheckedSpan};\n var smallcss = this.state.value ? {...styles.small, ...styles.checkedSmall} : {...styles.small, ...styles.uncheckedSmall};\n spancss = this.state.disabled ? {...spancss, ...styles.disabledSpan} : spancss;\n\n return (\n \n \n \n );\n }\n\n};\n\nmixin.onClass(Switch, NativeMethodsMixin);\nautobind(Switch);\n\nSwitch.isReactNativeComponent = true;\n\nexport default Switch;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Libraries/Switch/Switch.web.js\n **/","/**\n * Copyright (c) 2015-present, Alibaba Group Holding Limited.\n * All rights reserved.\n *\n * @providesModule ReactStatusBar\n */\n\n'use strict';\n\nimport React from 'react';\n\nvar emptyFunction = function() {};\n\nfunction StatusBar() {\n return null;\n}\n\nStatusBar.setBarStyle = emptyFunction;\nStatusBar.setHidden = emptyFunction;\nStatusBar.setNetworkActivityIndicatorVisible = emptyFunction;\nStatusBar.setBackgroundColor = emptyFunction;\nStatusBar.setTranslucent = emptyFunction;\nStatusBar.isReactNativeComponent = true;\n\nexport default StatusBar;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Libraries/StatusBar/StatusBar.web.js\n **/","/**\n * Copyright (c) 2015-present, Alibaba Group Holding Limited.\n * All rights reserved.\n *\n * @providesModule ReactTabBar\n */\n'use strict';\n\nimport React from 'react';\nimport View from 'ReactView';\nimport TabBarItem from './TabBarItem.web';\nimport TabBarContents from './TabBarContents.web';\nimport assign from 'object-assign';\nimport StyleSheet from 'ReactStyleSheet';\n\nlet TabBar = React.createClass({\n getInitialState() {\n return {\n selectedIndex: 0\n };\n },\n\n statics: {\n Item: TabBarItem\n },\n\n propTypes: {\n style: React.PropTypes.object,\n /**\n * Color of the currently selected tab icon\n */\n tintColor: React.PropTypes.string,\n /**\n * Background color of the tab bar\n */\n barTintColor: React.PropTypes.string,\n\n clientHeight: React.PropTypes.number\n },\n\n getStyles() {\n return StyleSheet.create({\n container: {\n width: '100%',\n height: this.props.clientHeight || document.documentElement.clientHeight,\n position: 'relative',\n overflow: 'hidden'\n },\n content: {\n width: '100%',\n height: '100%'\n },\n bar: {\n width: '100%',\n position: 'absolute',\n padding: 0,\n margin: 0,\n listStyle: 'none',\n left: 0,\n bottom: 0,\n // borderTop: '1px solid #e1e1e1',\n backgroundColor: 'rgba(250,250,250,.96)',\n display: 'table'\n }\n });\n },\n\n handleTouchTap(index) {\n this.setState({\n selectedIndex: index\n });\n },\n\n render() {\n let self = this;\n let styles = self.getStyles();\n let barStyle = assign(styles.bar, this.props.style || {}, this.props.barTintColor ? {\n backgroundColor: this.props.barTintColor\n } : {});\n\n let tabContent = [];\n\n let tabs = React.Children.map(this.props.children, (tab,\n index) => {\n if (tab.type.displayName === 'TabBarItem') {\n if (tab.props.children) {\n tabContent.push(React.createElement(TabBarContents, {\n key: index,\n selected: self.state.selectedIndex === index\n }, tab.props.children));\n } else {\n tabContent.push(undefined);\n }\n\n return React.cloneElement(tab, {\n index: index,\n selected: self.state.selectedIndex === index,\n selectedColor: self.props.tintColor,\n handleTouchTap: self.handleTouchTap\n });\n\n } else {\n let type = tab.type.displayName || tab.type;\n throw 'Tabbar only accepts TabBar.Item Components as children. Found ' + type + ' as child number ' + (index + 1) + ' of Tabbar';\n }\n });\n\n return (\n \n {tabContent}\n
    \n {tabs}\n
\n
\n );\n }\n});\n\nTabBar.isReactNativeComponent = true;\n\nexport default TabBar;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Libraries/TabBar/TabBar.web.js\n **/","/**\n * Copyright (c) 2015-present, Alibaba Group Holding Limited.\n * All rights reserved.\n *\n */\n'use strict';\n\nimport React, { PropTypes } from 'react';\nimport Image from 'ReactImage';\nimport Text from 'ReactText';\nimport View from 'ReactView';\nimport StyleSheet from 'ReactStyleSheet';\n\nlet TabBarItem = React.createClass({\n propTypes: {\n /**\n * Little red bubble that sits at the top right of the icon.\n */\n badge: PropTypes.oneOfType([\n PropTypes.string, PropTypes.number,\n ]),\n /**\n * A custom icon for the tab. It is ignored when a system icon is defined.\n */\n icon: PropTypes.object,\n /**\n * A custom icon when the tab is selected. It is ignored when a system\n * icon is defined. If left empty, the icon will be tinted in blue.\n */\n selectedIcon: PropTypes.string,\n /**\n * Callback when this tab is being selected, you should change the state of your\n * component to set selected={true}.\n */\n onPress: PropTypes.func,\n /**\n * It specifies whether the children are visible or not. If you see a\n * blank content, you probably forgot to add a selected one.\n */\n selected: PropTypes.bool,\n /**\n * React style object.\n */\n style: PropTypes.object,\n /**\n * Text that appears under the icon. It is ignored when a system icon\n * is defined.\n */\n title: PropTypes.string,\n /**\n * Color of the currently selected tab icon\n */\n selectedColor: PropTypes.string\n },\n\n _onClick() {\n if (this.props.onPress) {\n this.props.onPress();\n }\n if (this.props.handleTouchTap) {\n this.props.handleTouchTap(this.props.index);\n }\n },\n\n render() {\n\n var tabStyle = {...styles.tab, ...this.props.style || {}, color: (this.props.selectedColor && this.props.selected) ? this.props.selectedColor : null};\n\n return (\n
  • \n \n {this.props.badge ? {this.props.badge} : ''}\n \n \n {this.props.title}\n \n \n
  • \n );\n }\n});\n\nlet styles = StyleSheet.create({\n tab: {\n display: 'table-cell',\n textAlign: 'center',\n position: 'relative'\n },\n link: {\n display: 'block',\n padding: '0.3em 0'\n },\n badge: {\n display: 'inline-block',\n position: 'absolute',\n top: 0,\n left: '52%',\n color: '#FFF',\n backgroundColor: '#FF0000',\n height: '1.6em',\n lineHeight: '1.6em',\n minWidth: '1.6em',\n fontSize: '0.7em',\n borderRadius: '0.8em',\n fontStyle: 'normal'\n },\n icon: {\n width: '1.875em',\n height: '1.875em'\n },\n title: {\n fontSize: 12\n }\n});\n\nexport default TabBarItem;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Libraries/TabBar/TabBarItem.web.js\n **/","/**\n * Copyright (c) 2015-present, Alibaba Group Holding Limited.\n * All rights reserved.\n *\n */\n'use strict';\n\nimport React from 'react';\nimport View from 'ReactView';\nimport StyleSheet from 'ReactStyleSheet';\n\nlet TabBarContents = React.createClass({\n\n getInitialState() {\n return {\n hasBeenSelected: false\n };\n },\n\n componentWillMount() {\n if (this.props.selected) {\n this.setState({\n hasBeenSelected: true\n });\n }\n },\n\n componentWillReceiveProps(nextProps) {\n if (this.state.hasBeenSelected || nextProps.selected) {\n this.setState({\n hasBeenSelected: true\n });\n }\n },\n\n render() {\n\n let styles = StyleSheet.create({\n 'display': 'none',\n 'width': '100%',\n 'height': '100%',\n 'position': 'relative'\n });\n\n if (this.props.selected) {\n delete styles.display;\n }\n\n var tabContents = null;\n\n // if the tab has already been shown once, always continue to show it so we\n // preserve state between tab transitions\n if (this.state.hasBeenSelected) {\n tabContents = \n {this.props.children}\n ;\n }\n\n return (tabContents);\n }\n});\n\n\n\nexport default TabBarContents;\n\n\n\n/** WEBPACK FOOTER **\n ** ./Libraries/TabBar/TabBarContents.web.js\n **/","/**\n * Copyright (c) 2015-present, Alibaba Group Holding Limited.\n * All rights reserved.\n *\n * Copyright (c) 2015, Facebook, Inc. All rights reserved.\n *\n * @providesModule ReactTextInput\n */\n'use strict';\n\nimport React, { Component, PropTypes } from 'react';\nimport ReactDOM from 'react-dom';\nimport View from 'ReactView';\nimport autobind from 'autobind-decorator';\n\nlet typeMap = {\n 'default': 'text',\n 'ascii-capable': 'text',\n 'numbers-and-punctuation': 'number',\n 'url': 'url',\n 'number-pad': 'number',\n 'phone-pad': 'tel',\n 'name-phone-pad': 'text',\n 'email-address': 'email',\n 'decimal-pad': 'number',\n 'twitter': 'text',\n 'web-search': 'search',\n 'numeric': 'number'\n};\n\nclass TextInput extends Component {\n\n static defaultProps = {\n editable: true,\n multiline: false,\n secureTextEntry: false,\n keyboardType: 'default',\n autoFocus: false\n }\n\n _onBlur(e) {\n const { onBlur } = this.props;\n if (onBlur) {\n e.nativeEvent.text = e.target.value;\n onBlur(e);\n }\n }\n\n _onChange(e) {\n const { onChange, onChangeText } = this.props;\n if (onChangeText) onChangeText(e.target.value);\n if (onChange) {\n e.nativeEvent.text = e.target.value;\n onChange(e);\n }\n }\n\n _onFocus(e) {\n const { clearTextOnFocus, onFocus, selectTextOnFocus } = this.props;\n const node = ReactDOM.findDOMNode(this);\n if (clearTextOnFocus) node.value = '';\n if (selectTextOnFocus) node.select();\n if (onFocus) {\n e.nativeEvent.text = e.target.value;\n onFocus(e);\n }\n }\n\n _onSelectionChange(e) {\n const { onSelectionChange } = this.props;\n\n if (onSelectionChange) {\n const { selectionDirection, selectionEnd, selectionStart } = e.target;\n e.nativeEvent.text = e.target.value;\n const event = {\n selectionDirection,\n selectionEnd,\n selectionStart,\n nativeEvent: e.nativeEvent\n };\n onSelectionChange(event);\n }\n }\n\n componentDidMount() {\n if (this.props.autoFocus) {\n ReactDOM.findDOMNode(this.refs.input).focus();\n }\n }\n\n render() {\n\n const {\n accessibilityLabel,\n autoComplete,\n autoFocus,\n defaultValue,\n editable,\n keyboardType,\n maxLength,\n maxNumberOfLines,\n multiline,\n numberOfLines,\n onBlur,\n onChange,\n onKeyDown,\n onKeyUp,\n onKeyPress,\n onChangeText,\n onSelectionChange,\n placeholder,\n password,\n secureTextEntry,\n style,\n testID,\n value\n } = this.props;\n\n const propsCommon = {\n ref: 'input',\n 'aria-label': accessibilityLabel,\n autoComplete: autoComplete && 'on',\n autoFocus,\n defaultValue,\n maxLength,\n onBlur: onBlur && this._onBlur,\n onChange: (onChange || onChangeText) && this._onChange,\n onFocus: this._onFocus,\n onSelect: onSelectionChange && this._onSelectionChange,\n placeholder,\n readOnly: !editable,\n style: {\n ...styles.initial,\n ...style\n },\n testID,\n value,\n onKeyDown,\n onKeyUp,\n onKeyPress\n };\n\n let input;\n if (multiline) {\n const propsMultiline = {\n ...propsCommon,\n maxRows: maxNumberOfLines || numberOfLines,\n minRows: numberOfLines\n };\n\n input =