react-rails 1.10.0 → 1.11.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cdd92050a5bee6cf6a5e5b4a7de5d7ba2c61b171
4
- data.tar.gz: f7d3fe5eecd0ff6e0c05ef97cd84eed844b7cb5e
3
+ metadata.gz: 5be5071bf0476f2792eff912d657e0bf93ead10e
4
+ data.tar.gz: 2c77127d9a17d3ba653086034c61a087714f0476
5
5
  SHA512:
6
- metadata.gz: 34b0cdb31e084f17bd0cc7d5a6cf16f4eb78835d125fc6b4cf6675d740c108a0b0d130b6c8018ed1204f1efa97911900e47a9c7d2336f2208e8fec5f6064ad3e
7
- data.tar.gz: dc9ed4024e06555bfbc995958c080ca5c3f966be8234a27520551243e0b3b6f26cc454a3249ab1e3e125ce8561ddbd7223f543150fedf47cf4a0c7006b4535fe
6
+ metadata.gz: 8fab516013ce7f24199968b2ed3f6183998921fa97632afb2ea4beff96fcb4bf85a8c8371d383cb60d0a866501dc770f39d6a8ae00906603a11d5520a4d1f521
7
+ data.tar.gz: 79d8ca952f890e00e8116939ba4136229c470c34ba5424bf9ca7eae052c3dbf67c7646fa3e3fdc4126e29241de25abc257ffd01c93375c293098bdd374012107
@@ -8,6 +8,18 @@
8
8
 
9
9
  #### Bug Fixes
10
10
 
11
+ ## 1.11.0 (April 4, 2017)
12
+
13
+ #### New Features
14
+
15
+ - Support `prerender: false` when rendering in a controller #680
16
+ - Update React to `15.4.2` #681
17
+
18
+ #### Bug Fixes
19
+
20
+ - Fix joining asset path in YamlManifestContainer #679
21
+ - Remove `coffee-script-source` from dependencies. #667 If you have a version conflict, you should specify the proper version yourself.
22
+
11
23
  ## 1.10.0 (October 6, 2016)
12
24
 
13
25
  #### Breaking Changes
