Projekt

Obecné

Profil

Stáhnout (103 KB) Statistiky
| Větev: | Revize:
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
})));
(1-1/3)