aboutsummaryrefslogtreecommitdiff
path: root/node_modules/react-dom/cjs/react-dom-server.node.development.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/react-dom/cjs/react-dom-server.node.development.js')
-rw-r--r--node_modules/react-dom/cjs/react-dom-server.node.development.js1994
1 files changed, 666 insertions, 1328 deletions
diff --git a/node_modules/react-dom/cjs/react-dom-server.node.development.js b/node_modules/react-dom/cjs/react-dom-server.node.development.js
index ba1a28d78..2039700ca 100644
--- a/node_modules/react-dom/cjs/react-dom-server.node.development.js
+++ b/node_modules/react-dom/cjs/react-dom-server.node.development.js
@@ -1,4 +1,4 @@
-/** @license React v16.0.0
+/** @license React v16.2.0
* react-dom-server.node.development.js
*
* Copyright (c) 2013-present, Facebook, Inc.
@@ -6,101 +6,44 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
+
'use strict';
-if (process.env.NODE_ENV !== "production") {
-(function() {
+if (process.env.NODE_ENV !== "production") {
+ (function() {
'use strict';
-var objectAssign$1 = require('object-assign');
var invariant = require('fbjs/lib/invariant');
-var require$$0 = require('fbjs/lib/warning');
-var react = require('react');
+var _assign = require('object-assign');
+var React = require('react');
var emptyFunction = require('fbjs/lib/emptyFunction');
-var propTypes = require('prop-types');
var emptyObject = require('fbjs/lib/emptyObject');
var hyphenateStyleName = require('fbjs/lib/hyphenateStyleName');
var memoizeStringOnly = require('fbjs/lib/memoizeStringOnly');
+var warning = require('fbjs/lib/warning');
var checkPropTypes = require('prop-types/checkPropTypes');
var camelizeStyleName = require('fbjs/lib/camelizeStyleName');
var stream = require('stream');
/**
- * Copyright (c) 2013-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * @providesModule reactProdInvariant
- *
+ * WARNING: DO NOT manually require this module.
+ * This is a replacement for `invariant(...)` used by the error code system
+ * and will _only_ be required by the corresponding babel pass.
+ * It always throws.
*/
-/**
- * Copyright (c) 2013-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * @providesModule DOMNamespaces
- */
-
-var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';
-var MATH_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';
-var SVG_NAMESPACE = 'http://www.w3.org/2000/svg';
-
-var Namespaces$1 = {
- html: HTML_NAMESPACE,
- mathml: MATH_NAMESPACE,
- svg: SVG_NAMESPACE
-};
-
-// Assumes there is no parent namespace.
-function getIntrinsicNamespace$1(type) {
- switch (type) {
- case 'svg':
- return SVG_NAMESPACE;
- case 'math':
- return MATH_NAMESPACE;
- default:
- return HTML_NAMESPACE;
- }
-}
-
-function getChildNamespace$1(parentNamespace, type) {
- if (parentNamespace == null || parentNamespace === HTML_NAMESPACE) {
- // No (or default) parent namespace: potential entry point.
- return getIntrinsicNamespace$1(type);
- }
- if (parentNamespace === SVG_NAMESPACE && type === 'foreignObject') {
- // We're leaving SVG.
- return HTML_NAMESPACE;
- }
- // By default, pass namespace below.
- return parentNamespace;
-}
-
-var Namespaces_1 = Namespaces$1;
-var getIntrinsicNamespace_1 = getIntrinsicNamespace$1;
-var getChildNamespace_1 = getChildNamespace$1;
-
-var DOMNamespaces = {
- Namespaces: Namespaces_1,
- getIntrinsicNamespace: getIntrinsicNamespace_1,
- getChildNamespace: getChildNamespace_1
-};
-
// These attributes should be all lowercase to allow for
// case insensitive checks
-var RESERVED_PROPS$1 = {
+var RESERVED_PROPS = {
children: true,
dangerouslySetInnerHTML: true,
- autoFocus: true,
defaultValue: true,
defaultChecked: true,
innerHTML: true,
suppressContentEditableWarning: true,
+ suppressHydrationWarning: true,
style: true
};
@@ -151,7 +94,7 @@ var DOMPropertyInjection = {
var DOMMutationMethods = domPropertyConfig.DOMMutationMethods || {};
for (var propName in Properties) {
- !!DOMProperty.properties.hasOwnProperty(propName) ? 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) : void 0;
+ !!properties.hasOwnProperty(propName) ? 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) : void 0;
var lowerCased = propName.toLowerCase();
var propConfig = Properties[propName];
@@ -169,7 +112,7 @@ var DOMPropertyInjection = {
hasOverloadedBooleanValue: checkMask(propConfig, Injection.HAS_OVERLOADED_BOOLEAN_VALUE),
hasStringBooleanValue: checkMask(propConfig, Injection.HAS_STRING_BOOLEAN_VALUE)
};
- !(propertyInfo.hasBooleanValue + propertyInfo.hasNumericValue + propertyInfo.hasOverloadedBooleanValue <= 1) ? invariant(false, 'DOMProperty: Value can be one of boolean, overloaded boolean, or numeric value, but not a combination: %s', propName) : void 0;
+ !(propertyInfo.hasBooleanValue + propertyInfo.hasNumericValue + propertyInfo.hasOverloadedBooleanValue <= 1) ? invariant(false, "DOMProperty: Value can be one of boolean, overloaded boolean, or numeric value, but not a combination: %s", propName) : void 0;
if (DOMAttributeNames.hasOwnProperty(propName)) {
var attributeName = DOMAttributeNames[propName];
@@ -189,161 +132,295 @@ var DOMPropertyInjection = {
// without case-sensitivity. This allows the whitelist to pick up
// `allowfullscreen`, which should be written using the property configuration
// for `allowFullscreen`
- DOMProperty.properties[propName] = propertyInfo;
+ properties[propName] = propertyInfo;
}
}
};
/* eslint-disable max-len */
-var ATTRIBUTE_NAME_START_CHAR = ':A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD';
+var ATTRIBUTE_NAME_START_CHAR = ":A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD";
/* eslint-enable max-len */
+var ATTRIBUTE_NAME_CHAR = ATTRIBUTE_NAME_START_CHAR + "\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040";
+
+
+var ROOT_ATTRIBUTE_NAME = 'data-reactroot';
/**
- * DOMProperty exports lookup objects that can be used like functions:
+ * Map from property "standard name" to an object with info about how to set
+ * the property in the DOM. Each object contains:
*
- * > DOMProperty.isValid['id']
- * true
- * > DOMProperty.isValid['foobar']
- * undefined
- *
- * Although this may be confusing, it performs better in general.
- *
- * @see http://jsperf.com/key-exists
- * @see http://jsperf.com/key-missing
+ * attributeName:
+ * Used when rendering markup or with `*Attribute()`.
+ * attributeNamespace
+ * propertyName:
+ * Used on DOM node instances. (This includes properties that mutate due to
+ * external factors.)
+ * mutationMethod:
+ * If non-null, used instead of the property or `setAttribute()` after
+ * initial render.
+ * mustUseProperty:
+ * Whether the property must be accessed and mutated as an object property.
+ * hasBooleanValue:
+ * Whether the property should be removed when set to a falsey value.
+ * hasNumericValue:
+ * Whether the property must be numeric or parse as a numeric and should be
+ * removed when set to a falsey value.
+ * hasPositiveNumericValue:
+ * Whether the property must be positive numeric or parse as a positive
+ * numeric and should be removed when set to a falsey value.
+ * hasOverloadedBooleanValue:
+ * Whether the property can be used as a flag as well as with a value.
+ * Removed when strictly equal to false; present without a value when
+ * strictly equal to true; present with a value otherwise.
*/
-var DOMProperty = {
- ID_ATTRIBUTE_NAME: 'data-reactid',
- ROOT_ATTRIBUTE_NAME: 'data-reactroot',
+var properties = {};
- ATTRIBUTE_NAME_START_CHAR: ATTRIBUTE_NAME_START_CHAR,
- ATTRIBUTE_NAME_CHAR: ATTRIBUTE_NAME_START_CHAR + '\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040',
+/**
+ * Checks whether a property name is a writeable attribute.
+ * @method
+ */
+function shouldSetAttribute(name, value) {
+ if (isReservedProp(name)) {
+ return false;
+ }
+ if (name.length > 2 && (name[0] === 'o' || name[0] === 'O') && (name[1] === 'n' || name[1] === 'N')) {
+ return false;
+ }
+ if (value === null) {
+ return true;
+ }
+ switch (typeof value) {
+ case 'boolean':
+ return shouldAttributeAcceptBooleanValue(name);
+ case 'undefined':
+ case 'number':
+ case 'string':
+ case 'object':
+ return true;
+ default:
+ // function, symbol
+ return false;
+ }
+}
- /**
- * Map from property "standard name" to an object with info about how to set
- * the property in the DOM. Each object contains:
- *
- * attributeName:
- * Used when rendering markup or with `*Attribute()`.
- * attributeNamespace
- * propertyName:
- * Used on DOM node instances. (This includes properties that mutate due to
- * external factors.)
- * mutationMethod:
- * If non-null, used instead of the property or `setAttribute()` after
- * initial render.
- * mustUseProperty:
- * Whether the property must be accessed and mutated as an object property.
- * hasBooleanValue:
- * Whether the property should be removed when set to a falsey value.
- * hasNumericValue:
- * Whether the property must be numeric or parse as a numeric and should be
- * removed when set to a falsey value.
- * hasPositiveNumericValue:
- * Whether the property must be positive numeric or parse as a positive
- * numeric and should be removed when set to a falsey value.
- * hasOverloadedBooleanValue:
- * Whether the property can be used as a flag as well as with a value.
- * Removed when strictly equal to false; present without a value when
- * strictly equal to true; present with a value otherwise.
- */
- properties: {},
+function getPropertyInfo(name) {
+ return properties.hasOwnProperty(name) ? properties[name] : null;
+}
- /**
- * Checks whether a property name is a writeable attribute.
- * @method
- */
- shouldSetAttribute: function (name, value) {
- if (DOMProperty.isReservedProp(name)) {
- return false;
- }
- if ((name[0] === 'o' || name[0] === 'O') && (name[1] === 'n' || name[1] === 'N')) {
- return false;
- }
- if (value === null) {
- return true;
- }
- switch (typeof value) {
- case 'boolean':
- return DOMProperty.shouldAttributeAcceptBooleanValue(name);
- case 'undefined':
- case 'number':
- case 'string':
- case 'object':
- return true;
- default:
- // function, symbol
- return false;
- }
- },
+function shouldAttributeAcceptBooleanValue(name) {
+ if (isReservedProp(name)) {
+ return true;
+ }
+ var propertyInfo = getPropertyInfo(name);
+ if (propertyInfo) {
+ return propertyInfo.hasBooleanValue || propertyInfo.hasStringBooleanValue || propertyInfo.hasOverloadedBooleanValue;
+ }
+ var prefix = name.toLowerCase().slice(0, 5);
+ return prefix === 'data-' || prefix === 'aria-';
+}
- getPropertyInfo: function (name) {
- return DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;
+/**
+ * Checks to see if a property name is within the list of properties
+ * reserved for internal React operations. These properties should
+ * not be set on an HTML element.
+ *
+ * @private
+ * @param {string} name
+ * @return {boolean} If the name is within reserved props
+ */
+function isReservedProp(name) {
+ return RESERVED_PROPS.hasOwnProperty(name);
+}
+
+var injection = DOMPropertyInjection;
+
+var MUST_USE_PROPERTY = injection.MUST_USE_PROPERTY;
+var HAS_BOOLEAN_VALUE = injection.HAS_BOOLEAN_VALUE;
+var HAS_NUMERIC_VALUE = injection.HAS_NUMERIC_VALUE;
+var HAS_POSITIVE_NUMERIC_VALUE = injection.HAS_POSITIVE_NUMERIC_VALUE;
+var HAS_OVERLOADED_BOOLEAN_VALUE = injection.HAS_OVERLOADED_BOOLEAN_VALUE;
+var HAS_STRING_BOOLEAN_VALUE = injection.HAS_STRING_BOOLEAN_VALUE;
+
+var HTMLDOMPropertyConfig = {
+ // When adding attributes to this list, be sure to also add them to
+ // the `possibleStandardNames` module to ensure casing and incorrect
+ // name warnings.
+ Properties: {
+ allowFullScreen: HAS_BOOLEAN_VALUE,
+ // specifies target context for links with `preload` type
+ async: HAS_BOOLEAN_VALUE,
+ // Note: there is a special case that prevents it from being written to the DOM
+ // on the client side because the browsers are inconsistent. Instead we call focus().
+ autoFocus: HAS_BOOLEAN_VALUE,
+ autoPlay: HAS_BOOLEAN_VALUE,
+ capture: HAS_OVERLOADED_BOOLEAN_VALUE,
+ checked: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
+ cols: HAS_POSITIVE_NUMERIC_VALUE,
+ contentEditable: HAS_STRING_BOOLEAN_VALUE,
+ controls: HAS_BOOLEAN_VALUE,
+ 'default': HAS_BOOLEAN_VALUE,
+ defer: HAS_BOOLEAN_VALUE,
+ disabled: HAS_BOOLEAN_VALUE,
+ download: HAS_OVERLOADED_BOOLEAN_VALUE,
+ draggable: HAS_STRING_BOOLEAN_VALUE,
+ formNoValidate: HAS_BOOLEAN_VALUE,
+ hidden: HAS_BOOLEAN_VALUE,
+ loop: HAS_BOOLEAN_VALUE,
+ // Caution; `option.selected` is not updated if `select.multiple` is
+ // disabled with `removeAttribute`.
+ multiple: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
+ muted: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
+ noValidate: HAS_BOOLEAN_VALUE,
+ open: HAS_BOOLEAN_VALUE,
+ playsInline: HAS_BOOLEAN_VALUE,
+ readOnly: HAS_BOOLEAN_VALUE,
+ required: HAS_BOOLEAN_VALUE,
+ reversed: HAS_BOOLEAN_VALUE,
+ rows: HAS_POSITIVE_NUMERIC_VALUE,
+ rowSpan: HAS_NUMERIC_VALUE,
+ scoped: HAS_BOOLEAN_VALUE,
+ seamless: HAS_BOOLEAN_VALUE,
+ selected: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
+ size: HAS_POSITIVE_NUMERIC_VALUE,
+ start: HAS_NUMERIC_VALUE,
+ // support for projecting regular DOM Elements via V1 named slots ( shadow dom )
+ span: HAS_POSITIVE_NUMERIC_VALUE,
+ spellCheck: HAS_STRING_BOOLEAN_VALUE,
+ // Style must be explicitly set in the attribute list. React components
+ // expect a style object
+ style: 0,
+ // Keep it in the whitelist because it is case-sensitive for SVG.
+ tabIndex: 0,
+ // itemScope is for for Microdata support.
+ // See http://schema.org/docs/gs.html
+ itemScope: HAS_BOOLEAN_VALUE,
+ // These attributes must stay in the white-list because they have
+ // different attribute names (see DOMAttributeNames below)
+ acceptCharset: 0,
+ className: 0,
+ htmlFor: 0,
+ httpEquiv: 0,
+ // Attributes with mutation methods must be specified in the whitelist
+ // Set the string boolean flag to allow the behavior
+ value: HAS_STRING_BOOLEAN_VALUE
},
- shouldAttributeAcceptBooleanValue: function (name) {
- if (DOMProperty.isReservedProp(name)) {
- return true;
- }
- var propertyInfo = DOMProperty.getPropertyInfo(name);
- if (propertyInfo) {
- return propertyInfo.hasBooleanValue || propertyInfo.hasStringBooleanValue || propertyInfo.hasOverloadedBooleanValue;
- }
- var prefix = name.toLowerCase().slice(0, 5);
- return prefix === 'data-' || prefix === 'aria-';
+ DOMAttributeNames: {
+ acceptCharset: 'accept-charset',
+ className: 'class',
+ htmlFor: 'for',
+ httpEquiv: 'http-equiv'
},
+ DOMMutationMethods: {
+ value: function (node, value) {
+ if (value == null) {
+ return node.removeAttribute('value');
+ }
+ // Number inputs get special treatment due to some edge cases in
+ // Chrome. Let everything else assign the value attribute as normal.
+ // https://github.com/facebook/react/issues/7253#issuecomment-236074326
+ if (node.type !== 'number' || node.hasAttribute('value') === false) {
+ node.setAttribute('value', '' + value);
+ } else if (node.validity && !node.validity.badInput && node.ownerDocument.activeElement !== node) {
+ // Don't assign an attribute if validation reports bad
+ // input. Chrome will clear the value. Additionally, don't
+ // operate on inputs that have focus, otherwise Chrome might
+ // strip off trailing decimal places and cause the user's
+ // cursor position to jump to the beginning of the input.
+ //
+ // In ReactDOMInput, we have an onBlur event that will trigger
+ // this function again when focus is lost.
+ node.setAttribute('value', '' + value);
+ }
+ }
+ }
+};
- /**
- * Checks to see if a property name is within the list of properties
- * reserved for internal React operations. These properties should
- * not be set on an HTML element.
- *
- * @private
- * @param {string} name
- * @return {boolean} If the name is within reserved props
- */
- isReservedProp: function (name) {
- return RESERVED_PROPS$1.hasOwnProperty(name);
- },
+var HAS_STRING_BOOLEAN_VALUE$1 = injection.HAS_STRING_BOOLEAN_VALUE;
- injection: DOMPropertyInjection
+var NS = {
+ xlink: 'http://www.w3.org/1999/xlink',
+ xml: 'http://www.w3.org/XML/1998/namespace'
};
-var DOMProperty_1 = DOMProperty;
-
/**
- * Copyright (c) 2016-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * Based on the escape-html library, which is used under the MIT License below:
- *
- * Copyright (c) 2012-2013 TJ Holowaychuk
- * Copyright (c) 2015 Andreas Lubbe
- * Copyright (c) 2015 Tiancheng "Timothy" Gu
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * 'Software'), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
+ * This is a list of all SVG attributes that need special casing,
+ * namespacing, or boolean value assignment.
*
- * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ * When adding attributes to this list, be sure to also add them to
+ * the `possibleStandardNames` module to ensure casing and incorrect
+ * name warnings.
*
- * @providesModule escapeTextContentForBrowser
+ * SVG Attributes List:
+ * https://www.w3.org/TR/SVG/attindex.html
+ * SMIL Spec:
+ * https://www.w3.org/TR/smil
*/
+var ATTRS = ['accent-height', 'alignment-baseline', 'arabic-form', 'baseline-shift', 'cap-height', 'clip-path', 'clip-rule', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'dominant-baseline', 'enable-background', 'fill-opacity', 'fill-rule', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'glyph-name', 'glyph-orientation-horizontal', 'glyph-orientation-vertical', 'horiz-adv-x', 'horiz-origin-x', 'image-rendering', 'letter-spacing', 'lighting-color', 'marker-end', 'marker-mid', 'marker-start', 'overline-position', 'overline-thickness', 'paint-order', 'panose-1', 'pointer-events', 'rendering-intent', 'shape-rendering', 'stop-color', 'stop-opacity', 'strikethrough-position', 'strikethrough-thickness', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'text-anchor', 'text-decoration', 'text-rendering', 'underline-position', 'underline-thickness', 'unicode-bidi', 'unicode-range', 'units-per-em', 'v-alphabetic', 'v-hanging', 'v-ideographic', 'v-mathematical', 'vector-effect', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'word-spacing', 'writing-mode', 'x-height', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xmlns:xlink', 'xml:lang', 'xml:space'];
+
+var SVGDOMPropertyConfig = {
+ Properties: {
+ autoReverse: HAS_STRING_BOOLEAN_VALUE$1,
+ externalResourcesRequired: HAS_STRING_BOOLEAN_VALUE$1,
+ preserveAlpha: HAS_STRING_BOOLEAN_VALUE$1
+ },
+ DOMAttributeNames: {
+ autoReverse: 'autoReverse',
+ externalResourcesRequired: 'externalResourcesRequired',
+ preserveAlpha: 'preserveAlpha'
+ },
+ DOMAttributeNamespaces: {
+ xlinkActuate: NS.xlink,
+ xlinkArcrole: NS.xlink,
+ xlinkHref: NS.xlink,
+ xlinkRole: NS.xlink,
+ xlinkShow: NS.xlink,
+ xlinkTitle: NS.xlink,
+ xlinkType: NS.xlink,
+ xmlBase: NS.xml,
+ xmlLang: NS.xml,
+ xmlSpace: NS.xml
+ }
+};
+
+var CAMELIZE = /[\-\:]([a-z])/g;
+var capitalize = function (token) {
+ return token[1].toUpperCase();
+};
+
+ATTRS.forEach(function (original) {
+ var reactName = original.replace(CAMELIZE, capitalize);
+
+ SVGDOMPropertyConfig.Properties[reactName] = 0;
+ SVGDOMPropertyConfig.DOMAttributeNames[reactName] = original;
+});
+
+injection.injectDOMPropertyConfig(HTMLDOMPropertyConfig);
+injection.injectDOMPropertyConfig(SVGDOMPropertyConfig);
+
+// TODO: this is special because it gets imported during build.
+
+var ReactVersion = '16.2.0';
+
+var describeComponentFrame = function (name, source, ownerName) {
+ return '\n in ' + (name || 'Unknown') + (source ? ' (at ' + source.fileName.replace(/^.*[\\\/]/, '') + ':' + source.lineNumber + ')' : ownerName ? ' (created by ' + ownerName + ')' : '');
+};
+
+var ReactInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
+
+var ReactCurrentOwner = ReactInternals.ReactCurrentOwner;
+var ReactDebugCurrentFrame = ReactInternals.ReactDebugCurrentFrame;
+
+// The Symbol used to tag the ReactElement-like types. If there is no native Symbol
+// nor polyfill, then a plain number is used for performance.
+var hasSymbol = typeof Symbol === 'function' && Symbol['for'];
+
+
+
+
+
+var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol['for']('react.fragment') : 0xeacb;
// code copied and modified from escape-html
/**
@@ -354,9 +431,9 @@ var DOMProperty_1 = DOMProperty;
var matchHtmlRegExp = /["'&<>]/;
/**
- * Escape special characters in the given string of html.
+ * Escapes special characters and HTML entities in a given html string.
*
- * @param {string} string The string to escape for inserting into HTML
+ * @param {string} string HTML string to escape for later insertion
* @return {string}
* @public
*/
@@ -418,7 +495,7 @@ function escapeHtml(string) {
* @param {*} text Text value to escape.
* @return {string} An escaped string.
*/
-function escapeTextContentForBrowser(text) {
+function escapeTextForBrowser(text) {
if (typeof text === 'boolean' || typeof text === 'number') {
// this shortcircuit helps perf for types that we know will never have
// special characters, especially given that this function is used often
@@ -428,8 +505,6 @@ function escapeTextContentForBrowser(text) {
return escapeHtml(text);
}
-var escapeTextContentForBrowser_1 = escapeTextContentForBrowser;
-
/**
* Escapes attribute value to prevent scripting attacks.
*
@@ -437,18 +512,12 @@ var escapeTextContentForBrowser_1 = escapeTextContentForBrowser;
* @return {string} An escaped string.
*/
function quoteAttributeValueForBrowser(value) {
- return '"' + escapeTextContentForBrowser_1(value) + '"';
-}
-
-var quoteAttributeValueForBrowser_1 = quoteAttributeValueForBrowser;
-
-{
- var warning$1 = require$$0;
+ return '"' + escapeTextForBrowser(value) + '"';
}
// isAttributeNameSafe() is currently duplicated in DOMPropertyOperations.
// TODO: Find a better place for this.
-var VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + DOMProperty_1.ATTRIBUTE_NAME_START_CHAR + '][' + DOMProperty_1.ATTRIBUTE_NAME_CHAR + ']*$');
+var VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + ATTRIBUTE_NAME_START_CHAR + '][' + ATTRIBUTE_NAME_CHAR + ']*$');
var illegalAttributeNameCache = {};
var validatedAttributeNameCache = {};
function isAttributeNameSafe(attributeName) {
@@ -464,7 +533,7 @@ function isAttributeNameSafe(attributeName) {
}
illegalAttributeNameCache[attributeName] = true;
{
- warning$1(false, 'Invalid attribute name: `%s`', attributeName);
+ warning(false, 'Invalid attribute name: `%s`', attributeName);
}
return false;
}
@@ -478,77 +547,101 @@ function shouldIgnoreValue(propertyInfo, value) {
/**
* Operations for dealing with DOM properties.
*/
-var DOMMarkupOperations = {
- /**
- * Creates markup for the ID property.
- *
- * @param {string} id Unescaped ID.
- * @return {string} Markup string.
- */
- createMarkupForID: function (id) {
- return DOMProperty_1.ID_ATTRIBUTE_NAME + '=' + quoteAttributeValueForBrowser_1(id);
- },
- createMarkupForRoot: function () {
- return DOMProperty_1.ROOT_ATTRIBUTE_NAME + '=""';
- },
+/**
+ * Creates markup for the ID property.
+ *
+ * @param {string} id Unescaped ID.
+ * @return {string} Markup string.
+ */
- /**
- * Creates markup for a property.
- *
- * @param {string} name
- * @param {*} value
- * @return {?string} Markup string, or null if the property was invalid.
- */
- createMarkupForProperty: function (name, value) {
- var propertyInfo = DOMProperty_1.getPropertyInfo(name);
- if (propertyInfo) {
- if (shouldIgnoreValue(propertyInfo, value)) {
- return '';
- }
- var attributeName = propertyInfo.attributeName;
- if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {
- return attributeName + '=""';
- } else if (typeof value !== 'boolean' || DOMProperty_1.shouldAttributeAcceptBooleanValue(name)) {
- return attributeName + '=' + quoteAttributeValueForBrowser_1(value);
- }
- } else if (DOMProperty_1.shouldSetAttribute(name, value)) {
- if (value == null) {
- return '';
- }
- return name + '=' + quoteAttributeValueForBrowser_1(value);
- }
- return null;
- },
- /**
- * Creates markup for a custom property.
- *
- * @param {string} name
- * @param {*} value
- * @return {string} Markup string, or empty string if the property was invalid.
- */
- createMarkupForCustomAttribute: function (name, value) {
- if (!isAttributeNameSafe(name) || value == null) {
+function createMarkupForRoot() {
+ return ROOT_ATTRIBUTE_NAME + '=""';
+}
+
+/**
+ * Creates markup for a property.
+ *
+ * @param {string} name
+ * @param {*} value
+ * @return {?string} Markup string, or null if the property was invalid.
+ */
+function createMarkupForProperty(name, value) {
+ var propertyInfo = getPropertyInfo(name);
+ if (propertyInfo) {
+ if (shouldIgnoreValue(propertyInfo, value)) {
+ return '';
+ }
+ var attributeName = propertyInfo.attributeName;
+ if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {
+ return attributeName + '=""';
+ } else if (typeof value !== 'boolean' || shouldAttributeAcceptBooleanValue(name)) {
+ return attributeName + '=' + quoteAttributeValueForBrowser(value);
+ }
+ } else if (shouldSetAttribute(name, value)) {
+ if (value == null) {
return '';
}
- return name + '=' + quoteAttributeValueForBrowser_1(value);
+ return name + '=' + quoteAttributeValueForBrowser(value);
}
+ return null;
+}
+
+/**
+ * Creates markup for a custom property.
+ *
+ * @param {string} name
+ * @param {*} value
+ * @return {string} Markup string, or empty string if the property was invalid.
+ */
+function createMarkupForCustomAttribute(name, value) {
+ if (!isAttributeNameSafe(name) || value == null) {
+ return '';
+ }
+ return name + '=' + quoteAttributeValueForBrowser(value);
+}
+
+var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';
+var MATH_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';
+var SVG_NAMESPACE = 'http://www.w3.org/2000/svg';
+
+var Namespaces = {
+ html: HTML_NAMESPACE,
+ mathml: MATH_NAMESPACE,
+ svg: SVG_NAMESPACE
};
-var DOMMarkupOperations_1 = DOMMarkupOperations;
+// Assumes there is no parent namespace.
+function getIntrinsicNamespace(type) {
+ switch (type) {
+ case 'svg':
+ return SVG_NAMESPACE;
+ case 'math':
+ return MATH_NAMESPACE;
+ default:
+ return HTML_NAMESPACE;
+ }
+}
+
+function getChildNamespace(parentNamespace, type) {
+ if (parentNamespace == null || parentNamespace === HTML_NAMESPACE) {
+ // No (or default) parent namespace: potential entry point.
+ return getIntrinsicNamespace(type);
+ }
+ if (parentNamespace === SVG_NAMESPACE && type === 'foreignObject') {
+ // We're leaving SVG.
+ return HTML_NAMESPACE;
+ }
+ // By default, pass namespace below.
+ return parentNamespace;
+}
var ReactControlledValuePropTypes = {
checkPropTypes: null
};
{
- var warning$2 = require$$0;
- var emptyFunction$1 = emptyFunction;
- var PropTypes = propTypes;
- var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';
-
- ReactControlledValuePropTypes.checkPropTypes = emptyFunction$1;
var hasReadOnlyValue = {
button: true,
checkbox: true,
@@ -559,7 +652,7 @@ var ReactControlledValuePropTypes = {
submit: true
};
- var propTypes$1 = {
+ var propTypes = {
value: function (props, propName, componentName) {
if (!props[propName] || hasReadOnlyValue[props.type] || props.onChange || props.readOnly || props.disabled) {
return null;
@@ -571,43 +664,18 @@ var ReactControlledValuePropTypes = {
return null;
}
return new Error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');
- },
- onChange: PropTypes.func
+ }
};
- var loggedTypeFailures = {};
-
/**
* Provide a linked `value` attribute for controlled forms. You should not use
* this outside of the ReactDOM controlled form components.
*/
ReactControlledValuePropTypes.checkPropTypes = function (tagName, props, getStack) {
- for (var propName in propTypes$1) {
- if (propTypes$1.hasOwnProperty(propName)) {
- var error = propTypes$1[propName](props, propName, tagName, 'prop', null, ReactPropTypesSecret);
- }
- if (error instanceof Error && !(error.message in loggedTypeFailures)) {
- // Only monitor this failure once because there tends to be a lot of the
- // same error.
- loggedTypeFailures[error.message] = true;
-
- warning$2(false, 'Failed form propType: %s%s', error.message, getStack());
- }
- }
+ checkPropTypes(propTypes, props, 'prop', tagName, getStack);
};
}
-var ReactControlledValuePropTypes_1 = ReactControlledValuePropTypes;
-
-/**
- * Copyright (c) 2013-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * @providesModule omittedCloseTags
- */
-
// For HTML, certain tags should omit their close tag. We keep a whitelist for
// those special-case tags.
@@ -629,68 +697,37 @@ var omittedCloseTags = {
wbr: true
};
-var omittedCloseTags_1 = omittedCloseTags;
-
// For HTML, certain tags cannot have children. This has the same purpose as
// `omittedCloseTags` except that `menuitem` should still have its closing tag.
-var voidElementTags = objectAssign$1({
+var voidElementTags = _assign({
menuitem: true
-}, omittedCloseTags_1);
-
-var voidElementTags_1 = voidElementTags;
-
-{
- var warning$3 = require$$0;
-}
+}, omittedCloseTags);
var HTML = '__html';
-function getDeclarationErrorAddendum(getCurrentOwnerName) {
- {
- var ownerName = getCurrentOwnerName();
- if (ownerName) {
- // TODO: also report the stack.
- return '\n\nThis DOM node was rendered by `' + ownerName + '`.';
- }
- }
- return '';
-}
-
-function assertValidProps(tag, props, getCurrentOwnerName) {
+function assertValidProps(tag, props, getStack) {
if (!props) {
return;
}
// Note the use of `==` which checks for null or undefined.
- if (voidElementTags_1[tag]) {
- !(props.children == null && props.dangerouslySetInnerHTML == null) ? invariant(false, '%s is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.%s', tag, getDeclarationErrorAddendum(getCurrentOwnerName)) : void 0;
+ if (voidElementTags[tag]) {
+ !(props.children == null && props.dangerouslySetInnerHTML == null) ? invariant(false, '%s is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.%s', tag, getStack()) : void 0;
}
if (props.dangerouslySetInnerHTML != null) {
!(props.children == null) ? invariant(false, 'Can only set one of `children` or `props.dangerouslySetInnerHTML`.') : void 0;
!(typeof props.dangerouslySetInnerHTML === 'object' && HTML in props.dangerouslySetInnerHTML) ? invariant(false, '`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://fb.me/react-invariant-dangerously-set-inner-html for more information.') : void 0;
}
{
- warning$3(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.');
+ 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.%s', getStack());
}
- !(props.style == null || typeof props.style === 'object') ? 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(getCurrentOwnerName)) : void 0;
+ !(props.style == null || typeof props.style === 'object') ? 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', getStack()) : void 0;
}
-var assertValidProps_1 = assertValidProps;
-
-/**
- * Copyright (c) 2013-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * @providesModule CSSProperty
- */
-
/**
* CSS properties which accept numbers but are not in units of "px".
*/
-
-var isUnitlessNumber$1 = {
+var isUnitlessNumber = {
animationIterationCount: true,
borderImageOutset: true,
borderImageSlice: true,
@@ -754,84 +791,13 @@ var prefixes = ['Webkit', 'ms', 'Moz', 'O'];
// Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an
// infinite loop, because it iterates over the newly added props too.
-Object.keys(isUnitlessNumber$1).forEach(function (prop) {
+Object.keys(isUnitlessNumber).forEach(function (prop) {
prefixes.forEach(function (prefix) {
- isUnitlessNumber$1[prefixKey(prefix, prop)] = isUnitlessNumber$1[prop];
+ isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];
});
});
/**
- * Most style properties can be unset by doing .style[prop] = '' but IE8
- * doesn't like doing that with shorthand properties so for the properties that
- * IE8 breaks on, which are listed here, we instead unset each of the
- * individual properties. See http://bugs.jquery.com/ticket/12385.
- * The 4-value 'clock' properties like margin, padding, border-width seem to
- * behave without any problems. Curiously, list-style works too without any
- * special prodding.
- */
-var shorthandPropertyExpansions = {
- background: {
- backgroundAttachment: true,
- backgroundColor: true,
- backgroundImage: true,
- backgroundPositionX: true,
- backgroundPositionY: true,
- backgroundRepeat: true
- },
- backgroundPosition: {
- backgroundPositionX: true,
- backgroundPositionY: true
- },
- border: {
- borderWidth: true,
- borderStyle: true,
- borderColor: true
- },
- borderBottom: {
- borderBottomWidth: true,
- borderBottomStyle: true,
- borderBottomColor: true
- },
- borderLeft: {
- borderLeftWidth: true,
- borderLeftStyle: true,
- borderLeftColor: true
- },
- borderRight: {
- borderRightWidth: true,
- borderRightStyle: true,
- borderRightColor: true
- },
- borderTop: {
- borderTopWidth: true,
- borderTopStyle: true,
- borderTopColor: true
- },
- font: {
- fontStyle: true,
- fontVariant: true,
- fontWeight: true,
- fontSize: true,
- lineHeight: true,
- fontFamily: true
- },
- outline: {
- outlineWidth: true,
- outlineStyle: true,
- outlineColor: true
- }
-};
-
-var CSSProperty = {
- isUnitlessNumber: isUnitlessNumber$1,
- shorthandPropertyExpansions: shorthandPropertyExpansions
-};
-
-var CSSProperty_1 = CSSProperty;
-
-var isUnitlessNumber = CSSProperty_1.isUnitlessNumber;
-
-/**
* Convert a value into the proper css writable value. The style name `name`
* should be logical (no hyphens), as specified
* in `CSSProperty.isUnitlessNumber`.
@@ -863,18 +829,6 @@ function dangerousStyleValue(name, value, isCustomProperty) {
return ('' + value).trim();
}
-var dangerousStyleValue_1 = dangerousStyleValue;
-
-/**
- * Copyright (c) 2013-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * @providesModule isCustomComponent
- *
- */
-
function isCustomComponent(tagName, props) {
if (tagName.indexOf('-') === -1) {
return typeof props.is === 'string';
@@ -898,210 +852,10 @@ function isCustomComponent(tagName, props) {
}
}
-var isCustomComponent_1 = isCustomComponent;
-
-/**
- * Copyright (c) 2013-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * @providesModule getComponentName
- *
- */
-
-function getComponentName$2(instanceOrFiber) {
- if (typeof instanceOrFiber.getName === 'function') {
- // Stack reconciler
- var instance = instanceOrFiber;
- return instance.getName();
- }
- if (typeof instanceOrFiber.tag === 'number') {
- // Fiber reconciler
- var fiber = instanceOrFiber;
- var type = fiber.type;
-
- if (typeof type === 'string') {
- return type;
- }
- if (typeof type === 'function') {
- return type.displayName || type.name;
- }
- }
- return null;
-}
-
-var getComponentName_1 = getComponentName$2;
-
-var ReactInternals = react.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
-
-var ReactGlobalSharedState = {
- ReactCurrentOwner: ReactInternals.ReactCurrentOwner
-};
+var warnValidStyle = emptyFunction;
{
- objectAssign$1(ReactGlobalSharedState, {
- ReactComponentTreeHook: ReactInternals.ReactComponentTreeHook,
- ReactDebugCurrentFrame: ReactInternals.ReactDebugCurrentFrame
- });
-}
-
-var ReactGlobalSharedState_1 = ReactGlobalSharedState;
-
-/**
- * Copyright (c) 2013-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * @providesModule ReactTypeOfWork
- *
- */
-
-var ReactTypeOfWork = {
- IndeterminateComponent: 0, // Before we know whether it is functional or class
- FunctionalComponent: 1,
- ClassComponent: 2,
- HostRoot: 3, // Root of a host tree. Could be nested inside another node.
- HostPortal: 4, // A subtree. Could be an entry point to a different renderer.
- HostComponent: 5,
- HostText: 6,
- CoroutineComponent: 7,
- CoroutineHandlerPhase: 8,
- YieldComponent: 9,
- Fragment: 10
-};
-
-/**
- * Copyright (c) 2016-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- *
- * @providesModule describeComponentFrame
- */
-
-var describeComponentFrame$1 = function (name, source, ownerName) {
- return '\n in ' + (name || 'Unknown') + (source ? ' (at ' + source.fileName.replace(/^.*[\\\/]/, '') + ':' + source.lineNumber + ')' : ownerName ? ' (created by ' + ownerName + ')' : '');
-};
-
-var IndeterminateComponent = ReactTypeOfWork.IndeterminateComponent;
-var FunctionalComponent = ReactTypeOfWork.FunctionalComponent;
-var ClassComponent = ReactTypeOfWork.ClassComponent;
-var HostComponent = ReactTypeOfWork.HostComponent;
-
-
-
-
-function describeFiber(fiber) {
- switch (fiber.tag) {
- case IndeterminateComponent:
- case FunctionalComponent:
- case ClassComponent:
- case HostComponent:
- var owner = fiber._debugOwner;
- var source = fiber._debugSource;
- var name = getComponentName_1(fiber);
- var ownerName = null;
- if (owner) {
- ownerName = getComponentName_1(owner);
- }
- return describeComponentFrame$1(name, source, ownerName);
- default:
- return '';
- }
-}
-
-// This function can only be called with a work-in-progress fiber and
-// only during begin or complete phase. Do not call it under any other
-// circumstances.
-function getStackAddendumByWorkInProgressFiber$1(workInProgress) {
- var info = '';
- var node = workInProgress;
- do {
- info += describeFiber(node);
- // Otherwise this return pointer might point to the wrong tree:
- node = node['return'];
- } while (node);
- return info;
-}
-
-var ReactFiberComponentTreeHook = {
- getStackAddendumByWorkInProgressFiber: getStackAddendumByWorkInProgressFiber$1
-};
-
-var ReactDebugCurrentFrame$1 = ReactGlobalSharedState_1.ReactDebugCurrentFrame;
-
-{
- var getComponentName$3 = getComponentName_1;
-
- var _require2$1 = ReactFiberComponentTreeHook,
- getStackAddendumByWorkInProgressFiber = _require2$1.getStackAddendumByWorkInProgressFiber;
-}
-
-function getCurrentFiberOwnerName$1() {
- {
- var fiber = ReactDebugCurrentFiber.current;
- if (fiber === null) {
- return null;
- }
- if (fiber._debugOwner != null) {
- return getComponentName$3(fiber._debugOwner);
- }
- }
- return null;
-}
-
-function getCurrentFiberStackAddendum() {
- {
- var fiber = ReactDebugCurrentFiber.current;
- if (fiber === null) {
- return null;
- }
- // Safe because if current fiber exists, we are reconciling,
- // and it is guaranteed to be the work-in-progress version.
- return getStackAddendumByWorkInProgressFiber(fiber);
- }
- return null;
-}
-
-function resetCurrentFiber() {
- ReactDebugCurrentFrame$1.getCurrentStack = null;
- ReactDebugCurrentFiber.current = null;
- ReactDebugCurrentFiber.phase = null;
-}
-
-function setCurrentFiber(fiber, phase) {
- ReactDebugCurrentFrame$1.getCurrentStack = getCurrentFiberStackAddendum;
- ReactDebugCurrentFiber.current = fiber;
- ReactDebugCurrentFiber.phase = phase;
-}
-
-var ReactDebugCurrentFiber = {
- current: null,
- phase: null,
- resetCurrentFiber: resetCurrentFiber,
- setCurrentFiber: setCurrentFiber,
- getCurrentFiberOwnerName: getCurrentFiberOwnerName$1,
- getCurrentFiberStackAddendum: getCurrentFiberStackAddendum
-};
-
-var ReactDebugCurrentFiber_1 = ReactDebugCurrentFiber;
-
-var warnValidStyle$1 = emptyFunction;
-
-{
- var camelizeStyleName$1 = camelizeStyleName;
- var getComponentName$1 = getComponentName_1;
- var warning$4 = require$$0;
-
- var _require = ReactDebugCurrentFiber_1,
- getCurrentFiberOwnerName = _require.getCurrentFiberOwnerName;
-
// 'msTransform' is correct, but the other prefixes should be capitalized
-
-
var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;
// style values shouldn't contain a semicolon
@@ -1112,102 +866,71 @@ var warnValidStyle$1 = emptyFunction;
var warnedForNaNValue = false;
var warnedForInfinityValue = false;
- var warnHyphenatedStyleName = function (name, owner) {
+ var warnHyphenatedStyleName = function (name, getStack) {
if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {
return;
}
warnedStyleNames[name] = true;
- warning$4(false, 'Unsupported style property %s. Did you mean %s?%s', name, camelizeStyleName$1(name), checkRenderMessage(owner));
+ warning(false, 'Unsupported style property %s. Did you mean %s?%s', name, camelizeStyleName(name), getStack());
};
- var warnBadVendoredStyleName = function (name, owner) {
+ var warnBadVendoredStyleName = function (name, getStack) {
if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {
return;
}
warnedStyleNames[name] = true;
- warning$4(false, 'Unsupported vendor-prefixed style property %s. Did you mean %s?%s', name, name.charAt(0).toUpperCase() + name.slice(1), checkRenderMessage(owner));
+ warning(false, 'Unsupported vendor-prefixed style property %s. Did you mean %s?%s', name, name.charAt(0).toUpperCase() + name.slice(1), getStack());
};
- var warnStyleValueWithSemicolon = function (name, value, owner) {
+ var warnStyleValueWithSemicolon = function (name, value, getStack) {
if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) {
return;
}
warnedStyleValues[value] = true;
- warning$4(false, "Style property values shouldn't contain a semicolon.%s " + 'Try "%s: %s" instead.', checkRenderMessage(owner), name, value.replace(badStyleValueWithSemicolonPattern, ''));
+ warning(false, "Style property values shouldn't contain a semicolon. " + 'Try "%s: %s" instead.%s', name, value.replace(badStyleValueWithSemicolonPattern, ''), getStack());
};
- var warnStyleValueIsNaN = function (name, value, owner) {
+ var warnStyleValueIsNaN = function (name, value, getStack) {
if (warnedForNaNValue) {
return;
}
warnedForNaNValue = true;
- warning$4(false, '`NaN` is an invalid value for the `%s` css style property.%s', name, checkRenderMessage(owner));
+ warning(false, '`NaN` is an invalid value for the `%s` css style property.%s', name, getStack());
};
- var warnStyleValueIsInfinity = function (name, value, owner) {
+ var warnStyleValueIsInfinity = function (name, value, getStack) {
if (warnedForInfinityValue) {
return;
}
warnedForInfinityValue = true;
- warning$4(false, '`Infinity` is an invalid value for the `%s` css style property.%s', name, checkRenderMessage(owner));
- };
-
- var checkRenderMessage = function (owner) {
- var ownerName;
- if (owner != null) {
- // Stack passes the owner manually all the way to CSSPropertyOperations.
- ownerName = getComponentName$1(owner);
- } else {
- // Fiber doesn't pass it but uses ReactDebugCurrentFiber to track it.
- // It is only enabled in development and tracks host components too.
- ownerName = getCurrentFiberOwnerName();
- // TODO: also report the stack.
- }
- if (ownerName) {
- return '\n\nCheck the render method of `' + ownerName + '`.';
- }
- return '';
+ warning(false, '`Infinity` is an invalid value for the `%s` css style property.%s', name, getStack());
};
- warnValidStyle$1 = function (name, value, component) {
- var owner;
- if (component) {
- // TODO: this only works with Stack. Seems like we need to add unit tests?
- owner = component._currentElement._owner;
- }
+ warnValidStyle = function (name, value, getStack) {
if (name.indexOf('-') > -1) {
- warnHyphenatedStyleName(name, owner);
+ warnHyphenatedStyleName(name, getStack);
} else if (badVendoredStyleNamePattern.test(name)) {
- warnBadVendoredStyleName(name, owner);
+ warnBadVendoredStyleName(name, getStack);
} else if (badStyleValueWithSemicolonPattern.test(value)) {
- warnStyleValueWithSemicolon(name, value, owner);
+ warnStyleValueWithSemicolon(name, value, getStack);
}
if (typeof value === 'number') {
if (isNaN(value)) {
- warnStyleValueIsNaN(name, value, owner);
+ warnStyleValueIsNaN(name, value, getStack);
} else if (!isFinite(value)) {
- warnStyleValueIsInfinity(name, value, owner);
+ warnStyleValueIsInfinity(name, value, getStack);
}
}
};
}
-var warnValidStyle_1 = warnValidStyle$1;
-
-/**
- * Copyright (c) 2013-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * @providesModule validAriaProperties
- */
+var warnValidStyle$1 = warnValidStyle;
var ariaProperties = {
'aria-current': 0, // state
@@ -1264,57 +987,36 @@ var ariaProperties = {
'aria-setsize': 0
};
-var validAriaProperties$1 = ariaProperties;
-
var warnedProperties = {};
-var rARIA = new RegExp('^(aria)-[' + DOMProperty_1.ATTRIBUTE_NAME_CHAR + ']*$');
-var rARIACamel = new RegExp('^(aria)[A-Z][' + DOMProperty_1.ATTRIBUTE_NAME_CHAR + ']*$');
+var rARIA = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$');
+var rARIACamel = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$');
var hasOwnProperty = Object.prototype.hasOwnProperty;
-{
- var warning$5 = require$$0;
-
- var _require$1 = ReactGlobalSharedState_1,
- ReactComponentTreeHook = _require$1.ReactComponentTreeHook,
- ReactDebugCurrentFrame$2 = _require$1.ReactDebugCurrentFrame;
-
- var getStackAddendumByID = ReactComponentTreeHook.getStackAddendumByID;
-
-
- var validAriaProperties = validAriaProperties$1;
-}
-
-function getStackAddendum$1(debugID) {
- if (debugID != null) {
- // This can only happen on Stack
- return getStackAddendumByID(debugID);
- } else {
- // This can only happen on Fiber / Server
- var stack = ReactDebugCurrentFrame$2.getStackAddendum();
- return stack != null ? stack : '';
- }
+function getStackAddendum$1() {
+ var stack = ReactDebugCurrentFrame.getStackAddendum();
+ return stack != null ? stack : '';
}
-function validateProperty(tagName, name, debugID) {
+function validateProperty(tagName, name) {
if (hasOwnProperty.call(warnedProperties, name) && warnedProperties[name]) {
return true;
}
if (rARIACamel.test(name)) {
var ariaName = 'aria-' + name.slice(4).toLowerCase();
- var correctName = validAriaProperties.hasOwnProperty(ariaName) ? ariaName : null;
+ var correctName = ariaProperties.hasOwnProperty(ariaName) ? ariaName : null;
// If this is an aria-* attribute, but is not listed in the known DOM
// DOM properties, then it is an invalid aria-* attribute.
if (correctName == null) {
- warning$5(false, 'Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.%s', name, getStackAddendum$1(debugID));
+ warning(false, 'Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.%s', name, getStackAddendum$1());
warnedProperties[name] = true;
return true;
}
// aria-* attributes should be lowercase; suggest the lowercase version.
if (name !== correctName) {
- warning$5(false, 'Invalid ARIA attribute `%s`. Did you mean `%s`?%s', name, correctName, getStackAddendum$1(debugID));
+ warning(false, 'Invalid ARIA attribute `%s`. Did you mean `%s`?%s', name, correctName, getStackAddendum$1());
warnedProperties[name] = true;
return true;
}
@@ -1322,7 +1024,7 @@ function validateProperty(tagName, name, debugID) {
if (rARIA.test(name)) {
var lowerCasedName = name.toLowerCase();
- var standardName = validAriaProperties.hasOwnProperty(lowerCasedName) ? lowerCasedName : null;
+ var standardName = ariaProperties.hasOwnProperty(lowerCasedName) ? lowerCasedName : null;
// If this is an aria-* attribute, but is not listed in the known DOM
// DOM properties, then it is an invalid aria-* attribute.
@@ -1332,7 +1034,7 @@ function validateProperty(tagName, name, debugID) {
}
// aria-* attributes should be lowercase; suggest the lowercase version.
if (name !== standardName) {
- warning$5(false, 'Unknown ARIA attribute `%s`. Did you mean `%s`?%s', name, standardName, getStackAddendum$1(debugID));
+ warning(false, 'Unknown ARIA attribute `%s`. Did you mean `%s`?%s', name, standardName, getStackAddendum$1());
warnedProperties[name] = true;
return true;
}
@@ -1341,11 +1043,11 @@ function validateProperty(tagName, name, debugID) {
return true;
}
-function warnInvalidARIAProps(type, props, debugID) {
+function warnInvalidARIAProps(type, props) {
var invalidProps = [];
for (var key in props) {
- var isValid = validateProperty(type, key, debugID);
+ var isValid = validateProperty(type, key);
if (!isValid) {
invalidProps.push(key);
}
@@ -1356,270 +1058,102 @@ function warnInvalidARIAProps(type, props, debugID) {
}).join(', ');
if (invalidProps.length === 1) {
- warning$5(false, 'Invalid aria prop %s on <%s> tag. ' + 'For details, see https://fb.me/invalid-aria-prop%s', unknownPropString, type, getStackAddendum$1(debugID));
+ warning(false, 'Invalid aria prop %s on <%s> tag. ' + 'For details, see https://fb.me/invalid-aria-prop%s', unknownPropString, type, getStackAddendum$1());
} else if (invalidProps.length > 1) {
- warning$5(false, 'Invalid aria props %s on <%s> tag. ' + 'For details, see https://fb.me/invalid-aria-prop%s', unknownPropString, type, getStackAddendum$1(debugID));
+ warning(false, 'Invalid aria props %s on <%s> tag. ' + 'For details, see https://fb.me/invalid-aria-prop%s', unknownPropString, type, getStackAddendum$1());
}
}
-function validateProperties(type, props, debugID /* Stack only */) {
- if (isCustomComponent_1(type, props)) {
+function validateProperties(type, props) {
+ if (isCustomComponent(type, props)) {
return;
}
- warnInvalidARIAProps(type, props, debugID);
-}
-
-var ReactDOMInvalidARIAHook = {
- // Fiber
- validateProperties: validateProperties,
- // Stack
- onBeforeMountComponent: function (debugID, element) {
- if (true && element != null && typeof element.type === 'string') {
- validateProperties(element.type, element.props, debugID);
- }
- },
- onBeforeUpdateComponent: function (debugID, element) {
- if (true && element != null && typeof element.type === 'string') {
- validateProperties(element.type, element.props, debugID);
- }
- }
-};
-
-var ReactDOMInvalidARIAHook_1 = ReactDOMInvalidARIAHook;
-
-{
- var warning$6 = require$$0;
-
- var _require$2 = ReactGlobalSharedState_1,
- ReactComponentTreeHook$1 = _require$2.ReactComponentTreeHook,
- ReactDebugCurrentFrame$3 = _require$2.ReactDebugCurrentFrame;
-
- var getStackAddendumByID$1 = ReactComponentTreeHook$1.getStackAddendumByID;
+ warnInvalidARIAProps(type, props);
}
var didWarnValueNull = false;
-function getStackAddendum$2(debugID) {
- if (debugID != null) {
- // This can only happen on Stack
- return getStackAddendumByID$1(debugID);
- } else {
- // This can only happen on Fiber / Server
- var stack = ReactDebugCurrentFrame$3.getStackAddendum();
- return stack != null ? stack : '';
- }
+function getStackAddendum$2() {
+ var stack = ReactDebugCurrentFrame.getStackAddendum();
+ return stack != null ? stack : '';
}
-function validateProperties$1(type, props, debugID /* Stack only */) {
+function validateProperties$1(type, props) {
if (type !== 'input' && type !== 'textarea' && type !== 'select') {
return;
}
- if (props != null && props.value === null && !didWarnValueNull) {
- warning$6(false, '`value` prop on `%s` should not be null. ' + 'Consider using the empty string to clear the component or `undefined` ' + 'for uncontrolled components.%s', type, getStackAddendum$2(debugID));
+ if (props != null && props.value === null && !didWarnValueNull) {
didWarnValueNull = true;
- }
-}
-
-var ReactDOMNullInputValuePropHook = {
- // Fiber
- validateProperties: validateProperties$1,
- // Stack
- onBeforeMountComponent: function (debugID, element) {
- if (true && element != null && typeof element.type === 'string') {
- validateProperties$1(element.type, element.props, debugID);
- }
- },
- onBeforeUpdateComponent: function (debugID, element) {
- if (true && element != null && typeof element.type === 'string') {
- validateProperties$1(element.type, element.props, debugID);
+ if (type === 'select' && props.multiple) {
+ warning(false, '`value` prop on `%s` should not be null. ' + 'Consider using an empty array when `multiple` is set to `true` ' + 'to clear the component or `undefined` for uncontrolled components.%s', type, getStackAddendum$2());
+ } else {
+ warning(false, '`value` prop on `%s` should not be null. ' + 'Consider using an empty string to clear the component or `undefined` ' + 'for uncontrolled components.%s', type, getStackAddendum$2());
}
}
-};
-
-var ReactDOMNullInputValuePropHook_1 = ReactDOMNullInputValuePropHook;
+}
/**
- * Injectable ordering of event plugins.
+ * Registers plugins so that they can extract and dispatch events.
+ *
+ * @see {EventPluginHub}
*/
-var eventPluginOrder = null;
/**
- * Injectable mapping from names to event plugin modules.
+ * Ordered list of injected plugins.
*/
-var namesToPlugins = {};
+
/**
- * Recomputes the plugin list using the injected plugins and plugin ordering.
- *
- * @private
+ * Mapping from event name to dispatch config
*/
-function recomputePluginOrdering() {
- if (!eventPluginOrder) {
- // Wait until an `eventPluginOrder` is injected.
- return;
- }
- for (var pluginName in namesToPlugins) {
- var pluginModule = namesToPlugins[pluginName];
- var pluginIndex = eventPluginOrder.indexOf(pluginName);
- !(pluginIndex > -1) ? invariant(false, 'EventPluginRegistry: Cannot inject event plugins that do not exist in the plugin ordering, `%s`.', pluginName) : void 0;
- if (EventPluginRegistry.plugins[pluginIndex]) {
- continue;
- }
- !pluginModule.extractEvents ? invariant(false, 'EventPluginRegistry: Event plugins must implement an `extractEvents` method, but `%s` does not.', pluginName) : void 0;
- EventPluginRegistry.plugins[pluginIndex] = pluginModule;
- var publishedEvents = pluginModule.eventTypes;
- for (var eventName in publishedEvents) {
- !publishEventForPlugin(publishedEvents[eventName], pluginModule, eventName) ? invariant(false, 'EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.', eventName, pluginName) : void 0;
- }
- }
-}
+
/**
- * Publishes an event so that it can be dispatched by the supplied plugin.
- *
- * @param {object} dispatchConfig Dispatch configuration for the event.
- * @param {object} PluginModule Plugin publishing the event.
- * @return {boolean} True if the event was successfully published.
- * @private
+ * Mapping from registration name to plugin module
*/
-function publishEventForPlugin(dispatchConfig, pluginModule, eventName) {
- !!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName) ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same event name, `%s`.', eventName) : void 0;
- EventPluginRegistry.eventNameDispatchConfigs[eventName] = dispatchConfig;
-
- var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;
- if (phasedRegistrationNames) {
- for (var phaseName in phasedRegistrationNames) {
- if (phasedRegistrationNames.hasOwnProperty(phaseName)) {
- var phasedRegistrationName = phasedRegistrationNames[phaseName];
- publishRegistrationName(phasedRegistrationName, pluginModule, eventName);
- }
- }
- return true;
- } else if (dispatchConfig.registrationName) {
- publishRegistrationName(dispatchConfig.registrationName, pluginModule, eventName);
- return true;
- }
- return false;
-}
+var registrationNameModules = {};
/**
- * Publishes a registration name that is used to identify dispatched events.
- *
- * @param {string} registrationName Registration name to add.
- * @param {object} PluginModule Plugin publishing the event.
- * @private
+ * Mapping from registration name to event name
*/
-function publishRegistrationName(registrationName, pluginModule, eventName) {
- !!EventPluginRegistry.registrationNameModules[registrationName] ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same registration name, `%s`.', registrationName) : void 0;
- EventPluginRegistry.registrationNameModules[registrationName] = pluginModule;
- EventPluginRegistry.registrationNameDependencies[registrationName] = pluginModule.eventTypes[eventName].dependencies;
- {
- var lowerCasedName = registrationName.toLowerCase();
- EventPluginRegistry.possibleRegistrationNames[lowerCasedName] = registrationName;
- if (registrationName === 'onDoubleClick') {
- EventPluginRegistry.possibleRegistrationNames.ondblclick = registrationName;
- }
- }
-}
+/**
+ * Mapping from lowercase registration names to the properly cased version,
+ * used to warn in the case of missing event handlers. Available
+ * only in true.
+ * @type {Object}
+ */
+var possibleRegistrationNames = {};
+// Trust the developer to only use possibleRegistrationNames in true
/**
- * Registers plugins so that they can extract and dispatch events.
+ * Injects an ordering of plugins (by plugin name). This allows the ordering
+ * to be decoupled from injection of the actual plugins so that ordering is
+ * always deterministic regardless of packaging, on-the-fly injection, etc.
*
- * @see {EventPluginHub}
+ * @param {array} InjectedEventPluginOrder
+ * @internal
+ * @see {EventPluginHub.injection.injectEventPluginOrder}
*/
-var EventPluginRegistry = {
- /**
- * Ordered list of injected plugins.
- */
- plugins: [],
-
- /**
- * Mapping from event name to dispatch config
- */
- eventNameDispatchConfigs: {},
-
- /**
- * Mapping from registration name to plugin module
- */
- registrationNameModules: {},
-
- /**
- * Mapping from registration name to event name
- */
- registrationNameDependencies: {},
-
- /**
- * Mapping from lowercase registration names to the properly cased version,
- * used to warn in the case of missing event handlers. Available
- * only in true.
- * @type {Object}
- */
- possibleRegistrationNames: {},
- // Trust the developer to only use possibleRegistrationNames in true
-
- /**
- * Injects an ordering of plugins (by plugin name). This allows the ordering
- * to be decoupled from injection of the actual plugins so that ordering is
- * always deterministic regardless of packaging, on-the-fly injection, etc.
- *
- * @param {array} InjectedEventPluginOrder
- * @internal
- * @see {EventPluginHub.injection.injectEventPluginOrder}
- */
- injectEventPluginOrder: function (injectedEventPluginOrder) {
- !!eventPluginOrder ? invariant(false, 'EventPluginRegistry: Cannot inject event plugin ordering more than once. You are likely trying to load more than one copy of React.') : void 0;
- // Clone the ordering so it cannot be dynamically mutated.
- eventPluginOrder = Array.prototype.slice.call(injectedEventPluginOrder);
- recomputePluginOrdering();
- },
-
- /**
- * Injects plugins to be used by `EventPluginHub`. The plugin names must be
- * in the ordering injected by `injectEventPluginOrder`.
- *
- * Plugins can be injected as part of page initialization or on-the-fly.
- *
- * @param {object} injectedNamesToPlugins Map from names to plugin modules.
- * @internal
- * @see {EventPluginHub.injection.injectEventPluginsByName}
- */
- injectEventPluginsByName: function (injectedNamesToPlugins) {
- var isOrderingDirty = false;
- for (var pluginName in injectedNamesToPlugins) {
- if (!injectedNamesToPlugins.hasOwnProperty(pluginName)) {
- continue;
- }
- var pluginModule = injectedNamesToPlugins[pluginName];
- if (!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== pluginModule) {
- !!namesToPlugins[pluginName] ? invariant(false, 'EventPluginRegistry: Cannot inject two different event plugins using the same name, `%s`.', pluginName) : void 0;
- namesToPlugins[pluginName] = pluginModule;
- isOrderingDirty = true;
- }
- }
- if (isOrderingDirty) {
- recomputePluginOrdering();
- }
- }
-};
-var EventPluginRegistry_1 = EventPluginRegistry;
/**
- * Copyright (c) 2013-present, Facebook, Inc.
+ * Injects plugins to be used by `EventPluginHub`. The plugin names must be
+ * in the ordering injected by `injectEventPluginOrder`.
*
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
+ * Plugins can be injected as part of page initialization or on-the-fly.
*
- * @providesModule possibleStandardNames
+ * @param {object} injectedNamesToPlugins Map from names to plugin modules.
+ * @internal
+ * @see {EventPluginHub.injection.injectEventPluginsByName}
*/
// When adding attributes to the HTML or SVG whitelist, be sure to
// also add them to this module to ensure casing and incorrect name
// warnings.
-var possibleStandardNames$1 = {
+var possibleStandardNames = {
// HTML
accept: 'accept',
acceptcharset: 'acceptCharset',
@@ -1627,7 +1161,6 @@ var possibleStandardNames$1 = {
accesskey: 'accessKey',
action: 'action',
allowfullscreen: 'allowFullScreen',
- allowtransparency: 'allowTransparency',
alt: 'alt',
as: 'as',
async: 'async',
@@ -2011,6 +1544,7 @@ var possibleStandardNames$1 = {
strokeopacity: 'strokeOpacity',
'stroke-opacity': 'strokeOpacity',
suppresscontenteditablewarning: 'suppressContentEditableWarning',
+ suppresshydrationwarning: 'suppressHydrationWarning',
surfacescale: 'surfaceScale',
systemlanguage: 'systemLanguage',
tablevalues: 'tableValues',
@@ -2104,63 +1638,54 @@ var possibleStandardNames$1 = {
zoomandpan: 'zoomAndPan'
};
-var possibleStandardNames_1 = possibleStandardNames$1;
-
-{
- var warning$7 = require$$0;
-
- var _require$3 = ReactGlobalSharedState_1,
- ReactComponentTreeHook$2 = _require$3.ReactComponentTreeHook,
- ReactDebugCurrentFrame$4 = _require$3.ReactDebugCurrentFrame;
-
- var getStackAddendumByID$2 = ReactComponentTreeHook$2.getStackAddendumByID;
-}
-
-function getStackAddendum$3(debugID) {
- if (debugID != null) {
- // This can only happen on Stack
- return getStackAddendumByID$2(debugID);
- } else {
- // This can only happen on Fiber / Server
- var stack = ReactDebugCurrentFrame$4.getStackAddendum();
- return stack != null ? stack : '';
- }
+function getStackAddendum$3() {
+ var stack = ReactDebugCurrentFrame.getStackAddendum();
+ return stack != null ? stack : '';
}
{
var warnedProperties$1 = {};
var hasOwnProperty$1 = Object.prototype.hasOwnProperty;
- var EVENT_NAME_REGEX = /^on[A-Z]/;
- var rARIA$1 = new RegExp('^(aria)-[' + DOMProperty_1.ATTRIBUTE_NAME_CHAR + ']*$');
- var rARIACamel$1 = new RegExp('^(aria)[A-Z][' + DOMProperty_1.ATTRIBUTE_NAME_CHAR + ']*$');
- var possibleStandardNames = possibleStandardNames_1;
+ var EVENT_NAME_REGEX = /^on./;
+ var INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/;
+ var rARIA$1 = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$');
+ var rARIACamel$1 = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$');
- var validateProperty$1 = function (tagName, name, value, debugID) {
+ var validateProperty$1 = function (tagName, name, value, canUseEventSystem) {
if (hasOwnProperty$1.call(warnedProperties$1, name) && warnedProperties$1[name]) {
return true;
}
- if (EventPluginRegistry_1.registrationNameModules.hasOwnProperty(name)) {
- return true;
- }
-
- if (EventPluginRegistry_1.plugins.length === 0 && EVENT_NAME_REGEX.test(name)) {
- // If no event plugins have been injected, we might be in a server environment.
- // Don't check events in this case.
- return true;
- }
-
var lowerCasedName = name.toLowerCase();
- var registrationName = EventPluginRegistry_1.possibleRegistrationNames.hasOwnProperty(lowerCasedName) ? EventPluginRegistry_1.possibleRegistrationNames[lowerCasedName] : null;
-
- if (registrationName != null) {
- warning$7(false, 'Invalid event handler property `%s`. Did you mean `%s`?%s', name, registrationName, getStackAddendum$3(debugID));
+ if (lowerCasedName === 'onfocusin' || lowerCasedName === 'onfocusout') {
+ warning(false, '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.');
warnedProperties$1[name] = true;
return true;
}
- if (lowerCasedName.indexOf('on') === 0) {
- warning$7(false, 'Unknown event handler property `%s`. It will be ignored.%s', name, getStackAddendum$3(debugID));
+ // We can't rely on the event system being injected on the server.
+ if (canUseEventSystem) {
+ if (registrationNameModules.hasOwnProperty(name)) {
+ return true;
+ }
+ var registrationName = possibleRegistrationNames.hasOwnProperty(lowerCasedName) ? possibleRegistrationNames[lowerCasedName] : null;
+ if (registrationName != null) {
+ warning(false, 'Invalid event handler property `%s`. Did you mean `%s`?%s', name, registrationName, getStackAddendum$3());
+ warnedProperties$1[name] = true;
+ return true;
+ }
+ if (EVENT_NAME_REGEX.test(name)) {
+ warning(false, 'Unknown event handler property `%s`. It will be ignored.%s', name, getStackAddendum$3());
+ warnedProperties$1[name] = true;
+ return true;
+ }
+ } else if (EVENT_NAME_REGEX.test(name)) {
+ // If no event plugins have been injected, we are in a server environment.
+ // So we can't tell if the event name is correct for sure, but we can filter
+ // out known bad ones like `onclick`. We can't suggest a specific replacement though.
+ if (INVALID_EVENT_NAME_REGEX.test(name)) {
+ warning(false, 'Invalid event handler property `%s`. ' + 'React events use the camelCase naming convention, for example `onClick`.%s', name, getStackAddendum$3());
+ }
warnedProperties$1[name] = true;
return true;
}
@@ -2170,56 +1695,54 @@ function getStackAddendum$3(debugID) {
return true;
}
- if (lowerCasedName === 'onfocusin' || lowerCasedName === 'onfocusout') {
- warning$7(false, '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.');
- warnedProperties$1[name] = true;
- return true;
- }
-
if (lowerCasedName === 'innerhtml') {
- warning$7(false, 'Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.');
+ warning(false, 'Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.');
warnedProperties$1[name] = true;
return true;
}
if (lowerCasedName === 'aria') {
- warning$7(false, 'The `aria` attribute is reserved for future use in React. ' + 'Pass individual `aria-` attributes instead.');
+ warning(false, 'The `aria` attribute is reserved for future use in React. ' + 'Pass individual `aria-` attributes instead.');
warnedProperties$1[name] = true;
return true;
}
if (lowerCasedName === 'is' && value !== null && value !== undefined && typeof value !== 'string') {
- warning$7(false, 'Received a `%s` for string attribute `is`. If this is expected, cast ' + 'the value to a string.%s', typeof value, getStackAddendum$3(debugID));
+ warning(false, 'Received a `%s` for a string attribute `is`. If this is expected, cast ' + 'the value to a string.%s', typeof value, getStackAddendum$3());
warnedProperties$1[name] = true;
return true;
}
if (typeof value === 'number' && isNaN(value)) {
- warning$7(false, 'Received NaN for numeric attribute `%s`. If this is expected, cast ' + 'the value to a string.%s', name, getStackAddendum$3(debugID));
+ warning(false, 'Received NaN for the `%s` attribute. If this is expected, cast ' + 'the value to a string.%s', name, getStackAddendum$3());
warnedProperties$1[name] = true;
return true;
}
- var isReserved = DOMProperty_1.isReservedProp(name);
+ var isReserved = isReservedProp(name);
// Known attributes should match the casing specified in the property config.
if (possibleStandardNames.hasOwnProperty(lowerCasedName)) {
var standardName = possibleStandardNames[lowerCasedName];
if (standardName !== name) {
- warning$7(false, 'Invalid DOM property `%s`. Did you mean `%s`?%s', name, standardName, getStackAddendum$3(debugID));
+ warning(false, 'Invalid DOM property `%s`. Did you mean `%s`?%s', name, standardName, getStackAddendum$3());
warnedProperties$1[name] = true;
return true;
}
} else if (!isReserved && name !== lowerCasedName) {
// Unknown attributes should have lowercase casing since that's how they
// will be cased anyway with server rendering.
- warning$7(false, 'React does not recognize the `%s` prop on a DOM element. If you ' + 'intentionally want it to appear in the DOM as a custom ' + 'attribute, spell it as lowercase `%s` instead. ' + 'If you accidentally passed it from a parent component, remove ' + 'it from the DOM element.%s', name, lowerCasedName, getStackAddendum$3(debugID));
+ warning(false, 'React does not recognize the `%s` prop on a DOM element. If you ' + 'intentionally want it to appear in the DOM as a custom ' + 'attribute, spell it as lowercase `%s` instead. ' + 'If you accidentally passed it from a parent component, remove ' + 'it from the DOM element.%s', name, lowerCasedName, getStackAddendum$3());
warnedProperties$1[name] = true;
return true;
}
- if (typeof value === 'boolean') {
- warning$7(DOMProperty_1.shouldAttributeAcceptBooleanValue(name), 'Received `%s` for non-boolean attribute `%s`. If this is expected, cast ' + 'the value to a string.%s', value, name, getStackAddendum$3(debugID));
+ if (typeof value === 'boolean' && !shouldAttributeAcceptBooleanValue(name)) {
+ if (value) {
+ warning(false, 'Received `%s` for a non-boolean attribute `%s`.\n\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s="%s" or %s={value.toString()}.%s', value, name, name, value, name, getStackAddendum$3());
+ } else {
+ warning(false, 'Received `%s` for a non-boolean attribute `%s`.\n\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s="%s" or %s={value.toString()}.\n\n' + 'If you used to conditionally omit it with %s={condition && value}, ' + 'pass %s={condition ? value : undefined} instead.%s', value, name, name, value, name, name, name, getStackAddendum$3());
+ }
warnedProperties$1[name] = true;
return true;
}
@@ -2231,7 +1754,7 @@ function getStackAddendum$3(debugID) {
}
// Warn when a known attribute is a bad type
- if (!DOMProperty_1.shouldSetAttribute(name, value)) {
+ if (!shouldSetAttribute(name, value)) {
warnedProperties$1[name] = true;
return false;
}
@@ -2240,10 +1763,10 @@ function getStackAddendum$3(debugID) {
};
}
-var warnUnknownProperties = function (type, props, debugID) {
+var warnUnknownProperties = function (type, props, canUseEventSystem) {
var unknownProps = [];
for (var key in props) {
- var isValid = validateProperty$1(type, key, props[key], debugID);
+ var isValid = validateProperty$1(type, key, props[key], canUseEventSystem);
if (!isValid) {
unknownProps.push(key);
}
@@ -2253,80 +1776,34 @@ var warnUnknownProperties = function (type, props, debugID) {
return '`' + prop + '`';
}).join(', ');
if (unknownProps.length === 1) {
- warning$7(false, 'Invalid value for prop %s on <%s> tag. Either remove it from the element, ' + 'or pass a string or number value to keep it in the DOM. ' + 'For details, see https://fb.me/react-attribute-behavior%s', unknownPropString, type, getStackAddendum$3(debugID));
+ warning(false, 'Invalid value for prop %s on <%s> tag. Either remove it from the element, ' + 'or pass a string or number value to keep it in the DOM. ' + 'For details, see https://fb.me/react-attribute-behavior%s', unknownPropString, type, getStackAddendum$3());
} else if (unknownProps.length > 1) {
- warning$7(false, 'Invalid values for props %s on <%s> tag. Either remove them from the element, ' + 'or pass a string or number value to keep them in the DOM. ' + 'For details, see https://fb.me/react-attribute-behavior%s', unknownPropString, type, getStackAddendum$3(debugID));
+ warning(false, 'Invalid values for props %s on <%s> tag. Either remove them from the element, ' + 'or pass a string or number value to keep them in the DOM. ' + 'For details, see https://fb.me/react-attribute-behavior%s', unknownPropString, type, getStackAddendum$3());
}
};
-function validateProperties$2(type, props, debugID /* Stack only */) {
- if (isCustomComponent_1(type, props)) {
+function validateProperties$2(type, props, canUseEventSystem) {
+ if (isCustomComponent(type, props)) {
return;
}
- warnUnknownProperties(type, props, debugID);
+ warnUnknownProperties(type, props, canUseEventSystem);
}
-var ReactDOMUnknownPropertyHook = {
- // Fiber
- validateProperties: validateProperties$2,
- // Stack
- onBeforeMountComponent: function (debugID, element) {
- if (true && element != null && typeof element.type === 'string') {
- validateProperties$2(element.type, element.props, debugID);
- }
- },
- onBeforeUpdateComponent: function (debugID, element) {
- if (true && element != null && typeof element.type === 'string') {
- validateProperties$2(element.type, element.props, debugID);
- }
- }
-};
-
-var ReactDOMUnknownPropertyHook_1 = ReactDOMUnknownPropertyHook;
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-var Namespaces = DOMNamespaces.Namespaces;
-var getIntrinsicNamespace = DOMNamespaces.getIntrinsicNamespace;
-var getChildNamespace = DOMNamespaces.getChildNamespace;
-
-
-
+// Based on reading the React.Children implementation. TODO: type this somewhere?
+var toArray = React.Children.toArray;
-
-
-
-
-
-
-
-
-
-
-var toArray = react.Children.toArray;
+var getStackAddendum = emptyFunction.thatReturns('');
{
- var warning = require$$0;
- var checkPropTypes$1 = checkPropTypes;
- var warnValidStyle = warnValidStyle_1;
-
- var _require2 = ReactDOMInvalidARIAHook_1,
- validateARIAProperties = _require2.validateProperties;
-
- var _require3 = ReactDOMNullInputValuePropHook_1,
- validateInputProperties = _require3.validateProperties;
-
- var _require4 = ReactDOMUnknownPropertyHook_1,
- validateUnknownProperties = _require4.validateProperties;
-
var validatePropertiesInDevelopment = function (type, props) {
- validateARIAProperties(type, props);
- validateInputProperties(type, props);
- validateUnknownProperties(type, props);
+ validateProperties(type, props);
+ validateProperties$1(type, props);
+ validateProperties$2(type, props, /* canUseEventSystem */false);
};
- var describeComponentFrame = describeComponentFrame$1;
var describeStackFrame = function (element) {
var source = element._source;
var type = element.type;
@@ -2335,13 +1812,11 @@ var toArray = react.Children.toArray;
return describeComponentFrame(name, source, ownerName);
};
- var _require5 = ReactGlobalSharedState_1,
- ReactDebugCurrentFrame = _require5.ReactDebugCurrentFrame;
-
var currentDebugStack = null;
var currentDebugElementStack = null;
var setCurrentDebugStack = function (stack) {
- currentDebugElementStack = stack[stack.length - 1].debugElementStack;
+ var frame = stack[stack.length - 1];
+ currentDebugElementStack = frame.debugElementStack;
// We are about to enter a new composite stack, reset the array.
currentDebugElementStack.length = 0;
currentDebugStack = stack;
@@ -2357,16 +1832,17 @@ var toArray = react.Children.toArray;
currentDebugStack = null;
ReactDebugCurrentFrame.getCurrentStack = null;
};
- var getStackAddendum = function () {
+ getStackAddendum = function () {
if (currentDebugStack === null) {
- return null;
+ return '';
}
var stack = '';
var debugStack = currentDebugStack;
for (var i = debugStack.length - 1; i >= 0; i--) {
- var debugElementStack = debugStack[i].debugElementStack;
- for (var ii = debugElementStack.length - 1; ii >= 0; ii--) {
- stack += describeStackFrame(debugElementStack[ii]);
+ var frame = debugStack[i];
+ var _debugElementStack = frame.debugElementStack;
+ for (var ii = _debugElementStack.length - 1; ii >= 0; ii--) {
+ stack += describeStackFrame(_debugElementStack[ii]);
}
}
return stack;
@@ -2378,6 +1854,7 @@ var didWarnDefaultChecked = false;
var didWarnDefaultSelectValue = false;
var didWarnDefaultTextareaValue = false;
var didWarnInvalidOptionChildren = false;
+var didWarnAboutNoopUpdateForComponent = {};
var valuePropNames = ['value', 'defaultValue'];
var newlineEatingTags = {
listing: true,
@@ -2405,7 +1882,7 @@ var processStyleName = memoizeStringOnly(function (styleName) {
return hyphenateStyleName(styleName);
});
-function createMarkupForStyles(styles, component) {
+function createMarkupForStyles(styles) {
var serialized = '';
var delimiter = '';
for (var styleName in styles) {
@@ -2416,12 +1893,12 @@ function createMarkupForStyles(styles, component) {
var styleValue = styles[styleName];
{
if (!isCustomProperty) {
- warnValidStyle(styleName, styleValue, component);
+ warnValidStyle$1(styleName, styleValue, getStackAddendum);
}
}
if (styleValue != null) {
serialized += delimiter + processStyleName(styleName) + ':';
- serialized += dangerousStyleValue_1(styleName, styleValue, isCustomProperty);
+ serialized += dangerousStyleValue(styleName, styleValue, isCustomProperty);
delimiter = ';';
}
@@ -2432,7 +1909,14 @@ function createMarkupForStyles(styles, component) {
function warnNoop(publicInstance, callerName) {
{
var constructor = publicInstance.constructor;
- warning(false, '%s(...): Can only update a mounting component. ' + 'This usually means you called %s() outside componentWillMount() on the server. ' + 'This is a no-op.\n\nPlease check the code for the %s component.', callerName, callerName, constructor && getComponentName(constructor) || 'ReactClass');
+ var componentName = constructor && getComponentName(constructor) || 'ReactClass';
+ var warningKey = componentName + '.' + callerName;
+ if (didWarnAboutNoopUpdateForComponent[warningKey]) {
+ return;
+ }
+
+ warning(false, '%s(...): Can only update a mounting component. ' + 'This usually means you called %s() outside componentWillMount() on the server. ' + 'This is a no-op.\n\nPlease check the code for the %s component.', callerName, callerName, componentName);
+ didWarnAboutNoopUpdateForComponent[warningKey] = true;
}
}
@@ -2449,17 +1933,33 @@ function getNonChildrenInnerMarkup(props) {
} else {
var content = props.children;
if (typeof content === 'string' || typeof content === 'number') {
- return escapeTextContentForBrowser_1(content);
+ return escapeTextForBrowser(content);
}
}
return null;
}
+function flattenTopLevelChildren(children) {
+ if (!React.isValidElement(children)) {
+ return toArray(children);
+ }
+ var element = children;
+ if (element.type !== REACT_FRAGMENT_TYPE) {
+ return [element];
+ }
+ var fragmentChildren = element.props.children;
+ if (!React.isValidElement(fragmentChildren)) {
+ return toArray(fragmentChildren);
+ }
+ var fragmentChildElement = fragmentChildren;
+ return [fragmentChildElement];
+}
+
function flattenOptionChildren(children) {
var content = '';
// Flatten children and warn if they aren't strings or numbers;
// invalid types are ignored.
- react.Children.forEach(children, function (child) {
+ React.Children.forEach(children, function (child) {
if (child == null) {
return;
}
@@ -2491,7 +1991,7 @@ function maskContext(type, context) {
function checkContextTypes(typeSpecs, values, location) {
{
- checkPropTypes$1(typeSpecs, values, location, 'Component', getStackAddendum);
+ checkPropTypes(typeSpecs, values, location, 'Component', getStackAddendum);
}
}
@@ -2506,13 +2006,14 @@ function processContext(type, context) {
}
var STYLE = 'style';
-var RESERVED_PROPS = {
+var RESERVED_PROPS$1 = {
children: null,
dangerouslySetInnerHTML: null,
- suppressContentEditableWarning: null
+ suppressContentEditableWarning: null,
+ suppressHydrationWarning: null
};
-function createOpenTagMarkup(tagVerbatim, tagLowercase, props, namespace, makeStaticMarkup, isRootElement, instForDebug) {
+function createOpenTagMarkup(tagVerbatim, tagLowercase, props, namespace, makeStaticMarkup, isRootElement) {
var ret = '<' + tagVerbatim;
for (var propKey in props) {
@@ -2524,15 +2025,15 @@ function createOpenTagMarkup(tagVerbatim, tagLowercase, props, namespace, makeSt
continue;
}
if (propKey === STYLE) {
- propValue = createMarkupForStyles(propValue, instForDebug);
+ propValue = createMarkupForStyles(propValue);
}
var markup = null;
- if (isCustomComponent_1(tagLowercase, props)) {
- if (!RESERVED_PROPS.hasOwnProperty(propKey)) {
- markup = DOMMarkupOperations_1.createMarkupForCustomAttribute(propKey, propValue);
+ if (isCustomComponent(tagLowercase, props)) {
+ if (!RESERVED_PROPS$1.hasOwnProperty(propKey)) {
+ markup = createMarkupForCustomAttribute(propKey, propValue);
}
} else {
- markup = DOMMarkupOperations_1.createMarkupForProperty(propKey, propValue);
+ markup = createMarkupForProperty(propKey, propValue);
}
if (markup) {
ret += ' ' + markup;
@@ -2546,7 +2047,7 @@ function createOpenTagMarkup(tagVerbatim, tagLowercase, props, namespace, makeSt
}
if (isRootElement) {
- ret += ' ' + DOMMarkupOperations_1.createMarkupForRoot();
+ ret += ' ' + createMarkupForRoot();
}
return ret;
}
@@ -2558,11 +2059,13 @@ function validateRenderResult(child, type) {
}
function resolve(child, context) {
- while (react.isValidElement(child)) {
+ while (React.isValidElement(child)) {
+ // Safe because we just checked it's an element.
+ var element = child;
{
- pushElementToDebugStack(child);
+ pushElementToDebugStack(element);
}
- var Component = child.type;
+ var Component = element.type;
if (typeof Component !== 'function') {
break;
}
@@ -2594,9 +2097,9 @@ function resolve(child, context) {
};
if (shouldConstruct(Component)) {
- inst = new Component(child.props, publicContext, updater);
+ inst = new Component(element.props, publicContext, updater);
} else {
- inst = Component(child.props, publicContext, updater);
+ inst = Component(element.props, publicContext, updater);
if (inst == null || inst.render == null) {
child = inst;
validateRenderResult(child, Component);
@@ -2604,7 +2107,7 @@ function resolve(child, context) {
}
}
- inst.props = child.props;
+ inst.props = element.props;
inst.context = publicContext;
inst.updater = updater;
@@ -2627,13 +2130,13 @@ function resolve(child, context) {
var dontMutate = true;
for (var i = oldReplace ? 1 : 0; i < oldQueue.length; i++) {
var partial = oldQueue[i];
- var partialState = typeof partial === 'function' ? partial.call(inst, nextState, child.props, publicContext) : partial;
+ var partialState = typeof partial === 'function' ? partial.call(inst, nextState, element.props, publicContext) : partial;
if (partialState) {
if (dontMutate) {
dontMutate = false;
- nextState = objectAssign$1({}, nextState, partialState);
+ nextState = _assign({}, nextState, partialState);
} else {
- objectAssign$1(nextState, partialState);
+ _assign(nextState, partialState);
}
}
}
@@ -2657,29 +2160,33 @@ function resolve(child, context) {
var childContext;
if (typeof inst.getChildContext === 'function') {
var childContextTypes = Component.childContextTypes;
- !(typeof childContextTypes === 'object') ? invariant(false, '%s.getChildContext(): childContextTypes must be defined in order to use getChildContext().', getComponentName(Component) || 'Unknown') : void 0;
- childContext = inst.getChildContext();
- for (var contextKey in childContext) {
- !(contextKey in childContextTypes) ? invariant(false, '%s.getChildContext(): key "%s" is not defined in childContextTypes.', getComponentName(Component) || 'Unknown', contextKey) : void 0;
+ if (typeof childContextTypes === 'object') {
+ childContext = inst.getChildContext();
+ for (var contextKey in childContext) {
+ !(contextKey in childContextTypes) ? invariant(false, '%s.getChildContext(): key "%s" is not defined in childContextTypes.', getComponentName(Component) || 'Unknown', contextKey) : void 0;
+ }
+ } else {
+ warning(false, '%s.getChildContext(): childContextTypes must be defined in order to ' + 'use getChildContext().', getComponentName(Component) || 'Unknown');
}
}
if (childContext) {
- context = objectAssign$1({}, context, childContext);
+ context = _assign({}, context, childContext);
}
}
return { child: child, context: context };
}
var ReactDOMServerRenderer = function () {
- function ReactDOMServerRenderer(element, makeStaticMarkup) {
+ function ReactDOMServerRenderer(children, makeStaticMarkup) {
_classCallCheck(this, ReactDOMServerRenderer);
- var children = react.isValidElement(element) ? [element] : toArray(element);
+ var flatChildren = flattenTopLevelChildren(children);
+
var topFrame = {
// Assume all trees start in the HTML namespace (not totally true, but
// this is what we did historically)
domNamespace: Namespaces.html,
- children: children,
+ children: flatChildren,
childIndex: 0,
context: emptyObject,
footer: ''
@@ -2693,6 +2200,8 @@ var ReactDOMServerRenderer = function () {
this.previousWasTextNode = false;
this.makeStaticMarkup = makeStaticMarkup;
}
+ // TODO: type this more strictly:
+
ReactDOMServerRenderer.prototype.read = function read(bytes) {
if (this.exhausted) {
@@ -2707,8 +2216,11 @@ var ReactDOMServerRenderer = function () {
}
var frame = this.stack[this.stack.length - 1];
if (frame.childIndex >= frame.children.length) {
- out += frame.footer;
- this.previousWasTextNode = false;
+ var footer = frame.footer;
+ out += footer;
+ if (footer !== '') {
+ this.previousWasTextNode = false;
+ }
this.stack.pop();
if (frame.tag === 'select') {
this.currentSelectValue = null;
@@ -2735,39 +2247,55 @@ var ReactDOMServerRenderer = function () {
return '';
}
if (this.makeStaticMarkup) {
- return escapeTextContentForBrowser_1(text);
+ return escapeTextForBrowser(text);
}
if (this.previousWasTextNode) {
- return '<!-- -->' + escapeTextContentForBrowser_1(text);
+ return '<!-- -->' + escapeTextForBrowser(text);
}
this.previousWasTextNode = true;
- return escapeTextContentForBrowser_1(text);
+ return escapeTextForBrowser(text);
} else {
+ var nextChild;
+
var _resolve = resolve(child, context);
- child = _resolve.child;
+ nextChild = _resolve.child;
context = _resolve.context;
- if (child === null || child === false) {
+ if (nextChild === null || nextChild === false) {
return '';
- } else {
- if (react.isValidElement(child)) {
- return this.renderDOM(child, context, parentNamespace);
- } else {
- var children = toArray(child);
- var frame = {
- domNamespace: parentNamespace,
- children: children,
- childIndex: 0,
- context: context,
- footer: ''
- };
- {
- frame.debugElementStack = [];
- }
- this.stack.push(frame);
- return '';
+ } else if (!React.isValidElement(nextChild)) {
+ var nextChildren = toArray(nextChild);
+ var frame = {
+ domNamespace: parentNamespace,
+ children: nextChildren,
+ childIndex: 0,
+ context: context,
+ footer: ''
+ };
+ {
+ frame.debugElementStack = [];
}
+ this.stack.push(frame);
+ return '';
+ } else if (nextChild.type === REACT_FRAGMENT_TYPE) {
+ var _nextChildren = toArray(nextChild.props.children);
+ var _frame = {
+ domNamespace: parentNamespace,
+ children: _nextChildren,
+ childIndex: 0,
+ context: context,
+ footer: ''
+ };
+ {
+ _frame.debugElementStack = [];
+ }
+ this.stack.push(_frame);
+ return '';
+ } else {
+ // Safe because we just checked it's an element.
+ var nextElement = nextChild;
+ return this.renderDOM(nextElement, context, parentNamespace);
}
}
};
@@ -2793,9 +2321,7 @@ var ReactDOMServerRenderer = function () {
var props = element.props;
if (tag === 'input') {
{
- ReactControlledValuePropTypes_1.checkPropTypes('input', props, function () {
- return '';
- });
+ ReactControlledValuePropTypes.checkPropTypes('input', props, getStackAddendum);
if (props.checked !== undefined && props.defaultChecked !== undefined && !didWarnDefaultChecked) {
warning(false, '%s contains an input of type %s with both checked and defaultChecked props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the checked prop, or the defaultChecked prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', 'A component', props.type);
@@ -2807,7 +2333,7 @@ var ReactDOMServerRenderer = function () {
}
}
- props = objectAssign$1({
+ props = _assign({
type: undefined
}, props, {
defaultChecked: undefined,
@@ -2817,9 +2343,7 @@ var ReactDOMServerRenderer = function () {
});
} else if (tag === 'textarea') {
{
- ReactControlledValuePropTypes_1.checkPropTypes('textarea', props, function () {
- return '';
- });
+ ReactControlledValuePropTypes.checkPropTypes('textarea', props, getStackAddendum);
if (props.value !== undefined && props.defaultValue !== undefined && !didWarnDefaultTextareaValue) {
warning(false, 'Textarea elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled textarea ' + 'and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components');
didWarnDefaultTextareaValue = true;
@@ -2849,15 +2373,13 @@ var ReactDOMServerRenderer = function () {
initialValue = defaultValue;
}
- props = objectAssign$1({}, props, {
+ props = _assign({}, props, {
value: undefined,
children: '' + initialValue
});
} else if (tag === 'select') {
{
- ReactControlledValuePropTypes_1.checkPropTypes('select', props, function () {
- return '';
- });
+ ReactControlledValuePropTypes.checkPropTypes('select', props, getStackAddendum);
for (var i = 0; i < valuePropNames.length; i++) {
var propName = valuePropNames[i];
@@ -2878,7 +2400,7 @@ var ReactDOMServerRenderer = function () {
}
}
this.currentSelectValue = props.value != null ? props.value : props.defaultValue;
- props = objectAssign$1({}, props, {
+ props = _assign({}, props, {
value: undefined
});
} else if (tag === 'option') {
@@ -2905,7 +2427,7 @@ var ReactDOMServerRenderer = function () {
selected = '' + selectValue === value;
}
- props = objectAssign$1({
+ props = _assign({
selected: undefined,
children: undefined
}, props, {
@@ -2919,11 +2441,11 @@ var ReactDOMServerRenderer = function () {
validatePropertiesInDevelopment(tag, props);
}
- assertValidProps_1(tag, props);
+ assertValidProps(tag, props, getStackAddendum);
- var out = createOpenTagMarkup(element.type, tag, props, namespace, this.makeStaticMarkup, this.stack.length === 1, null);
+ var out = createOpenTagMarkup(element.type, tag, props, namespace, this.makeStaticMarkup, this.stack.length === 1);
var footer = '';
- if (omittedCloseTags_1.hasOwnProperty(tag)) {
+ if (omittedCloseTags.hasOwnProperty(tag)) {
out += '/>';
} else {
out += '>';
@@ -2962,21 +2484,20 @@ var ReactDOMServerRenderer = function () {
frame.debugElementStack = [];
}
this.stack.push(frame);
+ this.previousWasTextNode = false;
return out;
};
return ReactDOMServerRenderer;
}();
-var ReactPartialRenderer = ReactDOMServerRenderer;
-
/**
* Render a ReactElement to its initial HTML. This should only be used on the
* server.
- * See https://facebook.github.io/react/docs/react-dom-server.html#rendertostring
+ * See https://reactjs.org/docs/react-dom-server.html#rendertostring
*/
function renderToString(element) {
- var renderer = new ReactPartialRenderer(element, false);
+ var renderer = new ReactDOMServerRenderer(element, false);
var markup = renderer.read(Infinity);
return markup;
}
@@ -2984,28 +2505,20 @@ function renderToString(element) {
/**
* Similar to renderToString, except this doesn't create extra DOM attributes
* such as data-react-id that React uses internally.
- * See https://facebook.github.io/react/docs/react-dom-server.html#rendertostaticmarkup
+ * See https://reactjs.org/docs/react-dom-server.html#rendertostaticmarkup
*/
function renderToStaticMarkup(element) {
- var renderer = new ReactPartialRenderer(element, true);
+ var renderer = new ReactDOMServerRenderer(element, true);
var markup = renderer.read(Infinity);
return markup;
}
-var ReactDOMStringRenderer = {
- renderToString: renderToString,
- renderToStaticMarkup: renderToStaticMarkup
-};
-
function _classCallCheck$1(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var Readable = stream.Readable;
-
// This is a Readable Node.js stream which wraps the ReactDOMPartialRenderer.
var ReactMarkupReadableStream = function (_Readable) {
@@ -3019,7 +2532,7 @@ var ReactMarkupReadableStream = function (_Readable) {
// features like highWaterMark in the future.
- _this.partialRenderer = new ReactPartialRenderer(element, makeStaticMarkup);
+ _this.partialRenderer = new ReactDOMServerRenderer(element, makeStaticMarkup);
return _this;
}
@@ -3032,11 +2545,11 @@ var ReactMarkupReadableStream = function (_Readable) {
};
return ReactMarkupReadableStream;
-}(Readable);
+}(stream.Readable);
/**
* Render a ReactElement to its initial HTML. This should only be used on the
* server.
- * See https://facebook.github.io/react/docs/react-dom-stream.html#rendertonodestream
+ * See https://reactjs.org/docs/react-dom-stream.html#rendertonodestream
*/
@@ -3047,206 +2560,31 @@ function renderToNodeStream(element) {
/**
* Similar to renderToNodeStream, except this doesn't create extra DOM attributes
* such as data-react-id that React uses internally.
- * See https://facebook.github.io/react/docs/react-dom-stream.html#rendertostaticnodestream
+ * See https://reactjs.org/docs/react-dom-stream.html#rendertostaticnodestream
*/
function renderToStaticNodeStream(element) {
return new ReactMarkupReadableStream(element, true);
}
-var ReactDOMNodeStreamRenderer = {
+// Note: when changing this, also consider https://github.com/facebook/react/issues/11526
+var ReactDOMServerNode = {
+ renderToString: renderToString,
+ renderToStaticMarkup: renderToStaticMarkup,
renderToNodeStream: renderToNodeStream,
- renderToStaticNodeStream: renderToStaticNodeStream
-};
-
-/**
- * Copyright (c) 2013-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * @providesModule ReactVersion
- */
-
-var ReactVersion = '16.0.0';
-
-var MUST_USE_PROPERTY = DOMProperty_1.injection.MUST_USE_PROPERTY;
-var HAS_BOOLEAN_VALUE = DOMProperty_1.injection.HAS_BOOLEAN_VALUE;
-var HAS_NUMERIC_VALUE = DOMProperty_1.injection.HAS_NUMERIC_VALUE;
-var HAS_POSITIVE_NUMERIC_VALUE = DOMProperty_1.injection.HAS_POSITIVE_NUMERIC_VALUE;
-var HAS_OVERLOADED_BOOLEAN_VALUE = DOMProperty_1.injection.HAS_OVERLOADED_BOOLEAN_VALUE;
-var HAS_STRING_BOOLEAN_VALUE = DOMProperty_1.injection.HAS_STRING_BOOLEAN_VALUE;
-
-var HTMLDOMPropertyConfig = {
- // When adding attributes to this list, be sure to also add them to
- // the `possibleStandardNames` module to ensure casing and incorrect
- // name warnings.
- Properties: {
- allowFullScreen: HAS_BOOLEAN_VALUE,
- // IE only true/false iFrame attribute
- // https://msdn.microsoft.com/en-us/library/ms533072(v=vs.85).aspx
- allowTransparency: HAS_STRING_BOOLEAN_VALUE,
- // specifies target context for links with `preload` type
- async: HAS_BOOLEAN_VALUE,
- // autoFocus is polyfilled/normalized by AutoFocusUtils
- // autoFocus: HAS_BOOLEAN_VALUE,
- autoPlay: HAS_BOOLEAN_VALUE,
- capture: HAS_BOOLEAN_VALUE,
- checked: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
- cols: HAS_POSITIVE_NUMERIC_VALUE,
- contentEditable: HAS_STRING_BOOLEAN_VALUE,
- controls: HAS_BOOLEAN_VALUE,
- 'default': HAS_BOOLEAN_VALUE,
- defer: HAS_BOOLEAN_VALUE,
- disabled: HAS_BOOLEAN_VALUE,
- download: HAS_OVERLOADED_BOOLEAN_VALUE,
- draggable: HAS_STRING_BOOLEAN_VALUE,
- formNoValidate: HAS_BOOLEAN_VALUE,
- hidden: HAS_BOOLEAN_VALUE,
- loop: HAS_BOOLEAN_VALUE,
- // Caution; `option.selected` is not updated if `select.multiple` is
- // disabled with `removeAttribute`.
- multiple: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
- muted: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
- noValidate: HAS_BOOLEAN_VALUE,
- open: HAS_BOOLEAN_VALUE,
- playsInline: HAS_BOOLEAN_VALUE,
- readOnly: HAS_BOOLEAN_VALUE,
- required: HAS_BOOLEAN_VALUE,
- reversed: HAS_BOOLEAN_VALUE,
- rows: HAS_POSITIVE_NUMERIC_VALUE,
- rowSpan: HAS_NUMERIC_VALUE,
- scoped: HAS_BOOLEAN_VALUE,
- seamless: HAS_BOOLEAN_VALUE,
- selected: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
- size: HAS_POSITIVE_NUMERIC_VALUE,
- start: HAS_NUMERIC_VALUE,
- // support for projecting regular DOM Elements via V1 named slots ( shadow dom )
- span: HAS_POSITIVE_NUMERIC_VALUE,
- spellCheck: HAS_STRING_BOOLEAN_VALUE,
- // Style must be explicitly set in the attribute list. React components
- // expect a style object
- style: 0,
- // itemScope is for for Microdata support.
- // See http://schema.org/docs/gs.html
- itemScope: HAS_BOOLEAN_VALUE,
- // These attributes must stay in the white-list because they have
- // different attribute names (see DOMAttributeNames below)
- acceptCharset: 0,
- className: 0,
- htmlFor: 0,
- httpEquiv: 0,
- // Attributes with mutation methods must be specified in the whitelist
- // Set the string boolean flag to allow the behavior
- value: HAS_STRING_BOOLEAN_VALUE
- },
- DOMAttributeNames: {
- acceptCharset: 'accept-charset',
- className: 'class',
- htmlFor: 'for',
- httpEquiv: 'http-equiv'
- },
- DOMMutationMethods: {
- value: function (node, value) {
- if (value == null) {
- return node.removeAttribute('value');
- }
-
- // Number inputs get special treatment due to some edge cases in
- // Chrome. Let everything else assign the value attribute as normal.
- // https://github.com/facebook/react/issues/7253#issuecomment-236074326
- if (node.type !== 'number' || node.hasAttribute('value') === false) {
- node.setAttribute('value', '' + value);
- } else if (node.validity && !node.validity.badInput && node.ownerDocument.activeElement !== node) {
- // Don't assign an attribute if validation reports bad
- // input. Chrome will clear the value. Additionally, don't
- // operate on inputs that have focus, otherwise Chrome might
- // strip off trailing decimal places and cause the user's
- // cursor position to jump to the beginning of the input.
- //
- // In ReactDOMInput, we have an onBlur event that will trigger
- // this function again when focus is lost.
- node.setAttribute('value', '' + value);
- }
- }
- }
-};
-
-var HTMLDOMPropertyConfig_1 = HTMLDOMPropertyConfig;
-
-var HAS_STRING_BOOLEAN_VALUE$1 = DOMProperty_1.injection.HAS_STRING_BOOLEAN_VALUE;
-
-
-var NS = {
- xlink: 'http://www.w3.org/1999/xlink',
- xml: 'http://www.w3.org/XML/1998/namespace'
-};
-
-/**
- * This is a list of all SVG attributes that need special casing,
- * namespacing, or boolean value assignment.
- *
- * When adding attributes to this list, be sure to also add them to
- * the `possibleStandardNames` module to ensure casing and incorrect
- * name warnings.
- *
- * SVG Attributes List:
- * https://www.w3.org/TR/SVG/attindex.html
- * SMIL Spec:
- * https://www.w3.org/TR/smil
- */
-var ATTRS = ['accent-height', 'alignment-baseline', 'arabic-form', 'baseline-shift', 'cap-height', 'clip-path', 'clip-rule', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'dominant-baseline', 'enable-background', 'fill-opacity', 'fill-rule', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'glyph-name', 'glyph-orientation-horizontal', 'glyph-orientation-vertical', 'horiz-adv-x', 'horiz-origin-x', 'image-rendering', 'letter-spacing', 'lighting-color', 'marker-end', 'marker-mid', 'marker-start', 'overline-position', 'overline-thickness', 'paint-order', 'panose-1', 'pointer-events', 'rendering-intent', 'shape-rendering', 'stop-color', 'stop-opacity', 'strikethrough-position', 'strikethrough-thickness', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'text-anchor', 'text-decoration', 'text-rendering', 'underline-position', 'underline-thickness', 'unicode-bidi', 'unicode-range', 'units-per-em', 'v-alphabetic', 'v-hanging', 'v-ideographic', 'v-mathematical', 'vector-effect', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'word-spacing', 'writing-mode', 'x-height', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xmlns:xlink', 'xml:lang', 'xml:space'];
-
-var SVGDOMPropertyConfig = {
- Properties: {
- autoReverse: HAS_STRING_BOOLEAN_VALUE$1,
- externalResourcesRequired: HAS_STRING_BOOLEAN_VALUE$1,
- preserveAlpha: HAS_STRING_BOOLEAN_VALUE$1
- },
- DOMAttributeNames: {
- autoReverse: 'autoReverse',
- externalResourcesRequired: 'externalResourcesRequired',
- preserveAlpha: 'preserveAlpha'
- },
- DOMAttributeNamespaces: {
- xlinkActuate: NS.xlink,
- xlinkArcrole: NS.xlink,
- xlinkHref: NS.xlink,
- xlinkRole: NS.xlink,
- xlinkShow: NS.xlink,
- xlinkTitle: NS.xlink,
- xlinkType: NS.xlink,
- xmlBase: NS.xml,
- xmlLang: NS.xml,
- xmlSpace: NS.xml
- }
-};
-
-var CAMELIZE = /[\-\:]([a-z])/g;
-var capitalize = function (token) {
- return token[1].toUpperCase();
+ renderToStaticNodeStream: renderToStaticNodeStream,
+ version: ReactVersion
};
-ATTRS.forEach(function (original) {
- var reactName = original.replace(CAMELIZE, capitalize);
-
- SVGDOMPropertyConfig.Properties[reactName] = 0;
- SVGDOMPropertyConfig.DOMAttributeNames[reactName] = original;
+var ReactDOMServerNode$1 = Object.freeze({
+ default: ReactDOMServerNode
});
-var SVGDOMPropertyConfig_1 = SVGDOMPropertyConfig;
-
-DOMProperty_1.injection.injectDOMPropertyConfig(HTMLDOMPropertyConfig_1);
-DOMProperty_1.injection.injectDOMPropertyConfig(SVGDOMPropertyConfig_1);
-
-var ReactDOMServerNodeEntry = {
- renderToString: ReactDOMStringRenderer.renderToString,
- renderToStaticMarkup: ReactDOMStringRenderer.renderToStaticMarkup,
- renderToNodeStream: ReactDOMNodeStreamRenderer.renderToNodeStream,
- renderToStaticNodeStream: ReactDOMNodeStreamRenderer.renderToStaticNodeStream,
- version: ReactVersion
-};
+var ReactDOMServer = ( ReactDOMServerNode$1 && ReactDOMServerNode ) || ReactDOMServerNode$1;
-module.exports = ReactDOMServerNodeEntry;
+// TODO: decide on the top-level export form.
+// This is hacky but makes it work with both Rollup and Jest
+var server_node = ReactDOMServer['default'] ? ReactDOMServer['default'] : ReactDOMServer;
-})();
+module.exports = server_node;
+ })();
}