@samitouri / QOS-React / commits / f40e6dbc76

Update website for 15.2.0

(cherry picked from commit 3a6584b2eebfa27b416ccc2b4a3c3fc8be1ff3ae)

Paul O’Shannessy committed Jul 1, 2016 at 11:41 UTC f40e6dbc76fe22228b1df7a7e5ec23775c402d71
4 files changed +1865 -1255
docs/_config.yml
+8 -8
@@ -38,11 +38,11 @@ gems:
38 - jekyll-redirect-from
39 react_version: 15.1.0
40 react_hashes:
41 - dev: I9uU7ZWS2zpxPvpUfutJ7LD6Mmzk3pvvBCbfC7/imYVdtuPR9hRiLIJrVIZilwht
42 - prod: 3aKuzevuBSs0FfxObUZ42KUGqneCk7kh9g7/aZ+Yzf5MhucA9KvfUSH5jcma9kdZ
43 - addons_dev: 5jJyZhvy/Kkt6uTW3AY3U6bZ+0yDAS7NQDHExu76Zmoa6ABy5g42MoGj9pgeELqf
44 - addons_prod: JkeMnC7xa++rlt5smrQVlrrBdYEy0WJbF78QOIpdQeg7UCUjWF3/gyNC/IVh5s4l
45 - dom_dev: MWQ0uDsZsWizHa2PvAdb45Y1JXy+oLZPc0fabiueWS4rOZuKXDzqf12jjKMF8u3t
46 - dom_prod: tEAvCNm5NozfOX3D8eOmg6E7CUNRQEaLq9xPqVr9ii9BW1cVXiuHKqrXUh3W7wg5
47 - dom_server_dev: WTaEVUVSSkUY+GTjvLO65ZjnLMR2BBa+WkXF1F4rVIxqoMnxFcjugmyoxYwXMmF6
48 - dom_server_prod: rFqq5Djim9lOAYssAJTvdJhtcGdz328JIjbcDq/5/r5DLwYyl8esZ1C0+CKeSXxo
41 + dev: vck4RVcD/d8oCyYODNkyY5bF8we4hBqLNCQzIsK1n4eN+WTWkSMaXH8Bl0ByIaMd
42 + prod: SA/uTNKFAqs8tVn1gROCqtn9Y/waa33EiLYKD7iALN+MDxP1DWBEWPCPmSkYzdsa
43 + addons_dev: Bhsz0xzA1wDnGOSV7KbIL0pKaNOZ5KdPxqVOZTwVyU5NfUGDgN56LTVPVrGi3cMy
44 + addons_prod: Gi+revrP36Zmqp/aqipOToEggqK5NWoKz1B1SUgiA1/OwV+pR8FqnU/VdfzizfUf
45 + dom_dev: 0D/X+kBzzy9hGstygpjpkksS9+WWyG0B/ZfKROdwJ4h6BbJLCnL8lodLYYXxEunS
46 + dom_prod: eZbWlQZOpUJXnnogcw4IRZvbGDRjAOpZvOEe932rEg0fhFmXXnaN9bLP/x1RbB6D
47 + dom_server_dev: oo6/aLeY4xKtb+MetozfT9WlfPcJq6wnqeIT6suwaeA/qPaSG7B1wWvM8WLATV7Z
48 + dom_server_prod: m3fk/O7t/S25hafVhhsrQ7YwjLJdqNNZwgYsAXft24YSrPXysowaoqpQokZO1lsI
docs/downloads/react-15.2.0.zip
Binary files /dev/null and b/docs/downloads/react-15.2.0.zip differ
docs/js/react-dom.js
+1 -1
@@ -1,5 +1,5 @@
1 /**
2 - * ReactDOM v15.1.0
2 + * ReactDOM v15.2.0
3 *
4 * Copyright 2013-present, Facebook, Inc.
5 * All rights reserved.
docs/js/react.js
+1856 -1246
@@ -1,5 +1,5 @@
1 /**
2 - * React v15.1.0
2 + * React v15.2.0
3 */
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 /**
@@ -17,7 +17,7 @@
17
18 var ReactDOMComponentTree = _dereq_(41);
19
20 -var focusNode = _dereq_(151);
20 +var focusNode = _dereq_(153);
21
22 var AutoFocusUtils = {
23 focusDOMComponent: function () {
@@ -26,7 +26,7 @@ var AutoFocusUtils = {
26 };
27
28 module.exports = AutoFocusUtils;
29 -},{"151":151,"41":41}],2:[function(_dereq_,module,exports){
29 +},{"153":153,"41":41}],2:[function(_dereq_,module,exports){
30 /**
31 * Copyright 2013-present Facebook, Inc.
32 * All rights reserved.
@@ -42,12 +42,12 @@ module.exports = AutoFocusUtils;
42
43 var EventConstants = _dereq_(16);
44 var EventPropagators = _dereq_(20);
45 -var ExecutionEnvironment = _dereq_(143);
45 +var ExecutionEnvironment = _dereq_(145);
46 var FallbackCompositionState = _dereq_(21);
47 var SyntheticCompositionEvent = _dereq_(100);
48 var SyntheticInputEvent = _dereq_(104);
49
50 -var keyOf = _dereq_(161);
50 +var keyOf = _dereq_(163);
51
52 var END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space
53 var START_KEYCODE = 229;
@@ -415,7 +415,7 @@ var BeforeInputEventPlugin = {
415 };
416
417 module.exports = BeforeInputEventPlugin;
418 -},{"100":100,"104":104,"143":143,"16":16,"161":161,"20":20,"21":21}],3:[function(_dereq_,module,exports){
418 +},{"100":100,"104":104,"145":145,"16":16,"163":163,"20":20,"21":21}],3:[function(_dereq_,module,exports){
419 /**
420 * Copyright 2013-present, Facebook, Inc.
421 * All rights reserved.
@@ -579,14 +579,14 @@ module.exports = CSSProperty;
579 'use strict';
580
581 var CSSProperty = _dereq_(3);
582 -var ExecutionEnvironment = _dereq_(143);
583 -var ReactInstrumentation = _dereq_(71);
582 +var ExecutionEnvironment = _dereq_(145);
583 +var ReactInstrumentation = _dereq_(73);
584
585 -var camelizeStyleName = _dereq_(145);
586 -var dangerousStyleValue = _dereq_(117);
587 -var hyphenateStyleName = _dereq_(156);
588 -var memoizeStringOnly = _dereq_(163);
589 -var warning = _dereq_(167);
585 +var camelizeStyleName = _dereq_(147);
586 +var dangerousStyleValue = _dereq_(118);
587 +var hyphenateStyleName = _dereq_(158);
588 +var memoizeStringOnly = _dereq_(165);
589 +var warning = _dereq_(169);
590
591 var processStyleName = memoizeStringOnly(function (styleName) {
592 return hyphenateStyleName(styleName);
@@ -735,7 +735,7 @@ var CSSPropertyOperations = {
735 */
736 setValueForStyles: function (node, styles, component) {
737 if ("development" !== 'production') {
738 - ReactInstrumentation.debugTool.onNativeOperation(component._debugID, 'update styles', styles);
738 + ReactInstrumentation.debugTool.onHostOperation(component._debugID, 'update styles', styles);
739 }
740
741 var style = node.style;
@@ -770,7 +770,7 @@ var CSSPropertyOperations = {
770 };
771
772 module.exports = CSSPropertyOperations;
773 -},{"117":117,"143":143,"145":145,"156":156,"163":163,"167":167,"3":3,"71":71}],5:[function(_dereq_,module,exports){
773 +},{"118":118,"145":145,"147":147,"158":158,"165":165,"169":169,"3":3,"73":73}],5:[function(_dereq_,module,exports){
774 /**
775 * Copyright 2013-present, Facebook, Inc.
776 * All rights reserved.
@@ -784,11 +784,12 @@ module.exports = CSSPropertyOperations;
784
785 'use strict';
786
787 -var _assign = _dereq_(168);
787 +var _prodInvariant = _dereq_(137),
788 + _assign = _dereq_(170);
789
790 var PooledClass = _dereq_(25);
791
791 -var invariant = _dereq_(157);
792 +var invariant = _dereq_(159);
793
794 /**
795 * A specialized pseudo-event module to help keep track of components waiting to
@@ -832,7 +833,7 @@ _assign(CallbackQueue.prototype, {
833 var callbacks = this._callbacks;
834 var contexts = this._contexts;
835 if (callbacks) {
835 - !(callbacks.length === contexts.length) ? "development" !== 'production' ? invariant(false, 'Mismatched list of contexts in callback queue') : invariant(false) : void 0;
836 + !(callbacks.length === contexts.length) ? "development" !== 'production' ? invariant(false, 'Mismatched list of contexts in callback queue') : _prodInvariant('24') : void 0;
837 this._callbacks = null;
838 this._contexts = null;
839 for (var i = 0; i < callbacks.length; i++) {
@@ -876,7 +877,7 @@ _assign(CallbackQueue.prototype, {
877 PooledClass.addPoolingTo(CallbackQueue);
878
879 module.exports = CallbackQueue;
879 -},{"157":157,"168":168,"25":25}],6:[function(_dereq_,module,exports){
880 +},{"137":137,"159":159,"170":170,"25":25}],6:[function(_dereq_,module,exports){
881 /**
882 * Copyright 2013-present, Facebook, Inc.
883 * All rights reserved.
@@ -893,15 +894,15 @@ module.exports = CallbackQueue;
894 var EventConstants = _dereq_(16);
895 var EventPluginHub = _dereq_(17);
896 var EventPropagators = _dereq_(20);
896 -var ExecutionEnvironment = _dereq_(143);
897 +var ExecutionEnvironment = _dereq_(145);
898 var ReactDOMComponentTree = _dereq_(41);
899 var ReactUpdates = _dereq_(93);
900 var SyntheticEvent = _dereq_(102);
901
901 -var getEventTarget = _dereq_(125);
902 -var isEventSupported = _dereq_(132);
903 -var isTextInputElement = _dereq_(133);
904 -var keyOf = _dereq_(161);
902 +var getEventTarget = _dereq_(126);
903 +var isEventSupported = _dereq_(133);
904 +var isTextInputElement = _dereq_(134);
905 +var keyOf = _dereq_(163);
906
907 var topLevelTypes = EventConstants.topLevelTypes;
908
@@ -1202,7 +1203,7 @@ var ChangeEventPlugin = {
1203 };
1204
1205 module.exports = ChangeEventPlugin;
1205 -},{"102":102,"125":125,"132":132,"133":133,"143":143,"16":16,"161":161,"17":17,"20":20,"41":41,"93":93}],7:[function(_dereq_,module,exports){
1206 +},{"102":102,"126":126,"133":133,"134":134,"145":145,"16":16,"163":163,"17":17,"20":20,"41":41,"93":93}],7:[function(_dereq_,module,exports){
1207 /**
1208 * Copyright 2013-present, Facebook, Inc.
1209 * All rights reserved.
@@ -1218,17 +1219,17 @@ module.exports = ChangeEventPlugin;
1219
1220 var DOMLazyTree = _dereq_(8);
1221 var Danger = _dereq_(12);
1221 -var ReactMultiChildUpdateTypes = _dereq_(76);
1222 +var ReactMultiChildUpdateTypes = _dereq_(78);
1223 var ReactDOMComponentTree = _dereq_(41);
1223 -var ReactInstrumentation = _dereq_(71);
1224 +var ReactInstrumentation = _dereq_(73);
1225
1225 -var createMicrosoftUnsafeLocalFunction = _dereq_(116);
1226 -var setInnerHTML = _dereq_(137);
1227 -var setTextContent = _dereq_(138);
1226 +var createMicrosoftUnsafeLocalFunction = _dereq_(117);
1227 +var setInnerHTML = _dereq_(139);
1228 +var setTextContent = _dereq_(140);
1229
1230 function getNodeAfter(parentNode, node) {
1231 // Special case for text components, which return [open, close] comments
1231 - // from getNativeNode.
1232 + // from getHostNode.
1233 if (Array.isArray(node)) {
1234 node = node[1];
1235 }
@@ -1317,7 +1318,7 @@ function replaceDelimitedText(openingComment, closingComment, stringText) {
1318 }
1319
1320 if ("development" !== 'production') {
1320 - ReactInstrumentation.debugTool.onNativeOperation(ReactDOMComponentTree.getInstanceFromNode(openingComment)._debugID, 'replace text', stringText);
1321 + ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(openingComment)._debugID, 'replace text', stringText);
1322 }
1323 }
1324
@@ -1326,11 +1327,11 @@ if ("development" !== 'production') {
1327 dangerouslyReplaceNodeWithMarkup = function (oldChild, markup, prevInstance) {
1328 Danger.dangerouslyReplaceNodeWithMarkup(oldChild, markup);
1329 if (prevInstance._debugID !== 0) {
1329 - ReactInstrumentation.debugTool.onNativeOperation(prevInstance._debugID, 'replace with', markup.toString());
1330 + ReactInstrumentation.debugTool.onHostOperation(prevInstance._debugID, 'replace with', markup.toString());
1331 } else {
1332 var nextInstance = ReactDOMComponentTree.getInstanceFromNode(markup.node);
1333 if (nextInstance._debugID !== 0) {
1333 - ReactInstrumentation.debugTool.onNativeOperation(nextInstance._debugID, 'mount', markup.toString());
1334 + ReactInstrumentation.debugTool.onHostOperation(nextInstance._debugID, 'mount', markup.toString());
1335 }
1336 }
1337 };
@@ -1363,31 +1364,31 @@ var DOMChildrenOperations = {
1364 case ReactMultiChildUpdateTypes.INSERT_MARKUP:
1365 insertLazyTreeChildAt(parentNode, update.content, getNodeAfter(parentNode, update.afterNode));
1366 if ("development" !== 'production') {
1366 - ReactInstrumentation.debugTool.onNativeOperation(parentNodeDebugID, 'insert child', { toIndex: update.toIndex, content: update.content.toString() });
1367 + ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'insert child', { toIndex: update.toIndex, content: update.content.toString() });
1368 }
1369 break;
1370 case ReactMultiChildUpdateTypes.MOVE_EXISTING:
1371 moveChild(parentNode, update.fromNode, getNodeAfter(parentNode, update.afterNode));
1372 if ("development" !== 'production') {
1372 - ReactInstrumentation.debugTool.onNativeOperation(parentNodeDebugID, 'move child', { fromIndex: update.fromIndex, toIndex: update.toIndex });
1373 + ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'move child', { fromIndex: update.fromIndex, toIndex: update.toIndex });
1374 }
1375 break;
1376 case ReactMultiChildUpdateTypes.SET_MARKUP:
1377 setInnerHTML(parentNode, update.content);
1378 if ("development" !== 'production') {
1378 - ReactInstrumentation.debugTool.onNativeOperation(parentNodeDebugID, 'replace children', update.content.toString());
1379 + ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'replace children', update.content.toString());
1380 }
1381 break;
1382 case ReactMultiChildUpdateTypes.TEXT_CONTENT:
1383 setTextContent(parentNode, update.content);
1384 if ("development" !== 'production') {
1384 - ReactInstrumentation.debugTool.onNativeOperation(parentNodeDebugID, 'replace text', update.content.toString());
1385 + ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'replace text', update.content.toString());
1386 }
1387 break;
1388 case ReactMultiChildUpdateTypes.REMOVE_NODE:
1389 removeChild(parentNode, update.fromNode);
1390 if ("development" !== 'production') {
1390 - ReactInstrumentation.debugTool.onNativeOperation(parentNodeDebugID, 'remove child', { fromIndex: update.fromIndex });
1391 + ReactInstrumentation.debugTool.onHostOperation(parentNodeDebugID, 'remove child', { fromIndex: update.fromIndex });
1392 }
1393 break;
1394 }
@@ -1397,7 +1398,7 @@ var DOMChildrenOperations = {
1398 };
1399
1400 module.exports = DOMChildrenOperations;
1400 -},{"116":116,"12":12,"137":137,"138":138,"41":41,"71":71,"76":76,"8":8}],8:[function(_dereq_,module,exports){
1401 +},{"117":117,"12":12,"139":139,"140":140,"41":41,"73":73,"78":78,"8":8}],8:[function(_dereq_,module,exports){
1402 /**
1403 * Copyright 2015-present, Facebook, Inc.
1404 * All rights reserved.
@@ -1412,9 +1413,10 @@ module.exports = DOMChildrenOperations;
1413 'use strict';
1414
1415 var DOMNamespaces = _dereq_(9);
1416 +var setInnerHTML = _dereq_(139);
1417
1416 -var createMicrosoftUnsafeLocalFunction = _dereq_(116);
1417 -var setTextContent = _dereq_(138);
1418 +var createMicrosoftUnsafeLocalFunction = _dereq_(117);
1419 +var setTextContent = _dereq_(140);
1420
1421 var ELEMENT_NODE_TYPE = 1;
1422 var DOCUMENT_FRAGMENT_NODE_TYPE = 11;
@@ -1443,7 +1445,7 @@ function insertTreeChildren(tree) {
1445 insertTreeBefore(node, children[i], null);
1446 }
1447 } else if (tree.html != null) {
1446 - node.innerHTML = tree.html;
1448 + setInnerHTML(node, tree.html);
1449 } else if (tree.text != null) {
1450 setTextContent(node, tree.text);
1451 }
@@ -1482,7 +1484,7 @@ function queueHTML(tree, html) {
1484 if (enableLazy) {
1485 tree.html = html;
1486 } else {
1485 - tree.node.innerHTML = html;
1487 + setInnerHTML(tree.node, html);
1488 }
1489 }
1490
@@ -1515,7 +1517,7 @@ DOMLazyTree.queueHTML = queueHTML;
1517 DOMLazyTree.queueText = queueText;
1518
1519 module.exports = DOMLazyTree;
1518 -},{"116":116,"138":138,"9":9}],9:[function(_dereq_,module,exports){
1520 +},{"117":117,"139":139,"140":140,"9":9}],9:[function(_dereq_,module,exports){
1521 /**
1522 * Copyright 2013-present, Facebook, Inc.
1523 * All rights reserved.
@@ -1550,7 +1552,9 @@ module.exports = DOMNamespaces;
1552
1553 'use strict';
1554
1553 -var invariant = _dereq_(157);
1555 +var _prodInvariant = _dereq_(137);
1556 +
1557 +var invariant = _dereq_(159);
1558
1559 function checkMask(value, bitmask) {
1560 return (value & bitmask) === bitmask;
@@ -1609,7 +1613,7 @@ var DOMPropertyInjection = {
1613 }
1614
1615 for (var propName in Properties) {
1612 - !!DOMProperty.properties.hasOwnProperty(propName) ? "development" !== 'production' ? invariant(false, 'injectDOMPropertyConfig(...): You\'re trying to inject DOM property ' + '\'%s\' which has already been injected. You may be accidentally ' + 'injecting the same DOM property config twice, or you may be ' + 'injecting two configs that have conflicting property names.', propName) : invariant(false) : void 0;
1616 + !!DOMProperty.properties.hasOwnProperty(propName) ? "development" !== 'production' ? invariant(false, 'injectDOMPropertyConfig(...): You\'re trying to inject DOM property \'%s\' which has already been injected. You may be accidentally injecting the same DOM property config twice, or you may be injecting two configs that have conflicting property names.', propName) : _prodInvariant('48', propName) : void 0;
1617
1618 var lowerCased = propName.toLowerCase();
1619 var propConfig = Properties[propName];
@@ -1628,8 +1632,8 @@ var DOMPropertyInjection = {
1632 hasOverloadedBooleanValue: checkMask(propConfig, Injection.HAS_OVERLOADED_BOOLEAN_VALUE)
1633 };
1634
1631 - !(propertyInfo.mustUseProperty || !propertyInfo.hasSideEffects) ? "development" !== 'production' ? invariant(false, 'DOMProperty: Properties that have side effects must use property: %s', propName) : invariant(false) : void 0;
1632 - !(propertyInfo.hasBooleanValue + propertyInfo.hasNumericValue + propertyInfo.hasOverloadedBooleanValue <= 1) ? "development" !== 'production' ? invariant(false, 'DOMProperty: Value can be one of boolean, overloaded boolean, or ' + 'numeric value, but not a combination: %s', propName) : invariant(false) : void 0;
1635 + !(propertyInfo.mustUseProperty || !propertyInfo.hasSideEffects) ? "development" !== 'production' ? invariant(false, 'DOMProperty: Properties that have side effects must use property: %s', propName) : _prodInvariant('49', propName) : void 0;
1636 + !(propertyInfo.hasBooleanValue + propertyInfo.hasNumericValue + propertyInfo.hasOverloadedBooleanValue <= 1) ? "development" !== 'production' ? invariant(false, 'DOMProperty: Value can be one of boolean, overloaded boolean, or numeric value, but not a combination: %s', propName) : _prodInvariant('50', propName) : void 0;
1637
1638 if ("development" !== 'production') {
1639 DOMProperty.getPossibleStandardName[lowerCased] = propName;
@@ -1683,7 +1687,7 @@ var DOMProperty = {
1687 ROOT_ATTRIBUTE_NAME: 'data-reactroot',
1688
1689 ATTRIBUTE_NAME_START_CHAR: ATTRIBUTE_NAME_START_CHAR,
1686 - ATTRIBUTE_NAME_CHAR: ATTRIBUTE_NAME_START_CHAR + '\\-.0-9\\uB7\\u0300-\\u036F\\u203F-\\u2040',
1690 + ATTRIBUTE_NAME_CHAR: ATTRIBUTE_NAME_START_CHAR + '\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040',
1691
1692 /**
1693 * Map from property "standard name" to an object with info about how to set
@@ -1750,7 +1754,7 @@ var DOMProperty = {
1754 };
1755
1756 module.exports = DOMProperty;
1753 -},{"157":157}],11:[function(_dereq_,module,exports){
1757 +},{"137":137,"159":159}],11:[function(_dereq_,module,exports){
1758 /**
1759 * Copyright 2013-present, Facebook, Inc.
1760 * All rights reserved.
@@ -1767,10 +1771,10 @@ module.exports = DOMProperty;
1771 var DOMProperty = _dereq_(10);
1772 var ReactDOMComponentTree = _dereq_(41);
1773 var ReactDOMInstrumentation = _dereq_(49);
1770 -var ReactInstrumentation = _dereq_(71);
1774 +var ReactInstrumentation = _dereq_(73);
1775
1772 -var quoteAttributeValueForBrowser = _dereq_(135);
1773 -var warning = _dereq_(167);
1776 +var quoteAttributeValueForBrowser = _dereq_(136);
1777 +var warning = _dereq_(169);
1778
1779 var VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + DOMProperty.ATTRIBUTE_NAME_START_CHAR + '][' + DOMProperty.ATTRIBUTE_NAME_CHAR + ']*$');
1780 var illegalAttributeNameCache = {};
@@ -1914,7 +1918,7 @@ var DOMPropertyOperations = {
1918 ReactDOMInstrumentation.debugTool.onSetValueForProperty(node, name, value);
1919 var payload = {};
1920 payload[name] = value;
1917 - ReactInstrumentation.debugTool.onNativeOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'update attribute', payload);
1921 + ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'update attribute', payload);
1922 }
1923 },
1924
@@ -1931,7 +1935,21 @@ var DOMPropertyOperations = {
1935 if ("development" !== 'production') {
1936 var payload = {};
1937 payload[name] = value;
1934 - ReactInstrumentation.debugTool.onNativeOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'update attribute', payload);
1938 + ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'update attribute', payload);
1939 + }
1940 + },
1941 +
1942 + /**
1943 + * Deletes an attributes from a node.
1944 + *
1945 + * @param {DOMElement} node
1946 + * @param {string} name
1947 + */
1948 + deleteValueForAttribute: function (node, name) {
1949 + node.removeAttribute(name);
1950 + if ("development" !== 'production') {
1951 + ReactDOMInstrumentation.debugTool.onDeleteValueForProperty(node, name);
1952 + ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'remove attribute', name);
1953 }
1954 },
1955
@@ -1966,14 +1984,14 @@ var DOMPropertyOperations = {
1984
1985 if ("development" !== 'production') {
1986 ReactDOMInstrumentation.debugTool.onDeleteValueForProperty(node, name);
1969 - ReactInstrumentation.debugTool.onNativeOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'remove attribute', name);
1987 + ReactInstrumentation.debugTool.onHostOperation(ReactDOMComponentTree.getInstanceFromNode(node)._debugID, 'remove attribute', name);
1988 }
1989 }
1990
1991 };
1992
1993 module.exports = DOMPropertyOperations;
1976 -},{"10":10,"135":135,"167":167,"41":41,"49":49,"71":71}],12:[function(_dereq_,module,exports){
1994 +},{"10":10,"136":136,"169":169,"41":41,"49":49,"73":73}],12:[function(_dereq_,module,exports){
1995 /**
1996 * Copyright 2013-present, Facebook, Inc.
1997 * All rights reserved.
@@ -1987,13 +2005,15 @@ module.exports = DOMPropertyOperations;
2005
2006 'use strict';
2007
2008 +var _prodInvariant = _dereq_(137);
2009 +
2010 var DOMLazyTree = _dereq_(8);
1991 -var ExecutionEnvironment = _dereq_(143);
2011 +var ExecutionEnvironment = _dereq_(145);
2012
1993 -var createNodesFromMarkup = _dereq_(148);
1994 -var emptyFunction = _dereq_(149);
1995 -var getMarkupWrap = _dereq_(153);
1996 -var invariant = _dereq_(157);
2013 +var createNodesFromMarkup = _dereq_(150);
2014 +var emptyFunction = _dereq_(151);
2015 +var getMarkupWrap = _dereq_(155);
2016 +var invariant = _dereq_(159);
2017
2018 var OPEN_TAG_NAME_EXP = /^(<[^ \/>]+)/;
2019 var RESULT_INDEX_ATTR = 'data-danger-index';
@@ -2025,12 +2045,12 @@ var Danger = {
2045 * @internal
2046 */
2047 dangerouslyRenderMarkup: function (markupList) {
2028 - !ExecutionEnvironment.canUseDOM ? "development" !== 'production' ? invariant(false, 'dangerouslyRenderMarkup(...): Cannot render markup in a worker ' + 'thread. Make sure `window` and `document` are available globally ' + 'before requiring React when unit testing or use ' + 'ReactDOMServer.renderToString for server rendering.') : invariant(false) : void 0;
2048 + !ExecutionEnvironment.canUseDOM ? "development" !== 'production' ? invariant(false, 'dangerouslyRenderMarkup(...): Cannot render markup in a worker thread. Make sure `window` and `document` are available globally before requiring React when unit testing or use ReactDOMServer.renderToString for server rendering.') : _prodInvariant('51') : void 0;
2049 var nodeName;
2050 var markupByNodeName = {};
2051 // Group markup by `nodeName` if a wrap is necessary, else by '*'.
2052 for (var i = 0; i < markupList.length; i++) {
2033 - !markupList[i] ? "development" !== 'production' ? invariant(false, 'dangerouslyRenderMarkup(...): Missing markup.') : invariant(false) : void 0;
2053 + !markupList[i] ? "development" !== 'production' ? invariant(false, 'dangerouslyRenderMarkup(...): Missing markup.') : _prodInvariant('52') : void 0;
2054 nodeName = getNodeName(markupList[i]);
2055 nodeName = getMarkupWrap(nodeName) ? nodeName : '*';
2056 markupByNodeName[nodeName] = markupByNodeName[nodeName] || [];
@@ -2072,7 +2092,7 @@ var Danger = {
2092 resultIndex = +renderNode.getAttribute(RESULT_INDEX_ATTR);
2093 renderNode.removeAttribute(RESULT_INDEX_ATTR);
2094
2075 - !!resultList.hasOwnProperty(resultIndex) ? "development" !== 'production' ? invariant(false, 'Danger: Assigning to an already-occupied result index.') : invariant(false) : void 0;
2095 + !!resultList.hasOwnProperty(resultIndex) ? "development" !== 'production' ? invariant(false, 'Danger: Assigning to an already-occupied result index.') : _prodInvariant('53') : void 0;
2096
2097 resultList[resultIndex] = renderNode;
2098
@@ -2087,9 +2107,9 @@ var Danger = {
2107
2108 // Although resultList was populated out of order, it should now be a dense
2109 // array.
2090 - !(resultListAssignmentCount === resultList.length) ? "development" !== 'production' ? invariant(false, 'Danger: Did not assign to every index of resultList.') : invariant(false) : void 0;
2110 + !(resultListAssignmentCount === resultList.length) ? "development" !== 'production' ? invariant(false, 'Danger: Did not assign to every index of resultList.') : _prodInvariant('54') : void 0;
2111
2092 - !(resultList.length === markupList.length) ? "development" !== 'production' ? invariant(false, 'Danger: Expected markup to render %s nodes, but rendered %s.', markupList.length, resultList.length) : invariant(false) : void 0;
2112 + !(resultList.length === markupList.length) ? "development" !== 'production' ? invariant(false, 'Danger: Expected markup to render %s nodes, but rendered %s.', markupList.length, resultList.length) : _prodInvariant('55', markupList.length, resultList.length) : void 0;
2113
2114 return resultList;
2115 },
@@ -2103,9 +2123,9 @@ var Danger = {
2123 * @internal
2124 */
2125 dangerouslyReplaceNodeWithMarkup: function (oldChild, markup) {
2106 - !ExecutionEnvironment.canUseDOM ? "development" !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot render markup in a ' + 'worker thread. Make sure `window` and `document` are available ' + 'globally before requiring React when unit testing or use ' + 'ReactDOMServer.renderToString() for server rendering.') : invariant(false) : void 0;
2107 - !markup ? "development" !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Missing markup.') : invariant(false) : void 0;
2108 - !(oldChild.nodeName !== 'HTML') ? "development" !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot replace markup of the ' + '<html> node. This is because browser quirks make this unreliable ' + 'and/or slow. If you want to render to the root you must use ' + 'server rendering. See ReactDOMServer.renderToString().') : invariant(false) : void 0;
2126 + !ExecutionEnvironment.canUseDOM ? "development" !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot render markup in a worker thread. Make sure `window` and `document` are available globally before requiring React when unit testing or use ReactDOMServer.renderToString() for server rendering.') : _prodInvariant('56') : void 0;
2127 + !markup ? "development" !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Missing markup.') : _prodInvariant('57') : void 0;
2128 + !(oldChild.nodeName !== 'HTML') ? "development" !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot replace markup of the <html> node. This is because browser quirks make this unreliable and/or slow. If you want to render to the root you must use server rendering. See ReactDOMServer.renderToString().') : _prodInvariant('58') : void 0;
2129
2130 if (typeof markup === 'string') {
2131 var newChild = createNodesFromMarkup(markup, emptyFunction)[0];
@@ -2118,7 +2138,7 @@ var Danger = {
2138 };
2139
2140 module.exports = Danger;
2121 -},{"143":143,"148":148,"149":149,"153":153,"157":157,"8":8}],13:[function(_dereq_,module,exports){
2141 +},{"137":137,"145":145,"150":150,"151":151,"155":155,"159":159,"8":8}],13:[function(_dereq_,module,exports){
2142 /**
2143 * Copyright 2013-present, Facebook, Inc.
2144 * All rights reserved.
@@ -2132,7 +2152,7 @@ module.exports = Danger;
2152
2153 'use strict';
2154
2135 -var keyOf = _dereq_(161);
2155 +var keyOf = _dereq_(163);
2156
2157 /**
2158 * Module that is injectable into `EventPluginHub`, that specifies a
@@ -2146,7 +2166,7 @@ var keyOf = _dereq_(161);
2166 var DefaultEventPluginOrder = [keyOf({ ResponderEventPlugin: null }), keyOf({ SimpleEventPlugin: null }), keyOf({ TapEventPlugin: null }), keyOf({ EnterLeaveEventPlugin: null }), keyOf({ ChangeEventPlugin: null }), keyOf({ SelectEventPlugin: null }), keyOf({ BeforeInputEventPlugin: null })];
2167
2168 module.exports = DefaultEventPluginOrder;
2149 -},{"161":161}],14:[function(_dereq_,module,exports){
2169 +},{"163":163}],14:[function(_dereq_,module,exports){
2170 /**
2171 * Copyright 2013-present, Facebook, Inc.
2172 * All rights reserved.
@@ -2175,24 +2195,24 @@ var disableableMouseListenerNames = {
2195 };
2196
2197 /**
2178 - * Implements a native component that does not receive mouse events
2198 + * Implements a host component that does not receive mouse events
2199 * when `disabled` is set.
2200 */
2201 var DisabledInputUtils = {
2182 - getNativeProps: function (inst, props) {
2202 + getHostProps: function (inst, props) {
2203 if (!props.disabled) {
2204 return props;
2205 }
2206
2207 // Copy the props, except the mouse listeners
2188 - var nativeProps = {};
2208 + var hostProps = {};
2209 for (var key in props) {
2210 if (!disableableMouseListenerNames[key] && props.hasOwnProperty(key)) {
2191 - nativeProps[key] = props[key];
2211 + hostProps[key] = props[key];
2212 }
2213 }
2214
2195 - return nativeProps;
2215 + return hostProps;
2216 }
2217 };
2218
@@ -2216,7 +2236,7 @@ var EventPropagators = _dereq_(20);
2236 var ReactDOMComponentTree = _dereq_(41);
2237 var SyntheticMouseEvent = _dereq_(106);
2238
2219 -var keyOf = _dereq_(161);
2239 +var keyOf = _dereq_(163);
2240
2241 var topLevelTypes = EventConstants.topLevelTypes;
2242
@@ -2303,7 +2323,7 @@ var EnterLeaveEventPlugin = {
2323 };
2324
2325 module.exports = EnterLeaveEventPlugin;
2306 -},{"106":106,"16":16,"161":161,"20":20,"41":41}],16:[function(_dereq_,module,exports){
2326 +},{"106":106,"16":16,"163":163,"20":20,"41":41}],16:[function(_dereq_,module,exports){
2327 /**
2328 * Copyright 2013-present, Facebook, Inc.
2329 * All rights reserved.
@@ -2317,7 +2337,7 @@ module.exports = EnterLeaveEventPlugin;
2337
2338 'use strict';
2339
2320 -var keyMirror = _dereq_(160);
2340 +var keyMirror = _dereq_(162);
2341
2342 var PropagationPhases = keyMirror({ bubbled: null, captured: null });
2343
@@ -2401,7 +2421,7 @@ var EventConstants = {
2421 };
2422
2423 module.exports = EventConstants;
2404 -},{"160":160}],17:[function(_dereq_,module,exports){
2424 +},{"162":162}],17:[function(_dereq_,module,exports){
2425 /**
2426 * Copyright 2013-present, Facebook, Inc.
2427 * All rights reserved.
@@ -2415,13 +2435,15 @@ module.exports = EventConstants;
2435
2436 'use strict';
2437
2438 +var _prodInvariant = _dereq_(137);
2439 +
2440 var EventPluginRegistry = _dereq_(18);
2441 var EventPluginUtils = _dereq_(19);
2442 var ReactErrorUtils = _dereq_(64);
2443
2444 var accumulateInto = _dereq_(113);
2423 -var forEachAccumulated = _dereq_(121);
2424 -var invariant = _dereq_(157);
2445 +var forEachAccumulated = _dereq_(122);
2446 +var invariant = _dereq_(159);
2447
2448 /**
2449 * Internal store for event listeners
@@ -2507,7 +2529,7 @@ var EventPluginHub = {
2529 * @param {function} listener The callback to store.
2530 */
2531 putListener: function (inst, registrationName, listener) {
2510 - !(typeof listener === 'function') ? "development" !== 'production' ? invariant(false, 'Expected %s listener to be a function, instead got type %s', registrationName, typeof listener) : invariant(false) : void 0;
2532 + !(typeof listener === 'function') ? "development" !== 'production' ? invariant(false, 'Expected %s listener to be a function, instead got type %s', registrationName, typeof listener) : _prodInvariant('94', registrationName, typeof listener) : void 0;
2533
2534 var bankForRegistrationName = listenerBank[registrationName] || (listenerBank[registrationName] = {});
2535 bankForRegistrationName[inst._rootNodeID] = listener;
@@ -2554,6 +2576,10 @@ var EventPluginHub = {
2576 */
2577 deleteAllListeners: function (inst) {
2578 for (var registrationName in listenerBank) {
2579 + if (!listenerBank.hasOwnProperty(registrationName)) {
2580 + continue;
2581 + }
2582 +
2583 if (!listenerBank[registrationName][inst._rootNodeID]) {
2584 continue;
2585 }
@@ -2618,7 +2644,7 @@ var EventPluginHub = {
2644 } else {
2645 forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseTopLevel);
2646 }
2621 - !!eventQueue ? "development" !== 'production' ? invariant(false, 'processEventQueue(): Additional events were enqueued while processing ' + 'an event queue. Support for this has not yet been implemented.') : invariant(false) : void 0;
2647 + !!eventQueue ? "development" !== 'production' ? invariant(false, 'processEventQueue(): Additional events were enqueued while processing an event queue. Support for this has not yet been implemented.') : _prodInvariant('95') : void 0;
2648 // This would be a good time to rethrow if any of the event handlers threw.
2649 ReactErrorUtils.rethrowCaughtError();
2650 },
@@ -2637,7 +2663,7 @@ var EventPluginHub = {
2663 };
2664
2665 module.exports = EventPluginHub;
2640 -},{"113":113,"121":121,"157":157,"18":18,"19":19,"64":64}],18:[function(_dereq_,module,exports){
2666 +},{"113":113,"122":122,"137":137,"159":159,"18":18,"19":19,"64":64}],18:[function(_dereq_,module,exports){
2667 /**
2668 * Copyright 2013-present, Facebook, Inc.
2669 * All rights reserved.
@@ -2651,7 +2677,9 @@ module.exports = EventPluginHub;
2677
2678 'use strict';
2679
2654 -var invariant = _dereq_(157);
2680 +var _prodInvariant = _dereq_(137);
2681 +
2682 +var invariant = _dereq_(159);
2683
2684 /**
2685 * Injectable ordering of event plugins.
@@ -2676,15 +2704,15 @@ function recomputePluginOrdering() {
2704 for (var pluginName in namesToPlugins) {
2705 var PluginModule = namesToPlugins[pluginName];
2706 var pluginIndex = EventPluginOrder.indexOf(pluginName);
2679 - !(pluginIndex > -1) ? "development" !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugins that do not exist in ' + 'the plugin ordering, `%s`.', pluginName) : invariant(false) : void 0;
2707 + !(pluginIndex > -1) ? "development" !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugins that do not exist in the plugin ordering, `%s`.', pluginName) : _prodInvariant('96', pluginName) : void 0;
2708 if (EventPluginRegistry.plugins[pluginIndex]) {
2709 continue;
2710 }
2683 - !PluginModule.extractEvents ? "development" !== 'production' ? invariant(false, 'EventPluginRegistry: Event plugins must implement an `extractEvents` ' + 'method, but `%s` does not.', pluginName) : invariant(false) : void 0;
2711 + !PluginModule.extractEvents ? "development" !== 'production' ? invariant(false, 'EventPluginRegistry: Event plugins must implement an `extractEvents` method, but `%s` does not.', pluginName) : _prodInvariant('97', pluginName) : void 0;
2712 EventPluginRegistry.plugins[pluginIndex] = PluginModule;
2713 var publishedEvents = PluginModule.eventTypes;
2714 for (var eventName in publishedEvents) {
2687 - !publishEventForPlugin(publishedEvents[eventName], PluginModule, eventName) ? "development" !== 'production' ? invariant(false, 'EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.', eventName, pluginName) : invariant(false) : void 0;
2715 + !publishEventForPlugin(publishedEvents[eventName], PluginModule, eventName) ? "development" !== 'production' ? invariant(false, 'EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.', eventName, pluginName) : _prodInvariant('98', eventName, pluginName) : void 0;
2716 }
2717 }
2718 }
@@ -2698,7 +2726,7 @@ function recomputePluginOrdering() {
2726 * @private
2727 */
2728 function publishEventForPlugin(dispatchConfig, PluginModule, eventName) {
2701 - !!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName) ? "development" !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same ' + 'event name, `%s`.', eventName) : invariant(false) : void 0;
2729 + !!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName) ? "development" !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same event name, `%s`.', eventName) : _prodInvariant('99', eventName) : void 0;
2730 EventPluginRegistry.eventNameDispatchConfigs[eventName] = dispatchConfig;
2731
2732 var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;
@@ -2726,13 +2754,17 @@ function publishEventForPlugin(dispatchConfig, PluginModule, eventName) {
2754 * @private
2755 */
2756 function publishRegistrationName(registrationName, PluginModule, eventName) {
2729 - !!EventPluginRegistry.registrationNameModules[registrationName] ? "development" !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same ' + 'registration name, `%s`.', registrationName) : invariant(false) : void 0;
2757 + !!EventPluginRegistry.registrationNameModules[registrationName] ? "development" !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same registration name, `%s`.', registrationName) : _prodInvariant('100', registrationName) : void 0;
2758 EventPluginRegistry.registrationNameModules[registrationName] = PluginModule;
2759 EventPluginRegistry.registrationNameDependencies[registrationName] = PluginModule.eventTypes[eventName].dependencies;
2760
2761 if ("development" !== 'production') {
2762 var lowerCasedName = registrationName.toLowerCase();
2763 EventPluginRegistry.possibleRegistrationNames[lowerCasedName] = registrationName;
2764 +
2765 + if (registrationName === 'onDoubleClick') {
2766 + EventPluginRegistry.possibleRegistrationNames.ondblclick = registrationName;
2767 + }
2768 }
2769 }
2770
@@ -2781,7 +2813,7 @@ var EventPluginRegistry = {
2813 * @see {EventPluginHub.injection.injectEventPluginOrder}
2814 */
2815 injectEventPluginOrder: function (InjectedEventPluginOrder) {
2784 - !!EventPluginOrder ? "development" !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugin ordering more than ' + 'once. You are likely trying to load more than one copy of React.') : invariant(false) : void 0;
2816 + !!EventPluginOrder ? "development" !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugin ordering more than once. You are likely trying to load more than one copy of React.') : _prodInvariant('101') : void 0;
2817 // Clone the ordering so it cannot be dynamically mutated.
2818 EventPluginOrder = Array.prototype.slice.call(InjectedEventPluginOrder);
2819 recomputePluginOrdering();
@@ -2805,7 +2837,7 @@ var EventPluginRegistry = {
2837 }
2838 var PluginModule = injectedNamesToPlugins[pluginName];
2839 if (!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== PluginModule) {
2808 - !!namesToPlugins[pluginName] ? "development" !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject two different event plugins ' + 'using the same name, `%s`.', pluginName) : invariant(false) : void 0;
2840 + !!namesToPlugins[pluginName] ? "development" !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject two different event plugins using the same name, `%s`.', pluginName) : _prodInvariant('102', pluginName) : void 0;
2841 namesToPlugins[pluginName] = PluginModule;
2842 isOrderingDirty = true;
2843 }
@@ -2879,7 +2911,7 @@ var EventPluginRegistry = {
2911 };
2912
2913 module.exports = EventPluginRegistry;
2882 -},{"157":157}],19:[function(_dereq_,module,exports){
2914 +},{"137":137,"159":159}],19:[function(_dereq_,module,exports){
2915 /**
2916 * Copyright 2013-present, Facebook, Inc.
2917 * All rights reserved.
@@ -2893,11 +2925,13 @@ module.exports = EventPluginRegistry;
2925
2926 'use strict';
2927
2928 +var _prodInvariant = _dereq_(137);
2929 +
2930 var EventConstants = _dereq_(16);
2931 var ReactErrorUtils = _dereq_(64);
2932
2899 -var invariant = _dereq_(157);
2900 -var warning = _dereq_(167);
2933 +var invariant = _dereq_(159);
2934 +var warning = _dereq_(169);
2935
2936 /**
2937 * Injected dependencies:
@@ -3051,7 +3085,7 @@ function executeDirectDispatch(event) {
3085 }
3086 var dispatchListener = event._dispatchListeners;
3087 var dispatchInstance = event._dispatchInstances;
3054 - !!Array.isArray(dispatchListener) ? "development" !== 'production' ? invariant(false, 'executeDirectDispatch(...): Invalid `event`.') : invariant(false) : void 0;
3088 + !!Array.isArray(dispatchListener) ? "development" !== 'production' ? invariant(false, 'executeDirectDispatch(...): Invalid `event`.') : _prodInvariant('103') : void 0;
3089 event.currentTarget = dispatchListener ? EventPluginUtils.getNodeFromInstance(dispatchInstance) : null;
3090 var res = dispatchListener ? dispatchListener(event) : null;
3091 event.currentTarget = null;
@@ -3107,7 +3141,7 @@ var EventPluginUtils = {
3141 };
3142
3143 module.exports = EventPluginUtils;
3110 -},{"157":157,"16":16,"167":167,"64":64}],20:[function(_dereq_,module,exports){
3144 +},{"137":137,"159":159,"16":16,"169":169,"64":64}],20:[function(_dereq_,module,exports){
3145 /**
3146 * Copyright 2013-present, Facebook, Inc.
3147 * All rights reserved.
@@ -3126,8 +3160,8 @@ var EventPluginHub = _dereq_(17);
3160 var EventPluginUtils = _dereq_(19);
3161
3162 var accumulateInto = _dereq_(113);
3129 -var forEachAccumulated = _dereq_(121);
3130 -var warning = _dereq_(167);
3163 +var forEachAccumulated = _dereq_(122);
3164 +var warning = _dereq_(169);
3165
3166 var PropagationPhases = EventConstants.PropagationPhases;
3167 var getListener = EventPluginHub.getListener;
@@ -3245,7 +3279,7 @@ var EventPropagators = {
3279 };
3280
3281 module.exports = EventPropagators;
3248 -},{"113":113,"121":121,"16":16,"167":167,"17":17,"19":19}],21:[function(_dereq_,module,exports){
3282 +},{"113":113,"122":122,"16":16,"169":169,"17":17,"19":19}],21:[function(_dereq_,module,exports){
3283 /**
3284 * Copyright 2013-present, Facebook, Inc.
3285 * All rights reserved.
@@ -3259,11 +3293,11 @@ module.exports = EventPropagators;
3293
3294 'use strict';
3295
3262 -var _assign = _dereq_(168);
3296 +var _assign = _dereq_(170);
3297
3298 var PooledClass = _dereq_(25);
3299
3266 -var getTextContentAccessor = _dereq_(129);
3300 +var getTextContentAccessor = _dereq_(130);
3301
3302 /**
3303 * This helper class stores information about text content of a target node,
@@ -3341,7 +3375,7 @@ _assign(FallbackCompositionState.prototype, {
3375 PooledClass.addPoolingTo(FallbackCompositionState);
3376
3377 module.exports = FallbackCompositionState;
3344 -},{"129":129,"168":168,"25":25}],22:[function(_dereq_,module,exports){
3378 +},{"130":130,"170":170,"25":25}],22:[function(_dereq_,module,exports){
3379 /**
3380 * Copyright 2013-present, Facebook, Inc.
3381 * All rights reserved.
@@ -3359,7 +3393,6 @@ var DOMProperty = _dereq_(10);
3393
3394 var MUST_USE_PROPERTY = DOMProperty.injection.MUST_USE_PROPERTY;
3395 var HAS_BOOLEAN_VALUE = DOMProperty.injection.HAS_BOOLEAN_VALUE;
3362 -var HAS_SIDE_EFFECTS = DOMProperty.injection.HAS_SIDE_EFFECTS;
3396 var HAS_NUMERIC_VALUE = DOMProperty.injection.HAS_NUMERIC_VALUE;
3397 var HAS_POSITIVE_NUMERIC_VALUE = DOMProperty.injection.HAS_POSITIVE_NUMERIC_VALUE;
3398 var HAS_OVERLOADED_BOOLEAN_VALUE = DOMProperty.injection.HAS_OVERLOADED_BOOLEAN_VALUE;
@@ -3493,7 +3526,7 @@ var HTMLDOMPropertyConfig = {
3526 // Setting .type throws on non-<input> tags
3527 type: 0,
3528 useMap: 0,
3496 - value: MUST_USE_PROPERTY | HAS_SIDE_EFFECTS,
3529 + value: 0,
3530 width: 0,
3531 wmode: 0,
3532 wrap: 0,
@@ -3624,11 +3657,13 @@ module.exports = KeyEscapeUtils;
3657
3658 'use strict';
3659
3660 +var _prodInvariant = _dereq_(137);
3661 +
3662 var ReactPropTypes = _dereq_(84);
3663 var ReactPropTypeLocations = _dereq_(83);
3664
3630 -var invariant = _dereq_(157);
3631 -var warning = _dereq_(167);
3665 +var invariant = _dereq_(159);
3666 +var warning = _dereq_(169);
3667
3668 var hasReadOnlyValue = {
3669 'button': true,
@@ -3641,16 +3676,16 @@ var hasReadOnlyValue = {
3676 };
3677
3678 function _assertSingleLink(inputProps) {
3644 - !(inputProps.checkedLink == null || inputProps.valueLink == null) ? "development" !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a valueLink. If you want to use ' + 'checkedLink, you probably don\'t want to use valueLink and vice versa.') : invariant(false) : void 0;
3679 + !(inputProps.checkedLink == null || inputProps.valueLink == null) ? "development" !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a valueLink. If you want to use checkedLink, you probably don\'t want to use valueLink and vice versa.') : _prodInvariant('87') : void 0;
3680 }
3681 function _assertValueLink(inputProps) {
3682 _assertSingleLink(inputProps);
3648 - !(inputProps.value == null && inputProps.onChange == null) ? "development" !== 'production' ? invariant(false, 'Cannot provide a valueLink and a value or onChange event. If you want ' + 'to use value or onChange, you probably don\'t want to use valueLink.') : invariant(false) : void 0;
3683 + !(inputProps.value == null && inputProps.onChange == null) ? "development" !== 'production' ? invariant(false, 'Cannot provide a valueLink and a value or onChange event. If you want to use value or onChange, you probably don\'t want to use valueLink.') : _prodInvariant('88') : void 0;
3684 }
3685
3686 function _assertCheckedLink(inputProps) {
3687 _assertSingleLink(inputProps);
3653 - !(inputProps.checked == null && inputProps.onChange == null) ? "development" !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a checked property or onChange event. ' + 'If you want to use checked or onChange, you probably don\'t want to ' + 'use checkedLink') : invariant(false) : void 0;
3688 + !(inputProps.checked == null && inputProps.onChange == null) ? "development" !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a checked property or onChange event. If you want to use checked or onChange, you probably don\'t want to use checkedLink') : _prodInvariant('89') : void 0;
3689 }
3690
3691 var propTypes = {
@@ -3744,7 +3779,7 @@ var LinkedValueUtils = {
3779 };
3780
3781 module.exports = LinkedValueUtils;
3747 -},{"157":157,"167":167,"83":83,"84":84}],25:[function(_dereq_,module,exports){
3782 +},{"137":137,"159":159,"169":169,"83":83,"84":84}],25:[function(_dereq_,module,exports){
3783 /**
3784 * Copyright 2013-present, Facebook, Inc.
3785 * All rights reserved.
@@ -3758,7 +3793,9 @@ module.exports = LinkedValueUtils;
3793
3794 'use strict';
3795
3761 -var invariant = _dereq_(157);
3796 +var _prodInvariant = _dereq_(137);
3797 +
3798 +var invariant = _dereq_(159);
3799
3800 /**
3801 * Static poolers. Several custom versions for each potential number of
@@ -3824,7 +3861,7 @@ var fiveArgumentPooler = function (a1, a2, a3, a4, a5) {
3861
3862 var standardReleaser = function (instance) {
3863 var Klass = this;
3827 - !(instance instanceof Klass) ? "development" !== 'production' ? invariant(false, 'Trying to release an instance into a pool of a different type.') : invariant(false) : void 0;
3864 + !(instance instanceof Klass) ? "development" !== 'production' ? invariant(false, 'Trying to release an instance into a pool of a different type.') : _prodInvariant('25') : void 0;
3865 instance.destructor();
3866 if (Klass.instancePool.length < Klass.poolSize) {
3867 Klass.instancePool.push(instance);
@@ -3864,7 +3901,7 @@ var PooledClass = {
3901 };
3902
3903 module.exports = PooledClass;
3867 -},{"157":157}],26:[function(_dereq_,module,exports){
3904 +},{"137":137,"159":159}],26:[function(_dereq_,module,exports){
3905 /**
3906 * Copyright 2013-present, Facebook, Inc.
3907 * All rights reserved.
@@ -3878,25 +3915,25 @@ module.exports = PooledClass;
3915
3916 'use strict';
3917
3881 -var _assign = _dereq_(168);
3918 +var _assign = _dereq_(170);
3919
3920 var ReactChildren = _dereq_(29);
3921 var ReactComponent = _dereq_(31);
3922 var ReactClass = _dereq_(30);
3923 var ReactDOMFactories = _dereq_(45);
3924 var ReactElement = _dereq_(61);
3888 -var ReactElementValidator = _dereq_(62);
3925 var ReactPropTypes = _dereq_(84);
3926 var ReactVersion = _dereq_(94);
3927
3892 -var onlyChild = _dereq_(134);
3893 -var warning = _dereq_(167);
3928 +var onlyChild = _dereq_(135);
3929 +var warning = _dereq_(169);
3930
3931 var createElement = ReactElement.createElement;
3932 var createFactory = ReactElement.createFactory;
3933 var cloneElement = ReactElement.cloneElement;
3934
3935 if ("development" !== 'production') {
3936 + var ReactElementValidator = _dereq_(62);
3937 createElement = ReactElementValidator.createElement;
3938 createFactory = ReactElementValidator.createFactory;
3939 cloneElement = ReactElementValidator.cloneElement;
@@ -3952,7 +3989,7 @@ var React = {
3989 };
3990
3991 module.exports = React;
3955 -},{"134":134,"167":167,"168":168,"29":29,"30":30,"31":31,"45":45,"61":61,"62":62,"84":84,"94":94}],27:[function(_dereq_,module,exports){
3992 +},{"135":135,"169":169,"170":170,"29":29,"30":30,"31":31,"45":45,"61":61,"62":62,"84":84,"94":94}],27:[function(_dereq_,module,exports){
3993 /**
3994 * Copyright 2013-present, Facebook, Inc.
3995 * All rights reserved.
@@ -3966,15 +4003,15 @@ module.exports = React;
4003
4004 'use strict';
4005
3969 -var _assign = _dereq_(168);
4006 +var _assign = _dereq_(170);
4007
4008 var EventConstants = _dereq_(16);
4009 var EventPluginRegistry = _dereq_(18);
4010 var ReactEventEmitterMixin = _dereq_(65);
4011 var ViewportMetrics = _dereq_(112);
4012
3976 -var getVendorPrefixedEventName = _dereq_(130);
3977 -var isEventSupported = _dereq_(132);
4013 +var getVendorPrefixedEventName = _dereq_(131);
4014 +var isEventSupported = _dereq_(133);
4015
4016 /**
4017 * Summary of `ReactBrowserEventEmitter` event handling:
@@ -4270,7 +4307,7 @@ var ReactBrowserEventEmitter = _assign({}, ReactEventEmitterMixin, {
4307 });
4308
4309 module.exports = ReactBrowserEventEmitter;
4273 -},{"112":112,"130":130,"132":132,"16":16,"168":168,"18":18,"65":65}],28:[function(_dereq_,module,exports){
4310 +},{"112":112,"131":131,"133":133,"16":16,"170":170,"18":18,"65":65}],28:[function(_dereq_,module,exports){
4311 /**
4312 * Copyright 2014-present, Facebook, Inc.
4313 * All rights reserved.
@@ -4286,17 +4323,18 @@ module.exports = ReactBrowserEventEmitter;
4323
4324 var ReactReconciler = _dereq_(86);
4325
4289 -var instantiateReactComponent = _dereq_(131);
4326 +var ReactComponentTreeDevtool = _dereq_(34);
4327 +var instantiateReactComponent = _dereq_(132);
4328 var KeyEscapeUtils = _dereq_(23);
4291 -var shouldUpdateReactComponent = _dereq_(139);
4292 -var traverseAllChildren = _dereq_(140);
4293 -var warning = _dereq_(167);
4329 +var shouldUpdateReactComponent = _dereq_(141);
4330 +var traverseAllChildren = _dereq_(142);
4331 +var warning = _dereq_(169);
4332
4295 -function instantiateChild(childInstances, child, name) {
4333 +function instantiateChild(childInstances, child, name, selfDebugID) {
4334 // We found a component instance.
4335 var keyUnique = childInstances[name] === undefined;
4336 if ("development" !== 'production') {
4299 - "development" !== 'production' ? warning(keyUnique, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.', KeyEscapeUtils.unescape(name)) : void 0;
4337 + "development" !== 'production' ? warning(keyUnique, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.%s', KeyEscapeUtils.unescape(name), ReactComponentTreeDevtool.getStackAddendumByID(selfDebugID)) : void 0;
4338 }
4339 if (child != null && keyUnique) {
4340 childInstances[name] = instantiateReactComponent(child);
@@ -4317,12 +4355,20 @@ var ReactChildReconciler = {
4355 * @return {?object} A set of child instances.
4356 * @internal
4357 */
4320 - instantiateChildren: function (nestedChildNodes, transaction, context) {
4358 + instantiateChildren: function (nestedChildNodes, transaction, context, selfDebugID // __DEV__ only
4359 + ) {
4360 if (nestedChildNodes == null) {
4361 return null;
4362 }
4363 var childInstances = {};
4325 - traverseAllChildren(nestedChildNodes, instantiateChild, childInstances);
4364 +
4365 + if ("development" !== 'production') {
4366 + traverseAllChildren(nestedChildNodes, function (childInsts, child, name) {
4367 + return instantiateChild(childInsts, child, name, selfDebugID);
4368 + }, childInstances);
4369 + } else {
4370 + traverseAllChildren(nestedChildNodes, instantiateChild, childInstances);
4371 + }
4372 return childInstances;
4373 },
4374
@@ -4359,7 +4405,7 @@ var ReactChildReconciler = {
4405 nextChildren[name] = prevChild;
4406 } else {
4407 if (prevChild) {
4362 - removedNodes[name] = ReactReconciler.getNativeNode(prevChild);
4408 + removedNodes[name] = ReactReconciler.getHostNode(prevChild);
4409 ReactReconciler.unmountComponent(prevChild, false);
4410 }
4411 // The child must be instantiated before it's mounted.
@@ -4371,7 +4417,7 @@ var ReactChildReconciler = {
4417 for (name in prevChildren) {
4418 if (prevChildren.hasOwnProperty(name) && !(nextChildren && nextChildren.hasOwnProperty(name))) {
4419 prevChild = prevChildren[name];
4374 - removedNodes[name] = ReactReconciler.getNativeNode(prevChild);
4420 + removedNodes[name] = ReactReconciler.getHostNode(prevChild);
4421 ReactReconciler.unmountComponent(prevChild, false);
4422 }
4423 }
@@ -4396,7 +4442,7 @@ var ReactChildReconciler = {
4442 };
4443
4444 module.exports = ReactChildReconciler;
4399 -},{"131":131,"139":139,"140":140,"167":167,"23":23,"86":86}],29:[function(_dereq_,module,exports){
4445 +},{"132":132,"141":141,"142":142,"169":169,"23":23,"34":34,"86":86}],29:[function(_dereq_,module,exports){
4446 /**
4447 * Copyright 2013-present, Facebook, Inc.
4448 * All rights reserved.
@@ -4413,8 +4459,8 @@ module.exports = ReactChildReconciler;
4459 var PooledClass = _dereq_(25);
4460 var ReactElement = _dereq_(61);
4461
4416 -var emptyFunction = _dereq_(149);
4417 -var traverseAllChildren = _dereq_(140);
4462 +var emptyFunction = _dereq_(151);
4463 +var traverseAllChildren = _dereq_(142);
4464
4465 var twoArgumentPooler = PooledClass.twoArgumentPooler;
4466 var fourArgumentPooler = PooledClass.fourArgumentPooler;
@@ -4588,7 +4634,7 @@ var ReactChildren = {
4634 };
4635
4636 module.exports = ReactChildren;
4591 -},{"140":140,"149":149,"25":25,"61":61}],30:[function(_dereq_,module,exports){
4637 +},{"142":142,"151":151,"25":25,"61":61}],30:[function(_dereq_,module,exports){
4638 /**
4639 * Copyright 2013-present, Facebook, Inc.
4640 * All rights reserved.
@@ -4602,7 +4648,8 @@ module.exports = ReactChildren;
4648
4649 'use strict';
4650
4605 -var _assign = _dereq_(168);
4651 +var _prodInvariant = _dereq_(137),
4652 + _assign = _dereq_(170);
4653
4654 var ReactComponent = _dereq_(31);
4655 var ReactElement = _dereq_(61);
@@ -4610,11 +4657,11 @@ var ReactPropTypeLocations = _dereq_(83);
4657 var ReactPropTypeLocationNames = _dereq_(82);
4658 var ReactNoopUpdateQueue = _dereq_(80);
4659
4613 -var emptyObject = _dereq_(150);
4614 -var invariant = _dereq_(157);
4615 -var keyMirror = _dereq_(160);
4616 -var keyOf = _dereq_(161);
4617 -var warning = _dereq_(167);
4660 +var emptyObject = _dereq_(152);
4661 +var invariant = _dereq_(159);
4662 +var keyMirror = _dereq_(162);
4663 +var keyOf = _dereq_(163);
4664 +var warning = _dereq_(169);
4665
4666 var MIXINS_KEY = keyOf({ mixins: null });
4667
@@ -4647,7 +4694,7 @@ var injectedMixins = [];
4694
4695 /**
4696 * Composite components are higher-level components that compose other composite
4650 - * or native components.
4697 + * or host components.
4698 *
4699 * To create a new type of `ReactClass`, pass a specification of
4700 * your new class to `React.createClass`. The only requirement of your class
@@ -4960,12 +5007,12 @@ function validateMethodOverride(isAlreadyDefined, name) {
5007
5008 // Disallow overriding of base class methods unless explicitly allowed.
5009 if (ReactClassMixin.hasOwnProperty(name)) {
4963 - !(specPolicy === SpecPolicy.OVERRIDE_BASE) ? "development" !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to override ' + '`%s` from your class specification. Ensure that your method names ' + 'do not overlap with React methods.', name) : invariant(false) : void 0;
5010 + !(specPolicy === SpecPolicy.OVERRIDE_BASE) ? "development" !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to override `%s` from your class specification. Ensure that your method names do not overlap with React methods.', name) : _prodInvariant('73', name) : void 0;
5011 }
5012
5013 // Disallow defining methods more than once unless explicitly allowed.
5014 if (isAlreadyDefined) {
4968 - !(specPolicy === SpecPolicy.DEFINE_MANY || specPolicy === SpecPolicy.DEFINE_MANY_MERGED) ? "development" !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to define ' + '`%s` on your component more than once. This conflict may be due ' + 'to a mixin.', name) : invariant(false) : void 0;
5015 + !(specPolicy === SpecPolicy.DEFINE_MANY || specPolicy === SpecPolicy.DEFINE_MANY_MERGED) ? "development" !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.', name) : _prodInvariant('74', name) : void 0;
5016 }
5017 }
5018
@@ -4978,8 +5025,8 @@ function mixSpecIntoComponent(Constructor, spec) {
5025 return;
5026 }
5027
4981 - !(typeof spec !== 'function') ? "development" !== 'production' ? invariant(false, 'ReactClass: You\'re attempting to ' + 'use a component class or function as a mixin. Instead, just use a ' + 'regular object.') : invariant(false) : void 0;
4982 - !!ReactElement.isValidElement(spec) ? "development" !== 'production' ? invariant(false, 'ReactClass: You\'re attempting to ' + 'use a component as a mixin. Instead, just use a regular object.') : invariant(false) : void 0;
5028 + !(typeof spec !== 'function') ? "development" !== 'production' ? invariant(false, 'ReactClass: You\'re attempting to use a component class or function as a mixin. Instead, just use a regular object.') : _prodInvariant('75') : void 0;
5029 + !!ReactElement.isValidElement(spec) ? "development" !== 'production' ? invariant(false, 'ReactClass: You\'re attempting to use a component as a mixin. Instead, just use a regular object.') : _prodInvariant('76') : void 0;
5030
5031 var proto = Constructor.prototype;
5032 var autoBindPairs = proto.__reactAutoBindPairs;
@@ -5024,7 +5071,7 @@ function mixSpecIntoComponent(Constructor, spec) {
5071 var specPolicy = ReactClassInterface[name];
5072
5073 // These cases should already be caught by validateMethodOverride.
5027 - !(isReactClassMethod && (specPolicy === SpecPolicy.DEFINE_MANY_MERGED || specPolicy === SpecPolicy.DEFINE_MANY)) ? "development" !== 'production' ? invariant(false, 'ReactClass: Unexpected spec policy %s for key %s ' + 'when mixing in component specs.', specPolicy, name) : invariant(false) : void 0;
5074 + !(isReactClassMethod && (specPolicy === SpecPolicy.DEFINE_MANY_MERGED || specPolicy === SpecPolicy.DEFINE_MANY)) ? "development" !== 'production' ? invariant(false, 'ReactClass: Unexpected spec policy %s for key %s when mixing in component specs.', specPolicy, name) : _prodInvariant('77', specPolicy, name) : void 0;
5075
5076 // For methods which are defined more than once, call the existing
5077 // methods before calling the new property, merging if appropriate.
@@ -5059,10 +5106,10 @@ function mixStaticSpecIntoComponent(Constructor, statics) {
5106 }
5107
5108 var isReserved = name in RESERVED_SPEC_KEYS;
5062 - !!isReserved ? "development" !== 'production' ? invariant(false, 'ReactClass: You are attempting to define a reserved ' + 'property, `%s`, that shouldn\'t be on the "statics" key. Define it ' + 'as an instance property instead; it will still be accessible on the ' + 'constructor.', name) : invariant(false) : void 0;
5109 + !!isReserved ? "development" !== 'production' ? invariant(false, 'ReactClass: You are attempting to define a reserved property, `%s`, that shouldn\'t be on the "statics" key. Define it as an instance property instead; it will still be accessible on the constructor.', name) : _prodInvariant('78', name) : void 0;
5110
5111 var isInherited = name in Constructor;
5065 - !!isInherited ? "development" !== 'production' ? invariant(false, 'ReactClass: You are attempting to define ' + '`%s` on your component more than once. This conflict may be ' + 'due to a mixin.', name) : invariant(false) : void 0;
5112 + !!isInherited ? "development" !== 'production' ? invariant(false, 'ReactClass: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.', name) : _prodInvariant('79', name) : void 0;
5113 Constructor[name] = property;
5114 }
5115 }
@@ -5075,11 +5122,11 @@ function mixStaticSpecIntoComponent(Constructor, statics) {
5122 * @return {object} one after it has been mutated to contain everything in two.
5123 */
5124 function mergeIntoWithNoDuplicateKeys(one, two) {
5078 - !(one && two && typeof one === 'object' && typeof two === 'object') ? "development" !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.') : invariant(false) : void 0;
5125 + !(one && two && typeof one === 'object' && typeof two === 'object') ? "development" !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.') : _prodInvariant('80') : void 0;
5126
5127 for (var key in two) {
5128 if (two.hasOwnProperty(key)) {
5082 - !(one[key] === undefined) ? "development" !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): ' + 'Tried to merge two objects with the same key: `%s`. This conflict ' + 'may be due to a mixin; in particular, this may be caused by two ' + 'getInitialState() or getDefaultProps() methods returning objects ' + 'with clashing keys.', key) : invariant(false) : void 0;
5129 + !(one[key] === undefined) ? "development" !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Tried to merge two objects with the same key: `%s`. This conflict may be due to a mixin; in particular, this may be caused by two getInitialState() or getDefaultProps() methods returning objects with clashing keys.', key) : _prodInvariant('81', key) : void 0;
5130 one[key] = two[key];
5131 }
5132 }
@@ -5257,7 +5304,7 @@ var ReactClass = {
5304 initialState = null;
5305 }
5306 }
5260 - !(typeof initialState === 'object' && !Array.isArray(initialState)) ? "development" !== 'production' ? invariant(false, '%s.getInitialState(): must return an object or null', Constructor.displayName || 'ReactCompositeComponent') : invariant(false) : void 0;
5307 + !(typeof initialState === 'object' && !Array.isArray(initialState)) ? "development" !== 'production' ? invariant(false, '%s.getInitialState(): must return an object or null', Constructor.displayName || 'ReactCompositeComponent') : _prodInvariant('82', Constructor.displayName || 'ReactCompositeComponent') : void 0;
5308
5309 this.state = initialState;
5310 };
@@ -5287,7 +5334,7 @@ var ReactClass = {
5334 }
5335 }
5336
5290 - !Constructor.prototype.render ? "development" !== 'production' ? invariant(false, 'createClass(...): Class specification must implement a `render` method.') : invariant(false) : void 0;
5337 + !Constructor.prototype.render ? "development" !== 'production' ? invariant(false, 'createClass(...): Class specification must implement a `render` method.') : _prodInvariant('83') : void 0;
5338
5339 if ("development" !== 'production') {
5340 "development" !== 'production' ? warning(!Constructor.prototype.componentShouldUpdate, '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', spec.displayName || 'A component') : void 0;
@@ -5313,7 +5360,7 @@ var ReactClass = {
5360 };
5361
5362 module.exports = ReactClass;
5316 -},{"150":150,"157":157,"160":160,"161":161,"167":167,"168":168,"31":31,"61":61,"80":80,"82":82,"83":83}],31:[function(_dereq_,module,exports){
5363 +},{"137":137,"152":152,"159":159,"162":162,"163":163,"169":169,"170":170,"31":31,"61":61,"80":80,"82":82,"83":83}],31:[function(_dereq_,module,exports){
5364 /**
5365 * Copyright 2013-present, Facebook, Inc.
5366 * All rights reserved.
@@ -5327,13 +5374,14 @@ module.exports = ReactClass;
5374
5375 'use strict';
5376
5377 +var _prodInvariant = _dereq_(137);
5378 +
5379 var ReactNoopUpdateQueue = _dereq_(80);
5331 -var ReactInstrumentation = _dereq_(71);
5380
5381 var canDefineProperty = _dereq_(115);
5334 -var emptyObject = _dereq_(150);
5335 -var invariant = _dereq_(157);
5336 -var warning = _dereq_(167);
5382 +var emptyObject = _dereq_(152);
5383 +var invariant = _dereq_(159);
5384 +var warning = _dereq_(169);
5385
5386 /**
5387 * Base class helpers for the updating state of a component.
@@ -5375,11 +5423,7 @@ ReactComponent.prototype.isReactComponent = {};
5423 * @protected
5424 */
5425 ReactComponent.prototype.setState = function (partialState, callback) {
5378 - !(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null) ? "development" !== 'production' ? invariant(false, 'setState(...): takes an object of state variables to update or a ' + 'function which returns an object of state variables.') : invariant(false) : void 0;
5379 - if ("development" !== 'production') {
5380 - ReactInstrumentation.debugTool.onSetState();
5381 - "development" !== 'production' ? warning(partialState != null, 'setState(...): You passed an undefined or null state object; ' + 'instead, use forceUpdate().') : void 0;
5382 - }
5426 + !(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null) ? "development" !== 'production' ? invariant(false, 'setState(...): takes an object of state variables to update or a function which returns an object of state variables.') : _prodInvariant('85') : void 0;
5427 this.updater.enqueueSetState(this, partialState);
5428 if (callback) {
5429 this.updater.enqueueCallback(this, callback, 'setState');
@@ -5435,7 +5479,7 @@ if ("development" !== 'production') {
5479 }
5480
5481 module.exports = ReactComponent;
5438 -},{"115":115,"150":150,"157":157,"167":167,"71":71,"80":80}],32:[function(_dereq_,module,exports){
5482 +},{"115":115,"137":137,"152":152,"159":159,"169":169,"80":80}],32:[function(_dereq_,module,exports){
5483 /**
5484 * Copyright 2013-present, Facebook, Inc.
5485 * All rights reserved.
@@ -5489,7 +5533,9 @@ module.exports = ReactComponentBrowserEnvironment;
5533
5534 'use strict';
5535
5492 -var invariant = _dereq_(157);
5536 +var _prodInvariant = _dereq_(137);
5537 +
5538 +var invariant = _dereq_(159);
5539
5540 var injected = false;
5541
@@ -5516,7 +5562,7 @@ var ReactComponentEnvironment = {
5562
5563 injection: {
5564 injectEnvironment: function (environment) {
5519 - !!injected ? "development" !== 'production' ? invariant(false, 'ReactCompositeComponent: injectEnvironment() can only be called once.') : invariant(false) : void 0;
5565 + !!injected ? "development" !== 'production' ? invariant(false, 'ReactCompositeComponent: injectEnvironment() can only be called once.') : _prodInvariant('104') : void 0;
5566 ReactComponentEnvironment.unmountIDFromEnvironment = environment.unmountIDFromEnvironment;
5567 ReactComponentEnvironment.replaceNodeWithMarkup = environment.replaceNodeWithMarkup;
5568 ReactComponentEnvironment.processChildrenUpdates = environment.processChildrenUpdates;
@@ -5527,7 +5573,7 @@ var ReactComponentEnvironment = {
5573 };
5574
5575 module.exports = ReactComponentEnvironment;
5530 -},{"157":157}],34:[function(_dereq_,module,exports){
5576 +},{"137":137,"159":159}],34:[function(_dereq_,module,exports){
5577 /**
5578 * Copyright 2016-present, Facebook, Inc.
5579 * All rights reserved.
@@ -5541,14 +5587,21 @@ module.exports = ReactComponentEnvironment;
5587
5588 'use strict';
5589
5544 -var invariant = _dereq_(157);
5590 +var _prodInvariant = _dereq_(137);
5591 +
5592 +var ReactCurrentOwner = _dereq_(36);
5593 +
5594 +var invariant = _dereq_(159);
5595 +var warning = _dereq_(169);
5596
5597 var tree = {};
5547 -var rootIDs = [];
5598 +var unmountedIDs = {};
5599 +var rootIDs = {};
5600
5601 function updateTree(id, update) {
5602 if (!tree[id]) {
5603 tree[id] = {
5604 + element: null,
5605 parentID: null,
5606 ownerID: null,
5607 text: null,
@@ -5557,6 +5610,10 @@ function updateTree(id, update) {
5610 isMounted: false,
5611 updateCount: 0
5612 };
5613 + // TODO: We need to do this awkward dance because TopLevelWrapper "never
5614 + // gets mounted" but its display name gets set in instantiateReactComponent
5615 + // before its debug ID is set to 0.
5616 + unmountedIDs[id] = true;
5617 }
5618 update(tree[id]);
5619 }
@@ -5571,6 +5628,22 @@ function purgeDeep(id) {
5628 }
5629 }
5630
5631 +function describeComponentFrame(name, source, ownerName) {
5632 + return '\n in ' + name + (source ? ' (at ' + source.fileName.replace(/^.*[\\\/]/, '') + ':' + source.lineNumber + ')' : ownerName ? ' (created by ' + ownerName + ')' : '');
5633 +}
5634 +
5635 +function describeID(id) {
5636 + var name = ReactComponentTreeDevtool.getDisplayName(id);
5637 + var element = ReactComponentTreeDevtool.getElement(id);
5638 + var ownerID = ReactComponentTreeDevtool.getOwnerID(id);
5639 + var ownerName;
5640 + if (ownerID) {
5641 + ownerName = ReactComponentTreeDevtool.getDisplayName(ownerID);
5642 + }
5643 + "development" !== 'production' ? warning(element, 'ReactComponentTreeDevtool: Missing React element for debugID %s when ' + 'building stack', id) : void 0;
5644 + return describeComponentFrame(name, element && element._source, ownerName);
5645 +}
5646 +
5647 var ReactComponentTreeDevtool = {
5648 onSetDisplayName: function (id, displayName) {
5649 updateTree(id, function (item) {
@@ -5579,19 +5652,21 @@ var ReactComponentTreeDevtool = {
5652 },
5653 onSetChildren: function (id, nextChildIDs) {
5654 updateTree(id, function (item) {
5582 - var prevChildIDs = item.childIDs;
5655 item.childIDs = nextChildIDs;
5656
5657 nextChildIDs.forEach(function (nextChildID) {
5658 var nextChild = tree[nextChildID];
5587 - !nextChild ? "development" !== 'production' ? invariant(false, 'Expected devtool events to fire for the child ' + 'before its parent includes it in onSetChildren().') : invariant(false) : void 0;
5588 - !(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;
5589 - !(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;
5590 - !nextChild.isMounted ? "development" !== 'production' ? invariant(false, 'Expected onMountComponent() to fire for the child ' + 'before its parent includes it in onSetChildren().') : invariant(false) : void 0;
5591 -
5592 - if (prevChildIDs.indexOf(nextChildID) === -1) {
5659 + !nextChild ? "development" !== 'production' ? invariant(false, 'Expected devtool events to fire for the child before its parent includes it in onSetChildren().') : _prodInvariant('68') : void 0;
5660 + !(nextChild.displayName != null) ? "development" !== 'production' ? invariant(false, 'Expected onSetDisplayName() to fire for the child before its parent includes it in onSetChildren().') : _prodInvariant('69') : void 0;
5661 + !(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().') : _prodInvariant('70') : void 0;
5662 + !nextChild.isMounted ? "development" !== 'production' ? invariant(false, 'Expected onMountComponent() to fire for the child before its parent includes it in onSetChildren().') : _prodInvariant('71') : void 0;
5663 + if (nextChild.parentID == null) {
5664 nextChild.parentID = id;
5665 + // TODO: This shouldn't be necessary but mounting a new root during in
5666 + // componentWillMount currently causes not-yet-mounted components to
5667 + // be purged from our tree data so their parent ID is missing.
5668 }
5669 + !(nextChild.parentID === id) ? "development" !== 'production' ? invariant(false, 'Expected onSetParent() and onSetChildren() to be consistent (%s has parents %s and %s).', nextChildID, nextChild.parentID, id) : _prodInvariant('72', nextChildID, nextChild.parentID, id) : void 0;
5670 });
5671 });
5672 },
@@ -5600,18 +5675,34 @@ var ReactComponentTreeDevtool = {
5675 return item.ownerID = ownerID;
5676 });
5677 },
5678 + onSetParent: function (id, parentID) {
5679 + updateTree(id, function (item) {
5680 + return item.parentID = parentID;
5681 + });
5682 + },
5683 onSetText: function (id, text) {
5684 updateTree(id, function (item) {
5685 return item.text = text;
5686 });
5687 },
5688 + onBeforeMountComponent: function (id, element) {
5689 + updateTree(id, function (item) {
5690 + return item.element = element;
5691 + });
5692 + },
5693 + onBeforeUpdateComponent: function (id, element) {
5694 + updateTree(id, function (item) {
5695 + return item.element = element;
5696 + });
5697 + },
5698 onMountComponent: function (id) {
5699 updateTree(id, function (item) {
5700 return item.isMounted = true;
5701 });
5702 + delete unmountedIDs[id];
5703 },
5704 onMountRootComponent: function (id) {
5614 - rootIDs.push(id);
5705 + rootIDs[id] = true;
5706 },
5707 onUpdateComponent: function (id) {
5708 updateTree(id, function (item) {
@@ -5622,9 +5713,8 @@ var ReactComponentTreeDevtool = {
5713 updateTree(id, function (item) {
5714 return item.isMounted = false;
5715 });
5625 - rootIDs = rootIDs.filter(function (rootID) {
5626 - return rootID !== id;
5627 - });
5716 + unmountedIDs[id] = true;
5717 + delete rootIDs[id];
5718 },
5719 purgeUnmountedComponents: function () {
5720 if (ReactComponentTreeDevtool._preventPurging) {
@@ -5632,14 +5722,38 @@ var ReactComponentTreeDevtool = {
5722 return;
5723 }
5724
5635 - Object.keys(tree).filter(function (id) {
5636 - return !tree[id].isMounted;
5637 - }).forEach(purgeDeep);
5725 + for (var id in unmountedIDs) {
5726 + purgeDeep(id);
5727 + }
5728 + unmountedIDs = {};
5729 },
5730 isMounted: function (id) {
5731 var item = tree[id];
5732 return item ? item.isMounted : false;
5733 },
5734 + getCurrentStackAddendum: function (topElement) {
5735 + var info = '';
5736 + if (topElement) {
5737 + var type = topElement.type;
5738 + var name = typeof type === 'function' ? type.displayName || type.name : type;
5739 + var owner = topElement._owner;
5740 + info += describeComponentFrame(name || 'Unknown', topElement._source, owner && owner.getName());
5741 + }
5742 +
5743 + var currentOwner = ReactCurrentOwner.current;
5744 + var id = currentOwner && currentOwner._debugID;
5745 +
5746 + info += ReactComponentTreeDevtool.getStackAddendumByID(id);
5747 + return info;
5748 + },
5749 + getStackAddendumByID: function (id) {
5750 + var info = '';
5751 + while (id) {
5752 + info += describeID(id);
5753 + id = ReactComponentTreeDevtool.getParentID(id);
5754 + }
5755 + return info;
5756 + },
5757 getChildIDs: function (id) {
5758 var item = tree[id];
5759 return item ? item.childIDs : [];
@@ -5648,6 +5762,10 @@ var ReactComponentTreeDevtool = {
5762 var item = tree[id];
5763 return item ? item.displayName : 'Unknown';
5764 },
5765 + getElement: function (id) {
5766 + var item = tree[id];
5767 + return item ? item.element : null;
5768 + },
5769 getOwnerID: function (id) {
5770 var item = tree[id];
5771 return item ? item.ownerID : null;
@@ -5656,6 +5774,12 @@ var ReactComponentTreeDevtool = {
5774 var item = tree[id];
5775 return item ? item.parentID : null;
5776 },
5777 + getSource: function (id) {
5778 + var item = tree[id];
5779 + var element = item ? item.element : null;
5780 + var source = element != null ? element._source : null;
5781 + return source;
5782 + },
5783 getText: function (id) {
5784 var item = tree[id];
5785 return item ? item.text : null;
@@ -5665,7 +5789,7 @@ var ReactComponentTreeDevtool = {
5789 return item ? item.updateCount : 0;
5790 },
5791 getRootIDs: function () {
5668 - return rootIDs;
5792 + return Object.keys(rootIDs);
5793 },
5794 getRegisteredIDs: function () {
5795 return Object.keys(tree);
@@ -5673,7 +5797,7 @@ var ReactComponentTreeDevtool = {
5797 };
5798
5799 module.exports = ReactComponentTreeDevtool;
5676 -},{"157":157}],35:[function(_dereq_,module,exports){
5800 +},{"137":137,"159":159,"169":169,"36":36}],35:[function(_dereq_,module,exports){
5801 /**
5802 * Copyright 2013-present, Facebook, Inc.
5803 * All rights reserved.
@@ -5687,35 +5811,26 @@ module.exports = ReactComponentTreeDevtool;
5811
5812 'use strict';
5813
5690 -var _assign = _dereq_(168);
5814 +var _prodInvariant = _dereq_(137),
5815 + _assign = _dereq_(170);
5816
5817 var ReactComponentEnvironment = _dereq_(33);
5818 var ReactCurrentOwner = _dereq_(36);
5819 var ReactElement = _dereq_(61);
5820 var ReactErrorUtils = _dereq_(64);
5696 -var ReactInstanceMap = _dereq_(70);
5697 -var ReactInstrumentation = _dereq_(71);
5821 +var ReactInstanceMap = _dereq_(72);
5822 +var ReactInstrumentation = _dereq_(73);
5823 var ReactNodeTypes = _dereq_(79);
5824 var ReactPropTypeLocations = _dereq_(83);
5700 -var ReactPropTypeLocationNames = _dereq_(82);
5825 var ReactReconciler = _dereq_(86);
5826 var ReactUpdateQueue = _dereq_(92);
5827
5704 -var emptyObject = _dereq_(150);
5705 -var invariant = _dereq_(157);
5706 -var shouldUpdateReactComponent = _dereq_(139);
5707 -var warning = _dereq_(167);
5828 +var checkReactTypeSpec = _dereq_(116);
5829
5709 -function getDeclarationErrorAddendum(component) {
5710 - var owner = component._currentElement._owner || null;
5711 - if (owner) {
5712 - var name = owner.getName();
5713 - if (name) {
5714 - return ' Check the render method of `' + name + '`.';
5715 - }
5716 - }
5717 - return '';
5718 -}
5830 +var emptyObject = _dereq_(152);
5831 +var invariant = _dereq_(159);
5832 +var shouldUpdateReactComponent = _dereq_(141);
5833 +var warning = _dereq_(169);
5834
5835 function StatelessComponent(Component) {}
5836 StatelessComponent.prototype.render = function () {
@@ -5728,6 +5843,7 @@ StatelessComponent.prototype.render = function () {
5843 function warnIfInvalidElement(Component, element) {
5844 if ("development" !== 'production') {
5845 "development" !== 'production' ? warning(element === null || element === false || ReactElement.isValidElement(element), '%s(...): A valid React element (or null) must be returned. You may have ' + 'returned undefined, an array or some other invalid object.', Component.displayName || Component.name || 'Component') : void 0;
5846 + "development" !== 'production' ? warning(!Component.childContextTypes, '%s(...): childContextTypes cannot be defined on a functional component.', Component.displayName || Component.name || 'Component') : void 0;
5847 }
5848 }
5849
@@ -5808,8 +5924,8 @@ var ReactCompositeComponentMixin = {
5924 this._currentElement = element;
5925 this._rootNodeID = null;
5926 this._instance = null;
5811 - this._nativeParent = null;
5812 - this._nativeContainerInfo = null;
5927 + this._hostParent = null;
5928 + this._hostContainerInfo = null;
5929
5930 // See ReactUpdateQueue
5931 this._updateBatchNumber = null;
@@ -5829,26 +5945,30 @@ var ReactCompositeComponentMixin = {
5945
5946 // ComponentWillUnmount shall only be called once
5947 this._calledComponentWillUnmount = false;
5948 +
5949 + if ("development" !== 'production') {
5950 + this._warnedAboutRefsInRender = false;
5951 + }
5952 },
5953
5954 /**
5955 * Initializes the component, renders markup, and registers event listeners.
5956 *
5957 * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
5838 - * @param {?object} nativeParent
5839 - * @param {?object} nativeContainerInfo
5958 + * @param {?object} hostParent
5959 + * @param {?object} hostContainerInfo
5960 * @param {?object} context
5961 * @return {?string} Rendered markup to be inserted into the DOM.
5962 * @final
5963 * @internal
5964 */
5845 - mountComponent: function (transaction, nativeParent, nativeContainerInfo, context) {
5965 + mountComponent: function (transaction, hostParent, hostContainerInfo, context) {
5966 this._context = context;
5967 this._mountOrder = nextMountID++;
5848 - this._nativeParent = nativeParent;
5849 - this._nativeContainerInfo = nativeContainerInfo;
5968 + this._hostParent = hostParent;
5969 + this._hostContainerInfo = hostContainerInfo;
5970
5851 - var publicProps = this._processProps(this._currentElement.props);
5971 + var publicProps = this._currentElement.props;
5972 var publicContext = this._processContext(context);
5973
5974 var Component = this._currentElement.type;
@@ -5861,7 +5981,7 @@ var ReactCompositeComponentMixin = {
5981 if (!shouldConstruct(Component) && (inst == null || inst.render == null)) {
5982 renderedElement = inst;
5983 warnIfInvalidElement(Component, renderedElement);
5864 - !(inst === null || inst === false || ReactElement.isValidElement(inst)) ? "development" !== 'production' ? invariant(false, '%s(...): A valid React element (or null) must be returned. You may have ' + 'returned undefined, an array or some other invalid object.', Component.displayName || Component.name || 'Component') : invariant(false) : void 0;
5984 + !(inst === null || inst === false || ReactElement.isValidElement(inst)) ? "development" !== 'production' ? invariant(false, '%s(...): A valid React element (or null) must be returned. You may have returned undefined, an array or some other invalid object.', Component.displayName || Component.name || 'Component') : _prodInvariant('105', Component.displayName || Component.name || 'Component') : void 0;
5985 inst = new StatelessComponent(Component);
5986 }
5987
@@ -5907,7 +6027,7 @@ var ReactCompositeComponentMixin = {
6027 if (initialState === undefined) {
6028 inst.state = initialState = null;
6029 }
5910 - !(typeof initialState === 'object' && !Array.isArray(initialState)) ? "development" !== 'production' ? invariant(false, '%s.state: must be set to an object or null', this.getName() || 'ReactCompositeComponent') : invariant(false) : void 0;
6030 + !(typeof initialState === 'object' && !Array.isArray(initialState)) ? "development" !== 'production' ? invariant(false, '%s.state: must be set to an object or null', this.getName() || 'ReactCompositeComponent') : _prodInvariant('106', this.getName() || 'ReactCompositeComponent') : void 0;
6031
6032 this._pendingStateQueue = null;
6033 this._pendingReplaceState = false;
@@ -5915,9 +6035,9 @@ var ReactCompositeComponentMixin = {
6035
6036 var markup;
6037 if (inst.unstable_handleError) {
5918 - markup = this.performInitialMountWithErrorHandling(renderedElement, nativeParent, nativeContainerInfo, transaction, context);
6038 + markup = this.performInitialMountWithErrorHandling(renderedElement, hostParent, hostContainerInfo, transaction, context);
6039 } else {
5920 - markup = this.performInitialMount(renderedElement, nativeParent, nativeContainerInfo, transaction, context);
6040 + markup = this.performInitialMount(renderedElement, hostParent, hostContainerInfo, transaction, context);
6041 }
6042
6043 if (inst.componentDidMount) {
@@ -5977,11 +6097,11 @@ var ReactCompositeComponentMixin = {
6097 return instanceOrElement;
6098 },
6099
5980 - performInitialMountWithErrorHandling: function (renderedElement, nativeParent, nativeContainerInfo, transaction, context) {
6100 + performInitialMountWithErrorHandling: function (renderedElement, hostParent, hostContainerInfo, transaction, context) {
6101 var markup;
6102 var checkpoint = transaction.checkpoint();
6103 try {
5984 - markup = this.performInitialMount(renderedElement, nativeParent, nativeContainerInfo, transaction, context);
6104 + markup = this.performInitialMount(renderedElement, hostParent, hostContainerInfo, transaction, context);
6105 } catch (e) {
6106 // Roll back to checkpoint, handle error (which may add items to the transaction), and take a new checkpoint
6107 transaction.rollback(checkpoint);
@@ -5996,12 +6116,12 @@ var ReactCompositeComponentMixin = {
6116
6117 // Try again - we've informed the component about the error, so they can render an error message this time.
6118 // If this throws again, the error will bubble up (and can be caught by a higher error boundary).
5999 - markup = this.performInitialMount(renderedElement, nativeParent, nativeContainerInfo, transaction, context);
6119 + markup = this.performInitialMount(renderedElement, hostParent, hostContainerInfo, transaction, context);
6120 }
6121 return markup;
6122 },
6123
6004 - performInitialMount: function (renderedElement, nativeParent, nativeContainerInfo, transaction, context) {
6124 + performInitialMount: function (renderedElement, hostParent, hostContainerInfo, transaction, context) {
6125 var inst = this._instance;
6126 if (inst.componentWillMount) {
6127 if ("development" !== 'production') {
@@ -6028,21 +6148,27 @@ var ReactCompositeComponentMixin = {
6148 }
6149
6150 this._renderedNodeType = ReactNodeTypes.getType(renderedElement);
6031 - this._renderedComponent = this._instantiateReactComponent(renderedElement);
6151 + var child = this._instantiateReactComponent(renderedElement);
6152 + this._renderedComponent = child;
6153 + if ("development" !== 'production') {
6154 + if (child._debugID !== 0 && this._debugID !== 0) {
6155 + ReactInstrumentation.debugTool.onSetParent(child._debugID, this._debugID);
6156 + }
6157 + }
6158
6033 - var markup = ReactReconciler.mountComponent(this._renderedComponent, transaction, nativeParent, nativeContainerInfo, this._processChildContext(context));
6159 + var markup = ReactReconciler.mountComponent(child, transaction, hostParent, hostContainerInfo, this._processChildContext(context));
6160
6161 if ("development" !== 'production') {
6162 if (this._debugID !== 0) {
6037 - ReactInstrumentation.debugTool.onSetChildren(this._debugID, this._renderedComponent._debugID !== 0 ? [this._renderedComponent._debugID] : []);
6163 + ReactInstrumentation.debugTool.onSetChildren(this._debugID, child._debugID !== 0 ? [child._debugID] : []);
6164 }
6165 }
6166
6167 return markup;
6168 },
6169
6044 - getNativeNode: function () {
6045 - return ReactReconciler.getNativeNode(this._renderedComponent);
6170 + getHostNode: function () {
6171 + return ReactReconciler.getHostNode(this._renderedComponent);
6172 },
6173
6174 /**
@@ -6145,7 +6271,7 @@ var ReactCompositeComponentMixin = {
6271 if ("development" !== 'production') {
6272 var Component = this._currentElement.type;
6273 if (Component.contextTypes) {
6148 - this._checkPropTypes(Component.contextTypes, maskedContext, ReactPropTypeLocations.context);
6274 + this._checkContextTypes(Component.contextTypes, maskedContext, ReactPropTypeLocations.context);
6275 }
6276 }
6277 return maskedContext;
@@ -6167,12 +6293,12 @@ var ReactCompositeComponentMixin = {
6293 ReactInstrumentation.debugTool.onEndProcessingChildContext();
6294 }
6295 if (childContext) {
6170 - !(typeof Component.childContextTypes === 'object') ? "development" !== 'production' ? invariant(false, '%s.getChildContext(): childContextTypes must be defined in order to ' + 'use getChildContext().', this.getName() || 'ReactCompositeComponent') : invariant(false) : void 0;
6296 + !(typeof Component.childContextTypes === 'object') ? "development" !== 'production' ? invariant(false, '%s.getChildContext(): childContextTypes must be defined in order to use getChildContext().', this.getName() || 'ReactCompositeComponent') : _prodInvariant('107', this.getName() || 'ReactCompositeComponent') : void 0;
6297 if ("development" !== 'production') {
6172 - this._checkPropTypes(Component.childContextTypes, childContext, ReactPropTypeLocations.childContext);
6298 + this._checkContextTypes(Component.childContextTypes, childContext, ReactPropTypeLocations.childContext);
6299 }
6300 for (var name in childContext) {
6175 - !(name in Component.childContextTypes) ? "development" !== 'production' ? invariant(false, '%s.getChildContext(): key "%s" is not defined in childContextTypes.', this.getName() || 'ReactCompositeComponent', name) : invariant(false) : void 0;
6301 + !(name in Component.childContextTypes) ? "development" !== 'production' ? invariant(false, '%s.getChildContext(): key "%s" is not defined in childContextTypes.', this.getName() || 'ReactCompositeComponent', name) : _prodInvariant('108', this.getName() || 'ReactCompositeComponent', name) : void 0;
6302 }
6303 return _assign({}, currentContext, childContext);
6304 }
@@ -6180,62 +6306,15 @@ var ReactCompositeComponentMixin = {
6306 },
6307
6308 /**
6183 - * Processes props by setting default values for unspecified props and
6184 - * asserting that the props are valid. Does not mutate its argument; returns
6185 - * a new props object with defaults merged in.
6186 - *
6187 - * @param {object} newProps
6188 - * @return {object}
6189 - * @private
6190 - */
6191 - _processProps: function (newProps) {
6192 - if ("development" !== 'production') {
6193 - var Component = this._currentElement.type;
6194 - if (Component.propTypes) {
6195 - this._checkPropTypes(Component.propTypes, newProps, ReactPropTypeLocations.prop);
6196 - }
6197 - }
6198 - return newProps;
6199 - },
6200 -
6201 - /**
6202 - * Assert that the props are valid
6309 + * Assert that the context types are valid
6310 *
6204 - * @param {object} propTypes Map of prop name to a ReactPropType
6205 - * @param {object} props
6311 + * @param {object} typeSpecs Map of context field to a ReactPropType
6312 + * @param {object} values Runtime values that need to be type-checked
6313 * @param {string} location e.g. "prop", "context", "child context"
6314 * @private
6315 */
6209 - _checkPropTypes: function (propTypes, props, location) {
6210 - // TODO: Stop validating prop types here and only use the element
6211 - // validation.
6212 - var componentName = this.getName();
6213 - for (var propName in propTypes) {
6214 - if (propTypes.hasOwnProperty(propName)) {
6215 - var error;
6216 - try {
6217 - // This is intentionally an invariant that gets caught. It's the same
6218 - // behavior as without this statement except with a better message.
6219 - !(typeof propTypes[propName] === 'function') ? "development" !== 'production' ? invariant(false, '%s: %s type `%s` is invalid; it must be a function, usually ' + 'from React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], propName) : invariant(false) : void 0;
6220 - error = propTypes[propName](props, propName, componentName, location);
6221 - } catch (ex) {
6222 - error = ex;
6223 - }
6224 - if (error instanceof Error) {
6225 - // We may want to extend this logic for similar errors in
6226 - // top-level render calls, so I'm abstracting it away into
6227 - // a function to minimize refactoring in the future
6228 - var addendum = getDeclarationErrorAddendum(this);
6229 -
6230 - if (location === ReactPropTypeLocations.prop) {
6231 - // Preface gives us something to blacklist in warning module
6232 - "development" !== 'production' ? warning(false, 'Failed Composite propType: %s%s', error.message, addendum) : void 0;
6233 - } else {
6234 - "development" !== 'production' ? warning(false, 'Failed Context Types: %s%s', error.message, addendum) : void 0;
6235 - }
6236 - }
6237 - }
6238 - }
6316 + _checkContextTypes: function (typeSpecs, values, location) {
6317 + checkReactTypeSpec(typeSpecs, values, location, this.getName(), null, this._debugID);
6318 },
6319
6320 receiveComponent: function (nextElement, transaction, nextContext) {
@@ -6281,6 +6360,8 @@ var ReactCompositeComponentMixin = {
6360 */
6361 updateComponent: function (transaction, prevParentElement, nextParentElement, prevUnmaskedContext, nextUnmaskedContext) {
6362 var inst = this._instance;
6363 + !(inst != null) ? "development" !== 'production' ? invariant(false, 'Attempted to update component `%s` that has already been unmounted (or failed to mount).', this.getName() || 'ReactCompositeComponent') : _prodInvariant('136', this.getName() || 'ReactCompositeComponent') : void 0;
6364 +
6365 var willReceive = false;
6366 var nextContext;
6367 var nextProps;
@@ -6293,13 +6374,10 @@ var ReactCompositeComponentMixin = {
6374 willReceive = true;
6375 }
6376
6296 - // Distinguish between a props update versus a simple state update
6297 - if (prevParentElement === nextParentElement) {
6298 - // Skip checking prop types again -- we don't read inst.props to avoid
6299 - // warning for DOM component props in this upgrade
6300 - nextProps = nextParentElement.props;
6301 - } else {
6302 - nextProps = this._processProps(nextParentElement.props);
6377 + nextProps = nextParentElement.props;
6378 +
6379 + // Not a simple state update but a props update
6380 + if (prevParentElement !== nextParentElement) {
6381 willReceive = true;
6382 }
6383
@@ -6450,21 +6528,27 @@ var ReactCompositeComponentMixin = {
6528 if (shouldUpdateReactComponent(prevRenderedElement, nextRenderedElement)) {
6529 ReactReconciler.receiveComponent(prevComponentInstance, nextRenderedElement, transaction, this._processChildContext(context));
6530 } else {
6453 - var oldNativeNode = ReactReconciler.getNativeNode(prevComponentInstance);
6531 + var oldHostNode = ReactReconciler.getHostNode(prevComponentInstance);
6532 ReactReconciler.unmountComponent(prevComponentInstance, false);
6533
6534 this._renderedNodeType = ReactNodeTypes.getType(nextRenderedElement);
6457 - this._renderedComponent = this._instantiateReactComponent(nextRenderedElement);
6535 + var child = this._instantiateReactComponent(nextRenderedElement);
6536 + this._renderedComponent = child;
6537 + if ("development" !== 'production') {
6538 + if (child._debugID !== 0 && this._debugID !== 0) {
6539 + ReactInstrumentation.debugTool.onSetParent(child._debugID, this._debugID);
6540 + }
6541 + }
6542
6459 - var nextMarkup = ReactReconciler.mountComponent(this._renderedComponent, transaction, this._nativeParent, this._nativeContainerInfo, this._processChildContext(context));
6543 + var nextMarkup = ReactReconciler.mountComponent(child, transaction, this._hostParent, this._hostContainerInfo, this._processChildContext(context));
6544
6545 if ("development" !== 'production') {
6546 if (this._debugID !== 0) {
6463 - ReactInstrumentation.debugTool.onSetChildren(this._debugID, this._renderedComponent._debugID !== 0 ? [this._renderedComponent._debugID] : []);
6547 + ReactInstrumentation.debugTool.onSetChildren(this._debugID, child._debugID !== 0 ? [child._debugID] : []);
6548 }
6549 }
6550
6467 - this._replaceNodeWithMarkup(oldNativeNode, nextMarkup, prevComponentInstance);
6551 + this._replaceNodeWithMarkup(oldHostNode, nextMarkup, prevComponentInstance);
6552 }
6553 },
6554
@@ -6473,8 +6557,8 @@ var ReactCompositeComponentMixin = {
6557 *
6558 * @protected
6559 */
6476 - _replaceNodeWithMarkup: function (oldNativeNode, nextMarkup, prevInstance) {
6477 - ReactComponentEnvironment.replaceNodeWithMarkup(oldNativeNode, nextMarkup, prevInstance);
6560 + _replaceNodeWithMarkup: function (oldHostNode, nextMarkup, prevInstance) {
6561 + ReactComponentEnvironment.replaceNodeWithMarkup(oldHostNode, nextMarkup, prevInstance);
6562 },
6563
6564 /**
@@ -6520,7 +6604,7 @@ var ReactCompositeComponentMixin = {
6604 }
6605 !(
6606 // TODO: An `isValidNode` function would probably be more appropriate
6523 - 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;
6607 + 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') : _prodInvariant('109', this.getName() || 'ReactCompositeComponent') : void 0;
6608
6609 return renderedComponent;
6610 },
@@ -6535,7 +6619,7 @@ var ReactCompositeComponentMixin = {
6619 */
6620 attachRef: function (ref, component) {
6621 var inst = this.getPublicInstance();
6538 - !(inst != null) ? "development" !== 'production' ? invariant(false, 'Stateless function components cannot have refs.') : invariant(false) : void 0;
6622 + !(inst != null) ? "development" !== 'production' ? invariant(false, 'Stateless function components cannot have refs.') : _prodInvariant('110') : void 0;
6623 var publicComponentInstance = component.getPublicInstance();
6624 if ("development" !== 'production') {
6625 var componentName = component && component.getName ? component.getName() : 'a component';
@@ -6597,7 +6681,7 @@ var ReactCompositeComponent = {
6681 };
6682
6683 module.exports = ReactCompositeComponent;
6600 -},{"139":139,"150":150,"157":157,"167":167,"168":168,"33":33,"36":36,"61":61,"64":64,"70":70,"71":71,"79":79,"82":82,"83":83,"86":86,"92":92}],36:[function(_dereq_,module,exports){
6684 +},{"116":116,"137":137,"141":141,"152":152,"159":159,"169":169,"170":170,"33":33,"36":36,"61":61,"64":64,"72":72,"73":73,"79":79,"83":83,"86":86,"92":92}],36:[function(_dereq_,module,exports){
6685 /**
6686 * Copyright 2013-present, Facebook, Inc.
6687 * All rights reserved.
@@ -6647,15 +6731,15 @@ module.exports = ReactCurrentOwner;
6731
6732 var ReactDOMComponentTree = _dereq_(41);
6733 var ReactDefaultInjection = _dereq_(60);
6650 -var ReactMount = _dereq_(74);
6734 +var ReactMount = _dereq_(76);
6735 var ReactReconciler = _dereq_(86);
6736 var ReactUpdates = _dereq_(93);
6737 var ReactVersion = _dereq_(94);
6738
6655 -var findDOMNode = _dereq_(119);
6656 -var getNativeComponentFromComposite = _dereq_(127);
6657 -var renderSubtreeIntoContainer = _dereq_(136);
6658 -var warning = _dereq_(167);
6739 +var findDOMNode = _dereq_(120);
6740 +var getHostComponentFromComposite = _dereq_(127);
6741 +var renderSubtreeIntoContainer = _dereq_(138);
6742 +var warning = _dereq_(169);
6743
6744 ReactDefaultInjection.inject();
6745
@@ -6680,7 +6764,7 @@ if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && typeof __REACT_DEVT
6764 getNodeFromInstance: function (inst) {
6765 // inst is an internal instance (but could be a composite)
6766 if (inst._renderedComponent) {
6683 - inst = getNativeComponentFromComposite(inst);
6767 + inst = getHostComponentFromComposite(inst);
6768 }
6769 if (inst) {
6770 return ReactDOMComponentTree.getNodeFromInstance(inst);
@@ -6695,7 +6779,7 @@ if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && typeof __REACT_DEVT
6779 }
6780
6781 if ("development" !== 'production') {
6698 - var ExecutionEnvironment = _dereq_(143);
6782 + var ExecutionEnvironment = _dereq_(145);
6783 if (ExecutionEnvironment.canUseDOM && window.top === window.self) {
6784
6785 // First check if devtools is not installed
@@ -6731,7 +6815,7 @@ if ("development" !== 'production') {
6815 }
6816
6817 module.exports = React;
6734 -},{"119":119,"127":127,"136":136,"143":143,"167":167,"41":41,"60":60,"74":74,"86":86,"93":93,"94":94}],38:[function(_dereq_,module,exports){
6818 +},{"120":120,"127":127,"138":138,"145":145,"169":169,"41":41,"60":60,"76":76,"86":86,"93":93,"94":94}],38:[function(_dereq_,module,exports){
6819 /**
6820 * Copyright 2013-present, Facebook, Inc.
6821 * All rights reserved.
@@ -6748,11 +6832,11 @@ module.exports = React;
6832 var DisabledInputUtils = _dereq_(14);
6833
6834 /**
6751 - * Implements a <button> native component that does not receive mouse events
6835 + * Implements a <button> host component that does not receive mouse events
6836 * when `disabled` is set.
6837 */
6838 var ReactDOMButton = {
6755 - getNativeProps: DisabledInputUtils.getNativeProps
6839 + getHostProps: DisabledInputUtils.getHostProps
6840 };
6841
6842 module.exports = ReactDOMButton;
@@ -6772,7 +6856,8 @@ module.exports = ReactDOMButton;
6856
6857 'use strict';
6858
6775 -var _assign = _dereq_(168);
6859 +var _prodInvariant = _dereq_(137),
6860 + _assign = _dereq_(170);
6861
6862 var AutoFocusUtils = _dereq_(1);
6863 var CSSPropertyOperations = _dereq_(4);
@@ -6792,18 +6877,18 @@ var ReactDOMInput = _dereq_(48);
6877 var ReactDOMOption = _dereq_(50);
6878 var ReactDOMSelect = _dereq_(51);
6879 var ReactDOMTextarea = _dereq_(55);
6795 -var ReactInstrumentation = _dereq_(71);
6796 -var ReactMultiChild = _dereq_(75);
6880 +var ReactInstrumentation = _dereq_(73);
6881 +var ReactMultiChild = _dereq_(77);
6882 var ReactServerRenderingTransaction = _dereq_(90);
6883
6799 -var emptyFunction = _dereq_(149);
6800 -var escapeTextContentForBrowser = _dereq_(118);
6801 -var invariant = _dereq_(157);
6802 -var isEventSupported = _dereq_(132);
6803 -var keyOf = _dereq_(161);
6804 -var shallowEqual = _dereq_(166);
6805 -var validateDOMNesting = _dereq_(141);
6806 -var warning = _dereq_(167);
6884 +var emptyFunction = _dereq_(151);
6885 +var escapeTextContentForBrowser = _dereq_(119);
6886 +var invariant = _dereq_(159);
6887 +var isEventSupported = _dereq_(133);
6888 +var keyOf = _dereq_(163);
6889 +var shallowEqual = _dereq_(168);
6890 +var validateDOMNesting = _dereq_(143);
6891 +var warning = _dereq_(169);
6892
6893 var Flags = ReactDOMComponentFlags;
6894 var deleteListener = EventPluginHub.deleteListener;
@@ -6900,18 +6985,18 @@ function assertValidProps(component, props) {
6985 }
6986 // Note the use of `==` which checks for null or undefined.
6987 if (voidElementTags[component._tag]) {
6903 - !(props.children == null && props.dangerouslySetInnerHTML == null) ? "development" !== 'production' ? invariant(false, '%s is a void element tag and must not have `children` or ' + 'use `props.dangerouslySetInnerHTML`.%s', component._tag, component._currentElement._owner ? ' Check the render method of ' + component._currentElement._owner.getName() + '.' : '') : invariant(false) : void 0;
6988 + !(props.children == null && props.dangerouslySetInnerHTML == null) ? "development" !== 'production' ? invariant(false, '%s is a void element tag and must not have `children` or use `props.dangerouslySetInnerHTML`.%s', component._tag, component._currentElement._owner ? ' Check the render method of ' + component._currentElement._owner.getName() + '.' : '') : _prodInvariant('59', component._tag, component._currentElement._owner ? ' Check the render method of ' + component._currentElement._owner.getName() + '.' : '') : void 0;
6989 }
6990 if (props.dangerouslySetInnerHTML != null) {
6906 - !(props.children == null) ? "development" !== 'production' ? invariant(false, 'Can only set one of `children` or `props.dangerouslySetInnerHTML`.') : invariant(false) : void 0;
6907 - !(typeof props.dangerouslySetInnerHTML === 'object' && HTML in props.dangerouslySetInnerHTML) ? "development" !== 'production' ? invariant(false, '`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. ' + 'Please visit https://fb.me/react-invariant-dangerously-set-inner-html ' + 'for more information.') : invariant(false) : void 0;
6991 + !(props.children == null) ? "development" !== 'production' ? invariant(false, 'Can only set one of `children` or `props.dangerouslySetInnerHTML`.') : _prodInvariant('60') : void 0;
6992 + !(typeof props.dangerouslySetInnerHTML === 'object' && HTML in props.dangerouslySetInnerHTML) ? "development" !== 'production' ? invariant(false, '`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://fb.me/react-invariant-dangerously-set-inner-html for more information.') : _prodInvariant('61') : void 0;
6993 }
6994 if ("development" !== 'production') {
6995 "development" !== 'production' ? warning(props.innerHTML == null, 'Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.') : void 0;
6996 "development" !== 'production' ? warning(props.suppressContentEditableWarning || !props.contentEditable || props.children == null, 'A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.') : void 0;
6997 "development" !== 'production' ? warning(props.onFocusIn == null && props.onFocusOut == null, 'React uses onFocus and onBlur instead of onFocusIn and onFocusOut. ' + 'All React events are normalized to bubble, so onFocusIn and onFocusOut ' + 'are not needed/supported by React.') : void 0;
6998 }
6914 - !(props.style == null || typeof props.style === 'object') ? "development" !== 'production' ? invariant(false, 'The `style` prop expects a mapping from style properties to values, ' + 'not a string. For example, style={{marginRight: spacing + \'em\'}} when ' + 'using JSX.%s', getDeclarationErrorAddendum(component)) : invariant(false) : void 0;
6999 + !(props.style == null || typeof props.style === 'object') ? "development" !== 'production' ? invariant(false, 'The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + \'em\'}} when using JSX.%s', getDeclarationErrorAddendum(component)) : _prodInvariant('62', getDeclarationErrorAddendum(component)) : void 0;
7000 }
7001
7002 function enqueuePutListener(inst, registrationName, listener, transaction) {
@@ -6923,7 +7008,7 @@ function enqueuePutListener(inst, registrationName, listener, transaction) {
7008 // bubble.
7009 "development" !== 'production' ? warning(registrationName !== 'onScroll' || isEventSupported('scroll', true), 'This browser doesn\'t support the `onScroll` event') : void 0;
7010 }
6926 - var containerInfo = inst._nativeContainerInfo;
7011 + var containerInfo = inst._hostContainerInfo;
7012 var isDocumentFragment = containerInfo._node && containerInfo._node.nodeType === DOC_FRAGMENT_TYPE;
7013 var doc = isDocumentFragment ? containerInfo._node : containerInfo._ownerDocument;
7014 listenTo(registrationName, doc);
@@ -6939,6 +7024,16 @@ function putListener() {
7024 EventPluginHub.putListener(listenerToPut.inst, listenerToPut.registrationName, listenerToPut.listener);
7025 }
7026
7027 +function inputPostMount() {
7028 + var inst = this;
7029 + ReactDOMInput.postMountWrapper(inst);
7030 +}
7031 +
7032 +function textareaPostMount() {
7033 + var inst = this;
7034 + ReactDOMTextarea.postMountWrapper(inst);
7035 +}
7036 +
7037 function optionPostMount() {
7038 var inst = this;
7039 ReactDOMOption.postMountWrapper(inst);
@@ -6946,14 +7041,34 @@ function optionPostMount() {
7041
7042 var setContentChildForInstrumentation = emptyFunction;
7043 if ("development" !== 'production') {
6949 - setContentChildForInstrumentation = function (contentToUse) {
7044 + setContentChildForInstrumentation = function (content) {
7045 + var hasExistingContent = this._contentDebugID != null;
7046 var debugID = this._debugID;
7047 var contentDebugID = debugID + '#text';
7048 +
7049 + if (content == null) {
7050 + if (hasExistingContent) {
7051 + ReactInstrumentation.debugTool.onUnmountComponent(this._contentDebugID);
7052 + }
7053 + this._contentDebugID = null;
7054 + return;
7055 + }
7056 +
7057 this._contentDebugID = contentDebugID;
7058 + var text = '' + content;
7059 +
7060 ReactInstrumentation.debugTool.onSetDisplayName(contentDebugID, '#text');
6954 - ReactInstrumentation.debugTool.onSetText(contentDebugID, '' + contentToUse);
6955 - ReactInstrumentation.debugTool.onMountComponent(contentDebugID);
6956 - ReactInstrumentation.debugTool.onSetChildren(debugID, [contentDebugID]);
7061 + ReactInstrumentation.debugTool.onSetParent(contentDebugID, debugID);
7062 + ReactInstrumentation.debugTool.onSetText(contentDebugID, text);
7063 +
7064 + if (hasExistingContent) {
7065 + ReactInstrumentation.debugTool.onBeforeUpdateComponent(contentDebugID, content);
7066 + ReactInstrumentation.debugTool.onUpdateComponent(contentDebugID);
7067 + } else {
7068 + ReactInstrumentation.debugTool.onBeforeMountComponent(contentDebugID, content);
7069 + ReactInstrumentation.debugTool.onMountComponent(contentDebugID);
7070 + ReactInstrumentation.debugTool.onSetChildren(debugID, [contentDebugID]);
7071 + }
7072 };
7073 }
7074
@@ -6989,9 +7104,9 @@ function trapBubbledEventsLocal() {
7104 var inst = this;
7105 // If a component renders to null or if another component fatals and causes
7106 // the state of the tree to be corrupted, `node` here can be null.
6992 - !inst._rootNodeID ? "development" !== 'production' ? invariant(false, 'Must be mounted to trap events') : invariant(false) : void 0;
7107 + !inst._rootNodeID ? "development" !== 'production' ? invariant(false, 'Must be mounted to trap events') : _prodInvariant('63') : void 0;
7108 var node = getNode(inst);
6994 - !node ? "development" !== 'production' ? invariant(false, 'trapBubbledEvent(...): Requires node to be rendered.') : invariant(false) : void 0;
7109 + !node ? "development" !== 'production' ? invariant(false, 'trapBubbledEvent(...): Requires node to be rendered.') : _prodInvariant('64') : void 0;
7110
7111 switch (inst._tag) {
7112 case 'iframe':
@@ -7008,7 +7123,9 @@ function trapBubbledEventsLocal() {
7123 inst._wrapperState.listeners.push(ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes[event], mediaEvents[event], node));
7124 }
7125 }
7011 -
7126 + break;
7127 + case 'source':
7128 + inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topError, 'error', node)];
7129 break;
7130 case 'img':
7131 inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topError, 'error', node), ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load', node)];
@@ -7073,7 +7190,7 @@ var hasOwnProperty = {}.hasOwnProperty;
7190
7191 function validateDangerousTag(tag) {
7192 if (!hasOwnProperty.call(validatedTagCache, tag)) {
7076 - !VALID_TAG_REGEX.test(tag) ? "development" !== 'production' ? invariant(false, 'Invalid tag: %s', tag) : invariant(false) : void 0;
7193 + !VALID_TAG_REGEX.test(tag) ? "development" !== 'production' ? invariant(false, 'Invalid tag: %s', tag) : _prodInvariant('65', tag) : void 0;
7194 validatedTagCache[tag] = true;
7195 }
7196 }
@@ -7107,17 +7224,17 @@ function ReactDOMComponent(element) {
7224 this._renderedChildren = null;
7225 this._previousStyle = null;
7226 this._previousStyleCopy = null;
7110 - this._nativeNode = null;
7111 - this._nativeParent = null;
7227 + this._hostNode = null;
7228 + this._hostParent = null;
7229 this._rootNodeID = null;
7230 this._domID = null;
7114 - this._nativeContainerInfo = null;
7231 + this._hostContainerInfo = null;
7232 this._wrapperState = null;
7233 this._topLevelWrapper = null;
7234 this._flags = 0;
7235 if ("development" !== 'production') {
7236 this._ancestorInfo = null;
7120 - this._contentDebugID = null;
7237 + setContentChildForInstrumentation.call(this, null);
7238 }
7239 }
7240
@@ -7132,50 +7249,52 @@ ReactDOMComponent.Mixin = {
7249 * @internal
7250 * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
7251 * @param {?ReactDOMComponent} the containing DOM component instance
7135 - * @param {?object} info about the native container
7252 + * @param {?object} info about the host container
7253 * @param {object} context
7254 * @return {string} The computed markup.
7255 */
7139 - mountComponent: function (transaction, nativeParent, nativeContainerInfo, context) {
7256 + mountComponent: function (transaction, hostParent, hostContainerInfo, context) {
7257 this._rootNodeID = globalIdCounter++;
7141 - this._domID = nativeContainerInfo._idCounter++;
7142 - this._nativeParent = nativeParent;
7143 - this._nativeContainerInfo = nativeContainerInfo;
7258 + this._domID = hostContainerInfo._idCounter++;
7259 + this._hostParent = hostParent;
7260 + this._hostContainerInfo = hostContainerInfo;
7261
7262 var props = this._currentElement.props;
7263
7264 switch (this._tag) {
7265 + case 'audio':
7266 + case 'form':
7267 case 'iframe':
7149 - case 'object':
7268 case 'img':
7151 - case 'form':
7269 + case 'link':
7270 + case 'object':
7271 + case 'source':
7272 case 'video':
7153 - case 'audio':
7273 this._wrapperState = {
7274 listeners: null
7275 };
7276 transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);
7277 break;
7278 case 'button':
7160 - props = ReactDOMButton.getNativeProps(this, props, nativeParent);
7279 + props = ReactDOMButton.getHostProps(this, props, hostParent);
7280 break;
7281 case 'input':
7163 - ReactDOMInput.mountWrapper(this, props, nativeParent);
7164 - props = ReactDOMInput.getNativeProps(this, props);
7282 + ReactDOMInput.mountWrapper(this, props, hostParent);
7283 + props = ReactDOMInput.getHostProps(this, props);
7284 transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);
7285 break;
7286 case 'option':
7168 - ReactDOMOption.mountWrapper(this, props, nativeParent);
7169 - props = ReactDOMOption.getNativeProps(this, props);
7287 + ReactDOMOption.mountWrapper(this, props, hostParent);
7288 + props = ReactDOMOption.getHostProps(this, props);
7289 break;
7290 case 'select':
7172 - ReactDOMSelect.mountWrapper(this, props, nativeParent);
7173 - props = ReactDOMSelect.getNativeProps(this, props);
7291 + ReactDOMSelect.mountWrapper(this, props, hostParent);
7292 + props = ReactDOMSelect.getHostProps(this, props);
7293 transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);
7294 break;
7295 case 'textarea':
7177 - ReactDOMTextarea.mountWrapper(this, props, nativeParent);
7178 - props = ReactDOMTextarea.getNativeProps(this, props);
7296 + ReactDOMTextarea.mountWrapper(this, props, hostParent);
7297 + props = ReactDOMTextarea.getHostProps(this, props);
7298 transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);
7299 break;
7300 }
@@ -7186,12 +7305,12 @@ ReactDOMComponent.Mixin = {
7305 // tags get no namespace.
7306 var namespaceURI;
7307 var parentTag;
7189 - if (nativeParent != null) {
7190 - namespaceURI = nativeParent._namespaceURI;
7191 - parentTag = nativeParent._tag;
7192 - } else if (nativeContainerInfo._tag) {
7193 - namespaceURI = nativeContainerInfo._namespaceURI;
7194 - parentTag = nativeContainerInfo._tag;
7308 + if (hostParent != null) {
7309 + namespaceURI = hostParent._namespaceURI;
7310 + parentTag = hostParent._tag;
7311 + } else if (hostContainerInfo._tag) {
7312 + namespaceURI = hostContainerInfo._namespaceURI;
7313 + parentTag = hostContainerInfo._tag;
7314 }
7315 if (namespaceURI == null || namespaceURI === DOMNamespaces.svg && parentTag === 'foreignobject') {
7316 namespaceURI = DOMNamespaces.html;
@@ -7207,10 +7326,10 @@ ReactDOMComponent.Mixin = {
7326
7327 if ("development" !== 'production') {
7328 var parentInfo;
7210 - if (nativeParent != null) {
7211 - parentInfo = nativeParent._ancestorInfo;
7212 - } else if (nativeContainerInfo._tag) {
7213 - parentInfo = nativeContainerInfo._ancestorInfo;
7329 + if (hostParent != null) {
7330 + parentInfo = hostParent._ancestorInfo;
7331 + } else if (hostContainerInfo._tag) {
7332 + parentInfo = hostContainerInfo._ancestorInfo;
7333 }
7334 if (parentInfo) {
7335 // parentInfo should always be present except for the top-level
@@ -7222,7 +7341,7 @@ ReactDOMComponent.Mixin = {
7341
7342 var mountImage;
7343 if (transaction.useCreateElement) {
7225 - var ownerDocument = nativeContainerInfo._ownerDocument;
7344 + var ownerDocument = hostContainerInfo._ownerDocument;
7345 var el;
7346 if (namespaceURI === DOMNamespaces.html) {
7347 if (this._tag === 'script') {
@@ -7232,15 +7351,20 @@ ReactDOMComponent.Mixin = {
7351 var type = this._currentElement.type;
7352 div.innerHTML = '<' + type + '></' + type + '>';
7353 el = div.removeChild(div.firstChild);
7354 + } else if (props.is) {
7355 + el = ownerDocument.createElement(this._currentElement.type, props.is);
7356 } else {
7236 - el = ownerDocument.createElement(this._currentElement.type, props.is || null);
7357 + // Separate else branch instead of using `props.is || undefined` above becuase of a Firefox bug.
7358 + // See discussion in https://github.com/facebook/react/pull/6896
7359 + // and discussion in https://bugzilla.mozilla.org/show_bug.cgi?id=1276240
7360 + el = ownerDocument.createElement(this._currentElement.type);
7361 }
7362 } else {
7363 el = ownerDocument.createElementNS(namespaceURI, this._currentElement.type);
7364 }
7365 ReactDOMComponentTree.precacheNode(this, el);
7366 this._flags |= Flags.hasCachedChildNodes;
7243 - if (!this._nativeParent) {
7367 + if (!this._hostParent) {
7368 DOMPropertyOperations.setAttributeForRoot(el);
7369 }
7370 this._updateDOMProperties(null, props, transaction);
@@ -7258,16 +7382,31 @@ ReactDOMComponent.Mixin = {
7382 }
7383
7384 switch (this._tag) {
7261 - case 'button':
7385 case 'input':
7263 - case 'select':
7386 + transaction.getReactMountReady().enqueue(inputPostMount, this);
7387 + if (props.autoFocus) {
7388 + transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);
7389 + }
7390 + break;
7391 case 'textarea':
7392 + transaction.getReactMountReady().enqueue(textareaPostMount, this);
7393 + if (props.autoFocus) {
7394 + transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);
7395 + }
7396 + break;
7397 + case 'select':
7398 + if (props.autoFocus) {
7399 + transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);
7400 + }
7401 + break;
7402 + case 'button':
7403 if (props.autoFocus) {
7404 transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);
7405 }
7406 break;
7407 case 'option':
7408 transaction.getReactMountReady().enqueue(optionPostMount, this);
7409 + break;
7410 }
7411
7412 return mountImage;
@@ -7332,7 +7471,7 @@ ReactDOMComponent.Mixin = {
7471 return ret;
7472 }
7473
7335 - if (!this._nativeParent) {
7474 + if (!this._hostParent) {
7475 ret += ' ' + DOMPropertyOperations.createMarkupForRoot();
7476 }
7477 ret += ' ' + DOMPropertyOperations.createMarkupForID(this._domID);
@@ -7428,7 +7567,7 @@ ReactDOMComponent.Mixin = {
7567 },
7568
7569 /**
7431 - * Updates a native DOM component after it has already been allocated and
7570 + * Updates a DOM component after it has already been allocated and
7571 * attached to the DOM. Reconciles the root DOM node, then recurses.
7572 *
7573 * @param {ReactReconcileTransaction} transaction
@@ -7443,26 +7582,26 @@ ReactDOMComponent.Mixin = {
7582
7583 switch (this._tag) {
7584 case 'button':
7446 - lastProps = ReactDOMButton.getNativeProps(this, lastProps);
7447 - nextProps = ReactDOMButton.getNativeProps(this, nextProps);
7585 + lastProps = ReactDOMButton.getHostProps(this, lastProps);
7586 + nextProps = ReactDOMButton.getHostProps(this, nextProps);
7587 break;
7588 case 'input':
7589 ReactDOMInput.updateWrapper(this);
7451 - lastProps = ReactDOMInput.getNativeProps(this, lastProps);
7452 - nextProps = ReactDOMInput.getNativeProps(this, nextProps);
7590 + lastProps = ReactDOMInput.getHostProps(this, lastProps);
7591 + nextProps = ReactDOMInput.getHostProps(this, nextProps);
7592 break;
7593 case 'option':
7455 - lastProps = ReactDOMOption.getNativeProps(this, lastProps);
7456 - nextProps = ReactDOMOption.getNativeProps(this, nextProps);
7594 + lastProps = ReactDOMOption.getHostProps(this, lastProps);
7595 + nextProps = ReactDOMOption.getHostProps(this, nextProps);
7596 break;
7597 case 'select':
7459 - lastProps = ReactDOMSelect.getNativeProps(this, lastProps);
7460 - nextProps = ReactDOMSelect.getNativeProps(this, nextProps);
7598 + lastProps = ReactDOMSelect.getHostProps(this, lastProps);
7599 + nextProps = ReactDOMSelect.getHostProps(this, nextProps);
7600 break;
7601 case 'textarea':
7602 ReactDOMTextarea.updateWrapper(this);
7464 - lastProps = ReactDOMTextarea.getNativeProps(this, lastProps);
7465 - nextProps = ReactDOMTextarea.getNativeProps(this, nextProps);
7603 + lastProps = ReactDOMTextarea.getHostProps(this, lastProps);
7604 + nextProps = ReactDOMTextarea.getHostProps(this, nextProps);
7605 break;
7606 }
7607
@@ -7517,6 +7656,10 @@ ReactDOMComponent.Mixin = {
7656 // listener (e.g., onClick={null})
7657 deleteListener(this, propKey);
7658 }
7659 + } else if (isCustomComponent(this._tag, lastProps)) {
7660 + if (!RESERVED_PROPS.hasOwnProperty(propKey)) {
7661 + DOMPropertyOperations.deleteValueForAttribute(getNode(this), propKey);
7662 + }
7663 } else if (DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) {
7664 DOMPropertyOperations.deleteValueForProperty(getNode(this), propKey);
7665 }
@@ -7620,7 +7763,6 @@ ReactDOMComponent.Mixin = {
7763 if (lastContent !== nextContent) {
7764 this.updateTextContent('' + nextContent);
7765 if ("development" !== 'production') {
7623 - this._contentDebugID = this._debugID + '#text';
7766 setContentChildForInstrumentation.call(this, nextContent);
7767 }
7768 }
@@ -7633,17 +7775,14 @@ ReactDOMComponent.Mixin = {
7775 }
7776 } else if (nextChildren != null) {
7777 if ("development" !== 'production') {
7636 - if (this._contentDebugID) {
7637 - ReactInstrumentation.debugTool.onUnmountComponent(this._contentDebugID);
7638 - this._contentDebugID = null;
7639 - }
7778 + setContentChildForInstrumentation.call(this, null);
7779 }
7780
7781 this.updateChildren(nextChildren, transaction, context);
7782 }
7783 },
7784
7646 - getNativeNode: function () {
7785 + getHostNode: function () {
7786 return getNode(this);
7787 },
7788
@@ -7655,12 +7794,14 @@ ReactDOMComponent.Mixin = {
7794 */
7795 unmountComponent: function (safely) {
7796 switch (this._tag) {
7797 + case 'audio':
7798 + case 'form':
7799 case 'iframe':
7659 - case 'object':
7800 case 'img':
7661 - case 'form':
7801 + case 'link':
7802 + case 'object':
7803 + case 'source':
7804 case 'video':
7663 - case 'audio':
7805 var listeners = this._wrapperState.listeners;
7806 if (listeners) {
7807 for (var i = 0; i < listeners.length; i++) {
@@ -7677,7 +7818,7 @@ ReactDOMComponent.Mixin = {
7818 * take advantage of React's reconciliation for styling and <title>
7819 * management. So we just document it and throw in dangerous cases.
7820 */
7680 - !false ? "development" !== 'production' ? invariant(false, '<%s> tried to unmount. Because of cross-browser quirks it is ' + 'impossible to unmount some top-level components (eg <html>, ' + '<head>, and <body>) reliably and efficiently. To fix this, have a ' + 'single top-level component that never unmounts render these ' + 'elements.', this._tag) : invariant(false) : void 0;
7821 + !false ? "development" !== 'production' ? invariant(false, '<%s> tried to unmount. Because of cross-browser quirks it is impossible to unmount some top-level components (eg <html>, <head>, and <body>) reliably and efficiently. To fix this, have a single top-level component that never unmounts render these elements.', this._tag) : _prodInvariant('66', this._tag) : void 0;
7822 break;
7823 }
7824
@@ -7690,10 +7831,7 @@ ReactDOMComponent.Mixin = {
7831 this._wrapperState = null;
7832
7833 if ("development" !== 'production') {
7693 - if (this._contentDebugID) {
7694 - ReactInstrumentation.debugTool.onUnmountComponent(this._contentDebugID);
7695 - this._contentDebugID = null;
7696 - }
7834 + setContentChildForInstrumentation.call(this, null);
7835 }
7836 },
7837
@@ -7706,7 +7844,7 @@ ReactDOMComponent.Mixin = {
7844 _assign(ReactDOMComponent.prototype, ReactDOMComponent.Mixin, ReactMultiChild.Mixin);
7845
7846 module.exports = ReactDOMComponent;
7709 -},{"1":1,"10":10,"11":11,"118":118,"132":132,"141":141,"149":149,"157":157,"16":16,"161":161,"166":166,"167":167,"168":168,"17":17,"18":18,"27":27,"32":32,"38":38,"4":4,"40":40,"41":41,"48":48,"50":50,"51":51,"55":55,"71":71,"75":75,"8":8,"9":9,"90":90}],40:[function(_dereq_,module,exports){
7847 +},{"1":1,"10":10,"11":11,"119":119,"133":133,"137":137,"143":143,"151":151,"159":159,"16":16,"163":163,"168":168,"169":169,"17":17,"170":170,"18":18,"27":27,"32":32,"38":38,"4":4,"40":40,"41":41,"48":48,"50":50,"51":51,"55":55,"73":73,"77":77,"8":8,"9":9,"90":90}],40:[function(_dereq_,module,exports){
7848 /**
7849 * Copyright 2015-present, Facebook, Inc.
7850 * All rights reserved.
@@ -7739,10 +7877,12 @@ module.exports = ReactDOMComponentFlags;
7877
7878 'use strict';
7879
7880 +var _prodInvariant = _dereq_(137);
7881 +
7882 var DOMProperty = _dereq_(10);
7883 var ReactDOMComponentFlags = _dereq_(40);
7884
7745 -var invariant = _dereq_(157);
7885 +var invariant = _dereq_(159);
7886
7887 var ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;
7888 var Flags = ReactDOMComponentFlags;
@@ -7750,13 +7890,13 @@ var Flags = ReactDOMComponentFlags;
7890 var internalInstanceKey = '__reactInternalInstance$' + Math.random().toString(36).slice(2);
7891
7892 /**
7753 - * Drill down (through composites and empty components) until we get a native or
7754 - * native text component.
7893 + * Drill down (through composites and empty components) until we get a host or
7894 + * host text component.
7895 *
7896 * This is pretty polymorphic but unavoidable with the current structure we have
7897 * for `_renderedChildren`.
7898 */
7759 -function getRenderedNativeOrTextFromComponent(component) {
7899 +function getRenderedHostOrTextFromComponent(component) {
7900 var rendered;
7901 while (rendered = component._renderedComponent) {
7902 component = rendered;
@@ -7765,25 +7905,25 @@ function getRenderedNativeOrTextFromComponent(component) {
7905 }
7906
7907 /**
7768 - * Populate `_nativeNode` on the rendered native/text component with the given
7908 + * Populate `_hostNode` on the rendered host/text component with the given
7909 * DOM node. The passed `inst` can be a composite.
7910 */
7911 function precacheNode(inst, node) {
7772 - var nativeInst = getRenderedNativeOrTextFromComponent(inst);
7773 - nativeInst._nativeNode = node;
7774 - node[internalInstanceKey] = nativeInst;
7912 + var hostInst = getRenderedHostOrTextFromComponent(inst);
7913 + hostInst._hostNode = node;
7914 + node[internalInstanceKey] = hostInst;
7915 }
7916
7917 function uncacheNode(inst) {
7778 - var node = inst._nativeNode;
7918 + var node = inst._hostNode;
7919 if (node) {
7920 delete node[internalInstanceKey];
7781 - inst._nativeNode = null;
7921 + inst._hostNode = null;
7922 }
7923 }
7924
7925 /**
7786 - * Populate `_nativeNode` on each child of `inst`, assuming that the children
7926 + * Populate `_hostNode` on each child of `inst`, assuming that the children
7927 * match up with the DOM (element) children of `node`.
7928 *
7929 * We cache entire levels at once to avoid an n^2 problem where we access the
@@ -7807,7 +7947,7 @@ function precacheChildNodes(inst, node) {
7947 continue;
7948 }
7949 var childInst = children[name];
7810 - var childID = getRenderedNativeOrTextFromComponent(childInst)._domID;
7950 + var childID = getRenderedHostOrTextFromComponent(childInst)._domID;
7951 if (childID == null) {
7952 // We're currently unmounting this child in ReactMultiChild; skip it.
7953 continue;
@@ -7820,7 +7960,7 @@ function precacheChildNodes(inst, node) {
7960 }
7961 }
7962 // We reached the end of the DOM children without finding an ID match.
7823 - !false ? "development" !== 'production' ? invariant(false, 'Unable to find element with ID %s.', childID) : invariant(false) : void 0;
7963 + !false ? "development" !== 'production' ? invariant(false, 'Unable to find element with ID %s.', childID) : _prodInvariant('32', childID) : void 0;
7964 }
7965 inst._flags |= Flags.hasCachedChildNodes;
7966 }
@@ -7865,7 +8005,7 @@ function getClosestInstanceFromNode(node) {
8005 */
8006 function getInstanceFromNode(node) {
8007 var inst = getClosestInstanceFromNode(node);
7868 - if (inst != null && inst._nativeNode === node) {
8008 + if (inst != null && inst._hostNode === node) {
8009 return inst;
8010 } else {
8011 return null;
@@ -7879,27 +8019,27 @@ function getInstanceFromNode(node) {
8019 function getNodeFromInstance(inst) {
8020 // Without this first invariant, passing a non-DOM-component triggers the next
8021 // invariant for a missing parent, which is super confusing.
7882 - !(inst._nativeNode !== undefined) ? "development" !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : invariant(false) : void 0;
8022 + !(inst._hostNode !== undefined) ? "development" !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : _prodInvariant('33') : void 0;
8023
7884 - if (inst._nativeNode) {
7885 - return inst._nativeNode;
8024 + if (inst._hostNode) {
8025 + return inst._hostNode;
8026 }
8027
8028 // Walk up the tree until we find an ancestor whose DOM node we have cached.
8029 var parents = [];
7890 - while (!inst._nativeNode) {
8030 + while (!inst._hostNode) {
8031 parents.push(inst);
7892 - !inst._nativeParent ? "development" !== 'production' ? invariant(false, 'React DOM tree root should always have a node reference.') : invariant(false) : void 0;
7893 - inst = inst._nativeParent;
8032 + !inst._hostParent ? "development" !== 'production' ? invariant(false, 'React DOM tree root should always have a node reference.') : _prodInvariant('34') : void 0;
8033 + inst = inst._hostParent;
8034 }
8035
8036 // Now parents contains each ancestor that does *not* have a cached native
8037 // node, and `inst` is the deepest ancestor that does.
8038 for (; parents.length; inst = parents.pop()) {
7899 - precacheChildNodes(inst, inst._nativeNode);
8039 + precacheChildNodes(inst, inst._hostNode);
8040 }
8041
7902 - return inst._nativeNode;
8042 + return inst._hostNode;
8043 }
8044
8045 var ReactDOMComponentTree = {
@@ -7912,7 +8052,7 @@ var ReactDOMComponentTree = {
8052 };
8053
8054 module.exports = ReactDOMComponentTree;
7915 -},{"10":10,"157":157,"40":40}],42:[function(_dereq_,module,exports){
8055 +},{"10":10,"137":137,"159":159,"40":40}],42:[function(_dereq_,module,exports){
8056 /**
8057 * Copyright 2013-present, Facebook, Inc.
8058 * All rights reserved.
@@ -7926,7 +8066,7 @@ module.exports = ReactDOMComponentTree;
8066
8067 'use strict';
8068
7929 -var validateDOMNesting = _dereq_(141);
8069 +var validateDOMNesting = _dereq_(143);
8070
8071 var DOC_NODE_TYPE = 9;
8072
@@ -7946,7 +8086,7 @@ function ReactDOMContainerInfo(topLevelWrapper, node) {
8086 }
8087
8088 module.exports = ReactDOMContainerInfo;
7949 -},{"141":141}],43:[function(_dereq_,module,exports){
8089 +},{"143":143}],43:[function(_dereq_,module,exports){
8090 /**
8091 * Copyright 2013-present, Facebook, Inc.
8092 * All rights reserved.
@@ -7961,8 +8101,9 @@ module.exports = ReactDOMContainerInfo;
8101 'use strict';
8102
8103 var ReactDOMUnknownPropertyDevtool = _dereq_(57);
8104 +var ReactDebugTool = _dereq_(58);
8105
7965 -var warning = _dereq_(167);
8106 +var warning = _dereq_(169);
8107
8108 var eventHandlers = [];
8109 var handlerDoesThrowForEvent = {};
@@ -7975,7 +8116,7 @@ function emitEvent(handlerFunctionName, arg1, arg2, arg3, arg4, arg5) {
8116 handler[handlerFunctionName](arg1, arg2, arg3, arg4, arg5);
8117 }
8118 } catch (e) {
7978 - "development" !== 'production' ? warning(!handlerDoesThrowForEvent[handlerFunctionName], 'exception thrown by devtool while handling %s: %s', handlerFunctionName, e.message) : void 0;
8119 + "development" !== 'production' ? warning(handlerDoesThrowForEvent[handlerFunctionName], 'exception thrown by devtool while handling %s: %s', handlerFunctionName, e + '\n' + e.stack) : void 0;
8120 handlerDoesThrowForEvent[handlerFunctionName] = true;
8121 }
8122 });
@@ -7984,9 +8125,11 @@ function emitEvent(handlerFunctionName, arg1, arg2, arg3, arg4, arg5) {
8125
8126 var ReactDOMDebugTool = {
8127 addDevtool: function (devtool) {
8128 + ReactDebugTool.addDevtool(devtool);
8129 eventHandlers.push(devtool);
8130 },
8131 removeDevtool: function (devtool) {
8132 + ReactDebugTool.removeDevtool(devtool);
8133 for (var i = 0; i < eventHandlers.length; i++) {
8134 if (eventHandlers[i] === devtool) {
8135 eventHandlers.splice(i, 1);
@@ -8002,13 +8145,16 @@ var ReactDOMDebugTool = {
8145 },
8146 onDeleteValueForProperty: function (node, name) {
8147 emitEvent('onDeleteValueForProperty', node, name);
8148 + },
8149 + onTestEvent: function () {
8150 + emitEvent('onTestEvent');
8151 }
8152 };
8153
8154 ReactDOMDebugTool.addDevtool(ReactDOMUnknownPropertyDevtool);
8155
8156 module.exports = ReactDOMDebugTool;
8011 -},{"167":167,"57":57}],44:[function(_dereq_,module,exports){
8157 +},{"169":169,"57":57,"58":58}],44:[function(_dereq_,module,exports){
8158 /**
8159 * Copyright 2014-present, Facebook, Inc.
8160 * All rights reserved.
@@ -8022,7 +8168,7 @@ module.exports = ReactDOMDebugTool;
8168
8169 'use strict';
8170
8025 -var _assign = _dereq_(168);
8171 +var _assign = _dereq_(170);
8172
8173 var DOMLazyTree = _dereq_(8);
8174 var ReactDOMComponentTree = _dereq_(41);
@@ -8031,21 +8177,21 @@ var ReactDOMEmptyComponent = function (instantiate) {
8177 // ReactCompositeComponent uses this:
8178 this._currentElement = null;
8179 // ReactDOMComponentTree uses these:
8034 - this._nativeNode = null;
8035 - this._nativeParent = null;
8036 - this._nativeContainerInfo = null;
8180 + this._hostNode = null;
8181 + this._hostParent = null;
8182 + this._hostContainerInfo = null;
8183 this._domID = null;
8184 };
8185 _assign(ReactDOMEmptyComponent.prototype, {
8040 - mountComponent: function (transaction, nativeParent, nativeContainerInfo, context) {
8041 - var domID = nativeContainerInfo._idCounter++;
8186 + mountComponent: function (transaction, hostParent, hostContainerInfo, context) {
8187 + var domID = hostContainerInfo._idCounter++;
8188 this._domID = domID;
8043 - this._nativeParent = nativeParent;
8044 - this._nativeContainerInfo = nativeContainerInfo;
8189 + this._hostParent = hostParent;
8190 + this._hostContainerInfo = hostContainerInfo;
8191
8192 var nodeValue = ' react-empty: ' + this._domID + ' ';
8193 if (transaction.useCreateElement) {
8048 - var ownerDocument = nativeContainerInfo._ownerDocument;
8194 + var ownerDocument = hostContainerInfo._ownerDocument;
8195 var node = ownerDocument.createComment(nodeValue);
8196 ReactDOMComponentTree.precacheNode(this, node);
8197 return DOMLazyTree(node);
@@ -8060,7 +8206,7 @@ _assign(ReactDOMEmptyComponent.prototype, {
8206 }
8207 },
8208 receiveComponent: function () {},
8063 - getNativeNode: function () {
8209 + getHostNode: function () {
8210 return ReactDOMComponentTree.getNodeFromInstance(this);
8211 },
8212 unmountComponent: function () {
@@ -8069,7 +8215,7 @@ _assign(ReactDOMEmptyComponent.prototype, {
8215 });
8216
8217 module.exports = ReactDOMEmptyComponent;
8072 -},{"168":168,"41":41,"8":8}],45:[function(_dereq_,module,exports){
8218 +},{"170":170,"41":41,"8":8}],45:[function(_dereq_,module,exports){
8219 /**
8220 * Copyright 2013-present, Facebook, Inc.
8221 * All rights reserved.
@@ -8084,9 +8230,8 @@ module.exports = ReactDOMEmptyComponent;
8230 'use strict';
8231
8232 var ReactElement = _dereq_(61);
8087 -var ReactElementValidator = _dereq_(62);
8233
8089 -var mapObject = _dereq_(162);
8234 +var mapObject = _dereq_(164);
8235
8236 /**
8237 * Create a factory that creates HTML tag elements.
@@ -8096,6 +8241,7 @@ var mapObject = _dereq_(162);
8241 */
8242 function createDOMFactory(tag) {
8243 if ("development" !== 'production') {
8244 + var ReactElementValidator = _dereq_(62);
8245 return ReactElementValidator.createFactory(tag);
8246 }
8247 return ReactElement.createFactory(tag);
@@ -8246,7 +8392,7 @@ var ReactDOMFactories = mapObject({
8392 }, createDOMFactory);
8393
8394 module.exports = ReactDOMFactories;
8249 -},{"162":162,"61":61,"62":62}],46:[function(_dereq_,module,exports){
8395 +},{"164":164,"61":61,"62":62}],46:[function(_dereq_,module,exports){
8396 /**
8397 * Copyright 2013-present, Facebook, Inc.
8398 * All rights reserved.
@@ -8314,7 +8460,8 @@ module.exports = ReactDOMIDOperations;
8460
8461 'use strict';
8462
8317 -var _assign = _dereq_(168);
8463 +var _prodInvariant = _dereq_(137),
8464 + _assign = _dereq_(170);
8465
8466 var DisabledInputUtils = _dereq_(14);
8467 var DOMPropertyOperations = _dereq_(11);
@@ -8322,8 +8469,8 @@ var LinkedValueUtils = _dereq_(24);
8469 var ReactDOMComponentTree = _dereq_(41);
8470 var ReactUpdates = _dereq_(93);
8471
8325 -var invariant = _dereq_(157);
8326 -var warning = _dereq_(167);
8472 +var invariant = _dereq_(159);
8473 +var warning = _dereq_(169);
8474
8475 var didWarnValueLink = false;
8476 var didWarnCheckedLink = false;
@@ -8348,8 +8495,13 @@ function warnIfValueIsNull(props) {
8495 }
8496 }
8497
8498 +function isControlled(props) {
8499 + var usesChecked = props.type === 'checkbox' || props.type === 'radio';
8500 + return usesChecked ? props.checked !== undefined : props.value !== undefined;
8501 +}
8502 +
8503 /**
8352 - * Implements an <input> native component that allows setting these optional
8504 + * Implements an <input> host component that allows setting these optional
8505 * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.
8506 *
8507 * If `checked` or `value` are not supplied (or null/undefined), user actions
@@ -8365,15 +8517,15 @@ function warnIfValueIsNull(props) {
8517 * @see http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html
8518 */
8519 var ReactDOMInput = {
8368 - getNativeProps: function (inst, props) {
8520 + getHostProps: function (inst, props) {
8521 var value = LinkedValueUtils.getValue(props);
8522 var checked = LinkedValueUtils.getChecked(props);
8523
8372 - var nativeProps = _assign({
8524 + var hostProps = _assign({
8525 // Make sure we set .type before any other properties (setting .value
8526 // before .type means .value is lost in IE11 and below)
8527 type: undefined
8376 - }, DisabledInputUtils.getNativeProps(inst, props), {
8528 + }, DisabledInputUtils.getHostProps(inst, props), {
8529 defaultChecked: undefined,
8530 defaultValue: undefined,
8531 value: value != null ? value : inst._wrapperState.initialValue,
@@ -8381,7 +8533,7 @@ var ReactDOMInput = {
8533 onChange: inst._wrapperState.onChange
8534 });
8535
8384 - return nativeProps;
8536 + return hostProps;
8537 },
8538
8539 mountWrapper: function (inst, props) {
@@ -8411,14 +8563,14 @@ var ReactDOMInput = {
8563
8564 var defaultValue = props.defaultValue;
8565 inst._wrapperState = {
8414 - initialChecked: props.defaultChecked || false,
8415 - initialValue: defaultValue != null ? defaultValue : null,
8566 + initialChecked: props.checked != null ? props.checked : props.defaultChecked,
8567 + initialValue: props.value != null ? props.value : defaultValue,
8568 listeners: null,
8569 onChange: _handleChange.bind(inst)
8570 };
8571
8572 if ("development" !== 'production') {
8421 - inst._wrapperState.controlled = props.checked !== undefined || props.value !== undefined;
8573 + inst._wrapperState.controlled = isControlled(props);
8574 }
8575 },
8576
@@ -8428,16 +8580,14 @@ var ReactDOMInput = {
8580 if ("development" !== 'production') {
8581 warnIfValueIsNull(props);
8582
8431 - var initialValue = inst._wrapperState.initialChecked || inst._wrapperState.initialValue;
8432 - var defaultValue = props.defaultChecked || props.defaultValue;
8433 - var controlled = props.checked !== undefined || props.value !== undefined;
8583 + var controlled = isControlled(props);
8584 var owner = inst._currentElement._owner;
8585
8436 - if ((initialValue || !inst._wrapperState.controlled) && controlled && !didWarnUncontrolledToControlled) {
8586 + if (!inst._wrapperState.controlled && controlled && !didWarnUncontrolledToControlled) {
8587 "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;
8588 didWarnUncontrolledToControlled = true;
8589 }
8440 - if (inst._wrapperState.controlled && (defaultValue || !controlled) && !didWarnControlledToUncontrolled) {
8590 + if (inst._wrapperState.controlled && !controlled && !didWarnControlledToUncontrolled) {
8591 "development" !== 'production' ? warning(false, '%s is changing a controlled input of type %s to be uncontrolled. ' + 'Input elements should not switch from controlled to uncontrolled (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;
8592 didWarnControlledToUncontrolled = true;
8593 }
@@ -8449,12 +8599,44 @@ var ReactDOMInput = {
8599 DOMPropertyOperations.setValueForProperty(ReactDOMComponentTree.getNodeFromInstance(inst), 'checked', checked || false);
8600 }
8601
8602 + var node = ReactDOMComponentTree.getNodeFromInstance(inst);
8603 var value = LinkedValueUtils.getValue(props);
8604 if (value != null) {
8605 +
8606 // Cast `value` to a string to ensure the value is set correctly. While
8607 // browsers typically do this as necessary, jsdom doesn't.
8456 - DOMPropertyOperations.setValueForProperty(ReactDOMComponentTree.getNodeFromInstance(inst), 'value', '' + value);
8608 + var newValue = '' + value;
8609 +
8610 + // To avoid side effects (such as losing text selection), only set value if changed
8611 + if (newValue !== node.value) {
8612 + node.value = newValue;
8613 + }
8614 + } else {
8615 + if (props.value == null && props.defaultValue != null) {
8616 + node.defaultValue = '' + props.defaultValue;
8617 + }
8618 + if (props.checked == null && props.defaultChecked != null) {
8619 + node.defaultChecked = !!props.defaultChecked;
8620 + }
8621 }
8622 + },
8623 +
8624 + postMountWrapper: function (inst) {
8625 + // This is in postMount because we need access to the DOM node, which is not
8626 + // available until after the component has mounted.
8627 + var node = ReactDOMComponentTree.getNodeFromInstance(inst);
8628 + node.value = node.value; // Detach value from defaultValue
8629 +
8630 + // Normally, we'd just do `node.checked = node.checked` upon initial mount, less this bug
8631 + // this is needed to work around a chrome bug where setting defaultChecked
8632 + // will sometimes influence the value of checked (even after detachment).
8633 + // Reference: https://bugs.chromium.org/p/chromium/issues/detail?id=608416
8634 + // We need to temporarily unset name to avoid disrupting radio button groups.
8635 + var name = node.name;
8636 + node.name = undefined;
8637 + node.defaultChecked = !node.defaultChecked;
8638 + node.defaultChecked = !node.defaultChecked;
8639 + node.name = name;
8640 }
8641 };
8642
@@ -8495,7 +8677,7 @@ function _handleChange(event) {
8677 // That's probably okay; we don't support it just as we don't support
8678 // mixing React radio buttons with non-React ones.
8679 var otherInstance = ReactDOMComponentTree.getInstanceFromNode(otherNode);
8498 - !otherInstance ? "development" !== 'production' ? invariant(false, 'ReactDOMInput: Mixing React and non-React radio inputs with the ' + 'same `name` is not supported.') : invariant(false) : void 0;
8680 + !otherInstance ? "development" !== 'production' ? invariant(false, 'ReactDOMInput: Mixing React and non-React radio inputs with the same `name` is not supported.') : _prodInvariant('90') : void 0;
8681 // If this is a controlled radio button group, forcing the input that
8682 // was previously checked to update will cause it to be come re-checked
8683 // as appropriate.
@@ -8507,7 +8689,7 @@ function _handleChange(event) {
8689 }
8690
8691 module.exports = ReactDOMInput;
8510 -},{"11":11,"14":14,"157":157,"167":167,"168":168,"24":24,"41":41,"93":93}],49:[function(_dereq_,module,exports){
8692 +},{"11":11,"137":137,"14":14,"159":159,"169":169,"170":170,"24":24,"41":41,"93":93}],49:[function(_dereq_,module,exports){
8693 /**
8694 * Copyright 2013-present, Facebook, Inc.
8695 * All rights reserved.
@@ -8538,19 +8720,40 @@ module.exports = { debugTool: ReactDOMDebugTool };
8720
8721 'use strict';
8722
8541 -var _assign = _dereq_(168);
8723 +var _assign = _dereq_(170);
8724
8725 var ReactChildren = _dereq_(29);
8726 var ReactDOMComponentTree = _dereq_(41);
8727 var ReactDOMSelect = _dereq_(51);
8728
8547 -var warning = _dereq_(167);
8729 +var warning = _dereq_(169);
8730 +var didWarnInvalidOptionChildren = false;
8731 +
8732 +function flattenChildren(children) {
8733 + var content = '';
8734 +
8735 + // Flatten children and warn if they aren't strings or numbers;
8736 + // invalid types are ignored.
8737 + ReactChildren.forEach(children, function (child) {
8738 + if (child == null) {
8739 + return;
8740 + }
8741 + if (typeof child === 'string' || typeof child === 'number') {
8742 + content += child;
8743 + } else if (!didWarnInvalidOptionChildren) {
8744 + didWarnInvalidOptionChildren = true;
8745 + "development" !== 'production' ? warning(false, 'Only strings and numbers are supported as <option> children.') : void 0;
8746 + }
8747 + });
8748 +
8749 + return content;
8750 +}
8751
8752 /**
8550 - * Implements an <option> native component that warns when `selected` is set.
8753 + * Implements an <option> host component that warns when `selected` is set.
8754 */
8755 var ReactDOMOption = {
8553 - mountWrapper: function (inst, props, nativeParent) {
8756 + mountWrapper: function (inst, props, hostParent) {
8757 // TODO (yungsters): Remove support for `selected` in <option>.
8758 if ("development" !== 'production') {
8759 "development" !== 'production' ? warning(props.selected == null, 'Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.') : void 0;
@@ -8558,11 +8761,11 @@ var ReactDOMOption = {
8761
8762 // Look up whether this option is 'selected'
8763 var selectValue = null;
8561 - if (nativeParent != null) {
8562 - var selectParent = nativeParent;
8764 + if (hostParent != null) {
8765 + var selectParent = hostParent;
8766
8767 if (selectParent._tag === 'optgroup') {
8565 - selectParent = selectParent._nativeParent;
8768 + selectParent = selectParent._hostParent;
8769 }
8770
8771 if (selectParent != null && selectParent._tag === 'select') {
@@ -8574,17 +8777,23 @@ var ReactDOMOption = {
8777 // or missing (e.g., for <datalist>), we don't change props.selected
8778 var selected = null;
8779 if (selectValue != null) {
8780 + var value;
8781 + if (props.value != null) {
8782 + value = props.value + '';
8783 + } else {
8784 + value = flattenChildren(props.children);
8785 + }
8786 selected = false;
8787 if (Array.isArray(selectValue)) {
8788 // multiple
8789 for (var i = 0; i < selectValue.length; i++) {
8581 - if ('' + selectValue[i] === '' + props.value) {
8790 + if ('' + selectValue[i] === value) {
8791 selected = true;
8792 break;
8793 }
8794 }
8795 } else {
8587 - selected = '' + selectValue === '' + props.value;
8796 + selected = '' + selectValue === value;
8797 }
8798 }
8799
@@ -8600,41 +8809,28 @@ var ReactDOMOption = {
8809 }
8810 },
8811
8603 - getNativeProps: function (inst, props) {
8604 - var nativeProps = _assign({ selected: undefined, children: undefined }, props);
8812 + getHostProps: function (inst, props) {
8813 + var hostProps = _assign({ selected: undefined, children: undefined }, props);
8814
8815 // Read state only from initial mount because <select> updates value
8816 // manually; we need the initial state only for server rendering
8817 if (inst._wrapperState.selected != null) {
8609 - nativeProps.selected = inst._wrapperState.selected;
8818 + hostProps.selected = inst._wrapperState.selected;
8819 }
8820
8612 - var content = '';
8613 -
8614 - // Flatten children and warn if they aren't strings or numbers;
8615 - // invalid types are ignored.
8616 - ReactChildren.forEach(props.children, function (child) {
8617 - if (child == null) {
8618 - return;
8619 - }
8620 - if (typeof child === 'string' || typeof child === 'number') {
8621 - content += child;
8622 - } else {
8623 - "development" !== 'production' ? warning(false, 'Only strings and numbers are supported as <option> children.') : void 0;
8624 - }
8625 - });
8821 + var content = flattenChildren(props.children);
8822
8823 if (content) {
8628 - nativeProps.children = content;
8824 + hostProps.children = content;
8825 }
8826
8631 - return nativeProps;
8827 + return hostProps;
8828 }
8829
8830 };
8831
8832 module.exports = ReactDOMOption;
8637 -},{"167":167,"168":168,"29":29,"41":41,"51":51}],51:[function(_dereq_,module,exports){
8833 +},{"169":169,"170":170,"29":29,"41":41,"51":51}],51:[function(_dereq_,module,exports){
8834 /**
8835 * Copyright 2013-present, Facebook, Inc.
8836 * All rights reserved.
@@ -8648,14 +8844,14 @@ module.exports = ReactDOMOption;
8844
8845 'use strict';
8846
8651 -var _assign = _dereq_(168);
8847 +var _assign = _dereq_(170);
8848
8849 var DisabledInputUtils = _dereq_(14);
8850 var LinkedValueUtils = _dereq_(24);
8851 var ReactDOMComponentTree = _dereq_(41);
8852 var ReactUpdates = _dereq_(93);
8853
8658 -var warning = _dereq_(167);
8854 +var warning = _dereq_(169);
8855
8856 var didWarnValueLink = false;
8857 var didWarnValueNull = false;
@@ -8758,7 +8954,7 @@ function updateOptions(inst, multiple, propValue) {
8954 }
8955
8956 /**
8761 - * Implements a <select> native component that allows optionally setting the
8957 + * Implements a <select> host component that allows optionally setting the
8958 * props `value` and `defaultValue`. If `multiple` is false, the prop must be a
8959 * stringable. If `multiple` is true, the prop must be an array of stringables.
8960 *
@@ -8773,8 +8969,8 @@ function updateOptions(inst, multiple, propValue) {
8969 * selected.
8970 */
8971 var ReactDOMSelect = {
8776 - getNativeProps: function (inst, props) {
8777 - return _assign({}, DisabledInputUtils.getNativeProps(inst, props), {
8972 + getHostProps: function (inst, props) {
8973 + return _assign({}, DisabledInputUtils.getHostProps(inst, props), {
8974 onChange: inst._wrapperState.onChange,
8975 value: undefined
8976 });
@@ -8848,7 +9044,7 @@ function _handleChange(event) {
9044 }
9045
9046 module.exports = ReactDOMSelect;
8851 -},{"14":14,"167":167,"168":168,"24":24,"41":41,"93":93}],52:[function(_dereq_,module,exports){
9047 +},{"14":14,"169":169,"170":170,"24":24,"41":41,"93":93}],52:[function(_dereq_,module,exports){
9048 /**
9049 * Copyright 2013-present, Facebook, Inc.
9050 * All rights reserved.
@@ -8862,10 +9058,10 @@ module.exports = ReactDOMSelect;
9058
9059 'use strict';
9060
8865 -var ExecutionEnvironment = _dereq_(143);
9061 +var ExecutionEnvironment = _dereq_(145);
9062
8867 -var getNodeForCharacterOffset = _dereq_(128);
8868 -var getTextContentAccessor = _dereq_(129);
9063 +var getNodeForCharacterOffset = _dereq_(129);
9064 +var getTextContentAccessor = _dereq_(130);
9065
9066 /**
9067 * While `isCollapsed` is available on the Selection object and `collapsed`
@@ -9061,7 +9257,7 @@ var ReactDOMSelection = {
9257 };
9258
9259 module.exports = ReactDOMSelection;
9064 -},{"128":128,"129":129,"143":143}],53:[function(_dereq_,module,exports){
9260 +},{"129":129,"130":130,"145":145}],53:[function(_dereq_,module,exports){
9261 /**
9262 * Copyright 2013-present, Facebook, Inc.
9263 * All rights reserved.
@@ -9102,16 +9298,17 @@ module.exports = ReactDOMServer;
9298
9299 'use strict';
9300
9105 -var _assign = _dereq_(168);
9301 +var _prodInvariant = _dereq_(137),
9302 + _assign = _dereq_(170);
9303
9304 var DOMChildrenOperations = _dereq_(7);
9305 var DOMLazyTree = _dereq_(8);
9306 var ReactDOMComponentTree = _dereq_(41);
9110 -var ReactInstrumentation = _dereq_(71);
9307 +var ReactInstrumentation = _dereq_(73);
9308
9112 -var escapeTextContentForBrowser = _dereq_(118);
9113 -var invariant = _dereq_(157);
9114 -var validateDOMNesting = _dereq_(141);
9309 +var escapeTextContentForBrowser = _dereq_(119);
9310 +var invariant = _dereq_(159);
9311 +var validateDOMNesting = _dereq_(143);
9312
9313 /**
9314 * Text nodes violate a couple assumptions that React makes about components:
@@ -9133,8 +9330,8 @@ var ReactDOMTextComponent = function (text) {
9330 this._currentElement = text;
9331 this._stringText = '' + text;
9332 // ReactDOMComponentTree uses these:
9136 - this._nativeNode = null;
9137 - this._nativeParent = null;
9333 + this._hostNode = null;
9334 + this._hostParent = null;
9335
9336 // Properties
9337 this._domID = null;
@@ -9153,15 +9350,15 @@ _assign(ReactDOMTextComponent.prototype, {
9350 * @return {string} Markup for this text node.
9351 * @internal
9352 */
9156 - mountComponent: function (transaction, nativeParent, nativeContainerInfo, context) {
9353 + mountComponent: function (transaction, hostParent, hostContainerInfo, context) {
9354 if ("development" !== 'production') {
9355 ReactInstrumentation.debugTool.onSetText(this._debugID, this._stringText);
9356
9357 var parentInfo;
9161 - if (nativeParent != null) {
9162 - parentInfo = nativeParent._ancestorInfo;
9163 - } else if (nativeContainerInfo != null) {
9164 - parentInfo = nativeContainerInfo._ancestorInfo;
9358 + if (hostParent != null) {
9359 + parentInfo = hostParent._ancestorInfo;
9360 + } else if (hostContainerInfo != null) {
9361 + parentInfo = hostContainerInfo._ancestorInfo;
9362 }
9363 if (parentInfo) {
9364 // parentInfo should always be present except for the top-level
@@ -9170,13 +9367,13 @@ _assign(ReactDOMTextComponent.prototype, {
9367 }
9368 }
9369
9173 - var domID = nativeContainerInfo._idCounter++;
9370 + var domID = hostContainerInfo._idCounter++;
9371 var openingValue = ' react-text: ' + domID + ' ';
9372 var closingValue = ' /react-text ';
9373 this._domID = domID;
9177 - this._nativeParent = nativeParent;
9374 + this._hostParent = hostParent;
9375 if (transaction.useCreateElement) {
9179 - var ownerDocument = nativeContainerInfo._ownerDocument;
9376 + var ownerDocument = hostContainerInfo._ownerDocument;
9377 var openingComment = ownerDocument.createComment(openingValue);
9378 var closingComment = ownerDocument.createComment(closingValue);
9379 var lazyTree = DOMLazyTree(ownerDocument.createDocumentFragment());
@@ -9218,7 +9415,7 @@ _assign(ReactDOMTextComponent.prototype, {
9415 // and/or updateComponent to do the actual update for consistency with
9416 // other component types?
9417 this._stringText = nextStringText;
9221 - var commentNodes = this.getNativeNode();
9418 + var commentNodes = this.getHostNode();
9419 DOMChildrenOperations.replaceDelimitedText(commentNodes[0], commentNodes[1], nextStringText);
9420
9421 if ("development" !== 'production') {
@@ -9228,16 +9425,16 @@ _assign(ReactDOMTextComponent.prototype, {
9425 }
9426 },
9427
9231 - getNativeNode: function () {
9232 - var nativeNode = this._commentNodes;
9233 - if (nativeNode) {
9234 - return nativeNode;
9428 + getHostNode: function () {
9429 + var hostNode = this._commentNodes;
9430 + if (hostNode) {
9431 + return hostNode;
9432 }
9433 if (!this._closingComment) {
9434 var openingComment = ReactDOMComponentTree.getNodeFromInstance(this);
9435 var node = openingComment.nextSibling;
9436 while (true) {
9240 - !(node != null) ? "development" !== 'production' ? invariant(false, 'Missing closing comment for text component %s', this._domID) : invariant(false) : void 0;
9437 + !(node != null) ? "development" !== 'production' ? invariant(false, 'Missing closing comment for text component %s', this._domID) : _prodInvariant('67', this._domID) : void 0;
9438 if (node.nodeType === 8 && node.nodeValue === ' /react-text ') {
9439 this._closingComment = node;
9440 break;
@@ -9245,9 +9442,9 @@ _assign(ReactDOMTextComponent.prototype, {
9442 node = node.nextSibling;
9443 }
9444 }
9248 - nativeNode = [this._nativeNode, this._closingComment];
9249 - this._commentNodes = nativeNode;
9250 - return nativeNode;
9445 + hostNode = [this._hostNode, this._closingComment];
9446 + this._commentNodes = hostNode;
9447 + return hostNode;
9448 },
9449
9450 unmountComponent: function () {
@@ -9259,7 +9456,7 @@ _assign(ReactDOMTextComponent.prototype, {
9456 });
9457
9458 module.exports = ReactDOMTextComponent;
9262 -},{"118":118,"141":141,"157":157,"168":168,"41":41,"7":7,"71":71,"8":8}],55:[function(_dereq_,module,exports){
9459 +},{"119":119,"137":137,"143":143,"159":159,"170":170,"41":41,"7":7,"73":73,"8":8}],55:[function(_dereq_,module,exports){
9460 /**
9461 * Copyright 2013-present, Facebook, Inc.
9462 * All rights reserved.
@@ -9273,16 +9470,16 @@ module.exports = ReactDOMTextComponent;
9470
9471 'use strict';
9472
9276 -var _assign = _dereq_(168);
9473 +var _prodInvariant = _dereq_(137),
9474 + _assign = _dereq_(170);
9475
9476 var DisabledInputUtils = _dereq_(14);
9279 -var DOMPropertyOperations = _dereq_(11);
9477 var LinkedValueUtils = _dereq_(24);
9478 var ReactDOMComponentTree = _dereq_(41);
9479 var ReactUpdates = _dereq_(93);
9480
9284 -var invariant = _dereq_(157);
9285 -var warning = _dereq_(167);
9481 +var invariant = _dereq_(159);
9482 +var warning = _dereq_(169);
9483
9484 var didWarnValueLink = false;
9485 var didWarnValueNull = false;
@@ -9304,7 +9501,7 @@ function warnIfValueIsNull(props) {
9501 }
9502
9503 /**
9307 - * Implements a <textarea> native component that allows setting `value`, and
9504 + * Implements a <textarea> host component that allows setting `value`, and
9505 * `defaultValue`. This differs from the traditional DOM API because value is
9506 * usually set as PCDATA children.
9507 *
@@ -9319,19 +9516,22 @@ function warnIfValueIsNull(props) {
9516 * `defaultValue` if specified, or the children content (deprecated).
9517 */
9518 var ReactDOMTextarea = {
9322 - getNativeProps: function (inst, props) {
9323 - !(props.dangerouslySetInnerHTML == null) ? "development" !== 'production' ? invariant(false, '`dangerouslySetInnerHTML` does not make sense on <textarea>.') : invariant(false) : void 0;
9519 + getHostProps: function (inst, props) {
9520 + !(props.dangerouslySetInnerHTML == null) ? "development" !== 'production' ? invariant(false, '`dangerouslySetInnerHTML` does not make sense on <textarea>.') : _prodInvariant('91') : void 0;
9521
9522 // Always set children to the same thing. In IE9, the selection range will
9326 - // get reset if `textContent` is mutated.
9327 - var nativeProps = _assign({}, DisabledInputUtils.getNativeProps(inst, props), {
9328 - defaultValue: undefined,
9523 + // get reset if `textContent` is mutated. We could add a check in setTextContent
9524 + // to only set the value if/when the value differs from the node value (which would
9525 + // completely solve this IE9 bug), but Sebastian+Ben seemed to like this solution.
9526 + // The value can be a boolean or object so that's why it's forced to be a string.
9527 + var hostProps = _assign({}, DisabledInputUtils.getHostProps(inst, props), {
9528 value: undefined,
9330 - children: inst._wrapperState.initialValue,
9529 + defaultValue: undefined,
9530 + children: '' + inst._wrapperState.initialValue,
9531 onChange: inst._wrapperState.onChange
9532 });
9533
9334 - return nativeProps;
9534 + return hostProps;
9535 },
9536
9537 mountWrapper: function (inst, props) {
@@ -9348,31 +9548,34 @@ var ReactDOMTextarea = {
9548 warnIfValueIsNull(props);
9549 }
9550
9351 - var defaultValue = props.defaultValue;
9352 - // TODO (yungsters): Remove support for children content in <textarea>.
9353 - var children = props.children;
9354 - if (children != null) {
9355 - if ("development" !== 'production') {
9356 - "development" !== 'production' ? warning(false, 'Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.') : void 0;
9551 + var value = LinkedValueUtils.getValue(props);
9552 + var initialValue = value;
9553 +
9554 + // Only bother fetching default value if we're going to use it
9555 + if (value == null) {
9556 + var defaultValue = props.defaultValue;
9557 + // TODO (yungsters): Remove support for children content in <textarea>.
9558 + var children = props.children;
9559 + if (children != null) {
9560 + if ("development" !== 'production') {
9561 + "development" !== 'production' ? warning(false, 'Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.') : void 0;
9562 + }
9563 + !(defaultValue == null) ? "development" !== 'production' ? invariant(false, 'If you supply `defaultValue` on a <textarea>, do not pass children.') : _prodInvariant('92') : void 0;
9564 + if (Array.isArray(children)) {
9565 + !(children.length <= 1) ? "development" !== 'production' ? invariant(false, '<textarea> can only have at most one child.') : _prodInvariant('93') : void 0;
9566 + children = children[0];
9567 + }
9568 +
9569 + defaultValue = '' + children;
9570 }
9358 - !(defaultValue == null) ? "development" !== 'production' ? invariant(false, 'If you supply `defaultValue` on a <textarea>, do not pass children.') : invariant(false) : void 0;
9359 - if (Array.isArray(children)) {
9360 - !(children.length <= 1) ? "development" !== 'production' ? invariant(false, '<textarea> can only have at most one child.') : invariant(false) : void 0;
9361 - children = children[0];
9571 + if (defaultValue == null) {
9572 + defaultValue = '';
9573 }
9363 -
9364 - defaultValue = '' + children;
9365 - }
9366 - if (defaultValue == null) {
9367 - defaultValue = '';
9574 + initialValue = defaultValue;
9575 }
9369 - var value = LinkedValueUtils.getValue(props);
9576 +
9577 inst._wrapperState = {
9371 - // We save the initial value so that `ReactDOMComponent` doesn't update
9372 - // `textContent` (unnecessary since we update value).
9373 - // The initial value can be a boolean or object so that's why it's
9374 - // forced to be a string.
9375 - initialValue: '' + (value != null ? value : defaultValue),
9578 + initialValue: '' + initialValue,
9579 listeners: null,
9580 onChange: _handleChange.bind(inst)
9581 };
@@ -9385,12 +9588,33 @@ var ReactDOMTextarea = {
9588 warnIfValueIsNull(props);
9589 }
9590
9591 + var node = ReactDOMComponentTree.getNodeFromInstance(inst);
9592 var value = LinkedValueUtils.getValue(props);
9593 if (value != null) {
9594 // Cast `value` to a string to ensure the value is set correctly. While
9595 // browsers typically do this as necessary, jsdom doesn't.
9392 - DOMPropertyOperations.setValueForProperty(ReactDOMComponentTree.getNodeFromInstance(inst), 'value', '' + value);
9596 + var newValue = '' + value;
9597 +
9598 + // To avoid side effects (such as losing text selection), only set value if changed
9599 + if (newValue !== node.value) {
9600 + node.value = newValue;
9601 + }
9602 + if (props.defaultValue == null) {
9603 + node.defaultValue = newValue;
9604 + }
9605 + }
9606 + if (props.defaultValue != null) {
9607 + node.defaultValue = props.defaultValue;
9608 }
9609 + },
9610 +
9611 + postMountWrapper: function (inst) {
9612 + // This is in postMount because we need access to the DOM node, which is not
9613 + // available until after the component has mounted.
9614 + var node = ReactDOMComponentTree.getNodeFromInstance(inst);
9615 +
9616 + // Warning: node.value may be the empty string at this point (IE11) if placeholder is set.
9617 + node.value = node.textContent; // Detach value from defaultValue
9618 }
9619 };
9620
@@ -9402,7 +9626,7 @@ function _handleChange(event) {
9626 }
9627
9628 module.exports = ReactDOMTextarea;
9405 -},{"11":11,"14":14,"157":157,"167":167,"168":168,"24":24,"41":41,"93":93}],56:[function(_dereq_,module,exports){
9629 +},{"137":137,"14":14,"159":159,"169":169,"170":170,"24":24,"41":41,"93":93}],56:[function(_dereq_,module,exports){
9630 /**
9631 * Copyright 2015-present, Facebook, Inc.
9632 * All rights reserved.
@@ -9416,34 +9640,36 @@ module.exports = ReactDOMTextarea;
9640
9641 'use strict';
9642
9419 -var invariant = _dereq_(157);
9643 +var _prodInvariant = _dereq_(137);
9644 +
9645 +var invariant = _dereq_(159);
9646
9647 /**
9648 * Return the lowest common ancestor of A and B, or null if they are in
9649 * different trees.
9650 */
9651 function getLowestCommonAncestor(instA, instB) {
9426 - !('_nativeNode' in instA) ? "development" !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : invariant(false) : void 0;
9427 - !('_nativeNode' in instB) ? "development" !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : invariant(false) : void 0;
9652 + !('_hostNode' in instA) ? "development" !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : _prodInvariant('33') : void 0;
9653 + !('_hostNode' in instB) ? "development" !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : _prodInvariant('33') : void 0;
9654
9655 var depthA = 0;
9430 - for (var tempA = instA; tempA; tempA = tempA._nativeParent) {
9656 + for (var tempA = instA; tempA; tempA = tempA._hostParent) {
9657 depthA++;
9658 }
9659 var depthB = 0;
9434 - for (var tempB = instB; tempB; tempB = tempB._nativeParent) {
9660 + for (var tempB = instB; tempB; tempB = tempB._hostParent) {
9661 depthB++;
9662 }
9663
9664 // If A is deeper, crawl up.
9665 while (depthA - depthB > 0) {
9440 - instA = instA._nativeParent;
9666 + instA = instA._hostParent;
9667 depthA--;
9668 }
9669
9670 // If B is deeper, crawl up.
9671 while (depthB - depthA > 0) {
9446 - instB = instB._nativeParent;
9672 + instB = instB._hostParent;
9673 depthB--;
9674 }
9675
@@ -9453,8 +9679,8 @@ function getLowestCommonAncestor(instA, instB) {
9679 if (instA === instB) {
9680 return instA;
9681 }
9456 - instA = instA._nativeParent;
9457 - instB = instB._nativeParent;
9682 + instA = instA._hostParent;
9683 + instB = instB._hostParent;
9684 }
9685 return null;
9686 }
@@ -9463,14 +9689,14 @@ function getLowestCommonAncestor(instA, instB) {
9689 * Return if A is an ancestor of B.
9690 */
9691 function isAncestor(instA, instB) {
9466 - !('_nativeNode' in instA) ? "development" !== 'production' ? invariant(false, 'isAncestor: Invalid argument.') : invariant(false) : void 0;
9467 - !('_nativeNode' in instB) ? "development" !== 'production' ? invariant(false, 'isAncestor: Invalid argument.') : invariant(false) : void 0;
9692 + !('_hostNode' in instA) ? "development" !== 'production' ? invariant(false, 'isAncestor: Invalid argument.') : _prodInvariant('35') : void 0;
9693 + !('_hostNode' in instB) ? "development" !== 'production' ? invariant(false, 'isAncestor: Invalid argument.') : _prodInvariant('35') : void 0;
9694
9695 while (instB) {
9696 if (instB === instA) {
9697 return true;
9698 }
9473 - instB = instB._nativeParent;
9699 + instB = instB._hostParent;
9700 }
9701 return false;
9702 }
@@ -9479,9 +9705,9 @@ function isAncestor(instA, instB) {
9705 * Return the parent instance of the passed-in instance.
9706 */
9707 function getParentInstance(inst) {
9482 - !('_nativeNode' in inst) ? "development" !== 'production' ? invariant(false, 'getParentInstance: Invalid argument.') : invariant(false) : void 0;
9708 + !('_hostNode' in inst) ? "development" !== 'production' ? invariant(false, 'getParentInstance: Invalid argument.') : _prodInvariant('36') : void 0;
9709
9484 - return inst._nativeParent;
9710 + return inst._hostParent;
9711 }
9712
9713 /**
@@ -9491,7 +9717,7 @@ function traverseTwoPhase(inst, fn, arg) {
9717 var path = [];
9718 while (inst) {
9719 path.push(inst);
9494 - inst = inst._nativeParent;
9720 + inst = inst._hostParent;
9721 }
9722 var i;
9723 for (i = path.length; i-- > 0;) {
@@ -9514,12 +9740,12 @@ function traverseEnterLeave(from, to, fn, argFrom, argTo) {
9740 var pathFrom = [];
9741 while (from && from !== common) {
9742 pathFrom.push(from);
9517 - from = from._nativeParent;
9743 + from = from._hostParent;
9744 }
9745 var pathTo = [];
9746 while (to && to !== common) {
9747 pathTo.push(to);
9522 - to = to._nativeParent;
9748 + to = to._hostParent;
9749 }
9750 var i;
9751 for (i = 0; i < pathFrom.length; i++) {
@@ -9537,7 +9763,7 @@ module.exports = {
9763 traverseTwoPhase: traverseTwoPhase,
9764 traverseEnterLeave: traverseEnterLeave
9765 };
9540 -},{"157":157}],57:[function(_dereq_,module,exports){
9766 +},{"137":137,"159":159}],57:[function(_dereq_,module,exports){
9767 /**
9768 * Copyright 2013-present, Facebook, Inc.
9769 * All rights reserved.
@@ -9553,56 +9779,104 @@ module.exports = {
9779
9780 var DOMProperty = _dereq_(10);
9781 var EventPluginRegistry = _dereq_(18);
9782 +var ReactComponentTreeDevtool = _dereq_(34);
9783
9557 -var warning = _dereq_(167);
9784 +var warning = _dereq_(169);
9785
9786 if ("development" !== 'production') {
9787 var reactProps = {
9788 children: true,
9789 dangerouslySetInnerHTML: true,
9790 key: true,
9564 - ref: true
9791 + ref: true,
9792 +
9793 + autoFocus: true,
9794 + defaultValue: true,
9795 + valueLink: true,
9796 + defaultChecked: true,
9797 + checkedLink: true,
9798 + innerHTML: true,
9799 + suppressContentEditableWarning: true,
9800 + onFocusIn: true,
9801 + onFocusOut: true
9802 };
9803 var warnedProperties = {};
9804
9568 - var warnUnknownProperty = function (name) {
9805 + var validateProperty = function (tagName, name, debugID) {
9806 if (DOMProperty.properties.hasOwnProperty(name) || DOMProperty.isCustomAttribute(name)) {
9570 - return;
9807 + return true;
9808 }
9809 if (reactProps.hasOwnProperty(name) && reactProps[name] || warnedProperties.hasOwnProperty(name) && warnedProperties[name]) {
9573 - return;
9810 + return true;
9811 + }
9812 + if (EventPluginRegistry.registrationNameModules.hasOwnProperty(name)) {
9813 + return true;
9814 }
9575 -
9815 warnedProperties[name] = true;
9816 var lowerCasedName = name.toLowerCase();
9817
9818 // data-* attributes should be lowercase; suggest the lowercase version
9819 var standardName = DOMProperty.isCustomAttribute(lowerCasedName) ? lowerCasedName : DOMProperty.getPossibleStandardName.hasOwnProperty(lowerCasedName) ? DOMProperty.getPossibleStandardName[lowerCasedName] : null;
9820
9582 - // For now, only warn when we have a suggested correction. This prevents
9583 - // logging too much when using transferPropsTo.
9584 - "development" !== 'production' ? warning(standardName == null, 'Unknown DOM property %s. Did you mean %s?', name, standardName) : void 0;
9585 -
9821 var registrationName = EventPluginRegistry.possibleRegistrationNames.hasOwnProperty(lowerCasedName) ? EventPluginRegistry.possibleRegistrationNames[lowerCasedName] : null;
9822
9588 - "development" !== 'production' ? warning(registrationName == null, 'Unknown event handler property %s. Did you mean `%s`?', name, registrationName) : void 0;
9823 + if (standardName != null) {
9824 + "development" !== 'production' ? warning(standardName == null, 'Unknown DOM property %s. Did you mean %s?%s', name, standardName, ReactComponentTreeDevtool.getStackAddendumByID(debugID)) : void 0;
9825 + return true;
9826 + } else if (registrationName != null) {
9827 + "development" !== 'production' ? warning(registrationName == null, 'Unknown event handler property %s. Did you mean `%s`?%s', name, registrationName, ReactComponentTreeDevtool.getStackAddendumByID(debugID)) : void 0;
9828 + return true;
9829 + } else {
9830 + // We were unable to guess which prop the user intended.
9831 + // It is likely that the user was just blindly spreading/forwarding props
9832 + // Components should be careful to only render valid props/attributes.
9833 + // Warning will be invoked in warnUnknownProperties to allow grouping.
9834 + return false;
9835 + }
9836 };
9837 }
9838
9839 +var warnUnknownProperties = function (debugID, element) {
9840 + var unknownProps = [];
9841 + for (var key in element.props) {
9842 + var isValid = validateProperty(element.type, key, debugID);
9843 + if (!isValid) {
9844 + unknownProps.push(key);
9845 + }
9846 + }
9847 +
9848 + var unknownPropString = unknownProps.map(function (prop) {
9849 + return '`' + prop + '`';
9850 + }).join(', ');
9851 +
9852 + if (unknownProps.length === 1) {
9853 + "development" !== 'production' ? warning(false, 'Unknown prop %s on <%s> tag. Remove this prop from the element. ' + 'For details, see https://fb.me/react-unknown-prop%s', unknownPropString, element.type, ReactComponentTreeDevtool.getStackAddendumByID(debugID)) : void 0;
9854 + } else if (unknownProps.length > 1) {
9855 + "development" !== 'production' ? warning(false, 'Unknown props %s on <%s> tag. Remove these props from the element. ' + 'For details, see https://fb.me/react-unknown-prop%s', unknownPropString, element.type, ReactComponentTreeDevtool.getStackAddendumByID(debugID)) : void 0;
9856 + }
9857 +};
9858 +
9859 +function handleElement(debugID, element) {
9860 + if (element == null || typeof element.type !== 'string') {
9861 + return;
9862 + }
9863 + if (element.type.indexOf('-') >= 0 || element.props.is) {
9864 + return;
9865 + }
9866 + warnUnknownProperties(debugID, element);
9867 +}
9868 +
9869 var ReactDOMUnknownPropertyDevtool = {
9593 - onCreateMarkupForProperty: function (name, value) {
9594 - warnUnknownProperty(name);
9595 - },
9596 - onSetValueForProperty: function (node, name, value) {
9597 - warnUnknownProperty(name);
9870 + onBeforeMountComponent: function (debugID, element) {
9871 + handleElement(debugID, element);
9872 },
9599 - onDeleteValueForProperty: function (node, name) {
9600 - warnUnknownProperty(name);
9873 + onBeforeUpdateComponent: function (debugID, element) {
9874 + handleElement(debugID, element);
9875 }
9876 };
9877
9878 module.exports = ReactDOMUnknownPropertyDevtool;
9605 -},{"10":10,"167":167,"18":18}],58:[function(_dereq_,module,exports){
9879 +},{"10":10,"169":169,"18":18,"34":34}],58:[function(_dereq_,module,exports){
9880 /**
9881 * Copyright 2016-present, Facebook, Inc.
9882 * All rights reserved.
@@ -9616,10 +9890,10 @@ module.exports = ReactDOMUnknownPropertyDevtool;
9890
9891 'use strict';
9892
9619 -var ExecutionEnvironment = _dereq_(143);
9893 +var ExecutionEnvironment = _dereq_(145);
9894
9621 -var performanceNow = _dereq_(165);
9622 -var warning = _dereq_(167);
9895 +var performanceNow = _dereq_(167);
9896 +var warning = _dereq_(169);
9897
9898 var eventHandlers = [];
9899 var handlerDoesThrowForEvent = {};
@@ -9632,7 +9906,7 @@ function emitEvent(handlerFunctionName, arg1, arg2, arg3, arg4, arg5) {
9906 handler[handlerFunctionName](arg1, arg2, arg3, arg4, arg5);
9907 }
9908 } catch (e) {
9635 - "development" !== 'production' ? warning(!handlerDoesThrowForEvent[handlerFunctionName], 'exception thrown by devtool while handling %s: %s', handlerFunctionName, e.message) : void 0;
9909 + "development" !== 'production' ? warning(handlerDoesThrowForEvent[handlerFunctionName], 'exception thrown by devtool while handling %s: %s', handlerFunctionName, e + '\n' + e.stack) : void 0;
9910 handlerDoesThrowForEvent[handlerFunctionName] = true;
9911 }
9912 });
@@ -9641,16 +9915,18 @@ function emitEvent(handlerFunctionName, arg1, arg2, arg3, arg4, arg5) {
9915
9916 var isProfiling = false;
9917 var flushHistory = [];
9918 +var lifeCycleTimerStack = [];
9919 var currentFlushNesting = 0;
9920 var currentFlushMeasurements = null;
9921 var currentFlushStartTime = null;
9922 var currentTimerDebugID = null;
9923 var currentTimerStartTime = null;
9924 +var currentTimerNestedFlushDuration = null;
9925 var currentTimerType = null;
9926
9927 function clearHistory() {
9928 ReactComponentTreeDevtool.purgeUnmountedComponents();
9653 - ReactNativeOperationHistoryDevtool.clearHistory();
9929 + ReactHostOperationHistoryDevtool.clearHistory();
9930 }
9931
9932 function getTreeSnapshot(registeredIDs) {
@@ -9674,7 +9950,7 @@ function resetMeasurements() {
9950 if ("development" !== 'production') {
9951 var previousStartTime = currentFlushStartTime;
9952 var previousMeasurements = currentFlushMeasurements || [];
9677 - var previousOperations = ReactNativeOperationHistoryDevtool.getHistory();
9953 + var previousOperations = ReactHostOperationHistoryDevtool.getHistory();
9954
9955 if (!isProfiling || currentFlushNesting === 0) {
9956 currentFlushStartTime = null;
@@ -9703,6 +9979,62 @@ function checkDebugID(debugID) {
9979 "development" !== 'production' ? warning(debugID, 'ReactDebugTool: debugID may not be empty.') : void 0;
9980 }
9981
9982 +function beginLifeCycleTimer(debugID, timerType) {
9983 + if (!isProfiling || currentFlushNesting === 0) {
9984 + return;
9985 + }
9986 + "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;
9987 + currentTimerStartTime = performanceNow();
9988 + currentTimerNestedFlushDuration = 0;
9989 + currentTimerDebugID = debugID;
9990 + currentTimerType = timerType;
9991 +}
9992 +
9993 +function endLifeCycleTimer(debugID, timerType) {
9994 + if (!isProfiling || currentFlushNesting === 0) {
9995 + return;
9996 + }
9997 + "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;
9998 + currentFlushMeasurements.push({
9999 + timerType: timerType,
10000 + instanceID: debugID,
10001 + duration: performanceNow() - currentTimerStartTime - currentTimerNestedFlushDuration
10002 + });
10003 + currentTimerStartTime = null;
10004 + currentTimerNestedFlushDuration = null;
10005 + currentTimerDebugID = null;
10006 + currentTimerType = null;
10007 +}
10008 +
10009 +function pauseCurrentLifeCycleTimer() {
10010 + var currentTimer = {
10011 + startTime: currentTimerStartTime,
10012 + nestedFlushStartTime: performanceNow(),
10013 + debugID: currentTimerDebugID,
10014 + timerType: currentTimerType
10015 + };
10016 + lifeCycleTimerStack.push(currentTimer);
10017 + currentTimerStartTime = null;
10018 + currentTimerNestedFlushDuration = null;
10019 + currentTimerDebugID = null;
10020 + currentTimerType = null;
10021 +}
10022 +
10023 +function resumeCurrentLifeCycleTimer() {
10024 + var _lifeCycleTimerStack$ = lifeCycleTimerStack.pop();
10025 +
10026 + var startTime = _lifeCycleTimerStack$.startTime;
10027 + var nestedFlushStartTime = _lifeCycleTimerStack$.nestedFlushStartTime;
10028 + var debugID = _lifeCycleTimerStack$.debugID;
10029 + var timerType = _lifeCycleTimerStack$.timerType;
10030 +
10031 + var nestedFlushDuration = performanceNow() - nestedFlushStartTime;
10032 + currentTimerStartTime = startTime;
10033 + currentTimerNestedFlushDuration += nestedFlushDuration;
10034 + currentTimerDebugID = debugID;
10035 + currentTimerType = timerType;
10036 +}
10037 +
10038 var ReactDebugTool = {
10039 addDevtool: function (devtool) {
10040 eventHandlers.push(devtool);
@@ -9715,6 +10047,9 @@ var ReactDebugTool = {
10047 }
10048 }
10049 },
10050 + isProfiling: function () {
10051 + return isProfiling;
10052 + },
10053 beginProfiling: function () {
10054 if ("development" !== 'production') {
10055 if (isProfiling) {
@@ -9737,14 +10072,13 @@ var ReactDebugTool = {
10072 }
10073 },
10074 getFlushHistory: function () {
9740 - if ("development" !== 'production') {
9741 - return flushHistory;
9742 - }
10075 + return flushHistory;
10076 },
10077 onBeginFlush: function () {
10078 if ("development" !== 'production') {
10079 currentFlushNesting++;
10080 resetMeasurements();
10081 + pauseCurrentLifeCycleTimer();
10082 }
10083 emitEvent('onBeginFlush');
10084 },
@@ -9752,6 +10086,7 @@ var ReactDebugTool = {
10086 if ("development" !== 'production') {
10087 resetMeasurements();
10088 currentFlushNesting--;
10089 + resumeCurrentLifeCycleTimer();
10090 }
10091 emitEvent('onEndFlush');
10092 },
@@ -9759,28 +10094,13 @@ var ReactDebugTool = {
10094 checkDebugID(debugID);
10095 emitEvent('onBeginLifeCycleTimer', debugID, timerType);
10096 if ("development" !== 'production') {
9762 - if (isProfiling && currentFlushNesting > 0) {
9763 - "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;
9764 - currentTimerStartTime = performanceNow();
9765 - currentTimerDebugID = debugID;
9766 - currentTimerType = timerType;
9767 - }
10097 + beginLifeCycleTimer(debugID, timerType);
10098 }
10099 },
10100 onEndLifeCycleTimer: function (debugID, timerType) {
10101 checkDebugID(debugID);
10102 if ("development" !== 'production') {
9773 - if (isProfiling && currentFlushNesting > 0) {
9774 - "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;
9775 - currentFlushMeasurements.push({
9776 - timerType: timerType,
9777 - instanceID: debugID,
9778 - duration: performanceNow() - currentTimerStartTime
9779 - });
9780 - currentTimerStartTime = null;
9781 - currentTimerDebugID = null;
9782 - currentTimerType = null;
9783 - }
10103 + endLifeCycleTimer(debugID, timerType);
10104 }
10105 emitEvent('onEndLifeCycleTimer', debugID, timerType);
10106 },
@@ -9798,9 +10118,9 @@ var ReactDebugTool = {
10118 onEndProcessingChildContext: function () {
10119 emitEvent('onEndProcessingChildContext');
10120 },
9801 - onNativeOperation: function (debugID, type, payload) {
10121 + onHostOperation: function (debugID, type, payload) {
10122 checkDebugID(debugID);
9803 - emitEvent('onNativeOperation', debugID, type, payload);
10123 + emitEvent('onHostOperation', debugID, type, payload);
10124 },
10125 onSetState: function () {
10126 emitEvent('onSetState');
@@ -9817,6 +10137,10 @@ var ReactDebugTool = {
10137 checkDebugID(debugID);
10138 emitEvent('onSetOwner', debugID, ownerDebugID);
10139 },
10140 + onSetParent: function (debugID, parentDebugID) {
10141 + checkDebugID(debugID);
10142 + emitEvent('onSetParent', debugID, parentDebugID);
10143 + },
10144 onSetText: function (debugID, text) {
10145 checkDebugID(debugID);
10146 emitEvent('onSetText', debugID, text);
@@ -9825,10 +10149,18 @@ var ReactDebugTool = {
10149 checkDebugID(debugID);
10150 emitEvent('onMountRootComponent', debugID);
10151 },
10152 + onBeforeMountComponent: function (debugID, element) {
10153 + checkDebugID(debugID);
10154 + emitEvent('onBeforeMountComponent', debugID, element);
10155 + },
10156 onMountComponent: function (debugID) {
10157 checkDebugID(debugID);
10158 emitEvent('onMountComponent', debugID);
10159 },
10160 + onBeforeUpdateComponent: function (debugID, element) {
10161 + checkDebugID(debugID);
10162 + emitEvent('onBeforeUpdateComponent', debugID, element);
10163 + },
10164 onUpdateComponent: function (debugID) {
10165 checkDebugID(debugID);
10166 emitEvent('onUpdateComponent', debugID);
@@ -9836,16 +10168,19 @@ var ReactDebugTool = {
10168 onUnmountComponent: function (debugID) {
10169 checkDebugID(debugID);
10170 emitEvent('onUnmountComponent', debugID);
10171 + },
10172 + onTestEvent: function () {
10173 + emitEvent('onTestEvent');
10174 }
10175 };
10176
10177 if ("development" !== 'production') {
9843 - var ReactInvalidSetStateWarningDevTool = _dereq_(72);
9844 - var ReactNativeOperationHistoryDevtool = _dereq_(78);
10178 + var ReactInvalidSetStateWarningDevTool = _dereq_(74);
10179 + var ReactHostOperationHistoryDevtool = _dereq_(69);
10180 var ReactComponentTreeDevtool = _dereq_(34);
10181 ReactDebugTool.addDevtool(ReactInvalidSetStateWarningDevTool);
10182 ReactDebugTool.addDevtool(ReactComponentTreeDevtool);
9848 - ReactDebugTool.addDevtool(ReactNativeOperationHistoryDevtool);
10183 + ReactDebugTool.addDevtool(ReactHostOperationHistoryDevtool);
10184 var url = ExecutionEnvironment.canUseDOM && window.location.href || '';
10185 if (/[?&]react_perf\b/.test(url)) {
10186 ReactDebugTool.beginProfiling();
@@ -9853,7 +10188,7 @@ if ("development" !== 'production') {
10188 }
10189
10190 module.exports = ReactDebugTool;
9856 -},{"143":143,"165":165,"167":167,"34":34,"72":72,"78":78}],59:[function(_dereq_,module,exports){
10191 +},{"145":145,"167":167,"169":169,"34":34,"69":69,"74":74}],59:[function(_dereq_,module,exports){
10192 /**
10193 * Copyright 2013-present, Facebook, Inc.
10194 * All rights reserved.
@@ -9867,12 +10202,12 @@ module.exports = ReactDebugTool;
10202
10203 'use strict';
10204
9870 -var _assign = _dereq_(168);
10205 +var _assign = _dereq_(170);
10206
10207 var ReactUpdates = _dereq_(93);
10208 var Transaction = _dereq_(111);
10209
9875 -var emptyFunction = _dereq_(149);
10210 +var emptyFunction = _dereq_(151);
10211
10212 var RESET_BATCHED_UPDATES = {
10213 initialize: emptyFunction,
@@ -9922,7 +10257,7 @@ var ReactDefaultBatchingStrategy = {
10257 };
10258
10259 module.exports = ReactDefaultBatchingStrategy;
9925 -},{"111":111,"149":149,"168":168,"93":93}],60:[function(_dereq_,module,exports){
10260 +},{"111":111,"151":151,"170":170,"93":93}],60:[function(_dereq_,module,exports){
10261 /**
10262 * Copyright 2013-present, Facebook, Inc.
10263 * All rights reserved.
@@ -9949,7 +10284,7 @@ var ReactDOMTreeTraversal = _dereq_(56);
10284 var ReactDOMTextComponent = _dereq_(54);
10285 var ReactDefaultBatchingStrategy = _dereq_(59);
10286 var ReactEventListener = _dereq_(66);
9952 -var ReactInjection = _dereq_(68);
10287 +var ReactInjection = _dereq_(70);
10288 var ReactReconcileTransaction = _dereq_(85);
10289 var SVGDOMPropertyConfig = _dereq_(95);
10290 var SelectEventPlugin = _dereq_(96);
@@ -9987,9 +10322,9 @@ function inject() {
10322 BeforeInputEventPlugin: BeforeInputEventPlugin
10323 });
10324
9990 - ReactInjection.NativeComponent.injectGenericComponentClass(ReactDOMComponent);
10325 + ReactInjection.HostComponent.injectGenericComponentClass(ReactDOMComponent);
10326
9992 - ReactInjection.NativeComponent.injectTextComponentClass(ReactDOMTextComponent);
10327 + ReactInjection.HostComponent.injectTextComponentClass(ReactDOMTextComponent);
10328
10329 ReactInjection.DOMProperty.injectDOMPropertyConfig(HTMLDOMPropertyConfig);
10330 ReactInjection.DOMProperty.injectDOMPropertyConfig(SVGDOMPropertyConfig);
@@ -10007,7 +10342,7 @@ function inject() {
10342 module.exports = {
10343 inject: inject
10344 };
10010 -},{"13":13,"15":15,"2":2,"22":22,"32":32,"39":39,"41":41,"44":44,"54":54,"56":56,"59":59,"6":6,"66":66,"68":68,"85":85,"95":95,"96":96,"97":97}],61:[function(_dereq_,module,exports){
10345 +},{"13":13,"15":15,"2":2,"22":22,"32":32,"39":39,"41":41,"44":44,"54":54,"56":56,"59":59,"6":6,"66":66,"70":70,"85":85,"95":95,"96":96,"97":97}],61:[function(_dereq_,module,exports){
10346 /**
10347 * Copyright 2014-present, Facebook, Inc.
10348 * All rights reserved.
@@ -10021,12 +10356,13 @@ module.exports = {
10356
10357 'use strict';
10358
10024 -var _assign = _dereq_(168);
10359 +var _assign = _dereq_(170);
10360
10361 var ReactCurrentOwner = _dereq_(36);
10362
10028 -var warning = _dereq_(167);
10363 +var warning = _dereq_(169);
10364 var canDefineProperty = _dereq_(115);
10365 +var hasOwnProperty = Object.prototype.hasOwnProperty;
10366
10367 // The Symbol used to tag the ReactElement type. If there is no native Symbol
10368 // nor polyfill, then a plain number is used for performance.
@@ -10041,6 +10377,30 @@ var RESERVED_PROPS = {
10377
10378 var specialPropKeyWarningShown, specialPropRefWarningShown;
10379
10380 +function hasValidRef(config) {
10381 + if ("development" !== 'production') {
10382 + if (hasOwnProperty.call(config, 'ref')) {
10383 + var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;
10384 + if (getter && getter.isReactWarning) {
10385 + return false;
10386 + }
10387 + }
10388 + }
10389 + return config.ref !== undefined;
10390 +}
10391 +
10392 +function hasValidKey(config) {
10393 + if ("development" !== 'production') {
10394 + if (hasOwnProperty.call(config, 'key')) {
10395 + var getter = Object.getOwnPropertyDescriptor(config, 'key').get;
10396 + if (getter && getter.isReactWarning) {
10397 + return false;
10398 + }
10399 + }
10400 + }
10401 + return config.key !== undefined;
10402 +}
10403 +
10404 /**
10405 * Factory method to create a new React element. This no longer adheres to
10406 * the class pattern, so do not use new to call it. Also, no instanceof check
@@ -10145,17 +10505,20 @@ ReactElement.createElement = function (type, config, children) {
10505 config.__proto__ == null || config.__proto__ === Object.prototype,
10506 /* eslint-enable no-proto */
10507 'React.createElement(...): Expected props argument to be a plain object. ' + 'Properties defined in its prototype chain will be ignored.') : void 0;
10148 - ref = !config.hasOwnProperty('ref') || Object.getOwnPropertyDescriptor(config, 'ref').get ? null : config.ref;
10149 - key = !config.hasOwnProperty('key') || Object.getOwnPropertyDescriptor(config, 'key').get ? null : '' + config.key;
10150 - } else {
10151 - ref = config.ref === undefined ? null : config.ref;
10152 - key = config.key === undefined ? null : '' + config.key;
10508 }
10509 +
10510 + if (hasValidRef(config)) {
10511 + ref = config.ref;
10512 + }
10513 + if (hasValidKey(config)) {
10514 + key = '' + config.key;
10515 + }
10516 +
10517 self = config.__self === undefined ? null : config.__self;
10518 source = config.__source === undefined ? null : config.__source;
10519 // Remaining properties are added to a new props object
10520 for (propName in config) {
10158 - if (config.hasOwnProperty(propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
10521 + if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
10522 props[propName] = config[propName];
10523 }
10524 }
@@ -10184,30 +10547,37 @@ ReactElement.createElement = function (type, config, children) {
10547 }
10548 }
10549 if ("development" !== 'production') {
10187 - // Create dummy `key` and `ref` property to `props` to warn users
10188 - // against its use
10550 + var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;
10551 +
10552 + // Create dummy `key` and `ref` property to `props` to warn users against its use
10553 + var warnAboutAccessingKey = function () {
10554 + if (!specialPropKeyWarningShown) {
10555 + specialPropKeyWarningShown = true;
10556 + "development" !== 'production' ? warning(false, '%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName) : void 0;
10557 + }
10558 + return undefined;
10559 + };
10560 + warnAboutAccessingKey.isReactWarning = true;
10561 +
10562 + var warnAboutAccessingRef = function () {
10563 + if (!specialPropRefWarningShown) {
10564 + specialPropRefWarningShown = true;
10565 + "development" !== 'production' ? warning(false, '%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName) : void 0;
10566 + }
10567 + return undefined;
10568 + };
10569 + warnAboutAccessingRef.isReactWarning = true;
10570 +
10571 if (typeof props.$$typeof === 'undefined' || props.$$typeof !== REACT_ELEMENT_TYPE) {
10572 if (!props.hasOwnProperty('key')) {
10573 Object.defineProperty(props, 'key', {
10192 - get: function () {
10193 - if (!specialPropKeyWarningShown) {
10194 - specialPropKeyWarningShown = true;
10195 - "development" !== 'production' ? warning(false, '%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', typeof type === 'function' && 'displayName' in type ? type.displayName : 'Element') : void 0;
10196 - }
10197 - return undefined;
10198 - },
10574 + get: warnAboutAccessingKey,
10575 configurable: true
10576 });
10577 }
10578 if (!props.hasOwnProperty('ref')) {
10579 Object.defineProperty(props, 'ref', {
10204 - get: function () {
10205 - if (!specialPropRefWarningShown) {
10206 - specialPropRefWarningShown = true;
10207 - "development" !== 'production' ? warning(false, '%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', typeof type === 'function' && 'displayName' in type ? type.displayName : 'Element') : void 0;
10208 - }
10209 - return undefined;
10210 - },
10580 + get: warnAboutAccessingRef,
10581 configurable: true
10582 });
10583 }
@@ -10268,21 +10638,23 @@ ReactElement.cloneElement = function (element, config, children) {
10638 /* eslint-enable no-proto */
10639 'React.cloneElement(...): Expected props argument to be a plain object. ' + 'Properties defined in its prototype chain will be ignored.') : void 0;
10640 }
10271 - if (config.ref !== undefined) {
10641 +
10642 + if (hasValidRef(config)) {
10643 // Silently steal the ref from the parent.
10644 ref = config.ref;
10645 owner = ReactCurrentOwner.current;
10646 }
10276 - if (config.key !== undefined) {
10647 + if (hasValidKey(config)) {
10648 key = '' + config.key;
10649 }
10650 +
10651 // Remaining properties override existing props
10652 var defaultProps;
10653 if (element.type && element.type.defaultProps) {
10654 defaultProps = element.type.defaultProps;
10655 }
10656 for (propName in config) {
10285 - if (config.hasOwnProperty(propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
10657 + if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
10658 if (config[propName] === undefined && defaultProps !== undefined) {
10659 // Resolve default props
10660 props[propName] = defaultProps[propName];
@@ -10320,8 +10692,10 @@ ReactElement.isValidElement = function (object) {
10692 return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
10693 };
10694
10695 +ReactElement.REACT_ELEMENT_TYPE = REACT_ELEMENT_TYPE;
10696 +
10697 module.exports = ReactElement;
10324 -},{"115":115,"167":167,"168":168,"36":36}],62:[function(_dereq_,module,exports){
10698 +},{"115":115,"169":169,"170":170,"36":36}],62:[function(_dereq_,module,exports){
10699 /**
10700 * Copyright 2014-present, Facebook, Inc.
10701 * All rights reserved.
@@ -10342,15 +10716,16 @@ module.exports = ReactElement;
10716
10717 'use strict';
10718
10719 +var ReactCurrentOwner = _dereq_(36);
10720 +var ReactComponentTreeDevtool = _dereq_(34);
10721 var ReactElement = _dereq_(61);
10722 var ReactPropTypeLocations = _dereq_(83);
10347 -var ReactPropTypeLocationNames = _dereq_(82);
10348 -var ReactCurrentOwner = _dereq_(36);
10723 +
10724 +var checkReactTypeSpec = _dereq_(116);
10725
10726 var canDefineProperty = _dereq_(115);
10351 -var getIteratorFn = _dereq_(126);
10352 -var invariant = _dereq_(157);
10353 -var warning = _dereq_(167);
10727 +var getIteratorFn = _dereq_(128);
10728 +var warning = _dereq_(169);
10729
10730 function getDeclarationErrorAddendum() {
10731 if (ReactCurrentOwner.current) {
@@ -10369,13 +10744,24 @@ function getDeclarationErrorAddendum() {
10744 */
10745 var ownerHasKeyUseWarning = {};
10746
10372 -var loggedTypeFailures = {};
10747 +function getCurrentComponentErrorInfo(parentType) {
10748 + var info = getDeclarationErrorAddendum();
10749 +
10750 + if (!info) {
10751 + var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;
10752 + if (parentName) {
10753 + info = ' Check the top-level render call using <' + parentName + '>.';
10754 + }
10755 + }
10756 + return info;
10757 +}
10758
10759 /**
10760 * Warn if the element doesn't have an explicit key assigned to it.
10761 * This element is in an array. The array could grow and shrink or be
10762 * reordered. All children that haven't already been validated are required to
10378 - * have a "key" property assigned to it.
10763 + * have a "key" property assigned to it. Error statuses are cached so a warning
10764 + * will only be shown once.
10765 *
10766 * @internal
10767 * @param {ReactElement} element Element that requires a key.
@@ -10387,54 +10773,24 @@ function validateExplicitKey(element, parentType) {
10773 }
10774 element._store.validated = true;
10775
10390 - var addenda = getAddendaForKeyUse('uniqueKey', element, parentType);
10391 - if (addenda === null) {
10392 - // we already showed the warning
10393 - return;
10394 - }
10395 - "development" !== 'production' ? warning(false, 'Each child in an array or iterator should have a unique "key" prop.' + '%s%s%s', addenda.parentOrOwner || '', addenda.childOwner || '', addenda.url || '') : void 0;
10396 -}
10397 -
10398 -/**
10399 - * Shared warning and monitoring code for the key warnings.
10400 - *
10401 - * @internal
10402 - * @param {string} messageType A key used for de-duping warnings.
10403 - * @param {ReactElement} element Component that requires a key.
10404 - * @param {*} parentType element's parent's type.
10405 - * @returns {?object} A set of addenda to use in the warning message, or null
10406 - * if the warning has already been shown before (and shouldn't be shown again).
10407 - */
10408 -function getAddendaForKeyUse(messageType, element, parentType) {
10409 - var addendum = getDeclarationErrorAddendum();
10410 - if (!addendum) {
10411 - var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;
10412 - if (parentName) {
10413 - addendum = ' Check the top-level render call using <' + parentName + '>.';
10414 - }
10415 - }
10776 + var memoizer = ownerHasKeyUseWarning.uniqueKey || (ownerHasKeyUseWarning.uniqueKey = {});
10777
10417 - var memoizer = ownerHasKeyUseWarning[messageType] || (ownerHasKeyUseWarning[messageType] = {});
10418 - if (memoizer[addendum]) {
10419 - return null;
10778 + var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);
10779 + if (memoizer[currentComponentErrorInfo]) {
10780 + return;
10781 }
10421 - memoizer[addendum] = true;
10422 -
10423 - var addenda = {
10424 - parentOrOwner: addendum,
10425 - url: ' See https://fb.me/react-warning-keys for more information.',
10426 - childOwner: null
10427 - };
10782 + memoizer[currentComponentErrorInfo] = true;
10783
10784 // Usually the current owner is the offender, but if it accepts children as a
10785 // property, it may be the creator of the child that's responsible for
10786 // assigning it a key.
10787 + var childOwner = '';
10788 if (element && element._owner && element._owner !== ReactCurrentOwner.current) {
10789 // Give the component that originally created this child.
10434 - addenda.childOwner = ' It was passed a child from ' + element._owner.getName() + '.';
10790 + childOwner = ' It was passed a child from ' + element._owner.getName() + '.';
10791 }
10792
10437 - return addenda;
10793 + "development" !== 'production' ? warning(false, 'Each child in an array or iterator should have a unique "key" prop.' + '%s%s See https://fb.me/react-warning-keys for more information.%s', currentComponentErrorInfo, childOwner, ReactComponentTreeDevtool.getCurrentStackAddendum(element)) : void 0;
10794 }
10795
10796 /**
@@ -10479,43 +10835,6 @@ function validateChildKeys(node, parentType) {
10835 }
10836 }
10837
10482 -/**
10483 - * Assert that the props are valid
10484 - *
10485 - * @param {string} componentName Name of the component for error messages.
10486 - * @param {object} propTypes Map of prop name to a ReactPropType
10487 - * @param {object} props
10488 - * @param {string} location e.g. "prop", "context", "child context"
10489 - * @private
10490 - */
10491 -function checkPropTypes(componentName, propTypes, props, location) {
10492 - for (var propName in propTypes) {
10493 - if (propTypes.hasOwnProperty(propName)) {
10494 - var error;
10495 - // Prop type validation may throw. In case they do, we don't want to
10496 - // fail the render phase where it didn't fail before. So we log it.
10497 - // After these have been cleaned up, we'll let them throw.
10498 - try {
10499 - // This is intentionally an invariant that gets caught. It's the same
10500 - // behavior as without this statement except with a better message.
10501 - !(typeof propTypes[propName] === 'function') ? "development" !== 'production' ? invariant(false, '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], propName) : invariant(false) : void 0;
10502 - error = propTypes[propName](props, propName, componentName, location);
10503 - } catch (ex) {
10504 - error = ex;
10505 - }
10506 - "development" !== 'production' ? warning(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', ReactPropTypeLocationNames[location], propName, typeof error) : void 0;
10507 - if (error instanceof Error && !(error.message in loggedTypeFailures)) {
10508 - // Only monitor this failure once because there tends to be a lot of the
10509 - // same error.
10510 - loggedTypeFailures[error.message] = true;
10511 -
10512 - var addendum = getDeclarationErrorAddendum();
10513 - "development" !== 'production' ? warning(false, 'Failed propType: %s%s', error.message, addendum) : void 0;
10514 - }
10515 - }
10516 - }
10517 -}
10518 -
10838 /**
10839 * Given an element, validate that its props follow the propTypes definition,
10840 * provided by the type.
@@ -10529,7 +10848,7 @@ function validatePropTypes(element) {
10848 }
10849 var name = componentClass.displayName || componentClass.name;
10850 if (componentClass.propTypes) {
10532 - checkPropTypes(name, componentClass.propTypes, element.props, ReactPropTypeLocations.prop);
10851 + checkReactTypeSpec(componentClass.propTypes, element.props, ReactPropTypeLocations.prop, name, element, null);
10852 }
10853 if (typeof componentClass.getDefaultProps === 'function') {
10854 "development" !== 'production' ? warning(componentClass.getDefaultProps.isReactClassApproved, 'getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.') : void 0;
@@ -10603,7 +10922,7 @@ var ReactElementValidator = {
10922 };
10923
10924 module.exports = ReactElementValidator;
10606 -},{"115":115,"126":126,"157":157,"167":167,"36":36,"61":61,"82":82,"83":83}],63:[function(_dereq_,module,exports){
10925 +},{"115":115,"116":116,"128":128,"169":169,"34":34,"36":36,"61":61,"83":83}],63:[function(_dereq_,module,exports){
10926 /**
10927 * Copyright 2014-present, Facebook, Inc.
10928 * All rights reserved.
@@ -10759,16 +11078,16 @@ module.exports = ReactEventEmitterMixin;
11078
11079 'use strict';
11080
10762 -var _assign = _dereq_(168);
11081 +var _assign = _dereq_(170);
11082
10764 -var EventListener = _dereq_(142);
10765 -var ExecutionEnvironment = _dereq_(143);
11083 +var EventListener = _dereq_(144);
11084 +var ExecutionEnvironment = _dereq_(145);
11085 var PooledClass = _dereq_(25);
11086 var ReactDOMComponentTree = _dereq_(41);
11087 var ReactUpdates = _dereq_(93);
11088
10770 -var getEventTarget = _dereq_(125);
10771 -var getUnboundedScrollPosition = _dereq_(154);
11089 +var getEventTarget = _dereq_(126);
11090 +var getUnboundedScrollPosition = _dereq_(156);
11091
11092 /**
11093 * Find the deepest React component completely containing the root of the
@@ -10779,8 +11098,8 @@ function findParent(inst) {
11098 // TODO: It may be a good idea to cache this to prevent unnecessary DOM
11099 // traversal, but caching is difficult to do correctly without using a
11100 // mutation observer to listen for all DOM changes.
10782 - while (inst._nativeParent) {
10783 - inst = inst._nativeParent;
11101 + while (inst._hostParent) {
11102 + inst = inst._hostParent;
11103 }
11104 var rootNode = ReactDOMComponentTree.getNodeFromInstance(inst);
11105 var container = rootNode.parentNode;
@@ -10903,7 +11222,7 @@ var ReactEventListener = {
11222 };
11223
11224 module.exports = ReactEventListener;
10906 -},{"125":125,"142":142,"143":143,"154":154,"168":168,"25":25,"41":41,"93":93}],67:[function(_dereq_,module,exports){
11225 +},{"126":126,"144":144,"145":145,"156":156,"170":170,"25":25,"41":41,"93":93}],67:[function(_dereq_,module,exports){
11226 /**
11227 * Copyright 2013-present, Facebook, Inc.
11228 * All rights reserved.
@@ -10926,6 +11245,121 @@ var ReactFeatureFlags = {
11245
11246 module.exports = ReactFeatureFlags;
11247 },{}],68:[function(_dereq_,module,exports){
11248 +/**
11249 + * Copyright 2014-present, Facebook, Inc.
11250 + * All rights reserved.
11251 + *
11252 + * This source code is licensed under the BSD-style license found in the
11253 + * LICENSE file in the root directory of this source tree. An additional grant
11254 + * of patent rights can be found in the PATENTS file in the same directory.
11255 + *
11256 + * @providesModule ReactHostComponent
11257 + */
11258 +
11259 +'use strict';
11260 +
11261 +var _prodInvariant = _dereq_(137),
11262 + _assign = _dereq_(170);
11263 +
11264 +var invariant = _dereq_(159);
11265 +
11266 +var genericComponentClass = null;
11267 +// This registry keeps track of wrapper classes around host tags.
11268 +var tagToComponentClass = {};
11269 +var textComponentClass = null;
11270 +
11271 +var ReactHostComponentInjection = {
11272 + // This accepts a class that receives the tag string. This is a catch all
11273 + // that can render any kind of tag.
11274 + injectGenericComponentClass: function (componentClass) {
11275 + genericComponentClass = componentClass;
11276 + },
11277 + // This accepts a text component class that takes the text string to be
11278 + // rendered as props.
11279 + injectTextComponentClass: function (componentClass) {
11280 + textComponentClass = componentClass;
11281 + },
11282 + // This accepts a keyed object with classes as values. Each key represents a
11283 + // tag. That particular tag will use this class instead of the generic one.
11284 + injectComponentClasses: function (componentClasses) {
11285 + _assign(tagToComponentClass, componentClasses);
11286 + }
11287 +};
11288 +
11289 +/**
11290 + * Get a host internal component class for a specific tag.
11291 + *
11292 + * @param {ReactElement} element The element to create.
11293 + * @return {function} The internal class constructor function.
11294 + */
11295 +function createInternalComponent(element) {
11296 + !genericComponentClass ? "development" !== 'production' ? invariant(false, 'There is no registered component for the tag %s', element.type) : _prodInvariant('111', element.type) : void 0;
11297 + return new genericComponentClass(element);
11298 +}
11299 +
11300 +/**
11301 + * @param {ReactText} text
11302 + * @return {ReactComponent}
11303 + */
11304 +function createInstanceForText(text) {
11305 + return new textComponentClass(text);
11306 +}
11307 +
11308 +/**
11309 + * @param {ReactComponent} component
11310 + * @return {boolean}
11311 + */
11312 +function isTextComponent(component) {
11313 + return component instanceof textComponentClass;
11314 +}
11315 +
11316 +var ReactHostComponent = {
11317 + createInternalComponent: createInternalComponent,
11318 + createInstanceForText: createInstanceForText,
11319 + isTextComponent: isTextComponent,
11320 + injection: ReactHostComponentInjection
11321 +};
11322 +
11323 +module.exports = ReactHostComponent;
11324 +},{"137":137,"159":159,"170":170}],69:[function(_dereq_,module,exports){
11325 +/**
11326 + * Copyright 2016-present, Facebook, Inc.
11327 + * All rights reserved.
11328 + *
11329 + * This source code is licensed under the BSD-style license found in the
11330 + * LICENSE file in the root directory of this source tree. An additional grant
11331 + * of patent rights can be found in the PATENTS file in the same directory.
11332 + *
11333 + * @providesModule ReactHostOperationHistoryDevtool
11334 + */
11335 +
11336 +'use strict';
11337 +
11338 +var history = [];
11339 +
11340 +var ReactHostOperationHistoryDevtool = {
11341 + onHostOperation: function (debugID, type, payload) {
11342 + history.push({
11343 + instanceID: debugID,
11344 + type: type,
11345 + payload: payload
11346 + });
11347 + },
11348 + clearHistory: function () {
11349 + if (ReactHostOperationHistoryDevtool._preventClearing) {
11350 + // Should only be used for tests.
11351 + return;
11352 + }
11353 +
11354 + history = [];
11355 + },
11356 + getHistory: function () {
11357 + return history;
11358 + }
11359 +};
11360 +
11361 +module.exports = ReactHostOperationHistoryDevtool;
11362 +},{}],70:[function(_dereq_,module,exports){
11363 /**
11364 * Copyright 2013-present, Facebook, Inc.
11365 * All rights reserved.
@@ -10946,7 +11380,7 @@ var ReactComponentEnvironment = _dereq_(33);
11380 var ReactClass = _dereq_(30);
11381 var ReactEmptyComponent = _dereq_(63);
11382 var ReactBrowserEventEmitter = _dereq_(27);
10949 -var ReactNativeComponent = _dereq_(77);
11383 +var ReactHostComponent = _dereq_(68);
11384 var ReactUpdates = _dereq_(93);
11385
11386 var ReactInjection = {
@@ -10957,12 +11391,12 @@ var ReactInjection = {
11391 EventPluginHub: EventPluginHub.injection,
11392 EventPluginUtils: EventPluginUtils.injection,
11393 EventEmitter: ReactBrowserEventEmitter.injection,
10960 - NativeComponent: ReactNativeComponent.injection,
11394 + HostComponent: ReactHostComponent.injection,
11395 Updates: ReactUpdates.injection
11396 };
11397
11398 module.exports = ReactInjection;
10965 -},{"10":10,"17":17,"19":19,"27":27,"30":30,"33":33,"63":63,"77":77,"93":93}],69:[function(_dereq_,module,exports){
11399 +},{"10":10,"17":17,"19":19,"27":27,"30":30,"33":33,"63":63,"68":68,"93":93}],71:[function(_dereq_,module,exports){
11400 /**
11401 * Copyright 2013-present, Facebook, Inc.
11402 * All rights reserved.
@@ -10978,9 +11412,9 @@ module.exports = ReactInjection;
11412
11413 var ReactDOMSelection = _dereq_(52);
11414
10981 -var containsNode = _dereq_(146);
10982 -var focusNode = _dereq_(151);
10983 -var getActiveElement = _dereq_(152);
11415 +var containsNode = _dereq_(148);
11416 +var focusNode = _dereq_(153);
11417 +var getActiveElement = _dereq_(154);
11418
11419 function isInDocument(node) {
11420 return containsNode(document.documentElement, node);
@@ -11087,7 +11521,7 @@ var ReactInputSelection = {
11521 };
11522
11523 module.exports = ReactInputSelection;
11090 -},{"146":146,"151":151,"152":152,"52":52}],70:[function(_dereq_,module,exports){
11524 +},{"148":148,"153":153,"154":154,"52":52}],72:[function(_dereq_,module,exports){
11525 /**
11526 * Copyright 2013-present, Facebook, Inc.
11527 * All rights reserved.
@@ -11136,7 +11570,7 @@ var ReactInstanceMap = {
11570 };
11571
11572 module.exports = ReactInstanceMap;
11139 -},{}],71:[function(_dereq_,module,exports){
11573 +},{}],73:[function(_dereq_,module,exports){
11574 /**
11575 * Copyright 2016-present, Facebook, Inc.
11576 * All rights reserved.
@@ -11153,7 +11587,7 @@ module.exports = ReactInstanceMap;
11587 var ReactDebugTool = _dereq_(58);
11588
11589 module.exports = { debugTool: ReactDebugTool };
11156 -},{"58":58}],72:[function(_dereq_,module,exports){
11590 +},{"58":58}],74:[function(_dereq_,module,exports){
11591 /**
11592 * Copyright 2016-present, Facebook, Inc.
11593 * All rights reserved.
@@ -11167,7 +11601,7 @@ module.exports = { debugTool: ReactDebugTool };
11601
11602 'use strict';
11603
11170 -var warning = _dereq_(167);
11604 +var warning = _dereq_(169);
11605
11606 if ("development" !== 'production') {
11607 var processingChildContext = false;
@@ -11190,7 +11624,7 @@ var ReactInvalidSetStateWarningDevTool = {
11624 };
11625
11626 module.exports = ReactInvalidSetStateWarningDevTool;
11193 -},{"167":167}],73:[function(_dereq_,module,exports){
11627 +},{"169":169}],75:[function(_dereq_,module,exports){
11628 /**
11629 * Copyright 2013-present, Facebook, Inc.
11630 * All rights reserved.
@@ -11241,7 +11675,7 @@ var ReactMarkupChecksum = {
11675 };
11676
11677 module.exports = ReactMarkupChecksum;
11244 -},{"114":114}],74:[function(_dereq_,module,exports){
11678 +},{"114":114}],76:[function(_dereq_,module,exports){
11679 /**
11680 * Copyright 2013-present, Facebook, Inc.
11681 * All rights reserved.
@@ -11255,6 +11689,8 @@ module.exports = ReactMarkupChecksum;
11689
11690 'use strict';
11691
11692 +var _prodInvariant = _dereq_(137);
11693 +
11694 var DOMLazyTree = _dereq_(8);
11695 var DOMProperty = _dereq_(10);
11696 var ReactBrowserEventEmitter = _dereq_(27);
@@ -11264,18 +11700,18 @@ var ReactDOMContainerInfo = _dereq_(42);
11700 var ReactDOMFeatureFlags = _dereq_(46);
11701 var ReactElement = _dereq_(61);
11702 var ReactFeatureFlags = _dereq_(67);
11267 -var ReactInstrumentation = _dereq_(71);
11268 -var ReactMarkupChecksum = _dereq_(73);
11703 +var ReactInstrumentation = _dereq_(73);
11704 +var ReactMarkupChecksum = _dereq_(75);
11705 var ReactReconciler = _dereq_(86);
11706 var ReactUpdateQueue = _dereq_(92);
11707 var ReactUpdates = _dereq_(93);
11708
11273 -var emptyObject = _dereq_(150);
11274 -var instantiateReactComponent = _dereq_(131);
11275 -var invariant = _dereq_(157);
11276 -var setInnerHTML = _dereq_(137);
11277 -var shouldUpdateReactComponent = _dereq_(139);
11278 -var warning = _dereq_(167);
11709 +var emptyObject = _dereq_(152);
11710 +var instantiateReactComponent = _dereq_(132);
11711 +var invariant = _dereq_(159);
11712 +var setInnerHTML = _dereq_(139);
11713 +var shouldUpdateReactComponent = _dereq_(141);
11714 +var warning = _dereq_(169);
11715
11716 var ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;
11717 var ROOT_ATTR_NAME = DOMProperty.ROOT_ATTRIBUTE_NAME;
@@ -11378,7 +11814,13 @@ function batchedMountComponentIntoNode(componentInstance, container, shouldReuse
11814 * @see {ReactMount.unmountComponentAtNode}
11815 */
11816 function unmountComponentFromNode(instance, container, safely) {
11817 + if ("development" !== 'production') {
11818 + ReactInstrumentation.debugTool.onBeginFlush();
11819 + }
11820 ReactReconciler.unmountComponent(instance, safely);
11821 + if ("development" !== 'production') {
11822 + ReactInstrumentation.debugTool.onEndFlush();
11823 + }
11824
11825 if (container.nodeType === DOC_NODE_TYPE) {
11826 container = container.documentElement;
@@ -11404,19 +11846,19 @@ function hasNonRootReactChild(container) {
11846 var rootEl = getReactRootElementInContainer(container);
11847 if (rootEl) {
11848 var inst = ReactDOMComponentTree.getInstanceFromNode(rootEl);
11407 - return !!(inst && inst._nativeParent);
11849 + return !!(inst && inst._hostParent);
11850 }
11851 }
11852
11411 -function getNativeRootInstanceInContainer(container) {
11853 +function getHostRootInstanceInContainer(container) {
11854 var rootEl = getReactRootElementInContainer(container);
11413 - var prevNativeInstance = rootEl && ReactDOMComponentTree.getInstanceFromNode(rootEl);
11414 - return prevNativeInstance && !prevNativeInstance._nativeParent ? prevNativeInstance : null;
11855 + var prevHostInstance = rootEl && ReactDOMComponentTree.getInstanceFromNode(rootEl);
11856 + return prevHostInstance && !prevHostInstance._hostParent ? prevHostInstance : null;
11857 }
11858
11859 function getTopLevelWrapperInContainer(container) {
11418 - var root = getNativeRootInstanceInContainer(container);
11419 - return root ? root._nativeContainerInfo._topLevelWrapper : null;
11860 + var root = getHostRootInstanceInContainer(container);
11861 + return root ? root._hostContainerInfo._topLevelWrapper : null;
11862 }
11863
11864 /**
@@ -11512,7 +11954,7 @@ var ReactMount = {
11954 // verify that that's the case.
11955 "development" !== 'production' ? warning(ReactCurrentOwner.current == null, '_renderNewRootComponent(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from ' + 'render is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : void 0;
11956
11515 - !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? "development" !== 'production' ? invariant(false, '_registerComponent(...): Target container is not a DOM element.') : invariant(false) : void 0;
11957 + !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? "development" !== 'production' ? invariant(false, '_registerComponent(...): Target container is not a DOM element.') : _prodInvariant('37') : void 0;
11958
11959 ReactBrowserEventEmitter.ensureScrollValueMonitoring();
11960 var componentInstance = instantiateReactComponent(nextElement);
@@ -11555,7 +11997,7 @@ var ReactMount = {
11997 * @return {ReactComponent} Component instance rendered in `container`.
11998 */
11999 renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) {
11558 - !(parentComponent != null && parentComponent._reactInternalInstance != null) ? "development" !== 'production' ? invariant(false, 'parentComponent must be a valid React Component') : invariant(false) : void 0;
12000 + !(parentComponent != null && parentComponent._reactInternalInstance != null) ? "development" !== 'production' ? invariant(false, 'parentComponent must be a valid React Component') : _prodInvariant('38') : void 0;
12001 return ReactMount._renderSubtreeIntoContainer(parentComponent, nextElement, container, callback);
12002 },
12003
@@ -11563,7 +12005,7 @@ var ReactMount = {
12005 ReactUpdateQueue.validateCallback(callback, 'ReactDOM.render');
12006 !ReactElement.isValidElement(nextElement) ? "development" !== 'production' ? invariant(false, 'ReactDOM.render(): Invalid component element.%s', typeof nextElement === 'string' ? ' Instead of passing a string like \'div\', pass ' + 'React.createElement(\'div\') or <div />.' : typeof nextElement === 'function' ? ' Instead of passing a class like Foo, pass ' + 'React.createElement(Foo) or <Foo />.' :
12007 // Check if it quacks like an element
11566 - nextElement != null && nextElement.props !== undefined ? ' This may be caused by unintentionally loading two independent ' + 'copies of React.' : '') : invariant(false) : void 0;
12008 + nextElement != null && nextElement.props !== undefined ? ' This may be caused by unintentionally loading two independent ' + 'copies of React.' : '') : _prodInvariant('39', typeof nextElement === 'string' ? ' Instead of passing a string like \'div\', pass ' + 'React.createElement(\'div\') or <div />.' : typeof nextElement === 'function' ? ' Instead of passing a class like Foo, pass ' + 'React.createElement(Foo) or <Foo />.' : nextElement != null && nextElement.props !== undefined ? ' This may be caused by unintentionally loading two independent ' + 'copies of React.' : '') : void 0;
12009
12010 "development" !== 'production' ? warning(!container || !container.tagName || container.tagName.toUpperCase() !== 'BODY', 'render(): Rendering components directly into document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try rendering into a container element created ' + 'for your app.') : void 0;
12011
@@ -11645,7 +12087,7 @@ var ReactMount = {
12087 // render but we still don't expect to be in a render call here.)
12088 "development" !== 'production' ? warning(ReactCurrentOwner.current == null, 'unmountComponentAtNode(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from render ' + 'is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : void 0;
12089
11648 - !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? "development" !== 'production' ? invariant(false, 'unmountComponentAtNode(...): Target container is not a DOM element.') : invariant(false) : void 0;
12090 + !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? "development" !== 'production' ? invariant(false, 'unmountComponentAtNode(...): Target container is not a DOM element.') : _prodInvariant('40') : void 0;
12091
12092 var prevComponent = getTopLevelWrapperInContainer(container);
12093 if (!prevComponent) {
@@ -11668,7 +12110,7 @@ var ReactMount = {
12110 },
12111
12112 _mountImageIntoNode: function (markup, container, instance, shouldReuseMarkup, transaction) {
11671 - !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? "development" !== 'production' ? invariant(false, 'mountComponentIntoNode(...): Target container is not valid.') : invariant(false) : void 0;
12113 + !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? "development" !== 'production' ? invariant(false, 'mountComponentIntoNode(...): Target container is not valid.') : _prodInvariant('41') : void 0;
12114
12115 if (shouldReuseMarkup) {
12116 var rootElement = getReactRootElementInContainer(container);
@@ -11705,7 +12147,7 @@ var ReactMount = {
12147 var diffIndex = firstDifferenceIndex(normalizedMarkup, rootMarkup);
12148 var difference = ' (client) ' + normalizedMarkup.substring(diffIndex - 20, diffIndex + 20) + '\n (server) ' + rootMarkup.substring(diffIndex - 20, diffIndex + 20);
12149
11708 - !(container.nodeType !== DOC_NODE_TYPE) ? "development" !== 'production' ? invariant(false, 'You\'re trying to render a component to the document using ' + 'server rendering but the checksum was invalid. This usually ' + 'means you rendered a different component type or props on ' + 'the client from the one on the server, or your render() ' + 'methods are impure. React cannot handle this case due to ' + 'cross-browser quirks by rendering at the document root. You ' + 'should look for environment dependent code in your components ' + 'and ensure the props are the same client and server side:\n%s', difference) : invariant(false) : void 0;
12150 + !(container.nodeType !== DOC_NODE_TYPE) ? "development" !== 'production' ? invariant(false, 'You\'re trying to render a component to the document using server rendering but the checksum was invalid. This usually means you rendered a different component type or props on the client from the one on the server, or your render() methods are impure. React cannot handle this case due to cross-browser quirks by rendering at the document root. You should look for environment dependent code in your components and ensure the props are the same client and server side:\n%s', difference) : _prodInvariant('42', difference) : void 0;
12151
12152 if ("development" !== 'production') {
12153 "development" !== 'production' ? warning(false, 'React attempted to reuse markup in a container but the ' + 'checksum was invalid. This generally means that you are ' + 'using server rendering and the markup generated on the ' + 'server was not what the client was expecting. React injected ' + 'new markup to compensate which works but you have lost many ' + 'of the benefits of server rendering. Instead, figure out ' + 'why the markup being generated is different on the client ' + 'or server:\n%s', difference) : void 0;
@@ -11713,7 +12155,7 @@ var ReactMount = {
12155 }
12156 }
12157
11716 - !(container.nodeType !== DOC_NODE_TYPE) ? "development" !== 'production' ? invariant(false, 'You\'re trying to render a component to the document but ' + 'you didn\'t use server rendering. We can\'t do this ' + 'without using server rendering due to cross-browser quirks. ' + 'See ReactDOMServer.renderToString() for server rendering.') : invariant(false) : void 0;
12158 + !(container.nodeType !== DOC_NODE_TYPE) ? "development" !== 'production' ? invariant(false, 'You\'re trying to render a component to the document but you didn\'t use server rendering. We can\'t do this without using server rendering due to cross-browser quirks. See ReactDOMServer.renderToString() for server rendering.') : _prodInvariant('43') : void 0;
12159
12160 if (transaction.useCreateElement) {
12161 while (container.lastChild) {
@@ -11726,16 +12168,16 @@ var ReactMount = {
12168 }
12169
12170 if ("development" !== 'production') {
11729 - var nativeNode = ReactDOMComponentTree.getInstanceFromNode(container.firstChild);
11730 - if (nativeNode._debugID !== 0) {
11731 - ReactInstrumentation.debugTool.onNativeOperation(nativeNode._debugID, 'mount', markup.toString());
12171 + var hostNode = ReactDOMComponentTree.getInstanceFromNode(container.firstChild);
12172 + if (hostNode._debugID !== 0) {
12173 + ReactInstrumentation.debugTool.onHostOperation(hostNode._debugID, 'mount', markup.toString());
12174 }
12175 }
12176 }
12177 };
12178
12179 module.exports = ReactMount;
11738 -},{"10":10,"131":131,"137":137,"139":139,"150":150,"157":157,"167":167,"27":27,"36":36,"41":41,"42":42,"46":46,"61":61,"67":67,"71":71,"73":73,"8":8,"86":86,"92":92,"93":93}],75:[function(_dereq_,module,exports){
12180 +},{"10":10,"132":132,"137":137,"139":139,"141":141,"152":152,"159":159,"169":169,"27":27,"36":36,"41":41,"42":42,"46":46,"61":61,"67":67,"73":73,"75":75,"8":8,"86":86,"92":92,"93":93}],77:[function(_dereq_,module,exports){
12181 /**
12182 * Copyright 2013-present, Facebook, Inc.
12183 * All rights reserved.
@@ -11749,17 +12191,20 @@ module.exports = ReactMount;
12191
12192 'use strict';
12193
12194 +var _prodInvariant = _dereq_(137);
12195 +
12196 var ReactComponentEnvironment = _dereq_(33);
11753 -var ReactInstrumentation = _dereq_(71);
11754 -var ReactMultiChildUpdateTypes = _dereq_(76);
12197 +var ReactInstanceMap = _dereq_(72);
12198 +var ReactInstrumentation = _dereq_(73);
12199 +var ReactMultiChildUpdateTypes = _dereq_(78);
12200
12201 var ReactCurrentOwner = _dereq_(36);
12202 var ReactReconciler = _dereq_(86);
12203 var ReactChildReconciler = _dereq_(28);
12204
11760 -var emptyFunction = _dereq_(149);
11761 -var flattenChildren = _dereq_(120);
11762 -var invariant = _dereq_(157);
12205 +var emptyFunction = _dereq_(151);
12206 +var flattenChildren = _dereq_(121);
12207 +var invariant = _dereq_(159);
12208
12209 /**
12210 * Make an update for markup to be rendered and inserted at a supplied index.
@@ -11793,7 +12238,7 @@ function makeMove(child, afterNode, toIndex) {
12238 type: ReactMultiChildUpdateTypes.MOVE_EXISTING,
12239 content: null,
12240 fromIndex: child._mountIndex,
11796 - fromNode: ReactReconciler.getNativeNode(child),
12241 + fromNode: ReactReconciler.getHostNode(child),
12242 toIndex: toIndex,
12243 afterNode: afterNode
12244 };
@@ -11874,10 +12319,26 @@ function processQueue(inst, updateQueue) {
12319 ReactComponentEnvironment.processChildrenUpdates(inst, updateQueue);
12320 }
12321
12322 +var setParentForInstrumentation = emptyFunction;
12323 var setChildrenForInstrumentation = emptyFunction;
12324 if ("development" !== 'production') {
12325 + var getDebugID = function (inst) {
12326 + if (!inst._debugID) {
12327 + // Check for ART-like instances. TODO: This is silly/gross.
12328 + var internal;
12329 + if (internal = ReactInstanceMap.get(inst)) {
12330 + inst = internal;
12331 + }
12332 + }
12333 + return inst._debugID;
12334 + };
12335 + setParentForInstrumentation = function (child) {
12336 + if (child._debugID !== 0) {
12337 + ReactInstrumentation.debugTool.onSetParent(child._debugID, getDebugID(this));
12338 + }
12339 + };
12340 setChildrenForInstrumentation = function (children) {
11880 - ReactInstrumentation.debugTool.onSetChildren(this._debugID, children ? Object.keys(children).map(function (key) {
12341 + ReactInstrumentation.debugTool.onSetChildren(getDebugID(this), children ? Object.keys(children).map(function (key) {
12342 return children[key]._debugID;
12343 }) : []);
12344 };
@@ -11905,7 +12366,7 @@ var ReactMultiChild = {
12366 if (this._currentElement) {
12367 try {
12368 ReactCurrentOwner.current = this._currentElement._owner;
11908 - return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context);
12369 + return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context, this._debugID);
12370 } finally {
12371 ReactCurrentOwner.current = null;
12372 }
@@ -11920,7 +12381,7 @@ var ReactMultiChild = {
12381 if (this._currentElement) {
12382 try {
12383 ReactCurrentOwner.current = this._currentElement._owner;
11923 - nextChildren = flattenChildren(nextNestedChildrenElements);
12384 + nextChildren = flattenChildren(nextNestedChildrenElements, this._debugID);
12385 } finally {
12386 ReactCurrentOwner.current = null;
12387 }
@@ -11950,7 +12411,10 @@ var ReactMultiChild = {
12411 for (var name in children) {
12412 if (children.hasOwnProperty(name)) {
12413 var child = children[name];
11953 - var mountImage = ReactReconciler.mountComponent(child, transaction, this, this._nativeContainerInfo, context);
12414 + if ("development" !== 'production') {
12415 + setParentForInstrumentation.call(this, child);
12416 + }
12417 + var mountImage = ReactReconciler.mountComponent(child, transaction, this, this._hostContainerInfo, context);
12418 child._mountIndex = index++;
12419 mountImages.push(mountImage);
12420 }
@@ -11975,7 +12439,7 @@ var ReactMultiChild = {
12439 ReactChildReconciler.unmountChildren(prevChildren, false);
12440 for (var name in prevChildren) {
12441 if (prevChildren.hasOwnProperty(name)) {
11978 - !false ? "development" !== 'production' ? invariant(false, 'updateTextContent called on non-empty component.') : invariant(false) : void 0;
12442 + !false ? "development" !== 'production' ? invariant(false, 'updateTextContent called on non-empty component.') : _prodInvariant('118') : void 0;
12443 }
12444 }
12445 // Set new text content.
@@ -11995,7 +12459,7 @@ var ReactMultiChild = {
12459 ReactChildReconciler.unmountChildren(prevChildren, false);
12460 for (var name in prevChildren) {
12461 if (prevChildren.hasOwnProperty(name)) {
11998 - !false ? "development" !== 'production' ? invariant(false, 'updateTextContent called on non-empty component.') : invariant(false) : void 0;
12462 + !false ? "development" !== 'production' ? invariant(false, 'updateTextContent called on non-empty component.') : _prodInvariant('118') : void 0;
12463 }
12464 }
12465 var updates = [makeSetMarkup(nextMarkup)];
@@ -12054,7 +12518,7 @@ var ReactMultiChild = {
12518 updates = enqueue(updates, this._mountChildAtIndex(nextChild, lastPlacedNode, nextIndex, transaction, context));
12519 }
12520 nextIndex++;
12057 - lastPlacedNode = ReactReconciler.getNativeNode(nextChild);
12521 + lastPlacedNode = ReactReconciler.getHostNode(nextChild);
12522 }
12523 // Remove children that are no longer present.
12524 for (name in removedNodes) {
@@ -12135,7 +12599,7 @@ var ReactMultiChild = {
12599 * @private
12600 */
12601 _mountChildAtIndex: function (child, afterNode, index, transaction, context) {
12138 - var mountImage = ReactReconciler.mountComponent(child, transaction, this, this._nativeContainerInfo, context);
12602 + var mountImage = ReactReconciler.mountComponent(child, transaction, this, this._hostContainerInfo, context);
12603 child._mountIndex = index;
12604 return this.createChild(child, afterNode, mountImage);
12605 },
@@ -12159,7 +12623,7 @@ var ReactMultiChild = {
12623 };
12624
12625 module.exports = ReactMultiChild;
12162 -},{"120":120,"149":149,"157":157,"28":28,"33":33,"36":36,"71":71,"76":76,"86":86}],76:[function(_dereq_,module,exports){
12626 +},{"121":121,"137":137,"151":151,"159":159,"28":28,"33":33,"36":36,"72":72,"73":73,"78":78,"86":86}],78:[function(_dereq_,module,exports){
12627 /**
12628 * Copyright 2013-present, Facebook, Inc.
12629 * All rights reserved.
@@ -12167,166 +12631,32 @@ module.exports = ReactMultiChild;
12631 * This source code is licensed under the BSD-style license found in the
12632 * LICENSE file in the root directory of this source tree. An additional grant
12633 * of patent rights can be found in the PATENTS file in the same directory.
12170 - *
12171 - * @providesModule ReactMultiChildUpdateTypes
12172 - */
12173 -
12174 -'use strict';
12175 -
12176 -var keyMirror = _dereq_(160);
12177 -
12178 -/**
12179 - * When a component's children are updated, a series of update configuration
12180 - * objects are created in order to batch and serialize the required changes.
12181 - *
12182 - * Enumerates all the possible types of update configurations.
12183 - *
12184 - * @internal
12185 - */
12186 -var ReactMultiChildUpdateTypes = keyMirror({
12187 - INSERT_MARKUP: null,
12188 - MOVE_EXISTING: null,
12189 - REMOVE_NODE: null,
12190 - SET_MARKUP: null,
12191 - TEXT_CONTENT: null
12192 -});
12193 -
12194 -module.exports = ReactMultiChildUpdateTypes;
12195 -},{"160":160}],77:[function(_dereq_,module,exports){
12196 -/**
12197 - * Copyright 2014-present, Facebook, Inc.
12198 - * All rights reserved.
12199 - *
12200 - * This source code is licensed under the BSD-style license found in the
12201 - * LICENSE file in the root directory of this source tree. An additional grant
12202 - * of patent rights can be found in the PATENTS file in the same directory.
12203 - *
12204 - * @providesModule ReactNativeComponent
12205 - */
12206 -
12207 -'use strict';
12208 -
12209 -var _assign = _dereq_(168);
12210 -
12211 -var invariant = _dereq_(157);
12212 -
12213 -var autoGenerateWrapperClass = null;
12214 -var genericComponentClass = null;
12215 -// This registry keeps track of wrapper classes around native tags.
12216 -var tagToComponentClass = {};
12217 -var textComponentClass = null;
12218 -
12219 -var ReactNativeComponentInjection = {
12220 - // This accepts a class that receives the tag string. This is a catch all
12221 - // that can render any kind of tag.
12222 - injectGenericComponentClass: function (componentClass) {
12223 - genericComponentClass = componentClass;
12224 - },
12225 - // This accepts a text component class that takes the text string to be
12226 - // rendered as props.
12227 - injectTextComponentClass: function (componentClass) {
12228 - textComponentClass = componentClass;
12229 - },
12230 - // This accepts a keyed object with classes as values. Each key represents a
12231 - // tag. That particular tag will use this class instead of the generic one.
12232 - injectComponentClasses: function (componentClasses) {
12233 - _assign(tagToComponentClass, componentClasses);
12234 - }
12235 -};
12236 -
12237 -/**
12238 - * Get a composite component wrapper class for a specific tag.
12239 - *
12240 - * @param {ReactElement} element The tag for which to get the class.
12241 - * @return {function} The React class constructor function.
12242 - */
12243 -function getComponentClassForElement(element) {
12244 - if (typeof element.type === 'function') {
12245 - return element.type;
12246 - }
12247 - var tag = element.type;
12248 - var componentClass = tagToComponentClass[tag];
12249 - if (componentClass == null) {
12250 - tagToComponentClass[tag] = componentClass = autoGenerateWrapperClass(tag);
12251 - }
12252 - return componentClass;
12253 -}
12254 -
12255 -/**
12256 - * Get a native internal component class for a specific tag.
12257 - *
12258 - * @param {ReactElement} element The element to create.
12259 - * @return {function} The internal class constructor function.
12260 - */
12261 -function createInternalComponent(element) {
12262 - !genericComponentClass ? "development" !== 'production' ? invariant(false, 'There is no registered component for the tag %s', element.type) : invariant(false) : void 0;
12263 - return new genericComponentClass(element);
12264 -}
12265 -
12266 -/**
12267 - * @param {ReactText} text
12268 - * @return {ReactComponent}
12269 - */
12270 -function createInstanceForText(text) {
12271 - return new textComponentClass(text);
12272 -}
12273 -
12274 -/**
12275 - * @param {ReactComponent} component
12276 - * @return {boolean}
12277 - */
12278 -function isTextComponent(component) {
12279 - return component instanceof textComponentClass;
12280 -}
12281 -
12282 -var ReactNativeComponent = {
12283 - getComponentClassForElement: getComponentClassForElement,
12284 - createInternalComponent: createInternalComponent,
12285 - createInstanceForText: createInstanceForText,
12286 - isTextComponent: isTextComponent,
12287 - injection: ReactNativeComponentInjection
12288 -};
12289 -
12290 -module.exports = ReactNativeComponent;
12291 -},{"157":157,"168":168}],78:[function(_dereq_,module,exports){
12292 -/**
12293 - * Copyright 2016-present, Facebook, Inc.
12294 - * All rights reserved.
12295 - *
12296 - * This source code is licensed under the BSD-style license found in the
12297 - * LICENSE file in the root directory of this source tree. An additional grant
12298 - * of patent rights can be found in the PATENTS file in the same directory.
12299 - *
12300 - * @providesModule ReactNativeOperationHistoryDevtool
12301 - */
12302 -
12303 -'use strict';
12304 -
12305 -var history = [];
12306 -
12307 -var ReactNativeOperationHistoryDevtool = {
12308 - onNativeOperation: function (debugID, type, payload) {
12309 - history.push({
12310 - instanceID: debugID,
12311 - type: type,
12312 - payload: payload
12313 - });
12314 - },
12315 - clearHistory: function () {
12316 - if (ReactNativeOperationHistoryDevtool._preventClearing) {
12317 - // Should only be used for tests.
12318 - return;
12319 - }
12634 + *
12635 + * @providesModule ReactMultiChildUpdateTypes
12636 + */
12637
12321 - history = [];
12322 - },
12323 - getHistory: function () {
12324 - return history;
12325 - }
12326 -};
12638 +'use strict';
12639 +
12640 +var keyMirror = _dereq_(162);
12641 +
12642 +/**
12643 + * When a component's children are updated, a series of update configuration
12644 + * objects are created in order to batch and serialize the required changes.
12645 + *
12646 + * Enumerates all the possible types of update configurations.
12647 + *
12648 + * @internal
12649 + */
12650 +var ReactMultiChildUpdateTypes = keyMirror({
12651 + INSERT_MARKUP: null,
12652 + MOVE_EXISTING: null,
12653 + REMOVE_NODE: null,
12654 + SET_MARKUP: null,
12655 + TEXT_CONTENT: null
12656 +});
12657
12328 -module.exports = ReactNativeOperationHistoryDevtool;
12329 -},{}],79:[function(_dereq_,module,exports){
12658 +module.exports = ReactMultiChildUpdateTypes;
12659 +},{"162":162}],79:[function(_dereq_,module,exports){
12660 /**
12661 * Copyright 2013-present, Facebook, Inc.
12662 * All rights reserved.
@@ -12340,12 +12670,14 @@ module.exports = ReactNativeOperationHistoryDevtool;
12670
12671 'use strict';
12672
12673 +var _prodInvariant = _dereq_(137);
12674 +
12675 var ReactElement = _dereq_(61);
12676
12345 -var invariant = _dereq_(157);
12677 +var invariant = _dereq_(159);
12678
12679 var ReactNodeTypes = {
12348 - NATIVE: 0,
12680 + HOST: 0,
12681 COMPOSITE: 1,
12682 EMPTY: 2,
12683
@@ -12356,15 +12688,15 @@ var ReactNodeTypes = {
12688 if (typeof node.type === 'function') {
12689 return ReactNodeTypes.COMPOSITE;
12690 } else {
12359 - return ReactNodeTypes.NATIVE;
12691 + return ReactNodeTypes.HOST;
12692 }
12693 }
12362 - !false ? "development" !== 'production' ? invariant(false, 'Unexpected node: %s', node) : invariant(false) : void 0;
12694 + !false ? "development" !== 'production' ? invariant(false, 'Unexpected node: %s', node) : _prodInvariant('26', node) : void 0;
12695 }
12696 };
12697
12698 module.exports = ReactNodeTypes;
12367 -},{"157":157,"61":61}],80:[function(_dereq_,module,exports){
12699 +},{"137":137,"159":159,"61":61}],80:[function(_dereq_,module,exports){
12700 /**
12701 * Copyright 2015-present, Facebook, Inc.
12702 * All rights reserved.

This file is too large to show in full.