UNPKG

60.6 kBJavaScriptView Raw
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
13
14if (process.env.NODE_ENV !== "production") {
15 (function() {
16'use strict';
17
18var _assign = require('object-assign');
19var checkPropTypes = require('prop-types/checkPropTypes');
20
21var ReactVersion = '16.13.1';
22
23// The Symbol used to tag the ReactElement-like types. If there is no native Symbol
24// nor polyfill, then a plain number is used for performance.
25var hasSymbol = typeof Symbol === 'function' && Symbol.for;
26var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;
27var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;
28var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;
29var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;
30var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;
31var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;
32var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary
33var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;
34var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;
35var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;
36var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;
37var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;
38var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;
39var REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;
40var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;
41var REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;
42var REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;
43var MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
44var FAUX_ITERATOR_SYMBOL = '@@iterator';
45function getIteratorFn(maybeIterable) {
46 if (maybeIterable === null || typeof maybeIterable !== 'object') {
47 return null;
48 }
49
50 var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];
51
52 if (typeof maybeIterator === 'function') {
53 return maybeIterator;
54 }
55
56 return null;
57}
58
59/**
60 * Keeps track of the current dispatcher.
61 */
62var ReactCurrentDispatcher = {
63 /**
64 * @internal
65 * @type {ReactComponent}
66 */
67 current: null
68};
69
70/**
71 * Keeps track of the current batch's configuration such as how long an update
72 * should suspend for if it needs to.
73 */
74var ReactCurrentBatchConfig = {
75 suspense: null
76};
77
78/**
79 * Keeps track of the current owner.
80 *
81 * The current owner is the component who should own any components that are
82 * currently being constructed.
83 */
84var ReactCurrentOwner = {
85 /**
86 * @internal
87 * @type {ReactComponent}
88 */
89 current: null
90};
91
92var BEFORE_SLASH_RE = /^(.*)[\\\/]/;
93function describeComponentFrame (name, source, ownerName) {
94 var sourceInfo = '';
95
96 if (source) {
97 var path = source.fileName;
98 var fileName = path.replace(BEFORE_SLASH_RE, '');
99
100 {
101 // In DEV, include code for a common special case:
102 // prefer "folder/index.js" instead of just "index.js".
103 if (/^index\./.test(fileName)) {
104 var match = path.match(BEFORE_SLASH_RE);
105
106 if (match) {
107 var pathBeforeSlash = match[1];
108
109 if (pathBeforeSlash) {
110 var folderName = pathBeforeSlash.replace(BEFORE_SLASH_RE, '');
111 fileName = folderName + '/' + fileName;
112 }
113 }
114 }
115 }
116
117 sourceInfo = ' (at ' + fileName + ':' + source.lineNumber + ')';
118 } else if (ownerName) {
119 sourceInfo = ' (created by ' + ownerName + ')';
120 }
121
122 return '\n in ' + (name || 'Unknown') + sourceInfo;
123}
124
125var Resolved = 1;
126function refineResolvedLazyComponent(lazyComponent) {
127 return lazyComponent._status === Resolved ? lazyComponent._result : null;
128}
129
130function getWrappedName(outerType, innerType, wrapperName) {
131 var functionName = innerType.displayName || innerType.name || '';
132 return outerType.displayName || (functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName);
133}
134
135function getComponentName(type) {
136 if (type == null) {
137 // Host root, text node or just invalid type.
138 return null;
139 }
140
141 {
142 if (typeof type.tag === 'number') {
143 error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');
144 }
145 }
146
147 if (typeof type === 'function') {
148 return type.displayName || type.name || null;
149 }
150
151 if (typeof type === 'string') {
152 return type;
153 }
154
155 switch (type) {
156 case REACT_FRAGMENT_TYPE:
157 return 'Fragment';
158
159 case REACT_PORTAL_TYPE:
160 return 'Portal';
161
162 case REACT_PROFILER_TYPE:
163 return "Profiler";
164
165 case REACT_STRICT_MODE_TYPE:
166 return 'StrictMode';
167
168 case REACT_SUSPENSE_TYPE:
169 return 'Suspense';
170
171 case REACT_SUSPENSE_LIST_TYPE:
172 return 'SuspenseList';
173 }
174
175 if (typeof type === 'object') {
176 switch (type.$$typeof) {
177 case REACT_CONTEXT_TYPE:
178 return 'Context.Consumer';
179
180 case REACT_PROVIDER_TYPE:
181 return 'Context.Provider';
182
183 case REACT_FORWARD_REF_TYPE:
184 return getWrappedName(type, type.render, 'ForwardRef');
185
186 case REACT_MEMO_TYPE:
187 return getComponentName(type.type);
188
189 case REACT_BLOCK_TYPE:
190 return getComponentName(type.render);
191
192 case REACT_LAZY_TYPE:
193 {
194 var thenable = type;
195 var resolvedThenable = refineResolvedLazyComponent(thenable);
196
197 if (resolvedThenable) {
198 return getComponentName(resolvedThenable);
199 }
200
201 break;
202 }
203 }
204 }
205
206 return null;
207}
208
209var ReactDebugCurrentFrame = {};
210var currentlyValidatingElement = null;
211function setCurrentlyValidatingElement(element) {
212 {
213 currentlyValidatingElement = element;
214 }
215}
216
217{
218 // Stack implementation injected by the current renderer.
219 ReactDebugCurrentFrame.getCurrentStack = null;
220
221 ReactDebugCurrentFrame.getStackAddendum = function () {
222 var stack = ''; // Add an extra top frame while an element is being validated
223
224 if (currentlyValidatingElement) {
225 var name = getComponentName(currentlyValidatingElement.type);
226 var owner = currentlyValidatingElement._owner;
227 stack += describeComponentFrame(name, currentlyValidatingElement._source, owner && getComponentName(owner.type));
228 } // Delegate to the injected renderer-specific implementation
229
230
231 var impl = ReactDebugCurrentFrame.getCurrentStack;
232
233 if (impl) {
234 stack += impl() || '';
235 }
236
237 return stack;
238 };
239}
240
241/**
242 * Used by act() to track whether you're inside an act() scope.
243 */
244var IsSomeRendererActing = {
245 current: false
246};
247
248var ReactSharedInternals = {
249 ReactCurrentDispatcher: ReactCurrentDispatcher,
250 ReactCurrentBatchConfig: ReactCurrentBatchConfig,
251 ReactCurrentOwner: ReactCurrentOwner,
252 IsSomeRendererActing: IsSomeRendererActing,
253 // Used by renderers to avoid bundling object-assign twice in UMD bundles:
254 assign: _assign
255};
256
257{
258 _assign(ReactSharedInternals, {
259 // These should not be included in production.
260 ReactDebugCurrentFrame: ReactDebugCurrentFrame,
261 // Shim for React DOM 16.0.0 which still destructured (but not used) this.
262 // TODO: remove in React 17.0.
263 ReactComponentTreeHook: {}
264 });
265}
266
267// by calls to these methods by a Babel plugin.
268//
269// In PROD (or in packages without access to React internals),
270// they are left as they are instead.
271
272function warn(format) {
273 {
274 for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
275 args[_key - 1] = arguments[_key];
276 }
277
278 printWarning('warn', format, args);
279 }
280}
281function error(format) {
282 {
283 for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
284 args[_key2 - 1] = arguments[_key2];
285 }
286
287 printWarning('error', format, args);
288 }
289}
290
291function printWarning(level, format, args) {
292 // When changing this logic, you might want to also
293 // update consoleWithStackDev.www.js as well.
294 {
295 var hasExistingStack = args.length > 0 && typeof args[args.length - 1] === 'string' && args[args.length - 1].indexOf('\n in') === 0;
296
297 if (!hasExistingStack) {
298 var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;
299 var stack = ReactDebugCurrentFrame.getStackAddendum();
300
301 if (stack !== '') {
302 format += '%s';
303 args = args.concat([stack]);
304 }
305 }
306
307 var argsWithFormat = args.map(function (item) {
308 return '' + item;
309 }); // Careful: RN currently depends on this prefix
310
311 argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it
312 // breaks IE9: https://github.com/facebook/react/issues/13610
313 // eslint-disable-next-line react-internal/no-production-logging
314
315 Function.prototype.apply.call(console[level], console, argsWithFormat);
316
317 try {
318 // --- Welcome to debugging React ---
319 // This error was thrown as a convenience so that you can use this stack
320 // to find the callsite that caused this warning to fire.
321 var argIndex = 0;
322 var message = 'Warning: ' + format.replace(/%s/g, function () {
323 return args[argIndex++];
324 });
325 throw new Error(message);
326 } catch (x) {}
327 }
328}
329
330var didWarnStateUpdateForUnmountedComponent = {};
331
332function warnNoop(publicInstance, callerName) {
333 {
334 var _constructor = publicInstance.constructor;
335 var componentName = _constructor && (_constructor.displayName || _constructor.name) || 'ReactClass';
336 var warningKey = componentName + "." + callerName;
337
338 if (didWarnStateUpdateForUnmountedComponent[warningKey]) {
339 return;
340 }
341
342 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);
343
344 didWarnStateUpdateForUnmountedComponent[warningKey] = true;
345 }
346}
347/**
348 * This is the abstract API for an update queue.
349 */
350
351
352var ReactNoopUpdateQueue = {
353 /**
354 * Checks whether or not this composite component is mounted.
355 * @param {ReactClass} publicInstance The instance we want to test.
356 * @return {boolean} True if mounted, false otherwise.
357 * @protected
358 * @final
359 */
360 isMounted: function (publicInstance) {
361 return false;
362 },
363
364 /**
365 * Forces an update. This should only be invoked when it is known with
366 * certainty that we are **not** in a DOM transaction.
367 *
368 * You may want to call this when you know that some deeper aspect of the
369 * component's state has changed but `setState` was not called.
370 *
371 * This will not invoke `shouldComponentUpdate`, but it will invoke
372 * `componentWillUpdate` and `componentDidUpdate`.
373 *
374 * @param {ReactClass} publicInstance The instance that should rerender.
375 * @param {?function} callback Called after component is updated.
376 * @param {?string} callerName name of the calling function in the public API.
377 * @internal
378 */
379 enqueueForceUpdate: function (publicInstance, callback, callerName) {
380 warnNoop(publicInstance, 'forceUpdate');
381 },
382
383 /**
384 * Replaces all of the state. Always use this or `setState` to mutate state.
385 * You should treat `this.state` as immutable.
386 *
387 * There is no guarantee that `this.state` will be immediately updated, so
388 * accessing `this.state` after calling this method may return the old value.
389 *
390 * @param {ReactClass} publicInstance The instance that should rerender.
391 * @param {object} completeState Next state.
392 * @param {?function} callback Called after component is updated.
393 * @param {?string} callerName name of the calling function in the public API.
394 * @internal
395 */
396 enqueueReplaceState: function (publicInstance, completeState, callback, callerName) {
397 warnNoop(publicInstance, 'replaceState');
398 },
399
400 /**
401 * Sets a subset of the state. This only exists because _pendingState is
402 * internal. This provides a merging strategy that is not available to deep
403 * properties which is confusing. TODO: Expose pendingState or don't use it
404 * during the merge.
405 *
406 * @param {ReactClass} publicInstance The instance that should rerender.
407 * @param {object} partialState Next partial state to be merged with state.
408 * @param {?function} callback Called after component is updated.
409 * @param {?string} Name of the calling function in the public API.
410 * @internal
411 */
412 enqueueSetState: function (publicInstance, partialState, callback, callerName) {
413 warnNoop(publicInstance, 'setState');
414 }
415};
416
417var emptyObject = {};
418
419{
420 Object.freeze(emptyObject);
421}
422/**
423 * Base class helpers for the updating state of a component.
424 */
425
426
427function Component(props, context, updater) {
428 this.props = props;
429 this.context = context; // If a component has string refs, we will assign a different object later.
430
431 this.refs = emptyObject; // We initialize the default updater but the real one gets injected by the
432 // renderer.
433
434 this.updater = updater || ReactNoopUpdateQueue;
435}
436
437Component.prototype.isReactComponent = {};
438/**
439 * Sets a subset of the state. Always use this to mutate
440 * state. You should treat `this.state` as immutable.
441 *
442 * There is no guarantee that `this.state` will be immediately updated, so
443 * accessing `this.state` after calling this method may return the old value.
444 *
445 * There is no guarantee that calls to `setState` will run synchronously,
446 * as they may eventually be batched together. You can provide an optional
447 * callback that will be executed when the call to setState is actually
448 * completed.
449 *
450 * When a function is provided to setState, it will be called at some point in
451 * the future (not synchronously). It will be called with the up to date
452 * component arguments (state, props, context). These values can be different
453 * from this.* because your function may be called after receiveProps but before
454 * shouldComponentUpdate, and this new state, props, and context will not yet be
455 * assigned to this.
456 *
457 * @param {object|function} partialState Next partial state or function to
458 * produce next partial state to be merged with current state.
459 * @param {?function} callback Called after state is updated.
460 * @final
461 * @protected
462 */
463
464Component.prototype.setState = function (partialState, callback) {
465 if (!(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null)) {
466 {
467 throw Error( "setState(...): takes an object of state variables to update or a function which returns an object of state variables." );
468 }
469 }
470
471 this.updater.enqueueSetState(this, partialState, callback, 'setState');
472};
473/**
474 * Forces an update. This should only be invoked when it is known with
475 * certainty that we are **not** in a DOM transaction.
476 *
477 * You may want to call this when you know that some deeper aspect of the
478 * component's state has changed but `setState` was not called.
479 *
480 * This will not invoke `shouldComponentUpdate`, but it will invoke
481 * `componentWillUpdate` and `componentDidUpdate`.
482 *
483 * @param {?function} callback Called after update is complete.
484 * @final
485 * @protected
486 */
487
488
489Component.prototype.forceUpdate = function (callback) {
490 this.updater.enqueueForceUpdate(this, callback, 'forceUpdate');
491};
492/**
493 * Deprecated APIs. These APIs used to exist on classic React classes but since
494 * we would like to deprecate them, we're not going to move them over to this
495 * modern base class. Instead, we define a getter that warns if it's accessed.
496 */
497
498
499{
500 var deprecatedAPIs = {
501 isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],
502 replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']
503 };
504
505 var defineDeprecationWarning = function (methodName, info) {
506 Object.defineProperty(Component.prototype, methodName, {
507 get: function () {
508 warn('%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]);
509
510 return undefined;
511 }
512 });
513 };
514
515 for (var fnName in deprecatedAPIs) {
516 if (deprecatedAPIs.hasOwnProperty(fnName)) {
517 defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);
518 }
519 }
520}
521
522function ComponentDummy() {}
523
524ComponentDummy.prototype = Component.prototype;
525/**
526 * Convenience component with default shallow equality check for sCU.
527 */
528
529function PureComponent(props, context, updater) {
530 this.props = props;
531 this.context = context; // If a component has string refs, we will assign a different object later.
532
533 this.refs = emptyObject;
534 this.updater = updater || ReactNoopUpdateQueue;
535}
536
537var pureComponentPrototype = PureComponent.prototype = new ComponentDummy();
538pureComponentPrototype.constructor = PureComponent; // Avoid an extra prototype jump for these methods.
539
540_assign(pureComponentPrototype, Component.prototype);
541
542pureComponentPrototype.isPureReactComponent = true;
543
544// an immutable object with a single mutable value
545function createRef() {
546 var refObject = {
547 current: null
548 };
549
550 {
551 Object.seal(refObject);
552 }
553
554 return refObject;
555}
556
557var hasOwnProperty = Object.prototype.hasOwnProperty;
558var RESERVED_PROPS = {
559 key: true,
560 ref: true,
561 __self: true,
562 __source: true
563};
564var specialPropKeyWarningShown, specialPropRefWarningShown, didWarnAboutStringRefs;
565
566{
567 didWarnAboutStringRefs = {};
568}
569
570function hasValidRef(config) {
571 {
572 if (hasOwnProperty.call(config, 'ref')) {
573 var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;
574
575 if (getter && getter.isReactWarning) {
576 return false;
577 }
578 }
579 }
580
581 return config.ref !== undefined;
582}
583
584function hasValidKey(config) {
585 {
586 if (hasOwnProperty.call(config, 'key')) {
587 var getter = Object.getOwnPropertyDescriptor(config, 'key').get;
588
589 if (getter && getter.isReactWarning) {
590 return false;
591 }
592 }
593 }
594
595 return config.key !== undefined;
596}
597
598function defineKeyPropWarningGetter(props, displayName) {
599 var warnAboutAccessingKey = function () {
600 {
601 if (!specialPropKeyWarningShown) {
602 specialPropKeyWarningShown = true;
603
604 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);
605 }
606 }
607 };
608
609 warnAboutAccessingKey.isReactWarning = true;
610 Object.defineProperty(props, 'key', {
611 get: warnAboutAccessingKey,
612 configurable: true
613 });
614}
615
616function defineRefPropWarningGetter(props, displayName) {
617 var warnAboutAccessingRef = function () {
618 {
619 if (!specialPropRefWarningShown) {
620 specialPropRefWarningShown = true;
621
622 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);
623 }
624 }
625 };
626
627 warnAboutAccessingRef.isReactWarning = true;
628 Object.defineProperty(props, 'ref', {
629 get: warnAboutAccessingRef,
630 configurable: true
631 });
632}
633
634function warnIfStringRefCannotBeAutoConverted(config) {
635 {
636 if (typeof config.ref === 'string' && ReactCurrentOwner.current && config.__self && ReactCurrentOwner.current.stateNode !== config.__self) {
637 var componentName = getComponentName(ReactCurrentOwner.current.type);
638
639 if (!didWarnAboutStringRefs[componentName]) {
640 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);
641
642 didWarnAboutStringRefs[componentName] = true;
643 }
644 }
645 }
646}
647/**
648 * Factory method to create a new React element. This no longer adheres to
649 * the class pattern, so do not use new to call it. Also, instanceof check
650 * will not work. Instead test $$typeof field against Symbol.for('react.element') to check
651 * if something is a React Element.
652 *
653 * @param {*} type
654 * @param {*} props
655 * @param {*} key
656 * @param {string|object} ref
657 * @param {*} owner
658 * @param {*} self A *temporary* helper to detect places where `this` is
659 * different from the `owner` when React.createElement is called, so that we
660 * can warn. We want to get rid of owner and replace string `ref`s with arrow
661 * functions, and as long as `this` and owner are the same, there will be no
662 * change in behavior.
663 * @param {*} source An annotation object (added by a transpiler or otherwise)
664 * indicating filename, line number, and/or other information.
665 * @internal
666 */
667
668
669var ReactElement = function (type, key, ref, self, source, owner, props) {
670 var element = {
671 // This tag allows us to uniquely identify this as a React Element
672 $$typeof: REACT_ELEMENT_TYPE,
673 // Built-in properties that belong on the element
674 type: type,
675 key: key,
676 ref: ref,
677 props: props,
678 // Record the component responsible for creating this element.
679 _owner: owner
680 };
681
682 {
683 // The validation flag is currently mutative. We put it on
684 // an external backing store so that we can freeze the whole object.
685 // This can be replaced with a WeakMap once they are implemented in
686 // commonly used development environments.
687 element._store = {}; // To make comparing ReactElements easier for testing purposes, we make
688 // the validation flag non-enumerable (where possible, which should
689 // include every environment we run tests in), so the test framework
690 // ignores it.
691
692 Object.defineProperty(element._store, 'validated', {
693 configurable: false,
694 enumerable: false,
695 writable: true,
696 value: false
697 }); // self and source are DEV only properties.
698
699 Object.defineProperty(element, '_self', {
700 configurable: false,
701 enumerable: false,
702 writable: false,
703 value: self
704 }); // Two elements created in two different places should be considered
705 // equal for testing purposes and therefore we hide it from enumeration.
706
707 Object.defineProperty(element, '_source', {
708 configurable: false,
709 enumerable: false,
710 writable: false,
711 value: source
712 });
713
714 if (Object.freeze) {
715 Object.freeze(element.props);
716 Object.freeze(element);
717 }
718 }
719
720 return element;
721};
722/**
723 * Create and return a new ReactElement of the given type.
724 * See https://reactjs.org/docs/react-api.html#createelement
725 */
726
727function createElement(type, config, children) {
728 var propName; // Reserved names are extracted
729
730 var props = {};
731 var key = null;
732 var ref = null;
733 var self = null;
734 var source = null;
735
736 if (config != null) {
737 if (hasValidRef(config)) {
738 ref = config.ref;
739
740 {
741 warnIfStringRefCannotBeAutoConverted(config);
742 }
743 }
744
745 if (hasValidKey(config)) {
746 key = '' + config.key;
747 }
748
749 self = config.__self === undefined ? null : config.__self;
750 source = config.__source === undefined ? null : config.__source; // Remaining properties are added to a new props object
751
752 for (propName in config) {
753 if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
754 props[propName] = config[propName];
755 }
756 }
757 } // Children can be more than one argument, and those are transferred onto
758 // the newly allocated props object.
759
760
761 var childrenLength = arguments.length - 2;
762
763 if (childrenLength === 1) {
764 props.children = children;
765 } else if (childrenLength > 1) {
766 var childArray = Array(childrenLength);
767
768 for (var i = 0; i < childrenLength; i++) {
769 childArray[i] = arguments[i + 2];
770 }
771
772 {
773 if (Object.freeze) {
774 Object.freeze(childArray);
775 }
776 }
777
778 props.children = childArray;
779 } // Resolve default props
780
781
782 if (type && type.defaultProps) {
783 var defaultProps = type.defaultProps;
784
785 for (propName in defaultProps) {
786 if (props[propName] === undefined) {
787 props[propName] = defaultProps[propName];
788 }
789 }
790 }
791
792 {
793 if (key || ref) {
794 var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;
795
796 if (key) {
797 defineKeyPropWarningGetter(props, displayName);
798 }
799
800 if (ref) {
801 defineRefPropWarningGetter(props, displayName);
802 }
803 }
804 }
805
806 return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);
807}
808function cloneAndReplaceKey(oldElement, newKey) {
809 var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);
810 return newElement;
811}
812/**
813 * Clone and return a new ReactElement using element as the starting point.
814 * See https://reactjs.org/docs/react-api.html#cloneelement
815 */
816
817function cloneElement(element, config, children) {
818 if (!!(element === null || element === undefined)) {
819 {
820 throw Error( "React.cloneElement(...): The argument must be a React element, but you passed " + element + "." );
821 }
822 }
823
824 var propName; // Original props are copied
825
826 var props = _assign({}, element.props); // Reserved names are extracted
827
828
829 var key = element.key;
830 var ref = element.ref; // Self is preserved since the owner is preserved.
831
832 var self = element._self; // Source is preserved since cloneElement is unlikely to be targeted by a
833 // transpiler, and the original source is probably a better indicator of the
834 // true owner.
835
836 var source = element._source; // Owner will be preserved, unless ref is overridden
837
838 var owner = element._owner;
839
840 if (config != null) {
841 if (hasValidRef(config)) {
842 // Silently steal the ref from the parent.
843 ref = config.ref;
844 owner = ReactCurrentOwner.current;
845 }
846
847 if (hasValidKey(config)) {
848 key = '' + config.key;
849 } // Remaining properties override existing props
850
851
852 var defaultProps;
853
854 if (element.type && element.type.defaultProps) {
855 defaultProps = element.type.defaultProps;
856 }
857
858 for (propName in config) {
859 if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
860 if (config[propName] === undefined && defaultProps !== undefined) {
861 // Resolve default props
862 props[propName] = defaultProps[propName];
863 } else {
864 props[propName] = config[propName];
865 }
866 }
867 }
868 } // Children can be more than one argument, and those are transferred onto
869 // the newly allocated props object.
870
871
872 var childrenLength = arguments.length - 2;
873
874 if (childrenLength === 1) {
875 props.children = children;
876 } else if (childrenLength > 1) {
877 var childArray = Array(childrenLength);
878
879 for (var i = 0; i < childrenLength; i++) {
880 childArray[i] = arguments[i + 2];
881 }
882
883 props.children = childArray;
884 }
885
886 return ReactElement(element.type, key, ref, self, source, owner, props);
887}
888/**
889 * Verifies the object is a ReactElement.
890 * See https://reactjs.org/docs/react-api.html#isvalidelement
891 * @param {?object} object
892 * @return {boolean} True if `object` is a ReactElement.
893 * @final
894 */
895
896function isValidElement(object) {
897 return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
898}
899
900var SEPARATOR = '.';
901var SUBSEPARATOR = ':';
902/**
903 * Escape and wrap key so it is safe to use as a reactid
904 *
905 * @param {string} key to be escaped.
906 * @return {string} the escaped key.
907 */
908
909function escape(key) {
910 var escapeRegex = /[=:]/g;
911 var escaperLookup = {
912 '=': '=0',
913 ':': '=2'
914 };
915 var escapedString = ('' + key).replace(escapeRegex, function (match) {
916 return escaperLookup[match];
917 });
918 return '$' + escapedString;
919}
920/**
921 * TODO: Test that a single child and an array with one item have the same key
922 * pattern.
923 */
924
925
926var didWarnAboutMaps = false;
927var userProvidedKeyEscapeRegex = /\/+/g;
928
929function escapeUserProvidedKey(text) {
930 return ('' + text).replace(userProvidedKeyEscapeRegex, '$&/');
931}
932
933var POOL_SIZE = 10;
934var traverseContextPool = [];
935
936function getPooledTraverseContext(mapResult, keyPrefix, mapFunction, mapContext) {
937 if (traverseContextPool.length) {
938 var traverseContext = traverseContextPool.pop();
939 traverseContext.result = mapResult;
940 traverseContext.keyPrefix = keyPrefix;
941 traverseContext.func = mapFunction;
942 traverseContext.context = mapContext;
943 traverseContext.count = 0;
944 return traverseContext;
945 } else {
946 return {
947 result: mapResult,
948 keyPrefix: keyPrefix,
949 func: mapFunction,
950 context: mapContext,
951 count: 0
952 };
953 }
954}
955
956function releaseTraverseContext(traverseContext) {
957 traverseContext.result = null;
958 traverseContext.keyPrefix = null;
959 traverseContext.func = null;
960 traverseContext.context = null;
961 traverseContext.count = 0;
962
963 if (traverseContextPool.length < POOL_SIZE) {
964 traverseContextPool.push(traverseContext);
965 }
966}
967/**
968 * @param {?*} children Children tree container.
969 * @param {!string} nameSoFar Name of the key path so far.
970 * @param {!function} callback Callback to invoke with each child found.
971 * @param {?*} traverseContext Used to pass information throughout the traversal
972 * process.
973 * @return {!number} The number of children in this subtree.
974 */
975
976
977function traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {
978 var type = typeof children;
979
980 if (type === 'undefined' || type === 'boolean') {
981 // All of the above are perceived as null.
982 children = null;
983 }
984
985 var invokeCallback = false;
986
987 if (children === null) {
988 invokeCallback = true;
989 } else {
990 switch (type) {
991 case 'string':
992 case 'number':
993 invokeCallback = true;
994 break;
995
996 case 'object':
997 switch (children.$$typeof) {
998 case REACT_ELEMENT_TYPE:
999 case REACT_PORTAL_TYPE:
1000 invokeCallback = true;
1001 }
1002
1003 }
1004 }
1005
1006 if (invokeCallback) {
1007 callback(traverseContext, children, // If it's the only child, treat the name as if it was wrapped in an array
1008 // so that it's consistent if the number of children grows.
1009 nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);
1010 return 1;
1011 }
1012
1013 var child;
1014 var nextName;
1015 var subtreeCount = 0; // Count of children found in the current subtree.
1016
1017 var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;
1018
1019 if (Array.isArray(children)) {
1020 for (var i = 0; i < children.length; i++) {
1021 child = children[i];
1022 nextName = nextNamePrefix + getComponentKey(child, i);
1023 subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);
1024 }
1025 } else {
1026 var iteratorFn = getIteratorFn(children);
1027
1028 if (typeof iteratorFn === 'function') {
1029
1030 {
1031 // Warn about using Maps as children
1032 if (iteratorFn === children.entries) {
1033 if (!didWarnAboutMaps) {
1034 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.');
1035 }
1036
1037 didWarnAboutMaps = true;
1038 }
1039 }
1040
1041 var iterator = iteratorFn.call(children);
1042 var step;
1043 var ii = 0;
1044
1045 while (!(step = iterator.next()).done) {
1046 child = step.value;
1047 nextName = nextNamePrefix + getComponentKey(child, ii++);
1048 subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);
1049 }
1050 } else if (type === 'object') {
1051 var addendum = '';
1052
1053 {
1054 addendum = ' If you meant to render a collection of children, use an array ' + 'instead.' + ReactDebugCurrentFrame.getStackAddendum();
1055 }
1056
1057 var childrenString = '' + children;
1058
1059 {
1060 {
1061 throw Error( "Objects are not valid as a React child (found: " + (childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString) + ")." + addendum );
1062 }
1063 }
1064 }
1065 }
1066
1067 return subtreeCount;
1068}
1069/**
1070 * Traverses children that are typically specified as `props.children`, but
1071 * might also be specified through attributes:
1072 *
1073 * - `traverseAllChildren(this.props.children, ...)`
1074 * - `traverseAllChildren(this.props.leftPanelChildren, ...)`
1075 *
1076 * The `traverseContext` is an optional argument that is passed through the
1077 * entire traversal. It can be used to store accumulations or anything else that
1078 * the callback might find relevant.
1079 *
1080 * @param {?*} children Children tree object.
1081 * @param {!function} callback To invoke upon traversing each child.
1082 * @param {?*} traverseContext Context for traversal.
1083 * @return {!number} The number of children in this subtree.
1084 */
1085
1086
1087function traverseAllChildren(children, callback, traverseContext) {
1088 if (children == null) {
1089 return 0;
1090 }
1091
1092 return traverseAllChildrenImpl(children, '', callback, traverseContext);
1093}
1094/**
1095 * Generate a key string that identifies a component within a set.
1096 *
1097 * @param {*} component A component that could contain a manual key.
1098 * @param {number} index Index that is used if a manual key is not provided.
1099 * @return {string}
1100 */
1101
1102
1103function getComponentKey(component, index) {
1104 // Do some typechecking here since we call this blindly. We want to ensure
1105 // that we don't block potential future ES APIs.
1106 if (typeof component === 'object' && component !== null && component.key != null) {
1107 // Explicit key
1108 return escape(component.key);
1109 } // Implicit key determined by the index in the set
1110
1111
1112 return index.toString(36);
1113}
1114
1115function forEachSingleChild(bookKeeping, child, name) {
1116 var func = bookKeeping.func,
1117 context = bookKeeping.context;
1118 func.call(context, child, bookKeeping.count++);
1119}
1120/**
1121 * Iterates through children that are typically specified as `props.children`.
1122 *
1123 * See https://reactjs.org/docs/react-api.html#reactchildrenforeach
1124 *
1125 * The provided forEachFunc(child, index) will be called for each
1126 * leaf child.
1127 *
1128 * @param {?*} children Children tree container.
1129 * @param {function(*, int)} forEachFunc
1130 * @param {*} forEachContext Context for forEachContext.
1131 */
1132
1133
1134function forEachChildren(children, forEachFunc, forEachContext) {
1135 if (children == null) {
1136 return children;
1137 }
1138
1139 var traverseContext = getPooledTraverseContext(null, null, forEachFunc, forEachContext);
1140 traverseAllChildren(children, forEachSingleChild, traverseContext);
1141 releaseTraverseContext(traverseContext);
1142}
1143
1144function mapSingleChildIntoContext(bookKeeping, child, childKey) {
1145 var result = bookKeeping.result,
1146 keyPrefix = bookKeeping.keyPrefix,
1147 func = bookKeeping.func,
1148 context = bookKeeping.context;
1149 var mappedChild = func.call(context, child, bookKeeping.count++);
1150
1151 if (Array.isArray(mappedChild)) {
1152 mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, function (c) {
1153 return c;
1154 });
1155 } else if (mappedChild != null) {
1156 if (isValidElement(mappedChild)) {
1157 mappedChild = cloneAndReplaceKey(mappedChild, // Keep both the (mapped) and old keys if they differ, just as
1158 // traverseAllChildren used to do for objects as children
1159 keyPrefix + (mappedChild.key && (!child || child.key !== mappedChild.key) ? escapeUserProvidedKey(mappedChild.key) + '/' : '') + childKey);
1160 }
1161
1162 result.push(mappedChild);
1163 }
1164}
1165
1166function mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {
1167 var escapedPrefix = '';
1168
1169 if (prefix != null) {
1170 escapedPrefix = escapeUserProvidedKey(prefix) + '/';
1171 }
1172
1173 var traverseContext = getPooledTraverseContext(array, escapedPrefix, func, context);
1174 traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);
1175 releaseTraverseContext(traverseContext);
1176}
1177/**
1178 * Maps children that are typically specified as `props.children`.
1179 *
1180 * See https://reactjs.org/docs/react-api.html#reactchildrenmap
1181 *
1182 * The provided mapFunction(child, key, index) will be called for each
1183 * leaf child.
1184 *
1185 * @param {?*} children Children tree container.
1186 * @param {function(*, int)} func The map function.
1187 * @param {*} context Context for mapFunction.
1188 * @return {object} Object containing the ordered map of results.
1189 */
1190
1191
1192function mapChildren(children, func, context) {
1193 if (children == null) {
1194 return children;
1195 }
1196
1197 var result = [];
1198 mapIntoWithKeyPrefixInternal(children, result, null, func, context);
1199 return result;
1200}
1201/**
1202 * Count the number of children that are typically specified as
1203 * `props.children`.
1204 *
1205 * See https://reactjs.org/docs/react-api.html#reactchildrencount
1206 *
1207 * @param {?*} children Children tree container.
1208 * @return {number} The number of children.
1209 */
1210
1211
1212function countChildren(children) {
1213 return traverseAllChildren(children, function () {
1214 return null;
1215 }, null);
1216}
1217/**
1218 * Flatten a children object (typically specified as `props.children`) and
1219 * return an array with appropriately re-keyed children.
1220 *
1221 * See https://reactjs.org/docs/react-api.html#reactchildrentoarray
1222 */
1223
1224
1225function toArray(children) {
1226 var result = [];
1227 mapIntoWithKeyPrefixInternal(children, result, null, function (child) {
1228 return child;
1229 });
1230 return result;
1231}
1232/**
1233 * Returns the first child in a collection of children and verifies that there
1234 * is only one child in the collection.
1235 *
1236 * See https://reactjs.org/docs/react-api.html#reactchildrenonly
1237 *
1238 * The current implementation of this function assumes that a single child gets
1239 * passed without a wrapper, but the purpose of this helper function is to
1240 * abstract away the particular structure of children.
1241 *
1242 * @param {?object} children Child collection structure.
1243 * @return {ReactElement} The first and only `ReactElement` contained in the
1244 * structure.
1245 */
1246
1247
1248function onlyChild(children) {
1249 if (!isValidElement(children)) {
1250 {
1251 throw Error( "React.Children.only expected to receive a single React element child." );
1252 }
1253 }
1254
1255 return children;
1256}
1257
1258function createContext(defaultValue, calculateChangedBits) {
1259 if (calculateChangedBits === undefined) {
1260 calculateChangedBits = null;
1261 } else {
1262 {
1263 if (calculateChangedBits !== null && typeof calculateChangedBits !== 'function') {
1264 error('createContext: Expected the optional second argument to be a ' + 'function. Instead received: %s', calculateChangedBits);
1265 }
1266 }
1267 }
1268
1269 var context = {
1270 $$typeof: REACT_CONTEXT_TYPE,
1271 _calculateChangedBits: calculateChangedBits,
1272 // As a workaround to support multiple concurrent renderers, we categorize
1273 // some renderers as primary and others as secondary. We only expect
1274 // there to be two concurrent renderers at most: React Native (primary) and
1275 // Fabric (secondary); React DOM (primary) and React ART (secondary).
1276 // Secondary renderers store their context values on separate fields.
1277 _currentValue: defaultValue,
1278 _currentValue2: defaultValue,
1279 // Used to track how many concurrent renderers this context currently
1280 // supports within in a single renderer. Such as parallel server rendering.
1281 _threadCount: 0,
1282 // These are circular
1283 Provider: null,
1284 Consumer: null
1285 };
1286 context.Provider = {
1287 $$typeof: REACT_PROVIDER_TYPE,
1288 _context: context
1289 };
1290 var hasWarnedAboutUsingNestedContextConsumers = false;
1291 var hasWarnedAboutUsingConsumerProvider = false;
1292
1293 {
1294 // A separate object, but proxies back to the original context object for
1295 // backwards compatibility. It has a different $$typeof, so we can properly
1296 // warn for the incorrect usage of Context as a Consumer.
1297 var Consumer = {
1298 $$typeof: REACT_CONTEXT_TYPE,
1299 _context: context,
1300 _calculateChangedBits: context._calculateChangedBits
1301 }; // $FlowFixMe: Flow complains about not setting a value, which is intentional here
1302
1303 Object.defineProperties(Consumer, {
1304 Provider: {
1305 get: function () {
1306 if (!hasWarnedAboutUsingConsumerProvider) {
1307 hasWarnedAboutUsingConsumerProvider = true;
1308
1309 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?');
1310 }
1311
1312 return context.Provider;
1313 },
1314 set: function (_Provider) {
1315 context.Provider = _Provider;
1316 }
1317 },
1318 _currentValue: {
1319 get: function () {
1320 return context._currentValue;
1321 },
1322 set: function (_currentValue) {
1323 context._currentValue = _currentValue;
1324 }
1325 },
1326 _currentValue2: {
1327 get: function () {
1328 return context._currentValue2;
1329 },
1330 set: function (_currentValue2) {
1331 context._currentValue2 = _currentValue2;
1332 }
1333 },
1334 _threadCount: {
1335 get: function () {
1336 return context._threadCount;
1337 },
1338 set: function (_threadCount) {
1339 context._threadCount = _threadCount;
1340 }
1341 },
1342 Consumer: {
1343 get: function () {
1344 if (!hasWarnedAboutUsingNestedContextConsumers) {
1345 hasWarnedAboutUsingNestedContextConsumers = true;
1346
1347 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?');
1348 }
1349
1350 return context.Consumer;
1351 }
1352 }
1353 }); // $FlowFixMe: Flow complains about missing properties because it doesn't understand defineProperty
1354
1355 context.Consumer = Consumer;
1356 }
1357
1358 {
1359 context._currentRenderer = null;
1360 context._currentRenderer2 = null;
1361 }
1362
1363 return context;
1364}
1365
1366function lazy(ctor) {
1367 var lazyType = {
1368 $$typeof: REACT_LAZY_TYPE,
1369 _ctor: ctor,
1370 // React uses these fields to store the result.
1371 _status: -1,
1372 _result: null
1373 };
1374
1375 {
1376 // In production, this would just set it on the object.
1377 var defaultProps;
1378 var propTypes;
1379 Object.defineProperties(lazyType, {
1380 defaultProps: {
1381 configurable: true,
1382 get: function () {
1383 return defaultProps;
1384 },
1385 set: function (newDefaultProps) {
1386 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.');
1387
1388 defaultProps = newDefaultProps; // Match production behavior more closely:
1389
1390 Object.defineProperty(lazyType, 'defaultProps', {
1391 enumerable: true
1392 });
1393 }
1394 },
1395 propTypes: {
1396 configurable: true,
1397 get: function () {
1398 return propTypes;
1399 },
1400 set: function (newPropTypes) {
1401 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.');
1402
1403 propTypes = newPropTypes; // Match production behavior more closely:
1404
1405 Object.defineProperty(lazyType, 'propTypes', {
1406 enumerable: true
1407 });
1408 }
1409 }
1410 });
1411 }
1412
1413 return lazyType;
1414}
1415
1416function forwardRef(render) {
1417 {
1418 if (render != null && render.$$typeof === REACT_MEMO_TYPE) {
1419 error('forwardRef requires a render function but received a `memo` ' + 'component. Instead of forwardRef(memo(...)), use ' + 'memo(forwardRef(...)).');
1420 } else if (typeof render !== 'function') {
1421 error('forwardRef requires a render function but was given %s.', render === null ? 'null' : typeof render);
1422 } else {
1423 if (render.length !== 0 && render.length !== 2) {
1424 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.');
1425 }
1426 }
1427
1428 if (render != null) {
1429 if (render.defaultProps != null || render.propTypes != null) {
1430 error('forwardRef render functions do not support propTypes or defaultProps. ' + 'Did you accidentally pass a React component?');
1431 }
1432 }
1433 }
1434
1435 return {
1436 $$typeof: REACT_FORWARD_REF_TYPE,
1437 render: render
1438 };
1439}
1440
1441function isValidElementType(type) {
1442 return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.
1443 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);
1444}
1445
1446function memo(type, compare) {
1447 {
1448 if (!isValidElementType(type)) {
1449 error('memo: The first argument must be a component. Instead ' + 'received: %s', type === null ? 'null' : typeof type);
1450 }
1451 }
1452
1453 return {
1454 $$typeof: REACT_MEMO_TYPE,
1455 type: type,
1456 compare: compare === undefined ? null : compare
1457 };
1458}
1459
1460function resolveDispatcher() {
1461 var dispatcher = ReactCurrentDispatcher.current;
1462
1463 if (!(dispatcher !== null)) {
1464 {
1465 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." );
1466 }
1467 }
1468
1469 return dispatcher;
1470}
1471
1472function useContext(Context, unstable_observedBits) {
1473 var dispatcher = resolveDispatcher();
1474
1475 {
1476 if (unstable_observedBits !== undefined) {
1477 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' : '');
1478 } // TODO: add a more generic warning for invalid values.
1479
1480
1481 if (Context._context !== undefined) {
1482 var realContext = Context._context; // Don't deduplicate because this legitimately causes bugs
1483 // and nobody should be using this in existing code.
1484
1485 if (realContext.Consumer === Context) {
1486 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?');
1487 } else if (realContext.Provider === Context) {
1488 error('Calling useContext(Context.Provider) is not supported. ' + 'Did you mean to call useContext(Context) instead?');
1489 }
1490 }
1491 }
1492
1493 return dispatcher.useContext(Context, unstable_observedBits);
1494}
1495function useState(initialState) {
1496 var dispatcher = resolveDispatcher();
1497 return dispatcher.useState(initialState);
1498}
1499function useReducer(reducer, initialArg, init) {
1500 var dispatcher = resolveDispatcher();
1501 return dispatcher.useReducer(reducer, initialArg, init);
1502}
1503function useRef(initialValue) {
1504 var dispatcher = resolveDispatcher();
1505 return dispatcher.useRef(initialValue);
1506}
1507function useEffect(create, deps) {
1508 var dispatcher = resolveDispatcher();
1509 return dispatcher.useEffect(create, deps);
1510}
1511function useLayoutEffect(create, deps) {
1512 var dispatcher = resolveDispatcher();
1513 return dispatcher.useLayoutEffect(create, deps);
1514}
1515function useCallback(callback, deps) {
1516 var dispatcher = resolveDispatcher();
1517 return dispatcher.useCallback(callback, deps);
1518}
1519function useMemo(create, deps) {
1520 var dispatcher = resolveDispatcher();
1521 return dispatcher.useMemo(create, deps);
1522}
1523function useImperativeHandle(ref, create, deps) {
1524 var dispatcher = resolveDispatcher();
1525 return dispatcher.useImperativeHandle(ref, create, deps);
1526}
1527function useDebugValue(value, formatterFn) {
1528 {
1529 var dispatcher = resolveDispatcher();
1530 return dispatcher.useDebugValue(value, formatterFn);
1531 }
1532}
1533
1534var propTypesMisspellWarningShown;
1535
1536{
1537 propTypesMisspellWarningShown = false;
1538}
1539
1540function getDeclarationErrorAddendum() {
1541 if (ReactCurrentOwner.current) {
1542 var name = getComponentName(ReactCurrentOwner.current.type);
1543
1544 if (name) {
1545 return '\n\nCheck the render method of `' + name + '`.';
1546 }
1547 }
1548
1549 return '';
1550}
1551
1552function getSourceInfoErrorAddendum(source) {
1553 if (source !== undefined) {
1554 var fileName = source.fileName.replace(/^.*[\\\/]/, '');
1555 var lineNumber = source.lineNumber;
1556 return '\n\nCheck your code at ' + fileName + ':' + lineNumber + '.';
1557 }
1558
1559 return '';
1560}
1561
1562function getSourceInfoErrorAddendumForProps(elementProps) {
1563 if (elementProps !== null && elementProps !== undefined) {
1564 return getSourceInfoErrorAddendum(elementProps.__source);
1565 }
1566
1567 return '';
1568}
1569/**
1570 * Warn if there's no key explicitly set on dynamic arrays of children or
1571 * object keys are not valid. This allows us to keep track of children between
1572 * updates.
1573 */
1574
1575
1576var ownerHasKeyUseWarning = {};
1577
1578function getCurrentComponentErrorInfo(parentType) {
1579 var info = getDeclarationErrorAddendum();
1580
1581 if (!info) {
1582 var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;
1583
1584 if (parentName) {
1585 info = "\n\nCheck the top-level render call using <" + parentName + ">.";
1586 }
1587 }
1588
1589 return info;
1590}
1591/**
1592 * Warn if the element doesn't have an explicit key assigned to it.
1593 * This element is in an array. The array could grow and shrink or be
1594 * reordered. All children that haven't already been validated are required to
1595 * have a "key" property assigned to it. Error statuses are cached so a warning
1596 * will only be shown once.
1597 *
1598 * @internal
1599 * @param {ReactElement} element Element that requires a key.
1600 * @param {*} parentType element's parent's type.
1601 */
1602
1603
1604function validateExplicitKey(element, parentType) {
1605 if (!element._store || element._store.validated || element.key != null) {
1606 return;
1607 }
1608
1609 element._store.validated = true;
1610 var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);
1611
1612 if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {
1613 return;
1614 }
1615
1616 ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a
1617 // property, it may be the creator of the child that's responsible for
1618 // assigning it a key.
1619
1620 var childOwner = '';
1621
1622 if (element && element._owner && element._owner !== ReactCurrentOwner.current) {
1623 // Give the component that originally created this child.
1624 childOwner = " It was passed a child from " + getComponentName(element._owner.type) + ".";
1625 }
1626
1627 setCurrentlyValidatingElement(element);
1628
1629 {
1630 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);
1631 }
1632
1633 setCurrentlyValidatingElement(null);
1634}
1635/**
1636 * Ensure that every element either is passed in a static location, in an
1637 * array with an explicit keys property defined, or in an object literal
1638 * with valid key property.
1639 *
1640 * @internal
1641 * @param {ReactNode} node Statically passed child of any type.
1642 * @param {*} parentType node's parent's type.
1643 */
1644
1645
1646function validateChildKeys(node, parentType) {
1647 if (typeof node !== 'object') {
1648 return;
1649 }
1650
1651 if (Array.isArray(node)) {
1652 for (var i = 0; i < node.length; i++) {
1653 var child = node[i];
1654
1655 if (isValidElement(child)) {
1656 validateExplicitKey(child, parentType);
1657 }
1658 }
1659 } else if (isValidElement(node)) {
1660 // This element was passed in a valid location.
1661 if (node._store) {
1662 node._store.validated = true;
1663 }
1664 } else if (node) {
1665 var iteratorFn = getIteratorFn(node);
1666
1667 if (typeof iteratorFn === 'function') {
1668 // Entry iterators used to provide implicit keys,
1669 // but now we print a separate warning for them later.
1670 if (iteratorFn !== node.entries) {
1671 var iterator = iteratorFn.call(node);
1672 var step;
1673
1674 while (!(step = iterator.next()).done) {
1675 if (isValidElement(step.value)) {
1676 validateExplicitKey(step.value, parentType);
1677 }
1678 }
1679 }
1680 }
1681 }
1682}
1683/**
1684 * Given an element, validate that its props follow the propTypes definition,
1685 * provided by the type.
1686 *
1687 * @param {ReactElement} element
1688 */
1689
1690
1691function validatePropTypes(element) {
1692 {
1693 var type = element.type;
1694
1695 if (type === null || type === undefined || typeof type === 'string') {
1696 return;
1697 }
1698
1699 var name = getComponentName(type);
1700 var propTypes;
1701
1702 if (typeof type === 'function') {
1703 propTypes = type.propTypes;
1704 } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.
1705 // Inner props are checked in the reconciler.
1706 type.$$typeof === REACT_MEMO_TYPE)) {
1707 propTypes = type.propTypes;
1708 } else {
1709 return;
1710 }
1711
1712 if (propTypes) {
1713 setCurrentlyValidatingElement(element);
1714 checkPropTypes(propTypes, element.props, 'prop', name, ReactDebugCurrentFrame.getStackAddendum);
1715 setCurrentlyValidatingElement(null);
1716 } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {
1717 propTypesMisspellWarningShown = true;
1718
1719 error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', name || 'Unknown');
1720 }
1721
1722 if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {
1723 error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');
1724 }
1725 }
1726}
1727/**
1728 * Given a fragment, validate that it can only be provided with fragment props
1729 * @param {ReactElement} fragment
1730 */
1731
1732
1733function validateFragmentProps(fragment) {
1734 {
1735 setCurrentlyValidatingElement(fragment);
1736 var keys = Object.keys(fragment.props);
1737
1738 for (var i = 0; i < keys.length; i++) {
1739 var key = keys[i];
1740
1741 if (key !== 'children' && key !== 'key') {
1742 error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);
1743
1744 break;
1745 }
1746 }
1747
1748 if (fragment.ref !== null) {
1749 error('Invalid attribute `ref` supplied to `React.Fragment`.');
1750 }
1751
1752 setCurrentlyValidatingElement(null);
1753 }
1754}
1755function createElementWithValidation(type, props, children) {
1756 var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to
1757 // succeed and there will likely be errors in render.
1758
1759 if (!validType) {
1760 var info = '';
1761
1762 if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {
1763 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.";
1764 }
1765
1766 var sourceInfo = getSourceInfoErrorAddendumForProps(props);
1767
1768 if (sourceInfo) {
1769 info += sourceInfo;
1770 } else {
1771 info += getDeclarationErrorAddendum();
1772 }
1773
1774 var typeString;
1775
1776 if (type === null) {
1777 typeString = 'null';
1778 } else if (Array.isArray(type)) {
1779 typeString = 'array';
1780 } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {
1781 typeString = "<" + (getComponentName(type.type) || 'Unknown') + " />";
1782 info = ' Did you accidentally export a JSX literal instead of a component?';
1783 } else {
1784 typeString = typeof type;
1785 }
1786
1787 {
1788 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);
1789 }
1790 }
1791
1792 var element = createElement.apply(this, arguments); // The result can be nullish if a mock or a custom function is used.
1793 // TODO: Drop this when these are no longer allowed as the type argument.
1794
1795 if (element == null) {
1796 return element;
1797 } // Skip key warning if the type isn't valid since our key validation logic
1798 // doesn't expect a non-string/function type and can throw confusing errors.
1799 // We don't want exception behavior to differ between dev and prod.
1800 // (Rendering will throw with a helpful message and as soon as the type is
1801 // fixed, the key warnings will appear.)
1802
1803
1804 if (validType) {
1805 for (var i = 2; i < arguments.length; i++) {
1806 validateChildKeys(arguments[i], type);
1807 }
1808 }
1809
1810 if (type === REACT_FRAGMENT_TYPE) {
1811 validateFragmentProps(element);
1812 } else {
1813 validatePropTypes(element);
1814 }
1815
1816 return element;
1817}
1818var didWarnAboutDeprecatedCreateFactory = false;
1819function createFactoryWithValidation(type) {
1820 var validatedFactory = createElementWithValidation.bind(null, type);
1821 validatedFactory.type = type;
1822
1823 {
1824 if (!didWarnAboutDeprecatedCreateFactory) {
1825 didWarnAboutDeprecatedCreateFactory = true;
1826
1827 warn('React.createFactory() is deprecated and will be removed in ' + 'a future major release. Consider using JSX ' + 'or use React.createElement() directly instead.');
1828 } // Legacy hook: remove it
1829
1830
1831 Object.defineProperty(validatedFactory, 'type', {
1832 enumerable: false,
1833 get: function () {
1834 warn('Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.');
1835
1836 Object.defineProperty(this, 'type', {
1837 value: type
1838 });
1839 return type;
1840 }
1841 });
1842 }
1843
1844 return validatedFactory;
1845}
1846function cloneElementWithValidation(element, props, children) {
1847 var newElement = cloneElement.apply(this, arguments);
1848
1849 for (var i = 2; i < arguments.length; i++) {
1850 validateChildKeys(arguments[i], newElement.type);
1851 }
1852
1853 validatePropTypes(newElement);
1854 return newElement;
1855}
1856
1857{
1858
1859 try {
1860 var frozenObject = Object.freeze({});
1861 var testMap = new Map([[frozenObject, null]]);
1862 var testSet = new Set([frozenObject]); // This is necessary for Rollup to not consider these unused.
1863 // https://github.com/rollup/rollup/issues/1771
1864 // TODO: we can remove these if Rollup fixes the bug.
1865
1866 testMap.set(0, 0);
1867 testSet.add(0);
1868 } catch (e) {
1869 }
1870}
1871
1872var createElement$1 = createElementWithValidation ;
1873var cloneElement$1 = cloneElementWithValidation ;
1874var createFactory = createFactoryWithValidation ;
1875var Children = {
1876 map: mapChildren,
1877 forEach: forEachChildren,
1878 count: countChildren,
1879 toArray: toArray,
1880 only: onlyChild
1881};
1882
1883exports.Children = Children;
1884exports.Component = Component;
1885exports.Fragment = REACT_FRAGMENT_TYPE;
1886exports.Profiler = REACT_PROFILER_TYPE;
1887exports.PureComponent = PureComponent;
1888exports.StrictMode = REACT_STRICT_MODE_TYPE;
1889exports.Suspense = REACT_SUSPENSE_TYPE;
1890exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactSharedInternals;
1891exports.cloneElement = cloneElement$1;
1892exports.createContext = createContext;
1893exports.createElement = createElement$1;
1894exports.createFactory = createFactory;
1895exports.createRef = createRef;
1896exports.forwardRef = forwardRef;
1897exports.isValidElement = isValidElement;
1898exports.lazy = lazy;
1899exports.memo = memo;
1900exports.useCallback = useCallback;
1901exports.useContext = useContext;
1902exports.useDebugValue = useDebugValue;
1903exports.useEffect = useEffect;
1904exports.useImperativeHandle = useImperativeHandle;
1905exports.useLayoutEffect = useLayoutEffect;
1906exports.useMemo = useMemo;
1907exports.useReducer = useReducer;
1908exports.useRef = useRef;
1909exports.useState = useState;
1910exports.version = ReactVersion;
1911 })();
1912}