react 15.0.2-alpha.4 → 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 (57) hide show
  1. package/dist/react-with-addons.js +1556 -935
  2. package/dist/react-with-addons.min.js +6 -6
  3. package/dist/react.js +1511 -1337
  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 +15 -3
  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 +51 -11
  19. package/lib/ReactDOMIDOperations.js +0 -5
  20. package/lib/ReactDOMInput.js +5 -3
  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/ReactNativeAttributePayload.js +7 -36
  32. package/lib/{IOSNativeBridgeEventPlugin.js → ReactNativeBridgeEventPlugin.js} +8 -5
  33. package/lib/ReactNativeDOMIDOperations.js +3 -6
  34. package/lib/ReactNativeDefaultInjection.js +15 -12
  35. package/lib/ReactNativeEventEmitter.js +6 -3
  36. package/lib/{IOSDefaultEventPluginOrder.js → ReactNativeEventPluginOrder.js} +3 -3
  37. package/lib/ReactNativeMount.js +18 -7
  38. package/lib/ReactNativeOperationHistoryDevtool.js +32 -0
  39. package/lib/ReactNativeTextComponent.js +8 -0
  40. package/lib/ReactPerf.js +397 -75
  41. package/lib/ReactReconciler.js +46 -5
  42. package/lib/ReactServerRendering.js +16 -1
  43. package/lib/ReactServerRenderingTransaction.js +5 -1
  44. package/lib/ReactTestUtils.js +4 -0
  45. package/lib/ReactTransitionGroup.js +5 -0
  46. package/lib/ReactUpdates.js +21 -3
  47. package/lib/ReactVersion.js +1 -1
  48. package/lib/ReactWithAddons.js +1 -1
  49. package/lib/findDOMNode.js +2 -0
  50. package/lib/instantiateReactComponent.js +32 -1
  51. package/lib/onlyChild.js +7 -4
  52. package/lib/shallowCompare.js +1 -0
  53. package/lib/update.js +4 -0
  54. package/package.json +2 -2
  55. package/lib/ReactDebugInstanceMap.js +0 -102
  56. package/lib/ReactDefaultPerf.js +0 -316
  57. package/lib/ReactDefaultPerfAnalysis.js +0 -210
@@ -1,5 +1,5 @@
1
1
  /**
2
- * React (with addons) v15.0.2-alpha.4
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.
@@ -1376,9 +1404,14 @@ module.exports = DOMChildrenOperations;
1376
1404
 
1377
1405
  'use strict';
1378
1406
 
1407
+ var DOMNamespaces = _dereq_(9);
1408
+
1379
1409
  var createMicrosoftUnsafeLocalFunction = _dereq_(129);
1380
1410
  var setTextContent = _dereq_(151);
1381
1411
 
1412
+ var ELEMENT_NODE_TYPE = 1;
1413
+ var DOCUMENT_FRAGMENT_NODE_TYPE = 11;
1414
+
1382
1415
  /**
1383
1416
  * In IE (8-11) and Edge, appending nodes with no children is dramatically
1384
1417
  * faster than appending a full subtree, so we essentially queue up the
@@ -1413,8 +1446,10 @@ var insertTreeBefore = createMicrosoftUnsafeLocalFunction(function (parentNode,
1413
1446
  // DocumentFragments aren't actually part of the DOM after insertion so
1414
1447
  // appending children won't update the DOM. We need to ensure the fragment
1415
1448
  // is properly populated first, breaking out of our lazy approach for just
1416
- // this level.
1417
- if (tree.node.nodeType === 11) {
1449
+ // this level. Also, some <object> plugins (like Flash Player) will read
1450
+ // <param> nodes immediately upon insertion into the DOM, so <object>
1451
+ // must also be populated prior to insertion into the DOM.
1452
+ if (tree.node.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE || tree.node.nodeType === ELEMENT_NODE_TYPE && tree.node.nodeName.toLowerCase() === 'object' && (tree.node.namespaceURI == null || tree.node.namespaceURI === DOMNamespaces.html)) {
1418
1453
  insertTreeChildren(tree);
1419
1454
  parentNode.insertBefore(tree.node, referenceNode);
1420
1455
  } else {
@@ -1452,12 +1487,17 @@ function queueText(tree, text) {
1452
1487
  }
1453
1488
  }
1454
1489
 
1490
+ function toString() {
1491
+ return this.node.nodeName;
1492
+ }
1493
+
1455
1494
  function DOMLazyTree(node) {
1456
1495
  return {
1457
1496
  node: node,
1458
1497
  children: [],
1459
1498
  html: null,
1460
- text: null
1499
+ text: null,
1500
+ toString: toString
1461
1501
  };
1462
1502
  }
1463
1503
 
@@ -1468,7 +1508,7 @@ DOMLazyTree.queueHTML = queueHTML;
1468
1508
  DOMLazyTree.queueText = queueText;
1469
1509
 
1470
1510
  module.exports = DOMLazyTree;
1471
- },{"129":129,"151":151}],9:[function(_dereq_,module,exports){
1511
+ },{"129":129,"151":151,"9":9}],9:[function(_dereq_,module,exports){
1472
1512
  /**
1473
1513
  * Copyright 2013-present, Facebook, Inc.
1474
1514
  * All rights reserved.
@@ -1718,8 +1758,9 @@ module.exports = DOMProperty;
1718
1758
  'use strict';
1719
1759
 
1720
1760
  var DOMProperty = _dereq_(10);
1721
- var ReactDOMInstrumentation = _dereq_(52);
1722
- var ReactPerf = _dereq_(88);
1761
+ var ReactDOMComponentTree = _dereq_(45);
1762
+ var ReactDOMInstrumentation = _dereq_(53);
1763
+ var ReactInstrumentation = _dereq_(76);
1723
1764
 
1724
1765
  var quoteAttributeValueForBrowser = _dereq_(148);
1725
1766
  var warning = _dereq_(183);
@@ -1827,9 +1868,6 @@ var DOMPropertyOperations = {
1827
1868
  * @param {*} value
1828
1869
  */
1829
1870
  setValueForProperty: function (node, name, value) {
1830
- if ("development" !== 'production') {
1831
- ReactDOMInstrumentation.debugTool.onSetValueForProperty(node, name, value);
1832
- }
1833
1871
  var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;
1834
1872
  if (propertyInfo) {
1835
1873
  var mutationMethod = propertyInfo.mutationMethod;
@@ -1837,6 +1875,7 @@ var DOMPropertyOperations = {
1837
1875
  mutationMethod(node, value);
1838
1876
  } else if (shouldIgnoreValue(propertyInfo, value)) {
1839
1877
  this.deleteValueForProperty(node, name);
1878
+ return;
1840
1879
  } else if (propertyInfo.mustUseProperty) {
1841
1880
  var propName = propertyInfo.propertyName;
1842
1881
  // Must explicitly cast values for HAS_SIDE_EFFECTS-properties to the
@@ -1861,6 +1900,14 @@ var DOMPropertyOperations = {
1861
1900
  }
1862
1901
  } else if (DOMProperty.isCustomAttribute(name)) {
1863
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);
1864
1911
  }
1865
1912
  },
1866
1913
 
@@ -1873,6 +1920,12 @@ var DOMPropertyOperations = {
1873
1920
  } else {
1874
1921
  node.setAttribute(name, '' + value);
1875
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
+ }
1876
1929
  },
1877
1930
 
1878
1931
  /**
@@ -1882,9 +1935,6 @@ var DOMPropertyOperations = {
1882
1935
  * @param {string} name
1883
1936
  */
1884
1937
  deleteValueForProperty: function (node, name) {
1885
- if ("development" !== 'production') {
1886
- ReactDOMInstrumentation.debugTool.onDeleteValueForProperty(node, name);
1887
- }
1888
1938
  var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;
1889
1939
  if (propertyInfo) {
1890
1940
  var mutationMethod = propertyInfo.mutationMethod;
@@ -1906,18 +1956,17 @@ var DOMPropertyOperations = {
1906
1956
  } else if (DOMProperty.isCustomAttribute(name)) {
1907
1957
  node.removeAttribute(name);
1908
1958
  }
1959
+
1960
+ if ("development" !== 'production') {
1961
+ ReactDOMInstrumentation.debugTool.onDeleteValueForProperty(node, name);
1962
+ ReactInstrumentation.debugTool.onNativeOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'remove attribute', name);
1963
+ }
1909
1964
  }
1910
1965
 
1911
1966
  };
1912
1967
 
1913
- ReactPerf.measureMethods(DOMPropertyOperations, 'DOMPropertyOperations', {
1914
- setValueForProperty: 'setValueForProperty',
1915
- setValueForAttribute: 'setValueForAttribute',
1916
- deleteValueForProperty: 'deleteValueForProperty'
1917
- });
1918
-
1919
1968
  module.exports = DOMPropertyOperations;
