angelovcom.net

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

react.js (105138B)


      1 /** @license React v16.13.1
      2  * react.development.js
      3  *
      4  * Copyright (c) Facebook, Inc. and its affiliates.
      5  *
      6  * This source code is licensed under the MIT license found in the
      7  * LICENSE file in the root directory of this source tree.
      8  */
      9 
     10 'use strict';
     11 
     12 (function (global, factory) {
     13   typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
     14   typeof define === 'function' && define.amd ? define(['exports'], factory) :
     15   (global = global || self, factory(global.React = {}));
     16 }(this, (function (exports) { 'use strict';
     17 
     18   var ReactVersion = '16.13.1';
     19 
     20   // The Symbol used to tag the ReactElement-like types. If there is no native Symbol
     21   // nor polyfill, then a plain number is used for performance.
     22   var hasSymbol = typeof Symbol === 'function' && Symbol.for;
     23   var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;
     24   var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;
     25   var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;
     26   var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;
     27   var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;
     28   var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;
     29   var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary
     30   var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;
     31   var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;
     32   var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;
     33   var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;
     34   var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;
     35   var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;
     36   var REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;
     37   var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;
     38   var REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;
     39   var REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;
     40   var MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
     41   var FAUX_ITERATOR_SYMBOL = '@@iterator';
     42   function getIteratorFn(maybeIterable) {
     43     if (maybeIterable === null || typeof maybeIterable !== 'object') {
     44       return null;
     45     }
     46 
     47     var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];
     48 
     49     if (typeof maybeIterator === 'function') {
     50       return maybeIterator;
     51     }
     52 
     53     return null;
     54   }
     55 
     56   /*
     57   object-assign
     58   (c) Sindre Sorhus
     59   @license MIT
     60   */
     61   /* eslint-disable no-unused-vars */
     62   var getOwnPropertySymbols = Object.getOwnPropertySymbols;
     63   var hasOwnProperty = Object.prototype.hasOwnProperty;
     64   var propIsEnumerable = Object.prototype.propertyIsEnumerable;
     65 
     66   function toObject(val) {
     67   	if (val === null || val === undefined) {
     68   		throw new TypeError('Object.assign cannot be called with null or undefined');
     69   	}
     70 
     71   	return Object(val);
     72   }
     73 
     74   function shouldUseNative() {
     75   	try {
     76   		if (!Object.assign) {
     77   			return false;
     78   		}
     79 
     80   		// Detect buggy property enumeration order in older V8 versions.
     81 
     82   		// https://bugs.chromium.org/p/v8/issues/detail?id=4118
     83   		var test1 = new String('abc');  // eslint-disable-line no-new-wrappers
     84   		test1[5] = 'de';
     85   		if (Object.getOwnPropertyNames(test1)[0] === '5') {
     86   			return false;
     87   		}
     88 
     89   		// https://bugs.chromium.org/p/v8/issues/detail?id=3056
     90   		var test2 = {};
     91   		for (var i = 0; i < 10; i++) {
     92   			test2['_' + String.fromCharCode(i)] = i;
     93   		}
     94   		var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
     95   			return test2[n];
     96   		});
     97   		if (order2.join('') !== '0123456789') {
     98   			return false;
     99   		}
    100 
    101   		// https://bugs.chromium.org/p/v8/issues/detail?id=3056
    102   		var test3 = {};
    103   		'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
    104   			test3[letter] = letter;
    105   		});
    106   		if (Object.keys(Object.assign({}, test3)).join('') !==
    107   				'abcdefghijklmnopqrst') {
    108   			return false;
    109   		}
    110 
    111   		return true;
    112   	} catch (err) {
    113   		// We don't expect any of the above to throw, but better to be safe.
    114   		return false;
    115   	}
    116   }
    117 
    118   var objectAssign = shouldUseNative() ? Object.assign : function (target, source) {
    119   	var from;
    120   	var to = toObject(target);
    121   	var symbols;
    122 
    123   	for (var s = 1; s < arguments.length; s++) {
    124   		from = Object(arguments[s]);
    125 
    126   		for (var key in from) {
    127   			if (hasOwnProperty.call(from, key)) {
    128   				to[key] = from[key];
    129   			}
    130   		}
    131 
    132   		if (getOwnPropertySymbols) {
    133   			symbols = getOwnPropertySymbols(from);
    134   			for (var i = 0; i < symbols.length; i++) {
    135   				if (propIsEnumerable.call(from, symbols[i])) {
    136   					to[symbols[i]] = from[symbols[i]];
    137   				}
    138   			}
    139   		}
    140   	}
    141 
    142   	return to;
    143   };
    144 
    145   /**
    146    * Keeps track of the current dispatcher.
    147    */
    148   var ReactCurrentDispatcher = {
    149     /**
    150      * @internal
    151      * @type {ReactComponent}
    152      */
    153     current: null
    154   };
    155 
    156   /**
    157    * Keeps track of the current batch's configuration such as how long an update
    158    * should suspend for if it needs to.
    159    */
    160   var ReactCurrentBatchConfig = {
    161     suspense: null
    162   };
    163 
    164   /**
    165    * Keeps track of the current owner.
    166    *
    167    * The current owner is the component who should own any components that are
    168    * currently being constructed.
    169    */
    170   var ReactCurrentOwner = {
    171     /**
    172      * @internal
    173      * @type {ReactComponent}
    174      */
    175     current: null
    176   };
    177 
    178   var BEFORE_SLASH_RE = /^(.*)[\\\/]/;
    179   function describeComponentFrame (name, source, ownerName) {
    180     var sourceInfo = '';
    181 
    182     if (source) {
    183       var path = source.fileName;
    184       var fileName = path.replace(BEFORE_SLASH_RE, '');
    185 
    186       {
    187         // In DEV, include code for a common special case:
    188         // prefer "folder/index.js" instead of just "index.js".
    189         if (/^index\./.test(fileName)) {
    190           var match = path.match(BEFORE_SLASH_RE);
    191 
    192           if (match) {
    193             var pathBeforeSlash = match[1];
    194 
    195             if (pathBeforeSlash) {
    196               var folderName = pathBeforeSlash.replace(BEFORE_SLASH_RE, '');
    197               fileName = folderName + '/' + fileName;
    198             }
    199           }
    200         }
    201       }
    202 
    203       sourceInfo = ' (at ' + fileName + ':' + source.lineNumber + ')';
    204     } else if (ownerName) {
    205       sourceInfo = ' (created by ' + ownerName + ')';
    206     }
    207 
    208     return '\n    in ' + (name || 'Unknown') + sourceInfo;
    209   }
    210 
    211   var Resolved = 1;
    212   function refineResolvedLazyComponent(lazyComponent) {
    213     return lazyComponent._status === Resolved ? lazyComponent._result : null;
    214   }
    215 
    216   function getWrappedName(outerType, innerType, wrapperName) {
    217     var functionName = innerType.displayName || innerType.name || '';
    218     return outerType.displayName || (functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName);
    219   }
    220 
    221   function getComponentName(type) {
    222     if (type == null) {
    223       // Host root, text node or just invalid type.
    224       return null;
    225     }
    226 
    227     {
    228       if (typeof type.tag === 'number') {
    229         error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');
    230       }
    231     }
    232 
    233     if (typeof type === 'function') {
    234       return type.displayName || type.name || null;
    235     }
    236 
    237     if (typeof type === 'string') {
    238       return type;
    239     }
    240 
    241     switch (type) {
    242       case REACT_FRAGMENT_TYPE:
    243         return 'Fragment';
    244 
    245       case REACT_PORTAL_TYPE:
    246         return 'Portal';
    247 
    248       case REACT_PROFILER_TYPE:
    249         return "Profiler";
    250 
    251       case REACT_STRICT_MODE_TYPE:
    252         return 'StrictMode';
    253 
    254       case REACT_SUSPENSE_TYPE:
    255         return 'Suspense';
    256 
    257       case REACT_SUSPENSE_LIST_TYPE:
    258         return 'SuspenseList';
    259     }
    260 
    261     if (typeof type === 'object') {
    262       switch (type.$$typeof) {
    263         case REACT_CONTEXT_TYPE:
    264           return 'Context.Consumer';
    265 
    266         case REACT_PROVIDER_TYPE:
    267           return 'Context.Provider';
    268 
    269         case REACT_FORWARD_REF_TYPE:
    270           return getWrappedName(type, type.render, 'ForwardRef');
    271 
    272         case REACT_MEMO_TYPE:
    273           return getComponentName(type.type);
    274 
    275         case REACT_BLOCK_TYPE:
    276           return getComponentName(type.render);
    277 
    278         case REACT_LAZY_TYPE:
    279           {
    280             var thenable = type;
    281             var resolvedThenable = refineResolvedLazyComponent(thenable);
    282 
    283             if (resolvedThenable) {
    284               return getComponentName(resolvedThenable);
    285             }
    286 
    287             break;
    288           }
    289       }
    290     }
    291 
    292     return null;
    293   }
    294 
    295   var ReactDebugCurrentFrame = {};
    296   var currentlyValidatingElement = null;
    297   function setCurrentlyValidatingElement(element) {
    298     {
    299       currentlyValidatingElement = element;
    300     }
    301   }
    302 
    303   {
    304     // Stack implementation injected by the current renderer.
    305     ReactDebugCurrentFrame.getCurrentStack = null;
    306 
    307     ReactDebugCurrentFrame.getStackAddendum = function () {
    308       var stack = ''; // Add an extra top frame while an element is being validated
    309 
    310       if (currentlyValidatingElement) {
    311         var name = getComponentName(currentlyValidatingElement.type);
    312         var owner = currentlyValidatingElement._owner;
    313         stack += describeComponentFrame(name, currentlyValidatingElement._source, owner && getComponentName(owner.type));
    314       } // Delegate to the injected renderer-specific implementation
    315 
    316 
    317       var impl = ReactDebugCurrentFrame.getCurrentStack;
    318 
    319       if (impl) {
    320         stack += impl() || '';
    321       }
    322 
    323       return stack;
    324     };
    325   }
    326 
    327   /**
    328    * Used by act() to track whether you're inside an act() scope.
    329    */
    330   var IsSomeRendererActing = {
    331     current: false
    332   };
    333 
    334   var ReactSharedInternals = {
    335     ReactCurrentDispatcher: ReactCurrentDispatcher,
    336     ReactCurrentBatchConfig: ReactCurrentBatchConfig,
    337     ReactCurrentOwner: ReactCurrentOwner,
    338     IsSomeRendererActing: IsSomeRendererActing,
    339     // Used by renderers to avoid bundling object-assign twice in UMD bundles:
    340     assign: objectAssign
    341   };
    342 
    343   {
    344     objectAssign(ReactSharedInternals, {
    345       // These should not be included in production.
    346       ReactDebugCurrentFrame: ReactDebugCurrentFrame,
    347       // Shim for React DOM 16.0.0 which still destructured (but not used) this.
    348       // TODO: remove in React 17.0.
    349       ReactComponentTreeHook: {}
    350     });
    351   }
    352 
    353   // by calls to these methods by a Babel plugin.
    354   //
    355   // In PROD (or in packages without access to React internals),
    356   // they are left as they are instead.
    357 
    358   function warn(format) {
    359     {
    360       for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
    361         args[_key - 1] = arguments[_key];
    362       }
    363 
    364       printWarning('warn', format, args);
    365     }
    366   }
    367   function error(format) {
    368     {
    369       for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
    370         args[_key2 - 1] = arguments[_key2];
    371       }
    372 
    373       printWarning('error', format, args);
    374     }
    375   }
    376 
    377   function printWarning(level, format, args) {
    378     // When changing this logic, you might want to also
    379     // update consoleWithStackDev.www.js as well.
    380     {
    381       var hasExistingStack = args.length > 0 && typeof args[args.length - 1] === 'string' && args[args.length - 1].indexOf('\n    in') === 0;
    382 
    383       if (!hasExistingStack) {
    384         var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;
    385         var stack = ReactDebugCurrentFrame.getStackAddendum();
    386 
    387         if (stack !== '') {
    388           format += '%s';
    389           args = args.concat([stack]);
    390         }
    391       }
    392 
    393       var argsWithFormat = args.map(function (item) {
    394         return '' + item;
    395       }); // Careful: RN currently depends on this prefix
    396 
    397       argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it
    398       // breaks IE9: https://github.com/facebook/react/issues/13610
    399       // eslint-disable-next-line react-internal/no-production-logging
    400 
    401       Function.prototype.apply.call(console[level], console, argsWithFormat);
    402 
    403       try {
    404         // --- Welcome to debugging React ---
    405         // This error was thrown as a convenience so that you can use this stack
    406         // to find the callsite that caused this warning to fire.
    407         var argIndex = 0;
    408         var message = 'Warning: ' + format.replace(/%s/g, function () {
    409           return args[argIndex++];
    410         });
    411         throw new Error(message);
    412       } catch (x) {}
    413     }
    414   }
    415 
    416   var didWarnStateUpdateForUnmountedComponent = {};
    417 
    418   function warnNoop(publicInstance, callerName) {
    419     {
    420       var _constructor = publicInstance.constructor;
    421       var componentName = _constructor && (_constructor.displayName || _constructor.name) || 'ReactClass';
    422       var warningKey = componentName + "." + callerName;
    423 
    424       if (didWarnStateUpdateForUnmountedComponent[warningKey]) {
    425         return;
    426       }
    427 
    428       error("Can't call %s on a component that is not yet mounted. " + 'This is a no-op, but it might indicate a bug in your application. ' + 'Instead, assign to `this.state` directly or define a `state = {};` ' + 'class property with the desired state in the %s component.', callerName, componentName);
    429 
    430       didWarnStateUpdateForUnmountedComponent[warningKey] = true;
    431     }
    432   }
    433   /**
    434    * This is the abstract API for an update queue.
    435    */
    436 
    437 
    438   var ReactNoopUpdateQueue = {
    439     /**
    440      * Checks whether or not this composite component is mounted.
    441      * @param {ReactClass} publicInstance The instance we want to test.
    442      * @return {boolean} True if mounted, false otherwise.
    443      * @protected
    444      * @final
    445      */
    446     isMounted: function (publicInstance) {
    447       return false;
    448     },
    449 
    450     /**
    451      * Forces an update. This should only be invoked when it is known with
    452      * certainty that we are **not** in a DOM transaction.
    453      *
    454      * You may want to call this when you know that some deeper aspect of the
    455      * component's state has changed but `setState` was not called.
    456      *
    457      * This will not invoke `shouldComponentUpdate`, but it will invoke
    458      * `componentWillUpdate` and `componentDidUpdate`.
    459      *
    460      * @param {ReactClass} publicInstance The instance that should rerender.
    461      * @param {?function} callback Called after component is updated.
    462      * @param {?string} callerName name of the calling function in the public API.
    463      * @internal
    464      */
    465     enqueueForceUpdate: function (publicInstance, callback, callerName) {
    466       warnNoop(publicInstance, 'forceUpdate');
    467     },
    468 
    469     /**
    470      * Replaces all of the state. Always use this or `setState` to mutate state.
    471      * You should treat `this.state` as immutable.
    472      *
    473      * There is no guarantee that `this.state` will be immediately updated, so
    474      * accessing `this.state` after calling this method may return the old value.
    475      *
    476      * @param {ReactClass} publicInstance The instance that should rerender.
    477      * @param {object} completeState Next state.
    478      * @param {?function} callback Called after component is updated.
    479      * @param {?string} callerName name of the calling function in the public API.
    480      * @internal
    481      */
    482     enqueueReplaceState: function (publicInstance, completeState, callback, callerName) {
    483       warnNoop(publicInstance, 'replaceState');
    484     },
    485 
    486     /**
    487      * Sets a subset of the state. This only exists because _pendingState is
    488      * internal. This provides a merging strategy that is not available to deep
    489      * properties which is confusing. TODO: Expose pendingState or don't use it
    490      * during the merge.
    491      *
    492      * @param {ReactClass} publicInstance The instance that should rerender.
    493      * @param {object} partialState Next partial state to be merged with state.
    494      * @param {?function} callback Called after component is updated.
    495      * @param {?string} Name of the calling function in the public API.
    496      * @internal
    497      */
    498     enqueueSetState: function (publicInstance, partialState, callback, callerName) {
    499       warnNoop(publicInstance, 'setState');
    500     }
    501   };
    502 
    503   var emptyObject = {};
    504 
    505   {
    506     Object.freeze(emptyObject);
    507   }
    508   /**
    509    * Base class helpers for the updating state of a component.
    510    */
    511 
    512 
    513   function Component(props, context, updater) {
    514     this.props = props;
    515     this.context = context; // If a component has string refs, we will assign a different object later.
    516 
    517     this.refs = emptyObject; // We initialize the default updater but the real one gets injected by the
    518     // renderer.
    519 
    520     this.updater = updater || ReactNoopUpdateQueue;
    521   }
    522 
    523   Component.prototype.isReactComponent = {};
    524   /**
    525    * Sets a subset of the state. Always use this to mutate
    526    * state. You should treat `this.state` as immutable.
    527    *
    528    * There is no guarantee that `this.state` will be immediately updated, so
    529    * accessing `this.state` after calling this method may return the old value.
    530    *
    531    * There is no guarantee that calls to `setState` will run synchronously,
    532    * as they may eventually be batched together.  You can provide an optional
    533    * callback that will be executed when the call to setState is actually
    534    * completed.
    535    *
    536    * When a function is provided to setState, it will be called at some point in
    537    * the future (not synchronously). It will be called with the up to date
    538    * component arguments (state, props, context). These values can be different
    539    * from this.* because your function may be called after receiveProps but before
    540    * shouldComponentUpdate, and this new state, props, and context will not yet be
    541    * assigned to this.
    542    *
    543    * @param {object|function} partialState Next partial state or function to
    544    *        produce next partial state to be merged with current state.
    545    * @param {?function} callback Called after state is updated.
    546    * @final
    547    * @protected
    548    */
    549 
    550   Component.prototype.setState = function (partialState, callback) {
    551     if (!(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null)) {
    552       {
    553         throw Error( "setState(...): takes an object of state variables to update or a function which returns an object of state variables." );
    554       }
    555     }
    556 
    557     this.updater.enqueueSetState(this, partialState, callback, 'setState');
    558   };
    559   /**
    560    * Forces an update. This should only be invoked when it is known with
    561    * certainty that we are **not** in a DOM transaction.
    562    *
    563    * You may want to call this when you know that some deeper aspect of the
    564    * component's state has changed but `setState` was not called.
    565    *
    566    * This will not invoke `shouldComponentUpdate`, but it will invoke
    567    * `componentWillUpdate` and `componentDidUpdate`.
    568    *
    569    * @param {?function} callback Called after update is complete.
    570    * @final
    571    * @protected
    572    */
    573 
    574 
    575   Component.prototype.forceUpdate = function (callback) {
    576     this.updater.enqueueForceUpdate(this, callback, 'forceUpdate');
    577   };
    578   /**
    579    * Deprecated APIs. These APIs used to exist on classic React classes but since
    580    * we would like to deprecate them, we're not going to move them over to this
    581    * modern base class. Instead, we define a getter that warns if it's accessed.
    582    */
    583 
    584 
    585   {
    586     var deprecatedAPIs = {
    587       isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],
    588       replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']
    589     };
    590 
    591     var defineDeprecationWarning = function (methodName, info) {
    592       Object.defineProperty(Component.prototype, methodName, {
    593         get: function () {
    594           warn('%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]);
    595 
    596           return undefined;
    597         }
    598       });
    599     };
    600 
    601     for (var fnName in deprecatedAPIs) {
    602       if (deprecatedAPIs.hasOwnProperty(fnName)) {
    603         defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);
    604       }
    605     }
    606   }
    607 
    608   function ComponentDummy() {}
    609 
    610   ComponentDummy.prototype = Component.prototype;
    611   /**
    612    * Convenience component with default shallow equality check for sCU.
    613    */
    614 
    615   function PureComponent(props, context, updater) {
    616     this.props = props;
    617     this.context = context; // If a component has string refs, we will assign a different object later.
    618 
    619     this.refs = emptyObject;
    620     this.updater = updater || ReactNoopUpdateQueue;
    621   }
    622 
    623   var pureComponentPrototype = PureComponent.prototype = new ComponentDummy();
    624   pureComponentPrototype.constructor = PureComponent; // Avoid an extra prototype jump for these methods.
    625 
    626   objectAssign(pureComponentPrototype, Component.prototype);
    627 
    628   pureComponentPrototype.isPureReactComponent = true;
    629 
    630   // an immutable object with a single mutable value
    631   function createRef() {
    632     var refObject = {
    633       current: null
    634     };
    635 
    636     {
    637       Object.seal(refObject);
    638     }
    639 
    640     return refObject;
    641   }
    642 
    643   var hasOwnProperty$1 = Object.prototype.hasOwnProperty;
    644   var RESERVED_PROPS = {
    645     key: true,
    646     ref: true,
    647     __self: true,
    648     __source: true
    649   };
    650   var specialPropKeyWarningShown, specialPropRefWarningShown, didWarnAboutStringRefs;
    651 
    652   {
    653     didWarnAboutStringRefs = {};
    654   }
    655 
    656   function hasValidRef(config) {
    657     {
    658       if (hasOwnProperty$1.call(config, 'ref')) {
    659         var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;
    660 
    661         if (getter && getter.isReactWarning) {
    662           return false;
    663         }
    664       }
    665     }
    666 
    667     return config.ref !== undefined;
    668   }
    669 
    670   function hasValidKey(config) {
    671     {
    672       if (hasOwnProperty$1.call(config, 'key')) {
    673         var getter = Object.getOwnPropertyDescriptor(config, 'key').get;
    674 
    675         if (getter && getter.isReactWarning) {
    676           return false;
    677         }
    678       }
    679     }
    680 
    681     return config.key !== undefined;
    682   }
    683 
    684   function defineKeyPropWarningGetter(props, displayName) {
    685     var warnAboutAccessingKey = function () {
    686       {
    687         if (!specialPropKeyWarningShown) {
    688           specialPropKeyWarningShown = true;
    689 
    690           error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName);
    691         }
    692       }
    693     };
    694 
    695     warnAboutAccessingKey.isReactWarning = true;
    696     Object.defineProperty(props, 'key', {
    697       get: warnAboutAccessingKey,
    698       configurable: true
    699     });
    700   }
    701 
    702   function defineRefPropWarningGetter(props, displayName) {
    703     var warnAboutAccessingRef = function () {
    704       {
    705         if (!specialPropRefWarningShown) {
    706           specialPropRefWarningShown = true;
    707 
    708           error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName);
    709         }
    710       }
    711     };
    712 
    713     warnAboutAccessingRef.isReactWarning = true;
    714     Object.defineProperty(props, 'ref', {
    715       get: warnAboutAccessingRef,
    716       configurable: true
    717     });
    718   }
    719 
    720   function warnIfStringRefCannotBeAutoConverted(config) {
    721     {
    722       if (typeof config.ref === 'string' && ReactCurrentOwner.current && config.__self && ReactCurrentOwner.current.stateNode !== config.__self) {
    723         var componentName = getComponentName(ReactCurrentOwner.current.type);
    724 
    725         if (!didWarnAboutStringRefs[componentName]) {
    726           error('Component "%s" contains the string ref "%s". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://fb.me/react-strict-mode-string-ref', getComponentName(ReactCurrentOwner.current.type), config.ref);
    727 
    728           didWarnAboutStringRefs[componentName] = true;
    729         }
    730       }
    731     }
    732   }
    733   /**
    734    * Factory method to create a new React element. This no longer adheres to
    735    * the class pattern, so do not use new to call it. Also, instanceof check
    736    * will not work. Instead test $$typeof field against Symbol.for('react.element') to check
    737    * if something is a React Element.
    738    *
    739    * @param {*} type
    740    * @param {*} props
    741    * @param {*} key
    742    * @param {string|object} ref
    743    * @param {*} owner
    744    * @param {*} self A *temporary* helper to detect places where `this` is
    745    * different from the `owner` when React.createElement is called, so that we
    746    * can warn. We want to get rid of owner and replace string `ref`s with arrow
    747    * functions, and as long as `this` and owner are the same, there will be no
    748    * change in behavior.
    749    * @param {*} source An annotation object (added by a transpiler or otherwise)
    750    * indicating filename, line number, and/or other information.
    751    * @internal
    752    */
    753 
    754 
    755   var ReactElement = function (type, key, ref, self, source, owner, props) {
    756     var element = {
    757       // This tag allows us to uniquely identify this as a React Element
    758       $$typeof: REACT_ELEMENT_TYPE,
    759       // Built-in properties that belong on the element
    760       type: type,
    761       key: key,
    762       ref: ref,
    763       props: props,
    764       // Record the component responsible for creating this element.
    765       _owner: owner
    766     };
    767 
    768     {
    769       // The validation flag is currently mutative. We put it on
    770       // an external backing store so that we can freeze the whole object.
    771       // This can be replaced with a WeakMap once they are implemented in
    772       // commonly used development environments.
    773       element._store = {}; // To make comparing ReactElements easier for testing purposes, we make
    774       // the validation flag non-enumerable (where possible, which should
    775       // include every environment we run tests in), so the test framework
    776       // ignores it.
    777 
    778       Object.defineProperty(element._store, 'validated', {
    779         configurable: false,
    780         enumerable: false,
    781         writable: true,
    782         value: false
    783       }); // self and source are DEV only properties.
    784 
    785       Object.defineProperty(element, '_self', {
    786         configurable: false,
    787         enumerable: false,
    788         writable: false,
    789         value: self
    790       }); // Two elements created in two different places should be considered
    791       // equal for testing purposes and therefore we hide it from enumeration.
    792 
    793       Object.defineProperty(element, '_source', {
    794         configurable: false,
    795         enumerable: false,
    796         writable: false,
    797         value: source
    798       });
    799 
    800       if (Object.freeze) {
    801         Object.freeze(element.props);
    802         Object.freeze(element);
    803       }
    804     }
    805 
    806     return element;
    807   };
    808   /**
    809    * Create and return a new ReactElement of the given type.
    810    * See https://reactjs.org/docs/react-api.html#createelement
    811    */
    812 
    813   function createElement(type, config, children) {
    814     var propName; // Reserved names are extracted
    815 
    816     var props = {};
    817     var key = null;
    818     var ref = null;
    819     var self = null;
    820     var source = null;
    821 
    822     if (config != null) {
    823       if (hasValidRef(config)) {
    824         ref = config.ref;
    825 
    826         {
    827           warnIfStringRefCannotBeAutoConverted(config);
    828         }
    829       }
    830 
    831       if (hasValidKey(config)) {
    832         key = '' + config.key;
    833       }
    834 
    835       self = config.__self === undefined ? null : config.__self;
    836       source = config.__source === undefined ? null : config.__source; // Remaining properties are added to a new props object
    837 
    838       for (propName in config) {
    839         if (hasOwnProperty$1.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
    840           props[propName] = config[propName];
    841         }
    842       }
    843     } // Children can be more than one argument, and those are transferred onto
    844     // the newly allocated props object.
    845 
    846 
    847     var childrenLength = arguments.length - 2;
    848 
    849     if (childrenLength === 1) {
    850       props.children = children;
    851     } else if (childrenLength > 1) {
    852       var childArray = Array(childrenLength);
    853 
    854       for (var i = 0; i < childrenLength; i++) {
    855         childArray[i] = arguments[i + 2];
    856       }
    857 
    858       {
    859         if (Object.freeze) {
    860           Object.freeze(childArray);
    861         }
    862       }
    863 
    864       props.children = childArray;
    865     } // Resolve default props
    866 
    867 
    868     if (type && type.defaultProps) {
    869       var defaultProps = type.defaultProps;
    870 
    871       for (propName in defaultProps) {
    872         if (props[propName] === undefined) {
    873           props[propName] = defaultProps[propName];
    874         }
    875       }
    876     }
    877 
    878     {
    879       if (key || ref) {
    880         var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;
    881 
    882         if (key) {
    883           defineKeyPropWarningGetter(props, displayName);
    884         }
    885 
    886         if (ref) {
    887           defineRefPropWarningGetter(props, displayName);
    888         }
    889       }
    890     }
    891 
    892     return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);
    893   }
    894   function cloneAndReplaceKey(oldElement, newKey) {
    895     var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);
    896     return newElement;
    897   }
    898   /**
    899    * Clone and return a new ReactElement using element as the starting point.
    900    * See https://reactjs.org/docs/react-api.html#cloneelement
    901    */
    902 
    903   function cloneElement(element, config, children) {
    904     if (!!(element === null || element === undefined)) {
    905       {
    906         throw Error( "React.cloneElement(...): The argument must be a React element, but you passed " + element + "." );
    907       }
    908     }
    909 
    910     var propName; // Original props are copied
    911 
    912     var props = objectAssign({}, element.props); // Reserved names are extracted
    913 
    914 
    915     var key = element.key;
    916     var ref = element.ref; // Self is preserved since the owner is preserved.
    917 
    918     var self = element._self; // Source is preserved since cloneElement is unlikely to be targeted by a
    919     // transpiler, and the original source is probably a better indicator of the
    920     // true owner.
    921 
    922     var source = element._source; // Owner will be preserved, unless ref is overridden
    923 
    924     var owner = element._owner;
    925 
    926     if (config != null) {
    927       if (hasValidRef(config)) {
    928         // Silently steal the ref from the parent.
    929         ref = config.ref;
    930         owner = ReactCurrentOwner.current;
    931       }
    932 
    933       if (hasValidKey(config)) {
    934         key = '' + config.key;
    935       } // Remaining properties override existing props
    936 
    937 
    938       var defaultProps;
    939 
    940       if (element.type && element.type.defaultProps) {
    941         defaultProps = element.type.defaultProps;
    942       }
    943 
    944       for (propName in config) {
    945         if (hasOwnProperty$1.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
    946           if (config[propName] === undefined && defaultProps !== undefined) {
    947             // Resolve default props
    948             props[propName] = defaultProps[propName];
    949           } else {
    950             props[propName] = config[propName];
    951           }
    952         }
    953       }
    954     } // Children can be more than one argument, and those are transferred onto
    955     // the newly allocated props object.
    956 
    957 
    958     var childrenLength = arguments.length - 2;
    959 
    960     if (childrenLength === 1) {
    961       props.children = children;
    962     } else if (childrenLength > 1) {
    963       var childArray = Array(childrenLength);
    964 
    965       for (var i = 0; i < childrenLength; i++) {
    966         childArray[i] = arguments[i + 2];
    967       }
    968 
    969       props.children = childArray;
    970     }
    971 
    972     return ReactElement(element.type, key, ref, self, source, owner, props);
    973   }
    974   /**
    975    * Verifies the object is a ReactElement.
    976    * See https://reactjs.org/docs/react-api.html#isvalidelement
    977    * @param {?object} object
    978    * @return {boolean} True if `object` is a ReactElement.
    979    * @final
    980    */
    981 
    982   function isValidElement(object) {
    983     return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
    984   }
    985 
    986   var SEPARATOR = '.';
    987   var SUBSEPARATOR = ':';
    988   /**
    989    * Escape and wrap key so it is safe to use as a reactid
    990    *
    991    * @param {string} key to be escaped.
    992    * @return {string} the escaped key.
    993    */
    994 
    995   function escape(key) {
    996     var escapeRegex = /[=:]/g;
    997     var escaperLookup = {
    998       '=': '=0',
    999       ':': '=2'
   1000     };
   1001     var escapedString = ('' + key).replace(escapeRegex, function (match) {
   1002       return escaperLookup[match];
   1003     });
   1004     return '$' + escapedString;
   1005   }
   1006   /**
   1007    * TODO: Test that a single child and an array with one item have the same key
   1008    * pattern.
   1009    */
   1010 
   1011 
   1012   var didWarnAboutMaps = false;
   1013   var userProvidedKeyEscapeRegex = /\/+/g;
   1014 
   1015   function escapeUserProvidedKey(text) {
   1016     return ('' + text).replace(userProvidedKeyEscapeRegex, '$&/');
   1017   }
   1018 
   1019   var POOL_SIZE = 10;
   1020   var traverseContextPool = [];
   1021 
   1022   function getPooledTraverseContext(mapResult, keyPrefix, mapFunction, mapContext) {
   1023     if (traverseContextPool.length) {
   1024       var traverseContext = traverseContextPool.pop();
   1025       traverseContext.result = mapResult;
   1026       traverseContext.keyPrefix = keyPrefix;
   1027       traverseContext.func = mapFunction;
   1028       traverseContext.context = mapContext;
   1029       traverseContext.count = 0;
   1030       return traverseContext;
   1031     } else {
   1032       return {
   1033         result: mapResult,
   1034         keyPrefix: keyPrefix,
   1035         func: mapFunction,
   1036         context: mapContext,
   1037         count: 0
   1038       };
   1039     }
   1040   }
   1041 
   1042   function releaseTraverseContext(traverseContext) {
   1043     traverseContext.result = null;
   1044     traverseContext.keyPrefix = null;
   1045     traverseContext.func = null;
   1046     traverseContext.context = null;
   1047     traverseContext.count = 0;
   1048 
   1049     if (traverseContextPool.length < POOL_SIZE) {
   1050       traverseContextPool.push(traverseContext);
   1051     }
   1052   }
   1053   /**
   1054    * @param {?*} children Children tree container.
   1055    * @param {!string} nameSoFar Name of the key path so far.
   1056    * @param {!function} callback Callback to invoke with each child found.
   1057    * @param {?*} traverseContext Used to pass information throughout the traversal
   1058    * process.
   1059    * @return {!number} The number of children in this subtree.
   1060    */
   1061 
   1062 
   1063   function traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {
   1064     var type = typeof children;
   1065 
   1066     if (type === 'undefined' || type === 'boolean') {
   1067       // All of the above are perceived as null.
   1068       children = null;
   1069     }
   1070 
   1071     var invokeCallback = false;
   1072 
   1073     if (children === null) {
   1074       invokeCallback = true;
   1075     } else {
   1076       switch (type) {
   1077         case 'string':
   1078         case 'number':
   1079           invokeCallback = true;
   1080           break;
   1081 
   1082         case 'object':
   1083           switch (children.$$typeof) {
   1084             case REACT_ELEMENT_TYPE:
   1085             case REACT_PORTAL_TYPE:
   1086               invokeCallback = true;
   1087           }
   1088 
   1089       }
   1090     }
   1091 
   1092     if (invokeCallback) {
   1093       callback(traverseContext, children, // If it's the only child, treat the name as if it was wrapped in an array
   1094       // so that it's consistent if the number of children grows.
   1095       nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);
   1096       return 1;
   1097     }
   1098 
   1099     var child;
   1100     var nextName;
   1101     var subtreeCount = 0; // Count of children found in the current subtree.
   1102 
   1103     var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;
   1104 
   1105     if (Array.isArray(children)) {
   1106       for (var i = 0; i < children.length; i++) {
   1107         child = children[i];
   1108         nextName = nextNamePrefix + getComponentKey(child, i);
   1109         subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);
   1110       }
   1111     } else {
   1112       var iteratorFn = getIteratorFn(children);
   1113 
   1114       if (typeof iteratorFn === 'function') {
   1115 
   1116         {
   1117           // Warn about using Maps as children
   1118           if (iteratorFn === children.entries) {
   1119             if (!didWarnAboutMaps) {
   1120               warn('Using Maps as children is deprecated and will be removed in ' + 'a future major release. Consider converting children to ' + 'an array of keyed ReactElements instead.');
   1121             }
   1122 
   1123             didWarnAboutMaps = true;
   1124           }
   1125         }
   1126 
   1127         var iterator = iteratorFn.call(children);
   1128         var step;
   1129         var ii = 0;
   1130 
   1131         while (!(step = iterator.next()).done) {
   1132           child = step.value;
   1133           nextName = nextNamePrefix + getComponentKey(child, ii++);
   1134           subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);
   1135         }
   1136       } else if (type === 'object') {
   1137         var addendum = '';
   1138 
   1139         {
   1140           addendum = ' If you meant to render a collection of children, use an array ' + 'instead.' + ReactDebugCurrentFrame.getStackAddendum();
   1141         }
   1142 
   1143         var childrenString = '' + children;
   1144 
   1145         {
   1146           {
   1147             throw Error( "Objects are not valid as a React child (found: " + (childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString) + ")." + addendum );
   1148           }
   1149         }
   1150       }
   1151     }
   1152 
   1153     return subtreeCount;
   1154   }
   1155   /**
   1156    * Traverses children that are typically specified as `props.children`, but
   1157    * might also be specified through attributes:
   1158    *
   1159    * - `traverseAllChildren(this.props.children, ...)`
   1160    * - `traverseAllChildren(this.props.leftPanelChildren, ...)`
   1161    *
   1162    * The `traverseContext` is an optional argument that is passed through the
   1163    * entire traversal. It can be used to store accumulations or anything else that
   1164    * the callback might find relevant.
   1165    *
   1166    * @param {?*} children Children tree object.
   1167    * @param {!function} callback To invoke upon traversing each child.
   1168    * @param {?*} traverseContext Context for traversal.
   1169    * @return {!number} The number of children in this subtree.
   1170    */
   1171 
   1172 
   1173   function traverseAllChildren(children, callback, traverseContext) {
   1174     if (children == null) {
   1175       return 0;
   1176     }
   1177 
   1178     return traverseAllChildrenImpl(children, '', callback, traverseContext);
   1179   }
   1180   /**
   1181    * Generate a key string that identifies a component within a set.
   1182    *
   1183    * @param {*} component A component that could contain a manual key.
   1184    * @param {number} index Index that is used if a manual key is not provided.
   1185    * @return {string}
   1186    */
   1187 
   1188 
   1189   function getComponentKey(component, index) {
   1190     // Do some typechecking here since we call this blindly. We want to ensure
   1191     // that we don't block potential future ES APIs.
   1192     if (typeof component === 'object' && component !== null && component.key != null) {
   1193       // Explicit key
   1194       return escape(component.key);
   1195     } // Implicit key determined by the index in the set
   1196 
   1197 
   1198     return index.toString(36);
   1199   }
   1200 
   1201   function forEachSingleChild(bookKeeping, child, name) {
   1202     var func = bookKeeping.func,
   1203         context = bookKeeping.context;
   1204     func.call(context, child, bookKeeping.count++);
   1205   }
   1206   /**
   1207    * Iterates through children that are typically specified as `props.children`.
   1208    *
   1209    * See https://reactjs.org/docs/react-api.html#reactchildrenforeach
   1210    *
   1211    * The provided forEachFunc(child, index) will be called for each
   1212    * leaf child.
   1213    *
   1214    * @param {?*} children Children tree container.
   1215    * @param {function(*, int)} forEachFunc
   1216    * @param {*} forEachContext Context for forEachContext.
   1217    */
   1218 
   1219 
   1220   function forEachChildren(children, forEachFunc, forEachContext) {
   1221     if (children == null) {
   1222       return children;
   1223     }
   1224 
   1225     var traverseContext = getPooledTraverseContext(null, null, forEachFunc, forEachContext);
   1226     traverseAllChildren(children, forEachSingleChild, traverseContext);
   1227     releaseTraverseContext(traverseContext);
   1228   }
   1229 
   1230   function mapSingleChildIntoContext(bookKeeping, child, childKey) {
   1231     var result = bookKeeping.result,
   1232         keyPrefix = bookKeeping.keyPrefix,
   1233         func = bookKeeping.func,
   1234         context = bookKeeping.context;
   1235     var mappedChild = func.call(context, child, bookKeeping.count++);
   1236 
   1237     if (Array.isArray(mappedChild)) {
   1238       mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, function (c) {
   1239         return c;
   1240       });
   1241     } else if (mappedChild != null) {
   1242       if (isValidElement(mappedChild)) {
   1243         mappedChild = cloneAndReplaceKey(mappedChild, // Keep both the (mapped) and old keys if they differ, just as
   1244         // traverseAllChildren used to do for objects as children
   1245         keyPrefix + (mappedChild.key && (!child || child.key !== mappedChild.key) ? escapeUserProvidedKey(mappedChild.key) + '/' : '') + childKey);
   1246       }
   1247 
   1248       result.push(mappedChild);
   1249     }
   1250   }
   1251 
   1252   function mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {
   1253     var escapedPrefix = '';
   1254 
   1255     if (prefix != null) {
   1256       escapedPrefix = escapeUserProvidedKey(prefix) + '/';
   1257     }
   1258 
   1259     var traverseContext = getPooledTraverseContext(array, escapedPrefix, func, context);
   1260     traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);
   1261     releaseTraverseContext(traverseContext);
   1262   }
   1263   /**
   1264    * Maps children that are typically specified as `props.children`.
   1265    *
   1266    * See https://reactjs.org/docs/react-api.html#reactchildrenmap
   1267    *
   1268    * The provided mapFunction(child, key, index) will be called for each
   1269    * leaf child.
   1270    *
   1271    * @param {?*} children Children tree container.
   1272    * @param {function(*, int)} func The map function.
   1273    * @param {*} context Context for mapFunction.
   1274    * @return {object} Object containing the ordered map of results.
   1275    */
   1276 
   1277 
   1278   function mapChildren(children, func, context) {
   1279     if (children == null) {
   1280       return children;
   1281     }
   1282 
   1283     var result = [];
   1284     mapIntoWithKeyPrefixInternal(children, result, null, func, context);
   1285     return result;
   1286   }
   1287   /**
   1288    * Count the number of children that are typically specified as
   1289    * `props.children`.
   1290    *
   1291    * See https://reactjs.org/docs/react-api.html#reactchildrencount
   1292    *
   1293    * @param {?*} children Children tree container.
   1294    * @return {number} The number of children.
   1295    */
   1296 
   1297 
   1298   function countChildren(children) {
   1299     return traverseAllChildren(children, function () {
   1300       return null;
   1301     }, null);
   1302   }
   1303   /**
   1304    * Flatten a children object (typically specified as `props.children`) and
   1305    * return an array with appropriately re-keyed children.
   1306    *
   1307    * See https://reactjs.org/docs/react-api.html#reactchildrentoarray
   1308    */
   1309 
   1310 
   1311   function toArray(children) {
   1312     var result = [];
   1313     mapIntoWithKeyPrefixInternal(children, result, null, function (child) {
   1314       return child;
   1315     });
   1316     return result;
   1317   }
   1318   /**
   1319    * Returns the first child in a collection of children and verifies that there
   1320    * is only one child in the collection.
   1321    *
   1322    * See https://reactjs.org/docs/react-api.html#reactchildrenonly
   1323    *
   1324    * The current implementation of this function assumes that a single child gets
   1325    * passed without a wrapper, but the purpose of this helper function is to
   1326    * abstract away the particular structure of children.
   1327    *
   1328    * @param {?object} children Child collection structure.
   1329    * @return {ReactElement} The first and only `ReactElement` contained in the
   1330    * structure.
   1331    */
   1332 
   1333 
   1334   function onlyChild(children) {
   1335     if (!isValidElement(children)) {
   1336       {
   1337         throw Error( "React.Children.only expected to receive a single React element child." );
   1338       }
   1339     }
   1340 
   1341     return children;
   1342   }
   1343 
   1344   function createContext(defaultValue, calculateChangedBits) {
   1345     if (calculateChangedBits === undefined) {
   1346       calculateChangedBits = null;
   1347     } else {
   1348       {
   1349         if (calculateChangedBits !== null && typeof calculateChangedBits !== 'function') {
   1350           error('createContext: Expected the optional second argument to be a ' + 'function. Instead received: %s', calculateChangedBits);
   1351         }
   1352       }
   1353     }
   1354 
   1355     var context = {
   1356       $$typeof: REACT_CONTEXT_TYPE,
   1357       _calculateChangedBits: calculateChangedBits,
   1358       // As a workaround to support multiple concurrent renderers, we categorize
   1359       // some renderers as primary and others as secondary. We only expect
   1360       // there to be two concurrent renderers at most: React Native (primary) and
   1361       // Fabric (secondary); React DOM (primary) and React ART (secondary).
   1362       // Secondary renderers store their context values on separate fields.
   1363       _currentValue: defaultValue,
   1364       _currentValue2: defaultValue,
   1365       // Used to track how many concurrent renderers this context currently
   1366       // supports within in a single renderer. Such as parallel server rendering.
   1367       _threadCount: 0,
   1368       // These are circular
   1369       Provider: null,
   1370       Consumer: null
   1371     };
   1372     context.Provider = {
   1373       $$typeof: REACT_PROVIDER_TYPE,
   1374       _context: context
   1375     };
   1376     var hasWarnedAboutUsingNestedContextConsumers = false;
   1377     var hasWarnedAboutUsingConsumerProvider = false;
   1378 
   1379     {
   1380       // A separate object, but proxies back to the original context object for
   1381       // backwards compatibility. It has a different $$typeof, so we can properly
   1382       // warn for the incorrect usage of Context as a Consumer.
   1383       var Consumer = {
   1384         $$typeof: REACT_CONTEXT_TYPE,
   1385         _context: context,
   1386         _calculateChangedBits: context._calculateChangedBits
   1387       }; // $FlowFixMe: Flow complains about not setting a value, which is intentional here
   1388 
   1389       Object.defineProperties(Consumer, {
   1390         Provider: {
   1391           get: function () {
   1392             if (!hasWarnedAboutUsingConsumerProvider) {
   1393               hasWarnedAboutUsingConsumerProvider = true;
   1394 
   1395               error('Rendering <Context.Consumer.Provider> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Provider> instead?');
   1396             }
   1397 
   1398             return context.Provider;
   1399           },
   1400           set: function (_Provider) {
   1401             context.Provider = _Provider;
   1402           }
   1403         },
   1404         _currentValue: {
   1405           get: function () {
   1406             return context._currentValue;
   1407           },
   1408           set: function (_currentValue) {
   1409             context._currentValue = _currentValue;
   1410           }
   1411         },
   1412         _currentValue2: {
   1413           get: function () {
   1414             return context._currentValue2;
   1415           },
   1416           set: function (_currentValue2) {
   1417             context._currentValue2 = _currentValue2;
   1418           }
   1419         },
   1420         _threadCount: {
   1421           get: function () {
   1422             return context._threadCount;
   1423           },
   1424           set: function (_threadCount) {
   1425             context._threadCount = _threadCount;
   1426           }
   1427         },
   1428         Consumer: {
   1429           get: function () {
   1430             if (!hasWarnedAboutUsingNestedContextConsumers) {
   1431               hasWarnedAboutUsingNestedContextConsumers = true;
   1432 
   1433               error('Rendering <Context.Consumer.Consumer> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');
   1434             }
   1435 
   1436             return context.Consumer;
   1437           }
   1438         }
   1439       }); // $FlowFixMe: Flow complains about missing properties because it doesn't understand defineProperty
   1440 
   1441       context.Consumer = Consumer;
   1442     }
   1443 
   1444     {
   1445       context._currentRenderer = null;
   1446       context._currentRenderer2 = null;
   1447     }
   1448 
   1449     return context;
   1450   }
   1451 
   1452   function lazy(ctor) {
   1453     var lazyType = {
   1454       $$typeof: REACT_LAZY_TYPE,
   1455       _ctor: ctor,
   1456       // React uses these fields to store the result.
   1457       _status: -1,
   1458       _result: null
   1459     };
   1460 
   1461     {
   1462       // In production, this would just set it on the object.
   1463       var defaultProps;
   1464       var propTypes;
   1465       Object.defineProperties(lazyType, {
   1466         defaultProps: {
   1467           configurable: true,
   1468           get: function () {
   1469             return defaultProps;
   1470           },
   1471           set: function (newDefaultProps) {
   1472             error('React.lazy(...): It is not supported to assign `defaultProps` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');
   1473 
   1474             defaultProps = newDefaultProps; // Match production behavior more closely:
   1475 
   1476             Object.defineProperty(lazyType, 'defaultProps', {
   1477               enumerable: true
   1478             });
   1479           }
   1480         },
   1481         propTypes: {
   1482           configurable: true,
   1483           get: function () {
   1484             return propTypes;
   1485           },
   1486           set: function (newPropTypes) {
   1487             error('React.lazy(...): It is not supported to assign `propTypes` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');
   1488 
   1489             propTypes = newPropTypes; // Match production behavior more closely:
   1490 
   1491             Object.defineProperty(lazyType, 'propTypes', {
   1492               enumerable: true
   1493             });
   1494           }
   1495         }
   1496       });
   1497     }
   1498 
   1499     return lazyType;
   1500   }
   1501 
   1502   function forwardRef(render) {
   1503     {
   1504       if (render != null && render.$$typeof === REACT_MEMO_TYPE) {
   1505         error('forwardRef requires a render function but received a `memo` ' + 'component. Instead of forwardRef(memo(...)), use ' + 'memo(forwardRef(...)).');
   1506       } else if (typeof render !== 'function') {
   1507         error('forwardRef requires a render function but was given %s.', render === null ? 'null' : typeof render);
   1508       } else {
   1509         if (render.length !== 0 && render.length !== 2) {
   1510           error('forwardRef render functions accept exactly two parameters: props and ref. %s', render.length === 1 ? 'Did you forget to use the ref parameter?' : 'Any additional parameter will be undefined.');
   1511         }
   1512       }
   1513 
   1514       if (render != null) {
   1515         if (render.defaultProps != null || render.propTypes != null) {
   1516           error('forwardRef render functions do not support propTypes or defaultProps. ' + 'Did you accidentally pass a React component?');
   1517         }
   1518       }
   1519     }
   1520 
   1521     return {
   1522       $$typeof: REACT_FORWARD_REF_TYPE,
   1523       render: render
   1524     };
   1525   }
   1526 
   1527   function isValidElementType(type) {
   1528     return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.
   1529     type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);
   1530   }
   1531 
   1532   function memo(type, compare) {
   1533     {
   1534       if (!isValidElementType(type)) {
   1535         error('memo: The first argument must be a component. Instead ' + 'received: %s', type === null ? 'null' : typeof type);
   1536       }
   1537     }
   1538 
   1539     return {
   1540       $$typeof: REACT_MEMO_TYPE,
   1541       type: type,
   1542       compare: compare === undefined ? null : compare
   1543     };
   1544   }
   1545 
   1546   function resolveDispatcher() {
   1547     var dispatcher = ReactCurrentDispatcher.current;
   1548 
   1549     if (!(dispatcher !== null)) {
   1550       {
   1551         throw Error( "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://fb.me/react-invalid-hook-call for tips about how to debug and fix this problem." );
   1552       }
   1553     }
   1554 
   1555     return dispatcher;
   1556   }
   1557 
   1558   function useContext(Context, unstable_observedBits) {
   1559     var dispatcher = resolveDispatcher();
   1560 
   1561     {
   1562       if (unstable_observedBits !== undefined) {
   1563         error('useContext() second argument is reserved for future ' + 'use in React. Passing it is not supported. ' + 'You passed: %s.%s', unstable_observedBits, typeof unstable_observedBits === 'number' && Array.isArray(arguments[2]) ? '\n\nDid you call array.map(useContext)? ' + 'Calling Hooks inside a loop is not supported. ' + 'Learn more at https://fb.me/rules-of-hooks' : '');
   1564       } // TODO: add a more generic warning for invalid values.
   1565 
   1566 
   1567       if (Context._context !== undefined) {
   1568         var realContext = Context._context; // Don't deduplicate because this legitimately causes bugs
   1569         // and nobody should be using this in existing code.
   1570 
   1571         if (realContext.Consumer === Context) {
   1572           error('Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be ' + 'removed in a future major release. Did you mean to call useContext(Context) instead?');
   1573         } else if (realContext.Provider === Context) {
   1574           error('Calling useContext(Context.Provider) is not supported. ' + 'Did you mean to call useContext(Context) instead?');
   1575         }
   1576       }
   1577     }
   1578 
   1579     return dispatcher.useContext(Context, unstable_observedBits);
   1580   }
   1581   function useState(initialState) {
   1582     var dispatcher = resolveDispatcher();
   1583     return dispatcher.useState(initialState);
   1584   }
   1585   function useReducer(reducer, initialArg, init) {
   1586     var dispatcher = resolveDispatcher();
   1587     return dispatcher.useReducer(reducer, initialArg, init);
   1588   }
   1589   function useRef(initialValue) {
   1590     var dispatcher = resolveDispatcher();
   1591     return dispatcher.useRef(initialValue);
   1592   }
   1593   function useEffect(create, deps) {
   1594     var dispatcher = resolveDispatcher();
   1595     return dispatcher.useEffect(create, deps);
   1596   }
   1597   function useLayoutEffect(create, deps) {
   1598     var dispatcher = resolveDispatcher();
   1599     return dispatcher.useLayoutEffect(create, deps);
   1600   }
   1601   function useCallback(callback, deps) {
   1602     var dispatcher = resolveDispatcher();
   1603     return dispatcher.useCallback(callback, deps);
   1604   }
   1605   function useMemo(create, deps) {
   1606     var dispatcher = resolveDispatcher();
   1607     return dispatcher.useMemo(create, deps);
   1608   }
   1609   function useImperativeHandle(ref, create, deps) {
   1610     var dispatcher = resolveDispatcher();
   1611     return dispatcher.useImperativeHandle(ref, create, deps);
   1612   }
   1613   function useDebugValue(value, formatterFn) {
   1614     {
   1615       var dispatcher = resolveDispatcher();
   1616       return dispatcher.useDebugValue(value, formatterFn);
   1617     }
   1618   }
   1619 
   1620   /**
   1621    * Copyright (c) 2013-present, Facebook, Inc.
   1622    *
   1623    * This source code is licensed under the MIT license found in the
   1624    * LICENSE file in the root directory of this source tree.
   1625    */
   1626 
   1627   var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';
   1628 
   1629   var ReactPropTypesSecret_1 = ReactPropTypesSecret;
   1630 
   1631   var printWarning$1 = function() {};
   1632 
   1633   {
   1634     var ReactPropTypesSecret$1 = ReactPropTypesSecret_1;
   1635     var loggedTypeFailures = {};
   1636     var has = Function.call.bind(Object.prototype.hasOwnProperty);
   1637 
   1638     printWarning$1 = function(text) {
   1639       var message = 'Warning: ' + text;
   1640       if (typeof console !== 'undefined') {
   1641         console.error(message);
   1642       }
   1643       try {
   1644         // --- Welcome to debugging React ---
   1645         // This error was thrown as a convenience so that you can use this stack
   1646         // to find the callsite that caused this warning to fire.
   1647         throw new Error(message);
   1648       } catch (x) {}
   1649     };
   1650   }
   1651 
   1652   /**
   1653    * Assert that the values match with the type specs.
   1654    * Error messages are memorized and will only be shown once.
   1655    *
   1656    * @param {object} typeSpecs Map of name to a ReactPropType
   1657    * @param {object} values Runtime values that need to be type-checked
   1658    * @param {string} location e.g. "prop", "context", "child context"
   1659    * @param {string} componentName Name of the component for error messages.
   1660    * @param {?Function} getStack Returns the component stack.
   1661    * @private
   1662    */
   1663   function checkPropTypes(typeSpecs, values, location, componentName, getStack) {
   1664     {
   1665       for (var typeSpecName in typeSpecs) {
   1666         if (has(typeSpecs, typeSpecName)) {
   1667           var error;
   1668           // Prop type validation may throw. In case they do, we don't want to
   1669           // fail the render phase where it didn't fail before. So we log it.
   1670           // After these have been cleaned up, we'll let them throw.
   1671           try {
   1672             // This is intentionally an invariant that gets caught. It's the same
   1673             // behavior as without this statement except with a better message.
   1674             if (typeof typeSpecs[typeSpecName] !== 'function') {
   1675               var err = Error(
   1676                 (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +
   1677                 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.'
   1678               );
   1679               err.name = 'Invariant Violation';
   1680               throw err;
   1681             }
   1682             error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret$1);
   1683           } catch (ex) {
   1684             error = ex;
   1685           }
   1686           if (error && !(error instanceof Error)) {
   1687             printWarning$1(
   1688               (componentName || 'React class') + ': type specification of ' +
   1689               location + ' `' + typeSpecName + '` is invalid; the type checker ' +
   1690               'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +
   1691               'You may have forgotten to pass an argument to the type checker ' +
   1692               'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +
   1693               'shape all require an argument).'
   1694             );
   1695           }
   1696           if (error instanceof Error && !(error.message in loggedTypeFailures)) {
   1697             // Only monitor this failure once because there tends to be a lot of the
   1698             // same error.
   1699             loggedTypeFailures[error.message] = true;
   1700 
   1701             var stack = getStack ? getStack() : '';
   1702 
   1703             printWarning$1(
   1704               'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')
   1705             );
   1706           }
   1707         }
   1708       }
   1709     }
   1710   }
   1711 
   1712   /**
   1713    * Resets warning cache when testing.
   1714    *
   1715    * @private
   1716    */
   1717   checkPropTypes.resetWarningCache = function() {
   1718     {
   1719       loggedTypeFailures = {};
   1720     }
   1721   };
   1722 
   1723   var checkPropTypes_1 = checkPropTypes;
   1724 
   1725   var propTypesMisspellWarningShown;
   1726 
   1727   {
   1728     propTypesMisspellWarningShown = false;
   1729   }
   1730 
   1731   function getDeclarationErrorAddendum() {
   1732     if (ReactCurrentOwner.current) {
   1733       var name = getComponentName(ReactCurrentOwner.current.type);
   1734 
   1735       if (name) {
   1736         return '\n\nCheck the render method of `' + name + '`.';
   1737       }
   1738     }
   1739 
   1740     return '';
   1741   }
   1742 
   1743   function getSourceInfoErrorAddendum(source) {
   1744     if (source !== undefined) {
   1745       var fileName = source.fileName.replace(/^.*[\\\/]/, '');
   1746       var lineNumber = source.lineNumber;
   1747       return '\n\nCheck your code at ' + fileName + ':' + lineNumber + '.';
   1748     }
   1749 
   1750     return '';
   1751   }
   1752 
   1753   function getSourceInfoErrorAddendumForProps(elementProps) {
   1754     if (elementProps !== null && elementProps !== undefined) {
   1755       return getSourceInfoErrorAddendum(elementProps.__source);
   1756     }
   1757 
   1758     return '';
   1759   }
   1760   /**
   1761    * Warn if there's no key explicitly set on dynamic arrays of children or
   1762    * object keys are not valid. This allows us to keep track of children between
   1763    * updates.
   1764    */
   1765 
   1766 
   1767   var ownerHasKeyUseWarning = {};
   1768 
   1769   function getCurrentComponentErrorInfo(parentType) {
   1770     var info = getDeclarationErrorAddendum();
   1771 
   1772     if (!info) {
   1773       var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;
   1774 
   1775       if (parentName) {
   1776         info = "\n\nCheck the top-level render call using <" + parentName + ">.";
   1777       }
   1778     }
   1779 
   1780     return info;
   1781   }
   1782   /**
   1783    * Warn if the element doesn't have an explicit key assigned to it.
   1784    * This element is in an array. The array could grow and shrink or be
   1785    * reordered. All children that haven't already been validated are required to
   1786    * have a "key" property assigned to it. Error statuses are cached so a warning
   1787    * will only be shown once.
   1788    *
   1789    * @internal
   1790    * @param {ReactElement} element Element that requires a key.
   1791    * @param {*} parentType element's parent's type.
   1792    */
   1793 
   1794 
   1795   function validateExplicitKey(element, parentType) {
   1796     if (!element._store || element._store.validated || element.key != null) {
   1797       return;
   1798     }
   1799 
   1800     element._store.validated = true;
   1801     var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);
   1802 
   1803     if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {
   1804       return;
   1805     }
   1806 
   1807     ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a
   1808     // property, it may be the creator of the child that's responsible for
   1809     // assigning it a key.
   1810 
   1811     var childOwner = '';
   1812 
   1813     if (element && element._owner && element._owner !== ReactCurrentOwner.current) {
   1814       // Give the component that originally created this child.
   1815       childOwner = " It was passed a child from " + getComponentName(element._owner.type) + ".";
   1816     }
   1817 
   1818     setCurrentlyValidatingElement(element);
   1819 
   1820     {
   1821       error('Each child in a list should have a unique "key" prop.' + '%s%s See https://fb.me/react-warning-keys for more information.', currentComponentErrorInfo, childOwner);
   1822     }
   1823 
   1824     setCurrentlyValidatingElement(null);
   1825   }
   1826   /**
   1827    * Ensure that every element either is passed in a static location, in an
   1828    * array with an explicit keys property defined, or in an object literal
   1829    * with valid key property.
   1830    *
   1831    * @internal
   1832    * @param {ReactNode} node Statically passed child of any type.
   1833    * @param {*} parentType node's parent's type.
   1834    */
   1835 
   1836 
   1837   function validateChildKeys(node, parentType) {
   1838     if (typeof node !== 'object') {
   1839       return;
   1840     }
   1841 
   1842     if (Array.isArray(node)) {
   1843       for (var i = 0; i < node.length; i++) {
   1844         var child = node[i];
   1845 
   1846         if (isValidElement(child)) {
   1847           validateExplicitKey(child, parentType);
   1848         }
   1849       }
   1850     } else if (isValidElement(node)) {
   1851       // This element was passed in a valid location.
   1852       if (node._store) {
   1853         node._store.validated = true;
   1854       }
   1855     } else if (node) {
   1856       var iteratorFn = getIteratorFn(node);
   1857 
   1858       if (typeof iteratorFn === 'function') {
   1859         // Entry iterators used to provide implicit keys,
   1860         // but now we print a separate warning for them later.
   1861         if (iteratorFn !== node.entries) {
   1862           var iterator = iteratorFn.call(node);
   1863           var step;
   1864 
   1865           while (!(step = iterator.next()).done) {
   1866             if (isValidElement(step.value)) {
   1867               validateExplicitKey(step.value, parentType);
   1868             }
   1869           }
   1870         }
   1871       }
   1872     }
   1873   }
   1874   /**
   1875    * Given an element, validate that its props follow the propTypes definition,
   1876    * provided by the type.
   1877    *
   1878    * @param {ReactElement} element
   1879    */
   1880 
   1881 
   1882   function validatePropTypes(element) {
   1883     {
   1884       var type = element.type;
   1885 
   1886       if (type === null || type === undefined || typeof type === 'string') {
   1887         return;
   1888       }
   1889 
   1890       var name = getComponentName(type);
   1891       var propTypes;
   1892 
   1893       if (typeof type === 'function') {
   1894         propTypes = type.propTypes;
   1895       } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.
   1896       // Inner props are checked in the reconciler.
   1897       type.$$typeof === REACT_MEMO_TYPE)) {
   1898         propTypes = type.propTypes;
   1899       } else {
   1900         return;
   1901       }
   1902 
   1903       if (propTypes) {
   1904         setCurrentlyValidatingElement(element);
   1905         checkPropTypes_1(propTypes, element.props, 'prop', name, ReactDebugCurrentFrame.getStackAddendum);
   1906         setCurrentlyValidatingElement(null);
   1907       } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {
   1908         propTypesMisspellWarningShown = true;
   1909 
   1910         error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', name || 'Unknown');
   1911       }
   1912 
   1913       if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {
   1914         error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');
   1915       }
   1916     }
   1917   }
   1918   /**
   1919    * Given a fragment, validate that it can only be provided with fragment props
   1920    * @param {ReactElement} fragment
   1921    */
   1922 
   1923 
   1924   function validateFragmentProps(fragment) {
   1925     {
   1926       setCurrentlyValidatingElement(fragment);
   1927       var keys = Object.keys(fragment.props);
   1928 
   1929       for (var i = 0; i < keys.length; i++) {
   1930         var key = keys[i];
   1931 
   1932         if (key !== 'children' && key !== 'key') {
   1933           error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);
   1934 
   1935           break;
   1936         }
   1937       }
   1938 
   1939       if (fragment.ref !== null) {
   1940         error('Invalid attribute `ref` supplied to `React.Fragment`.');
   1941       }
   1942 
   1943       setCurrentlyValidatingElement(null);
   1944     }
   1945   }
   1946   function createElementWithValidation(type, props, children) {
   1947     var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to
   1948     // succeed and there will likely be errors in render.
   1949 
   1950     if (!validType) {
   1951       var info = '';
   1952 
   1953       if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {
   1954         info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and named imports.";
   1955       }
   1956 
   1957       var sourceInfo = getSourceInfoErrorAddendumForProps(props);
   1958 
   1959       if (sourceInfo) {
   1960         info += sourceInfo;
   1961       } else {
   1962         info += getDeclarationErrorAddendum();
   1963       }
   1964 
   1965       var typeString;
   1966 
   1967       if (type === null) {
   1968         typeString = 'null';
   1969       } else if (Array.isArray(type)) {
   1970         typeString = 'array';
   1971       } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {
   1972         typeString = "<" + (getComponentName(type.type) || 'Unknown') + " />";
   1973         info = ' Did you accidentally export a JSX literal instead of a component?';
   1974       } else {
   1975         typeString = typeof type;
   1976       }
   1977 
   1978       {
   1979         error('React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);
   1980       }
   1981     }
   1982 
   1983     var element = createElement.apply(this, arguments); // The result can be nullish if a mock or a custom function is used.
   1984     // TODO: Drop this when these are no longer allowed as the type argument.
   1985 
   1986     if (element == null) {
   1987       return element;
   1988     } // Skip key warning if the type isn't valid since our key validation logic
   1989     // doesn't expect a non-string/function type and can throw confusing errors.
   1990     // We don't want exception behavior to differ between dev and prod.
   1991     // (Rendering will throw with a helpful message and as soon as the type is
   1992     // fixed, the key warnings will appear.)
   1993 
   1994 
   1995     if (validType) {
   1996       for (var i = 2; i < arguments.length; i++) {
   1997         validateChildKeys(arguments[i], type);
   1998       }
   1999     }
   2000 
   2001     if (type === REACT_FRAGMENT_TYPE) {
   2002       validateFragmentProps(element);
   2003     } else {
   2004       validatePropTypes(element);
   2005     }
   2006 
   2007     return element;
   2008   }
   2009   var didWarnAboutDeprecatedCreateFactory = false;
   2010   function createFactoryWithValidation(type) {
   2011     var validatedFactory = createElementWithValidation.bind(null, type);
   2012     validatedFactory.type = type;
   2013 
   2014     {
   2015       if (!didWarnAboutDeprecatedCreateFactory) {
   2016         didWarnAboutDeprecatedCreateFactory = true;
   2017 
   2018         warn('React.createFactory() is deprecated and will be removed in ' + 'a future major release. Consider using JSX ' + 'or use React.createElement() directly instead.');
   2019       } // Legacy hook: remove it
   2020 
   2021 
   2022       Object.defineProperty(validatedFactory, 'type', {
   2023         enumerable: false,
   2024         get: function () {
   2025           warn('Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.');
   2026 
   2027           Object.defineProperty(this, 'type', {
   2028             value: type
   2029           });
   2030           return type;
   2031         }
   2032       });
   2033     }
   2034 
   2035     return validatedFactory;
   2036   }
   2037   function cloneElementWithValidation(element, props, children) {
   2038     var newElement = cloneElement.apply(this, arguments);
   2039 
   2040     for (var i = 2; i < arguments.length; i++) {
   2041       validateChildKeys(arguments[i], newElement.type);
   2042     }
   2043 
   2044     validatePropTypes(newElement);
   2045     return newElement;
   2046   }
   2047 
   2048   var enableSchedulerDebugging = false;
   2049   var enableProfiling = true;
   2050 
   2051   var requestHostCallback;
   2052   var requestHostTimeout;
   2053   var cancelHostTimeout;
   2054   var shouldYieldToHost;
   2055   var requestPaint;
   2056   var getCurrentTime;
   2057   var forceFrameRate;
   2058 
   2059   if ( // If Scheduler runs in a non-DOM environment, it falls back to a naive
   2060   // implementation using setTimeout.
   2061   typeof window === 'undefined' || // Check if MessageChannel is supported, too.
   2062   typeof MessageChannel !== 'function') {
   2063     // If this accidentally gets imported in a non-browser environment, e.g. JavaScriptCore,
   2064     // fallback to a naive implementation.
   2065     var _callback = null;
   2066     var _timeoutID = null;
   2067 
   2068     var _flushCallback = function () {
   2069       if (_callback !== null) {
   2070         try {
   2071           var currentTime = getCurrentTime();
   2072           var hasRemainingTime = true;
   2073 
   2074           _callback(hasRemainingTime, currentTime);
   2075 
   2076           _callback = null;
   2077         } catch (e) {
   2078           setTimeout(_flushCallback, 0);
   2079           throw e;
   2080         }
   2081       }
   2082     };
   2083 
   2084     var initialTime = Date.now();
   2085 
   2086     getCurrentTime = function () {
   2087       return Date.now() - initialTime;
   2088     };
   2089 
   2090     requestHostCallback = function (cb) {
   2091       if (_callback !== null) {
   2092         // Protect against re-entrancy.
   2093         setTimeout(requestHostCallback, 0, cb);
   2094       } else {
   2095         _callback = cb;
   2096         setTimeout(_flushCallback, 0);
   2097       }
   2098     };
   2099 
   2100     requestHostTimeout = function (cb, ms) {
   2101       _timeoutID = setTimeout(cb, ms);
   2102     };
   2103 
   2104     cancelHostTimeout = function () {
   2105       clearTimeout(_timeoutID);
   2106     };
   2107 
   2108     shouldYieldToHost = function () {
   2109       return false;
   2110     };
   2111 
   2112     requestPaint = forceFrameRate = function () {};
   2113   } else {
   2114     // Capture local references to native APIs, in case a polyfill overrides them.
   2115     var performance = window.performance;
   2116     var _Date = window.Date;
   2117     var _setTimeout = window.setTimeout;
   2118     var _clearTimeout = window.clearTimeout;
   2119 
   2120     if (typeof console !== 'undefined') {
   2121       // TODO: Scheduler no longer requires these methods to be polyfilled. But
   2122       // maybe we want to continue warning if they don't exist, to preserve the
   2123       // option to rely on it in the future?
   2124       var requestAnimationFrame = window.requestAnimationFrame;
   2125       var cancelAnimationFrame = window.cancelAnimationFrame; // TODO: Remove fb.me link
   2126 
   2127       if (typeof requestAnimationFrame !== 'function') {
   2128         // Using console['error'] to evade Babel and ESLint
   2129         console['error']("This browser doesn't support requestAnimationFrame. " + 'Make sure that you load a ' + 'polyfill in older browsers. https://fb.me/react-polyfills');
   2130       }
   2131 
   2132       if (typeof cancelAnimationFrame !== 'function') {
   2133         // Using console['error'] to evade Babel and ESLint
   2134         console['error']("This browser doesn't support cancelAnimationFrame. " + 'Make sure that you load a ' + 'polyfill in older browsers. https://fb.me/react-polyfills');
   2135       }
   2136     }
   2137 
   2138     if (typeof performance === 'object' && typeof performance.now === 'function') {
   2139       getCurrentTime = function () {
   2140         return performance.now();
   2141       };
   2142     } else {
   2143       var _initialTime = _Date.now();
   2144 
   2145       getCurrentTime = function () {
   2146         return _Date.now() - _initialTime;
   2147       };
   2148     }
   2149 
   2150     var isMessageLoopRunning = false;
   2151     var scheduledHostCallback = null;
   2152     var taskTimeoutID = -1; // Scheduler periodically yields in case there is other work on the main
   2153     // thread, like user events. By default, it yields multiple times per frame.
   2154     // It does not attempt to align with frame boundaries, since most tasks don't
   2155     // need to be frame aligned; for those that do, use requestAnimationFrame.
   2156 
   2157     var yieldInterval = 5;
   2158     var deadline = 0; // TODO: Make this configurable
   2159 
   2160     {
   2161       // `isInputPending` is not available. Since we have no way of knowing if
   2162       // there's pending input, always yield at the end of the frame.
   2163       shouldYieldToHost = function () {
   2164         return getCurrentTime() >= deadline;
   2165       }; // Since we yield every frame regardless, `requestPaint` has no effect.
   2166 
   2167 
   2168       requestPaint = function () {};
   2169     }
   2170 
   2171     forceFrameRate = function (fps) {
   2172       if (fps < 0 || fps > 125) {
   2173         // Using console['error'] to evade Babel and ESLint
   2174         console['error']('forceFrameRate takes a positive int between 0 and 125, ' + 'forcing framerates higher than 125 fps is not unsupported');
   2175         return;
   2176       }
   2177 
   2178       if (fps > 0) {
   2179         yieldInterval = Math.floor(1000 / fps);
   2180       } else {
   2181         // reset the framerate
   2182         yieldInterval = 5;
   2183       }
   2184     };
   2185 
   2186     var performWorkUntilDeadline = function () {
   2187       if (scheduledHostCallback !== null) {
   2188         var currentTime = getCurrentTime(); // Yield after `yieldInterval` ms, regardless of where we are in the vsync
   2189         // cycle. This means there's always time remaining at the beginning of
   2190         // the message event.
   2191 
   2192         deadline = currentTime + yieldInterval;
   2193         var hasTimeRemaining = true;
   2194 
   2195         try {
   2196           var hasMoreWork = scheduledHostCallback(hasTimeRemaining, currentTime);
   2197 
   2198           if (!hasMoreWork) {
   2199             isMessageLoopRunning = false;
   2200             scheduledHostCallback = null;
   2201           } else {
   2202             // If there's more work, schedule the next message event at the end
   2203             // of the preceding one.
   2204             port.postMessage(null);
   2205           }
   2206         } catch (error) {
   2207           // If a scheduler task throws, exit the current browser task so the
   2208           // error can be observed.
   2209           port.postMessage(null);
   2210           throw error;
   2211         }
   2212       } else {
   2213         isMessageLoopRunning = false;
   2214       } // Yielding to the browser will give it a chance to paint, so we can
   2215     };
   2216 
   2217     var channel = new MessageChannel();
   2218     var port = channel.port2;
   2219     channel.port1.onmessage = performWorkUntilDeadline;
   2220 
   2221     requestHostCallback = function (callback) {
   2222       scheduledHostCallback = callback;
   2223 
   2224       if (!isMessageLoopRunning) {
   2225         isMessageLoopRunning = true;
   2226         port.postMessage(null);
   2227       }
   2228     };
   2229 
   2230     requestHostTimeout = function (callback, ms) {
   2231       taskTimeoutID = _setTimeout(function () {
   2232         callback(getCurrentTime());
   2233       }, ms);
   2234     };
   2235 
   2236     cancelHostTimeout = function () {
   2237       _clearTimeout(taskTimeoutID);
   2238 
   2239       taskTimeoutID = -1;
   2240     };
   2241   }
   2242 
   2243   function push(heap, node) {
   2244     var index = heap.length;
   2245     heap.push(node);
   2246     siftUp(heap, node, index);
   2247   }
   2248   function peek(heap) {
   2249     var first = heap[0];
   2250     return first === undefined ? null : first;
   2251   }
   2252   function pop(heap) {
   2253     var first = heap[0];
   2254 
   2255     if (first !== undefined) {
   2256       var last = heap.pop();
   2257 
   2258       if (last !== first) {
   2259         heap[0] = last;
   2260         siftDown(heap, last, 0);
   2261       }
   2262 
   2263       return first;
   2264     } else {
   2265       return null;
   2266     }
   2267   }
   2268 
   2269   function siftUp(heap, node, i) {
   2270     var index = i;
   2271 
   2272     while (true) {
   2273       var parentIndex = index - 1 >>> 1;
   2274       var parent = heap[parentIndex];
   2275 
   2276       if (parent !== undefined && compare(parent, node) > 0) {
   2277         // The parent is larger. Swap positions.
   2278         heap[parentIndex] = node;
   2279         heap[index] = parent;
   2280         index = parentIndex;
   2281       } else {
   2282         // The parent is smaller. Exit.
   2283         return;
   2284       }
   2285     }
   2286   }
   2287 
   2288   function siftDown(heap, node, i) {
   2289     var index = i;
   2290     var length = heap.length;
   2291 
   2292     while (index < length) {
   2293       var leftIndex = (index + 1) * 2 - 1;
   2294       var left = heap[leftIndex];
   2295       var rightIndex = leftIndex + 1;
   2296       var right = heap[rightIndex]; // If the left or right node is smaller, swap with the smaller of those.
   2297 
   2298       if (left !== undefined && compare(left, node) < 0) {
   2299         if (right !== undefined && compare(right, left) < 0) {
   2300           heap[index] = right;
   2301           heap[rightIndex] = node;
   2302           index = rightIndex;
   2303         } else {
   2304           heap[index] = left;
   2305           heap[leftIndex] = node;
   2306           index = leftIndex;
   2307         }
   2308       } else if (right !== undefined && compare(right, node) < 0) {
   2309         heap[index] = right;
   2310         heap[rightIndex] = node;
   2311         index = rightIndex;
   2312       } else {
   2313         // Neither child is smaller. Exit.
   2314         return;
   2315       }
   2316     }
   2317   }
   2318 
   2319   function compare(a, b) {
   2320     // Compare sort index first, then task id.
   2321     var diff = a.sortIndex - b.sortIndex;
   2322     return diff !== 0 ? diff : a.id - b.id;
   2323   }
   2324 
   2325   // TODO: Use symbols?
   2326   var NoPriority = 0;
   2327   var ImmediatePriority = 1;
   2328   var UserBlockingPriority = 2;
   2329   var NormalPriority = 3;
   2330   var LowPriority = 4;
   2331   var IdlePriority = 5;
   2332 
   2333   var runIdCounter = 0;
   2334   var mainThreadIdCounter = 0;
   2335   var profilingStateSize = 4;
   2336   var sharedProfilingBuffer =  // $FlowFixMe Flow doesn't know about SharedArrayBuffer
   2337   typeof SharedArrayBuffer === 'function' ? new SharedArrayBuffer(profilingStateSize * Int32Array.BYTES_PER_ELEMENT) : // $FlowFixMe Flow doesn't know about ArrayBuffer
   2338   typeof ArrayBuffer === 'function' ? new ArrayBuffer(profilingStateSize * Int32Array.BYTES_PER_ELEMENT) : null // Don't crash the init path on IE9
   2339   ;
   2340   var profilingState =  sharedProfilingBuffer !== null ? new Int32Array(sharedProfilingBuffer) : []; // We can't read this but it helps save bytes for null checks
   2341 
   2342   var PRIORITY = 0;
   2343   var CURRENT_TASK_ID = 1;
   2344   var CURRENT_RUN_ID = 2;
   2345   var QUEUE_SIZE = 3;
   2346 
   2347   {
   2348     profilingState[PRIORITY] = NoPriority; // This is maintained with a counter, because the size of the priority queue
   2349     // array might include canceled tasks.
   2350 
   2351     profilingState[QUEUE_SIZE] = 0;
   2352     profilingState[CURRENT_TASK_ID] = 0;
   2353   } // Bytes per element is 4
   2354 
   2355 
   2356   var INITIAL_EVENT_LOG_SIZE = 131072;
   2357   var MAX_EVENT_LOG_SIZE = 524288; // Equivalent to 2 megabytes
   2358 
   2359   var eventLogSize = 0;
   2360   var eventLogBuffer = null;
   2361   var eventLog = null;
   2362   var eventLogIndex = 0;
   2363   var TaskStartEvent = 1;
   2364   var TaskCompleteEvent = 2;
   2365   var TaskErrorEvent = 3;
   2366   var TaskCancelEvent = 4;
   2367   var TaskRunEvent = 5;
   2368   var TaskYieldEvent = 6;
   2369   var SchedulerSuspendEvent = 7;
   2370   var SchedulerResumeEvent = 8;
   2371 
   2372   function logEvent(entries) {
   2373     if (eventLog !== null) {
   2374       var offset = eventLogIndex;
   2375       eventLogIndex += entries.length;
   2376 
   2377       if (eventLogIndex + 1 > eventLogSize) {
   2378         eventLogSize *= 2;
   2379 
   2380         if (eventLogSize > MAX_EVENT_LOG_SIZE) {
   2381           // Using console['error'] to evade Babel and ESLint
   2382           console['error']("Scheduler Profiling: Event log exceeded maximum size. Don't " + 'forget to call `stopLoggingProfilingEvents()`.');
   2383           stopLoggingProfilingEvents();
   2384           return;
   2385         }
   2386 
   2387         var newEventLog = new Int32Array(eventLogSize * 4);
   2388         newEventLog.set(eventLog);
   2389         eventLogBuffer = newEventLog.buffer;
   2390         eventLog = newEventLog;
   2391       }
   2392 
   2393       eventLog.set(entries, offset);
   2394     }
   2395   }
   2396 
   2397   function startLoggingProfilingEvents() {
   2398     eventLogSize = INITIAL_EVENT_LOG_SIZE;
   2399     eventLogBuffer = new ArrayBuffer(eventLogSize * 4);
   2400     eventLog = new Int32Array(eventLogBuffer);
   2401     eventLogIndex = 0;
   2402   }
   2403   function stopLoggingProfilingEvents() {
   2404     var buffer = eventLogBuffer;
   2405     eventLogSize = 0;
   2406     eventLogBuffer = null;
   2407     eventLog = null;
   2408     eventLogIndex = 0;
   2409     return buffer;
   2410   }
   2411   function markTaskStart(task, ms) {
   2412     {
   2413       profilingState[QUEUE_SIZE]++;
   2414 
   2415       if (eventLog !== null) {
   2416         // performance.now returns a float, representing milliseconds. When the
   2417         // event is logged, it's coerced to an int. Convert to microseconds to
   2418         // maintain extra degrees of precision.
   2419         logEvent([TaskStartEvent, ms * 1000, task.id, task.priorityLevel]);
   2420       }
   2421     }
   2422   }
   2423   function markTaskCompleted(task, ms) {
   2424     {
   2425       profilingState[PRIORITY] = NoPriority;
   2426       profilingState[CURRENT_TASK_ID] = 0;
   2427       profilingState[QUEUE_SIZE]--;
   2428 
   2429       if (eventLog !== null) {
   2430         logEvent([TaskCompleteEvent, ms * 1000, task.id]);
   2431       }
   2432     }
   2433   }
   2434   function markTaskCanceled(task, ms) {
   2435     {
   2436       profilingState[QUEUE_SIZE]--;
   2437 
   2438       if (eventLog !== null) {
   2439         logEvent([TaskCancelEvent, ms * 1000, task.id]);
   2440       }
   2441     }
   2442   }
   2443   function markTaskErrored(task, ms) {
   2444     {
   2445       profilingState[PRIORITY] = NoPriority;
   2446       profilingState[CURRENT_TASK_ID] = 0;
   2447       profilingState[QUEUE_SIZE]--;
   2448 
   2449       if (eventLog !== null) {
   2450         logEvent([TaskErrorEvent, ms * 1000, task.id]);
   2451       }
   2452     }
   2453   }
   2454   function markTaskRun(task, ms) {
   2455     {
   2456       runIdCounter++;
   2457       profilingState[PRIORITY] = task.priorityLevel;
   2458       profilingState[CURRENT_TASK_ID] = task.id;
   2459       profilingState[CURRENT_RUN_ID] = runIdCounter;
   2460 
   2461       if (eventLog !== null) {
   2462         logEvent([TaskRunEvent, ms * 1000, task.id, runIdCounter]);
   2463       }
   2464     }
   2465   }
   2466   function markTaskYield(task, ms) {
   2467     {
   2468       profilingState[PRIORITY] = NoPriority;
   2469       profilingState[CURRENT_TASK_ID] = 0;
   2470       profilingState[CURRENT_RUN_ID] = 0;
   2471 
   2472       if (eventLog !== null) {
   2473         logEvent([TaskYieldEvent, ms * 1000, task.id, runIdCounter]);
   2474       }
   2475     }
   2476   }
   2477   function markSchedulerSuspended(ms) {
   2478     {
   2479       mainThreadIdCounter++;
   2480 
   2481       if (eventLog !== null) {
   2482         logEvent([SchedulerSuspendEvent, ms * 1000, mainThreadIdCounter]);
   2483       }
   2484     }
   2485   }
   2486   function markSchedulerUnsuspended(ms) {
   2487     {
   2488       if (eventLog !== null) {
   2489         logEvent([SchedulerResumeEvent, ms * 1000, mainThreadIdCounter]);
   2490       }
   2491     }
   2492   }
   2493 
   2494   /* eslint-disable no-var */
   2495   // Math.pow(2, 30) - 1
   2496   // 0b111111111111111111111111111111
   2497 
   2498   var maxSigned31BitInt = 1073741823; // Times out immediately
   2499 
   2500   var IMMEDIATE_PRIORITY_TIMEOUT = -1; // Eventually times out
   2501 
   2502   var USER_BLOCKING_PRIORITY = 250;
   2503   var NORMAL_PRIORITY_TIMEOUT = 5000;
   2504   var LOW_PRIORITY_TIMEOUT = 10000; // Never times out
   2505 
   2506   var IDLE_PRIORITY = maxSigned31BitInt; // Tasks are stored on a min heap
   2507 
   2508   var taskQueue = [];
   2509   var timerQueue = []; // Incrementing id counter. Used to maintain insertion order.
   2510 
   2511   var taskIdCounter = 1; // Pausing the scheduler is useful for debugging.
   2512   var currentTask = null;
   2513   var currentPriorityLevel = NormalPriority; // This is set while performing work, to prevent re-entrancy.
   2514 
   2515   var isPerformingWork = false;
   2516   var isHostCallbackScheduled = false;
   2517   var isHostTimeoutScheduled = false;
   2518 
   2519   function advanceTimers(currentTime) {
   2520     // Check for tasks that are no longer delayed and add them to the queue.
   2521     var timer = peek(timerQueue);
   2522 
   2523     while (timer !== null) {
   2524       if (timer.callback === null) {
   2525         // Timer was cancelled.
   2526         pop(timerQueue);
   2527       } else if (timer.startTime <= currentTime) {
   2528         // Timer fired. Transfer to the task queue.
   2529         pop(timerQueue);
   2530         timer.sortIndex = timer.expirationTime;
   2531         push(taskQueue, timer);
   2532 
   2533         {
   2534           markTaskStart(timer, currentTime);
   2535           timer.isQueued = true;
   2536         }
   2537       } else {
   2538         // Remaining timers are pending.
   2539         return;
   2540       }
   2541 
   2542       timer = peek(timerQueue);
   2543     }
   2544   }
   2545 
   2546   function handleTimeout(currentTime) {
   2547     isHostTimeoutScheduled = false;
   2548     advanceTimers(currentTime);
   2549 
   2550     if (!isHostCallbackScheduled) {
   2551       if (peek(taskQueue) !== null) {
   2552         isHostCallbackScheduled = true;
   2553         requestHostCallback(flushWork);
   2554       } else {
   2555         var firstTimer = peek(timerQueue);
   2556 
   2557         if (firstTimer !== null) {
   2558           requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);
   2559         }
   2560       }
   2561     }
   2562   }
   2563 
   2564   function flushWork(hasTimeRemaining, initialTime) {
   2565     {
   2566       markSchedulerUnsuspended(initialTime);
   2567     } // We'll need a host callback the next time work is scheduled.
   2568 
   2569 
   2570     isHostCallbackScheduled = false;
   2571 
   2572     if (isHostTimeoutScheduled) {
   2573       // We scheduled a timeout but it's no longer needed. Cancel it.
   2574       isHostTimeoutScheduled = false;
   2575       cancelHostTimeout();
   2576     }
   2577 
   2578     isPerformingWork = true;
   2579     var previousPriorityLevel = currentPriorityLevel;
   2580 
   2581     try {
   2582       if (enableProfiling) {
   2583         try {
   2584           return workLoop(hasTimeRemaining, initialTime);
   2585         } catch (error) {
   2586           if (currentTask !== null) {
   2587             var currentTime = getCurrentTime();
   2588             markTaskErrored(currentTask, currentTime);
   2589             currentTask.isQueued = false;
   2590           }
   2591 
   2592           throw error;
   2593         }
   2594       } else {
   2595         // No catch in prod codepath.
   2596         return workLoop(hasTimeRemaining, initialTime);
   2597       }
   2598     } finally {
   2599       currentTask = null;
   2600       currentPriorityLevel = previousPriorityLevel;
   2601       isPerformingWork = false;
   2602 
   2603       {
   2604         var _currentTime = getCurrentTime();
   2605 
   2606         markSchedulerSuspended(_currentTime);
   2607       }
   2608     }
   2609   }
   2610 
   2611   function workLoop(hasTimeRemaining, initialTime) {
   2612     var currentTime = initialTime;
   2613     advanceTimers(currentTime);
   2614     currentTask = peek(taskQueue);
   2615 
   2616     while (currentTask !== null && !(enableSchedulerDebugging )) {
   2617       if (currentTask.expirationTime > currentTime && (!hasTimeRemaining || shouldYieldToHost())) {
   2618         // This currentTask hasn't expired, and we've reached the deadline.
   2619         break;
   2620       }
   2621 
   2622       var callback = currentTask.callback;
   2623 
   2624       if (callback !== null) {
   2625         currentTask.callback = null;
   2626         currentPriorityLevel = currentTask.priorityLevel;
   2627         var didUserCallbackTimeout = currentTask.expirationTime <= currentTime;
   2628         markTaskRun(currentTask, currentTime);
   2629         var continuationCallback = callback(didUserCallbackTimeout);
   2630         currentTime = getCurrentTime();
   2631 
   2632         if (typeof continuationCallback === 'function') {
   2633           currentTask.callback = continuationCallback;
   2634           markTaskYield(currentTask, currentTime);
   2635         } else {
   2636           {
   2637             markTaskCompleted(currentTask, currentTime);
   2638             currentTask.isQueued = false;
   2639           }
   2640 
   2641           if (currentTask === peek(taskQueue)) {
   2642             pop(taskQueue);
   2643           }
   2644         }
   2645 
   2646         advanceTimers(currentTime);
   2647       } else {
   2648         pop(taskQueue);
   2649       }
   2650 
   2651       currentTask = peek(taskQueue);
   2652     } // Return whether there's additional work
   2653 
   2654 
   2655     if (currentTask !== null) {
   2656       return true;
   2657     } else {
   2658       var firstTimer = peek(timerQueue);
   2659 
   2660       if (firstTimer !== null) {
   2661         requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);
   2662       }
   2663 
   2664       return false;
   2665     }
   2666   }
   2667 
   2668   function unstable_runWithPriority(priorityLevel, eventHandler) {
   2669     switch (priorityLevel) {
   2670       case ImmediatePriority:
   2671       case UserBlockingPriority:
   2672       case NormalPriority:
   2673       case LowPriority:
   2674       case IdlePriority:
   2675         break;
   2676 
   2677       default:
   2678         priorityLevel = NormalPriority;
   2679     }
   2680 
   2681     var previousPriorityLevel = currentPriorityLevel;
   2682     currentPriorityLevel = priorityLevel;
   2683 
   2684     try {
   2685       return eventHandler();
   2686     } finally {
   2687       currentPriorityLevel = previousPriorityLevel;
   2688     }
   2689   }
   2690 
   2691   function unstable_next(eventHandler) {
   2692     var priorityLevel;
   2693 
   2694     switch (currentPriorityLevel) {
   2695       case ImmediatePriority:
   2696       case UserBlockingPriority:
   2697       case NormalPriority:
   2698         // Shift down to normal priority
   2699         priorityLevel = NormalPriority;
   2700         break;
   2701 
   2702       default:
   2703         // Anything lower than normal priority should remain at the current level.
   2704         priorityLevel = currentPriorityLevel;
   2705         break;
   2706     }
   2707 
   2708     var previousPriorityLevel = currentPriorityLevel;
   2709     currentPriorityLevel = priorityLevel;
   2710 
   2711     try {
   2712       return eventHandler();
   2713     } finally {
   2714       currentPriorityLevel = previousPriorityLevel;
   2715     }
   2716   }
   2717 
   2718   function unstable_wrapCallback(callback) {
   2719     var parentPriorityLevel = currentPriorityLevel;
   2720     return function () {
   2721       // This is a fork of runWithPriority, inlined for performance.
   2722       var previousPriorityLevel = currentPriorityLevel;
   2723       currentPriorityLevel = parentPriorityLevel;
   2724 
   2725       try {
   2726         return callback.apply(this, arguments);
   2727       } finally {
   2728         currentPriorityLevel = previousPriorityLevel;
   2729       }
   2730     };
   2731   }
   2732 
   2733   function timeoutForPriorityLevel(priorityLevel) {
   2734     switch (priorityLevel) {
   2735       case ImmediatePriority:
   2736         return IMMEDIATE_PRIORITY_TIMEOUT;
   2737 
   2738       case UserBlockingPriority:
   2739         return USER_BLOCKING_PRIORITY;
   2740 
   2741       case IdlePriority:
   2742         return IDLE_PRIORITY;
   2743 
   2744       case LowPriority:
   2745         return LOW_PRIORITY_TIMEOUT;
   2746 
   2747       case NormalPriority:
   2748       default:
   2749         return NORMAL_PRIORITY_TIMEOUT;
   2750     }
   2751   }
   2752 
   2753   function unstable_scheduleCallback(priorityLevel, callback, options) {
   2754     var currentTime = getCurrentTime();
   2755     var startTime;
   2756     var timeout;
   2757 
   2758     if (typeof options === 'object' && options !== null) {
   2759       var delay = options.delay;
   2760 
   2761       if (typeof delay === 'number' && delay > 0) {
   2762         startTime = currentTime + delay;
   2763       } else {
   2764         startTime = currentTime;
   2765       }
   2766 
   2767       timeout = typeof options.timeout === 'number' ? options.timeout : timeoutForPriorityLevel(priorityLevel);
   2768     } else {
   2769       timeout = timeoutForPriorityLevel(priorityLevel);
   2770       startTime = currentTime;
   2771     }
   2772 
   2773     var expirationTime = startTime + timeout;
   2774     var newTask = {
   2775       id: taskIdCounter++,
   2776       callback: callback,
   2777       priorityLevel: priorityLevel,
   2778       startTime: startTime,
   2779       expirationTime: expirationTime,
   2780       sortIndex: -1
   2781     };
   2782 
   2783     {
   2784       newTask.isQueued = false;
   2785     }
   2786 
   2787     if (startTime > currentTime) {
   2788       // This is a delayed task.
   2789       newTask.sortIndex = startTime;
   2790       push(timerQueue, newTask);
   2791 
   2792       if (peek(taskQueue) === null && newTask === peek(timerQueue)) {
   2793         // All tasks are delayed, and this is the task with the earliest delay.
   2794         if (isHostTimeoutScheduled) {
   2795           // Cancel an existing timeout.
   2796           cancelHostTimeout();
   2797         } else {
   2798           isHostTimeoutScheduled = true;
   2799         } // Schedule a timeout.
   2800 
   2801 
   2802         requestHostTimeout(handleTimeout, startTime - currentTime);
   2803       }
   2804     } else {
   2805       newTask.sortIndex = expirationTime;
   2806       push(taskQueue, newTask);
   2807 
   2808       {
   2809         markTaskStart(newTask, currentTime);
   2810         newTask.isQueued = true;
   2811       } // Schedule a host callback, if needed. If we're already performing work,
   2812       // wait until the next time we yield.
   2813 
   2814 
   2815       if (!isHostCallbackScheduled && !isPerformingWork) {
   2816         isHostCallbackScheduled = true;
   2817         requestHostCallback(flushWork);
   2818       }
   2819     }
   2820 
   2821     return newTask;
   2822   }
   2823 
   2824   function unstable_pauseExecution() {
   2825   }
   2826 
   2827   function unstable_continueExecution() {
   2828 
   2829     if (!isHostCallbackScheduled && !isPerformingWork) {
   2830       isHostCallbackScheduled = true;
   2831       requestHostCallback(flushWork);
   2832     }
   2833   }
   2834 
   2835   function unstable_getFirstCallbackNode() {
   2836     return peek(taskQueue);
   2837   }
   2838 
   2839   function unstable_cancelCallback(task) {
   2840     {
   2841       if (task.isQueued) {
   2842         var currentTime = getCurrentTime();
   2843         markTaskCanceled(task, currentTime);
   2844         task.isQueued = false;
   2845       }
   2846     } // Null out the callback to indicate the task has been canceled. (Can't
   2847     // remove from the queue because you can't remove arbitrary nodes from an
   2848     // array based heap, only the first one.)
   2849 
   2850 
   2851     task.callback = null;
   2852   }
   2853 
   2854   function unstable_getCurrentPriorityLevel() {
   2855     return currentPriorityLevel;
   2856   }
   2857 
   2858   function unstable_shouldYield() {
   2859     var currentTime = getCurrentTime();
   2860     advanceTimers(currentTime);
   2861     var firstTask = peek(taskQueue);
   2862     return firstTask !== currentTask && currentTask !== null && firstTask !== null && firstTask.callback !== null && firstTask.startTime <= currentTime && firstTask.expirationTime < currentTask.expirationTime || shouldYieldToHost();
   2863   }
   2864 
   2865   var unstable_requestPaint = requestPaint;
   2866   var unstable_Profiling =  {
   2867     startLoggingProfilingEvents: startLoggingProfilingEvents,
   2868     stopLoggingProfilingEvents: stopLoggingProfilingEvents,
   2869     sharedProfilingBuffer: sharedProfilingBuffer
   2870   } ;
   2871 
   2872 
   2873 
   2874   var Scheduler = /*#__PURE__*/Object.freeze({
   2875     __proto__: null,
   2876     unstable_ImmediatePriority: ImmediatePriority,
   2877     unstable_UserBlockingPriority: UserBlockingPriority,
   2878     unstable_NormalPriority: NormalPriority,
   2879     unstable_IdlePriority: IdlePriority,
   2880     unstable_LowPriority: LowPriority,
   2881     unstable_runWithPriority: unstable_runWithPriority,
   2882     unstable_next: unstable_next,
   2883     unstable_scheduleCallback: unstable_scheduleCallback,
   2884     unstable_cancelCallback: unstable_cancelCallback,
   2885     unstable_wrapCallback: unstable_wrapCallback,
   2886     unstable_getCurrentPriorityLevel: unstable_getCurrentPriorityLevel,
   2887     unstable_shouldYield: unstable_shouldYield,
   2888     unstable_requestPaint: unstable_requestPaint,
   2889     unstable_continueExecution: unstable_continueExecution,
   2890     unstable_pauseExecution: unstable_pauseExecution,
   2891     unstable_getFirstCallbackNode: unstable_getFirstCallbackNode,
   2892     get unstable_now () { return getCurrentTime; },
   2893     get unstable_forceFrameRate () { return forceFrameRate; },
   2894     unstable_Profiling: unstable_Profiling
   2895   });
   2896 
   2897   var DEFAULT_THREAD_ID = 0; // Counters used to generate unique IDs.
   2898 
   2899   var interactionIDCounter = 0;
   2900   var threadIDCounter = 0; // Set of currently traced interactions.
   2901   // Interactions "stack"–
   2902   // Meaning that newly traced interactions are appended to the previously active set.
   2903   // When an interaction goes out of scope, the previous set (if any) is restored.
   2904 
   2905   var interactionsRef = null; // Listener(s) to notify when interactions begin and end.
   2906 
   2907   var subscriberRef = null;
   2908 
   2909   {
   2910     interactionsRef = {
   2911       current: new Set()
   2912     };
   2913     subscriberRef = {
   2914       current: null
   2915     };
   2916   }
   2917   function unstable_clear(callback) {
   2918 
   2919     var prevInteractions = interactionsRef.current;
   2920     interactionsRef.current = new Set();
   2921 
   2922     try {
   2923       return callback();
   2924     } finally {
   2925       interactionsRef.current = prevInteractions;
   2926     }
   2927   }
   2928   function unstable_getCurrent() {
   2929     {
   2930       return interactionsRef.current;
   2931     }
   2932   }
   2933   function unstable_getThreadID() {
   2934     return ++threadIDCounter;
   2935   }
   2936   function unstable_trace(name, timestamp, callback) {
   2937     var threadID = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : DEFAULT_THREAD_ID;
   2938 
   2939     var interaction = {
   2940       __count: 1,
   2941       id: interactionIDCounter++,
   2942       name: name,
   2943       timestamp: timestamp
   2944     };
   2945     var prevInteractions = interactionsRef.current; // Traced interactions should stack/accumulate.
   2946     // To do that, clone the current interactions.
   2947     // The previous set will be restored upon completion.
   2948 
   2949     var interactions = new Set(prevInteractions);
   2950     interactions.add(interaction);
   2951     interactionsRef.current = interactions;
   2952     var subscriber = subscriberRef.current;
   2953     var returnValue;
   2954 
   2955     try {
   2956       if (subscriber !== null) {
   2957         subscriber.onInteractionTraced(interaction);
   2958       }
   2959     } finally {
   2960       try {
   2961         if (subscriber !== null) {
   2962           subscriber.onWorkStarted(interactions, threadID);
   2963         }
   2964       } finally {
   2965         try {
   2966           returnValue = callback();
   2967         } finally {
   2968           interactionsRef.current = prevInteractions;
   2969 
   2970           try {
   2971             if (subscriber !== null) {
   2972               subscriber.onWorkStopped(interactions, threadID);
   2973             }
   2974           } finally {
   2975             interaction.__count--; // If no async work was scheduled for this interaction,
   2976             // Notify subscribers that it's completed.
   2977 
   2978             if (subscriber !== null && interaction.__count === 0) {
   2979               subscriber.onInteractionScheduledWorkCompleted(interaction);
   2980             }
   2981           }
   2982         }
   2983       }
   2984     }
   2985 
   2986     return returnValue;
   2987   }
   2988   function unstable_wrap(callback) {
   2989     var threadID = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_THREAD_ID;
   2990 
   2991     var wrappedInteractions = interactionsRef.current;
   2992     var subscriber = subscriberRef.current;
   2993 
   2994     if (subscriber !== null) {
   2995       subscriber.onWorkScheduled(wrappedInteractions, threadID);
   2996     } // Update the pending async work count for the current interactions.
   2997     // Update after calling subscribers in case of error.
   2998 
   2999 
   3000     wrappedInteractions.forEach(function (interaction) {
   3001       interaction.__count++;
   3002     });
   3003     var hasRun = false;
   3004 
   3005     function wrapped() {
   3006       var prevInteractions = interactionsRef.current;
   3007       interactionsRef.current = wrappedInteractions;
   3008       subscriber = subscriberRef.current;
   3009 
   3010       try {
   3011         var returnValue;
   3012 
   3013         try {
   3014           if (subscriber !== null) {
   3015             subscriber.onWorkStarted(wrappedInteractions, threadID);
   3016           }
   3017         } finally {
   3018           try {
   3019             returnValue = callback.apply(undefined, arguments);
   3020           } finally {
   3021             interactionsRef.current = prevInteractions;
   3022 
   3023             if (subscriber !== null) {
   3024               subscriber.onWorkStopped(wrappedInteractions, threadID);
   3025             }
   3026           }
   3027         }
   3028 
   3029         return returnValue;
   3030       } finally {
   3031         if (!hasRun) {
   3032           // We only expect a wrapped function to be executed once,
   3033           // But in the event that it's executed more than once–
   3034           // Only decrement the outstanding interaction counts once.
   3035           hasRun = true; // Update pending async counts for all wrapped interactions.
   3036           // If this was the last scheduled async work for any of them,
   3037           // Mark them as completed.
   3038 
   3039           wrappedInteractions.forEach(function (interaction) {
   3040             interaction.__count--;
   3041 
   3042             if (subscriber !== null && interaction.__count === 0) {
   3043               subscriber.onInteractionScheduledWorkCompleted(interaction);
   3044             }
   3045           });
   3046         }
   3047       }
   3048     }
   3049 
   3050     wrapped.cancel = function cancel() {
   3051       subscriber = subscriberRef.current;
   3052 
   3053       try {
   3054         if (subscriber !== null) {
   3055           subscriber.onWorkCanceled(wrappedInteractions, threadID);
   3056         }
   3057       } finally {
   3058         // Update pending async counts for all wrapped interactions.
   3059         // If this was the last scheduled async work for any of them,
   3060         // Mark them as completed.
   3061         wrappedInteractions.forEach(function (interaction) {
   3062           interaction.__count--;
   3063 
   3064           if (subscriber && interaction.__count === 0) {
   3065             subscriber.onInteractionScheduledWorkCompleted(interaction);
   3066           }
   3067         });
   3068       }
   3069     };
   3070 
   3071     return wrapped;
   3072   }
   3073 
   3074   var subscribers = null;
   3075 
   3076   {
   3077     subscribers = new Set();
   3078   }
   3079 
   3080   function unstable_subscribe(subscriber) {
   3081     {
   3082       subscribers.add(subscriber);
   3083 
   3084       if (subscribers.size === 1) {
   3085         subscriberRef.current = {
   3086           onInteractionScheduledWorkCompleted: onInteractionScheduledWorkCompleted,
   3087           onInteractionTraced: onInteractionTraced,
   3088           onWorkCanceled: onWorkCanceled,
   3089           onWorkScheduled: onWorkScheduled,
   3090           onWorkStarted: onWorkStarted,
   3091           onWorkStopped: onWorkStopped
   3092         };
   3093       }
   3094     }
   3095   }
   3096   function unstable_unsubscribe(subscriber) {
   3097     {
   3098       subscribers.delete(subscriber);
   3099 
   3100       if (subscribers.size === 0) {
   3101         subscriberRef.current = null;
   3102       }
   3103     }
   3104   }
   3105 
   3106   function onInteractionTraced(interaction) {
   3107     var didCatchError = false;
   3108     var caughtError = null;
   3109     subscribers.forEach(function (subscriber) {
   3110       try {
   3111         subscriber.onInteractionTraced(interaction);
   3112       } catch (error) {
   3113         if (!didCatchError) {
   3114           didCatchError = true;
   3115           caughtError = error;
   3116         }
   3117       }
   3118     });
   3119 
   3120     if (didCatchError) {
   3121       throw caughtError;
   3122     }
   3123   }
   3124 
   3125   function onInteractionScheduledWorkCompleted(interaction) {
   3126     var didCatchError = false;
   3127     var caughtError = null;
   3128     subscribers.forEach(function (subscriber) {
   3129       try {
   3130         subscriber.onInteractionScheduledWorkCompleted(interaction);
   3131       } catch (error) {
   3132         if (!didCatchError) {
   3133           didCatchError = true;
   3134           caughtError = error;
   3135         }
   3136       }
   3137     });
   3138 
   3139     if (didCatchError) {
   3140       throw caughtError;
   3141     }
   3142   }
   3143 
   3144   function onWorkScheduled(interactions, threadID) {
   3145     var didCatchError = false;
   3146     var caughtError = null;
   3147     subscribers.forEach(function (subscriber) {
   3148       try {
   3149         subscriber.onWorkScheduled(interactions, threadID);
   3150       } catch (error) {
   3151         if (!didCatchError) {
   3152           didCatchError = true;
   3153           caughtError = error;
   3154         }
   3155       }
   3156     });
   3157 
   3158     if (didCatchError) {
   3159       throw caughtError;
   3160     }
   3161   }
   3162 
   3163   function onWorkStarted(interactions, threadID) {
   3164     var didCatchError = false;
   3165     var caughtError = null;
   3166     subscribers.forEach(function (subscriber) {
   3167       try {
   3168         subscriber.onWorkStarted(interactions, threadID);
   3169       } catch (error) {
   3170         if (!didCatchError) {
   3171           didCatchError = true;
   3172           caughtError = error;
   3173         }
   3174       }
   3175     });
   3176 
   3177     if (didCatchError) {
   3178       throw caughtError;
   3179     }
   3180   }
   3181 
   3182   function onWorkStopped(interactions, threadID) {
   3183     var didCatchError = false;
   3184     var caughtError = null;
   3185     subscribers.forEach(function (subscriber) {
   3186       try {
   3187         subscriber.onWorkStopped(interactions, threadID);
   3188       } catch (error) {
   3189         if (!didCatchError) {
   3190           didCatchError = true;
   3191           caughtError = error;
   3192         }
   3193       }
   3194     });
   3195 
   3196     if (didCatchError) {
   3197       throw caughtError;
   3198     }
   3199   }
   3200 
   3201   function onWorkCanceled(interactions, threadID) {
   3202     var didCatchError = false;
   3203     var caughtError = null;
   3204     subscribers.forEach(function (subscriber) {
   3205       try {
   3206         subscriber.onWorkCanceled(interactions, threadID);
   3207       } catch (error) {
   3208         if (!didCatchError) {
   3209           didCatchError = true;
   3210           caughtError = error;
   3211         }
   3212       }
   3213     });
   3214 
   3215     if (didCatchError) {
   3216       throw caughtError;
   3217     }
   3218   }
   3219 
   3220 
   3221 
   3222   var SchedulerTracing = /*#__PURE__*/Object.freeze({
   3223     __proto__: null,
   3224     get __interactionsRef () { return interactionsRef; },
   3225     get __subscriberRef () { return subscriberRef; },
   3226     unstable_clear: unstable_clear,
   3227     unstable_getCurrent: unstable_getCurrent,
   3228     unstable_getThreadID: unstable_getThreadID,
   3229     unstable_trace: unstable_trace,
   3230     unstable_wrap: unstable_wrap,
   3231     unstable_subscribe: unstable_subscribe,
   3232     unstable_unsubscribe: unstable_unsubscribe
   3233   });
   3234 
   3235   var ReactSharedInternals$1 = {
   3236     ReactCurrentDispatcher: ReactCurrentDispatcher,
   3237     ReactCurrentOwner: ReactCurrentOwner,
   3238     IsSomeRendererActing: IsSomeRendererActing,
   3239     // Used by renderers to avoid bundling object-assign twice in UMD bundles:
   3240     assign: objectAssign
   3241   };
   3242 
   3243   {
   3244     objectAssign(ReactSharedInternals$1, {
   3245       // These should not be included in production.
   3246       ReactDebugCurrentFrame: ReactDebugCurrentFrame,
   3247       // Shim for React DOM 16.0.0 which still destructured (but not used) this.
   3248       // TODO: remove in React 17.0.
   3249       ReactComponentTreeHook: {}
   3250     });
   3251   } // Re-export the schedule API(s) for UMD bundles.
   3252   // This avoids introducing a dependency on a new UMD global in a minor update,
   3253   // Since that would be a breaking change (e.g. for all existing CodeSandboxes).
   3254   // This re-export is only required for UMD bundles;
   3255   // CJS bundles use the shared NPM package.
   3256 
   3257 
   3258   objectAssign(ReactSharedInternals$1, {
   3259     Scheduler: Scheduler,
   3260     SchedulerTracing: SchedulerTracing
   3261   });
   3262 
   3263   {
   3264 
   3265     try {
   3266       var frozenObject = Object.freeze({});
   3267       var testMap = new Map([[frozenObject, null]]);
   3268       var testSet = new Set([frozenObject]); // This is necessary for Rollup to not consider these unused.
   3269       // https://github.com/rollup/rollup/issues/1771
   3270       // TODO: we can remove these if Rollup fixes the bug.
   3271 
   3272       testMap.set(0, 0);
   3273       testSet.add(0);
   3274     } catch (e) {
   3275     }
   3276   }
   3277 
   3278   var createElement$1 =  createElementWithValidation ;
   3279   var cloneElement$1 =  cloneElementWithValidation ;
   3280   var createFactory =  createFactoryWithValidation ;
   3281   var Children = {
   3282     map: mapChildren,
   3283     forEach: forEachChildren,
   3284     count: countChildren,
   3285     toArray: toArray,
   3286     only: onlyChild
   3287   };
   3288 
   3289   exports.Children = Children;
   3290   exports.Component = Component;
   3291   exports.Fragment = REACT_FRAGMENT_TYPE;
   3292   exports.Profiler = REACT_PROFILER_TYPE;
   3293   exports.PureComponent = PureComponent;
   3294   exports.StrictMode = REACT_STRICT_MODE_TYPE;
   3295   exports.Suspense = REACT_SUSPENSE_TYPE;
   3296   exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactSharedInternals$1;
   3297   exports.cloneElement = cloneElement$1;
   3298   exports.createContext = createContext;
   3299   exports.createElement = createElement$1;
   3300   exports.createFactory = createFactory;
   3301   exports.createRef = createRef;
   3302   exports.forwardRef = forwardRef;
   3303   exports.isValidElement = isValidElement;
   3304   exports.lazy = lazy;
   3305   exports.memo = memo;
   3306   exports.useCallback = useCallback;
   3307   exports.useContext = useContext;
   3308   exports.useDebugValue = useDebugValue;
   3309   exports.useEffect = useEffect;
   3310   exports.useImperativeHandle = useImperativeHandle;
   3311   exports.useLayoutEffect = useLayoutEffect;
   3312   exports.useMemo = useMemo;
   3313   exports.useReducer = useReducer;
   3314   exports.useRef = useRef;
   3315   exports.useState = useState;
   3316   exports.version = ReactVersion;
   3317 
   3318 })));