react 15.0.3-alpha.2 → 15.1.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dist/react-with-addons.js +1494 -928
  2. package/dist/react-with-addons.min.js +6 -6
  3. package/dist/react.js +1463 -1344
  4. package/dist/react.min.js +6 -6
  5. package/lib/CSSPropertyOperations.js +5 -5
  6. package/lib/DOMChildrenOperations.js +34 -6
  7. package/lib/DOMLazyTree.js +6 -1
  8. package/lib/DOMPropertyOperations.js +22 -13
  9. package/lib/LinkedStateMixin.js +1 -0
  10. package/lib/ReactCSSTransitionGroup.js +5 -0
  11. package/lib/ReactChildren.js +9 -1
  12. package/lib/ReactClass.js +1 -0
  13. package/lib/ReactComponentBrowserEnvironment.js +0 -5
  14. package/lib/ReactComponentTreeDevtool.js +140 -0
  15. package/lib/ReactComponentWithPureRenderMixin.js +2 -0
  16. package/lib/ReactCompositeComponent.js +147 -18
  17. package/lib/ReactDOM.js +1 -4
  18. package/lib/ReactDOMComponent.js +46 -6
  19. package/lib/ReactDOMIDOperations.js +0 -5
  20. package/lib/ReactDOMInput.js +4 -2
  21. package/lib/ReactDOMTextComponent.js +7 -6
  22. package/lib/ReactDebugTool.js +162 -10
  23. package/lib/ReactDefaultInjection.js +0 -9
  24. package/lib/ReactElement.js +26 -0
  25. package/lib/ReactErrorUtils.js +65 -15
  26. package/lib/ReactFragment.js +5 -2
  27. package/lib/ReactInjection.js +0 -2
  28. package/lib/ReactLink.js +3 -0
  29. package/lib/ReactMount.js +19 -7
  30. package/lib/ReactMultiChild.js +21 -0
  31. package/lib/ReactNativeDOMIDOperations.js +3 -6
  32. package/lib/ReactNativeMount.js +18 -7
  33. package/lib/ReactNativeOperationHistoryDevtool.js +32 -0
  34. package/lib/ReactNativeTextComponent.js +8 -0
  35. package/lib/ReactPerf.js +397 -75
  36. package/lib/ReactReconciler.js +46 -5
  37. package/lib/ReactServerRendering.js +16 -1
  38. package/lib/ReactTestUtils.js +4 -0
  39. package/lib/ReactTransitionGroup.js +5 -0
  40. package/lib/ReactUpdates.js +21 -3
  41. package/lib/ReactVersion.js +1 -1
  42. package/lib/ReactWithAddons.js +1 -1
  43. package/lib/findDOMNode.js +2 -0
  44. package/lib/instantiateReactComponent.js +32 -1
  45. package/lib/onlyChild.js +7 -4
  46. package/lib/shallowCompare.js +1 -0
  47. package/lib/update.js +4 -0
  48. package/package.json +1 -1
  49. package/lib/ReactDebugInstanceMap.js +0 -102
  50. package/lib/ReactDefaultPerf.js +0 -316
  51. package/lib/ReactDefaultPerfAnalysis.js +0 -210
@@ -1,5 +1,5 @@
1
1
  /**
2
- * React (with addons) v15.0.3-alpha.2
2
+ * React (with addons) v15.1.0-alpha.1
3
3
  */