1920
- },{"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){
1921
1970
  /**
1922
1971
  * Copyright 2013-present, Facebook, Inc.
1923
1972
  * All rights reserved.
@@ -2157,7 +2206,7 @@ module.exports = DisabledInputUtils;
2157
2206
 
2158
2207
  var EventConstants = _dereq_(16);
2159
2208
  var EventPropagators = _dereq_(20);
2160
- var ReactDOMComponentTree = _dereq_(44);
2209
+ var ReactDOMComponentTree = _dereq_(45);
2161
2210
  var SyntheticMouseEvent = _dereq_(119);
2162
2211
 
2163
2212
  var keyOf = _dereq_(177);
@@ -2247,7 +2296,7 @@ var EnterLeaveEventPlugin = {
2247
2296
  };
2248
2297
 
2249
2298
  module.exports = EnterLeaveEventPlugin;
2250
- },{"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){
2251
2300
  /**
2252
2301
  * Copyright 2013-present, Facebook, Inc.
2253
2302
  * All rights reserved.
@@ -2361,7 +2410,7 @@ module.exports = EventConstants;
2361
2410
 
2362
2411
  var EventPluginRegistry = _dereq_(18);
2363
2412
  var EventPluginUtils = _dereq_(19);
2364
- var ReactErrorUtils = _dereq_(69);
2413
+ var ReactErrorUtils = _dereq_(68);
2365
2414
 
2366
2415
  var accumulateInto = _dereq_(126);
2367
2416
  var forEachAccumulated = _dereq_(134);
@@ -2581,7 +2630,7 @@ var EventPluginHub = {
2581
2630
  };
2582
2631
 
2583
2632
  module.exports = EventPluginHub;
2584
- },{"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){
2585
2634
  /**
2586
2635
  * Copyright 2013-present, Facebook, Inc.
2587
2636
  * All rights reserved.
@@ -2838,7 +2887,7 @@ module.exports = EventPluginRegistry;
2838
2887
  'use strict';
2839
2888
 
2840
2889
  var EventConstants = _dereq_(16);
2841
- var ReactErrorUtils = _dereq_(69);
2890
+ var ReactErrorUtils = _dereq_(68);
2842
2891
 
2843
2892
  var invariant = _dereq_(173);
2844
2893
  var warning = _dereq_(183);
@@ -3051,7 +3100,7 @@ var EventPluginUtils = {
3051
3100
  };
3052
3101
 
3053
3102
  module.exports = EventPluginUtils;
3054
- },{"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){
3055
3104
  /**
3056
3105
  * Copyright 2013-present, Facebook, Inc.
3057
3106
  * All rights reserved.
@@ -3568,11 +3617,12 @@ module.exports = KeyEscapeUtils;
3568
3617
 
3569
3618
  'use strict';
3570
3619
 
3571
- var ReactLink = _dereq_(79);
3620
+ var ReactLink = _dereq_(78);
3572
3621
  var ReactStateSetters = _dereq_(98);
3573
3622
 
3574
3623
  /**
3575
3624
  * A simple mixin around ReactLink.forState().
3625
+ * See https://facebook.github.io/react/docs/two-way-binding-helpers.html
3576
3626
  */
3577
3627
  var LinkedStateMixin = {
3578
3628
  /**
@@ -3590,7 +3640,7 @@ var LinkedStateMixin = {
3590
3640
  };
3591
3641
 
3592
3642
  module.exports = LinkedStateMixin;
3593
- },{"79":79,"98":98}],25:[function(_dereq_,module,exports){
3643
+ },{"78":78,"98":98}],25:[function(_dereq_,module,exports){
3594
3644
  /**
3595
3645
  * Copyright 2013-present, Facebook, Inc.
3596
3646
  * All rights reserved.
@@ -3863,9 +3913,9 @@ var _assign = _dereq_(184);
3863
3913
  var ReactChildren = _dereq_(32);
3864
3914
  var ReactComponent = _dereq_(34);
3865
3915
  var ReactClass = _dereq_(33);
3866
- var ReactDOMFactories = _dereq_(48);
3867
- var ReactElement = _dereq_(66);
3868
- var ReactElementValidator = _dereq_(67);
3916
+ var ReactDOMFactories = _dereq_(49);
3917
+ var ReactElement = _dereq_(65);
3918
+ var ReactElementValidator = _dereq_(66);
3869
3919
  var ReactPropTypes = _dereq_(91);
3870
3920
  var ReactVersion = _dereq_(105);
3871
3921
 
@@ -3932,7 +3982,7 @@ var React = {
3932
3982
  };
3933
3983
 
3934
3984
  module.exports = React;
3935
- },{"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){
3936
3986
  /**
3937
3987
  * Copyright 2013-present, Facebook, Inc.
3938
3988
  * All rights reserved.
@@ -3950,7 +4000,7 @@ var _assign = _dereq_(184);
3950
4000
 
3951
4001
  var EventConstants = _dereq_(16);
3952
4002
  var EventPluginRegistry = _dereq_(18);
3953
- var ReactEventEmitterMixin = _dereq_(70);
4003
+ var ReactEventEmitterMixin = _dereq_(69);
3954
4004
  var ViewportMetrics = _dereq_(125);
3955
4005
 
3956
4006
  var getVendorPrefixedEventName = _dereq_(143);
@@ -4250,7 +4300,7 @@ var ReactBrowserEventEmitter = _assign({}, ReactEventEmitterMixin, {
4250
4300
  });
4251
4301
 
4252
4302
  module.exports = ReactBrowserEventEmitter;
4253
- },{"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){
4254
4304
  /**
4255
4305
  * Copyright 2013-present, Facebook, Inc.
4256
4306
  * All rights reserved.
@@ -4290,6 +4340,11 @@ function createTransitionTimeoutPropValidator(transitionType) {
4290
4340
  };
4291
4341
  }
4292
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
+ */
4293
4348
  var ReactCSSTransitionGroup = React.createClass({
4294
4349
  displayName: 'ReactCSSTransitionGroup',
4295
4350
 
@@ -4348,7 +4403,7 @@ module.exports = ReactCSSTransitionGroup;
4348
4403
  'use strict';
4349
4404
 
4350
4405
  var React = _dereq_(27);
4351
- var ReactDOM = _dereq_(40);
4406
+ var ReactDOM = _dereq_(41);
4352
4407
 
4353
4408
  var CSSCore = _dereq_(157);
4354
4409
  var ReactTransitionEvents = _dereq_(101);
@@ -4494,7 +4549,7 @@ var ReactCSSTransitionGroupChild = React.createClass({
4494
4549
  });
4495
4550
 
4496
4551
  module.exports = ReactCSSTransitionGroupChild;
4497
- },{"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){
4498
4553
  /**
4499
4554
  * Copyright 2014-present, Facebook, Inc.
4500
4555
  * All rights reserved.
@@ -4635,7 +4690,7 @@ module.exports = ReactChildReconciler;
4635
4690
  'use strict';
4636
4691
 
4637
4692
  var PooledClass = _dereq_(26);
4638
- var ReactElement = _dereq_(66);
4693
+ var ReactElement = _dereq_(65);
4639
4694
 
4640
4695
  var emptyFunction = _dereq_(165);
4641
4696
  var traverseAllChildren = _dereq_(154);
@@ -4678,6 +4733,8 @@ function forEachSingleChild(bookKeeping, child, name) {
4678
4733
  /**
4679
4734
  * Iterates through children that are typically specified as `props.children`.
4680
4735
  *
4736
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.children.foreach
4737
+ *
4681
4738
  * The provided forEachFunc(child, index) will be called for each
4682
4739
  * leaf child.
4683
4740
  *
@@ -4753,7 +4810,9 @@ function mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {
4753
4810
  /**
4754
4811
  * Maps children that are typically specified as `props.children`.
4755
4812
  *
4756
- * 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
4757
4816
  * leaf child.
4758
4817
  *
4759
4818
  * @param {?*} children Children tree container.
@@ -4778,6 +4837,8 @@ function forEachSingleChildDummy(traverseContext, child, name) {
4778
4837
  * Count the number of children that are typically specified as
4779
4838
  * `props.children`.
4780
4839
  *
4840
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.children.count
4841
+ *
4781
4842
  * @param {?*} children Children tree container.
4782
4843
  * @return {number} The number of children.
4783
4844
  */
@@ -4788,6 +4849,8 @@ function countChildren(children, context) {
4788
4849
  /**
4789
4850
  * Flatten a children object (typically specified as `props.children`) and
4790
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
4791
4854
  */
4792
4855
  function toArray(children) {
4793
4856
  var result = [];
@@ -4804,7 +4867,7 @@ var ReactChildren = {
4804
4867
  };
4805
4868
 
4806
4869
  module.exports = ReactChildren;
4807
- },{"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){
4808
4871
  /**
4809
4872
  * Copyright 2013-present, Facebook, Inc.
4810
4873
  * All rights reserved.
@@ -4821,7 +4884,7 @@ module.exports = ReactChildren;
4821
4884
  var _assign = _dereq_(184);
4822
4885
 
4823
4886
  var ReactComponent = _dereq_(34);
4824
- var ReactElement = _dereq_(66);
4887
+ var ReactElement = _dereq_(65);
4825
4888
  var ReactPropTypeLocations = _dereq_(90);
4826
4889
  var ReactPropTypeLocationNames = _dereq_(89);
4827
4890
  var ReactNoopUpdateQueue = _dereq_(86);
@@ -5434,6 +5497,7 @@ var ReactClass = {
5434
5497
 
5435
5498
  /**
5436
5499
  * Creates a composite component class given a class specification.
5500
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.createclass
5437
5501
  *
5438
5502
  * @param {object} spec Class specification (which must define `render`).
5439
5503
  * @return {function} Component constructor function.
@@ -5528,7 +5592,7 @@ var ReactClass = {
5528
5592
  };
5529
5593
 
5530
5594
  module.exports = ReactClass;
5531
- },{"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){
5532
5596
  /**
5533
5597
  * Copyright 2013-present, Facebook, Inc.
5534
5598
  * All rights reserved.
@@ -5543,7 +5607,7 @@ module.exports = ReactClass;
5543
5607
  'use strict';
5544
5608
 
5545
5609
  var ReactNoopUpdateQueue = _dereq_(86);
5546
- var ReactInstrumentation = _dereq_(77);
5610
+ var ReactInstrumentation = _dereq_(76);
5547
5611
 
5548
5612
  var canDefineProperty = _dereq_(128);
5549
5613
  var emptyObject = _dereq_(166);
@@ -5650,7 +5714,7 @@ if ("development" !== 'production') {
5650
5714
  }
5651
5715
 
5652
5716
  module.exports = ReactComponent;
5653
- },{"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){
5654
5718
  /**
5655
5719
  * Copyright 2013-present, Facebook, Inc.
5656
5720
  * All rights reserved.
@@ -5665,8 +5729,7 @@ module.exports = ReactComponent;
5665
5729
  'use strict';
5666
5730
 
5667
5731
  var DOMChildrenOperations = _dereq_(7);
5668
- var ReactDOMIDOperations = _dereq_(50);
5669
- var ReactPerf = _dereq_(88);
5732
+ var ReactDOMIDOperations = _dereq_(51);
5670
5733
 
5671
5734
  /**
5672
5735
  * Abstracts away all functionality of the reconciler that requires knowledge of
@@ -5690,12 +5753,8 @@ var ReactComponentBrowserEnvironment = {
5690
5753
 
5691
5754
  };
5692
5755
 
5693
- ReactPerf.measureMethods(ReactComponentBrowserEnvironment, 'ReactComponentBrowserEnvironment', {
5694
- replaceNodeWithMarkup: 'replaceNodeWithMarkup'
5695
- });
5696
-
5697
5756
  module.exports = ReactComponentBrowserEnvironment;
5698
- },{"50":50,"7":7,"88":88}],36:[function(_dereq_,module,exports){
5757
+ },{"51":51,"7":7}],36:[function(_dereq_,module,exports){
5699
5758
  /**
5700
5759
  * Copyright 2014-present, Facebook, Inc.
5701
5760
  * All rights reserved.
@@ -5748,6 +5807,147 @@ var ReactComponentEnvironment = {
5748
5807
 
5749
5808
  module.exports = ReactComponentEnvironment;
5750
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){
5751
5951
  /**
5752
5952
  * Copyright 2013-present, Facebook, Inc.
5753
5953
  * All rights reserved.
@@ -5786,6 +5986,8 @@ var shallowCompare = _dereq_(152);
5786
5986
  * complex data structures this mixin may have false-negatives for deeper
5787
5987
  * differences. Only mixin to components which have simple props and state, or
5788
5988
  * use `forceUpdate()` when you know deep data structures have changed.
5989
+ *
5990
+ * See https://facebook.github.io/react/docs/pure-render-mixin.html
5789
5991
  */
5790
5992
  var ReactComponentWithPureRenderMixin = {
5791
5993
  shouldComponentUpdate: function (nextProps, nextState) {
@@ -5794,7 +5996,7 @@ var ReactComponentWithPureRenderMixin = {
5794
5996
  };
5795
5997
 
5796
5998
  module.exports = ReactComponentWithPureRenderMixin;
5797
- },{"152":152}],38:[function(_dereq_,module,exports){
5999
+ },{"152":152}],39:[function(_dereq_,module,exports){
5798
6000
  /**
5799
6001
  * Copyright 2013-present, Facebook, Inc.
5800
6002
  * All rights reserved.
@@ -5811,13 +6013,12 @@ module.exports = ReactComponentWithPureRenderMixin;
5811
6013
  var _assign = _dereq_(184);
5812
6014
 
5813
6015
  var ReactComponentEnvironment = _dereq_(36);
5814
- var ReactCurrentOwner = _dereq_(39);
5815
- var ReactElement = _dereq_(66);
5816
- var ReactErrorUtils = _dereq_(69);
5817
- var ReactInstanceMap = _dereq_(76);
5818
- 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);
5819
6021
  var ReactNodeTypes = _dereq_(85);
5820
- var ReactPerf = _dereq_(88);
5821
6022
  var ReactPropTypeLocations = _dereq_(90);
5822
6023
  var ReactPropTypeLocationNames = _dereq_(89);
5823
6024
  var ReactReconciler = _dereq_(93);
@@ -5853,6 +6054,28 @@ function warnIfInvalidElement(Component, element) {
5853
6054
  }
5854
6055
  }
5855
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
+
5856
6079
  function shouldConstruct(Component) {
5857
6080
  return Component.prototype && Component.prototype.isReactComponent;
5858
6081
  }
@@ -5912,6 +6135,7 @@ var ReactCompositeComponentMixin = {
5912
6135
  this._nativeContainerInfo = null;
5913
6136
 
5914
6137
  // See ReactUpdateQueue
6138
+ this._updateBatchNumber = null;
5915
6139
  this._pendingElement = null;
5916
6140
  this._pendingStateQueue = null;
5917
6141
  this._pendingReplaceState = false;
@@ -6020,7 +6244,11 @@ var ReactCompositeComponentMixin = {
6020
6244
  }
6021
6245
 
6022
6246
  if (inst.componentDidMount) {
6023
- 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
+ }
6024
6252
  }
6025
6253
 
6026
6254
  return markup;
@@ -6041,11 +6269,35 @@ var ReactCompositeComponentMixin = {
6041
6269
 
6042
6270
  _constructComponentWithoutOwner: function (publicProps, publicContext) {
6043
6271
  var Component = this._currentElement.type;
6272
+ var instanceOrElement;
6044
6273
  if (shouldConstruct(Component)) {
6045
- 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
+ }
6046
6285
  } else {
6047
- 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
+ }
6048
6299
  }
6300
+ return instanceOrElement;
6049
6301
  },
6050
6302
 
6051
6303
  performInitialMountWithErrorHandling: function (renderedElement, nativeParent, nativeContainerInfo, transaction, context) {
@@ -6075,7 +6327,17 @@ var ReactCompositeComponentMixin = {
6075
6327
  performInitialMount: function (renderedElement, nativeParent, nativeContainerInfo, transaction, context) {
6076
6328
  var inst = this._instance;
6077
6329
  if (inst.componentWillMount) {
6330
+ if ("development" !== 'production') {
6331
+ if (this._debugID !== 0) {
6332
+ ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'componentWillMount');
6333
+ }
6334
+ }
6078
6335
  inst.componentWillMount();
6336
+ if ("development" !== 'production') {
6337
+ if (this._debugID !== 0) {
6338
+ ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'componentWillMount');
6339
+ }
6340
+ }
6079
6341
  // When mounting, calls to `setState` by `componentWillMount` will set
6080
6342
  // `this._pendingStateQueue` without triggering a re-render.
6081
6343
  if (this._pendingStateQueue) {
@@ -6093,6 +6355,12 @@ var ReactCompositeComponentMixin = {
6093
6355
 
6094
6356
  var markup = ReactReconciler.mountComponent(this._renderedComponent, transaction, nativeParent, nativeContainerInfo, this._processChildContext(context));
6095
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
+
6096
6364
  return markup;
6097
6365
  },
6098
6366
 
@@ -6114,12 +6382,22 @@ var ReactCompositeComponentMixin = {
6114
6382
 
6115
6383
  if (inst.componentWillUnmount && !inst._calledComponentWillUnmount) {
6116
6384
  inst._calledComponentWillUnmount = true;
6385
+ if ("development" !== 'production') {
6386
+ if (this._debugID !== 0) {
6387
+ ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'componentWillUnmount');
6388
+ }
6389
+ }
6117
6390
  if (safely) {
6118
6391
  var name = this.getName() + '.componentWillUnmount()';
6119
6392
  ReactErrorUtils.invokeGuardedCallback(name, inst.componentWillUnmount.bind(inst));
6120
6393
  } else {
6121
6394
  inst.componentWillUnmount();
6122
6395
  }
6396
+ if ("development" !== 'production') {
6397
+ if (this._debugID !== 0) {
6398
+ ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'componentWillUnmount');
6399
+ }
6400
+ }
6123
6401
  }
6124
6402
 
6125
6403
  if (this._renderedComponent) {
@@ -6302,10 +6580,10 @@ var ReactCompositeComponentMixin = {
6302
6580
  performUpdateIfNecessary: function (transaction) {
6303
6581
  if (this._pendingElement != null) {
6304
6582
  ReactReconciler.receiveComponent(this, this._pendingElement, transaction, this._context);
6305
- }
6306
-
6307
- if (this._pendingStateQueue !== null || this._pendingForceUpdate) {
6583
+ } else if (this._pendingStateQueue !== null || this._pendingForceUpdate) {
6308
6584
  this.updateComponent(transaction, this._currentElement, this._currentElement, this._context, this._context);
6585
+ } else {
6586
+ this._updateBatchNumber = null;
6309
6587
  }
6310
6588
  },
6311
6589
 
@@ -6352,17 +6630,41 @@ var ReactCompositeComponentMixin = {
6352
6630
  // _pendingStateQueue which will ensure that any state updates gets
6353
6631
  // immediately reconciled instead of waiting for the next batch.
6354
6632
  if (willReceive && inst.componentWillReceiveProps) {
6633
+ if ("development" !== 'production') {
6634
+ if (this._debugID !== 0) {
6635
+ ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'componentWillReceiveProps');
6636
+ }
6637
+ }
6355
6638
  inst.componentWillReceiveProps(nextProps, nextContext);
6639
+ if ("development" !== 'production') {
6640
+ if (this._debugID !== 0) {
6641
+ ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'componentWillReceiveProps');
6642
+ }
6643
+ }
6356
6644
  }
6357
6645
 
6358
6646
  var nextState = this._processPendingState(nextProps, nextContext);
6647
+ var shouldUpdate = true;
6359
6648
 
6360
- 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
+ }
6361
6662
 
6362
6663
  if ("development" !== 'production') {
6363
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;
6364
6665
  }
6365
6666
 
6667
+ this._updateBatchNumber = null;
6366
6668
  if (shouldUpdate) {
6367
6669
  this._pendingForceUpdate = false;
6368
6670
  // Will set `this.props`, `this.state` and `this.context`.
@@ -6428,7 +6730,17 @@ var ReactCompositeComponentMixin = {
6428
6730
  }
6429
6731
 
6430
6732
  if (inst.componentWillUpdate) {
6733
+ if ("development" !== 'production') {
6734
+ if (this._debugID !== 0) {
6735
+ ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'componentWillUpdate');
6736
+ }
6737
+ }
6431
6738
  inst.componentWillUpdate(nextProps, nextState, nextContext);
6739
+ if ("development" !== 'production') {
6740
+ if (this._debugID !== 0) {
6741
+ ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'componentWillUpdate');
6742
+ }
6743
+ }
6432
6744
  }
6433
6745
 
6434
6746
  this._currentElement = nextElement;
@@ -6440,7 +6752,11 @@ var ReactCompositeComponentMixin = {
6440
6752
  this._updateRenderedComponent(transaction, unmaskedContext);
6441
6753
 
6442
6754
  if (hasComponentDidUpdate) {
6443
- 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
+ }
6444
6760
  }
6445
6761
  },
6446
6762
 
@@ -6462,8 +6778,16 @@ var ReactCompositeComponentMixin = {
6462
6778
 
6463
6779
  this._renderedNodeType = ReactNodeTypes.getType(nextRenderedElement);
6464
6780
  this._renderedComponent = this._instantiateReactComponent(nextRenderedElement);
6781
+
6465
6782
  var nextMarkup = ReactReconciler.mountComponent(this._renderedComponent, transaction, this._nativeParent, this._nativeContainerInfo, this._processChildContext(context));
6466
- 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);
6467
6791
  }
6468
6792
  },
6469
6793
 
@@ -6472,8 +6796,8 @@ var ReactCompositeComponentMixin = {
6472
6796
  *
6473
6797
  * @protected
6474
6798
  */
6475
- _replaceNodeWithMarkup: function (oldNativeNode, nextMarkup) {
6476
- ReactComponentEnvironment.replaceNodeWithMarkup(oldNativeNode, nextMarkup);
6799
+ _replaceNodeWithMarkup: function (oldNativeNode, nextMarkup, prevInstance) {
6800
+ ReactComponentEnvironment.replaceNodeWithMarkup(oldNativeNode, nextMarkup, prevInstance);
6477
6801
  },
6478
6802
 
6479
6803
  /**
@@ -6481,7 +6805,19 @@ var ReactCompositeComponentMixin = {
6481
6805
  */
6482
6806
  _renderValidatedComponentWithoutOwnerOrContext: function () {
6483
6807
  var inst = this._instance;
6808
+
6809
+ if ("development" !== 'production') {
6810
+ if (this._debugID !== 0) {
6811
+ ReactInstrumentation.debugTool.onBeginLifeCycleTimer(this._debugID, 'render');
6812
+ }
6813
+ }
6484
6814
  var renderedComponent = inst.render();
6815
+ if ("development" !== 'production') {
6816
+ if (this._debugID !== 0) {
6817
+ ReactInstrumentation.debugTool.onEndLifeCycleTimer(this._debugID, 'render');
6818
+ }
6819
+ }
6820
+
6485
6821
  if ("development" !== 'production') {
6486
6822
  // We allow auto-mocks to proceed as if they're returning null.
6487
6823
  if (renderedComponent === undefined && inst.render._isMockFunction) {
@@ -6508,6 +6844,7 @@ var ReactCompositeComponentMixin = {
6508
6844
  !(
6509
6845
  // TODO: An `isValidNode` function would probably be more appropriate
6510
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
+
6511
6848
  return renderedComponent;
6512
6849
  },
6513
6850
 
@@ -6576,12 +6913,6 @@ var ReactCompositeComponentMixin = {
6576
6913
 
6577
6914
  };
6578
6915
 
6579
- ReactPerf.measureMethods(ReactCompositeComponentMixin, 'ReactCompositeComponent', {
6580
- mountComponent: 'mountComponent',
6581
- updateComponent: 'updateComponent',
6582
- _renderValidatedComponent: '_renderValidatedComponent'
6583
- });
6584
-
6585
6916
  var ReactCompositeComponent = {
6586
6917
 
6587
6918
  Mixin: ReactCompositeComponentMixin
@@ -6589,7 +6920,7 @@ var ReactCompositeComponent = {
6589
6920
  };
6590
6921
 
6591
6922
  module.exports = ReactCompositeComponent;
6592
- },{"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){
6593
6924
  /**
6594
6925
  * Copyright 2013-present, Facebook, Inc.
6595
6926
  * All rights reserved.
@@ -6621,7 +6952,7 @@ var ReactCurrentOwner = {
6621
6952
  };
6622
6953
 
6623
6954
  module.exports = ReactCurrentOwner;
6624
- },{}],40:[function(_dereq_,module,exports){
6955
+ },{}],41:[function(_dereq_,module,exports){
6625
6956
  /**
6626
6957
  * Copyright 2013-present, Facebook, Inc.
6627
6958
  * All rights reserved.
@@ -6637,10 +6968,9 @@ module.exports = ReactCurrentOwner;
6637
6968
 
6638
6969
  'use strict';
6639
6970
 
6640
- var ReactDOMComponentTree = _dereq_(44);
6641
- var ReactDefaultInjection = _dereq_(63);
6642
- var ReactMount = _dereq_(81);
6643
- var ReactPerf = _dereq_(88);
6971
+ var ReactDOMComponentTree = _dereq_(45);
6972
+ var ReactDefaultInjection = _dereq_(64);
6973
+ var ReactMount = _dereq_(80);
6644
6974
  var ReactReconciler = _dereq_(93);
6645
6975
  var ReactUpdates = _dereq_(104);
6646
6976
  var ReactVersion = _dereq_(105);
@@ -6652,11 +6982,9 @@ var warning = _dereq_(183);
6652
6982
 
6653
6983
  ReactDefaultInjection.inject();
6654
6984
 
6655
- var render = ReactPerf.measure('React', 'render', ReactMount.render);
6656
-
6657
6985
  var React = {
6658
6986
  findDOMNode: findDOMNode,
6659
- render: render,
6987
+ render: ReactMount.render,
6660
6988
  unmountComponentAtNode: ReactMount.unmountComponentAtNode,
6661
6989
  version: ReactVersion,
6662
6990
 
@@ -6726,7 +7054,7 @@ if ("development" !== 'production') {
6726
7054
  }
6727
7055
 
6728
7056
  module.exports = React;
6729
- },{"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){
6730
7058
  /**
6731
7059
  * Copyright 2013-present, Facebook, Inc.
6732
7060
  * All rights reserved.
@@ -6751,7 +7079,7 @@ var ReactDOMButton = {
6751
7079
  };
6752
7080
 
6753
7081
  module.exports = ReactDOMButton;
6754
- },{"14":14}],42:[function(_dereq_,module,exports){
7082
+ },{"14":14}],43:[function(_dereq_,module,exports){
6755
7083
  /**
6756
7084
  * Copyright 2013-present, Facebook, Inc.
6757
7085
  * All rights reserved.
@@ -6780,16 +7108,18 @@ var EventPluginHub = _dereq_(17);
6780
7108
  var EventPluginRegistry = _dereq_(18);
6781
7109
  var ReactBrowserEventEmitter = _dereq_(28);
6782
7110
  var ReactComponentBrowserEnvironment = _dereq_(35);
6783
- var ReactDOMButton = _dereq_(41);
6784
- var ReactDOMComponentFlags = _dereq_(43);
6785
- var ReactDOMComponentTree = _dereq_(44);
6786
- var ReactDOMInput = _dereq_(51);
6787
- var ReactDOMOption = _dereq_(53);
6788
- var ReactDOMSelect = _dereq_(54);
6789
- var ReactDOMTextarea = _dereq_(58);
6790
- var ReactMultiChild = _dereq_(82);
6791
- 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);
7120
+ var ReactServerRenderingTransaction = _dereq_(97);
6792
7121
 
7122
+ var emptyFunction = _dereq_(165);
6793
7123
  var escapeTextContentForBrowser = _dereq_(131);
6794
7124
  var invariant = _dereq_(173);
6795
7125
  var isEventSupported = _dereq_(145);
@@ -6908,6 +7238,9 @@ function assertValidProps(component, props) {
6908
7238
  }
6909
7239
 
6910
7240
  function enqueuePutListener(inst, registrationName, listener, transaction) {
7241
+ if (transaction instanceof ReactServerRenderingTransaction) {
7242
+ return;
7243
+ }
6911
7244
  if ("development" !== 'production') {
6912
7245
  // IE8 has no API for event capturing and the `onScroll` event doesn't
6913
7246
  // bubble.
@@ -6916,10 +7249,6 @@ function enqueuePutListener(inst, registrationName, listener, transaction) {
6916
7249
  var containerInfo = inst._nativeContainerInfo;
6917
7250
  var isDocumentFragment = containerInfo._node && containerInfo._node.nodeType === DOC_FRAGMENT_TYPE;
6918
7251
  var doc = isDocumentFragment ? containerInfo._node : containerInfo._ownerDocument;
6919
- if (!doc) {
6920
- // Server rendering.
6921
- return;
6922
- }
6923
7252
  listenTo(registrationName, doc);
6924
7253
  transaction.getReactMountReady().enqueue(putListener, {
6925
7254
  inst: inst,
@@ -6938,6 +7267,19 @@ function optionPostMount() {
6938
7267
  ReactDOMOption.postMountWrapper(inst);
6939
7268
  }
6940
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
+
6941
7283
  // There are so many media events, it makes sense to just
6942
7284
  // maintain a list rather than create a `trapBubbledEvent` for each
6943
7285
  var mediaEvents = {
@@ -7098,6 +7440,7 @@ function ReactDOMComponent(element) {
7098
7440
  this._flags = 0;
7099
7441
  if ("development" !== 'production') {
7100
7442
  this._ancestorInfo = null;
7443
+ this._contentDebugID = null;
7101
7444
  }
7102
7445
  }
7103
7446
 
@@ -7213,7 +7556,7 @@ ReactDOMComponent.Mixin = {
7213
7556
  div.innerHTML = '<' + type + '></' + type + '>';
7214
7557
  el = div.removeChild(div.firstChild);
7215
7558
  } else {
7216
- el = ownerDocument.createElement(this._currentElement.type);
7559
+ el = ownerDocument.createElement(this._currentElement.type, props.is || null);
7217
7560
  }
7218
7561
  } else {
7219
7562
  el = ownerDocument.createElementNS(namespaceURI, this._currentElement.type);
@@ -7343,6 +7686,9 @@ ReactDOMComponent.Mixin = {
7343
7686
  if (contentToUse != null) {
7344
7687
  // TODO: Validate that text is allowed as a child of this node
7345
7688
  ret = escapeTextContentForBrowser(contentToUse);
7689
+ if ("development" !== 'production') {
7690
+ setContentChildForInstrumentation.call(this, contentToUse);
7691
+ }
7346
7692
  } else if (childrenToUse != null) {
7347
7693
  var mountImages = this.mountChildren(childrenToUse, transaction, context);
7348
7694
  ret = mountImages.join('');
@@ -7377,6 +7723,9 @@ ReactDOMComponent.Mixin = {
7377
7723
  var childrenToUse = contentToUse != null ? null : props.children;
7378
7724
  if (contentToUse != null) {
7379
7725
  // TODO: Validate that text is allowed as a child of this node
7726
+ if ("development" !== 'production') {
7727
+ setContentChildForInstrumentation.call(this, contentToUse);
7728
+ }
7380
7729
  DOMLazyTree.queueText(lazyTree, contentToUse);
7381
7730
  } else if (childrenToUse != null) {
7382
7731
  var mountImages = this.mountChildren(childrenToUse, transaction, context);
@@ -7585,17 +7934,34 @@ ReactDOMComponent.Mixin = {
7585
7934
  this.updateChildren(null, transaction, context);
7586
7935
  } else if (lastHasContentOrHtml && !nextHasContentOrHtml) {
7587
7936
  this.updateTextContent('');
7937
+ if ("development" !== 'production') {
7938
+ ReactInstrumentation.debugTool.onSetChildren(this._debugID, []);
7939
+ }
7588
7940
  }
7589
7941
 
7590
7942
  if (nextContent != null) {
7591
7943
  if (lastContent !== nextContent) {
7592
7944
  this.updateTextContent('' + nextContent);
7945
+ if ("development" !== 'production') {
7946
+ this._contentDebugID = this._debugID + '#text';
7947
+ setContentChildForInstrumentation.call(this, nextContent);
7948
+ }
7593
7949
  }
7594
7950
  } else if (nextHtml != null) {
7595
7951
  if (lastHtml !== nextHtml) {
7596
7952
  this.updateMarkup('' + nextHtml);
7597
7953
  }
7954
+ if ("development" !== 'production') {
7955
+ ReactInstrumentation.debugTool.onSetChildren(this._debugID, []);
7956
+ }
7598
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
+
7599
7965
  this.updateChildren(nextChildren, transaction, context);
7600
7966
  }
7601
7967
  },
@@ -7645,6 +8011,13 @@ ReactDOMComponent.Mixin = {
7645
8011
  this._rootNodeID = null;
7646
8012
  this._domID = null;
7647
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
+ }
7648
8021
  },
7649
8022
 
7650
8023
  getPublicInstance: function () {
@@ -7653,15 +8026,10 @@ ReactDOMComponent.Mixin = {
7653
8026
 
7654
8027
  };
7655
8028
 
7656
- ReactPerf.measureMethods(ReactDOMComponent.Mixin, 'ReactDOMComponent', {
7657
- mountComponent: 'mountComponent',
7658
- receiveComponent: 'receiveComponent'
7659
- });
7660
-
7661
8029
  _assign(ReactDOMComponent.prototype, ReactDOMComponent.Mixin, ReactMultiChild.Mixin);
7662
8030
 
7663
8031
  module.exports = ReactDOMComponent;
7664
- },{"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}],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){
7665
8033
  /**
7666
8034
  * Copyright 2015-present, Facebook, Inc.
7667
8035
  * All rights reserved.
@@ -7680,7 +8048,7 @@ var ReactDOMComponentFlags = {
7680
8048
  };
7681
8049
 
7682
8050
  module.exports = ReactDOMComponentFlags;
7683
- },{}],44:[function(_dereq_,module,exports){
8051
+ },{}],45:[function(_dereq_,module,exports){
7684
8052
  /**
7685
8053
  * Copyright 2013-present, Facebook, Inc.
7686
8054
  * All rights reserved.
@@ -7695,7 +8063,7 @@ module.exports = ReactDOMComponentFlags;
7695
8063
  'use strict';
7696
8064
 
7697
8065
  var DOMProperty = _dereq_(10);
7698
- var ReactDOMComponentFlags = _dereq_(43);
8066
+ var ReactDOMComponentFlags = _dereq_(44);
7699
8067
 
7700
8068
  var invariant = _dereq_(173);
7701
8069
 
@@ -7867,7 +8235,7 @@ var ReactDOMComponentTree = {
7867
8235
  };
7868
8236
 
7869
8237
  module.exports = ReactDOMComponentTree;
7870
- },{"10":10,"173":173,"43":43}],45:[function(_dereq_,module,exports){
8238
+ },{"10":10,"173":173,"44":44}],46:[function(_dereq_,module,exports){
7871
8239
  /**
7872
8240
  * Copyright 2013-present, Facebook, Inc.
7873
8241
  * All rights reserved.
@@ -7901,7 +8269,7 @@ function ReactDOMContainerInfo(topLevelWrapper, node) {
7901
8269
  }
7902
8270
 
7903
8271
  module.exports = ReactDOMContainerInfo;
7904
- },{"156":156}],46:[function(_dereq_,module,exports){
8272
+ },{"156":156}],47:[function(_dereq_,module,exports){
7905
8273
  /**
7906
8274
  * Copyright 2013-present, Facebook, Inc.
7907
8275
  * All rights reserved.
@@ -7915,7 +8283,7 @@ module.exports = ReactDOMContainerInfo;
7915
8283
 
7916
8284
  'use strict';
7917
8285
 
7918
- var ReactDOMUnknownPropertyDevtool = _dereq_(60);
8286
+ var ReactDOMUnknownPropertyDevtool = _dereq_(61);
7919
8287
 
7920
8288
  var warning = _dereq_(183);
7921
8289
 
@@ -7963,7 +8331,7 @@ var ReactDOMDebugTool = {
7963
8331
  ReactDOMDebugTool.addDevtool(ReactDOMUnknownPropertyDevtool);
7964
8332
 
7965
8333
  module.exports = ReactDOMDebugTool;
7966
- },{"183":183,"60":60}],47:[function(_dereq_,module,exports){
8334
+ },{"183":183,"61":61}],48:[function(_dereq_,module,exports){
7967
8335
  /**
7968
8336
  * Copyright 2014-present, Facebook, Inc.
7969
8337
  * All rights reserved.
@@ -7980,7 +8348,7 @@ module.exports = ReactDOMDebugTool;
7980
8348
  var _assign = _dereq_(184);
7981
8349
 
7982
8350
  var DOMLazyTree = _dereq_(8);
7983
- var ReactDOMComponentTree = _dereq_(44);
8351
+ var ReactDOMComponentTree = _dereq_(45);
7984
8352
 
7985
8353
  var ReactDOMEmptyComponent = function (instantiate) {
7986
8354
  // ReactCompositeComponent uses this:
@@ -8024,7 +8392,7 @@ _assign(ReactDOMEmptyComponent.prototype, {
8024
8392
  });
8025
8393
 
8026
8394
  module.exports = ReactDOMEmptyComponent;
8027
- },{"184":184,"44":44,"8":8}],48:[function(_dereq_,module,exports){
8395
+ },{"184":184,"45":45,"8":8}],49:[function(_dereq_,module,exports){
8028
8396
  /**
8029
8397
  * Copyright 2013-present, Facebook, Inc.
8030
8398
  * All rights reserved.
@@ -8038,8 +8406,8 @@ module.exports = ReactDOMEmptyComponent;
8038
8406
 
8039
8407
  'use strict';
8040
8408
 
8041
- var ReactElement = _dereq_(66);
8042
- var ReactElementValidator = _dereq_(67);
8409
+ var ReactElement = _dereq_(65);
8410
+ var ReactElementValidator = _dereq_(66);
8043
8411
 
8044
8412
  var mapObject = _dereq_(178);
8045
8413
 
@@ -8201,7 +8569,7 @@ var ReactDOMFactories = mapObject({
8201
8569
  }, createDOMFactory);
8202
8570
 
8203
8571
  module.exports = ReactDOMFactories;
8204
- },{"178":178,"66":66,"67":67}],49:[function(_dereq_,module,exports){
8572
+ },{"178":178,"65":65,"66":66}],50:[function(_dereq_,module,exports){
8205
8573
  /**
8206
8574
  * Copyright 2013-present, Facebook, Inc.
8207
8575
  * All rights reserved.
@@ -8220,7 +8588,7 @@ var ReactDOMFeatureFlags = {
8220
8588
  };
8221
8589
 
8222
8590
  module.exports = ReactDOMFeatureFlags;
8223
- },{}],50:[function(_dereq_,module,exports){
8591
+ },{}],51:[function(_dereq_,module,exports){
8224
8592
  /**
8225
8593
  * Copyright 2013-present, Facebook, Inc.
8226
8594
  * All rights reserved.
@@ -8235,8 +8603,7 @@ module.exports = ReactDOMFeatureFlags;
8235
8603
  'use strict';
8236
8604
 
8237
8605
  var DOMChildrenOperations = _dereq_(7);
8238
- var ReactDOMComponentTree = _dereq_(44);
8239
- var ReactPerf = _dereq_(88);
8606
+ var ReactDOMComponentTree = _dereq_(45);
8240
8607
 
8241
8608
  /**
8242
8609
  * Operations used to process updates to DOM nodes.
@@ -8255,12 +8622,8 @@ var ReactDOMIDOperations = {
8255
8622
  }
8256
8623
  };
8257
8624
 
8258
- ReactPerf.measureMethods(ReactDOMIDOperations, 'ReactDOMIDOperations', {
8259
- dangerouslyProcessChildrenUpdates: 'dangerouslyProcessChildrenUpdates'
8260
- });
8261
-
8262
8625
  module.exports = ReactDOMIDOperations;
8263
- },{"44":44,"7":7,"88":88}],51:[function(_dereq_,module,exports){
8626
+ },{"45":45,"7":7}],52:[function(_dereq_,module,exports){
8264
8627
  /**
8265
8628
  * Copyright 2013-present, Facebook, Inc.
8266
8629
  * All rights reserved.
@@ -8279,7 +8642,7 @@ var _assign = _dereq_(184);
8279
8642
  var DisabledInputUtils = _dereq_(14);
8280
8643
  var DOMPropertyOperations = _dereq_(11);
8281
8644
  var LinkedValueUtils = _dereq_(25);
8282
- var ReactDOMComponentTree = _dereq_(44);
8645
+ var ReactDOMComponentTree = _dereq_(45);
8283
8646
  var ReactUpdates = _dereq_(104);
8284
8647
 
8285
8648
  var invariant = _dereq_(173);
@@ -8348,6 +8711,8 @@ var ReactDOMInput = {
8348
8711
  if ("development" !== 'production') {
8349
8712
  LinkedValueUtils.checkPropTypes('input', props, inst._currentElement._owner);
8350
8713
 
8714
+ var owner = inst._currentElement._owner;
8715
+
8351
8716
  if (props.valueLink !== undefined && !didWarnValueLink) {
8352
8717
  "development" !== 'production' ? warning(false, '`valueLink` prop on `input` is deprecated; set `value` and `onChange` instead.') : void 0;
8353
8718
  didWarnValueLink = true;
@@ -8357,11 +8722,11 @@ var ReactDOMInput = {
8357
8722
  didWarnCheckedLink = true;
8358
8723
  }
8359
8724
  if (props.checked !== undefined && props.defaultChecked !== undefined && !didWarnCheckedDefaultChecked) {
8360
- "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;
8361
8726
  didWarnCheckedDefaultChecked = true;
8362
8727
  }
8363
8728
  if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {
8364
- "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;
8365
8730
  didWarnValueDefaultValue = true;
8366
8731
  }
8367
8732
  warnIfValueIsNull(props);
@@ -8392,7 +8757,7 @@ var ReactDOMInput = {
8392
8757
  var owner = inst._currentElement._owner;
8393
8758
 
8394
8759
  if ((initialValue || !inst._wrapperState.controlled) && controlled && !didWarnUncontrolledToControlled) {
8395
- "development" !== 'production' ? warning(false, '%s is changing a uncontrolled input of type %s to be controlled. ' + 'Input elements should not switch from uncontrolled to controlled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', owner && owner.getName() || 'A component', props.type) : void 0;
8760
+ "development" !== 'production' ? warning(false, '%s is changing an uncontrolled input of type %s to be controlled. ' + 'Input elements should not switch from uncontrolled to controlled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', owner && owner.getName() || 'A component', props.type) : void 0;
8396
8761
  didWarnUncontrolledToControlled = true;
8397
8762
  }
8398
8763
  if (inst._wrapperState.controlled && (defaultValue || !controlled) && !didWarnControlledToUncontrolled) {
@@ -8465,7 +8830,7 @@ function _handleChange(event) {
8465
8830
  }
8466
8831
 
8467
8832
  module.exports = ReactDOMInput;
8468
- },{"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){
8469
8834
  /**
8470
8835
  * Copyright 2013-present, Facebook, Inc.
8471
8836
  * All rights reserved.
@@ -8479,10 +8844,10 @@ module.exports = ReactDOMInput;
8479
8844
 
8480
8845
  'use strict';
8481
8846
 
8482
- var ReactDOMDebugTool = _dereq_(46);
8847
+ var ReactDOMDebugTool = _dereq_(47);
8483
8848
 
8484
8849
  module.exports = { debugTool: ReactDOMDebugTool };
8485
- },{"46":46}],53:[function(_dereq_,module,exports){
8850
+ },{"47":47}],54:[function(_dereq_,module,exports){
8486
8851
  /**
8487
8852
  * Copyright 2013-present, Facebook, Inc.
8488
8853
  * All rights reserved.
@@ -8499,8 +8864,8 @@ module.exports = { debugTool: ReactDOMDebugTool };
8499
8864
  var _assign = _dereq_(184);
8500
8865
 
8501
8866
  var ReactChildren = _dereq_(32);
8502
- var ReactDOMComponentTree = _dereq_(44);
8503
- var ReactDOMSelect = _dereq_(54);
8867
+ var ReactDOMComponentTree = _dereq_(45);
8868
+ var ReactDOMSelect = _dereq_(55);
8504
8869
 
8505
8870
  var warning = _dereq_(183);
8506
8871
 
@@ -8592,7 +8957,7 @@ var ReactDOMOption = {
8592
8957
  };
8593
8958
 
8594
8959
  module.exports = ReactDOMOption;
8595
- },{"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){
8596
8961
  /**
8597
8962
  * Copyright 2013-present, Facebook, Inc.
8598
8963
  * All rights reserved.
@@ -8610,7 +8975,7 @@ var _assign = _dereq_(184);
8610
8975
 
8611
8976
  var DisabledInputUtils = _dereq_(14);
8612
8977
  var LinkedValueUtils = _dereq_(25);
8613
- var ReactDOMComponentTree = _dereq_(44);
8978
+ var ReactDOMComponentTree = _dereq_(45);
8614
8979
  var ReactUpdates = _dereq_(104);
8615
8980
 
8616
8981
  var warning = _dereq_(183);
@@ -8806,7 +9171,7 @@ function _handleChange(event) {
8806
9171
  }
8807
9172
 
8808
9173
  module.exports = ReactDOMSelect;
8809
- },{"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){
8810
9175
  /**
8811
9176
  * Copyright 2013-present, Facebook, Inc.
8812
9177
  * All rights reserved.
@@ -9019,7 +9384,7 @@ var ReactDOMSelection = {
9019
9384
  };
9020
9385
 
9021
9386
  module.exports = ReactDOMSelection;
9022
- },{"141":141,"142":142,"159":159}],56:[function(_dereq_,module,exports){
9387
+ },{"141":141,"142":142,"159":159}],57:[function(_dereq_,module,exports){
9023
9388
  /**
9024
9389
  * Copyright 2013-present, Facebook, Inc.
9025
9390
  * All rights reserved.
@@ -9033,7 +9398,7 @@ module.exports = ReactDOMSelection;
9033
9398
 
9034
9399
  'use strict';
9035
9400
 
9036
- var ReactDefaultInjection = _dereq_(63);
9401
+ var ReactDefaultInjection = _dereq_(64);
9037
9402
  var ReactServerRendering = _dereq_(96);
9038
9403
  var ReactVersion = _dereq_(105);
9039
9404
 
@@ -9046,7 +9411,7 @@ var ReactDOMServer = {
9046
9411
  };
9047
9412
 
9048
9413
  module.exports = ReactDOMServer;
9049
- },{"105":105,"63":63,"96":96}],57:[function(_dereq_,module,exports){
9414
+ },{"105":105,"64":64,"96":96}],58:[function(_dereq_,module,exports){
9050
9415
  /**
9051
9416
  * Copyright 2013-present, Facebook, Inc.
9052
9417
  * All rights reserved.
@@ -9064,8 +9429,8 @@ var _assign = _dereq_(184);
9064
9429
 
9065
9430
  var DOMChildrenOperations = _dereq_(7);
9066
9431
  var DOMLazyTree = _dereq_(8);
9067
- var ReactDOMComponentTree = _dereq_(44);
9068
- var ReactPerf = _dereq_(88);
9432
+ var ReactDOMComponentTree = _dereq_(45);
9433
+ var ReactInstrumentation = _dereq_(76);
9069
9434
 
9070
9435
  var escapeTextContentForBrowser = _dereq_(131);
9071
9436
  var invariant = _dereq_(173);
@@ -9113,6 +9478,8 @@ _assign(ReactDOMTextComponent.prototype, {
9113
9478
  */
9114
9479
  mountComponent: function (transaction, nativeParent, nativeContainerInfo, context) {
9115
9480
  if ("development" !== 'production') {
9481
+ ReactInstrumentation.debugTool.onSetText(this._debugID, this._stringText);
9482
+
9116
9483
  var parentInfo;
9117
9484
  if (nativeParent != null) {
9118
9485
  parentInfo = nativeParent._ancestorInfo;
@@ -9176,6 +9543,10 @@ _assign(ReactDOMTextComponent.prototype, {
9176
9543
  this._stringText = nextStringText;
9177
9544
  var commentNodes = this.getNativeNode();
9178
9545
  DOMChildrenOperations.replaceDelimitedText(commentNodes[0], commentNodes[1], nextStringText);
9546
+
9547
+ if ("development" !== 'production') {
9548
+ ReactInstrumentation.debugTool.onSetText(this._debugID, nextStringText);
9549
+ }
9179
9550
  }
9180
9551
  }
9181
9552
  },
@@ -9210,13 +9581,8 @@ _assign(ReactDOMTextComponent.prototype, {
9210
9581
 
9211
9582
  });
9212
9583
 
9213
- ReactPerf.measureMethods(ReactDOMTextComponent.prototype, 'ReactDOMTextComponent', {
9214
- mountComponent: 'mountComponent',
9215
- receiveComponent: 'receiveComponent'
9216
- });
9217
-
9218
9584
  module.exports = ReactDOMTextComponent;
9219
- },{"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){
9220
9586
  /**
9221
9587
  * Copyright 2013-present, Facebook, Inc.
9222
9588
  * All rights reserved.
@@ -9235,7 +9601,7 @@ var _assign = _dereq_(184);
9235
9601
  var DisabledInputUtils = _dereq_(14);
9236
9602
  var DOMPropertyOperations = _dereq_(11);
9237
9603
  var LinkedValueUtils = _dereq_(25);
9238
- var ReactDOMComponentTree = _dereq_(44);
9604
+ var ReactDOMComponentTree = _dereq_(45);
9239
9605
  var ReactUpdates = _dereq_(104);
9240
9606
 
9241
9607
  var invariant = _dereq_(173);
@@ -9359,7 +9725,7 @@ function _handleChange(event) {
9359
9725
  }
9360
9726
 
9361
9727
  module.exports = ReactDOMTextarea;
9362
- },{"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){
9363
9729
  /**
9364
9730
  * Copyright 2015-present, Facebook, Inc.
9365
9731
  * All rights reserved.
@@ -9494,7 +9860,7 @@ module.exports = {
9494
9860
  traverseTwoPhase: traverseTwoPhase,
9495
9861
  traverseEnterLeave: traverseEnterLeave
9496
9862
  };
9497
- },{"173":173}],60:[function(_dereq_,module,exports){
9863
+ },{"173":173}],61:[function(_dereq_,module,exports){
9498
9864
  /**
9499
9865
  * Copyright 2013-present, Facebook, Inc.
9500
9866
  * All rights reserved.
@@ -9559,7 +9925,7 @@ var ReactDOMUnknownPropertyDevtool = {
9559
9925
  };
9560
9926
 
9561
9927
  module.exports = ReactDOMUnknownPropertyDevtool;
9562
- },{"10":10,"18":18,"183":183}],61:[function(_dereq_,module,exports){
9928
+ },{"10":10,"18":18,"183":183}],62:[function(_dereq_,module,exports){
9563
9929
  /**
9564
9930
  * Copyright 2016-present, Facebook, Inc.
9565
9931
  * All rights reserved.
@@ -9573,7 +9939,9 @@ module.exports = ReactDOMUnknownPropertyDevtool;
9573
9939
 
9574
9940
  'use strict';
9575
9941
 
9576
- var ReactInvalidSetStateWarningDevTool = _dereq_(78);
9942
+ var ExecutionEnvironment = _dereq_(159);
9943
+
9944
+ var performanceNow = _dereq_(181);
9577
9945
  var warning = _dereq_(183);
9578
9946
 
9579
9947
  var eventHandlers = [];
@@ -9594,6 +9962,57 @@ function emitEvent(handlerFunctionName, arg1, arg2, arg3, arg4, arg5) {
9594
9962
  }
9595
9963
  }
9596
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
+
9597
10016
  var ReactDebugTool = {
9598
10017
  addDevtool: function (devtool) {
9599
10018
  eventHandlers.push(devtool);
@@ -9606,33 +10025,132 @@ var ReactDebugTool = {
9606
10025
  }
9607
10026
  }
9608
10027
  },
9609
- onBeginProcessingChildContext: function () {
9610
- emitEvent('onBeginProcessingChildContext');
10028
+ beginProfiling: function () {
10029
+ if ("development" !== 'production') {
10030
+ if (isProfiling) {
10031
+ return;
10032
+ }
10033
+
10034
+ isProfiling = true;
10035
+ flushHistory.length = 0;
10036
+ resetMeasurements();
10037
+ }
10038
+ },
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');
9611
10103
  },
9612
10104
  onEndProcessingChildContext: function () {
9613
10105
  emitEvent('onEndProcessingChildContext');
9614
10106
  },
10107
+ onNativeOperation: function (debugID, type, payload) {
10108
+ emitEvent('onNativeOperation', debugID, type, payload);
10109
+ },
9615
10110
  onSetState: function () {
9616
10111
  emitEvent('onSetState');
9617
10112
  },
9618
- onMountRootComponent: function (internalInstance) {
9619
- emitEvent('onMountRootComponent', internalInstance);
10113
+ onSetDisplayName: function (debugID, displayName) {
10114
+ emitEvent('onSetDisplayName', debugID, displayName);
10115
+ },
10116
+ onSetChildren: function (debugID, childDebugIDs) {
10117
+ emitEvent('onSetChildren', debugID, childDebugIDs);
10118
+ },
10119
+ onSetOwner: function (debugID, ownerDebugID) {
10120
+ emitEvent('onSetOwner', debugID, ownerDebugID);
10121
+ },
10122
+ onSetText: function (debugID, text) {
10123
+ emitEvent('onSetText', debugID, text);
10124
+ },
10125
+ onMountRootComponent: function (debugID) {
10126
+ emitEvent('onMountRootComponent', debugID);
9620
10127
  },
9621
- onMountComponent: function (internalInstance) {
9622
- emitEvent('onMountComponent', internalInstance);
10128
+ onMountComponent: function (debugID) {
10129
+ emitEvent('onMountComponent', debugID);
9623
10130
  },
9624
- onUpdateComponent: function (internalInstance) {
9625
- emitEvent('onUpdateComponent', internalInstance);
10131
+ onUpdateComponent: function (debugID) {
10132
+ emitEvent('onUpdateComponent', debugID);
9626
10133
  },
9627
- onUnmountComponent: function (internalInstance) {
9628
- emitEvent('onUnmountComponent', internalInstance);
10134
+ onUnmountComponent: function (debugID) {
10135
+ emitEvent('onUnmountComponent', debugID);
9629
10136
  }
9630
10137
  };
9631
10138
 
9632
- 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
+ }
9633
10151
 
9634
10152
  module.exports = ReactDebugTool;
9635
- },{"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){
9636
10154
  /**
9637
10155
  * Copyright 2013-present, Facebook, Inc.
9638
10156
  * All rights reserved.
@@ -9701,7 +10219,7 @@ var ReactDefaultBatchingStrategy = {
9701
10219
  };
9702
10220
 
9703
10221
  module.exports = ReactDefaultBatchingStrategy;
9704
- },{"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){
9705
10223
  /**
9706
10224
  * Copyright 2013-present, Facebook, Inc.
9707
10225
  * All rights reserved.
@@ -9719,17 +10237,16 @@ var BeforeInputEventPlugin = _dereq_(2);
9719
10237
  var ChangeEventPlugin = _dereq_(6);
9720
10238
  var DefaultEventPluginOrder = _dereq_(13);
9721
10239
  var EnterLeaveEventPlugin = _dereq_(15);
9722
- var ExecutionEnvironment = _dereq_(159);
9723
10240
  var HTMLDOMPropertyConfig = _dereq_(22);
9724
10241
  var ReactComponentBrowserEnvironment = _dereq_(35);
9725
- var ReactDOMComponent = _dereq_(42);
9726
- var ReactDOMComponentTree = _dereq_(44);
9727
- var ReactDOMEmptyComponent = _dereq_(47);
9728
- var ReactDOMTreeTraversal = _dereq_(59);
9729
- var ReactDOMTextComponent = _dereq_(57);
9730
- var ReactDefaultBatchingStrategy = _dereq_(62);
9731
- var ReactEventListener = _dereq_(71);
9732
- 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);
9733
10250
  var ReactReconcileTransaction = _dereq_(92);
9734
10251
  var SVGDOMPropertyConfig = _dereq_(108);
9735
10252
  var SelectEventPlugin = _dereq_(109);
@@ -9782,548 +10299,12 @@ function inject() {
9782
10299
  ReactInjection.Updates.injectBatchingStrategy(ReactDefaultBatchingStrategy);
9783
10300
 
9784
10301
  ReactInjection.Component.injectEnvironment(ReactComponentBrowserEnvironment);
9785
-
9786
- if ("development" !== 'production') {
9787
- var url = ExecutionEnvironment.canUseDOM && window.location.href || '';
9788
- if (/[?&]react_perf\b/.test(url)) {
9789
- var ReactDefaultPerf = _dereq_(64);
9790
- ReactDefaultPerf.start();
9791
- }
9792
- }
9793
10302
  }
9794
10303
 
9795
10304
  module.exports = {
9796
10305
  inject: inject
9797
10306
  };
9798
- },{"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){
9799
- /**
9800
- * Copyright 2013-present, Facebook, Inc.
9801
- * All rights reserved.
9802
- *
9803
- * This source code is licensed under the BSD-style license found in the
9804
- * LICENSE file in the root directory of this source tree. An additional grant
9805
- * of patent rights can be found in the PATENTS file in the same directory.
9806
- *
9807
- * @providesModule ReactDefaultPerf
9808
- */
9809
-
9810
- 'use strict';
9811
-
9812
- var DOMProperty = _dereq_(10);
9813
- var ReactDOMComponentTree = _dereq_(44);
9814
- var ReactDefaultPerfAnalysis = _dereq_(65);
9815
- var ReactMount = _dereq_(81);
9816
- var ReactPerf = _dereq_(88);
9817
-
9818
- var performanceNow = _dereq_(181);
9819
- var warning = _dereq_(183);
9820
-
9821
- function roundFloat(val) {
9822
- return Math.floor(val * 100) / 100;
9823
- }
9824
-
9825
- function addValue(obj, key, val) {
9826
- obj[key] = (obj[key] || 0) + val;
9827
- }
9828
-
9829
- // Composite/text components don't have any built-in ID: we have to make our own
9830
- var compositeIDMap;
9831
- var compositeIDCounter = 17000;
9832
- function getIDOfComposite(inst) {
9833
- if (!compositeIDMap) {
9834
- compositeIDMap = new WeakMap();
9835
- }
9836
- if (compositeIDMap.has(inst)) {
9837
- return compositeIDMap.get(inst);
9838
- } else {
9839
- var id = compositeIDCounter++;
9840
- compositeIDMap.set(inst, id);
9841
- return id;
9842
- }
9843
- }
9844
-
9845
- function getID(inst) {
9846
- if (inst.hasOwnProperty('_rootNodeID')) {
9847
- return inst._rootNodeID;
9848
- } else {
9849
- return getIDOfComposite(inst);
9850
- }
9851
- }
9852
-
9853
- function stripComplexValues(key, value) {
9854
- if (typeof value !== 'object' || Array.isArray(value) || value == null) {
9855
- return value;
9856
- }
9857
- var prototype = Object.getPrototypeOf(value);
9858
- if (!prototype || prototype === Object.prototype) {
9859
- return value;
9860
- }
9861
- return '<not serializable>';
9862
- }
9863
-
9864
- // This implementation of ReactPerf is going away some time mid 15.x.
9865
- // While we plan to keep most of the API, the actual format of measurements
9866
- // will change dramatically. To signal this, we wrap them into an opaque-ish
9867
- // object to discourage reaching into it until the API stabilizes.
9868
- function wrapLegacyMeasurements(measurements) {
9869
- return { __unstable_this_format_will_change: measurements };
9870
- }
9871
- function unwrapLegacyMeasurements(measurements) {
9872
- return measurements && measurements.__unstable_this_format_will_change || measurements;
9873
- }
9874
-
9875
- var warnedAboutPrintDOM = false;
9876
- var warnedAboutGetMeasurementsSummaryMap = false;
9877
-
9878
- var ReactDefaultPerf = {
9879
- _allMeasurements: [], // last item in the list is the current one
9880
- _mountStack: [0],
9881
- _compositeStack: [],
9882
- _injected: false,
9883
-
9884
- start: function () {
9885
- if (!ReactDefaultPerf._injected) {
9886
- ReactPerf.injection.injectMeasure(ReactDefaultPerf.measure);
9887
- }
9888
-
9889
- ReactDefaultPerf._allMeasurements.length = 0;
9890
- ReactPerf.enableMeasure = true;
9891
- },
9892
-
9893
- stop: function () {
9894
- ReactPerf.enableMeasure = false;
9895
- },
9896
-
9897
- getLastMeasurements: function () {
9898
- return wrapLegacyMeasurements(ReactDefaultPerf._allMeasurements);
9899
- },
9900
-
9901
- printExclusive: function (measurements) {
9902
- measurements = unwrapLegacyMeasurements(measurements || ReactDefaultPerf._allMeasurements);
9903
- var summary = ReactDefaultPerfAnalysis.getExclusiveSummary(measurements);
9904
- console.table(summary.map(function (item) {
9905
- return {
9906
- 'Component class name': item.componentName,
9907
- 'Total inclusive time (ms)': roundFloat(item.inclusive),
9908
- 'Exclusive mount time (ms)': roundFloat(item.exclusive),
9909
- 'Exclusive render time (ms)': roundFloat(item.render),
9910
- 'Mount time per instance (ms)': roundFloat(item.exclusive / item.count),
9911
- 'Render time per instance (ms)': roundFloat(item.render / item.count),
9912
- 'Instances': item.count
9913
- };
9914
- }));
9915
- // TODO: ReactDefaultPerfAnalysis.getTotalTime() does not return the correct
9916
- // number.
9917
- },
9918
-
9919
- printInclusive: function (measurements) {
9920
- measurements = unwrapLegacyMeasurements(measurements || ReactDefaultPerf._allMeasurements);
9921
- var summary = ReactDefaultPerfAnalysis.getInclusiveSummary(measurements);
9922
- console.table(summary.map(function (item) {
9923
- return {
9924
- 'Owner > component': item.componentName,
9925
- 'Inclusive time (ms)': roundFloat(item.time),
9926
- 'Instances': item.count
9927
- };
9928
- }));
9929
- console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');
9930
- },
9931
-
9932
- getMeasurementsSummaryMap: function (measurements) {
9933
- "development" !== 'production' ? warning(warnedAboutGetMeasurementsSummaryMap, '`ReactPerf.getMeasurementsSummaryMap(...)` is deprecated. Use ' + '`ReactPerf.getWasted(...)` instead.') : void 0;
9934
- warnedAboutGetMeasurementsSummaryMap = true;
9935
- return ReactDefaultPerf.getWasted(measurements);
9936
- },
9937
-
9938
- getWasted: function (measurements) {
9939
- measurements = unwrapLegacyMeasurements(measurements);
9940
- var summary = ReactDefaultPerfAnalysis.getInclusiveSummary(measurements, true);
9941
- return summary.map(function (item) {
9942
- return {
9943
- 'Owner > component': item.componentName,
9944
- 'Wasted time (ms)': item.time,
9945
- 'Instances': item.count
9946
- };
9947
- });
9948
- },
9949
-
9950
- printWasted: function (measurements) {
9951
- measurements = unwrapLegacyMeasurements(measurements || ReactDefaultPerf._allMeasurements);
9952
- console.table(ReactDefaultPerf.getWasted(measurements));
9953
- console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');
9954
- },
9955
-
9956
- printDOM: function (measurements) {
9957
- "development" !== 'production' ? warning(warnedAboutPrintDOM, '`ReactPerf.printDOM(...)` is deprecated. Use ' + '`ReactPerf.printOperations(...)` instead.') : void 0;
9958
- warnedAboutPrintDOM = true;
9959
- return ReactDefaultPerf.printOperations(measurements);
9960
- },
9961
-
9962
- printOperations: function (measurements) {
9963
- measurements = unwrapLegacyMeasurements(measurements || ReactDefaultPerf._allMeasurements);
9964
- var summary = ReactDefaultPerfAnalysis.getDOMSummary(measurements);
9965
- console.table(summary.map(function (item) {
9966
- var result = {};
9967
- result[DOMProperty.ID_ATTRIBUTE_NAME] = item.id;
9968
- result.type = item.type;
9969
- result.args = JSON.stringify(item.args, stripComplexValues);
9970
- return result;
9971
- }));
9972
- console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');
9973
- },
9974
-
9975
- _recordWrite: function (id, fnName, totalTime, args) {
9976
- // TODO: totalTime isn't that useful since it doesn't count paints/reflows
9977
- var entry = ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1];
9978
- var writes = entry.writes;
9979
- writes[id] = writes[id] || [];
9980
- writes[id].push({
9981
- type: fnName,
9982
- time: totalTime,
9983
- args: args
9984
- });
9985
- },
9986
-
9987
- measure: function (moduleName, fnName, func) {
9988
- return function () {
9989
- for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
9990
- args[_key] = arguments[_key];
9991
- }
9992
-
9993
- var totalTime;
9994
- var rv;
9995
- var start;
9996
-
9997
- var entry = ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1];
9998
-
9999
- if (fnName === '_renderNewRootComponent' || fnName === 'flushBatchedUpdates') {
10000
- // A "measurement" is a set of metrics recorded for each flush. We want
10001
- // to group the metrics for a given flush together so we can look at the
10002
- // components that rendered and the DOM operations that actually
10003
- // happened to determine the amount of "wasted work" performed.
10004
- ReactDefaultPerf._allMeasurements.push(entry = {
10005
- exclusive: {},
10006
- inclusive: {},
10007
- render: {},
10008
- counts: {},
10009
- writes: {},
10010
- displayNames: {},
10011
- hierarchy: {},
10012
- totalTime: 0,
10013
- created: {}
10014
- });
10015
- start = performanceNow();
10016
- rv = func.apply(this, args);
10017
- entry.totalTime = performanceNow() - start;
10018
- return rv;
10019
- } else if (fnName === '_mountImageIntoNode' || moduleName === 'ReactDOMIDOperations' || moduleName === 'CSSPropertyOperations' || moduleName === 'DOMChildrenOperations' || moduleName === 'DOMPropertyOperations' || moduleName === 'ReactComponentBrowserEnvironment') {
10020
- start = performanceNow();
10021
- rv = func.apply(this, args);
10022
- totalTime = performanceNow() - start;
10023
-
10024
- if (fnName === '_mountImageIntoNode') {
10025
- ReactDefaultPerf._recordWrite('', fnName, totalTime, args[0]);
10026
- } else if (fnName === 'dangerouslyProcessChildrenUpdates') {
10027
- // special format
10028
- args[1].forEach(function (update) {
10029
- var writeArgs = {};
10030
- if (update.fromIndex !== null) {
10031
- writeArgs.fromIndex = update.fromIndex;
10032
- }
10033
- if (update.toIndex !== null) {
10034
- writeArgs.toIndex = update.toIndex;
10035
- }
10036
- if (update.content !== null) {
10037
- writeArgs.content = update.content;
10038
- }
10039
- ReactDefaultPerf._recordWrite(args[0]._rootNodeID, update.type, totalTime, writeArgs);
10040
- });
10041
- } else {
10042
- // basic format
10043
- var id = args[0];
10044
- if (moduleName === 'EventPluginHub') {
10045
- id = id._rootNodeID;
10046
- } else if (fnName === 'replaceNodeWithMarkup') {
10047
- // Old node is already unmounted; can't get its instance
10048
- id = ReactDOMComponentTree.getInstanceFromNode(args[1].node)._rootNodeID;
10049
- } else if (fnName === 'replaceDelimitedText') {
10050
- id = getID(ReactDOMComponentTree.getInstanceFromNode(args[0]));
10051
- } else if (typeof id === 'object') {
10052
- id = getID(ReactDOMComponentTree.getInstanceFromNode(args[0]));
10053
- }
10054
- ReactDefaultPerf._recordWrite(id, fnName, totalTime, Array.prototype.slice.call(args, 1));
10055
- }
10056
- return rv;
10057
- } else if (moduleName === 'ReactCompositeComponent' && (fnName === 'mountComponent' || fnName === 'updateComponent' || // TODO: receiveComponent()?
10058
- fnName === '_renderValidatedComponent')) {
10059
-
10060
- if (this._currentElement.type === ReactMount.TopLevelWrapper) {
10061
- return func.apply(this, args);
10062
- }
10063
-
10064
- var rootNodeID = getIDOfComposite(this);
10065
- var isRender = fnName === '_renderValidatedComponent';
10066
- var isMount = fnName === 'mountComponent';
10067
-
10068
- var mountStack = ReactDefaultPerf._mountStack;
10069
-
10070
- if (isRender) {
10071
- addValue(entry.counts, rootNodeID, 1);
10072
- } else if (isMount) {
10073
- entry.created[rootNodeID] = true;
10074
- mountStack.push(0);
10075
- }
10076
-
10077
- ReactDefaultPerf._compositeStack.push(rootNodeID);
10078
-
10079
- start = performanceNow();
10080
- rv = func.apply(this, args);
10081
- totalTime = performanceNow() - start;
10082
-
10083
- ReactDefaultPerf._compositeStack.pop();
10084
-
10085
- if (isRender) {
10086
- addValue(entry.render, rootNodeID, totalTime);
10087
- } else if (isMount) {
10088
- var subMountTime = mountStack.pop();
10089
- mountStack[mountStack.length - 1] += totalTime;
10090
- addValue(entry.exclusive, rootNodeID, totalTime - subMountTime);
10091
- addValue(entry.inclusive, rootNodeID, totalTime);
10092
- } else {
10093
- addValue(entry.inclusive, rootNodeID, totalTime);
10094
- }
10095
-
10096
- entry.displayNames[rootNodeID] = {
10097
- current: this.getName(),
10098
- owner: this._currentElement._owner ? this._currentElement._owner.getName() : '<root>'
10099
- };
10100
-
10101
- return rv;
10102
- } else if ((moduleName === 'ReactDOMComponent' || moduleName === 'ReactDOMTextComponent') && (fnName === 'mountComponent' || fnName === 'receiveComponent')) {
10103
-
10104
- rv = func.apply(this, args);
10105
- entry.hierarchy[getID(this)] = ReactDefaultPerf._compositeStack.slice();
10106
- return rv;
10107
- } else {
10108
- return func.apply(this, args);
10109
- }
10110
- };
10111
- }
10112
- };
10113
-
10114
- module.exports = ReactDefaultPerf;
10115
- },{"10":10,"181":181,"183":183,"44":44,"65":65,"81":81,"88":88}],65:[function(_dereq_,module,exports){
10116
- /**
10117
- * Copyright 2013-present, Facebook, Inc.
10118
- * All rights reserved.
10119
- *
10120
- * This source code is licensed under the BSD-style license found in the
10121
- * LICENSE file in the root directory of this source tree. An additional grant
10122
- * of patent rights can be found in the PATENTS file in the same directory.
10123
- *
10124
- * @providesModule ReactDefaultPerfAnalysis
10125
- */
10126
-
10127
- 'use strict';
10128
-
10129
- // Don't try to save users less than 1.2ms (a number I made up)
10130
-
10131
- var _assign = _dereq_(184);
10132
-
10133
- var DONT_CARE_THRESHOLD = 1.2;
10134
- var DOM_OPERATION_TYPES = {
10135
- '_mountImageIntoNode': 'set innerHTML',
10136
- INSERT_MARKUP: 'set innerHTML',
10137
- MOVE_EXISTING: 'move',
10138
- REMOVE_NODE: 'remove',
10139
- SET_MARKUP: 'set innerHTML',
10140
- TEXT_CONTENT: 'set textContent',
10141
- 'setValueForProperty': 'update attribute',
10142
- 'setValueForAttribute': 'update attribute',
10143
- 'deleteValueForProperty': 'remove attribute',
10144
- 'setValueForStyles': 'update styles',
10145
- 'replaceNodeWithMarkup': 'replace',
10146
- 'replaceDelimitedText': 'replace'
10147
- };
10148
-
10149
- function getTotalTime(measurements) {
10150
- // TODO: return number of DOM ops? could be misleading.
10151
- // TODO: measure dropped frames after reconcile?
10152
- // TODO: log total time of each reconcile and the top-level component
10153
- // class that triggered it.
10154
- var totalTime = 0;
10155
- for (var i = 0; i < measurements.length; i++) {
10156
- var measurement = measurements[i];
10157
- totalTime += measurement.totalTime;
10158
- }
10159
- return totalTime;
10160
- }
10161
-
10162
- function getDOMSummary(measurements) {
10163
- var items = [];
10164
- measurements.forEach(function (measurement) {
10165
- Object.keys(measurement.writes).forEach(function (id) {
10166
- measurement.writes[id].forEach(function (write) {
10167
- items.push({
10168
- id: id,
10169
- type: DOM_OPERATION_TYPES[write.type] || write.type,
10170
- args: write.args
10171
- });
10172
- });
10173
- });
10174
- });
10175
- return items;
10176
- }
10177
-
10178
- function getExclusiveSummary(measurements) {
10179
- var candidates = {};
10180
- var displayName;
10181
-
10182
- for (var i = 0; i < measurements.length; i++) {
10183
- var measurement = measurements[i];
10184
- var allIDs = _assign({}, measurement.exclusive, measurement.inclusive);
10185
-
10186
- for (var id in allIDs) {
10187
- displayName = measurement.displayNames[id].current;
10188
-
10189
- candidates[displayName] = candidates[displayName] || {
10190
- componentName: displayName,
10191
- inclusive: 0,
10192
- exclusive: 0,
10193
- render: 0,
10194
- count: 0
10195
- };
10196
- if (measurement.render[id]) {
10197
- candidates[displayName].render += measurement.render[id];
10198
- }
10199
- if (measurement.exclusive[id]) {
10200
- candidates[displayName].exclusive += measurement.exclusive[id];
10201
- }
10202
- if (measurement.inclusive[id]) {
10203
- candidates[displayName].inclusive += measurement.inclusive[id];
10204
- }
10205
- if (measurement.counts[id]) {
10206
- candidates[displayName].count += measurement.counts[id];
10207
- }
10208
- }
10209
- }
10210
-
10211
- // Now make a sorted array with the results.
10212
- var arr = [];
10213
- for (displayName in candidates) {
10214
- if (candidates[displayName].exclusive >= DONT_CARE_THRESHOLD) {
10215
- arr.push(candidates[displayName]);
10216
- }
10217
- }
10218
-
10219
- arr.sort(function (a, b) {
10220
- return b.exclusive - a.exclusive;
10221
- });
10222
-
10223
- return arr;
10224
- }
10225
-
10226
- function getInclusiveSummary(measurements, onlyClean) {
10227
- var candidates = {};
10228
- var inclusiveKey;
10229
-
10230
- for (var i = 0; i < measurements.length; i++) {
10231
- var measurement = measurements[i];
10232
- var allIDs = _assign({}, measurement.exclusive, measurement.inclusive);
10233
- var cleanComponents;
10234
-
10235
- if (onlyClean) {
10236
- cleanComponents = getUnchangedComponents(measurement);
10237
- }
10238
-
10239
- for (var id in allIDs) {
10240
- if (onlyClean && !cleanComponents[id]) {
10241
- continue;
10242
- }
10243
-
10244
- var displayName = measurement.displayNames[id];
10245
-
10246
- // Inclusive time is not useful for many components without knowing where
10247
- // they are instantiated. So we aggregate inclusive time with both the
10248
- // owner and current displayName as the key.
10249
- inclusiveKey = displayName.owner + ' > ' + displayName.current;
10250
-
10251
- candidates[inclusiveKey] = candidates[inclusiveKey] || {
10252
- componentName: inclusiveKey,
10253
- time: 0,
10254
- count: 0
10255
- };
10256
-
10257
- if (measurement.inclusive[id]) {
10258
- candidates[inclusiveKey].time += measurement.inclusive[id];
10259
- }
10260
- if (measurement.counts[id]) {
10261
- candidates[inclusiveKey].count += measurement.counts[id];
10262
- }
10263
- }
10264
- }
10265
-
10266
- // Now make a sorted array with the results.
10267
- var arr = [];
10268
- for (inclusiveKey in candidates) {
10269
- if (candidates[inclusiveKey].time >= DONT_CARE_THRESHOLD) {
10270
- arr.push(candidates[inclusiveKey]);
10271
- }
10272
- }
10273
-
10274
- arr.sort(function (a, b) {
10275
- return b.time - a.time;
10276
- });
10277
-
10278
- return arr;
10279
- }
10280
-
10281
- function getUnchangedComponents(measurement) {
10282
- // For a given reconcile, look at which components did not actually
10283
- // render anything to the DOM and return a mapping of their ID to
10284
- // the amount of time it took to render the entire subtree.
10285
- var cleanComponents = {};
10286
- var writes = measurement.writes;
10287
- var hierarchy = measurement.hierarchy;
10288
- var dirtyComposites = {};
10289
- Object.keys(writes).forEach(function (id) {
10290
- writes[id].forEach(function (write) {
10291
- // Root mounting (innerHTML set) is recorded with an ID of ''
10292
- if (id !== '' && hierarchy.hasOwnProperty(id)) {
10293
- hierarchy[id].forEach(function (c) {
10294
- return dirtyComposites[c] = true;
10295
- });
10296
- }
10297
- });
10298
- });
10299
- var allIDs = _assign({}, measurement.exclusive, measurement.inclusive);
10300
-
10301
- for (var id in allIDs) {
10302
- var isDirty = false;
10303
- // See if any of the DOM operations applied to this component's subtree.
10304
- if (dirtyComposites[id]) {
10305
- isDirty = true;
10306
- }
10307
- // check if component newly created
10308
- if (measurement.created[id]) {
10309
- isDirty = true;
10310
- }
10311
- if (!isDirty && measurement.counts[id] > 0) {
10312
- cleanComponents[id] = true;
10313
- }
10314
- }
10315
- return cleanComponents;
10316
- }
10317
-
10318
- var ReactDefaultPerfAnalysis = {
10319
- getExclusiveSummary: getExclusiveSummary,
10320
- getInclusiveSummary: getInclusiveSummary,
10321
- getDOMSummary: getDOMSummary,
10322
- getTotalTime: getTotalTime
10323
- };
10324
-
10325
- module.exports = ReactDefaultPerfAnalysis;
10326
- },{"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){
10327
10308
  /**
10328
10309
  * Copyright 2014-present, Facebook, Inc.
10329
10310
  * All rights reserved.
@@ -10339,7 +10320,7 @@ module.exports = ReactDefaultPerfAnalysis;
10339
10320
 
10340
10321
  var _assign = _dereq_(184);
10341
10322
 
10342
- var ReactCurrentOwner = _dereq_(39);
10323
+ var ReactCurrentOwner = _dereq_(40);
10343
10324
 
10344
10325
  var warning = _dereq_(183);
10345
10326
  var canDefineProperty = _dereq_(128);
@@ -10439,6 +10420,10 @@ var ReactElement = function (type, key, ref, self, source, owner, props) {
10439
10420
  return element;
10440
10421
  };
10441
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
+ */
10442
10427
  ReactElement.createElement = function (type, config, children) {
10443
10428
  var propName;
10444
10429
 
@@ -10452,6 +10437,11 @@ ReactElement.createElement = function (type, config, children) {
10452
10437
 
10453
10438
  if (config != null) {
10454
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;
10455
10445
  ref = !config.hasOwnProperty('ref') || Object.getOwnPropertyDescriptor(config, 'ref').get ? null : config.ref;
10456
10446
  key = !config.hasOwnProperty('key') || Object.getOwnPropertyDescriptor(config, 'key').get ? null : '' + config.key;
10457
10447
  } else {
@@ -10523,6 +10513,10 @@ ReactElement.createElement = function (type, config, children) {
10523
10513
  return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);
10524
10514
  };
10525
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
+ */
10526
10520
  ReactElement.createFactory = function (type) {
10527
10521
  var factory = ReactElement.createElement.bind(null, type);
10528
10522
  // Expose the type on the factory and the prototype so that it can be
@@ -10540,6 +10534,10 @@ ReactElement.cloneAndReplaceKey = function (oldElement, newKey) {
10540
10534
  return newElement;
10541
10535
  };
10542
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
+ */
10543
10541
  ReactElement.cloneElement = function (element, config, children) {
10544
10542
  var propName;
10545
10543
 
@@ -10560,6 +10558,13 @@ ReactElement.cloneElement = function (element, config, children) {
10560
10558
  var owner = element._owner;
10561
10559
 
10562
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
+ }
10563
10568
  if (config.ref !== undefined) {
10564
10569
  // Silently steal the ref from the parent.
10565
10570
  ref = config.ref;
@@ -10602,6 +10607,8 @@ ReactElement.cloneElement = function (element, config, children) {
10602
10607
  };
10603
10608
 
10604
10609
  /**
10610
+ * Verifies the object is a ReactElement.
10611
+ * See https://facebook.github.io/react/docs/top-level-api.html#react.isvalidelement
10605
10612
  * @param {?object} object
10606
10613
  * @return {boolean} True if `object` is a valid component.
10607
10614
  * @final
@@ -10611,7 +10618,7 @@ ReactElement.isValidElement = function (object) {
10611
10618
  };
10612
10619
 
10613
10620
  module.exports = ReactElement;
10614
- },{"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){
10615
10622
  /**
10616
10623
  * Copyright 2014-present, Facebook, Inc.
10617
10624
  * All rights reserved.
@@ -10632,10 +10639,10 @@ module.exports = ReactElement;
10632
10639
 
10633
10640
  'use strict';
10634
10641
 
10635
- var ReactElement = _dereq_(66);
10642
+ var ReactElement = _dereq_(65);
10636
10643
  var ReactPropTypeLocations = _dereq_(90);
10637
10644
  var ReactPropTypeLocationNames = _dereq_(89);
10638
- var ReactCurrentOwner = _dereq_(39);
10645
+ var ReactCurrentOwner = _dereq_(40);
10639
10646
 
10640
10647
  var canDefineProperty = _dereq_(128);
10641
10648
  var getIteratorFn = _dereq_(139);
@@ -10893,7 +10900,7 @@ var ReactElementValidator = {
10893
10900
  };
10894
10901
 
10895
10902
  module.exports = ReactElementValidator;
10896
- },{"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){
10897
10904
  /**
10898
10905
  * Copyright 2014-present, Facebook, Inc.
10899
10906
  * All rights reserved.
@@ -10924,7 +10931,7 @@ var ReactEmptyComponent = {
10924
10931
  ReactEmptyComponent.injection = ReactEmptyComponentInjection;
10925
10932
 
10926
10933
  module.exports = ReactEmptyComponent;
10927
- },{}],69:[function(_dereq_,module,exports){
10934
+ },{}],68:[function(_dereq_,module,exports){
10928
10935
  /**
10929
10936
  * Copyright 2013-present, Facebook, Inc.
10930
10937
  * All rights reserved.
@@ -10938,6 +10945,8 @@ module.exports = ReactEmptyComponent;
10938
10945
 
10939
10946
  'use strict';
10940
10947
 
10948
+ var SyntheticDragEvent = _dereq_(114);
10949
+
10941
10950
  var caughtError = null;
10942
10951
 
10943
10952
  /**
@@ -10982,26 +10991,74 @@ var ReactErrorUtils = {
10982
10991
  };
10983
10992
 
10984
10993
  if ("development" !== 'production') {
10985
- /**
10986
- * To help development we can get better devtools integration by simulating a
10987
- * real browser event.
10988
- */
10989
- if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') {
10990
- var fakeNode = document.createElement('react');
10991
- ReactErrorUtils.invokeGuardedCallback = function (name, func, a, b) {
10992
- var boundFunc = func.bind(null, a, b);
10993
- var evtType = 'react-' + name;
10994
- fakeNode.addEventListener(evtType, boundFunc, false);
10995
- var evt = document.createEvent('Event');
10996
- evt.initEvent(evtType, false, false);
10997
- fakeNode.dispatchEvent(evt);
10998
- 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;
10999
11031
  };
11000
- }
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
+ })();
11001
11058
  }
11002
11059
 
11003
11060
  module.exports = ReactErrorUtils;
11004
- },{}],70:[function(_dereq_,module,exports){
11061
+ },{"114":114}],69:[function(_dereq_,module,exports){
11005
11062
  /**
11006
11063
  * Copyright 2013-present, Facebook, Inc.
11007
11064
  * All rights reserved.
@@ -11035,7 +11092,7 @@ var ReactEventEmitterMixin = {
11035
11092
  };
11036
11093
 
11037
11094
  module.exports = ReactEventEmitterMixin;
11038
- },{"17":17}],71:[function(_dereq_,module,exports){
11095
+ },{"17":17}],70:[function(_dereq_,module,exports){
11039
11096
  /**
11040
11097
  * Copyright 2013-present, Facebook, Inc.
11041
11098
  * All rights reserved.
@@ -11054,7 +11111,7 @@ var _assign = _dereq_(184);
11054
11111
  var EventListener = _dereq_(158);
11055
11112
  var ExecutionEnvironment = _dereq_(159);
11056
11113
  var PooledClass = _dereq_(26);
11057
- var ReactDOMComponentTree = _dereq_(44);
11114
+ var ReactDOMComponentTree = _dereq_(45);
11058
11115
  var ReactUpdates = _dereq_(104);
11059
11116
 
11060
11117
  var getEventTarget = _dereq_(138);
@@ -11193,7 +11250,7 @@ var ReactEventListener = {
11193
11250
  };
11194
11251
 
11195
11252
  module.exports = ReactEventListener;
11196
- },{"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){
11197
11254
  /**
11198
11255
  * Copyright 2013-present, Facebook, Inc.
11199
11256
  * All rights reserved.
@@ -11215,7 +11272,7 @@ var ReactFeatureFlags = {
11215
11272
  };
11216
11273
 
11217
11274
  module.exports = ReactFeatureFlags;
11218
- },{}],73:[function(_dereq_,module,exports){
11275
+ },{}],72:[function(_dereq_,module,exports){
11219
11276
  /**
11220
11277
  * Copyright 2015-present, Facebook, Inc.
11221
11278
  * All rights reserved.
@@ -11230,7 +11287,7 @@ module.exports = ReactFeatureFlags;
11230
11287
  'use strict';
11231
11288
 
11232
11289
  var ReactChildren = _dereq_(32);
11233
- var ReactElement = _dereq_(66);
11290
+ var ReactElement = _dereq_(65);
11234
11291
 
11235
11292
  var emptyFunction = _dereq_(165);
11236
11293
  var invariant = _dereq_(173);
@@ -11249,8 +11306,11 @@ var numericPropertyRegex = /^\d+$/;
11249
11306
  var warnedAboutNumeric = false;
11250
11307
 
11251
11308
  var ReactFragment = {
11252
- // Wrap a keyed object in an opaque proxy that warns you if you access any
11253
- // 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
+ */
11254
11314
  create: function (object) {
11255
11315
  if (typeof object !== 'object' || !object || Array.isArray(object)) {
11256
11316
  "development" !== 'production' ? warning(false, 'React.addons.createFragment only accepts a single object. Got: %s', object) : void 0;
@@ -11280,7 +11340,7 @@ var ReactFragment = {
11280
11340
  };
11281
11341
 
11282
11342
  module.exports = ReactFragment;
11283
- },{"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){
11284
11344
  /**
11285
11345
  * Copyright 2013-present, Facebook, Inc.
11286
11346
  * All rights reserved.
@@ -11299,10 +11359,9 @@ var EventPluginHub = _dereq_(17);
11299
11359
  var EventPluginUtils = _dereq_(19);
11300
11360
  var ReactComponentEnvironment = _dereq_(36);
11301
11361
  var ReactClass = _dereq_(33);
11302
- var ReactEmptyComponent = _dereq_(68);
11362
+ var ReactEmptyComponent = _dereq_(67);
11303
11363
  var ReactBrowserEventEmitter = _dereq_(28);
11304
- var ReactNativeComponent = _dereq_(84);
11305
- var ReactPerf = _dereq_(88);
11364
+ var ReactNativeComponent = _dereq_(83);
11306
11365
  var ReactUpdates = _dereq_(104);
11307
11366
 
11308
11367
  var ReactInjection = {
@@ -11314,12 +11373,11 @@ var ReactInjection = {
11314
11373
  EventPluginUtils: EventPluginUtils.injection,
11315
11374
  EventEmitter: ReactBrowserEventEmitter.injection,
11316
11375
  NativeComponent: ReactNativeComponent.injection,
11317
- Perf: ReactPerf.injection,
11318
11376
  Updates: ReactUpdates.injection
11319
11377
  };
11320
11378
 
11321
11379
  module.exports = ReactInjection;
11322
- },{"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){
11323
11381
  /**
11324
11382
  * Copyright 2013-present, Facebook, Inc.
11325
11383
  * All rights reserved.
@@ -11333,7 +11391,7 @@ module.exports = ReactInjection;
11333
11391
 
11334
11392
  'use strict';
11335
11393
 
11336
- var ReactDOMSelection = _dereq_(55);
11394
+ var ReactDOMSelection = _dereq_(56);
11337
11395
 
11338
11396
  var containsNode = _dereq_(162);
11339
11397
  var focusNode = _dereq_(167);
@@ -11444,7 +11502,7 @@ var ReactInputSelection = {
11444
11502
  };
11445
11503
 
11446
11504
  module.exports = ReactInputSelection;
11447
- },{"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){
11448
11506
  /**
11449
11507
  * Copyright 2013-present, Facebook, Inc.
11450
11508
  * All rights reserved.
@@ -11493,7 +11551,7 @@ var ReactInstanceMap = {
11493
11551
  };
11494
11552
 
11495
11553
  module.exports = ReactInstanceMap;
11496
- },{}],77:[function(_dereq_,module,exports){
11554
+ },{}],76:[function(_dereq_,module,exports){
11497
11555
  /**
11498
11556
  * Copyright 2016-present, Facebook, Inc.
11499
11557
  * All rights reserved.
@@ -11507,10 +11565,10 @@ module.exports = ReactInstanceMap;
11507
11565
 
11508
11566
  'use strict';
11509
11567
 
11510
- var ReactDebugTool = _dereq_(61);
11568
+ var ReactDebugTool = _dereq_(62);
11511
11569
 
11512
11570
  module.exports = { debugTool: ReactDebugTool };
11513
- },{"61":61}],78:[function(_dereq_,module,exports){
11571
+ },{"62":62}],77:[function(_dereq_,module,exports){
11514
11572
  /**
11515
11573
  * Copyright 2016-present, Facebook, Inc.
11516
11574
  * All rights reserved.
@@ -11547,7 +11605,7 @@ var ReactInvalidSetStateWarningDevTool = {
11547
11605
  };
11548
11606
 
11549
11607
  module.exports = ReactInvalidSetStateWarningDevTool;
11550
- },{"183":183}],79:[function(_dereq_,module,exports){
11608
+ },{"183":183}],78:[function(_dereq_,module,exports){
11551
11609
  /**
11552
11610
  * Copyright 2013-present, Facebook, Inc.
11553
11611
  * All rights reserved.
@@ -11587,6 +11645,9 @@ module.exports = ReactInvalidSetStateWarningDevTool;
11587
11645
  var React = _dereq_(27);
11588
11646
 
11589
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
+ *
11590
11651
  * @param {*} value current value of the link
11591
11652
  * @param {function} requestChange callback to request a change
11592
11653
  */
@@ -11616,7 +11677,7 @@ ReactLink.PropTypes = {
11616
11677
  };
11617
11678
 
11618
11679
  module.exports = ReactLink;
11619
- },{"27":27}],80:[function(_dereq_,module,exports){
11680
+ },{"27":27}],79:[function(_dereq_,module,exports){
11620
11681
  /**
11621
11682
  * Copyright 2013-present, Facebook, Inc.
11622
11683
  * All rights reserved.
@@ -11667,7 +11728,7 @@ var ReactMarkupChecksum = {
11667
11728
  };
11668
11729
 
11669
11730
  module.exports = ReactMarkupChecksum;
11670
- },{"127":127}],81:[function(_dereq_,module,exports){
11731
+ },{"127":127}],80:[function(_dereq_,module,exports){
11671
11732
  /**
11672
11733
  * Copyright 2013-present, Facebook, Inc.
11673
11734
  * All rights reserved.
@@ -11684,15 +11745,14 @@ module.exports = ReactMarkupChecksum;
11684
11745
  var DOMLazyTree = _dereq_(8);
11685
11746
  var DOMProperty = _dereq_(10);
11686
11747
  var ReactBrowserEventEmitter = _dereq_(28);
11687
- var ReactCurrentOwner = _dereq_(39);
11688
- var ReactDOMComponentTree = _dereq_(44);
11689
- var ReactDOMContainerInfo = _dereq_(45);
11690
- var ReactDOMFeatureFlags = _dereq_(49);
11691
- var ReactElement = _dereq_(66);
11692
- var ReactFeatureFlags = _dereq_(72);
11693
- var ReactInstrumentation = _dereq_(77);
11694
- var ReactMarkupChecksum = _dereq_(80);
11695
- 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);
11696
11756
  var ReactReconciler = _dereq_(93);
11697
11757
  var ReactUpdateQueue = _dereq_(103);
11698
11758
  var ReactUpdates = _dereq_(104);
@@ -11930,6 +11990,10 @@ var ReactMount = {
11930
11990
  * @return {ReactComponent} nextComponent
11931
11991
  */
11932
11992
  _renderNewRootComponent: function (nextElement, container, shouldReuseMarkup, context) {
11993
+ if ("development" !== 'production') {
11994
+ ReactInstrumentation.debugTool.onBeginFlush();
11995
+ }
11996
+
11933
11997
  // Various parts of our code (such as ReactCompositeComponent's
11934
11998
  // _renderValidatedComponent) assume that calls to render aren't nested;
11935
11999
  // verify that that's the case.
@@ -11940,6 +12004,12 @@ var ReactMount = {
11940
12004
  ReactBrowserEventEmitter.ensureScrollValueMonitoring();
11941
12005
  var componentInstance = instantiateReactComponent(nextElement);
11942
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
+
11943
12013
  // The initial render is synchronous but any updates that happen during
11944
12014
  // rendering, in componentWillMount or componentDidMount, will be batched
11945
12015
  // according to the current batching strategy.
@@ -11950,7 +12020,9 @@ var ReactMount = {
11950
12020
  instancesByReactRootID[wrapperID] = componentInstance;
11951
12021
 
11952
12022
  if ("development" !== 'production') {
11953
- 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();
11954
12026
  }
11955
12027
 
11956
12028
  return componentInstance;
@@ -12030,6 +12102,7 @@ var ReactMount = {
12030
12102
 
12031
12103
  /**
12032
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
12033
12106
  *
12034
12107
  * If the React component was previously rendered into `container`, this will
12035
12108
  * perform an update on it and only mutate the DOM as necessary to reflect the
@@ -12046,6 +12119,7 @@ var ReactMount = {
12046
12119
 
12047
12120
  /**
12048
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
12049
12123
  *
12050
12124
  * @param {DOMElement} container DOM element containing a React component.
12051
12125
  * @return {boolean} True if a component was found in and unmounted from
@@ -12137,16 +12211,15 @@ var ReactMount = {
12137
12211
  setInnerHTML(container, markup);
12138
12212
  ReactDOMComponentTree.precacheNode(instance, container.firstChild);
12139
12213
  }
12214
+
12215
+ if ("development" !== 'production') {
12216
+ ReactInstrumentation.debugTool.onNativeOperation(ReactDOMComponentTree.getInstanceFromNode(container.firstChild)._debugID, 'mount', markup.toString());
12217
+ }
12140
12218
  }
12141
12219
  };
12142
12220
 
12143
- ReactPerf.measureMethods(ReactMount, 'ReactMount', {
12144
- _renderNewRootComponent: '_renderNewRootComponent',
12145
- _mountImageIntoNode: '_mountImageIntoNode'
12146
- });
12147
-
12148
12221
  module.exports = ReactMount;
12149
- },{"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){
12150
12223
  /**
12151
12224
  * Copyright 2013-present, Facebook, Inc.
12152
12225
  * All rights reserved.
@@ -12161,12 +12234,14 @@ module.exports = ReactMount;
12161
12234
  'use strict';
12162
12235
 
12163
12236
  var ReactComponentEnvironment = _dereq_(36);
12164
- var ReactMultiChildUpdateTypes = _dereq_(83);
12237
+ var ReactInstrumentation = _dereq_(76);
12238
+ var ReactMultiChildUpdateTypes = _dereq_(82);
12165
12239
 
12166
- var ReactCurrentOwner = _dereq_(39);
12240
+ var ReactCurrentOwner = _dereq_(40);
12167
12241
  var ReactReconciler = _dereq_(93);
12168
12242
  var ReactChildReconciler = _dereq_(31);
12169
12243
 
12244
+ var emptyFunction = _dereq_(165);
12170
12245
  var flattenChildren = _dereq_(133);
12171
12246
  var invariant = _dereq_(173);
12172
12247
 
@@ -12283,6 +12358,15 @@ function processQueue(inst, updateQueue) {
12283
12358
  ReactComponentEnvironment.processChildrenUpdates(inst, updateQueue);
12284
12359
  }
12285
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
+
12286
12370
  /**
12287
12371
  * ReactMultiChild are capable of reconciling multiple children.
12288
12372
  *
@@ -12344,6 +12428,7 @@ var ReactMultiChild = {
12344
12428
  mountChildren: function (nestedChildren, transaction, context) {
12345
12429
  var children = this._reconcilerInstantiateChildren(nestedChildren, transaction, context);
12346
12430
  this._renderedChildren = children;
12431
+
12347
12432
  var mountImages = [];
12348
12433
  var index = 0;
12349
12434
  for (var name in children) {
@@ -12354,6 +12439,11 @@ var ReactMultiChild = {
12354
12439
  mountImages.push(mountImage);
12355
12440
  }
12356
12441
  }
12442
+
12443
+ if ("development" !== 'production') {
12444
+ setChildrenForInstrumentation.call(this, children);
12445
+ }
12446
+
12357
12447
  return mountImages;
12358
12448
  },
12359
12449
 
@@ -12460,6 +12550,10 @@ var ReactMultiChild = {
12460
12550
  processQueue(this, updates);
12461
12551
  }
12462
12552
  this._renderedChildren = nextChildren;
12553
+
12554
+ if ("development" !== 'production') {
12555
+ setChildrenForInstrumentation.call(this, nextChildren);
12556
+ }
12463
12557
  },
12464
12558
 
12465
12559
  /**
@@ -12549,7 +12643,7 @@ var ReactMultiChild = {
12549
12643
  };
12550
12644
 
12551
12645
  module.exports = ReactMultiChild;
12552
- },{"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){
12553
12647
  /**
12554
12648
  * Copyright 2013-present, Facebook, Inc.
12555
12649
  * All rights reserved.
@@ -12582,7 +12676,7 @@ var ReactMultiChildUpdateTypes = keyMirror({
12582
12676
  });
12583
12677
 
12584
12678
  module.exports = ReactMultiChildUpdateTypes;
12585
- },{"176":176}],84:[function(_dereq_,module,exports){
12679
+ },{"176":176}],83:[function(_dereq_,module,exports){
12586
12680
  /**
12587
12681
  * Copyright 2014-present, Facebook, Inc.
12588
12682
  * All rights reserved.
@@ -12678,7 +12772,40 @@ var ReactNativeComponent = {
12678
12772
  };
12679
12773
 
12680
12774
  module.exports = ReactNativeComponent;
12681
- },{"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){
12682
12809
  /**
12683
12810
  * Copyright 2013-present, Facebook, Inc.
12684
12811
  * All rights reserved.
@@ -12692,7 +12819,7 @@ module.exports = ReactNativeComponent;
12692
12819
 
12693
12820
  'use strict';
12694
12821
 
12695
- var ReactElement = _dereq_(66);
12822
+ var ReactElement = _dereq_(65);
12696
12823
 
12697
12824
  var invariant = _dereq_(173);
12698
12825
 
@@ -12716,7 +12843,7 @@ var ReactNodeTypes = {
12716
12843
  };
12717
12844
 
12718
12845
  module.exports = ReactNodeTypes;
12719
- },{"173":173,"66":66}],86:[function(_dereq_,module,exports){
12846
+ },{"173":173,"65":65}],86:[function(_dereq_,module,exports){
12720
12847
  /**
12721
12848
  * Copyright 2015-present, Facebook, Inc.
12722
12849
  * All rights reserved.
@@ -12907,7 +13034,7 @@ var ReactOwner = {
12907
13034
  module.exports = ReactOwner;
12908
13035
  },{"173":173}],88:[function(_dereq_,module,exports){
12909
13036
  /**
12910
- * Copyright 2013-present, Facebook, Inc.
13037
+ * Copyright 2016-present, Facebook, Inc.
12911
13038
  * All rights reserved.
12912
13039
  *
12913
13040
  * This source code is licensed under the BSD-style license found in the
@@ -12919,90 +13046,412 @@ module.exports = ReactOwner;
12919
13046
 
12920
13047
  'use strict';
12921
13048
 
12922
- /**
12923
- * ReactPerf is a general AOP system designed to measure performance. This
12924
- * module only has the hooks: see ReactDefaultPerf for the analysis tool.
12925
- */
13049
+ var _assign = _dereq_(184);
12926
13050
 
12927
- var ReactPerf = {
12928
- /**
12929
- * Boolean to enable/disable measurement. Set to false by default to prevent
12930
- * accidental logging and perf loss.
12931
- */
12932
- 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; };
12933
13052
 
12934
- /**
12935
- * Holds onto the measure function in use. By default, don't measure
12936
- * anything, but we'll override this if we inject a measure function.
12937
- */
12938
- storedMeasure: _noMeasure,
13053
+ var ReactDebugTool = _dereq_(62);
13054
+ var warning = _dereq_(183);
12939
13055
 
12940
- /**
12941
- * @param {object} object
12942
- * @param {string} objectName
12943
- * @param {object<string>} methodNames
12944
- */
12945
- measureMethods: function (object, objectName, methodNames) {
12946
- if ("development" !== 'production') {
12947
- for (var key in methodNames) {
12948
- if (!methodNames.hasOwnProperty(key)) {
12949
- continue;
12950
- }
12951
- object[key] = ReactPerf.measure(objectName, methodNames[key], object[key]);
12952
- }
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
+ };
12953
13087
  }
12954
- },
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
+ }
12955
13097
 
12956
- /**
12957
- * Use this to wrap methods you want to measure. Zero overhead in production.
12958
- *
12959
- * @param {string} objName
12960
- * @param {string} fnName
12961
- * @param {function} func
12962
- * @return {function}
12963
- */
12964
- measure: function (objName, fnName, func) {
12965
- if ("development" !== 'production') {
12966
- var measuredFunc = null;
12967
- var wrapper = function () {
12968
- if (ReactPerf.enableMeasure) {
12969
- if (!measuredFunc) {
12970
- measuredFunc = ReactPerf.storedMeasure(objName, fnName, func);
12971
- }
12972
- return measuredFunc.apply(this, arguments);
12973
- }
12974
- 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
12975
13145
  };
12976
- wrapper.displayName = objName + '_' + fnName;
12977
- return wrapper;
12978
13146
  }
12979
- return func;
12980
- },
13147
+ affectedIDs[key][instanceID] = true;
13148
+ applyUpdate(stats);
13149
+ }
12981
13150
 
12982
- injection: {
12983
- /**
12984
- * @param {function} measure
12985
- */
12986
- injectMeasure: function (measure) {
12987
- 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
+ };
12988
13226
  }
13227
+ affectedIDs[key][instanceID] = true;
13228
+ applyUpdate(stats);
12989
13229
  }
12990
- };
12991
13230
 
12992
- /**
12993
- * Simply passes through the measured function, without measuring it.
12994
- *
12995
- * @param {string} objName
12996
- * @param {string} fnName
12997
- * @param {function} func
12998
- * @return {function}
12999
- */
13000
- function _noMeasure(objName, fnName, func) {
13001
- 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);
13412
+ }
13413
+
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);
13002
13419
  }
13003
13420
 
13004
- module.exports = ReactPerf;
13005
- },{}],89:[function(_dereq_,module,exports){
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){
13006
13455
  /**
13007
13456
  * Copyright 2013-present, Facebook, Inc.
13008
13457
  * All rights reserved.
@@ -13064,7 +13513,7 @@ module.exports = ReactPropTypeLocations;
13064
13513
 
13065
13514
  'use strict';
13066
13515
 
13067
- var ReactElement = _dereq_(66);
13516
+ var ReactElement = _dereq_(65);
13068
13517
  var ReactPropTypeLocationNames = _dereq_(89);
13069
13518
 
13070
13519
  var emptyFunction = _dereq_(165);
@@ -13431,7 +13880,7 @@ function getClassName(propValue) {
13431
13880
  }
13432
13881
 
13433
13882
  module.exports = ReactPropTypes;
13434
- },{"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){
13435
13884
  /**
13436
13885
  * Copyright 2013-present, Facebook, Inc.
13437
13886
  * All rights reserved.
@@ -13450,7 +13899,7 @@ var _assign = _dereq_(184);
13450
13899
  var CallbackQueue = _dereq_(5);
13451
13900
  var PooledClass = _dereq_(26);
13452
13901
  var ReactBrowserEventEmitter = _dereq_(28);
13453
- var ReactInputSelection = _dereq_(75);
13902
+ var ReactInputSelection = _dereq_(74);
13454
13903
  var Transaction = _dereq_(124);
13455
13904
 
13456
13905
  /**
@@ -13594,7 +14043,7 @@ _assign(ReactReconcileTransaction.prototype, Transaction.Mixin, Mixin);
13594
14043
  PooledClass.addPoolingTo(ReactReconcileTransaction);
13595
14044
 
13596
14045
  module.exports = ReactReconcileTransaction;
13597
- },{"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){
13598
14047
  /**
13599
14048
  * Copyright 2013-present, Facebook, Inc.
13600
14049
  * All rights reserved.
@@ -13609,7 +14058,9 @@ module.exports = ReactReconcileTransaction;
13609
14058
  'use strict';
13610
14059
 
13611
14060
  var ReactRef = _dereq_(94);
13612
- var ReactInstrumentation = _dereq_(77);
14061
+ var ReactInstrumentation = _dereq_(76);
14062
+
14063
+ var invariant = _dereq_(173);
13613
14064
 
13614
14065
  /**
13615
14066
  * Helper to call ReactRef.attachRefs with this composite component, split out
@@ -13633,12 +14084,20 @@ var ReactReconciler = {
13633
14084
  * @internal
13634
14085
  */
13635
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
+ }
13636
14092
  var markup = internalInstance.mountComponent(transaction, nativeParent, nativeContainerInfo, context);
13637
14093
  if (internalInstance._currentElement && internalInstance._currentElement.ref != null) {
13638
14094
  transaction.getReactMountReady().enqueue(attachRefs, internalInstance);
13639
14095
  }
13640
14096
  if ("development" !== 'production') {
13641
- ReactInstrumentation.debugTool.onMountComponent(internalInstance);
14097
+ if (internalInstance._debugID !== 0) {
14098
+ ReactInstrumentation.debugTool.onEndReconcilerTimer(internalInstance._debugID, 'mountComponent');
14099
+ ReactInstrumentation.debugTool.onMountComponent(internalInstance._debugID);
14100
+ }
13642
14101
  }
13643
14102
  return markup;
13644
14103
  },
@@ -13658,10 +14117,18 @@ var ReactReconciler = {
13658
14117
  * @internal
13659
14118
  */
13660
14119
  unmountComponent: function (internalInstance, safely) {
14120
+ if ("development" !== 'production') {
14121
+ if (internalInstance._debugID !== 0) {
14122
+ ReactInstrumentation.debugTool.onBeginReconcilerTimer(internalInstance._debugID, 'unmountComponent');
14123
+ }
14124
+ }
13661
14125
  ReactRef.detachRefs(internalInstance, internalInstance._currentElement);
13662
14126
  internalInstance.unmountComponent(safely);
13663
14127
  if ("development" !== 'production') {
13664
- ReactInstrumentation.debugTool.onUnmountComponent(internalInstance);
14128
+ if (internalInstance._debugID !== 0) {
14129
+ ReactInstrumentation.debugTool.onEndReconcilerTimer(internalInstance._debugID, 'unmountComponent');
14130
+ ReactInstrumentation.debugTool.onUnmountComponent(internalInstance._debugID);
14131
+ }
13665
14132
  }
13666
14133
  },
13667
14134
 
@@ -13691,6 +14158,12 @@ var ReactReconciler = {
13691
14158
  return;
13692
14159
  }
13693
14160
 
14161
+ if ("development" !== 'production') {
14162
+ if (internalInstance._debugID !== 0) {
14163
+ ReactInstrumentation.debugTool.onBeginReconcilerTimer(internalInstance._debugID, 'receiveComponent');
14164
+ }
14165
+ }
14166
+
13694
14167
  var refsChanged = ReactRef.shouldUpdateRefs(prevElement, nextElement);
13695
14168
 
13696
14169
  if (refsChanged) {
@@ -13704,7 +14177,10 @@ var ReactReconciler = {
13704
14177
  }
13705
14178
 
13706
14179
  if ("development" !== 'production') {
13707
- ReactInstrumentation.debugTool.onUpdateComponent(internalInstance);
14180
+ if (internalInstance._debugID !== 0) {
14181
+ ReactInstrumentation.debugTool.onEndReconcilerTimer(internalInstance._debugID, 'receiveComponent');
14182
+ ReactInstrumentation.debugTool.onUpdateComponent(internalInstance._debugID);
14183
+ }
13708
14184
  }
13709
14185
  },
13710
14186
 
@@ -13715,17 +14191,31 @@ var ReactReconciler = {
13715
14191
  * @param {ReactReconcileTransaction} transaction
13716
14192
  * @internal
13717
14193
  */
13718
- 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
+ }
13719
14206
  internalInstance.performUpdateIfNecessary(transaction);
13720
14207
  if ("development" !== 'production') {
13721
- ReactInstrumentation.debugTool.onUpdateComponent(internalInstance);
14208
+ if (internalInstance._debugID !== 0) {
14209
+ ReactInstrumentation.debugTool.onEndReconcilerTimer(internalInstance._debugID, 'performUpdateIfNecessary');
14210
+ ReactInstrumentation.debugTool.onUpdateComponent(internalInstance._debugID);
14211
+ }
13722
14212
  }
13723
14213
  }
13724
14214
 
13725
14215
  };
13726
14216
 
13727
14217
  module.exports = ReactReconciler;
13728
- },{"77":77,"94":94}],94:[function(_dereq_,module,exports){
14218
+ },{"173":173,"76":76,"94":94}],94:[function(_dereq_,module,exports){
13729
14219
  /**
13730
14220
  * Copyright 2013-present, Facebook, Inc.
13731
14221
  * All rights reserved.
@@ -13840,10 +14330,12 @@ module.exports = ReactServerBatchingStrategy;
13840
14330
  */
13841
14331
  'use strict';
13842
14332
 
13843
- var ReactDOMContainerInfo = _dereq_(45);
13844
- var ReactDefaultBatchingStrategy = _dereq_(62);
13845
- var ReactElement = _dereq_(66);
13846
- 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);
13847
14339
  var ReactServerBatchingStrategy = _dereq_(95);
13848
14340
  var ReactServerRenderingTransaction = _dereq_(97);
13849
14341
  var ReactUpdates = _dereq_(104);
@@ -13865,7 +14357,10 @@ function renderToStringImpl(element, makeStaticMarkup) {
13865
14357
 
13866
14358
  return transaction.perform(function () {
13867
14359
  var componentInstance = instantiateReactComponent(element);
13868
- 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
+ }
13869
14364
  if (!makeStaticMarkup) {
13870
14365
  markup = ReactMarkupChecksum.addChecksumToMarkup(markup);
13871
14366
  }
@@ -13879,11 +14374,21 @@ function renderToStringImpl(element, makeStaticMarkup) {
13879
14374
  }
13880
14375
  }
13881
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
+ */
13882
14382
  function renderToString(element) {
13883
14383
  !ReactElement.isValidElement(element) ? "development" !== 'production' ? invariant(false, 'renderToString(): You must pass a valid ReactElement.') : invariant(false) : void 0;
13884
14384
  return renderToStringImpl(element, false);
13885
14385
  }
13886
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
+ */
13887
14392
  function renderToStaticMarkup(element) {
13888
14393
  !ReactElement.isValidElement(element) ? "development" !== 'production' ? invariant(false, 'renderToStaticMarkup(): You must pass a valid ReactElement.') : invariant(false) : void 0;
13889
14394
  return renderToStringImpl(element, true);
@@ -13893,7 +14398,7 @@ module.exports = {
13893
14398
  renderToString: renderToString,
13894
14399
  renderToStaticMarkup: renderToStaticMarkup
13895
14400
  };
13896
- },{"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){
13897
14402
  /**
13898
14403
  * Copyright 2014-present, Facebook, Inc.
13899
14404
  * All rights reserved.
@@ -13955,7 +14460,11 @@ var Mixin = {
13955
14460
  * `PooledClass` looks for this, and will invoke this before allowing this
13956
14461
  * instance to be reused.
13957
14462
  */
13958
- destructor: function () {}
14463
+ destructor: function () {},
14464
+
14465
+ checkpoint: function () {},
14466
+
14467
+ rollback: function () {}
13959
14468
  };
13960
14469
 
13961
14470
  _assign(ReactServerRenderingTransaction.prototype, Transaction.Mixin, Mixin);
@@ -14089,13 +14598,13 @@ var EventPluginHub = _dereq_(17);
14089
14598
  var EventPluginRegistry = _dereq_(18);
14090
14599
  var EventPropagators = _dereq_(20);
14091
14600
  var React = _dereq_(27);
14092
- var ReactDefaultInjection = _dereq_(63);
14093
- var ReactDOM = _dereq_(40);
14094
- var ReactDOMComponentTree = _dereq_(44);
14095
- var ReactElement = _dereq_(66);
14601
+ var ReactDefaultInjection = _dereq_(64);
14602
+ var ReactDOM = _dereq_(41);
14603
+ var ReactDOMComponentTree = _dereq_(45);
14604
+ var ReactElement = _dereq_(65);
14096
14605
  var ReactBrowserEventEmitter = _dereq_(28);
14097
- var ReactCompositeComponent = _dereq_(38);
14098
- var ReactInstanceMap = _dereq_(76);
14606
+ var ReactCompositeComponent = _dereq_(39);
14607
+ var ReactInstanceMap = _dereq_(75);
14099
14608
  var ReactUpdates = _dereq_(104);
14100
14609
  var SyntheticEvent = _dereq_(115);
14101
14610
 
@@ -14134,6 +14643,10 @@ function findAllInRenderedTreeInternal(inst, test) {
14134
14643
  }
14135
14644
 
14136
14645
  /**
14646
+ * Utilities for making it easy to test React components.
14647
+ *
14648
+ * See https://facebook.github.io/react/docs/test-utils.html
14649
+ *
14137
14650
  * Todo: Support the entire DOM.scry query syntax. For now, these simple
14138
14651
  * utilities will suffice for testing purposes.
14139
14652
  * @lends ReactTestUtils
@@ -14568,7 +15081,7 @@ Object.keys(topLevelTypes).forEach(function (eventType) {
14568
15081
  });
14569
15082
 
14570
15083
  module.exports = ReactTestUtils;
14571
- },{"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){
14572
15085
  /**
14573
15086
  * Copyright 2013-present, Facebook, Inc.
14574
15087
  * All rights reserved.
@@ -14761,6 +15274,11 @@ var ReactTransitionChildMapping = _dereq_(100);
14761
15274
 
14762
15275
  var emptyFunction = _dereq_(165);
14763
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
+ */
14764
15282
  var ReactTransitionGroup = React.createClass({
14765
15283
  displayName: 'ReactTransitionGroup',
14766
15284
 
@@ -14961,8 +15479,8 @@ module.exports = ReactTransitionGroup;
14961
15479
 
14962
15480
  'use strict';
14963
15481
 
14964
- var ReactCurrentOwner = _dereq_(39);
14965
- var ReactInstanceMap = _dereq_(76);
15482
+ var ReactCurrentOwner = _dereq_(40);
15483
+ var ReactInstanceMap = _dereq_(75);
14966
15484
  var ReactUpdates = _dereq_(104);
14967
15485
 
14968
15486
  var invariant = _dereq_(173);
@@ -15163,7 +15681,7 @@ var ReactUpdateQueue = {
15163
15681
  };
15164
15682
 
15165
15683
  module.exports = ReactUpdateQueue;
15166
- },{"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){
15167
15685
  /**
15168
15686
  * Copyright 2013-present, Facebook, Inc.
15169
15687
  * All rights reserved.
@@ -15181,14 +15699,15 @@ var _assign = _dereq_(184);
15181
15699
 
15182
15700
  var CallbackQueue = _dereq_(5);
15183
15701
  var PooledClass = _dereq_(26);
15184
- var ReactFeatureFlags = _dereq_(72);
15185
- var ReactPerf = _dereq_(88);
15702
+ var ReactFeatureFlags = _dereq_(71);
15703
+ var ReactInstrumentation = _dereq_(76);
15186
15704
  var ReactReconciler = _dereq_(93);
15187
15705
  var Transaction = _dereq_(124);
15188
15706
 
15189
15707
  var invariant = _dereq_(173);
15190
15708
 
15191
15709
  var dirtyComponents = [];
15710
+ var updateBatchNumber = 0;
15192
15711
  var asapCallbackQueue = CallbackQueue.getPooled();
15193
15712
  var asapEnqueued = false;
15194
15713
 
@@ -15283,6 +15802,13 @@ function runBatchedUpdates(transaction) {
15283
15802
  // them before their children by sorting the array.
15284
15803
  dirtyComponents.sort(mountOrderComparator);
15285
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
+
15286
15812
  for (var i = 0; i < len; i++) {
15287
15813
  // If a component is unmounted before pending changes apply, it will still
15288
15814
  // be here, but we assume that it has cleared its _pendingCallbacks and
@@ -15306,7 +15832,7 @@ function runBatchedUpdates(transaction) {
15306
15832
  console.time(markerName);
15307
15833
  }
15308
15834
 
15309
- ReactReconciler.performUpdateIfNecessary(component, transaction.reconcileTransaction);
15835
+ ReactReconciler.performUpdateIfNecessary(component, transaction.reconcileTransaction, updateBatchNumber);
15310
15836
 
15311
15837
  if (markerName) {
15312
15838
  console.timeEnd(markerName);
@@ -15321,6 +15847,10 @@ function runBatchedUpdates(transaction) {
15321
15847
  }
15322
15848
 
15323
15849
  var flushBatchedUpdates = function () {
15850
+ if ("development" !== 'production') {
15851
+ ReactInstrumentation.debugTool.onBeginFlush();
15852
+ }
15853
+
15324
15854
  // ReactUpdatesFlushTransaction's wrappers will clear the dirtyComponents
15325
15855
  // array and perform any updates enqueued by mount-ready handlers (i.e.,
15326
15856
  // componentDidUpdate) but we need to check here too in order to catch
@@ -15340,8 +15870,11 @@ var flushBatchedUpdates = function () {
15340
15870
  CallbackQueue.release(queue);
15341
15871
  }
15342
15872
  }
15873
+
15874
+ if ("development" !== 'production') {
15875
+ ReactInstrumentation.debugTool.onEndFlush();
15876
+ }
15343
15877
  };
15344
- flushBatchedUpdates = ReactPerf.measure('ReactUpdates', 'flushBatchedUpdates', flushBatchedUpdates);
15345
15878
 
15346
15879
  /**
15347
15880
  * Mark a component as needing a rerender, adding an optional callback to a
@@ -15362,6 +15895,9 @@ function enqueueUpdate(component) {
15362
15895
  }
15363
15896
 
15364
15897
  dirtyComponents.push(component);
15898
+ if (component._updateBatchNumber == null) {
15899
+ component._updateBatchNumber = updateBatchNumber + 1;
15900
+ }
15365
15901
  }
15366
15902
 
15367
15903
  /**
@@ -15405,7 +15941,7 @@ var ReactUpdates = {
15405
15941
  };
15406
15942
 
15407
15943
  module.exports = ReactUpdates;
15408
- },{"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){
15409
15945
  /**
15410
15946
  * Copyright 2013-present, Facebook, Inc.
15411
15947
  * All rights reserved.
@@ -15419,7 +15955,7 @@ module.exports = ReactUpdates;
15419
15955
 
15420
15956
  'use strict';
15421
15957
 
15422
- module.exports = '15.0.2-alpha.4';
15958
+ module.exports = '15.1.0-alpha.1';
15423
15959
  },{}],106:[function(_dereq_,module,exports){
15424
15960
  /**
15425
15961
  * Copyright 2013-present, Facebook, Inc.
@@ -15436,9 +15972,9 @@ module.exports = '15.0.2-alpha.4';
15436
15972
 
15437
15973
  var LinkedStateMixin = _dereq_(24);
15438
15974
  var React = _dereq_(27);
15439
- var ReactComponentWithPureRenderMixin = _dereq_(37);
15975
+ var ReactComponentWithPureRenderMixin = _dereq_(38);
15440
15976
  var ReactCSSTransitionGroup = _dereq_(29);
15441
- var ReactFragment = _dereq_(73);
15977
+ var ReactFragment = _dereq_(72);
15442
15978
  var ReactTransitionGroup = _dereq_(102);
15443
15979
 
15444
15980
  var shallowCompare = _dereq_(152);
@@ -15456,12 +15992,12 @@ React.addons = {
15456
15992
  };
15457
15993
 
15458
15994
  if ("development" !== 'production') {
15459
- React.addons.Perf = _dereq_(64);
15995
+ React.addons.Perf = _dereq_(88);
15460
15996
  React.addons.TestUtils = _dereq_(99);
15461
15997
  }
15462
15998
 
15463
15999
  module.exports = React;
15464
- },{"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){
15465
16001
  /**
15466
16002
  * Copyright 2013-present, Facebook, Inc.
15467
16003
  * All rights reserved.
@@ -15477,8 +16013,8 @@ module.exports = React;
15477
16013
 
15478
16014
  var _assign = _dereq_(184);
15479
16015
 
15480
- var ReactDOM = _dereq_(40);
15481
- var ReactDOMServer = _dereq_(56);
16016
+ var ReactDOM = _dereq_(41);
16017
+ var ReactDOMServer = _dereq_(57);
15482
16018
  var ReactWithAddons = _dereq_(106);
15483
16019
 
15484
16020
  // `version` will be added here by ReactIsomorphic.
@@ -15488,7 +16024,7 @@ var ReactWithAddonsUMDEntry = _assign({
15488
16024
  }, ReactWithAddons);
15489
16025
 
15490
16026
  module.exports = ReactWithAddonsUMDEntry;
15491
- },{"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){
15492
16028
  /**
15493
16029
  * Copyright 2013-present, Facebook, Inc.
15494
16030
  * All rights reserved.
@@ -15806,8 +16342,8 @@ module.exports = SVGDOMPropertyConfig;
15806
16342
  var EventConstants = _dereq_(16);
15807
16343
  var EventPropagators = _dereq_(20);
15808
16344
  var ExecutionEnvironment = _dereq_(159);
15809
- var ReactDOMComponentTree = _dereq_(44);
15810
- var ReactInputSelection = _dereq_(75);
16345
+ var ReactDOMComponentTree = _dereq_(45);
16346
+ var ReactInputSelection = _dereq_(74);
15811
16347
  var SyntheticEvent = _dereq_(115);
15812
16348
 
15813
16349
  var getActiveElement = _dereq_(168);
@@ -15986,7 +16522,7 @@ var SelectEventPlugin = {
15986
16522
  };
15987
16523
 
15988
16524
  module.exports = SelectEventPlugin;
15989
- },{"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){
15990
16526
  /**
15991
16527
  * Copyright 2013-present, Facebook, Inc.
15992
16528
  * All rights reserved.
@@ -16003,7 +16539,7 @@ module.exports = SelectEventPlugin;
16003
16539
  var EventConstants = _dereq_(16);
16004
16540
  var EventListener = _dereq_(158);
16005
16541
  var EventPropagators = _dereq_(20);
16006
- var ReactDOMComponentTree = _dereq_(44);
16542
+ var ReactDOMComponentTree = _dereq_(45);
16007
16543
  var SyntheticAnimationEvent = _dereq_(111);
16008
16544
  var SyntheticClipboardEvent = _dereq_(112);
16009
16545
  var SyntheticEvent = _dereq_(115);
@@ -16614,7 +17150,7 @@ var SimpleEventPlugin = {
16614
17150
  };
16615
17151
 
16616
17152
  module.exports = SimpleEventPlugin;
16617
- },{"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){
16618
17154
  /**
16619
17155
  * Copyright 2013-present, Facebook, Inc.
16620
17156
  * All rights reserved.
@@ -18016,9 +18552,9 @@ module.exports = escapeTextContentForBrowser;
18016
18552
 
18017
18553
  'use strict';
18018
18554
 
18019
- var ReactCurrentOwner = _dereq_(39);
18020
- var ReactDOMComponentTree = _dereq_(44);
18021
- var ReactInstanceMap = _dereq_(76);
18555
+ var ReactCurrentOwner = _dereq_(40);
18556
+ var ReactDOMComponentTree = _dereq_(45);
18557
+ var ReactInstanceMap = _dereq_(75);
18022
18558
 
18023
18559
  var getNativeComponentFromComposite = _dereq_(140);
18024
18560
  var invariant = _dereq_(173);
@@ -18027,6 +18563,8 @@ var warning = _dereq_(183);
18027
18563
  /**
18028
18564
  * Returns the DOM node rendered by this element.
18029
18565
  *
18566
+ * See https://facebook.github.io/react/docs/top-level-api.html#reactdom.finddomnode
18567
+ *
18030
18568
  * @param {ReactComponent|DOMElement} componentOrElement
18031
18569
  * @return {?DOMElement} The root node of this element.
18032
18570
  */
@@ -18059,7 +18597,7 @@ function findDOMNode(componentOrElement) {
18059
18597
  }
18060
18598
 
18061
18599
  module.exports = findDOMNode;
18062
- },{"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){
18063
18601
  /**
18064
18602
  * Copyright 2013-present, Facebook, Inc.
18065
18603
  * All rights reserved.
@@ -18673,9 +19211,10 @@ module.exports = getVendorPrefixedEventName;
18673
19211
 
18674
19212
  var _assign = _dereq_(184);
18675
19213
 
18676
- var ReactCompositeComponent = _dereq_(38);
18677
- var ReactEmptyComponent = _dereq_(68);
18678
- var ReactNativeComponent = _dereq_(84);
19214
+ var ReactCompositeComponent = _dereq_(39);
19215
+ var ReactEmptyComponent = _dereq_(67);
19216
+ var ReactNativeComponent = _dereq_(83);
19217
+ var ReactInstrumentation = _dereq_(76);
18679
19218
 
18680
19219
  var invariant = _dereq_(173);
18681
19220
  var warning = _dereq_(183);
@@ -18698,6 +19237,21 @@ function getDeclarationErrorAddendum(owner) {
18698
19237
  return '';
18699
19238
  }
18700
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
+
18701
19255
  /**
18702
19256
  * Check if the type reference is a known internal type. I.e. not a user
18703
19257
  * provided composite type.
@@ -18709,6 +19263,8 @@ function isInternalComponentType(type) {
18709
19263
  return typeof type === 'function' && typeof type.prototype !== 'undefined' && typeof type.prototype.mountComponent === 'function' && typeof type.prototype.receiveComponent === 'function';
18710
19264
  }
18711
19265
 
19266
+ var nextDebugID = 1;
19267
+
18712
19268
  /**
18713
19269
  * Given a ReactNode, create an instance that will actually be mounted.
18714
19270
  *
@@ -18719,7 +19275,8 @@ function isInternalComponentType(type) {
18719
19275
  function instantiateReactComponent(node) {
18720
19276
  var instance;
18721
19277
 
18722
- if (node === null || node === false) {
19278
+ var isEmpty = node === null || node === false;
19279
+ if (isEmpty) {
18723
19280
  instance = ReactEmptyComponent.create(instantiateReactComponent);
18724
19281
  } else if (typeof node === 'object') {
18725
19282
  var element = node;
@@ -18757,6 +19314,18 @@ function instantiateReactComponent(node) {
18757
19314
  instance._warnedAboutRefsInRender = false;
18758
19315
  }
18759
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
+
18760
19329
  // Internal instances should fully constructed at this point, so they should
18761
19330
  // not get any new fields added to them at this point.
18762
19331
  if ("development" !== 'production') {
@@ -18769,7 +19338,7 @@ function instantiateReactComponent(node) {
18769
19338
  }
18770
19339
 
18771
19340
  module.exports = instantiateReactComponent;
18772
- },{"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){
18773
19342
  /**
18774
19343
  * Copyright 2013-present, Facebook, Inc.
18775
19344
  * All rights reserved.
@@ -18885,16 +19454,19 @@ module.exports = isTextInputElement;
18885
19454
  */
18886
19455
  'use strict';
18887
19456
 
18888
- var ReactElement = _dereq_(66);
19457
+ var ReactElement = _dereq_(65);
18889
19458
 
18890
19459
  var invariant = _dereq_(173);
18891
19460
 
18892
19461
  /**
18893
19462
  * Returns the first child in a collection of children and verifies that there
18894
- * is only one child in the collection. The current implementation of this
18895
- * function assumes that a single child gets passed without a wrapper, but the
18896
- * purpose of this helper function is to abstract away the particular structure
18897
- * 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.
18898
19470
  *
18899
19471
  * @param {?object} children Child collection structure.
18900
19472
  * @return {ReactElement} The first and only `ReactElement` contained in the
@@ -18906,7 +19478,7 @@ function onlyChild(children) {
18906
19478
  }
18907
19479
 
18908
19480
  module.exports = onlyChild;
18909
- },{"173":173,"66":66}],148:[function(_dereq_,module,exports){
19481
+ },{"173":173,"65":65}],148:[function(_dereq_,module,exports){
18910
19482
  /**
18911
19483
  * Copyright 2013-present, Facebook, Inc.
18912
19484
  * All rights reserved.
@@ -18947,10 +19519,10 @@ module.exports = quoteAttributeValueForBrowser;
18947
19519
 
18948
19520
  'use strict';
18949
19521
 
18950
- var ReactMount = _dereq_(81);
19522
+ var ReactMount = _dereq_(80);
18951
19523
 
18952
19524
  module.exports = ReactMount.renderSubtreeIntoContainer;
18953
- },{"81":81}],150:[function(_dereq_,module,exports){
19525
+ },{"80":80}],150:[function(_dereq_,module,exports){
18954
19526
  /**
18955
19527
  * Copyright 2013-present, Facebook, Inc.
18956
19528
  * All rights reserved.
@@ -19093,6 +19665,7 @@ var shallowEqual = _dereq_(182);
19093
19665
  /**
19094
19666
  * Does a shallow comparison for props and state.
19095
19667
  * See ReactComponentWithPureRenderMixin
19668
+ * See also https://facebook.github.io/react/docs/shallow-compare.html
19096
19669
  */
19097
19670
  function shallowCompare(instance, nextProps, nextState) {
19098
19671
  return !shallowEqual(instance.props, nextProps) || !shallowEqual(instance.state, nextState);
@@ -19156,8 +19729,8 @@ module.exports = shouldUpdateReactComponent;
19156
19729
 
19157
19730
  'use strict';
19158
19731
 
19159
- var ReactCurrentOwner = _dereq_(39);
19160
- var ReactElement = _dereq_(66);
19732
+ var ReactCurrentOwner = _dereq_(40);
19733
+ var ReactElement = _dereq_(65);
19161
19734
 
19162
19735
  var getIteratorFn = _dereq_(139);
19163
19736
  var invariant = _dereq_(173);
@@ -19301,7 +19874,7 @@ function traverseAllChildren(children, callback, traverseContext) {
19301
19874
  }
19302
19875
 
19303
19876
  module.exports = traverseAllChildren;
19304
- },{"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){
19305
19878
  /**
19306
19879
  * Copyright 2013-present, Facebook, Inc.
19307
19880
  * All rights reserved.
@@ -19354,6 +19927,10 @@ function invariantArrayCase(value, spec, command) {
19354
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;
19355
19928
  }
19356
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
+ */
19357
19934
  function update(value, spec) {
19358
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;
19359
19936
 
@@ -21121,8 +21698,8 @@ if ("development" !== 'production') {
21121
21698
 
21122
21699
  module.exports = warning;
21123
21700
  },{"165":165}],184:[function(_dereq_,module,exports){
21124
- /* eslint-disable no-unused-vars */
21125
21701
  'use strict';
21702
+ /* eslint-disable no-unused-vars */
21126
21703
  var hasOwnProperty = Object.prototype.hasOwnProperty;
21127
21704
  var propIsEnumerable = Object.prototype.propertyIsEnumerable;
21128
21705
 
@@ -21134,7 +21711,51 @@ function toObject(val) {
21134
21711
  return Object(val);
21135
21712
  }
21136
21713
 
21137
- module.exports = Object.assign || function (target, source) {
21714
+ function shouldUseNative() {
21715
+ try {
21716
+ if (!Object.assign) {
21717
+ return false;
21718
+ }
21719
+
21720
+ // Detect buggy property enumeration order in older V8 versions.
21721
+
21722
+ // https://bugs.chromium.org/p/v8/issues/detail?id=4118
21723
+ var test1 = new String('abc'); // eslint-disable-line
21724
+ test1[5] = 'de';
21725
+ if (Object.getOwnPropertyNames(test1)[0] === '5') {
21726
+ return false;
21727
+ }
21728
+
21729
+ // https://bugs.chromium.org/p/v8/issues/detail?id=3056
21730
+ var test2 = {};
21731
+ for (var i = 0; i < 10; i++) {
21732
+ test2['_' + String.fromCharCode(i)] = i;
21733
+ }
21734
+ var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
21735
+ return test2[n];
21736
+ });
21737
+ if (order2.join('') !== '0123456789') {
21738
+ return false;
21739
+ }
21740
+
21741
+ // https://bugs.chromium.org/p/v8/issues/detail?id=3056
21742
+ var test3 = {};
21743
+ 'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
21744
+ test3[letter] = letter;
21745
+ });
21746
+ if (Object.keys(Object.assign({}, test3)).join('') !==
21747
+ 'abcdefghijklmnopqrst') {
21748
+ return false;
21749
+ }
21750
+
21751
+ return true;
21752
+ } catch (e) {
21753
+ // We don't expect any of the above to throw, but better to be safe.
21754
+ return false;
21755
+ }
21756
+ }
21757
+
21758
+ module.exports = shouldUseNative() ? Object.assign : function (target, source) {
21138
21759
  var from;
21139
21760
  var to = toObject(target);
21140
21761
  var symbols;