data/README.md CHANGED
@@ -19,7 +19,7 @@ in your Ruby on Rails (3.2+) application. `react-rails` can:
19
19
  - [Generate components](#component-generator) with a Rails generator
20
20
  - [Be extended](#extending-react-rails) with custom renderers, transformers and view helpers
21
21
 
22
- Just getting started with React? Make sure to check out the [Getting Started] (https://facebook.github.io/react/docs/getting-started.html) guide. Also, see [Related Projects](#related-projects) below.
22
+ Just getting started with React? Make sure to check out the [Getting Started][React Getting Started] guide. Also, see [Related Projects](#related-projects) below.
23
23
 
24
24
  ## Installation
25
25
 
@@ -224,7 +224,7 @@ end
224
224
 
225
225
  This custom renderer behaves the same as a normal view renderer and accepts the usual arguments - `content_type`, `layout`, `location` and `status`.
226
226
  By default, your current layout will be used and the component, rather than a view, will be rendered in place of `yield`. Custom data-* attributes
227
- can be passed like `data: {remote: true}`.
227
+ can be passed like `data: {remote: true}`. Prerendering is set to `true` by default, but can be turned off like any other option: `prerender: false`.
228
228
 
229
229
  ### Component generator
230
230
 
@@ -390,8 +390,11 @@ Any subclass of `ExecJSRenderer` may use those hooks (for example, `SprocketsRen
390
390
  - [Ruby Hyperloop](http://ruby-hyperloop.io/): Use Ruby to build reactive user interfaces with React.
391
391
  - [react-rails-hot-loader](https://github.com/rmosolgo/react-rails-hot-loader) is a simple live-reloader for `react-rails`.
392
392
  - [react-rails-benchmark_renderer](https://github.com/pboling/react-rails-benchmark_renderer) adds performance instrumentation to server rendering.
393
+ - [The Free React on Rails Course](https://learnetto.com/users/hrishio/courses/the-free-react-on-rails-5-course) A free video course which teaches the basics of React and how to get started using it in Rails with `react-rails`.
393
394
 
394
395
  ## Development
395
396
 
396
397
  - Run tests with `rake test` or `appraisal rake test`
397
398
  - Update React assets with `rake react:update`
399
+
400
+ [React Getting Started]: https://facebook.github.io/react/docs/getting-started.html
@@ -45,7 +45,7 @@
45
45
  /***/ function(module, exports, __webpack_require__) {
46
46
 
47
47
  /* WEBPACK VAR INJECTION */(function(global) {var React = __webpack_require__(1);
48
- var ReactDOMServer = __webpack_require__(206);
48
+ var ReactDOMServer = __webpack_require__(199);
49
49
 
50
50
  React.addons = __webpack_require__(178);
51
51
 
@@ -346,8 +346,15 @@
346
346
  /* 4 */
347
347
  /***/ function(module, exports) {
348
348
 
349
+ /*
350
+ object-assign
351
+ (c) Sindre Sorhus
352
+ @license MIT
353
+ */
354
+
349
355
  'use strict';
350
356
  /* eslint-disable no-unused-vars */
357
+ var getOwnPropertySymbols = Object.getOwnPropertySymbols;
351
358
  var hasOwnProperty = Object.prototype.hasOwnProperty;
352
359
  var propIsEnumerable = Object.prototype.propertyIsEnumerable;
353
360
 
@@ -368,7 +375,7 @@
368
375
  // Detect buggy property enumeration order in older V8 versions.
369
376
 
370
377
  // https://bugs.chromium.org/p/v8/issues/detail?id=4118
371
- var test1 = new String('abc'); // eslint-disable-line
378
+ var test1 = new String('abc'); // eslint-disable-line no-new-wrappers
372
379
  test1[5] = 'de';
373
380
  if (Object.getOwnPropertyNames(test1)[0] === '5') {
374
381
  return false;
@@ -397,7 +404,7 @@
397
404
  }
398
405
 
399
406
  return true;
400
- } catch (e) {
407
+ } catch (err) {
401
408
  // We don't expect any of the above to throw, but better to be safe.
402
409
  return false;
403
410
  }
@@ -417,8 +424,8 @@
417
424
  }
418
425
  }
419
426
 
420
- if (Object.getOwnPropertySymbols) {
421
- symbols = Object.getOwnPropertySymbols(from);
427
+ if (getOwnPropertySymbols) {
428
+ symbols = getOwnPropertySymbols(from);
422
429
  for (var i = 0; i < symbols.length; i++) {
423
430
  if (propIsEnumerable.call(from, symbols[i])) {
424
431
  to[symbols[i]] = from[symbols[i]];
@@ -698,17 +705,6 @@
698
705
  }
699
706
  };
700
707
 
701
- var fiveArgumentPooler = function (a1, a2, a3, a4, a5) {
702
- var Klass = this;
703
- if (Klass.instancePool.length) {
704
- var instance = Klass.instancePool.pop();
705
- Klass.call(instance, a1, a2, a3, a4, a5);
706
- return instance;
707
- } else {
708
- return new Klass(a1, a2, a3, a4, a5);
709
- }
710
- };
711
-
712
708
  var standardReleaser = function (instance) {
713
709
  var Klass = this;
714
710
  !(instance instanceof Klass) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Trying to release an instance into a pool of a different type.') : _prodInvariant('25') : void 0;
@@ -748,8 +744,7 @@
748
744
  oneArgumentPooler: oneArgumentPooler,
749
745
  twoArgumentPooler: twoArgumentPooler,
750
746
  threeArgumentPooler: threeArgumentPooler,
751
- fourArgumentPooler: fourArgumentPooler,
752
- fiveArgumentPooler: fiveArgumentPooler
747
+ fourArgumentPooler: fourArgumentPooler
753
748
  };
754
749
 
755
750
  module.exports = PooledClass;
@@ -825,12 +820,18 @@
825
820
  * will remain to ensure logic does not differ in production.
826
821
  */
827
822
 
828
- function invariant(condition, format, a, b, c, d, e, f) {
829
- if (process.env.NODE_ENV !== 'production') {
823
+ var validateFormat = function validateFormat(format) {};
824
+
825
+ if (process.env.NODE_ENV !== 'production') {
826
+ validateFormat = function validateFormat(format) {
830
827
  if (format === undefined) {
831
828
  throw new Error('invariant requires an error message argument');
832
829
  }
833
- }
830
+ };
831
+ }
832
+
833
+ function invariant(condition, format, a, b, c, d, e, f) {
834
+ validateFormat(format);
834
835
 
835
836
  if (!condition) {
836
837
  var error;
@@ -3083,7 +3084,14 @@
3083
3084
  // We warn in this case but don't throw. We expect the element creation to
3084
3085
  // succeed and there will likely be errors in render.
3085
3086
  if (!validType) {
3086
- process.env.NODE_ENV !== 'production' ? warning(false, 'React.createElement: type should not be null, undefined, boolean, or ' + 'number. It should be a string (for DOM elements) or a ReactClass ' + '(for composite components).%s', getDeclarationErrorAddendum()) : void 0;
3087
+ if (typeof type !== 'function' && typeof type !== 'string') {
3088
+ var info = '';
3089
+ if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {
3090
+ info += ' You likely forgot to export your component from the file ' + 'it\'s defined in.';
3091
+ }
3092
+ info += getDeclarationErrorAddendum();
3093
+ process.env.NODE_ENV !== 'production' ? warning(false, 'React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', type == null ? type : typeof type, info) : void 0;
3094
+ }
3087
3095
  }
3088
3096
 
3089
3097
  var element = ReactElement.createElement.apply(this, arguments);
@@ -4054,7 +4062,7 @@
4054
4062
 
4055
4063
  'use strict';
4056
4064
 
4057
- module.exports = '15.4.1';
4065
+ module.exports = '15.4.2';
4058
4066
 
4059
4067
  /***/ },
4060
4068
  /* 31 */
@@ -4244,6 +4252,13 @@
4244
4252
 
4245
4253
  var internalInstanceKey = '__reactInternalInstance$' + Math.random().toString(36).slice(2);
4246
4254
 
4255
+ /**
4256
+ * Check if a given node should be cached.
4257
+ */
4258
+ function shouldPrecacheNode(node, nodeID) {
4259
+ return node.nodeType === 1 && node.getAttribute(ATTR_NAME) === String(nodeID) || node.nodeType === 8 && node.nodeValue === ' react-text: ' + nodeID + ' ' || node.nodeType === 8 && node.nodeValue === ' react-empty: ' + nodeID + ' ';
4260
+ }
4261
+
4247
4262
  /**
4248
4263
  * Drill down (through composites and empty components) until we get a host or
4249
4264
  * host text component.
@@ -4309,7 +4324,7 @@
4309
4324
  }
4310
4325
  // We assume the child nodes are in the same order as the child instances.
4311
4326
  for (; childNode !== null; childNode = childNode.nextSibling) {
4312
- 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 + ' ') {
4327
+ if (shouldPrecacheNode(childNode, childID)) {
4313
4328
  precacheNode(childInst, childNode);
4314
4329
  continue outer;
4315
4330
  }
@@ -6550,17 +6565,6 @@
6550
6565
  }
6551
6566
  };
6552
6567
 
6553
- var fiveArgumentPooler = function (a1, a2, a3, a4, a5) {
6554
- var Klass = this;
6555
- if (Klass.instancePool.length) {
6556
- var instance = Klass.instancePool.pop();
6557
- Klass.call(instance, a1, a2, a3, a4, a5);
6558
- return instance;
6559
- } else {
6560
- return new Klass(a1, a2, a3, a4, a5);
6561
- }
6562
- };
6563
-
6564
6568
  var standardReleaser = function (instance) {
6565
6569
  var Klass = this;
6566
6570
  !(instance instanceof Klass) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Trying to release an instance into a pool of a different type.') : _prodInvariant('25') : void 0;
@@ -6600,8 +6604,7 @@
6600
6604
  oneArgumentPooler: oneArgumentPooler,
6601
6605
  twoArgumentPooler: twoArgumentPooler,
6602
6606
  threeArgumentPooler: threeArgumentPooler,
6603
- fourArgumentPooler: fourArgumentPooler,
6604
- fiveArgumentPooler: fiveArgumentPooler
6607
+ fourArgumentPooler: fourArgumentPooler
6605
6608
  };
6606
6609
 
6607
6610
  module.exports = PooledClass;
@@ -11419,12 +11422,18 @@
11419
11422
  } else {
11420
11423
  var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null;
11421
11424
  var childrenToUse = contentToUse != null ? null : props.children;
11425
+ // TODO: Validate that text is allowed as a child of this node
11422
11426
  if (contentToUse != null) {
11423
- // TODO: Validate that text is allowed as a child of this node
11424
- if (process.env.NODE_ENV !== 'production') {
11425
- setAndValidateContentChildDev.call(this, contentToUse);
11427
+ // Avoid setting textContent when the text is empty. In IE11 setting
11428
+ // textContent on a text area will cause the placeholder to not
11429
+ // show within the textarea until it has been focused and blurred again.
11430
+ // https://github.com/facebook/react/issues/6731#issuecomment-254874553
11431
+ if (contentToUse !== '') {
11432
+ if (process.env.NODE_ENV !== 'production') {
11433
+ setAndValidateContentChildDev.call(this, contentToUse);
11434
+ }
11435
+ DOMLazyTree.queueText(lazyTree, contentToUse);
11426
11436
  }
11427
- DOMLazyTree.queueText(lazyTree, contentToUse);
11428
11437
  } else if (childrenToUse != null) {
11429
11438
  var mountImages = this.mountChildren(childrenToUse, transaction, context);
11430
11439
  for (var i = 0; i < mountImages.length; i++) {
@@ -13344,7 +13353,17 @@
13344
13353
  }
13345
13354
  } else {
13346
13355
  if (props.value == null && props.defaultValue != null) {
13347
- node.defaultValue = '' + props.defaultValue;
13356
+ // In Chrome, assigning defaultValue to certain input types triggers input validation.
13357
+ // For number inputs, the display value loses trailing decimal points. For email inputs,
13358
+ // Chrome raises "The specified value <x> is not a valid email address".
13359
+ //
13360
+ // Here we check to see if the defaultValue has actually changed, avoiding these problems
13361
+ // when the user is inputting text
13362
+ //
13363
+ // https://github.com/facebook/react/issues/7253
13364
+ if (node.defaultValue !== '' + props.defaultValue) {
13365
+ node.defaultValue = '' + props.defaultValue;
13366
+ }
13348
13367
  }
13349
13368
  if (props.checked == null && props.defaultChecked != null) {
13350
13369
  node.defaultChecked = !!props.defaultChecked;
@@ -14091,9 +14110,15 @@
14091
14110
  // This is in postMount because we need access to the DOM node, which is not
14092
14111
  // available until after the component has mounted.
14093
14112
  var node = ReactDOMComponentTree.getNodeFromInstance(inst);
14113
+ var textContent = node.textContent;
14094
14114
 
14095
- // Warning: node.value may be the empty string at this point (IE11) if placeholder is set.
14096
- node.value = node.textContent; // Detach value from defaultValue
14115
+ // Only set node.value if textContent is equal to the expected
14116
+ // initial value. In IE10/IE11 there is a bug where the placeholder attribute
14117
+ // will populate textContent as well.
14118
+ // https://developer.microsoft.com/microsoft-edge/platform/issues/101525/
14119
+ if (textContent === inst._wrapperState.initialValue) {
14120
+ node.value = textContent;
14121
+ }
14097
14122
  }
14098
14123
  };
14099
14124
 
@@ -14895,7 +14920,17 @@
14895
14920
  instance = ReactEmptyComponent.create(instantiateReactComponent);
14896
14921
  } else if (typeof node === 'object') {
14897
14922
  var element = node;
14898
- !(element && (typeof element.type === 'function' || typeof element.type === 'string')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s', element.type == null ? element.type : typeof element.type, getDeclarationErrorAddendum(element._owner)) : _prodInvariant('130', element.type == null ? element.type : typeof element.type, getDeclarationErrorAddendum(element._owner)) : void 0;
14923
+ var type = element.type;
14924
+ if (typeof type !== 'function' && typeof type !== 'string') {
14925
+ var info = '';
14926
+ if (process.env.NODE_ENV !== 'production') {
14927
+ if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {
14928
+ info += ' You likely forgot to export your component from the file ' + 'it\'s defined in.';
14929
+ }
14930
+ }
14931
+ info += getDeclarationErrorAddendum(element._owner);
14932
+ true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s', type == null ? type : typeof type, info) : _prodInvariant('130', type == null ? type : typeof type, info) : void 0;
14933
+ }
14899
14934
 
14900
14935
  // Special case string values
14901
14936
  if (typeof element.type === 'string') {
@@ -15185,7 +15220,7 @@
15185
15220
  // Since plain JS classes are defined without any special initialization
15186
15221
  // logic, we can not catch common errors early. Therefore, we have to
15187
15222
  // catch them here, at initialization time, instead.
15188
- process.env.NODE_ENV !== 'production' ? warning(!inst.getInitialState || inst.getInitialState.isReactClassApproved, 'getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', this.getName() || 'a component') : void 0;
15223
+ process.env.NODE_ENV !== 'production' ? warning(!inst.getInitialState || inst.getInitialState.isReactClassApproved || inst.state, 'getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', this.getName() || 'a component') : void 0;
15189
15224
  process.env.NODE_ENV !== 'production' ? warning(!inst.getDefaultProps || inst.getDefaultProps.isReactClassApproved, 'getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', this.getName() || 'a component') : void 0;
15190
15225
  process.env.NODE_ENV !== 'production' ? warning(!inst.propTypes, 'propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', this.getName() || 'a component') : void 0;
15191
15226
  process.env.NODE_ENV !== 'production' ? warning(!inst.contextTypes, 'contextTypes was defined as an instance property on %s. Use a ' + 'static property to define contextTypes instead.', this.getName() || 'a component') : void 0;
@@ -16189,14 +16224,11 @@
16189
16224
 
16190
16225
  'use strict';
16191
16226
 
16192
- var _prodInvariant = __webpack_require__(35),
16193
- _assign = __webpack_require__(4);
16227
+ var _prodInvariant = __webpack_require__(35);
16194
16228
 
16195
16229
  var invariant = __webpack_require__(8);
16196
16230
 
16197
16231
  var genericComponentClass = null;
16198
- // This registry keeps track of wrapper classes around host tags.
16199
- var tagToComponentClass = {};
16200
16232
  var textComponentClass = null;
16201
16233
 
16202
16234
  var ReactHostComponentInjection = {
@@ -16209,11 +16241,6 @@
16209
16241
  // rendered as props.
16210
16242
  injectTextComponentClass: function (componentClass) {
16211
16243
  textComponentClass = componentClass;
16212
- },
16213
- // This accepts a keyed object with classes as values. Each key represents a
16214
- // tag. That particular tag will use this class instead of the generic one.
16215
- injectComponentClasses: function (componentClasses) {
16216
- _assign(tagToComponentClass, componentClasses);
16217
16244
  }
16218
16245
  };
16219
16246
 
@@ -18253,10 +18280,10 @@
18253
18280
  */
18254
18281
 
18255
18282
  function getUnboundedScrollPosition(scrollable) {
18256
- if (scrollable === window) {
18283
+ if (scrollable.Window && scrollable instanceof scrollable.Window) {
18257
18284
  return {
18258
- x: window.pageXOffset || document.documentElement.scrollLeft,
18259
- y: window.pageYOffset || document.documentElement.scrollTop
18285
+ x: scrollable.pageXOffset || scrollable.document.documentElement.scrollLeft,
18286
+ y: scrollable.pageYOffset || scrollable.document.documentElement.scrollTop
18260
18287
  };
18261
18288
  }
18262
18289
  return {
@@ -19005,7 +19032,9 @@
19005
19032
  * @return {boolean} Whether or not the object is a DOM node.
19006
19033
  */
19007
19034
  function isNode(object) {
19008
- return !!(object && (typeof Node === 'function' ? object instanceof Node : typeof object === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string'));
19035
+ var doc = object ? object.ownerDocument || object : document;
19036
+ var defaultView = doc.defaultView || window;
19037
+ return !!(object && (typeof defaultView.Node === 'function' ? object instanceof defaultView.Node : typeof object === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string'));
19009
19038
  }
19010
19039
 
19011
19040
  module.exports = isNode;
@@ -19035,15 +19064,19 @@
19035
19064
  *
19036
19065
  * The activeElement will be null only if the document or document body is not
19037
19066
  * yet defined.
19067
+ *
19068
+ * @param {?DOMDocument} doc Defaults to current document.
19069
+ * @return {?DOMElement}
19038
19070
  */
19039
- function getActiveElement() /*?DOMElement*/{
19040
- if (typeof document === 'undefined') {
19071
+ function getActiveElement(doc) /*?DOMElement*/{
19072
+ doc = doc || (typeof document !== 'undefined' ? document : undefined);
19073
+ if (typeof doc === 'undefined') {
19041
19074
  return null;
19042
19075
  }
19043
19076
  try {
19044
- return document.activeElement || document.body;
19077
+ return doc.activeElement || doc.body;
19045
19078
  } catch (e) {
19046
- return document.body;
19079
+ return doc.body;
19047
19080
  }
19048
19081
  }
19049
19082
 
@@ -21068,7 +21101,7 @@
21068
21101
 
21069
21102
  'use strict';
21070
21103
 
21071
- module.exports = '15.4.1';
21104
+ module.exports = '15.4.2';
21072
21105
 
21073
21106
  /***/ },
21074
21107
  /* 172 */
@@ -21458,15 +21491,15 @@
21458
21491
 
21459
21492
  /* WEBPACK VAR INJECTION */(function(process) {var addons = {};
21460
21493
  addons.TransitionGroup = __webpack_require__(179);
21461
- addons.CSSTransitionGroup = __webpack_require__(188);
21494
+ addons.CSSTransitionGroup = __webpack_require__(183);
21462
21495
  addons.LinkedStateMixin = __webpack_require__(193);
21463
- addons.createFragment = __webpack_require__(197);
21464
- addons.update = __webpack_require__(199);
21465
- addons.PureRenderMixin = __webpack_require__(201);
21496
+ addons.createFragment = __webpack_require__(194);
21497
+ addons.update = __webpack_require__(195);
21498
+ addons.PureRenderMixin = __webpack_require__(196);
21466
21499
 
21467
21500
  if (process.env.NODE_ENV !== "production") {
21468
- addons.TestUtils = __webpack_require__(204);
21469
- addons.Perf = __webpack_require__(205);
21501
+ addons.TestUtils = __webpack_require__(197);
21502
+ addons.Perf = __webpack_require__(198);
21470
21503
  }
21471
21504
 
21472
21505
  module.exports = addons;
@@ -21483,7 +21516,7 @@
21483
21516
  /* 180 */
21484
21517
  /***/ function(module, exports, __webpack_require__) {
21485
21518
 
21486
- /* WEBPACK VAR INJECTION */(function(process) {/**
21519
+ /**
21487
21520
  * Copyright 2013-present, Facebook, Inc.
21488
21521
  * All rights reserved.
21489
21522
  *
@@ -21504,8 +21537,7 @@
21504
21537
  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; }
21505
21538
 
21506
21539
  var React = __webpack_require__(2);
21507
- var ReactAddonsDOMDependencies = __webpack_require__(181);
21508
- var ReactTransitionChildMapping = __webpack_require__(186);
21540
+ var ReactTransitionChildMapping = __webpack_require__(181);
21509
21541
 
21510
21542
  var emptyFunction = __webpack_require__(12);
21511
21543
 
@@ -21548,12 +21580,7 @@
21548
21580
 
21549
21581
  delete _this.currentlyTransitioningKeys[key];
21550
21582
 
21551
- var currentChildMapping;
21552
- if (process.env.NODE_ENV !== 'production') {
21553
- currentChildMapping = ReactTransitionChildMapping.getChildMapping(_this.props.children, ReactAddonsDOMDependencies.getReactInstanceMap().get(_this)._debugID);
21554
- } else {
21555
- currentChildMapping = ReactTransitionChildMapping.getChildMapping(_this.props.children);
21556
- }
21583
+ var currentChildMapping = ReactTransitionChildMapping.getChildMapping(_this.props.children);
21557
21584
 
21558
21585
  if (!currentChildMapping || !currentChildMapping.hasOwnProperty(key)) {
21559
21586
  // This was removed before it had fully appeared. Remove it.
@@ -21577,12 +21604,7 @@
21577
21604
 
21578
21605
  delete _this.currentlyTransitioningKeys[key];
21579
21606
 
21580
- var currentChildMapping;
21581
- if (process.env.NODE_ENV !== 'production') {
21582
- currentChildMapping = ReactTransitionChildMapping.getChildMapping(_this.props.children, ReactAddonsDOMDependencies.getReactInstanceMap().get(_this)._debugID);
21583
- } else {
21584
- currentChildMapping = ReactTransitionChildMapping.getChildMapping(_this.props.children);
21585
- }
21607
+ var currentChildMapping = ReactTransitionChildMapping.getChildMapping(_this.props.children);
21586
21608
 
21587
21609
  if (!currentChildMapping || !currentChildMapping.hasOwnProperty(key)) {
21588
21610
  // This was removed before it had fully entered. Remove it.
@@ -21609,12 +21631,7 @@
21609
21631
 
21610
21632
  delete _this.currentlyTransitioningKeys[key];
21611
21633
 
21612
- var currentChildMapping;
21613
- if (process.env.NODE_ENV !== 'production') {
21614
- currentChildMapping = ReactTransitionChildMapping.getChildMapping(_this.props.children, ReactAddonsDOMDependencies.getReactInstanceMap().get(_this)._debugID);
21615
- } else {
21616
- currentChildMapping = ReactTransitionChildMapping.getChildMapping(_this.props.children);
21617
- }
21634
+ var currentChildMapping = ReactTransitionChildMapping.getChildMapping(_this.props.children);
21618
21635
 
21619
21636
  if (currentChildMapping && currentChildMapping.hasOwnProperty(key)) {
21620
21637
  // This entered again before it fully left. Add it again.
@@ -21645,12 +21662,7 @@
21645
21662
  };
21646
21663
 
21647
21664
  ReactTransitionGroup.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {
21648
- var nextChildMapping;
21649
- if (process.env.NODE_ENV !== 'production') {
21650
- nextChildMapping = ReactTransitionChildMapping.getChildMapping(nextProps.children, ReactAddonsDOMDependencies.getReactInstanceMap().get(this)._debugID);
21651
- } else {
21652
- nextChildMapping = ReactTransitionChildMapping.getChildMapping(nextProps.children);
21653
- }
21665
+ var nextChildMapping = ReactTransitionChildMapping.getChildMapping(nextProps.children);
21654
21666
  var prevChildMapping = this.state.children;
21655
21667
 
21656
21668
  this.setState({
@@ -21732,7 +21744,6 @@
21732
21744
 
21733
21745
 
21734
21746
  module.exports = ReactTransitionGroup;
21735
- /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))
21736
21747
 
21737
21748
  /***/ },
21738
21749
  /* 181 */
@@ -21750,29 +21761,96 @@
21750
21761
 
21751
21762
  'use strict';
21752
21763
 
21753
- var ReactDOM = __webpack_require__(33);
21754
- var ReactInstanceMap = __webpack_require__(116);
21764
+ var flattenChildren = __webpack_require__(182);
21755
21765
 
21756
- exports.getReactDOM = function () {
21757
- return ReactDOM;
21758
- };
21766
+ var ReactTransitionChildMapping = {
21767
+ /**
21768
+ * Given `this.props.children`, return an object mapping key to child. Just
21769
+ * simple syntactic sugar around flattenChildren().
21770
+ *
21771
+ * @param {*} children `this.props.children`
21772
+ * @param {number=} selfDebugID Optional debugID of the current internal instance.
21773
+ * @return {object} Mapping of key to child
21774
+ */
21775
+ getChildMapping: function (children, selfDebugID) {
21776
+ if (!children) {
21777
+ return children;
21778
+ }
21759
21779
 
21760
- exports.getReactInstanceMap = function () {
21761
- return ReactInstanceMap;
21762
- };
21780
+ if (process.env.NODE_ENV !== 'production') {
21781
+ return flattenChildren(children, selfDebugID);
21782
+ }
21763
21783
 
21764
- if (process.env.NODE_ENV !== 'production') {
21765
- var ReactPerf = __webpack_require__(182);
21766
- var ReactTestUtils = __webpack_require__(183);
21784
+ return flattenChildren(children);
21785
+ },
21767
21786
 
21768
- exports.getReactPerf = function () {
21769
- return ReactPerf;
21770
- };
21787
+ /**
21788
+ * When you're adding or removing children some may be added or removed in the
21789
+ * same render pass. We want to show *both* since we want to simultaneously
21790
+ * animate elements in and out. This function takes a previous set of keys
21791
+ * and a new set of keys and merges them with its best guess of the correct
21792
+ * ordering. In the future we may expose some of the utilities in
21793
+ * ReactMultiChild to make this easy, but for now React itself does not
21794
+ * directly have this concept of the union of prevChildren and nextChildren
21795
+ * so we implement it here.
21796
+ *
21797
+ * @param {object} prev prev children as returned from
21798
+ * `ReactTransitionChildMapping.getChildMapping()`.
21799
+ * @param {object} next next children as returned from
21800
+ * `ReactTransitionChildMapping.getChildMapping()`.
21801
+ * @return {object} a key set that contains all keys in `prev` and all keys
21802
+ * in `next` in a reasonable order.
21803
+ */
21804
+ mergeChildMappings: function (prev, next) {
21805
+ prev = prev || {};
21806
+ next = next || {};
21771
21807
 
21772
- exports.getReactTestUtils = function () {
21773
- return ReactTestUtils;
21774
- };
21775
- }
21808
+ function getValueForKey(key) {
21809
+ if (next.hasOwnProperty(key)) {
21810
+ return next[key];
21811
+ } else {
21812
+ return prev[key];
21813
+ }
21814
+ }
21815
+
21816
+ // For each key of `next`, the list of keys to insert before that key in
21817
+ // the combined list
21818
+ var nextKeysPending = {};
21819
+
21820
+ var pendingKeys = [];
21821
+ for (var prevKey in prev) {
21822
+ if (next.hasOwnProperty(prevKey)) {
21823
+ if (pendingKeys.length) {
21824
+ nextKeysPending[prevKey] = pendingKeys;
21825
+ pendingKeys = [];
21826
+ }
21827
+ } else {
21828
+ pendingKeys.push(prevKey);
21829
+ }
21830
+ }
21831
+
21832
+ var i;
21833
+ var childMapping = {};
21834
+ for (var nextKey in next) {
21835
+ if (nextKeysPending.hasOwnProperty(nextKey)) {
21836
+ for (i = 0; i < nextKeysPending[nextKey].length; i++) {
21837
+ var pendingNextKey = nextKeysPending[nextKey][i];
21838
+ childMapping[nextKeysPending[nextKey][i]] = getValueForKey(pendingNextKey);
21839
+ }
21840
+ }
21841
+ childMapping[nextKey] = getValueForKey(nextKey);
21842
+ }
21843
+
21844
+ // Finally, add the keys which didn't appear before any key in `next`
21845
+ for (i = 0; i < pendingKeys.length; i++) {
21846
+ childMapping[pendingKeys[i]] = getValueForKey(pendingKeys[i]);
21847
+ }
21848
+
21849
+ return childMapping;
21850
+ }
21851
+ };
21852
+
21853
+ module.exports = ReactTransitionChildMapping;
21776
21854
  /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))
21777
21855
 
21778
21856
  /***/ },
@@ -21780,7 +21858,7 @@
21780
21858
  /***/ function(module, exports, __webpack_require__) {
21781
21859
 
21782
21860
  /* WEBPACK VAR INJECTION */(function(process) {/**
21783
- * Copyright 2016-present, Facebook, Inc.
21861
+ * Copyright 2013-present, Facebook, Inc.
21784
21862
  * All rights reserved.
21785
21863
  *
21786
21864
  * This source code is licensed under the BSD-style license found in the
@@ -21792,1010 +21870,906 @@
21792
21870
 
21793
21871
  'use strict';
21794
21872
 
21795
- var _assign = __webpack_require__(4);
21796
-
21797
- var _extends = _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; };
21798
-
21799
- var ReactDebugTool = __webpack_require__(63);
21873
+ var KeyEscapeUtils = __webpack_require__(17);
21874
+ var traverseAllChildren = __webpack_require__(15);
21800
21875
  var warning = __webpack_require__(11);
21801
- var alreadyWarned = false;
21802
21876
 
21803
- function roundFloat(val) {
21804
- var base = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;
21805
-
21806
- var n = Math.pow(10, base);
21807
- return Math.floor(val * n) / n;
21808
- }
21877
+ var ReactComponentTreeHook;
21809
21878
 
21810
- // Flow type definition of console.table is too strict right now, see
21811
- // https://github.com/facebook/flow/pull/2353 for updates
21812
- function consoleTable(table) {
21813
- console.table(table);
21879
+ if (typeof process !== 'undefined' && process.env && process.env.NODE_ENV === 'test') {
21880
+ // Temporary hack.
21881
+ // Inline requires don't work well with Jest:
21882
+ // https://github.com/facebook/react/issues/7240
21883
+ // Remove the inline requires when we don't need them anymore:
21884
+ // https://github.com/facebook/react/pull/7178
21885
+ ReactComponentTreeHook = __webpack_require__(26);
21814
21886
  }
21815
21887
 
21816
- function warnInProduction() {
21817
- if (alreadyWarned) {
21818
- return;
21819
- }
21820
- alreadyWarned = true;
21821
- if (typeof console !== 'undefined') {
21822
- console.error('ReactPerf is not supported in the production builds of React. ' + 'To collect measurements, please use the development build of React instead.');
21888
+ /**
21889
+ * @param {function} traverseContext Context passed through traversal.
21890
+ * @param {?ReactComponent} child React child component.
21891
+ * @param {!string} name String name of key path to child.
21892
+ * @param {number=} selfDebugID Optional debugID of the current internal instance.
21893
+ */
21894
+ function flattenSingleChildIntoContext(traverseContext, child, name, selfDebugID) {
21895
+ // We found a component instance.
21896
+ if (traverseContext && typeof traverseContext === 'object') {
21897
+ var result = traverseContext;
21898
+ var keyUnique = result[name] === undefined;
21899
+ if (process.env.NODE_ENV !== 'production') {
21900
+ if (!ReactComponentTreeHook) {
21901
+ ReactComponentTreeHook = __webpack_require__(26);
21902
+ }
21903
+ if (!keyUnique) {
21904
+ process.env.NODE_ENV !== 'production' ? warning(false, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.%s', KeyEscapeUtils.unescape(name), ReactComponentTreeHook.getStackAddendumByID(selfDebugID)) : void 0;
21905
+ }
21906
+ }
21907
+ if (keyUnique && child != null) {
21908
+ result[name] = child;
21909
+ }
21823
21910
  }
21824
21911
  }
21825
21912
 
21826
- function getLastMeasurements() {
21827
- if (!(process.env.NODE_ENV !== 'production')) {
21828
- warnInProduction();
21829
- return [];
21913
+ /**
21914
+ * Flattens children that are typically specified as `props.children`. Any null
21915
+ * children will not be included in the resulting object.
21916
+ * @return {!object} flattened children keyed by name.
21917
+ */
21918
+ function flattenChildren(children, selfDebugID) {
21919
+ if (children == null) {
21920
+ return children;
21830
21921
  }
21922
+ var result = {};
21831
21923
 
21832
- return ReactDebugTool.getFlushHistory();
21924
+ if (process.env.NODE_ENV !== 'production') {
21925
+ traverseAllChildren(children, function (traverseContext, child, name) {
21926
+ return flattenSingleChildIntoContext(traverseContext, child, name, selfDebugID);
21927
+ }, result);
21928
+ } else {
21929
+ traverseAllChildren(children, flattenSingleChildIntoContext, result);
21930
+ }
21931
+ return result;
21833
21932
  }
21834
21933
 
21835
- function getExclusive() {
21836
- var flushHistory = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getLastMeasurements();
21934
+ module.exports = flattenChildren;
21935
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))
21837
21936
 
21838
- if (!(process.env.NODE_ENV !== 'production')) {
21839
- warnInProduction();
21840
- return [];
21841
- }
21937
+ /***/ },
21938
+ /* 183 */
21939
+ /***/ function(module, exports, __webpack_require__) {
21842
21940
 
21843
- var aggregatedStats = {};
21844
- var affectedIDs = {};
21941
+ module.exports = __webpack_require__(184);
21845
21942
 
21846
- function updateAggregatedStats(treeSnapshot, instanceID, timerType, applyUpdate) {
21847
- var displayName = treeSnapshot[instanceID].displayName;
21943
+ /***/ },
21944
+ /* 184 */
21945
+ /***/ function(module, exports, __webpack_require__) {
21848
21946
 
21849
- var key = displayName;
21850
- var stats = aggregatedStats[key];
21851
- if (!stats) {
21852
- affectedIDs[key] = {};
21853
- stats = aggregatedStats[key] = {
21854
- key: key,
21855
- instanceCount: 0,
21856
- counts: {},
21857
- durations: {},
21858
- totalDuration: 0
21859
- };
21860
- }
21861
- if (!stats.durations[timerType]) {
21862
- stats.durations[timerType] = 0;
21863
- }
21864
- if (!stats.counts[timerType]) {
21865
- stats.counts[timerType] = 0;
21866
- }
21867
- affectedIDs[key][instanceID] = true;
21868
- applyUpdate(stats);
21869
- }
21947
+ /**
21948
+ * Copyright 2013-present, Facebook, Inc.
21949
+ * All rights reserved.
21950
+ *
21951
+ * This source code is licensed under the BSD-style license found in the
21952
+ * LICENSE file in the root directory of this source tree. An additional grant
21953
+ * of patent rights can be found in the PATENTS file in the same directory.
21954
+ *
21955
+ */
21870
21956
 
21871
- flushHistory.forEach(function (flush) {
21872
- var measurements = flush.measurements,
21873
- treeSnapshot = flush.treeSnapshot;
21957
+ 'use strict';
21874
21958
 
21875
- measurements.forEach(function (measurement) {
21876
- var duration = measurement.duration,
21877
- instanceID = measurement.instanceID,
21878
- timerType = measurement.timerType;
21959
+ var _assign = __webpack_require__(4);
21879
21960
 
21880
- updateAggregatedStats(treeSnapshot, instanceID, timerType, function (stats) {
21881
- stats.totalDuration += duration;
21882
- stats.durations[timerType] += duration;
21883
- stats.counts[timerType]++;
21884
- });
21885
- });
21886
- });
21961
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
21887
21962
 
21888
- return Object.keys(aggregatedStats).map(function (key) {
21889
- return _extends({}, aggregatedStats[key], {
21890
- instanceCount: Object.keys(affectedIDs[key]).length
21891
- });
21892
- }).sort(function (a, b) {
21893
- return b.totalDuration - a.totalDuration;
21894
- });
21895
- }
21963
+ 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; }
21896
21964
 
21897
- function getInclusive() {
21898
- var flushHistory = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getLastMeasurements();
21965
+ 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; }
21899
21966
 
21900
- if (!(process.env.NODE_ENV !== 'production')) {
21901
- warnInProduction();
21902
- return [];
21903
- }
21967
+ var React = __webpack_require__(2);
21904
21968
 
21905
- var aggregatedStats = {};
21906
- var affectedIDs = {};
21969
+ var ReactTransitionGroup = __webpack_require__(180);
21970
+ var ReactCSSTransitionGroupChild = __webpack_require__(185);
21907
21971
 
21908
- function updateAggregatedStats(treeSnapshot, instanceID, applyUpdate) {
21909
- var _treeSnapshot$instanc = treeSnapshot[instanceID],
21910
- displayName = _treeSnapshot$instanc.displayName,
21911
- ownerID = _treeSnapshot$instanc.ownerID;
21972
+ function createTransitionTimeoutPropValidator(transitionType) {
21973
+ var timeoutPropName = 'transition' + transitionType + 'Timeout';
21974
+ var enabledPropName = 'transition' + transitionType;
21912
21975
 
21913
- var owner = treeSnapshot[ownerID];
21914
- var key = (owner ? owner.displayName + ' > ' : '') + displayName;
21915
- var stats = aggregatedStats[key];
21916
- if (!stats) {
21917
- affectedIDs[key] = {};
21918
- stats = aggregatedStats[key] = {
21919
- key: key,
21920
- instanceCount: 0,
21921
- inclusiveRenderDuration: 0,
21922
- renderCount: 0
21923
- };
21976
+ return function (props) {
21977
+ // If the transition is enabled
21978
+ if (props[enabledPropName]) {
21979
+ // If no timeout duration is provided
21980
+ if (props[timeoutPropName] == null) {
21981
+ return new Error(timeoutPropName + ' wasn\'t supplied to ReactCSSTransitionGroup: ' + 'this can cause unreliable animations and won\'t be supported in ' + 'a future version of React. See ' + 'https://fb.me/react-animation-transition-group-timeout for more ' + 'information.');
21982
+
21983
+ // If the duration isn't a number
21984
+ } else if (typeof props[timeoutPropName] !== 'number') {
21985
+ return new Error(timeoutPropName + ' must be a number (in milliseconds)');
21986
+ }
21924
21987
  }
21925
- affectedIDs[key][instanceID] = true;
21926
- applyUpdate(stats);
21927
- }
21988
+ };
21989
+ }
21928
21990
 
21929
- var isCompositeByID = {};
21930
- flushHistory.forEach(function (flush) {
21931
- var measurements = flush.measurements;
21991
+ /**
21992
+ * An easy way to perform CSS transitions and animations when a React component
21993
+ * enters or leaves the DOM.
21994
+ * See https://facebook.github.io/react/docs/animation.html#high-level-api-reactcsstransitiongroup
21995
+ */
21932
21996
 
21933
- measurements.forEach(function (measurement) {
21934
- var instanceID = measurement.instanceID,
21935
- timerType = measurement.timerType;
21997
+ var ReactCSSTransitionGroup = function (_React$Component) {
21998
+ _inherits(ReactCSSTransitionGroup, _React$Component);
21936
21999
 
21937
- if (timerType !== 'render') {
21938
- return;
21939
- }
21940
- isCompositeByID[instanceID] = true;
21941
- });
21942
- });
22000
+ function ReactCSSTransitionGroup() {
22001
+ var _temp, _this, _ret;
21943
22002
 
21944
- flushHistory.forEach(function (flush) {
21945
- var measurements = flush.measurements,
21946
- treeSnapshot = flush.treeSnapshot;
22003
+ _classCallCheck(this, ReactCSSTransitionGroup);
21947
22004
 
21948
- measurements.forEach(function (measurement) {
21949
- var duration = measurement.duration,
21950
- instanceID = measurement.instanceID,
21951
- timerType = measurement.timerType;
22005
+ for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
22006
+ args[_key] = arguments[_key];
22007
+ }
21952
22008
 
21953
- if (timerType !== 'render') {
21954
- return;
21955
- }
21956
- updateAggregatedStats(treeSnapshot, instanceID, function (stats) {
21957
- stats.renderCount++;
21958
- });
21959
- var nextParentID = instanceID;
21960
- while (nextParentID) {
21961
- // As we traverse parents, only count inclusive time towards composites.
21962
- // We know something is a composite if its render() was called.
21963
- if (isCompositeByID[nextParentID]) {
21964
- updateAggregatedStats(treeSnapshot, nextParentID, function (stats) {
21965
- stats.inclusiveRenderDuration += duration;
21966
- });
21967
- }
21968
- nextParentID = treeSnapshot[nextParentID].parentID;
21969
- }
21970
- });
21971
- });
22009
+ return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this._wrapChild = function (child) {
22010
+ // We need to provide this childFactory so that
22011
+ // ReactCSSTransitionGroupChild can receive updates to name, enter, and
22012
+ // leave while it is leaving.
22013
+ return React.createElement(ReactCSSTransitionGroupChild, {
22014
+ name: _this.props.transitionName,
22015
+ appear: _this.props.transitionAppear,
22016
+ enter: _this.props.transitionEnter,
22017
+ leave: _this.props.transitionLeave,
22018
+ appearTimeout: _this.props.transitionAppearTimeout,
22019
+ enterTimeout: _this.props.transitionEnterTimeout,
22020
+ leaveTimeout: _this.props.transitionLeaveTimeout
22021
+ }, child);
22022
+ }, _temp), _possibleConstructorReturn(_this, _ret);
22023
+ }
21972
22024
 
21973
- return Object.keys(aggregatedStats).map(function (key) {
21974
- return _extends({}, aggregatedStats[key], {
21975
- instanceCount: Object.keys(affectedIDs[key]).length
21976
- });
21977
- }).sort(function (a, b) {
21978
- return b.inclusiveRenderDuration - a.inclusiveRenderDuration;
21979
- });
21980
- }
22025
+ ReactCSSTransitionGroup.prototype.render = function render() {
22026
+ return React.createElement(ReactTransitionGroup, _assign({}, this.props, { childFactory: this._wrapChild }));
22027
+ };
21981
22028
 
21982
- function getWasted() {
21983
- var flushHistory = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getLastMeasurements();
22029
+ return ReactCSSTransitionGroup;
22030
+ }(React.Component);
21984
22031
 
21985
- if (!(process.env.NODE_ENV !== 'production')) {
21986
- warnInProduction();
21987
- return [];
21988
- }
22032
+ ReactCSSTransitionGroup.displayName = 'ReactCSSTransitionGroup';
22033
+ ReactCSSTransitionGroup.propTypes = {
22034
+ transitionName: ReactCSSTransitionGroupChild.propTypes.name,
21989
22035
 
21990
- var aggregatedStats = {};
21991
- var affectedIDs = {};
22036
+ transitionAppear: React.PropTypes.bool,
22037
+ transitionEnter: React.PropTypes.bool,
22038
+ transitionLeave: React.PropTypes.bool,
22039
+ transitionAppearTimeout: createTransitionTimeoutPropValidator('Appear'),
22040
+ transitionEnterTimeout: createTransitionTimeoutPropValidator('Enter'),
22041
+ transitionLeaveTimeout: createTransitionTimeoutPropValidator('Leave')
22042
+ };
22043
+ ReactCSSTransitionGroup.defaultProps = {
22044
+ transitionAppear: false,
22045
+ transitionEnter: true,
22046
+ transitionLeave: true
22047
+ };
21992
22048
 
21993
- function updateAggregatedStats(treeSnapshot, instanceID, applyUpdate) {
21994
- var _treeSnapshot$instanc2 = treeSnapshot[instanceID],
21995
- displayName = _treeSnapshot$instanc2.displayName,
21996
- ownerID = _treeSnapshot$instanc2.ownerID;
21997
22049
 
21998
- var owner = treeSnapshot[ownerID];
21999
- var key = (owner ? owner.displayName + ' > ' : '') + displayName;
22000
- var stats = aggregatedStats[key];
22001
- if (!stats) {
22002
- affectedIDs[key] = {};
22003
- stats = aggregatedStats[key] = {
22004
- key: key,
22005
- instanceCount: 0,
22006
- inclusiveRenderDuration: 0,
22007
- renderCount: 0
22008
- };
22009
- }
22010
- affectedIDs[key][instanceID] = true;
22011
- applyUpdate(stats);
22012
- }
22050
+ module.exports = ReactCSSTransitionGroup;
22013
22051
 
22014
- flushHistory.forEach(function (flush) {
22015
- var measurements = flush.measurements,
22016
- treeSnapshot = flush.treeSnapshot,
22017
- operations = flush.operations;
22052
+ /***/ },
22053
+ /* 185 */
22054
+ /***/ function(module, exports, __webpack_require__) {
22018
22055
 
22019
- var isDefinitelyNotWastedByID = {};
22056
+ /**
22057
+ * Copyright 2013-present, Facebook, Inc.
22058
+ * All rights reserved.
22059
+ *
22060
+ * This source code is licensed under the BSD-style license found in the
22061
+ * LICENSE file in the root directory of this source tree. An additional grant
22062
+ * of patent rights can be found in the PATENTS file in the same directory.
22063
+ *
22064
+ */
22020
22065
 
22021
- // Find host components associated with an operation in this batch.
22022
- // Mark all components in their parent tree as definitely not wasted.
22023
- operations.forEach(function (operation) {
22024
- var instanceID = operation.instanceID;
22066
+ 'use strict';
22025
22067
 
22026
- var nextParentID = instanceID;
22027
- while (nextParentID) {
22028
- isDefinitelyNotWastedByID[nextParentID] = true;
22029
- nextParentID = treeSnapshot[nextParentID].parentID;
22030
- }
22031
- });
22068
+ var React = __webpack_require__(2);
22069
+ var ReactAddonsDOMDependencies = __webpack_require__(186);
22032
22070
 
22033
- // Find composite components that rendered in this batch.
22034
- // These are potential candidates for being wasted renders.
22035
- var renderedCompositeIDs = {};
22036
- measurements.forEach(function (measurement) {
22037
- var instanceID = measurement.instanceID,
22038
- timerType = measurement.timerType;
22071
+ var CSSCore = __webpack_require__(191);
22072
+ var ReactTransitionEvents = __webpack_require__(192);
22039
22073
 
22040
- if (timerType !== 'render') {
22041
- return;
22042
- }
22043
- renderedCompositeIDs[instanceID] = true;
22044
- });
22074
+ var onlyChild = __webpack_require__(31);
22045
22075
 
22046
- measurements.forEach(function (measurement) {
22047
- var duration = measurement.duration,
22048
- instanceID = measurement.instanceID,
22049
- timerType = measurement.timerType;
22076
+ var TICK = 17;
22050
22077
 
22051
- if (timerType !== 'render') {
22052
- return;
22078
+ var ReactCSSTransitionGroupChild = React.createClass({
22079
+ displayName: 'ReactCSSTransitionGroupChild',
22080
+
22081
+ propTypes: {
22082
+ name: React.PropTypes.oneOfType([React.PropTypes.string, React.PropTypes.shape({
22083
+ enter: React.PropTypes.string,
22084
+ leave: React.PropTypes.string,
22085
+ active: React.PropTypes.string
22086
+ }), React.PropTypes.shape({
22087
+ enter: React.PropTypes.string,
22088
+ enterActive: React.PropTypes.string,
22089
+ leave: React.PropTypes.string,
22090
+ leaveActive: React.PropTypes.string,
22091
+ appear: React.PropTypes.string,
22092
+ appearActive: React.PropTypes.string
22093
+ })]).isRequired,
22094
+
22095
+ // Once we require timeouts to be specified, we can remove the
22096
+ // boolean flags (appear etc.) and just accept a number
22097
+ // or a bool for the timeout flags (appearTimeout etc.)
22098
+ appear: React.PropTypes.bool,
22099
+ enter: React.PropTypes.bool,
22100
+ leave: React.PropTypes.bool,
22101
+ appearTimeout: React.PropTypes.number,
22102
+ enterTimeout: React.PropTypes.number,
22103
+ leaveTimeout: React.PropTypes.number
22104
+ },
22105
+
22106
+ transition: function (animationType, finishCallback, userSpecifiedDelay) {
22107
+ var node = ReactAddonsDOMDependencies.getReactDOM().findDOMNode(this);
22108
+
22109
+ if (!node) {
22110
+ if (finishCallback) {
22111
+ finishCallback();
22053
22112
  }
22113
+ return;
22114
+ }
22054
22115
 
22055
- // If there was a DOM update below this component, or it has just been
22056
- // mounted, its render() is not considered wasted.
22057
- var updateCount = treeSnapshot[instanceID].updateCount;
22116
+ var className = this.props.name[animationType] || this.props.name + '-' + animationType;
22117
+ var activeClassName = this.props.name[animationType + 'Active'] || className + '-active';
22118
+ var timeout = null;
22058
22119
 
22059
- if (isDefinitelyNotWastedByID[instanceID] || updateCount === 0) {
22120
+ var endListener = function (e) {
22121
+ if (e && e.target !== node) {
22060
22122
  return;
22061
22123
  }
22062
22124
 
22063
- // We consider this render() wasted.
22064
- updateAggregatedStats(treeSnapshot, instanceID, function (stats) {
22065
- stats.renderCount++;
22066
- });
22125
+ clearTimeout(timeout);
22067
22126
 
22068
- var nextParentID = instanceID;
22069
- while (nextParentID) {
22070
- // Any parents rendered during this batch are considered wasted
22071
- // unless we previously marked them as dirty.
22072
- var isWasted = renderedCompositeIDs[nextParentID] && !isDefinitelyNotWastedByID[nextParentID];
22073
- if (isWasted) {
22074
- updateAggregatedStats(treeSnapshot, nextParentID, function (stats) {
22075
- stats.inclusiveRenderDuration += duration;
22076
- });
22077
- }
22078
- nextParentID = treeSnapshot[nextParentID].parentID;
22079
- }
22080
- });
22081
- });
22127
+ CSSCore.removeClass(node, className);
22128
+ CSSCore.removeClass(node, activeClassName);
22082
22129
 
22083
- return Object.keys(aggregatedStats).map(function (key) {
22084
- return _extends({}, aggregatedStats[key], {
22085
- instanceCount: Object.keys(affectedIDs[key]).length
22086
- });
22087
- }).sort(function (a, b) {
22088
- return b.inclusiveRenderDuration - a.inclusiveRenderDuration;
22089
- });
22090
- }
22130
+ ReactTransitionEvents.removeEndEventListener(node, endListener);
22091
22131
 
22092
- function getOperations() {
22093
- var flushHistory = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getLastMeasurements();
22132
+ // Usually this optional callback is used for informing an owner of
22133
+ // a leave animation and telling it to remove the child.
22134
+ if (finishCallback) {
22135
+ finishCallback();
22136
+ }
22137
+ };
22094
22138
 
22095
- if (!(process.env.NODE_ENV !== 'production')) {
22096
- warnInProduction();
22097
- return [];
22098
- }
22139
+ CSSCore.addClass(node, className);
22099
22140
 
22100
- var stats = [];
22101
- flushHistory.forEach(function (flush, flushIndex) {
22102
- var operations = flush.operations,
22103
- treeSnapshot = flush.treeSnapshot;
22141
+ // Need to do this to actually trigger a transition.
22142
+ this.queueClassAndNode(activeClassName, node);
22104
22143
 
22105
- operations.forEach(function (operation) {
22106
- var instanceID = operation.instanceID,
22107
- type = operation.type,
22108
- payload = operation.payload;
22109
- var _treeSnapshot$instanc3 = treeSnapshot[instanceID],
22110
- displayName = _treeSnapshot$instanc3.displayName,
22111
- ownerID = _treeSnapshot$instanc3.ownerID;
22144
+ // If the user specified a timeout delay.
22145
+ if (userSpecifiedDelay) {
22146
+ // Clean-up the animation after the specified delay
22147
+ timeout = setTimeout(endListener, userSpecifiedDelay);
22148
+ this.transitionTimeouts.push(timeout);
22149
+ } else {
22150
+ // DEPRECATED: this listener will be removed in a future version of react
22151
+ ReactTransitionEvents.addEndEventListener(node, endListener);
22152
+ }
22153
+ },
22112
22154
 
22113
- var owner = treeSnapshot[ownerID];
22114
- var key = (owner ? owner.displayName + ' > ' : '') + displayName;
22155
+ queueClassAndNode: function (className, node) {
22156
+ this.classNameAndNodeQueue.push({
22157
+ className: className,
22158
+ node: node
22159
+ });
22115
22160
 
22116
- stats.push({
22117
- flushIndex: flushIndex,
22118
- instanceID: instanceID,
22119
- key: key,
22120
- type: type,
22121
- ownerID: ownerID,
22122
- payload: payload
22161
+ if (!this.timeout) {
22162
+ this.timeout = setTimeout(this.flushClassNameAndNodeQueue, TICK);
22163
+ }
22164
+ },
22165
+
22166
+ flushClassNameAndNodeQueue: function () {
22167
+ if (this.isMounted()) {
22168
+ this.classNameAndNodeQueue.forEach(function (obj) {
22169
+ CSSCore.addClass(obj.node, obj.className);
22123
22170
  });
22124
- });
22125
- });
22126
- return stats;
22127
- }
22171
+ }
22172
+ this.classNameAndNodeQueue.length = 0;
22173
+ this.timeout = null;
22174
+ },
22128
22175
 
22129
- function printExclusive(flushHistory) {
22130
- if (!(process.env.NODE_ENV !== 'production')) {
22131
- warnInProduction();
22132
- return;
22133
- }
22176
+ componentWillMount: function () {
22177
+ this.classNameAndNodeQueue = [];
22178
+ this.transitionTimeouts = [];
22179
+ },
22134
22180
 
22135
- var stats = getExclusive(flushHistory);
22136
- var table = stats.map(function (item) {
22137
- var key = item.key,
22138
- instanceCount = item.instanceCount,
22139
- totalDuration = item.totalDuration;
22181
+ componentWillUnmount: function () {
22182
+ if (this.timeout) {
22183
+ clearTimeout(this.timeout);
22184
+ }
22185
+ this.transitionTimeouts.forEach(function (timeout) {
22186
+ clearTimeout(timeout);
22187
+ });
22140
22188
 
22141
- var renderCount = item.counts.render || 0;
22142
- var renderDuration = item.durations.render || 0;
22143
- return {
22144
- 'Component': key,
22145
- 'Total time (ms)': roundFloat(totalDuration),
22146
- 'Instance count': instanceCount,
22147
- 'Total render time (ms)': roundFloat(renderDuration),
22148
- 'Average render time (ms)': renderCount ? roundFloat(renderDuration / renderCount) : undefined,
22149
- 'Render count': renderCount,
22150
- 'Total lifecycle time (ms)': roundFloat(totalDuration - renderDuration)
22151
- };
22152
- });
22153
- consoleTable(table);
22154
- }
22189
+ this.classNameAndNodeQueue.length = 0;
22190
+ },
22155
22191
 
22156
- function printInclusive(flushHistory) {
22157
- if (!(process.env.NODE_ENV !== 'production')) {
22158
- warnInProduction();
22159
- return;
22160
- }
22192
+ componentWillAppear: function (done) {
22193
+ if (this.props.appear) {
22194
+ this.transition('appear', done, this.props.appearTimeout);
22195
+ } else {
22196
+ done();
22197
+ }
22198
+ },
22161
22199
 
22162
- var stats = getInclusive(flushHistory);
22163
- var table = stats.map(function (item) {
22164
- var key = item.key,
22165
- instanceCount = item.instanceCount,
22166
- inclusiveRenderDuration = item.inclusiveRenderDuration,
22167
- renderCount = item.renderCount;
22200
+ componentWillEnter: function (done) {
22201
+ if (this.props.enter) {
22202
+ this.transition('enter', done, this.props.enterTimeout);
22203
+ } else {
22204
+ done();
22205
+ }
22206
+ },
22168
22207
 
22169
- return {
22170
- 'Owner > Component': key,
22171
- 'Inclusive render time (ms)': roundFloat(inclusiveRenderDuration),
22172
- 'Instance count': instanceCount,
22173
- 'Render count': renderCount
22174
- };
22175
- });
22176
- consoleTable(table);
22177
- }
22208
+ componentWillLeave: function (done) {
22209
+ if (this.props.leave) {
22210
+ this.transition('leave', done, this.props.leaveTimeout);
22211
+ } else {
22212
+ done();
22213
+ }
22214
+ },
22178
22215
 
22179
- function printWasted(flushHistory) {
22180
- if (!(process.env.NODE_ENV !== 'production')) {
22181
- warnInProduction();
22182
- return;
22216
+ render: function () {
22217
+ return onlyChild(this.props.children);
22183
22218
  }
22219
+ });
22184
22220
 
22185
- var stats = getWasted(flushHistory);
22186
- var table = stats.map(function (item) {
22187
- var key = item.key,
22188
- instanceCount = item.instanceCount,
22189
- inclusiveRenderDuration = item.inclusiveRenderDuration,
22190
- renderCount = item.renderCount;
22221
+ module.exports = ReactCSSTransitionGroupChild;
22191
22222
 
22192
- return {
22193
- 'Owner > Component': key,
22194
- 'Inclusive wasted time (ms)': roundFloat(inclusiveRenderDuration),
22195
- 'Instance count': instanceCount,
22196
- 'Render count': renderCount
22197
- };
22198
- });
22199
- consoleTable(table);
22200
- }
22201
-
22202
- function printOperations(flushHistory) {
22203
- if (!(process.env.NODE_ENV !== 'production')) {
22204
- warnInProduction();
22205
- return;
22206
- }
22207
-
22208
- var stats = getOperations(flushHistory);
22209
- var table = stats.map(function (stat) {
22210
- return {
22211
- 'Owner > Node': stat.key,
22212
- 'Operation': stat.type,
22213
- 'Payload': typeof stat.payload === 'object' ? JSON.stringify(stat.payload) : stat.payload,
22214
- 'Flush index': stat.flushIndex,
22215
- 'Owner Component ID': stat.ownerID,
22216
- 'DOM Component ID': stat.instanceID
22217
- };
22218
- });
22219
- consoleTable(table);
22220
- }
22221
-
22222
- var warnedAboutPrintDOM = false;
22223
- function printDOM(measurements) {
22224
- process.env.NODE_ENV !== 'production' ? warning(warnedAboutPrintDOM, '`ReactPerf.printDOM(...)` is deprecated. Use ' + '`ReactPerf.printOperations(...)` instead.') : void 0;
22225
- warnedAboutPrintDOM = true;
22226
- return printOperations(measurements);
22227
- }
22223
+ /***/ },
22224
+ /* 186 */
22225
+ /***/ function(module, exports, __webpack_require__) {
22228
22226
 
22229
- var warnedAboutGetMeasurementsSummaryMap = false;
22230
- function getMeasurementsSummaryMap(measurements) {
22231
- process.env.NODE_ENV !== 'production' ? warning(warnedAboutGetMeasurementsSummaryMap, '`ReactPerf.getMeasurementsSummaryMap(...)` is deprecated. Use ' + '`ReactPerf.getWasted(...)` instead.') : void 0;
22232
- warnedAboutGetMeasurementsSummaryMap = true;
22233
- return getWasted(measurements);
22234
- }
22227
+ /* WEBPACK VAR INJECTION */(function(process) {/**
22228
+ * Copyright 2013-present, Facebook, Inc.
22229
+ * All rights reserved.
22230
+ *
22231
+ * This source code is licensed under the BSD-style license found in the
22232
+ * LICENSE file in the root directory of this source tree. An additional grant
22233
+ * of patent rights can be found in the PATENTS file in the same directory.
22234
+ *
22235
+ */
22235
22236
 
22236
- function start() {
22237
- if (!(process.env.NODE_ENV !== 'production')) {
22238
- warnInProduction();
22239
- return;
22240
- }
22237
+ 'use strict';
22241
22238
 
22242
- ReactDebugTool.beginProfiling();
22243
- }
22239
+ var ReactDOM = __webpack_require__(33);
22244
22240
 
22245
- function stop() {
22246
- if (!(process.env.NODE_ENV !== 'production')) {
22247
- warnInProduction();
22248
- return;
22249
- }
22241
+ exports.getReactDOM = function () {
22242
+ return ReactDOM;
22243
+ };
22250
22244
 
22251
- ReactDebugTool.endProfiling();
22252
- }
22245
+ if (process.env.NODE_ENV !== 'production') {
22246
+ var ReactPerf;
22247
+ var ReactTestUtils;
22253
22248
 
22254
- function isRunning() {
22255
- if (!(process.env.NODE_ENV !== 'production')) {
22256
- warnInProduction();
22257
- return false;
22258
- }
22249
+ exports.getReactPerf = function () {
22250
+ if (!ReactPerf) {
22251
+ ReactPerf = __webpack_require__(187);
22252
+ }
22253
+ return ReactPerf;
22254
+ };
22259
22255
 
22260
- return ReactDebugTool.isProfiling();
22256
+ exports.getReactTestUtils = function () {
22257
+ if (!ReactTestUtils) {
22258
+ ReactTestUtils = __webpack_require__(188);
22259
+ }
22260
+ return ReactTestUtils;
22261
+ };
22261
22262
  }
22262
-
22263
- var ReactPerfAnalysis = {
22264
- getLastMeasurements: getLastMeasurements,
22265
- getExclusive: getExclusive,
22266
- getInclusive: getInclusive,
22267
- getWasted: getWasted,
22268
- getOperations: getOperations,
22269
- printExclusive: printExclusive,
22270
- printInclusive: printInclusive,
22271
- printWasted: printWasted,
22272
- printOperations: printOperations,
22273
- start: start,
22274
- stop: stop,
22275
- isRunning: isRunning,
22276
- // Deprecated:
22277
- printDOM: printDOM,
22278
- getMeasurementsSummaryMap: getMeasurementsSummaryMap
22279
- };
22280
-
22281
- module.exports = ReactPerfAnalysis;
22282
22263
  /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))
22283
22264
 
22284
22265
  /***/ },
22285
- /* 183 */
22266
+ /* 187 */
22286
22267
  /***/ function(module, exports, __webpack_require__) {
22287
22268
 
22288
22269
  /* WEBPACK VAR INJECTION */(function(process) {/**
22289
- * Copyright 2013-present, Facebook, Inc.
22270
+ * Copyright 2016-present, Facebook, Inc.
22290
22271
  * All rights reserved.
22291
22272
  *
22292
22273
  * This source code is licensed under the BSD-style license found in the
22293
22274
  * LICENSE file in the root directory of this source tree. An additional grant
22294
22275
  * of patent rights can be found in the PATENTS file in the same directory.
22295
22276
  *
22277
+ *
22296
22278
  */
22297
22279
 
22298
22280
  'use strict';
22299
22281
 
22300
- var _prodInvariant = __webpack_require__(35),
22301
- _assign = __webpack_require__(4);
22282
+ var _assign = __webpack_require__(4);
22302
22283
 
22303
- var EventConstants = __webpack_require__(184);
22304
- var EventPluginHub = __webpack_require__(42);
22305
- var EventPluginRegistry = __webpack_require__(43);
22306
- var EventPropagators = __webpack_require__(41);
22307
- var React = __webpack_require__(2);
22308
- var ReactDOM = __webpack_require__(33);
22309
- var ReactDOMComponentTree = __webpack_require__(34);
22310
- var ReactBrowserEventEmitter = __webpack_require__(105);
22311
- var ReactInstanceMap = __webpack_require__(116);
22312
- var ReactUpdates = __webpack_require__(56);
22313
- var SyntheticEvent = __webpack_require__(53);
22314
- var ReactShallowRenderer = __webpack_require__(185);
22284
+ var _extends = _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; };
22315
22285
 
22316
- var findDOMNode = __webpack_require__(172);
22317
- var invariant = __webpack_require__(8);
22286
+ var ReactDebugTool = __webpack_require__(63);
22287
+ var warning = __webpack_require__(11);
22288
+ var alreadyWarned = false;
22318
22289
 
22319
- var topLevelTypes = EventConstants.topLevelTypes;
22290
+ function roundFloat(val) {
22291
+ var base = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;
22320
22292
 
22321
- function Event(suffix) {}
22293
+ var n = Math.pow(10, base);
22294
+ return Math.floor(val * n) / n;
22295
+ }
22322
22296
 
22323
- /**
22324
- * @class ReactTestUtils
22325
- */
22297
+ // Flow type definition of console.table is too strict right now, see
22298
+ // https://github.com/facebook/flow/pull/2353 for updates
22299
+ function consoleTable(table) {
22300
+ console.table(table);
22301
+ }
22326
22302
 
22327
- function findAllInRenderedTreeInternal(inst, test) {
22328
- if (!inst || !inst.getPublicInstance) {
22329
- return [];
22303
+ function warnInProduction() {
22304
+ if (alreadyWarned) {
22305
+ return;
22330
22306
  }
22331
- var publicInst = inst.getPublicInstance();
22332
- var ret = test(publicInst) ? [publicInst] : [];
22333
- var currentElement = inst._currentElement;
22334
- if (ReactTestUtils.isDOMComponent(publicInst)) {
22335
- var renderedChildren = inst._renderedChildren;
22336
- var key;
22337
- for (key in renderedChildren) {
22338
- if (!renderedChildren.hasOwnProperty(key)) {
22339
- continue;
22340
- }
22341
- ret = ret.concat(findAllInRenderedTreeInternal(renderedChildren[key], test));
22342
- }
22343
- } else if (React.isValidElement(currentElement) && typeof currentElement.type === 'function') {
22344
- ret = ret.concat(findAllInRenderedTreeInternal(inst._renderedComponent, test));
22307
+ alreadyWarned = true;
22308
+ if (typeof console !== 'undefined') {
22309
+ console.error('ReactPerf is not supported in the production builds of React. ' + 'To collect measurements, please use the development build of React instead.');
22345
22310
  }
22346
- return ret;
22347
22311
  }
22348
22312
 
22349
- /**
22350
- * Utilities for making it easy to test React components.
22351
- *
22352
- * See https://facebook.github.io/react/docs/test-utils.html
22353
- *
22354
- * Todo: Support the entire DOM.scry query syntax. For now, these simple
22355
- * utilities will suffice for testing purposes.
22356
- * @lends ReactTestUtils
22357
- */
22358
- var ReactTestUtils = {
22359
- renderIntoDocument: function (element) {
22360
- var div = document.createElement('div');
22361
- // None of our tests actually require attaching the container to the
22362
- // DOM, and doing so creates a mess that we rely on test isolation to
22363
- // clean up, so we're going to stop honoring the name of this method
22364
- // (and probably rename it eventually) if no problems arise.
22365
- // document.documentElement.appendChild(div);
22366
- return ReactDOM.render(element, div);
22367
- },
22313
+ function getLastMeasurements() {
22314
+ if (!(process.env.NODE_ENV !== 'production')) {
22315
+ warnInProduction();
22316
+ return [];
22317
+ }
22368
22318
 
22369
- isElement: function (element) {
22370
- return React.isValidElement(element);
22371
- },
22319
+ return ReactDebugTool.getFlushHistory();
22320
+ }
22372
22321
 
22373
- isElementOfType: function (inst, convenienceConstructor) {
22374
- return React.isValidElement(inst) && inst.type === convenienceConstructor;
22375
- },
22322
+ function getExclusive() {
22323
+ var flushHistory = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getLastMeasurements();
22376
22324
 
22377
- isDOMComponent: function (inst) {
22378
- return !!(inst && inst.nodeType === 1 && inst.tagName);
22379
- },
22325
+ if (!(process.env.NODE_ENV !== 'production')) {
22326
+ warnInProduction();
22327
+ return [];
22328
+ }
22380
22329
 
22381
- isDOMComponentElement: function (inst) {
22382
- return !!(inst && React.isValidElement(inst) && !!inst.tagName);
22383
- },
22330
+ var aggregatedStats = {};
22331
+ var affectedIDs = {};
22384
22332
 
22385
- isCompositeComponent: function (inst) {
22386
- if (ReactTestUtils.isDOMComponent(inst)) {
22387
- // Accessing inst.setState warns; just return false as that'll be what
22388
- // this returns when we have DOM nodes as refs directly
22389
- return false;
22390
- }
22391
- return inst != null && typeof inst.render === 'function' && typeof inst.setState === 'function';
22392
- },
22333
+ function updateAggregatedStats(treeSnapshot, instanceID, timerType, applyUpdate) {
22334
+ var displayName = treeSnapshot[instanceID].displayName;
22393
22335
 
22394
- isCompositeComponentWithType: function (inst, type) {
22395
- if (!ReactTestUtils.isCompositeComponent(inst)) {
22396
- return false;
22336
+ var key = displayName;
22337
+ var stats = aggregatedStats[key];
22338
+ if (!stats) {
22339
+ affectedIDs[key] = {};
22340
+ stats = aggregatedStats[key] = {
22341
+ key: key,
22342
+ instanceCount: 0,
22343
+ counts: {},
22344
+ durations: {},
22345
+ totalDuration: 0
22346
+ };
22397
22347
  }
22398
- var internalInstance = ReactInstanceMap.get(inst);
22399
- var constructor = internalInstance._currentElement.type;
22348
+ if (!stats.durations[timerType]) {
22349
+ stats.durations[timerType] = 0;
22350
+ }
22351
+ if (!stats.counts[timerType]) {
22352
+ stats.counts[timerType] = 0;
22353
+ }
22354
+ affectedIDs[key][instanceID] = true;
22355
+ applyUpdate(stats);
22356
+ }
22400
22357
 
22401
- return constructor === type;
22402
- },
22358
+ flushHistory.forEach(function (flush) {
22359
+ var measurements = flush.measurements,
22360
+ treeSnapshot = flush.treeSnapshot;
22403
22361
 
22404
- isCompositeComponentElement: function (inst) {
22405
- if (!React.isValidElement(inst)) {
22406
- return false;
22407
- }
22408
- // We check the prototype of the type that will get mounted, not the
22409
- // instance itself. This is a future proof way of duck typing.
22410
- var prototype = inst.type.prototype;
22411
- return typeof prototype.render === 'function' && typeof prototype.setState === 'function';
22412
- },
22362
+ measurements.forEach(function (measurement) {
22363
+ var duration = measurement.duration,
22364
+ instanceID = measurement.instanceID,
22365
+ timerType = measurement.timerType;
22413
22366
 
22414
- isCompositeComponentElementWithType: function (inst, type) {
22415
- var internalInstance = ReactInstanceMap.get(inst);
22416
- var constructor = internalInstance._currentElement.type;
22367
+ updateAggregatedStats(treeSnapshot, instanceID, timerType, function (stats) {
22368
+ stats.totalDuration += duration;
22369
+ stats.durations[timerType] += duration;
22370
+ stats.counts[timerType]++;
22371
+ });
22372
+ });
22373
+ });
22417
22374
 
22418
- return !!(ReactTestUtils.isCompositeComponentElement(inst) && constructor === type);
22419
- },
22375
+ return Object.keys(aggregatedStats).map(function (key) {
22376
+ return _extends({}, aggregatedStats[key], {
22377
+ instanceCount: Object.keys(affectedIDs[key]).length
22378
+ });
22379
+ }).sort(function (a, b) {
22380
+ return b.totalDuration - a.totalDuration;
22381
+ });
22382
+ }
22420
22383
 
22421
- getRenderedChildOfCompositeComponent: function (inst) {
22422
- if (!ReactTestUtils.isCompositeComponent(inst)) {
22423
- return null;
22424
- }
22425
- var internalInstance = ReactInstanceMap.get(inst);
22426
- return internalInstance._renderedComponent.getPublicInstance();
22427
- },
22384
+ function getInclusive() {
22385
+ var flushHistory = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getLastMeasurements();
22428
22386
 
22429
- findAllInRenderedTree: function (inst, test) {
22430
- if (!inst) {
22431
- return [];
22432
- }
22433
- !ReactTestUtils.isCompositeComponent(inst) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'findAllInRenderedTree(...): instance must be a composite component') : _prodInvariant('10') : void 0;
22434
- return findAllInRenderedTreeInternal(ReactInstanceMap.get(inst), test);
22435
- },
22387
+ if (!(process.env.NODE_ENV !== 'production')) {
22388
+ warnInProduction();
22389
+ return [];
22390
+ }
22436
22391
 
22437
- /**
22438
- * Finds all instance of components in the rendered tree that are DOM
22439
- * components with the class name matching `className`.
22440
- * @return {array} an array of all the matches.
22441
- */
22442
- scryRenderedDOMComponentsWithClass: function (root, classNames) {
22443
- return ReactTestUtils.findAllInRenderedTree(root, function (inst) {
22444
- if (ReactTestUtils.isDOMComponent(inst)) {
22445
- var className = inst.className;
22446
- if (typeof className !== 'string') {
22447
- // SVG, probably.
22448
- className = inst.getAttribute('class') || '';
22449
- }
22450
- var classList = className.split(/\s+/);
22392
+ var aggregatedStats = {};
22393
+ var affectedIDs = {};
22451
22394
 
22452
- if (!Array.isArray(classNames)) {
22453
- !(classNames !== undefined) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'TestUtils.scryRenderedDOMComponentsWithClass expects a className as a second argument.') : _prodInvariant('11') : void 0;
22454
- classNames = classNames.split(/\s+/);
22455
- }
22456
- return classNames.every(function (name) {
22457
- return classList.indexOf(name) !== -1;
22458
- });
22459
- }
22460
- return false;
22461
- });
22462
- },
22395
+ function updateAggregatedStats(treeSnapshot, instanceID, applyUpdate) {
22396
+ var _treeSnapshot$instanc = treeSnapshot[instanceID],
22397
+ displayName = _treeSnapshot$instanc.displayName,
22398
+ ownerID = _treeSnapshot$instanc.ownerID;
22463
22399
 
22464
- /**
22465
- * Like scryRenderedDOMComponentsWithClass but expects there to be one result,
22466
- * and returns that one result, or throws exception if there is any other
22467
- * number of matches besides one.
22468
- * @return {!ReactDOMComponent} The one match.
22469
- */
22470
- findRenderedDOMComponentWithClass: function (root, className) {
22471
- var all = ReactTestUtils.scryRenderedDOMComponentsWithClass(root, className);
22472
- if (all.length !== 1) {
22473
- throw new Error('Did not find exactly one match (found: ' + all.length + ') ' + 'for class:' + className);
22400
+ var owner = treeSnapshot[ownerID];
22401
+ var key = (owner ? owner.displayName + ' > ' : '') + displayName;
22402
+ var stats = aggregatedStats[key];
22403
+ if (!stats) {
22404
+ affectedIDs[key] = {};
22405
+ stats = aggregatedStats[key] = {
22406
+ key: key,
22407
+ instanceCount: 0,
22408
+ inclusiveRenderDuration: 0,
22409
+ renderCount: 0
22410
+ };
22474
22411
  }
22475
- return all[0];
22476
- },
22412
+ affectedIDs[key][instanceID] = true;
22413
+ applyUpdate(stats);
22414
+ }
22477
22415
 
22478
- /**
22479
- * Finds all instance of components in the rendered tree that are DOM
22480
- * components with the tag name matching `tagName`.
22481
- * @return {array} an array of all the matches.
22482
- */
22483
- scryRenderedDOMComponentsWithTag: function (root, tagName) {
22484
- return ReactTestUtils.findAllInRenderedTree(root, function (inst) {
22485
- return ReactTestUtils.isDOMComponent(inst) && inst.tagName.toUpperCase() === tagName.toUpperCase();
22486
- });
22487
- },
22416
+ var isCompositeByID = {};
22417
+ flushHistory.forEach(function (flush) {
22418
+ var measurements = flush.measurements;
22488
22419
 
22489
- /**
22490
- * Like scryRenderedDOMComponentsWithTag but expects there to be one result,
22491
- * and returns that one result, or throws exception if there is any other
22492
- * number of matches besides one.
22493
- * @return {!ReactDOMComponent} The one match.
22494
- */
22495
- findRenderedDOMComponentWithTag: function (root, tagName) {
22496
- var all = ReactTestUtils.scryRenderedDOMComponentsWithTag(root, tagName);
22497
- if (all.length !== 1) {
22498
- throw new Error('Did not find exactly one match (found: ' + all.length + ') ' + 'for tag:' + tagName);
22499
- }
22500
- return all[0];
22501
- },
22420
+ measurements.forEach(function (measurement) {
22421
+ var instanceID = measurement.instanceID,
22422
+ timerType = measurement.timerType;
22502
22423
 
22503
- /**
22504
- * Finds all instances of components with type equal to `componentType`.
22505
- * @return {array} an array of all the matches.
22506
- */
22507
- scryRenderedComponentsWithType: function (root, componentType) {
22508
- return ReactTestUtils.findAllInRenderedTree(root, function (inst) {
22509
- return ReactTestUtils.isCompositeComponentWithType(inst, componentType);
22424
+ if (timerType !== 'render') {
22425
+ return;
22426
+ }
22427
+ isCompositeByID[instanceID] = true;
22510
22428
  });
22511
- },
22429
+ });
22512
22430
 
22513
- /**
22514
- * Same as `scryRenderedComponentsWithType` but expects there to be one result
22515
- * and returns that one result, or throws exception if there is any other
22516
- * number of matches besides one.
22517
- * @return {!ReactComponent} The one match.
22518
- */
22519
- findRenderedComponentWithType: function (root, componentType) {
22520
- var all = ReactTestUtils.scryRenderedComponentsWithType(root, componentType);
22521
- if (all.length !== 1) {
22522
- throw new Error('Did not find exactly one match (found: ' + all.length + ') ' + 'for componentType:' + componentType);
22523
- }
22524
- return all[0];
22525
- },
22431
+ flushHistory.forEach(function (flush) {
22432
+ var measurements = flush.measurements,
22433
+ treeSnapshot = flush.treeSnapshot;
22526
22434
 
22527
- /**
22528
- * Pass a mocked component module to this method to augment it with
22529
- * useful methods that allow it to be used as a dummy React component.
22530
- * Instead of rendering as usual, the component will become a simple
22531
- * <div> containing any provided children.
22532
- *
22533
- * @param {object} module the mock function object exported from a
22534
- * module that defines the component to be mocked
22535
- * @param {?string} mockTagName optional dummy root tag name to return
22536
- * from render method (overrides
22537
- * module.mockTagName if provided)
22538
- * @return {object} the ReactTestUtils object (for chaining)
22539
- */
22540
- mockComponent: function (module, mockTagName) {
22541
- mockTagName = mockTagName || module.mockTagName || 'div';
22435
+ measurements.forEach(function (measurement) {
22436
+ var duration = measurement.duration,
22437
+ instanceID = measurement.instanceID,
22438
+ timerType = measurement.timerType;
22542
22439
 
22543
- module.prototype.render.mockImplementation(function () {
22544
- return React.createElement(mockTagName, null, this.props.children);
22440
+ if (timerType !== 'render') {
22441
+ return;
22442
+ }
22443
+ updateAggregatedStats(treeSnapshot, instanceID, function (stats) {
22444
+ stats.renderCount++;
22445
+ });
22446
+ var nextParentID = instanceID;
22447
+ while (nextParentID) {
22448
+ // As we traverse parents, only count inclusive time towards composites.
22449
+ // We know something is a composite if its render() was called.
22450
+ if (isCompositeByID[nextParentID]) {
22451
+ updateAggregatedStats(treeSnapshot, nextParentID, function (stats) {
22452
+ stats.inclusiveRenderDuration += duration;
22453
+ });
22454
+ }
22455
+ nextParentID = treeSnapshot[nextParentID].parentID;
22456
+ }
22545
22457
  });
22458
+ });
22546
22459
 
22547
- return this;
22548
- },
22549
-
22550
- /**
22551
- * Simulates a top level event being dispatched from a raw event that occurred
22552
- * on an `Element` node.
22553
- * @param {Object} topLevelType A type from `EventConstants.topLevelTypes`
22554
- * @param {!Element} node The dom to simulate an event occurring on.
22555
- * @param {?Event} fakeNativeEvent Fake native event to use in SyntheticEvent.
22556
- */
22557
- simulateNativeEventOnNode: function (topLevelType, node, fakeNativeEvent) {
22558
- fakeNativeEvent.target = node;
22559
- ReactBrowserEventEmitter.ReactEventListener.dispatchEvent(topLevelType, fakeNativeEvent);
22560
- },
22460
+ return Object.keys(aggregatedStats).map(function (key) {
22461
+ return _extends({}, aggregatedStats[key], {
22462
+ instanceCount: Object.keys(affectedIDs[key]).length
22463
+ });
22464
+ }).sort(function (a, b) {
22465
+ return b.inclusiveRenderDuration - a.inclusiveRenderDuration;
22466
+ });
22467
+ }
22561
22468
 
22562
- /**
22563
- * Simulates a top level event being dispatched from a raw event that occurred
22564
- * on the `ReactDOMComponent` `comp`.
22565
- * @param {Object} topLevelType A type from `EventConstants.topLevelTypes`.
22566
- * @param {!ReactDOMComponent} comp
22567
- * @param {?Event} fakeNativeEvent Fake native event to use in SyntheticEvent.
22568
- */
22569
- simulateNativeEventOnDOMComponent: function (topLevelType, comp, fakeNativeEvent) {
22570
- ReactTestUtils.simulateNativeEventOnNode(topLevelType, findDOMNode(comp), fakeNativeEvent);
22571
- },
22469
+ function getWasted() {
22470
+ var flushHistory = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getLastMeasurements();
22572
22471
 
22573
- nativeTouchData: function (x, y) {
22574
- return {
22575
- touches: [{ pageX: x, pageY: y }]
22576
- };
22577
- },
22472
+ if (!(process.env.NODE_ENV !== 'production')) {
22473
+ warnInProduction();
22474
+ return [];
22475
+ }
22578
22476
 
22579
- createRenderer: function () {
22580
- return new ReactShallowRenderer();
22581
- },
22477
+ var aggregatedStats = {};
22478
+ var affectedIDs = {};
22582
22479
 
22583
- Simulate: null,
22584
- SimulateNative: {}
22585
- };
22480
+ function updateAggregatedStats(treeSnapshot, instanceID, applyUpdate) {
22481
+ var _treeSnapshot$instanc2 = treeSnapshot[instanceID],
22482
+ displayName = _treeSnapshot$instanc2.displayName,
22483
+ ownerID = _treeSnapshot$instanc2.ownerID;
22586
22484
 
22587
- /**
22588
- * Exports:
22589
- *
22590
- * - `ReactTestUtils.Simulate.click(Element/ReactDOMComponent)`
22591
- * - `ReactTestUtils.Simulate.mouseMove(Element/ReactDOMComponent)`
22592
- * - `ReactTestUtils.Simulate.change(Element/ReactDOMComponent)`
22593
- * - ... (All keys from event plugin `eventTypes` objects)
22594
- */
22595
- function makeSimulator(eventType) {
22596
- return function (domComponentOrNode, eventData) {
22597
- var node;
22598
- !!React.isValidElement(domComponentOrNode) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'TestUtils.Simulate expects a component instance and not a ReactElement.TestUtils.Simulate will not work if you are using shallow rendering.') : _prodInvariant('14') : void 0;
22599
- if (ReactTestUtils.isDOMComponent(domComponentOrNode)) {
22600
- node = findDOMNode(domComponentOrNode);
22601
- } else if (domComponentOrNode.tagName) {
22602
- node = domComponentOrNode;
22485
+ var owner = treeSnapshot[ownerID];
22486
+ var key = (owner ? owner.displayName + ' > ' : '') + displayName;
22487
+ var stats = aggregatedStats[key];
22488
+ if (!stats) {
22489
+ affectedIDs[key] = {};
22490
+ stats = aggregatedStats[key] = {
22491
+ key: key,
22492
+ instanceCount: 0,
22493
+ inclusiveRenderDuration: 0,
22494
+ renderCount: 0
22495
+ };
22603
22496
  }
22497
+ affectedIDs[key][instanceID] = true;
22498
+ applyUpdate(stats);
22499
+ }
22604
22500
 
22605
- var dispatchConfig = EventPluginRegistry.eventNameDispatchConfigs[eventType];
22501
+ flushHistory.forEach(function (flush) {
22502
+ var measurements = flush.measurements,
22503
+ treeSnapshot = flush.treeSnapshot,
22504
+ operations = flush.operations;
22606
22505
 
22607
- var fakeNativeEvent = new Event();
22608
- fakeNativeEvent.target = node;
22609
- fakeNativeEvent.type = eventType.toLowerCase();
22506
+ var isDefinitelyNotWastedByID = {};
22610
22507
 
22611
- // We don't use SyntheticEvent.getPooled in order to not have to worry about
22612
- // properly destroying any properties assigned from `eventData` upon release
22613
- var event = new SyntheticEvent(dispatchConfig, ReactDOMComponentTree.getInstanceFromNode(node), fakeNativeEvent, node);
22614
- // Since we aren't using pooling, always persist the event. This will make
22615
- // sure it's marked and won't warn when setting additional properties.
22616
- event.persist();
22617
- _assign(event, eventData);
22508
+ // Find host components associated with an operation in this batch.
22509
+ // Mark all components in their parent tree as definitely not wasted.
22510
+ operations.forEach(function (operation) {
22511
+ var instanceID = operation.instanceID;
22618
22512
 
22619
- if (dispatchConfig.phasedRegistrationNames) {
22620
- EventPropagators.accumulateTwoPhaseDispatches(event);
22621
- } else {
22622
- EventPropagators.accumulateDirectDispatches(event);
22623
- }
22513
+ var nextParentID = instanceID;
22514
+ while (nextParentID) {
22515
+ isDefinitelyNotWastedByID[nextParentID] = true;
22516
+ nextParentID = treeSnapshot[nextParentID].parentID;
22517
+ }
22518
+ });
22624
22519
 
22625
- ReactUpdates.batchedUpdates(function () {
22626
- EventPluginHub.enqueueEvents(event);
22627
- EventPluginHub.processEventQueue(true);
22520
+ // Find composite components that rendered in this batch.
22521
+ // These are potential candidates for being wasted renders.
22522
+ var renderedCompositeIDs = {};
22523
+ measurements.forEach(function (measurement) {
22524
+ var instanceID = measurement.instanceID,
22525
+ timerType = measurement.timerType;
22526
+
22527
+ if (timerType !== 'render') {
22528
+ return;
22529
+ }
22530
+ renderedCompositeIDs[instanceID] = true;
22628
22531
  });
22629
- };
22532
+
22533
+ measurements.forEach(function (measurement) {
22534
+ var duration = measurement.duration,
22535
+ instanceID = measurement.instanceID,
22536
+ timerType = measurement.timerType;
22537
+
22538
+ if (timerType !== 'render') {
22539
+ return;
22540
+ }
22541
+
22542
+ // If there was a DOM update below this component, or it has just been
22543
+ // mounted, its render() is not considered wasted.
22544
+ var updateCount = treeSnapshot[instanceID].updateCount;
22545
+
22546
+ if (isDefinitelyNotWastedByID[instanceID] || updateCount === 0) {
22547
+ return;
22548
+ }
22549
+
22550
+ // We consider this render() wasted.
22551
+ updateAggregatedStats(treeSnapshot, instanceID, function (stats) {
22552
+ stats.renderCount++;
22553
+ });
22554
+
22555
+ var nextParentID = instanceID;
22556
+ while (nextParentID) {
22557
+ // Any parents rendered during this batch are considered wasted
22558
+ // unless we previously marked them as dirty.
22559
+ var isWasted = renderedCompositeIDs[nextParentID] && !isDefinitelyNotWastedByID[nextParentID];
22560
+ if (isWasted) {
22561
+ updateAggregatedStats(treeSnapshot, nextParentID, function (stats) {
22562
+ stats.inclusiveRenderDuration += duration;
22563
+ });
22564
+ }
22565
+ nextParentID = treeSnapshot[nextParentID].parentID;
22566
+ }
22567
+ });
22568
+ });
22569
+
22570
+ return Object.keys(aggregatedStats).map(function (key) {
22571
+ return _extends({}, aggregatedStats[key], {
22572
+ instanceCount: Object.keys(affectedIDs[key]).length
22573
+ });
22574
+ }).sort(function (a, b) {
22575
+ return b.inclusiveRenderDuration - a.inclusiveRenderDuration;
22576
+ });
22630
22577
  }
22631
22578
 
22632
- function buildSimulators() {
22633
- ReactTestUtils.Simulate = {};
22579
+ function getOperations() {
22580
+ var flushHistory = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getLastMeasurements();
22634
22581
 
22635
- var eventType;
22636
- for (eventType in EventPluginRegistry.eventNameDispatchConfigs) {
22637
- /**
22638
- * @param {!Element|ReactDOMComponent} domComponentOrNode
22639
- * @param {?object} eventData Fake event data to use in SyntheticEvent.
22640
- */
22641
- ReactTestUtils.Simulate[eventType] = makeSimulator(eventType);
22582
+ if (!(process.env.NODE_ENV !== 'production')) {
22583
+ warnInProduction();
22584
+ return [];
22642
22585
  }
22586
+
22587
+ var stats = [];
22588
+ flushHistory.forEach(function (flush, flushIndex) {
22589
+ var operations = flush.operations,
22590
+ treeSnapshot = flush.treeSnapshot;
22591
+
22592
+ operations.forEach(function (operation) {
22593
+ var instanceID = operation.instanceID,
22594
+ type = operation.type,
22595
+ payload = operation.payload;
22596
+ var _treeSnapshot$instanc3 = treeSnapshot[instanceID],
22597
+ displayName = _treeSnapshot$instanc3.displayName,
22598
+ ownerID = _treeSnapshot$instanc3.ownerID;
22599
+
22600
+ var owner = treeSnapshot[ownerID];
22601
+ var key = (owner ? owner.displayName + ' > ' : '') + displayName;
22602
+
22603
+ stats.push({
22604
+ flushIndex: flushIndex,
22605
+ instanceID: instanceID,
22606
+ key: key,
22607
+ type: type,
22608
+ ownerID: ownerID,
22609
+ payload: payload
22610
+ });
22611
+ });
22612
+ });
22613
+ return stats;
22643
22614
  }
22644
22615
 
22645
- // Rebuild ReactTestUtils.Simulate whenever event plugins are injected
22646
- var oldInjectEventPluginOrder = EventPluginHub.injection.injectEventPluginOrder;
22647
- EventPluginHub.injection.injectEventPluginOrder = function () {
22648
- oldInjectEventPluginOrder.apply(this, arguments);
22649
- buildSimulators();
22650
- };
22651
- var oldInjectEventPlugins = EventPluginHub.injection.injectEventPluginsByName;
22652
- EventPluginHub.injection.injectEventPluginsByName = function () {
22653
- oldInjectEventPlugins.apply(this, arguments);
22654
- buildSimulators();
22655
- };
22616
+ function printExclusive(flushHistory) {
22617
+ if (!(process.env.NODE_ENV !== 'production')) {
22618
+ warnInProduction();
22619
+ return;
22620
+ }
22656
22621
 
22657
- buildSimulators();
22622
+ var stats = getExclusive(flushHistory);
22623
+ var table = stats.map(function (item) {
22624
+ var key = item.key,
22625
+ instanceCount = item.instanceCount,
22626
+ totalDuration = item.totalDuration;
22658
22627
 
22659
- /**
22660
- * Exports:
22661
- *
22662
- * - `ReactTestUtils.SimulateNative.click(Element/ReactDOMComponent)`
22663
- * - `ReactTestUtils.SimulateNative.mouseMove(Element/ReactDOMComponent)`
22664
- * - `ReactTestUtils.SimulateNative.mouseIn/ReactDOMComponent)`
22665
- * - `ReactTestUtils.SimulateNative.mouseOut(Element/ReactDOMComponent)`
22666
- * - ... (All keys from `EventConstants.topLevelTypes`)
22667
- *
22668
- * Note: Top level event types are a subset of the entire set of handler types
22669
- * (which include a broader set of "synthetic" events). For example, onDragDone
22670
- * is a synthetic event. Except when testing an event plugin or React's event
22671
- * handling code specifically, you probably want to use ReactTestUtils.Simulate
22672
- * to dispatch synthetic events.
22673
- */
22628
+ var renderCount = item.counts.render || 0;
22629
+ var renderDuration = item.durations.render || 0;
22630
+ return {
22631
+ 'Component': key,
22632
+ 'Total time (ms)': roundFloat(totalDuration),
22633
+ 'Instance count': instanceCount,
22634
+ 'Total render time (ms)': roundFloat(renderDuration),
22635
+ 'Average render time (ms)': renderCount ? roundFloat(renderDuration / renderCount) : undefined,
22636
+ 'Render count': renderCount,
22637
+ 'Total lifecycle time (ms)': roundFloat(totalDuration - renderDuration)
22638
+ };
22639
+ });
22640
+ consoleTable(table);
22641
+ }
22674
22642
 
22675
- function makeNativeSimulator(eventType) {
22676
- return function (domComponentOrNode, nativeEventData) {
22677
- var fakeNativeEvent = new Event(eventType);
22678
- _assign(fakeNativeEvent, nativeEventData);
22679
- if (ReactTestUtils.isDOMComponent(domComponentOrNode)) {
22680
- ReactTestUtils.simulateNativeEventOnDOMComponent(eventType, domComponentOrNode, fakeNativeEvent);
22681
- } else if (domComponentOrNode.tagName) {
22682
- // Will allow on actual dom nodes.
22683
- ReactTestUtils.simulateNativeEventOnNode(eventType, domComponentOrNode, fakeNativeEvent);
22684
- }
22685
- };
22643
+ function printInclusive(flushHistory) {
22644
+ if (!(process.env.NODE_ENV !== 'production')) {
22645
+ warnInProduction();
22646
+ return;
22647
+ }
22648
+
22649
+ var stats = getInclusive(flushHistory);
22650
+ var table = stats.map(function (item) {
22651
+ var key = item.key,
22652
+ instanceCount = item.instanceCount,
22653
+ inclusiveRenderDuration = item.inclusiveRenderDuration,
22654
+ renderCount = item.renderCount;
22655
+
22656
+ return {
22657
+ 'Owner > Component': key,
22658
+ 'Inclusive render time (ms)': roundFloat(inclusiveRenderDuration),
22659
+ 'Instance count': instanceCount,
22660
+ 'Render count': renderCount
22661
+ };
22662
+ });
22663
+ consoleTable(table);
22686
22664
  }
22687
22665
 
22688
- Object.keys(topLevelTypes).forEach(function (eventType) {
22689
- // Event type is stored as 'topClick' - we transform that to 'click'
22690
- var convenienceName = eventType.indexOf('top') === 0 ? eventType.charAt(3).toLowerCase() + eventType.substr(4) : eventType;
22691
- /**
22692
- * @param {!Element|ReactDOMComponent} domComponentOrNode
22693
- * @param {?Event} nativeEventData Fake native event to use in SyntheticEvent.
22694
- */
22695
- ReactTestUtils.SimulateNative[convenienceName] = makeNativeSimulator(eventType);
22696
- });
22666
+ function printWasted(flushHistory) {
22667
+ if (!(process.env.NODE_ENV !== 'production')) {
22668
+ warnInProduction();
22669
+ return;
22670
+ }
22697
22671
 
22698
- module.exports = ReactTestUtils;
22699
- /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))
22672
+ var stats = getWasted(flushHistory);
22673
+ var table = stats.map(function (item) {
22674
+ var key = item.key,
22675
+ instanceCount = item.instanceCount,
22676
+ inclusiveRenderDuration = item.inclusiveRenderDuration,
22677
+ renderCount = item.renderCount;
22700
22678
 
22701
- /***/ },
22702
- /* 184 */
22703
- /***/ function(module, exports) {
22679
+ return {
22680
+ 'Owner > Component': key,
22681
+ 'Inclusive wasted time (ms)': roundFloat(inclusiveRenderDuration),
22682
+ 'Instance count': instanceCount,
22683
+ 'Render count': renderCount
22684
+ };
22685
+ });
22686
+ consoleTable(table);
22687
+ }
22704
22688
 
22705
- /**
22706
- * Copyright 2013-present, Facebook, Inc.
22707
- * All rights reserved.
22708
- *
22709
- * This source code is licensed under the BSD-style license found in the
22710
- * LICENSE file in the root directory of this source tree. An additional grant
22711
- * of patent rights can be found in the PATENTS file in the same directory.
22712
- *
22713
- */
22689
+ function printOperations(flushHistory) {
22690
+ if (!(process.env.NODE_ENV !== 'production')) {
22691
+ warnInProduction();
22692
+ return;
22693
+ }
22714
22694
 
22715
- 'use strict';
22695
+ var stats = getOperations(flushHistory);
22696
+ var table = stats.map(function (stat) {
22697
+ return {
22698
+ 'Owner > Node': stat.key,
22699
+ 'Operation': stat.type,
22700
+ 'Payload': typeof stat.payload === 'object' ? JSON.stringify(stat.payload) : stat.payload,
22701
+ 'Flush index': stat.flushIndex,
22702
+ 'Owner Component ID': stat.ownerID,
22703
+ 'DOM Component ID': stat.instanceID
22704
+ };
22705
+ });
22706
+ consoleTable(table);
22707
+ }
22716
22708
 
22717
- /**
22718
- * Types of raw signals from the browser caught at the top level.
22719
- */
22720
- var topLevelTypes = {
22721
- topAbort: null,
22722
- topAnimationEnd: null,
22723
- topAnimationIteration: null,
22724
- topAnimationStart: null,
22725
- topBlur: null,
22726
- topCanPlay: null,
22727
- topCanPlayThrough: null,
22728
- topChange: null,
22729
- topClick: null,
22730
- topCompositionEnd: null,
22731
- topCompositionStart: null,
22732
- topCompositionUpdate: null,
22733
- topContextMenu: null,
22734
- topCopy: null,
22735
- topCut: null,
22736
- topDoubleClick: null,
22737
- topDrag: null,
22738
- topDragEnd: null,
22739
- topDragEnter: null,
22740
- topDragExit: null,
22741
- topDragLeave: null,
22742
- topDragOver: null,
22743
- topDragStart: null,
22744
- topDrop: null,
22745
- topDurationChange: null,
22746
- topEmptied: null,
22747
- topEncrypted: null,
22748
- topEnded: null,
22749
- topError: null,
22750
- topFocus: null,
22751
- topInput: null,
22752
- topInvalid: null,
22753
- topKeyDown: null,
22754
- topKeyPress: null,
22755
- topKeyUp: null,
22756
- topLoad: null,
22757
- topLoadedData: null,
22758
- topLoadedMetadata: null,
22759
- topLoadStart: null,
22760
- topMouseDown: null,
22761
- topMouseMove: null,
22762
- topMouseOut: null,
22763
- topMouseOver: null,
22764
- topMouseUp: null,
22765
- topPaste: null,
22766
- topPause: null,
22767
- topPlay: null,
22768
- topPlaying: null,
22769
- topProgress: null,
22770
- topRateChange: null,
22771
- topReset: null,
22772
- topScroll: null,
22773
- topSeeked: null,
22774
- topSeeking: null,
22775
- topSelectionChange: null,
22776
- topStalled: null,
22777
- topSubmit: null,
22778
- topSuspend: null,
22779
- topTextInput: null,
22780
- topTimeUpdate: null,
22781
- topTouchCancel: null,
22782
- topTouchEnd: null,
22783
- topTouchMove: null,
22784
- topTouchStart: null,
22785
- topTransitionEnd: null,
22786
- topVolumeChange: null,
22787
- topWaiting: null,
22788
- topWheel: null
22789
- };
22709
+ var warnedAboutPrintDOM = false;
22710
+ function printDOM(measurements) {
22711
+ process.env.NODE_ENV !== 'production' ? warning(warnedAboutPrintDOM, '`ReactPerf.printDOM(...)` is deprecated. Use ' + '`ReactPerf.printOperations(...)` instead.') : void 0;
22712
+ warnedAboutPrintDOM = true;
22713
+ return printOperations(measurements);
22714
+ }
22790
22715
 
22791
- var EventConstants = {
22792
- topLevelTypes: topLevelTypes
22716
+ var warnedAboutGetMeasurementsSummaryMap = false;
22717
+ function getMeasurementsSummaryMap(measurements) {
22718
+ process.env.NODE_ENV !== 'production' ? warning(warnedAboutGetMeasurementsSummaryMap, '`ReactPerf.getMeasurementsSummaryMap(...)` is deprecated. Use ' + '`ReactPerf.getWasted(...)` instead.') : void 0;
22719
+ warnedAboutGetMeasurementsSummaryMap = true;
22720
+ return getWasted(measurements);
22721
+ }
22722
+
22723
+ function start() {
22724
+ if (!(process.env.NODE_ENV !== 'production')) {
22725
+ warnInProduction();
22726
+ return;
22727
+ }
22728
+
22729
+ ReactDebugTool.beginProfiling();
22730
+ }
22731
+
22732
+ function stop() {
22733
+ if (!(process.env.NODE_ENV !== 'production')) {
22734
+ warnInProduction();
22735
+ return;
22736
+ }
22737
+
22738
+ ReactDebugTool.endProfiling();
22739
+ }
22740
+
22741
+ function isRunning() {
22742
+ if (!(process.env.NODE_ENV !== 'production')) {
22743
+ warnInProduction();
22744
+ return false;
22745
+ }
22746
+
22747
+ return ReactDebugTool.isProfiling();
22748
+ }
22749
+
22750
+ var ReactPerfAnalysis = {
22751
+ getLastMeasurements: getLastMeasurements,
22752
+ getExclusive: getExclusive,
22753
+ getInclusive: getInclusive,
22754
+ getWasted: getWasted,
22755
+ getOperations: getOperations,
22756
+ printExclusive: printExclusive,
22757
+ printInclusive: printInclusive,
22758
+ printWasted: printWasted,
22759
+ printOperations: printOperations,
22760
+ start: start,
22761
+ stop: stop,
22762
+ isRunning: isRunning,
22763
+ // Deprecated:
22764
+ printDOM: printDOM,
22765
+ getMeasurementsSummaryMap: getMeasurementsSummaryMap
22793
22766
  };
22794
22767
 
22795
- module.exports = EventConstants;
22768
+ module.exports = ReactPerfAnalysis;
22769
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))
22796
22770
 
22797
22771
  /***/ },
22798
- /* 185 */
22772
+ /* 188 */
22799
22773
  /***/ function(module, exports, __webpack_require__) {
22800
22774
 
22801
22775
  /* WEBPACK VAR INJECTION */(function(process) {/**
@@ -22813,325 +22787,407 @@
22813
22787
  var _prodInvariant = __webpack_require__(35),
22814
22788
  _assign = __webpack_require__(4);
22815
22789
 
22816
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
22817
-
22790
+ var EventConstants = __webpack_require__(189);
22791
+ var EventPluginHub = __webpack_require__(42);
22792
+ var EventPluginRegistry = __webpack_require__(43);
22793
+ var EventPropagators = __webpack_require__(41);
22818
22794
  var React = __webpack_require__(2);
22819
- var ReactDefaultInjection = __webpack_require__(38);
22820
- var ReactCompositeComponent = __webpack_require__(119);
22821
- var ReactReconciler = __webpack_require__(59);
22795
+ var ReactDOM = __webpack_require__(33);
22796
+ var ReactDOMComponentTree = __webpack_require__(34);
22797
+ var ReactBrowserEventEmitter = __webpack_require__(105);
22798
+ var ReactInstanceMap = __webpack_require__(116);
22822
22799
  var ReactUpdates = __webpack_require__(56);
22800
+ var SyntheticEvent = __webpack_require__(53);
22801
+ var ReactShallowRenderer = __webpack_require__(190);
22823
22802
 
22824
- var emptyObject = __webpack_require__(20);
22825
- var getNextDebugID = __webpack_require__(127);
22803
+ var findDOMNode = __webpack_require__(172);
22826
22804
  var invariant = __webpack_require__(8);
22827
22805
 
22828
- var NoopInternalComponent = function () {
22829
- function NoopInternalComponent(element) {
22830
- _classCallCheck(this, NoopInternalComponent);
22806
+ var topLevelTypes = EventConstants.topLevelTypes;
22831
22807
 
22832
- this._renderedOutput = element;
22833
- this._currentElement = element;
22808
+ function Event(suffix) {}
22834
22809
 
22835
- if (process.env.NODE_ENV !== 'production') {
22836
- this._debugID = getNextDebugID();
22810
+ /**
22811
+ * @class ReactTestUtils
22812
+ */
22813
+
22814
+ function findAllInRenderedTreeInternal(inst, test) {
22815
+ if (!inst || !inst.getPublicInstance) {
22816
+ return [];
22817
+ }
22818
+ var publicInst = inst.getPublicInstance();
22819
+ var ret = test(publicInst) ? [publicInst] : [];
22820
+ var currentElement = inst._currentElement;
22821
+ if (ReactTestUtils.isDOMComponent(publicInst)) {
22822
+ var renderedChildren = inst._renderedChildren;
22823
+ var key;
22824
+ for (key in renderedChildren) {
22825
+ if (!renderedChildren.hasOwnProperty(key)) {
22826
+ continue;
22827
+ }
22828
+ ret = ret.concat(findAllInRenderedTreeInternal(renderedChildren[key], test));
22837
22829
  }
22830
+ } else if (React.isValidElement(currentElement) && typeof currentElement.type === 'function') {
22831
+ ret = ret.concat(findAllInRenderedTreeInternal(inst._renderedComponent, test));
22838
22832
  }
22833
+ return ret;
22834
+ }
22839
22835
 
22840
- NoopInternalComponent.prototype.mountComponent = function mountComponent() {};
22841
-
22842
- NoopInternalComponent.prototype.receiveComponent = function receiveComponent(element) {
22843
- this._renderedOutput = element;
22844
- this._currentElement = element;
22845
- };
22846
-
22847
- NoopInternalComponent.prototype.unmountComponent = function unmountComponent() {};
22848
-
22849
- NoopInternalComponent.prototype.getHostNode = function getHostNode() {
22850
- return undefined;
22851
- };
22852
-
22853
- NoopInternalComponent.prototype.getPublicInstance = function getPublicInstance() {
22854
- return null;
22855
- };
22856
-
22857
- return NoopInternalComponent;
22858
- }();
22859
-
22860
- var ShallowComponentWrapper = function (element) {
22861
- // TODO: Consolidate with instantiateReactComponent
22862
- if (process.env.NODE_ENV !== 'production') {
22863
- this._debugID = getNextDebugID();
22864
- }
22836
+ /**
22837
+ * Utilities for making it easy to test React components.
22838
+ *
22839
+ * See https://facebook.github.io/react/docs/test-utils.html
22840
+ *
22841
+ * Todo: Support the entire DOM.scry query syntax. For now, these simple
22842
+ * utilities will suffice for testing purposes.
22843
+ * @lends ReactTestUtils
22844
+ */
22845
+ var ReactTestUtils = {
22846
+ renderIntoDocument: function (element) {
22847
+ var div = document.createElement('div');
22848
+ // None of our tests actually require attaching the container to the
22849
+ // DOM, and doing so creates a mess that we rely on test isolation to
22850
+ // clean up, so we're going to stop honoring the name of this method
22851
+ // (and probably rename it eventually) if no problems arise.
22852
+ // document.documentElement.appendChild(div);
22853
+ return ReactDOM.render(element, div);
22854
+ },
22865
22855
 
22866
- this.construct(element);
22867
- };
22868
- _assign(ShallowComponentWrapper.prototype, ReactCompositeComponent, {
22869
- _constructComponent: ReactCompositeComponent._constructComponentWithoutOwner,
22870
- _instantiateReactComponent: function (element) {
22871
- return new NoopInternalComponent(element);
22856
+ isElement: function (element) {
22857
+ return React.isValidElement(element);
22872
22858
  },
22873
- _replaceNodeWithMarkup: function () {},
22874
- _renderValidatedComponent: ReactCompositeComponent._renderValidatedComponentWithoutOwnerOrContext
22875
- });
22876
22859
 
22877
- function _batchedRender(renderer, element, context) {
22878
- var transaction = ReactUpdates.ReactReconcileTransaction.getPooled(true);
22879
- renderer._render(element, transaction, context);
22880
- ReactUpdates.ReactReconcileTransaction.release(transaction);
22881
- }
22860
+ isElementOfType: function (inst, convenienceConstructor) {
22861
+ return React.isValidElement(inst) && inst.type === convenienceConstructor;
22862
+ },
22882
22863
 
22883
- var ReactShallowRenderer = function () {
22884
- function ReactShallowRenderer() {
22885
- _classCallCheck(this, ReactShallowRenderer);
22864
+ isDOMComponent: function (inst) {
22865
+ return !!(inst && inst.nodeType === 1 && inst.tagName);
22866
+ },
22886
22867
 
22887
- this._instance = null;
22888
- }
22868
+ isDOMComponentElement: function (inst) {
22869
+ return !!(inst && React.isValidElement(inst) && !!inst.tagName);
22870
+ },
22889
22871
 
22890
- ReactShallowRenderer.prototype.getMountedInstance = function getMountedInstance() {
22891
- return this._instance ? this._instance._instance : null;
22892
- };
22872
+ isCompositeComponent: function (inst) {
22873
+ if (ReactTestUtils.isDOMComponent(inst)) {
22874
+ // Accessing inst.setState warns; just return false as that'll be what
22875
+ // this returns when we have DOM nodes as refs directly
22876
+ return false;
22877
+ }
22878
+ return inst != null && typeof inst.render === 'function' && typeof inst.setState === 'function';
22879
+ },
22893
22880
 
22894
- ReactShallowRenderer.prototype.render = function render(element, context) {
22895
- // Ensure we've done the default injections. This might not be true in the
22896
- // case of a simple test that only requires React and the TestUtils in
22897
- // conjunction with an inline-requires transform.
22898
- ReactDefaultInjection.inject();
22881
+ isCompositeComponentWithType: function (inst, type) {
22882
+ if (!ReactTestUtils.isCompositeComponent(inst)) {
22883
+ return false;
22884
+ }
22885
+ var internalInstance = ReactInstanceMap.get(inst);
22886
+ var constructor = internalInstance._currentElement.type;
22899
22887
 
22900
- !React.isValidElement(element) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactShallowRenderer render(): Invalid component element.%s', typeof element === 'function' ? ' Instead of passing a component class, make sure to instantiate ' + 'it by passing it to React.createElement.' : '') : _prodInvariant('12', typeof element === 'function' ? ' Instead of passing a component class, make sure to instantiate ' + 'it by passing it to React.createElement.' : '') : void 0;
22901
- !(typeof element.type !== 'string') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactShallowRenderer render(): Shallow rendering works only with custom components, not primitives (%s). Instead of calling `.render(el)` and inspecting the rendered output, look at `el.props` directly instead.', element.type) : _prodInvariant('13', element.type) : void 0;
22888
+ return constructor === type;
22889
+ },
22902
22890
 
22903
- if (!context) {
22904
- context = emptyObject;
22891
+ isCompositeComponentElement: function (inst) {
22892
+ if (!React.isValidElement(inst)) {
22893
+ return false;
22905
22894
  }
22906
- ReactUpdates.batchedUpdates(_batchedRender, this, element, context);
22895
+ // We check the prototype of the type that will get mounted, not the
22896
+ // instance itself. This is a future proof way of duck typing.
22897
+ var prototype = inst.type.prototype;
22898
+ return typeof prototype.render === 'function' && typeof prototype.setState === 'function';
22899
+ },
22907
22900
 
22908
- return this.getRenderOutput();
22909
- };
22901
+ isCompositeComponentElementWithType: function (inst, type) {
22902
+ var internalInstance = ReactInstanceMap.get(inst);
22903
+ var constructor = internalInstance._currentElement.type;
22910
22904
 
22911
- ReactShallowRenderer.prototype.getRenderOutput = function getRenderOutput() {
22912
- return this._instance && this._instance._renderedComponent && this._instance._renderedComponent._renderedOutput || null;
22913
- };
22905
+ return !!(ReactTestUtils.isCompositeComponentElement(inst) && constructor === type);
22906
+ },
22914
22907
 
22915
- ReactShallowRenderer.prototype.unmount = function unmount() {
22916
- if (this._instance) {
22917
- ReactReconciler.unmountComponent(this._instance, false);
22908
+ getRenderedChildOfCompositeComponent: function (inst) {
22909
+ if (!ReactTestUtils.isCompositeComponent(inst)) {
22910
+ return null;
22918
22911
  }
22919
- };
22912
+ var internalInstance = ReactInstanceMap.get(inst);
22913
+ return internalInstance._renderedComponent.getPublicInstance();
22914
+ },
22920
22915
 
22921
- ReactShallowRenderer.prototype._render = function _render(element, transaction, context) {
22922
- if (this._instance) {
22923
- ReactReconciler.receiveComponent(this._instance, element, transaction, context);
22924
- } else {
22925
- var instance = new ShallowComponentWrapper(element);
22926
- ReactReconciler.mountComponent(instance, transaction, null, null, context, 0);
22927
- this._instance = instance;
22916
+ findAllInRenderedTree: function (inst, test) {
22917
+ if (!inst) {
22918
+ return [];
22928
22919
  }
22929
- };
22930
-
22931
- return ReactShallowRenderer;
22932
- }();
22933
-
22934
- module.exports = ReactShallowRenderer;
22935
- /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))
22920
+ !ReactTestUtils.isCompositeComponent(inst) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'findAllInRenderedTree(...): instance must be a composite component') : _prodInvariant('10') : void 0;
22921
+ return findAllInRenderedTreeInternal(ReactInstanceMap.get(inst), test);
22922
+ },
22936
22923
 
22937
- /***/ },
22938
- /* 186 */
22939
- /***/ function(module, exports, __webpack_require__) {
22924
+ /**
22925
+ * Finds all instance of components in the rendered tree that are DOM
22926
+ * components with the class name matching `className`.
22927
+ * @return {array} an array of all the matches.
22928
+ */
22929
+ scryRenderedDOMComponentsWithClass: function (root, classNames) {
22930
+ return ReactTestUtils.findAllInRenderedTree(root, function (inst) {
22931
+ if (ReactTestUtils.isDOMComponent(inst)) {
22932
+ var className = inst.className;
22933
+ if (typeof className !== 'string') {
22934
+ // SVG, probably.
22935
+ className = inst.getAttribute('class') || '';
22936
+ }
22937
+ var classList = className.split(/\s+/);
22940
22938
 
22941
- /* WEBPACK VAR INJECTION */(function(process) {/**
22942
- * Copyright 2013-present, Facebook, Inc.
22943
- * All rights reserved.
22944
- *
22945
- * This source code is licensed under the BSD-style license found in the
22946
- * LICENSE file in the root directory of this source tree. An additional grant
22947
- * of patent rights can be found in the PATENTS file in the same directory.
22948
- *
22949
- */
22939
+ if (!Array.isArray(classNames)) {
22940
+ !(classNames !== undefined) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'TestUtils.scryRenderedDOMComponentsWithClass expects a className as a second argument.') : _prodInvariant('11') : void 0;
22941
+ classNames = classNames.split(/\s+/);
22942
+ }
22943
+ return classNames.every(function (name) {
22944
+ return classList.indexOf(name) !== -1;
22945
+ });
22946
+ }
22947
+ return false;
22948
+ });
22949
+ },
22950
22950
 
22951
- 'use strict';
22951
+ /**
22952
+ * Like scryRenderedDOMComponentsWithClass but expects there to be one result,
22953
+ * and returns that one result, or throws exception if there is any other
22954
+ * number of matches besides one.
22955
+ * @return {!ReactDOMComponent} The one match.
22956
+ */
22957
+ findRenderedDOMComponentWithClass: function (root, className) {
22958
+ var all = ReactTestUtils.scryRenderedDOMComponentsWithClass(root, className);
22959
+ if (all.length !== 1) {
22960
+ throw new Error('Did not find exactly one match (found: ' + all.length + ') ' + 'for class:' + className);
22961
+ }
22962
+ return all[0];
22963
+ },
22952
22964
 
22953
- var flattenChildren = __webpack_require__(187);
22965
+ /**
22966
+ * Finds all instance of components in the rendered tree that are DOM
22967
+ * components with the tag name matching `tagName`.
22968
+ * @return {array} an array of all the matches.
22969
+ */
22970
+ scryRenderedDOMComponentsWithTag: function (root, tagName) {
22971
+ return ReactTestUtils.findAllInRenderedTree(root, function (inst) {
22972
+ return ReactTestUtils.isDOMComponent(inst) && inst.tagName.toUpperCase() === tagName.toUpperCase();
22973
+ });
22974
+ },
22954
22975
 
22955
- var ReactTransitionChildMapping = {
22956
22976
  /**
22957
- * Given `this.props.children`, return an object mapping key to child. Just
22958
- * simple syntactic sugar around flattenChildren().
22959
- *
22960
- * @param {*} children `this.props.children`
22961
- * @param {number=} selfDebugID Optional debugID of the current internal instance.
22962
- * @return {object} Mapping of key to child
22977
+ * Like scryRenderedDOMComponentsWithTag but expects there to be one result,
22978
+ * and returns that one result, or throws exception if there is any other
22979
+ * number of matches besides one.
22980
+ * @return {!ReactDOMComponent} The one match.
22963
22981
  */
22964
- getChildMapping: function (children, selfDebugID) {
22965
- if (!children) {
22966
- return children;
22982
+ findRenderedDOMComponentWithTag: function (root, tagName) {
22983
+ var all = ReactTestUtils.scryRenderedDOMComponentsWithTag(root, tagName);
22984
+ if (all.length !== 1) {
22985
+ throw new Error('Did not find exactly one match (found: ' + all.length + ') ' + 'for tag:' + tagName);
22967
22986
  }
22987
+ return all[0];
22988
+ },
22968
22989
 
22969
- if (process.env.NODE_ENV !== 'production') {
22970
- return flattenChildren(children, selfDebugID);
22971
- }
22990
+ /**
22991
+ * Finds all instances of components with type equal to `componentType`.
22992
+ * @return {array} an array of all the matches.
22993
+ */
22994
+ scryRenderedComponentsWithType: function (root, componentType) {
22995
+ return ReactTestUtils.findAllInRenderedTree(root, function (inst) {
22996
+ return ReactTestUtils.isCompositeComponentWithType(inst, componentType);
22997
+ });
22998
+ },
22972
22999
 
22973
- return flattenChildren(children);
23000
+ /**
23001
+ * Same as `scryRenderedComponentsWithType` but expects there to be one result
23002
+ * and returns that one result, or throws exception if there is any other
23003
+ * number of matches besides one.
23004
+ * @return {!ReactComponent} The one match.
23005
+ */
23006
+ findRenderedComponentWithType: function (root, componentType) {
23007
+ var all = ReactTestUtils.scryRenderedComponentsWithType(root, componentType);
23008
+ if (all.length !== 1) {
23009
+ throw new Error('Did not find exactly one match (found: ' + all.length + ') ' + 'for componentType:' + componentType);
23010
+ }
23011
+ return all[0];
22974
23012
  },
22975
23013
 
22976
23014
  /**
22977
- * When you're adding or removing children some may be added or removed in the
22978
- * same render pass. We want to show *both* since we want to simultaneously
22979
- * animate elements in and out. This function takes a previous set of keys
22980
- * and a new set of keys and merges them with its best guess of the correct
22981
- * ordering. In the future we may expose some of the utilities in
22982
- * ReactMultiChild to make this easy, but for now React itself does not
22983
- * directly have this concept of the union of prevChildren and nextChildren
22984
- * so we implement it here.
23015
+ * Pass a mocked component module to this method to augment it with
23016
+ * useful methods that allow it to be used as a dummy React component.
23017
+ * Instead of rendering as usual, the component will become a simple
23018
+ * <div> containing any provided children.
22985
23019
  *
22986
- * @param {object} prev prev children as returned from
22987
- * `ReactTransitionChildMapping.getChildMapping()`.
22988
- * @param {object} next next children as returned from
22989
- * `ReactTransitionChildMapping.getChildMapping()`.
22990
- * @return {object} a key set that contains all keys in `prev` and all keys
22991
- * in `next` in a reasonable order.
23020
+ * @param {object} module the mock function object exported from a
23021
+ * module that defines the component to be mocked
23022
+ * @param {?string} mockTagName optional dummy root tag name to return
23023
+ * from render method (overrides
23024
+ * module.mockTagName if provided)
23025
+ * @return {object} the ReactTestUtils object (for chaining)
22992
23026
  */
22993
- mergeChildMappings: function (prev, next) {
22994
- prev = prev || {};
22995
- next = next || {};
22996
-
22997
- function getValueForKey(key) {
22998
- if (next.hasOwnProperty(key)) {
22999
- return next[key];
23000
- } else {
23001
- return prev[key];
23002
- }
23003
- }
23027
+ mockComponent: function (module, mockTagName) {
23028
+ mockTagName = mockTagName || module.mockTagName || 'div';
23004
23029
 
23005
- // For each key of `next`, the list of keys to insert before that key in
23006
- // the combined list
23007
- var nextKeysPending = {};
23030
+ module.prototype.render.mockImplementation(function () {
23031
+ return React.createElement(mockTagName, null, this.props.children);
23032
+ });
23008
23033
 
23009
- var pendingKeys = [];
23010
- for (var prevKey in prev) {
23011
- if (next.hasOwnProperty(prevKey)) {
23012
- if (pendingKeys.length) {
23013
- nextKeysPending[prevKey] = pendingKeys;
23014
- pendingKeys = [];
23015
- }
23016
- } else {
23017
- pendingKeys.push(prevKey);
23018
- }
23019
- }
23034
+ return this;
23035
+ },
23020
23036
 
23021
- var i;
23022
- var childMapping = {};
23023
- for (var nextKey in next) {
23024
- if (nextKeysPending.hasOwnProperty(nextKey)) {
23025
- for (i = 0; i < nextKeysPending[nextKey].length; i++) {
23026
- var pendingNextKey = nextKeysPending[nextKey][i];
23027
- childMapping[nextKeysPending[nextKey][i]] = getValueForKey(pendingNextKey);
23028
- }
23029
- }
23030
- childMapping[nextKey] = getValueForKey(nextKey);
23031
- }
23037
+ /**
23038
+ * Simulates a top level event being dispatched from a raw event that occurred
23039
+ * on an `Element` node.
23040
+ * @param {Object} topLevelType A type from `EventConstants.topLevelTypes`
23041
+ * @param {!Element} node The dom to simulate an event occurring on.
23042
+ * @param {?Event} fakeNativeEvent Fake native event to use in SyntheticEvent.
23043
+ */
23044
+ simulateNativeEventOnNode: function (topLevelType, node, fakeNativeEvent) {
23045
+ fakeNativeEvent.target = node;
23046
+ ReactBrowserEventEmitter.ReactEventListener.dispatchEvent(topLevelType, fakeNativeEvent);
23047
+ },
23032
23048
 
23033
- // Finally, add the keys which didn't appear before any key in `next`
23034
- for (i = 0; i < pendingKeys.length; i++) {
23035
- childMapping[pendingKeys[i]] = getValueForKey(pendingKeys[i]);
23036
- }
23049
+ /**
23050
+ * Simulates a top level event being dispatched from a raw event that occurred
23051
+ * on the `ReactDOMComponent` `comp`.
23052
+ * @param {Object} topLevelType A type from `EventConstants.topLevelTypes`.
23053
+ * @param {!ReactDOMComponent} comp
23054
+ * @param {?Event} fakeNativeEvent Fake native event to use in SyntheticEvent.
23055
+ */
23056
+ simulateNativeEventOnDOMComponent: function (topLevelType, comp, fakeNativeEvent) {
23057
+ ReactTestUtils.simulateNativeEventOnNode(topLevelType, findDOMNode(comp), fakeNativeEvent);
23058
+ },
23037
23059
 
23038
- return childMapping;
23039
- }
23040
- };
23060
+ nativeTouchData: function (x, y) {
23061
+ return {
23062
+ touches: [{ pageX: x, pageY: y }]
23063
+ };
23064
+ },
23041
23065
 
23042
- module.exports = ReactTransitionChildMapping;
23043
- /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))
23066
+ createRenderer: function () {
23067
+ return new ReactShallowRenderer();
23068
+ },
23044
23069
 
23045
- /***/ },
23046
- /* 187 */
23047
- /***/ function(module, exports, __webpack_require__) {
23070
+ Simulate: null,
23071
+ SimulateNative: {}
23072
+ };
23048
23073
 
23049
- /* WEBPACK VAR INJECTION */(function(process) {/**
23050
- * Copyright 2013-present, Facebook, Inc.
23051
- * All rights reserved.
23052
- *
23053
- * This source code is licensed under the BSD-style license found in the
23054
- * LICENSE file in the root directory of this source tree. An additional grant
23055
- * of patent rights can be found in the PATENTS file in the same directory.
23074
+ /**
23075
+ * Exports:
23056
23076
  *
23057
- *
23077
+ * - `ReactTestUtils.Simulate.click(Element/ReactDOMComponent)`
23078
+ * - `ReactTestUtils.Simulate.mouseMove(Element/ReactDOMComponent)`
23079
+ * - `ReactTestUtils.Simulate.change(Element/ReactDOMComponent)`
23080
+ * - ... (All keys from event plugin `eventTypes` objects)
23058
23081
  */
23082
+ function makeSimulator(eventType) {
23083
+ return function (domComponentOrNode, eventData) {
23084
+ var node;
23085
+ !!React.isValidElement(domComponentOrNode) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'TestUtils.Simulate expects a component instance and not a ReactElement.TestUtils.Simulate will not work if you are using shallow rendering.') : _prodInvariant('14') : void 0;
23086
+ if (ReactTestUtils.isDOMComponent(domComponentOrNode)) {
23087
+ node = findDOMNode(domComponentOrNode);
23088
+ } else if (domComponentOrNode.tagName) {
23089
+ node = domComponentOrNode;
23090
+ }
23059
23091
 
23060
- 'use strict';
23092
+ var dispatchConfig = EventPluginRegistry.eventNameDispatchConfigs[eventType];
23061
23093
 
23062
- var KeyEscapeUtils = __webpack_require__(17);
23063
- var traverseAllChildren = __webpack_require__(15);
23064
- var warning = __webpack_require__(11);
23094
+ var fakeNativeEvent = new Event();
23095
+ fakeNativeEvent.target = node;
23096
+ fakeNativeEvent.type = eventType.toLowerCase();
23065
23097
 
23066
- var ReactComponentTreeHook;
23098
+ // We don't use SyntheticEvent.getPooled in order to not have to worry about
23099
+ // properly destroying any properties assigned from `eventData` upon release
23100
+ var event = new SyntheticEvent(dispatchConfig, ReactDOMComponentTree.getInstanceFromNode(node), fakeNativeEvent, node);
23101
+ // Since we aren't using pooling, always persist the event. This will make
23102
+ // sure it's marked and won't warn when setting additional properties.
23103
+ event.persist();
23104
+ _assign(event, eventData);
23067
23105
 
23068
- if (typeof process !== 'undefined' && process.env && process.env.NODE_ENV === 'test') {
23069
- // Temporary hack.
23070
- // Inline requires don't work well with Jest:
23071
- // https://github.com/facebook/react/issues/7240
23072
- // Remove the inline requires when we don't need them anymore:
23073
- // https://github.com/facebook/react/pull/7178
23074
- ReactComponentTreeHook = __webpack_require__(26);
23106
+ if (dispatchConfig.phasedRegistrationNames) {
23107
+ EventPropagators.accumulateTwoPhaseDispatches(event);
23108
+ } else {
23109
+ EventPropagators.accumulateDirectDispatches(event);
23110
+ }
23111
+
23112
+ ReactUpdates.batchedUpdates(function () {
23113
+ EventPluginHub.enqueueEvents(event);
23114
+ EventPluginHub.processEventQueue(true);
23115
+ });
23116
+ };
23075
23117
  }
23076
23118
 
23077
- /**
23078
- * @param {function} traverseContext Context passed through traversal.
23079
- * @param {?ReactComponent} child React child component.
23080
- * @param {!string} name String name of key path to child.
23081
- * @param {number=} selfDebugID Optional debugID of the current internal instance.
23082
- */
23083
- function flattenSingleChildIntoContext(traverseContext, child, name, selfDebugID) {
23084
- // We found a component instance.
23085
- if (traverseContext && typeof traverseContext === 'object') {
23086
- var result = traverseContext;
23087
- var keyUnique = result[name] === undefined;
23088
- if (process.env.NODE_ENV !== 'production') {
23089
- if (!ReactComponentTreeHook) {
23090
- ReactComponentTreeHook = __webpack_require__(26);
23091
- }
23092
- if (!keyUnique) {
23093
- process.env.NODE_ENV !== 'production' ? warning(false, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.%s', KeyEscapeUtils.unescape(name), ReactComponentTreeHook.getStackAddendumByID(selfDebugID)) : void 0;
23094
- }
23095
- }
23096
- if (keyUnique && child != null) {
23097
- result[name] = child;
23098
- }
23119
+ function buildSimulators() {
23120
+ ReactTestUtils.Simulate = {};
23121
+
23122
+ var eventType;
23123
+ for (eventType in EventPluginRegistry.eventNameDispatchConfigs) {
23124
+ /**
23125
+ * @param {!Element|ReactDOMComponent} domComponentOrNode
23126
+ * @param {?object} eventData Fake event data to use in SyntheticEvent.
23127
+ */
23128
+ ReactTestUtils.Simulate[eventType] = makeSimulator(eventType);
23099
23129
  }
23100
23130
  }
23101
23131
 
23132
+ // Rebuild ReactTestUtils.Simulate whenever event plugins are injected
23133
+ var oldInjectEventPluginOrder = EventPluginHub.injection.injectEventPluginOrder;
23134
+ EventPluginHub.injection.injectEventPluginOrder = function () {
23135
+ oldInjectEventPluginOrder.apply(this, arguments);
23136
+ buildSimulators();
23137
+ };
23138
+ var oldInjectEventPlugins = EventPluginHub.injection.injectEventPluginsByName;
23139
+ EventPluginHub.injection.injectEventPluginsByName = function () {
23140
+ oldInjectEventPlugins.apply(this, arguments);
23141
+ buildSimulators();
23142
+ };
23143
+
23144
+ buildSimulators();
23145
+
23102
23146
  /**
23103
- * Flattens children that are typically specified as `props.children`. Any null
23104
- * children will not be included in the resulting object.
23105
- * @return {!object} flattened children keyed by name.
23147
+ * Exports:
23148
+ *
23149
+ * - `ReactTestUtils.SimulateNative.click(Element/ReactDOMComponent)`
23150
+ * - `ReactTestUtils.SimulateNative.mouseMove(Element/ReactDOMComponent)`
23151
+ * - `ReactTestUtils.SimulateNative.mouseIn/ReactDOMComponent)`
23152
+ * - `ReactTestUtils.SimulateNative.mouseOut(Element/ReactDOMComponent)`
23153
+ * - ... (All keys from `EventConstants.topLevelTypes`)
23154
+ *
23155
+ * Note: Top level event types are a subset of the entire set of handler types
23156
+ * (which include a broader set of "synthetic" events). For example, onDragDone
23157
+ * is a synthetic event. Except when testing an event plugin or React's event
23158
+ * handling code specifically, you probably want to use ReactTestUtils.Simulate
23159
+ * to dispatch synthetic events.
23106
23160
  */
23107
- function flattenChildren(children, selfDebugID) {
23108
- if (children == null) {
23109
- return children;
23110
- }
23111
- var result = {};
23112
23161
 
23113
- if (process.env.NODE_ENV !== 'production') {
23114
- traverseAllChildren(children, function (traverseContext, child, name) {
23115
- return flattenSingleChildIntoContext(traverseContext, child, name, selfDebugID);
23116
- }, result);
23117
- } else {
23118
- traverseAllChildren(children, flattenSingleChildIntoContext, result);
23119
- }
23120
- return result;
23162
+ function makeNativeSimulator(eventType) {
23163
+ return function (domComponentOrNode, nativeEventData) {
23164
+ var fakeNativeEvent = new Event(eventType);
23165
+ _assign(fakeNativeEvent, nativeEventData);
23166
+ if (ReactTestUtils.isDOMComponent(domComponentOrNode)) {
23167
+ ReactTestUtils.simulateNativeEventOnDOMComponent(eventType, domComponentOrNode, fakeNativeEvent);
23168
+ } else if (domComponentOrNode.tagName) {
23169
+ // Will allow on actual dom nodes.
23170
+ ReactTestUtils.simulateNativeEventOnNode(eventType, domComponentOrNode, fakeNativeEvent);
23171
+ }
23172
+ };
23121
23173
  }
23122
23174
 
23123
- module.exports = flattenChildren;
23124
- /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))
23125
-
23126
- /***/ },
23127
- /* 188 */
23128
- /***/ function(module, exports, __webpack_require__) {
23175
+ Object.keys(topLevelTypes).forEach(function (eventType) {
23176
+ // Event type is stored as 'topClick' - we transform that to 'click'
23177
+ var convenienceName = eventType.indexOf('top') === 0 ? eventType.charAt(3).toLowerCase() + eventType.substr(4) : eventType;
23178
+ /**
23179
+ * @param {!Element|ReactDOMComponent} domComponentOrNode
23180
+ * @param {?Event} nativeEventData Fake native event to use in SyntheticEvent.
23181
+ */
23182
+ ReactTestUtils.SimulateNative[convenienceName] = makeNativeSimulator(eventType);
23183
+ });
23129
23184
 
23130
- module.exports = __webpack_require__(189);
23185
+ module.exports = ReactTestUtils;
23186
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))
23131
23187
 
23132
23188
  /***/ },
23133
23189
  /* 189 */
23134
- /***/ function(module, exports, __webpack_require__) {
23190
+ /***/ function(module, exports) {
23135
23191
 
23136
23192
  /**
23137
23193
  * Copyright 2013-present, Facebook, Inc.
@@ -23145,104 +23201,91 @@
23145
23201
 
23146
23202
  'use strict';
23147
23203
 
23148
- var _assign = __webpack_require__(4);
23149
-
23150
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
23151
-
23152
- 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; }
23153
-
23154
- 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; }
23155
-
23156
- var React = __webpack_require__(2);
23157
-
23158
- var ReactTransitionGroup = __webpack_require__(180);
23159
- var ReactCSSTransitionGroupChild = __webpack_require__(190);
23160
-
23161
- function createTransitionTimeoutPropValidator(transitionType) {
23162
- var timeoutPropName = 'transition' + transitionType + 'Timeout';
23163
- var enabledPropName = 'transition' + transitionType;
23164
-
23165
- return function (props) {
23166
- // If the transition is enabled
23167
- if (props[enabledPropName]) {
23168
- // If no timeout duration is provided
23169
- if (props[timeoutPropName] == null) {
23170
- return new Error(timeoutPropName + ' wasn\'t supplied to ReactCSSTransitionGroup: ' + 'this can cause unreliable animations and won\'t be supported in ' + 'a future version of React. See ' + 'https://fb.me/react-animation-transition-group-timeout for more ' + 'information.');
23171
-
23172
- // If the duration isn't a number
23173
- } else if (typeof props[timeoutPropName] !== 'number') {
23174
- return new Error(timeoutPropName + ' must be a number (in milliseconds)');
23175
- }
23176
- }
23177
- };
23178
- }
23179
-
23180
23204
  /**
23181
- * An easy way to perform CSS transitions and animations when a React component
23182
- * enters or leaves the DOM.
23183
- * See https://facebook.github.io/react/docs/animation.html#high-level-api-reactcsstransitiongroup
23205
+ * Types of raw signals from the browser caught at the top level.
23184
23206
  */
23185
-
23186
- var ReactCSSTransitionGroup = function (_React$Component) {
23187
- _inherits(ReactCSSTransitionGroup, _React$Component);
23188
-
23189
- function ReactCSSTransitionGroup() {
23190
- var _temp, _this, _ret;
23191
-
23192
- _classCallCheck(this, ReactCSSTransitionGroup);
23193
-
23194
- for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
23195
- args[_key] = arguments[_key];
23196
- }
23197
-
23198
- return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this._wrapChild = function (child) {
23199
- // We need to provide this childFactory so that
23200
- // ReactCSSTransitionGroupChild can receive updates to name, enter, and
23201
- // leave while it is leaving.
23202
- return React.createElement(ReactCSSTransitionGroupChild, {
23203
- name: _this.props.transitionName,
23204
- appear: _this.props.transitionAppear,
23205
- enter: _this.props.transitionEnter,
23206
- leave: _this.props.transitionLeave,
23207
- appearTimeout: _this.props.transitionAppearTimeout,
23208
- enterTimeout: _this.props.transitionEnterTimeout,
23209
- leaveTimeout: _this.props.transitionLeaveTimeout
23210
- }, child);
23211
- }, _temp), _possibleConstructorReturn(_this, _ret);
23212
- }
23213
-
23214
- ReactCSSTransitionGroup.prototype.render = function render() {
23215
- return React.createElement(ReactTransitionGroup, _assign({}, this.props, { childFactory: this._wrapChild }));
23216
- };
23217
-
23218
- return ReactCSSTransitionGroup;
23219
- }(React.Component);
23220
-
23221
- ReactCSSTransitionGroup.displayName = 'ReactCSSTransitionGroup';
23222
- ReactCSSTransitionGroup.propTypes = {
23223
- transitionName: ReactCSSTransitionGroupChild.propTypes.name,
23224
-
23225
- transitionAppear: React.PropTypes.bool,
23226
- transitionEnter: React.PropTypes.bool,
23227
- transitionLeave: React.PropTypes.bool,
23228
- transitionAppearTimeout: createTransitionTimeoutPropValidator('Appear'),
23229
- transitionEnterTimeout: createTransitionTimeoutPropValidator('Enter'),
23230
- transitionLeaveTimeout: createTransitionTimeoutPropValidator('Leave')
23231
- };
23232
- ReactCSSTransitionGroup.defaultProps = {
23233
- transitionAppear: false,
23234
- transitionEnter: true,
23235
- transitionLeave: true
23207
+ var topLevelTypes = {
23208
+ topAbort: null,
23209
+ topAnimationEnd: null,
23210
+ topAnimationIteration: null,
23211
+ topAnimationStart: null,
23212
+ topBlur: null,
23213
+ topCanPlay: null,
23214
+ topCanPlayThrough: null,
23215
+ topChange: null,
23216
+ topClick: null,
23217
+ topCompositionEnd: null,
23218
+ topCompositionStart: null,
23219
+ topCompositionUpdate: null,
23220
+ topContextMenu: null,
23221
+ topCopy: null,
23222
+ topCut: null,
23223
+ topDoubleClick: null,
23224
+ topDrag: null,
23225
+ topDragEnd: null,
23226
+ topDragEnter: null,
23227
+ topDragExit: null,
23228
+ topDragLeave: null,
23229
+ topDragOver: null,
23230
+ topDragStart: null,
23231
+ topDrop: null,
23232
+ topDurationChange: null,
23233
+ topEmptied: null,
23234
+ topEncrypted: null,
23235
+ topEnded: null,
23236
+ topError: null,
23237
+ topFocus: null,
23238
+ topInput: null,
23239
+ topInvalid: null,
23240
+ topKeyDown: null,
23241
+ topKeyPress: null,
23242
+ topKeyUp: null,
23243
+ topLoad: null,
23244
+ topLoadedData: null,
23245
+ topLoadedMetadata: null,
23246
+ topLoadStart: null,
23247
+ topMouseDown: null,
23248
+ topMouseMove: null,
23249
+ topMouseOut: null,
23250
+ topMouseOver: null,
23251
+ topMouseUp: null,
23252
+ topPaste: null,
23253
+ topPause: null,
23254
+ topPlay: null,
23255
+ topPlaying: null,
23256
+ topProgress: null,
23257
+ topRateChange: null,
23258
+ topReset: null,
23259
+ topScroll: null,
23260
+ topSeeked: null,
23261
+ topSeeking: null,
23262
+ topSelectionChange: null,
23263
+ topStalled: null,
23264
+ topSubmit: null,
23265
+ topSuspend: null,
23266
+ topTextInput: null,
23267
+ topTimeUpdate: null,
23268
+ topTouchCancel: null,
23269
+ topTouchEnd: null,
23270
+ topTouchMove: null,
23271
+ topTouchStart: null,
23272
+ topTransitionEnd: null,
23273
+ topVolumeChange: null,
23274
+ topWaiting: null,
23275
+ topWheel: null
23236
23276
  };
23237
23277
 
23278
+ var EventConstants = {
23279
+ topLevelTypes: topLevelTypes
23280
+ };
23238
23281
 
23239
- module.exports = ReactCSSTransitionGroup;
23282
+ module.exports = EventConstants;
23240
23283
 
23241
23284
  /***/ },
23242
23285
  /* 190 */
23243
23286
  /***/ function(module, exports, __webpack_require__) {
23244
23287
 
23245
- /**
23288
+ /* WEBPACK VAR INJECTION */(function(process) {/**
23246
23289
  * Copyright 2013-present, Facebook, Inc.
23247
23290
  * All rights reserved.
23248
23291
  *
@@ -23254,160 +23297,129 @@
23254
23297
 
23255
23298
  'use strict';
23256
23299
 
23257
- var React = __webpack_require__(2);
23258
- var ReactAddonsDOMDependencies = __webpack_require__(181);
23259
-
23260
- var CSSCore = __webpack_require__(191);
23261
- var ReactTransitionEvents = __webpack_require__(192);
23262
-
23263
- var onlyChild = __webpack_require__(31);
23264
-
23265
- var TICK = 17;
23266
-
23267
- var ReactCSSTransitionGroupChild = React.createClass({
23268
- displayName: 'ReactCSSTransitionGroupChild',
23300
+ var _prodInvariant = __webpack_require__(35),
23301
+ _assign = __webpack_require__(4);
23269
23302
 
23270
- propTypes: {
23271
- name: React.PropTypes.oneOfType([React.PropTypes.string, React.PropTypes.shape({
23272
- enter: React.PropTypes.string,
23273
- leave: React.PropTypes.string,
23274
- active: React.PropTypes.string
23275
- }), React.PropTypes.shape({
23276
- enter: React.PropTypes.string,
23277
- enterActive: React.PropTypes.string,
23278
- leave: React.PropTypes.string,
23279
- leaveActive: React.PropTypes.string,
23280
- appear: React.PropTypes.string,
23281
- appearActive: React.PropTypes.string
23282
- })]).isRequired,
23303
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
23283
23304
 
23284
- // Once we require timeouts to be specified, we can remove the
23285
- // boolean flags (appear etc.) and just accept a number
23286
- // or a bool for the timeout flags (appearTimeout etc.)
23287
- appear: React.PropTypes.bool,
23288
- enter: React.PropTypes.bool,
23289
- leave: React.PropTypes.bool,
23290
- appearTimeout: React.PropTypes.number,
23291
- enterTimeout: React.PropTypes.number,
23292
- leaveTimeout: React.PropTypes.number
23293
- },
23305
+ var React = __webpack_require__(2);
23306
+ var ReactDefaultInjection = __webpack_require__(38);
23307
+ var ReactCompositeComponent = __webpack_require__(119);
23308
+ var ReactReconciler = __webpack_require__(59);
23309
+ var ReactUpdates = __webpack_require__(56);
23294
23310
 
23295
- transition: function (animationType, finishCallback, userSpecifiedDelay) {
23296
- var node = ReactAddonsDOMDependencies.getReactDOM().findDOMNode(this);
23311
+ var emptyObject = __webpack_require__(20);
23312
+ var getNextDebugID = __webpack_require__(127);
23313
+ var invariant = __webpack_require__(8);
23297
23314
 
23298
- if (!node) {
23299
- if (finishCallback) {
23300
- finishCallback();
23301
- }
23302
- return;
23303
- }
23315
+ var NoopInternalComponent = function () {
23316
+ function NoopInternalComponent(element) {
23317
+ _classCallCheck(this, NoopInternalComponent);
23304
23318
 
23305
- var className = this.props.name[animationType] || this.props.name + '-' + animationType;
23306
- var activeClassName = this.props.name[animationType + 'Active'] || className + '-active';
23307
- var timeout = null;
23319
+ this._renderedOutput = element;
23320
+ this._currentElement = element;
23308
23321
 
23309
- var endListener = function (e) {
23310
- if (e && e.target !== node) {
23311
- return;
23312
- }
23322
+ if (process.env.NODE_ENV !== 'production') {
23323
+ this._debugID = getNextDebugID();
23324
+ }
23325
+ }
23313
23326
 
23314
- clearTimeout(timeout);
23327
+ NoopInternalComponent.prototype.mountComponent = function mountComponent() {};
23315
23328
 
23316
- CSSCore.removeClass(node, className);
23317
- CSSCore.removeClass(node, activeClassName);
23329
+ NoopInternalComponent.prototype.receiveComponent = function receiveComponent(element) {
23330
+ this._renderedOutput = element;
23331
+ this._currentElement = element;
23332
+ };
23318
23333
 
23319
- ReactTransitionEvents.removeEndEventListener(node, endListener);
23334
+ NoopInternalComponent.prototype.unmountComponent = function unmountComponent() {};
23320
23335
 
23321
- // Usually this optional callback is used for informing an owner of
23322
- // a leave animation and telling it to remove the child.
23323
- if (finishCallback) {
23324
- finishCallback();
23325
- }
23326
- };
23336
+ NoopInternalComponent.prototype.getHostNode = function getHostNode() {
23337
+ return undefined;
23338
+ };
23327
23339
 
23328
- CSSCore.addClass(node, className);
23340
+ NoopInternalComponent.prototype.getPublicInstance = function getPublicInstance() {
23341
+ return null;
23342
+ };
23329
23343
 
23330
- // Need to do this to actually trigger a transition.
23331
- this.queueClassAndNode(activeClassName, node);
23344
+ return NoopInternalComponent;
23345
+ }();
23332
23346
 
23333
- // If the user specified a timeout delay.
23334
- if (userSpecifiedDelay) {
23335
- // Clean-up the animation after the specified delay
23336
- timeout = setTimeout(endListener, userSpecifiedDelay);
23337
- this.transitionTimeouts.push(timeout);
23338
- } else {
23339
- // DEPRECATED: this listener will be removed in a future version of react
23340
- ReactTransitionEvents.addEndEventListener(node, endListener);
23341
- }
23347
+ var ShallowComponentWrapper = function (element) {
23348
+ // TODO: Consolidate with instantiateReactComponent
23349
+ if (process.env.NODE_ENV !== 'production') {
23350
+ this._debugID = getNextDebugID();
23351
+ }
23352
+
23353
+ this.construct(element);
23354
+ };
23355
+ _assign(ShallowComponentWrapper.prototype, ReactCompositeComponent, {
23356
+ _constructComponent: ReactCompositeComponent._constructComponentWithoutOwner,
23357
+ _instantiateReactComponent: function (element) {
23358
+ return new NoopInternalComponent(element);
23342
23359
  },
23360
+ _replaceNodeWithMarkup: function () {},
23361
+ _renderValidatedComponent: ReactCompositeComponent._renderValidatedComponentWithoutOwnerOrContext
23362
+ });
23343
23363
 
23344
- queueClassAndNode: function (className, node) {
23345
- this.classNameAndNodeQueue.push({
23346
- className: className,
23347
- node: node
23348
- });
23364
+ function _batchedRender(renderer, element, context) {
23365
+ var transaction = ReactUpdates.ReactReconcileTransaction.getPooled(true);
23366
+ renderer._render(element, transaction, context);
23367
+ ReactUpdates.ReactReconcileTransaction.release(transaction);
23368
+ }
23349
23369
 
23350
- if (!this.timeout) {
23351
- this.timeout = setTimeout(this.flushClassNameAndNodeQueue, TICK);
23352
- }
23353
- },
23370
+ var ReactShallowRenderer = function () {
23371
+ function ReactShallowRenderer() {
23372
+ _classCallCheck(this, ReactShallowRenderer);
23354
23373
 
23355
- flushClassNameAndNodeQueue: function () {
23356
- if (this.isMounted()) {
23357
- this.classNameAndNodeQueue.forEach(function (obj) {
23358
- CSSCore.addClass(obj.node, obj.className);
23359
- });
23360
- }
23361
- this.classNameAndNodeQueue.length = 0;
23362
- this.timeout = null;
23363
- },
23374
+ this._instance = null;
23375
+ }
23364
23376
 
23365
- componentWillMount: function () {
23366
- this.classNameAndNodeQueue = [];
23367
- this.transitionTimeouts = [];
23368
- },
23377
+ ReactShallowRenderer.prototype.getMountedInstance = function getMountedInstance() {
23378
+ return this._instance ? this._instance._instance : null;
23379
+ };
23369
23380
 
23370
- componentWillUnmount: function () {
23371
- if (this.timeout) {
23372
- clearTimeout(this.timeout);
23373
- }
23374
- this.transitionTimeouts.forEach(function (timeout) {
23375
- clearTimeout(timeout);
23376
- });
23381
+ ReactShallowRenderer.prototype.render = function render(element, context) {
23382
+ // Ensure we've done the default injections. This might not be true in the
23383
+ // case of a simple test that only requires React and the TestUtils in
23384
+ // conjunction with an inline-requires transform.
23385
+ ReactDefaultInjection.inject();
23377
23386
 
23378
- this.classNameAndNodeQueue.length = 0;
23379
- },
23387
+ !React.isValidElement(element) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactShallowRenderer render(): Invalid component element.%s', typeof element === 'function' ? ' Instead of passing a component class, make sure to instantiate ' + 'it by passing it to React.createElement.' : '') : _prodInvariant('12', typeof element === 'function' ? ' Instead of passing a component class, make sure to instantiate ' + 'it by passing it to React.createElement.' : '') : void 0;
23388
+ !(typeof element.type !== 'string') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactShallowRenderer render(): Shallow rendering works only with custom components, not primitives (%s). Instead of calling `.render(el)` and inspecting the rendered output, look at `el.props` directly instead.', element.type) : _prodInvariant('13', element.type) : void 0;
23380
23389
 
23381
- componentWillAppear: function (done) {
23382
- if (this.props.appear) {
23383
- this.transition('appear', done, this.props.appearTimeout);
23384
- } else {
23385
- done();
23390
+ if (!context) {
23391
+ context = emptyObject;
23386
23392
  }
23387
- },
23393
+ ReactUpdates.batchedUpdates(_batchedRender, this, element, context);
23388
23394
 
23389
- componentWillEnter: function (done) {
23390
- if (this.props.enter) {
23391
- this.transition('enter', done, this.props.enterTimeout);
23392
- } else {
23393
- done();
23395
+ return this.getRenderOutput();
23396
+ };
23397
+
23398
+ ReactShallowRenderer.prototype.getRenderOutput = function getRenderOutput() {
23399
+ return this._instance && this._instance._renderedComponent && this._instance._renderedComponent._renderedOutput || null;
23400
+ };
23401
+
23402
+ ReactShallowRenderer.prototype.unmount = function unmount() {
23403
+ if (this._instance) {
23404
+ ReactReconciler.unmountComponent(this._instance, false);
23394
23405
  }
23395
- },
23406
+ };
23396
23407
 
23397
- componentWillLeave: function (done) {
23398
- if (this.props.leave) {
23399
- this.transition('leave', done, this.props.leaveTimeout);
23408
+ ReactShallowRenderer.prototype._render = function _render(element, transaction, context) {
23409
+ if (this._instance) {
23410
+ ReactReconciler.receiveComponent(this._instance, element, transaction, context);
23400
23411
  } else {
23401
- done();
23412
+ var instance = new ShallowComponentWrapper(element);
23413
+ ReactReconciler.mountComponent(instance, transaction, null, null, context, 0);
23414
+ this._instance = instance;
23402
23415
  }
23403
- },
23416
+ };
23404
23417
 
23405
- render: function () {
23406
- return onlyChild(this.props.children);
23407
- }
23408
- });
23418
+ return ReactShallowRenderer;
23419
+ }();
23409
23420
 
23410
- module.exports = ReactCSSTransitionGroupChild;
23421
+ module.exports = ReactShallowRenderer;
23422
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))
23411
23423
 
23412
23424
  /***/ },
23413
23425
  /* 191 */
@@ -23615,52 +23627,7 @@
23615
23627
 
23616
23628
  /***/ },
23617
23629
  /* 193 */
23618
- /***/ function(module, exports, __webpack_require__) {
23619
-
23620
- module.exports = __webpack_require__(194);
23621
-
23622
- /***/ },
23623
- /* 194 */
23624
- /***/ function(module, exports, __webpack_require__) {
23625
-
23626
- /**
23627
- * Copyright 2013-present, Facebook, Inc.
23628
- * All rights reserved.
23629
- *
23630
- * This source code is licensed under the BSD-style license found in the
23631
- * LICENSE file in the root directory of this source tree. An additional grant
23632
- * of patent rights can be found in the PATENTS file in the same directory.
23633
- *
23634
- */
23635
-
23636
- 'use strict';
23637
-
23638
- var ReactLink = __webpack_require__(195);
23639
- var ReactStateSetters = __webpack_require__(196);
23640
-
23641
- /**
23642
- * A simple mixin around ReactLink.forState().
23643
- * See https://facebook.github.io/react/docs/two-way-binding-helpers.html
23644
- */
23645
- var LinkedStateMixin = {
23646
- /**
23647
- * Create a ReactLink that's linked to part of this component's state. The
23648
- * ReactLink will have the current value of this.state[key] and will call
23649
- * setState() when a change is requested.
23650
- *
23651
- * @param {string} key state key to update.
23652
- * @return {ReactLink} ReactLink instance linking to the state.
23653
- */
23654
- linkState: function (key) {
23655
- return new ReactLink(this.state[key], ReactStateSetters.createStateKeySetter(this, key));
23656
- }
23657
- };
23658
-
23659
- module.exports = LinkedStateMixin;
23660
-
23661
- /***/ },
23662
- /* 195 */
23663
- /***/ function(module, exports, __webpack_require__) {
23630
+ /***/ function(module, exports) {
23664
23631
 
23665
23632
  /**
23666
23633
  * Copyright 2013-present, Facebook, Inc.
@@ -23669,7 +23636,6 @@
23669
23636
  * This source code is licensed under the BSD-style license found in the
23670
23637
  * LICENSE file in the root directory of this source tree. An additional grant
23671
23638
  * of patent rights can be found in the PATENTS file in the same directory.
23672
- *
23673
23639
  */
23674
23640
 
23675
23641
  'use strict';
@@ -23697,8 +23663,6 @@
23697
23663
  * consumption of ReactLink easier; see LinkedValueUtils and LinkedStateMixin.
23698
23664
  */
23699
23665
 
23700
- var React = __webpack_require__(2);
23701
-
23702
23666
  /**
23703
23667
  * Deprecated: An an easy way to express two-way binding with React.
23704
23668
  * See https://facebook.github.io/react/docs/two-way-binding-helpers.html
@@ -23721,33 +23685,17 @@
23721
23685
  */
23722
23686
  function createLinkTypeChecker(linkType) {
23723
23687
  var shapes = {
23724
- value: linkType === undefined ? React.PropTypes.any.isRequired : linkType.isRequired,
23725
- requestChange: React.PropTypes.func.isRequired
23688
+ value: linkType === undefined ?
23689
+ React.PropTypes.any.isRequired :
23690
+ linkType.isRequired,
23691
+ requestChange: React.PropTypes.func.isRequired,
23726
23692
  };
23727
23693
  return React.PropTypes.shape(shapes);
23728
- }
23729
-
23730
- ReactLink.PropTypes = {
23731
- link: createLinkTypeChecker
23732
- };
23733
-
23734
- module.exports = ReactLink;
23735
-
23736
- /***/ },
23737
- /* 196 */
23738
- /***/ function(module, exports) {
23739
-
23740
- /**
23741
- * Copyright 2013-present, Facebook, Inc.
23742
- * All rights reserved.
23743
- *
23744
- * This source code is licensed under the BSD-style license found in the
23745
- * LICENSE file in the root directory of this source tree. An additional grant
23746
- * of patent rights can be found in the PATENTS file in the same directory.
23747
- *
23748
- */
23694
+ }
23749
23695
 
23750
- 'use strict';
23696
+ ReactLink.PropTypes = {
23697
+ link: createLinkTypeChecker,
23698
+ };
23751
23699
 
23752
23700
  var ReactStateSetters = {
23753
23701
  /**
@@ -23760,8 +23708,8 @@
23760
23708
  * @return {function} callback that when invoked uses funcReturningState to
23761
23709
  * determined the object literal to setState.
23762
23710
  */
23763
- createStateSetter: function (component, funcReturningState) {
23764
- return function (a, b, c, d, e, f) {
23711
+ createStateSetter: function(component, funcReturningState) {
23712
+ return function(a, b, c, d, e, f) {
23765
23713
  var partialState = funcReturningState.call(component, a, b, c, d, e, f);
23766
23714
  if (partialState) {
23767
23715
  component.setState(partialState);
@@ -23780,11 +23728,11 @@
23780
23728
  * @return {function} callback of 1 argument which calls setState() with
23781
23729
  * the provided keyName and callback argument.
23782
23730
  */
23783
- createStateKeySetter: function (component, key) {
23731
+ createStateKeySetter: function(component, key) {
23784
23732
  // Memoize the setters.
23785
23733
  var cache = component.__keySetters || (component.__keySetters = {});
23786
23734
  return cache[key] || (cache[key] = createStateKeySetter(component, key));
23787
- }
23735
+ },
23788
23736
  };
23789
23737
 
23790
23738
  function createStateKeySetter(component, key) {
@@ -23798,137 +23746,520 @@
23798
23746
  };
23799
23747
  }
23800
23748
 
23801
- ReactStateSetters.Mixin = {
23802
- /**
23803
- * Returns a function that calls the provided function, and uses the result
23804
- * of that to set the component's state.
23805
- *
23806
- * For example, these statements are equivalent:
23807
- *
23808
- * this.setState({x: 1});
23809
- * this.createStateSetter(function(xValue) {
23810
- * return {x: xValue};
23811
- * })(1);
23812
- *
23813
- * @param {function} funcReturningState Returned callback uses this to
23814
- * determine how to update state.
23815
- * @return {function} callback that when invoked uses funcReturningState to
23816
- * determined the object literal to setState.
23817
- */
23818
- createStateSetter: function (funcReturningState) {
23819
- return ReactStateSetters.createStateSetter(this, funcReturningState);
23820
- },
23749
+ ReactStateSetters.Mixin = {
23750
+ /**
23751
+ * Returns a function that calls the provided function, and uses the result
23752
+ * of that to set the component's state.
23753
+ *
23754
+ * For example, these statements are equivalent:
23755
+ *
23756
+ * this.setState({x: 1});
23757
+ * this.createStateSetter(function(xValue) {
23758
+ * return {x: xValue};
23759
+ * })(1);
23760
+ *
23761
+ * @param {function} funcReturningState Returned callback uses this to
23762
+ * determine how to update state.
23763
+ * @return {function} callback that when invoked uses funcReturningState to
23764
+ * determined the object literal to setState.
23765
+ */
23766
+ createStateSetter: function(funcReturningState) {
23767
+ return ReactStateSetters.createStateSetter(this, funcReturningState);
23768
+ },
23769
+
23770
+ /**
23771
+ * Returns a single-argument callback that can be used to update a single
23772
+ * key in the component's state.
23773
+ *
23774
+ * For example, these statements are equivalent:
23775
+ *
23776
+ * this.setState({x: 1});
23777
+ * this.createStateKeySetter('x')(1);
23778
+ *
23779
+ * Note: this is memoized function, which makes it inexpensive to call.
23780
+ *
23781
+ * @param {string} key The key in the state that you should update.
23782
+ * @return {function} callback of 1 argument which calls setState() with
23783
+ * the provided keyName and callback argument.
23784
+ */
23785
+ createStateKeySetter: function(key) {
23786
+ return ReactStateSetters.createStateKeySetter(this, key);
23787
+ },
23788
+ };
23789
+
23790
+ /**
23791
+ * A simple mixin around ReactLink.forState().
23792
+ * See https://facebook.github.io/react/docs/two-way-binding-helpers.html
23793
+ */
23794
+ var LinkedStateMixin = {
23795
+ /**
23796
+ * Create a ReactLink that's linked to part of this component's state. The
23797
+ * ReactLink will have the current value of this.state[key] and will call
23798
+ * setState() when a change is requested.
23799
+ *
23800
+ * @param {string} key state key to update.
23801
+ * @return {ReactLink} ReactLink instance linking to the state.
23802
+ */
23803
+ linkState: function(key) {
23804
+ return new ReactLink(
23805
+ this.state[key],
23806
+ ReactStateSetters.createStateKeySetter(this, key)
23807
+ );
23808
+ },
23809
+ };
23810
+
23811
+ module.exports = LinkedStateMixin;
23812
+
23813
+
23814
+ /***/ },
23815
+ /* 194 */
23816
+ /***/ function(module, exports, __webpack_require__) {
23817
+
23818
+ /* WEBPACK VAR INJECTION */(function(process) {/**
23819
+ * Copyright 2015-present, Facebook, Inc.
23820
+ * All rights reserved.
23821
+ *
23822
+ * This source code is licensed under the BSD-style license found in the
23823
+ * LICENSE file in the root directory of this source tree. An additional grant
23824
+ * of patent rights can be found in the PATENTS file in the same directory.
23825
+ *
23826
+ * @providesModule createReactFragment
23827
+ */
23828
+
23829
+ 'use strict';
23830
+
23831
+ var React = __webpack_require__(1);
23832
+
23833
+ var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' &&
23834
+ Symbol.for &&
23835
+ Symbol.for('react.element')) ||
23836
+ 0xeac7;
23837
+
23838
+ function makeEmptyFunction(arg) {
23839
+ return function () {
23840
+ return arg;
23841
+ };
23842
+ }
23843
+ var emptyFunction = function emptyFunction() {};
23844
+ emptyFunction.thatReturns = makeEmptyFunction;
23845
+ emptyFunction.thatReturnsFalse = makeEmptyFunction(false);
23846
+ emptyFunction.thatReturnsTrue = makeEmptyFunction(true);
23847
+ emptyFunction.thatReturnsNull = makeEmptyFunction(null);
23848
+ emptyFunction.thatReturnsThis = function () {
23849
+ return this;
23850
+ };
23851
+ emptyFunction.thatReturnsArgument = function (arg) {
23852
+ return arg;
23853
+ };
23854
+
23855
+ var validateFormat = function validateFormat(format) {};
23856
+
23857
+ if (process.env.NODE_ENV !== 'production') {
23858
+ validateFormat = function validateFormat(format) {
23859
+ if (format === undefined) {
23860
+ throw new Error('invariant requires an error message argument');
23861
+ }
23862
+ };
23863
+ }
23864
+
23865
+ function invariant(condition, format, a, b, c, d, e, f) {
23866
+ validateFormat(format);
23867
+
23868
+ if (!condition) {
23869
+ var error;
23870
+ if (format === undefined) {
23871
+ error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');
23872
+ } else {
23873
+ var args = [a, b, c, d, e, f];
23874
+ var argIndex = 0;
23875
+ error = new Error(format.replace(/%s/g, function () {
23876
+ return args[argIndex++];
23877
+ }));
23878
+ error.name = 'Invariant Violation';
23879
+ }
23880
+
23881
+ error.framesToPop = 1; // we don't care about invariant's own frame
23882
+ throw error;
23883
+ }
23884
+ }
23885
+
23886
+ var warning = emptyFunction;
23887
+
23888
+ if (process.env.NODE_ENV !== 'production') {
23889
+ (function () {
23890
+ var printWarning = function printWarning(format) {
23891
+ for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
23892
+ args[_key - 1] = arguments[_key];
23893
+ }
23894
+
23895
+ var argIndex = 0;
23896
+ var message = 'Warning: ' + format.replace(/%s/g, function () {
23897
+ return args[argIndex++];
23898
+ });
23899
+ if (typeof console !== 'undefined') {
23900
+ console.error(message);
23901
+ }
23902
+ try {
23903
+ // --- Welcome to debugging React ---
23904
+ // This error was thrown as a convenience so that you can use this stack
23905
+ // to find the callsite that caused this warning to fire.
23906
+ throw new Error(message);
23907
+ } catch (x) {}
23908
+ };
23909
+
23910
+ warning = function warning(condition, format) {
23911
+ if (format === undefined) {
23912
+ throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');
23913
+ }
23914
+
23915
+ if (format.indexOf('Failed Composite propType: ') === 0) {
23916
+ return; // Ignore CompositeComponent proptype check.
23917
+ }
23918
+
23919
+ if (!condition) {
23920
+ for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {
23921
+ args[_key2 - 2] = arguments[_key2];
23922
+ }
23923
+
23924
+ printWarning.apply(undefined, [format].concat(args));
23925
+ }
23926
+ };
23927
+ })();
23928
+ }
23929
+
23930
+ var SEPARATOR = '.';
23931
+ var SUBSEPARATOR = ':';
23932
+
23933
+ var didWarnAboutMaps = false;
23934
+
23935
+ var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
23936
+ var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.
23937
+
23938
+ function getIteratorFn(maybeIterable) {
23939
+ var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);
23940
+ if (typeof iteratorFn === 'function') {
23941
+ return iteratorFn;
23942
+ }
23943
+ }
23944
+
23945
+ function escape(key) {
23946
+ var escapeRegex = /[=:]/g;
23947
+ var escaperLookup = {
23948
+ '=': '=0',
23949
+ ':': '=2'
23950
+ };
23951
+ var escapedString = ('' + key).replace(escapeRegex, function(match) {
23952
+ return escaperLookup[match];
23953
+ });
23954
+
23955
+ return '$' + escapedString;
23956
+ }
23957
+
23958
+ function getComponentKey(component, index) {
23959
+ // Do some typechecking here since we call this blindly. We want to ensure
23960
+ // that we don't block potential future ES APIs.
23961
+ if (component && typeof component === 'object' && component.key != null) {
23962
+ // Explicit key
23963
+ return escape(component.key);
23964
+ }
23965
+ // Implicit key determined by the index in the set
23966
+ return index.toString(36);
23967
+ }
23968
+
23969
+ function traverseAllChildrenImpl(
23970
+ children,
23971
+ nameSoFar,
23972
+ callback,
23973
+ traverseContext
23974
+ ) {
23975
+ var type = typeof children;
23976
+
23977
+ if (type === 'undefined' || type === 'boolean') {
23978
+ // All of the above are perceived as null.
23979
+ children = null;
23980
+ }
23981
+
23982
+ if (
23983
+ children === null ||
23984
+ type === 'string' ||
23985
+ type === 'number' ||
23986
+ // The following is inlined from ReactElement. This means we can optimize
23987
+ // some checks. React Fiber also inlines this logic for similar purposes.
23988
+ (type === 'object' && children.$$typeof === REACT_ELEMENT_TYPE)
23989
+ ) {
23990
+ callback(
23991
+ traverseContext,
23992
+ children,
23993
+ // If it's the only child, treat the name as if it was wrapped in an array
23994
+ // so that it's consistent if the number of children grows.
23995
+ nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar
23996
+ );
23997
+ return 1;
23998
+ }
23999
+
24000
+ var child;
24001
+ var nextName;
24002
+ var subtreeCount = 0; // Count of children found in the current subtree.
24003
+ var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;
24004
+
24005
+ if (Array.isArray(children)) {
24006
+ for (var i = 0; i < children.length; i++) {
24007
+ child = children[i];
24008
+ nextName = nextNamePrefix + getComponentKey(child, i);
24009
+ subtreeCount += traverseAllChildrenImpl(
24010
+ child,
24011
+ nextName,
24012
+ callback,
24013
+ traverseContext
24014
+ );
24015
+ }
24016
+ } else {
24017
+ var iteratorFn = getIteratorFn(children);
24018
+ if (iteratorFn) {
24019
+ if (process.env.NODE_ENV !== "production") {
24020
+ // Warn about using Maps as children
24021
+ if (iteratorFn === children.entries) {
24022
+ warning(
24023
+ didWarnAboutMaps,
24024
+ 'Using Maps as children is unsupported and will likely yield ' +
24025
+ 'unexpected results. Convert it to a sequence/iterable of keyed ' +
24026
+ 'ReactElements instead.'
24027
+ );
24028
+ didWarnAboutMaps = true;
24029
+ }
24030
+ }
24031
+
24032
+ var iterator = iteratorFn.call(children);
24033
+ var step;
24034
+ var ii = 0;
24035
+ while (!(step = iterator.next()).done) {
24036
+ child = step.value;
24037
+ nextName = nextNamePrefix + getComponentKey(child, ii++);
24038
+ subtreeCount += traverseAllChildrenImpl(
24039
+ child,
24040
+ nextName,
24041
+ callback,
24042
+ traverseContext
24043
+ );
24044
+ }
24045
+ } else if (type === 'object') {
24046
+ var addendum = '';
24047
+ if (process.env.NODE_ENV !== "production") {
24048
+ addendum = ' If you meant to render a collection of children, use an array ' +
24049
+ 'instead or wrap the object using createFragment(object) from the ' +
24050
+ 'React add-ons.';
24051
+ }
24052
+ var childrenString = '' + children;
24053
+ invariant(
24054
+ false,
24055
+ 'Objects are not valid as a React child (found: %s).%s',
24056
+ childrenString === '[object Object]'
24057
+ ? 'object with keys {' + Object.keys(children).join(', ') + '}'
24058
+ : childrenString,
24059
+ addendum
24060
+ );
24061
+ }
24062
+ }
24063
+
24064
+ return subtreeCount;
24065
+ }
24066
+
24067
+ function traverseAllChildren(children, callback, traverseContext) {
24068
+ if (children == null) {
24069
+ return 0;
24070
+ }
24071
+
24072
+ return traverseAllChildrenImpl(children, '', callback, traverseContext);
24073
+ }
24074
+
24075
+ var userProvidedKeyEscapeRegex = /\/+/g;
24076
+ function escapeUserProvidedKey(text) {
24077
+ return ('' + text).replace(userProvidedKeyEscapeRegex, '$&/');
24078
+ }
23821
24079
 
23822
- /**
23823
- * Returns a single-argument callback that can be used to update a single
23824
- * key in the component's state.
23825
- *
23826
- * For example, these statements are equivalent:
23827
- *
23828
- * this.setState({x: 1});
23829
- * this.createStateKeySetter('x')(1);
23830
- *
23831
- * Note: this is memoized function, which makes it inexpensive to call.
23832
- *
23833
- * @param {string} key The key in the state that you should update.
23834
- * @return {function} callback of 1 argument which calls setState() with
23835
- * the provided keyName and callback argument.
23836
- */
23837
- createStateKeySetter: function (key) {
23838
- return ReactStateSetters.createStateKeySetter(this, key);
23839
- }
24080
+ function cloneAndReplaceKey(oldElement, newKey) {
24081
+ return React.cloneElement(
24082
+ oldElement,
24083
+ { key: newKey },
24084
+ oldElement.props !== undefined
24085
+ ? oldElement.props.children
24086
+ : undefined
24087
+ );
23840
24088
  };
23841
24089
 
23842
- module.exports = ReactStateSetters;
23843
-
23844
- /***/ },
23845
- /* 197 */
23846
- /***/ function(module, exports, __webpack_require__) {
24090
+ var DEFAULT_POOL_SIZE = 10;
24091
+ var DEFAULT_POOLER = oneArgumentPooler;
23847
24092
 
23848
- module.exports = __webpack_require__(198).create;
24093
+ var oneArgumentPooler = function(copyFieldsFrom) {
24094
+ var Klass = this;
24095
+ if (Klass.instancePool.length) {
24096
+ var instance = Klass.instancePool.pop();
24097
+ Klass.call(instance, copyFieldsFrom);
24098
+ return instance;
24099
+ } else {
24100
+ return new Klass(copyFieldsFrom);
24101
+ }
24102
+ };
23849
24103
 
23850
- /***/ },
23851
- /* 198 */
23852
- /***/ function(module, exports, __webpack_require__) {
24104
+ var addPoolingTo = function addPoolingTo(
24105
+ CopyConstructor,
24106
+ pooler
24107
+ ) {
24108
+ // Casting as any so that flow ignores the actual implementation and trusts
24109
+ // it to match the type we declared
24110
+ var NewKlass = CopyConstructor;
24111
+ NewKlass.instancePool = [];
24112
+ NewKlass.getPooled = pooler || DEFAULT_POOLER;
24113
+ if (!NewKlass.poolSize) {
24114
+ NewKlass.poolSize = DEFAULT_POOL_SIZE;
24115
+ }
24116
+ NewKlass.release = standardReleaser;
24117
+ return NewKlass;
24118
+ };
23853
24119
 
23854
- /* WEBPACK VAR INJECTION */(function(process) {/**
23855
- * Copyright 2015-present, Facebook, Inc.
23856
- * All rights reserved.
23857
- *
23858
- * This source code is licensed under the BSD-style license found in the
23859
- * LICENSE file in the root directory of this source tree. An additional grant
23860
- * of patent rights can be found in the PATENTS file in the same directory.
23861
- *
23862
- */
24120
+ var standardReleaser = function standardReleaser(instance) {
24121
+ var Klass = this;
24122
+ invariant(
24123
+ instance instanceof Klass,
24124
+ 'Trying to release an instance into a pool of a different type.'
24125
+ );
24126
+ instance.destructor();
24127
+ if (Klass.instancePool.length < Klass.poolSize) {
24128
+ Klass.instancePool.push(instance);
24129
+ }
24130
+ };
23863
24131
 
23864
- 'use strict';
24132
+ var fourArgumentPooler = function fourArgumentPooler(a1, a2, a3, a4) {
24133
+ var Klass = this;
24134
+ if (Klass.instancePool.length) {
24135
+ var instance = Klass.instancePool.pop();
24136
+ Klass.call(instance, a1, a2, a3, a4);
24137
+ return instance;
24138
+ } else {
24139
+ return new Klass(a1, a2, a3, a4);
24140
+ }
24141
+ };
23865
24142
 
23866
- var _prodInvariant = __webpack_require__(7);
24143
+ function MapBookKeeping(mapResult, keyPrefix, mapFunction, mapContext) {
24144
+ this.result = mapResult;
24145
+ this.keyPrefix = keyPrefix;
24146
+ this.func = mapFunction;
24147
+ this.context = mapContext;
24148
+ this.count = 0;
24149
+ }
24150
+ MapBookKeeping.prototype.destructor = function() {
24151
+ this.result = null;
24152
+ this.keyPrefix = null;
24153
+ this.func = null;
24154
+ this.context = null;
24155
+ this.count = 0;
24156
+ };
24157
+ addPoolingTo(MapBookKeeping, fourArgumentPooler);
23867
24158
 
23868
- var ReactChildren = __webpack_require__(5);
23869
- var ReactElement = __webpack_require__(9);
24159
+ function mapSingleChildIntoContext(bookKeeping, child, childKey) {
24160
+ var result = bookKeeping.result;
24161
+ var keyPrefix = bookKeeping.keyPrefix;
24162
+ var func = bookKeeping.func;
24163
+ var context = bookKeeping.context;
23870
24164
 
23871
- var emptyFunction = __webpack_require__(12);
23872
- var invariant = __webpack_require__(8);
23873
- var warning = __webpack_require__(11);
24165
+ var mappedChild = func.call(context, child, bookKeeping.count++);
24166
+ if (Array.isArray(mappedChild)) {
24167
+ mapIntoWithKeyPrefixInternal(
24168
+ mappedChild,
24169
+ result,
24170
+ childKey,
24171
+ emptyFunction.thatReturnsArgument
24172
+ );
24173
+ } else if (mappedChild != null) {
24174
+ if (React.isValidElement(mappedChild)) {
24175
+ mappedChild = cloneAndReplaceKey(
24176
+ mappedChild,
24177
+ // Keep both the (mapped) and old keys if they differ, just as
24178
+ // traverseAllChildren used to do for objects as children
24179
+ keyPrefix +
24180
+ (mappedChild.key && (!child || child.key !== mappedChild.key)
24181
+ ? escapeUserProvidedKey(mappedChild.key) + '/'
24182
+ : '') +
24183
+ childKey
24184
+ );
24185
+ }
24186
+ result.push(mappedChild);
24187
+ }
24188
+ }
23874
24189
 
23875
- /**
23876
- * We used to allow keyed objects to serve as a collection of ReactElements,
23877
- * or nested sets. This allowed us a way to explicitly key a set or fragment of
23878
- * components. This is now being replaced with an opaque data structure.
23879
- * The upgrade path is to call React.addons.createFragment({ key: value }) to
23880
- * create a keyed fragment. The resulting data structure is an array.
23881
- */
24190
+ function mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {
24191
+ var escapedPrefix = '';
24192
+ if (prefix != null) {
24193
+ escapedPrefix = escapeUserProvidedKey(prefix) + '/';
24194
+ }
24195
+ var traverseContext = MapBookKeeping.getPooled(
24196
+ array,
24197
+ escapedPrefix,
24198
+ func,
24199
+ context
24200
+ );
24201
+ traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);
24202
+ MapBookKeeping.release(traverseContext);
24203
+ }
23882
24204
 
23883
24205
  var numericPropertyRegex = /^\d+$/;
23884
24206
 
23885
24207
  var warnedAboutNumeric = false;
23886
24208
 
23887
- var ReactFragment = {
23888
- /**
23889
- * Wrap a keyed object in an opaque proxy that warns you if you access any
23890
- * of its properties.
23891
- * See https://facebook.github.io/react/docs/create-fragment.html
23892
- */
23893
- create: function (object) {
23894
- if (typeof object !== 'object' || !object || Array.isArray(object)) {
23895
- process.env.NODE_ENV !== 'production' ? warning(false, 'React.addons.createFragment only accepts a single object. Got: %s', object) : void 0;
23896
- return object;
23897
- }
23898
- if (ReactElement.isValidElement(object)) {
23899
- process.env.NODE_ENV !== 'production' ? warning(false, 'React.addons.createFragment does not accept a ReactElement ' + 'without a wrapper object.') : void 0;
23900
- return object;
23901
- }
23902
-
23903
- !(object.nodeType !== 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'React.addons.createFragment(...): Encountered an invalid child; DOM elements are not valid children of React components.') : _prodInvariant('0') : void 0;
24209
+ function createReactFragment(object) {
24210
+ if (typeof object !== 'object' || !object || Array.isArray(object)) {
24211
+ warning(
24212
+ false,
24213
+ 'React.addons.createFragment only accepts a single object. Got: %s',
24214
+ object
24215
+ );
24216
+ return object;
24217
+ }
24218
+ if (React.isValidElement(object)) {
24219
+ warning(
24220
+ false,
24221
+ 'React.addons.createFragment does not accept a ReactElement ' +
24222
+ 'without a wrapper object.'
24223
+ );
24224
+ return object;
24225
+ }
23904
24226
 
23905
- var result = [];
24227
+ invariant(
24228
+ object.nodeType !== 1,
24229
+ 'React.addons.createFragment(...): Encountered an invalid child; DOM ' +
24230
+ 'elements are not valid children of React components.'
24231
+ );
23906
24232
 
23907
- for (var key in object) {
23908
- if (process.env.NODE_ENV !== 'production') {
23909
- if (!warnedAboutNumeric && numericPropertyRegex.test(key)) {
23910
- process.env.NODE_ENV !== 'production' ? warning(false, 'React.addons.createFragment(...): Child objects should have ' + 'non-numeric keys so ordering is preserved.') : void 0;
23911
- warnedAboutNumeric = true;
23912
- }
23913
- }
23914
- ReactChildren.mapIntoWithKeyPrefixInternal(object[key], result, key, emptyFunction.thatReturnsArgument);
23915
- }
24233
+ var result = [];
23916
24234
 
23917
- return result;
24235
+ for (var key in object) {
24236
+ if (process.env.NODE_ENV !== "production") {
24237
+ if (!warnedAboutNumeric && numericPropertyRegex.test(key)) {
24238
+ warning(
24239
+ false,
24240
+ 'React.addons.createFragment(...): Child objects should have ' +
24241
+ 'non-numeric keys so ordering is preserved.'
24242
+ );
24243
+ warnedAboutNumeric = true;
24244
+ }
24245
+ }
24246
+ mapIntoWithKeyPrefixInternal(
24247
+ object[key],
24248
+ result,
24249
+ key,
24250
+ emptyFunction.thatReturnsArgument
24251
+ );
23918
24252
  }
23919
- };
23920
24253
 
23921
- module.exports = ReactFragment;
23922
- /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))
24254
+ return result;
24255
+ }
23923
24256
 
23924
- /***/ },
23925
- /* 199 */
23926
- /***/ function(module, exports, __webpack_require__) {
24257
+ module.exports = createReactFragment;
23927
24258
 
23928
- module.exports = __webpack_require__(200);
24259
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))
23929
24260
 
23930
24261
  /***/ },
23931
- /* 200 */
24262
+ /* 195 */
23932
24263
  /***/ function(module, exports, __webpack_require__) {
23933
24264
 
23934
24265
  /* WEBPACK VAR INJECTION */(function(process) {/**
@@ -23939,23 +24270,50 @@
23939
24270
  * LICENSE file in the root directory of this source tree. An additional grant
23940
24271
  * of patent rights can be found in the PATENTS file in the same directory.
23941
24272
  *
24273
+ * @providesModule update
23942
24274
  */
23943
24275
 
23944
- /* global hasOwnProperty:true */
24276
+ /* global hasOwnProperty:true */
23945
24277
 
23946
24278
  'use strict';
23947
24279
 
23948
- var _prodInvariant = __webpack_require__(7),
23949
- _assign = __webpack_require__(4);
24280
+ var NODE_ENV = process.env.NODE_ENV;
24281
+
24282
+ var invariant = function(condition, format, a, b, c, d, e, f) {
24283
+ if (NODE_ENV !== 'production') {
24284
+ if (format === undefined) {
24285
+ throw new Error('invariant requires an error message argument');
24286
+ }
24287
+ }
24288
+
24289
+ if (!condition) {
24290
+ var error;
24291
+ if (format === undefined) {
24292
+ error = new Error(
24293
+ 'Minified exception occurred; use the non-minified dev environment ' +
24294
+ 'for the full error message and additional helpful warnings.'
24295
+ );
24296
+ } else {
24297
+ var args = [a, b, c, d, e, f];
24298
+ var argIndex = 0;
24299
+ error = new Error(
24300
+ format.replace(/%s/g, function() { return args[argIndex++]; })
24301
+ );
24302
+ error.name = 'Invariant Violation';
24303
+ }
24304
+
24305
+ error.framesToPop = 1; // we don't care about invariant's own frame
24306
+ throw error;
24307
+ }
24308
+ };
23950
24309
 
23951
- var invariant = __webpack_require__(8);
23952
24310
  var hasOwnProperty = {}.hasOwnProperty;
23953
24311
 
23954
24312
  function shallowCopy(x) {
23955
24313
  if (Array.isArray(x)) {
23956
24314
  return x.concat();
23957
24315
  } else if (x && typeof x === 'object') {
23958
- return _assign(new x.constructor(), x);
24316
+ return Object.assign(new x.constructor(), x);
23959
24317
  } else {
23960
24318
  return x;
23961
24319
  }
@@ -23968,18 +24326,36 @@
23968
24326
  var COMMAND_MERGE = '$merge';
23969
24327
  var COMMAND_APPLY = '$apply';
23970
24328
 
23971
- var ALL_COMMANDS_LIST = [COMMAND_PUSH, COMMAND_UNSHIFT, COMMAND_SPLICE, COMMAND_SET, COMMAND_MERGE, COMMAND_APPLY];
24329
+ var ALL_COMMANDS_LIST = [
24330
+ COMMAND_PUSH,
24331
+ COMMAND_UNSHIFT,
24332
+ COMMAND_SPLICE,
24333
+ COMMAND_SET,
24334
+ COMMAND_MERGE,
24335
+ COMMAND_APPLY,
24336
+ ];
23972
24337
 
23973
24338
  var ALL_COMMANDS_SET = {};
23974
24339
 
23975
- ALL_COMMANDS_LIST.forEach(function (command) {
24340
+ ALL_COMMANDS_LIST.forEach(function(command) {
23976
24341
  ALL_COMMANDS_SET[command] = true;
23977
24342
  });
23978
24343
 
23979
24344
  function invariantArrayCase(value, spec, command) {
23980
- !Array.isArray(value) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'update(): expected target of %s to be an array; got %s.', command, value) : _prodInvariant('1', command, value) : void 0;
24345
+ invariant(
24346
+ Array.isArray(value),
24347
+ 'update(): expected target of %s to be an array; got %s.',
24348
+ command,
24349
+ value
24350
+ );
23981
24351
  var specValue = spec[command];
23982
- !Array.isArray(specValue) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'update(): expected spec of %s to be an array; got %s. Did you forget to wrap your parameter in an array?', command, specValue) : _prodInvariant('2', command, specValue) : void 0;
24352
+ invariant(
24353
+ Array.isArray(specValue),
24354
+ 'update(): expected spec of %s to be an array; got %s. ' +
24355
+ 'Did you forget to wrap your parameter in an array?',
24356
+ command,
24357
+ specValue
24358
+ );
23983
24359
  }
23984
24360
 
23985
24361
  /**
@@ -23987,10 +24363,20 @@
23987
24363
  * See https://facebook.github.io/react/docs/update.html for details.
23988
24364
  */
23989
24365
  function update(value, spec) {
23990
- !(typeof spec === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'update(): You provided a key path to update() that did not contain one of %s. Did you forget to include {%s: ...}?', ALL_COMMANDS_LIST.join(', '), COMMAND_SET) : _prodInvariant('3', ALL_COMMANDS_LIST.join(', '), COMMAND_SET) : void 0;
24366
+ invariant(
24367
+ typeof spec === 'object',
24368
+ 'update(): You provided a key path to update() that did not contain one ' +
24369
+ 'of %s. Did you forget to include {%s: ...}?',
24370
+ ALL_COMMANDS_LIST.join(', '),
24371
+ COMMAND_SET
24372
+ );
23991
24373
 
23992
24374
  if (hasOwnProperty.call(spec, COMMAND_SET)) {
23993
- !(Object.keys(spec).length === 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot have more than one key in an object with %s', COMMAND_SET) : _prodInvariant('4', COMMAND_SET) : void 0;
24375
+ invariant(
24376
+ Object.keys(spec).length === 1,
24377
+ 'Cannot have more than one key in an object with %s',
24378
+ COMMAND_SET
24379
+ );
23994
24380
 
23995
24381
  return spec[COMMAND_SET];
23996
24382
  }
@@ -23999,36 +24385,68 @@
23999
24385
 
24000
24386
  if (hasOwnProperty.call(spec, COMMAND_MERGE)) {
24001
24387
  var mergeObj = spec[COMMAND_MERGE];
24002
- !(mergeObj && typeof mergeObj === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'update(): %s expects a spec of type \'object\'; got %s', COMMAND_MERGE, mergeObj) : _prodInvariant('5', COMMAND_MERGE, mergeObj) : void 0;
24003
- !(nextValue && typeof nextValue === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'update(): %s expects a target of type \'object\'; got %s', COMMAND_MERGE, nextValue) : _prodInvariant('6', COMMAND_MERGE, nextValue) : void 0;
24004
- _assign(nextValue, spec[COMMAND_MERGE]);
24388
+ invariant(
24389
+ mergeObj && typeof mergeObj === 'object',
24390
+ 'update(): %s expects a spec of type \'object\'; got %s',
24391
+ COMMAND_MERGE,
24392
+ mergeObj
24393
+ );
24394
+ invariant(
24395
+ nextValue && typeof nextValue === 'object',
24396
+ 'update(): %s expects a target of type \'object\'; got %s',
24397
+ COMMAND_MERGE,
24398
+ nextValue
24399
+ );
24400
+ Object.assign(nextValue, spec[COMMAND_MERGE]);
24005
24401
  }
24006
24402
 
24007
24403
  if (hasOwnProperty.call(spec, COMMAND_PUSH)) {
24008
24404
  invariantArrayCase(value, spec, COMMAND_PUSH);
24009
- spec[COMMAND_PUSH].forEach(function (item) {
24405
+ spec[COMMAND_PUSH].forEach(function(item) {
24010
24406
  nextValue.push(item);
24011
24407
  });
24012
24408
  }
24013
24409
 
24014
24410
  if (hasOwnProperty.call(spec, COMMAND_UNSHIFT)) {
24015
24411
  invariantArrayCase(value, spec, COMMAND_UNSHIFT);
24016
- spec[COMMAND_UNSHIFT].forEach(function (item) {
24412
+ spec[COMMAND_UNSHIFT].forEach(function(item) {
24017
24413
  nextValue.unshift(item);
24018
24414
  });
24019
24415
  }
24020
24416
 
24021
24417
  if (hasOwnProperty.call(spec, COMMAND_SPLICE)) {
24022
- !Array.isArray(value) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected %s target to be an array; got %s', COMMAND_SPLICE, value) : _prodInvariant('7', COMMAND_SPLICE, value) : void 0;
24023
- !Array.isArray(spec[COMMAND_SPLICE]) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'update(): expected spec of %s to be an array of arrays; got %s. Did you forget to wrap your parameters in an array?', COMMAND_SPLICE, spec[COMMAND_SPLICE]) : _prodInvariant('8', COMMAND_SPLICE, spec[COMMAND_SPLICE]) : void 0;
24024
- spec[COMMAND_SPLICE].forEach(function (args) {
24025
- !Array.isArray(args) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'update(): expected spec of %s to be an array of arrays; got %s. Did you forget to wrap your parameters in an array?', COMMAND_SPLICE, spec[COMMAND_SPLICE]) : _prodInvariant('8', COMMAND_SPLICE, spec[COMMAND_SPLICE]) : void 0;
24418
+ invariant(
24419
+ Array.isArray(value),
24420
+ 'Expected %s target to be an array; got %s',
24421
+ COMMAND_SPLICE,
24422
+ value
24423
+ );
24424
+ invariant(
24425
+ Array.isArray(spec[COMMAND_SPLICE]),
24426
+ 'update(): expected spec of %s to be an array of arrays; got %s. ' +
24427
+ 'Did you forget to wrap your parameters in an array?',
24428
+ COMMAND_SPLICE,
24429
+ spec[COMMAND_SPLICE]
24430
+ );
24431
+ spec[COMMAND_SPLICE].forEach(function(args) {
24432
+ invariant(
24433
+ Array.isArray(args),
24434
+ 'update(): expected spec of %s to be an array of arrays; got %s. ' +
24435
+ 'Did you forget to wrap your parameters in an array?',
24436
+ COMMAND_SPLICE,
24437
+ spec[COMMAND_SPLICE]
24438
+ );
24026
24439
  nextValue.splice.apply(nextValue, args);
24027
24440
  });
24028
24441
  }
24029
24442
 
24030
24443
  if (hasOwnProperty.call(spec, COMMAND_APPLY)) {
24031
- !(typeof spec[COMMAND_APPLY] === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'update(): expected spec of %s to be a function; got %s.', COMMAND_APPLY, spec[COMMAND_APPLY]) : _prodInvariant('9', COMMAND_APPLY, spec[COMMAND_APPLY]) : void 0;
24444
+ invariant(
24445
+ typeof spec[COMMAND_APPLY] === 'function',
24446
+ 'update(): expected spec of %s to be a function; got %s.',
24447
+ COMMAND_APPLY,
24448
+ spec[COMMAND_APPLY]
24449
+ );
24032
24450
  nextValue = spec[COMMAND_APPLY](nextValue);
24033
24451
  }
24034
24452
 
@@ -24042,72 +24460,15 @@
24042
24460
  }
24043
24461
 
24044
24462
  module.exports = update;
24045
- /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))
24046
-
24047
- /***/ },
24048
- /* 201 */
24049
- /***/ function(module, exports, __webpack_require__) {
24050
-
24051
- module.exports = __webpack_require__(202);
24052
-
24053
- /***/ },
24054
- /* 202 */
24055
- /***/ function(module, exports, __webpack_require__) {
24056
-
24057
- /**
24058
- * Copyright 2013-present, Facebook, Inc.
24059
- * All rights reserved.
24060
- *
24061
- * This source code is licensed under the BSD-style license found in the
24062
- * LICENSE file in the root directory of this source tree. An additional grant
24063
- * of patent rights can be found in the PATENTS file in the same directory.
24064
- *
24065
- */
24066
-
24067
- 'use strict';
24068
-
24069
- var shallowCompare = __webpack_require__(203);
24070
24463
 
24071
- /**
24072
- * If your React component's render function is "pure", e.g. it will render the
24073
- * same result given the same props and state, provide this mixin for a
24074
- * considerable performance boost.
24075
- *
24076
- * Most React components have pure render functions.
24077
- *
24078
- * Example:
24079
- *
24080
- * var ReactComponentWithPureRenderMixin =
24081
- * require('ReactComponentWithPureRenderMixin');
24082
- * React.createClass({
24083
- * mixins: [ReactComponentWithPureRenderMixin],
24084
- *
24085
- * render: function() {
24086
- * return <div className={this.props.className}>foo</div>;
24087
- * }
24088
- * });
24089
- *
24090
- * Note: This only checks shallow equality for props and state. If these contain
24091
- * complex data structures this mixin may have false-negatives for deeper
24092
- * differences. Only mixin to components which have simple props and state, or
24093
- * use `forceUpdate()` when you know deep data structures have changed.
24094
- *
24095
- * See https://facebook.github.io/react/docs/pure-render-mixin.html
24096
- */
24097
- var ReactComponentWithPureRenderMixin = {
24098
- shouldComponentUpdate: function (nextProps, nextState) {
24099
- return shallowCompare(this, nextProps, nextState);
24100
- }
24101
- };
24102
-
24103
- module.exports = ReactComponentWithPureRenderMixin;
24464
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))
24104
24465
 
24105
24466
  /***/ },
24106
- /* 203 */
24467
+ /* 196 */
24107
24468
  /***/ function(module, exports, __webpack_require__) {
24108
24469
 
24109
24470
  /**
24110
- * Copyright 2013-present, Facebook, Inc.
24471
+ * Copyright 2015-present, Facebook, Inc.
24111
24472
  * All rights reserved.
24112
24473
  *
24113
24474
  * This source code is licensed under the BSD-style license found in the
@@ -24120,40 +24481,39 @@
24120
24481
 
24121
24482
  var shallowEqual = __webpack_require__(123);
24122
24483
 
24123
- /**
24124
- * Does a shallow comparison for props and state.
24125
- * See ReactComponentWithPureRenderMixin
24126
- * See also https://facebook.github.io/react/docs/shallow-compare.html
24127
- */
24128
- function shallowCompare(instance, nextProps, nextState) {
24129
- return !shallowEqual(instance.props, nextProps) || !shallowEqual(instance.state, nextState);
24130
- }
24484
+ module.exports = {
24485
+ shouldComponentUpdate: function(nextProps, nextState) {
24486
+ return (
24487
+ !shallowEqual(this.props, nextProps) ||
24488
+ !shallowEqual(this.state, nextState)
24489
+ );
24490
+ },
24491
+ };
24131
24492
 
24132
- module.exports = shallowCompare;
24133
24493
 
24134
24494
  /***/ },
24135
- /* 204 */
24495
+ /* 197 */
24136
24496
  /***/ function(module, exports, __webpack_require__) {
24137
24497
 
24138
- module.exports = __webpack_require__(183);
24498
+ module.exports = __webpack_require__(188);
24139
24499
 
24140
24500
  /***/ },
24141
- /* 205 */
24501
+ /* 198 */
24142
24502
  /***/ function(module, exports, __webpack_require__) {
24143
24503
 
24144
- module.exports = __webpack_require__(182);
24504
+ module.exports = __webpack_require__(187);
24145
24505
 
24146
24506
  /***/ },
24147
- /* 206 */
24507
+ /* 199 */
24148
24508
  /***/ function(module, exports, __webpack_require__) {
24149
24509
 
24150
24510
  'use strict';
24151
24511
 
24152
- module.exports = __webpack_require__(207);
24512
+ module.exports = __webpack_require__(200);
24153
24513
 
24154
24514
 
24155
24515
  /***/ },
24156
- /* 207 */
24516
+ /* 200 */
24157
24517
  /***/ function(module, exports, __webpack_require__) {
24158
24518
 
24159
24519
  /**
@@ -24169,7 +24529,7 @@
24169
24529
  'use strict';
24170
24530
 
24171
24531
  var ReactDefaultInjection = __webpack_require__(38);
24172
- var ReactServerRendering = __webpack_require__(208);
24532
+ var ReactServerRendering = __webpack_require__(201);
24173
24533
  var ReactVersion = __webpack_require__(171);
24174
24534
 
24175
24535
  ReactDefaultInjection.inject();
@@ -24183,7 +24543,7 @@
24183
24543
  module.exports = ReactDOMServer;
24184
24544
 
24185
24545
  /***/ },
24186
- /* 208 */
24546
+ /* 201 */
24187
24547
  /***/ function(module, exports, __webpack_require__) {
24188
24548
 
24189
24549
  /* WEBPACK VAR INJECTION */(function(process) {/**
@@ -24205,7 +24565,7 @@
24205
24565
  var ReactInstrumentation = __webpack_require__(62);
24206
24566
  var ReactMarkupChecksum = __webpack_require__(169);
24207
24567
  var ReactReconciler = __webpack_require__(59);
24208
- var ReactServerBatchingStrategy = __webpack_require__(209);
24568
+ var ReactServerBatchingStrategy = __webpack_require__(202);
24209
24569
  var ReactServerRenderingTransaction = __webpack_require__(133);
24210
24570
  var ReactUpdates = __webpack_require__(56);
24211
24571
 
@@ -24278,7 +24638,7 @@
24278
24638
  /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))
24279
24639
 
24280
24640
  /***/ },
24281
- /* 209 */
24641
+ /* 202 */
24282
24642
  /***/ function(module, exports) {
24283
24643
 
24284
24644
  /**