4
4
  (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.React = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
5
5
  /**
@@ -15,7 +15,7 @@
15
15
 
16
16
  'use strict';
17
17
 
18
- var ReactDOMComponentTree = _dereq_(44);
18
+ var ReactDOMComponentTree = _dereq_(45);
19
19
 
20
20
  var focusNode = _dereq_(167);
21
21
 
@@ -26,7 +26,7 @@ var AutoFocusUtils = {
26
26
  };
27
27
 
28
28
  module.exports = AutoFocusUtils;
29
- },{"167":167,"44":44}],2:[function(_dereq_,module,exports){
29
+ },{"167":167,"45":45}],2:[function(_dereq_,module,exports){
30
30
  /**
31
31
  * Copyright 2013-present Facebook, Inc.
32
32
  * All rights reserved.
@@ -580,7 +580,7 @@ module.exports = CSSProperty;
580
580
 
581
581
  var CSSProperty = _dereq_(3);
582
582
  var ExecutionEnvironment = _dereq_(159);
583
- var ReactPerf = _dereq_(88);
583
+ var ReactInstrumentation = _dereq_(76);
584
584
 
585
585
  var camelizeStyleName = _dereq_(161);
586
586
  var dangerousStyleValue = _dereq_(130);
@@ -734,6 +734,10 @@ var CSSPropertyOperations = {
734
734
  * @param {ReactDOMComponent} component
735
735
  */
736
736
  setValueForStyles: function (node, styles, component) {
737
+ if ("development" !== 'production') {
738
+ ReactInstrumentation.debugTool.onNativeOperation(component._debugID, 'update styles', styles);
739
+ }
740
+
737
741
  var style = node.style;
738
742
  for (var styleName in styles) {
739
743
  if (!styles.hasOwnProperty(styleName)) {
@@ -765,12 +769,8 @@ var CSSPropertyOperations = {
765
769
 
766
770
  };
767
771
 
768
- ReactPerf.measureMethods(CSSPropertyOperations, 'CSSPropertyOperations', {
769
- setValueForStyles: 'setValueForStyles'
770
- });
771
-
772
772
  module.exports = CSSPropertyOperations;
773
- },{"130":130,"159":159,"161":161,"172":172,"179":179,"183":183,"3":3,"88":88}],5:[function(_dereq_,module,exports){
773
+ },{"130":130,"159":159,"161":161,"172":172,"179":179,"183":183,"3":3,"76":76}],5:[function(_dereq_,module,exports){
774
774
  /**
775
775
  * Copyright 2013-present, Facebook, Inc.
776
776
  * All rights reserved.
@@ -894,7 +894,7 @@ var EventConstants = _dereq_(16);
894
894
  var EventPluginHub = _dereq_(17);
895
895
  var EventPropagators = _dereq_(20);
896
896
  var ExecutionEnvironment = _dereq_(159);
897
- var ReactDOMComponentTree = _dereq_(44);
897
+ var ReactDOMComponentTree = _dereq_(45);
898
898
  var ReactUpdates = _dereq_(104);
899
899
  var SyntheticEvent = _dereq_(115);
900
900
 
@@ -1202,7 +1202,7 @@ var ChangeEventPlugin = {
1202
1202
  };
1203
1203
 
1204
1204
  module.exports = ChangeEventPlugin;
1205
- },{"104":104,"115":115,"138":138,"145":145,"146":146,"159":159,"16":16,"17":17,"177":177,"20":20,"44":44}],7:[function(_dereq_,module,exports){
1205
+ },{"104":104,"115":115,"138":138,"145":145,"146":146,"159":159,"16":16,"17":17,"177":177,"20":20,"45":45}],7:[function(_dereq_,module,exports){
1206
1206
  /**
1207
1207
  * Copyright 2013-present, Facebook, Inc.
1208
1208
  * All rights reserved.
@@ -1218,8 +1218,9 @@ module.exports = ChangeEventPlugin;
1218
1218
 
1219
1219
  var DOMLazyTree = _dereq_(8);
1220
1220
  var Danger = _dereq_(12);
1221
- var ReactMultiChildUpdateTypes = _dereq_(83);
1222
- var ReactPerf = _dereq_(88);
1221
+ var ReactMultiChildUpdateTypes = _dereq_(82);
1222
+ var ReactDOMComponentTree = _dereq_(45);
1223
+ var ReactInstrumentation = _dereq_(76);
1223
1224
 
1224
1225
  var createMicrosoftUnsafeLocalFunction = _dereq_(129);
1225
1226
  var setInnerHTML = _dereq_(150);
@@ -1314,6 +1315,18 @@ function replaceDelimitedText(openingComment, closingComment, stringText) {
1314
1315
  removeDelimitedText(parentNode, openingComment, closingComment);
1315
1316
  }
1316
1317
  }
1318
+
1319
+ if ("development" !== 'production') {
1320
+ ReactInstrumentation.debugTool.onNativeOperation(ReactDOMComponentTree.getInstanceFromNode(openingComment)._debugID, 'replace text', stringText);
1321
+ }
1322
+ }
1323
+
1324
+ var dangerouslyReplaceNodeWithMarkup = Danger.dangerouslyReplaceNodeWithMarkup;
1325
+ if ("development" !== 'production') {
1326
+ dangerouslyReplaceNodeWithMarkup = function (oldChild, markup, prevInstance) {
1327
+ Danger.dangerouslyReplaceNodeWithMarkup(oldChild, markup);
1328
+ ReactInstrumentation.debugTool.onNativeOperation(prevInstance._debugID, 'replace with', markup.toString());
1329
+ };
1317
1330
  }
1318
1331
 
1319
1332
  /**
@@ -1321,7 +1334,7 @@ function replaceDelimitedText(openingComment, closingComment, stringText) {
1321
1334
  */
1322
1335
  var DOMChildrenOperations = {
1323
1336
 
1324
- dangerouslyReplaceNodeWithMarkup: Danger.dangerouslyReplaceNodeWithMarkup,
1337
+ dangerouslyReplaceNodeWithMarkup: dangerouslyReplaceNodeWithMarkup,
1325
1338
 
1326
1339
  replaceDelimitedText: replaceDelimitedText,
1327
1340
 
@@ -1333,23 +1346,42 @@ var DOMChildrenOperations = {
1333
1346
  * @internal
1334
1347
  */
1335
1348
  processUpdates: function (parentNode, updates) {
1349
+ if ("development" !== 'production') {
1350
+ var parentNodeDebugID = ReactDOMComponentTree.getInstanceFromNode(parentNode)._debugID;
1351
+ }
1352
+
1336
1353
  for (var k = 0; k < updates.length; k++) {
1337
1354
  var update = updates[k];
1338
1355
  switch (update.type) {
1339
1356
  case ReactMultiChildUpdateTypes.INSERT_MARKUP:
1340
1357
  insertLazyTreeChildAt(parentNode, update.content, getNodeAfter(parentNode, update.afterNode));
1358
+ if ("development" !== 'production') {
1359
+ ReactInstrumentation.debugTool.onNativeOperation(parentNodeDebugID, 'insert child', { toIndex: update.toIndex, content: update.content.toString() });
1360
+ }
1341
1361
  break;
1342
1362
  case ReactMultiChildUpdateTypes.MOVE_EXISTING:
1343
1363
  moveChild(parentNode, update.fromNode, getNodeAfter(parentNode, update.afterNode));
1364
+ if ("development" !== 'production') {
1365
+ ReactInstrumentation.debugTool.onNativeOperation(parentNodeDebugID, 'move child', { fromIndex: update.fromIndex, toIndex: update.toIndex });
1366
+ }
1344
1367
  break;
1345
1368
  case ReactMultiChildUpdateTypes.SET_MARKUP:
1346
1369
  setInnerHTML(parentNode, update.content);
1370
+ if ("development" !== 'production') {
1371
+ ReactInstrumentation.debugTool.onNativeOperation(parentNodeDebugID, 'replace children', update.content.toString());
1372
+ }
1347
1373
  break;
1348
1374
  case ReactMultiChildUpdateTypes.TEXT_CONTENT:
1349
1375
  setTextContent(parentNode, update.content);
1376
+ if ("development" !== 'production') {
1377
+ ReactInstrumentation.debugTool.onNativeOperation(parentNodeDebugID, 'replace text', update.content.toString());
1378
+ }
1350
1379
  break;
1351
1380
  case ReactMultiChildUpdateTypes.REMOVE_NODE:
1352
1381
  removeChild(parentNode, update.fromNode);
1382
+ if ("development" !== 'production') {
1383
+ ReactInstrumentation.debugTool.onNativeOperation(parentNodeDebugID, 'remove child', { fromIndex: update.fromIndex });
1384
+ }
1353
1385
  break;
1354
1386
  }
1355
1387
  }
@@ -1357,12 +1389,8 @@ var DOMChildrenOperations = {
1357
1389
 
1358
1390
  };
1359
1391
 
1360
- ReactPerf.measureMethods(DOMChildrenOperations, 'DOMChildrenOperations', {
1361
- replaceDelimitedText: 'replaceDelimitedText'
1362
- });
1363
-
1364
1392
  module.exports = DOMChildrenOperations;
1365
- },{"12":12,"129":129,"150":150,"151":151,"8":8,"83":83,"88":88}],8:[function(_dereq_,module,exports){
1393
+ },{"12":12,"129":129,"150":150,"151":151,"45":45,"76":76,"8":8,"82":82}],8:[function(_dereq_,module,exports){
1366
1394
  /**
1367
1395
  * Copyright 2015-present, Facebook, Inc.
1368
1396
  * All rights reserved.
@@ -1459,12 +1487,17 @@ function queueText(tree, text) {
1459
1487
  }
1460
1488
  }
1461
1489
 
1490
+ function toString() {
1491
+ return this.node.nodeName;
1492
+ }
1493
+
1462
1494
  function DOMLazyTree(node) {
1463
1495
  return {
1464
1496
  node: node,
1465
1497
  children: [],
1466
1498
  html: null,
1467
- text: null
1499
+ text: null,
1500
+ toString: toString
1468
1501
  };
1469
1502
  }
1470
1503
 
@@ -1725,8 +1758,9 @@ module.exports = DOMProperty;
1725
1758
  'use strict';
1726
1759
 
1727
1760
  var DOMProperty = _dereq_(10);
1728
- var ReactDOMInstrumentation = _dereq_(52);
1729
- var ReactPerf = _dereq_(88);
1761
+ var ReactDOMComponentTree = _dereq_(45);
1762
+ var ReactDOMInstrumentation = _dereq_(53);
1763
+ var ReactInstrumentation = _dereq_(76);
1730
1764
 
1731
1765
  var quoteAttributeValueForBrowser = _dereq_(148);
1732
1766
  var warning = _dereq_(183);
@@ -1834,9 +1868,6 @@ var DOMPropertyOperations = {
1834
1868
  * @param {*} value
1835
1869
  */
1836
1870
  setValueForProperty: function (node, name, value) {
1837
- if ("development" !== 'production') {
1838
- ReactDOMInstrumentation.debugTool.onSetValueForProperty(node, name, value);
1839
- }
1840
1871
  var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;
1841
1872
  if (propertyInfo) {
1842
1873
  var mutationMethod = propertyInfo.mutationMethod;
@@ -1844,6 +1875,7 @@ var DOMPropertyOperations = {
1844
1875
  mutationMethod(node, value);
1845
1876
  } else if (shouldIgnoreValue(propertyInfo, value)) {
1846
1877
  this.deleteValueForProperty(node, name);
1878
+ return;
1847
1879
  } else if (propertyInfo.mustUseProperty) {
1848
1880
  var propName = propertyInfo.propertyName;
1849
1881
  // Must explicitly cast values for HAS_SIDE_EFFECTS-properties to the
@@ -1868,6 +1900,14 @@ var DOMPropertyOperations = {
1868
1900
  }
1869
1901
  } else if (DOMProperty.isCustomAttribute(name)) {
1870
1902
  DOMPropertyOperations.setValueForAttribute(node, name, value);
1903
+ return;
1904
+ }
1905
+
1906
+ if ("development" !== 'production') {
1907
+ ReactDOMInstrumentation.debugTool.onSetValueForProperty(node, name, value);
1908
+ var payload = {};
1909
+ payload[name] = value;
1910
+ ReactInstrumentation.debugTool.onNativeOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'update attribute', payload);
1871
1911
  }
1872
1912
  },
1873
1913
 
@@ -1880,6 +1920,12 @@ var DOMPropertyOperations = {
1880
1920
  } else {
1881
1921
  node.setAttribute(name, '' + value);
1882
1922
  }
1923
+
1924
+ if ("development" !== 'production') {
1925
+ var payload = {};
1926
+ payload[name] = value;
1927
+ ReactInstrumentation.debugTool.onNativeOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'update attribute', payload);
1928
+ }
1883
1929
  },
1884
1930
 
1885
1931
  /**
@@ -1889,9 +1935,6 @@ var DOMPropertyOperations = {
1889
1935
  * @param {string} name
1890
1936
  */
1891
1937
  deleteValueForProperty: function (node, name) {
1892
- if ("development" !== 'production') {
1893
- ReactDOMInstrumentation.debugTool.onDeleteValueForProperty(node, name);
1894
- }
1895
1938
  var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;
1896
1939
  if (propertyInfo) {
1897
1940
  var mutationMethod = propertyInfo.mutationMethod;
@@ -1913,18 +1956,17 @@ var DOMPropertyOperations = {
1913
1956
  } else if (DOMProperty.isCustomAttribute(name)) {
1914
1957
  node.removeAttribute(name);
1915
1958
  }
1959
+
1960
+ if ("development" !== 'production') {
1961
+ ReactDOMInstrumentation.debugTool.onDeleteValueForProperty(node, name);
1962
+ ReactInstrumentation.debugTool.onNativeOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'remove attribute', name);
1963
+ }
1916
1964
  }
1917
1965
 
1918
1966
  };
1919
1967
 
1920
- ReactPerf.measureMethods(DOMPropertyOperations, 'DOMPropertyOperations', {
1921
- setValueForProperty: 'setValueForProperty',
1922
- setValueForAttribute: 'setValueForAttribute',
1923
- deleteValueForProperty: 'deleteValueForProperty'
1924
- });
1925
-
1926
1968
  module.exports = DOMPropertyOperations;
1927
- },{"10":10,"148":148,"183":183,"52":52,"88":88}],12:[function(_dereq_,module,exports){
1969
+ },{"10":10,"148":148,"183":183,"45":45,"53":53,"76":76}],12:[function(_dereq_,module,exports){
1928
1970
  /**
1929
1971
  * Copyright 2013-present, Facebook, Inc.
1930
1972
  * All rights reserved.
@@ -2164,7 +2206,7 @@ module.exports = DisabledInputUtils;
2164
2206
 
2165
2207
  var EventConstants = _dereq_(16);
2166
2208
  var EventPropagators = _dereq_(20);
2167
- var ReactDOMComponentTree = _dereq_(44);
2209
+ var ReactDOMComponentTree = _dereq_(45);
2168
2210
  var SyntheticMouseEvent = _dereq_(119);
2169
2211
 
2170
2212
  var keyOf = _dereq_(177);
@@ -2254,7 +2296,7 @@ var EnterLeaveEventPlugin = {
2254
2296
  };
2255
2297
 
2256
2298
  module.exports = EnterLeaveEventPlugin;
2257
- },{"119":119,"16":16,"177":177,"20":20,"44":44}],16:[function(_dereq_,module,exports){
2299
+ },{"119":119,"16":16,"177":177,"20":20,"45":45}],16:[function(_dereq_,module,exports){
2258
2300
  /**
2259
2301
  * Copyright 2013-present, Facebook, Inc.
2260
2302
  * All rights reserved.
@@ -2368,7 +2410,7 @@ module.exports = EventConstants;
2368
2410
 
2369
2411
  var EventPluginRegistry = _dereq_(18);
2370
2412
  var EventPluginUtils = _dereq_(19);
2371
- var ReactErrorUtils = _dereq_(69);
2413
+ var ReactErrorUtils = _dereq_(68);
2372
2414
 
2373
2415
  var accumulateInto = _dereq_(126);
2374
2416
  var forEachAccumulated = _dereq_(134);
@@ -2588,7 +2630,7 @@ var EventPluginHub = {
2588
2630
  };
2589
2631
 
2590
2632
  module.exports = EventPluginHub;
2591
- },{"126":126,"134":134,"173":173,"18":18,"19":19,"69":69}],18:[function(_dereq_,module,exports){
2633
+ },{"126":126,"134":134,"173":173,"18":18,"19":19,"68":68}],18:[function(_dereq_,module,exports){
2592
2634
  /**
2593
2635
  * Copyright 2013-present, Facebook, Inc.
2594
2636
  * All rights reserved.
@@ -2845,7 +2887,7 @@ module.exports = EventPluginRegistry;
2845
2887
  'use strict';
2846
2888
 
2847
2889
  var EventConstants = _dereq_(16);
2848
- var ReactErrorUtils = _dereq_(69);
2890
+ var ReactErrorUtils = _dereq_(68);
2849
2891
 
2850
2892
  var invariant = _dereq_(173);
2851
2893
  var warning = _dereq_(183);
@@ -3058,7 +3100,7 @@ var EventPluginUtils = {
3058
3100
  };
3059
3101
 
3060
3102
  module.exports = EventPluginUtils;
3061
- },{"16":16,"173":173,"183":183,"69":69}],20:[function(_dereq_,module,exports){
3103
+ },{"16":16,"173":173,"183":183,"68":68}],20:[function(_dereq_,module,exports){
3062
3104
  /**
3063
3105
  * Copyright 2013-present, Facebook, Inc.
3064
3106
  * All rights reserved.
@@ -3575,11 +3617,12 @@ module.exports = KeyEscapeUtils;
3575
3617
 
3576
3618
  'use strict';
3577
3619
 
3578
- var ReactLink = _dereq_(79);
3620
+ var ReactLink = _dereq_(78);
3579
3621
  var ReactStateSetters = _dereq_(98);
3580
3622
 
3581
3623
  /**
3582
3624
  * A simple mixin around ReactLink.forState().
3625
+ * See https://facebook.github.io/react/docs/two-way-binding-helpers.html
3583
3626
  */
3584
3627
  var LinkedStateMixin = {
3585
3628
  /**
@@ -3597,7 +3640,7 @@ var LinkedStateMixin = {
3597
3640
  };
3598
3641
 
3599
3642
  module.exports = LinkedStateMixin;
3600
- },{"79":79,"98":98}],25:[function(_dereq_,module,exports){
3643
+ },{"78":78,"98":98}],25:[function(_dereq_,module,exports){
3601
3644
  /**
3602
3645
  * Copyright 2013-present, Facebook, Inc.
3603
3646
  * All rights reserved.
@@ -3870,9 +3913,9 @@ var _assign = _dereq_(184);
3870
3913
  var ReactChildren = _dereq_(32);
3871
3914
  var ReactComponent = _dereq_(34);
3872
3915
  var ReactClass = _dereq_(33);
3873
- var ReactDOMFactories = _dereq_(48);
3874
- var ReactElement = _dereq_(66);
3875
- var ReactElementValidator = _dereq_(67);
3916
+ var ReactDOMFactories = _dereq_(49);
3917
+ var ReactElement = _dereq_(65);
3918
+ var ReactElementValidator = _dereq_(66);
3876
3919
  var ReactPropTypes = _dereq_(91);
3877
3920
  var ReactVersion = _dereq_(105);
3878
3921
 
@@ -3939,7 +3982,7 @@ var React = {
3939
3982
  };
3940
3983
 
3941
3984
  module.exports = React;
3942
- },{"105":105,"147":147,"183":183,"184":184,"32":32,"33":33,"34":34,"48":48,"66":66,"67":67,"91":91}],28:[function(_dereq_,module,exports){
3985
+ },{"105":105,"147":147,"183":183,"184":184,"32":32,"33":33,"34":34,"49":49,"65":65,"66":66,"91":91}],28:[function(_dereq_,module,exports){
3943
3986
  /**
3944
3987
  * Copyright 2013-present, Facebook, Inc.
3945
3988
  * All rights reserved.
@@ -3957,7 +4000,7 @@ var _assign = _dereq_(184);
3957
4000
 
3958
4001
  var EventConstants = _dereq_(16);
3959
4002
  var EventPluginRegistry = _dereq_(18);
3960
- var ReactEventEmitterMixin = _dereq_(70);
4003
+ var ReactEventEmitterMixin = _dereq_(69);
3961
4004
  var ViewportMetrics = _dereq_(125);
3962
4005
 
3963
4006
  var getVendorPrefixedEventName = _dereq_(143);
@@ -4257,7 +4300,7 @@ var ReactBrowserEventEmitter = _assign({}, ReactEventEmitterMixin, {
4257
4300
  });
4258
4301
 
4259
4302
  module.exports = ReactBrowserEventEmitter;
4260
- },{"125":125,"143":143,"145":145,"16":16,"18":18,"184":184,"70":70}],29:[function(_dereq_,module,exports){
4303
+ },{"125":125,"143":143,"145":145,"16":16,"18":18,"184":184,"69":69}],29:[function(_dereq_,module,exports){
4261
4304
  /**
4262
4305
  * Copyright 2013-present, Facebook, Inc.
4263
4306
  * All rights reserved.
@@ -4297,6 +4340,11 @@ function createTransitionTimeoutPropValidator(transitionType) {
4297
4340
  };
4298
4341
  }
4299
4342
 
4343
+ /**
4344
+ * An easy way to perform CSS transitions and animations when a React component
4345
+ * enters or leaves the DOM.
4346
+ * See https://facebook.github.io/react/docs/animation.html#high-level-api-reactcsstransitiongroup
4347
+ */
4300
4348
  var ReactCSSTransitionGroup = React.createClass({
4301
4349
  displayName: 'ReactCSSTransitionGroup',
4302
4350
 
@@ -4355,7 +4403,7 @@ module.exports = ReactCSSTransitionGroup;
4355
4403
  'use strict';
4356
4404
 
4357
4405
  var React = _dereq_(27);
4358
- var ReactDOM = _dereq_(40);
4406
+ var ReactDOM = _dereq_(41);
4359
4407
 
4360
4408
  var CSSCore = _dereq_(157);
4361
4409
  var ReactTransitionEvents = _dereq_(101);
@@ -4501,7 +4549,7 @@ var ReactCSSTransitionGroupChild = React.createClass({
4501
4549
  });
4502
4550
 
4503
4551
  module.exports = ReactCSSTransitionGroupChild;
4504
- },{"101":101,"147":147,"157":157,"27":27,"40":40}],31:[function(_dereq_,module,exports){
4552
+ },{"101":101,"147":147,"157":157,"27":27,"41":41}],31:[function(_dereq_,module,exports){
4505
4553
  /**
4506
4554
  * Copyright 2014-present, Facebook, Inc.
4507
4555
  * All rights reserved.
@@ -4642,7 +4690,7 @@ module.exports = ReactChildReconciler;
4642
4690
  'use strict';
4643
4691
 
4644
4692
  var PooledClass = _dereq_(26);
4645
- var ReactElement = _dereq_(66);
4693
+ var ReactElement = _dereq_(65);
4646
4694
 
4647
4695
  var emptyFunction = _dereq_(165);
4648
4696
  var traverseAllChildren = _dereq_(154);
@@ -4685,6 +4733,8 @@ function forEachSingleChild(bookKeeping, child, name) {
4685
4733
  /**
4686
4734
  * Iterates through children that are typically specified as `props.children`.
4687
4735
  *
4736
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.children.foreach
4737
+ *
4688
4738
  * The provided forEachFunc(child, index) will be called for each
4689
4739
  * leaf child.
4690
4740
  *
@@ -4760,7 +4810,9 @@ function mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {
4760
4810
  /**
4761
4811
  * Maps children that are typically specified as `props.children`.
4762
4812
  *
4763
- * The provided mapFunction(child, index) will be called for each
4813
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.children.map
4814
+ *
4815
+ * The provided mapFunction(child, key, index) will be called for each
4764
4816
  * leaf child.
4765
4817
  *
4766
4818
  * @param {?*} children Children tree container.
@@ -4785,6 +4837,8 @@ function forEachSingleChildDummy(traverseContext, child, name) {
4785
4837
  * Count the number of children that are typically specified as
4786
4838
  * `props.children`.
4787
4839
  *
4840
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.children.count
4841
+ *
4788
4842
  * @param {?*} children Children tree container.
4789
4843
  * @return {number} The number of children.
4790
4844
  */
@@ -4795,6 +4849,8 @@ function countChildren(children, context) {
4795
4849
  /**
4796
4850
  * Flatten a children object (typically specified as `props.children`) and
4797
4851
  * return an array with appropriately re-keyed children.
4852
+ *
4853
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.children.toarray
4798
4854
  */
4799
4855
  function toArray(children) {
4800
4856
  var result = [];
@@ -4811,7 +4867,7 @@ var ReactChildren = {
4811
4867
  };
4812
4868
 
4813
4869
  module.exports = ReactChildren;
4814
- },{"154":154,"165":165,"26":26,"66":66}],33:[function(_dereq_,module,exports){
4870
+ },{"154":154,"165":165,"26":26,"65":65}],33:[function(_dereq_,module,exports){
4815
4871
  /**
4816
4872
  * Copyright 2013-present, Facebook, Inc.
4817
4873
  * All rights reserved.
@@ -4828,7 +4884,7 @@ module.exports = ReactChildren;
4828
4884
  var _assign = _dereq_(184);
4829
4885
 
4830
4886
  var ReactComponent = _dereq_(34);
4831
- var ReactElement = _dereq_(66);
4887
+ var ReactElement = _dereq_(65);
4832
4888
  var ReactPropTypeLocations = _dereq_(90);
4833
4889
  var ReactPropTypeLocationNames = _dereq_(89);
4834
4890
  var ReactNoopUpdateQueue = _dereq_(86);
@@ -5441,6 +5497,7 @@ var ReactClass = {
5441
5497
 
5442
5498
  /**
5443
5499
  * Creates a composite component class given a class specification.
5500
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.createclass
5444
5501
  *
5445
5502
  * @param {object} spec Class specification (which must define `render`).
5446
5503
  * @return {function} Component constructor function.
@@ -5535,7 +5592,7 @@ var ReactClass = {
5535
5592
  };
5536
5593
 
5537
5594
  module.exports = ReactClass;
5538
- },{"166":166,"173":173,"176":176,"177":177,"183":183,"184":184,"34":34,"66":66,"86":86,"89":89,"90":90}],34:[function(_dereq_,module,exports){
5595
+ },{"166":166,"173":173,"176":176,"177":177,"183":183,"184":184,"34":34,"65":65,"86":86,"89":89,"90":90}],34:[function(_dereq_,module,exports){
5539
5596
  /**
5540
5597
  * Copyright 2013-present, Facebook, Inc.
5541
5598
  * All rights reserved.
@@ -5550,7 +5607,7 @@ module.exports = ReactClass;
5550
5607
  'use strict';
5551
5608
 
5552
5609
  var ReactNoopUpdateQueue = _dereq_(86);
5553
- var ReactInstrumentation = _dereq_(77);
5610
+ var ReactInstrumentation = _dereq_(76);
5554
5611
 
5555
5612
  var canDefineProperty = _dereq_(128);
5556
5613
  var emptyObject = _dereq_(166);
@@ -5657,7 +5714,7 @@ if ("development" !== 'production') {
5657
5714
  }
5658
5715
 
5659
5716
  module.exports = ReactComponent;
5660
- },{"128":128,"166":166,"173":173,"183":183,"77":77,"86":86}],35:[function(_dereq_,module,exports){
5717
+ },{"128":128,"166":166,"173":173,"183":183,"76":76,"86":86}],35:[function(_dereq_,module,exports){
5661
5718
  /**
5662
5719
  * Copyright 2013-present, Facebook, Inc.
5663
5720
  * All rights reserved.
@@ -5672,8 +5729,7 @@ module.exports = ReactComponent;
5672
5729
  'use strict';
5673
5730
 
5674
5731
  var DOMChildrenOperations = _dereq_(7);
5675
- var ReactDOMIDOperations = _dereq_(50);
5676
- var ReactPerf = _dereq_(88);
5732
+ var ReactDOMIDOperations = _dereq_(51);
5677
5733
 
5678
5734
  /**
5679
5735
  * Abstracts away all functionality of the reconciler that requires knowledge of
@@ -5697,12 +5753,8 @@ var ReactComponentBrowserEnvironment = {
5697
5753
 
5698
5754
  };
5699
5755
 
5700
- ReactPerf.measureMethods(ReactComponentBrowserEnvironment, 'ReactComponentBrowserEnvironment', {
5701
- replaceNodeWithMarkup: 'replaceNodeWithMarkup'
5702
- });
5703
-
5704
5756
  module.exports = ReactComponentBrowserEnvironment;
5705
- },{"50":50,"7":7,"88":88}],36:[function(_dereq_,module,exports){
5757
+ },{"51":51,"7":7}],36:[function(_dereq_,module,exports){
5706
5758
  /**
5707
5759
  * Copyright 2014-present, Facebook, Inc.
5708
5760
  * All rights reserved.
@@ -5755,6 +5807,147 @@ var ReactComponentEnvironment = {
5755
5807
 
5756
5808
  module.exports = ReactComponentEnvironment;
5757
5809
  },{"173":173}],37:[function(_dereq_,module,exports){
5810
+ /**
5811
+ * Copyright 2016-present, Facebook, Inc.
5812
+ * All rights reserved.
5813
+ *
5814
+ * This source code is licensed under the BSD-style license found in the
5815
+ * LICENSE file in the root directory of this source tree. An additional grant
5816
+ * of patent rights can be found in the PATENTS file in the same directory.
5817
+ *
5818
+ * @providesModule ReactComponentTreeDevtool
5819
+ */
5820
+
5821
+ 'use strict';
5822
+
5823
+ var invariant = _dereq_(173);
5824
+
5825
+ var tree = {};
5826
+ var rootIDs = [];
5827
+
5828
+ function updateTree(id, update) {
5829
+ if (!tree[id]) {
5830
+ tree[id] = {
5831
+ parentID: null,
5832
+ ownerID: null,
5833
+ text: null,
5834
+ childIDs: [],
5835
+ displayName: 'Unknown',
5836
+ isMounted: false,
5837
+ updateCount: 0
5838
+ };
5839
+ }
5840
+ update(tree[id]);
5841
+ }
5842
+
5843
+ function purgeDeep(id) {
5844
+ var item = tree[id];
5845
+ if (item) {
5846
+ var childIDs = item.childIDs;
5847
+
5848
+ delete tree[id];
5849
+ childIDs.forEach(purgeDeep);
5850
+ }
5851
+ }
5852
+
5853
+ var ReactComponentTreeDevtool = {
5854
+ onSetDisplayName: function (id, displayName) {
5855
+ updateTree(id, function (item) {
5856
+ return item.displayName = displayName;
5857
+ });
5858
+ },
5859
+ onSetChildren: function (id, nextChildIDs) {
5860
+ updateTree(id, function (item) {
5861
+ var prevChildIDs = item.childIDs;
5862
+ item.childIDs = nextChildIDs;
5863
+
5864
+ nextChildIDs.forEach(function (nextChildID) {
5865
+ var nextChild = tree[nextChildID];
5866
+ !nextChild ? "development" !== 'production' ? invariant(false, 'Expected devtool events to fire for the child ' + 'before its parent includes it in onSetChildren().') : invariant(false) : void 0;
5867
+ !(nextChild.displayName != null) ? "development" !== 'production' ? invariant(false, 'Expected onSetDisplayName() to fire for the child ' + 'before its parent includes it in onSetChildren().') : invariant(false) : void 0;
5868
+ !(nextChild.childIDs != null || nextChild.text != null) ? "development" !== 'production' ? invariant(false, 'Expected onSetChildren() or onSetText() to fire for the child ' + 'before its parent includes it in onSetChildren().') : invariant(false) : void 0;
5869
+ !nextChild.isMounted ? "development" !== 'production' ? invariant(false, 'Expected onMountComponent() to fire for the child ' + 'before its parent includes it in onSetChildren().') : invariant(false) : void 0;
5870
+
5871
+ if (prevChildIDs.indexOf(nextChildID) === -1) {
5872
+ nextChild.parentID = id;
5873
+ }
5874
+ });
5875
+ });
5876
+ },
5877
+ onSetOwner: function (id, ownerID) {
5878
+ updateTree(id, function (item) {
5879
+ return item.ownerID = ownerID;
5880
+ });
5881
+ },
5882
+ onSetText: function (id, text) {
5883
+ updateTree(id, function (item) {
5884
+ return item.text = text;
5885
+ });
5886
+ },
5887
+ onMountComponent: function (id) {
5888
+ updateTree(id, function (item) {
5889
+ return item.isMounted = true;
5890
+ });
5891
+ },
5892
+ onMountRootComponent: function (id) {
5893
+ rootIDs.push(id);
5894
+ },
5895
+ onUpdateComponent: function (id) {
5896
+ updateTree(id, function (item) {
5897
+ return item.updateCount++;
5898
+ });
5899
+ },
5900
+ onUnmountComponent: function (id) {
5901
+ updateTree(id, function (item) {
5902
+ return item.isMounted = false;
5903
+ });
5904
+ rootIDs = rootIDs.filter(function (rootID) {
5905
+ return rootID !== id;
5906
+ });
5907
+ },
5908
+ purgeUnmountedComponents: function () {
5909
+ Object.keys(tree).filter(function (id) {
5910
+ return !tree[id].isMounted;
5911
+ }).forEach(purgeDeep);
5912
+ },
5913
+ isMounted: function (id) {
5914
+ var item = tree[id];
5915
+ return item ? item.isMounted : false;
5916
+ },
5917
+ getChildIDs: function (id) {
5918
+ var item = tree[id];
5919
+ return item ? item.childIDs : [];
5920
+ },
5921
+ getDisplayName: function (id) {
5922
+ var item = tree[id];
5923
+ return item ? item.displayName : 'Unknown';
5924
+ },
5925
+ getOwnerID: function (id) {
5926
+ var item = tree[id];
5927
+ return item ? item.ownerID : null;
5928
+ },
5929
+ getParentID: function (id) {
5930
+ var item = tree[id];
5931
+ return item ? item.parentID : null;
5932
+ },
5933
+ getText: function (id) {
5934
+ var item = tree[id];
5935
+ return item ? item.text : null;
5936
+ },
5937
+ getUpdateCount: function (id) {
5938
+ var item = tree[id];
5939
+ return item ? item.updateCount : 0;
5940
+ },
5941
+ getRootIDs: function () {
5942
+ return rootIDs;
5943
+ },
5944
+ getRegisteredIDs: function () {
5945
+ return Object.keys(tree);
5946
+ }
5947
+ };
5948
+
5949
+ module.exports = ReactComponentTreeDevtool;
5950
+ },{"173":173}],38:[function(_dereq_,module,exports){
5758
5951
  /**
5759
5952
  * Copyright 2013-present, Facebook, Inc.
5760
5953
  * All rights reserved.
@@ -5793,6 +5986,8 @@ var shallowCompare = _dereq_(152);
5793
5986
  * complex data structures this mixin may have false-negatives for deeper
5794
5987
  * differences. Only mixin to components which have simple props and state, or
5795
5988
  * use `forceUpdate()` when you know deep data structures have changed.
5989
+ *
5990
+ * See https://facebook.github.io/react/docs/pure-render-mixin.html
5796
5991
  */
5797
5992
  var ReactComponentWithPureRenderMixin = {
5798
5993
  shouldComponentUpdate: function (nextProps, nextState) {
@@ -5801,7 +5996,7 @@ var ReactComponentWithPureRenderMixin = {
5801
5996
  };
5802
5997
 
5803
5998
  module.exports = ReactComponentWithPureRenderMixin;
5804
- },{"152":152}],38:[function(_dereq_,module,exports){
5999
+ },{"152":152}],39:[function(_dereq_,module,exports){
5805
6000
  /**
5806
6001
  * Copyright 2013-present, Facebook, Inc.
5807
6002
  * All rights reserved.
@@ -5818,13 +6013,12 @@ module.exports = ReactComponentWithPureRenderMixin;
5818
6013
  var _assign = _dereq_(184);
5819
6014
 
5820
6015
  var ReactComponentEnvironment = _dereq_(36);
5821
- var ReactCurrentOwner = _dereq_(39);
5822
- var ReactElement = _dereq_(66);
5823
- var ReactErrorUtils = _dereq_(69);
5824
- var ReactInstanceMap = _dereq_(76);
5825
- var ReactInstrumentation = _dereq_(77);
6016
+ var ReactCurrentOwner = _dereq_(40);
6017
+ var ReactElement = _dereq_(65);
6018
+ var ReactErrorUtils = _dereq_(68);
6019
+ var ReactInstanceMap = _dereq_(75);
6020
+ var ReactInstrumentation = _dereq_(76);
5826
6021
  var ReactNodeTypes = _dereq_(85);
5827
- var ReactPerf = _dereq_(88);
5828
6022
  var ReactPropTypeLocations = _dereq_(90);
5829
6023
  var ReactPropTypeLocationNames = _dereq_(89);
5830
6024
  var ReactReconciler = _dereq_(93);
@@ -5860,6 +6054,28 @@ function warnIfInvalidElement(Component, element) {
5860
6054
  }
5861
6055
  }
5862
6056
 
6057
+ function invokeComponentDidMountWithTimer() {
6058
+ var publicInstance = this._instance;
6059
+ if (this._debugID !== 0) {
6060
+ ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'componentDidMount');
6061
+ }
6062
+ publicInstance.componentDidMount();
6063
+ if (this._debugID !== 0) {
6064
+ ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'componentDidMount');
6065
+ }
6066
+ }
6067
+
6068
+ function invokeComponentDidUpdateWithTimer(prevProps, prevState, prevContext) {
6069
+ var publicInstance = this._instance;
6070
+ if (this._debugID !== 0) {
6071
+ ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'componentDidUpdate');
6072
+ }
6073
+ publicInstance.componentDidUpdate(prevProps, prevState, prevContext);
6074
+ if (this._debugID !== 0) {
6075
+ ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'componentDidUpdate');
6076
+ }
6077
+ }
6078
+
5863
6079
  function shouldConstruct(Component) {
5864
6080
  return Component.prototype && Component.prototype.isReactComponent;
5865
6081
  }
@@ -5919,6 +6135,7 @@ var ReactCompositeComponentMixin = {
5919
6135
  this._nativeContainerInfo = null;
5920
6136
 
5921
6137
  // See ReactUpdateQueue
6138
+ this._updateBatchNumber = null;
5922
6139
  this._pendingElement = null;
5923
6140
  this._pendingStateQueue = null;
5924
6141
  this._pendingReplaceState = false;
@@ -6027,7 +6244,11 @@ var ReactCompositeComponentMixin = {
6027
6244
  }
6028
6245
 
6029
6246
  if (inst.componentDidMount) {
6030
- transaction.getReactMountReady().enqueue(inst.componentDidMount, inst);
6247
+ if ("development" !== 'production') {
6248
+ transaction.getReactMountReady().enqueue(invokeComponentDidMountWithTimer, this);
6249
+ } else {
6250
+ transaction.getReactMountReady().enqueue(inst.componentDidMount, inst);
6251
+ }
6031
6252
  }
6032
6253
 
6033
6254
  return markup;
@@ -6048,11 +6269,35 @@ var ReactCompositeComponentMixin = {
6048
6269
 
6049
6270
  _constructComponentWithoutOwner: function (publicProps, publicContext) {
6050
6271
  var Component = this._currentElement.type;
6272
+ var instanceOrElement;
6051
6273
  if (shouldConstruct(Component)) {
6052
- return new Component(publicProps, publicContext, ReactUpdateQueue);
6274
+ if ("development" !== 'production') {
6275
+ if (this._debugID !== 0) {
6276
+ ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'ctor');
6277
+ }
6278
+ }
6279
+ instanceOrElement = new Component(publicProps, publicContext, ReactUpdateQueue);
6280
+ if ("development" !== 'production') {
6281
+ if (this._debugID !== 0) {
6282
+ ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'ctor');
6283
+ }
6284
+ }
6053
6285
  } else {
6054
- return Component(publicProps, publicContext, ReactUpdateQueue);
6286
+ // This can still be an instance in case of factory components
6287
+ // but we'll count this as time spent rendering as the more common case.
6288
+ if ("development" !== 'production') {
6289
+ if (this._debugID !== 0) {
6290
+ ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'render');
6291
+ }
6292
+ }
6293
+ instanceOrElement = Component(publicProps, publicContext, ReactUpdateQueue);
6294
+ if ("development" !== 'production') {
6295
+ if (this._debugID !== 0) {
6296
+ ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'render');
6297
+ }
6298
+ }
6055
6299
  }
6300
+ return instanceOrElement;
6056
6301
  },
6057
6302
 
6058
6303
  performInitialMountWithErrorHandling: function (renderedElement, nativeParent, nativeContainerInfo, transaction, context) {
@@ -6082,7 +6327,17 @@ var ReactCompositeComponentMixin = {
6082
6327
  performInitialMount: function (renderedElement, nativeParent, nativeContainerInfo, transaction, context) {
6083
6328
  var inst = this._instance;
6084
6329
  if (inst.componentWillMount) {
6330
+ if ("development" !== 'production') {
6331
+ if (this._debugID !== 0) {
6332
+ ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'componentWillMount');
6333
+ }
6334
+ }
6085
6335
  inst.componentWillMount();
6336
+ if ("development" !== 'production') {
6337
+ if (this._debugID !== 0) {
6338
+ ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'componentWillMount');
6339
+ }
6340
+ }
6086
6341
  // When mounting, calls to `setState` by `componentWillMount` will set
6087
6342
  // `this._pendingStateQueue` without triggering a re-render.
6088
6343
  if (this._pendingStateQueue) {
@@ -6100,6 +6355,12 @@ var ReactCompositeComponentMixin = {
6100
6355
 
6101
6356
  var markup = ReactReconciler.mountComponent(this._renderedComponent, transaction, nativeParent, nativeContainerInfo, this._processChildContext(context));
6102
6357
 
6358
+ if ("development" !== 'production') {
6359
+ if (this._debugID !== 0) {
6360
+ ReactInstrumentation.debugTool.onSetChildren(this._debugID, this._renderedComponent._debugID !== 0 ? [this._renderedComponent._debugID] : []);
6361
+ }
6362
+ }
6363
+
6103
6364
  return markup;
6104
6365
  },
6105
6366
 
@@ -6121,12 +6382,22 @@ var ReactCompositeComponentMixin = {
6121
6382
 
6122
6383
  if (inst.componentWillUnmount && !inst._calledComponentWillUnmount) {
6123
6384
  inst._calledComponentWillUnmount = true;
6385
+ if ("development" !== 'production') {
6386
+ if (this._debugID !== 0) {
6387
+ ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'componentWillUnmount');
6388
+ }
6389
+ }
6124
6390
  if (safely) {
6125
6391
  var name = this.getName() + '.componentWillUnmount()';
6126
6392
  ReactErrorUtils.invokeGuardedCallback(name, inst.componentWillUnmount.bind(inst));
6127
6393
  } else {
6128
6394
  inst.componentWillUnmount();
6129
6395
  }
6396
+ if ("development" !== 'production') {
6397
+ if (this._debugID !== 0) {
6398
+ ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'componentWillUnmount');
6399
+ }
6400
+ }
6130
6401
  }
6131
6402
 
6132
6403
  if (this._renderedComponent) {
@@ -6309,10 +6580,10 @@ var ReactCompositeComponentMixin = {
6309
6580
  performUpdateIfNecessary: function (transaction) {
6310
6581
  if (this._pendingElement != null) {
6311
6582
  ReactReconciler.receiveComponent(this, this._pendingElement, transaction, this._context);
6312
- }
6313
-
6314
- if (this._pendingStateQueue !== null || this._pendingForceUpdate) {
6583
+ } else if (this._pendingStateQueue !== null || this._pendingForceUpdate) {
6315
6584
  this.updateComponent(transaction, this._currentElement, this._currentElement, this._context, this._context);
6585
+ } else {
6586
+ this._updateBatchNumber = null;
6316
6587
  }
6317
6588
  },
6318
6589
 
@@ -6359,17 +6630,41 @@ var ReactCompositeComponentMixin = {
6359
6630
  // _pendingStateQueue which will ensure that any state updates gets
6360
6631
  // immediately reconciled instead of waiting for the next batch.
6361
6632
  if (willReceive && inst.componentWillReceiveProps) {
6633
+ if ("development" !== 'production') {
6634
+ if (this._debugID !== 0) {
6635
+ ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'componentWillReceiveProps');
6636
+ }
6637
+ }
6362
6638
  inst.componentWillReceiveProps(nextProps, nextContext);
6639
+ if ("development" !== 'production') {
6640
+ if (this._debugID !== 0) {
6641
+ ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'componentWillReceiveProps');
6642
+ }
6643
+ }
6363
6644
  }
6364
6645
 
6365
6646
  var nextState = this._processPendingState(nextProps, nextContext);
6647
+ var shouldUpdate = true;
6366
6648
 
6367
- var shouldUpdate = this._pendingForceUpdate || !inst.shouldComponentUpdate || inst.shouldComponentUpdate(nextProps, nextState, nextContext);
6649
+ if (!this._pendingForceUpdate && inst.shouldComponentUpdate) {
6650
+ if ("development" !== 'production') {
6651
+ if (this._debugID !== 0) {
6652
+ ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'shouldComponentUpdate');
6653
+ }
6654
+ }
6655
+ shouldUpdate = inst.shouldComponentUpdate(nextProps, nextState, nextContext);
6656
+ if ("development" !== 'production') {
6657
+ if (this._debugID !== 0) {
6658
+ ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'shouldComponentUpdate');
6659
+ }
6660
+ }
6661
+ }
6368
6662
 
6369
6663
  if ("development" !== 'production') {
6370
6664
  "development" !== 'production' ? warning(shouldUpdate !== undefined, '%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', this.getName() || 'ReactCompositeComponent') : void 0;
6371
6665
  }
6372
6666
 
6667
+ this._updateBatchNumber = null;
6373
6668
  if (shouldUpdate) {
6374
6669
  this._pendingForceUpdate = false;
6375
6670
  // Will set `this.props`, `this.state` and `this.context`.
@@ -6435,7 +6730,17 @@ var ReactCompositeComponentMixin = {
6435
6730
  }
6436
6731
 
6437
6732
  if (inst.componentWillUpdate) {
6733
+ if ("development" !== 'production') {
6734
+ if (this._debugID !== 0) {
6735
+ ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'componentWillUpdate');
6736
+ }
6737
+ }
6438
6738
  inst.componentWillUpdate(nextProps, nextState, nextContext);
6739
+ if ("development" !== 'production') {
6740
+ if (this._debugID !== 0) {
6741
+ ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'componentWillUpdate');
6742
+ }
6743
+ }
6439
6744
  }
6440
6745
 
6441
6746
  this._currentElement = nextElement;
@@ -6447,7 +6752,11 @@ var ReactCompositeComponentMixin = {
6447
6752
  this._updateRenderedComponent(transaction, unmaskedContext);
6448
6753
 
6449
6754
  if (hasComponentDidUpdate) {
6450
- transaction.getReactMountReady().enqueue(inst.componentDidUpdate.bind(inst, prevProps, prevState, prevContext), inst);
6755
+ if ("development" !== 'production') {
6756
+ transaction.getReactMountReady().enqueue(invokeComponentDidUpdateWithTimer.bind(this, prevProps, prevState, prevContext), this);
6757
+ } else {
6758
+ transaction.getReactMountReady().enqueue(inst.componentDidUpdate.bind(inst, prevProps, prevState, prevContext), inst);
6759
+ }
6451
6760
  }
6452
6761
  },
6453
6762
 
@@ -6469,8 +6778,16 @@ var ReactCompositeComponentMixin = {
6469
6778
 
6470
6779
  this._renderedNodeType = ReactNodeTypes.getType(nextRenderedElement);
6471
6780
  this._renderedComponent = this._instantiateReactComponent(nextRenderedElement);
6781
+
6472
6782
  var nextMarkup = ReactReconciler.mountComponent(this._renderedComponent, transaction, this._nativeParent, this._nativeContainerInfo, this._processChildContext(context));
6473
- this._replaceNodeWithMarkup(oldNativeNode, nextMarkup);
6783
+
6784
+ if ("development" !== 'production') {
6785
+ if (this._debugID !== 0) {
6786
+ ReactInstrumentation.debugTool.onSetChildren(this._debugID, this._renderedComponent._debugID !== 0 ? [this._renderedComponent._debugID] : []);
6787
+ }
6788
+ }
6789
+
6790
+ this._replaceNodeWithMarkup(oldNativeNode, nextMarkup, prevComponentInstance);
6474
6791
  }
6475
6792
  },
6476
6793
 
@@ -6479,8 +6796,8 @@ var ReactCompositeComponentMixin = {
6479
6796
  *
6480
6797
  * @protected
6481
6798
  */
6482
- _replaceNodeWithMarkup: function (oldNativeNode, nextMarkup) {
6483
- ReactComponentEnvironment.replaceNodeWithMarkup(oldNativeNode, nextMarkup);
6799
+ _replaceNodeWithMarkup: function (oldNativeNode, nextMarkup, prevInstance) {
6800
+ ReactComponentEnvironment.replaceNodeWithMarkup(oldNativeNode, nextMarkup, prevInstance);
6484
6801
  },
6485
6802
 
6486
6803
  /**
@@ -6488,7 +6805,19 @@ var ReactCompositeComponentMixin = {
6488
6805
  */
6489
6806
  _renderValidatedComponentWithoutOwnerOrContext: function () {
6490
6807
  var inst = this._instance;
6808
+
6809
+ if ("development" !== 'production') {
6810
+ if (this._debugID !== 0) {
6811
+ ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'render');
6812
+ }
6813
+ }
6491
6814
  var renderedComponent = inst.render();
6815
+ if ("development" !== 'production') {
6816
+ if (this._debugID !== 0) {
6817
+ ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'render');
6818
+ }
6819
+ }
6820
+
6492
6821
  if ("development" !== 'production') {
6493
6822
  // We allow auto-mocks to proceed as if they're returning null.
6494
6823
  if (renderedComponent === undefined && inst.render._isMockFunction) {
@@ -6515,6 +6844,7 @@ var ReactCompositeComponentMixin = {
6515
6844
  !(
6516
6845
  // TODO: An `isValidNode` function would probably be more appropriate
6517
6846
  renderedComponent === null || renderedComponent === false || ReactElement.isValidElement(renderedComponent)) ? "development" !== 'production' ? invariant(false, '%s.render(): A valid React element (or null) must be returned. You may have ' + 'returned undefined, an array or some other invalid object.', this.getName() || 'ReactCompositeComponent') : invariant(false) : void 0;
6847
+
6518
6848
  return renderedComponent;
6519
6849
  },
6520
6850
 
@@ -6583,12 +6913,6 @@ var ReactCompositeComponentMixin = {
6583
6913
 
6584
6914
  };
6585
6915
 
6586
- ReactPerf.measureMethods(ReactCompositeComponentMixin, 'ReactCompositeComponent', {
6587
- mountComponent: 'mountComponent',
6588
- updateComponent: 'updateComponent',
6589
- _renderValidatedComponent: '_renderValidatedComponent'
6590
- });
6591
-
6592
6916
  var ReactCompositeComponent = {
6593
6917
 
6594
6918
  Mixin: ReactCompositeComponentMixin
@@ -6596,7 +6920,7 @@ var ReactCompositeComponent = {
6596
6920
  };
6597
6921
 
6598
6922
  module.exports = ReactCompositeComponent;
6599
- },{"103":103,"153":153,"166":166,"173":173,"183":183,"184":184,"36":36,"39":39,"66":66,"69":69,"76":76,"77":77,"85":85,"88":88,"89":89,"90":90,"93":93}],39:[function(_dereq_,module,exports){
6923
+ },{"103":103,"153":153,"166":166,"173":173,"183":183,"184":184,"36":36,"40":40,"65":65,"68":68,"75":75,"76":76,"85":85,"89":89,"90":90,"93":93}],40:[function(_dereq_,module,exports){
6600
6924
  /**
6601
6925
  * Copyright 2013-present, Facebook, Inc.
6602
6926
  * All rights reserved.
@@ -6628,7 +6952,7 @@ var ReactCurrentOwner = {
6628
6952
  };
6629
6953
 
6630
6954
  module.exports = ReactCurrentOwner;
6631
- },{}],40:[function(_dereq_,module,exports){
6955
+ },{}],41:[function(_dereq_,module,exports){
6632
6956
  /**
6633
6957
  * Copyright 2013-present, Facebook, Inc.
6634
6958
  * All rights reserved.
@@ -6644,10 +6968,9 @@ module.exports = ReactCurrentOwner;
6644
6968
 
6645
6969
  'use strict';
6646
6970
 
6647
- var ReactDOMComponentTree = _dereq_(44);
6648
- var ReactDefaultInjection = _dereq_(63);
6649
- var ReactMount = _dereq_(81);
6650
- var ReactPerf = _dereq_(88);
6971
+ var ReactDOMComponentTree = _dereq_(45);
6972
+ var ReactDefaultInjection = _dereq_(64);
6973
+ var ReactMount = _dereq_(80);
6651
6974
  var ReactReconciler = _dereq_(93);
6652
6975
  var ReactUpdates = _dereq_(104);
6653
6976
  var ReactVersion = _dereq_(105);
@@ -6659,11 +6982,9 @@ var warning = _dereq_(183);
6659
6982
 
6660
6983
  ReactDefaultInjection.inject();
6661
6984
 
6662
- var render = ReactPerf.measure('React', 'render', ReactMount.render);
6663
-
6664
6985
  var React = {
6665
6986
  findDOMNode: findDOMNode,
6666
- render: render,
6987
+ render: ReactMount.render,
6667
6988
  unmountComponentAtNode: ReactMount.unmountComponentAtNode,
6668
6989
  version: ReactVersion,
6669
6990
 
@@ -6733,7 +7054,7 @@ if ("development" !== 'production') {
6733
7054
  }
6734
7055
 
6735
7056
  module.exports = React;
6736
- },{"104":104,"105":105,"132":132,"140":140,"149":149,"159":159,"183":183,"44":44,"63":63,"81":81,"88":88,"93":93}],41:[function(_dereq_,module,exports){
7057
+ },{"104":104,"105":105,"132":132,"140":140,"149":149,"159":159,"183":183,"45":45,"64":64,"80":80,"93":93}],42:[function(_dereq_,module,exports){
6737
7058
  /**
6738
7059
  * Copyright 2013-present, Facebook, Inc.
6739
7060
  * All rights reserved.
@@ -6758,7 +7079,7 @@ var ReactDOMButton = {
6758
7079
  };
6759
7080
 
6760
7081
  module.exports = ReactDOMButton;
6761
- },{"14":14}],42:[function(_dereq_,module,exports){
7082
+ },{"14":14}],43:[function(_dereq_,module,exports){
6762
7083
  /**
6763
7084
  * Copyright 2013-present, Facebook, Inc.
6764
7085
  * All rights reserved.
@@ -6787,17 +7108,18 @@ var EventPluginHub = _dereq_(17);
6787
7108
  var EventPluginRegistry = _dereq_(18);
6788
7109
  var ReactBrowserEventEmitter = _dereq_(28);
6789
7110
  var ReactComponentBrowserEnvironment = _dereq_(35);
6790
- var ReactDOMButton = _dereq_(41);
6791
- var ReactDOMComponentFlags = _dereq_(43);
6792
- var ReactDOMComponentTree = _dereq_(44);
6793
- var ReactDOMInput = _dereq_(51);
6794
- var ReactDOMOption = _dereq_(53);
6795
- var ReactDOMSelect = _dereq_(54);
6796
- var ReactDOMTextarea = _dereq_(58);
6797
- var ReactMultiChild = _dereq_(82);
6798
- var ReactPerf = _dereq_(88);
7111
+ var ReactDOMButton = _dereq_(42);
7112
+ var ReactDOMComponentFlags = _dereq_(44);
7113
+ var ReactDOMComponentTree = _dereq_(45);
7114
+ var ReactDOMInput = _dereq_(52);
7115
+ var ReactDOMOption = _dereq_(54);
7116
+ var ReactDOMSelect = _dereq_(55);
7117
+ var ReactDOMTextarea = _dereq_(59);
7118
+ var ReactInstrumentation = _dereq_(76);
7119
+ var ReactMultiChild = _dereq_(81);
6799
7120
  var ReactServerRenderingTransaction = _dereq_(97);
6800
7121
 
7122
+ var emptyFunction = _dereq_(165);
6801
7123
  var escapeTextContentForBrowser = _dereq_(131);
6802
7124
  var invariant = _dereq_(173);
6803
7125
  var isEventSupported = _dereq_(145);
@@ -6945,6 +7267,19 @@ function optionPostMount() {
6945
7267
  ReactDOMOption.postMountWrapper(inst);
6946
7268
  }
6947
7269
 
7270
+ var setContentChildForInstrumentation = emptyFunction;
7271
+ if ("development" !== 'production') {
7272
+ setContentChildForInstrumentation = function (contentToUse) {
7273
+ var debugID = this._debugID;
7274
+ var contentDebugID = debugID + '#text';
7275
+ this._contentDebugID = contentDebugID;
7276
+ ReactInstrumentation.debugTool.onSetDisplayName(contentDebugID, '#text');
7277
+ ReactInstrumentation.debugTool.onSetText(contentDebugID, '' + contentToUse);
7278
+ ReactInstrumentation.debugTool.onMountComponent(contentDebugID);
7279
+ ReactInstrumentation.debugTool.onSetChildren(debugID, [contentDebugID]);
7280
+ };
7281
+ }
7282
+
6948
7283
  // There are so many media events, it makes sense to just
6949
7284
  // maintain a list rather than create a `trapBubbledEvent` for each
6950
7285
  var mediaEvents = {
@@ -7105,6 +7440,7 @@ function ReactDOMComponent(element) {
7105
7440
  this._flags = 0;
7106
7441
  if ("development" !== 'production') {
7107
7442
  this._ancestorInfo = null;
7443
+ this._contentDebugID = null;
7108
7444
  }
7109
7445
  }
7110
7446
 
@@ -7350,6 +7686,9 @@ ReactDOMComponent.Mixin = {
7350
7686
  if (contentToUse != null) {
7351
7687
  // TODO: Validate that text is allowed as a child of this node
7352
7688
  ret = escapeTextContentForBrowser(contentToUse);
7689
+ if ("development" !== 'production') {
7690
+ setContentChildForInstrumentation.call(this, contentToUse);
7691
+ }
7353
7692
  } else if (childrenToUse != null) {
7354
7693
  var mountImages = this.mountChildren(childrenToUse, transaction, context);
7355
7694
  ret = mountImages.join('');
@@ -7384,6 +7723,9 @@ ReactDOMComponent.Mixin = {
7384
7723
  var childrenToUse = contentToUse != null ? null : props.children;
7385
7724
  if (contentToUse != null) {
7386
7725
  // TODO: Validate that text is allowed as a child of this node
7726
+ if ("development" !== 'production') {
7727
+ setContentChildForInstrumentation.call(this, contentToUse);
7728
+ }
7387
7729
  DOMLazyTree.queueText(lazyTree, contentToUse);
7388
7730
  } else if (childrenToUse != null) {
7389
7731
  var mountImages = this.mountChildren(childrenToUse, transaction, context);
@@ -7592,17 +7934,34 @@ ReactDOMComponent.Mixin = {
7592
7934
  this.updateChildren(null, transaction, context);
7593
7935
  } else if (lastHasContentOrHtml && !nextHasContentOrHtml) {
7594
7936
  this.updateTextContent('');
7937
+ if ("development" !== 'production') {
7938
+ ReactInstrumentation.debugTool.onSetChildren(this._debugID, []);
7939
+ }
7595
7940
  }
7596
7941
 
7597
7942
  if (nextContent != null) {
7598
7943
  if (lastContent !== nextContent) {
7599
7944
  this.updateTextContent('' + nextContent);
7945
+ if ("development" !== 'production') {
7946
+ this._contentDebugID = this._debugID + '#text';
7947
+ setContentChildForInstrumentation.call(this, nextContent);
7948
+ }
7600
7949
  }
7601
7950
  } else if (nextHtml != null) {
7602
7951
  if (lastHtml !== nextHtml) {
7603
7952
  this.updateMarkup('' + nextHtml);
7604
7953
  }
7954
+ if ("development" !== 'production') {
7955
+ ReactInstrumentation.debugTool.onSetChildren(this._debugID, []);
7956
+ }
7605
7957
  } else if (nextChildren != null) {
7958
+ if ("development" !== 'production') {
7959
+ if (this._contentDebugID) {
7960
+ ReactInstrumentation.debugTool.onUnmountComponent(this._contentDebugID);
7961
+ this._contentDebugID = null;
7962
+ }
7963
+ }
7964
+
7606
7965
  this.updateChildren(nextChildren, transaction, context);
7607
7966
  }
7608
7967
  },
@@ -7652,6 +8011,13 @@ ReactDOMComponent.Mixin = {
7652
8011
  this._rootNodeID = null;
7653
8012
  this._domID = null;
7654
8013
  this._wrapperState = null;
8014
+
8015
+ if ("development" !== 'production') {
8016
+ if (this._contentDebugID) {
8017
+ ReactInstrumentation.debugTool.onUnmountComponent(this._contentDebugID);
8018
+ this._contentDebugID = null;
8019
+ }
8020
+ }
7655
8021
  },
7656
8022
 
7657
8023
  getPublicInstance: function () {
@@ -7660,15 +8026,10 @@ ReactDOMComponent.Mixin = {
7660
8026
 
7661
8027
  };
7662
8028
 
7663
- ReactPerf.measureMethods(ReactDOMComponent.Mixin, 'ReactDOMComponent', {
7664
- mountComponent: 'mountComponent',
7665
- receiveComponent: 'receiveComponent'
7666
- });
7667
-
7668
8029
  _assign(ReactDOMComponent.prototype, ReactDOMComponent.Mixin, ReactMultiChild.Mixin);
7669
8030
 
7670
8031
  module.exports = ReactDOMComponent;
7671
- },{"1":1,"10":10,"11":11,"131":131,"145":145,"156":156,"16":16,"17":17,"173":173,"177":177,"18":18,"182":182,"183":183,"184":184,"28":28,"35":35,"4":4,"41":41,"43":43,"44":44,"51":51,"53":53,"54":54,"58":58,"8":8,"82":82,"88":88,"9":9,"97":97}],43:[function(_dereq_,module,exports){
8032
+ },{"1":1,"10":10,"11":11,"131":131,"145":145,"156":156,"16":16,"165":165,"17":17,"173":173,"177":177,"18":18,"182":182,"183":183,"184":184,"28":28,"35":35,"4":4,"42":42,"44":44,"45":45,"52":52,"54":54,"55":55,"59":59,"76":76,"8":8,"81":81,"9":9,"97":97}],44:[function(_dereq_,module,exports){
7672
8033
  /**
7673
8034
  * Copyright 2015-present, Facebook, Inc.
7674
8035
  * All rights reserved.
@@ -7687,7 +8048,7 @@ var ReactDOMComponentFlags = {
7687
8048
  };
7688
8049
 
7689
8050
  module.exports = ReactDOMComponentFlags;
7690
- },{}],44:[function(_dereq_,module,exports){
8051
+ },{}],45:[function(_dereq_,module,exports){
7691
8052
  /**
7692
8053
  * Copyright 2013-present, Facebook, Inc.
7693
8054
  * All rights reserved.
@@ -7702,7 +8063,7 @@ module.exports = ReactDOMComponentFlags;
7702
8063
  'use strict';
7703
8064
 
7704
8065
  var DOMProperty = _dereq_(10);
7705
- var ReactDOMComponentFlags = _dereq_(43);
8066
+ var ReactDOMComponentFlags = _dereq_(44);
7706
8067
 
7707
8068
  var invariant = _dereq_(173);
7708
8069
 
@@ -7874,7 +8235,7 @@ var ReactDOMComponentTree = {
7874
8235
  };
7875
8236
 
7876
8237
  module.exports = ReactDOMComponentTree;
7877
- },{"10":10,"173":173,"43":43}],45:[function(_dereq_,module,exports){
8238
+ },{"10":10,"173":173,"44":44}],46:[function(_dereq_,module,exports){
7878
8239
  /**
7879
8240
  * Copyright 2013-present, Facebook, Inc.
7880
8241
  * All rights reserved.
@@ -7908,7 +8269,7 @@ function ReactDOMContainerInfo(topLevelWrapper, node) {
7908
8269
  }
7909
8270
 
7910
8271
  module.exports = ReactDOMContainerInfo;
7911
- },{"156":156}],46:[function(_dereq_,module,exports){
8272
+ },{"156":156}],47:[function(_dereq_,module,exports){
7912
8273
  /**
7913
8274
  * Copyright 2013-present, Facebook, Inc.
7914
8275
  * All rights reserved.
@@ -7922,7 +8283,7 @@ module.exports = ReactDOMContainerInfo;
7922
8283
 
7923
8284
  'use strict';
7924
8285
 
7925
- var ReactDOMUnknownPropertyDevtool = _dereq_(60);
8286
+ var ReactDOMUnknownPropertyDevtool = _dereq_(61);
7926
8287
 
7927
8288
  var warning = _dereq_(183);
7928
8289
 
@@ -7970,7 +8331,7 @@ var ReactDOMDebugTool = {
7970
8331
  ReactDOMDebugTool.addDevtool(ReactDOMUnknownPropertyDevtool);
7971
8332
 
7972
8333
  module.exports = ReactDOMDebugTool;
7973
- },{"183":183,"60":60}],47:[function(_dereq_,module,exports){
8334
+ },{"183":183,"61":61}],48:[function(_dereq_,module,exports){
7974
8335
  /**
7975
8336
  * Copyright 2014-present, Facebook, Inc.
7976
8337
  * All rights reserved.
@@ -7987,7 +8348,7 @@ module.exports = ReactDOMDebugTool;
7987
8348
  var _assign = _dereq_(184);
7988
8349
 
7989
8350
  var DOMLazyTree = _dereq_(8);
7990
- var ReactDOMComponentTree = _dereq_(44);
8351
+ var ReactDOMComponentTree = _dereq_(45);
7991
8352
 
7992
8353
  var ReactDOMEmptyComponent = function (instantiate) {
7993
8354
  // ReactCompositeComponent uses this:
@@ -8031,7 +8392,7 @@ _assign(ReactDOMEmptyComponent.prototype, {
8031
8392
  });
8032
8393
 
8033
8394
  module.exports = ReactDOMEmptyComponent;
8034
- },{"184":184,"44":44,"8":8}],48:[function(_dereq_,module,exports){
8395
+ },{"184":184,"45":45,"8":8}],49:[function(_dereq_,module,exports){
8035
8396
  /**
8036
8397
  * Copyright 2013-present, Facebook, Inc.
8037
8398
  * All rights reserved.
@@ -8045,8 +8406,8 @@ module.exports = ReactDOMEmptyComponent;
8045
8406
 
8046
8407
  'use strict';
8047
8408
 
8048
- var ReactElement = _dereq_(66);
8049
- var ReactElementValidator = _dereq_(67);
8409
+ var ReactElement = _dereq_(65);
8410
+ var ReactElementValidator = _dereq_(66);
8050
8411
 
8051
8412
  var mapObject = _dereq_(178);
8052
8413
 
@@ -8208,7 +8569,7 @@ var ReactDOMFactories = mapObject({
8208
8569
  }, createDOMFactory);
8209
8570
 
8210
8571
  module.exports = ReactDOMFactories;
8211
- },{"178":178,"66":66,"67":67}],49:[function(_dereq_,module,exports){
8572
+ },{"178":178,"65":65,"66":66}],50:[function(_dereq_,module,exports){
8212
8573
  /**
8213
8574
  * Copyright 2013-present, Facebook, Inc.
8214
8575
  * All rights reserved.
@@ -8227,7 +8588,7 @@ var ReactDOMFeatureFlags = {
8227
8588
  };
8228
8589
 
8229
8590
  module.exports = ReactDOMFeatureFlags;
8230
- },{}],50:[function(_dereq_,module,exports){
8591
+ },{}],51:[function(_dereq_,module,exports){
8231
8592
  /**
8232
8593
  * Copyright 2013-present, Facebook, Inc.
8233
8594
  * All rights reserved.
@@ -8242,8 +8603,7 @@ module.exports = ReactDOMFeatureFlags;
8242
8603
  'use strict';
8243
8604
 
8244
8605
  var DOMChildrenOperations = _dereq_(7);
8245
- var ReactDOMComponentTree = _dereq_(44);
8246
- var ReactPerf = _dereq_(88);
8606
+ var ReactDOMComponentTree = _dereq_(45);
8247
8607
 
8248
8608
  /**
8249
8609
  * Operations used to process updates to DOM nodes.
@@ -8262,12 +8622,8 @@ var ReactDOMIDOperations = {
8262
8622
  }
8263
8623
  };
8264
8624
 
8265
- ReactPerf.measureMethods(ReactDOMIDOperations, 'ReactDOMIDOperations', {
8266
- dangerouslyProcessChildrenUpdates: 'dangerouslyProcessChildrenUpdates'
8267
- });
8268
-
8269
8625
  module.exports = ReactDOMIDOperations;
8270
- },{"44":44,"7":7,"88":88}],51:[function(_dereq_,module,exports){
8626
+ },{"45":45,"7":7}],52:[function(_dereq_,module,exports){
8271
8627
  /**
8272
8628
  * Copyright 2013-present, Facebook, Inc.
8273
8629
  * All rights reserved.
@@ -8286,7 +8642,7 @@ var _assign = _dereq_(184);
8286
8642
  var DisabledInputUtils = _dereq_(14);
8287
8643
  var DOMPropertyOperations = _dereq_(11);
8288
8644
  var LinkedValueUtils = _dereq_(25);
8289
- var ReactDOMComponentTree = _dereq_(44);
8645
+ var ReactDOMComponentTree = _dereq_(45);
8290
8646
  var ReactUpdates = _dereq_(104);
8291
8647
 
8292
8648
  var invariant = _dereq_(173);
@@ -8355,6 +8711,8 @@ var ReactDOMInput = {
8355
8711
  if ("development" !== 'production') {
8356
8712
  LinkedValueUtils.checkPropTypes('input', props, inst._currentElement._owner);
8357
8713
 
8714
+ var owner = inst._currentElement._owner;
8715
+
8358
8716
  if (props.valueLink !== undefined && !didWarnValueLink) {
8359
8717
  "development" !== 'production' ? warning(false, '`valueLink` prop on `input` is deprecated; set `value` and `onChange` instead.') : void 0;
8360
8718
  didWarnValueLink = true;
@@ -8364,11 +8722,11 @@ var ReactDOMInput = {
8364
8722
  didWarnCheckedLink = true;
8365
8723
  }
8366
8724
  if (props.checked !== undefined && props.defaultChecked !== undefined && !didWarnCheckedDefaultChecked) {
8367
- "development" !== 'production' ? warning(false, 'Input elements must be either controlled or uncontrolled ' + '(specify either the checked prop, or the defaultChecked prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components') : void 0;
8725
+ "development" !== 'production' ? warning(false, '%s contains an input of type %s with both checked and defaultChecked props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the checked prop, or the defaultChecked prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', owner && owner.getName() || 'A component', props.type) : void 0;
8368
8726
  didWarnCheckedDefaultChecked = true;
8369
8727
  }
8370
8728
  if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {
8371
- "development" !== 'production' ? warning(false, 'Input elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components') : void 0;
8729
+ "development" !== 'production' ? warning(false, '%s contains an input of type %s with both value and defaultValue props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', owner && owner.getName() || 'A component', props.type) : void 0;
8372
8730
  didWarnValueDefaultValue = true;
8373
8731
  }
8374
8732
  warnIfValueIsNull(props);
@@ -8472,7 +8830,7 @@ function _handleChange(event) {
8472
8830
  }
8473
8831
 
8474
8832
  module.exports = ReactDOMInput;
8475
- },{"104":104,"11":11,"14":14,"173":173,"183":183,"184":184,"25":25,"44":44}],52:[function(_dereq_,module,exports){
8833
+ },{"104":104,"11":11,"14":14,"173":173,"183":183,"184":184,"25":25,"45":45}],53:[function(_dereq_,module,exports){
8476
8834
  /**
8477
8835
  * Copyright 2013-present, Facebook, Inc.
8478
8836
  * All rights reserved.
@@ -8486,10 +8844,10 @@ module.exports = ReactDOMInput;
8486
8844
 
8487
8845
  'use strict';
8488
8846
 
8489
- var ReactDOMDebugTool = _dereq_(46);
8847
+ var ReactDOMDebugTool = _dereq_(47);
8490
8848
 
8491
8849
  module.exports = { debugTool: ReactDOMDebugTool };
8492
- },{"46":46}],53:[function(_dereq_,module,exports){
8850
+ },{"47":47}],54:[function(_dereq_,module,exports){
8493
8851
  /**
8494
8852
  * Copyright 2013-present, Facebook, Inc.
8495
8853
  * All rights reserved.
@@ -8506,8 +8864,8 @@ module.exports = { debugTool: ReactDOMDebugTool };
8506
8864
  var _assign = _dereq_(184);
8507
8865
 
8508
8866
  var ReactChildren = _dereq_(32);
8509
- var ReactDOMComponentTree = _dereq_(44);
8510
- var ReactDOMSelect = _dereq_(54);
8867
+ var ReactDOMComponentTree = _dereq_(45);
8868
+ var ReactDOMSelect = _dereq_(55);
8511
8869
 
8512
8870
  var warning = _dereq_(183);
8513
8871
 
@@ -8599,7 +8957,7 @@ var ReactDOMOption = {
8599
8957
  };
8600
8958
 
8601
8959
  module.exports = ReactDOMOption;
8602
- },{"183":183,"184":184,"32":32,"44":44,"54":54}],54:[function(_dereq_,module,exports){
8960
+ },{"183":183,"184":184,"32":32,"45":45,"55":55}],55:[function(_dereq_,module,exports){
8603
8961
  /**
8604
8962
  * Copyright 2013-present, Facebook, Inc.
8605
8963
  * All rights reserved.
@@ -8617,7 +8975,7 @@ var _assign = _dereq_(184);
8617
8975
 
8618
8976
  var DisabledInputUtils = _dereq_(14);
8619
8977
  var LinkedValueUtils = _dereq_(25);
8620
- var ReactDOMComponentTree = _dereq_(44);
8978
+ var ReactDOMComponentTree = _dereq_(45);
8621
8979
  var ReactUpdates = _dereq_(104);
8622
8980
 
8623
8981
  var warning = _dereq_(183);
@@ -8813,7 +9171,7 @@ function _handleChange(event) {
8813
9171
  }
8814
9172
 
8815
9173
  module.exports = ReactDOMSelect;
8816
- },{"104":104,"14":14,"183":183,"184":184,"25":25,"44":44}],55:[function(_dereq_,module,exports){
9174
+ },{"104":104,"14":14,"183":183,"184":184,"25":25,"45":45}],56:[function(_dereq_,module,exports){
8817
9175
  /**
8818
9176
  * Copyright 2013-present, Facebook, Inc.
8819
9177
  * All rights reserved.
@@ -9026,7 +9384,7 @@ var ReactDOMSelection = {
9026
9384
  };
9027
9385
 
9028
9386
  module.exports = ReactDOMSelection;
9029
- },{"141":141,"142":142,"159":159}],56:[function(_dereq_,module,exports){
9387
+ },{"141":141,"142":142,"159":159}],57:[function(_dereq_,module,exports){
9030
9388
  /**
9031
9389
  * Copyright 2013-present, Facebook, Inc.
9032
9390
  * All rights reserved.
@@ -9040,7 +9398,7 @@ module.exports = ReactDOMSelection;
9040
9398
 
9041
9399
  'use strict';
9042
9400
 
9043
- var ReactDefaultInjection = _dereq_(63);
9401
+ var ReactDefaultInjection = _dereq_(64);
9044
9402
  var ReactServerRendering = _dereq_(96);
9045
9403
  var ReactVersion = _dereq_(105);
9046
9404
 
@@ -9053,7 +9411,7 @@ var ReactDOMServer = {
9053
9411
  };
9054
9412
 
9055
9413
  module.exports = ReactDOMServer;
9056
- },{"105":105,"63":63,"96":96}],57:[function(_dereq_,module,exports){
9414
+ },{"105":105,"64":64,"96":96}],58:[function(_dereq_,module,exports){
9057
9415
  /**
9058
9416
  * Copyright 2013-present, Facebook, Inc.
9059
9417
  * All rights reserved.
@@ -9071,8 +9429,8 @@ var _assign = _dereq_(184);
9071
9429
 
9072
9430
  var DOMChildrenOperations = _dereq_(7);
9073
9431
  var DOMLazyTree = _dereq_(8);
9074
- var ReactDOMComponentTree = _dereq_(44);
9075
- var ReactPerf = _dereq_(88);
9432
+ var ReactDOMComponentTree = _dereq_(45);
9433
+ var ReactInstrumentation = _dereq_(76);
9076
9434
 
9077
9435
  var escapeTextContentForBrowser = _dereq_(131);
9078
9436
  var invariant = _dereq_(173);
@@ -9120,6 +9478,8 @@ _assign(ReactDOMTextComponent.prototype, {
9120
9478
  */
9121
9479
  mountComponent: function (transaction, nativeParent, nativeContainerInfo, context) {
9122
9480
  if ("development" !== 'production') {
9481
+ ReactInstrumentation.debugTool.onSetText(this._debugID, this._stringText);
9482
+
9123
9483
  var parentInfo;
9124
9484
  if (nativeParent != null) {
9125
9485
  parentInfo = nativeParent._ancestorInfo;
@@ -9183,6 +9543,10 @@ _assign(ReactDOMTextComponent.prototype, {
9183
9543
  this._stringText = nextStringText;
9184
9544
  var commentNodes = this.getNativeNode();
9185
9545
  DOMChildrenOperations.replaceDelimitedText(commentNodes[0], commentNodes[1], nextStringText);
9546
+
9547
+ if ("development" !== 'production') {
9548
+ ReactInstrumentation.debugTool.onSetText(this._debugID, nextStringText);
9549
+ }
9186
9550
  }
9187
9551
  }
9188
9552
  },
@@ -9217,13 +9581,8 @@ _assign(ReactDOMTextComponent.prototype, {
9217
9581
 
9218
9582
  });
9219
9583
 
9220
- ReactPerf.measureMethods(ReactDOMTextComponent.prototype, 'ReactDOMTextComponent', {
9221
- mountComponent: 'mountComponent',
9222
- receiveComponent: 'receiveComponent'
9223
- });
9224
-
9225
9584
  module.exports = ReactDOMTextComponent;
9226
- },{"131":131,"156":156,"173":173,"184":184,"44":44,"7":7,"8":8,"88":88}],58:[function(_dereq_,module,exports){
9585
+ },{"131":131,"156":156,"173":173,"184":184,"45":45,"7":7,"76":76,"8":8}],59:[function(_dereq_,module,exports){
9227
9586
  /**
9228
9587
  * Copyright 2013-present, Facebook, Inc.
9229
9588
  * All rights reserved.
@@ -9242,7 +9601,7 @@ var _assign = _dereq_(184);
9242
9601
  var DisabledInputUtils = _dereq_(14);
9243
9602
  var DOMPropertyOperations = _dereq_(11);
9244
9603
  var LinkedValueUtils = _dereq_(25);
9245
- var ReactDOMComponentTree = _dereq_(44);
9604
+ var ReactDOMComponentTree = _dereq_(45);
9246
9605
  var ReactUpdates = _dereq_(104);
9247
9606
 
9248
9607
  var invariant = _dereq_(173);
@@ -9366,7 +9725,7 @@ function _handleChange(event) {
9366
9725
  }
9367
9726
 
9368
9727
  module.exports = ReactDOMTextarea;
9369
- },{"104":104,"11":11,"14":14,"173":173,"183":183,"184":184,"25":25,"44":44}],59:[function(_dereq_,module,exports){
9728
+ },{"104":104,"11":11,"14":14,"173":173,"183":183,"184":184,"25":25,"45":45}],60:[function(_dereq_,module,exports){
9370
9729
  /**
9371
9730
  * Copyright 2015-present, Facebook, Inc.
9372
9731
  * All rights reserved.
@@ -9501,7 +9860,7 @@ module.exports = {
9501
9860
  traverseTwoPhase: traverseTwoPhase,
9502
9861
  traverseEnterLeave: traverseEnterLeave
9503
9862
  };
9504
- },{"173":173}],60:[function(_dereq_,module,exports){
9863
+ },{"173":173}],61:[function(_dereq_,module,exports){
9505
9864
  /**
9506
9865
  * Copyright 2013-present, Facebook, Inc.
9507
9866
  * All rights reserved.
@@ -9566,7 +9925,7 @@ var ReactDOMUnknownPropertyDevtool = {
9566
9925
  };
9567
9926
 
9568
9927
  module.exports = ReactDOMUnknownPropertyDevtool;
9569
- },{"10":10,"18":18,"183":183}],61:[function(_dereq_,module,exports){
9928
+ },{"10":10,"18":18,"183":183}],62:[function(_dereq_,module,exports){
9570
9929
  /**
9571
9930
  * Copyright 2016-present, Facebook, Inc.
9572
9931
  * All rights reserved.
@@ -9580,7 +9939,9 @@ module.exports = ReactDOMUnknownPropertyDevtool;
9580
9939
 
9581
9940
  'use strict';
9582
9941
 
9583
- var ReactInvalidSetStateWarningDevTool = _dereq_(78);
9942
+ var ExecutionEnvironment = _dereq_(159);
9943
+
9944
+ var performanceNow = _dereq_(181);
9584
9945
  var warning = _dereq_(183);
9585
9946
 
9586
9947
  var eventHandlers = [];
@@ -9601,6 +9962,57 @@ function emitEvent(handlerFunctionName, arg1, arg2, arg3, arg4, arg5) {
9601
9962
  }
9602
9963
  }
9603
9964
 
9965
+ var isProfiling = false;
9966
+ var flushHistory = [];
9967
+ var currentFlushNesting = 0;
9968
+ var currentFlushMeasurements = null;
9969
+ var currentFlushStartTime = null;
9970
+ var currentTimerDebugID = null;
9971
+ var currentTimerStartTime = null;
9972
+ var currentTimerType = null;
9973
+
9974
+ function resetMeasurements() {
9975
+ if ("development" !== 'production') {
9976
+ if (!isProfiling || currentFlushNesting === 0) {
9977
+ currentFlushStartTime = null;
9978
+ currentFlushMeasurements = null;
9979
+ return;
9980
+ }
9981
+
9982
+ var previousStartTime = currentFlushStartTime;
9983
+ var previousMeasurements = currentFlushMeasurements || [];
9984
+ var previousOperations = ReactNativeOperationHistoryDevtool.getHistory();
9985
+
9986
+ if (previousMeasurements.length || previousOperations.length) {
9987
+ var registeredIDs = ReactComponentTreeDevtool.getRegisteredIDs();
9988
+ flushHistory.push({
9989
+ duration: performanceNow() - previousStartTime,
9990
+ measurements: previousMeasurements || [],
9991
+ operations: previousOperations || [],
9992
+ treeSnapshot: registeredIDs.reduce(function (tree, id) {
9993
+ var ownerID = ReactComponentTreeDevtool.getOwnerID(id);
9994
+ var parentID = ReactComponentTreeDevtool.getParentID(id);
9995
+ tree[id] = {
9996
+ displayName: ReactComponentTreeDevtool.getDisplayName(id),
9997
+ text: ReactComponentTreeDevtool.getText(id),
9998
+ updateCount: ReactComponentTreeDevtool.getUpdateCount(id),
9999
+ childIDs: ReactComponentTreeDevtool.getChildIDs(id),
10000
+ // Text nodes don't have owners but this is close enough.
10001
+ ownerID: ownerID || ReactComponentTreeDevtool.getOwnerID(parentID),
10002
+ parentID: parentID
10003
+ };
10004
+ return tree;
10005
+ }, {})
10006
+ });
10007
+ }
10008
+
10009
+ currentFlushStartTime = performanceNow();
10010
+ currentFlushMeasurements = [];
10011
+ ReactComponentTreeDevtool.purgeUnmountedComponents();
10012
+ ReactNativeOperationHistoryDevtool.clearHistory();
10013
+ }
10014
+ }
10015
+
9604
10016
  var ReactDebugTool = {
9605
10017
  addDevtool: function (devtool) {
9606
10018
  eventHandlers.push(devtool);
@@ -9613,33 +10025,132 @@ var ReactDebugTool = {
9613
10025
  }
9614
10026
  }
9615
10027
  },
9616
- onBeginProcessingChildContext: function () {
9617
- emitEvent('onBeginProcessingChildContext');
9618
- },
9619
- onEndProcessingChildContext: function () {
9620
- emitEvent('onEndProcessingChildContext');
10028
+ beginProfiling: function () {
10029
+ if ("development" !== 'production') {
10030
+ if (isProfiling) {
10031
+ return;
10032
+ }
10033
+
10034
+ isProfiling = true;
10035
+ flushHistory.length = 0;
10036
+ resetMeasurements();
10037
+ }
9621
10038
  },
9622
- onSetState: function () {
9623
- emitEvent('onSetState');
10039
+ endProfiling: function () {
10040
+ if ("development" !== 'production') {
10041
+ if (!isProfiling) {
10042
+ return;
10043
+ }
10044
+
10045
+ isProfiling = false;
10046
+ resetMeasurements();
10047
+ }
10048
+ },
10049
+ getFlushHistory: function () {
10050
+ if ("development" !== 'production') {
10051
+ return flushHistory;
10052
+ }
10053
+ },
10054
+ onBeginFlush: function () {
10055
+ if ("development" !== 'production') {
10056
+ currentFlushNesting++;
10057
+ resetMeasurements();
10058
+ }
10059
+ emitEvent('onBeginFlush');
10060
+ },
10061
+ onEndFlush: function () {
10062
+ if ("development" !== 'production') {
10063
+ resetMeasurements();
10064
+ currentFlushNesting--;
10065
+ }
10066
+ emitEvent('onEndFlush');
10067
+ },
10068
+ onBeginLifeCycleTimer: function (debugID, timerType) {
10069
+ emitEvent('onBeginLifeCycleTimer', debugID, timerType);
10070
+ if ("development" !== 'production') {
10071
+ if (isProfiling && currentFlushNesting > 0) {
10072
+ "development" !== 'production' ? warning(!currentTimerType, 'There is an internal error in the React performance measurement code. ' + 'Did not expect %s timer to start while %s timer is still in ' + 'progress for %s instance.', timerType, currentTimerType || 'no', debugID === currentTimerDebugID ? 'the same' : 'another') : void 0;
10073
+ currentTimerStartTime = performanceNow();
10074
+ currentTimerDebugID = debugID;
10075
+ currentTimerType = timerType;
10076
+ }
10077
+ }
10078
+ },
10079
+ onEndLifeCycleTimer: function (debugID, timerType) {
10080
+ if ("development" !== 'production') {
10081
+ if (isProfiling && currentFlushNesting > 0) {
10082
+ "development" !== 'production' ? warning(currentTimerType === timerType, 'There is an internal error in the React performance measurement code. ' + 'We did not expect %s timer to stop while %s timer is still in ' + 'progress for %s instance. Please report this as a bug in React.', timerType, currentTimerType || 'no', debugID === currentTimerDebugID ? 'the same' : 'another') : void 0;
10083
+ currentFlushMeasurements.push({
10084
+ timerType: timerType,
10085
+ instanceID: debugID,
10086
+ duration: performanceNow() - currentTimerStartTime
10087
+ });
10088
+ currentTimerStartTime = null;
10089
+ currentTimerDebugID = null;
10090
+ currentTimerType = null;
10091
+ }
10092
+ }
10093
+ emitEvent('onEndLifeCycleTimer', debugID, timerType);
10094
+ },
10095
+ onBeginReconcilerTimer: function (debugID, timerType) {
10096
+ emitEvent('onBeginReconcilerTimer', debugID, timerType);
10097
+ },
10098
+ onEndReconcilerTimer: function (debugID, timerType) {
10099
+ emitEvent('onEndReconcilerTimer', debugID, timerType);
10100
+ },
10101
+ onBeginProcessingChildContext: function () {
10102
+ emitEvent('onBeginProcessingChildContext');
10103
+ },
10104
+ onEndProcessingChildContext: function () {
10105
+ emitEvent('onEndProcessingChildContext');
10106
+ },
10107
+ onNativeOperation: function (debugID, type, payload) {
10108
+ emitEvent('onNativeOperation', debugID, type, payload);
9624
10109
  },
9625
- onMountRootComponent: function (internalInstance) {
9626
- emitEvent('onMountRootComponent', internalInstance);
10110
+ onSetState: function () {
10111
+ emitEvent('onSetState');
10112
+ },
10113
+ onSetDisplayName: function (debugID, displayName) {
10114
+ emitEvent('onSetDisplayName', debugID, displayName);
10115
+ },
10116
+ onSetChildren: function (debugID, childDebugIDs) {
10117
+ emitEvent('onSetChildren', debugID, childDebugIDs);
9627
10118
  },
9628
- onMountComponent: function (internalInstance) {
9629
- emitEvent('onMountComponent', internalInstance);
10119
+ onSetOwner: function (debugID, ownerDebugID) {
10120
+ emitEvent('onSetOwner', debugID, ownerDebugID);
9630
10121
  },
9631
- onUpdateComponent: function (internalInstance) {
9632
- emitEvent('onUpdateComponent', internalInstance);
10122
+ onSetText: function (debugID, text) {
10123
+ emitEvent('onSetText', debugID, text);
9633
10124
  },
9634
- onUnmountComponent: function (internalInstance) {
9635
- emitEvent('onUnmountComponent', internalInstance);
10125
+ onMountRootComponent: function (debugID) {
10126
+ emitEvent('onMountRootComponent', debugID);
10127
+ },
10128
+ onMountComponent: function (debugID) {
10129
+ emitEvent('onMountComponent', debugID);
10130
+ },
10131
+ onUpdateComponent: function (debugID) {
10132
+ emitEvent('onUpdateComponent', debugID);
10133
+ },
10134
+ onUnmountComponent: function (debugID) {
10135
+ emitEvent('onUnmountComponent', debugID);
9636
10136
  }
9637
10137
  };
9638
10138
 
9639
- ReactDebugTool.addDevtool(ReactInvalidSetStateWarningDevTool);
10139
+ if ("development" !== 'production') {
10140
+ var ReactInvalidSetStateWarningDevTool = _dereq_(77);
10141
+ var ReactNativeOperationHistoryDevtool = _dereq_(84);
10142
+ var ReactComponentTreeDevtool = _dereq_(37);
10143
+ ReactDebugTool.addDevtool(ReactInvalidSetStateWarningDevTool);
10144
+ ReactDebugTool.addDevtool(ReactComponentTreeDevtool);
10145
+ ReactDebugTool.addDevtool(ReactNativeOperationHistoryDevtool);
10146
+ var url = ExecutionEnvironment.canUseDOM && window.location.href || '';
10147
+ if (/[?&]react_perf\b/.test(url)) {
10148
+ ReactDebugTool.beginProfiling();
10149
+ }
10150
+ }
9640
10151
 
9641
10152
  module.exports = ReactDebugTool;
9642
- },{"183":183,"78":78}],62:[function(_dereq_,module,exports){
10153
+ },{"159":159,"181":181,"183":183,"37":37,"77":77,"84":84}],63:[function(_dereq_,module,exports){
9643
10154
  /**
9644
10155
  * Copyright 2013-present, Facebook, Inc.
9645
10156
  * All rights reserved.
@@ -9708,7 +10219,7 @@ var ReactDefaultBatchingStrategy = {
9708
10219
  };
9709
10220
 
9710
10221
  module.exports = ReactDefaultBatchingStrategy;
9711
- },{"104":104,"124":124,"165":165,"184":184}],63:[function(_dereq_,module,exports){
10222
+ },{"104":104,"124":124,"165":165,"184":184}],64:[function(_dereq_,module,exports){
9712
10223
  /**
9713
10224
  * Copyright 2013-present, Facebook, Inc.
9714
10225
  * All rights reserved.
@@ -9726,17 +10237,16 @@ var BeforeInputEventPlugin = _dereq_(2);
9726
10237
  var ChangeEventPlugin = _dereq_(6);
9727
10238
  var DefaultEventPluginOrder = _dereq_(13);
9728
10239
  var EnterLeaveEventPlugin = _dereq_(15);
9729
- var ExecutionEnvironment = _dereq_(159);
9730
10240
  var HTMLDOMPropertyConfig = _dereq_(22);
9731
10241
  var ReactComponentBrowserEnvironment = _dereq_(35);
9732
- var ReactDOMComponent = _dereq_(42);
9733
- var ReactDOMComponentTree = _dereq_(44);
9734
- var ReactDOMEmptyComponent = _dereq_(47);
9735
- var ReactDOMTreeTraversal = _dereq_(59);
9736
- var ReactDOMTextComponent = _dereq_(57);
9737
- var ReactDefaultBatchingStrategy = _dereq_(62);
9738
- var ReactEventListener = _dereq_(71);
9739
- var ReactInjection = _dereq_(74);
10242
+ var ReactDOMComponent = _dereq_(43);
10243
+ var ReactDOMComponentTree = _dereq_(45);
10244
+ var ReactDOMEmptyComponent = _dereq_(48);
10245
+ var ReactDOMTreeTraversal = _dereq_(60);
10246
+ var ReactDOMTextComponent = _dereq_(58);
10247
+ var ReactDefaultBatchingStrategy = _dereq_(63);
10248
+ var ReactEventListener = _dereq_(70);
10249
+ var ReactInjection = _dereq_(73);
9740
10250
  var ReactReconcileTransaction = _dereq_(92);
9741
10251
  var SVGDOMPropertyConfig = _dereq_(108);
9742
10252
  var SelectEventPlugin = _dereq_(109);
@@ -9789,548 +10299,12 @@ function inject() {
9789
10299
  ReactInjection.Updates.injectBatchingStrategy(ReactDefaultBatchingStrategy);
9790
10300
 
9791
10301
  ReactInjection.Component.injectEnvironment(ReactComponentBrowserEnvironment);
9792
-
9793
- if ("development" !== 'production') {
9794
- var url = ExecutionEnvironment.canUseDOM && window.location.href || '';
9795
- if (/[?&]react_perf\b/.test(url)) {
9796
- var ReactDefaultPerf = _dereq_(64);
9797
- ReactDefaultPerf.start();
9798
- }
9799
- }
9800
10302
  }
9801
10303
 
9802
10304
  module.exports = {
9803
10305
  inject: inject
9804
10306
  };
9805
- },{"108":108,"109":109,"110":110,"13":13,"15":15,"159":159,"2":2,"22":22,"35":35,"42":42,"44":44,"47":47,"57":57,"59":59,"6":6,"62":62,"64":64,"71":71,"74":74,"92":92}],64:[function(_dereq_,module,exports){
9806
- /**
9807
- * Copyright 2013-present, Facebook, Inc.
9808
- * All rights reserved.
9809
- *
9810
- * This source code is licensed under the BSD-style license found in the
9811
- * LICENSE file in the root directory of this source tree. An additional grant
9812
- * of patent rights can be found in the PATENTS file in the same directory.
9813
- *
9814
- * @providesModule ReactDefaultPerf
9815
- */
9816
-
9817
- 'use strict';
9818
-
9819
- var DOMProperty = _dereq_(10);
9820
- var ReactDOMComponentTree = _dereq_(44);
9821
- var ReactDefaultPerfAnalysis = _dereq_(65);
9822
- var ReactMount = _dereq_(81);
9823
- var ReactPerf = _dereq_(88);
9824
-
9825
- var performanceNow = _dereq_(181);
9826
- var warning = _dereq_(183);
9827
-
9828
- function roundFloat(val) {
9829
- return Math.floor(val * 100) / 100;
9830
- }
9831
-
9832
- function addValue(obj, key, val) {
9833
- obj[key] = (obj[key] || 0) + val;
9834
- }
9835
-
9836
- // Composite/text components don't have any built-in ID: we have to make our own
9837
- var compositeIDMap;
9838
- var compositeIDCounter = 17000;
9839
- function getIDOfComposite(inst) {
9840
- if (!compositeIDMap) {
9841
- compositeIDMap = new WeakMap();
9842
- }
9843
- if (compositeIDMap.has(inst)) {
9844
- return compositeIDMap.get(inst);
9845
- } else {
9846
- var id = compositeIDCounter++;
9847
- compositeIDMap.set(inst, id);
9848
- return id;
9849
- }
9850
- }
9851
-
9852
- function getID(inst) {
9853
- if (inst.hasOwnProperty('_rootNodeID')) {
9854
- return inst._rootNodeID;
9855
- } else {
9856
- return getIDOfComposite(inst);
9857
- }
9858
- }
9859
-
9860
- function stripComplexValues(key, value) {
9861
- if (typeof value !== 'object' || Array.isArray(value) || value == null) {
9862
- return value;
9863
- }
9864
- var prototype = Object.getPrototypeOf(value);
9865
- if (!prototype || prototype === Object.prototype) {
9866
- return value;
9867
- }
9868
- return '<not serializable>';
9869
- }
9870
-
9871
- // This implementation of ReactPerf is going away some time mid 15.x.
9872
- // While we plan to keep most of the API, the actual format of measurements
9873
- // will change dramatically. To signal this, we wrap them into an opaque-ish
9874
- // object to discourage reaching into it until the API stabilizes.
9875
- function wrapLegacyMeasurements(measurements) {
9876
- return { __unstable_this_format_will_change: measurements };
9877
- }
9878
- function unwrapLegacyMeasurements(measurements) {
9879
- return measurements && measurements.__unstable_this_format_will_change || measurements;
9880
- }
9881
-
9882
- var warnedAboutPrintDOM = false;
9883
- var warnedAboutGetMeasurementsSummaryMap = false;
9884
-
9885
- var ReactDefaultPerf = {
9886
- _allMeasurements: [], // last item in the list is the current one
9887
- _mountStack: [0],
9888
- _compositeStack: [],
9889
- _injected: false,
9890
-
9891
- start: function () {
9892
- if (!ReactDefaultPerf._injected) {
9893
- ReactPerf.injection.injectMeasure(ReactDefaultPerf.measure);
9894
- }
9895
-
9896
- ReactDefaultPerf._allMeasurements.length = 0;
9897
- ReactPerf.enableMeasure = true;
9898
- },
9899
-
9900
- stop: function () {
9901
- ReactPerf.enableMeasure = false;
9902
- },
9903
-
9904
- getLastMeasurements: function () {
9905
- return wrapLegacyMeasurements(ReactDefaultPerf._allMeasurements);
9906
- },
9907
-
9908
- printExclusive: function (measurements) {
9909
- measurements = unwrapLegacyMeasurements(measurements || ReactDefaultPerf._allMeasurements);
9910
- var summary = ReactDefaultPerfAnalysis.getExclusiveSummary(measurements);
9911
- console.table(summary.map(function (item) {
9912
- return {
9913
- 'Component class name': item.componentName,
9914
- 'Total inclusive time (ms)': roundFloat(item.inclusive),
9915
- 'Exclusive mount time (ms)': roundFloat(item.exclusive),
9916
- 'Exclusive render time (ms)': roundFloat(item.render),
9917
- 'Mount time per instance (ms)': roundFloat(item.exclusive / item.count),
9918
- 'Render time per instance (ms)': roundFloat(item.render / item.count),
9919
- 'Instances': item.count
9920
- };
9921
- }));
9922
- // TODO: ReactDefaultPerfAnalysis.getTotalTime() does not return the correct
9923
- // number.
9924
- },
9925
-
9926
- printInclusive: function (measurements) {
9927
- measurements = unwrapLegacyMeasurements(measurements || ReactDefaultPerf._allMeasurements);
9928
- var summary = ReactDefaultPerfAnalysis.getInclusiveSummary(measurements);
9929
- console.table(summary.map(function (item) {
9930
- return {
9931
- 'Owner > component': item.componentName,
9932
- 'Inclusive time (ms)': roundFloat(item.time),
9933
- 'Instances': item.count
9934
- };
9935
- }));
9936
- console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');
9937
- },
9938
-
9939
- getMeasurementsSummaryMap: function (measurements) {
9940
- "development" !== 'production' ? warning(warnedAboutGetMeasurementsSummaryMap, '`ReactPerf.getMeasurementsSummaryMap(...)` is deprecated. Use ' + '`ReactPerf.getWasted(...)` instead.') : void 0;
9941
- warnedAboutGetMeasurementsSummaryMap = true;
9942
- return ReactDefaultPerf.getWasted(measurements);
9943
- },
9944
-
9945
- getWasted: function (measurements) {
9946
- measurements = unwrapLegacyMeasurements(measurements);
9947
- var summary = ReactDefaultPerfAnalysis.getInclusiveSummary(measurements, true);
9948
- return summary.map(function (item) {
9949
- return {
9950
- 'Owner > component': item.componentName,
9951
- 'Wasted time (ms)': item.time,
9952
- 'Instances': item.count
9953
- };
9954
- });
9955
- },
9956
-
9957
- printWasted: function (measurements) {
9958
- measurements = unwrapLegacyMeasurements(measurements || ReactDefaultPerf._allMeasurements);
9959
- console.table(ReactDefaultPerf.getWasted(measurements));
9960
- console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');
9961
- },
9962
-
9963
- printDOM: function (measurements) {
9964
- "development" !== 'production' ? warning(warnedAboutPrintDOM, '`ReactPerf.printDOM(...)` is deprecated. Use ' + '`ReactPerf.printOperations(...)` instead.') : void 0;
9965
- warnedAboutPrintDOM = true;
9966
- return ReactDefaultPerf.printOperations(measurements);
9967
- },
9968
-
9969
- printOperations: function (measurements) {
9970
- measurements = unwrapLegacyMeasurements(measurements || ReactDefaultPerf._allMeasurements);
9971
- var summary = ReactDefaultPerfAnalysis.getDOMSummary(measurements);
9972
- console.table(summary.map(function (item) {
9973
- var result = {};
9974
- result[DOMProperty.ID_ATTRIBUTE_NAME] = item.id;
9975
- result.type = item.type;
9976
- result.args = JSON.stringify(item.args, stripComplexValues);
9977
- return result;
9978
- }));
9979
- console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');
9980
- },
9981
-
9982
- _recordWrite: function (id, fnName, totalTime, args) {
9983
- // TODO: totalTime isn't that useful since it doesn't count paints/reflows
9984
- var entry = ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1];
9985
- var writes = entry.writes;
9986
- writes[id] = writes[id] || [];
9987
- writes[id].push({
9988
- type: fnName,
9989
- time: totalTime,
9990
- args: args
9991
- });
9992
- },
9993
-
9994
- measure: function (moduleName, fnName, func) {
9995
- return function () {
9996
- for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
9997
- args[_key] = arguments[_key];
9998
- }
9999
-
10000
- var totalTime;
10001
- var rv;
10002
- var start;
10003
-
10004
- var entry = ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1];
10005
-
10006
- if (fnName === '_renderNewRootComponent' || fnName === 'flushBatchedUpdates') {
10007
- // A "measurement" is a set of metrics recorded for each flush. We want
10008
- // to group the metrics for a given flush together so we can look at the
10009
- // components that rendered and the DOM operations that actually
10010
- // happened to determine the amount of "wasted work" performed.
10011
- ReactDefaultPerf._allMeasurements.push(entry = {
10012
- exclusive: {},
10013
- inclusive: {},
10014
- render: {},
10015
- counts: {},
10016
- writes: {},
10017
- displayNames: {},
10018
- hierarchy: {},
10019
- totalTime: 0,
10020
- created: {}
10021
- });
10022
- start = performanceNow();
10023
- rv = func.apply(this, args);
10024
- entry.totalTime = performanceNow() - start;
10025
- return rv;
10026
- } else if (fnName === '_mountImageIntoNode' || moduleName === 'ReactDOMIDOperations' || moduleName === 'CSSPropertyOperations' || moduleName === 'DOMChildrenOperations' || moduleName === 'DOMPropertyOperations' || moduleName === 'ReactComponentBrowserEnvironment') {
10027
- start = performanceNow();
10028
- rv = func.apply(this, args);
10029
- totalTime = performanceNow() - start;
10030
-
10031
- if (fnName === '_mountImageIntoNode') {
10032
- ReactDefaultPerf._recordWrite('', fnName, totalTime, args[0]);
10033
- } else if (fnName === 'dangerouslyProcessChildrenUpdates') {
10034
- // special format
10035
- args[1].forEach(function (update) {
10036
- var writeArgs = {};
10037
- if (update.fromIndex !== null) {
10038
- writeArgs.fromIndex = update.fromIndex;
10039
- }
10040
- if (update.toIndex !== null) {
10041
- writeArgs.toIndex = update.toIndex;
10042
- }
10043
- if (update.content !== null) {
10044
- writeArgs.content = update.content;
10045
- }
10046
- ReactDefaultPerf._recordWrite(args[0]._rootNodeID, update.type, totalTime, writeArgs);
10047
- });
10048
- } else {
10049
- // basic format
10050
- var id = args[0];
10051
- if (moduleName === 'EventPluginHub') {
10052
- id = id._rootNodeID;
10053
- } else if (fnName === 'replaceNodeWithMarkup') {
10054
- // Old node is already unmounted; can't get its instance
10055
- id = ReactDOMComponentTree.getInstanceFromNode(args[1].node)._rootNodeID;
10056
- } else if (fnName === 'replaceDelimitedText') {
10057
- id = getID(ReactDOMComponentTree.getInstanceFromNode(args[0]));
10058
- } else if (typeof id === 'object') {
10059
- id = getID(ReactDOMComponentTree.getInstanceFromNode(args[0]));
10060
- }
10061
- ReactDefaultPerf._recordWrite(id, fnName, totalTime, Array.prototype.slice.call(args, 1));
10062
- }
10063
- return rv;
10064
- } else if (moduleName === 'ReactCompositeComponent' && (fnName === 'mountComponent' || fnName === 'updateComponent' || // TODO: receiveComponent()?
10065
- fnName === '_renderValidatedComponent')) {
10066
-
10067
- if (this._currentElement.type === ReactMount.TopLevelWrapper) {
10068
- return func.apply(this, args);
10069
- }
10070
-
10071
- var rootNodeID = getIDOfComposite(this);
10072
- var isRender = fnName === '_renderValidatedComponent';
10073
- var isMount = fnName === 'mountComponent';
10074
-
10075
- var mountStack = ReactDefaultPerf._mountStack;
10076
-
10077
- if (isRender) {
10078
- addValue(entry.counts, rootNodeID, 1);
10079
- } else if (isMount) {
10080
- entry.created[rootNodeID] = true;
10081
- mountStack.push(0);
10082
- }
10083
-
10084
- ReactDefaultPerf._compositeStack.push(rootNodeID);
10085
-
10086
- start = performanceNow();
10087
- rv = func.apply(this, args);
10088
- totalTime = performanceNow() - start;
10089
-
10090
- ReactDefaultPerf._compositeStack.pop();
10091
-
10092
- if (isRender) {
10093
- addValue(entry.render, rootNodeID, totalTime);
10094
- } else if (isMount) {
10095
- var subMountTime = mountStack.pop();
10096
- mountStack[mountStack.length - 1] += totalTime;
10097
- addValue(entry.exclusive, rootNodeID, totalTime - subMountTime);
10098
- addValue(entry.inclusive, rootNodeID, totalTime);
10099
- } else {
10100
- addValue(entry.inclusive, rootNodeID, totalTime);
10101
- }
10102
-
10103
- entry.displayNames[rootNodeID] = {
10104
- current: this.getName(),
10105
- owner: this._currentElement._owner ? this._currentElement._owner.getName() : '<root>'
10106
- };
10107
-
10108
- return rv;
10109
- } else if ((moduleName === 'ReactDOMComponent' || moduleName === 'ReactDOMTextComponent') && (fnName === 'mountComponent' || fnName === 'receiveComponent')) {
10110
-
10111
- rv = func.apply(this, args);
10112
- entry.hierarchy[getID(this)] = ReactDefaultPerf._compositeStack.slice();
10113
- return rv;
10114
- } else {
10115
- return func.apply(this, args);
10116
- }
10117
- };
10118
- }
10119
- };
10120
-
10121
- module.exports = ReactDefaultPerf;
10122
- },{"10":10,"181":181,"183":183,"44":44,"65":65,"81":81,"88":88}],65:[function(_dereq_,module,exports){
10123
- /**
10124
- * Copyright 2013-present, Facebook, Inc.
10125
- * All rights reserved.
10126
- *
10127
- * This source code is licensed under the BSD-style license found in the
10128
- * LICENSE file in the root directory of this source tree. An additional grant
10129
- * of patent rights can be found in the PATENTS file in the same directory.
10130
- *
10131
- * @providesModule ReactDefaultPerfAnalysis
10132
- */
10133
-
10134
- 'use strict';
10135
-
10136
- // Don't try to save users less than 1.2ms (a number I made up)
10137
-
10138
- var _assign = _dereq_(184);
10139
-
10140
- var DONT_CARE_THRESHOLD = 1.2;
10141
- var DOM_OPERATION_TYPES = {
10142
- '_mountImageIntoNode': 'set innerHTML',
10143
- INSERT_MARKUP: 'set innerHTML',
10144
- MOVE_EXISTING: 'move',
10145
- REMOVE_NODE: 'remove',
10146
- SET_MARKUP: 'set innerHTML',
10147
- TEXT_CONTENT: 'set textContent',
10148
- 'setValueForProperty': 'update attribute',
10149
- 'setValueForAttribute': 'update attribute',
10150
- 'deleteValueForProperty': 'remove attribute',
10151
- 'setValueForStyles': 'update styles',
10152
- 'replaceNodeWithMarkup': 'replace',
10153
- 'replaceDelimitedText': 'replace'
10154
- };
10155
-
10156
- function getTotalTime(measurements) {
10157
- // TODO: return number of DOM ops? could be misleading.
10158
- // TODO: measure dropped frames after reconcile?
10159
- // TODO: log total time of each reconcile and the top-level component
10160
- // class that triggered it.
10161
- var totalTime = 0;
10162
- for (var i = 0; i < measurements.length; i++) {
10163
- var measurement = measurements[i];
10164
- totalTime += measurement.totalTime;
10165
- }
10166
- return totalTime;
10167
- }
10168
-
10169
- function getDOMSummary(measurements) {
10170
- var items = [];
10171
- measurements.forEach(function (measurement) {
10172
- Object.keys(measurement.writes).forEach(function (id) {
10173
- measurement.writes[id].forEach(function (write) {
10174
- items.push({
10175
- id: id,
10176
- type: DOM_OPERATION_TYPES[write.type] || write.type,
10177
- args: write.args
10178
- });
10179
- });
10180
- });
10181
- });
10182
- return items;
10183
- }
10184
-
10185
- function getExclusiveSummary(measurements) {
10186
- var candidates = {};
10187
- var displayName;
10188
-
10189
- for (var i = 0; i < measurements.length; i++) {
10190
- var measurement = measurements[i];
10191
- var allIDs = _assign({}, measurement.exclusive, measurement.inclusive);
10192
-
10193
- for (var id in allIDs) {
10194
- displayName = measurement.displayNames[id].current;
10195
-
10196
- candidates[displayName] = candidates[displayName] || {
10197
- componentName: displayName,
10198
- inclusive: 0,
10199
- exclusive: 0,
10200
- render: 0,
10201
- count: 0
10202
- };
10203
- if (measurement.render[id]) {
10204
- candidates[displayName].render += measurement.render[id];
10205
- }
10206
- if (measurement.exclusive[id]) {
10207
- candidates[displayName].exclusive += measurement.exclusive[id];
10208
- }
10209
- if (measurement.inclusive[id]) {
10210
- candidates[displayName].inclusive += measurement.inclusive[id];
10211
- }
10212
- if (measurement.counts[id]) {
10213
- candidates[displayName].count += measurement.counts[id];
10214
- }
10215
- }
10216
- }
10217
-
10218
- // Now make a sorted array with the results.
10219
- var arr = [];
10220
- for (displayName in candidates) {
10221
- if (candidates[displayName].exclusive >= DONT_CARE_THRESHOLD) {
10222
- arr.push(candidates[displayName]);
10223
- }
10224
- }
10225
-
10226
- arr.sort(function (a, b) {
10227
- return b.exclusive - a.exclusive;
10228
- });
10229
-
10230
- return arr;
10231
- }
10232
-
10233
- function getInclusiveSummary(measurements, onlyClean) {
10234
- var candidates = {};
10235
- var inclusiveKey;
10236
-
10237
- for (var i = 0; i < measurements.length; i++) {
10238
- var measurement = measurements[i];
10239
- var allIDs = _assign({}, measurement.exclusive, measurement.inclusive);
10240
- var cleanComponents;
10241
-
10242
- if (onlyClean) {
10243
- cleanComponents = getUnchangedComponents(measurement);
10244
- }
10245
-
10246
- for (var id in allIDs) {
10247
- if (onlyClean && !cleanComponents[id]) {
10248
- continue;
10249
- }
10250
-
10251
- var displayName = measurement.displayNames[id];
10252
-
10253
- // Inclusive time is not useful for many components without knowing where
10254
- // they are instantiated. So we aggregate inclusive time with both the
10255
- // owner and current displayName as the key.
10256
- inclusiveKey = displayName.owner + ' > ' + displayName.current;
10257
-
10258
- candidates[inclusiveKey] = candidates[inclusiveKey] || {
10259
- componentName: inclusiveKey,
10260
- time: 0,
10261
- count: 0
10262
- };
10263
-
10264
- if (measurement.inclusive[id]) {
10265
- candidates[inclusiveKey].time += measurement.inclusive[id];
10266
- }
10267
- if (measurement.counts[id]) {
10268
- candidates[inclusiveKey].count += measurement.counts[id];
10269
- }
10270
- }
10271
- }
10272
-
10273
- // Now make a sorted array with the results.
10274
- var arr = [];
10275
- for (inclusiveKey in candidates) {
10276
- if (candidates[inclusiveKey].time >= DONT_CARE_THRESHOLD) {
10277
- arr.push(candidates[inclusiveKey]);
10278
- }
10279
- }
10280
-
10281
- arr.sort(function (a, b) {
10282
- return b.time - a.time;
10283
- });
10284
-
10285
- return arr;
10286
- }
10287
-
10288
- function getUnchangedComponents(measurement) {
10289
- // For a given reconcile, look at which components did not actually
10290
- // render anything to the DOM and return a mapping of their ID to
10291
- // the amount of time it took to render the entire subtree.
10292
- var cleanComponents = {};
10293
- var writes = measurement.writes;
10294
- var hierarchy = measurement.hierarchy;
10295
- var dirtyComposites = {};
10296
- Object.keys(writes).forEach(function (id) {
10297
- writes[id].forEach(function (write) {
10298
- // Root mounting (innerHTML set) is recorded with an ID of ''
10299
- if (id !== '' && hierarchy.hasOwnProperty(id)) {
10300
- hierarchy[id].forEach(function (c) {
10301
- return dirtyComposites[c] = true;
10302
- });
10303
- }
10304
- });
10305
- });
10306
- var allIDs = _assign({}, measurement.exclusive, measurement.inclusive);
10307
-
10308
- for (var id in allIDs) {
10309
- var isDirty = false;
10310
- // See if any of the DOM operations applied to this component's subtree.
10311
- if (dirtyComposites[id]) {
10312
- isDirty = true;
10313
- }
10314
- // check if component newly created
10315
- if (measurement.created[id]) {
10316
- isDirty = true;
10317
- }
10318
- if (!isDirty && measurement.counts[id] > 0) {
10319
- cleanComponents[id] = true;
10320
- }
10321
- }
10322
- return cleanComponents;
10323
- }
10324
-
10325
- var ReactDefaultPerfAnalysis = {
10326
- getExclusiveSummary: getExclusiveSummary,
10327
- getInclusiveSummary: getInclusiveSummary,
10328
- getDOMSummary: getDOMSummary,
10329
- getTotalTime: getTotalTime
10330
- };
10331
-
10332
- module.exports = ReactDefaultPerfAnalysis;
10333
- },{"184":184}],66:[function(_dereq_,module,exports){
10307
+ },{"108":108,"109":109,"110":110,"13":13,"15":15,"2":2,"22":22,"35":35,"43":43,"45":45,"48":48,"58":58,"6":6,"60":60,"63":63,"70":70,"73":73,"92":92}],65:[function(_dereq_,module,exports){
10334
10308
  /**
10335
10309
  * Copyright 2014-present, Facebook, Inc.
10336
10310
  * All rights reserved.
@@ -10346,7 +10320,7 @@ module.exports = ReactDefaultPerfAnalysis;
10346
10320
 
10347
10321
  var _assign = _dereq_(184);
10348
10322
 
10349
- var ReactCurrentOwner = _dereq_(39);
10323
+ var ReactCurrentOwner = _dereq_(40);
10350
10324
 
10351
10325
  var warning = _dereq_(183);
10352
10326
  var canDefineProperty = _dereq_(128);
@@ -10446,6 +10420,10 @@ var ReactElement = function (type, key, ref, self, source, owner, props) {
10446
10420
  return element;
10447
10421
  };
10448
10422
 
10423
+ /**
10424
+ * Create and return a new ReactElement of the given type.
10425
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.createelement
10426
+ */
10449
10427
  ReactElement.createElement = function (type, config, children) {
10450
10428
  var propName;
10451
10429
 
@@ -10459,6 +10437,11 @@ ReactElement.createElement = function (type, config, children) {
10459
10437
 
10460
10438
  if (config != null) {
10461
10439
  if ("development" !== 'production') {
10440
+ "development" !== 'production' ? warning(
10441
+ /* eslint-disable no-proto */
10442
+ config.__proto__ == null || config.__proto__ === Object.prototype,
10443
+ /* eslint-enable no-proto */
10444
+ 'React.createElement(...): Expected props argument to be a plain object. ' + 'Properties defined in its prototype chain will be ignored.') : void 0;
10462
10445
  ref = !config.hasOwnProperty('ref') || Object.getOwnPropertyDescriptor(config, 'ref').get ? null : config.ref;
10463
10446
  key = !config.hasOwnProperty('key') || Object.getOwnPropertyDescriptor(config, 'key').get ? null : '' + config.key;
10464
10447
  } else {
@@ -10530,6 +10513,10 @@ ReactElement.createElement = function (type, config, children) {
10530
10513
  return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);
10531
10514
  };
10532
10515
 
10516
+ /**
10517
+ * Return a function that produces ReactElements of a given type.
10518
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.createfactory
10519
+ */
10533
10520
  ReactElement.createFactory = function (type) {
10534
10521
  var factory = ReactElement.createElement.bind(null, type);
10535
10522
  // Expose the type on the factory and the prototype so that it can be
@@ -10547,6 +10534,10 @@ ReactElement.cloneAndReplaceKey = function (oldElement, newKey) {
10547
10534
  return newElement;
10548
10535
  };
10549
10536
 
10537
+ /**
10538
+ * Clone and return a new ReactElement using element as the starting point.
10539
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.cloneelement
10540
+ */
10550
10541
  ReactElement.cloneElement = function (element, config, children) {
10551
10542
  var propName;
10552
10543
 
@@ -10567,6 +10558,13 @@ ReactElement.cloneElement = function (element, config, children) {
10567
10558
  var owner = element._owner;
10568
10559
 
10569
10560
  if (config != null) {
10561
+ if ("development" !== 'production') {
10562
+ "development" !== 'production' ? warning(
10563
+ /* eslint-disable no-proto */
10564
+ config.__proto__ == null || config.__proto__ === Object.prototype,
10565
+ /* eslint-enable no-proto */
10566
+ 'React.cloneElement(...): Expected props argument to be a plain object. ' + 'Properties defined in its prototype chain will be ignored.') : void 0;
10567
+ }
10570
10568
  if (config.ref !== undefined) {
10571
10569
  // Silently steal the ref from the parent.
10572
10570
  ref = config.ref;
@@ -10609,6 +10607,8 @@ ReactElement.cloneElement = function (element, config, children) {
10609
10607
  };
10610
10608
 
10611
10609
  /**
10610
+ * Verifies the object is a ReactElement.
10611
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.isvalidelement
10612
10612
  * @param {?object} object
10613
10613
  * @return {boolean} True if `object` is a valid component.
10614
10614
  * @final
@@ -10618,7 +10618,7 @@ ReactElement.isValidElement = function (object) {
10618
10618
  };
10619
10619
 
10620
10620
  module.exports = ReactElement;
10621
- },{"128":128,"183":183,"184":184,"39":39}],67:[function(_dereq_,module,exports){
10621
+ },{"128":128,"183":183,"184":184,"40":40}],66:[function(_dereq_,module,exports){
10622
10622
  /**
10623
10623
  * Copyright 2014-present, Facebook, Inc.
10624
10624
  * All rights reserved.
@@ -10639,10 +10639,10 @@ module.exports = ReactElement;
10639
10639
 
10640
10640
  'use strict';
10641
10641
 
10642
- var ReactElement = _dereq_(66);
10642
+ var ReactElement = _dereq_(65);
10643
10643
  var ReactPropTypeLocations = _dereq_(90);
10644
10644
  var ReactPropTypeLocationNames = _dereq_(89);
10645
- var ReactCurrentOwner = _dereq_(39);
10645
+ var ReactCurrentOwner = _dereq_(40);
10646
10646
 
10647
10647
  var canDefineProperty = _dereq_(128);
10648
10648
  var getIteratorFn = _dereq_(139);
@@ -10900,7 +10900,7 @@ var ReactElementValidator = {
10900
10900
  };
10901
10901
 
10902
10902
  module.exports = ReactElementValidator;
10903
- },{"128":128,"139":139,"173":173,"183":183,"39":39,"66":66,"89":89,"90":90}],68:[function(_dereq_,module,exports){
10903
+ },{"128":128,"139":139,"173":173,"183":183,"40":40,"65":65,"89":89,"90":90}],67:[function(_dereq_,module,exports){
10904
10904
  /**
10905
10905
  * Copyright 2014-present, Facebook, Inc.
10906
10906
  * All rights reserved.
@@ -10931,7 +10931,7 @@ var ReactEmptyComponent = {
10931
10931
  ReactEmptyComponent.injection = ReactEmptyComponentInjection;
10932
10932
 
10933
10933
  module.exports = ReactEmptyComponent;
10934
- },{}],69:[function(_dereq_,module,exports){
10934
+ },{}],68:[function(_dereq_,module,exports){
10935
10935
  /**
10936
10936
  * Copyright 2013-present, Facebook, Inc.
10937
10937
  * All rights reserved.
@@ -10945,6 +10945,8 @@ module.exports = ReactEmptyComponent;
10945
10945
 
10946
10946
  'use strict';
10947
10947
 
10948
+ var SyntheticDragEvent = _dereq_(114);
10949
+
10948
10950
  var caughtError = null;
10949
10951
 
10950
10952
  /**
@@ -10989,26 +10991,74 @@ var ReactErrorUtils = {
10989
10991
  };
10990
10992
 
10991
10993
  if ("development" !== 'production') {
10992
- /**
10993
- * To help development we can get better devtools integration by simulating a
10994
- * real browser event.
10995
- */
10996
- if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') {
10997
- var fakeNode = document.createElement('react');
10998
- ReactErrorUtils.invokeGuardedCallback = function (name, func, a, b) {
10999
- var boundFunc = func.bind(null, a, b);
11000
- var evtType = 'react-' + name;
11001
- fakeNode.addEventListener(evtType, boundFunc, false);
11002
- var evt = document.createEvent('Event');
11003
- evt.initEvent(evtType, false, false);
11004
- fakeNode.dispatchEvent(evt);
11005
- fakeNode.removeEventListener(evtType, boundFunc, false);
10994
+ var fakeNode;
10995
+ var cacheCanWrapEvent;
10996
+
10997
+ (function () {
10998
+
10999
+ /**
11000
+ * IE and Edge don't allow access to the DataTransfer.dropEffect property when
11001
+ * it's wrapped in another event. This function detects whether we're in an
11002
+ * environment that behaves this way.
11003
+ *
11004
+ * @param {*} ev Event that is being tested
11005
+ */
11006
+
11007
+ var canWrapEvent = function (ev) {
11008
+ if (!(ev instanceof SyntheticDragEvent)) {
11009
+ return true;
11010
+ } else if (cacheCanWrapEvent !== null) {
11011
+ return cacheCanWrapEvent;
11012
+ }
11013
+
11014
+ var canAccessDropEffect = false;
11015
+ function handleWrappedEvent() {
11016
+ try {
11017
+ ev.dataTransfer.dropEffect; // eslint-disable-line no-unused-expressions
11018
+ canAccessDropEffect = true;
11019
+ } catch (e) {}
11020
+ }
11021
+
11022
+ var wrappedEventName = 'react-wrappeddragevent';
11023
+ var wrappedEvent = document.createEvent('Event');
11024
+ wrappedEvent.initEvent(wrappedEventName, false, false);
11025
+ fakeNode.addEventListener(wrappedEventName, handleWrappedEvent, false);
11026
+ fakeNode.dispatchEvent(wrappedEvent);
11027
+ fakeNode.removeEventListener(wrappedEventName, handleWrappedEvent, false);
11028
+
11029
+ cacheCanWrapEvent = canAccessDropEffect;
11030
+ return canAccessDropEffect;
11006
11031
  };
11007
- }
11032
+
11033
+ /**
11034
+ * To help development we can get better devtools integration by simulating a
11035
+ * real browser event.
11036
+ */
11037
+ if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') {
11038
+ fakeNode = document.createElement('react');
11039
+
11040
+ ReactErrorUtils.invokeGuardedCallback = function (name, func, a, b) {
11041
+ if (!canWrapEvent(a)) {
11042
+ invokeGuardedCallback(name, func, a, b);
11043
+ return;
11044
+ }
11045
+
11046
+ var boundFunc = func.bind(null, a, b);
11047
+ var evtType = 'react-' + name;
11048
+ fakeNode.addEventListener(evtType, boundFunc, false);
11049
+ var evt = document.createEvent('Event');
11050
+ evt.initEvent(evtType, false, false);
11051
+ fakeNode.dispatchEvent(evt);
11052
+ fakeNode.removeEventListener(evtType, boundFunc, false);
11053
+ };
11054
+ }
11055
+
11056
+ cacheCanWrapEvent = null;
11057
+ })();
11008
11058
  }
11009
11059
 
11010
11060
  module.exports = ReactErrorUtils;
11011
- },{}],70:[function(_dereq_,module,exports){
11061
+ },{"114":114}],69:[function(_dereq_,module,exports){
11012
11062
  /**
11013
11063
  * Copyright 2013-present, Facebook, Inc.
11014
11064
  * All rights reserved.
@@ -11042,7 +11092,7 @@ var ReactEventEmitterMixin = {
11042
11092
  };
11043
11093
 
11044
11094
  module.exports = ReactEventEmitterMixin;
11045
- },{"17":17}],71:[function(_dereq_,module,exports){
11095
+ },{"17":17}],70:[function(_dereq_,module,exports){
11046
11096
  /**
11047
11097
  * Copyright 2013-present, Facebook, Inc.
11048
11098
  * All rights reserved.
@@ -11061,7 +11111,7 @@ var _assign = _dereq_(184);
11061
11111
  var EventListener = _dereq_(158);
11062
11112
  var ExecutionEnvironment = _dereq_(159);
11063
11113
  var PooledClass = _dereq_(26);
11064
- var ReactDOMComponentTree = _dereq_(44);
11114
+ var ReactDOMComponentTree = _dereq_(45);
11065
11115
  var ReactUpdates = _dereq_(104);
11066
11116
 
11067
11117
  var getEventTarget = _dereq_(138);
@@ -11200,7 +11250,7 @@ var ReactEventListener = {
11200
11250
  };
11201
11251
 
11202
11252
  module.exports = ReactEventListener;
11203
- },{"104":104,"138":138,"158":158,"159":159,"170":170,"184":184,"26":26,"44":44}],72:[function(_dereq_,module,exports){
11253
+ },{"104":104,"138":138,"158":158,"159":159,"170":170,"184":184,"26":26,"45":45}],71:[function(_dereq_,module,exports){
11204
11254
  /**
11205
11255
  * Copyright 2013-present, Facebook, Inc.
11206
11256
  * All rights reserved.
@@ -11222,7 +11272,7 @@ var ReactFeatureFlags = {
11222
11272
  };
11223
11273
 
11224
11274
  module.exports = ReactFeatureFlags;
11225
- },{}],73:[function(_dereq_,module,exports){
11275
+ },{}],72:[function(_dereq_,module,exports){
11226
11276
  /**
11227
11277
  * Copyright 2015-present, Facebook, Inc.
11228
11278
  * All rights reserved.
@@ -11237,7 +11287,7 @@ module.exports = ReactFeatureFlags;
11237
11287
  'use strict';
11238
11288
 
11239
11289
  var ReactChildren = _dereq_(32);
11240
- var ReactElement = _dereq_(66);
11290
+ var ReactElement = _dereq_(65);
11241
11291
 
11242
11292
  var emptyFunction = _dereq_(165);
11243
11293
  var invariant = _dereq_(173);
@@ -11256,8 +11306,11 @@ var numericPropertyRegex = /^\d+$/;
11256
11306
  var warnedAboutNumeric = false;
11257
11307
 
11258
11308
  var ReactFragment = {
11259
- // Wrap a keyed object in an opaque proxy that warns you if you access any
11260
- // of its properties.
11309
+ /**
11310
+ * Wrap a keyed object in an opaque proxy that warns you if you access any
11311
+ * of its properties.
11312
+ * See https://facebook.github.io/react/docs/create-fragment.html
11313
+ */
11261
11314
  create: function (object) {
11262
11315
  if (typeof object !== 'object' || !object || Array.isArray(object)) {
11263
11316
  "development" !== 'production' ? warning(false, 'React.addons.createFragment only accepts a single object. Got: %s', object) : void 0;
@@ -11287,7 +11340,7 @@ var ReactFragment = {
11287
11340
  };
11288
11341
 
11289
11342
  module.exports = ReactFragment;
11290
- },{"165":165,"173":173,"183":183,"32":32,"66":66}],74:[function(_dereq_,module,exports){
11343
+ },{"165":165,"173":173,"183":183,"32":32,"65":65}],73:[function(_dereq_,module,exports){
11291
11344
  /**
11292
11345
  * Copyright 2013-present, Facebook, Inc.
11293
11346
  * All rights reserved.
@@ -11306,10 +11359,9 @@ var EventPluginHub = _dereq_(17);
11306
11359
  var EventPluginUtils = _dereq_(19);
11307
11360
  var ReactComponentEnvironment = _dereq_(36);
11308
11361
  var ReactClass = _dereq_(33);
11309
- var ReactEmptyComponent = _dereq_(68);
11362
+ var ReactEmptyComponent = _dereq_(67);
11310
11363
  var ReactBrowserEventEmitter = _dereq_(28);
11311
- var ReactNativeComponent = _dereq_(84);
11312
- var ReactPerf = _dereq_(88);
11364
+ var ReactNativeComponent = _dereq_(83);
11313
11365
  var ReactUpdates = _dereq_(104);
11314
11366
 
11315
11367
  var ReactInjection = {
@@ -11321,12 +11373,11 @@ var ReactInjection = {
11321
11373
  EventPluginUtils: EventPluginUtils.injection,
11322
11374
  EventEmitter: ReactBrowserEventEmitter.injection,
11323
11375
  NativeComponent: ReactNativeComponent.injection,
11324
- Perf: ReactPerf.injection,
11325
11376
  Updates: ReactUpdates.injection
11326
11377
  };
11327
11378
 
11328
11379
  module.exports = ReactInjection;
11329
- },{"10":10,"104":104,"17":17,"19":19,"28":28,"33":33,"36":36,"68":68,"84":84,"88":88}],75:[function(_dereq_,module,exports){
11380
+ },{"10":10,"104":104,"17":17,"19":19,"28":28,"33":33,"36":36,"67":67,"83":83}],74:[function(_dereq_,module,exports){
11330
11381
  /**
11331
11382
  * Copyright 2013-present, Facebook, Inc.
11332
11383
  * All rights reserved.
@@ -11340,7 +11391,7 @@ module.exports = ReactInjection;
11340
11391
 
11341
11392
  'use strict';
11342
11393
 
11343
- var ReactDOMSelection = _dereq_(55);
11394
+ var ReactDOMSelection = _dereq_(56);
11344
11395
 
11345
11396
  var containsNode = _dereq_(162);
11346
11397
  var focusNode = _dereq_(167);
@@ -11451,7 +11502,7 @@ var ReactInputSelection = {
11451
11502
  };
11452
11503
 
11453
11504
  module.exports = ReactInputSelection;
11454
- },{"162":162,"167":167,"168":168,"55":55}],76:[function(_dereq_,module,exports){
11505
+ },{"162":162,"167":167,"168":168,"56":56}],75:[function(_dereq_,module,exports){
11455
11506
  /**
11456
11507
  * Copyright 2013-present, Facebook, Inc.
11457
11508
  * All rights reserved.
@@ -11500,7 +11551,7 @@ var ReactInstanceMap = {
11500
11551
  };
11501
11552
 
11502
11553
  module.exports = ReactInstanceMap;
11503
- },{}],77:[function(_dereq_,module,exports){
11554
+ },{}],76:[function(_dereq_,module,exports){
11504
11555
  /**
11505
11556
  * Copyright 2016-present, Facebook, Inc.
11506
11557
  * All rights reserved.
@@ -11514,10 +11565,10 @@ module.exports = ReactInstanceMap;
11514
11565
 
11515
11566
  'use strict';
11516
11567
 
11517
- var ReactDebugTool = _dereq_(61);
11568
+ var ReactDebugTool = _dereq_(62);
11518
11569
 
11519
11570
  module.exports = { debugTool: ReactDebugTool };
11520
- },{"61":61}],78:[function(_dereq_,module,exports){
11571
+ },{"62":62}],77:[function(_dereq_,module,exports){
11521
11572
  /**
11522
11573
  * Copyright 2016-present, Facebook, Inc.
11523
11574
  * All rights reserved.
@@ -11554,7 +11605,7 @@ var ReactInvalidSetStateWarningDevTool = {
11554
11605
  };
11555
11606
 
11556
11607
  module.exports = ReactInvalidSetStateWarningDevTool;
11557
- },{"183":183}],79:[function(_dereq_,module,exports){
11608
+ },{"183":183}],78:[function(_dereq_,module,exports){
11558
11609
  /**
11559
11610
  * Copyright 2013-present, Facebook, Inc.
11560
11611
  * All rights reserved.
@@ -11594,6 +11645,9 @@ module.exports = ReactInvalidSetStateWarningDevTool;
11594
11645
  var React = _dereq_(27);
11595
11646
 
11596
11647
  /**
11648
+ * Deprecated: An an easy way to express two-way binding with React.
11649
+ * See https://facebook.github.io/react/docs/two-way-binding-helpers.html
11650
+ *
11597
11651
  * @param {*} value current value of the link
11598
11652
  * @param {function} requestChange callback to request a change
11599
11653
  */
@@ -11623,7 +11677,7 @@ ReactLink.PropTypes = {
11623
11677
  };
11624
11678
 
11625
11679
  module.exports = ReactLink;
11626
- },{"27":27}],80:[function(_dereq_,module,exports){
11680
+ },{"27":27}],79:[function(_dereq_,module,exports){
11627
11681
  /**
11628
11682
  * Copyright 2013-present, Facebook, Inc.
11629
11683
  * All rights reserved.
@@ -11674,7 +11728,7 @@ var ReactMarkupChecksum = {
11674
11728
  };
11675
11729
 
11676
11730
  module.exports = ReactMarkupChecksum;
11677
- },{"127":127}],81:[function(_dereq_,module,exports){
11731
+ },{"127":127}],80:[function(_dereq_,module,exports){
11678
11732
  /**
11679
11733
  * Copyright 2013-present, Facebook, Inc.
11680
11734
  * All rights reserved.
@@ -11691,15 +11745,14 @@ module.exports = ReactMarkupChecksum;
11691
11745
  var DOMLazyTree = _dereq_(8);
11692
11746
  var DOMProperty = _dereq_(10);
11693
11747
  var ReactBrowserEventEmitter = _dereq_(28);
11694
- var ReactCurrentOwner = _dereq_(39);
11695
- var ReactDOMComponentTree = _dereq_(44);
11696
- var ReactDOMContainerInfo = _dereq_(45);
11697
- var ReactDOMFeatureFlags = _dereq_(49);
11698
- var ReactElement = _dereq_(66);
11699
- var ReactFeatureFlags = _dereq_(72);
11700
- var ReactInstrumentation = _dereq_(77);
11701
- var ReactMarkupChecksum = _dereq_(80);
11702
- var ReactPerf = _dereq_(88);
11748
+ var ReactCurrentOwner = _dereq_(40);
11749
+ var ReactDOMComponentTree = _dereq_(45);
11750
+ var ReactDOMContainerInfo = _dereq_(46);
11751
+ var ReactDOMFeatureFlags = _dereq_(50);
11752
+ var ReactElement = _dereq_(65);
11753
+ var ReactFeatureFlags = _dereq_(71);
11754
+ var ReactInstrumentation = _dereq_(76);
11755
+ var ReactMarkupChecksum = _dereq_(79);
11703
11756
  var ReactReconciler = _dereq_(93);
11704
11757
  var ReactUpdateQueue = _dereq_(103);
11705
11758
  var ReactUpdates = _dereq_(104);
@@ -11937,6 +11990,10 @@ var ReactMount = {
11937
11990
  * @return {ReactComponent} nextComponent
11938
11991
  */
11939
11992
  _renderNewRootComponent: function (nextElement, container, shouldReuseMarkup, context) {
11993
+ if ("development" !== 'production') {
11994
+ ReactInstrumentation.debugTool.onBeginFlush();
11995
+ }
11996
+
11940
11997
  // Various parts of our code (such as ReactCompositeComponent's
11941
11998
  // _renderValidatedComponent) assume that calls to render aren't nested;
11942
11999
  // verify that that's the case.
@@ -11947,6 +12004,12 @@ var ReactMount = {
11947
12004
  ReactBrowserEventEmitter.ensureScrollValueMonitoring();
11948
12005
  var componentInstance = instantiateReactComponent(nextElement);
11949
12006
 
12007
+ if ("development" !== 'production') {
12008
+ // Mute future events from the top level wrapper.
12009
+ // It is an implementation detail that devtools should not know about.
12010
+ componentInstance._debugID = 0;
12011
+ }
12012
+
11950
12013
  // The initial render is synchronous but any updates that happen during
11951
12014
  // rendering, in componentWillMount or componentDidMount, will be batched
11952
12015
  // according to the current batching strategy.
@@ -11957,7 +12020,9 @@ var ReactMount = {
11957
12020
  instancesByReactRootID[wrapperID] = componentInstance;
11958
12021
 
11959
12022
  if ("development" !== 'production') {
11960
- ReactInstrumentation.debugTool.onMountRootComponent(componentInstance);
12023
+ // The instance here is TopLevelWrapper so we report mount for its child.
12024
+ ReactInstrumentation.debugTool.onMountRootComponent(componentInstance._renderedComponent._debugID);
12025
+ ReactInstrumentation.debugTool.onEndFlush();
11961
12026
  }
11962
12027
 
11963
12028
  return componentInstance;
@@ -12037,6 +12102,7 @@ var ReactMount = {
12037
12102
 
12038
12103
  /**
12039
12104
  * Renders a React component into the DOM in the supplied `container`.
12105
+ * See https://facebook.github.io/react/docs/top-level-api.html#reactdom.render
12040
12106
  *
12041
12107
  * If the React component was previously rendered into `container`, this will
12042
12108
  * perform an update on it and only mutate the DOM as necessary to reflect the
@@ -12053,6 +12119,7 @@ var ReactMount = {
12053
12119
 
12054
12120
  /**
12055
12121
  * Unmounts and destroys the React component rendered in the `container`.
12122
+ * See https://facebook.github.io/react/docs/top-level-api.html#reactdom.unmountcomponentatnode
12056
12123
  *
12057
12124
  * @param {DOMElement} container DOM element containing a React component.
12058
12125
  * @return {boolean} True if a component was found in and unmounted from
@@ -12144,16 +12211,15 @@ var ReactMount = {
12144
12211
  setInnerHTML(container, markup);
12145
12212
  ReactDOMComponentTree.precacheNode(instance, container.firstChild);
12146
12213
  }
12214
+
12215
+ if ("development" !== 'production') {
12216
+ ReactInstrumentation.debugTool.onNativeOperation(ReactDOMComponentTree.getInstanceFromNode(container.firstChild)._debugID, 'mount', markup.toString());
12217
+ }
12147
12218
  }
12148
12219
  };
12149
12220
 
12150
- ReactPerf.measureMethods(ReactMount, 'ReactMount', {
12151
- _renderNewRootComponent: '_renderNewRootComponent',
12152
- _mountImageIntoNode: '_mountImageIntoNode'
12153
- });
12154
-
12155
12221
  module.exports = ReactMount;
12156
- },{"10":10,"103":103,"104":104,"144":144,"150":150,"153":153,"166":166,"173":173,"183":183,"28":28,"39":39,"44":44,"45":45,"49":49,"66":66,"72":72,"77":77,"8":8,"80":80,"88":88,"93":93}],82:[function(_dereq_,module,exports){
12222
+ },{"10":10,"103":103,"104":104,"144":144,"150":150,"153":153,"166":166,"173":173,"183":183,"28":28,"40":40,"45":45,"46":46,"50":50,"65":65,"71":71,"76":76,"79":79,"8":8,"93":93}],81:[function(_dereq_,module,exports){
12157
12223
  /**
12158
12224
  * Copyright 2013-present, Facebook, Inc.
12159
12225
  * All rights reserved.
@@ -12168,12 +12234,14 @@ module.exports = ReactMount;
12168
12234
  'use strict';
12169
12235
 
12170
12236
  var ReactComponentEnvironment = _dereq_(36);
12171
- var ReactMultiChildUpdateTypes = _dereq_(83);
12237
+ var ReactInstrumentation = _dereq_(76);
12238
+ var ReactMultiChildUpdateTypes = _dereq_(82);
12172
12239
 
12173
- var ReactCurrentOwner = _dereq_(39);
12240
+ var ReactCurrentOwner = _dereq_(40);
12174
12241
  var ReactReconciler = _dereq_(93);
12175
12242
  var ReactChildReconciler = _dereq_(31);
12176
12243
 
12244
+ var emptyFunction = _dereq_(165);
12177
12245
  var flattenChildren = _dereq_(133);
12178
12246
  var invariant = _dereq_(173);
12179
12247
 
@@ -12290,6 +12358,15 @@ function processQueue(inst, updateQueue) {
12290
12358
  ReactComponentEnvironment.processChildrenUpdates(inst, updateQueue);
12291
12359
  }
12292
12360
 
12361
+ var setChildrenForInstrumentation = emptyFunction;
12362
+ if ("development" !== 'production') {
12363
+ setChildrenForInstrumentation = function (children) {
12364
+ ReactInstrumentation.debugTool.onSetChildren(this._debugID, children ? Object.keys(children).map(function (key) {
12365
+ return children[key]._debugID;
12366
+ }) : []);
12367
+ };
12368
+ }
12369
+
12293
12370
  /**
12294
12371
  * ReactMultiChild are capable of reconciling multiple children.
12295
12372
  *
@@ -12351,6 +12428,7 @@ var ReactMultiChild = {
12351
12428
  mountChildren: function (nestedChildren, transaction, context) {
12352
12429
  var children = this._reconcilerInstantiateChildren(nestedChildren, transaction, context);
12353
12430
  this._renderedChildren = children;
12431
+
12354
12432
  var mountImages = [];
12355
12433
  var index = 0;
12356
12434
  for (var name in children) {
@@ -12361,6 +12439,11 @@ var ReactMultiChild = {
12361
12439
  mountImages.push(mountImage);
12362
12440
  }
12363
12441
  }
12442
+
12443
+ if ("development" !== 'production') {
12444
+ setChildrenForInstrumentation.call(this, children);
12445
+ }
12446
+
12364
12447
  return mountImages;
12365
12448
  },
12366
12449
 
@@ -12467,6 +12550,10 @@ var ReactMultiChild = {
12467
12550
  processQueue(this, updates);
12468
12551
  }
12469
12552
  this._renderedChildren = nextChildren;
12553
+
12554
+ if ("development" !== 'production') {
12555
+ setChildrenForInstrumentation.call(this, nextChildren);
12556
+ }
12470
12557
  },
12471
12558
 
12472
12559
  /**
@@ -12556,7 +12643,7 @@ var ReactMultiChild = {
12556
12643
  };
12557
12644
 
12558
12645
  module.exports = ReactMultiChild;
12559
- },{"133":133,"173":173,"31":31,"36":36,"39":39,"83":83,"93":93}],83:[function(_dereq_,module,exports){
12646
+ },{"133":133,"165":165,"173":173,"31":31,"36":36,"40":40,"76":76,"82":82,"93":93}],82:[function(_dereq_,module,exports){
12560
12647
  /**
12561
12648
  * Copyright 2013-present, Facebook, Inc.
12562
12649
  * All rights reserved.
@@ -12589,7 +12676,7 @@ var ReactMultiChildUpdateTypes = keyMirror({
12589
12676
  });
12590
12677
 
12591
12678
  module.exports = ReactMultiChildUpdateTypes;
12592
- },{"176":176}],84:[function(_dereq_,module,exports){
12679
+ },{"176":176}],83:[function(_dereq_,module,exports){
12593
12680
  /**
12594
12681
  * Copyright 2014-present, Facebook, Inc.
12595
12682
  * All rights reserved.
@@ -12685,7 +12772,40 @@ var ReactNativeComponent = {
12685
12772
  };
12686
12773
 
12687
12774
  module.exports = ReactNativeComponent;
12688
- },{"173":173,"184":184}],85:[function(_dereq_,module,exports){
12775
+ },{"173":173,"184":184}],84:[function(_dereq_,module,exports){
12776
+ /**
12777
+ * Copyright 2016-present, Facebook, Inc.
12778
+ * All rights reserved.
12779
+ *
12780
+ * This source code is licensed under the BSD-style license found in the
12781
+ * LICENSE file in the root directory of this source tree. An additional grant
12782
+ * of patent rights can be found in the PATENTS file in the same directory.
12783
+ *
12784
+ * @providesModule ReactNativeOperationHistoryDevtool
12785
+ */
12786
+
12787
+ 'use strict';
12788
+
12789
+ var history = [];
12790
+
12791
+ var ReactNativeOperationHistoryDevtool = {
12792
+ onNativeOperation: function (debugID, type, payload) {
12793
+ history.push({
12794
+ instanceID: debugID,
12795
+ type: type,
12796
+ payload: payload
12797
+ });
12798
+ },
12799
+ clearHistory: function () {
12800
+ history = [];
12801
+ },
12802
+ getHistory: function () {
12803
+ return history;
12804
+ }
12805
+ };
12806
+
12807
+ module.exports = ReactNativeOperationHistoryDevtool;
12808
+ },{}],85:[function(_dereq_,module,exports){
12689
12809
  /**
12690
12810
  * Copyright 2013-present, Facebook, Inc.
12691
12811
  * All rights reserved.
@@ -12699,7 +12819,7 @@ module.exports = ReactNativeComponent;
12699
12819
 
12700
12820
  'use strict';
12701
12821
 
12702
- var ReactElement = _dereq_(66);
12822
+ var ReactElement = _dereq_(65);
12703
12823
 
12704
12824
  var invariant = _dereq_(173);
12705
12825
 
@@ -12723,7 +12843,7 @@ var ReactNodeTypes = {
12723
12843
  };
12724
12844
 
12725
12845
  module.exports = ReactNodeTypes;
12726
- },{"173":173,"66":66}],86:[function(_dereq_,module,exports){
12846
+ },{"173":173,"65":65}],86:[function(_dereq_,module,exports){
12727
12847
  /**
12728
12848
  * Copyright 2015-present, Facebook, Inc.
12729
12849
  * All rights reserved.
@@ -12914,7 +13034,7 @@ var ReactOwner = {
12914
13034
  module.exports = ReactOwner;
12915
13035
  },{"173":173}],88:[function(_dereq_,module,exports){
12916
13036
  /**
12917
- * Copyright 2013-present, Facebook, Inc.
13037
+ * Copyright 2016-present, Facebook, Inc.
12918
13038
  * All rights reserved.
12919
13039
  *
12920
13040
  * This source code is licensed under the BSD-style license found in the
@@ -12926,90 +13046,412 @@ module.exports = ReactOwner;
12926
13046
 
12927
13047
  'use strict';
12928
13048
 
12929
- /**
12930
- * ReactPerf is a general AOP system designed to measure performance. This
12931
- * module only has the hooks: see ReactDefaultPerf for the analysis tool.
12932
- */
13049
+ var _assign = _dereq_(184);
12933
13050
 
12934
- var ReactPerf = {
12935
- /**
12936
- * Boolean to enable/disable measurement. Set to false by default to prevent
12937
- * accidental logging and perf loss.
12938
- */
12939
- enableMeasure: false,
13051
+ 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; };
12940
13052
 
12941
- /**
12942
- * Holds onto the measure function in use. By default, don't measure
12943
- * anything, but we'll override this if we inject a measure function.
12944
- */
12945
- storedMeasure: _noMeasure,
13053
+ var ReactDebugTool = _dereq_(62);
13054
+ var warning = _dereq_(183);
12946
13055
 
12947
- /**
12948
- * @param {object} object
12949
- * @param {string} objectName
12950
- * @param {object<string>} methodNames
12951
- */
12952
- measureMethods: function (object, objectName, methodNames) {
12953
- if ("development" !== 'production') {
12954
- for (var key in methodNames) {
12955
- if (!methodNames.hasOwnProperty(key)) {
12956
- continue;
12957
- }
12958
- object[key] = ReactPerf.measure(objectName, methodNames[key], object[key]);
12959
- }
13056
+ function roundFloat(val) {
13057
+ var base = arguments.length <= 1 || arguments[1] === undefined ? 2 : arguments[1];
13058
+
13059
+ var n = Math.pow(10, base);
13060
+ return Math.floor(val * n) / n;
13061
+ }
13062
+
13063
+ function getFlushHistory() {
13064
+ return ReactDebugTool.getFlushHistory();
13065
+ }
13066
+
13067
+ function getExclusive() {
13068
+ var flushHistory = arguments.length <= 0 || arguments[0] === undefined ? getFlushHistory() : arguments[0];
13069
+
13070
+ var aggregatedStats = {};
13071
+ var affectedIDs = {};
13072
+
13073
+ function updateAggregatedStats(treeSnapshot, instanceID, timerType, applyUpdate) {
13074
+ var displayName = treeSnapshot[instanceID].displayName;
13075
+
13076
+ var key = displayName;
13077
+ var stats = aggregatedStats[key];
13078
+ if (!stats) {
13079
+ affectedIDs[key] = {};
13080
+ stats = aggregatedStats[key] = {
13081
+ key: key,
13082
+ instanceCount: 0,
13083
+ counts: {},
13084
+ durations: {},
13085
+ totalDuration: 0
13086
+ };
12960
13087
  }
12961
- },
13088
+ if (!stats.durations[timerType]) {
13089
+ stats.durations[timerType] = 0;
13090
+ }
13091
+ if (!stats.counts[timerType]) {
13092
+ stats.counts[timerType] = 0;
13093
+ }
13094
+ affectedIDs[key][instanceID] = true;
13095
+ applyUpdate(stats);
13096
+ }
12962
13097
 
12963
- /**
12964
- * Use this to wrap methods you want to measure. Zero overhead in production.
12965
- *
12966
- * @param {string} objName
12967
- * @param {string} fnName
12968
- * @param {function} func
12969
- * @return {function}
12970
- */
12971
- measure: function (objName, fnName, func) {
12972
- if ("development" !== 'production') {
12973
- var measuredFunc = null;
12974
- var wrapper = function () {
12975
- if (ReactPerf.enableMeasure) {
12976
- if (!measuredFunc) {
12977
- measuredFunc = ReactPerf.storedMeasure(objName, fnName, func);
12978
- }
12979
- return measuredFunc.apply(this, arguments);
12980
- }
12981
- return func.apply(this, arguments);
13098
+ flushHistory.forEach(function (flush) {
13099
+ var measurements = flush.measurements;
13100
+ var treeSnapshot = flush.treeSnapshot;
13101
+
13102
+ measurements.forEach(function (measurement) {
13103
+ var duration = measurement.duration;
13104
+ var instanceID = measurement.instanceID;
13105
+ var timerType = measurement.timerType;
13106
+
13107
+ updateAggregatedStats(treeSnapshot, instanceID, timerType, function (stats) {
13108
+ stats.totalDuration += duration;
13109
+ stats.durations[timerType] += duration;
13110
+ stats.counts[timerType]++;
13111
+ });
13112
+ });
13113
+ });
13114
+
13115
+ return Object.keys(aggregatedStats).map(function (key) {
13116
+ return _extends({}, aggregatedStats[key], {
13117
+ instanceCount: Object.keys(affectedIDs[key]).length
13118
+ });
13119
+ }).sort(function (a, b) {
13120
+ return b.totalDuration - a.totalDuration;
13121
+ });
13122
+ }
13123
+
13124
+ function getInclusive() {
13125
+ var flushHistory = arguments.length <= 0 || arguments[0] === undefined ? getFlushHistory() : arguments[0];
13126
+
13127
+ var aggregatedStats = {};
13128
+ var affectedIDs = {};
13129
+
13130
+ function updateAggregatedStats(treeSnapshot, instanceID, applyUpdate) {
13131
+ var _treeSnapshot$instanc = treeSnapshot[instanceID];
13132
+ var displayName = _treeSnapshot$instanc.displayName;
13133
+ var ownerID = _treeSnapshot$instanc.ownerID;
13134
+
13135
+ var owner = treeSnapshot[ownerID];
13136
+ var key = (owner ? owner.displayName + ' > ' : '') + displayName;
13137
+ var stats = aggregatedStats[key];
13138
+ if (!stats) {
13139
+ affectedIDs[key] = {};
13140
+ stats = aggregatedStats[key] = {
13141
+ key: key,
13142
+ instanceCount: 0,
13143
+ inclusiveRenderDuration: 0,
13144
+ renderCount: 0
12982
13145
  };
12983
- wrapper.displayName = objName + '_' + fnName;
12984
- return wrapper;
12985
13146
  }
12986
- return func;
12987
- },
13147
+ affectedIDs[key][instanceID] = true;
13148
+ applyUpdate(stats);
13149
+ }
12988
13150
 
12989
- injection: {
12990
- /**
12991
- * @param {function} measure
12992
- */
12993
- injectMeasure: function (measure) {
12994
- ReactPerf.storedMeasure = measure;
13151
+ var isCompositeByID = {};
13152
+ flushHistory.forEach(function (flush) {
13153
+ var measurements = flush.measurements;
13154
+
13155
+ measurements.forEach(function (measurement) {
13156
+ var instanceID = measurement.instanceID;
13157
+ var timerType = measurement.timerType;
13158
+
13159
+ if (timerType !== 'render') {
13160
+ return;
13161
+ }
13162
+ isCompositeByID[instanceID] = true;
13163
+ });
13164
+ });
13165
+
13166
+ flushHistory.forEach(function (flush) {
13167
+ var measurements = flush.measurements;
13168
+ var treeSnapshot = flush.treeSnapshot;
13169
+
13170
+ measurements.forEach(function (measurement) {
13171
+ var duration = measurement.duration;
13172
+ var instanceID = measurement.instanceID;
13173
+ var timerType = measurement.timerType;
13174
+
13175
+ if (timerType !== 'render') {
13176
+ return;
13177
+ }
13178
+ updateAggregatedStats(treeSnapshot, instanceID, function (stats) {
13179
+ stats.renderCount++;
13180
+ });
13181
+ var nextParentID = instanceID;
13182
+ while (nextParentID) {
13183
+ // As we traverse parents, only count inclusive time towards composites.
13184
+ // We know something is a composite if its render() was called.
13185
+ if (isCompositeByID[nextParentID]) {
13186
+ updateAggregatedStats(treeSnapshot, nextParentID, function (stats) {
13187
+ stats.inclusiveRenderDuration += duration;
13188
+ });
13189
+ }
13190
+ nextParentID = treeSnapshot[nextParentID].parentID;
13191
+ }
13192
+ });
13193
+ });
13194
+
13195
+ return Object.keys(aggregatedStats).map(function (key) {
13196
+ return _extends({}, aggregatedStats[key], {
13197
+ instanceCount: Object.keys(affectedIDs[key]).length
13198
+ });
13199
+ }).sort(function (a, b) {
13200
+ return b.inclusiveRenderDuration - a.inclusiveRenderDuration;
13201
+ });
13202
+ }
13203
+
13204
+ function getWasted() {
13205
+ var flushHistory = arguments.length <= 0 || arguments[0] === undefined ? getFlushHistory() : arguments[0];
13206
+
13207
+ var aggregatedStats = {};
13208
+ var affectedIDs = {};
13209
+
13210
+ function updateAggregatedStats(treeSnapshot, instanceID, applyUpdate) {
13211
+ var _treeSnapshot$instanc2 = treeSnapshot[instanceID];
13212
+ var displayName = _treeSnapshot$instanc2.displayName;
13213
+ var ownerID = _treeSnapshot$instanc2.ownerID;
13214
+
13215
+ var owner = treeSnapshot[ownerID];
13216
+ var key = (owner ? owner.displayName + ' > ' : '') + displayName;
13217
+ var stats = aggregatedStats[key];
13218
+ if (!stats) {
13219
+ affectedIDs[key] = {};
13220
+ stats = aggregatedStats[key] = {
13221
+ key: key,
13222
+ instanceCount: 0,
13223
+ inclusiveRenderDuration: 0,
13224
+ renderCount: 0
13225
+ };
12995
13226
  }
13227
+ affectedIDs[key][instanceID] = true;
13228
+ applyUpdate(stats);
12996
13229
  }
12997
- };
12998
13230
 
12999
- /**
13000
- * Simply passes through the measured function, without measuring it.
13001
- *
13002
- * @param {string} objName
13003
- * @param {string} fnName
13004
- * @param {function} func
13005
- * @return {function}
13006
- */
13007
- function _noMeasure(objName, fnName, func) {
13008
- return func;
13231
+ flushHistory.forEach(function (flush) {
13232
+ var measurements = flush.measurements;
13233
+ var treeSnapshot = flush.treeSnapshot;
13234
+ var operations = flush.operations;
13235
+
13236
+ var isDefinitelyNotWastedByID = {};
13237
+
13238
+ // Find native components associated with an operation in this batch.
13239
+ // Mark all components in their parent tree as definitely not wasted.
13240
+ operations.forEach(function (operation) {
13241
+ var instanceID = operation.instanceID;
13242
+
13243
+ var nextParentID = instanceID;
13244
+ while (nextParentID) {
13245
+ isDefinitelyNotWastedByID[nextParentID] = true;
13246
+ nextParentID = treeSnapshot[nextParentID].parentID;
13247
+ }
13248
+ });
13249
+
13250
+ // Find composite components that rendered in this batch.
13251
+ // These are potential candidates for being wasted renders.
13252
+ var renderedCompositeIDs = {};
13253
+ measurements.forEach(function (measurement) {
13254
+ var instanceID = measurement.instanceID;
13255
+ var timerType = measurement.timerType;
13256
+
13257
+ if (timerType !== 'render') {
13258
+ return;
13259
+ }
13260
+ renderedCompositeIDs[instanceID] = true;
13261
+ });
13262
+
13263
+ measurements.forEach(function (measurement) {
13264
+ var duration = measurement.duration;
13265
+ var instanceID = measurement.instanceID;
13266
+ var timerType = measurement.timerType;
13267
+
13268
+ if (timerType !== 'render') {
13269
+ return;
13270
+ }
13271
+
13272
+ // If there was a DOM update below this component, or it has just been
13273
+ // mounted, its render() is not considered wasted.
13274
+ var updateCount = treeSnapshot[instanceID].updateCount;
13275
+
13276
+ if (isDefinitelyNotWastedByID[instanceID] || updateCount === 0) {
13277
+ return;
13278
+ }
13279
+
13280
+ // We consider this render() wasted.
13281
+ updateAggregatedStats(treeSnapshot, instanceID, function (stats) {
13282
+ stats.renderCount++;
13283
+ });
13284
+
13285
+ var nextParentID = instanceID;
13286
+ while (nextParentID) {
13287
+ // Any parents rendered during this batch are considered wasted
13288
+ // unless we previously marked them as dirty.
13289
+ var isWasted = renderedCompositeIDs[nextParentID] && !isDefinitelyNotWastedByID[nextParentID];
13290
+ if (isWasted) {
13291
+ updateAggregatedStats(treeSnapshot, nextParentID, function (stats) {
13292
+ stats.inclusiveRenderDuration += duration;
13293
+ });
13294
+ }
13295
+ nextParentID = treeSnapshot[nextParentID].parentID;
13296
+ }
13297
+ });
13298
+ });
13299
+
13300
+ return Object.keys(aggregatedStats).map(function (key) {
13301
+ return _extends({}, aggregatedStats[key], {
13302
+ instanceCount: Object.keys(affectedIDs[key]).length
13303
+ });
13304
+ }).sort(function (a, b) {
13305
+ return b.inclusiveRenderDuration - a.inclusiveRenderDuration;
13306
+ });
13307
+ }
13308
+
13309
+ function getOperations() {
13310
+ var flushHistory = arguments.length <= 0 || arguments[0] === undefined ? getFlushHistory() : arguments[0];
13311
+
13312
+ var stats = [];
13313
+ flushHistory.forEach(function (flush, flushIndex) {
13314
+ var operations = flush.operations;
13315
+ var treeSnapshot = flush.treeSnapshot;
13316
+
13317
+ operations.forEach(function (operation) {
13318
+ var instanceID = operation.instanceID;
13319
+ var type = operation.type;
13320
+ var payload = operation.payload;
13321
+ var _treeSnapshot$instanc3 = treeSnapshot[instanceID];
13322
+ var displayName = _treeSnapshot$instanc3.displayName;
13323
+ var ownerID = _treeSnapshot$instanc3.ownerID;
13324
+
13325
+ var owner = treeSnapshot[ownerID];
13326
+ var key = (owner ? owner.displayName + ' > ' : '') + displayName;
13327
+
13328
+ stats.push({
13329
+ flushIndex: flushIndex,
13330
+ instanceID: instanceID,
13331
+ key: key,
13332
+ type: type,
13333
+ ownerID: ownerID,
13334
+ payload: payload
13335
+ });
13336
+ });
13337
+ });
13338
+ return stats;
13339
+ }
13340
+
13341
+ function printExclusive(flushHistory) {
13342
+ var stats = getExclusive(flushHistory);
13343
+ var table = stats.map(function (item) {
13344
+ var key = item.key;
13345
+ var instanceCount = item.instanceCount;
13346
+ var totalDuration = item.totalDuration;
13347
+
13348
+ var renderCount = item.counts.render || 0;
13349
+ var renderDuration = item.durations.render || 0;
13350
+ return {
13351
+ 'Component': key,
13352
+ 'Total time (ms)': roundFloat(totalDuration),
13353
+ 'Instance count': instanceCount,
13354
+ 'Total render time (ms)': roundFloat(renderDuration),
13355
+ 'Average render time (ms)': renderCount ? roundFloat(renderDuration / renderCount) : undefined,
13356
+ 'Render count': renderCount,
13357
+ 'Total lifecycle time (ms)': roundFloat(totalDuration - renderDuration)
13358
+ };
13359
+ });
13360
+ console.table(table);
13361
+ }
13362
+
13363
+ function printInclusive(flushHistory) {
13364
+ var stats = getInclusive(flushHistory);
13365
+ var table = stats.map(function (item) {
13366
+ var key = item.key;
13367
+ var instanceCount = item.instanceCount;
13368
+ var inclusiveRenderDuration = item.inclusiveRenderDuration;
13369
+ var renderCount = item.renderCount;
13370
+
13371
+ return {
13372
+ 'Owner > Component': key,
13373
+ 'Inclusive render time (ms)': roundFloat(inclusiveRenderDuration),
13374
+ 'Instance count': instanceCount,
13375
+ 'Render count': renderCount
13376
+ };
13377
+ });
13378
+ console.table(table);
13379
+ }
13380
+
13381
+ function printWasted(flushHistory) {
13382
+ var stats = getWasted(flushHistory);
13383
+ var table = stats.map(function (item) {
13384
+ var key = item.key;
13385
+ var instanceCount = item.instanceCount;
13386
+ var inclusiveRenderDuration = item.inclusiveRenderDuration;
13387
+ var renderCount = item.renderCount;
13388
+
13389
+ return {
13390
+ 'Owner > Component': key,
13391
+ 'Inclusive wasted time (ms)': roundFloat(inclusiveRenderDuration),
13392
+ 'Instance count': instanceCount,
13393
+ 'Render count': renderCount
13394
+ };
13395
+ });
13396
+ console.table(table);
13397
+ }
13398
+
13399
+ function printOperations(flushHistory) {
13400
+ var stats = getOperations(flushHistory);
13401
+ var table = stats.map(function (stat) {
13402
+ return {
13403
+ 'Owner > Node': stat.key,
13404
+ 'Operation': stat.type,
13405
+ 'Payload': typeof stat.payload === 'object' ? JSON.stringify(stat.payload) : stat.payload,
13406
+ 'Flush index': stat.flushIndex,
13407
+ 'Owner Component ID': stat.ownerID,
13408
+ 'DOM Component ID': stat.instanceID
13409
+ };
13410
+ });
13411
+ console.table(table);
13009
13412
  }
13010
13413
 
13011
- module.exports = ReactPerf;
13012
- },{}],89:[function(_dereq_,module,exports){
13414
+ var warnedAboutPrintDOM = false;
13415
+ function printDOM(measurements) {
13416
+ "development" !== 'production' ? warning(warnedAboutPrintDOM, '`ReactPerf.printDOM(...)` is deprecated. Use ' + '`ReactPerf.printOperations(...)` instead.') : void 0;
13417
+ warnedAboutPrintDOM = true;
13418
+ return printOperations(measurements);
13419
+ }
13420
+
13421
+ var warnedAboutGetMeasurementsSummaryMap = false;
13422
+ function getMeasurementsSummaryMap(measurements) {
13423
+ "development" !== 'production' ? warning(warnedAboutGetMeasurementsSummaryMap, '`ReactPerf.getMeasurementsSummaryMap(...)` is deprecated. Use ' + '`ReactPerf.getWasted(...)` instead.') : void 0;
13424
+ warnedAboutGetMeasurementsSummaryMap = true;
13425
+ return getWasted(measurements);
13426
+ }
13427
+
13428
+ function start() {
13429
+ ReactDebugTool.beginProfiling();
13430
+ }
13431
+
13432
+ function stop() {
13433
+ ReactDebugTool.endProfiling();
13434
+ }
13435
+
13436
+ var ReactPerfAnalysis = {
13437
+ getLastMeasurements: getFlushHistory,
13438
+ getExclusive: getExclusive,
13439
+ getInclusive: getInclusive,
13440
+ getWasted: getWasted,
13441
+ getOperations: getOperations,
13442
+ printExclusive: printExclusive,
13443
+ printInclusive: printInclusive,
13444
+ printWasted: printWasted,
13445
+ printOperations: printOperations,
13446
+ start: start,
13447
+ stop: stop,
13448
+ // Deprecated:
13449
+ printDOM: printDOM,
13450
+ getMeasurementsSummaryMap: getMeasurementsSummaryMap
13451
+ };
13452
+
13453
+ module.exports = ReactPerfAnalysis;
13454
+ },{"183":183,"184":184,"62":62}],89:[function(_dereq_,module,exports){
13013
13455
  /**
13014
13456
  * Copyright 2013-present, Facebook, Inc.
13015
13457
  * All rights reserved.
@@ -13071,7 +13513,7 @@ module.exports = ReactPropTypeLocations;
13071
13513
 
13072
13514
  'use strict';
13073
13515
 
13074
- var ReactElement = _dereq_(66);
13516
+ var ReactElement = _dereq_(65);
13075
13517
  var ReactPropTypeLocationNames = _dereq_(89);
13076
13518
 
13077
13519
  var emptyFunction = _dereq_(165);
@@ -13438,7 +13880,7 @@ function getClassName(propValue) {
13438
13880
  }
13439
13881
 
13440
13882
  module.exports = ReactPropTypes;
13441
- },{"139":139,"165":165,"66":66,"89":89}],92:[function(_dereq_,module,exports){
13883
+ },{"139":139,"165":165,"65":65,"89":89}],92:[function(_dereq_,module,exports){
13442
13884
  /**
13443
13885
  * Copyright 2013-present, Facebook, Inc.
13444
13886
  * All rights reserved.
@@ -13457,7 +13899,7 @@ var _assign = _dereq_(184);
13457
13899
  var CallbackQueue = _dereq_(5);
13458
13900
  var PooledClass = _dereq_(26);
13459
13901
  var ReactBrowserEventEmitter = _dereq_(28);
13460
- var ReactInputSelection = _dereq_(75);
13902
+ var ReactInputSelection = _dereq_(74);
13461
13903
  var Transaction = _dereq_(124);
13462
13904
 
13463
13905
  /**
@@ -13601,7 +14043,7 @@ _assign(ReactReconcileTransaction.prototype, Transaction.Mixin, Mixin);
13601
14043
  PooledClass.addPoolingTo(ReactReconcileTransaction);
13602
14044
 
13603
14045
  module.exports = ReactReconcileTransaction;
13604
- },{"124":124,"184":184,"26":26,"28":28,"5":5,"75":75}],93:[function(_dereq_,module,exports){
14046
+ },{"124":124,"184":184,"26":26,"28":28,"5":5,"74":74}],93:[function(_dereq_,module,exports){
13605
14047
  /**
13606
14048
  * Copyright 2013-present, Facebook, Inc.
13607
14049
  * All rights reserved.
@@ -13616,7 +14058,9 @@ module.exports = ReactReconcileTransaction;
13616
14058
  'use strict';
13617
14059
 
13618
14060
  var ReactRef = _dereq_(94);
13619
- var ReactInstrumentation = _dereq_(77);
14061
+ var ReactInstrumentation = _dereq_(76);
14062
+
14063
+ var invariant = _dereq_(173);
13620
14064
 
13621
14065
  /**
13622
14066
  * Helper to call ReactRef.attachRefs with this composite component, split out
@@ -13640,12 +14084,20 @@ var ReactReconciler = {
13640
14084
  * @internal
13641
14085
  */
13642
14086
  mountComponent: function (internalInstance, transaction, nativeParent, nativeContainerInfo, context) {
14087
+ if ("development" !== 'production') {
14088
+ if (internalInstance._debugID !== 0) {
14089
+ ReactInstrumentation.debugTool.onBeginReconcilerTimer(internalInstance._debugID, 'mountComponent');
14090
+ }
14091
+ }
13643
14092
  var markup = internalInstance.mountComponent(transaction, nativeParent, nativeContainerInfo, context);
13644
14093
  if (internalInstance._currentElement && internalInstance._currentElement.ref != null) {
13645
14094
  transaction.getReactMountReady().enqueue(attachRefs, internalInstance);
13646
14095
  }
13647
14096
  if ("development" !== 'production') {
13648
- ReactInstrumentation.debugTool.onMountComponent(internalInstance);
14097
+ if (internalInstance._debugID !== 0) {
14098
+ ReactInstrumentation.debugTool.onEndReconcilerTimer(internalInstance._debugID, 'mountComponent');
14099
+ ReactInstrumentation.debugTool.onMountComponent(internalInstance._debugID);
14100
+ }
13649
14101
  }
13650
14102
  return markup;
13651
14103
  },
@@ -13665,10 +14117,18 @@ var ReactReconciler = {
13665
14117
  * @internal
13666
14118
  */
13667
14119
  unmountComponent: function (internalInstance, safely) {
14120
+ if ("development" !== 'production') {
14121
+ if (internalInstance._debugID !== 0) {
14122
+ ReactInstrumentation.debugTool.onBeginReconcilerTimer(internalInstance._debugID, 'unmountComponent');
14123
+ }
14124
+ }
13668
14125
  ReactRef.detachRefs(internalInstance, internalInstance._currentElement);
13669
14126
  internalInstance.unmountComponent(safely);
13670
14127
  if ("development" !== 'production') {
13671
- ReactInstrumentation.debugTool.onUnmountComponent(internalInstance);
14128
+ if (internalInstance._debugID !== 0) {
14129
+ ReactInstrumentation.debugTool.onEndReconcilerTimer(internalInstance._debugID, 'unmountComponent');
14130
+ ReactInstrumentation.debugTool.onUnmountComponent(internalInstance._debugID);
14131
+ }
13672
14132
  }
13673
14133
  },
13674
14134
 
@@ -13698,6 +14158,12 @@ var ReactReconciler = {
13698
14158
  return;
13699
14159
  }
13700
14160
 
14161
+ if ("development" !== 'production') {
14162
+ if (internalInstance._debugID !== 0) {
14163
+ ReactInstrumentation.debugTool.onBeginReconcilerTimer(internalInstance._debugID, 'receiveComponent');
14164
+ }
14165
+ }
14166
+
13701
14167
  var refsChanged = ReactRef.shouldUpdateRefs(prevElement, nextElement);
13702
14168
 
13703
14169
  if (refsChanged) {
@@ -13711,7 +14177,10 @@ var ReactReconciler = {
13711
14177
  }
13712
14178
 
13713
14179
  if ("development" !== 'production') {
13714
- ReactInstrumentation.debugTool.onUpdateComponent(internalInstance);
14180
+ if (internalInstance._debugID !== 0) {
14181
+ ReactInstrumentation.debugTool.onEndReconcilerTimer(internalInstance._debugID, 'receiveComponent');
14182
+ ReactInstrumentation.debugTool.onUpdateComponent(internalInstance._debugID);
14183
+ }
13715
14184
  }
13716
14185
  },
13717
14186
 
@@ -13722,17 +14191,31 @@ var ReactReconciler = {
13722
14191
  * @param {ReactReconcileTransaction} transaction
13723
14192
  * @internal
13724
14193
  */
13725
- performUpdateIfNecessary: function (internalInstance, transaction) {
14194
+ performUpdateIfNecessary: function (internalInstance, transaction, updateBatchNumber) {
14195
+ if (internalInstance._updateBatchNumber !== updateBatchNumber) {
14196
+ // The component's enqueued batch number should always be the current
14197
+ // batch or the following one.
14198
+ !(internalInstance._updateBatchNumber == null || internalInstance._updateBatchNumber === updateBatchNumber + 1) ? "development" !== 'production' ? invariant(false, 'performUpdateIfNecessary: Unexpected batch number (current %s, ' + 'pending %s)', updateBatchNumber, internalInstance._updateBatchNumber) : invariant(false) : void 0;
14199
+ return;
14200
+ }
14201
+ if ("development" !== 'production') {
14202
+ if (internalInstance._debugID !== 0) {
14203
+ ReactInstrumentation.debugTool.onBeginReconcilerTimer(internalInstance._debugID, 'performUpdateIfNecessary');
14204
+ }
14205
+ }
13726
14206
  internalInstance.performUpdateIfNecessary(transaction);
13727
14207
  if ("development" !== 'production') {
13728
- ReactInstrumentation.debugTool.onUpdateComponent(internalInstance);
14208
+ if (internalInstance._debugID !== 0) {
14209
+ ReactInstrumentation.debugTool.onEndReconcilerTimer(internalInstance._debugID, 'performUpdateIfNecessary');
14210
+ ReactInstrumentation.debugTool.onUpdateComponent(internalInstance._debugID);
14211
+ }
13729
14212
  }
13730
14213
  }
13731
14214
 
13732
14215
  };
13733
14216
 
13734
14217
  module.exports = ReactReconciler;
13735
- },{"77":77,"94":94}],94:[function(_dereq_,module,exports){
14218
+ },{"173":173,"76":76,"94":94}],94:[function(_dereq_,module,exports){
13736
14219
  /**
13737
14220
  * Copyright 2013-present, Facebook, Inc.
13738
14221
  * All rights reserved.
@@ -13847,10 +14330,12 @@ module.exports = ReactServerBatchingStrategy;
13847
14330
  */
13848
14331
  'use strict';
13849
14332
 
13850
- var ReactDOMContainerInfo = _dereq_(45);
13851
- var ReactDefaultBatchingStrategy = _dereq_(62);
13852
- var ReactElement = _dereq_(66);
13853
- var ReactMarkupChecksum = _dereq_(80);
14333
+ var ReactDOMContainerInfo = _dereq_(46);
14334
+ var ReactDefaultBatchingStrategy = _dereq_(63);
14335
+ var ReactElement = _dereq_(65);
14336
+ var ReactInstrumentation = _dereq_(76);
14337
+ var ReactMarkupChecksum = _dereq_(79);
14338
+ var ReactReconciler = _dereq_(93);
13854
14339
  var ReactServerBatchingStrategy = _dereq_(95);
13855
14340
  var ReactServerRenderingTransaction = _dereq_(97);
13856
14341
  var ReactUpdates = _dereq_(104);
@@ -13872,7 +14357,10 @@ function renderToStringImpl(element, makeStaticMarkup) {
13872
14357
 
13873
14358
  return transaction.perform(function () {
13874
14359
  var componentInstance = instantiateReactComponent(element);
13875
- var markup = componentInstance.mountComponent(transaction, null, ReactDOMContainerInfo(), emptyObject);
14360
+ var markup = ReactReconciler.mountComponent(componentInstance, transaction, null, ReactDOMContainerInfo(), emptyObject);
14361
+ if ("development" !== 'production') {
14362
+ ReactInstrumentation.debugTool.onUnmountComponent(componentInstance._debugID);
14363
+ }
13876
14364
  if (!makeStaticMarkup) {
13877
14365
  markup = ReactMarkupChecksum.addChecksumToMarkup(markup);
13878
14366
  }
@@ -13886,11 +14374,21 @@ function renderToStringImpl(element, makeStaticMarkup) {
13886
14374
  }
13887
14375
  }
13888
14376
 
14377
+ /**
14378
+ * Render a ReactElement to its initial HTML. This should only be used on the
14379
+ * server.
14380
+ * See https://facebook.github.io/react/docs/top-level-api.html#reactdomserver.rendertostring
14381
+ */
13889
14382
  function renderToString(element) {
13890
14383
  !ReactElement.isValidElement(element) ? "development" !== 'production' ? invariant(false, 'renderToString(): You must pass a valid ReactElement.') : invariant(false) : void 0;
13891
14384
  return renderToStringImpl(element, false);
13892
14385
  }
13893
14386
 
14387
+ /**
14388
+ * Similar to renderToString, except this doesn't create extra DOM attributes
14389
+ * such as data-react-id that React uses internally.
14390
+ * See https://facebook.github.io/react/docs/top-level-api.html#reactdomserver.rendertostaticmarkup
14391
+ */
13894
14392
  function renderToStaticMarkup(element) {
13895
14393
  !ReactElement.isValidElement(element) ? "development" !== 'production' ? invariant(false, 'renderToStaticMarkup(): You must pass a valid ReactElement.') : invariant(false) : void 0;
13896
14394
  return renderToStringImpl(element, true);
@@ -13900,7 +14398,7 @@ module.exports = {
13900
14398
  renderToString: renderToString,
13901
14399
  renderToStaticMarkup: renderToStaticMarkup
13902
14400
  };
13903
- },{"104":104,"144":144,"166":166,"173":173,"45":45,"62":62,"66":66,"80":80,"95":95,"97":97}],97:[function(_dereq_,module,exports){
14401
+ },{"104":104,"144":144,"166":166,"173":173,"46":46,"63":63,"65":65,"76":76,"79":79,"93":93,"95":95,"97":97}],97:[function(_dereq_,module,exports){
13904
14402
  /**
13905
14403
  * Copyright 2014-present, Facebook, Inc.
13906
14404
  * All rights reserved.
@@ -14100,13 +14598,13 @@ var EventPluginHub = _dereq_(17);
14100
14598
  var EventPluginRegistry = _dereq_(18);
14101
14599
  var EventPropagators = _dereq_(20);
14102
14600
  var React = _dereq_(27);
14103
- var ReactDefaultInjection = _dereq_(63);
14104
- var ReactDOM = _dereq_(40);
14105
- var ReactDOMComponentTree = _dereq_(44);
14106
- var ReactElement = _dereq_(66);
14601
+ var ReactDefaultInjection = _dereq_(64);
14602
+ var ReactDOM = _dereq_(41);
14603
+ var ReactDOMComponentTree = _dereq_(45);
14604
+ var ReactElement = _dereq_(65);
14107
14605
  var ReactBrowserEventEmitter = _dereq_(28);
14108
- var ReactCompositeComponent = _dereq_(38);
14109
- var ReactInstanceMap = _dereq_(76);
14606
+ var ReactCompositeComponent = _dereq_(39);
14607
+ var ReactInstanceMap = _dereq_(75);
14110
14608
  var ReactUpdates = _dereq_(104);
14111
14609
  var SyntheticEvent = _dereq_(115);
14112
14610
 
@@ -14145,6 +14643,10 @@ function findAllInRenderedTreeInternal(inst, test) {
14145
14643
  }
14146
14644
 
14147
14645
  /**
14646
+ * Utilities for making it easy to test React components.
14647
+ *
14648
+ * See https://facebook.github.io/react/docs/test-utils.html
14649
+ *
14148
14650
  * Todo: Support the entire DOM.scry query syntax. For now, these simple
14149
14651
  * utilities will suffice for testing purposes.
14150
14652
  * @lends ReactTestUtils
@@ -14579,7 +15081,7 @@ Object.keys(topLevelTypes).forEach(function (eventType) {
14579
15081
  });
14580
15082
 
14581
15083
  module.exports = ReactTestUtils;
14582
- },{"104":104,"115":115,"132":132,"16":16,"166":166,"17":17,"173":173,"18":18,"184":184,"20":20,"27":27,"28":28,"38":38,"40":40,"44":44,"63":63,"66":66,"76":76}],100:[function(_dereq_,module,exports){
15084
+ },{"104":104,"115":115,"132":132,"16":16,"166":166,"17":17,"173":173,"18":18,"184":184,"20":20,"27":27,"28":28,"39":39,"41":41,"45":45,"64":64,"65":65,"75":75}],100:[function(_dereq_,module,exports){
14583
15085
  /**
14584
15086
  * Copyright 2013-present, Facebook, Inc.
14585
15087
  * All rights reserved.
@@ -14772,6 +15274,11 @@ var ReactTransitionChildMapping = _dereq_(100);
14772
15274
 
14773
15275
  var emptyFunction = _dereq_(165);
14774
15276
 
15277
+ /**
15278
+ * A basis for animatins. When children are declaratively added or removed,
15279
+ * special lifecycle hooks are called.
15280
+ * See https://facebook.github.io/react/docs/animation.html#low-level-api-reacttransitiongroup
15281
+ */
14775
15282
  var ReactTransitionGroup = React.createClass({
14776
15283
  displayName: 'ReactTransitionGroup',
14777
15284
 
@@ -14972,8 +15479,8 @@ module.exports = ReactTransitionGroup;
14972
15479
 
14973
15480
  'use strict';
14974
15481
 
14975
- var ReactCurrentOwner = _dereq_(39);
14976
- var ReactInstanceMap = _dereq_(76);
15482
+ var ReactCurrentOwner = _dereq_(40);
15483
+ var ReactInstanceMap = _dereq_(75);
14977
15484
  var ReactUpdates = _dereq_(104);
14978
15485
 
14979
15486
  var invariant = _dereq_(173);
@@ -15174,7 +15681,7 @@ var ReactUpdateQueue = {
15174
15681
  };
15175
15682
 
15176
15683
  module.exports = ReactUpdateQueue;
15177
- },{"104":104,"173":173,"183":183,"39":39,"76":76}],104:[function(_dereq_,module,exports){
15684
+ },{"104":104,"173":173,"183":183,"40":40,"75":75}],104:[function(_dereq_,module,exports){
15178
15685
  /**
15179
15686
  * Copyright 2013-present, Facebook, Inc.
15180
15687
  * All rights reserved.
@@ -15192,14 +15699,15 @@ var _assign = _dereq_(184);
15192
15699
 
15193
15700
  var CallbackQueue = _dereq_(5);
15194
15701
  var PooledClass = _dereq_(26);
15195
- var ReactFeatureFlags = _dereq_(72);
15196
- var ReactPerf = _dereq_(88);
15702
+ var ReactFeatureFlags = _dereq_(71);
15703
+ var ReactInstrumentation = _dereq_(76);
15197
15704
  var ReactReconciler = _dereq_(93);
15198
15705
  var Transaction = _dereq_(124);
15199
15706
 
15200
15707
  var invariant = _dereq_(173);
15201
15708
 
15202
15709
  var dirtyComponents = [];
15710
+ var updateBatchNumber = 0;
15203
15711
  var asapCallbackQueue = CallbackQueue.getPooled();
15204
15712
  var asapEnqueued = false;
15205
15713
 
@@ -15294,6 +15802,13 @@ function runBatchedUpdates(transaction) {
15294
15802
  // them before their children by sorting the array.
15295
15803
  dirtyComponents.sort(mountOrderComparator);
15296
15804
 
15805
+ // Any updates enqueued while reconciling must be performed after this entire
15806
+ // batch. Otherwise, if dirtyComponents is [A, B] where A has children B and
15807
+ // C, B could update twice in a single batch if C's render enqueues an update
15808
+ // to B (since B would have already updated, we should skip it, and the only
15809
+ // way we can know to do so is by checking the batch counter).
15810
+ updateBatchNumber++;
15811
+
15297
15812
  for (var i = 0; i < len; i++) {
15298
15813
  // If a component is unmounted before pending changes apply, it will still
15299
15814
  // be here, but we assume that it has cleared its _pendingCallbacks and
@@ -15317,7 +15832,7 @@ function runBatchedUpdates(transaction) {
15317
15832
  console.time(markerName);
15318
15833
  }
15319
15834
 
15320
- ReactReconciler.performUpdateIfNecessary(component, transaction.reconcileTransaction);
15835
+ ReactReconciler.performUpdateIfNecessary(component, transaction.reconcileTransaction, updateBatchNumber);
15321
15836
 
15322
15837
  if (markerName) {
15323
15838
  console.timeEnd(markerName);
@@ -15332,6 +15847,10 @@ function runBatchedUpdates(transaction) {
15332
15847
  }
15333
15848
 
15334
15849
  var flushBatchedUpdates = function () {
15850
+ if ("development" !== 'production') {
15851
+ ReactInstrumentation.debugTool.onBeginFlush();
15852
+ }
15853
+
15335
15854
  // ReactUpdatesFlushTransaction's wrappers will clear the dirtyComponents
15336
15855
  // array and perform any updates enqueued by mount-ready handlers (i.e.,
15337
15856
  // componentDidUpdate) but we need to check here too in order to catch
@@ -15351,8 +15870,11 @@ var flushBatchedUpdates = function () {
15351
15870
  CallbackQueue.release(queue);
15352
15871
  }
15353
15872
  }
15873
+
15874
+ if ("development" !== 'production') {
15875
+ ReactInstrumentation.debugTool.onEndFlush();
15876
+ }
15354
15877
  };
15355
- flushBatchedUpdates = ReactPerf.measure('ReactUpdates', 'flushBatchedUpdates', flushBatchedUpdates);
15356
15878
 
15357
15879
  /**
15358
15880
  * Mark a component as needing a rerender, adding an optional callback to a
@@ -15373,6 +15895,9 @@ function enqueueUpdate(component) {
15373
15895
  }
15374
15896
 
15375
15897
  dirtyComponents.push(component);
15898
+ if (component._updateBatchNumber == null) {
15899
+ component._updateBatchNumber = updateBatchNumber + 1;
15900
+ }
15376
15901
  }
15377
15902
 
15378
15903
  /**
@@ -15416,7 +15941,7 @@ var ReactUpdates = {
15416
15941
  };
15417
15942
 
15418
15943
  module.exports = ReactUpdates;
15419
- },{"124":124,"173":173,"184":184,"26":26,"5":5,"72":72,"88":88,"93":93}],105:[function(_dereq_,module,exports){
15944
+ },{"124":124,"173":173,"184":184,"26":26,"5":5,"71":71,"76":76,"93":93}],105:[function(_dereq_,module,exports){
15420
15945
  /**
15421
15946
  * Copyright 2013-present, Facebook, Inc.
15422
15947
  * All rights reserved.
@@ -15430,7 +15955,7 @@ module.exports = ReactUpdates;
15430
15955
 
15431
15956
  'use strict';
15432
15957
 
15433
- module.exports = '15.0.3-alpha.2';
15958
+ module.exports = '15.1.0-alpha.1';
15434
15959
  },{}],106:[function(_dereq_,module,exports){
15435
15960
  /**
15436
15961
  * Copyright 2013-present, Facebook, Inc.
@@ -15447,9 +15972,9 @@ module.exports = '15.0.3-alpha.2';
15447
15972
 
15448
15973
  var LinkedStateMixin = _dereq_(24);
15449
15974
  var React = _dereq_(27);
15450
- var ReactComponentWithPureRenderMixin = _dereq_(37);
15975
+ var ReactComponentWithPureRenderMixin = _dereq_(38);
15451
15976
  var ReactCSSTransitionGroup = _dereq_(29);
15452
- var ReactFragment = _dereq_(73);
15977
+ var ReactFragment = _dereq_(72);
15453
15978
  var ReactTransitionGroup = _dereq_(102);
15454
15979
 
15455
15980
  var shallowCompare = _dereq_(152);
@@ -15467,12 +15992,12 @@ React.addons = {
15467
15992
  };
15468
15993
 
15469
15994
  if ("development" !== 'production') {
15470
- React.addons.Perf = _dereq_(64);
15995
+ React.addons.Perf = _dereq_(88);
15471
15996
  React.addons.TestUtils = _dereq_(99);
15472
15997
  }
15473
15998
 
15474
15999
  module.exports = React;
15475
- },{"102":102,"152":152,"155":155,"24":24,"27":27,"29":29,"37":37,"64":64,"73":73,"99":99}],107:[function(_dereq_,module,exports){
16000
+ },{"102":102,"152":152,"155":155,"24":24,"27":27,"29":29,"38":38,"72":72,"88":88,"99":99}],107:[function(_dereq_,module,exports){
15476
16001
  /**
15477
16002
  * Copyright 2013-present, Facebook, Inc.
15478
16003
  * All rights reserved.
@@ -15488,8 +16013,8 @@ module.exports = React;
15488
16013
 
15489
16014
  var _assign = _dereq_(184);
15490
16015
 
15491
- var ReactDOM = _dereq_(40);
15492
- var ReactDOMServer = _dereq_(56);
16016
+ var ReactDOM = _dereq_(41);
16017
+ var ReactDOMServer = _dereq_(57);
15493
16018
  var ReactWithAddons = _dereq_(106);
15494
16019
 
15495
16020
  // `version` will be added here by ReactIsomorphic.
@@ -15499,7 +16024,7 @@ var ReactWithAddonsUMDEntry = _assign({
15499
16024
  }, ReactWithAddons);
15500
16025
 
15501
16026
  module.exports = ReactWithAddonsUMDEntry;
15502
- },{"106":106,"184":184,"40":40,"56":56}],108:[function(_dereq_,module,exports){
16027
+ },{"106":106,"184":184,"41":41,"57":57}],108:[function(_dereq_,module,exports){
15503
16028
  /**
15504
16029
  * Copyright 2013-present, Facebook, Inc.
15505
16030
  * All rights reserved.
@@ -15817,8 +16342,8 @@ module.exports = SVGDOMPropertyConfig;
15817
16342
  var EventConstants = _dereq_(16);
15818
16343
  var EventPropagators = _dereq_(20);
15819
16344
  var ExecutionEnvironment = _dereq_(159);
15820
- var ReactDOMComponentTree = _dereq_(44);
15821
- var ReactInputSelection = _dereq_(75);
16345
+ var ReactDOMComponentTree = _dereq_(45);
16346
+ var ReactInputSelection = _dereq_(74);
15822
16347
  var SyntheticEvent = _dereq_(115);
15823
16348
 
15824
16349
  var getActiveElement = _dereq_(168);
@@ -15997,7 +16522,7 @@ var SelectEventPlugin = {
15997
16522
  };
15998
16523
 
15999
16524
  module.exports = SelectEventPlugin;
16000
- },{"115":115,"146":146,"159":159,"16":16,"168":168,"177":177,"182":182,"20":20,"44":44,"75":75}],110:[function(_dereq_,module,exports){
16525
+ },{"115":115,"146":146,"159":159,"16":16,"168":168,"177":177,"182":182,"20":20,"45":45,"74":74}],110:[function(_dereq_,module,exports){
16001
16526
  /**
16002
16527
  * Copyright 2013-present, Facebook, Inc.
16003
16528
  * All rights reserved.
@@ -16014,7 +16539,7 @@ module.exports = SelectEventPlugin;
16014
16539
  var EventConstants = _dereq_(16);
16015
16540
  var EventListener = _dereq_(158);
16016
16541
  var EventPropagators = _dereq_(20);
16017
- var ReactDOMComponentTree = _dereq_(44);
16542
+ var ReactDOMComponentTree = _dereq_(45);
16018
16543
  var SyntheticAnimationEvent = _dereq_(111);
16019
16544
  var SyntheticClipboardEvent = _dereq_(112);
16020
16545
  var SyntheticEvent = _dereq_(115);
@@ -16625,7 +17150,7 @@ var SimpleEventPlugin = {
16625
17150
  };
16626
17151
 
16627
17152
  module.exports = SimpleEventPlugin;
16628
- },{"111":111,"112":112,"114":114,"115":115,"116":116,"118":118,"119":119,"120":120,"121":121,"122":122,"123":123,"135":135,"158":158,"16":16,"165":165,"173":173,"177":177,"20":20,"44":44}],111:[function(_dereq_,module,exports){
17153
+ },{"111":111,"112":112,"114":114,"115":115,"116":116,"118":118,"119":119,"120":120,"121":121,"122":122,"123":123,"135":135,"158":158,"16":16,"165":165,"173":173,"177":177,"20":20,"45":45}],111:[function(_dereq_,module,exports){
16629
17154
  /**
16630
17155
  * Copyright 2013-present, Facebook, Inc.
16631
17156
  * All rights reserved.
@@ -18027,9 +18552,9 @@ module.exports = escapeTextContentForBrowser;
18027
18552
 
18028
18553
  'use strict';
18029
18554
 
18030
- var ReactCurrentOwner = _dereq_(39);
18031
- var ReactDOMComponentTree = _dereq_(44);
18032
- var ReactInstanceMap = _dereq_(76);
18555
+ var ReactCurrentOwner = _dereq_(40);
18556
+ var ReactDOMComponentTree = _dereq_(45);
18557
+ var ReactInstanceMap = _dereq_(75);
18033
18558
 
18034
18559
  var getNativeComponentFromComposite = _dereq_(140);
18035
18560
  var invariant = _dereq_(173);
@@ -18038,6 +18563,8 @@ var warning = _dereq_(183);
18038
18563
  /**
18039
18564
  * Returns the DOM node rendered by this element.
18040
18565
  *
18566
+ * See https://facebook.github.io/react/docs/top-level-api.html#reactdom.finddomnode
18567
+ *
18041
18568
  * @param {ReactComponent|DOMElement} componentOrElement
18042
18569
  * @return {?DOMElement} The root node of this element.
18043
18570
  */
@@ -18070,7 +18597,7 @@ function findDOMNode(componentOrElement) {
18070
18597
  }
18071
18598
 
18072
18599
  module.exports = findDOMNode;
18073
- },{"140":140,"173":173,"183":183,"39":39,"44":44,"76":76}],133:[function(_dereq_,module,exports){
18600
+ },{"140":140,"173":173,"183":183,"40":40,"45":45,"75":75}],133:[function(_dereq_,module,exports){
18074
18601
  /**
18075
18602
  * Copyright 2013-present, Facebook, Inc.
18076
18603
  * All rights reserved.
@@ -18684,9 +19211,10 @@ module.exports = getVendorPrefixedEventName;
18684
19211
 
18685
19212
  var _assign = _dereq_(184);
18686
19213
 
18687
- var ReactCompositeComponent = _dereq_(38);
18688
- var ReactEmptyComponent = _dereq_(68);
18689
- var ReactNativeComponent = _dereq_(84);
19214
+ var ReactCompositeComponent = _dereq_(39);
19215
+ var ReactEmptyComponent = _dereq_(67);
19216
+ var ReactNativeComponent = _dereq_(83);
19217
+ var ReactInstrumentation = _dereq_(76);
18690
19218
 
18691
19219
  var invariant = _dereq_(173);
18692
19220
  var warning = _dereq_(183);
@@ -18709,6 +19237,21 @@ function getDeclarationErrorAddendum(owner) {
18709
19237
  return '';
18710
19238
  }
18711
19239
 
19240
+ function getDisplayName(instance) {
19241
+ var element = instance._currentElement;
19242
+ if (element == null) {
19243
+ return '#empty';
19244
+ } else if (typeof element === 'string' || typeof element === 'number') {
19245
+ return '#text';
19246
+ } else if (typeof element.type === 'string') {
19247
+ return element.type;
19248
+ } else if (instance.getName) {
19249
+ return instance.getName() || 'Unknown';
19250
+ } else {
19251
+ return element.type.displayName || element.type.name || 'Unknown';
19252
+ }
19253
+ }
19254
+
18712
19255
  /**
18713
19256
  * Check if the type reference is a known internal type. I.e. not a user
18714
19257
  * provided composite type.
@@ -18720,6 +19263,8 @@ function isInternalComponentType(type) {
18720
19263
  return typeof type === 'function' && typeof type.prototype !== 'undefined' && typeof type.prototype.mountComponent === 'function' && typeof type.prototype.receiveComponent === 'function';
18721
19264
  }
18722
19265
 
19266
+ var nextDebugID = 1;
19267
+
18723
19268
  /**
18724
19269
  * Given a ReactNode, create an instance that will actually be mounted.
18725
19270
  *
@@ -18730,7 +19275,8 @@ function isInternalComponentType(type) {
18730
19275
  function instantiateReactComponent(node) {
18731
19276
  var instance;
18732
19277
 
18733
- if (node === null || node === false) {
19278
+ var isEmpty = node === null || node === false;
19279
+ if (isEmpty) {
18734
19280
  instance = ReactEmptyComponent.create(instantiateReactComponent);
18735
19281
  } else if (typeof node === 'object') {
18736
19282
  var element = node;
@@ -18768,6 +19314,18 @@ function instantiateReactComponent(node) {
18768
19314
  instance._warnedAboutRefsInRender = false;
18769
19315
  }
18770
19316
 
19317
+ if ("development" !== 'production') {
19318
+ var debugID = isEmpty ? 0 : nextDebugID++;
19319
+ instance._debugID = debugID;
19320
+
19321
+ var displayName = getDisplayName(instance);
19322
+ ReactInstrumentation.debugTool.onSetDisplayName(debugID, displayName);
19323
+ var owner = node && node._owner;
19324
+ if (owner) {
19325
+ ReactInstrumentation.debugTool.onSetOwner(debugID, owner._debugID);
19326
+ }
19327
+ }
19328
+
18771
19329
  // Internal instances should fully constructed at this point, so they should
18772
19330
  // not get any new fields added to them at this point.
18773
19331
  if ("development" !== 'production') {
@@ -18780,7 +19338,7 @@ function instantiateReactComponent(node) {
18780
19338
  }
18781
19339
 
18782
19340
  module.exports = instantiateReactComponent;
18783
- },{"173":173,"183":183,"184":184,"38":38,"68":68,"84":84}],145:[function(_dereq_,module,exports){
19341
+ },{"173":173,"183":183,"184":184,"39":39,"67":67,"76":76,"83":83}],145:[function(_dereq_,module,exports){
18784
19342
  /**
18785
19343
  * Copyright 2013-present, Facebook, Inc.
18786
19344
  * All rights reserved.
@@ -18896,16 +19454,19 @@ module.exports = isTextInputElement;
18896
19454
  */
18897
19455
  'use strict';
18898
19456
 
18899
- var ReactElement = _dereq_(66);
19457
+ var ReactElement = _dereq_(65);
18900
19458
 
18901
19459
  var invariant = _dereq_(173);
18902
19460
 
18903
19461
  /**
18904
19462
  * Returns the first child in a collection of children and verifies that there
18905
- * is only one child in the collection. The current implementation of this
18906
- * function assumes that a single child gets passed without a wrapper, but the
18907
- * purpose of this helper function is to abstract away the particular structure
18908
- * of children.
19463
+ * is only one child in the collection.
19464
+ *
19465
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.children.only
19466
+ *
19467
+ * The current implementation of this function assumes that a single child gets
19468
+ * passed without a wrapper, but the purpose of this helper function is to
19469
+ * abstract away the particular structure of children.
18909
19470
  *
18910
19471
  * @param {?object} children Child collection structure.
18911
19472
  * @return {ReactElement} The first and only `ReactElement` contained in the
@@ -18917,7 +19478,7 @@ function onlyChild(children) {
18917
19478
  }
18918
19479
 
18919
19480
  module.exports = onlyChild;
18920
- },{"173":173,"66":66}],148:[function(_dereq_,module,exports){
19481
+ },{"173":173,"65":65}],148:[function(_dereq_,module,exports){
18921
19482
  /**
18922
19483
  * Copyright 2013-present, Facebook, Inc.
18923
19484
  * All rights reserved.
@@ -18958,10 +19519,10 @@ module.exports = quoteAttributeValueForBrowser;
18958
19519
 
18959
19520
  'use strict';
18960
19521
 
18961
- var ReactMount = _dereq_(81);
19522
+ var ReactMount = _dereq_(80);
18962
19523
 
18963
19524
  module.exports = ReactMount.renderSubtreeIntoContainer;
18964
- },{"81":81}],150:[function(_dereq_,module,exports){
19525
+ },{"80":80}],150:[function(_dereq_,module,exports){
18965
19526
  /**
18966
19527
  * Copyright 2013-present, Facebook, Inc.
18967
19528
  * All rights reserved.
@@ -19104,6 +19665,7 @@ var shallowEqual = _dereq_(182);
19104
19665
  /**
19105
19666
  * Does a shallow comparison for props and state.
19106
19667
  * See ReactComponentWithPureRenderMixin
19668
+ * See also https://facebook.github.io/react/docs/shallow-compare.html
19107
19669
  */
19108
19670
  function shallowCompare(instance, nextProps, nextState) {
19109
19671
  return !shallowEqual(instance.props, nextProps) || !shallowEqual(instance.state, nextState);
@@ -19167,8 +19729,8 @@ module.exports = shouldUpdateReactComponent;
19167
19729
 
19168
19730
  'use strict';
19169
19731
 
19170
- var ReactCurrentOwner = _dereq_(39);
19171
- var ReactElement = _dereq_(66);
19732
+ var ReactCurrentOwner = _dereq_(40);
19733
+ var ReactElement = _dereq_(65);
19172
19734
 
19173
19735
  var getIteratorFn = _dereq_(139);
19174
19736
  var invariant = _dereq_(173);
@@ -19312,7 +19874,7 @@ function traverseAllChildren(children, callback, traverseContext) {
19312
19874
  }
19313
19875
 
19314
19876
  module.exports = traverseAllChildren;
19315
- },{"139":139,"173":173,"183":183,"23":23,"39":39,"66":66}],155:[function(_dereq_,module,exports){
19877
+ },{"139":139,"173":173,"183":183,"23":23,"40":40,"65":65}],155:[function(_dereq_,module,exports){
19316
19878
  /**
19317
19879
  * Copyright 2013-present, Facebook, Inc.
19318
19880
  * All rights reserved.
@@ -19365,6 +19927,10 @@ function invariantArrayCase(value, spec, command) {
19365
19927
  !Array.isArray(specValue) ? "development" !== '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) : invariant(false) : void 0;
19366
19928
  }
19367
19929
 
19930
+ /**
19931
+ * Returns a updated shallow copy of an object without mutating the original.
19932
+ * See https://facebook.github.io/react/docs/update.html for details.
19933
+ */
19368
19934
  function update(value, spec) {
19369
19935
  !(typeof spec === 'object') ? "development" !== '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) : invariant(false) : void 0;
19370
19936