diff options
author | Florian Dold <florian.dold@gmail.com> | 2017-12-10 21:51:33 +0100 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2017-12-10 21:51:33 +0100 |
commit | 0469abd4a9c9270a1fdc962969e36e63699af8b4 (patch) | |
tree | f9864d4a4148621378958794cbbfdc2393733283 /node_modules/react-dom/cjs/react-dom-server.browser.development.js | |
parent | 6947e79bbc258f7bc96af424ddb71a511f0c15a3 (diff) |
upgrade dependencies
Diffstat (limited to 'node_modules/react-dom/cjs/react-dom-server.browser.development.js')
-rw-r--r-- | node_modules/react-dom/cjs/react-dom-server.browser.development.js | 1989 |
1 files changed, 669 insertions, 1320 deletions
diff --git a/node_modules/react-dom/cjs/react-dom-server.browser.development.js b/node_modules/react-dom/cjs/react-dom-server.browser.development.js index 8aa718329..dcf78c70d 100644 --- a/node_modules/react-dom/cjs/react-dom-server.browser.development.js +++ b/node_modules/react-dom/cjs/react-dom-server.browser.development.js @@ -1,4 +1,4 @@ -/** @license React v16.0.0 +/** @license React v16.2.0 * react-dom-server.browser.development.js * * Copyright (c) 2013-present, Facebook, Inc. @@ -6,100 +6,43 @@ * 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'); /** - * 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 }; @@ -150,7 +93,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]; @@ -168,7 +111,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]; @@ -188,161 +131,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 /** @@ -353,9 +430,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 */ @@ -417,7 +494,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 @@ -427,8 +504,6 @@ function escapeTextContentForBrowser(text) { return escapeHtml(text); } -var escapeTextContentForBrowser_1 = escapeTextContentForBrowser; - /** * Escapes attribute value to prevent scripting attacks. * @@ -436,18 +511,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) { @@ -463,7 +532,7 @@ function isAttributeNameSafe(attributeName) { } illegalAttributeNameCache[attributeName] = true; { - warning$1(false, 'Invalid attribute name: `%s`', attributeName); + warning(false, 'Invalid attribute name: `%s`', attributeName); } return false; } @@ -477,77 +546,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, @@ -558,7 +651,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; @@ -570,43 +663,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. @@ -628,68 +696,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, @@ -753,84 +790,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`. @@ -862,18 +828,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'; @@ -897,210 +851,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 -}; - -{ - 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 warnValidStyle = 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 @@ -1111,102 +865,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 @@ -1263,57 +986,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; } @@ -1321,7 +1023,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. @@ -1331,7 +1033,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; } @@ -1340,11 +1042,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); } @@ -1355,270 +1057,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', @@ -1626,7 +1160,6 @@ var possibleStandardNames$1 = { accesskey: 'accessKey', action: 'action', allowfullscreen: 'allowFullScreen', - allowtransparency: 'allowTransparency', alt: 'alt', as: 'as', async: 'async', @@ -2010,6 +1543,7 @@ var possibleStandardNames$1 = { strokeopacity: 'strokeOpacity', 'stroke-opacity': 'strokeOpacity', suppresscontenteditablewarning: 'suppressContentEditableWarning', + suppresshydrationwarning: 'suppressHydrationWarning', surfacescale: 'surfaceScale', systemlanguage: 'systemLanguage', tablevalues: 'tableValues', @@ -2103,63 +1637,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; } @@ -2169,56 +1694,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; } @@ -2230,7 +1753,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; } @@ -2239,10 +1762,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); } @@ -2252,80 +1775,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; @@ -2334,13 +1811,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; @@ -2356,16 +1831,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; @@ -2377,6 +1853,7 @@ var didWarnDefaultChecked = false; var didWarnDefaultSelectValue = false; var didWarnDefaultTextareaValue = false; var didWarnInvalidOptionChildren = false; +var didWarnAboutNoopUpdateForComponent = {}; var valuePropNames = ['value', 'defaultValue']; var newlineEatingTags = { listing: true, @@ -2404,7 +1881,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) { @@ -2415,12 +1892,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 = ';'; } @@ -2431,7 +1908,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; } } @@ -2448,17 +1932,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; } @@ -2490,7 +1990,7 @@ function maskContext(type, context) { function checkContextTypes(typeSpecs, values, location) { { - checkPropTypes$1(typeSpecs, values, location, 'Component', getStackAddendum); + checkPropTypes(typeSpecs, values, location, 'Component', getStackAddendum); } } @@ -2505,13 +2005,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) { @@ -2523,15 +2024,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; @@ -2545,7 +2046,7 @@ function createOpenTagMarkup(tagVerbatim, tagLowercase, props, namespace, makeSt } if (isRootElement) { - ret += ' ' + DOMMarkupOperations_1.createMarkupForRoot(); + ret += ' ' + createMarkupForRoot(); } return ret; } @@ -2557,11 +2058,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; } @@ -2593,9 +2096,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); @@ -2603,7 +2106,7 @@ function resolve(child, context) { } } - inst.props = child.props; + inst.props = element.props; inst.context = publicContext; inst.updater = updater; @@ -2626,13 +2129,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); } } } @@ -2656,29 +2159,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: '' @@ -2692,6 +2199,8 @@ var ReactDOMServerRenderer = function () { this.previousWasTextNode = false; this.makeStaticMarkup = makeStaticMarkup; } + // TODO: type this more strictly: + ReactDOMServerRenderer.prototype.read = function read(bytes) { if (this.exhausted) { @@ -2706,8 +2215,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; @@ -2734,39 +2246,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); } } }; @@ -2792,9 +2320,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); @@ -2806,7 +2332,7 @@ var ReactDOMServerRenderer = function () { } } - props = objectAssign$1({ + props = _assign({ type: undefined }, props, { defaultChecked: undefined, @@ -2816,9 +2342,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; @@ -2848,15 +2372,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]; @@ -2877,7 +2399,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') { @@ -2904,7 +2426,7 @@ var ReactDOMServerRenderer = function () { selected = '' + selectValue === value; } - props = objectAssign$1({ + props = _assign({ selected: undefined, children: undefined }, props, { @@ -2918,11 +2440,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 += '>'; @@ -2961,21 +2483,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; } @@ -2983,213 +2504,41 @@ 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 -}; - -/** - * 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']; +function renderToNodeStream() { + invariant(false, 'ReactDOMServer.renderToNodeStream(): The streaming API is not available in the browser. Use ReactDOMServer.renderToString() instead.'); +} -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 - } -}; +function renderToStaticNodeStream() { + invariant(false, 'ReactDOMServer.renderToStaticNodeStream(): The streaming API is not available in the browser. Use ReactDOMServer.renderToStaticMarkup() instead.'); +} -var CAMELIZE = /[\-\:]([a-z])/g; -var capitalize = function (token) { - return token[1].toUpperCase(); +// Note: when changing this, also consider https://github.com/facebook/react/issues/11526 +var ReactDOMServerBrowser = { + renderToString: renderToString, + renderToStaticMarkup: renderToStaticMarkup, + renderToNodeStream: renderToNodeStream, + renderToStaticNodeStream: renderToStaticNodeStream, + version: ReactVersion }; -ATTRS.forEach(function (original) { - var reactName = original.replace(CAMELIZE, capitalize); - - SVGDOMPropertyConfig.Properties[reactName] = 0; - SVGDOMPropertyConfig.DOMAttributeNames[reactName] = original; +var ReactDOMServerBrowser$1 = Object.freeze({ + default: ReactDOMServerBrowser }); -var SVGDOMPropertyConfig_1 = SVGDOMPropertyConfig; - -DOMProperty_1.injection.injectDOMPropertyConfig(HTMLDOMPropertyConfig_1); -DOMProperty_1.injection.injectDOMPropertyConfig(SVGDOMPropertyConfig_1); - -var ReactDOMServerBrowserEntry = { - renderToString: ReactDOMStringRenderer.renderToString, - renderToStaticMarkup: ReactDOMStringRenderer.renderToStaticMarkup, - renderToNodeStream: function () { - invariant(false, 'ReactDOMServer.renderToNodeStream(): The streaming API is not available in the browser. Use ReactDOMServer.renderToString() instead.'); - }, - renderToStaticNodeStream: function () { - invariant(false, 'ReactDOMServer.renderToStaticNodeStream(): The streaming API is not available in the browser. Use ReactDOMServer.renderToStaticMarkup() instead.'); - }, - - version: ReactVersion -}; +var ReactDOMServer = ( ReactDOMServerBrowser$1 && ReactDOMServerBrowser ) || ReactDOMServerBrowser$1; -module.exports = ReactDOMServerBrowserEntry; +// TODO: decide on the top-level export form. +// This is hacky but makes it work with both Rollup and Jest +var server_browser = ReactDOMServer['default'] ? ReactDOMServer['default'] : ReactDOMServer; -})(); +module.exports = server_browser; + })(); } |