PageSourceSearch

https://microfun.cn/react-code/react-dom-dev.js

js microfun.cn collected 2026-10-07 00:34:27 UTC 940,105 bytes, 26,292 lines download raw bytes

1/** @license React v17.0.2
2 * react-dom.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 (function (global, factory) {
10  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react')) :
11  typeof define === 'function' && define.amd ? define(['exports', 'react'], factory) :
12  (global = global || self, factory(global.ReactDOM = {}, global.React));
13}(this, (function (exports, React) { 'use strict';
14
15  var ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
16
17  // by calls to these methods by a Babel plugin.
18  //
19  // In PROD (or in packages without access to React internals),
20  // they are left as they are instead.
21
22  function warn(format) {
23    {
24      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
25        args[_key - 1] = arguments[_key];
26      }
27
28      printWarning('warn', format, args);
29    }
30  }
31  function error(format) {
32    {
33      for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
34        args[_key2 - 1] = arguments[_key2];
35      }
36
37      printWarning('error', format, args);
38    }
39  }
40
41  function printWarning(level, format, args) {
42    // When changing this logic, you might want to also
43    // update consoleWithStackDev.www.js as well.
44    {
45      var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;
46      var stack = ReactDebugCurrentFrame.getStackAddendum();
47
48      if (stack !== '') {
49        format += '%s';
50        args = args.concat([stack]);
51      }
52
53      var argsWithFormat = args.map(function (item) {
54        return '' + item;
55      }); // Careful: RN currently depends on this prefix
56
57      argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it
58      // breaks IE9: https://github.com/facebook/react/issues/13610
59      // eslint-disable-next-line react-internal/no-production-logging
60
61      Function.prototype.apply.call(console[level], console, argsWithFormat);
62    }
63  }
64
65  if (!React) {
66    {
67      throw Error( "ReactDOM was loaded before React. Make sure you load the React package before loading ReactDOM." );
68    }
69  }
70
71  var FunctionComponent = 0;
72  var ClassComponent = 1;
73  var IndeterminateComponent = 2; // Before we know whether it is function or class
74
75  var HostRoot = 3; // Root of a host tree. Could be nested inside another node.
76
77  var HostPortal = 4; // A subtree. Could be an entry point to a different renderer.
78
79  var HostComponent = 5;
80  var HostText = 6;
81  var Fragment = 7;
82  var Mode = 8;
83  var ContextConsumer = 9;
84  var ContextProvider = 10;
85  var ForwardRef = 11;
86  var Profiler = 12;
87  var SuspenseComponent = 13;
88  var MemoComponent = 14;
89  var SimpleMemoComponent = 15;
90  var LazyComponent = 16;
91  var IncompleteClassComponent = 17;
92  var DehydratedFragment = 18;
93  var SuspenseListComponent = 19;
94  var FundamentalComponent = 20;
95  var ScopeComponent = 21;
96  var Block = 22;
97  var OffscreenComponent = 23;
98  var LegacyHiddenComponent = 24;
99
100  // Filter certain DOM attributes (e.g. src, href) if their values are empty strings.
101
102  var enableProfilerTimer = true; // Record durations for commit and passive effects phases.
103
104  var enableFundamentalAPI = false; // Experimental Scope support.
105  var enableNewReconciler = false; // Errors that are thrown while unmounting (or after in the case of passive effects)
106  var warnAboutStringRefs = false;
107
108  var allNativeEvents = new Set();
109  /**
110   * Mapping from registration name to event name
111   */
112
113
114  var registrationNameDependencies = {};
115  /**
116   * Mapping from lowercase registration names to the properly cased version,
117   * used to warn in the case of missing event handlers. Available
118   * only in true.
119   * @type {Object}
120   */
121
122  var possibleRegistrationNames =  {} ; // Trust the developer to only use possibleRegistrationNames in true
123
124  function registerTwoPhaseEvent(registrationName, dependencies) {
125    registerDirectEvent(registrationName, dependencies);
126    registerDirectEvent(registrationName + 'Capture', dependencies);
127  }
128  function registerDirectEvent(registrationName, dependencies) {
129    {
130      if (registrationNameDependencies[registrationName]) {
131        error('EventRegistry: More than one plugin attempted to publish the same ' + 'registration name, `%s`.', registrationName);
132      }
133    }
134
vendor: 4,190 bytes, lines 135-254
135    registrationNameDependencies[registrationName] = dependencies;
136
137    {
138      var lowerCasedName = registrationName.toLowerCase();
139      possibleRegistrationNames[lowerCasedName] = registrationName;
140
141      if (registrationName === 'onDoubleClick') {
142        possibleRegistrationNames.ondblclick = registrationName;
143      }
144    }
145
146    for (var i = 0; i < dependencies.length; i++) {
147      allNativeEvents.add(dependencies[i]);
148    }
149  }
150
151  var canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');
152
153  // A reserved attribute.
154  // It is handled by React separately and shouldn't be written to the DOM.
155  var RESERVED = 0; // A simple string attribute.
156  // Attributes that aren't in the filter are presumed to have this type.
157
158  var STRING = 1; // A string attribute that accepts booleans in React. In HTML, these are called
159  // "enumerated" attributes with "true" and "false" as possible values.
160  // When true, it should be set to a "true" string.
161  // When false, it should be set to a "false" string.
162
163  var BOOLEANISH_STRING = 2; // A real boolean attribute.
164  // When true, it should be present (set either to an empty string or its name).
165  // When false, it should be omitted.
166
167  var BOOLEAN = 3; // An attribute that can be used as a flag as well as with a value.
168  // When true, it should be present (set either to an empty string or its name).
169  // When false, it should be omitted.
170  // For any other value, should be present with that value.
171
172  var OVERLOADED_BOOLEAN = 4; // An attribute that must be numeric or parse as a numeric.
173  // When falsy, it should be removed.
174
175  var NUMERIC = 5; // An attribute that must be positive numeric or parse as a positive numeric.
176  // When falsy, it should be removed.
177
178  var POSITIVE_NUMERIC = 6;
179
180  /* eslint-disable max-len */
181  var ATTRIBUTE_NAME_START_CHAR = ":A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD";
182  /* eslint-enable max-len */
183
184  var ATTRIBUTE_NAME_CHAR = ATTRIBUTE_NAME_START_CHAR + "\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040";
185  var ROOT_ATTRIBUTE_NAME = 'data-reactroot';
186  var VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + ATTRIBUTE_NAME_START_CHAR + '][' + ATTRIBUTE_NAME_CHAR + ']*$');
187  var hasOwnProperty = Object.prototype.hasOwnProperty;
188  var illegalAttributeNameCache = {};
189  var validatedAttributeNameCache = {};
190  function isAttributeNameSafe(attributeName) {
191    if (hasOwnProperty.call(validatedAttributeNameCache, attributeName)) {
192      return true;
193    }
194
195    if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) {
196      return false;
197    }
198
199    if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {
200      validatedAttributeNameCache[attributeName] = true;
201      return true;
202    }
203
204    illegalAttributeNameCache[attributeName] = true;
205
206    {
207      error('Invalid attribute name: `%s`', attributeName);
208    }
209
210    return false;
211  }
212  function shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag) {
213    if (propertyInfo !== null) {
214      return propertyInfo.type === RESERVED;
215    }
216
217    if (isCustomComponentTag) {
218      return false;
219    }
220
221    if (name.length > 2 && (name[0] === 'o' || name[0] === 'O') && (name[1] === 'n' || name[1] === 'N')) {
222      return true;
223    }
224
225    return false;
226  }
227  function shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag) {
228    if (propertyInfo !== null && propertyInfo.type === RESERVED) {
229      return false;
230    }
231
232    switch (typeof value) {
233      case 'function': // $FlowIssue symbol is perfectly valid here
234
235      case 'symbol':
236        // eslint-disable-line
237        return true;
238
239      case 'boolean':
240        {
241          if (isCustomComponentTag) {
242            return false;
243          }
244
245          if (propertyInfo !== null) {
246            return !propertyInfo.acceptsBooleans;
247          } else {
248            var prefix = name.toLowerCase().slice(0, 5);
249            return prefix !== 'data-' && prefix !== 'aria-';
250          }
251        }
252
253      default:
254        return false;
vendor: 14,103 bytes, lines 255-551
255    }
256  }
257  function shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag) {
258    if (value === null || typeof value === 'undefined') {
259      return true;
260    }
261
262    if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag)) {
263      return true;
264    }
265
266    if (isCustomComponentTag) {
267      return false;
268    }
269
270    if (propertyInfo !== null) {
271
272      switch (propertyInfo.type) {
273        case BOOLEAN:
274          return !value;
275
276        case OVERLOADED_BOOLEAN:
277          return value === false;
278
279        case NUMERIC:
280          return isNaN(value);
281
282        case POSITIVE_NUMERIC:
283          return isNaN(value) || value < 1;
284      }
285    }
286
287    return false;
288  }
289  function getPropertyInfo(name) {
290    return properties.hasOwnProperty(name) ? properties[name] : null;
291  }
292
293  function PropertyInfoRecord(name, type, mustUseProperty, attributeName, attributeNamespace, sanitizeURL, removeEmptyString) {
294    this.acceptsBooleans = type === BOOLEANISH_STRING || type === BOOLEAN || type === OVERLOADED_BOOLEAN;
295    this.attributeName = attributeName;
296    this.attributeNamespace = attributeNamespace;
297    this.mustUseProperty = mustUseProperty;
298    this.propertyName = name;
299    this.type = type;
300    this.sanitizeURL = sanitizeURL;
301    this.removeEmptyString = removeEmptyString;
302  } // When adding attributes to this list, be sure to also add them to
303  // the `possibleStandardNames` module to ensure casing and incorrect
304  // name warnings.
305
306
307  var properties = {}; // These props are reserved by React. They shouldn't be written to the DOM.
308
309  var reservedProps = ['children', 'dangerouslySetInnerHTML', // TODO: This prevents the assignment of defaultValue to regular
310  // elements (not just inputs). Now that ReactDOMInput assigns to the
311  // defaultValue property -- do we need this?
312  'defaultValue', 'defaultChecked', 'innerHTML', 'suppressContentEditableWarning', 'suppressHydrationWarning', 'style'];
313  reservedProps.forEach(function (name) {
314    properties[name] = new PropertyInfoRecord(name, RESERVED, false, // mustUseProperty
315    name, // attributeName
316    null, // attributeNamespace
317    false, // sanitizeURL
318    false);
319  }); // A few React string attributes have a different name.
320  // This is a mapping from React prop names to the attribute names.
321
322  [['acceptCharset', 'accept-charset'], ['className', 'class'], ['htmlFor', 'for'], ['httpEquiv', 'http-equiv']].forEach(function (_ref) {
323    var name = _ref[0],
324        attributeName = _ref[1];
325    properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty
326    attributeName, // attributeName
327    null, // attributeNamespace
328    false, // sanitizeURL
329    false);
330  }); // These are "enumerated" HTML attributes that accept "true" and "false".
331  // In React, we let users pass `true` and `false` even though technically
332  // these aren't boolean attributes (they are coerced to strings).
333
334  ['contentEditable', 'draggable', 'spellCheck', 'value'].forEach(function (name) {
335    properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty
336    name.toLowerCase(), // attributeName
337    null, // attributeNamespace
338    false, // sanitizeURL
339    false);
340  }); // These are "enumerated" SVG attributes that accept "true" and "false".
341  // In React, we let users pass `true` and `false` even though technically
342  // these aren't boolean attributes (they are coerced to strings).
343  // Since these are SVG attributes, their attribute names are case-sensitive.
344
345  ['autoReverse', 'externalResourcesRequired', 'focusable', 'preserveAlpha'].forEach(function (name) {
346    properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty
347    name, // attributeName
348    null, // attributeNamespace
349    false, // sanitizeURL
350    false);
351  }); // These are HTML boolean attributes.
352
353  ['allowFullScreen', 'async', // Note: there is a special case that prevents it from being written to the DOM
354  // on the client side because the browsers are inconsistent. Instead we call focus().
355  'autoFocus', 'autoPlay', 'controls', 'default', 'defer', 'disabled', 'disablePictureInPicture', 'disableRemotePlayback', 'formNoValidate', 'hidden', 'loop', 'noModule', 'noValidate', 'open', 'playsInline', 'readOnly', 'required', 'reversed', 'scoped', 'seamless', // Microdata
356  'itemScope'].forEach(function (name) {
357    properties[name] = new PropertyInfoRecord(name, BOOLEAN, false, // mustUseProperty
358    name.toLowerCase(), // attributeName
359    null, // attributeNamespace
360    false, // sanitizeURL
361    false);
362  }); // These are the few React props that we set as DOM properties
363  // rather than attributes. These are all booleans.
364
365  ['checked', // Note: `option.selected` is not updated if `select.multiple` is
366  // disabled with `removeAttribute`. We have special logic for handling this.
367  'multiple', 'muted', 'selected' // NOTE: if you add a camelCased prop to this list,
368  // you'll need to set attributeName to name.toLowerCase()
369  // instead in the assignment below.
370  ].forEach(function (name) {
371    properties[name] = new PropertyInfoRecord(name, BOOLEAN, true, // mustUseProperty
372    name, // attributeName
373    null, // attributeNamespace
374    false, // sanitizeURL
375    false);
376  }); // These are HTML attributes that are "overloaded booleans": they behave like
377  // booleans, but can also accept a string value.
378
379  ['capture', 'download' // NOTE: if you add a camelCased prop to this list,
380  // you'll need to set attributeName to name.toLowerCase()
381  // instead in the assignment below.
382  ].forEach(function (name) {
383    properties[name] = new PropertyInfoRecord(name, OVERLOADED_BOOLEAN, false, // mustUseProperty
384    name, // attributeName
385    null, // attributeNamespace
386    false, // sanitizeURL
387    false);
388  }); // These are HTML attributes that must be positive numbers.
389
390  ['cols', 'rows', 'size', 'span' // NOTE: if you add a camelCased prop to this list,
391  // you'll need to set attributeName to name.toLowerCase()
392  // instead in the assignment below.
393  ].forEach(function (name) {
394    properties[name] = new PropertyInfoRecord(name, POSITIVE_NUMERIC, false, // mustUseProperty
395    name, // attributeName
396    null, // attributeNamespace
397    false, // sanitizeURL
398    false);
399  }); // These are HTML attributes that must be numbers.
400
401  ['rowSpan', 'start'].forEach(function (name) {
402    properties[name] = new PropertyInfoRecord(name, NUMERIC, false, // mustUseProperty
403    name.toLowerCase(), // attributeName
404    null, // attributeNamespace
405    false, // sanitizeURL
406    false);
407  });
408  var CAMELIZE = /[\-\:]([a-z])/g;
409
410  var capitalize = function (token) {
411    return token[1].toUpperCase();
412  }; // This is a list of all SVG attributes that need special casing, namespacing,
413  // or boolean value assignment. Regular attributes that just accept strings
414  // and have the same names are omitted, just like in the HTML attribute filter.
415  // Some of these attributes can be hard to find. This list was created by
416  // scraping the MDN documentation.
417
418
419  ['accent-height', 'alignment-baseline', 'arabic-form', 'baseline-shift', 'cap-height', 'clip-path', 'clip-rule', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'dominant-baseline', 'enable-background', 'fill-opacity', 'fill-rule', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'glyph-name', 'glyph-orientation-horizontal', 'glyph-orientation-vertical', 'horiz-adv-x', 'horiz-origin-x', 'image-rendering', 'letter-spacing', 'lighting-color', 'marker-end', 'marker-mid', 'marker-start', 'overline-position', 'overline-thickness', 'paint-order', 'panose-1', 'pointer-events', 'rendering-intent', 'shape-rendering', 'stop-color', 'stop-opacity', 'strikethrough-position', 'strikethrough-thickness', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'text-anchor', 'text-decoration', 'text-rendering', 'underline-position', 'underline-thickness', 'unicode-bidi', 'unicode-range', 'units-per-em', 'v-alphabetic', 'v-hanging', 'v-ideographic', 'v-mathematical', 'vector-effect', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'word-spacing', 'writing-mode', 'xmlns:xlink', 'x-height' // NOTE: if you add a camelCased prop to this list,
420  // you'll need to set attributeName to name.toLowerCase()
421  // instead in the assignment below.
422  ].forEach(function (attributeName) {
423    var name = attributeName.replace(CAMELIZE, capitalize);
424    properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty
425    attributeName, null, // attributeNamespace
426    false, // sanitizeURL
427    false);
428  }); // String SVG attributes with the xlink namespace.
429
430  ['xlink:actuate', 'xlink:arcrole', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type' // NOTE: if you add a camelCased prop to this list,
431  // you'll need to set attributeName to name.toLowerCase()
432  // instead in the assignment below.
433  ].forEach(function (attributeName) {
434    var name = attributeName.replace(CAMELIZE, capitalize);
435    properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty
436    attributeName, 'http://www.w3.org/1999/xlink', false, // sanitizeURL
437    false);
438  }); // String SVG attributes with the xml namespace.
439
440  ['xml:base', 'xml:lang', 'xml:space' // NOTE: if you add a camelCased prop to this list,
441  // you'll need to set attributeName to name.toLowerCase()
442  // instead in the assignment below.
443  ].forEach(function (attributeName) {
444    var name = attributeName.replace(CAMELIZE, capitalize);
445    properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty
446    attributeName, 'http://www.w3.org/XML/1998/namespace', false, // sanitizeURL
447    false);
448  }); // These attribute exists both in HTML and SVG.
449  // The attribute name is case-sensitive in SVG so we can't just use
450  // the React name like we do for attributes that exist only in HTML.
451
452  ['tabIndex', 'crossOrigin'].forEach(function (attributeName) {
453    properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty
454    attributeName.toLowerCase(), // attributeName
455    null, // attributeNamespace
456    false, // sanitizeURL
457    false);
458  }); // These attributes accept URLs. These must not allow javascript: URLS.
459  // These will also need to accept Trusted Types object in the future.
460
461  var xlinkHref = 'xlinkHref';
462  properties[xlinkHref] = new PropertyInfoRecord('xlinkHref', STRING, false, // mustUseProperty
463  'xlink:href', 'http://www.w3.org/1999/xlink', true, // sanitizeURL
464  false);
465  ['src', 'href', 'action', 'formAction'].forEach(function (attributeName) {
466    properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty
467    attributeName.toLowerCase(), // attributeName
468    null, // attributeNamespace
469    true, // sanitizeURL
470    true);
471  });
472
473  // and any newline or tab are filtered out as if they're not part of the URL.
474  // https://url.spec.whatwg.org/#url-parsing
475  // Tab or newline are defined as \r\n\t:
476  // https://infra.spec.whatwg.org/#ascii-tab-or-newline
477  // A C0 control is a code point in the range \u0000 NULL to \u001F
478  // INFORMATION SEPARATOR ONE, inclusive:
479  // https://infra.spec.whatwg.org/#c0-control-or-space
480
481  /* eslint-disable max-len */
482
483  var isJavaScriptProtocol = /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*\:/i;
484  var didWarn = false;
485
486  function sanitizeURL(url) {
487    {
488      if (!didWarn && isJavaScriptProtocol.test(url)) {
489        didWarn = true;
490
491        error('A future version of React will block javascript: URLs as a security precaution. ' + 'Use event handlers instead if you can. If you need to generate unsafe HTML try ' + 'using dangerouslySetInnerHTML instead. React was passed %s.', JSON.stringify(url));
492      }
493    }
494  }
495
496  /**
497   * Get the value for a property on a node. Only used in DEV for SSR validation.
498   * The "expected" argument is used as a hint of what the expected value is.
499   * Some properties have multiple equivalent values.
500   */
501  function getValueForProperty(node, name, expected, propertyInfo) {
502    {
503      if (propertyInfo.mustUseProperty) {
504        var propertyName = propertyInfo.propertyName;
505        return node[propertyName];
506      } else {
507        if ( propertyInfo.sanitizeURL) {
508          // If we haven't fully disabled javascript: URLs, and if
509          // the hydration is successful of a javascript: URL, we
510          // still want to warn on the client.
511          sanitizeURL('' + expected);
512        }
513
514        var attributeName = propertyInfo.attributeName;
515        var stringValue = null;
516
517        if (propertyInfo.type === OVERLOADED_BOOLEAN) {
518          if (node.hasAttribute(attributeName)) {
519            var value = node.getAttribute(attributeName);
520
521            if (value === '') {
522              return true;
523            }
524
525            if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {
526              return value;
527            }
528
529            if (value === '' + expected) {
530              return expected;
531            }
532
533            return value;
534          }
535        } else if (node.hasAttribute(attributeName)) {
536          if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {
537            // We had an attribute but shouldn't have had one, so read it
538            // for the error message.
539            return node.getAttribute(attributeName);
540          }
541
542          if (propertyInfo.type === BOOLEAN) {
543            // If this was a boolean, it doesn't matter what the value is
544            // the fact that we have it is the same as the expected.
545            return expected;
546          } // Even if this property uses a namespace we use getAttribute
547          // because we assume its namespaced name is the same as our config.
548          // To use getAttributeNS we need the local name which we don't have
549          // in our config atm.
550
551
vendor: 6,629 bytes, lines 552-752
552          stringValue = node.getAttribute(attributeName);
553        }
554
555        if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {
556          return stringValue === null ? expected : stringValue;
557        } else if (stringValue === '' + expected) {
558          return expected;
559        } else {
560          return stringValue;
561        }
562      }
563    }
564  }
565  /**
566   * Get the value for a attribute on a node. Only used in DEV for SSR validation.
567   * The third argument is used as a hint of what the expected value is. Some
568   * attributes have multiple equivalent values.
569   */
570
571  function getValueForAttribute(node, name, expected) {
572    {
573      if (!isAttributeNameSafe(name)) {
574        return;
575      } // If the object is an opaque reference ID, it's expected that
576      // the next prop is different than the server value, so just return
577      // expected
578
579
580      if (isOpaqueHydratingObject(expected)) {
581        return expected;
582      }
583
584      if (!node.hasAttribute(name)) {
585        return expected === undefined ? undefined : null;
586      }
587
588      var value = node.getAttribute(name);
589
590      if (value === '' + expected) {
591        return expected;
592      }
593
594      return value;
595    }
596  }
597  /**
598   * Sets the value for a property on a node.
599   *
600   * @param {DOMElement} node
601   * @param {string} name
602   * @param {*} value
603   */
604
605  function setValueForProperty(node, name, value, isCustomComponentTag) {
606    var propertyInfo = getPropertyInfo(name);
607
608    if (shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag)) {
609      return;
610    }
611
612    if (shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag)) {
613      value = null;
614    } // If the prop isn't in the special list, treat it as a simple attribute.
615
616
617    if (isCustomComponentTag || propertyInfo === null) {
618      if (isAttributeNameSafe(name)) {
619        var _attributeName = name;
620
621        if (value === null) {
622          node.removeAttribute(_attributeName);
623        } else {
624          node.setAttribute(_attributeName,  '' + value);
625        }
626      }
627
628      return;
629    }
630
631    var mustUseProperty = propertyInfo.mustUseProperty;
632
633    if (mustUseProperty) {
634      var propertyName = propertyInfo.propertyName;
635
636      if (value === null) {
637        var type = propertyInfo.type;
638        node[propertyName] = type === BOOLEAN ? false : '';
639      } else {
640        // Contrary to `setAttribute`, object properties are properly
641        // `toString`ed by IE8/9.
642        node[propertyName] = value;
643      }
644
645      return;
646    } // The rest are treated as attributes with special cases.
647
648
649    var attributeName = propertyInfo.attributeName,
650        attributeNamespace = propertyInfo.attributeNamespace;
651
652    if (value === null) {
653      node.removeAttribute(attributeName);
654    } else {
655      var _type = propertyInfo.type;
656      var attributeValue;
657
658      if (_type === BOOLEAN || _type === OVERLOADED_BOOLEAN && value === true) {
659        // If attribute type is boolean, we know for sure it won't be an execution sink
660        // and we won't require Trusted Type here.
661        attributeValue = '';
662      } else {
663        // `setAttribute` with objects becomes only `[object]` in IE8/9,
664        // ('' + value) makes it output the correct toString()-value.
665        {
666          attributeValue = '' + value;
667        }
668
669        if (propertyInfo.sanitizeURL) {
670          sanitizeURL(attributeValue.toString());
671        }
672      }
673
674      if (attributeNamespace) {
675        node.setAttributeNS(attributeNamespace, attributeName, attributeValue);
676      } else {
677        node.setAttribute(attributeName, attributeValue);
678      }
679    }
680  }
681
682  var ReactInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
683  var _assign = ReactInternals.assign;
684
685  // ATTENTION
686  // When adding new symbols to this file,
687  // Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'
688  // The Symbol used to tag the ReactElement-like types. If there is no native Symbol
689  // nor polyfill, then a plain number is used for performance.
690  var REACT_ELEMENT_TYPE = 0xeac7;
691  var REACT_PORTAL_TYPE = 0xeaca;
692  var REACT_FRAGMENT_TYPE = 0xeacb;
693  var REACT_STRICT_MODE_TYPE = 0xeacc;
694  var REACT_PROFILER_TYPE = 0xead2;
695  var REACT_PROVIDER_TYPE = 0xeacd;
696  var REACT_CONTEXT_TYPE = 0xeace;
697  var REACT_FORWARD_REF_TYPE = 0xead0;
698  var REACT_SUSPENSE_TYPE = 0xead1;
699  var REACT_SUSPENSE_LIST_TYPE = 0xead8;
700  var REACT_MEMO_TYPE = 0xead3;
701  var REACT_LAZY_TYPE = 0xead4;
702  var REACT_BLOCK_TYPE = 0xead9;
703  var REACT_SERVER_BLOCK_TYPE = 0xeada;
704  var REACT_FUNDAMENTAL_TYPE = 0xead5;
705  var REACT_SCOPE_TYPE = 0xead7;
706  var REACT_OPAQUE_ID_TYPE = 0xeae0;
707  var REACT_DEBUG_TRACING_MODE_TYPE = 0xeae1;
708  var REACT_OFFSCREEN_TYPE = 0xeae2;
709  var REACT_LEGACY_HIDDEN_TYPE = 0xeae3;
710
711  if (typeof Symbol === 'function' && Symbol.for) {
712    var symbolFor = Symbol.for;
713    REACT_ELEMENT_TYPE = symbolFor('react.element');
714    REACT_PORTAL_TYPE = symbolFor('react.portal');
715    REACT_FRAGMENT_TYPE = symbolFor('react.fragment');
716    REACT_STRICT_MODE_TYPE = symbolFor('react.strict_mode');
717    REACT_PROFILER_TYPE = symbolFor('react.profiler');
718    REACT_PROVIDER_TYPE = symbolFor('react.provider');
719    REACT_CONTEXT_TYPE = symbolFor('react.context');
720    REACT_FORWARD_REF_TYPE = symbolFor('react.forward_ref');
721    REACT_SUSPENSE_TYPE = symbolFor('react.suspense');
722    REACT_SUSPENSE_LIST_TYPE = symbolFor('react.suspense_list');
723    REACT_MEMO_TYPE = symbolFor('react.memo');
724    REACT_LAZY_TYPE = symbolFor('react.lazy');
725    REACT_BLOCK_TYPE = symbolFor('react.block');
726    REACT_SERVER_BLOCK_TYPE = symbolFor('react.server.block');
727    REACT_FUNDAMENTAL_TYPE = symbolFor('react.fundamental');
728    REACT_SCOPE_TYPE = symbolFor('react.scope');
729    REACT_OPAQUE_ID_TYPE = symbolFor('react.opaque.id');
730    REACT_DEBUG_TRACING_MODE_TYPE = symbolFor('react.debug_trace_mode');
731    REACT_OFFSCREEN_TYPE = symbolFor('react.offscreen');
732    REACT_LEGACY_HIDDEN_TYPE = symbolFor('react.legacy_hidden');
733  }
734
735  var MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
736  var FAUX_ITERATOR_SYMBOL = '@@iterator';
737  function getIteratorFn(maybeIterable) {
738    if (maybeIterable === null || typeof maybeIterable !== 'object') {
739      return null;
740    }
741
742    var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];
743
744    if (typeof maybeIterator === 'function') {
745      return maybeIterator;
746    }
747
748    return null;
749  }
750
751  // Helpers to patch console.logs to avoid logging during side-effect free
752  // replaying on render function. This currently only patches the object
vendor: 4,577 bytes, lines 753-917
753  // lazily which won't cover if the log function was extracted eagerly.
754  // We could also eagerly patch the method.
755  var disabledDepth = 0;
756  var prevLog;
757  var prevInfo;
758  var prevWarn;
759  var prevError;
760  var prevGroup;
761  var prevGroupCollapsed;
762  var prevGroupEnd;
763
764  function disabledLog() {}
765
766  disabledLog.__reactDisabledLog = true;
767  function disableLogs() {
768    {
769      if (disabledDepth === 0) {
770        /* eslint-disable react-internal/no-production-logging */
771        prevLog = console.log;
772        prevInfo = console.info;
773        prevWarn = console.warn;
774        prevError = console.error;
775        prevGroup = console.group;
776        prevGroupCollapsed = console.groupCollapsed;
777        prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099
778
779        var props = {
780          configurable: true,
781          enumerable: true,
782          value: disabledLog,
783          writable: true
784        }; // $FlowFixMe Flow thinks console is immutable.
785
786        Object.defineProperties(console, {
787          info: props,
788          log: props,
789          warn: props,
790          error: props,
791          group: props,
792          groupCollapsed: props,
793          groupEnd: props
794        });
795        /* eslint-enable react-internal/no-production-logging */
796      }
797
798      disabledDepth++;
799    }
800  }
801  function reenableLogs() {
802    {
803      disabledDepth--;
804
805      if (disabledDepth === 0) {
806        /* eslint-disable react-internal/no-production-logging */
807        var props = {
808          configurable: true,
809          enumerable: true,
810          writable: true
811        }; // $FlowFixMe Flow thinks console is immutable.
812
813        Object.defineProperties(console, {
814          log: _assign({}, props, {
815            value: prevLog
816          }),
817          info: _assign({}, props, {
818            value: prevInfo
819          }),
820          warn: _assign({}, props, {
821            value: prevWarn
822          }),
823          error: _assign({}, props, {
824            value: prevError
825          }),
826          group: _assign({}, props, {
827            value: prevGroup
828          }),
829          groupCollapsed: _assign({}, props, {
830            value: prevGroupCollapsed
831          }),
832          groupEnd: _assign({}, props, {
833            value: prevGroupEnd
834          })
835        });
836        /* eslint-enable react-internal/no-production-logging */
837      }
838
839      if (disabledDepth < 0) {
840        error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');
841      }
842    }
843  }
844
845  var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;
846  var prefix;
847  function describeBuiltInComponentFrame(name, source, ownerFn) {
848    {
849      if (prefix === undefined) {
850        // Extract the VM specific prefix used by each line.
851        try {
852          throw Error();
853        } catch (x) {
854          var match = x.stack.trim().match(/\n( *(at )?)/);
855          prefix = match && match[1] || '';
856        }
857      } // We use the prefix to ensure our stacks line up with native stack frames.
858
859
860      return '\n' + prefix + name;
861    }
862  }
863  var reentry = false;
864  var componentFrameCache;
865
866  {
867    var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;
868    componentFrameCache = new PossiblyWeakMap();
869  }
870
871  function describeNativeComponentFrame(fn, construct) {
872    // If something asked for a stack inside a fake render, it should get ignored.
873    if (!fn || reentry) {
874      return '';
875    }
876
877    {
878      var frame = componentFrameCache.get(fn);
879
880      if (frame !== undefined) {
881        return frame;
882      }
883    }
884
885    var control;
886    reentry = true;
887    var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.
888
889    Error.prepareStackTrace = undefined;
890    var previousDispatcher;
891
892    {
893      previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function
894      // for warnings.
895
896      ReactCurrentDispatcher.current = null;
897      disableLogs();
898    }
899
900    try {
901      // This should throw.
902      if (construct) {
903        // Something should be setting the props in the constructor.
904        var Fake = function () {
905          throw Error();
906        }; // $FlowFixMe
907
908
909        Object.defineProperty(Fake.prototype, 'props', {
910          set: function () {
911            // We use a throwing setter instead of frozen or non-writable props
912            // because that won't throw in a non-strict mode function.
913            throw Error();
914          }
915        });
916
917        if (typeof Reflect === 'object' && Reflect.construct) {
vendor: 14,299 bytes, lines 918-1415
918          // We construct a different control for this case to include any extra
919          // frames added by the construct call.
920          try {
921            Reflect.construct(Fake, []);
922          } catch (x) {
923            control = x;
924          }
925
926          Reflect.construct(fn, [], Fake);
927        } else {
928          try {
929            Fake.call();
930          } catch (x) {
931            control = x;
932          }
933
934          fn.call(Fake.prototype);
935        }
936      } else {
937        try {
938          throw Error();
939        } catch (x) {
940          control = x;
941        }
942
943        fn();
944      }
945    } catch (sample) {
946      // This is inlined manually because closure doesn't do it for us.
947      if (sample && control && typeof sample.stack === 'string') {
948        // This extracts the first frame from the sample that isn't also in the control.
949        // Skipping one frame that we assume is the frame that calls the two.
950        var sampleLines = sample.stack.split('\n');
951        var controlLines = control.stack.split('\n');
952        var s = sampleLines.length - 1;
953        var c = controlLines.length - 1;
954
955        while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {
956          // We expect at least one stack frame to be shared.
957          // Typically this will be the root most one. However, stack frames may be
958          // cut off due to maximum stack limits. In this case, one maybe cut off
959          // earlier than the other. We assume that the sample is longer or the same
960          // and there for cut off earlier. So we should find the root most frame in
961          // the sample somewhere in the control.
962          c--;
963        }
964
965        for (; s >= 1 && c >= 0; s--, c--) {
966          // Next we find the first one that isn't the same which should be the
967          // frame that called our sample function and the control.
968          if (sampleLines[s] !== controlLines[c]) {
969            // In V8, the first line is describing the message but other VMs don't.
970            // If we're about to return the first line, and the control is also on the same
971            // line, that's a pretty good indicator that our sample threw at same line as
972            // the control. I.e. before we entered the sample frame. So we ignore this result.
973            // This can happen if you passed a class to function component, or non-function.
974            if (s !== 1 || c !== 1) {
975              do {
976                s--;
977                c--; // We may still have similar intermediate frames from the construct call.
978                // The next one that isn't the same should be our match though.
979
980                if (c < 0 || sampleLines[s] !== controlLines[c]) {
981                  // V8 adds a "new" prefix for native classes. Let's remove it to make it prettier.
982                  var _frame = '\n' + sampleLines[s].replace(' at new ', ' at ');
983
984                  {
985                    if (typeof fn === 'function') {
986                      componentFrameCache.set(fn, _frame);
987                    }
988                  } // Return the line we found.
989
990
991                  return _frame;
992                }
993              } while (s >= 1 && c >= 0);
994            }
995
996            break;
997          }
998        }
999      }
1000    } finally {
1001      reentry = false;
1002
1003      {
1004        ReactCurrentDispatcher.current = previousDispatcher;
1005        reenableLogs();
1006      }
1007
1008      Error.prepareStackTrace = previousPrepareStackTrace;
1009    } // Fallback to just using the name if we couldn't make it throw.
1010
1011
1012    var name = fn ? fn.displayName || fn.name : '';
1013    var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';
1014
1015    {
1016      if (typeof fn === 'function') {
1017        componentFrameCache.set(fn, syntheticFrame);
1018      }
1019    }
1020
1021    return syntheticFrame;
1022  }
1023
1024  function describeClassComponentFrame(ctor, source, ownerFn) {
1025    {
1026      return describeNativeComponentFrame(ctor, true);
1027    }
1028  }
1029  function describeFunctionComponentFrame(fn, source, ownerFn) {
1030    {
1031      return describeNativeComponentFrame(fn, false);
1032    }
1033  }
1034
1035  function shouldConstruct(Component) {
1036    var prototype = Component.prototype;
1037    return !!(prototype && prototype.isReactComponent);
1038  }
1039
1040  function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {
1041
1042    if (type == null) {
1043      return '';
1044    }
1045
1046    if (typeof type === 'function') {
1047      {
1048        return describeNativeComponentFrame(type, shouldConstruct(type));
1049      }
1050    }
1051
1052    if (typeof type === 'string') {
1053      return describeBuiltInComponentFrame(type);
1054    }
1055
1056    switch (type) {
1057      case REACT_SUSPENSE_TYPE:
1058        return describeBuiltInComponentFrame('Suspense');
1059
1060      case REACT_SUSPENSE_LIST_TYPE:
1061        return describeBuiltInComponentFrame('SuspenseList');
1062    }
1063
1064    if (typeof type === 'object') {
1065      switch (type.$$typeof) {
1066        case REACT_FORWARD_REF_TYPE:
1067          return describeFunctionComponentFrame(type.render);
1068
1069        case REACT_MEMO_TYPE:
1070          // Memo may contain any component type so we recursively resolve it.
1071          return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);
1072
1073        case REACT_BLOCK_TYPE:
1074          return describeFunctionComponentFrame(type._render);
1075
1076        case REACT_LAZY_TYPE:
1077          {
1078            var lazyComponent = type;
1079            var payload = lazyComponent._payload;
1080            var init = lazyComponent._init;
1081
1082            try {
1083              // Lazy may contain any component type so we recursively resolve it.
1084              return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);
1085            } catch (x) {}
1086          }
1087      }
1088    }
1089
1090    return '';
1091  }
1092
1093  function describeFiber(fiber) {
1094    var owner =  fiber._debugOwner ? fiber._debugOwner.type : null ;
1095    var source =  fiber._debugSource ;
1096
1097    switch (fiber.tag) {
1098      case HostComponent:
1099        return describeBuiltInComponentFrame(fiber.type);
1100
1101      case LazyComponent:
1102        return describeBuiltInComponentFrame('Lazy');
1103
1104      case SuspenseComponent:
1105        return describeBuiltInComponentFrame('Suspense');
1106
1107      case SuspenseListComponent:
1108        return describeBuiltInComponentFrame('SuspenseList');
1109
1110      case FunctionComponent:
1111      case IndeterminateComponent:
1112      case SimpleMemoComponent:
1113        return describeFunctionComponentFrame(fiber.type);
1114
1115      case ForwardRef:
1116        return describeFunctionComponentFrame(fiber.type.render);
1117
1118      case Block:
1119        return describeFunctionComponentFrame(fiber.type._render);
1120
1121      case ClassComponent:
1122        return describeClassComponentFrame(fiber.type);
1123
1124      default:
1125        return '';
1126    }
1127  }
1128
1129  function getStackByFiberInDevAndProd(workInProgress) {
1130    try {
1131      var info = '';
1132      var node = workInProgress;
1133
1134      do {
1135        info += describeFiber(node);
1136        node = node.return;
1137      } while (node);
1138
1139      return info;
1140    } catch (x) {
1141      return '\nError generating stack: ' + x.message + '\n' + x.stack;
1142    }
1143  }
1144
1145  function getWrappedName(outerType, innerType, wrapperName) {
1146    var functionName = innerType.displayName || innerType.name || '';
1147    return outerType.displayName || (functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName);
1148  }
1149
1150  function getContextName(type) {
1151    return type.displayName || 'Context';
1152  }
1153
1154  function getComponentName(type) {
1155    if (type == null) {
1156      // Host root, text node or just invalid type.
1157      return null;
1158    }
1159
1160    {
1161      if (typeof type.tag === 'number') {
1162        error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');
1163      }
1164    }
1165
1166    if (typeof type === 'function') {
1167      return type.displayName || type.name || null;
1168    }
1169
1170    if (typeof type === 'string') {
1171      return type;
1172    }
1173
1174    switch (type) {
1175      case REACT_FRAGMENT_TYPE:
1176        return 'Fragment';
1177
1178      case REACT_PORTAL_TYPE:
1179        return 'Portal';
1180
1181      case REACT_PROFILER_TYPE:
1182        return 'Profiler';
1183
1184      case REACT_STRICT_MODE_TYPE:
1185        return 'StrictMode';
1186
1187      case REACT_SUSPENSE_TYPE:
1188        return 'Suspense';
1189
1190      case REACT_SUSPENSE_LIST_TYPE:
1191        return 'SuspenseList';
1192    }
1193
1194    if (typeof type === 'object') {
1195      switch (type.$$typeof) {
1196        case REACT_CONTEXT_TYPE:
1197          var context = type;
1198          return getContextName(context) + '.Consumer';
1199
1200        case REACT_PROVIDER_TYPE:
1201          var provider = type;
1202          return getContextName(provider._context) + '.Provider';
1203
1204        case REACT_FORWARD_REF_TYPE:
1205          return getWrappedName(type, type.render, 'ForwardRef');
1206
1207        case REACT_MEMO_TYPE:
1208          return getComponentName(type.type);
1209
1210        case REACT_BLOCK_TYPE:
1211          return getComponentName(type._render);
1212
1213        case REACT_LAZY_TYPE:
1214          {
1215            var lazyComponent = type;
1216            var payload = lazyComponent._payload;
1217            var init = lazyComponent._init;
1218
1219            try {
1220              return getComponentName(init(payload));
1221            } catch (x) {
1222              return null;
1223            }
1224          }
1225      }
1226    }
1227
1228    return null;
1229  }
1230
1231  var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;
1232  var current = null;
1233  var isRendering = false;
1234  function getCurrentFiberOwnerNameInDevOrNull() {
1235    {
1236      if (current === null) {
1237        return null;
1238      }
1239
1240      var owner = current._debugOwner;
1241
1242      if (owner !== null && typeof owner !== 'undefined') {
1243        return getComponentName(owner.type);
1244      }
1245    }
1246
1247    return null;
1248  }
1249
1250  function getCurrentFiberStackInDev() {
1251    {
1252      if (current === null) {
1253        return '';
1254      } // Safe because if current fiber exists, we are reconciling,
1255      // and it is guaranteed to be the work-in-progress version.
1256
1257
1258      return getStackByFiberInDevAndProd(current);
1259    }
1260  }
1261
1262  function resetCurrentFiber() {
1263    {
1264      ReactDebugCurrentFrame.getCurrentStack = null;
1265      current = null;
1266      isRendering = false;
1267    }
1268  }
1269  function setCurrentFiber(fiber) {
1270    {
1271      ReactDebugCurrentFrame.getCurrentStack = getCurrentFiberStackInDev;
1272      current = fiber;
1273      isRendering = false;
1274    }
1275  }
1276  function setIsRendering(rendering) {
1277    {
1278      isRendering = rendering;
1279    }
1280  }
1281  function getIsRendering() {
1282    {
1283      return isRendering;
1284    }
1285  }
1286
1287  // Flow does not allow string concatenation of most non-string types. To work
1288  // around this limitation, we use an opaque type that can only be obtained by
1289  // passing the value through getToStringValue first.
1290  function toString(value) {
1291    return '' + value;
1292  }
1293  function getToStringValue(value) {
1294    switch (typeof value) {
1295      case 'boolean':
1296      case 'number':
1297      case 'object':
1298      case 'string':
1299      case 'undefined':
1300        return value;
1301
1302      default:
1303        // function, symbol are assigned as empty strings
1304        return '';
1305    }
1306  }
1307
1308  var hasReadOnlyValue = {
1309    button: true,
1310    checkbox: true,
1311    image: true,
1312    hidden: true,
1313    radio: true,
1314    reset: true,
1315    submit: true
1316  };
1317  function checkControlledValueProps(tagName, props) {
1318    {
1319      if (!(hasReadOnlyValue[props.type] || props.onChange || props.onInput || props.readOnly || props.disabled || props.value == null)) {
1320        error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.');
1321      }
1322
1323      if (!(props.onChange || props.readOnly || props.disabled || props.checked == null)) {
1324        error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');
1325      }
1326    }
1327  }
1328
1329  function isCheckable(elem) {
1330    var type = elem.type;
1331    var nodeName = elem.nodeName;
1332    return nodeName && nodeName.toLowerCase() === 'input' && (type === 'checkbox' || type === 'radio');
1333  }
1334
1335  function getTracker(node) {
1336    return node._valueTracker;
1337  }
1338
1339  function detachTracker(node) {
1340    node._valueTracker = null;
1341  }
1342
1343  function getValueFromNode(node) {
1344    var value = '';
1345
1346    if (!node) {
1347      return value;
1348    }
1349
1350    if (isCheckable(node)) {
1351      value = node.checked ? 'true' : 'false';
1352    } else {
1353      value = node.value;
1354    }
1355
1356    return value;
1357  }
1358
1359  function trackValueOnNode(node) {
1360    var valueField = isCheckable(node) ? 'checked' : 'value';
1361    var descriptor = Object.getOwnPropertyDescriptor(node.constructor.prototype, valueField);
1362    var currentValue = '' + node[valueField]; // if someone has already defined a value or Safari, then bail
1363    // and don't track value will cause over reporting of changes,
1364    // but it's better then a hard failure
1365    // (needed for certain tests that spyOn input values and Safari)
1366
1367    if (node.hasOwnProperty(valueField) || typeof descriptor === 'undefined' || typeof descriptor.get !== 'function' || typeof descriptor.set !== 'function') {
1368      return;
1369    }
1370
1371    var get = descriptor.get,
1372        set = descriptor.set;
1373    Object.defineProperty(node, valueField, {
1374      configurable: true,
1375      get: function () {
1376        return get.call(this);
1377      },
1378      set: function (value) {
1379        currentValue = '' + value;
1380        set.call(this, value);
1381      }
1382    }); // We could've passed this the first time
1383    // but it triggers a bug in IE11 and Edge 14/15.
1384    // Calling defineProperty() again should be equivalent.
1385    // https://github.com/facebook/react/issues/11768
1386
1387    Object.defineProperty(node, valueField, {
1388      enumerable: descriptor.enumerable
1389    });
1390    var tracker = {
1391      getValue: function () {
1392        return currentValue;
1393      },
1394      setValue: function (value) {
1395        currentValue = '' + value;
1396      },
1397      stopTracking: function () {
1398        detachTracker(node);
1399        delete node[valueField];
1400      }
1401    };
1402    return tracker;
1403  }
1404
1405  function track(node) {
1406    if (getTracker(node)) {
1407      return;
1408    } // TODO: Once it's just Fiber we can move this to node._wrapperState
1409
1410
1411    node._valueTracker = trackValueOnNode(node);
1412  }
1413  function updateValueIfChanged(node) {
1414    if (!node) {
1415      return false;
vendor: 47,762 bytes, lines 1416-2762
1416    }
1417
1418    var tracker = getTracker(node); // if there is no tracker at this point it's unlikely
1419    // that trying again will succeed
1420
1421    if (!tracker) {
1422      return true;
1423    }
1424
1425    var lastValue = tracker.getValue();
1426    var nextValue = getValueFromNode(node);
1427
1428    if (nextValue !== lastValue) {
1429      tracker.setValue(nextValue);
1430      return true;
1431    }
1432
1433    return false;
1434  }
1435
1436  function getActiveElement(doc) {
1437    doc = doc || (typeof document !== 'undefined' ? document : undefined);
1438
1439    if (typeof doc === 'undefined') {
1440      return null;
1441    }
1442
1443    try {
1444      return doc.activeElement || doc.body;
1445    } catch (e) {
1446      return doc.body;
1447    }
1448  }
1449
1450  var didWarnValueDefaultValue = false;
1451  var didWarnCheckedDefaultChecked = false;
1452  var didWarnControlledToUncontrolled = false;
1453  var didWarnUncontrolledToControlled = false;
1454
1455  function isControlled(props) {
1456    var usesChecked = props.type === 'checkbox' || props.type === 'radio';
1457    return usesChecked ? props.checked != null : props.value != null;
1458  }
1459  /**
1460   * Implements an <input> host component that allows setting these optional
1461   * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.
1462   *
1463   * If `checked` or `value` are not supplied (or null/undefined), user actions
1464   * that affect the checked state or value will trigger updates to the element.
1465   *
1466   * If they are supplied (and not null/undefined), the rendered element will not
1467   * trigger updates to the element. Instead, the props must change in order for
1468   * the rendered element to be updated.
1469   *
1470   * The rendered element will be initialized as unchecked (or `defaultChecked`)
1471   * with an empty value (or `defaultValue`).
1472   *
1473   * See http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html
1474   */
1475
1476
1477  function getHostProps(element, props) {
1478    var node = element;
1479    var checked = props.checked;
1480
1481    var hostProps = _assign({}, props, {
1482      defaultChecked: undefined,
1483      defaultValue: undefined,
1484      value: undefined,
1485      checked: checked != null ? checked : node._wrapperState.initialChecked
1486    });
1487
1488    return hostProps;
1489  }
1490  function initWrapperState(element, props) {
1491    {
1492      checkControlledValueProps('input', props);
1493
1494      if (props.checked !== undefined && props.defaultChecked !== undefined && !didWarnCheckedDefaultChecked) {
1495        error('%s contains an input of type %s with both checked and defaultChecked props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the checked prop, or the defaultChecked prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type);
1496
1497        didWarnCheckedDefaultChecked = true;
1498      }
1499
1500      if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {
1501        error('%s contains an input of type %s with both value and defaultValue props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type);
1502
1503        didWarnValueDefaultValue = true;
1504      }
1505    }
1506
1507    var node = element;
1508    var defaultValue = props.defaultValue == null ? '' : props.defaultValue;
1509    node._wrapperState = {
1510      initialChecked: props.checked != null ? props.checked : props.defaultChecked,
1511      initialValue: getToStringValue(props.value != null ? props.value : defaultValue),
1512      controlled: isControlled(props)
1513    };
1514  }
1515  function updateChecked(element, props) {
1516    var node = element;
1517    var checked = props.checked;
1518
1519    if (checked != null) {
1520      setValueForProperty(node, 'checked', checked, false);
1521    }
1522  }
1523  function updateWrapper(element, props) {
1524    var node = element;
1525
1526    {
1527      var controlled = isControlled(props);
1528
1529      if (!node._wrapperState.controlled && controlled && !didWarnUncontrolledToControlled) {
1530        error('A component is changing an uncontrolled input to be controlled. ' + 'This is likely caused by the value changing from undefined to ' + 'a defined value, which should not happen. ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://reactjs.org/link/controlled-components');
1531
1532        didWarnUncontrolledToControlled = true;
1533      }
1534
1535      if (node._wrapperState.controlled && !controlled && !didWarnControlledToUncontrolled) {
1536        error('A component is changing a controlled input to be uncontrolled. ' + 'This is likely caused by the value changing from a defined to ' + 'undefined, which should not happen. ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://reactjs.org/link/controlled-components');
1537
1538        didWarnControlledToUncontrolled = true;
1539      }
1540    }
1541
1542    updateChecked(element, props);
1543    var value = getToStringValue(props.value);
1544    var type = props.type;
1545
1546    if (value != null) {
1547      if (type === 'number') {
1548        if (value === 0 && node.value === '' || // We explicitly want to coerce to number here if possible.
1549        // eslint-disable-next-line
1550        node.value != value) {
1551          node.value = toString(value);
1552        }
1553      } else if (node.value !== toString(value)) {
1554        node.value = toString(value);
1555      }
1556    } else if (type === 'submit' || type === 'reset') {
1557      // Submit/reset inputs need the attribute removed completely to avoid
1558      // blank-text buttons.
1559      node.removeAttribute('value');
1560      return;
1561    }
1562
1563    {
1564      // When syncing the value attribute, the value comes from a cascade of
1565      // properties:
1566      //  1. The value React property
1567      //  2. The defaultValue React property
1568      //  3. Otherwise there should be no change
1569      if (props.hasOwnProperty('value')) {
1570        setDefaultValue(node, props.type, value);
1571      } else if (props.hasOwnProperty('defaultValue')) {
1572        setDefaultValue(node, props.type, getToStringValue(props.defaultValue));
1573      }
1574    }
1575
1576    {
1577      // When syncing the checked attribute, it only changes when it needs
1578      // to be removed, such as transitioning from a checkbox into a text input
1579      if (props.checked == null && props.defaultChecked != null) {
1580        node.defaultChecked = !!props.defaultChecked;
1581      }
1582    }
1583  }
1584  function postMountWrapper(element, props, isHydrating) {
1585    var node = element; // Do not assign value if it is already set. This prevents user text input
1586    // from being lost during SSR hydration.
1587
1588    if (props.hasOwnProperty('value') || props.hasOwnProperty('defaultValue')) {
1589      var type = props.type;
1590      var isButton = type === 'submit' || type === 'reset'; // Avoid setting value attribute on submit/reset inputs as it overrides the
1591      // default value provided by the browser. See: #12872
1592
1593      if (isButton && (props.value === undefined || props.value === null)) {
1594        return;
1595      }
1596
1597      var initialValue = toString(node._wrapperState.initialValue); // Do not assign value if it is already set. This prevents user text input
1598      // from being lost during SSR hydration.
1599
1600      if (!isHydrating) {
1601        {
1602          // When syncing the value attribute, the value property should use
1603          // the wrapperState._initialValue property. This uses:
1604          //
1605          //   1. The value React property when present
1606          //   2. The defaultValue React property when present
1607          //   3. An empty string
1608          if (initialValue !== node.value) {
1609            node.value = initialValue;
1610          }
1611        }
1612      }
1613
1614      {
1615        // Otherwise, the value attribute is synchronized to the property,
1616        // so we assign defaultValue to the same thing as the value property
1617        // assignment step above.
1618        node.defaultValue = initialValue;
1619      }
1620    } // Normally, we'd just do `node.checked = node.checked` upon initial mount, less this bug
1621    // this is needed to work around a chrome bug where setting defaultChecked
1622    // will sometimes influence the value of checked (even after detachment).
1623    // Reference: https://bugs.chromium.org/p/chromium/issues/detail?id=608416
1624    // We need to temporarily unset name to avoid disrupting radio button groups.
1625
1626
1627    var name = node.name;
1628
1629    if (name !== '') {
1630      node.name = '';
1631    }
1632
1633    {
1634      // When syncing the checked attribute, both the checked property and
1635      // attribute are assigned at the same time using defaultChecked. This uses:
1636      //
1637      //   1. The checked React property when present
1638      //   2. The defaultChecked React property when present
1639      //   3. Otherwise, false
1640      node.defaultChecked = !node.defaultChecked;
1641      node.defaultChecked = !!node._wrapperState.initialChecked;
1642    }
1643
1644    if (name !== '') {
1645      node.name = name;
1646    }
1647  }
1648  function restoreControlledState(element, props) {
1649    var node = element;
1650    updateWrapper(node, props);
1651    updateNamedCousins(node, props);
1652  }
1653
1654  function updateNamedCousins(rootNode, props) {
1655    var name = props.name;
1656
1657    if (props.type === 'radio' && name != null) {
1658      var queryRoot = rootNode;
1659
1660      while (queryRoot.parentNode) {
1661        queryRoot = queryRoot.parentNode;
1662      } // If `rootNode.form` was non-null, then we could try `form.elements`,
1663      // but that sometimes behaves strangely in IE8. We could also try using
1664      // `form.getElementsByName`, but that will only return direct children
1665      // and won't include inputs that use the HTML5 `form=` attribute. Since
1666      // the input might not even be in a form. It might not even be in the
1667      // document. Let's just use the local `querySelectorAll` to ensure we don't
1668      // miss anything.
1669
1670
1671      var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type="radio"]');
1672
1673      for (var i = 0; i < group.length; i++) {
1674        var otherNode = group[i];
1675
1676        if (otherNode === rootNode || otherNode.form !== rootNode.form) {
1677          continue;
1678        } // This will throw if radio buttons rendered by different copies of React
1679        // and the same name are rendered into the same form (same as #1939).
1680        // That's probably okay; we don't support it just as we don't support
1681        // mixing React radio buttons with non-React ones.
1682
1683
1684        var otherProps = getFiberCurrentPropsFromNode(otherNode);
1685
1686        if (!otherProps) {
1687          {
1688            throw Error( "ReactDOMInput: Mixing React and non-React radio inputs with the same `name` is not supported." );
1689          }
1690        } // We need update the tracked value on the named cousin since the value
1691        // was changed but the input saw no event or value set
1692
1693
1694        updateValueIfChanged(otherNode); // If this is a controlled radio button group, forcing the input that
1695        // was previously checked to update will cause it to be come re-checked
1696        // as appropriate.
1697
1698        updateWrapper(otherNode, otherProps);
1699      }
1700    }
1701  } // In Chrome, assigning defaultValue to certain input types triggers input validation.
1702  // For number inputs, the display value loses trailing decimal points. For email inputs,
1703  // Chrome raises "The specified value <x> is not a valid email address".
1704  //
1705  // Here we check to see if the defaultValue has actually changed, avoiding these problems
1706  // when the user is inputting text
1707  //
1708  // https://github.com/facebook/react/issues/7253
1709
1710
1711  function setDefaultValue(node, type, value) {
1712    if ( // Focused number inputs synchronize on blur. See ChangeEventPlugin.js
1713    type !== 'number' || getActiveElement(node.ownerDocument) !== node) {
1714      if (value == null) {
1715        node.defaultValue = toString(node._wrapperState.initialValue);
1716      } else if (node.defaultValue !== toString(value)) {
1717        node.defaultValue = toString(value);
1718      }
1719    }
1720  }
1721
1722  var didWarnSelectedSetOnOption = false;
1723  var didWarnInvalidChild = false;
1724
1725  function flattenChildren(children) {
1726    var content = ''; // Flatten children. We'll warn if they are invalid
1727    // during validateProps() which runs for hydration too.
1728    // Note that this would throw on non-element objects.
1729    // Elements are stringified (which is normally irrelevant
1730    // but matters for <fbt>).
1731
1732    React.Children.forEach(children, function (child) {
1733      if (child == null) {
1734        return;
1735      }
1736
1737      content += child; // Note: we don't warn about invalid children here.
1738      // Instead, this is done separately below so that
1739      // it happens during the hydration code path too.
1740    });
1741    return content;
1742  }
1743  /**
1744   * Implements an <option> host component that warns when `selected` is set.
1745   */
1746
1747
1748  function validateProps(element, props) {
1749    {
1750      // This mirrors the code path above, but runs for hydration too.
1751      // Warn about invalid children here so that client and hydration are consistent.
1752      // TODO: this seems like it could cause a DEV-only throw for hydration
1753      // if children contains a non-element object. We should try to avoid that.
1754      if (typeof props.children === 'object' && props.children !== null) {
1755        React.Children.forEach(props.children, function (child) {
1756          if (child == null) {
1757            return;
1758          }
1759
1760          if (typeof child === 'string' || typeof child === 'number') {
1761            return;
1762          }
1763
1764          if (typeof child.type !== 'string') {
1765            return;
1766          }
1767
1768          if (!didWarnInvalidChild) {
1769            didWarnInvalidChild = true;
1770
1771            error('Only strings and numbers are supported as <option> children.');
1772          }
1773        });
1774      } // TODO: Remove support for `selected` in <option>.
1775
1776
1777      if (props.selected != null && !didWarnSelectedSetOnOption) {
1778        error('Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.');
1779
1780        didWarnSelectedSetOnOption = true;
1781      }
1782    }
1783  }
1784  function postMountWrapper$1(element, props) {
1785    // value="" should make a value attribute (#6219)
1786    if (props.value != null) {
1787      element.setAttribute('value', toString(getToStringValue(props.value)));
1788    }
1789  }
1790  function getHostProps$1(element, props) {
1791    var hostProps = _assign({
1792      children: undefined
1793    }, props);
1794
1795    var content = flattenChildren(props.children);
1796
1797    if (content) {
1798      hostProps.children = content;
1799    }
1800
1801    return hostProps;
1802  }
1803
1804  var didWarnValueDefaultValue$1;
1805
1806  {
1807    didWarnValueDefaultValue$1 = false;
1808  }
1809
1810  function getDeclarationErrorAddendum() {
1811    var ownerName = getCurrentFiberOwnerNameInDevOrNull();
1812
1813    if (ownerName) {
1814      return '\n\nCheck the render method of `' + ownerName + '`.';
1815    }
1816
1817    return '';
1818  }
1819
1820  var valuePropNames = ['value', 'defaultValue'];
1821  /**
1822   * Validation function for `value` and `defaultValue`.
1823   */
1824
1825  function checkSelectPropTypes(props) {
1826    {
1827      checkControlledValueProps('select', props);
1828
1829      for (var i = 0; i < valuePropNames.length; i++) {
1830        var propName = valuePropNames[i];
1831
1832        if (props[propName] == null) {
1833          continue;
1834        }
1835
1836        var isArray = Array.isArray(props[propName]);
1837
1838        if (props.multiple && !isArray) {
1839          error('The `%s` prop supplied to <select> must be an array if ' + '`multiple` is true.%s', propName, getDeclarationErrorAddendum());
1840        } else if (!props.multiple && isArray) {
1841          error('The `%s` prop supplied to <select> must be a scalar ' + 'value if `multiple` is false.%s', propName, getDeclarationErrorAddendum());
1842        }
1843      }
1844    }
1845  }
1846
1847  function updateOptions(node, multiple, propValue, setDefaultSelected) {
1848    var options = node.options;
1849
1850    if (multiple) {
1851      var selectedValues = propValue;
1852      var selectedValue = {};
1853
1854      for (var i = 0; i < selectedValues.length; i++) {
1855        // Prefix to avoid chaos with special keys.
1856        selectedValue['$' + selectedValues[i]] = true;
1857      }
1858
1859      for (var _i = 0; _i < options.length; _i++) {
1860        var selected = selectedValue.hasOwnProperty('$' + options[_i].value);
1861
1862        if (options[_i].selected !== selected) {
1863          options[_i].selected = selected;
1864        }
1865
1866        if (selected && setDefaultSelected) {
1867          options[_i].defaultSelected = true;
1868        }
1869      }
1870    } else {
1871      // Do not set `select.value` as exact behavior isn't consistent across all
1872      // browsers for all cases.
1873      var _selectedValue = toString(getToStringValue(propValue));
1874
1875      var defaultSelected = null;
1876
1877      for (var _i2 = 0; _i2 < options.length; _i2++) {
1878        if (options[_i2].value === _selectedValue) {
1879          options[_i2].selected = true;
1880
1881          if (setDefaultSelected) {
1882            options[_i2].defaultSelected = true;
1883          }
1884
1885          return;
1886        }
1887
1888        if (defaultSelected === null && !options[_i2].disabled) {
1889          defaultSelected = options[_i2];
1890        }
1891      }
1892
1893      if (defaultSelected !== null) {
1894        defaultSelected.selected = true;
1895      }
1896    }
1897  }
1898  /**
1899   * Implements a <select> host component that allows optionally setting the
1900   * props `value` and `defaultValue`. If `multiple` is false, the prop must be a
1901   * stringable. If `multiple` is true, the prop must be an array of stringables.
1902   *
1903   * If `value` is not supplied (or null/undefined), user actions that change the
1904   * selected option will trigger updates to the rendered options.
1905   *
1906   * If it is supplied (and not null/undefined), the rendered options will not
1907   * update in response to user actions. Instead, the `value` prop must change in
1908   * order for the rendered options to update.
1909   *
1910   * If `defaultValue` is provided, any options with the supplied values will be
1911   * selected.
1912   */
1913
1914
1915  function getHostProps$2(element, props) {
1916    return _assign({}, props, {
1917      value: undefined
1918    });
1919  }
1920  function initWrapperState$1(element, props) {
1921    var node = element;
1922
1923    {
1924      checkSelectPropTypes(props);
1925    }
1926
1927    node._wrapperState = {
1928      wasMultiple: !!props.multiple
1929    };
1930
1931    {
1932      if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue$1) {
1933        error('Select elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled select ' + 'element and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components');
1934
1935        didWarnValueDefaultValue$1 = true;
1936      }
1937    }
1938  }
1939  function postMountWrapper$2(element, props) {
1940    var node = element;
1941    node.multiple = !!props.multiple;
1942    var value = props.value;
1943
1944    if (value != null) {
1945      updateOptions(node, !!props.multiple, value, false);
1946    } else if (props.defaultValue != null) {
1947      updateOptions(node, !!props.multiple, props.defaultValue, true);
1948    }
1949  }
1950  function postUpdateWrapper(element, props) {
1951    var node = element;
1952    var wasMultiple = node._wrapperState.wasMultiple;
1953    node._wrapperState.wasMultiple = !!props.multiple;
1954    var value = props.value;
1955
1956    if (value != null) {
1957      updateOptions(node, !!props.multiple, value, false);
1958    } else if (wasMultiple !== !!props.multiple) {
1959      // For simplicity, reapply `defaultValue` if `multiple` is toggled.
1960      if (props.defaultValue != null) {
1961        updateOptions(node, !!props.multiple, props.defaultValue, true);
1962      } else {
1963        // Revert the select back to its default unselected state.
1964        updateOptions(node, !!props.multiple, props.multiple ? [] : '', false);
1965      }
1966    }
1967  }
1968  function restoreControlledState$1(element, props) {
1969    var node = element;
1970    var value = props.value;
1971
1972    if (value != null) {
1973      updateOptions(node, !!props.multiple, value, false);
1974    }
1975  }
1976
1977  var didWarnValDefaultVal = false;
1978
1979  /**
1980   * Implements a <textarea> host component that allows setting `value`, and
1981   * `defaultValue`. This differs from the traditional DOM API because value is
1982   * usually set as PCDATA children.
1983   *
1984   * If `value` is not supplied (or null/undefined), user actions that affect the
1985   * value will trigger updates to the element.
1986   *
1987   * If `value` is supplied (and not null/undefined), the rendered element will
1988   * not trigger updates to the element. Instead, the `value` prop must change in
1989   * order for the rendered element to be updated.
1990   *
1991   * The rendered element will be initialized with an empty value, the prop
1992   * `defaultValue` if specified, or the children content (deprecated).
1993   */
1994  function getHostProps$3(element, props) {
1995    var node = element;
1996
1997    if (!(props.dangerouslySetInnerHTML == null)) {
1998      {
1999        throw Error( "`dangerouslySetInnerHTML` does not make sense on <textarea>." );
2000      }
2001    } // Always set children to the same thing. In IE9, the selection range will
2002    // get reset if `textContent` is mutated.  We could add a check in setTextContent
2003    // to only set the value if/when the value differs from the node value (which would
2004    // completely solve this IE9 bug), but Sebastian+Sophie seemed to like this
2005    // solution. The value can be a boolean or object so that's why it's forced
2006    // to be a string.
2007
2008
2009    var hostProps = _assign({}, props, {
2010      value: undefined,
2011      defaultValue: undefined,
2012      children: toString(node._wrapperState.initialValue)
2013    });
2014
2015    return hostProps;
2016  }
2017  function initWrapperState$2(element, props) {
2018    var node = element;
2019
2020    {
2021      checkControlledValueProps('textarea', props);
2022
2023      if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValDefaultVal) {
2024        error('%s contains a textarea with both value and defaultValue props. ' + 'Textarea elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled textarea ' + 'and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component');
2025
2026        didWarnValDefaultVal = true;
2027      }
2028    }
2029
2030    var initialValue = props.value; // Only bother fetching default value if we're going to use it
2031
2032    if (initialValue == null) {
2033      var children = props.children,
2034          defaultValue = props.defaultValue;
2035
2036      if (children != null) {
2037        {
2038          error('Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.');
2039        }
2040
2041        {
2042          if (!(defaultValue == null)) {
2043            {
2044              throw Error( "If you supply `defaultValue` on a <textarea>, do not pass children." );
2045            }
2046          }
2047
2048          if (Array.isArray(children)) {
2049            if (!(children.length <= 1)) {
2050              {
2051                throw Error( "<textarea> can only have at most one child." );
2052              }
2053            }
2054
2055            children = children[0];
2056          }
2057
2058          defaultValue = children;
2059        }
2060      }
2061
2062      if (defaultValue == null) {
2063        defaultValue = '';
2064      }
2065
2066      initialValue = defaultValue;
2067    }
2068
2069    node._wrapperState = {
2070      initialValue: getToStringValue(initialValue)
2071    };
2072  }
2073  function updateWrapper$1(element, props) {
2074    var node = element;
2075    var value = getToStringValue(props.value);
2076    var defaultValue = getToStringValue(props.defaultValue);
2077
2078    if (value != null) {
2079      // Cast `value` to a string to ensure the value is set correctly. While
2080      // browsers typically do this as necessary, jsdom doesn't.
2081      var newValue = toString(value); // To avoid side effects (such as losing text selection), only set value if changed
2082
2083      if (newValue !== node.value) {
2084        node.value = newValue;
2085      }
2086
2087      if (props.defaultValue == null && node.defaultValue !== newValue) {
2088        node.defaultValue = newValue;
2089      }
2090    }
2091
2092    if (defaultValue != null) {
2093      node.defaultValue = toString(defaultValue);
2094    }
2095  }
2096  function postMountWrapper$3(element, props) {
2097    var node = element; // This is in postMount because we need access to the DOM node, which is not
2098    // available until after the component has mounted.
2099
2100    var textContent = node.textContent; // Only set node.value if textContent is equal to the expected
2101    // initial value. In IE10/IE11 there is a bug where the placeholder attribute
2102    // will populate textContent as well.
2103    // https://developer.microsoft.com/microsoft-edge/platform/issues/101525/
2104
2105    if (textContent === node._wrapperState.initialValue) {
2106      if (textContent !== '' && textContent !== null) {
2107        node.value = textContent;
2108      }
2109    }
2110  }
2111  function restoreControlledState$2(element, props) {
2112    // DOM component is still mounted; update
2113    updateWrapper$1(element, props);
2114  }
2115
2116  var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';
2117  var MATH_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';
2118  var SVG_NAMESPACE = 'http://www.w3.org/2000/svg';
2119  var Namespaces = {
2120    html: HTML_NAMESPACE,
2121    mathml: MATH_NAMESPACE,
2122    svg: SVG_NAMESPACE
2123  }; // Assumes there is no parent namespace.
2124
2125  function getIntrinsicNamespace(type) {
2126    switch (type) {
2127      case 'svg':
2128        return SVG_NAMESPACE;
2129
2130      case 'math':
2131        return MATH_NAMESPACE;
2132
2133      default:
2134        return HTML_NAMESPACE;
2135    }
2136  }
2137  function getChildNamespace(parentNamespace, type) {
2138    if (parentNamespace == null || parentNamespace === HTML_NAMESPACE) {
2139      // No (or default) parent namespace: potential entry point.
2140      return getIntrinsicNamespace(type);
2141    }
2142
2143    if (parentNamespace === SVG_NAMESPACE && type === 'foreignObject') {
2144      // We're leaving SVG.
2145      return HTML_NAMESPACE;
2146    } // By default, pass namespace below.
2147
2148
2149    return parentNamespace;
2150  }
2151
2152  /* globals MSApp */
2153
2154  /**
2155   * Create a function which has 'unsafe' privileges (required by windows8 apps)
2156   */
2157  var createMicrosoftUnsafeLocalFunction = function (func) {
2158    if (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) {
2159      return function (arg0, arg1, arg2, arg3) {
2160        MSApp.execUnsafeLocalFunction(function () {
2161          return func(arg0, arg1, arg2, arg3);
2162        });
2163      };
2164    } else {
2165      return func;
2166    }
2167  };
2168
2169  var reusableSVGContainer;
2170  /**
2171   * Set the innerHTML property of a node
2172   *
2173   * @param {DOMElement} node
2174   * @param {string} html
2175   * @internal
2176   */
2177
2178  var setInnerHTML = createMicrosoftUnsafeLocalFunction(function (node, html) {
2179    if (node.namespaceURI === Namespaces.svg) {
2180
2181      if (!('innerHTML' in node)) {
2182        // IE does not have innerHTML for SVG nodes, so instead we inject the
2183        // new markup in a temp node and then move the child nodes across into
2184        // the target node
2185        reusableSVGContainer = reusableSVGContainer || document.createElement('div');
2186        reusableSVGContainer.innerHTML = '<svg>' + html.valueOf().toString() + '</svg>';
2187        var svgNode = reusableSVGContainer.firstChild;
2188
2189        while (node.firstChild) {
2190          node.removeChild(node.firstChild);
2191        }
2192
2193        while (svgNode.firstChild) {
2194          node.appendChild(svgNode.firstChild);
2195        }
2196
2197        return;
2198      }
2199    }
2200
2201    node.innerHTML = html;
2202  });
2203
2204  /**
2205   * HTML nodeType values that represent the type of the node
2206   */
2207  var ELEMENT_NODE = 1;
2208  var TEXT_NODE = 3;
2209  var COMMENT_NODE = 8;
2210  var DOCUMENT_NODE = 9;
2211  var DOCUMENT_FRAGMENT_NODE = 11;
2212
2213  /**
2214   * Set the textContent property of a node. For text updates, it's faster
2215   * to set the `nodeValue` of the Text node directly instead of using
2216   * `.textContent` which will remove the existing node and create a new one.
2217   *
2218   * @param {DOMElement} node
2219   * @param {string} text
2220   * @internal
2221   */
2222
2223  var setTextContent = function (node, text) {
2224    if (text) {
2225      var firstChild = node.firstChild;
2226
2227      if (firstChild && firstChild === node.lastChild && firstChild.nodeType === TEXT_NODE) {
2228        firstChild.nodeValue = text;
2229        return;
2230      }
2231    }
2232
2233    node.textContent = text;
2234  };
2235
2236  // List derived from Gecko source code:
2237  // https://github.com/mozilla/gecko-dev/blob/4e638efc71/layout/style/test/property_database.js
2238  var shorthandToLonghand = {
2239    animation: ['animationDelay', 'animationDirection', 'animationDuration', 'animationFillMode', 'animationIterationCount', 'animationName', 'animationPlayState', 'animationTimingFunction'],
2240    background: ['backgroundAttachment', 'backgroundClip', 'backgroundColor', 'backgroundImage', 'backgroundOrigin', 'backgroundPositionX', 'backgroundPositionY', 'backgroundRepeat', 'backgroundSize'],
2241    backgroundPosition: ['backgroundPositionX', 'backgroundPositionY'],
2242    border: ['borderBottomColor', 'borderBottomStyle', 'borderBottomWidth', 'borderImageOutset', 'borderImageRepeat', 'borderImageSlice', 'borderImageSource', 'borderImageWidth', 'borderLeftColor', 'borderLeftStyle', 'borderLeftWidth', 'borderRightColor', 'borderRightStyle', 'borderRightWidth', 'borderTopColor', 'borderTopStyle', 'borderTopWidth'],
2243    borderBlockEnd: ['borderBlockEndColor', 'borderBlockEndStyle', 'borderBlockEndWidth'],
2244    borderBlockStart: ['borderBlockStartColor', 'borderBlockStartStyle', 'borderBlockStartWidth'],
2245    borderBottom: ['borderBottomColor', 'borderBottomStyle', 'borderBottomWidth'],
2246    borderColor: ['borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor'],
2247    borderImage: ['borderImageOutset', 'borderImageRepeat', 'borderImageSlice', 'borderImageSource', 'borderImageWidth'],
2248    borderInlineEnd: ['borderInlineEndColor', 'borderInlineEndStyle', 'borderInlineEndWidth'],
2249    borderInlineStart: ['borderInlineStartColor', 'borderInlineStartStyle', 'borderInlineStartWidth'],
2250    borderLeft: ['borderLeftColor', 'borderLeftStyle', 'borderLeftWidth'],
2251    borderRadius: ['borderBottomLeftRadius', 'borderBottomRightRadius', 'borderTopLeftRadius', 'borderTopRightRadius'],
2252    borderRight: ['borderRightColor', 'borderRightStyle', 'borderRightWidth'],
2253    borderStyle: ['borderBottomStyle', 'borderLeftStyle', 'borderRightStyle', 'borderTopStyle'],
2254    borderTop: ['borderTopColor', 'borderTopStyle', 'borderTopWidth'],
2255    borderWidth: ['borderBottomWidth', 'borderLeftWidth', 'borderRightWidth', 'borderTopWidth'],
2256    columnRule: ['columnRuleColor', 'columnRuleStyle', 'columnRuleWidth'],
2257    columns: ['columnCount', 'columnWidth'],
2258    flex: ['flexBasis', 'flexGrow', 'flexShrink'],
2259    flexFlow: ['flexDirection', 'flexWrap'],
2260    font: ['fontFamily', 'fontFeatureSettings', 'fontKerning', 'fontLanguageOverride', 'fontSize', 'fontSizeAdjust', 'fontStretch', 'fontStyle', 'fontVariant', 'fontVariantAlternates', 'fontVariantCaps', 'fontVariantEastAsian', 'fontVariantLigatures', 'fontVariantNumeric', 'fontVariantPosition', 'fontWeight', 'lineHeight'],
2261    fontVariant: ['fontVariantAlternates', 'fontVariantCaps', 'fontVariantEastAsian', 'fontVariantLigatures', 'fontVariantNumeric', 'fontVariantPosition'],
2262    gap: ['columnGap', 'rowGap'],
2263    grid: ['gridAutoColumns', 'gridAutoFlow', 'gridAutoRows', 'gridTemplateAreas', 'gridTemplateColumns', 'gridTemplateRows'],
2264    gridArea: ['gridColumnEnd', 'gridColumnStart', 'gridRowEnd', 'gridRowStart'],
2265    gridColumn: ['gridColumnEnd', 'gridColumnStart'],
2266    gridColumnGap: ['columnGap'],
2267    gridGap: ['columnGap', 'rowGap'],
2268    gridRow: ['gridRowEnd', 'gridRowStart'],
2269    gridRowGap: ['rowGap'],
2270    gridTemplate: ['gridTemplateAreas', 'gridTemplateColumns', 'gridTemplateRows'],
2271    listStyle: ['listStyleImage', 'listStylePosition', 'listStyleType'],
2272    margin: ['marginBottom', 'marginLeft', 'marginRight', 'marginTop'],
2273    marker: ['markerEnd', 'markerMid', 'markerStart'],
2274    mask: ['maskClip', 'maskComposite', 'maskImage', 'maskMode', 'maskOrigin', 'maskPositionX', 'maskPositionY', 'maskRepeat', 'maskSize'],
2275    maskPosition: ['maskPositionX', 'maskPositionY'],
2276    outline: ['outlineColor', 'outlineStyle', 'outlineWidth'],
2277    overflow: ['overflowX', 'overflowY'],
2278    padding: ['paddingBottom', 'paddingLeft', 'paddingRight', 'paddingTop'],
2279    placeContent: ['alignContent', 'justifyContent'],
2280    placeItems: ['alignItems', 'justifyItems'],
2281    placeSelf: ['alignSelf', 'justifySelf'],
2282    textDecoration: ['textDecorationColor', 'textDecorationLine', 'textDecorationStyle'],
2283    textEmphasis: ['textEmphasisColor', 'textEmphasisStyle'],
2284    transition: ['transitionDelay', 'transitionDuration', 'transitionProperty', 'transitionTimingFunction'],
2285    wordWrap: ['overflowWrap']
2286  };
2287
2288  /**
2289   * CSS properties which accept numbers but are not in units of "px".
2290   */
2291  var isUnitlessNumber = {
2292    animationIterationCount: true,
2293    borderImageOutset: true,
2294    borderImageSlice: true,
2295    borderImageWidth: true,
2296    boxFlex: true,
2297    boxFlexGroup: true,
2298    boxOrdinalGroup: true,
2299    columnCount: true,
2300    columns: true,
2301    flex: true,
2302    flexGrow: true,
2303    flexPositive: true,
2304    flexShrink: true,
2305    flexNegative: true,
2306    flexOrder: true,
2307    gridArea: true,
2308    gridRow: true,
2309    gridRowEnd: true,
2310    gridRowSpan: true,
2311    gridRowStart: true,
2312    gridColumn: true,
2313    gridColumnEnd: true,
2314    gridColumnSpan: true,
2315    gridColumnStart: true,
2316    fontWeight: true,
2317    lineClamp: true,
2318    lineHeight: true,
2319    opacity: true,
2320    order: true,
2321    orphans: true,
2322    tabSize: true,
2323    widows: true,
2324    zIndex: true,
2325    zoom: true,
2326    // SVG-related properties
2327    fillOpacity: true,
2328    floodOpacity: true,
2329    stopOpacity: true,
2330    strokeDasharray: true,
2331    strokeDashoffset: true,
2332    strokeMiterlimit: true,
2333    strokeOpacity: true,
2334    strokeWidth: true
2335  };
2336  /**
2337   * @param {string} prefix vendor-specific prefix, eg: Webkit
2338   * @param {string} key style name, eg: transitionDuration
2339   * @return {string} style name prefixed with `prefix`, properly camelCased, eg:
2340   * WebkitTransitionDuration
2341   */
2342
2343  function prefixKey(prefix, key) {
2344    return prefix + key.charAt(0).toUpperCase() + key.substring(1);
2345  }
2346  /**
2347   * Support style names that may come passed in prefixed by adding permutations
2348   * of vendor prefixes.
2349   */
2350
2351
2352  var prefixes = ['Webkit', 'ms', 'Moz', 'O']; // Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an
2353  // infinite loop, because it iterates over the newly added props too.
2354
2355  Object.keys(isUnitlessNumber).forEach(function (prop) {
2356    prefixes.forEach(function (prefix) {
2357      isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];
2358    });
2359  });
2360
2361  /**
2362   * Convert a value into the proper css writable value. The style name `name`
2363   * should be logical (no hyphens), as specified
2364   * in `CSSProperty.isUnitlessNumber`.
2365   *
2366   * @param {string} name CSS property name such as `topMargin`.
2367   * @param {*} value CSS property value such as `10px`.
2368   * @return {string} Normalized style value with dimensions applied.
2369   */
2370
2371  function dangerousStyleValue(name, value, isCustomProperty) {
2372    // Note that we've removed escapeTextForBrowser() calls here since the
2373    // whole string will be escaped when the attribute is injected into
2374    // the markup. If you provide unsafe user data here they can inject
2375    // arbitrary CSS which may be problematic (I couldn't repro this):
2376    // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
2377    // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/
2378    // This is not an XSS hole but instead a potential CSS injection issue
2379    // which has lead to a greater discussion about how we're going to
2380    // trust URLs moving forward. See #2115901
2381    var isEmpty = value == null || typeof value === 'boolean' || value === '';
2382
2383    if (isEmpty) {
2384      return '';
2385    }
2386
2387    if (!isCustomProperty && typeof value === 'number' && value !== 0 && !(isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name])) {
2388      return value + 'px'; // Presumes implicit 'px' suffix for unitless numbers
2389    }
2390
2391    return ('' + value).trim();
2392  }
2393
2394  var uppercasePattern = /([A-Z])/g;
2395  var msPattern = /^ms-/;
2396  /**
2397   * Hyphenates a camelcased CSS property name, for example:
2398   *
2399   *   > hyphenateStyleName('backgroundColor')
2400   *   < "background-color"
2401   *   > hyphenateStyleName('MozTransition')
2402   *   < "-moz-transition"
2403   *   > hyphenateStyleName('msTransition')
2404   *   < "-ms-transition"
2405   *
2406   * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix
2407   * is converted to `-ms-`.
2408   */
2409
2410  function hyphenateStyleName(name) {
2411    return name.replace(uppercasePattern, '-$1').toLowerCase().replace(msPattern, '-ms-');
2412  }
2413
2414  var warnValidStyle = function () {};
2415
2416  {
2417    // 'msTransform' is correct, but the other prefixes should be capitalized
2418    var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;
2419    var msPattern$1 = /^-ms-/;
2420    var hyphenPattern = /-(.)/g; // style values shouldn't contain a semicolon
2421
2422    var badStyleValueWithSemicolonPattern = /;\s*$/;
2423    var warnedStyleNames = {};
2424    var warnedStyleValues = {};
2425    var warnedForNaNValue = false;
2426    var warnedForInfinityValue = false;
2427
2428    var camelize = function (string) {
2429      return string.replace(hyphenPattern, function (_, character) {
2430        return character.toUpperCase();
2431      });
2432    };
2433
2434    var warnHyphenatedStyleName = function (name) {
2435      if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {
2436        return;
2437      }
2438
2439      warnedStyleNames[name] = true;
2440
2441      error('Unsupported style property %s. Did you mean %s?', name, // As Andi Smith suggests
2442      // (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix
2443      // is converted to lowercase `ms`.
2444      camelize(name.replace(msPattern$1, 'ms-')));
2445    };
2446
2447    var warnBadVendoredStyleName = function (name) {
2448      if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {
2449        return;
2450      }
2451
2452      warnedStyleNames[name] = true;
2453
2454      error('Unsupported vendor-prefixed style property %s. Did you mean %s?', name, name.charAt(0).toUpperCase() + name.slice(1));
2455    };
2456
2457    var warnStyleValueWithSemicolon = function (name, value) {
2458      if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) {
2459        return;
2460      }
2461
2462      warnedStyleValues[value] = true;
2463
2464      error("Style property values shouldn't contain a semicolon. " + 'Try "%s: %s" instead.', name, value.replace(badStyleValueWithSemicolonPattern, ''));
2465    };
2466
2467    var warnStyleValueIsNaN = function (name, value) {
2468      if (warnedForNaNValue) {
2469        return;
2470      }
2471
2472      warnedForNaNValue = true;
2473
2474      error('`NaN` is an invalid value for the `%s` css style property.', name);
2475    };
2476
2477    var warnStyleValueIsInfinity = function (name, value) {
2478      if (warnedForInfinityValue) {
2479        return;
2480      }
2481
2482      warnedForInfinityValue = true;
2483
2484      error('`Infinity` is an invalid value for the `%s` css style property.', name);
2485    };
2486
2487    warnValidStyle = function (name, value) {
2488      if (name.indexOf('-') > -1) {
2489        warnHyphenatedStyleName(name);
2490      } else if (badVendoredStyleNamePattern.test(name)) {
2491        warnBadVendoredStyleName(name);
2492      } else if (badStyleValueWithSemicolonPattern.test(value)) {
2493        warnStyleValueWithSemicolon(name, value);
2494      }
2495
2496      if (typeof value === 'number') {
2497        if (isNaN(value)) {
2498          warnStyleValueIsNaN(name, value);
2499        } else if (!isFinite(value)) {
2500          warnStyleValueIsInfinity(name, value);
2501        }
2502      }
2503    };
2504  }
2505
2506  var warnValidStyle$1 = warnValidStyle;
2507
2508  /**
2509   * Operations for dealing with CSS properties.
2510   */
2511
2512  /**
2513   * This creates a string that is expected to be equivalent to the style
2514   * attribute generated by server-side rendering. It by-passes warnings and
2515   * security checks so it's not safe to use this value for anything other than
2516   * comparison. It is only used in DEV for SSR validation.
2517   */
2518
2519  function createDangerousStringForStyles(styles) {
2520    {
2521      var serialized = '';
2522      var delimiter = '';
2523
2524      for (var styleName in styles) {
2525        if (!styles.hasOwnProperty(styleName)) {
2526          continue;
2527        }
2528
2529        var styleValue = styles[styleName];
2530
2531        if (styleValue != null) {
2532          var isCustomProperty = styleName.indexOf('--') === 0;
2533          serialized += delimiter + (isCustomProperty ? styleName : hyphenateStyleName(styleName)) + ':';
2534          serialized += dangerousStyleValue(styleName, styleValue, isCustomProperty);
2535          delimiter = ';';
2536        }
2537      }
2538
2539      return serialized || null;
2540    }
2541  }
2542  /**
2543   * Sets the value for multiple styles on a node.  If a value is specified as
2544   * '' (empty string), the corresponding style property will be unset.
2545   *
2546   * @param {DOMElement} node
2547   * @param {object} styles
2548   */
2549
2550  function setValueForStyles(node, styles) {
2551    var style = node.style;
2552
2553    for (var styleName in styles) {
2554      if (!styles.hasOwnProperty(styleName)) {
2555        continue;
2556      }
2557
2558      var isCustomProperty = styleName.indexOf('--') === 0;
2559
2560      {
2561        if (!isCustomProperty) {
2562          warnValidStyle$1(styleName, styles[styleName]);
2563        }
2564      }
2565
2566      var styleValue = dangerousStyleValue(styleName, styles[styleName], isCustomProperty);
2567
2568      if (styleName === 'float') {
2569        styleName = 'cssFloat';
2570      }
2571
2572      if (isCustomProperty) {
2573        style.setProperty(styleName, styleValue);
2574      } else {
2575        style[styleName] = styleValue;
2576      }
2577    }
2578  }
2579
2580  function isValueEmpty(value) {
2581    return value == null || typeof value === 'boolean' || value === '';
2582  }
2583  /**
2584   * Given {color: 'red', overflow: 'hidden'} returns {
2585   *   color: 'color',
2586   *   overflowX: 'overflow',
2587   *   overflowY: 'overflow',
2588   * }. This can be read as "the overflowY property was set by the overflow
2589   * shorthand". That is, the values are the property that each was derived from.
2590   */
2591
2592
2593  function expandShorthandMap(styles) {
2594    var expanded = {};
2595
2596    for (var key in styles) {
2597      var longhands = shorthandToLonghand[key] || [key];
2598
2599      for (var i = 0; i < longhands.length; i++) {
2600        expanded[longhands[i]] = key;
2601      }
2602    }
2603
2604    return expanded;
2605  }
2606  /**
2607   * When mixing shorthand and longhand property names, we warn during updates if
2608   * we expect an incorrect result to occur. In particular, we warn for:
2609   *
2610   * Updating a shorthand property (longhand gets overwritten):
2611   *   {font: 'foo', fontVariant: 'bar'} -> {font: 'baz', fontVariant: 'bar'}
2612   *   becomes .style.font = 'baz'
2613   * Removing a shorthand property (longhand gets lost too):
2614   *   {font: 'foo', fontVariant: 'bar'} -> {fontVariant: 'bar'}
2615   *   becomes .style.font = ''
2616   * Removing a longhand property (should revert to shorthand; doesn't):
2617   *   {font: 'foo', fontVariant: 'bar'} -> {font: 'foo'}
2618   *   becomes .style.fontVariant = ''
2619   */
2620
2621
2622  function validateShorthandPropertyCollisionInDev(styleUpdates, nextStyles) {
2623    {
2624      if (!nextStyles) {
2625        return;
2626      }
2627
2628      var expandedUpdates = expandShorthandMap(styleUpdates);
2629      var expandedStyles = expandShorthandMap(nextStyles);
2630      var warnedAbout = {};
2631
2632      for (var key in expandedUpdates) {
2633        var originalKey = expandedUpdates[key];
2634        var correctOriginalKey = expandedStyles[key];
2635
2636        if (correctOriginalKey && originalKey !== correctOriginalKey) {
2637          var warningKey = originalKey + ',' + correctOriginalKey;
2638
2639          if (warnedAbout[warningKey]) {
2640            continue;
2641          }
2642
2643          warnedAbout[warningKey] = true;
2644
2645          error('%s a style property during rerender (%s) when a ' + 'conflicting property is set (%s) can lead to styling bugs. To ' + "avoid this, don't mix shorthand and non-shorthand properties " + 'for the same value; instead, replace the shorthand with ' + 'separate values.', isValueEmpty(styleUpdates[originalKey]) ? 'Removing' : 'Updating', originalKey, correctOriginalKey);
2646        }
2647      }
2648    }
2649  }
2650
2651  // For HTML, certain tags should omit their close tag. We keep a list for
2652  // those special-case tags.
2653  var omittedCloseTags = {
2654    area: true,
2655    base: true,
2656    br: true,
2657    col: true,
2658    embed: true,
2659    hr: true,
2660    img: true,
2661    input: true,
2662    keygen: true,
2663    link: true,
2664    meta: true,
2665    param: true,
2666    source: true,
2667    track: true,
2668    wbr: true // NOTE: menuitem's close tag should be omitted, but that causes problems.
2669
2670  };
2671
2672  // `omittedCloseTags` except that `menuitem` should still have its closing tag.
2673
2674  var voidElementTags = _assign({
2675    menuitem: true
2676  }, omittedCloseTags);
2677
2678  var HTML = '__html';
2679
2680  function assertValidProps(tag, props) {
2681    if (!props) {
2682      return;
2683    } // Note the use of `==` which checks for null or undefined.
2684
2685
2686    if (voidElementTags[tag]) {
2687      if (!(props.children == null && props.dangerouslySetInnerHTML == null)) {
2688        {
2689          throw Error( tag + " is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`." );
2690        }
2691      }
2692    }
2693
2694    if (props.dangerouslySetInnerHTML != null) {
2695      if (!(props.children == null)) {
2696        {
2697          throw Error( "Can only set one of `children` or `props.dangerouslySetInnerHTML`." );
2698        }
2699      }
2700
2701      if (!(typeof props.dangerouslySetInnerHTML === 'object' && HTML in props.dangerouslySetInnerHTML)) {
2702        {
2703          throw Error( "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://reactjs.org/link/dangerously-set-inner-html for more information." );
2704        }
2705      }
2706    }
2707
2708    {
2709      if (!props.suppressContentEditableWarning && props.contentEditable && props.children != null) {
2710        error('A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.');
2711      }
2712    }
2713
2714    if (!(props.style == null || typeof props.style === 'object')) {
2715      {
2716        throw Error( "The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX." );
2717      }
2718    }
2719  }
2720
2721  function isCustomComponent(tagName, props) {
2722    if (tagName.indexOf('-') === -1) {
2723      return typeof props.is === 'string';
2724    }
2725
2726    switch (tagName) {
2727      // These are reserved SVG and MathML elements.
2728      // We don't mind this list too much because we expect it to never grow.
2729      // The alternative is to track the namespace in a few places which is convoluted.
2730      // https://w3c.github.io/webcomponents/spec/custom/#custom-elements-core-concepts
2731      case 'annotation-xml':
2732      case 'color-profile':
2733      case 'font-face':
2734      case 'font-face-src':
2735      case 'font-face-uri':
2736      case 'font-face-format':
2737      case 'font-face-name':
2738      case 'missing-glyph':
2739        return false;
2740
2741      default:
2742        return true;
2743    }
2744  }
2745
2746  // When adding attributes to the HTML or SVG allowed attribute list, be sure to
2747  // also add them to this module to ensure casing and incorrect name
2748  // warnings.
2749  var possibleStandardNames = {
2750    // HTML
2751    accept: 'accept',
2752    acceptcharset: 'acceptCharset',
2753    'accept-charset': 'acceptCharset',
2754    accesskey: 'accessKey',
2755    action: 'action',
2756    allowfullscreen: 'allowFullScreen',
2757    alt: 'alt',
2758    as: 'as',
2759    async: 'async',
2760    autocapitalize: 'autoCapitalize',
2761    autocomplete: 'autoComplete',
2762    autocorrect: 'autoCorrect',
2763    autofocus: 'autoFocus',
2764    autoplay: 'autoPlay',
2765    autosave: 'autoSave',
2766    capture: 'capture',
2767    cellpadding: 'cellPadding',
2768    cellspacing: 'cellSpacing',
2769    challenge: 'challenge',
2770    charset: 'charSet',
2771    checked: 'checked',
2772    children: 'children',
2773    cite: 'cite',
2774    class: 'className',
2775    classid: 'classID',
2776    classname: 'className',
2777    cols: 'cols',
2778    colspan: 'colSpan',
2779    content: 'content',
2780    contenteditable: 'contentEditable',
2781    contextmenu: 'contextMenu',
2782    controls: 'controls',
2783    controlslist: 'controlsList',
2784    coords: 'coords',
2785    crossorigin: 'crossOrigin',
2786    dangerouslysetinnerhtml: 'dangerouslySetInnerHTML',
2787    data: 'data',
2788    datetime: 'dateTime',
2789    default: 'default',
2790    defaultchecked: 'defaultChecked',
2791    defaultvalue: 'defaultValue',
2792    defer: 'defer',
2793    dir: 'dir',
2794    disabled: 'disabled',
2795    disablepictureinpicture: 'disablePictureInPicture',
2796    disableremoteplayback: 'disableRemotePlayback',
2797    download: 'download',
2798    draggable: 'draggable',
2799    enctype: 'encType',
2800    enterkeyhint: 'enterKeyHint',
2801    for: 'htmlFor',
2802    form: 'form',
2803    formmethod: 'formMethod',
2804    formaction: 'formAction',
2805    formenctype: 'formEncType',
2806    formnovalidate: 'formNoValidate',
2807    formtarget: 'formTarget',
2808    frameborder: 'frameBorder',
2809    headers: 'headers',
2810    height: 'height',
2811    hidden: 'hidden',
2812    high: 'high',
2813    href: 'href',
2814    hreflang: 'hrefLang',
2815    htmlfor: 'htmlFor',
2816    httpequiv: 'httpEquiv',
2817    'http-equiv': 'httpEquiv',
2818    icon: 'icon',
2819    id: 'id',
2820    innerhtml: 'innerHTML',
2821    inputmode: 'inputMode',
2822    integrity: 'integrity',
2823    is: 'is',
2824    itemid: 'itemID',
2825    itemprop: 'itemProp',
2826    itemref: 'itemRef',
2827    itemscope: 'itemScope',
2828    itemtype: 'itemType',
2829    keyparams: 'keyParams',
2830    keytype: 'keyType',
2831    kind: 'kind',
2832    label: 'label',
2833    lang: 'lang',
2834    list: 'list',
2835    loop: 'loop',
2836    low: 'low',
2837    manifest: 'manifest',
2838    marginwidth: 'marginWidth',
2839    marginheight: 'marginHeight',
2840    max: 'max',
2841    maxlength: 'maxLength',
2842    media: 'media',
2843    mediagroup: 'mediaGroup',
2844    method: 'method',
2845    min: 'min',
2846    minlength: 'minLength',
2847    multiple: 'multiple',
2848    muted: 'muted',
2849    name: 'name',
2850    nomodule: 'noModule',
2851    nonce: 'nonce',
2852    novalidate: 'noValidate',
2853    open: 'open',
2854    optimum: 'optimum',
2855    pattern: 'pattern',
2856    placeholder: 'placeholder',
2857    playsinline: 'playsInline',
2858    poster: 'poster',
2859    preload: 'preload',
2860    profile: 'profile',
2861    radiogroup: 'radioGroup',
2862    readonly: 'readOnly',
2863    referrerpolicy: 'referrerPolicy',
2864    rel: 'rel',
2865    required: 'required',
2866    reversed: 'reversed',
2867    role: 'role',
2868    rows: 'rows',
2869    rowspan: 'rowSpan',
2870    sandbox: 'sandbox',
2871    scope: 'scope',
2872    scoped: 'scoped',
2873    scrolling: 'scrolling',
2874    seamless: 'seamless',
2875    selected: 'selected',
2876    shape: 'shape',
2877    size: 'size',
2878    sizes: 'sizes',
2879    span: 'span',
2880    spellcheck: 'spellCheck',
2881    src: 'src',
2882    srcdoc: 'srcDoc',
2883    srclang: 'srcLang',
2884    srcset: 'srcSet',
2885    start: 'start',
2886    step: 'step',
2887    style: 'style',
2888    summary: 'summary',
2889    tabindex: 'tabIndex',
2890    target: 'target',
2891    title: 'title',
2892    type: 'type',
2893    usemap: 'useMap',
2894    value: 'value',
2895    width: 'width',
2896    wmode: 'wmode',
2897    wrap: 'wrap',
2898    // SVG
2899    about: 'about',
2900    accentheight: 'accentHeight',
2901    'accent-height': 'accentHeight',
2902    accumulate: 'accumulate',
2903    additive: 'additive',
2904    alignmentbaseline: 'alignmentBaseline',
2905    'alignment-baseline': 'alignmentBaseline',
2906    allowreorder: 'allowReorder',
2907    alphabetic: 'alphabetic',
2908    amplitude: 'amplitude',
2909    arabicform: 'arabicForm',
2910    'arabic-form': 'arabicForm',
2911    ascent: 'ascent',
2912    attributename: 'attributeName',
2913    attributetype: 'attributeType',
2914    autoreverse: 'autoReverse',
2915    azimuth: 'azimuth',
2916    basefrequency: 'baseFrequency',
2917    baselineshift: 'baselineShift',
2918    'baseline-shift': 'baselineShift',
2919    baseprofile: 'baseProfile',
2920    bbox: 'bbox',
2921    begin: 'begin',
2922    bias: 'bias',
2923    by: 'by',
2924    calcmode: 'calcMode',
2925    capheight: 'capHeight',
2926    'cap-height': 'capHeight',
2927    clip: 'clip',
2928    clippath: 'clipPath',
2929    'clip-path': 'clipPath',
2930    clippathunits: 'clipPathUnits',
2931    cliprule: 'clipRule',
2932    'clip-rule': 'clipRule',
2933    color: 'color',
2934    colorinterpolation: 'colorInterpolation',
2935    'color-interpolation': 'colorInterpolation',
2936    colorinterpolationfilters: 'colorInterpolationFilters',
2937    'color-interpolation-filters': 'colorInterpolationFilters',
2938    colorprofile: 'colorProfile',
2939    'color-profile': 'colorProfile',
2940    colorrendering: 'colorRendering',
2941    'color-rendering': 'colorRendering',
2942    contentscripttype: 'contentScriptType',
2943    contentstyletype: 'contentStyleType',
2944    cursor: 'cursor',
2945    cx: 'cx',
2946    cy: 'cy',
2947    d: 'd',
2948    datatype: 'datatype',
2949    decelerate: 'decelerate',
2950    descent: 'descent',
2951    diffuseconstant: 'diffuseConstant',
2952    direction: 'direction',
2953    display: 'display',
2954    divisor: 'divisor',
2955    dominantbaseline: 'dominantBaseline',
2956    'dominant-baseline': 'dominantBaseline',
2957    dur: 'dur',
2958    dx: 'dx',
2959    dy: 'dy',
2960    edgemode: 'edgeMode',
2961    elevation: 'elevation',
2962    enablebackground: 'enableBackground',
2963    'enable-background': 'enableBackground',
2964    end: 'end',
2965    exponent: 'exponent',
2966    externalresourcesrequired: 'externalResourcesRequired',
2967    fill: 'fill',
2968    fillopacity: 'fillOpacity',
2969    'fill-opacity': 'fillOpacity',
2970    fillrule: 'fillRule',
2971    'fill-rule': 'fillRule',
2972    filter: 'filter',
2973    filterres: 'filterRes',
2974    filterunits: 'filterUnits',
2975    floodopacity: 'floodOpacity',
2976    'flood-opacity': 'floodOpacity',
2977    floodcolor: 'floodColor',
2978    'flood-color': 'floodColor',
2979    focusable: 'focusable',
2980    fontfamily: 'fontFamily',
2981    'font-family': 'fontFamily',
2982    fontsize: 'fontSize',
2983    'font-size': 'fontSize',
2984    fontsizeadjust: 'fontSizeAdjust',
2985    'font-size-adjust': 'fontSizeAdjust',
2986    fontstretch: 'fontStretch',
2987    'font-stretch': 'fontStretch',
2988    fontstyle: 'fontStyle',
2989    'font-style': 'fontStyle',
2990    fontvariant: 'fontVariant',
2991    'font-variant': 'fontVariant',
2992    fontweight: 'fontWeight',
2993    'font-weight': 'fontWeight',
2994    format: 'format',
2995    from: 'from',
2996    fx: 'fx',
2997    fy: 'fy',
2998    g1: 'g1',
2999    g2: 'g2',
3000    glyphname: 'glyphName',
3001    'glyph-name': 'glyphName',
3002    glyphorientationhorizontal: 'glyphOrientationHorizontal',
3003    'glyph-orientation-horizontal': 'glyphOrientationHorizontal',
3004    glyphorientationvertical: 'glyphOrientationVertical',
3005    'glyph-orientation-vertical': 'glyphOrientationVertical',
3006    glyphref: 'glyphRef',
3007    gradienttransform: 'gradientTransform',
3008    gradientunits: 'gradientUnits',
3009    hanging: 'hanging',
3010    horizadvx: 'horizAdvX',
3011    'horiz-adv-x': 'horizAdvX',
3012    horizoriginx: 'horizOriginX',
3013    'horiz-origin-x': 'horizOriginX',
3014    ideographic: 'ideographic',
3015    imagerendering: 'imageRendering',
3016    'image-rendering': 'imageRendering',
3017    in2: 'in2',
3018    in: 'in',
3019    inlist: 'inlist',
3020    intercept: 'intercept',
3021    k1: 'k1',
3022    k2: 'k2',
3023    k3: 'k3',
3024    k4: 'k4',
3025    k: 'k',
3026    kernelmatrix: 'kernelMatrix',
3027    kernelunitlength: 'kernelUnitLength',
3028    kerning: 'kerning',
3029    keypoints: 'keyPoints',
3030    keysplines: 'keySplines',
3031    keytimes: 'keyTimes',
3032    lengthadjust: 'lengthAdjust',
3033    letterspacing: 'letterSpacing',
3034    'letter-spacing': 'letterSpacing',
3035    lightingcolor: 'lightingColor',
3036    'lighting-color': 'lightingColor',
3037    limitingconeangle: 'limitingConeAngle',
3038    local: 'local',
3039    markerend: 'markerEnd',
3040    'marker-end': 'markerEnd',
3041    markerheight: 'markerHeight',
3042    markermid: 'markerMid',
3043    'marker-mid': 'markerMid',
3044    markerstart: 'markerStart',
3045    'marker-start': 'markerStart',
3046    markerunits: 'markerUnits',
3047    markerwidth: 'markerWidth',
3048    mask: 'mask',
3049    maskcontentunits: 'maskContentUnits',
3050    maskunits: 'maskUnits',
3051    mathematical: 'mathematical',
3052    mode: 'mode',
3053    numoctaves: 'numOctaves',
3054    offset: 'offset',
3055    opacity: 'opacity',
3056    operator: 'operator',
3057    order: 'order',
3058    orient: 'orient',
3059    orientation: 'orientation',
3060    origin: 'origin',
3061    overflow: 'overflow',
3062    overlineposition: 'overlinePosition',
3063    'overline-position': 'overlinePosition',
3064    overlinethickness: 'overlineThickness',
3065    'overline-thickness': 'overlineThickness',
3066    paintorder: 'paintOrder',
3067    'paint-order': 'paintOrder',
3068    panose1: 'panose1',
3069    'panose-1': 'panose1',
3070    pathlength: 'pathLength',
3071    patterncontentunits: 'patternContentUnits',
3072    patterntransform: 'patternTransform',
3073    patternunits: 'patternUnits',
3074    pointerevents: 'pointerEvents',
3075    'pointer-events': 'pointerEvents',
3076    points: 'points',
3077    pointsatx: 'pointsAtX',
3078    pointsaty: 'pointsAtY',
3079    pointsatz: 'pointsAtZ',
3080    prefix: 'prefix',
3081    preservealpha: 'preserveAlpha',
3082    preserveaspectratio: 'preserveAspectRatio',
3083    primitiveunits: 'primitiveUnits',
3084    property: 'property',
3085    r: 'r',
3086    radius: 'radius',
3087    refx: 'refX',
3088    refy: 'refY',
3089    renderingintent: 'renderingIntent',
3090    'rendering-intent': 'renderingIntent',
3091    repeatcount: 'repeatCount',
3092    repeatdur: 'repeatDur',
3093    requiredextensions: 'requiredExtensions',
3094    requiredfeatures: 'requiredFeatures',
3095    resource: 'resource',
3096    restart: 'restart',
3097    result: 'result',
3098    results: 'results',
3099    rotate: 'rotate',
3100    rx: 'rx',
3101    ry: 'ry',
3102    scale: 'scale',
3103    security: 'security',
3104    seed: 'seed',
3105    shaperendering: 'shapeRendering',
3106    'shape-rendering': 'shapeRendering',
3107    slope: 'slope',
3108    spacing: 'spacing',
3109    specularconstant: 'specularConstant',
3110    specularexponent: 'specularExponent',
3111    speed: 'speed',
3112    spreadmethod: 'spreadMethod',
3113    startoffset: 'startOffset',
3114    stddeviation: 'stdDeviation',
3115    stemh: 'stemh',
3116    stemv: 'stemv',
3117    stitchtiles: 'stitchTiles',
3118    stopcolor: 'stopColor',
3119    'stop-color': 'stopColor',
3120    stopopacity: 'stopOpacity',
3121    'stop-opacity': 'stopOpacity',
3122    strikethroughposition: 'strikethroughPosition',
3123    'strikethrough-position': 'strikethroughPosition',
3124    strikethroughthickness: 'strikethroughThickness',
3125    'strikethrough-thickness': 'strikethroughThickness',
3126    string: 'string',
3127    stroke: 'stroke',
3128    strokedasharray: 'strokeDasharray',
3129    'stroke-dasharray': 'strokeDasharray',
3130    strokedashoffset: 'strokeDashoffset',
3131    'stroke-dashoffset': 'strokeDashoffset',
3132    strokelinecap: 'strokeLinecap',
3133    'stroke-linecap': 'strokeLinecap',
3134    strokelinejoin: 'strokeLinejoin',
3135    'stroke-linejoin': 'strokeLinejoin',
3136    strokemiterlimit: 'strokeMiterlimit',
3137    'stroke-miterlimit': 'strokeMiterlimit',
3138    strokewidth: 'strokeWidth',
3139    'stroke-width': 'strokeWidth',
3140    strokeopacity: 'strokeOpacity',
3141    'stroke-opacity': 'strokeOpacity',
3142    suppresscontenteditablewarning: 'suppressContentEditableWarning',
3143    suppresshydrationwarning: 'suppressHydrationWarning',
3144    surfacescale: 'surfaceScale',
3145    systemlanguage: 'systemLanguage',
3146    tablevalues: 'tableValues',
3147    targetx: 'targetX',
3148    targety: 'targetY',
3149    textanchor: 'textAnchor',
3150    'text-anchor': 'textAnchor',
3151    textdecoration: 'textDecoration',
3152    'text-decoration': 'textDecoration',
3153    textlength: 'textLength',
3154    textrendering: 'textRendering',
3155    'text-rendering': 'textRendering',
3156    to: 'to',
3157    transform: 'transform',
3158    typeof: 'typeof',
3159    u1: 'u1',
3160    u2: 'u2',
3161    underlineposition: 'underlinePosition',
3162    'underline-position': 'underlinePosition',
3163    underlinethickness: 'underlineThickness',
3164    'underline-thickness': 'underlineThickness',
3165    unicode: 'unicode',
3166    unicodebidi: 'unicodeBidi',
3167    'unicode-bidi': 'unicodeBidi',
3168    unicoderange: 'unicodeRange',
3169    'unicode-range': 'unicodeRange',
3170    unitsperem: 'unitsPerEm',
3171    'units-per-em': 'unitsPerEm',
3172    unselectable: 'unselectable',
3173    valphabetic: 'vAlphabetic',
3174    'v-alphabetic': 'vAlphabetic',
3175    values: 'values',
3176    vectoreffect: 'vectorEffect',
3177    'vector-effect': 'vectorEffect',
3178    version: 'version',
3179    vertadvy: 'vertAdvY',
3180    'vert-adv-y': 'vertAdvY',
3181    vertoriginx: 'vertOriginX',
3182    'vert-origin-x': 'vertOriginX',
3183    vertoriginy: 'vertOriginY',
3184    'vert-origin-y': 'vertOriginY',
3185    vhanging: 'vHanging',
3186    'v-hanging': 'vHanging',
3187    videographic: 'vIdeographic',
3188    'v-ideographic': 'vIdeographic',
3189    viewbox: 'viewBox',
3190    viewtarget: 'viewTarget',
3191    visibility: 'visibility',
3192    vmathematical: 'vMathematical',
3193    'v-mathematical': 'vMathematical',
3194    vocab: 'vocab',
3195    widths: 'widths',
3196    wordspacing: 'wordSpacing',
3197    'word-spacing': 'wordSpacing',
3198    writingmode: 'writingMode',
3199    'writing-mode': 'writingMode',
3200    x1: 'x1',
3201    x2: 'x2',
3202    x: 'x',
3203    xchannelselector: 'xChannelSelector',
3204    xheight: 'xHeight',
3205    'x-height': 'xHeight',
3206    xlinkactuate: 'xlinkActuate',
3207    'xlink:actuate': 'xlinkActuate',
3208    xlinkarcrole: 'xlinkArcrole',
3209    'xlink:arcrole': 'xlinkArcrole',
3210    xlinkhref: 'xlinkHref',
3211    'xlink:href': 'xlinkHref',
3212    xlinkrole: 'xlinkRole',
3213    'xlink:role': 'xlinkRole',
3214    xlinkshow: 'xlinkShow',
3215    'xlink:show': 'xlinkShow',
3216    xlinktitle: 'xlinkTitle',
3217    'xlink:title': 'xlinkTitle',
3218    xlinktype: 'xlinkType',
3219    'xlink:type': 'xlinkType',
3220    xmlbase: 'xmlBase',
3221    'xml:base': 'xmlBase',
3222    xmllang: 'xmlLang',
3223    'xml:lang': 'xmlLang',
3224    xmlns: 'xmlns',
3225    'xml:space': 'xmlSpace',
3226    xmlnsxlink: 'xmlnsXlink',
3227    'xmlns:xlink': 'xmlnsXlink',
3228    xmlspace: 'xmlSpace',
3229    y1: 'y1',
3230    y2: 'y2',
3231    y: 'y',
3232    ychannelselector: 'yChannelSelector',
3233    z: 'z',
3234    zoomandpan: 'zoomAndPan'
3235  };
3236
3237  var ariaProperties = {
3238    'aria-current': 0,
3239    // state
3240    'aria-details': 0,
3241    'aria-disabled': 0,
3242    // state
3243    'aria-hidden': 0,
3244    // state
3245    'aria-invalid': 0,
3246    // state
3247    'aria-keyshortcuts': 0,
3248    'aria-label': 0,
3249    'aria-roledescription': 0,
3250    // Widget Attributes
3251    'aria-autocomplete': 0,
3252    'aria-checked': 0,
3253    'aria-expanded': 0,
3254    'aria-haspopup': 0,
3255    'aria-level': 0,
vendor: 20,551 bytes, lines 3256-3851
3256    'aria-modal': 0,
3257    'aria-multiline': 0,
3258    'aria-multiselectable': 0,
3259    'aria-orientation': 0,
3260    'aria-placeholder': 0,
3261    'aria-pressed': 0,
3262    'aria-readonly': 0,
3263    'aria-required': 0,
3264    'aria-selected': 0,
3265    'aria-sort': 0,
3266    'aria-valuemax': 0,
3267    'aria-valuemin': 0,
3268    'aria-valuenow': 0,
3269    'aria-valuetext': 0,
3270    // Live Region Attributes
3271    'aria-atomic': 0,
3272    'aria-busy': 0,
3273    'aria-live': 0,
3274    'aria-relevant': 0,
3275    // Drag-and-Drop Attributes
3276    'aria-dropeffect': 0,
3277    'aria-grabbed': 0,
3278    // Relationship Attributes
3279    'aria-activedescendant': 0,
3280    'aria-colcount': 0,
3281    'aria-colindex': 0,
3282    'aria-colspan': 0,
3283    'aria-controls': 0,
3284    'aria-describedby': 0,
3285    'aria-errormessage': 0,
3286    'aria-flowto': 0,
3287    'aria-labelledby': 0,
3288    'aria-owns': 0,
3289    'aria-posinset': 0,
3290    'aria-rowcount': 0,
3291    'aria-rowindex': 0,
3292    'aria-rowspan': 0,
3293    'aria-setsize': 0
3294  };
3295
3296  var warnedProperties = {};
3297  var rARIA = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$');
3298  var rARIACamel = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$');
3299  var hasOwnProperty$1 = Object.prototype.hasOwnProperty;
3300
3301  function validateProperty(tagName, name) {
3302    {
3303      if (hasOwnProperty$1.call(warnedProperties, name) && warnedProperties[name]) {
3304        return true;
3305      }
3306
3307      if (rARIACamel.test(name)) {
3308        var ariaName = 'aria-' + name.slice(4).toLowerCase();
3309        var correctName = ariaProperties.hasOwnProperty(ariaName) ? ariaName : null; // If this is an aria-* attribute, but is not listed in the known DOM
3310        // DOM properties, then it is an invalid aria-* attribute.
3311
3312        if (correctName == null) {
3313          error('Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.', name);
3314
3315          warnedProperties[name] = true;
3316          return true;
3317        } // aria-* attributes should be lowercase; suggest the lowercase version.
3318
3319
3320        if (name !== correctName) {
3321          error('Invalid ARIA attribute `%s`. Did you mean `%s`?', name, correctName);
3322
3323          warnedProperties[name] = true;
3324          return true;
3325        }
3326      }
3327
3328      if (rARIA.test(name)) {
3329        var lowerCasedName = name.toLowerCase();
3330        var standardName = ariaProperties.hasOwnProperty(lowerCasedName) ? lowerCasedName : null; // If this is an aria-* attribute, but is not listed in the known DOM
3331        // DOM properties, then it is an invalid aria-* attribute.
3332
3333        if (standardName == null) {
3334          warnedProperties[name] = true;
3335          return false;
3336        } // aria-* attributes should be lowercase; suggest the lowercase version.
3337
3338
3339        if (name !== standardName) {
3340          error('Unknown ARIA attribute `%s`. Did you mean `%s`?', name, standardName);
3341
3342          warnedProperties[name] = true;
3343          return true;
3344        }
3345      }
3346    }
3347
3348    return true;
3349  }
3350
3351  function warnInvalidARIAProps(type, props) {
3352    {
3353      var invalidProps = [];
3354
3355      for (var key in props) {
3356        var isValid = validateProperty(type, key);
3357
3358        if (!isValid) {
3359          invalidProps.push(key);
3360        }
3361      }
3362
3363      var unknownPropString = invalidProps.map(function (prop) {
3364        return '`' + prop + '`';
3365      }).join(', ');
3366
3367      if (invalidProps.length === 1) {
3368        error('Invalid aria prop %s on <%s> tag. ' + 'For details, see https://reactjs.org/link/invalid-aria-props', unknownPropString, type);
3369      } else if (invalidProps.length > 1) {
3370        error('Invalid aria props %s on <%s> tag. ' + 'For details, see https://reactjs.org/link/invalid-aria-props', unknownPropString, type);
3371      }
3372    }
3373  }
3374
3375  function validateProperties(type, props) {
3376    if (isCustomComponent(type, props)) {
3377      return;
3378    }
3379
3380    warnInvalidARIAProps(type, props);
3381  }
3382
3383  var didWarnValueNull = false;
3384  function validateProperties$1(type, props) {
3385    {
3386      if (type !== 'input' && type !== 'textarea' && type !== 'select') {
3387        return;
3388      }
3389
3390      if (props != null && props.value === null && !didWarnValueNull) {
3391        didWarnValueNull = true;
3392
3393        if (type === 'select' && props.multiple) {
3394          error('`value` prop on `%s` should not be null. ' + 'Consider using an empty array when `multiple` is set to `true` ' + 'to clear the component or `undefined` for uncontrolled components.', type);
3395        } else {
3396          error('`value` prop on `%s` should not be null. ' + 'Consider using an empty string to clear the component or `undefined` ' + 'for uncontrolled components.', type);
3397        }
3398      }
3399    }
3400  }
3401
3402  var validateProperty$1 = function () {};
3403
3404  {
3405    var warnedProperties$1 = {};
3406    var _hasOwnProperty = Object.prototype.hasOwnProperty;
3407    var EVENT_NAME_REGEX = /^on./;
3408    var INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/;
3409    var rARIA$1 = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$');
3410    var rARIACamel$1 = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$');
3411
3412    validateProperty$1 = function (tagName, name, value, eventRegistry) {
3413      if (_hasOwnProperty.call(warnedProperties$1, name) && warnedProperties$1[name]) {
3414        return true;
3415      }
3416
3417      var lowerCasedName = name.toLowerCase();
3418
3419      if (lowerCasedName === 'onfocusin' || lowerCasedName === 'onfocusout') {
3420        error('React uses onFocus and onBlur instead of onFocusIn and onFocusOut. ' + 'All React events are normalized to bubble, so onFocusIn and onFocusOut ' + 'are not needed/supported by React.');
3421
3422        warnedProperties$1[name] = true;
3423        return true;
3424      } // We can't rely on the event system being injected on the server.
3425
3426
3427      if (eventRegistry != null) {
3428        var registrationNameDependencies = eventRegistry.registrationNameDependencies,
3429            possibleRegistrationNames = eventRegistry.possibleRegistrationNames;
3430
3431        if (registrationNameDependencies.hasOwnProperty(name)) {
3432          return true;
3433        }
3434
3435        var registrationName = possibleRegistrationNames.hasOwnProperty(lowerCasedName) ? possibleRegistrationNames[lowerCasedName] : null;
3436
3437        if (registrationName != null) {
3438          error('Invalid event handler property `%s`. Did you mean `%s`?', name, registrationName);
3439
3440          warnedProperties$1[name] = true;
3441          return true;
3442        }
3443
3444        if (EVENT_NAME_REGEX.test(name)) {
3445          error('Unknown event handler property `%s`. It will be ignored.', name);
3446
3447          warnedProperties$1[name] = true;
3448          return true;
3449        }
3450      } else if (EVENT_NAME_REGEX.test(name)) {
3451        // If no event plugins have been injected, we are in a server environment.
3452        // So we can't tell if the event name is correct for sure, but we can filter
3453        // out known bad ones like `onclick`. We can't suggest a specific replacement though.
3454        if (INVALID_EVENT_NAME_REGEX.test(name)) {
3455          error('Invalid event handler property `%s`. ' + 'React events use the camelCase naming convention, for example `onClick`.', name);
3456        }
3457
3458        warnedProperties$1[name] = true;
3459        return true;
3460      } // Let the ARIA attribute hook validate ARIA attributes
3461
3462
3463      if (rARIA$1.test(name) || rARIACamel$1.test(name)) {
3464        return true;
3465      }
3466
3467      if (lowerCasedName === 'innerhtml') {
3468        error('Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.');
3469
3470        warnedProperties$1[name] = true;
3471        return true;
3472      }
3473
3474      if (lowerCasedName === 'aria') {
3475        error('The `aria` attribute is reserved for future use in React. ' + 'Pass individual `aria-` attributes instead.');
3476
3477        warnedProperties$1[name] = true;
3478        return true;
3479      }
3480
3481      if (lowerCasedName === 'is' && value !== null && value !== undefined && typeof value !== 'string') {
3482        error('Received a `%s` for a string attribute `is`. If this is expected, cast ' + 'the value to a string.', typeof value);
3483
3484        warnedProperties$1[name] = true;
3485        return true;
3486      }
3487
3488      if (typeof value === 'number' && isNaN(value)) {
3489        error('Received NaN for the `%s` attribute. If this is expected, cast ' + 'the value to a string.', name);
3490
3491        warnedProperties$1[name] = true;
3492        return true;
3493      }
3494
3495      var propertyInfo = getPropertyInfo(name);
3496      var isReserved = propertyInfo !== null && propertyInfo.type === RESERVED; // Known attributes should match the casing specified in the property config.
3497
3498      if (possibleStandardNames.hasOwnProperty(lowerCasedName)) {
3499        var standardName = possibleStandardNames[lowerCasedName];
3500
3501        if (standardName !== name) {
3502          error('Invalid DOM property `%s`. Did you mean `%s`?', name, standardName);
3503
3504          warnedProperties$1[name] = true;
3505          return true;
3506        }
3507      } else if (!isReserved && name !== lowerCasedName) {
3508        // Unknown attributes should have lowercase casing since that's how they
3509        // will be cased anyway with server rendering.
3510        error('React does not recognize the `%s` prop on a DOM element. If you ' + 'intentionally want it to appear in the DOM as a custom ' + 'attribute, spell it as lowercase `%s` instead. ' + 'If you accidentally passed it from a parent component, remove ' + 'it from the DOM element.', name, lowerCasedName);
3511
3512        warnedProperties$1[name] = true;
3513        return true;
3514      }
3515
3516      if (typeof value === 'boolean' && shouldRemoveAttributeWithWarning(name, value, propertyInfo, false)) {
3517        if (value) {
3518          error('Received `%s` for a non-boolean attribute `%s`.\n\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s="%s" or %s={value.toString()}.', value, name, name, value, name);
3519        } else {
3520          error('Received `%s` for a non-boolean attribute `%s`.\n\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s="%s" or %s={value.toString()}.\n\n' + 'If you used to conditionally omit it with %s={condition && value}, ' + 'pass %s={condition ? value : undefined} instead.', value, name, name, value, name, name, name);
3521        }
3522
3523        warnedProperties$1[name] = true;
3524        return true;
3525      } // Now that we've validated casing, do not validate
3526      // data types for reserved props
3527
3528
3529      if (isReserved) {
3530        return true;
3531      } // Warn when a known attribute is a bad type
3532
3533
3534      if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, false)) {
3535        warnedProperties$1[name] = true;
3536        return false;
3537      } // Warn when passing the strings 'false' or 'true' into a boolean prop
3538
3539
3540      if ((value === 'false' || value === 'true') && propertyInfo !== null && propertyInfo.type === BOOLEAN) {
3541        error('Received the string `%s` for the boolean attribute `%s`. ' + '%s ' + 'Did you mean %s={%s}?', value, name, value === 'false' ? 'The browser will interpret it as a truthy value.' : 'Although this works, it will not work as expected if you pass the string "false".', name, value);
3542
3543        warnedProperties$1[name] = true;
3544        return true;
3545      }
3546
3547      return true;
3548    };
3549  }
3550
3551  var warnUnknownProperties = function (type, props, eventRegistry) {
3552    {
3553      var unknownProps = [];
3554
3555      for (var key in props) {
3556        var isValid = validateProperty$1(type, key, props[key], eventRegistry);
3557
3558        if (!isValid) {
3559          unknownProps.push(key);
3560        }
3561      }
3562
3563      var unknownPropString = unknownProps.map(function (prop) {
3564        return '`' + prop + '`';
3565      }).join(', ');
3566
3567      if (unknownProps.length === 1) {
3568        error('Invalid value for prop %s on <%s> tag. Either remove it from the element, ' + 'or pass a string or number value to keep it in the DOM. ' + 'For details, see https://reactjs.org/link/attribute-behavior ', unknownPropString, type);
3569      } else if (unknownProps.length > 1) {
3570        error('Invalid values for props %s on <%s> tag. Either remove them from the element, ' + 'or pass a string or number value to keep them in the DOM. ' + 'For details, see https://reactjs.org/link/attribute-behavior ', unknownPropString, type);
3571      }
3572    }
3573  };
3574
3575  function validateProperties$2(type, props, eventRegistry) {
3576    if (isCustomComponent(type, props)) {
3577      return;
3578    }
3579
3580    warnUnknownProperties(type, props, eventRegistry);
3581  }
3582
3583  var IS_EVENT_HANDLE_NON_MANAGED_NODE = 1;
3584  var IS_NON_DELEGATED = 1 << 1;
3585  var IS_CAPTURE_PHASE = 1 << 2;
3586  var IS_REPLAYED = 1 << 4;
3587  // set to LEGACY_FB_SUPPORT. LEGACY_FB_SUPPORT only gets set when
3588  // we call willDeferLaterForLegacyFBSupport, thus not bailing out
3589  // will result in endless cycles like an infinite loop.
3590  // We also don't want to defer during event replaying.
3591
3592  var SHOULD_NOT_PROCESS_POLYFILL_EVENT_PLUGINS = IS_EVENT_HANDLE_NON_MANAGED_NODE | IS_NON_DELEGATED | IS_CAPTURE_PHASE;
3593
3594  /**
3595   * Gets the target node from a native browser event by accounting for
3596   * inconsistencies in browser DOM APIs.
3597   *
3598   * @param {object} nativeEvent Native browser event.
3599   * @return {DOMEventTarget} Target node.
3600   */
3601
3602  function getEventTarget(nativeEvent) {
3603    // Fallback to nativeEvent.srcElement for IE9
3604    // https://github.com/facebook/react/issues/12506
3605    var target = nativeEvent.target || nativeEvent.srcElement || window; // Normalize SVG <use> element events #4963
3606
3607    if (target.correspondingUseElement) {
3608      target = target.correspondingUseElement;
3609    } // Safari may fire events on text nodes (Node.TEXT_NODE is 3).
3610    // @see http://www.quirksmode.org/js/events_properties.html
3611
3612
3613    return target.nodeType === TEXT_NODE ? target.parentNode : target;
3614  }
3615
3616  var restoreImpl = null;
3617  var restoreTarget = null;
3618  var restoreQueue = null;
3619
3620  function restoreStateOfTarget(target) {
3621    // We perform this translation at the end of the event loop so that we
3622    // always receive the correct fiber here
3623    var internalInstance = getInstanceFromNode(target);
3624
3625    if (!internalInstance) {
3626      // Unmounted
3627      return;
3628    }
3629
3630    if (!(typeof restoreImpl === 'function')) {
3631      {
3632        throw Error( "setRestoreImplementation() needs to be called to handle a target for controlled events. This error is likely caused by a bug in React. Please file an issue." );
3633      }
3634    }
3635
3636    var stateNode = internalInstance.stateNode; // Guard against Fiber being unmounted.
3637
3638    if (stateNode) {
3639      var _props = getFiberCurrentPropsFromNode(stateNode);
3640
3641      restoreImpl(internalInstance.stateNode, internalInstance.type, _props);
3642    }
3643  }
3644
3645  function setRestoreImplementation(impl) {
3646    restoreImpl = impl;
3647  }
3648  function enqueueStateRestore(target) {
3649    if (restoreTarget) {
3650      if (restoreQueue) {
3651        restoreQueue.push(target);
3652      } else {
3653        restoreQueue = [target];
3654      }
3655    } else {
3656      restoreTarget = target;
3657    }
3658  }
3659  function needsStateRestore() {
3660    return restoreTarget !== null || restoreQueue !== null;
3661  }
3662  function restoreStateIfNeeded() {
3663    if (!restoreTarget) {
3664      return;
3665    }
3666
3667    var target = restoreTarget;
3668    var queuedTargets = restoreQueue;
3669    restoreTarget = null;
3670    restoreQueue = null;
3671    restoreStateOfTarget(target);
3672
3673    if (queuedTargets) {
3674      for (var i = 0; i < queuedTargets.length; i++) {
3675        restoreStateOfTarget(queuedTargets[i]);
3676      }
3677    }
3678  }
3679
3680  // the renderer. Such as when we're dispatching events or if third party
3681  // libraries need to call batchedUpdates. Eventually, this API will go away when
3682  // everything is batched by default. We'll then have a similar API to opt-out of
3683  // scheduled work and instead do synchronous work.
3684  // Defaults
3685
3686  var batchedUpdatesImpl = function (fn, bookkeeping) {
3687    return fn(bookkeeping);
3688  };
3689
3690  var discreteUpdatesImpl = function (fn, a, b, c, d) {
3691    return fn(a, b, c, d);
3692  };
3693
3694  var flushDiscreteUpdatesImpl = function () {};
3695
3696  var batchedEventUpdatesImpl = batchedUpdatesImpl;
3697  var isInsideEventHandler = false;
3698  var isBatchingEventUpdates = false;
3699
3700  function finishEventHandler() {
3701    // Here we wait until all updates have propagated, which is important
3702    // when using controlled components within layers:
3703    // https://github.com/facebook/react/issues/1698
3704    // Then we restore state of any controlled component.
3705    var controlledComponentsHavePendingUpdates = needsStateRestore();
3706
3707    if (controlledComponentsHavePendingUpdates) {
3708      // If a controlled event was fired, we may need to restore the state of
3709      // the DOM node back to the controlled value. This is necessary when React
3710      // bails out of the update without touching the DOM.
3711      flushDiscreteUpdatesImpl();
3712      restoreStateIfNeeded();
3713    }
3714  }
3715
3716  function batchedUpdates(fn, bookkeeping) {
3717    if (isInsideEventHandler) {
3718      // If we are currently inside another batch, we need to wait until it
3719      // fully completes before restoring state.
3720      return fn(bookkeeping);
3721    }
3722
3723    isInsideEventHandler = true;
3724
3725    try {
3726      return batchedUpdatesImpl(fn, bookkeeping);
3727    } finally {
3728      isInsideEventHandler = false;
3729      finishEventHandler();
3730    }
3731  }
3732  function batchedEventUpdates(fn, a, b) {
3733    if (isBatchingEventUpdates) {
3734      // If we are currently inside another batch, we need to wait until it
3735      // fully completes before restoring state.
3736      return fn(a, b);
3737    }
3738
3739    isBatchingEventUpdates = true;
3740
3741    try {
3742      return batchedEventUpdatesImpl(fn, a, b);
3743    } finally {
3744      isBatchingEventUpdates = false;
3745      finishEventHandler();
3746    }
3747  }
3748  function discreteUpdates(fn, a, b, c, d) {
3749    var prevIsInsideEventHandler = isInsideEventHandler;
3750    isInsideEventHandler = true;
3751
3752    try {
3753      return discreteUpdatesImpl(fn, a, b, c, d);
3754    } finally {
3755      isInsideEventHandler = prevIsInsideEventHandler;
3756
3757      if (!isInsideEventHandler) {
3758        finishEventHandler();
3759      }
3760    }
3761  }
3762  function flushDiscreteUpdatesIfNeeded(timeStamp) {
3763    {
3764      if (!isInsideEventHandler) {
3765        flushDiscreteUpdatesImpl();
3766      }
3767    }
3768  }
3769  function setBatchingImplementation(_batchedUpdatesImpl, _discreteUpdatesImpl, _flushDiscreteUpdatesImpl, _batchedEventUpdatesImpl) {
3770    batchedUpdatesImpl = _batchedUpdatesImpl;
3771    discreteUpdatesImpl = _discreteUpdatesImpl;
3772    flushDiscreteUpdatesImpl = _flushDiscreteUpdatesImpl;
3773    batchedEventUpdatesImpl = _batchedEventUpdatesImpl;
3774  }
3775
3776  function isInteractive(tag) {
3777    return tag === 'button' || tag === 'input' || tag === 'select' || tag === 'textarea';
3778  }
3779
3780  function shouldPreventMouseEvent(name, type, props) {
3781    switch (name) {
3782      case 'onClick':
3783      case 'onClickCapture':
3784      case 'onDoubleClick':
3785      case 'onDoubleClickCapture':
3786      case 'onMouseDown':
3787      case 'onMouseDownCapture':
3788      case 'onMouseMove':
3789      case 'onMouseMoveCapture':
3790      case 'onMouseUp':
3791      case 'onMouseUpCapture':
3792      case 'onMouseEnter':
3793        return !!(props.disabled && isInteractive(type));
3794
3795      default:
3796        return false;
3797    }
3798  }
3799  /**
3800   * @param {object} inst The instance, which is the source of events.
3801   * @param {string} registrationName Name of listener (e.g. `onClick`).
3802   * @return {?function} The stored callback.
3803   */
3804
3805
3806  function getListener(inst, registrationName) {
3807    var stateNode = inst.stateNode;
3808
3809    if (stateNode === null) {
3810      // Work in progress (ex: onload events in incremental mode).
3811      return null;
3812    }
3813
3814    var props = getFiberCurrentPropsFromNode(stateNode);
3815
3816    if (props === null) {
3817      // Work in progress.
3818      return null;
3819    }
3820
3821    var listener = props[registrationName];
3822
3823    if (shouldPreventMouseEvent(registrationName, inst.type, props)) {
3824      return null;
3825    }
3826
3827    if (!(!listener || typeof listener === 'function')) {
3828      {
3829        throw Error( "Expected `" + registrationName + "` listener to be a function, instead got a value of `" + typeof listener + "` type." );
3830      }
3831    }
3832
3833    return listener;
3834  }
3835
3836  var passiveBrowserEventsSupported = false; // Check if browser support events with passive listeners
3837  // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support
3838
3839  if (canUseDOM) {
3840    try {
3841      var options = {}; // $FlowFixMe: Ignore Flow complaining about needing a value
3842
3843      Object.defineProperty(options, 'passive', {
3844        get: function () {
3845          passiveBrowserEventsSupported = true;
3846        }
3847      });
3848      window.addEventListener('test', options, options);
3849      window.removeEventListener('test', options, options);
3850    } catch (e) {
3851      passiveBrowserEventsSupported = false;
vendor: 9,043 bytes, lines 3852-4025
3852    }
3853  }
3854
3855  function invokeGuardedCallbackProd(name, func, context, a, b, c, d, e, f) {
3856    var funcArgs = Array.prototype.slice.call(arguments, 3);
3857
3858    try {
3859      func.apply(context, funcArgs);
3860    } catch (error) {
3861      this.onError(error);
3862    }
3863  }
3864
3865  var invokeGuardedCallbackImpl = invokeGuardedCallbackProd;
3866
3867  {
3868    // In DEV mode, we swap out invokeGuardedCallback for a special version
3869    // that plays more nicely with the browser's DevTools. The idea is to preserve
3870    // "Pause on exceptions" behavior. Because React wraps all user-provided
3871    // functions in invokeGuardedCallback, and the production version of
3872    // invokeGuardedCallback uses a try-catch, all user exceptions are treated
3873    // like caught exceptions, and the DevTools won't pause unless the developer
3874    // takes the extra step of enabling pause on caught exceptions. This is
3875    // unintuitive, though, because even though React has caught the error, from
3876    // the developer's perspective, the error is uncaught.
3877    //
3878    // To preserve the expected "Pause on exceptions" behavior, we don't use a
3879    // try-catch in DEV. Instead, we synchronously dispatch a fake event to a fake
3880    // DOM node, and call the user-provided callback from inside an event handler
3881    // for that fake event. If the callback throws, the error is "captured" using
3882    // a global event handler. But because the error happens in a different
3883    // event loop context, it does not interrupt the normal program flow.
3884    // Effectively, this gives us try-catch behavior without actually using
3885    // try-catch. Neat!
3886    // Check that the browser supports the APIs we need to implement our special
3887    // DEV version of invokeGuardedCallback
3888    if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') {
3889      var fakeNode = document.createElement('react');
3890
3891      invokeGuardedCallbackImpl = function invokeGuardedCallbackDev(name, func, context, a, b, c, d, e, f) {
3892        // If document doesn't exist we know for sure we will crash in this method
3893        // when we call document.createEvent(). However this can cause confusing
3894        // errors: https://github.com/facebookincubator/create-react-app/issues/3482
3895        // So we preemptively throw with a better message instead.
3896        if (!(typeof document !== 'undefined')) {
3897          {
3898            throw Error( "The `document` global was defined when React was initialized, but is not defined anymore. This can happen in a test environment if a component schedules an update from an asynchronous callback, but the test has already finished running. To solve this, you can either unmount the component at the end of your test (and ensure that any asynchronous operations get canceled in `componentWillUnmount`), or you can change the test itself to be asynchronous." );
3899          }
3900        }
3901
3902        var evt = document.createEvent('Event');
3903        var didCall = false; // Keeps track of whether the user-provided callback threw an error. We
3904        // set this to true at the beginning, then set it to false right after
3905        // calling the function. If the function errors, `didError` will never be
3906        // set to false. This strategy works even if the browser is flaky and
3907        // fails to call our global error handler, because it doesn't rely on
3908        // the error event at all.
3909
3910        var didError = true; // Keeps track of the value of window.event so that we can reset it
3911        // during the callback to let user code access window.event in the
3912        // browsers that support it.
3913
3914        var windowEvent = window.event; // Keeps track of the descriptor of window.event to restore it after event
3915        // dispatching: https://github.com/facebook/react/issues/13688
3916
3917        var windowEventDescriptor = Object.getOwnPropertyDescriptor(window, 'event');
3918
3919        function restoreAfterDispatch() {
3920          // We immediately remove the callback from event listeners so that
3921          // nested `invokeGuardedCallback` calls do not clash. Otherwise, a
3922          // nested call would trigger the fake event handlers of any call higher
3923          // in the stack.
3924          fakeNode.removeEventListener(evtType, callCallback, false); // We check for window.hasOwnProperty('event') to prevent the
3925          // window.event assignment in both IE <= 10 as they throw an error
3926          // "Member not found" in strict mode, and in Firefox which does not
3927          // support window.event.
3928
3929          if (typeof window.event !== 'undefined' && window.hasOwnProperty('event')) {
3930            window.event = windowEvent;
3931          }
3932        } // Create an event handler for our fake event. We will synchronously
3933        // dispatch our fake event using `dispatchEvent`. Inside the handler, we
3934        // call the user-provided callback.
3935
3936
3937        var funcArgs = Array.prototype.slice.call(arguments, 3);
3938
3939        function callCallback() {
3940          didCall = true;
3941          restoreAfterDispatch();
3942          func.apply(context, funcArgs);
3943          didError = false;
3944        } // Create a global error event handler. We use this to capture the value
3945        // that was thrown. It's possible that this error handler will fire more
3946        // than once; for example, if non-React code also calls `dispatchEvent`
3947        // and a handler for that event throws. We should be resilient to most of
3948        // those cases. Even if our error event handler fires more than once, the
3949        // last error event is always used. If the callback actually does error,
3950        // we know that the last error event is the correct one, because it's not
3951        // possible for anything else to have happened in between our callback
3952        // erroring and the code that follows the `dispatchEvent` call below. If
3953        // the callback doesn't error, but the error event was fired, we know to
3954        // ignore it because `didError` will be false, as described above.
3955
3956
3957        var error; // Use this to track whether the error event is ever called.
3958
3959        var didSetError = false;
3960        var isCrossOriginError = false;
3961
3962        function handleWindowError(event) {
3963          error = event.error;
3964          didSetError = true;
3965
3966          if (error === null && event.colno === 0 && event.lineno === 0) {
3967            isCrossOriginError = true;
3968          }
3969
3970          if (event.defaultPrevented) {
3971            // Some other error handler has prevented default.
3972            // Browsers silence the error report if this happens.
3973            // We'll remember this to later decide whether to log it or not.
3974            if (error != null && typeof error === 'object') {
3975              try {
3976                error._suppressLogging = true;
3977              } catch (inner) {// Ignore.
3978              }
3979            }
3980          }
3981        } // Create a fake event type.
3982
3983
3984        var evtType = "react-" + (name ? name : 'invokeguardedcallback'); // Attach our event handlers
3985
3986        window.addEventListener('error', handleWindowError);
3987        fakeNode.addEventListener(evtType, callCallback, false); // Synchronously dispatch our fake event. If the user-provided function
3988        // errors, it will trigger our global error handler.
3989
3990        evt.initEvent(evtType, false, false);
3991        fakeNode.dispatchEvent(evt);
3992
3993        if (windowEventDescriptor) {
3994          Object.defineProperty(window, 'event', windowEventDescriptor);
3995        }
3996
3997        if (didCall && didError) {
3998          if (!didSetError) {
3999            // The callback errored, but the error event never fired.
4000            error = new Error('An error was thrown inside one of your components, but React ' + "doesn't know what it was. This is likely due to browser " + 'flakiness. React does its best to preserve the "Pause on ' + 'exceptions" behavior of the DevTools, which requires some ' + "DEV-mode only tricks. It's possible that these don't work in " + 'your browser. Try triggering the error in production mode, ' + 'or switching to a modern browser. If you suspect that this is ' + 'actually an issue with React, please file an issue.');
4001          } else if (isCrossOriginError) {
4002            error = new Error("A cross-origin error was thrown. React doesn't have access to " + 'the actual error object in development. ' + 'See https://reactjs.org/link/crossorigin-error for more information.');
4003          }
4004
4005          this.onError(error);
4006        } // Remove our event listeners
4007
4008
4009        window.removeEventListener('error', handleWindowError);
4010
4011        if (!didCall) {
4012          // Something went really wrong, and our event was not dispatched.
4013          // https://github.com/facebook/react/issues/16734
4014          // https://github.com/facebook/react/issues/16585
4015          // Fall back to the production implementation.
4016          restoreAfterDispatch();
4017          return invokeGuardedCallbackProd.apply(this, arguments);
4018        }
4019      };
4020    }
4021  }
4022
4023  var invokeGuardedCallbackImpl$1 = invokeGuardedCallbackImpl;
4024
4025  var hasError = false;
vendor: 17,673 bytes, lines 4026-4607
4026  var caughtError = null; // Used by event system to capture/rethrow the first error.
4027
4028  var hasRethrowError = false;
4029  var rethrowError = null;
4030  var reporter = {
4031    onError: function (error) {
4032      hasError = true;
4033      caughtError = error;
4034    }
4035  };
4036  /**
4037   * Call a function while guarding against errors that happens within it.
4038   * Returns an error if it throws, otherwise null.
4039   *
4040   * In production, this is implemented using a try-catch. The reason we don't
4041   * use a try-catch directly is so that we can swap out a different
4042   * implementation in DEV mode.
4043   *
4044   * @param {String} name of the guard to use for logging or debugging
4045   * @param {Function} func The function to invoke
4046   * @param {*} context The context to use when calling the function
4047   * @param {...*} args Arguments for function
4048   */
4049
4050  function invokeGuardedCallback(name, func, context, a, b, c, d, e, f) {
4051    hasError = false;
4052    caughtError = null;
4053    invokeGuardedCallbackImpl$1.apply(reporter, arguments);
4054  }
4055  /**
4056   * Same as invokeGuardedCallback, but instead of returning an error, it stores
4057   * it in a global so it can be rethrown by `rethrowCaughtError` later.
4058   * TODO: See if caughtError and rethrowError can be unified.
4059   *
4060   * @param {String} name of the guard to use for logging or debugging
4061   * @param {Function} func The function to invoke
4062   * @param {*} context The context to use when calling the function
4063   * @param {...*} args Arguments for function
4064   */
4065
4066  function invokeGuardedCallbackAndCatchFirstError(name, func, context, a, b, c, d, e, f) {
4067    invokeGuardedCallback.apply(this, arguments);
4068
4069    if (hasError) {
4070      var error = clearCaughtError();
4071
4072      if (!hasRethrowError) {
4073        hasRethrowError = true;
4074        rethrowError = error;
4075      }
4076    }
4077  }
4078  /**
4079   * During execution of guarded functions we will capture the first error which
4080   * we will rethrow to be handled by the top level error handler.
4081   */
4082
4083  function rethrowCaughtError() {
4084    if (hasRethrowError) {
4085      var error = rethrowError;
4086      hasRethrowError = false;
4087      rethrowError = null;
4088      throw error;
4089    }
4090  }
4091  function hasCaughtError() {
4092    return hasError;
4093  }
4094  function clearCaughtError() {
4095    if (hasError) {
4096      var error = caughtError;
4097      hasError = false;
4098      caughtError = null;
4099      return error;
4100    } else {
4101      {
4102        {
4103          throw Error( "clearCaughtError was called but no error was captured. This error is likely caused by a bug in React. Please file an issue." );
4104        }
4105      }
4106    }
4107  }
4108
4109  var ReactInternals$1 = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
4110  var _ReactInternals$Sched = ReactInternals$1.Scheduler,
4111      unstable_cancelCallback = _ReactInternals$Sched.unstable_cancelCallback,
4112      unstable_now = _ReactInternals$Sched.unstable_now,
4113      unstable_scheduleCallback = _ReactInternals$Sched.unstable_scheduleCallback,
4114      unstable_shouldYield = _ReactInternals$Sched.unstable_shouldYield,
4115      unstable_requestPaint = _ReactInternals$Sched.unstable_requestPaint,
4116      unstable_getFirstCallbackNode = _ReactInternals$Sched.unstable_getFirstCallbackNode,
4117      unstable_runWithPriority = _ReactInternals$Sched.unstable_runWithPriority,
4118      unstable_next = _ReactInternals$Sched.unstable_next,
4119      unstable_continueExecution = _ReactInternals$Sched.unstable_continueExecution,
4120      unstable_pauseExecution = _ReactInternals$Sched.unstable_pauseExecution,
4121      unstable_getCurrentPriorityLevel = _ReactInternals$Sched.unstable_getCurrentPriorityLevel,
4122      unstable_ImmediatePriority = _ReactInternals$Sched.unstable_ImmediatePriority,
4123      unstable_UserBlockingPriority = _ReactInternals$Sched.unstable_UserBlockingPriority,
4124      unstable_NormalPriority = _ReactInternals$Sched.unstable_NormalPriority,
4125      unstable_LowPriority = _ReactInternals$Sched.unstable_LowPriority,
4126      unstable_IdlePriority = _ReactInternals$Sched.unstable_IdlePriority,
4127      unstable_forceFrameRate = _ReactInternals$Sched.unstable_forceFrameRate,
4128      unstable_flushAllWithoutAsserting = _ReactInternals$Sched.unstable_flushAllWithoutAsserting;
4129
4130  /**
4131   * `ReactInstanceMap` maintains a mapping from a public facing stateful
4132   * instance (key) and the internal representation (value). This allows public
4133   * methods to accept the user facing instance as an argument and map them back
4134   * to internal methods.
4135   *
4136   * Note that this module is currently shared and assumed to be stateless.
4137   * If this becomes an actual Map, that will break.
4138   */
4139  function get(key) {
4140    return key._reactInternals;
4141  }
4142  function has(key) {
4143    return key._reactInternals !== undefined;
4144  }
4145  function set(key, value) {
4146    key._reactInternals = value;
4147  }
4148
4149  // Don't change these two values. They're used by React Dev Tools.
4150  var NoFlags =
4151  /*                      */
4152  0;
4153  var PerformedWork =
4154  /*                */
4155  1; // You can change the rest (and add more).
4156
4157  var Placement =
4158  /*                    */
4159  2;
4160  var Update =
4161  /*                       */
4162  4;
4163  var PlacementAndUpdate =
4164  /*           */
4165  6;
4166  var Deletion =
4167  /*                     */
4168  8;
4169  var ContentReset =
4170  /*                 */
4171  16;
4172  var Callback =
4173  /*                     */
4174  32;
4175  var DidCapture =
4176  /*                   */
4177  64;
4178  var Ref =
4179  /*                          */
4180  128;
4181  var Snapshot =
4182  /*                     */
4183  256;
4184  var Passive =
4185  /*                      */
4186  512; // TODO (effects) Remove this bit once the new reconciler is synced to the old.
4187
4188  var PassiveUnmountPendingDev =
4189  /*     */
4190  8192;
4191  var Hydrating =
4192  /*                    */
4193  1024;
4194  var HydratingAndUpdate =
4195  /*           */
4196  1028; // Passive & Update & Callback & Ref & Snapshot
4197
4198  var LifecycleEffectMask =
4199  /*          */
4200  932; // Union of all host effects
4201
4202  var HostEffectMask =
4203  /*               */
4204  2047; // These are not really side effects, but we still reuse this field.
4205
4206  var Incomplete =
4207  /*                   */
4208  2048;
4209  var ShouldCapture =
4210  /*                */
4211  4096;
4212  var ForceUpdateForLegacySuspense =
4213  /* */
4214  16384; // Static tags describe aspects of a fiber that are not specific to a render,
4215
4216  var ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;
4217  function getNearestMountedFiber(fiber) {
4218    var node = fiber;
4219    var nearestMounted = fiber;
4220
4221    if (!fiber.alternate) {
4222      // If there is no alternate, this might be a new tree that isn't inserted
4223      // yet. If it is, then it will have a pending insertion effect on it.
4224      var nextNode = node;
4225
4226      do {
4227        node = nextNode;
4228
4229        if ((node.flags & (Placement | Hydrating)) !== NoFlags) {
4230          // This is an insertion or in-progress hydration. The nearest possible
4231          // mounted fiber is the parent but we need to continue to figure out
4232          // if that one is still mounted.
4233          nearestMounted = node.return;
4234        }
4235
4236        nextNode = node.return;
4237      } while (nextNode);
4238    } else {
4239      while (node.return) {
4240        node = node.return;
4241      }
4242    }
4243
4244    if (node.tag === HostRoot) {
4245      // TODO: Check if this was a nested HostRoot when used with
4246      // renderContainerIntoSubtree.
4247      return nearestMounted;
4248    } // If we didn't hit the root, that means that we're in an disconnected tree
4249    // that has been unmounted.
4250
4251
4252    return null;
4253  }
4254  function getSuspenseInstanceFromFiber(fiber) {
4255    if (fiber.tag === SuspenseComponent) {
4256      var suspenseState = fiber.memoizedState;
4257
4258      if (suspenseState === null) {
4259        var current = fiber.alternate;
4260
4261        if (current !== null) {
4262          suspenseState = current.memoizedState;
4263        }
4264      }
4265
4266      if (suspenseState !== null) {
4267        return suspenseState.dehydrated;
4268      }
4269    }
4270
4271    return null;
4272  }
4273  function getContainerFromFiber(fiber) {
4274    return fiber.tag === HostRoot ? fiber.stateNode.containerInfo : null;
4275  }
4276  function isFiberMounted(fiber) {
4277    return getNearestMountedFiber(fiber) === fiber;
4278  }
4279  function isMounted(component) {
4280    {
4281      var owner = ReactCurrentOwner.current;
4282
4283      if (owner !== null && owner.tag === ClassComponent) {
4284        var ownerFiber = owner;
4285        var instance = ownerFiber.stateNode;
4286
4287        if (!instance._warnedAboutRefsInRender) {
4288          error('%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', getComponentName(ownerFiber.type) || 'A component');
4289        }
4290
4291        instance._warnedAboutRefsInRender = true;
4292      }
4293    }
4294
4295    var fiber = get(component);
4296
4297    if (!fiber) {
4298      return false;
4299    }
4300
4301    return getNearestMountedFiber(fiber) === fiber;
4302  }
4303
4304  function assertIsMounted(fiber) {
4305    if (!(getNearestMountedFiber(fiber) === fiber)) {
4306      {
4307        throw Error( "Unable to find node on an unmounted component." );
4308      }
4309    }
4310  }
4311
4312  function findCurrentFiberUsingSlowPath(fiber) {
4313    var alternate = fiber.alternate;
4314
4315    if (!alternate) {
4316      // If there is no alternate, then we only need to check if it is mounted.
4317      var nearestMounted = getNearestMountedFiber(fiber);
4318
4319      if (!(nearestMounted !== null)) {
4320        {
4321          throw Error( "Unable to find node on an unmounted component." );
4322        }
4323      }
4324
4325      if (nearestMounted !== fiber) {
4326        return null;
4327      }
4328
4329      return fiber;
4330    } // If we have two possible branches, we'll walk backwards up to the root
4331    // to see what path the root points to. On the way we may hit one of the
4332    // special cases and we'll deal with them.
4333
4334
4335    var a = fiber;
4336    var b = alternate;
4337
4338    while (true) {
4339      var parentA = a.return;
4340
4341      if (parentA === null) {
4342        // We're at the root.
4343        break;
4344      }
4345
4346      var parentB = parentA.alternate;
4347
4348      if (parentB === null) {
4349        // There is no alternate. This is an unusual case. Currently, it only
4350        // happens when a Suspense component is hidden. An extra fragment fiber
4351        // is inserted in between the Suspense fiber and its children. Skip
4352        // over this extra fragment fiber and proceed to the next parent.
4353        var nextParent = parentA.return;
4354
4355        if (nextParent !== null) {
4356          a = b = nextParent;
4357          continue;
4358        } // If there's no parent, we're at the root.
4359
4360
4361        break;
4362      } // If both copies of the parent fiber point to the same child, we can
4363      // assume that the child is current. This happens when we bailout on low
4364      // priority: the bailed out fiber's child reuses the current child.
4365
4366
4367      if (parentA.child === parentB.child) {
4368        var child = parentA.child;
4369
4370        while (child) {
4371          if (child === a) {
4372            // We've determined that A is the current branch.
4373            assertIsMounted(parentA);
4374            return fiber;
4375          }
4376
4377          if (child === b) {
4378            // We've determined that B is the current branch.
4379            assertIsMounted(parentA);
4380            return alternate;
4381          }
4382
4383          child = child.sibling;
4384        } // We should never have an alternate for any mounting node. So the only
4385        // way this could possibly happen is if this was unmounted, if at all.
4386
4387
4388        {
4389          {
4390            throw Error( "Unable to find node on an unmounted component." );
4391          }
4392        }
4393      }
4394
4395      if (a.return !== b.return) {
4396        // The return pointer of A and the return pointer of B point to different
4397        // fibers. We assume that return pointers never criss-cross, so A must
4398        // belong to the child set of A.return, and B must belong to the child
4399        // set of B.return.
4400        a = parentA;
4401        b = parentB;
4402      } else {
4403        // The return pointers point to the same fiber. We'll have to use the
4404        // default, slow path: scan the child sets of each parent alternate to see
4405        // which child belongs to which set.
4406        //
4407        // Search parent A's child set
4408        var didFindChild = false;
4409        var _child = parentA.child;
4410
4411        while (_child) {
4412          if (_child === a) {
4413            didFindChild = true;
4414            a = parentA;
4415            b = parentB;
4416            break;
4417          }
4418
4419          if (_child === b) {
4420            didFindChild = true;
4421            b = parentA;
4422            a = parentB;
4423            break;
4424          }
4425
4426          _child = _child.sibling;
4427        }
4428
4429        if (!didFindChild) {
4430          // Search parent B's child set
4431          _child = parentB.child;
4432
4433          while (_child) {
4434            if (_child === a) {
4435              didFindChild = true;
4436              a = parentB;
4437              b = parentA;
4438              break;
4439            }
4440
4441            if (_child === b) {
4442              didFindChild = true;
4443              b = parentB;
4444              a = parentA;
4445              break;
4446            }
4447
4448            _child = _child.sibling;
4449          }
4450
4451          if (!didFindChild) {
4452            {
4453              throw Error( "Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue." );
4454            }
4455          }
4456        }
4457      }
4458
4459      if (!(a.alternate === b)) {
4460        {
4461          throw Error( "Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue." );
4462        }
4463      }
4464    } // If the root is not a host container, we're in a disconnected tree. I.e.
4465    // unmounted.
4466
4467
4468    if (!(a.tag === HostRoot)) {
4469      {
4470        throw Error( "Unable to find node on an unmounted component." );
4471      }
4472    }
4473
4474    if (a.stateNode.current === a) {
4475      // We've determined that A is the current branch.
4476      return fiber;
4477    } // Otherwise B has to be current branch.
4478
4479
4480    return alternate;
4481  }
4482  function findCurrentHostFiber(parent) {
4483    var currentParent = findCurrentFiberUsingSlowPath(parent);
4484
4485    if (!currentParent) {
4486      return null;
4487    } // Next we'll drill down this component to find the first HostComponent/Text.
4488
4489
4490    var node = currentParent;
4491
4492    while (true) {
4493      if (node.tag === HostComponent || node.tag === HostText) {
4494        return node;
4495      } else if (node.child) {
4496        node.child.return = node;
4497        node = node.child;
4498        continue;
4499      }
4500
4501      if (node === currentParent) {
4502        return null;
4503      }
4504
4505      while (!node.sibling) {
4506        if (!node.return || node.return === currentParent) {
4507          return null;
4508        }
4509
4510        node = node.return;
4511      }
4512
4513      node.sibling.return = node.return;
4514      node = node.sibling;
4515    } // Flow needs the return null here, but ESLint complains about it.
4516    // eslint-disable-next-line no-unreachable
4517
4518
4519    return null;
4520  }
4521  function findCurrentHostFiberWithNoPortals(parent) {
4522    var currentParent = findCurrentFiberUsingSlowPath(parent);
4523
4524    if (!currentParent) {
4525      return null;
4526    } // Next we'll drill down this component to find the first HostComponent/Text.
4527
4528
4529    var node = currentParent;
4530
4531    while (true) {
4532      if (node.tag === HostComponent || node.tag === HostText || enableFundamentalAPI ) {
4533        return node;
4534      } else if (node.child && node.tag !== HostPortal) {
4535        node.child.return = node;
4536        node = node.child;
4537        continue;
4538      }
4539
4540      if (node === currentParent) {
4541        return null;
4542      }
4543
4544      while (!node.sibling) {
4545        if (!node.return || node.return === currentParent) {
4546          return null;
4547        }
4548
4549        node = node.return;
4550      }
4551
4552      node.sibling.return = node.return;
4553      node = node.sibling;
4554    } // Flow needs the return null here, but ESLint complains about it.
4555    // eslint-disable-next-line no-unreachable
4556
4557
4558    return null;
4559  }
4560  function doesFiberContain(parentFiber, childFiber) {
4561    var node = childFiber;
4562    var parentFiberAlternate = parentFiber.alternate;
4563
4564    while (node !== null) {
4565      if (node === parentFiber || node === parentFiberAlternate) {
4566        return true;
4567      }
4568
4569      node = node.return;
4570    }
4571
4572    return false;
4573  }
4574
4575  var attemptUserBlockingHydration;
4576  function setAttemptUserBlockingHydration(fn) {
4577    attemptUserBlockingHydration = fn;
4578  }
4579  var attemptContinuousHydration;
4580  function setAttemptContinuousHydration(fn) {
4581    attemptContinuousHydration = fn;
4582  }
4583  var attemptHydrationAtCurrentPriority;
4584  function setAttemptHydrationAtCurrentPriority(fn) {
4585    attemptHydrationAtCurrentPriority = fn;
4586  }
4587  var attemptHydrationAtPriority;
4588  function setAttemptHydrationAtPriority(fn) {
4589    attemptHydrationAtPriority = fn;
4590  } // TODO: Upgrade this definition once we're on a newer version of Flow that
4591  var hasScheduledReplayAttempt = false; // The queue of discrete events to be replayed.
4592
4593  var queuedDiscreteEvents = []; // Indicates if any continuous event targets are non-null for early bailout.
4594  // if the last target was dehydrated.
4595
4596  var queuedFocus = null;
4597  var queuedDrag = null;
4598  var queuedMouse = null; // For pointer events there can be one latest event per pointerId.
4599
4600  var queuedPointers = new Map();
4601  var queuedPointerCaptures = new Map(); // We could consider replaying selectionchange and touchmoves too.
4602
4603  var queuedExplicitHydrationTargets = [];
4604  function hasQueuedDiscreteEvents() {
4605    return queuedDiscreteEvents.length > 0;
4606  }
4607  var discreteReplayableEvents = ['mousedown', 'mouseup', 'touchcancel', 'touchend', 'touchstart', 'auxclick', 'dblclick', 'pointercancel', 'pointerdown', 'pointerup', 'dragend', 'dragstart', 'drop', 'compositionend', 'compositionstart', 'keydown', 'ke
vendor: 4,859 bytes, lines 4607-4736
4607ypress', 'keyup', 'input', 'textInput', // Intentionally camelCase
4608  'copy', 'cut', 'paste', 'click', 'change', 'contextmenu', 'reset', 'submit'];
4609  function isReplayableDiscreteEvent(eventType) {
4610    return discreteReplayableEvents.indexOf(eventType) > -1;
4611  }
4612
4613  function createQueuedReplayableEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent) {
4614    return {
4615      blockedOn: blockedOn,
4616      domEventName: domEventName,
4617      eventSystemFlags: eventSystemFlags | IS_REPLAYED,
4618      nativeEvent: nativeEvent,
4619      targetContainers: [targetContainer]
4620    };
4621  }
4622
4623  function queueDiscreteEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent) {
4624    var queuedEvent = createQueuedReplayableEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent);
4625    queuedDiscreteEvents.push(queuedEvent);
4626  } // Resets the replaying for this type of continuous event to no event.
4627
4628  function clearIfContinuousEvent(domEventName, nativeEvent) {
4629    switch (domEventName) {
4630      case 'focusin':
4631      case 'focusout':
4632        queuedFocus = null;
4633        break;
4634
4635      case 'dragenter':
4636      case 'dragleave':
4637        queuedDrag = null;
4638        break;
4639
4640      case 'mouseover':
4641      case 'mouseout':
4642        queuedMouse = null;
4643        break;
4644
4645      case 'pointerover':
4646      case 'pointerout':
4647        {
4648          var pointerId = nativeEvent.pointerId;
4649          queuedPointers.delete(pointerId);
4650          break;
4651        }
4652
4653      case 'gotpointercapture':
4654      case 'lostpointercapture':
4655        {
4656          var _pointerId = nativeEvent.pointerId;
4657          queuedPointerCaptures.delete(_pointerId);
4658          break;
4659        }
4660    }
4661  }
4662
4663  function accumulateOrCreateContinuousQueuedReplayableEvent(existingQueuedEvent, blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent) {
4664    if (existingQueuedEvent === null || existingQueuedEvent.nativeEvent !== nativeEvent) {
4665      var queuedEvent = createQueuedReplayableEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent);
4666
4667      if (blockedOn !== null) {
4668        var _fiber2 = getInstanceFromNode(blockedOn);
4669
4670        if (_fiber2 !== null) {
4671          // Attempt to increase the priority of this target.
4672          attemptContinuousHydration(_fiber2);
4673        }
4674      }
4675
4676      return queuedEvent;
4677    } // If we have already queued this exact event, then it's because
4678    // the different event systems have different DOM event listeners.
4679    // We can accumulate the flags, and the targetContainers, and
4680    // store a single event to be replayed.
4681
4682
4683    existingQueuedEvent.eventSystemFlags |= eventSystemFlags;
4684    var targetContainers = existingQueuedEvent.targetContainers;
4685
4686    if (targetContainer !== null && targetContainers.indexOf(targetContainer) === -1) {
4687      targetContainers.push(targetContainer);
4688    }
4689
4690    return existingQueuedEvent;
4691  }
4692
4693  function queueIfContinuousEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent) {
4694    // These set relatedTarget to null because the replayed event will be treated as if we
4695    // moved from outside the window (no target) onto the target once it hydrates.
4696    // Instead of mutating we could clone the event.
4697    switch (domEventName) {
4698      case 'focusin':
4699        {
4700          var focusEvent = nativeEvent;
4701          queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(queuedFocus, blockedOn, domEventName, eventSystemFlags, targetContainer, focusEvent);
4702          return true;
4703        }
4704
4705      case 'dragenter':
4706        {
4707          var dragEvent = nativeEvent;
4708          queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(queuedDrag, blockedOn, domEventName, eventSystemFlags, targetContainer, dragEvent);
4709          return true;
4710        }
4711
4712      case 'mouseover':
4713        {
4714          var mouseEvent = nativeEvent;
4715          queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(queuedMouse, blockedOn, domEventName, eventSystemFlags, targetContainer, mouseEvent);
4716          return true;
4717        }
4718
4719      case 'pointerover':
4720        {
4721          var pointerEvent = nativeEvent;
4722          var pointerId = pointerEvent.pointerId;
4723          queuedPointers.set(pointerId, accumulateOrCreateContinuousQueuedReplayableEvent(queuedPointers.get(pointerId) || null, blockedOn, domEventName, eventSystemFlags, targetContainer, pointerEvent));
4724          return true;
4725        }
4726
4727      case 'gotpointercapture':
4728        {
4729          var _pointerEvent = nativeEvent;
4730          var _pointerId2 = _pointerEvent.pointerId;
4731          queuedPointerCaptures.set(_pointerId2, accumulateOrCreateContinuousQueuedReplayableEvent(queuedPointerCaptures.get(_pointerId2) || null, blockedOn, domEventName, eventSystemFlags, targetContainer, _pointerEvent));
4732          return true;
4733        }
4734    }
4735
4736    return false;
4737  } // Check if this target is unblocked. Returns true if it's unblocked.
4738
4739  function attemptExplicitHydrationTarget(queuedTarget) {
4740    // TODO: This function shares a lot of logic with attemptToDispatchEvent.
4741    // Try to unify them. It's a bit tricky since it would require two return
4742    // values.
4743    var targetInst = getClosestInstanceFromNode(queuedTarget.target);
4744
4745    if (targetInst !== null) {
4746      var nearestMounted = getNearestMountedFiber(targetInst);
4747
4748      if (nearestMounted !== null) {
4749        var tag = nearestMounted.tag;
4750
4751        if (tag === SuspenseComponent) {
4752          var instance = getSuspenseInstanceFromFiber(nearestMounted);
4753
4754          if (instance !== null) {
4755            // We're blocked on hydrating this boundary.
4756            // Increase its priority.
4757            queuedTarget.blockedOn = instance;
4758            attemptHydrationAtPriority(queuedTarget.lanePriority, function () {
4759              unstable_runWithPriority(queuedTarget.priority, function () {
4760                attemptHydrationAtCurrentPriority(nearestMounted);
4761              });
4762            });
4763            return;
4764          }
4765        } else if (tag === HostRoot) {
4766          var root = nearestMounted.stateNode;
4767
4768          if (root.hydrate) {
4769            queuedTarget.blockedOn = getContainerFromFiber(nearestMounted); // We don't currently have a way to increase the priority of
4770            // a root other than sync.
4771
4772            return;
4773          }
4774        }
4775      }
4776    }
4777
4778    queuedTarget.blockedOn = null;
4779  }
4780
4781  function attemptReplayContinuousQueuedEvent(queuedEvent) {
4782    if (queuedEvent.blockedOn !== null) {
4783      return false;
4784    }
4785
4786    var targetContainers = queuedEvent.targetContainers;
4787
4788    while (targetContainers.length > 0) {
4789      var targetContainer = targetContainers[0];
4790      var nextBlockedOn = attemptToDispatchEvent(queuedEvent.domEventName, queuedEvent.eventSystemFlags, targetContainer, queuedEvent.nativeEvent);
4791
4792      if (nextBlockedOn !== null) {
4793        // We're still blocked. Try again later.
4794        var _fiber3 = getInstanceFromNode(nextBlockedOn);
4795
4796        if (_fiber3 !== null) {
4797          attemptContinuousHydration(_fiber3);
4798        }
4799
4800        queuedEvent.blockedOn = nextBlockedOn;
4801        return false;
4802      } // This target container was successfully dispatched. Try the next.
4803
4804
4805      targetContainers.shift();
4806    }
4807
4808    return true;
4809  }
4810
4811  function attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {
4812    if (attemptReplayContinuousQueuedEvent(queuedEvent)) {
4813      map.delete(key);
4814    }
4815  }
4816
4817  function replayUnblockedEvents() {
4818    hasScheduledReplayAttempt = false; // First replay discrete events.
4819
4820    while (queuedDiscreteEvents.length > 0) {
4821      var nextDiscreteEvent = queuedDiscreteEvents[0];
4822
4823      if (nextDiscreteEvent.blockedOn !== null) {
4824        // We're still blocked.
4825        // Increase the priority of this boundary to unblock
4826        // the next discrete event.
4827        var _fiber4 = getInstanceFromNode(nextDiscreteEvent.blockedOn);
4828
4829        if (_fiber4 !== null) {
4830          attemptUserBlockingHydration(_fiber4);
4831        }
4832
4833        break;
4834      }
4835
4836      var targetContainers = nextDiscreteEvent.targetContainers;
4837
4838      while (targetContainers.length > 0) {
4839        var targetContainer = targetContainers[0];
4840        var nextBlockedOn = attemptToDispatchEvent(nextDiscreteEvent.domEventName, nextDiscreteEvent.eventSystemFlags, targetContainer, nextDiscreteEvent.nativeEvent);
4841
4842        if (nextBlockedOn !== null) {
4843          // We're still blocked. Try again later.
4844          nextDiscreteEvent.blockedOn = nextBlockedOn;
4845          break;
4846        } // This target container was successfully dispatched. Try the next.
4847
4848
4849        targetContainers.shift();
4850      }
4851
4852      if (nextDiscreteEvent.blockedOn === null) {
4853        // We've successfully replayed the first event. Let's try the next one.
4854        queuedDiscreteEvents.shift();
4855      }
4856    } // Next replay any continuous events.
4857
4858
4859    if (queuedFocus !== null && attemptReplayContinuousQueuedEvent(queuedFocus)) {
4860      queuedFocus = null;
4861    }
4862
4863    if (queuedDrag !== null && attemptReplayContinuousQueuedEvent(queuedDrag)) {
4864      queuedDrag = null;
4865    }
4866
4867    if (queuedMouse !== null && attemptReplayContinuousQueuedEvent(queuedMouse)) {
4868      queuedMouse = null;
4869    }
4870
vendor: 4,866 bytes, lines 4871-5025
4871    queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);
4872    queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);
4873  }
4874
4875  function scheduleCallbackIfUnblocked(queuedEvent, unblocked) {
4876    if (queuedEvent.blockedOn === unblocked) {
4877      queuedEvent.blockedOn = null;
4878
4879      if (!hasScheduledReplayAttempt) {
4880        hasScheduledReplayAttempt = true; // Schedule a callback to attempt replaying as many events as are
4881        // now unblocked. This first might not actually be unblocked yet.
4882        // We could check it early to avoid scheduling an unnecessary callback.
4883
4884        unstable_scheduleCallback(unstable_NormalPriority, replayUnblockedEvents);
4885      }
4886    }
4887  }
4888
4889  function retryIfBlockedOn(unblocked) {
4890    // Mark anything that was blocked on this as no longer blocked
4891    // and eligible for a replay.
4892    if (queuedDiscreteEvents.length > 0) {
4893      scheduleCallbackIfUnblocked(queuedDiscreteEvents[0], unblocked); // This is a exponential search for each boundary that commits. I think it's
4894      // worth it because we expect very few discrete events to queue up and once
4895      // we are actually fully unblocked it will be fast to replay them.
4896
4897      for (var i = 1; i < queuedDiscreteEvents.length; i++) {
4898        var queuedEvent = queuedDiscreteEvents[i];
4899
4900        if (queuedEvent.blockedOn === unblocked) {
4901          queuedEvent.blockedOn = null;
4902        }
4903      }
4904    }
4905
4906    if (queuedFocus !== null) {
4907      scheduleCallbackIfUnblocked(queuedFocus, unblocked);
4908    }
4909
4910    if (queuedDrag !== null) {
4911      scheduleCallbackIfUnblocked(queuedDrag, unblocked);
4912    }
4913
4914    if (queuedMouse !== null) {
4915      scheduleCallbackIfUnblocked(queuedMouse, unblocked);
4916    }
4917
4918    var unblock = function (queuedEvent) {
4919      return scheduleCallbackIfUnblocked(queuedEvent, unblocked);
4920    };
4921
4922    queuedPointers.forEach(unblock);
4923    queuedPointerCaptures.forEach(unblock);
4924
4925    for (var _i = 0; _i < queuedExplicitHydrationTargets.length; _i++) {
4926      var queuedTarget = queuedExplicitHydrationTargets[_i];
4927
4928      if (queuedTarget.blockedOn === unblocked) {
4929        queuedTarget.blockedOn = null;
4930      }
4931    }
4932
4933    while (queuedExplicitHydrationTargets.length > 0) {
4934      var nextExplicitTarget = queuedExplicitHydrationTargets[0];
4935
4936      if (nextExplicitTarget.blockedOn !== null) {
4937        // We're still blocked.
4938        break;
4939      } else {
4940        attemptExplicitHydrationTarget(nextExplicitTarget);
4941
4942        if (nextExplicitTarget.blockedOn === null) {
4943          // We're unblocked.
4944          queuedExplicitHydrationTargets.shift();
4945        }
4946      }
4947    }
4948  }
4949
4950  var DiscreteEvent = 0;
4951  var UserBlockingEvent = 1;
4952  var ContinuousEvent = 2;
4953
4954  /**
4955   * Generate a mapping of standard vendor prefixes using the defined style property and event name.
4956   *
4957   * @param {string} styleProp
4958   * @param {string} eventName
4959   * @returns {object}
4960   */
4961
4962  function makePrefixMap(styleProp, eventName) {
4963    var prefixes = {};
4964    prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();
4965    prefixes['Webkit' + styleProp] = 'webkit' + eventName;
4966    prefixes['Moz' + styleProp] = 'moz' + eventName;
4967    return prefixes;
4968  }
4969  /**
4970   * A list of event names to a configurable list of vendor prefixes.
4971   */
4972
4973
4974  var vendorPrefixes = {
4975    animationend: makePrefixMap('Animation', 'AnimationEnd'),
4976    animationiteration: makePrefixMap('Animation', 'AnimationIteration'),
4977    animationstart: makePrefixMap('Animation', 'AnimationStart'),
4978    transitionend: makePrefixMap('Transition', 'TransitionEnd')
4979  };
4980  /**
4981   * Event names that have already been detected and prefixed (if applicable).
4982   */
4983
4984  var prefixedEventNames = {};
4985  /**
4986   * Element to check for prefixes on.
4987   */
4988
4989  var style = {};
4990  /**
4991   * Bootstrap if a DOM exists.
4992   */
4993
4994  if (canUseDOM) {
4995    style = document.createElement('div').style; // On some platforms, in particular some releases of Android 4.x,
4996    // the un-prefixed "animation" and "transition" properties are defined on the
4997    // style object but the events that fire will still be prefixed, so we need
4998    // to check if the un-prefixed events are usable, and if not remove them from the map.
4999
5000    if (!('AnimationEvent' in window)) {
5001      delete vendorPrefixes.animationend.animation;
5002      delete vendorPrefixes.animationiteration.animation;
5003      delete vendorPrefixes.animationstart.animation;
5004    } // Same as above
5005
5006
5007    if (!('TransitionEvent' in window)) {
5008      delete vendorPrefixes.transitionend.transition;
5009    }
5010  }
5011  /**
5012   * Attempts to determine the correct vendor prefixed event name.
5013   *
5014   * @param {string} eventName
5015   * @returns {string}
5016   */
5017
5018
5019  function getVendorPrefixedEventName(eventName) {
5020    if (prefixedEventNames[eventName]) {
5021      return prefixedEventNames[eventName];
5022    } else if (!vendorPrefixes[eventName]) {
5023      return eventName;
5024    }
5025
5026    var prefixMap = vendorPrefixes[eventName];
5027
5028    for (var styleProp in prefixMap) {
5029      if (prefixMap.hasOwnProperty(styleProp) && styleProp in style) {
5030        return prefixedEventNames[eventName] = prefixMap[styleProp];
5031      }
5032    }
5033
5034    return eventName;
5035  }
5036
5037  var ANIMATION_END = getVendorPrefixedEventName('animationend');
5038  var ANIMATION_ITERATION = getVendorPrefixedEventName('animationiteration');
5039  var ANIMATION_START = getVendorPrefixedEventName('animationstart');
5040  var TRANSITION_END = getVendorPrefixedEventName('transitionend');
5041
5042  var topLevelEventsToReactNames = new Map();
5043  var eventPriorities = new Map(); // We store most of the events in this module in pairs of two strings so we can re-use
5044  // the code required to apply the same logic for event prioritization and that of the
5045  // SimpleEventPlugin. This complicates things slightly, but the aim is to reduce code
5046  // duplication (for which there would be quite a bit). For the events that are not needed
5047  // for the SimpleEventPlugin (otherDiscreteEvents) we process them separately as an
5048  // array of top level events.
5049  // Lastly, we ignore prettier so we can keep the formatting sane.
5050  // prettier-ignore
5051
5052  var discreteEventPairsForSimpleEventPlugin = ['cancel', 'cancel', 'click', 'click', 'close', 'close', 'contextmenu', 'contextMenu', 'copy', 'copy', 'cut', 'cut', 'auxclick', 'auxClick', 'dblclick', 'doubleClick', // Careful!
5053  'dragend', 'dragEnd', 'dragstart', 'dragStart', 'drop', 'drop', 'focusin', 'focus', // Careful!
5054  'focusout', 'blur', // Careful!
5055  'input', 'input', 'invalid', 'invalid', 'keydown', 'keyDown', 'keypress', 'keyPress', 'keyup', 'keyUp', 'mousedown', 'mouseDown', 'mouseup', 'mouseUp', 'paste', 'paste', 'pause', 'pause', 'play', 'play', 'pointercancel', 'pointerCancel', 'pointerdown', 'pointerDown', 'pointerup', 'pointerUp', 'ratechange', 'rateChange', 'reset', 'reset', 'seeked', 'seeked', 'submit', 'submit', 'touchcancel', 'touchCancel', 'touchend', 'touchEnd', 'touchstart', 'touchStart', 'volumechange', 'volumeChange'];
5056  var otherDiscreteEvents = ['change', 'selectionchange', 'textInput', 'compositionstart', 'compositionend', 'compositionupdate'];
5057
5058
5059  var userBlockingPairsForSimpleEventPlugin = ['drag', 'drag', 'dragenter', 'dragEnter', 'dragexit', 'dragExit', 'dragleave', 'dragLeave', 'dragover', 'dragOver', 'mousemove', 'mouseMove', 'mouseout', 'mouseOut', 'mouseover', 'mouseOver', 'pointermove', 'pointerMove', 'pointerout', 'pointerOut', 'pointerover', 'pointerOver', 'scroll', 'scroll', 'toggle', 'toggle', 'touchmove', 'touchMove', 'wheel', 'wheel']; // prettier-ignore
5060
5061  var continuousPairsForSimpleEventPlugin = ['abort', 'abort', ANIMATION_END, 'animationEnd', ANIMATION_ITERATION, 'animationIteration', ANIMATION_START, 'animationStart', 'canplay', 'canPlay', 'canplaythrough', 'canPlayThrough', 'durationchange', 'durationChange', 'emptied', 'emptied', 'encrypted', 'encrypted', 'ended', 'ended', 'error', 'error', 'gotpointercapture', 'gotPointerCapture', 'load', 'load', 'loadeddata', 'loadedData', 'loadedmetadata', 'loadedMetadata', 'loadstart', 'loadStart', 'lostpointercapture', 'lostPointerCapture', 'playing', 'playing', 'progress', 'progress', 'seeking', 'seeking', 'stalled', 'stalled', 'suspend', 'suspend', 'timeupdate', 'timeUpdate', TRANSITION_END, 'transitionEnd', 'waiting', 'waiting'];
5062  /**
5063   * Turns
5064   * ['abort', ...]
5065   *
5066   * into
5067   *
5068   * topLevelEventsToReactNames = new Map([
5069   *   ['abort', 'onAbort'],
5070   * ]);
5071   *
5072   * and registers them.
5073   */
5074
5075  function registerSimplePluginEventsAndSetTheirPriorities(eventTypes, priority) {
5076    // As the event types are in pairs of two, we need to iterate
5077    // through in twos. The events are in pairs of two to save code
5078    // and improve init perf of processing this array, as it will
5079    // result in far fewer object allocations and property accesses
5080    // if we only use three arrays to process all the categories of
5081    // instead of tuples.
5082    for (var i = 0; i < eventTypes.length; i += 2) {
5083      var topEvent = eventTypes[i];
5084      var event = eventTypes[i + 1];
5085      var capitalizedEvent = event[0].toUpperCase() + event.slice(1);
5086      var reactName = 'on' + capitalizedEvent;
5087      eventPriorities.set(topEvent, priority);
5088      topLevelEventsToReactNames.set(topEvent, reactName);
5089      registerTwoPhaseEvent(reactName, [topEvent]);
5090    }
5091  }
5092
5093  function setEventPriorities(eventTypes, priority) {
5094    for (var i = 0; i < eventTypes.length; i++) {
5095      eventPriorities.set(eventTypes[i], priority);
5096    }
5097  }
5098
5099  function getEventPriorityForPluginSystem(domEventName) {
5100    var priority = eventPriorities.get(domEventName); // Default to a ContinuousEvent. Note: we might
5101    // want to warn if we can't detect the priority
5102    // for the event.
5103
5104    return priority === undefined ? ContinuousEvent : priority;
5105  }
5106  function registerSimpleEvents() {
5107    registerSimplePluginEventsAndSetTheirPriorities(discreteEventPairsForSimpleEventPlugin, DiscreteEvent);
5108    registerSimplePluginEventsAndSetTheirPriorities(userBlockingPairsForSimpleEventPlugin, UserBlockingEvent);
5109    registerSimplePluginEventsAndSetTheirPriorities(continuousPairsForSimpleEventPlugin, ContinuousEvent);
5110    setEventPriorities(otherDiscreteEvents, DiscreteEvent);
5111  }
5112
5113  var ReactInternals$2 = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
5114  var _ReactInternals$Sched$1 = ReactInternals$2.SchedulerTracing,
5115      __interactionsRef = _ReactInternals$Sched$1.__interactionsRef,
5116      __subscriberRef = _ReactInternals$Sched$1.__subscriberRef,
5117      unstable_clear = _ReactInternals$Sched$1.unstable_clear,
5118      unstable_getCurrent = _ReactInternals$Sched$1.unstable_getCurrent,
5119      unstable_getThreadID = _ReactInternals$Sched$1.unstable_getThreadID,
5120      unstable_subscribe = _ReactInternals$Sched$1.unstable_subscribe,
5121      unstable_trace = _ReactInternals$Sched$1.unstable_trace,
5122      unstable_unsubscribe = _ReactInternals$Sched$1.unstable_unsubscribe,
5123      unstable_wrap = _ReactInternals$Sched$1.unstable_wrap;
5124
5125  var Scheduler_now = unstable_now;
5126
5127  {
5128    // Provide explicit error message when production+profiling bundle of e.g.
5129    // react-dom is used with production (non-profiling) bundle of
5130    // scheduler/tracing
5131    if (!(__interactionsRef != null && __interactionsRef.current != null)) {
5132      {
5133        throw Error( "It is not supported to run the profiling version of a renderer (for example, `react-dom/profiling`) without also replacing the `scheduler/tracing` module with `scheduler/tracing-profiling`. Your bundler might have a setting for aliasing both modules. Learn more at https://reactjs.org/link/profiling" );
5134      }
5135    }
5136  }
5137  // ascending numbers so we can compare them like numbers. They start at 90 to
5138  // avoid clashing with Scheduler's priorities.
5139
5140  var ImmediatePriority = 99;
5141  var UserBlockingPriority = 98;
5142  var NormalPriority = 97;
5143  var LowPriority = 96;
5144  var IdlePriority = 95; // NoPriority is the absence of priority. Also React-only.
5145
5146  var NoPriority = 90;
5147  var initialTimeMs = Scheduler_now(); // If the initial timestamp is reasonably small, use Scheduler's `now` directly.
5148
5149  var SyncLanePriority = 15;
5150  var SyncBatchedLanePriority = 14;
5151  var InputDiscreteHydrationLanePriority = 13;
5152  var InputDiscreteLanePriority = 12;
5153  var InputContinuousHydrationLanePriority = 11;
5154  var InputContinuousLanePriority = 10;
5155  var DefaultHydrationLanePriority = 9;
5156  var DefaultLanePriority = 8;
5157  var TransitionHydrationPriority = 7;
5158  var TransitionPriority = 6;
5159  var RetryLanePriority = 5;
5160  var SelectiveHydrationLanePriority = 4;
5161  var IdleHydrationLanePriority = 3;
5162  var IdleLanePriority = 2;
5163  var OffscreenLanePriority = 1;
5164  var NoLanePriority = 0;
5165  var TotalLanes = 31;
5166  var NoLanes =
5167  /*                        */
5168  0;
5169  var NoLane =
5170  /*                          */
5171  0;
5172  var SyncLane =
5173  /*                        */
5174  1;
5175  var SyncBatchedLane =
5176  /*                 */
5177  2;
5178  var InputDiscreteHydrationLane =
5179  /*      */
5180  4;
5181  var InputDiscreteLanes =
5182  /*                    */
5183  24;
5184  var InputContinuousHydrationLane =
5185  /*           */
5186  32;
5187  var InputContinuousLanes =
5188  /*                  */
5189  192;
5190  var DefaultHydrationLane =
5191  /*            */
5192  256;
5193  var DefaultLanes =
5194  /*                   */
5195  3584;
5196  var TransitionHydrationLane =
5197  /*                */
5198  4096;
5199  var TransitionLanes =
5200  /*                       */
5201  4186112;
5202  var RetryLanes =
5203  /*                            */
5204  62914560;
5205  var SomeRetryLane =
5206  /*                  */
5207  33554432;
5208  var SelectiveHydrationLane =
5209  /*          */
5210  67108864;
5211  var NonIdleLanes =
5212  /*                                 */
5213  134217727;
5214  var IdleHydrationLane =
5215  /*               */
5216  134217728;
5217  var IdleLanes =
5218  /*                             */
5219  805306368;
5220  var OffscreenLane =
5221  /*                   */
5222  1073741824;
5223  var NoTimestamp = -1;
5224  function setCurrentUpdateLanePriority(newLanePriority) {
5225  } // "Registers" used to "return" multiple values
5226  // Used by getHighestPriorityLanes and getNextLanes:
5227
5228  var return_highestLanePriority = DefaultLanePriority;
5229
5230  function getHighestPriorityLanes(lanes) {
5231    if ((SyncLane & lanes) !== NoLanes) {
5232      return_highestLanePriority = SyncLanePriority;
5233      return SyncLane;
5234    }
5235
5236    if ((SyncBatchedLane & lanes) !== NoLanes) {
5237      return_highestLanePriority = SyncBatchedLanePriority;
5238      return SyncBatchedLane;
5239    }
5240
5241    if ((InputDiscreteHydrationLane & lanes) !== NoLanes) {
5242      return_highestLanePriority = InputDiscreteHydrationLanePriority;
5243      return InputDiscreteHydrationLane;
5244    }
5245
5246    var inputDiscreteLanes = InputDiscreteLanes & lanes;
5247
5248    if (inputDiscreteLanes !== NoLanes) {
5249      return_highestLanePriority = InputDiscreteLanePriority;
5250      return inputDiscreteLanes;
5251    }
5252
5253    if ((lanes & InputContinuousHydrationLane) !== NoLanes) {
5254      return_highestLanePriority = InputContinuousHydrationLanePriority;
5255      return InputContinuousHydrationLane;
5256    }
5257
5258    var inputContinuousLanes = InputContinuousLanes & lanes;
5259
5260    if (inputContinuousLanes !== NoLanes) {
5261      return_highestLanePriority = InputContinuousLanePriority;
5262      return inputContinuousLanes;
5263    }
5264
5265    if ((lanes & DefaultHydrationLane) !== NoLanes) {
5266      return_highestLanePriority = DefaultHydrationLanePriority;
5267      return DefaultHydrationLane;
5268    }
5269
5270    var defaultLanes = DefaultLanes & lanes;
5271
5272    if (defaultLanes !== NoLanes) {
5273      return_highestLanePriority = DefaultLanePriority;
5274      return defaultLanes;
5275    }
5276
5277    if ((lanes & TransitionHydrationLane) !== NoLanes) {
5278      return_highestLanePriority = TransitionHydrationPriority;
5279      return TransitionHydrationLane;
5280    }
5281
5282    var transitionLanes = TransitionLanes & lanes;
5283
5284    if (transitionLanes !== NoLanes) {
5285      return_highestLanePriority = TransitionPriority;
5286      return transitionLanes;
5287    }
5288
5289    var retryLanes = RetryLanes & lanes;
5290
5291    if (retryLanes !== NoLanes) {
5292      return_highestLanePriority = RetryLanePriority;
5293      return retryLanes;
5294    }
5295
5296    if (lanes & SelectiveHydrationLane) {
5297      return_highestLanePriority = SelectiveHydrationLanePriority;
5298      return SelectiveHydrationLane;
5299    }
5300
5301    if ((lanes & IdleHydrationLane) !== NoLanes) {
5302      return_highestLanePriority = IdleHydrationLanePriority;
5303      return IdleHydrationLane;
5304    }
5305
5306    var idleLanes = IdleLanes & lanes;
5307
5308    if (idleLanes !== NoLanes) {
5309      return_highestLanePriority = IdleLanePriority;
5310      return idleLanes;
5311    }
5312
5313    if ((OffscreenLane & lanes) !== NoLanes) {
5314      return_highestLanePriority = OffscreenLanePriority;
5315      return OffscreenLane;
5316    }
5317
5318    {
5319      error('Should have found matching lanes. This is a bug in React.');
5320    } // This shouldn't be reachable, but as a fallback, return the entire bitmask.
5321
5322
5323    return_highestLanePriority = DefaultLanePriority;
5324    return lanes;
5325  }
5326
5327  function schedulerPriorityToLanePriority(schedulerPriorityLevel) {
5328    switch (schedulerPriorityLevel) {
5329      case ImmediatePriority:
5330        return SyncLanePriority;
5331
5332      case UserBlockingPriority:
5333        return InputContinuousLanePriority;
5334
5335      case NormalPriority:
5336      case LowPriority:
5337        // TODO: Handle LowSchedulerPriority, somehow. Maybe the same lane as hydration.
5338        return DefaultLanePriority;
5339
5340      case IdlePriority:
5341        return IdleLanePriority;
5342
5343      default:
5344        return NoLanePriority;
5345    }
5346  }
5347  function lanePriorityToSchedulerPriority(lanePriority) {
5348    switch (lanePriority) {
5349      case SyncLanePriority:
5350      case SyncBatchedLanePriority:
5351        return ImmediatePriority;
5352
5353      case InputDiscreteHydrationLanePriority:
5354      case InputDiscreteLanePriority:
5355      case InputContinuousHydrationLanePriority:
5356      case InputContinuousLanePriority:
5357        return UserBlockingPriority;
5358
5359      case DefaultHydrationLanePriority:
5360      case DefaultLanePriority:
5361      case TransitionHydrationPriority:
5362      case TransitionPriority:
5363      case SelectiveHydrationLanePriority:
5364      case RetryLanePriority:
5365        return NormalPriority;
5366
5367      case IdleHydrationLanePriority:
5368      case IdleLanePriority:
5369      case OffscreenLanePriority:
5370        return IdlePriority;
5371
5372      case NoLanePriority:
5373        return NoPriority;
5374
5375      default:
5376        {
5377          {
5378            throw Error( "Invalid update priority: " + lanePriority + ". This is a bug in React." );
5379          }
5380        }
5381
5382    }
5383  }
5384  function getNextLanes(root, wipLanes) {
5385    // Early bailout if there's no pending work left.
5386    var pendingLanes = root.pendingLanes;
5387
5388    if (pendingLanes === NoLanes) {
5389      return_highestLanePriority = NoLanePriority;
5390      return NoLanes;
5391    }
5392
5393    var nextLanes = NoLanes;
5394    var nextLanePriority = NoLanePriority;
5395    var expiredLanes = root.expiredLanes;
5396    var suspendedLanes = root.suspendedLanes;
5397    var pingedLanes = root.pingedLanes; // Check if any work has expired.
5398
5399    if (expiredLanes !== NoLanes) {
5400      nextLanes = expiredLanes;
5401      nextLanePriority = return_highestLanePriority = SyncLanePriority;
5402    } else {
5403      // Do not work on any idle work until all the non-idle work has finished,
5404      // even if the work is suspended.
5405      var nonIdlePendingLanes = pendingLanes & NonIdleLanes;
5406
5407      if (nonIdlePendingLanes !== NoLanes) {
5408        var nonIdleUnblockedLanes = nonIdlePendingLanes & ~suspendedLanes;
5409
5410        if (nonIdleUnblockedLanes !== NoLanes) {
5411          nextLanes = getHighestPriorityLanes(nonIdleUnblockedLanes);
5412          nextLanePriority = return_highestLanePriority;
5413        } else {
5414          var nonIdlePingedLanes = nonIdlePendingLanes & pingedLanes;
5415
5416          if (nonIdlePingedLanes !== NoLanes) {
5417            nextLanes = getHighestPriorityLanes(nonIdlePingedLanes);
5418            nextLanePriority = return_highestLanePriority;
5419          }
5420        }
5421      } else {
5422        // The only remaining work is Idle.
5423        var unblockedLanes = pendingLanes & ~suspendedLanes;
5424
5425        if (unblockedLanes !== NoLanes) {
5426          nextLanes = getHighestPriorityLanes(unblockedLanes);
5427          nextLanePriority = return_highestLanePriority;
5428        } else {
5429          if (pingedLanes !== NoLanes) {
5430            nextLanes = getHighestPriorityLanes(pingedLanes);
5431            nextLanePriority = return_highestLanePriority;
5432          }
5433        }
5434      }
5435    }
5436
5437    if (nextLanes === NoLanes) {
5438      // This should only be reachable if we're suspended
5439      // TODO: Consider warning in this path if a fallback timer is not scheduled.
5440      return NoLanes;
5441    } // If there are higher priority lanes, we'll include them even if they
5442    // are suspended.
5443
5444
5445    nextLanes = pendingLanes & getEqualOrHigherPriorityLanes(nextLanes); // If we're already in the middle of a render, switching lanes will interrupt
5446    // it and we'll lose our progress. We should only do this if the new lanes are
5447    // higher priority.
5448
5449    if (wipLanes !== NoLanes && wipLanes !== nextLanes && // If we already suspended with a delay, then interrupting is fine. Don't
5450    // bother waiting until the root is complete.
5451    (wipLanes & suspendedLanes) === NoLanes) {
5452      getHighestPriorityLanes(wipLanes);
5453      var wipLanePriority = return_highestLanePriority;
5454
5455      if (nextLanePriority <= wipLanePriority) {
5456        return wipLanes;
5457      } else {
5458        return_highestLanePriority = nextLanePriority;
5459      }
5460    } // Check for entangled lanes and add them to the batch.
5461    //
5462    // A lane is said to be entangled with another when it's not allowed to render
5463    // in a batch that does not also include the other lane. Typically we do this
5464    // when multiple updates have the same source, and we only want to respond to
5465    // the most recent event from that source.
5466    //
5467    // Note that we apply entanglements *after* checking for partial work above.
5468    // This means that if a lane is entangled during an interleaved event while
5469    // it's already rendering, we won't interrupt it. This is intentional, since
5470    // entanglement is usually "best effort": we'll try our best to render the
5471    // lanes in the same batch, but it's not worth throwing out partially
5472    // completed work in order to do it.
5473    //
5474    // For those exceptions where entanglement is semantically important, like
5475    // useMutableSource, we should ensure that there is no partial work at the
5476    // time we apply the entanglement.
5477
5478
5479    var entangledLanes = root.entangledLanes;
5480
5481    if (entangledLanes !== NoLanes) {
5482      var entanglements = root.entanglements;
5483      var lanes = nextLanes & entangledLanes;
5484
5485      while (lanes > 0) {
5486        var index = pickArbitraryLaneIndex(lanes);
5487        var lane = 1 << index;
5488        nextLanes |= entanglements[index];
5489        lanes &= ~lane;
5490      }
5491    }
5492
5493    return nextLanes;
5494  }
5495  function getMostRecentEventTime(root, lanes) {
5496    var eventTimes = root.eventTimes;
5497    var mostRecentEventTime = NoTimestamp;
5498
5499    while (lanes > 0) {
5500      var index = pickArbitraryLaneIndex(lanes);
5501      var lane = 1 << index;
5502      var eventTime = eventTimes[index];
5503
5504      if (eventTime > mostRecentEventTime) {
5505        mostRecentEventTime = eventTime;
5506      }
5507
5508      lanes &= ~lane;
5509    }
5510
5511    return mostRecentEventTime;
5512  }
5513
5514  function computeExpirationTime(lane, currentTime) {
5515    // TODO: Expiration heuristic is constant per lane, so could use a map.
5516    getHighestPriorityLanes(lane);
5517    var priority = return_highestLanePriority;
5518
5519    if (priority >= InputContinuousLanePriority) {
5520      // User interactions should expire slightly more quickly.
5521      //
5522      // NOTE: This is set to the corresponding constant as in Scheduler.js. When
5523      // we made it larger, a product metric in www regressed, suggesting there's
5524      // a user interaction that's being starved by a series of synchronous
5525      // updates. If that theory is correct, the proper solution is to fix the
5526      // starvation. However, this scenario supports the idea that expiration
5527      // times are an important safeguard when starvation does happen.
5528      //
5529      // Also note that, in the case of user input specifically, this will soon no
5530      // longer be an issue because we plan to make user input synchronous by
5531      // default (until you enter `startTransition`, of course.)
5532      //
5533      // If weren't planning to make these updates synchronous soon anyway, I
5534      // would probably make this number a configurable parameter.
5535      return currentTime + 250;
5536    } else if (priority >= TransitionPriority) {
5537      return currentTime + 5000;
5538    } else {
5539      // Anything idle priority or lower should never expire.
5540      return NoTimestamp;
5541    }
5542  }
5543
5544  function markStarvedLanesAsExpired(root, currentTime) {
5545    // TODO: This gets called every time we yield. We can optimize by storing
5546    // the earliest expiration time on the root. Then use that to quickly bail out
5547    // of this function.
5548    var pendingLanes = root.pendingLanes;
5549    var suspendedLanes = root.suspendedLanes;
5550    var pingedLanes = root.pingedLanes;
5551    var expirationTimes = root.expirationTimes; // Iterate through the pending lanes and check if we've reached their
5552    // expiration time. If so, we'll assume the update is being starved and mark
5553    // it as expired to force it to finish.
5554
5555    var lanes = pendingLanes;
5556
5557    while (lanes > 0) {
5558      var index = pickArbitraryLaneIndex(lanes);
5559      var lane = 1 << index;
5560      var expirationTime = expirationTimes[index];
5561
5562      if (expirationTime === NoTimestamp) {
5563        // Found a pending lane with no expiration time. If it's not suspended, or
5564        // if it's pinged, assume it's CPU-bound. Compute a new expiration time
5565        // using the current time.
5566        if ((lane & suspendedLanes) === NoLanes || (lane & pingedLanes) !== NoLanes) {
5567          // Assumes timestamps are monotonically increasing.
5568          expirationTimes[index] = computeExpirationTime(lane, currentTime);
5569        }
5570      } else if (expirationTime <= currentTime) {
5571        // This lane expired
5572        root.expiredLanes |= lane;
5573      }
5574
5575      lanes &= ~lane;
5576    }
5577  } // This returns the highest priority pending lanes regardless of whether they
5578  function getLanesToRetrySynchronouslyOnError(root) {
5579    var everythingButOffscreen = root.pendingLanes & ~OffscreenLane;
5580
5581    if (everythingButOffscreen !== NoLanes) {
5582      return everythingButOffscreen;
5583    }
5584
5585    if (everythingButOffscreen & OffscreenLane) {
5586      return OffscreenLane;
5587    }
5588
5589    return NoLanes;
5590  }
5591  function returnNextLanesPriority() {
5592    return return_highestLanePriority;
5593  }
5594  function includesNonIdleWork(lanes) {
5595    return (lanes & NonIdleLanes) !== NoLanes;
5596  }
5597  function includesOnlyRetries(lanes) {
5598    return (lanes & RetryLanes) === lanes;
5599  }
5600  function includesOnlyTransitions(lanes) {
5601    return (lanes & TransitionLanes) === lanes;
5602  } // To ensure consistency across multiple updates in the same event, this should
5603  // be a pure function, so that it always returns the same lane for given inputs.
5604
5605  function findUpdateLane(lanePriority, wipLanes) {
5606    switch (lanePriority) {
5607      case NoLanePriority:
5608        break;
5609
5610      case SyncLanePriority:
5611        return SyncLane;
5612
5613      case SyncBatchedLanePriority:
5614        return SyncBatchedLane;
5615
5616      case InputDiscreteLanePriority:
5617        {
5618          var _lane = pickArbitraryLane(InputDiscreteLanes & ~wipLanes);
5619
5620          if (_lane === NoLane) {
5621            // Shift to the next priority level
5622            return findUpdateLane(InputContinuousLanePriority, wipLanes);
5623          }
5624
5625          return _lane;
5626        }
5627
5628      case InputContinuousLanePriority:
5629        {
5630          var _lane2 = pickArbitraryLane(InputContinuousLanes & ~wipLanes);
5631
5632          if (_lane2 === NoLane) {
5633            // Shift to the next priority level
5634            return findUpdateLane(DefaultLanePriority, wipLanes);
5635          }
5636
5637          return _lane2;
5638        }
5639
5640      case DefaultLanePriority:
5641        {
5642          var _lane3 = pickArbitraryLane(DefaultLanes & ~wipLanes);
5643
5644          if (_lane3 === NoLane) {
5645            // If all the default lanes are already being worked on, look for a
5646            // lane in the transition range.
5647            _lane3 = pickArbitraryLane(TransitionLanes & ~wipLanes);
5648
5649            if (_lane3 === NoLane) {
5650              // All the transition lanes are taken, too. This should be very
5651              // rare, but as a last resort, pick a default lane. This will have
5652              // the effect of interrupting the current work-in-progress render.
5653              _lane3 = pickArbitraryLane(DefaultLanes);
5654            }
5655          }
5656
5657          return _lane3;
5658        }
5659
5660      case TransitionPriority: // Should be handled by findTransitionLane instead
5661
5662      case RetryLanePriority:
5663        // Should be handled by findRetryLane instead
5664        break;
5665
5666      case IdleLanePriority:
5667        var lane = pickArbitraryLane(IdleLanes & ~wipLanes);
5668
5669        if (lane === NoLane) {
5670          lane = pickArbitraryLane(IdleLanes);
5671        }
5672
5673        return lane;
5674    }
5675
5676    {
5677      {
5678        throw Error( "Invalid update priority: " + lanePriority + ". This is a bug in React." );
5679      }
5680    }
5681  } // To ensure consistency across multiple updates in the same event, this should
5682  // be pure function, so that it always returns the same lane for given inputs.
5683
5684  function findTransitionLane(wipLanes, pendingLanes) {
5685    // First look for lanes that are completely unclaimed, i.e. have no
5686    // pending work.
5687    var lane = pickArbitraryLane(TransitionLanes & ~pendingLanes);
5688
5689    if (lane === NoLane) {
5690      // If all lanes have pending work, look for a lane that isn't currently
5691      // being worked on.
5692      lane = pickArbitraryLane(TransitionLanes & ~wipLanes);
5693
5694      if (lane === NoLane) {
5695        // If everything is being worked on, pick any lane. This has the
5696        // effect of interrupting the current work-in-progress.
5697        lane = pickArbitraryLane(TransitionLanes);
5698      }
5699    }
5700
5701    return lane;
5702  } // To ensure consistency across multiple updates in the same event, this should
5703  // be pure function, so that it always returns the same lane for given inputs.
5704
5705  function findRetryLane(wipLanes) {
5706    // This is a fork of `findUpdateLane` designed specifically for Suspense
5707    // "retries" — a special update that attempts to flip a Suspense boundary
5708    // from its placeholder state to its primary/resolved state.
5709    var lane = pickArbitraryLane(RetryLanes & ~wipLanes);
5710
5711    if (lane === NoLane) {
5712      lane = pickArbitraryLane(RetryLanes);
5713    }
5714
5715    return lane;
5716  }
5717
5718  function getHighestPriorityLane(lanes) {
5719    return lanes & -lanes;
5720  }
5721
5722  function getLowestPriorityLane(lanes) {
5723    // This finds the most significant non-zero bit.
5724    var index = 31 - clz32(lanes);
5725    return index < 0 ? NoLanes : 1 << index;
5726  }
5727
5728  function getEqualOrHigherPriorityLanes(lanes) {
5729    return (getLowestPriorityLane(lanes) << 1) - 1;
5730  }
5731
5732  function pickArbitraryLane(lanes) {
5733    // This wrapper function gets inlined. Only exists so to communicate that it
5734    // doesn't matter which bit is selected; you can pick any bit without
5735    // affecting the algorithms where its used. Here I'm using
5736    // getHighestPriorityLane because it requires the fewest operations.
5737    return getHighestPriorityLane(lanes);
5738  }
5739
5740  function pickArbitraryLaneIndex(lanes) {
5741    return 31 - clz32(lanes);
5742  }
5743
5744  function laneToIndex(lane) {
5745    return pickArbitraryLaneIndex(lane);
5746  }
5747
5748  function includesSomeLane(a, b) {
5749    return (a & b) !== NoLanes;
5750  }
5751  function isSubsetOfLanes(set, subset) {
5752    return (set & subset) === subset;
5753  }
5754  function mergeLanes(a, b) {
5755    return a | b;
5756  }
5757  function removeLanes(set, subset) {
5758    return set & ~subset;
5759  } // Seems redundant, but it changes the type from a single lane (used for
5760  // updates) to a group of lanes (used for flushing work).
5761
5762  function laneToLanes(lane) {
5763    return lane;
5764  }
5765  function higherPriorityLane(a, b) {
5766    // This works because the bit ranges decrease in priority as you go left.
5767    return a !== NoLane && a < b ? a : b;
5768  }
5769  function createLaneMap(initial) {
5770    // Intentionally pushing one by one.
5771    // https://v8.dev/blog/elements-kinds#avoid-creating-holes
5772    var laneMap = [];
5773
5774    for (var i = 0; i < TotalLanes; i++) {
5775      laneMap.push(initial);
5776    }
5777
5778    return laneMap;
5779  }
5780  function markRootUpdated(root, updateLane, eventTime) {
5781    root.pendingLanes |= updateLane; // TODO: Theoretically, any update to any lane can unblock any other lane. But
5782    // it's not practical to try every single possible combination. We need a
5783    // heuristic to decide which lanes to attempt to render, and in which batches.
5784    // For now, we use the same heuristic as in the old ExpirationTimes model:
5785    // retry any lane at equal or lower priority, but don't try updates at higher
5786    // priority without also including the lower priority updates. This works well
5787    // when considering updates across different priority levels, but isn't
5788    // sufficient for updates within the same priority, since we want to treat
5789    // those updates as parallel.
5790    // Unsuspend any update at equal or lower priority.
5791
5792    var higherPriorityLanes = updateLane - 1; // Turns 0b1000 into 0b0111
5793
5794    root.suspendedLanes &= higherPriorityLanes;
5795    root.pingedLanes &= higherPriorityLanes;
5796    var eventTimes = root.eventTimes;
5797    var index = laneToIndex(updateLane); // We can always overwrite an existing timestamp because we prefer the most
5798    // recent event, and we assume time is monotonically increasing.
5799
5800    eventTimes[index] = eventTime;
5801  }
5802  function markRootSuspended(root, suspendedLanes) {
5803    root.suspendedLanes |= suspendedLanes;
5804    root.pingedLanes &= ~suspendedLanes; // The suspended lanes are no longer CPU-bound. Clear their expiration times.
5805
5806    var expirationTimes = root.expirationTimes;
5807    var lanes = suspendedLanes;
5808
5809    while (lanes > 0) {
5810      var index = pickArbitraryLaneIndex(lanes);
5811      var lane = 1 << index;
5812      expirationTimes[index] = NoTimestamp;
5813      lanes &= ~lane;
5814    }
5815  }
5816  function markRootPinged(root, pingedLanes, eventTime) {
5817    root.pingedLanes |= root.suspendedLanes & pingedLanes;
5818  }
5819  function markDiscreteUpdatesExpired(root) {
5820    root.expiredLanes |= InputDiscreteLanes & root.pendingLanes;
5821  }
5822  function hasDiscreteLanes(lanes) {
5823    return (lanes & InputDiscreteLanes) !== NoLanes;
5824  }
5825  function markRootMutableRead(root, updateLane) {
5826    root.mutableReadLanes |= updateLane & root.pendingLanes;
5827  }
5828  function markRootFinished(root, remainingLanes) {
5829    var noLongerPendingLanes = root.pendingLanes & ~remainingLanes;
5830    root.pendingLanes = remainingLanes; // Let's try everything again
5831
5832    root.suspendedLanes = 0;
5833    root.pingedLanes = 0;
5834    root.expiredLanes &= remainingLanes;
5835    root.mutableReadLanes &= remainingLanes;
5836    root.entangledLanes &= remainingLanes;
5837    var entanglements = root.entanglements;
5838    var eventTimes = root.eventTimes;
5839    var expirationTimes = root.expirationTimes; // Clear the lanes that no longer have pending work
5840
5841    var lanes = noLongerPendingLanes;
5842
5843    while (lanes > 0) {
5844      var index = pickArbitraryLaneIndex(lanes);
5845      var lane = 1 << index;
5846      entanglements[index] = NoLanes;
5847      eventTimes[index] = NoTimestamp;
5848      expirationTimes[index] = NoTimestamp;
5849      lanes &= ~lane;
5850    }
5851  }
5852  function markRootEntangled(root, entangledLanes) {
5853    root.entangledLanes |= entangledLanes;
5854    var entanglements = root.entanglements;
5855    var lanes = entangledLanes;
5856
5857    while (lanes > 0) {
5858      var index = pickArbitraryLaneIndex(lanes);
5859      var lane = 1 << index;
5860      entanglements[index] |= entangledLanes;
5861      lanes &= ~lane;
5862    }
5863  }
5864  var clz32 = Math.clz32 ? Math.clz32 : clz32Fallback; // Count leading zeros. Only used on lanes, so assume input is an integer.
5865  // Based on:
5866  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32
5867
5868  var log = Math.log;
5869  var LN2 = Math.LN2;
5870
5871  function clz32Fallback(lanes) {
5872    if (lanes === 0) {
5873      return 32;
5874    }
5875
5876    return 31 - (log(lanes) / LN2 | 0) | 0;
5877  }
5878
5879  // Intentionally not named imports because Rollup would use dynamic dispatch for
5880  var UserBlockingPriority$1 = unstable_UserBlockingPriority,
5881      runWithPriority = unstable_runWithPriority; // TODO: can we stop exporting these?
5882
5883  var _enabled = true; // This is exported in FB builds for use by legacy FB layer infra.
5884  // We'd like to remove this but it's not clear if this is safe.
5885
5886  function setEnabled(enabled) {
5887    _enabled = !!enabled;
5888  }
5889  function isEnabled() {
5890    return _enabled;
5891  }
5892  function createEventListenerWrapperWithPriority(targetContainer, domEventName, eventSystemFlags) {
5893    var eventPriority = getEventPriorityForPluginSystem(domEventName);
5894    var listenerWrapper;
5895
5896    switch (eventPriority) {
5897      case DiscreteEvent:
5898        listenerWrapper = dispatchDiscreteEvent;
5899        break;
5900
5901      case UserBlockingEvent:
5902        listenerWrapper = dispatchUserBlockingUpdate;
5903        break;
5904
5905      case ContinuousEvent:
5906      default:
5907        listenerWrapper = dispatchEvent;
5908        break;
5909    }
5910
5911    return listenerWrapper.bind(null, domEventName, eventSystemFlags, targetContainer);
5912  }
5913
5914  function dispatchDiscreteEvent(domEventName, eventSystemFlags, container, nativeEvent) {
5915    {
5916      flushDiscreteUpdatesIfNeeded(nativeEvent.timeStamp);
5917    }
5918
5919    discreteUpdates(dispatchEvent, domEventName, eventSystemFlags, container, nativeEvent);
5920  }
5921
5922  function dispatchUserBlockingUpdate(domEventName, eventSystemFlags, container, nativeEvent) {
5923    {
5924      runWithPriority(UserBlockingPriority$1, dispatchEvent.bind(null, domEventName, eventSystemFlags, container, nativeEvent));
5925    }
5926  }
5927
5928  function dispatchEvent(domEventName, eventSystemFlags, targetContainer, nativeEvent) {
5929    if (!_enabled) {
5930      return;
5931    }
5932
5933    var allowReplay = true;
5934
5935    {
5936      // TODO: replaying capture phase events is currently broken
5937      // because we used to do it during top-level native bubble handlers
5938      // but now we use different bubble and capture handlers.
5939      // In eager mode, we attach capture listeners early, so we need
5940      // to filter them out until we fix the logic to handle them correctly.
5941      // This could've been outside the flag but I put it inside to reduce risk.
5942      allowReplay = (eventSystemFlags & IS_CAPTURE_PHASE) === 0;
5943    }
5944
5945    if (allowReplay && hasQueuedDiscreteEvents() && isReplayableDiscreteEvent(domEventName)) {
5946      // If we already have a queue of discrete events, and this is another discrete
5947      // event, then we can't dispatch it regardless of its target, since they
5948      // need to dispatch in order.
5949      queueDiscreteEvent(null, // Flags that we're not actually blocked on anything as far as we know.
5950      domEventName, eventSystemFlags, targetContainer, nativeEvent);
5951      return;
5952    }
5953
5954    var blockedOn = attemptToDispatchEvent(domEventName, eventSystemFlags, targetContainer, nativeEvent);
5955
5956    if (blockedOn === null) {
5957      // We successfully dispatched this event.
5958      if (allowReplay) {
5959        clearIfContinuousEvent(domEventName, nativeEvent);
5960      }
5961
5962      return;
5963    }
5964
5965    if (allowReplay) {
5966      if (isReplayableDiscreteEvent(domEventName)) {
5967        // This this to be replayed later once the target is available.
5968        queueDiscreteEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent);
5969        return;
5970      }
5971
5972      if (queueIfContinuousEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent)) {
5973        return;
5974      } // We need to clear only if we didn't queue because
5975      // queueing is accummulative.
5976
5977
5978      clearIfContinuousEvent(domEventName, nativeEvent);
5979    } // This is not replayable so we'll invoke it but without a target,
5980    // in case the event system needs to trace it.
5981
5982
5983    dispatchEventForPluginEventSystem(domEventName, eventSystemFlags, nativeEvent, null, targetContainer);
5984  } // Attempt dispatching an event. Returns a SuspenseInstance or Container if it's blocked.
5985
5986  function attemptToDispatchEvent(domEventName, eventSystemFlags, targetContainer, nativeEvent) {
5987    // TODO: Warn if _enabled is false.
5988    var nativeEventTarget = getEventTarget(nativeEvent);
5989    var targetInst = getClosestInstanceFromNode(nativeEventTarget);
5990
5991    if (targetInst !== null) {
5992      var nearestMounted = getNearestMountedFiber(targetInst);
5993
5994      if (nearestMounted === null) {
5995        // This tree has been unmounted already. Dispatch without a target.
5996        targetInst = null;
5997      } else {
5998        var tag = nearestMounted.tag;
5999
6000        if (tag === SuspenseComponent) {
6001          var instance = getSuspenseInstanceFromFiber(nearestMounted);
6002
6003          if (instance !== null) {
6004            // Queue the event to be replayed later. Abort dispatching since we
6005            // don't want this event dispatched twice through the event system.
6006            // TODO: If this is the first discrete event in the queue. Schedule an increased
6007            // priority for this boundary.
6008            return instance;
6009          } // This shouldn't happen, something went wrong but to avoid blocking
6010          // the whole system, dispatch the event without a target.
6011          // TODO: Warn.
6012
6013
6014          targetInst = null;
6015        } else if (tag === HostRoot) {
6016          var root = nearestMounted.stateNode;
6017
6018          if (root.hydrate) {
6019            // If this happens during a replay something went wrong and it might block
6020            // the whole system.
6021            return getContainerFromFiber(nearestMounted);
6022          }
6023
6024          targetInst = null;
6025        } else if (nearestMounted !== targetInst) {
6026          // If we get an event (ex: img onload) before committing that
6027          // component's mount, ignore it for now (that is, treat it as if it was an
6028          // event on a non-React tree). We might also consider queueing events and
6029          // dispatching them after the mount.
6030          targetInst = null;
6031        }
6032      }
6033    }
6034
6035    dispatchEventForPluginEventSystem(domEventName, eventSystemFlags, nativeEvent, targetInst, targetContainer); // We're not blocked on anything.
6036
6037    return null;
6038  }
6039
6040  function addEventBubbleListener(target, eventType, listener) {
6041    target.addEventListener(eventType, listener, false);
6042    return listener;
6043  }
6044  function addEventCaptureListener(target, eventType, listener) {
6045    target.addEventListener(eventType, listener, true);
6046    return listener;
6047  }
6048  function addEventCaptureListenerWithPassiveFlag(target, eventType, listener, passive) {
6049    target.addEventListener(eventType, listener, {
6050      capture: true,
6051      passive: passive
6052    });
6053    return listener;
6054  }
6055  function addEventBubbleListenerWithPassiveFlag(target, eventType, listener, passive) {
6056    target.addEventListener(eventType, listener, {
6057      passive: passive
6058    });
6059    return listener;
6060  }
6061
6062  /**
6063   * These variables store information about text content of a target node,
6064   * allowing comparison of content before and after a given event.
6065   *
6066   * Identify the node where selection currently begins, then observe
6067   * both its text content and its current position in the DOM. Since the
6068   * browser may natively replace the target node during composition, we can
6069   * use its position to find its replacement.
6070   *
6071   *
6072   */
6073  var root = null;
6074  var startText = null;
6075  var fallbackText = null;
6076  function initialize(nativeEventTarget) {
6077    root = nativeEventTarget;
6078    startText = getText();
6079    return true;
6080  }
6081  function reset() {
6082    root = null;
6083    startText = null;
6084    fallbackText = null;
6085  }
6086  function getData() {
6087    if (fallbackText) {
6088      return fallbackText;
6089    }
6090
6091    var start;
6092    var startValue = startText;
6093    var startLength = startValue.length;
6094    var end;
6095    var endValue = getText();
6096    var endLength = endValue.length;
6097
6098    for (start = 0; start < startLength; start++) {
6099      if (startValue[start] !== endValue[start]) {
6100        break;
6101      }
6102    }
6103
6104    var minEnd = startLength - start;
6105
6106    for (end = 1; end <= minEnd; end++) {
6107      if (startValue[startLength - end] !== endValue[endLength - end]) {
6108        break;
6109      }
6110    }
6111
6112    var sliceTail = end > 1 ? 1 - end : undefined;
6113    fallbackText = endValue.slice(start, sliceTail);
6114    return fallbackText;
6115  }
6116  function getText() {
6117    if ('value' in root) {
6118      return root.value;
6119    }
6120
6121    return root.textContent;
6122  }
6123
6124  /**
6125   * `charCode` represents the actual "character code" and is safe to use with
6126   * `String.fromCharCode`. As such, only keys that correspond to printable
6127   * characters produce a valid `charCode`, the only exception to this is Enter.
6128   * The Tab-key is considered non-printable and does not have a `charCode`,
6129   * presumably because it does not produce a tab-character in browsers.
6130   *
6131   * @param {object} nativeEvent Native browser event.
6132   * @return {number} Normalized `charCode` property.
6133   */
vendor: 12,548 bytes, lines 6134-6564
6134  function getEventCharCode(nativeEvent) {
6135    var charCode;
6136    var keyCode = nativeEvent.keyCode;
6137
6138    if ('charCode' in nativeEvent) {
6139      charCode = nativeEvent.charCode; // FF does not set `charCode` for the Enter-key, check against `keyCode`.
6140
6141      if (charCode === 0 && keyCode === 13) {
6142        charCode = 13;
6143      }
6144    } else {
6145      // IE8 does not implement `charCode`, but `keyCode` has the correct value.
6146      charCode = keyCode;
6147    } // IE and Edge (on Windows) and Chrome / Safari (on Windows and Linux)
6148    // report Enter as charCode 10 when ctrl is pressed.
6149
6150
6151    if (charCode === 10) {
6152      charCode = 13;
6153    } // Some non-printable keys are reported in `charCode`/`keyCode`, discard them.
6154    // Must not discard the (non-)printable Enter-key.
6155
6156
6157    if (charCode >= 32 || charCode === 13) {
6158      return charCode;
6159    }
6160
6161    return 0;
6162  }
6163
6164  function functionThatReturnsTrue() {
6165    return true;
6166  }
6167
6168  function functionThatReturnsFalse() {
6169    return false;
6170  } // This is intentionally a factory so that we have different returned constructors.
6171  // If we had a single constructor, it would be megamorphic and engines would deopt.
6172
6173
6174  function createSyntheticEvent(Interface) {
6175    /**
6176     * Synthetic events are dispatched by event plugins, typically in response to a
6177     * top-level event delegation handler.
6178     *
6179     * These systems should generally use pooling to reduce the frequency of garbage
6180     * collection. The system should check `isPersistent` to determine whether the
6181     * event should be released into the pool after being dispatched. Users that
6182     * need a persisted event should invoke `persist`.
6183     *
6184     * Synthetic events (and subclasses) implement the DOM Level 3 Events API by
6185     * normalizing browser quirks. Subclasses do not necessarily have to implement a
6186     * DOM interface; custom application-specific events can also subclass this.
6187     */
6188    function SyntheticBaseEvent(reactName, reactEventType, targetInst, nativeEvent, nativeEventTarget) {
6189      this._reactName = reactName;
6190      this._targetInst = targetInst;
6191      this.type = reactEventType;
6192      this.nativeEvent = nativeEvent;
6193      this.target = nativeEventTarget;
6194      this.currentTarget = null;
6195
6196      for (var _propName in Interface) {
6197        if (!Interface.hasOwnProperty(_propName)) {
6198          continue;
6199        }
6200
6201        var normalize = Interface[_propName];
6202
6203        if (normalize) {
6204          this[_propName] = normalize(nativeEvent);
6205        } else {
6206          this[_propName] = nativeEvent[_propName];
6207        }
6208      }
6209
6210      var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false;
6211
6212      if (defaultPrevented) {
6213        this.isDefaultPrevented = functionThatReturnsTrue;
6214      } else {
6215        this.isDefaultPrevented = functionThatReturnsFalse;
6216      }
6217
6218      this.isPropagationStopped = functionThatReturnsFalse;
6219      return this;
6220    }
6221
6222    _assign(SyntheticBaseEvent.prototype, {
6223      preventDefault: function () {
6224        this.defaultPrevented = true;
6225        var event = this.nativeEvent;
6226
6227        if (!event) {
6228          return;
6229        }
6230
6231        if (event.preventDefault) {
6232          event.preventDefault(); // $FlowFixMe - flow is not aware of `unknown` in IE
6233        } else if (typeof event.returnValue !== 'unknown') {
6234          event.returnValue = false;
6235        }
6236
6237        this.isDefaultPrevented = functionThatReturnsTrue;
6238      },
6239      stopPropagation: function () {
6240        var event = this.nativeEvent;
6241
6242        if (!event) {
6243          return;
6244        }
6245
6246        if (event.stopPropagation) {
6247          event.stopPropagation(); // $FlowFixMe - flow is not aware of `unknown` in IE
6248        } else if (typeof event.cancelBubble !== 'unknown') {
6249          // The ChangeEventPlugin registers a "propertychange" event for
6250          // IE. This event does not support bubbling or cancelling, and
6251          // any references to cancelBubble throw "Member not found".  A
6252          // typeof check of "unknown" circumvents this issue (and is also
6253          // IE specific).
6254          event.cancelBubble = true;
6255        }
6256
6257        this.isPropagationStopped = functionThatReturnsTrue;
6258      },
6259
6260      /**
6261       * We release all dispatched `SyntheticEvent`s after each event loop, adding
6262       * them back into the pool. This allows a way to hold onto a reference that
6263       * won't be added back into the pool.
6264       */
6265      persist: function () {// Modern event system doesn't use pooling.
6266      },
6267
6268      /**
6269       * Checks if this event should be released back into the pool.
6270       *
6271       * @return {boolean} True if this should not be released, false otherwise.
6272       */
6273      isPersistent: functionThatReturnsTrue
6274    });
6275
6276    return SyntheticBaseEvent;
6277  }
6278  /**
6279   * @interface Event
6280   * @see http://www.w3.org/TR/DOM-Level-3-Events/
6281   */
6282
6283
6284  var EventInterface = {
6285    eventPhase: 0,
6286    bubbles: 0,
6287    cancelable: 0,
6288    timeStamp: function (event) {
6289      return event.timeStamp || Date.now();
6290    },
6291    defaultPrevented: 0,
6292    isTrusted: 0
6293  };
6294  var SyntheticEvent = createSyntheticEvent(EventInterface);
6295
6296  var UIEventInterface = _assign({}, EventInterface, {
6297    view: 0,
6298    detail: 0
6299  });
6300
6301  var SyntheticUIEvent = createSyntheticEvent(UIEventInterface);
6302  var lastMovementX;
6303  var lastMovementY;
6304  var lastMouseEvent;
6305
6306  function updateMouseMovementPolyfillState(event) {
6307    if (event !== lastMouseEvent) {
6308      if (lastMouseEvent && event.type === 'mousemove') {
6309        lastMovementX = event.screenX - lastMouseEvent.screenX;
6310        lastMovementY = event.screenY - lastMouseEvent.screenY;
6311      } else {
6312        lastMovementX = 0;
6313        lastMovementY = 0;
6314      }
6315
6316      lastMouseEvent = event;
6317    }
6318  }
6319  /**
6320   * @interface MouseEvent
6321   * @see http://www.w3.org/TR/DOM-Level-3-Events/
6322   */
6323
6324
6325  var MouseEventInterface = _assign({}, UIEventInterface, {
6326    screenX: 0,
6327    screenY: 0,
6328    clientX: 0,
6329    clientY: 0,
6330    pageX: 0,
6331    pageY: 0,
6332    ctrlKey: 0,
6333    shiftKey: 0,
6334    altKey: 0,
6335    metaKey: 0,
6336    getModifierState: getEventModifierState,
6337    button: 0,
6338    buttons: 0,
6339    relatedTarget: function (event) {
6340      if (event.relatedTarget === undefined) return event.fromElement === event.srcElement ? event.toElement : event.fromElement;
6341      return event.relatedTarget;
6342    },
6343    movementX: function (event) {
6344      if ('movementX' in event) {
6345        return event.movementX;
6346      }
6347
6348      updateMouseMovementPolyfillState(event);
6349      return lastMovementX;
6350    },
6351    movementY: function (event) {
6352      if ('movementY' in event) {
6353        return event.movementY;
6354      } // Don't need to call updateMouseMovementPolyfillState() here
6355      // because it's guaranteed to have already run when movementX
6356      // was copied.
6357
6358
6359      return lastMovementY;
6360    }
6361  });
6362
6363  var SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface);
6364  /**
6365   * @interface DragEvent
6366   * @see http://www.w3.org/TR/DOM-Level-3-Events/
6367   */
6368
6369  var DragEventInterface = _assign({}, MouseEventInterface, {
6370    dataTransfer: 0
6371  });
6372
6373  var SyntheticDragEvent = createSyntheticEvent(DragEventInterface);
6374  /**
6375   * @interface FocusEvent
6376   * @see http://www.w3.org/TR/DOM-Level-3-Events/
6377   */
6378
6379  var FocusEventInterface = _assign({}, UIEventInterface, {
6380    relatedTarget: 0
6381  });
6382
6383  var SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface);
6384  /**
6385   * @interface Event
6386   * @see http://www.w3.org/TR/css3-animations/#AnimationEvent-interface
6387   * @see https://developer.mozilla.org/en-US/docs/Web/API/AnimationEvent
6388   */
6389
6390  var AnimationEventInterface = _assign({}, EventInterface, {
6391    animationName: 0,
6392    elapsedTime: 0,
6393    pseudoElement: 0
6394  });
6395
6396  var SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface);
6397  /**
6398   * @interface Event
6399   * @see http://www.w3.org/TR/clipboard-apis/
6400   */
6401
6402  var ClipboardEventInterface = _assign({}, EventInterface, {
6403    clipboardData: function (event) {
6404      return 'clipboardData' in event ? event.clipboardData : window.clipboardData;
6405    }
6406  });
6407
6408  var SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface);
6409  /**
6410   * @interface Event
6411   * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents
6412   */
6413
6414  var CompositionEventInterface = _assign({}, EventInterface, {
6415    data: 0
6416  });
6417
6418  var SyntheticCompositionEvent = createSyntheticEvent(CompositionEventInterface);
6419  /**
6420   * @interface Event
6421   * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105
6422   *      /#events-inputevents
6423   */
6424  // Happens to share the same list for now.
6425
6426  var SyntheticInputEvent = SyntheticCompositionEvent;
6427  /**
6428   * Normalization of deprecated HTML5 `key` values
6429   * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names
6430   */
6431
6432  var normalizeKey = {
6433    Esc: 'Escape',
6434    Spacebar: ' ',
6435    Left: 'ArrowLeft',
6436    Up: 'ArrowUp',
6437    Right: 'ArrowRight',
6438    Down: 'ArrowDown',
6439    Del: 'Delete',
6440    Win: 'OS',
6441    Menu: 'ContextMenu',
6442    Apps: 'ContextMenu',
6443    Scroll: 'ScrollLock',
6444    MozPrintableKey: 'Unidentified'
6445  };
6446  /**
6447   * Translation from legacy `keyCode` to HTML5 `key`
6448   * Only special keys supported, all others depend on keyboard layout or browser
6449   * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names
6450   */
6451
6452  var translateToKey = {
6453    '8': 'Backspace',
6454    '9': 'Tab',
6455    '12': 'Clear',
6456    '13': 'Enter',
6457    '16': 'Shift',
6458    '17': 'Control',
6459    '18': 'Alt',
6460    '19': 'Pause',
6461    '20': 'CapsLock',
6462    '27': 'Escape',
6463    '32': ' ',
6464    '33': 'PageUp',
6465    '34': 'PageDown',
6466    '35': 'End',
6467    '36': 'Home',
6468    '37': 'ArrowLeft',
6469    '38': 'ArrowUp',
6470    '39': 'ArrowRight',
6471    '40': 'ArrowDown',
6472    '45': 'Insert',
6473    '46': 'Delete',
6474    '112': 'F1',
6475    '113': 'F2',
6476    '114': 'F3',
6477    '115': 'F4',
6478    '116': 'F5',
6479    '117': 'F6',
6480    '118': 'F7',
6481    '119': 'F8',
6482    '120': 'F9',
6483    '121': 'F10',
6484    '122': 'F11',
6485    '123': 'F12',
6486    '144': 'NumLock',
6487    '145': 'ScrollLock',
6488    '224': 'Meta'
6489  };
6490  /**
6491   * @param {object} nativeEvent Native browser event.
6492   * @return {string} Normalized `key` property.
6493   */
6494
6495  function getEventKey(nativeEvent) {
6496    if (nativeEvent.key) {
6497      // Normalize inconsistent values reported by browsers due to
6498      // implementations of a working draft specification.
6499      // FireFox implements `key` but returns `MozPrintableKey` for all
6500      // printable characters (normalized to `Unidentified`), ignore it.
6501      var key = normalizeKey[nativeEvent.key] || nativeEvent.key;
6502
6503      if (key !== 'Unidentified') {
6504        return key;
6505      }
6506    } // Browser does not implement `key`, polyfill as much of it as we can.
6507
6508
6509    if (nativeEvent.type === 'keypress') {
6510      var charCode = getEventCharCode(nativeEvent); // The enter-key is technically both printable and non-printable and can
6511      // thus be captured by `keypress`, no other non-printable key should.
6512
6513      return charCode === 13 ? 'Enter' : String.fromCharCode(charCode);
6514    }
6515
6516    if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') {
6517      // While user keyboard layout determines the actual meaning of each
6518      // `keyCode` value, almost all function keys have a universal value.
6519      return translateToKey[nativeEvent.keyCode] || 'Unidentified';
6520    }
6521
6522    return '';
6523  }
6524  /**
6525   * Translation from modifier key to the associated property in the event.
6526   * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers
6527   */
6528
6529
6530  var modifierKeyToProp = {
6531    Alt: 'altKey',
6532    Control: 'ctrlKey',
6533    Meta: 'metaKey',
6534    Shift: 'shiftKey'
6535  }; // Older browsers (Safari <= 10, iOS Safari <= 10.2) do not support
6536  // getModifierState. If getModifierState is not supported, we map it to a set of
6537  // modifier keys exposed by the event. In this case, Lock-keys are not supported.
6538
6539  function modifierStateGetter(keyArg) {
6540    var syntheticEvent = this;
6541    var nativeEvent = syntheticEvent.nativeEvent;
6542
6543    if (nativeEvent.getModifierState) {
6544      return nativeEvent.getModifierState(keyArg);
6545    }
6546
6547    var keyProp = modifierKeyToProp[keyArg];
6548    return keyProp ? !!nativeEvent[keyProp] : false;
6549  }
6550
6551  function getEventModifierState(nativeEvent) {
6552    return modifierStateGetter;
6553  }
6554  /**
6555   * @interface KeyboardEvent
6556   * @see http://www.w3.org/TR/DOM-Level-3-Events/
6557   */
6558
6559
6560  var KeyboardEventInterface = _assign({}, UIEventInterface, {
6561    key: getEventKey,
6562    code: 0,
6563    location: 0,
6564    ctrlKey: 0,
6565    shiftKey: 0,
6566    altKey: 0,
6567    metaKey: 0,
6568    repeat: 0,
6569    locale: 0,
6570    getModifierState: getEventModifierState,
6571    // Legacy Interface
6572    charCode: function (event) {
6573      // `charCode` is the result of a KeyPress event and represents the value of
6574      // the actual printable character.
6575      // KeyPress is deprecated, but its replacement is not yet final and not
6576      // implemented in any major browser. Only KeyPress has charCode.
6577      if (event.type === 'keypress') {
6578        return getEventCharCode(event);
6579      }
6580
6581      return 0;
6582    },
6583    keyCode: function (event) {
6584      // `keyCode` is the result of a KeyDown/Up event and represents the value of
6585      // physical keyboard key.
6586      // The actual meaning of the value depends on the users' keyboard layout
6587      // which cannot be detected. Assuming that it is a US keyboard layout
6588      // provides a surprisingly accurate mapping for US and European users.
6589      // Due to this, it is left to the user to implement at this time.
6590      if (event.type === 'keydown' || event.type === 'keyup') {
6591        return event.keyCode;
6592      }
6593
6594      return 0;
6595    },
6596    which: function (event) {
6597      // `which` is an alias for either `keyCode` or `charCode` depending on the
6598      // type of the event.
6599      if (event.type === 'keypress') {
6600        return getEventCharCode(event);
6601      }
6602
6603      if (event.type === 'keydown' || event.type === 'keyup') {
6604        return event.keyCode;
6605      }
6606
6607      return 0;
6608    }
6609  });
6610
6611  var SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface);
6612  /**
6613   * @interface PointerEvent
6614   * @see http://www.w3.org/TR/pointerevents/
6615   */
6616
6617  var PointerEventInterface = _assign({}, MouseEventInterface, {
6618    pointerId: 0,
6619    width: 0,
6620    height: 0,
6621    pressure: 0,
6622    tangentialPressure: 0,
6623    tiltX: 0,
6624    tiltY: 0,
6625    twist: 0,
6626    pointerType: 0,
6627    isPrimary: 0
6628  });
6629
6630  var SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface);
6631  /**
6632   * @interface TouchEvent
6633   * @see http://www.w3.org/TR/touch-events/
6634   */
6635
6636  var TouchEventInterface = _assign({}, UIEventInterface, {
6637    touches: 0,
6638    targetTouches: 0,
6639    changedTouches: 0,
6640    altKey: 0,
6641    metaKey: 0,
6642    ctrlKey: 0,
vendor: 29,076 bytes, lines 6643-7481
6643    shiftKey: 0,
6644    getModifierState: getEventModifierState
6645  });
6646
6647  var SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface);
6648  /**
6649   * @interface Event
6650   * @see http://www.w3.org/TR/2009/WD-css3-transitions-20090320/#transition-events-
6651   * @see https://developer.mozilla.org/en-US/docs/Web/API/TransitionEvent
6652   */
6653
6654  var TransitionEventInterface = _assign({}, EventInterface, {
6655    propertyName: 0,
6656    elapsedTime: 0,
6657    pseudoElement: 0
6658  });
6659
6660  var SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface);
6661  /**
6662   * @interface WheelEvent
6663   * @see http://www.w3.org/TR/DOM-Level-3-Events/
6664   */
6665
6666  var WheelEventInterface = _assign({}, MouseEventInterface, {
6667    deltaX: function (event) {
6668      return 'deltaX' in event ? event.deltaX : // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive).
6669      'wheelDeltaX' in event ? -event.wheelDeltaX : 0;
6670    },
6671    deltaY: function (event) {
6672      return 'deltaY' in event ? event.deltaY : // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive).
6673      'wheelDeltaY' in event ? -event.wheelDeltaY : // Fallback to `wheelDelta` for IE<9 and normalize (down is positive).
6674      'wheelDelta' in event ? -event.wheelDelta : 0;
6675    },
6676    deltaZ: 0,
6677    // Browsers without "deltaMode" is reporting in raw wheel delta where one
6678    // notch on the scroll is always +/- 120, roughly equivalent to pixels.
6679    // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or
6680    // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size.
6681    deltaMode: 0
6682  });
6683
6684  var SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface);
6685
6686  var END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space
6687
6688  var START_KEYCODE = 229;
6689  var canUseCompositionEvent = canUseDOM && 'CompositionEvent' in window;
6690  var documentMode = null;
6691
6692  if (canUseDOM && 'documentMode' in document) {
6693    documentMode = document.documentMode;
6694  } // Webkit offers a very useful `textInput` event that can be used to
6695  // directly represent `beforeInput`. The IE `textinput` event is not as
6696  // useful, so we don't use it.
6697
6698
6699  var canUseTextInputEvent = canUseDOM && 'TextEvent' in window && !documentMode; // In IE9+, we have access to composition events, but the data supplied
6700  // by the native compositionend event may be incorrect. Japanese ideographic
6701  // spaces, for instance (\u3000) are not recorded correctly.
6702
6703  var useFallbackCompositionData = canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11);
6704  var SPACEBAR_CODE = 32;
6705  var SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE);
6706
6707  function registerEvents() {
6708    registerTwoPhaseEvent('onBeforeInput', ['compositionend', 'keypress', 'textInput', 'paste']);
6709    registerTwoPhaseEvent('onCompositionEnd', ['compositionend', 'focusout', 'keydown', 'keypress', 'keyup', 'mousedown']);
6710    registerTwoPhaseEvent('onCompositionStart', ['compositionstart', 'focusout', 'keydown', 'keypress', 'keyup', 'mousedown']);
6711    registerTwoPhaseEvent('onCompositionUpdate', ['compositionupdate', 'focusout', 'keydown', 'keypress', 'keyup', 'mousedown']);
6712  } // Track whether we've ever handled a keypress on the space key.
6713
6714
6715  var hasSpaceKeypress = false;
6716  /**
6717   * Return whether a native keypress event is assumed to be a command.
6718   * This is required because Firefox fires `keypress` events for key commands
6719   * (cut, copy, select-all, etc.) even though no character is inserted.
6720   */
6721
6722  function isKeypressCommand(nativeEvent) {
6723    return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) && // ctrlKey && altKey is equivalent to AltGr, and is not a command.
6724    !(nativeEvent.ctrlKey && nativeEvent.altKey);
6725  }
6726  /**
6727   * Translate native top level events into event types.
6728   */
6729
6730
6731  function getCompositionEventType(domEventName) {
6732    switch (domEventName) {
6733      case 'compositionstart':
6734        return 'onCompositionStart';
6735
6736      case 'compositionend':
6737        return 'onCompositionEnd';
6738
6739      case 'compositionupdate':
6740        return 'onCompositionUpdate';
6741    }
6742  }
6743  /**
6744   * Does our fallback best-guess model think this event signifies that
6745   * composition has begun?
6746   */
6747
6748
6749  function isFallbackCompositionStart(domEventName, nativeEvent) {
6750    return domEventName === 'keydown' && nativeEvent.keyCode === START_KEYCODE;
6751  }
6752  /**
6753   * Does our fallback mode think that this event is the end of composition?
6754   */
6755
6756
6757  function isFallbackCompositionEnd(domEventName, nativeEvent) {
6758    switch (domEventName) {
6759      case 'keyup':
6760        // Command keys insert or clear IME input.
6761        return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1;
6762
6763      case 'keydown':
6764        // Expect IME keyCode on each keydown. If we get any other
6765        // code we must have exited earlier.
6766        return nativeEvent.keyCode !== START_KEYCODE;
6767
6768      case 'keypress':
6769      case 'mousedown':
6770      case 'focusout':
6771        // Events are not possible without cancelling IME.
6772        return true;
6773
6774      default:
6775        return false;
6776    }
6777  }
6778  /**
6779   * Google Input Tools provides composition data via a CustomEvent,
6780   * with the `data` property populated in the `detail` object. If this
6781   * is available on the event object, use it. If not, this is a plain
6782   * composition event and we have nothing special to extract.
6783   *
6784   * @param {object} nativeEvent
6785   * @return {?string}
6786   */
6787
6788
6789  function getDataFromCustomEvent(nativeEvent) {
6790    var detail = nativeEvent.detail;
6791
6792    if (typeof detail === 'object' && 'data' in detail) {
6793      return detail.data;
6794    }
6795
6796    return null;
6797  }
6798  /**
6799   * Check if a composition event was triggered by Korean IME.
6800   * Our fallback mode does not work well with IE's Korean IME,
6801   * so just use native composition events when Korean IME is used.
6802   * Although CompositionEvent.locale property is deprecated,
6803   * it is available in IE, where our fallback mode is enabled.
6804   *
6805   * @param {object} nativeEvent
6806   * @return {boolean}
6807   */
6808
6809
6810  function isUsingKoreanIME(nativeEvent) {
6811    return nativeEvent.locale === 'ko';
6812  } // Track the current IME composition status, if any.
6813
6814
6815  var isComposing = false;
6816  /**
6817   * @return {?object} A SyntheticCompositionEvent.
6818   */
6819
6820  function extractCompositionEvent(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget) {
6821    var eventType;
6822    var fallbackData;
6823
6824    if (canUseCompositionEvent) {
6825      eventType = getCompositionEventType(domEventName);
6826    } else if (!isComposing) {
6827      if (isFallbackCompositionStart(domEventName, nativeEvent)) {
6828        eventType = 'onCompositionStart';
6829      }
6830    } else if (isFallbackCompositionEnd(domEventName, nativeEvent)) {
6831      eventType = 'onCompositionEnd';
6832    }
6833
6834    if (!eventType) {
6835      return null;
6836    }
6837
6838    if (useFallbackCompositionData && !isUsingKoreanIME(nativeEvent)) {
6839      // The current composition is stored statically and must not be
6840      // overwritten while composition continues.
6841      if (!isComposing && eventType === 'onCompositionStart') {
6842        isComposing = initialize(nativeEventTarget);
6843      } else if (eventType === 'onCompositionEnd') {
6844        if (isComposing) {
6845          fallbackData = getData();
6846        }
6847      }
6848    }
6849
6850    var listeners = accumulateTwoPhaseListeners(targetInst, eventType);
6851
6852    if (listeners.length > 0) {
6853      var event = new SyntheticCompositionEvent(eventType, domEventName, null, nativeEvent, nativeEventTarget);
6854      dispatchQueue.push({
6855        event: event,
6856        listeners: listeners
6857      });
6858
6859      if (fallbackData) {
6860        // Inject data generated from fallback path into the synthetic event.
6861        // This matches the property of native CompositionEventInterface.
6862        event.data = fallbackData;
6863      } else {
6864        var customData = getDataFromCustomEvent(nativeEvent);
6865
6866        if (customData !== null) {
6867          event.data = customData;
6868        }
6869      }
6870    }
6871  }
6872
6873  function getNativeBeforeInputChars(domEventName, nativeEvent) {
6874    switch (domEventName) {
6875      case 'compositionend':
6876        return getDataFromCustomEvent(nativeEvent);
6877
6878      case 'keypress':
6879        /**
6880         * If native `textInput` events are available, our goal is to make
6881         * use of them. However, there is a special case: the spacebar key.
6882         * In Webkit, preventing default on a spacebar `textInput` event
6883         * cancels character insertion, but it *also* causes the browser
6884         * to fall back to its default spacebar behavior of scrolling the
6885         * page.
6886         *
6887         * Tracking at:
6888         * https://code.google.com/p/chromium/issues/detail?id=355103
6889         *
6890         * To avoid this issue, use the keypress event as if no `textInput`
6891         * event is available.
6892         */
6893        var which = nativeEvent.which;
6894
6895        if (which !== SPACEBAR_CODE) {
6896          return null;
6897        }
6898
6899        hasSpaceKeypress = true;
6900        return SPACEBAR_CHAR;
6901
6902      case 'textInput':
6903        // Record the characters to be added to the DOM.
6904        var chars = nativeEvent.data; // If it's a spacebar character, assume that we have already handled
6905        // it at the keypress level and bail immediately. Android Chrome
6906        // doesn't give us keycodes, so we need to ignore it.
6907
6908        if (chars === SPACEBAR_CHAR && hasSpaceKeypress) {
6909          return null;
6910        }
6911
6912        return chars;
6913
6914      default:
6915        // For other native event types, do nothing.
6916        return null;
6917    }
6918  }
6919  /**
6920   * For browsers that do not provide the `textInput` event, extract the
6921   * appropriate string to use for SyntheticInputEvent.
6922   */
6923
6924
6925  function getFallbackBeforeInputChars(domEventName, nativeEvent) {
6926    // If we are currently composing (IME) and using a fallback to do so,
6927    // try to extract the composed characters from the fallback object.
6928    // If composition event is available, we extract a string only at
6929    // compositionevent, otherwise extract it at fallback events.
6930    if (isComposing) {
6931      if (domEventName === 'compositionend' || !canUseCompositionEvent && isFallbackCompositionEnd(domEventName, nativeEvent)) {
6932        var chars = getData();
6933        reset();
6934        isComposing = false;
6935        return chars;
6936      }
6937
6938      return null;
6939    }
6940
6941    switch (domEventName) {
6942      case 'paste':
6943        // If a paste event occurs after a keypress, throw out the input
6944        // chars. Paste events should not lead to BeforeInput events.
6945        return null;
6946
6947      case 'keypress':
6948        /**
6949         * As of v27, Firefox may fire keypress events even when no character
6950         * will be inserted. A few possibilities:
6951         *
6952         * - `which` is `0`. Arrow keys, Esc key, etc.
6953         *
6954         * - `which` is the pressed key code, but no char is available.
6955         *   Ex: 'AltGr + d` in Polish. There is no modified character for
6956         *   this key combination and no character is inserted into the
6957         *   document, but FF fires the keypress for char code `100` anyway.
6958         *   No `input` event will occur.
6959         *
6960         * - `which` is the pressed key code, but a command combination is
6961         *   being used. Ex: `Cmd+C`. No character is inserted, and no
6962         *   `input` event will occur.
6963         */
6964        if (!isKeypressCommand(nativeEvent)) {
6965          // IE fires the `keypress` event when a user types an emoji via
6966          // Touch keyboard of Windows.  In such a case, the `char` property
6967          // holds an emoji character like `\uD83D\uDE0A`.  Because its length
6968          // is 2, the property `which` does not represent an emoji correctly.
6969          // In such a case, we directly return the `char` property instead of
6970          // using `which`.
6971          if (nativeEvent.char && nativeEvent.char.length > 1) {
6972            return nativeEvent.char;
6973          } else if (nativeEvent.which) {
6974            return String.fromCharCode(nativeEvent.which);
6975          }
6976        }
6977
6978        return null;
6979
6980      case 'compositionend':
6981        return useFallbackCompositionData && !isUsingKoreanIME(nativeEvent) ? null : nativeEvent.data;
6982
6983      default:
6984        return null;
6985    }
6986  }
6987  /**
6988   * Extract a SyntheticInputEvent for `beforeInput`, based on either native
6989   * `textInput` or fallback behavior.
6990   *
6991   * @return {?object} A SyntheticInputEvent.
6992   */
6993
6994
6995  function extractBeforeInputEvent(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget) {
6996    var chars;
6997
6998    if (canUseTextInputEvent) {
6999      chars = getNativeBeforeInputChars(domEventName, nativeEvent);
7000    } else {
7001      chars = getFallbackBeforeInputChars(domEventName, nativeEvent);
7002    } // If no characters are being inserted, no BeforeInput event should
7003    // be fired.
7004
7005
7006    if (!chars) {
7007      return null;
7008    }
7009
7010    var listeners = accumulateTwoPhaseListeners(targetInst, 'onBeforeInput');
7011
7012    if (listeners.length > 0) {
7013      var event = new SyntheticInputEvent('onBeforeInput', 'beforeinput', null, nativeEvent, nativeEventTarget);
7014      dispatchQueue.push({
7015        event: event,
7016        listeners: listeners
7017      });
7018      event.data = chars;
7019    }
7020  }
7021  /**
7022   * Create an `onBeforeInput` event to match
7023   * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.
7024   *
7025   * This event plugin is based on the native `textInput` event
7026   * available in Chrome, Safari, Opera, and IE. This event fires after
7027   * `onKeyPress` and `onCompositionEnd`, but before `onInput`.
7028   *
7029   * `beforeInput` is spec'd but not implemented in any browsers, and
7030   * the `input` event does not provide any useful information about what has
7031   * actually been added, contrary to the spec. Thus, `textInput` is the best
7032   * available event to identify the characters that have actually been inserted
7033   * into the target node.
7034   *
7035   * This plugin is also responsible for emitting `composition` events, thus
7036   * allowing us to share composition fallback code for both `beforeInput` and
7037   * `composition` event types.
7038   */
7039
7040
7041  function extractEvents(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {
7042    extractCompositionEvent(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);
7043    extractBeforeInputEvent(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);
7044  }
7045
7046  /**
7047   * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary
7048   */
7049  var supportedInputTypes = {
7050    color: true,
7051    date: true,
7052    datetime: true,
7053    'datetime-local': true,
7054    email: true,
7055    month: true,
7056    number: true,
7057    password: true,
7058    range: true,
7059    search: true,
7060    tel: true,
7061    text: true,
7062    time: true,
7063    url: true,
7064    week: true
7065  };
7066
7067  function isTextInputElement(elem) {
7068    var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();
7069
7070    if (nodeName === 'input') {
7071      return !!supportedInputTypes[elem.type];
7072    }
7073
7074    if (nodeName === 'textarea') {
7075      return true;
7076    }
7077
7078    return false;
7079  }
7080
7081  /**
7082   * Checks if an event is supported in the current execution environment.
7083   *
7084   * NOTE: This will not work correctly for non-generic events such as `change`,
7085   * `reset`, `load`, `error`, and `select`.
7086   *
7087   * Borrows from Modernizr.
7088   *
7089   * @param {string} eventNameSuffix Event name, e.g. "click".
7090   * @return {boolean} True if the event is supported.
7091   * @internal
7092   * @license Modernizr 3.0.0pre (Custom Build) | MIT
7093   */
7094
7095  function isEventSupported(eventNameSuffix) {
7096    if (!canUseDOM) {
7097      return false;
7098    }
7099
7100    var eventName = 'on' + eventNameSuffix;
7101    var isSupported = (eventName in document);
7102
7103    if (!isSupported) {
7104      var element = document.createElement('div');
7105      element.setAttribute(eventName, 'return;');
7106      isSupported = typeof element[eventName] === 'function';
7107    }
7108
7109    return isSupported;
7110  }
7111
7112  function registerEvents$1() {
7113    registerTwoPhaseEvent('onChange', ['change', 'click', 'focusin', 'focusout', 'input', 'keydown', 'keyup', 'selectionchange']);
7114  }
7115
7116  function createAndAccumulateChangeEvent(dispatchQueue, inst, nativeEvent, target) {
7117    // Flag this event loop as needing state restore.
7118    enqueueStateRestore(target);
7119    var listeners = accumulateTwoPhaseListeners(inst, 'onChange');
7120
7121    if (listeners.length > 0) {
7122      var event = new SyntheticEvent('onChange', 'change', null, nativeEvent, target);
7123      dispatchQueue.push({
7124        event: event,
7125        listeners: listeners
7126      });
7127    }
7128  }
7129  /**
7130   * For IE shims
7131   */
7132
7133
7134  var activeElement = null;
7135  var activeElementInst = null;
7136  /**
7137   * SECTION: handle `change` event
7138   */
7139
7140  function shouldUseChangeEvent(elem) {
7141    var nodeName = elem.nodeName && elem.nodeName.toLowerCase();
7142    return nodeName === 'select' || nodeName === 'input' && elem.type === 'file';
7143  }
7144
7145  function manualDispatchChangeEvent(nativeEvent) {
7146    var dispatchQueue = [];
7147    createAndAccumulateChangeEvent(dispatchQueue, activeElementInst, nativeEvent, getEventTarget(nativeEvent)); // If change and propertychange bubbled, we'd just bind to it like all the
7148    // other events and have it go through ReactBrowserEventEmitter. Since it
7149    // doesn't, we manually listen for the events and so we have to enqueue and
7150    // process the abstract event manually.
7151    //
7152    // Batching is necessary here in order to ensure that all event handlers run
7153    // before the next rerender (including event handlers attached to ancestor
7154    // elements instead of directly on the input). Without this, controlled
7155    // components don't work properly in conjunction with event bubbling because
7156    // the component is rerendered and the value reverted before all the event
7157    // handlers can run. See https://github.com/facebook/react/issues/708.
7158
7159    batchedUpdates(runEventInBatch, dispatchQueue);
7160  }
7161
7162  function runEventInBatch(dispatchQueue) {
7163    processDispatchQueue(dispatchQueue, 0);
7164  }
7165
7166  function getInstIfValueChanged(targetInst) {
7167    var targetNode = getNodeFromInstance(targetInst);
7168
7169    if (updateValueIfChanged(targetNode)) {
7170      return targetInst;
7171    }
7172  }
7173
7174  function getTargetInstForChangeEvent(domEventName, targetInst) {
7175    if (domEventName === 'change') {
7176      return targetInst;
7177    }
7178  }
7179  /**
7180   * SECTION: handle `input` event
7181   */
7182
7183
7184  var isInputEventSupported = false;
7185
7186  if (canUseDOM) {
7187    // IE9 claims to support the input event but fails to trigger it when
7188    // deleting text, so we ignore its input events.
7189    isInputEventSupported = isEventSupported('input') && (!document.documentMode || document.documentMode > 9);
7190  }
7191  /**
7192   * (For IE <=9) Starts tracking propertychange events on the passed-in element
7193   * and override the value property so that we can distinguish user events from
7194   * value changes in JS.
7195   */
7196
7197
7198  function startWatchingForValueChange(target, targetInst) {
7199    activeElement = target;
7200    activeElementInst = targetInst;
7201    activeElement.attachEvent('onpropertychange', handlePropertyChange);
7202  }
7203  /**
7204   * (For IE <=9) Removes the event listeners from the currently-tracked element,
7205   * if any exists.
7206   */
7207
7208
7209  function stopWatchingForValueChange() {
7210    if (!activeElement) {
7211      return;
7212    }
7213
7214    activeElement.detachEvent('onpropertychange', handlePropertyChange);
7215    activeElement = null;
7216    activeElementInst = null;
7217  }
7218  /**
7219   * (For IE <=9) Handles a propertychange event, sending a `change` event if
7220   * the value of the active element has changed.
7221   */
7222
7223
7224  function handlePropertyChange(nativeEvent) {
7225    if (nativeEvent.propertyName !== 'value') {
7226      return;
7227    }
7228
7229    if (getInstIfValueChanged(activeElementInst)) {
7230      manualDispatchChangeEvent(nativeEvent);
7231    }
7232  }
7233
7234  function handleEventsForInputEventPolyfill(domEventName, target, targetInst) {
7235    if (domEventName === 'focusin') {
7236      // In IE9, propertychange fires for most input events but is buggy and
7237      // doesn't fire when text is deleted, but conveniently, selectionchange
7238      // appears to fire in all of the remaining cases so we catch those and
7239      // forward the event if the value has changed
7240      // In either case, we don't want to call the event handler if the value
7241      // is changed from JS so we redefine a setter for `.value` that updates
7242      // our activeElementValue variable, allowing us to ignore those changes
7243      //
7244      // stopWatching() should be a noop here but we call it just in case we
7245      // missed a blur event somehow.
7246      stopWatchingForValueChange();
7247      startWatchingForValueChange(target, targetInst);
7248    } else if (domEventName === 'focusout') {
7249      stopWatchingForValueChange();
7250    }
7251  } // For IE8 and IE9.
7252
7253
7254  function getTargetInstForInputEventPolyfill(domEventName, targetInst) {
7255    if (domEventName === 'selectionchange' || domEventName === 'keyup' || domEventName === 'keydown') {
7256      // On the selectionchange event, the target is just document which isn't
7257      // helpful for us so just check activeElement instead.
7258      //
7259      // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire
7260      // propertychange on the first input event after setting `value` from a
7261      // script and fires only keydown, keypress, keyup. Catching keyup usually
7262      // gets it and catching keydown lets us fire an event for the first
7263      // keystroke if user does a key repeat (it'll be a little delayed: right
7264      // before the second keystroke). Other input methods (e.g., paste) seem to
7265      // fire selectionchange normally.
7266      return getInstIfValueChanged(activeElementInst);
7267    }
7268  }
7269  /**
7270   * SECTION: handle `click` event
7271   */
7272
7273
7274  function shouldUseClickEvent(elem) {
7275    // Use the `click` event to detect changes to checkbox and radio inputs.
7276    // This approach works across all browsers, whereas `change` does not fire
7277    // until `blur` in IE8.
7278    var nodeName = elem.nodeName;
7279    return nodeName && nodeName.toLowerCase() === 'input' && (elem.type === 'checkbox' || elem.type === 'radio');
7280  }
7281
7282  function getTargetInstForClickEvent(domEventName, targetInst) {
7283    if (domEventName === 'click') {
7284      return getInstIfValueChanged(targetInst);
7285    }
7286  }
7287
7288  function getTargetInstForInputOrChangeEvent(domEventName, targetInst) {
7289    if (domEventName === 'input' || domEventName === 'change') {
7290      return getInstIfValueChanged(targetInst);
7291    }
7292  }
7293
7294  function handleControlledInputBlur(node) {
7295    var state = node._wrapperState;
7296
7297    if (!state || !state.controlled || node.type !== 'number') {
7298      return;
7299    }
7300
7301    {
7302      // If controlled, assign the value attribute to the current value on blur
7303      setDefaultValue(node, 'number', node.value);
7304    }
7305  }
7306  /**
7307   * This plugin creates an `onChange` event that normalizes change events
7308   * across form elements. This event fires at a time when it's possible to
7309   * change the element's value without seeing a flicker.
7310   *
7311   * Supported elements are:
7312   * - input (see `isTextInputElement`)
7313   * - textarea
7314   * - select
7315   */
7316
7317
7318  function extractEvents$1(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {
7319    var targetNode = targetInst ? getNodeFromInstance(targetInst) : window;
7320    var getTargetInstFunc, handleEventFunc;
7321
7322    if (shouldUseChangeEvent(targetNode)) {
7323      getTargetInstFunc = getTargetInstForChangeEvent;
7324    } else if (isTextInputElement(targetNode)) {
7325      if (isInputEventSupported) {
7326        getTargetInstFunc = getTargetInstForInputOrChangeEvent;
7327      } else {
7328        getTargetInstFunc = getTargetInstForInputEventPolyfill;
7329        handleEventFunc = handleEventsForInputEventPolyfill;
7330      }
7331    } else if (shouldUseClickEvent(targetNode)) {
7332      getTargetInstFunc = getTargetInstForClickEvent;
7333    }
7334
7335    if (getTargetInstFunc) {
7336      var inst = getTargetInstFunc(domEventName, targetInst);
7337
7338      if (inst) {
7339        createAndAccumulateChangeEvent(dispatchQueue, inst, nativeEvent, nativeEventTarget);
7340        return;
7341      }
7342    }
7343
7344    if (handleEventFunc) {
7345      handleEventFunc(domEventName, targetNode, targetInst);
7346    } // When blurring, set the value attribute for number inputs
7347
7348
7349    if (domEventName === 'focusout') {
7350      handleControlledInputBlur(targetNode);
7351    }
7352  }
7353
7354  function registerEvents$2() {
7355    registerDirectEvent('onMouseEnter', ['mouseout', 'mouseover']);
7356    registerDirectEvent('onMouseLeave', ['mouseout', 'mouseover']);
7357    registerDirectEvent('onPointerEnter', ['pointerout', 'pointerover']);
7358    registerDirectEvent('onPointerLeave', ['pointerout', 'pointerover']);
7359  }
7360  /**
7361   * For almost every interaction we care about, there will be both a top-level
7362   * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that
7363   * we do not extract duplicate events. However, moving the mouse into the
7364   * browser from outside will not fire a `mouseout` event. In this case, we use
7365   * the `mouseover` top-level event.
7366   */
7367
7368
7369  function extractEvents$2(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {
7370    var isOverEvent = domEventName === 'mouseover' || domEventName === 'pointerover';
7371    var isOutEvent = domEventName === 'mouseout' || domEventName === 'pointerout';
7372
7373    if (isOverEvent && (eventSystemFlags & IS_REPLAYED) === 0) {
7374      // If this is an over event with a target, we might have already dispatched
7375      // the event in the out event of the other target. If this is replayed,
7376      // then it's because we couldn't dispatch against this target previously
7377      // so we have to do it now instead.
7378      var related = nativeEvent.relatedTarget || nativeEvent.fromElement;
7379
7380      if (related) {
7381        // If the related node is managed by React, we can assume that we have
7382        // already dispatched the corresponding events during its mouseout.
7383        if (getClosestInstanceFromNode(related) || isContainerMarkedAsRoot(related)) {
7384          return;
7385        }
7386      }
7387    }
7388
7389    if (!isOutEvent && !isOverEvent) {
7390      // Must not be a mouse or pointer in or out - ignoring.
7391      return;
7392    }
7393
7394    var win; // TODO: why is this nullable in the types but we read from it?
7395
7396    if (nativeEventTarget.window === nativeEventTarget) {
7397      // `nativeEventTarget` is probably a window object.
7398      win = nativeEventTarget;
7399    } else {
7400      // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.
7401      var doc = nativeEventTarget.ownerDocument;
7402
7403      if (doc) {
7404        win = doc.defaultView || doc.parentWindow;
7405      } else {
7406        win = window;
7407      }
7408    }
7409
7410    var from;
7411    var to;
7412
7413    if (isOutEvent) {
7414      var _related = nativeEvent.relatedTarget || nativeEvent.toElement;
7415
7416      from = targetInst;
7417      to = _related ? getClosestInstanceFromNode(_related) : null;
7418
7419      if (to !== null) {
7420        var nearestMounted = getNearestMountedFiber(to);
7421
7422        if (to !== nearestMounted || to.tag !== HostComponent && to.tag !== HostText) {
7423          to = null;
7424        }
7425      }
7426    } else {
7427      // Moving to a node from outside the window.
7428      from = null;
7429      to = targetInst;
7430    }
7431
7432    if (from === to) {
7433      // Nothing pertains to our managed components.
7434      return;
7435    }
7436
7437    var SyntheticEventCtor = SyntheticMouseEvent;
7438    var leaveEventType = 'onMouseLeave';
7439    var enterEventType = 'onMouseEnter';
7440    var eventTypePrefix = 'mouse';
7441
7442    if (domEventName === 'pointerout' || domEventName === 'pointerover') {
7443      SyntheticEventCtor = SyntheticPointerEvent;
7444      leaveEventType = 'onPointerLeave';
7445      enterEventType = 'onPointerEnter';
7446      eventTypePrefix = 'pointer';
7447    }
7448
7449    var fromNode = from == null ? win : getNodeFromInstance(from);
7450    var toNode = to == null ? win : getNodeFromInstance(to);
7451    var leave = new SyntheticEventCtor(leaveEventType, eventTypePrefix + 'leave', from, nativeEvent, nativeEventTarget);
7452    leave.target = fromNode;
7453    leave.relatedTarget = toNode;
7454    var enter = null; // We should only process this nativeEvent if we are processing
7455    // the first ancestor. Next time, we will ignore the event.
7456
7457    var nativeTargetInst = getClosestInstanceFromNode(nativeEventTarget);
7458
7459    if (nativeTargetInst === targetInst) {
7460      var enterEvent = new SyntheticEventCtor(enterEventType, eventTypePrefix + 'enter', to, nativeEvent, nativeEventTarget);
7461      enterEvent.target = toNode;
7462      enterEvent.relatedTarget = fromNode;
7463      enter = enterEvent;
7464    }
7465
7466    accumulateEnterLeaveTwoPhaseListeners(dispatchQueue, leave, enter, from, to);
7467  }
7468
7469  /**
7470   * inlined Object.is polyfill to avoid requiring consumers ship their own
7471   * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
7472   */
7473  function is(x, y) {
7474    return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare
7475    ;
7476  }
7477
7478  var objectIs = typeof Object.is === 'function' ? Object.is : is;
7479
7480  var hasOwnProperty$2 = Object.prototype.hasOwnProperty;
7481  /**
vendor: 13,830 bytes, lines 7482-7929
7482   * Performs equality by iterating through keys on an object and returning false
7483   * when any key has values which are not strictly equal between the arguments.
7484   * Returns true when the values of all keys are strictly equal.
7485   */
7486
7487  function shallowEqual(objA, objB) {
7488    if (objectIs(objA, objB)) {
7489      return true;
7490    }
7491
7492    if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {
7493      return false;
7494    }
7495
7496    var keysA = Object.keys(objA);
7497    var keysB = Object.keys(objB);
7498
7499    if (keysA.length !== keysB.length) {
7500      return false;
7501    } // Test for A's keys different from B.
7502
7503
7504    for (var i = 0; i < keysA.length; i++) {
7505      if (!hasOwnProperty$2.call(objB, keysA[i]) || !objectIs(objA[keysA[i]], objB[keysA[i]])) {
7506        return false;
7507      }
7508    }
7509
7510    return true;
7511  }
7512
7513  /**
7514   * Given any node return the first leaf node without children.
7515   *
7516   * @param {DOMElement|DOMTextNode} node
7517   * @return {DOMElement|DOMTextNode}
7518   */
7519
7520  function getLeafNode(node) {
7521    while (node && node.firstChild) {
7522      node = node.firstChild;
7523    }
7524
7525    return node;
7526  }
7527  /**
7528   * Get the next sibling within a container. This will walk up the
7529   * DOM if a node's siblings have been exhausted.
7530   *
7531   * @param {DOMElement|DOMTextNode} node
7532   * @return {?DOMElement|DOMTextNode}
7533   */
7534
7535
7536  function getSiblingNode(node) {
7537    while (node) {
7538      if (node.nextSibling) {
7539        return node.nextSibling;
7540      }
7541
7542      node = node.parentNode;
7543    }
7544  }
7545  /**
7546   * Get object describing the nodes which contain characters at offset.
7547   *
7548   * @param {DOMElement|DOMTextNode} root
7549   * @param {number} offset
7550   * @return {?object}
7551   */
7552
7553
7554  function getNodeForCharacterOffset(root, offset) {
7555    var node = getLeafNode(root);
7556    var nodeStart = 0;
7557    var nodeEnd = 0;
7558
7559    while (node) {
7560      if (node.nodeType === TEXT_NODE) {
7561        nodeEnd = nodeStart + node.textContent.length;
7562
7563        if (nodeStart <= offset && nodeEnd >= offset) {
7564          return {
7565            node: node,
7566            offset: offset - nodeStart
7567          };
7568        }
7569
7570        nodeStart = nodeEnd;
7571      }
7572
7573      node = getLeafNode(getSiblingNode(node));
7574    }
7575  }
7576
7577  /**
7578   * @param {DOMElement} outerNode
7579   * @return {?object}
7580   */
7581
7582  function getOffsets(outerNode) {
7583    var ownerDocument = outerNode.ownerDocument;
7584    var win = ownerDocument && ownerDocument.defaultView || window;
7585    var selection = win.getSelection && win.getSelection();
7586
7587    if (!selection || selection.rangeCount === 0) {
7588      return null;
7589    }
7590
7591    var anchorNode = selection.anchorNode,
7592        anchorOffset = selection.anchorOffset,
7593        focusNode = selection.focusNode,
7594        focusOffset = selection.focusOffset; // In Firefox, anchorNode and focusNode can be "anonymous divs", e.g. the
7595    // up/down buttons on an <input type="number">. Anonymous divs do not seem to
7596    // expose properties, triggering a "Permission denied error" if any of its
7597    // properties are accessed. The only seemingly possible way to avoid erroring
7598    // is to access a property that typically works for non-anonymous divs and
7599    // catch any error that may otherwise arise. See
7600    // https://bugzilla.mozilla.org/show_bug.cgi?id=208427
7601
7602    try {
7603      /* eslint-disable no-unused-expressions */
7604      anchorNode.nodeType;
7605      focusNode.nodeType;
7606      /* eslint-enable no-unused-expressions */
7607    } catch (e) {
7608      return null;
7609    }
7610
7611    return getModernOffsetsFromPoints(outerNode, anchorNode, anchorOffset, focusNode, focusOffset);
7612  }
7613  /**
7614   * Returns {start, end} where `start` is the character/codepoint index of
7615   * (anchorNode, anchorOffset) within the textContent of `outerNode`, and
7616   * `end` is the index of (focusNode, focusOffset).
7617   *
7618   * Returns null if you pass in garbage input but we should probably just crash.
7619   *
7620   * Exported only for testing.
7621   */
7622
7623  function getModernOffsetsFromPoints(outerNode, anchorNode, anchorOffset, focusNode, focusOffset) {
7624    var length = 0;
7625    var start = -1;
7626    var end = -1;
7627    var indexWithinAnchor = 0;
7628    var indexWithinFocus = 0;
7629    var node = outerNode;
7630    var parentNode = null;
7631
7632    outer: while (true) {
7633      var next = null;
7634
7635      while (true) {
7636        if (node === anchorNode && (anchorOffset === 0 || node.nodeType === TEXT_NODE)) {
7637          start = length + anchorOffset;
7638        }
7639
7640        if (node === focusNode && (focusOffset === 0 || node.nodeType === TEXT_NODE)) {
7641          end = length + focusOffset;
7642        }
7643
7644        if (node.nodeType === TEXT_NODE) {
7645          length += node.nodeValue.length;
7646        }
7647
7648        if ((next = node.firstChild) === null) {
7649          break;
7650        } // Moving from `node` to its first child `next`.
7651
7652
7653        parentNode = node;
7654        node = next;
7655      }
7656
7657      while (true) {
7658        if (node === outerNode) {
7659          // If `outerNode` has children, this is always the second time visiting
7660          // it. If it has no children, this is still the first loop, and the only
7661          // valid selection is anchorNode and focusNode both equal to this node
7662          // and both offsets 0, in which case we will have handled above.
7663          break outer;
7664        }
7665
7666        if (parentNode === anchorNode && ++indexWithinAnchor === anchorOffset) {
7667          start = length;
7668        }
7669
7670        if (parentNode === focusNode && ++indexWithinFocus === focusOffset) {
7671          end = length;
7672        }
7673
7674        if ((next = node.nextSibling) !== null) {
7675          break;
7676        }
7677
7678        node = parentNode;
7679        parentNode = node.parentNode;
7680      } // Moving from `node` to its next sibling `next`.
7681
7682
7683      node = next;
7684    }
7685
7686    if (start === -1 || end === -1) {
7687      // This should never happen. (Would happen if the anchor/focus nodes aren't
7688      // actually inside the passed-in node.)
7689      return null;
7690    }
7691
7692    return {
7693      start: start,
7694      end: end
7695    };
7696  }
7697  /**
7698   * In modern non-IE browsers, we can support both forward and backward
7699   * selections.
7700   *
7701   * Note: IE10+ supports the Selection object, but it does not support
7702   * the `extend` method, which means that even in modern IE, it's not possible
7703   * to programmatically create a backward selection. Thus, for all IE
7704   * versions, we use the old IE API to create our selections.
7705   *
7706   * @param {DOMElement|DOMTextNode} node
7707   * @param {object} offsets
7708   */
7709
7710  function setOffsets(node, offsets) {
7711    var doc = node.ownerDocument || document;
7712    var win = doc && doc.defaultView || window; // Edge fails with "Object expected" in some scenarios.
7713    // (For instance: TinyMCE editor used in a list component that supports pasting to add more,
7714    // fails when pasting 100+ items)
7715
7716    if (!win.getSelection) {
7717      return;
7718    }
7719
7720    var selection = win.getSelection();
7721    var length = node.textContent.length;
7722    var start = Math.min(offsets.start, length);
7723    var end = offsets.end === undefined ? start : Math.min(offsets.end, length); // IE 11 uses modern selection, but doesn't support the extend method.
7724    // Flip backward selections, so we can set with a single range.
7725
7726    if (!selection.extend && start > end) {
7727      var temp = end;
7728      end = start;
7729      start = temp;
7730    }
7731
7732    var startMarker = getNodeForCharacterOffset(node, start);
7733    var endMarker = getNodeForCharacterOffset(node, end);
7734
7735    if (startMarker && endMarker) {
7736      if (selection.rangeCount === 1 && selection.anchorNode === startMarker.node && selection.anchorOffset === startMarker.offset && selection.focusNode === endMarker.node && selection.focusOffset === endMarker.offset) {
7737        return;
7738      }
7739
7740      var range = doc.createRange();
7741      range.setStart(startMarker.node, startMarker.offset);
7742      selection.removeAllRanges();
7743
7744      if (start > end) {
7745        selection.addRange(range);
7746        selection.extend(endMarker.node, endMarker.offset);
7747      } else {
7748        range.setEnd(endMarker.node, endMarker.offset);
7749        selection.addRange(range);
7750      }
7751    }
7752  }
7753
7754  function isTextNode(node) {
7755    return node && node.nodeType === TEXT_NODE;
7756  }
7757
7758  function containsNode(outerNode, innerNode) {
7759    if (!outerNode || !innerNode) {
7760      return false;
7761    } else if (outerNode === innerNode) {
7762      return true;
7763    } else if (isTextNode(outerNode)) {
7764      return false;
7765    } else if (isTextNode(innerNode)) {
7766      return containsNode(outerNode, innerNode.parentNode);
7767    } else if ('contains' in outerNode) {
7768      return outerNode.contains(innerNode);
7769    } else if (outerNode.compareDocumentPosition) {
7770      return !!(outerNode.compareDocumentPosition(innerNode) & 16);
7771    } else {
7772      return false;
7773    }
7774  }
7775
7776  function isInDocument(node) {
7777    return node && node.ownerDocument && containsNode(node.ownerDocument.documentElement, node);
7778  }
7779
7780  function isSameOriginFrame(iframe) {
7781    try {
7782      // Accessing the contentDocument of a HTMLIframeElement can cause the browser
7783      // to throw, e.g. if it has a cross-origin src attribute.
7784      // Safari will show an error in the console when the access results in "Blocked a frame with origin". e.g:
7785      // iframe.contentDocument.defaultView;
7786      // A safety way is to access one of the cross origin properties: Window or Location
7787      // Which might result in "SecurityError" DOM Exception and it is compatible to Safari.
7788      // https://html.spec.whatwg.org/multipage/browsers.html#integration-with-idl
7789      return typeof iframe.contentWindow.location.href === 'string';
7790    } catch (err) {
7791      return false;
7792    }
7793  }
7794
7795  function getActiveElementDeep() {
7796    var win = window;
7797    var element = getActiveElement();
7798
7799    while (element instanceof win.HTMLIFrameElement) {
7800      if (isSameOriginFrame(element)) {
7801        win = element.contentWindow;
7802      } else {
7803        return element;
7804      }
7805
7806      element = getActiveElement(win.document);
7807    }
7808
7809    return element;
7810  }
7811  /**
7812   * @ReactInputSelection: React input selection module. Based on Selection.js,
7813   * but modified to be suitable for react and has a couple of bug fixes (doesn't
7814   * assume buttons have range selections allowed).
7815   * Input selection module for React.
7816   */
7817
7818  /**
7819   * @hasSelectionCapabilities: we get the element types that support selection
7820   * from https://html.spec.whatwg.org/#do-not-apply, looking at `selectionStart`
7821   * and `selectionEnd` rows.
7822   */
7823
7824
7825  function hasSelectionCapabilities(elem) {
7826    var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();
7827    return nodeName && (nodeName === 'input' && (elem.type === 'text' || elem.type === 'search' || elem.type === 'tel' || elem.type === 'url' || elem.type === 'password') || nodeName === 'textarea' || elem.contentEditable === 'true');
7828  }
7829  function getSelectionInformation() {
7830    var focusedElem = getActiveElementDeep();
7831    return {
7832      focusedElem: focusedElem,
7833      selectionRange: hasSelectionCapabilities(focusedElem) ? getSelection(focusedElem) : null
7834    };
7835  }
7836  /**
7837   * @restoreSelection: If any selection information was potentially lost,
7838   * restore it. This is useful when performing operations that could remove dom
7839   * nodes and place them back in, resulting in focus being lost.
7840   */
7841
7842  function restoreSelection(priorSelectionInformation) {
7843    var curFocusedElem = getActiveElementDeep();
7844    var priorFocusedElem = priorSelectionInformation.focusedElem;
7845    var priorSelectionRange = priorSelectionInformation.selectionRange;
7846
7847    if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) {
7848      if (priorSelectionRange !== null && hasSelectionCapabilities(priorFocusedElem)) {
7849        setSelection(priorFocusedElem, priorSelectionRange);
7850      } // Focusing a node can change the scroll position, which is undesirable
7851
7852
7853      var ancestors = [];
7854      var ancestor = priorFocusedElem;
7855
7856      while (ancestor = ancestor.parentNode) {
7857        if (ancestor.nodeType === ELEMENT_NODE) {
7858          ancestors.push({
7859            element: ancestor,
7860            left: ancestor.scrollLeft,
7861            top: ancestor.scrollTop
7862          });
7863        }
7864      }
7865
7866      if (typeof priorFocusedElem.focus === 'function') {
7867        priorFocusedElem.focus();
7868      }
7869
7870      for (var i = 0; i < ancestors.length; i++) {
7871        var info = ancestors[i];
7872        info.element.scrollLeft = info.left;
7873        info.element.scrollTop = info.top;
7874      }
7875    }
7876  }
7877  /**
7878   * @getSelection: Gets the selection bounds of a focused textarea, input or
7879   * contentEditable node.
7880   * -@input: Look up selection bounds of this input
7881   * -@return {start: selectionStart, end: selectionEnd}
7882   */
7883
7884  function getSelection(input) {
7885    var selection;
7886
7887    if ('selectionStart' in input) {
7888      // Modern browser with input or textarea.
7889      selection = {
7890        start: input.selectionStart,
7891        end: input.selectionEnd
7892      };
7893    } else {
7894      // Content editable or old IE textarea.
7895      selection = getOffsets(input);
7896    }
7897
7898    return selection || {
7899      start: 0,
7900      end: 0
7901    };
7902  }
7903  /**
7904   * @setSelection: Sets the selection bounds of a textarea or input and focuses
7905   * the input.
7906   * -@input     Set selection bounds of this input or textarea
7907   * -@offsets   Object of same form that is returned from get*
7908   */
7909
7910  function setSelection(input, offsets) {
7911    var start = offsets.start;
7912    var end = offsets.end;
7913
7914    if (end === undefined) {
7915      end = start;
7916    }
7917
7918    if ('selectionStart' in input) {
7919      input.selectionStart = start;
7920      input.selectionEnd = Math.min(end, input.value.length);
7921    } else {
7922      setOffsets(input, offsets);
7923    }
7924  }
7925
7926  var skipSelectionChangeEvent = canUseDOM && 'documentMode' in document && document.documentMode <= 11;
7927
7928  function registerEvents$3() {
7929    registerTwoPhaseEvent('onSelect', ['focusout', 'contextmenu', 'dragend', 'focusin', 'ke
vendor: 11,192 bytes, lines 7929-8257
7929ydown', 'keyup', 'mousedown', 'mouseup', 'selectionchange']);
7930  }
7931
7932  var activeElement$1 = null;
7933  var activeElementInst$1 = null;
7934  var lastSelection = null;
7935  var mouseDown = false;
7936  /**
7937   * Get an object which is a unique representation of the current selection.
7938   *
7939   * The return value will not be consistent across nodes or browsers, but
7940   * two identical selections on the same node will return identical objects.
7941   */
7942
7943  function getSelection$1(node) {
7944    if ('selectionStart' in node && hasSelectionCapabilities(node)) {
7945      return {
7946        start: node.selectionStart,
7947        end: node.selectionEnd
7948      };
7949    } else {
7950      var win = node.ownerDocument && node.ownerDocument.defaultView || window;
7951      var selection = win.getSelection();
7952      return {
7953        anchorNode: selection.anchorNode,
7954        anchorOffset: selection.anchorOffset,
7955        focusNode: selection.focusNode,
7956        focusOffset: selection.focusOffset
7957      };
7958    }
7959  }
7960  /**
7961   * Get document associated with the event target.
7962   */
7963
7964
7965  function getEventTargetDocument(eventTarget) {
7966    return eventTarget.window === eventTarget ? eventTarget.document : eventTarget.nodeType === DOCUMENT_NODE ? eventTarget : eventTarget.ownerDocument;
7967  }
7968  /**
7969   * Poll selection to see whether it's changed.
7970   *
7971   * @param {object} nativeEvent
7972   * @param {object} nativeEventTarget
7973   * @return {?SyntheticEvent}
7974   */
7975
7976
7977  function constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget) {
7978    // Ensure we have the right element, and that the user is not dragging a
7979    // selection (this matches native `select` event behavior). In HTML5, select
7980    // fires only on input and textarea thus if there's no focused element we
7981    // won't dispatch.
7982    var doc = getEventTargetDocument(nativeEventTarget);
7983
7984    if (mouseDown || activeElement$1 == null || activeElement$1 !== getActiveElement(doc)) {
7985      return;
7986    } // Only fire when selection has actually changed.
7987
7988
7989    var currentSelection = getSelection$1(activeElement$1);
7990
7991    if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) {
7992      lastSelection = currentSelection;
7993      var listeners = accumulateTwoPhaseListeners(activeElementInst$1, 'onSelect');
7994
7995      if (listeners.length > 0) {
7996        var event = new SyntheticEvent('onSelect', 'select', null, nativeEvent, nativeEventTarget);
7997        dispatchQueue.push({
7998          event: event,
7999          listeners: listeners
8000        });
8001        event.target = activeElement$1;
8002      }
8003    }
8004  }
8005  /**
8006   * This plugin creates an `onSelect` event that normalizes select events
8007   * across form elements.
8008   *
8009   * Supported elements are:
8010   * - input (see `isTextInputElement`)
8011   * - textarea
8012   * - contentEditable
8013   *
8014   * This differs from native browser implementations in the following ways:
8015   * - Fires on contentEditable fields as well as inputs.
8016   * - Fires for collapsed selection.
8017   * - Fires after user input.
8018   */
8019
8020
8021  function extractEvents$3(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {
8022
8023    var targetNode = targetInst ? getNodeFromInstance(targetInst) : window;
8024
8025    switch (domEventName) {
8026      // Track the input node that has focus.
8027      case 'focusin':
8028        if (isTextInputElement(targetNode) || targetNode.contentEditable === 'true') {
8029          activeElement$1 = targetNode;
8030          activeElementInst$1 = targetInst;
8031          lastSelection = null;
8032        }
8033
8034        break;
8035
8036      case 'focusout':
8037        activeElement$1 = null;
8038        activeElementInst$1 = null;
8039        lastSelection = null;
8040        break;
8041      // Don't fire the event while the user is dragging. This matches the
8042      // semantics of the native select event.
8043
8044      case 'mousedown':
8045        mouseDown = true;
8046        break;
8047
8048      case 'contextmenu':
8049      case 'mouseup':
8050      case 'dragend':
8051        mouseDown = false;
8052        constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);
8053        break;
8054      // Chrome and IE fire non-standard event when selection is changed (and
8055      // sometimes when it hasn't). IE's event fires out of order with respect
8056      // to key and input events on deletion, so we discard it.
8057      //
8058      // Firefox doesn't support selectionchange, so check selection status
8059      // after each key entry. The selection changes after keydown and before
8060      // keyup, but we check on keydown as well in the case of holding down a
8061      // key, when multiple keydown events are fired but only one keyup is.
8062      // This is also our approach for IE handling, for the reason above.
8063
8064      case 'selectionchange':
8065        if (skipSelectionChangeEvent) {
8066          break;
8067        }
8068
8069      // falls through
8070
8071      case 'keydown':
8072      case 'keyup':
8073        constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);
8074    }
8075  }
8076
8077  function extractEvents$4(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {
8078    var reactName = topLevelEventsToReactNames.get(domEventName);
8079
8080    if (reactName === undefined) {
8081      return;
8082    }
8083
8084    var SyntheticEventCtor = SyntheticEvent;
8085    var reactEventType = domEventName;
8086
8087    switch (domEventName) {
8088      case 'keypress':
8089        // Firefox creates a keypress event for function keys too. This removes
8090        // the unwanted keypress events. Enter is however both printable and
8091        // non-printable. One would expect Tab to be as well (but it isn't).
8092        if (getEventCharCode(nativeEvent) === 0) {
8093          return;
8094        }
8095
8096      /* falls through */
8097
8098      case 'keydown':
8099      case 'keyup':
8100        SyntheticEventCtor = SyntheticKeyboardEvent;
8101        break;
8102
8103      case 'focusin':
8104        reactEventType = 'focus';
8105        SyntheticEventCtor = SyntheticFocusEvent;
8106        break;
8107
8108      case 'focusout':
8109        reactEventType = 'blur';
8110        SyntheticEventCtor = SyntheticFocusEvent;
8111        break;
8112
8113      case 'beforeblur':
8114      case 'afterblur':
8115        SyntheticEventCtor = SyntheticFocusEvent;
8116        break;
8117
8118      case 'click':
8119        // Firefox creates a click event on right mouse clicks. This removes the
8120        // unwanted click events.
8121        if (nativeEvent.button === 2) {
8122          return;
8123        }
8124
8125      /* falls through */
8126
8127      case 'auxclick':
8128      case 'dblclick':
8129      case 'mousedown':
8130      case 'mousemove':
8131      case 'mouseup': // TODO: Disabled elements should not respond to mouse events
8132
8133      /* falls through */
8134
8135      case 'mouseout':
8136      case 'mouseover':
8137      case 'contextmenu':
8138        SyntheticEventCtor = SyntheticMouseEvent;
8139        break;
8140
8141      case 'drag':
8142      case 'dragend':
8143      case 'dragenter':
8144      case 'dragexit':
8145      case 'dragleave':
8146      case 'dragover':
8147      case 'dragstart':
8148      case 'drop':
8149        SyntheticEventCtor = SyntheticDragEvent;
8150        break;
8151
8152      case 'touchcancel':
8153      case 'touchend':
8154      case 'touchmove':
8155      case 'touchstart':
8156        SyntheticEventCtor = SyntheticTouchEvent;
8157        break;
8158
8159      case ANIMATION_END:
8160      case ANIMATION_ITERATION:
8161      case ANIMATION_START:
8162        SyntheticEventCtor = SyntheticAnimationEvent;
8163        break;
8164
8165      case TRANSITION_END:
8166        SyntheticEventCtor = SyntheticTransitionEvent;
8167        break;
8168
8169      case 'scroll':
8170        SyntheticEventCtor = SyntheticUIEvent;
8171        break;
8172
8173      case 'wheel':
8174        SyntheticEventCtor = SyntheticWheelEvent;
8175        break;
8176
8177      case 'copy':
8178      case 'cut':
8179      case 'paste':
8180        SyntheticEventCtor = SyntheticClipboardEvent;
8181        break;
8182
8183      case 'gotpointercapture':
8184      case 'lostpointercapture':
8185      case 'pointercancel':
8186      case 'pointerdown':
8187      case 'pointermove':
8188      case 'pointerout':
8189      case 'pointerover':
8190      case 'pointerup':
8191        SyntheticEventCtor = SyntheticPointerEvent;
8192        break;
8193    }
8194
8195    var inCapturePhase = (eventSystemFlags & IS_CAPTURE_PHASE) !== 0;
8196
8197    {
8198      // Some events don't bubble in the browser.
8199      // In the past, React has always bubbled them, but this can be surprising.
8200      // We're going to try aligning closer to the browser behavior by not bubbling
8201      // them in React either. We'll start by not bubbling onScroll, and then expand.
8202      var accumulateTargetOnly = !inCapturePhase && // TODO: ideally, we'd eventually add all events from
8203      // nonDelegatedEvents list in DOMPluginEventSystem.
8204      // Then we can remove this special list.
8205      // This is a breaking change that can wait until React 18.
8206      domEventName === 'scroll';
8207
8208      var _listeners = accumulateSinglePhaseListeners(targetInst, reactName, nativeEvent.type, inCapturePhase, accumulateTargetOnly);
8209
8210      if (_listeners.length > 0) {
8211        // Intentionally create event lazily.
8212        var _event = new SyntheticEventCtor(reactName, reactEventType, null, nativeEvent, nativeEventTarget);
8213
8214        dispatchQueue.push({
8215          event: _event,
8216          listeners: _listeners
8217        });
8218      }
8219    }
8220  }
8221
8222  // TODO: remove top-level side effect.
8223  registerSimpleEvents();
8224  registerEvents$2();
8225  registerEvents$1();
8226  registerEvents$3();
8227  registerEvents();
8228
8229  function extractEvents$5(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {
8230    // TODO: we should remove the concept of a "SimpleEventPlugin".
8231    // This is the basic functionality of the event system. All
8232    // the other plugins are essentially polyfills. So the plugin
8233    // should probably be inlined somewhere and have its logic
8234    // be core the to event system. This would potentially allow
8235    // us to ship builds of React without the polyfilled plugins below.
8236    extractEvents$4(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags);
8237    var shouldProcessPolyfillPlugins = (eventSystemFlags & SHOULD_NOT_PROCESS_POLYFILL_EVENT_PLUGINS) === 0; // We don't process these events unless we are in the
8238    // event's native "bubble" phase, which means that we're
8239    // not in the capture phase. That's because we emulate
8240    // the capture phase here still. This is a trade-off,
8241    // because in an ideal world we would not emulate and use
8242    // the phases properly, like we do with the SimpleEvent
8243    // plugin. However, the plugins below either expect
8244    // emulation (EnterLeave) or use state localized to that
8245    // plugin (BeforeInput, Change, Select). The state in
8246    // these modules complicates things, as you'll essentially
8247    // get the case where the capture phase event might change
8248    // state, only for the following bubble event to come in
8249    // later and not trigger anything as the state now
8250    // invalidates the heuristics of the event plugin. We
8251    // could alter all these plugins to work in such ways, but
8252    // that might cause other unknown side-effects that we
8253    // can't forsee right now.
8254
8255    if (shouldProcessPolyfillPlugins) {
8256      extractEvents$2(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags);
8257      extractEvents$1(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);
8258      extractEvents$3(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);
8259      extractEvents(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);
8260    }
8261  } // List of events that need to be individually attached to media elements.
8262
8263
8264  var mediaEventTypes = ['abort', 'canplay', 'canplaythrough', 'durationchange', 'emptied', 'encrypted', 'ended', 'error', 'loadeddata', 'loadedmetadata', 'loadstart', 'pause', 'play', 'playing', 'progress', 'ratechange', 'seeked', 'seeking', 'stalled', 'suspend', 'timeupdate', 'volumechange', 'waiting']; // We should not delegate these events to the container, but rather
8265  // set them on the actual target element itself. This is primarily
8266  // because these events do not consistently bubble in the DOM.
8267
8268  var nonDelegatedEvents = new Set(['cancel', 'close', 'invalid', 'load', 'scroll', 'toggle'].concat(mediaEventTypes));
8269
8270  function executeDispatch(event, listener, currentTarget) {
8271    var type = event.type || 'unknown-event';
8272    event.currentTarget = currentTarget;
8273    invokeGuardedCallbackAndCatchFirstError(type, listener, undefined, event);
8274    event.currentTarget = null;
8275  }
8276
8277  function processDispatchQueueItemsInOrder(event, dispatchListeners, inCapturePhase) {
8278    var previousInstance;
8279
8280    if (inCapturePhase) {
8281      for (var i = dispatchListeners.length - 1; i >= 0; i--) {
8282        var _dispatchListeners$i = dispatchListeners[i],
8283            instance = _dispatchListeners$i.instance,
8284            currentTarget = _dispatchListeners$i.currentTarget,
8285            listener = _dispatchListeners$i.listener;
8286
8287        if (instance !== previousInstance && event.isPropagationStopped()) {
8288          return;
8289        }
8290
8291        executeDispatch(event, listener, currentTarget);
8292        previousInstance = instance;
8293      }
8294    } else {
8295      for (var _i = 0; _i < dispatchListeners.length; _i++) {
8296        var _dispatchListeners$_i = dispatchListeners[_i],
8297            _instance = _dispatchListeners$_i.instance,
8298            _currentTarget = _dispatchListeners$_i.currentTarget,
8299            _listener = _dispatchListeners$_i.listener;
8300
8301        if (_instance !== previousInstance && event.isPropagationStopped()) {
8302          return;
8303        }
8304
8305        executeDispatch(event, _listener, _currentTarget);
8306        previousInstance = _instance;
8307      }
8308    }
8309  }
8310
8311  function processDispatchQueue(dispatchQueue, eventSystemFlags) {
8312    var inCapturePhase = (eventSystemFlags & IS_CAPTURE_PHASE) !== 0;
8313
8314    for (var i = 0; i < dispatchQueue.length; i++) {
8315      var _dispatchQueue$i = dispatchQueue[i],
8316          event = _dispatchQueue$i.event,
8317          listeners = _dispatchQueue$i.listeners;
8318      processDispatchQueueItemsInOrder(event, listeners, inCapturePhase); //  event system doesn't use pooling.
8319    } // This would be a good time to rethrow if any of the event handlers threw.
8320
8321
8322    rethrowCaughtError();
8323  }
8324
8325  function dispatchEventsForPlugins(domEventName, eventSystemFlags, nativeEvent, targetInst, targetContainer) {
8326    var nativeEventTarget = getEventTarget(nativeEvent);
8327    var dispatchQueue = [];
8328    extractEvents$5(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags);
8329    processDispatchQueue(dispatchQueue, eventSystemFlags);
8330  }
8331
8332  function listenToNonDelegatedEvent(domEventName, targetElement) {
8333    var isCapturePhaseListener = false;
8334    var listenerSet = getEventListenerSet(targetElement);
8335    var listenerSetKey = getListenerSetKey(domEventName, isCapturePhaseListener);
8336
8337    if (!listenerSet.has(listenerSetKey)) {
8338      addTrappedEventListener(targetElement, domEventName, IS_NON_DELEGATED, isCapturePhaseListener);
8339      listenerSet.add(listenerSetKey);
8340    }
8341  }
8342  var listeningMarker = '_reactListening' + Math.random().toString(36).slice(2);
8343  function listenToAllSupportedEvents(rootContainerElement) {
8344    {
8345      if (rootContainerElement[listeningMarker]) {
8346        // Performance optimization: don't iterate through events
8347        // for the same portal container or root node more than once.
8348        // TODO: once we remove the flag, we may be able to also
8349        // remove some of the bookkeeping maps used for laziness.
8350        return;
8351      }
8352
8353      rootContainerElement[listeningMarker] = true;
8354      allNativeEvents.forEach(function (domEventName) {
8355        if (!nonDelegatedEvents.has(domEventName)) {
8356          listenToNativeEvent(domEventName, false, rootContainerElement, null);
8357        }
8358
8359        listenToNativeEvent(domEventName, true, rootContainerElement, null);
8360      });
8361    }
8362  }
8363  function listenToNativeEvent(domEventName, isCapturePhaseListener, rootContainerElement, targetElement) {
8364    var eventSystemFlags = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
8365    var target = rootContainerElement; // selectionchange needs to be attached to the document
8366    // otherwise it won't capture incoming events that are only
8367    // triggered on the document directly.
8368
8369    if (domEventName === 'selectionchange' && rootContainerElement.nodeType !== DOCUMENT_NODE) {
8370      target = rootContainerElement.ownerDocument;
8371    } // If the event can be delegated (or is capture phase), we can
8372    // register it to the root container. Otherwise, we should
8373    // register the event to the target element and mark it as
8374    // a non-delegated event.
8375
8376
8377    if (targetElement !== null && !isCapturePhaseListener && nonDelegatedEvents.has(domEventName)) {
8378      // For all non-delegated events, apart from scroll, we attach
8379      // their event listeners to the respective elements that their
8380      // events fire on. That means we can skip this step, as event
8381      // listener has already been added previously. However, we
8382      // special case the scroll event because the reality is that any
8383      // element can scroll.
8384      // TODO: ideally, we'd eventually apply the same logic to all
8385      // events from the nonDelegatedEvents list. Then we can remove
8386      // this special case and use the same logic for all events.
8387      if (domEventName !== 'scroll') {
8388        return;
8389      }
8390
8391      eventSystemFlags |= IS_NON_DELEGATED;
8392      target = targetElement;
8393    }
8394
8395    var listenerSet = getEventListenerSet(target);
8396    var listenerSetKey = getListenerSetKey(domEventName, isCapturePhaseListener); // If the listener entry is empty or we should upgrade, then
8397    // we need to trap an event listener onto the target.
8398
8399    if (!listenerSet.has(listenerSetKey)) {
8400      if (isCapturePhaseListener) {
8401        eventSystemFlags |= IS_CAPTURE_PHASE;
8402      }
8403
8404      addTrappedEventListener(target, domEventName, eventSystemFlags, isCapturePhaseListener);
8405      listenerSet.add(listenerSetKey);
8406    }
8407  }
8408
8409  function addTrappedEventListener(targetContainer, domEventName, eventSystemFlags, isCapturePhaseListener, isDeferredListenerForLegacyFBSupport) {
8410    var listener = createEventListenerWrapperWithPriority(targetContainer, domEventName, eventSystemFlags); // If passive option is not supported, then the event will be
8411    // active and not passive.
8412
8413    var isPassiveListener = undefined;
8414
8415    if (passiveBrowserEventsSupported) {
8416      // Browsers introduced an intervention, making these events
8417      // passive by default on document. React doesn't bind them
8418      // to document anymore, but changing this now would undo
8419      // the performance wins from the change. So we emulate
8420      // the existing behavior manually on the roots now.
8421      // https://github.com/facebook/react/issues/19651
8422      if (domEventName === 'touchstart' || domEventName === 'touchmove' || domEventName === 'wheel') {
8423        isPassiveListener = true;
8424      }
8425    }
8426
8427    targetContainer =  targetContainer;
8428    var unsubscribeListener; // When legacyFBSupport is enabled, it's for when we
8429
8430
8431    if (isCapturePhaseListener) {
8432      if (isPassiveListener !== undefined) {
8433        unsubscribeListener = addEventCaptureListenerWithPassiveFlag(targetContainer, domEventName, listener, isPassiveListener);
8434      } else {
8435        unsubscribeListener = addEventCaptureListener(targetContainer, domEventName, listener);
8436      }
8437    } else {
8438      if (isPassiveListener !== undefined) {
8439        unsubscribeListener = addEventBubbleListenerWithPassiveFlag(targetContainer, domEventName, listener, isPassiveListener);
8440      } else {
8441        unsubscribeListener = addEventBubbleListener(targetContainer, domEventName, listener);
8442      }
8443    }
8444  }
8445
8446  function isMatchingRootContainer(grandContainer, targetContainer) {
8447    return grandContainer === targetContainer || grandContainer.nodeType === COMMENT_NODE && grandContainer.parentNode === targetContainer;
8448  }
8449
8450  function dispatchEventForPluginEventSystem(domEventName, eventSystemFlags, nativeEvent, targetInst, targetContainer) {
8451    var ancestorInst = targetInst;
8452
8453    if ((eventSystemFlags & IS_EVENT_HANDLE_NON_MANAGED_NODE) === 0 && (eventSystemFlags & IS_NON_DELEGATED) === 0) {
8454      var targetContainerNode = targetContainer; // If we are using the legacy FB support flag, we
8455
8456      if (targetInst !== null) {
8457        // The below logic attempts to work out if we need to change
8458        // the target fiber to a different ancestor. We had similar logic
8459        // in the legacy event system, except the big difference between
8460        // systems is that the modern event system now has an event listener
8461        // attached to each React Root and React Portal Root. Together,
8462        // the DOM nodes representing these roots are the "rootContainer".
8463        // To figure out which ancestor instance we should use, we traverse
8464        // up the fiber tree from the target instance and attempt to find
8465        // root boundaries that match that of our current "rootContainer".
8466        // If we find that "rootContainer", we find the parent fiber
8467        // sub-tree for that root and make that our ancestor instance.
8468        var node = targetInst;
8469
8470        mainLoop: while (true) {
8471          if (node === null) {
8472            return;
8473          }
8474
8475          var nodeTag = node.tag;
8476
8477          if (nodeTag === HostRoot || nodeTag === HostPortal) {
8478            var container = node.stateNode.containerInfo;
8479
8480            if (isMatchingRootContainer(container, targetContainerNode)) {
8481              break;
8482            }
8483
8484            if (nodeTag === HostPortal) {
8485              // The target is a portal, but it's not the rootContainer we're looking for.
8486              // Normally portals handle their own events all the way down to the root.
8487              // So we should be able to stop now. However, we don't know if this portal
8488              // was part of *our* root.
8489              var grandNode = node.return;
8490
8491              while (grandNode !== null) {
8492                var grandTag = grandNode.tag;
8493
8494                if (grandTag === HostRoot || grandTag === HostPortal) {
8495                  var grandContainer = grandNode.stateNode.containerInfo;
8496
8497                  if (isMatchingRootContainer(grandContainer, targetContainerNode)) {
8498                    // This is the rootContainer we're looking for and we found it as
8499                    // a parent of the Portal. That means we can ignore it because the
8500                    // Portal will bubble through to us.
8501                    return;
8502                  }
8503                }
8504
8505                grandNode = grandNode.return;
8506              }
8507            } // Now we need to find it's corresponding host fiber in the other
8508            // tree. To do this we can use getClosestInstanceFromNode, but we
8509            // need to validate that the fiber is a host instance, otherwise
8510            // we need to traverse up through the DOM till we find the correct
8511            // node that is from the other tree.
8512
8513
8514            while (container !== null) {
8515              var parentNode = getClosestInstanceFromNode(container);
8516
8517              if (parentNode === null) {
8518                return;
8519              }
8520
8521              var parentTag = parentNode.tag;
8522
8523              if (parentTag === HostComponent || parentTag === HostText) {
8524                node = ancestorInst = parentNode;
8525                continue mainLoop;
8526              }
8527
8528              container = container.parentNode;
8529            }
8530          }
8531
8532          node = node.return;
8533        }
8534      }
8535    }
8536
8537    batchedEventUpdates(function () {
vendor: 9,368 bytes, lines 8538-8823
8538      return dispatchEventsForPlugins(domEventName, eventSystemFlags, nativeEvent, ancestorInst);
8539    });
8540  }
8541
8542  function createDispatchListener(instance, listener, currentTarget) {
8543    return {
8544      instance: instance,
8545      listener: listener,
8546      currentTarget: currentTarget
8547    };
8548  }
8549
8550  function accumulateSinglePhaseListeners(targetFiber, reactName, nativeEventType, inCapturePhase, accumulateTargetOnly) {
8551    var captureName = reactName !== null ? reactName + 'Capture' : null;
8552    var reactEventName = inCapturePhase ? captureName : reactName;
8553    var listeners = [];
8554    var instance = targetFiber;
8555    var lastHostComponent = null; // Accumulate all instances and listeners via the target -> root path.
8556
8557    while (instance !== null) {
8558      var _instance2 = instance,
8559          stateNode = _instance2.stateNode,
8560          tag = _instance2.tag; // Handle listeners that are on HostComponents (i.e. <div>)
8561
8562      if (tag === HostComponent && stateNode !== null) {
8563        lastHostComponent = stateNode; // createEventHandle listeners
8564
8565
8566        if (reactEventName !== null) {
8567          var listener = getListener(instance, reactEventName);
8568
8569          if (listener != null) {
8570            listeners.push(createDispatchListener(instance, listener, lastHostComponent));
8571          }
8572        }
8573      } // If we are only accumulating events for the target, then we don't
8574      // continue to propagate through the React fiber tree to find other
8575      // listeners.
8576
8577
8578      if (accumulateTargetOnly) {
8579        break;
8580      }
8581
8582      instance = instance.return;
8583    }
8584
8585    return listeners;
8586  } // We should only use this function for:
8587  // - BeforeInputEventPlugin
8588  // - ChangeEventPlugin
8589  // - SelectEventPlugin
8590  // This is because we only process these plugins
8591  // in the bubble phase, so we need to accumulate two
8592  // phase event listeners (via emulation).
8593
8594  function accumulateTwoPhaseListeners(targetFiber, reactName) {
8595    var captureName = reactName + 'Capture';
8596    var listeners = [];
8597    var instance = targetFiber; // Accumulate all instances and listeners via the target -> root path.
8598
8599    while (instance !== null) {
8600      var _instance3 = instance,
8601          stateNode = _instance3.stateNode,
8602          tag = _instance3.tag; // Handle listeners that are on HostComponents (i.e. <div>)
8603
8604      if (tag === HostComponent && stateNode !== null) {
8605        var currentTarget = stateNode;
8606        var captureListener = getListener(instance, captureName);
8607
8608        if (captureListener != null) {
8609          listeners.unshift(createDispatchListener(instance, captureListener, currentTarget));
8610        }
8611
8612        var bubbleListener = getListener(instance, reactName);
8613
8614        if (bubbleListener != null) {
8615          listeners.push(createDispatchListener(instance, bubbleListener, currentTarget));
8616        }
8617      }
8618
8619      instance = instance.return;
8620    }
8621
8622    return listeners;
8623  }
8624
8625  function getParent(inst) {
8626    if (inst === null) {
8627      return null;
8628    }
8629
8630    do {
8631      inst = inst.return; // TODO: If this is a HostRoot we might want to bail out.
8632      // That is depending on if we want nested subtrees (layers) to bubble
8633      // events to their parent. We could also go through parentNode on the
8634      // host node but that wouldn't work for React Native and doesn't let us
8635      // do the portal feature.
8636    } while (inst && inst.tag !== HostComponent);
8637
8638    if (inst) {
8639      return inst;
8640    }
8641
8642    return null;
8643  }
8644  /**
8645   * Return the lowest common ancestor of A and B, or null if they are in
8646   * different trees.
8647   */
8648
8649
8650  function getLowestCommonAncestor(instA, instB) {
8651    var nodeA = instA;
8652    var nodeB = instB;
8653    var depthA = 0;
8654
8655    for (var tempA = nodeA; tempA; tempA = getParent(tempA)) {
8656      depthA++;
8657    }
8658
8659    var depthB = 0;
8660
8661    for (var tempB = nodeB; tempB; tempB = getParent(tempB)) {
8662      depthB++;
8663    } // If A is deeper, crawl up.
8664
8665
8666    while (depthA - depthB > 0) {
8667      nodeA = getParent(nodeA);
8668      depthA--;
8669    } // If B is deeper, crawl up.
8670
8671
8672    while (depthB - depthA > 0) {
8673      nodeB = getParent(nodeB);
8674      depthB--;
8675    } // Walk in lockstep until we find a match.
8676
8677
8678    var depth = depthA;
8679
8680    while (depth--) {
8681      if (nodeA === nodeB || nodeB !== null && nodeA === nodeB.alternate) {
8682        return nodeA;
8683      }
8684
8685      nodeA = getParent(nodeA);
8686      nodeB = getParent(nodeB);
8687    }
8688
8689    return null;
8690  }
8691
8692  function accumulateEnterLeaveListenersForEvent(dispatchQueue, event, target, common, inCapturePhase) {
8693    var registrationName = event._reactName;
8694    var listeners = [];
8695    var instance = target;
8696
8697    while (instance !== null) {
8698      if (instance === common) {
8699        break;
8700      }
8701
8702      var _instance4 = instance,
8703          alternate = _instance4.alternate,
8704          stateNode = _instance4.stateNode,
8705          tag = _instance4.tag;
8706
8707      if (alternate !== null && alternate === common) {
8708        break;
8709      }
8710
8711      if (tag === HostComponent && stateNode !== null) {
8712        var currentTarget = stateNode;
8713
8714        if (inCapturePhase) {
8715          var captureListener = getListener(instance, registrationName);
8716
8717          if (captureListener != null) {
8718            listeners.unshift(createDispatchListener(instance, captureListener, currentTarget));
8719          }
8720        } else if (!inCapturePhase) {
8721          var bubbleListener = getListener(instance, registrationName);
8722
8723          if (bubbleListener != null) {
8724            listeners.push(createDispatchListener(instance, bubbleListener, currentTarget));
8725          }
8726        }
8727      }
8728
8729      instance = instance.return;
8730    }
8731
8732    if (listeners.length !== 0) {
8733      dispatchQueue.push({
8734        event: event,
8735        listeners: listeners
8736      });
8737    }
8738  } // We should only use this function for:
8739  // - EnterLeaveEventPlugin
8740  // This is because we only process this plugin
8741  // in the bubble phase, so we need to accumulate two
8742  // phase event listeners.
8743
8744
8745  function accumulateEnterLeaveTwoPhaseListeners(dispatchQueue, leaveEvent, enterEvent, from, to) {
8746    var common = from && to ? getLowestCommonAncestor(from, to) : null;
8747
8748    if (from !== null) {
8749      accumulateEnterLeaveListenersForEvent(dispatchQueue, leaveEvent, from, common, false);
8750    }
8751
8752    if (to !== null && enterEvent !== null) {
8753      accumulateEnterLeaveListenersForEvent(dispatchQueue, enterEvent, to, common, true);
8754    }
8755  }
8756  function getListenerSetKey(domEventName, capture) {
8757    return domEventName + "__" + (capture ? 'capture' : 'bubble');
8758  }
8759
8760  var didWarnInvalidHydration = false;
8761  var DANGEROUSLY_SET_INNER_HTML = 'dangerouslySetInnerHTML';
8762  var SUPPRESS_CONTENT_EDITABLE_WARNING = 'suppressContentEditableWarning';
8763  var SUPPRESS_HYDRATION_WARNING = 'suppressHydrationWarning';
8764  var AUTOFOCUS = 'autoFocus';
8765  var CHILDREN = 'children';
8766  var STYLE = 'style';
8767  var HTML$1 = '__html';
8768  var HTML_NAMESPACE$1 = Namespaces.html;
8769  var warnedUnknownTags;
8770  var suppressHydrationWarning;
8771  var validatePropertiesInDevelopment;
8772  var warnForTextDifference;
8773  var warnForPropDifference;
8774  var warnForExtraAttributes;
8775  var warnForInvalidEventListener;
8776  var canDiffStyleForHydrationWarning;
8777  var normalizeMarkupForTextOrAttribute;
8778  var normalizeHTML;
8779
8780  {
8781    warnedUnknownTags = {
8782      // There are working polyfills for <dialog>. Let people use it.
8783      dialog: true,
8784      // Electron ships a custom <webview> tag to display external web content in
8785      // an isolated frame and process.
8786      // This tag is not present in non Electron environments such as JSDom which
8787      // is often used for testing purposes.
8788      // @see https://electronjs.org/docs/api/webview-tag
8789      webview: true
8790    };
8791
8792    validatePropertiesInDevelopment = function (type, props) {
8793      validateProperties(type, props);
8794      validateProperties$1(type, props);
8795      validateProperties$2(type, props, {
8796        registrationNameDependencies: registrationNameDependencies,
8797        possibleRegistrationNames: possibleRegistrationNames
8798      });
8799    }; // IE 11 parses & normalizes the style attribute as opposed to other
8800    // browsers. It adds spaces and sorts the properties in some
8801    // non-alphabetical order. Handling that would require sorting CSS
8802    // properties in the client & server versions or applying
8803    // `expectedStyle` to a temporary DOM node to read its `style` attribute
8804    // normalized. Since it only affects IE, we're skipping style warnings
8805    // in that browser completely in favor of doing all that work.
8806    // See https://github.com/facebook/react/issues/11807
8807
8808
8809    canDiffStyleForHydrationWarning = canUseDOM && !document.documentMode; // HTML parsing normalizes CR and CRLF to LF.
8810    // It also can turn \u0000 into \uFFFD inside attributes.
8811    // https://www.w3.org/TR/html5/single-page.html#preprocessing-the-input-stream
8812    // If we have a mismatch, it might be caused by that.
8813    // We will still patch up in this case but not fire the warning.
8814
8815    var NORMALIZE_NEWLINES_REGEX = /\r\n?/g;
8816    var NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\u0000|\uFFFD/g;
8817
8818    normalizeMarkupForTextOrAttribute = function (markup) {
8819      var markupString = typeof markup === 'string' ? markup : '' + markup;
8820      return markupString.replace(NORMALIZE_NEWLINES_REGEX, '\n').replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, '');
8821    };
8822
8823    warnForTextDifference = function (serverText, clientText) {
vendor: 16,384 bytes, lines 8824-9268
8824      if (didWarnInvalidHydration) {
8825        return;
8826      }
8827
8828      var normalizedClientText = normalizeMarkupForTextOrAttribute(clientText);
8829      var normalizedServerText = normalizeMarkupForTextOrAttribute(serverText);
8830
8831      if (normalizedServerText === normalizedClientText) {
8832        return;
8833      }
8834
8835      didWarnInvalidHydration = true;
8836
8837      error('Text content did not match. Server: "%s" Client: "%s"', normalizedServerText, normalizedClientText);
8838    };
8839
8840    warnForPropDifference = function (propName, serverValue, clientValue) {
8841      if (didWarnInvalidHydration) {
8842        return;
8843      }
8844
8845      var normalizedClientValue = normalizeMarkupForTextOrAttribute(clientValue);
8846      var normalizedServerValue = normalizeMarkupForTextOrAttribute(serverValue);
8847
8848      if (normalizedServerValue === normalizedClientValue) {
8849        return;
8850      }
8851
8852      didWarnInvalidHydration = true;
8853
8854      error('Prop `%s` did not match. Server: %s Client: %s', propName, JSON.stringify(normalizedServerValue), JSON.stringify(normalizedClientValue));
8855    };
8856
8857    warnForExtraAttributes = function (attributeNames) {
8858      if (didWarnInvalidHydration) {
8859        return;
8860      }
8861
8862      didWarnInvalidHydration = true;
8863      var names = [];
8864      attributeNames.forEach(function (name) {
8865        names.push(name);
8866      });
8867
8868      error('Extra attributes from the server: %s', names);
8869    };
8870
8871    warnForInvalidEventListener = function (registrationName, listener) {
8872      if (listener === false) {
8873        error('Expected `%s` listener to be a function, instead got `false`.\n\n' + 'If you used to conditionally omit it with %s={condition && value}, ' + 'pass %s={condition ? value : undefined} instead.', registrationName, registrationName, registrationName);
8874      } else {
8875        error('Expected `%s` listener to be a function, instead got a value of `%s` type.', registrationName, typeof listener);
8876      }
8877    }; // Parse the HTML and read it back to normalize the HTML string so that it
8878    // can be used for comparison.
8879
8880
8881    normalizeHTML = function (parent, html) {
8882      // We could have created a separate document here to avoid
8883      // re-initializing custom elements if they exist. But this breaks
8884      // how <noscript> is being handled. So we use the same document.
8885      // See the discussion in https://github.com/facebook/react/pull/11157.
8886      var testElement = parent.namespaceURI === HTML_NAMESPACE$1 ? parent.ownerDocument.createElement(parent.tagName) : parent.ownerDocument.createElementNS(parent.namespaceURI, parent.tagName);
8887      testElement.innerHTML = html;
8888      return testElement.innerHTML;
8889    };
8890  }
8891
8892  function getOwnerDocumentFromRootContainer(rootContainerElement) {
8893    return rootContainerElement.nodeType === DOCUMENT_NODE ? rootContainerElement : rootContainerElement.ownerDocument;
8894  }
8895
8896  function noop() {}
8897
8898  function trapClickOnNonInteractiveElement(node) {
8899    // Mobile Safari does not fire properly bubble click events on
8900    // non-interactive elements, which means delegated click listeners do not
8901    // fire. The workaround for this bug involves attaching an empty click
8902    // listener on the target node.
8903    // https://www.quirksmode.org/blog/archives/2010/09/click_event_del.html
8904    // Just set it using the onclick property so that we don't have to manage any
8905    // bookkeeping for it. Not sure if we need to clear it when the listener is
8906    // removed.
8907    // TODO: Only do this for the relevant Safaris maybe?
8908    node.onclick = noop;
8909  }
8910
8911  function setInitialDOMProperties(tag, domElement, rootContainerElement, nextProps, isCustomComponentTag) {
8912    for (var propKey in nextProps) {
8913      if (!nextProps.hasOwnProperty(propKey)) {
8914        continue;
8915      }
8916
8917      var nextProp = nextProps[propKey];
8918
8919      if (propKey === STYLE) {
8920        {
8921          if (nextProp) {
8922            // Freeze the next style object so that we can assume it won't be
8923            // mutated. We have already warned for this in the past.
8924            Object.freeze(nextProp);
8925          }
8926        } // Relies on `updateStylesByID` not mutating `styleUpdates`.
8927
8928
8929        setValueForStyles(domElement, nextProp);
8930      } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {
8931        var nextHtml = nextProp ? nextProp[HTML$1] : undefined;
8932
8933        if (nextHtml != null) {
8934          setInnerHTML(domElement, nextHtml);
8935        }
8936      } else if (propKey === CHILDREN) {
8937        if (typeof nextProp === 'string') {
8938          // Avoid setting initial textContent when the text is empty. In IE11 setting
8939          // textContent on a <textarea> will cause the placeholder to not
8940          // show within the <textarea> until it has been focused and blurred again.
8941          // https://github.com/facebook/react/issues/6731#issuecomment-254874553
8942          var canSetTextContent = tag !== 'textarea' || nextProp !== '';
8943
8944          if (canSetTextContent) {
8945            setTextContent(domElement, nextProp);
8946          }
8947        } else if (typeof nextProp === 'number') {
8948          setTextContent(domElement, '' + nextProp);
8949        }
8950      } else if (propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING) ; else if (propKey === AUTOFOCUS) ; else if (registrationNameDependencies.hasOwnProperty(propKey)) {
8951        if (nextProp != null) {
8952          if ( typeof nextProp !== 'function') {
8953            warnForInvalidEventListener(propKey, nextProp);
8954          }
8955
8956          if (propKey === 'onScroll') {
8957            listenToNonDelegatedEvent('scroll', domElement);
8958          }
8959        }
8960      } else if (nextProp != null) {
8961        setValueForProperty(domElement, propKey, nextProp, isCustomComponentTag);
8962      }
8963    }
8964  }
8965
8966  function updateDOMProperties(domElement, updatePayload, wasCustomComponentTag, isCustomComponentTag) {
8967    // TODO: Handle wasCustomComponentTag
8968    for (var i = 0; i < updatePayload.length; i += 2) {
8969      var propKey = updatePayload[i];
8970      var propValue = updatePayload[i + 1];
8971
8972      if (propKey === STYLE) {
8973        setValueForStyles(domElement, propValue);
8974      } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {
8975        setInnerHTML(domElement, propValue);
8976      } else if (propKey === CHILDREN) {
8977        setTextContent(domElement, propValue);
8978      } else {
8979        setValueForProperty(domElement, propKey, propValue, isCustomComponentTag);
8980      }
8981    }
8982  }
8983
8984  function createElement(type, props, rootContainerElement, parentNamespace) {
8985    var isCustomComponentTag; // We create tags in the namespace of their parent container, except HTML
8986    // tags get no namespace.
8987
8988    var ownerDocument = getOwnerDocumentFromRootContainer(rootContainerElement);
8989    var domElement;
8990    var namespaceURI = parentNamespace;
8991
8992    if (namespaceURI === HTML_NAMESPACE$1) {
8993      namespaceURI = getIntrinsicNamespace(type);
8994    }
8995
8996    if (namespaceURI === HTML_NAMESPACE$1) {
8997      {
8998        isCustomComponentTag = isCustomComponent(type, props); // Should this check be gated by parent namespace? Not sure we want to
8999        // allow <SVG> or <mATH>.
9000
9001        if (!isCustomComponentTag && type !== type.toLowerCase()) {
9002          error('<%s /> is using incorrect casing. ' + 'Use PascalCase for React components, ' + 'or lowercase for HTML elements.', type);
9003        }
9004      }
9005
9006      if (type === 'script') {
9007        // Create the script via .innerHTML so its "parser-inserted" flag is
9008        // set to true and it does not execute
9009        var div = ownerDocument.createElement('div');
9010
9011        div.innerHTML = '<script><' + '/script>'; // eslint-disable-line
9012        // This is guaranteed to yield a script element.
9013
9014        var firstChild = div.firstChild;
9015        domElement = div.removeChild(firstChild);
9016      } else if (typeof props.is === 'string') {
9017        // $FlowIssue `createElement` should be updated for Web Components
9018        domElement = ownerDocument.createElement(type, {
9019          is: props.is
9020        });
9021      } else {
9022        // Separate else branch instead of using `props.is || undefined` above because of a Firefox bug.
9023        // See discussion in https://github.com/facebook/react/pull/6896
9024        // and discussion in https://bugzilla.mozilla.org/show_bug.cgi?id=1276240
9025        domElement = ownerDocument.createElement(type); // Normally attributes are assigned in `setInitialDOMProperties`, however the `multiple` and `size`
9026        // attributes on `select`s needs to be added before `option`s are inserted.
9027        // This prevents:
9028        // - a bug where the `select` does not scroll to the correct option because singular
9029        //  `select` elements automatically pick the first item #13222
9030        // - a bug where the `select` set the first item as selected despite the `size` attribute #14239
9031        // See https://github.com/facebook/react/issues/13222
9032        // and https://github.com/facebook/react/issues/14239
9033
9034        if (type === 'select') {
9035          var node = domElement;
9036
9037          if (props.multiple) {
9038            node.multiple = true;
9039          } else if (props.size) {
9040            // Setting a size greater than 1 causes a select to behave like `multiple=true`, where
9041            // it is possible that no option is selected.
9042            //
9043            // This is only necessary when a select in "single selection mode".
9044            node.size = props.size;
9045          }
9046        }
9047      }
9048    } else {
9049      domElement = ownerDocument.createElementNS(namespaceURI, type);
9050    }
9051
9052    {
9053      if (namespaceURI === HTML_NAMESPACE$1) {
9054        if (!isCustomComponentTag && Object.prototype.toString.call(domElement) === '[object HTMLUnknownElement]' && !Object.prototype.hasOwnProperty.call(warnedUnknownTags, type)) {
9055          warnedUnknownTags[type] = true;
9056
9057          error('The tag <%s> is unrecognized in this browser. ' + 'If you meant to render a React component, start its name with ' + 'an uppercase letter.', type);
9058        }
9059      }
9060    }
9061
9062    return domElement;
9063  }
9064  function createTextNode(text, rootContainerElement) {
9065    return getOwnerDocumentFromRootContainer(rootContainerElement).createTextNode(text);
9066  }
9067  function setInitialProperties(domElement, tag, rawProps, rootContainerElement) {
9068    var isCustomComponentTag = isCustomComponent(tag, rawProps);
9069
9070    {
9071      validatePropertiesInDevelopment(tag, rawProps);
9072    } // TODO: Make sure that we check isMounted before firing any of these events.
9073
9074
9075    var props;
9076
9077    switch (tag) {
9078      case 'dialog':
9079        listenToNonDelegatedEvent('cancel', domElement);
9080        listenToNonDelegatedEvent('close', domElement);
9081        props = rawProps;
9082        break;
9083
9084      case 'iframe':
9085      case 'object':
9086      case 'embed':
9087        // We listen to this event in case to ensure emulated bubble
9088        // listeners still fire for the load event.
9089        listenToNonDelegatedEvent('load', domElement);
9090        props = rawProps;
9091        break;
9092
9093      case 'video':
9094      case 'audio':
9095        // We listen to these events in case to ensure emulated bubble
9096        // listeners still fire for all the media events.
9097        for (var i = 0; i < mediaEventTypes.length; i++) {
9098          listenToNonDelegatedEvent(mediaEventTypes[i], domElement);
9099        }
9100
9101        props = rawProps;
9102        break;
9103
9104      case 'source':
9105        // We listen to this event in case to ensure emulated bubble
9106        // listeners still fire for the error event.
9107        listenToNonDelegatedEvent('error', domElement);
9108        props = rawProps;
9109        break;
9110
9111      case 'img':
9112      case 'image':
9113      case 'link':
9114        // We listen to these events in case to ensure emulated bubble
9115        // listeners still fire for error and load events.
9116        listenToNonDelegatedEvent('error', domElement);
9117        listenToNonDelegatedEvent('load', domElement);
9118        props = rawProps;
9119        break;
9120
9121      case 'details':
9122        // We listen to this event in case to ensure emulated bubble
9123        // listeners still fire for the toggle event.
9124        listenToNonDelegatedEvent('toggle', domElement);
9125        props = rawProps;
9126        break;
9127
9128      case 'input':
9129        initWrapperState(domElement, rawProps);
9130        props = getHostProps(domElement, rawProps); // We listen to this event in case to ensure emulated bubble
9131        // listeners still fire for the invalid event.
9132
9133        listenToNonDelegatedEvent('invalid', domElement);
9134
9135        break;
9136
9137      case 'option':
9138        validateProps(domElement, rawProps);
9139        props = getHostProps$1(domElement, rawProps);
9140        break;
9141
9142      case 'select':
9143        initWrapperState$1(domElement, rawProps);
9144        props = getHostProps$2(domElement, rawProps); // We listen to this event in case to ensure emulated bubble
9145        // listeners still fire for the invalid event.
9146
9147        listenToNonDelegatedEvent('invalid', domElement);
9148
9149        break;
9150
9151      case 'textarea':
9152        initWrapperState$2(domElement, rawProps);
9153        props = getHostProps$3(domElement, rawProps); // We listen to this event in case to ensure emulated bubble
9154        // listeners still fire for the invalid event.
9155
9156        listenToNonDelegatedEvent('invalid', domElement);
9157
9158        break;
9159
9160      default:
9161        props = rawProps;
9162    }
9163
9164    assertValidProps(tag, props);
9165    setInitialDOMProperties(tag, domElement, rootContainerElement, props, isCustomComponentTag);
9166
9167    switch (tag) {
9168      case 'input':
9169        // TODO: Make sure we check if this is still unmounted or do any clean
9170        // up necessary since we never stop tracking anymore.
9171        track(domElement);
9172        postMountWrapper(domElement, rawProps, false);
9173        break;
9174
9175      case 'textarea':
9176        // TODO: Make sure we check if this is still unmounted or do any clean
9177        // up necessary since we never stop tracking anymore.
9178        track(domElement);
9179        postMountWrapper$3(domElement);
9180        break;
9181
9182      case 'option':
9183        postMountWrapper$1(domElement, rawProps);
9184        break;
9185
9186      case 'select':
9187        postMountWrapper$2(domElement, rawProps);
9188        break;
9189
9190      default:
9191        if (typeof props.onClick === 'function') {
9192          // TODO: This cast may not be sound for SVG, MathML or custom elements.
9193          trapClickOnNonInteractiveElement(domElement);
9194        }
9195
9196        break;
9197    }
9198  } // Calculate the diff between the two objects.
9199
9200  function diffProperties(domElement, tag, lastRawProps, nextRawProps, rootContainerElement) {
9201    {
9202      validatePropertiesInDevelopment(tag, nextRawProps);
9203    }
9204
9205    var updatePayload = null;
9206    var lastProps;
9207    var nextProps;
9208
9209    switch (tag) {
9210      case 'input':
9211        lastProps = getHostProps(domElement, lastRawProps);
9212        nextProps = getHostProps(domElement, nextRawProps);
9213        updatePayload = [];
9214        break;
9215
9216      case 'option':
9217        lastProps = getHostProps$1(domElement, lastRawProps);
9218        nextProps = getHostProps$1(domElement, nextRawProps);
9219        updatePayload = [];
9220        break;
9221
9222      case 'select':
9223        lastProps = getHostProps$2(domElement, lastRawProps);
9224        nextProps = getHostProps$2(domElement, nextRawProps);
9225        updatePayload = [];
9226        break;
9227
9228      case 'textarea':
9229        lastProps = getHostProps$3(domElement, lastRawProps);
9230        nextProps = getHostProps$3(domElement, nextRawProps);
9231        updatePayload = [];
9232        break;
9233
9234      default:
9235        lastProps = lastRawProps;
9236        nextProps = nextRawProps;
9237
9238        if (typeof lastProps.onClick !== 'function' && typeof nextProps.onClick === 'function') {
9239          // TODO: This cast may not be sound for SVG, MathML or custom elements.
9240          trapClickOnNonInteractiveElement(domElement);
9241        }
9242
9243        break;
9244    }
9245
9246    assertValidProps(tag, nextProps);
9247    var propKey;
9248    var styleName;
9249    var styleUpdates = null;
9250
9251    for (propKey in lastProps) {
9252      if (nextProps.hasOwnProperty(propKey) || !lastProps.hasOwnProperty(propKey) || lastProps[propKey] == null) {
9253        continue;
9254      }
9255
9256      if (propKey === STYLE) {
9257        var lastStyle = lastProps[propKey];
9258
9259        for (styleName in lastStyle) {
9260          if (lastStyle.hasOwnProperty(styleName)) {
9261            if (!styleUpdates) {
9262              styleUpdates = {};
9263            }
9264
9265            styleUpdates[styleName] = '';
9266          }
9267        }
9268      } else if (propKey === DANGEROUSLY_SET_INNER_HTML || propKey === CHILDREN) ; else if (propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey ==
vendor: 4,841 bytes, lines 9268-9390
9268= SUPPRESS_HYDRATION_WARNING) ; else if (propKey === AUTOFOCUS) ; else if (registrationNameDependencies.hasOwnProperty(propKey)) {
9269        // This is a special case. If any listener updates we need to ensure
9270        // that the "current" fiber pointer gets updated so we need a commit
9271        // to update this element.
9272        if (!updatePayload) {
9273          updatePayload = [];
9274        }
9275      } else {
9276        // For all other deleted properties we add it to the queue. We use
9277        // the allowed property list in the commit phase instead.
9278        (updatePayload = updatePayload || []).push(propKey, null);
9279      }
9280    }
9281
9282    for (propKey in nextProps) {
9283      var nextProp = nextProps[propKey];
9284      var lastProp = lastProps != null ? lastProps[propKey] : undefined;
9285
9286      if (!nextProps.hasOwnProperty(propKey) || nextProp === lastProp || nextProp == null && lastProp == null) {
9287        continue;
9288      }
9289
9290      if (propKey === STYLE) {
9291        {
9292          if (nextProp) {
9293            // Freeze the next style object so that we can assume it won't be
9294            // mutated. We have already warned for this in the past.
9295            Object.freeze(nextProp);
9296          }
9297        }
9298
9299        if (lastProp) {
9300          // Unset styles on `lastProp` but not on `nextProp`.
9301          for (styleName in lastProp) {
9302            if (lastProp.hasOwnProperty(styleName) && (!nextProp || !nextProp.hasOwnProperty(styleName))) {
9303              if (!styleUpdates) {
9304                styleUpdates = {};
9305              }
9306
9307              styleUpdates[styleName] = '';
9308            }
9309          } // Update styles that changed since `lastProp`.
9310
9311
9312          for (styleName in nextProp) {
9313            if (nextProp.hasOwnProperty(styleName) && lastProp[styleName] !== nextProp[styleName]) {
9314              if (!styleUpdates) {
9315                styleUpdates = {};
9316              }
9317
9318              styleUpdates[styleName] = nextProp[styleName];
9319            }
9320          }
9321        } else {
9322          // Relies on `updateStylesByID` not mutating `styleUpdates`.
9323          if (!styleUpdates) {
9324            if (!updatePayload) {
9325              updatePayload = [];
9326            }
9327
9328            updatePayload.push(propKey, styleUpdates);
9329          }
9330
9331          styleUpdates = nextProp;
9332        }
9333      } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {
9334        var nextHtml = nextProp ? nextProp[HTML$1] : undefined;
9335        var lastHtml = lastProp ? lastProp[HTML$1] : undefined;
9336
9337        if (nextHtml != null) {
9338          if (lastHtml !== nextHtml) {
9339            (updatePayload = updatePayload || []).push(propKey, nextHtml);
9340          }
9341        }
9342      } else if (propKey === CHILDREN) {
9343        if (typeof nextProp === 'string' || typeof nextProp === 'number') {
9344          (updatePayload = updatePayload || []).push(propKey, '' + nextProp);
9345        }
9346      } else if (propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING) ; else if (registrationNameDependencies.hasOwnProperty(propKey)) {
9347        if (nextProp != null) {
9348          // We eagerly listen to this even though we haven't committed yet.
9349          if ( typeof nextProp !== 'function') {
9350            warnForInvalidEventListener(propKey, nextProp);
9351          }
9352
9353          if (propKey === 'onScroll') {
9354            listenToNonDelegatedEvent('scroll', domElement);
9355          }
9356        }
9357
9358        if (!updatePayload && lastProp !== nextProp) {
9359          // This is a special case. If any listener updates we need to ensure
9360          // that the "current" props pointer gets updated so we need a commit
9361          // to update this element.
9362          updatePayload = [];
9363        }
9364      } else if (typeof nextProp === 'object' && nextProp !== null && nextProp.$$typeof === REACT_OPAQUE_ID_TYPE) {
9365        // If we encounter useOpaqueReference's opaque object, this means we are hydrating.
9366        // In this case, call the opaque object's toString function which generates a new client
9367        // ID so client and server IDs match and throws to rerender.
9368        nextProp.toString();
9369      } else {
9370        // For any other property we always add it to the queue and then we
9371        // filter it out using the allowed property list during the commit.
9372        (updatePayload = updatePayload || []).push(propKey, nextProp);
9373      }
9374    }
9375
9376    if (styleUpdates) {
9377      {
9378        validateShorthandPropertyCollisionInDev(styleUpdates, nextProps[STYLE]);
9379      }
9380
9381      (updatePayload = updatePayload || []).push(STYLE, styleUpdates);
9382    }
9383
9384    return updatePayload;
9385  } // Apply the diff.
9386
9387  function updateProperties(domElement, updatePayload, tag, lastRawProps, nextRawProps) {
9388    // Update checked *before* name.
9389    // In the middle of an update, it is possible to have multiple checked.
9390    // When a checked radio tries to change name, browser makes another radio's checked fal
vendor: 13,195 bytes, lines 9390-9756
9390se.
9391    if (tag === 'input' && nextRawProps.type === 'radio' && nextRawProps.name != null) {
9392      updateChecked(domElement, nextRawProps);
9393    }
9394
9395    var wasCustomComponentTag = isCustomComponent(tag, lastRawProps);
9396    var isCustomComponentTag = isCustomComponent(tag, nextRawProps); // Apply the diff.
9397
9398    updateDOMProperties(domElement, updatePayload, wasCustomComponentTag, isCustomComponentTag); // TODO: Ensure that an update gets scheduled if any of the special props
9399    // changed.
9400
9401    switch (tag) {
9402      case 'input':
9403        // Update the wrapper around inputs *after* updating props. This has to
9404        // happen after `updateDOMProperties`. Otherwise HTML5 input validations
9405        // raise warnings and prevent the new value from being assigned.
9406        updateWrapper(domElement, nextRawProps);
9407        break;
9408
9409      case 'textarea':
9410        updateWrapper$1(domElement, nextRawProps);
9411        break;
9412
9413      case 'select':
9414        // <select> value update needs to occur after <option> children
9415        // reconciliation
9416        postUpdateWrapper(domElement, nextRawProps);
9417        break;
9418    }
9419  }
9420
9421  function getPossibleStandardName(propName) {
9422    {
9423      var lowerCasedName = propName.toLowerCase();
9424
9425      if (!possibleStandardNames.hasOwnProperty(lowerCasedName)) {
9426        return null;
9427      }
9428
9429      return possibleStandardNames[lowerCasedName] || null;
9430    }
9431  }
9432
9433  function diffHydratedProperties(domElement, tag, rawProps, parentNamespace, rootContainerElement) {
9434    var isCustomComponentTag;
9435    var extraAttributeNames;
9436
9437    {
9438      suppressHydrationWarning = rawProps[SUPPRESS_HYDRATION_WARNING] === true;
9439      isCustomComponentTag = isCustomComponent(tag, rawProps);
9440      validatePropertiesInDevelopment(tag, rawProps);
9441    } // TODO: Make sure that we check isMounted before firing any of these events.
9442
9443
9444    switch (tag) {
9445      case 'dialog':
9446        listenToNonDelegatedEvent('cancel', domElement);
9447        listenToNonDelegatedEvent('close', domElement);
9448        break;
9449
9450      case 'iframe':
9451      case 'object':
9452      case 'embed':
9453        // We listen to this event in case to ensure emulated bubble
9454        // listeners still fire for the load event.
9455        listenToNonDelegatedEvent('load', domElement);
9456        break;
9457
9458      case 'video':
9459      case 'audio':
9460        // We listen to these events in case to ensure emulated bubble
9461        // listeners still fire for all the media events.
9462        for (var i = 0; i < mediaEventTypes.length; i++) {
9463          listenToNonDelegatedEvent(mediaEventTypes[i], domElement);
9464        }
9465
9466        break;
9467
9468      case 'source':
9469        // We listen to this event in case to ensure emulated bubble
9470        // listeners still fire for the error event.
9471        listenToNonDelegatedEvent('error', domElement);
9472        break;
9473
9474      case 'img':
9475      case 'image':
9476      case 'link':
9477        // We listen to these events in case to ensure emulated bubble
9478        // listeners still fire for error and load events.
9479        listenToNonDelegatedEvent('error', domElement);
9480        listenToNonDelegatedEvent('load', domElement);
9481        break;
9482
9483      case 'details':
9484        // We listen to this event in case to ensure emulated bubble
9485        // listeners still fire for the toggle event.
9486        listenToNonDelegatedEvent('toggle', domElement);
9487        break;
9488
9489      case 'input':
9490        initWrapperState(domElement, rawProps); // We listen to this event in case to ensure emulated bubble
9491        // listeners still fire for the invalid event.
9492
9493        listenToNonDelegatedEvent('invalid', domElement);
9494
9495        break;
9496
9497      case 'option':
9498        validateProps(domElement, rawProps);
9499        break;
9500
9501      case 'select':
9502        initWrapperState$1(domElement, rawProps); // We listen to this event in case to ensure emulated bubble
9503        // listeners still fire for the invalid event.
9504
9505        listenToNonDelegatedEvent('invalid', domElement);
9506
9507        break;
9508
9509      case 'textarea':
9510        initWrapperState$2(domElement, rawProps); // We listen to this event in case to ensure emulated bubble
9511        // listeners still fire for the invalid event.
9512
9513        listenToNonDelegatedEvent('invalid', domElement);
9514
9515        break;
9516    }
9517
9518    assertValidProps(tag, rawProps);
9519
9520    {
9521      extraAttributeNames = new Set();
9522      var attributes = domElement.attributes;
9523
9524      for (var _i = 0; _i < attributes.length; _i++) {
9525        var name = attributes[_i].name.toLowerCase();
9526
9527        switch (name) {
9528          // Built-in SSR attribute is allowed
9529          case 'data-reactroot':
9530            break;
9531          // Controlled attributes are not validated
9532          // TODO: Only ignore them on controlled tags.
9533
9534          case 'value':
9535            break;
9536
9537          case 'checked':
9538            break;
9539
9540          case 'selected':
9541            break;
9542
9543          default:
9544            // Intentionally use the original name.
9545            // See discussion in https://github.com/facebook/react/pull/10676.
9546            extraAttributeNames.add(attributes[_i].name);
9547        }
9548      }
9549    }
9550
9551    var updatePayload = null;
9552
9553    for (var propKey in rawProps) {
9554      if (!rawProps.hasOwnProperty(propKey)) {
9555        continue;
9556      }
9557
9558      var nextProp = rawProps[propKey];
9559
9560      if (propKey === CHILDREN) {
9561        // For text content children we compare against textContent. This
9562        // might match additional HTML that is hidden when we read it using
9563        // textContent. E.g. "foo" will match "f<span>oo</span>" but that still
9564        // satisfies our requirement. Our requirement is not to produce perfect
9565        // HTML and attributes. Ideally we should preserve structure but it's
9566        // ok not to if the visible content is still enough to indicate what
9567        // even listeners these nodes might be wired up to.
9568        // TODO: Warn if there is more than a single textNode as a child.
9569        // TODO: Should we use domElement.firstChild.nodeValue to compare?
9570        if (typeof nextProp === 'string') {
9571          if (domElement.textContent !== nextProp) {
9572            if ( !suppressHydrationWarning) {
9573              warnForTextDifference(domElement.textContent, nextProp);
9574            }
9575
9576            updatePayload = [CHILDREN, nextProp];
9577          }
9578        } else if (typeof nextProp === 'number') {
9579          if (domElement.textContent !== '' + nextProp) {
9580            if ( !suppressHydrationWarning) {
9581              warnForTextDifference(domElement.textContent, nextProp);
9582            }
9583
9584            updatePayload = [CHILDREN, '' + nextProp];
9585          }
9586        }
9587      } else if (registrationNameDependencies.hasOwnProperty(propKey)) {
9588        if (nextProp != null) {
9589          if ( typeof nextProp !== 'function') {
9590            warnForInvalidEventListener(propKey, nextProp);
9591          }
9592
9593          if (propKey === 'onScroll') {
9594            listenToNonDelegatedEvent('scroll', domElement);
9595          }
9596        }
9597      } else if ( // Convince Flow we've calculated it (it's DEV-only in this method.)
9598      typeof isCustomComponentTag === 'boolean') {
9599        // Validate that the properties correspond to their expected values.
9600        var serverValue = void 0;
9601        var propertyInfo = getPropertyInfo(propKey);
9602
9603        if (suppressHydrationWarning) ; else if (propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING || // Controlled attributes are not validated
9604        // TODO: Only ignore them on controlled tags.
9605        propKey === 'value' || propKey === 'checked' || propKey === 'selected') ; else if (propKey === DANGEROUSLY_SET_INNER_HTML) {
9606          var serverHTML = domElement.innerHTML;
9607          var nextHtml = nextProp ? nextProp[HTML$1] : undefined;
9608
9609          if (nextHtml != null) {
9610            var expectedHTML = normalizeHTML(domElement, nextHtml);
9611
9612            if (expectedHTML !== serverHTML) {
9613              warnForPropDifference(propKey, serverHTML, expectedHTML);
9614            }
9615          }
9616        } else if (propKey === STYLE) {
9617          // $FlowFixMe - Should be inferred as not undefined.
9618          extraAttributeNames.delete(propKey);
9619
9620          if (canDiffStyleForHydrationWarning) {
9621            var expectedStyle = createDangerousStringForStyles(nextProp);
9622            serverValue = domElement.getAttribute('style');
9623
9624            if (expectedStyle !== serverValue) {
9625              warnForPropDifference(propKey, serverValue, expectedStyle);
9626            }
9627          }
9628        } else if (isCustomComponentTag) {
9629          // $FlowFixMe - Should be inferred as not undefined.
9630          extraAttributeNames.delete(propKey.toLowerCase());
9631          serverValue = getValueForAttribute(domElement, propKey, nextProp);
9632
9633          if (nextProp !== serverValue) {
9634            warnForPropDifference(propKey, serverValue, nextProp);
9635          }
9636        } else if (!shouldIgnoreAttribute(propKey, propertyInfo, isCustomComponentTag) && !shouldRemoveAttribute(propKey, nextProp, propertyInfo, isCustomComponentTag)) {
9637          var isMismatchDueToBadCasing = false;
9638
9639          if (propertyInfo !== null) {
9640            // $FlowFixMe - Should be inferred as not undefined.
9641            extraAttributeNames.delete(propertyInfo.attributeName);
9642            serverValue = getValueForProperty(domElement, propKey, nextProp, propertyInfo);
9643          } else {
9644            var ownNamespace = parentNamespace;
9645
9646            if (ownNamespace === HTML_NAMESPACE$1) {
9647              ownNamespace = getIntrinsicNamespace(tag);
9648            }
9649
9650            if (ownNamespace === HTML_NAMESPACE$1) {
9651              // $FlowFixMe - Should be inferred as not undefined.
9652              extraAttributeNames.delete(propKey.toLowerCase());
9653            } else {
9654              var standardName = getPossibleStandardName(propKey);
9655
9656              if (standardName !== null && standardName !== propKey) {
9657                // If an SVG prop is supplied with bad casing, it will
9658                // be successfully parsed from HTML, but will produce a mismatch
9659                // (and would be incorrectly rendered on the client).
9660                // However, we already warn about bad casing elsewhere.
9661                // So we'll skip the misleading extra mismatch warning in this case.
9662                isMismatchDueToBadCasing = true; // $FlowFixMe - Should be inferred as not undefined.
9663
9664                extraAttributeNames.delete(standardName);
9665              } // $FlowFixMe - Should be inferred as not undefined.
9666
9667
9668              extraAttributeNames.delete(propKey);
9669            }
9670
9671            serverValue = getValueForAttribute(domElement, propKey, nextProp);
9672          }
9673
9674          if (nextProp !== serverValue && !isMismatchDueToBadCasing) {
9675            warnForPropDifference(propKey, serverValue, nextProp);
9676          }
9677        }
9678      }
9679    }
9680
9681    {
9682      // $FlowFixMe - Should be inferred as not undefined.
9683      if (extraAttributeNames.size > 0 && !suppressHydrationWarning) {
9684        // $FlowFixMe - Should be inferred as not undefined.
9685        warnForExtraAttributes(extraAttributeNames);
9686      }
9687    }
9688
9689    switch (tag) {
9690      case 'input':
9691        // TODO: Make sure we check if this is still unmounted or do any clean
9692        // up necessary since we never stop tracking anymore.
9693        track(domElement);
9694        postMountWrapper(domElement, rawProps, true);
9695        break;
9696
9697      case 'textarea':
9698        // TODO: Make sure we check if this is still unmounted or do any clean
9699        // up necessary since we never stop tracking anymore.
9700        track(domElement);
9701        postMountWrapper$3(domElement);
9702        break;
9703
9704      case 'select':
9705      case 'option':
9706        // For input and textarea we current always set the value property at
9707        // post mount to force it to diverge from attributes. However, for
9708        // option and select we don't quite do the same thing and select
9709        // is not resilient to the DOM state changing so we don't do that here.
9710        // TODO: Consider not doing this for input and textarea.
9711        break;
9712
9713      default:
9714        if (typeof rawProps.onClick === 'function') {
9715          // TODO: This cast may not be sound for SVG, MathML or custom elements.
9716          trapClickOnNonInteractiveElement(domElement);
9717        }
9718
9719        break;
9720    }
9721
9722    return updatePayload;
9723  }
9724  function diffHydratedText(textNode, text) {
9725    var isDifferent = textNode.nodeValue !== text;
9726    return isDifferent;
9727  }
9728  function warnForUnmatchedText(textNode, text) {
9729    {
9730      warnForTextDifference(textNode.nodeValue, text);
9731    }
9732  }
9733  function warnForDeletedHydratableElement(parentNode, child) {
9734    {
9735      if (didWarnInvalidHydration) {
9736        return;
9737      }
9738
9739      didWarnInvalidHydration = true;
9740
9741      error('Did not expect server HTML to contain a <%s> in <%s>.', child.nodeName.toLowerCase(), parentNode.nodeName.toLowerCase());
9742    }
9743  }
9744  function warnForDeletedHydratableText(parentNode, child) {
9745    {
9746      if (didWarnInvalidHydration) {
9747        return;
9748      }
9749
9750      didWarnInvalidHydration = true;
9751
9752      error('Did not expect server HTML to contain the text node "%s" in <%s>.', child.nodeValue, parentNode.nodeName.toLowerCase());
9753    }
9754  }
9755  function warnForInsertedHydratedElement(parentNode, tag, props) {
9756    {
vendor: 2,519 bytes, lines 9757-9817
9757      if (didWarnInvalidHydration) {
9758        return;
9759      }
9760
9761      didWarnInvalidHydration = true;
9762
9763      error('Expected server HTML to contain a matching <%s> in <%s>.', tag, parentNode.nodeName.toLowerCase());
9764    }
9765  }
9766  function warnForInsertedHydratedText(parentNode, text) {
9767    {
9768      if (text === '') {
9769        // We expect to insert empty text nodes since they're not represented in
9770        // the HTML.
9771        // TODO: Remove this special case if we can just avoid inserting empty
9772        // text nodes.
9773        return;
9774      }
9775
9776      if (didWarnInvalidHydration) {
9777        return;
9778      }
9779
9780      didWarnInvalidHydration = true;
9781
9782      error('Expected server HTML to contain a matching text node for "%s" in <%s>.', text, parentNode.nodeName.toLowerCase());
9783    }
9784  }
9785  function restoreControlledState$3(domElement, tag, props) {
9786    switch (tag) {
9787      case 'input':
9788        restoreControlledState(domElement, props);
9789        return;
9790
9791      case 'textarea':
9792        restoreControlledState$2(domElement, props);
9793        return;
9794
9795      case 'select':
9796        restoreControlledState$1(domElement, props);
9797        return;
9798    }
9799  }
9800
9801  var validateDOMNesting = function () {};
9802
9803  var updatedAncestorInfo = function () {};
9804
9805  {
9806    // This validation code was written based on the HTML5 parsing spec:
9807    // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope
9808    //
9809    // Note: this does not catch all invalid nesting, nor does it try to (as it's
9810    // not clear what practical benefit doing so provides); instead, we warn only
9811    // for cases where the parser will give a parse tree differing from what React
9812    // intended. For example, <b><div></div></b> is invalid but we don't warn
9813    // because it still parses correctly; we do warn for other cases like nested
9814    // <p> tags where the beginning of the second element implicitly closes the
9815    // first, causing a confusing mess.
9816    // https://html.spec.whatwg.org/multipage/syntax.html#special
9817    var specialTags = ['address', 'applet', 'area', 'article', 'aside', 'base', 'basefont', 'bgsound', 'blockquote', 'body', 'br', 'button', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dir', 'div', 'dl', 'dt', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'iframe', 'img', 'input', 'isindex', 'li', 'link', 'listing', 'main', 'marquee', 'menu', 'menuitem', 'meta', 'nav', 'noembed', 'noframes', 'n
vendor: 30,625 bytes, lines 9817-10661
9817oscript', 'object', 'ol', 'p', 'param', 'plaintext', 'pre', 'script', 'section', 'select', 'source', 'style', 'summary', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul', 'wbr', 'xmp']; // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope
9818
9819    var inScopeTags = ['applet', 'caption', 'html', 'table', 'td', 'th', 'marquee', 'object', 'template', // https://html.spec.whatwg.org/multipage/syntax.html#html-integration-point
9820    // TODO: Distinguish by namespace here -- for <title>, including it here
9821    // errs on the side of fewer warnings
9822    'foreignObject', 'desc', 'title']; // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-button-scope
9823
9824    var buttonScopeTags = inScopeTags.concat(['button']); // https://html.spec.whatwg.org/multipage/syntax.html#generate-implied-end-tags
9825
9826    var impliedEndTags = ['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'];
9827    var emptyAncestorInfo = {
9828      current: null,
9829      formTag: null,
9830      aTagInScope: null,
9831      buttonTagInScope: null,
9832      nobrTagInScope: null,
9833      pTagInButtonScope: null,
9834      listItemTagAutoclosing: null,
9835      dlItemTagAutoclosing: null
9836    };
9837
9838    updatedAncestorInfo = function (oldInfo, tag) {
9839      var ancestorInfo = _assign({}, oldInfo || emptyAncestorInfo);
9840
9841      var info = {
9842        tag: tag
9843      };
9844
9845      if (inScopeTags.indexOf(tag) !== -1) {
9846        ancestorInfo.aTagInScope = null;
9847        ancestorInfo.buttonTagInScope = null;
9848        ancestorInfo.nobrTagInScope = null;
9849      }
9850
9851      if (buttonScopeTags.indexOf(tag) !== -1) {
9852        ancestorInfo.pTagInButtonScope = null;
9853      } // See rules for 'li', 'dd', 'dt' start tags in
9854      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody
9855
9856
9857      if (specialTags.indexOf(tag) !== -1 && tag !== 'address' && tag !== 'div' && tag !== 'p') {
9858        ancestorInfo.listItemTagAutoclosing = null;
9859        ancestorInfo.dlItemTagAutoclosing = null;
9860      }
9861
9862      ancestorInfo.current = info;
9863
9864      if (tag === 'form') {
9865        ancestorInfo.formTag = info;
9866      }
9867
9868      if (tag === 'a') {
9869        ancestorInfo.aTagInScope = info;
9870      }
9871
9872      if (tag === 'button') {
9873        ancestorInfo.buttonTagInScope = info;
9874      }
9875
9876      if (tag === 'nobr') {
9877        ancestorInfo.nobrTagInScope = info;
9878      }
9879
9880      if (tag === 'p') {
9881        ancestorInfo.pTagInButtonScope = info;
9882      }
9883
9884      if (tag === 'li') {
9885        ancestorInfo.listItemTagAutoclosing = info;
9886      }
9887
9888      if (tag === 'dd' || tag === 'dt') {
9889        ancestorInfo.dlItemTagAutoclosing = info;
9890      }
9891
9892      return ancestorInfo;
9893    };
9894    /**
9895     * Returns whether
9896     */
9897
9898
9899    var isTagValidWithParent = function (tag, parentTag) {
9900      // First, let's check if we're in an unusual parsing mode...
9901      switch (parentTag) {
9902        // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inselect
9903        case 'select':
9904          return tag === 'option' || tag === 'optgroup' || tag === '#text';
9905
9906        case 'optgroup':
9907          return tag === 'option' || tag === '#text';
9908        // Strictly speaking, seeing an <option> doesn't mean we're in a <select>
9909        // but
9910
9911        case 'option':
9912          return tag === '#text';
9913        // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intd
9914        // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incaption
9915        // No special behavior since these rules fall back to "in body" mode for
9916        // all except special table nodes which cause bad parsing behavior anyway.
9917        // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intr
9918
9919        case 'tr':
9920          return tag === 'th' || tag === 'td' || tag === 'style' || tag === 'script' || tag === 'template';
9921        // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intbody
9922
9923        case 'tbody':
9924        case 'thead':
9925        case 'tfoot':
9926          return tag === 'tr' || tag === 'style' || tag === 'script' || tag === 'template';
9927        // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incolgroup
9928
9929        case 'colgroup':
9930          return tag === 'col' || tag === 'template';
9931        // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intable
9932
9933        case 'table':
9934          return tag === 'caption' || tag === 'colgroup' || tag === 'tbody' || tag === 'tfoot' || tag === 'thead' || tag === 'style' || tag === 'script' || tag === 'template';
9935        // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inhead
9936
9937        case 'head':
9938          return tag === 'base' || tag === 'basefont' || tag === 'bgsound' || tag === 'link' || tag === 'meta' || tag === 'title' || tag === 'noscript' || tag === 'noframes' || tag === 'style' || tag === 'script' || tag === 'template';
9939        // https://html.spec.whatwg.org/multipage/semantics.html#the-html-element
9940
9941        case 'html':
9942          return tag === 'head' || tag === 'body' || tag === 'frameset';
9943
9944        case 'frameset':
9945          return tag === 'frame';
9946
9947        case '#document':
9948          return tag === 'html';
9949      } // Probably in the "in body" parsing mode, so we outlaw only tag combos
9950      // where the parsing rules cause implicit opens or closes to be added.
9951      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody
9952
9953
9954      switch (tag) {
9955        case 'h1':
9956        case 'h2':
9957        case 'h3':
9958        case 'h4':
9959        case 'h5':
9960        case 'h6':
9961          return parentTag !== 'h1' && parentTag !== 'h2' && parentTag !== 'h3' && parentTag !== 'h4' && parentTag !== 'h5' && parentTag !== 'h6';
9962
9963        case 'rp':
9964        case 'rt':
9965          return impliedEndTags.indexOf(parentTag) === -1;
9966
9967        case 'body':
9968        case 'caption':
9969        case 'col':
9970        case 'colgroup':
9971        case 'frameset':
9972        case 'frame':
9973        case 'head':
9974        case 'html':
9975        case 'tbody':
9976        case 'td':
9977        case 'tfoot':
9978        case 'th':
9979        case 'thead':
9980        case 'tr':
9981          // These tags are only valid with a few parents that have special child
9982          // parsing rules -- if we're down here, then none of those matched and
9983          // so we allow it only if we don't know what the parent is, as all other
9984          // cases are invalid.
9985          return parentTag == null;
9986      }
9987
9988      return true;
9989    };
9990    /**
9991     * Returns whether
9992     */
9993
9994
9995    var findInvalidAncestorForTag = function (tag, ancestorInfo) {
9996      switch (tag) {
9997        case 'address':
9998        case 'article':
9999        case 'aside':
10000        case 'blockquote':
10001        case 'center':
10002        case 'details':
10003        case 'dialog':
10004        case 'dir':
10005        case 'div':
10006        case 'dl':
10007        case 'fieldset':
10008        case 'figcaption':
10009        case 'figure':
10010        case 'footer':
10011        case 'header':
10012        case 'hgroup':
10013        case 'main':
10014        case 'menu':
10015        case 'nav':
10016        case 'ol':
10017        case 'p':
10018        case 'section':
10019        case 'summary':
10020        case 'ul':
10021        case 'pre':
10022        case 'listing':
10023        case 'table':
10024        case 'hr':
10025        case 'xmp':
10026        case 'h1':
10027        case 'h2':
10028        case 'h3':
10029        case 'h4':
10030        case 'h5':
10031        case 'h6':
10032          return ancestorInfo.pTagInButtonScope;
10033
10034        case 'form':
10035          return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;
10036
10037        case 'li':
10038          return ancestorInfo.listItemTagAutoclosing;
10039
10040        case 'dd':
10041        case 'dt':
10042          return ancestorInfo.dlItemTagAutoclosing;
10043
10044        case 'button':
10045          return ancestorInfo.buttonTagInScope;
10046
10047        case 'a':
10048          // Spec says something about storing a list of markers, but it sounds
10049          // equivalent to this check.
10050          return ancestorInfo.aTagInScope;
10051
10052        case 'nobr':
10053          return ancestorInfo.nobrTagInScope;
10054      }
10055
10056      return null;
10057    };
10058
10059    var didWarn$1 = {};
10060
10061    validateDOMNesting = function (childTag, childText, ancestorInfo) {
10062      ancestorInfo = ancestorInfo || emptyAncestorInfo;
10063      var parentInfo = ancestorInfo.current;
10064      var parentTag = parentInfo && parentInfo.tag;
10065
10066      if (childText != null) {
10067        if (childTag != null) {
10068          error('validateDOMNesting: when childText is passed, childTag should be null');
10069        }
10070
10071        childTag = '#text';
10072      }
10073
10074      var invalidParent = isTagValidWithParent(childTag, parentTag) ? null : parentInfo;
10075      var invalidAncestor = invalidParent ? null : findInvalidAncestorForTag(childTag, ancestorInfo);
10076      var invalidParentOrAncestor = invalidParent || invalidAncestor;
10077
10078      if (!invalidParentOrAncestor) {
10079        return;
10080      }
10081
10082      var ancestorTag = invalidParentOrAncestor.tag;
10083      var warnKey = !!invalidParent + '|' + childTag + '|' + ancestorTag;
10084
10085      if (didWarn$1[warnKey]) {
10086        return;
10087      }
10088
10089      didWarn$1[warnKey] = true;
10090      var tagDisplayName = childTag;
10091      var whitespaceInfo = '';
10092
10093      if (childTag === '#text') {
10094        if (/\S/.test(childText)) {
10095          tagDisplayName = 'Text nodes';
10096        } else {
10097          tagDisplayName = 'Whitespace text nodes';
10098          whitespaceInfo = " Make sure you don't have any extra whitespace between tags on " + 'each line of your source code.';
10099        }
10100      } else {
10101        tagDisplayName = '<' + childTag + '>';
10102      }
10103
10104      if (invalidParent) {
10105        var info = '';
10106
10107        if (ancestorTag === 'table' && childTag === 'tr') {
10108          info += ' Add a <tbody>, <thead> or <tfoot> to your code to match the DOM tree generated by ' + 'the browser.';
10109        }
10110
10111        error('validateDOMNesting(...): %s cannot appear as a child of <%s>.%s%s', tagDisplayName, ancestorTag, whitespaceInfo, info);
10112      } else {
10113        error('validateDOMNesting(...): %s cannot appear as a descendant of ' + '<%s>.', tagDisplayName, ancestorTag);
10114      }
10115    };
10116  }
10117
10118  var SUPPRESS_HYDRATION_WARNING$1;
10119
10120  {
10121    SUPPRESS_HYDRATION_WARNING$1 = 'suppressHydrationWarning';
10122  }
10123
10124  var SUSPENSE_START_DATA = '$';
10125  var SUSPENSE_END_DATA = '/$';
10126  var SUSPENSE_PENDING_START_DATA = '$?';
10127  var SUSPENSE_FALLBACK_START_DATA = '$!';
10128  var STYLE$1 = 'style';
10129  var eventsEnabled = null;
10130  var selectionInformation = null;
10131
10132  function shouldAutoFocusHostComponent(type, props) {
10133    switch (type) {
10134      case 'button':
10135      case 'input':
10136      case 'select':
10137      case 'textarea':
10138        return !!props.autoFocus;
10139    }
10140
10141    return false;
10142  }
10143  function getRootHostContext(rootContainerInstance) {
10144    var type;
10145    var namespace;
10146    var nodeType = rootContainerInstance.nodeType;
10147
10148    switch (nodeType) {
10149      case DOCUMENT_NODE:
10150      case DOCUMENT_FRAGMENT_NODE:
10151        {
10152          type = nodeType === DOCUMENT_NODE ? '#document' : '#fragment';
10153          var root = rootContainerInstance.documentElement;
10154          namespace = root ? root.namespaceURI : getChildNamespace(null, '');
10155          break;
10156        }
10157
10158      default:
10159        {
10160          var container = nodeType === COMMENT_NODE ? rootContainerInstance.parentNode : rootContainerInstance;
10161          var ownNamespace = container.namespaceURI || null;
10162          type = container.tagName;
10163          namespace = getChildNamespace(ownNamespace, type);
10164          break;
10165        }
10166    }
10167
10168    {
10169      var validatedTag = type.toLowerCase();
10170      var ancestorInfo = updatedAncestorInfo(null, validatedTag);
10171      return {
10172        namespace: namespace,
10173        ancestorInfo: ancestorInfo
10174      };
10175    }
10176  }
10177  function getChildHostContext(parentHostContext, type, rootContainerInstance) {
10178    {
10179      var parentHostContextDev = parentHostContext;
10180      var namespace = getChildNamespace(parentHostContextDev.namespace, type);
10181      var ancestorInfo = updatedAncestorInfo(parentHostContextDev.ancestorInfo, type);
10182      return {
10183        namespace: namespace,
10184        ancestorInfo: ancestorInfo
10185      };
10186    }
10187  }
10188  function getPublicInstance(instance) {
10189    return instance;
10190  }
10191  function prepareForCommit(containerInfo) {
10192    eventsEnabled = isEnabled();
10193    selectionInformation = getSelectionInformation();
10194    var activeInstance = null;
10195
10196    setEnabled(false);
10197    return activeInstance;
10198  }
10199  function resetAfterCommit(containerInfo) {
10200    restoreSelection(selectionInformation);
10201    setEnabled(eventsEnabled);
10202    eventsEnabled = null;
10203    selectionInformation = null;
10204  }
10205  function createInstance(type, props, rootContainerInstance, hostContext, internalInstanceHandle) {
10206    var parentNamespace;
10207
10208    {
10209      // TODO: take namespace into account when validating.
10210      var hostContextDev = hostContext;
10211      validateDOMNesting(type, null, hostContextDev.ancestorInfo);
10212
10213      if (typeof props.children === 'string' || typeof props.children === 'number') {
10214        var string = '' + props.children;
10215        var ownAncestorInfo = updatedAncestorInfo(hostContextDev.ancestorInfo, type);
10216        validateDOMNesting(null, string, ownAncestorInfo);
10217      }
10218
10219      parentNamespace = hostContextDev.namespace;
10220    }
10221
10222    var domElement = createElement(type, props, rootContainerInstance, parentNamespace);
10223    precacheFiberNode(internalInstanceHandle, domElement);
10224    updateFiberProps(domElement, props);
10225    return domElement;
10226  }
10227  function appendInitialChild(parentInstance, child) {
10228    parentInstance.appendChild(child);
10229  }
10230  function finalizeInitialChildren(domElement, type, props, rootContainerInstance, hostContext) {
10231    setInitialProperties(domElement, type, props, rootContainerInstance);
10232    return shouldAutoFocusHostComponent(type, props);
10233  }
10234  function prepareUpdate(domElement, type, oldProps, newProps, rootContainerInstance, hostContext) {
10235    {
10236      var hostContextDev = hostContext;
10237
10238      if (typeof newProps.children !== typeof oldProps.children && (typeof newProps.children === 'string' || typeof newProps.children === 'number')) {
10239        var string = '' + newProps.children;
10240        var ownAncestorInfo = updatedAncestorInfo(hostContextDev.ancestorInfo, type);
10241        validateDOMNesting(null, string, ownAncestorInfo);
10242      }
10243    }
10244
10245    return diffProperties(domElement, type, oldProps, newProps);
10246  }
10247  function shouldSetTextContent(type, props) {
10248    return type === 'textarea' || type === 'option' || type === 'noscript' || typeof props.children === 'string' || typeof props.children === 'number' || typeof props.dangerouslySetInnerHTML === 'object' && props.dangerouslySetInnerHTML !== null && props.dangerouslySetInnerHTML.__html != null;
10249  }
10250  function createTextInstance(text, rootContainerInstance, hostContext, internalInstanceHandle) {
10251    {
10252      var hostContextDev = hostContext;
10253      validateDOMNesting(null, text, hostContextDev.ancestorInfo);
10254    }
10255
10256    var textNode = createTextNode(text, rootContainerInstance);
10257    precacheFiberNode(internalInstanceHandle, textNode);
10258    return textNode;
10259  }
10260  // if a component just imports ReactDOM (e.g. for findDOMNode).
10261  // Some environments might not have setTimeout or clearTimeout.
10262
10263  var scheduleTimeout = typeof setTimeout === 'function' ? setTimeout : undefined;
10264  var cancelTimeout = typeof clearTimeout === 'function' ? clearTimeout : undefined;
10265  var noTimeout = -1; // -------------------
10266  function commitMount(domElement, type, newProps, internalInstanceHandle) {
10267    // Despite the naming that might imply otherwise, this method only
10268    // fires if there is an `Update` effect scheduled during mounting.
10269    // This happens if `finalizeInitialChildren` returns `true` (which it
10270    // does to implement the `autoFocus` attribute on the client). But
10271    // there are also other cases when this might happen (such as patching
10272    // up text content during hydration mismatch). So we'll check this again.
10273    if (shouldAutoFocusHostComponent(type, newProps)) {
10274      domElement.focus();
10275    }
10276  }
10277  function commitUpdate(domElement, updatePayload, type, oldProps, newProps, internalInstanceHandle) {
10278    // Update the props handle so that we know which props are the ones with
10279    // with current event handlers.
10280    updateFiberProps(domElement, newProps); // Apply the diff to the DOM node.
10281
10282    updateProperties(domElement, updatePayload, type, oldProps, newProps);
10283  }
10284  function resetTextContent(domElement) {
10285    setTextContent(domElement, '');
10286  }
10287  function commitTextUpdate(textInstance, oldText, newText) {
10288    textInstance.nodeValue = newText;
10289  }
10290  function appendChild(parentInstance, child) {
10291    parentInstance.appendChild(child);
10292  }
10293  function appendChildToContainer(container, child) {
10294    var parentNode;
10295
10296    if (container.nodeType === COMMENT_NODE) {
10297      parentNode = container.parentNode;
10298      parentNode.insertBefore(child, container);
10299    } else {
10300      parentNode = container;
10301      parentNode.appendChild(child);
10302    } // This container might be used for a portal.
10303    // If something inside a portal is clicked, that click should bubble
10304    // through the React tree. However, on Mobile Safari the click would
10305    // never bubble through the *DOM* tree unless an ancestor with onclick
10306    // event exists. So we wouldn't see it and dispatch it.
10307    // This is why we ensure that non React root containers have inline onclick
10308    // defined.
10309    // https://github.com/facebook/react/issues/11918
10310
10311
10312    var reactRootContainer = container._reactRootContainer;
10313
10314    if ((reactRootContainer === null || reactRootContainer === undefined) && parentNode.onclick === null) {
10315      // TODO: This cast may not be sound for SVG, MathML or custom elements.
10316      trapClickOnNonInteractiveElement(parentNode);
10317    }
10318  }
10319  function insertBefore(parentInstance, child, beforeChild) {
10320    parentInstance.insertBefore(child, beforeChild);
10321  }
10322  function insertInContainerBefore(container, child, beforeChild) {
10323    if (container.nodeType === COMMENT_NODE) {
10324      container.parentNode.insertBefore(child, beforeChild);
10325    } else {
10326      container.insertBefore(child, beforeChild);
10327    }
10328  }
10329
10330  function removeChild(parentInstance, child) {
10331    parentInstance.removeChild(child);
10332  }
10333  function removeChildFromContainer(container, child) {
10334    if (container.nodeType === COMMENT_NODE) {
10335      container.parentNode.removeChild(child);
10336    } else {
10337      container.removeChild(child);
10338    }
10339  }
10340  function hideInstance(instance) {
10341    // TODO: Does this work for all element types? What about MathML? Should we
10342    // pass host context to this method?
10343    instance = instance;
10344    var style = instance.style;
10345
10346    if (typeof style.setProperty === 'function') {
10347      style.setProperty('display', 'none', 'important');
10348    } else {
10349      style.display = 'none';
10350    }
10351  }
10352  function hideTextInstance(textInstance) {
10353    textInstance.nodeValue = '';
10354  }
10355  function unhideInstance(instance, props) {
10356    instance = instance;
10357    var styleProp = props[STYLE$1];
10358    var display = styleProp !== undefined && styleProp !== null && styleProp.hasOwnProperty('display') ? styleProp.display : null;
10359    instance.style.display = dangerousStyleValue('display', display);
10360  }
10361  function unhideTextInstance(textInstance, text) {
10362    textInstance.nodeValue = text;
10363  }
10364  function clearContainer(container) {
10365    if (container.nodeType === ELEMENT_NODE) {
10366      container.textContent = '';
10367    } else if (container.nodeType === DOCUMENT_NODE) {
10368      var body = container.body;
10369
10370      if (body != null) {
10371        body.textContent = '';
10372      }
10373    }
10374  } // -------------------
10375  function canHydrateInstance(instance, type, props) {
10376    if (instance.nodeType !== ELEMENT_NODE || type.toLowerCase() !== instance.nodeName.toLowerCase()) {
10377      return null;
10378    } // This has now been refined to an element node.
10379
10380
10381    return instance;
10382  }
10383  function canHydrateTextInstance(instance, text) {
10384    if (text === '' || instance.nodeType !== TEXT_NODE) {
10385      // Empty strings are not parsed by HTML so there won't be a correct match here.
10386      return null;
10387    } // This has now been refined to a text node.
10388
10389
10390    return instance;
10391  }
10392  function isSuspenseInstancePending(instance) {
10393    return instance.data === SUSPENSE_PENDING_START_DATA;
10394  }
10395  function isSuspenseInstanceFallback(instance) {
10396    return instance.data === SUSPENSE_FALLBACK_START_DATA;
10397  }
10398
10399  function getNextHydratable(node) {
10400    // Skip non-hydratable nodes.
10401    for (; node != null; node = node.nextSibling) {
10402      var nodeType = node.nodeType;
10403
10404      if (nodeType === ELEMENT_NODE || nodeType === TEXT_NODE) {
10405        break;
10406      }
10407    }
10408
10409    return node;
10410  }
10411
10412  function getNextHydratableSibling(instance) {
10413    return getNextHydratable(instance.nextSibling);
10414  }
10415  function getFirstHydratableChild(parentInstance) {
10416    return getNextHydratable(parentInstance.firstChild);
10417  }
10418  function hydrateInstance(instance, type, props, rootContainerInstance, hostContext, internalInstanceHandle) {
10419    precacheFiberNode(internalInstanceHandle, instance); // TODO: Possibly defer this until the commit phase where all the events
10420    // get attached.
10421
10422    updateFiberProps(instance, props);
10423    var parentNamespace;
10424
10425    {
10426      var hostContextDev = hostContext;
10427      parentNamespace = hostContextDev.namespace;
10428    }
10429
10430    return diffHydratedProperties(instance, type, props, parentNamespace);
10431  }
10432  function hydrateTextInstance(textInstance, text, internalInstanceHandle) {
10433    precacheFiberNode(internalInstanceHandle, textInstance);
10434    return diffHydratedText(textInstance, text);
10435  }
10436  function getNextHydratableInstanceAfterSuspenseInstance(suspenseInstance) {
10437    var node = suspenseInstance.nextSibling; // Skip past all nodes within this suspense boundary.
10438    // There might be nested nodes so we need to keep track of how
10439    // deep we are and only break out when we're back on top.
10440
10441    var depth = 0;
10442
10443    while (node) {
10444      if (node.nodeType === COMMENT_NODE) {
10445        var data = node.data;
10446
10447        if (data === SUSPENSE_END_DATA) {
10448          if (depth === 0) {
10449            return getNextHydratableSibling(node);
10450          } else {
10451            depth--;
10452          }
10453        } else if (data === SUSPENSE_START_DATA || data === SUSPENSE_FALLBACK_START_DATA || data === SUSPENSE_PENDING_START_DATA) {
10454          depth++;
10455        }
10456      }
10457
10458      node = node.nextSibling;
10459    } // TODO: Warn, we didn't find the end comment boundary.
10460
10461
10462    return null;
10463  } // Returns the SuspenseInstance if this node is a direct child of a
10464  // SuspenseInstance. I.e. if its previous sibling is a Comment with
10465  // SUSPENSE_x_START_DATA. Otherwise, null.
10466
10467  function getParentSuspenseInstance(targetInstance) {
10468    var node = targetInstance.previousSibling; // Skip past all nodes within this suspense boundary.
10469    // There might be nested nodes so we need to keep track of how
10470    // deep we are and only break out when we're back on top.
10471
10472    var depth = 0;
10473
10474    while (node) {
10475      if (node.nodeType === COMMENT_NODE) {
10476        var data = node.data;
10477
10478        if (data === SUSPENSE_START_DATA || data === SUSPENSE_FALLBACK_START_DATA || data === SUSPENSE_PENDING_START_DATA) {
10479          if (depth === 0) {
10480            return node;
10481          } else {
10482            depth--;
10483          }
10484        } else if (data === SUSPENSE_END_DATA) {
10485          depth++;
10486        }
10487      }
10488
10489      node = node.previousSibling;
10490    }
10491
10492    return null;
10493  }
10494  function commitHydratedContainer(container) {
10495    // Retry if any event replaying was blocked on this.
10496    retryIfBlockedOn(container);
10497  }
10498  function commitHydratedSuspenseInstance(suspenseInstance) {
10499    // Retry if any event replaying was blocked on this.
10500    retryIfBlockedOn(suspenseInstance);
10501  }
10502  function didNotMatchHydratedContainerTextInstance(parentContainer, textInstance, text) {
10503    {
10504      warnForUnmatchedText(textInstance, text);
10505    }
10506  }
10507  function didNotMatchHydratedTextInstance(parentType, parentProps, parentInstance, textInstance, text) {
10508    if ( parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {
10509      warnForUnmatchedText(textInstance, text);
10510    }
10511  }
10512  function didNotHydrateContainerInstance(parentContainer, instance) {
10513    {
10514      if (instance.nodeType === ELEMENT_NODE) {
10515        warnForDeletedHydratableElement(parentContainer, instance);
10516      } else if (instance.nodeType === COMMENT_NODE) ; else {
10517        warnForDeletedHydratableText(parentContainer, instance);
10518      }
10519    }
10520  }
10521  function didNotHydrateInstance(parentType, parentProps, parentInstance, instance) {
10522    if ( parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {
10523      if (instance.nodeType === ELEMENT_NODE) {
10524        warnForDeletedHydratableElement(parentInstance, instance);
10525      } else if (instance.nodeType === COMMENT_NODE) ; else {
10526        warnForDeletedHydratableText(parentInstance, instance);
10527      }
10528    }
10529  }
10530  function didNotFindHydratableContainerInstance(parentContainer, type, props) {
10531    {
10532      warnForInsertedHydratedElement(parentContainer, type);
10533    }
10534  }
10535  function didNotFindHydratableContainerTextInstance(parentContainer, text) {
10536    {
10537      warnForInsertedHydratedText(parentContainer, text);
10538    }
10539  }
10540  function didNotFindHydratableInstance(parentType, parentProps, parentInstance, type, props) {
10541    if ( parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {
10542      warnForInsertedHydratedElement(parentInstance, type);
10543    }
10544  }
10545  function didNotFindHydratableTextInstance(parentType, parentProps, parentInstance, text) {
10546    if ( parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {
10547      warnForInsertedHydratedText(parentInstance, text);
10548    }
10549  }
10550  function didNotFindHydratableSuspenseInstance(parentType, parentProps, parentInstance) {
10551    if ( parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) ;
10552  }
10553  var clientId = 0;
10554  function makeClientIdInDEV(warnOnAccessInDEV) {
10555    var id = 'r:' + (clientId++).toString(36);
10556    return {
10557      toString: function () {
10558        warnOnAccessInDEV();
10559        return id;
10560      },
10561      valueOf: function () {
10562        warnOnAccessInDEV();
10563        return id;
10564      }
10565    };
10566  }
10567  function isOpaqueHydratingObject(value) {
10568    return value !== null && typeof value === 'object' && value.$$typeof === REACT_OPAQUE_ID_TYPE;
10569  }
10570  function makeOpaqueHydratingObject(attemptToReadValue) {
10571    return {
10572      $$typeof: REACT_OPAQUE_ID_TYPE,
10573      toString: attemptToReadValue,
10574      valueOf: attemptToReadValue
10575    };
10576  }
10577  function preparePortalMount(portalInstance) {
10578    {
10579      listenToAllSupportedEvents(portalInstance);
10580    }
10581  }
10582
10583  var randomKey = Math.random().toString(36).slice(2);
10584  var internalInstanceKey = '__reactFiber$' + randomKey;
10585  var internalPropsKey = '__reactProps$' + randomKey;
10586  var internalContainerInstanceKey = '__reactContainer$' + randomKey;
10587  var internalEventHandlersKey = '__reactEvents$' + randomKey;
10588  function precacheFiberNode(hostInst, node) {
10589    node[internalInstanceKey] = hostInst;
10590  }
10591  function markContainerAsRoot(hostRoot, node) {
10592    node[internalContainerInstanceKey] = hostRoot;
10593  }
10594  function unmarkContainerAsRoot(node) {
10595    node[internalContainerInstanceKey] = null;
10596  }
10597  function isContainerMarkedAsRoot(node) {
10598    return !!node[internalContainerInstanceKey];
10599  } // Given a DOM node, return the closest HostComponent or HostText fiber ancestor.
10600  // If the target node is part of a hydrated or not yet rendered subtree, then
10601  // this may also return a SuspenseComponent or HostRoot to indicate that.
10602  // Conceptually the HostRoot fiber is a child of the Container node. So if you
10603  // pass the Container node as the targetNode, you will not actually get the
10604  // HostRoot back. To get to the HostRoot, you need to pass a child of it.
10605  // The same thing applies to Suspense boundaries.
10606
10607  function getClosestInstanceFromNode(targetNode) {
10608    var targetInst = targetNode[internalInstanceKey];
10609
10610    if (targetInst) {
10611      // Don't return HostRoot or SuspenseComponent here.
10612      return targetInst;
10613    } // If the direct event target isn't a React owned DOM node, we need to look
10614    // to see if one of its parents is a React owned DOM node.
10615
10616
10617    var parentNode = targetNode.parentNode;
10618
10619    while (parentNode) {
10620      // We'll check if this is a container root that could include
10621      // React nodes in the future. We need to check this first because
10622      // if we're a child of a dehydrated container, we need to first
10623      // find that inner container before moving on to finding the parent
10624      // instance. Note that we don't check this field on  the targetNode
10625      // itself because the fibers are conceptually between the container
10626      // node and the first child. It isn't surrounding the container node.
10627      // If it's not a container, we check if it's an instance.
10628      targetInst = parentNode[internalContainerInstanceKey] || parentNode[internalInstanceKey];
10629
10630      if (targetInst) {
10631        // Since this wasn't the direct target of the event, we might have
10632        // stepped past dehydrated DOM nodes to get here. However they could
10633        // also have been non-React nodes. We need to answer which one.
10634        // If we the instance doesn't have any children, then there can't be
10635        // a nested suspense boundary within it. So we can use this as a fast
10636        // bailout. Most of the time, when people add non-React children to
10637        // the tree, it is using a ref to a child-less DOM node.
10638        // Normally we'd only need to check one of the fibers because if it
10639        // has ever gone from having children to deleting them or vice versa
10640        // it would have deleted the dehydrated boundary nested inside already.
10641        // However, since the HostRoot starts out with an alternate it might
10642        // have one on the alternate so we need to check in case this was a
10643        // root.
10644        var alternate = targetInst.alternate;
10645
10646        if (targetInst.child !== null || alternate !== null && alternate.child !== null) {
10647          // Next we need to figure out if the node that skipped past is
10648          // nested within a dehydrated boundary and if so, which one.
10649          var suspenseInstance = getParentSuspenseInstance(targetNode);
10650
10651          while (suspenseInstance !== null) {
10652            // We found a suspense instance. That means that we haven't
10653            // hydrated it yet. Even though we leave the comments in the
10654            // DOM after hydrating, and there are boundaries in the DOM
10655            // that could already be hydrated, we wouldn't have found them
10656            // through this pass since if the target is hydrated it would
10657            // have had an internalInstanceKey on it.
10658            // Let's get the fiber associated with the SuspenseComponent
10659            // as the deepest instance.
10660            var targetSuspenseInst = suspenseInstance[internalInstanceKey];
10661
vendor: 9,908 bytes, lines 10662-10976
10662            if (targetSuspenseInst) {
10663              return targetSuspenseInst;
10664            } // If we don't find a Fiber on the comment, it might be because
10665            // we haven't gotten to hydrate it yet. There might still be a
10666            // parent boundary that hasn't above this one so we need to find
10667            // the outer most that is known.
10668
10669
10670            suspenseInstance = getParentSuspenseInstance(suspenseInstance); // If we don't find one, then that should mean that the parent
10671            // host component also hasn't hydrated yet. We can return it
10672            // below since it will bail out on the isMounted check later.
10673          }
10674        }
10675
10676        return targetInst;
10677      }
10678
10679      targetNode = parentNode;
10680      parentNode = targetNode.parentNode;
10681    }
10682
10683    return null;
10684  }
10685  /**
10686   * Given a DOM node, return the ReactDOMComponent or ReactDOMTextComponent
10687   * instance, or null if the node was not rendered by this React.
10688   */
10689
10690  function getInstanceFromNode(node) {
10691    var inst = node[internalInstanceKey] || node[internalContainerInstanceKey];
10692
10693    if (inst) {
10694      if (inst.tag === HostComponent || inst.tag === HostText || inst.tag === SuspenseComponent || inst.tag === HostRoot) {
10695        return inst;
10696      } else {
10697        return null;
10698      }
10699    }
10700
10701    return null;
10702  }
10703  /**
10704   * Given a ReactDOMComponent or ReactDOMTextComponent, return the corresponding
10705   * DOM node.
10706   */
10707
10708  function getNodeFromInstance(inst) {
10709    if (inst.tag === HostComponent || inst.tag === HostText) {
10710      // In Fiber this, is just the state node right now. We assume it will be
10711      // a host component or host text.
10712      return inst.stateNode;
10713    } // Without this first invariant, passing a non-DOM-component triggers the next
10714    // invariant for a missing parent, which is super confusing.
10715
10716
10717    {
10718      {
10719        throw Error( "getNodeFromInstance: Invalid argument." );
10720      }
10721    }
10722  }
10723  function getFiberCurrentPropsFromNode(node) {
10724    return node[internalPropsKey] || null;
10725  }
10726  function updateFiberProps(node, props) {
10727    node[internalPropsKey] = props;
10728  }
10729  function getEventListenerSet(node) {
10730    var elementListenerSet = node[internalEventHandlersKey];
10731
10732    if (elementListenerSet === undefined) {
10733      elementListenerSet = node[internalEventHandlersKey] = new Set();
10734    }
10735
10736    return elementListenerSet;
10737  }
10738
10739  var loggedTypeFailures = {};
10740  var ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;
10741
10742  function setCurrentlyValidatingElement(element) {
10743    {
10744      if (element) {
10745        var owner = element._owner;
10746        var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);
10747        ReactDebugCurrentFrame$1.setExtraStackFrame(stack);
10748      } else {
10749        ReactDebugCurrentFrame$1.setExtraStackFrame(null);
10750      }
10751    }
10752  }
10753
10754  function checkPropTypes(typeSpecs, values, location, componentName, element) {
10755    {
10756      // $FlowFixMe This is okay but Flow doesn't know it.
10757      var has = Function.call.bind(Object.prototype.hasOwnProperty);
10758
10759      for (var typeSpecName in typeSpecs) {
10760        if (has(typeSpecs, typeSpecName)) {
10761          var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to
10762          // fail the render phase where it didn't fail before. So we log it.
10763          // After these have been cleaned up, we'll let them throw.
10764
10765          try {
10766            // This is intentionally an invariant that gets caught. It's the same
10767            // behavior as without this statement except with a better message.
10768            if (typeof typeSpecs[typeSpecName] !== 'function') {
10769              var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');
10770              err.name = 'Invariant Violation';
10771              throw err;
10772            }
10773
10774            error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');
10775          } catch (ex) {
10776            error$1 = ex;
10777          }
10778
10779          if (error$1 && !(error$1 instanceof Error)) {
10780            setCurrentlyValidatingElement(element);
10781
10782            error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);
10783
10784            setCurrentlyValidatingElement(null);
10785          }
10786
10787          if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {
10788            // Only monitor this failure once because there tends to be a lot of the
10789            // same error.
10790            loggedTypeFailures[error$1.message] = true;
10791            setCurrentlyValidatingElement(element);
10792
10793            error('Failed %s type: %s', location, error$1.message);
10794
10795            setCurrentlyValidatingElement(null);
10796          }
10797        }
10798      }
10799    }
10800  }
10801
10802  var valueStack = [];
10803  var fiberStack;
10804
10805  {
10806    fiberStack = [];
10807  }
10808
10809  var index = -1;
10810
10811  function createCursor(defaultValue) {
10812    return {
10813      current: defaultValue
10814    };
10815  }
10816
10817  function pop(cursor, fiber) {
10818    if (index < 0) {
10819      {
10820        error('Unexpected pop.');
10821      }
10822
10823      return;
10824    }
10825
10826    {
10827      if (fiber !== fiberStack[index]) {
10828        error('Unexpected Fiber popped.');
10829      }
10830    }
10831
10832    cursor.current = valueStack[index];
10833    valueStack[index] = null;
10834
10835    {
10836      fiberStack[index] = null;
10837    }
10838
10839    index--;
10840  }
10841
10842  function push(cursor, value, fiber) {
10843    index++;
10844    valueStack[index] = cursor.current;
10845
10846    {
10847      fiberStack[index] = fiber;
10848    }
10849
10850    cursor.current = value;
10851  }
10852
10853  var warnedAboutMissingGetChildContext;
10854
10855  {
10856    warnedAboutMissingGetChildContext = {};
10857  }
10858
10859  var emptyContextObject = {};
10860
10861  {
10862    Object.freeze(emptyContextObject);
10863  } // A cursor to the current merged context object on the stack.
10864
10865
10866  var contextStackCursor = createCursor(emptyContextObject); // A cursor to a boolean indicating whether the context has changed.
10867
10868  var didPerformWorkStackCursor = createCursor(false); // Keep track of the previous context object that was on the stack.
10869  // We use this to get access to the parent context after we have already
10870  // pushed the next context provider, and now need to merge their contexts.
10871
10872  var previousContext = emptyContextObject;
10873
10874  function getUnmaskedContext(workInProgress, Component, didPushOwnContextIfProvider) {
10875    {
10876      if (didPushOwnContextIfProvider && isContextProvider(Component)) {
10877        // If the fiber is a context provider itself, when we read its context
10878        // we may have already pushed its own child context on the stack. A context
10879        // provider should not "see" its own child context. Therefore we read the
10880        // previous (parent) context instead for a context provider.
10881        return previousContext;
10882      }
10883
10884      return contextStackCursor.current;
10885    }
10886  }
10887
10888  function cacheContext(workInProgress, unmaskedContext, maskedContext) {
10889    {
10890      var instance = workInProgress.stateNode;
10891      instance.__reactInternalMemoizedUnmaskedChildContext = unmaskedContext;
10892      instance.__reactInternalMemoizedMaskedChildContext = maskedContext;
10893    }
10894  }
10895
10896  function getMaskedContext(workInProgress, unmaskedContext) {
10897    {
10898      var type = workInProgress.type;
10899      var contextTypes = type.contextTypes;
10900
10901      if (!contextTypes) {
10902        return emptyContextObject;
10903      } // Avoid recreating masked context unless unmasked context has changed.
10904      // Failing to do this will result in unnecessary calls to componentWillReceiveProps.
10905      // This may trigger infinite loops if componentWillReceiveProps calls setState.
10906
10907
10908      var instance = workInProgress.stateNode;
10909
10910      if (instance && instance.__reactInternalMemoizedUnmaskedChildContext === unmaskedContext) {
10911        return instance.__reactInternalMemoizedMaskedChildContext;
10912      }
10913
10914      var context = {};
10915
10916      for (var key in contextTypes) {
10917        context[key] = unmaskedContext[key];
10918      }
10919
10920      {
10921        var name = getComponentName(type) || 'Unknown';
10922        checkPropTypes(contextTypes, context, 'context', name);
10923      } // Cache unmasked context so we can avoid recreating masked context unless necessary.
10924      // Context is created before the class component is instantiated so check for instance.
10925
10926
10927      if (instance) {
10928        cacheContext(workInProgress, unmaskedContext, context);
10929      }
10930
10931      return context;
10932    }
10933  }
10934
10935  function hasContextChanged() {
10936    {
10937      return didPerformWorkStackCursor.current;
10938    }
10939  }
10940
10941  function isContextProvider(type) {
10942    {
10943      var childContextTypes = type.childContextTypes;
10944      return childContextTypes !== null && childContextTypes !== undefined;
10945    }
10946  }
10947
10948  function popContext(fiber) {
10949    {
10950      pop(didPerformWorkStackCursor, fiber);
10951      pop(contextStackCursor, fiber);
10952    }
10953  }
10954
10955  function popTopLevelContextObject(fiber) {
10956    {
10957      pop(didPerformWorkStackCursor, fiber);
10958      pop(contextStackCursor, fiber);
10959    }
10960  }
10961
10962  function pushTopLevelContextObject(fiber, context, didChange) {
10963    {
10964      if (!(contextStackCursor.current === emptyContextObject)) {
10965        {
10966          throw Error( "Unexpected context found on stack. This error is likely caused by a bug in React. Please file an issue." );
10967        }
10968      }
10969
10970      push(contextStackCursor, context, fiber);
10971      push(didPerformWorkStackCursor, didChange, fiber);
10972    }
10973  }
10974
10975  function processChildContext(fiber, type, parentContext) {
10976    {
vendor: 13,838 bytes, lines 10977-11372
10977      var instance = fiber.stateNode;
10978      var childContextTypes = type.childContextTypes; // TODO (bvaughn) Replace this behavior with an invariant() in the future.
10979      // It has only been added in Fiber to match the (unintentional) behavior in Stack.
10980
10981      if (typeof instance.getChildContext !== 'function') {
10982        {
10983          var componentName = getComponentName(type) || 'Unknown';
10984
10985          if (!warnedAboutMissingGetChildContext[componentName]) {
10986            warnedAboutMissingGetChildContext[componentName] = true;
10987
10988            error('%s.childContextTypes is specified but there is no getChildContext() method ' + 'on the instance. You can either define getChildContext() on %s or remove ' + 'childContextTypes from it.', componentName, componentName);
10989          }
10990        }
10991
10992        return parentContext;
10993      }
10994
10995      var childContext = instance.getChildContext();
10996
10997      for (var contextKey in childContext) {
10998        if (!(contextKey in childContextTypes)) {
10999          {
11000            throw Error( (getComponentName(type) || 'Unknown') + ".getChildContext(): key \"" + contextKey + "\" is not defined in childContextTypes." );
11001          }
11002        }
11003      }
11004
11005      {
11006        var name = getComponentName(type) || 'Unknown';
11007        checkPropTypes(childContextTypes, childContext, 'child context', name);
11008      }
11009
11010      return _assign({}, parentContext, childContext);
11011    }
11012  }
11013
11014  function pushContextProvider(workInProgress) {
11015    {
11016      var instance = workInProgress.stateNode; // We push the context as early as possible to ensure stack integrity.
11017      // If the instance does not exist yet, we will push null at first,
11018      // and replace it on the stack later when invalidating the context.
11019
11020      var memoizedMergedChildContext = instance && instance.__reactInternalMemoizedMergedChildContext || emptyContextObject; // Remember the parent context so we can merge with it later.
11021      // Inherit the parent's did-perform-work value to avoid inadvertently blocking updates.
11022
11023      previousContext = contextStackCursor.current;
11024      push(contextStackCursor, memoizedMergedChildContext, workInProgress);
11025      push(didPerformWorkStackCursor, didPerformWorkStackCursor.current, workInProgress);
11026      return true;
11027    }
11028  }
11029
11030  function invalidateContextProvider(workInProgress, type, didChange) {
11031    {
11032      var instance = workInProgress.stateNode;
11033
11034      if (!instance) {
11035        {
11036          throw Error( "Expected to have an instance by this point. This error is likely caused by a bug in React. Please file an issue." );
11037        }
11038      }
11039
11040      if (didChange) {
11041        // Merge parent and own context.
11042        // Skip this if we're not updating due to sCU.
11043        // This avoids unnecessarily recomputing memoized values.
11044        var mergedContext = processChildContext(workInProgress, type, previousContext);
11045        instance.__reactInternalMemoizedMergedChildContext = mergedContext; // Replace the old (or empty) context with the new one.
11046        // It is important to unwind the context in the reverse order.
11047
11048        pop(didPerformWorkStackCursor, workInProgress);
11049        pop(contextStackCursor, workInProgress); // Now push the new context and mark that it has changed.
11050
11051        push(contextStackCursor, mergedContext, workInProgress);
11052        push(didPerformWorkStackCursor, didChange, workInProgress);
11053      } else {
11054        pop(didPerformWorkStackCursor, workInProgress);
11055        push(didPerformWorkStackCursor, didChange, workInProgress);
11056      }
11057    }
11058  }
11059
11060  function findCurrentUnmaskedContext(fiber) {
11061    {
11062      // Currently this is only used with renderSubtreeIntoContainer; not sure if it
11063      // makes sense elsewhere
11064      if (!(isFiberMounted(fiber) && fiber.tag === ClassComponent)) {
11065        {
11066          throw Error( "Expected subtree parent to be a mounted class component. This error is likely caused by a bug in React. Please file an issue." );
11067        }
11068      }
11069
11070      var node = fiber;
11071
11072      do {
11073        switch (node.tag) {
11074          case HostRoot:
11075            return node.stateNode.context;
11076
11077          case ClassComponent:
11078            {
11079              var Component = node.type;
11080
11081              if (isContextProvider(Component)) {
11082                return node.stateNode.__reactInternalMemoizedMergedChildContext;
11083              }
11084
11085              break;
11086            }
11087        }
11088
11089        node = node.return;
11090      } while (node !== null);
11091
11092      {
11093        {
11094          throw Error( "Found unexpected detached subtree parent. This error is likely caused by a bug in React. Please file an issue." );
11095        }
11096      }
11097    }
11098  }
11099
11100  var LegacyRoot = 0;
11101  var BlockingRoot = 1;
11102  var ConcurrentRoot = 2;
11103
11104  var rendererID = null;
11105  var injectedHook = null;
11106  var hasLoggedError = false;
11107  var isDevToolsPresent = typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined';
11108  function injectInternals(internals) {
11109    if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {
11110      // No DevTools
11111      return false;
11112    }
11113
11114    var hook = __REACT_DEVTOOLS_GLOBAL_HOOK__;
11115
11116    if (hook.isDisabled) {
11117      // This isn't a real property on the hook, but it can be set to opt out
11118      // of DevTools integration and associated warnings and logs.
11119      // https://github.com/facebook/react/issues/3877
11120      return true;
11121    }
11122
11123    if (!hook.supportsFiber) {
11124      {
11125        error('The installed version of React DevTools is too old and will not work ' + 'with the current version of React. Please update React DevTools. ' + 'https://reactjs.org/link/react-devtools');
11126      } // DevTools exists, even though it doesn't support Fiber.
11127
11128
11129      return true;
11130    }
11131
11132    try {
11133      rendererID = hook.inject(internals); // We have successfully injected, so now it is safe to set up hooks.
11134
11135      injectedHook = hook;
11136    } catch (err) {
11137      // Catch all errors because it is unsafe to throw during initialization.
11138      {
11139        error('React instrumentation encountered an error: %s.', err);
11140      }
11141    } // DevTools exists
11142
11143
11144    return true;
11145  }
11146  function onScheduleRoot(root, children) {
11147    {
11148      if (injectedHook && typeof injectedHook.onScheduleFiberRoot === 'function') {
11149        try {
11150          injectedHook.onScheduleFiberRoot(rendererID, root, children);
11151        } catch (err) {
11152          if ( !hasLoggedError) {
11153            hasLoggedError = true;
11154
11155            error('React instrumentation encountered an error: %s', err);
11156          }
11157        }
11158      }
11159    }
11160  }
11161  function onCommitRoot(root, priorityLevel) {
11162    if (injectedHook && typeof injectedHook.onCommitFiberRoot === 'function') {
11163      try {
11164        var didError = (root.current.flags & DidCapture) === DidCapture;
11165
11166        if (enableProfilerTimer) {
11167          injectedHook.onCommitFiberRoot(rendererID, root, priorityLevel, didError);
11168        } else {
11169          injectedHook.onCommitFiberRoot(rendererID, root, undefined, didError);
11170        }
11171      } catch (err) {
11172        {
11173          if (!hasLoggedError) {
11174            hasLoggedError = true;
11175
11176            error('React instrumentation encountered an error: %s', err);
11177          }
11178        }
11179      }
11180    }
11181  }
11182  function onCommitUnmount(fiber) {
11183    if (injectedHook && typeof injectedHook.onCommitFiberUnmount === 'function') {
11184      try {
11185        injectedHook.onCommitFiberUnmount(rendererID, fiber);
11186      } catch (err) {
11187        {
11188          if (!hasLoggedError) {
11189            hasLoggedError = true;
11190
11191            error('React instrumentation encountered an error: %s', err);
11192          }
11193        }
11194      }
11195    }
11196  }
11197
11198  var Scheduler_runWithPriority = unstable_runWithPriority,
11199      Scheduler_scheduleCallback = unstable_scheduleCallback,
11200      Scheduler_cancelCallback = unstable_cancelCallback,
11201      Scheduler_shouldYield = unstable_shouldYield,
11202      Scheduler_requestPaint = unstable_requestPaint,
11203      Scheduler_now$1 = unstable_now,
11204      Scheduler_getCurrentPriorityLevel = unstable_getCurrentPriorityLevel,
11205      Scheduler_ImmediatePriority = unstable_ImmediatePriority,
11206      Scheduler_UserBlockingPriority = unstable_UserBlockingPriority,
11207      Scheduler_NormalPriority = unstable_NormalPriority,
11208      Scheduler_LowPriority = unstable_LowPriority,
11209      Scheduler_IdlePriority = unstable_IdlePriority;
11210
11211  {
11212    // Provide explicit error message when production+profiling bundle of e.g.
11213    // react-dom is used with production (non-profiling) bundle of
11214    // scheduler/tracing
11215    if (!(__interactionsRef != null && __interactionsRef.current != null)) {
11216      {
11217        throw Error( "It is not supported to run the profiling version of a renderer (for example, `react-dom/profiling`) without also replacing the `scheduler/tracing` module with `scheduler/tracing-profiling`. Your bundler might have a setting for aliasing both modules. Learn more at https://reactjs.org/link/profiling" );
11218      }
11219    }
11220  }
11221
11222  var fakeCallbackNode = {}; // Except for NoPriority, these correspond to Scheduler priorities. We use
11223  // ascending numbers so we can compare them like numbers. They start at 90 to
11224  // avoid clashing with Scheduler's priorities.
11225
11226  var ImmediatePriority$1 = 99;
11227  var UserBlockingPriority$2 = 98;
11228  var NormalPriority$1 = 97;
11229  var LowPriority$1 = 96;
11230  var IdlePriority$1 = 95; // NoPriority is the absence of priority. Also React-only.
11231
11232  var NoPriority$1 = 90;
11233  var shouldYield = Scheduler_shouldYield;
11234  var requestPaint = // Fall back gracefully if we're running an older version of Scheduler.
11235  Scheduler_requestPaint !== undefined ? Scheduler_requestPaint : function () {};
11236  var syncQueue = null;
11237  var immediateQueueCallbackNode = null;
11238  var isFlushingSyncQueue = false;
11239  var initialTimeMs$1 = Scheduler_now$1(); // If the initial timestamp is reasonably small, use Scheduler's `now` directly.
11240  // This will be the case for modern browsers that support `performance.now`. In
11241  // older browsers, Scheduler falls back to `Date.now`, which returns a Unix
11242  // timestamp. In that case, subtract the module initialization time to simulate
11243  // the behavior of performance.now and keep our times small enough to fit
11244  // within 32 bits.
11245  // TODO: Consider lifting this into Scheduler.
11246
11247  var now = initialTimeMs$1 < 10000 ? Scheduler_now$1 : function () {
11248    return Scheduler_now$1() - initialTimeMs$1;
11249  };
11250  function getCurrentPriorityLevel() {
11251    switch (Scheduler_getCurrentPriorityLevel()) {
11252      case Scheduler_ImmediatePriority:
11253        return ImmediatePriority$1;
11254
11255      case Scheduler_UserBlockingPriority:
11256        return UserBlockingPriority$2;
11257
11258      case Scheduler_NormalPriority:
11259        return NormalPriority$1;
11260
11261      case Scheduler_LowPriority:
11262        return LowPriority$1;
11263
11264      case Scheduler_IdlePriority:
11265        return IdlePriority$1;
11266
11267      default:
11268        {
11269          {
11270            throw Error( "Unknown priority level." );
11271          }
11272        }
11273
11274    }
11275  }
11276
11277  function reactPriorityToSchedulerPriority(reactPriorityLevel) {
11278    switch (reactPriorityLevel) {
11279      case ImmediatePriority$1:
11280        return Scheduler_ImmediatePriority;
11281
11282      case UserBlockingPriority$2:
11283        return Scheduler_UserBlockingPriority;
11284
11285      case NormalPriority$1:
11286        return Scheduler_NormalPriority;
11287
11288      case LowPriority$1:
11289        return Scheduler_LowPriority;
11290
11291      case IdlePriority$1:
11292        return Scheduler_IdlePriority;
11293
11294      default:
11295        {
11296          {
11297            throw Error( "Unknown priority level." );
11298          }
11299        }
11300
11301    }
11302  }
11303
11304  function runWithPriority$1(reactPriorityLevel, fn) {
11305    var priorityLevel = reactPriorityToSchedulerPriority(reactPriorityLevel);
11306    return Scheduler_runWithPriority(priorityLevel, fn);
11307  }
11308  function scheduleCallback(reactPriorityLevel, callback, options) {
11309    var priorityLevel = reactPriorityToSchedulerPriority(reactPriorityLevel);
11310    return Scheduler_scheduleCallback(priorityLevel, callback, options);
11311  }
11312  function scheduleSyncCallback(callback) {
11313    // Push this callback into an internal queue. We'll flush these either in
11314    // the next tick, or earlier if something calls `flushSyncCallbackQueue`.
11315    if (syncQueue === null) {
11316      syncQueue = [callback]; // Flush the queue in the next tick, at the earliest.
11317
11318      immediateQueueCallbackNode = Scheduler_scheduleCallback(Scheduler_ImmediatePriority, flushSyncCallbackQueueImpl);
11319    } else {
11320      // Push onto existing queue. Don't need to schedule a callback because
11321      // we already scheduled one when we created the queue.
11322      syncQueue.push(callback);
11323    }
11324
11325    return fakeCallbackNode;
11326  }
11327  function cancelCallback(callbackNode) {
11328    if (callbackNode !== fakeCallbackNode) {
11329      Scheduler_cancelCallback(callbackNode);
11330    }
11331  }
11332  function flushSyncCallbackQueue() {
11333    if (immediateQueueCallbackNode !== null) {
11334      var node = immediateQueueCallbackNode;
11335      immediateQueueCallbackNode = null;
11336      Scheduler_cancelCallback(node);
11337    }
11338
11339    flushSyncCallbackQueueImpl();
11340  }
11341
11342  function flushSyncCallbackQueueImpl() {
11343    if (!isFlushingSyncQueue && syncQueue !== null) {
11344      // Prevent re-entrancy.
11345      isFlushingSyncQueue = true;
11346      var i = 0;
11347
11348      {
11349        try {
11350          var _isSync2 = true;
11351          var _queue = syncQueue;
11352          runWithPriority$1(ImmediatePriority$1, function () {
11353            for (; i < _queue.length; i++) {
11354              var callback = _queue[i];
11355
11356              do {
11357                callback = callback(_isSync2);
11358              } while (callback !== null);
11359            }
11360          });
11361          syncQueue = null;
11362        } catch (error) {
11363          // If something throws, leave the remaining callbacks on the queue.
11364          if (syncQueue !== null) {
11365            syncQueue = syncQueue.slice(i + 1);
11366          } // Resume flushing in the next tick
11367
11368
11369          Scheduler_scheduleCallback(Scheduler_ImmediatePriority, flushSyncCallbackQueue);
11370          throw error;
11371        } finally {
11372          isFlushingSyncQueue = false;
vendor: 3,464 bytes, lines 11373-11473
11373        }
11374      }
11375    }
11376  }
11377
11378  // TODO: this is special because it gets imported during build.
11379  var ReactVersion = '17.0.2';
11380
11381  var NoMode = 0;
11382  var StrictMode = 1; // TODO: Remove BlockingMode and ConcurrentMode by reading from the root
11383  // tag instead
11384
11385  var BlockingMode = 2;
11386  var ConcurrentMode = 4;
11387  var ProfileMode = 8;
11388  var DebugTracingMode = 16;
11389
11390  var ReactCurrentBatchConfig = ReactSharedInternals.ReactCurrentBatchConfig;
11391  var NoTransition = 0;
11392  function requestCurrentTransition() {
11393    return ReactCurrentBatchConfig.transition;
11394  }
11395
11396  var ReactStrictModeWarnings = {
11397    recordUnsafeLifecycleWarnings: function (fiber, instance) {},
11398    flushPendingUnsafeLifecycleWarnings: function () {},
11399    recordLegacyContextWarning: function (fiber, instance) {},
11400    flushLegacyContextWarning: function () {},
11401    discardPendingWarnings: function () {}
11402  };
11403
11404  {
11405    var findStrictRoot = function (fiber) {
11406      var maybeStrictRoot = null;
11407      var node = fiber;
11408
11409      while (node !== null) {
11410        if (node.mode & StrictMode) {
11411          maybeStrictRoot = node;
11412        }
11413
11414        node = node.return;
11415      }
11416
11417      return maybeStrictRoot;
11418    };
11419
11420    var setToSortedString = function (set) {
11421      var array = [];
11422      set.forEach(function (value) {
11423        array.push(value);
11424      });
11425      return array.sort().join(', ');
11426    };
11427
11428    var pendingComponentWillMountWarnings = [];
11429    var pendingUNSAFE_ComponentWillMountWarnings = [];
11430    var pendingComponentWillReceivePropsWarnings = [];
11431    var pendingUNSAFE_ComponentWillReceivePropsWarnings = [];
11432    var pendingComponentWillUpdateWarnings = [];
11433    var pendingUNSAFE_ComponentWillUpdateWarnings = []; // Tracks components we have already warned about.
11434
11435    var didWarnAboutUnsafeLifecycles = new Set();
11436
11437    ReactStrictModeWarnings.recordUnsafeLifecycleWarnings = function (fiber, instance) {
11438      // Dedup strategy: Warn once per component.
11439      if (didWarnAboutUnsafeLifecycles.has(fiber.type)) {
11440        return;
11441      }
11442
11443      if (typeof instance.componentWillMount === 'function' && // Don't warn about react-lifecycles-compat polyfilled components.
11444      instance.componentWillMount.__suppressDeprecationWarning !== true) {
11445        pendingComponentWillMountWarnings.push(fiber);
11446      }
11447
11448      if (fiber.mode & StrictMode && typeof instance.UNSAFE_componentWillMount === 'function') {
11449        pendingUNSAFE_ComponentWillMountWarnings.push(fiber);
11450      }
11451
11452      if (typeof instance.componentWillReceiveProps === 'function' && instance.componentWillReceiveProps.__suppressDeprecationWarning !== true) {
11453        pendingComponentWillReceivePropsWarnings.push(fiber);
11454      }
11455
11456      if (fiber.mode & StrictMode && typeof instance.UNSAFE_componentWillReceiveProps === 'function') {
11457        pendingUNSAFE_ComponentWillReceivePropsWarnings.push(fiber);
11458      }
11459
11460      if (typeof instance.componentWillUpdate === 'function' && instance.componentWillUpdate.__suppressDeprecationWarning !== true) {
11461        pendingComponentWillUpdateWarnings.push(fiber);
11462      }
11463
11464      if (fiber.mode & StrictMode && typeof instance.UNSAFE_componentWillUpdate === 'function') {
11465        pendingUNSAFE_ComponentWillUpdateWarnings.push(fiber);
11466      }
11467    };
11468
11469    ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings = function () {
11470      // We do an initial pass to gather component names
11471      var componentWillMountUniqueNames = new Set();
11472
11473      if (pendingComponentWillMountWarnings.length > 0) {
11474        pendingComponentWillMountWarnings.forEach(function (fiber) {
11475          componentWillMountUniqueNames.add(getComponentName(fiber.type) || 'Component');
11476          didWarnAboutUnsafeLifecycles.add(fiber.type);
11477        });
11478        pendingComponentWillMountWarnings = [];
11479      }
11480
11481      var UNSAFE_componentWillMountUniqueNames = new Set();
11482
11483      if (pendingUNSAFE_ComponentWillMountWarnings.length > 0) {
11484        pendingUNSAFE_ComponentWillMountWarnings.forEach(function (fiber) {
11485          UNSAFE_componentWillMountUniqueNames.add(getComponentName(fiber.type) || 'Component');
11486          didWarnAboutUnsafeLifecycles.add(fiber.type);
11487        });
11488        pendingUNSAFE_ComponentWillMountWarnings = [];
11489      }
11490
11491      var componentWillReceivePropsUniqueNames = new Set();
11492
11493      if (pendingComponentWillReceivePropsWarnings.length > 0) {
11494        pendingComponentWillReceivePropsWarnings.forEach(function (fiber) {
11495          componentWillReceivePropsUniqueNames.add(getComponentName(fiber.type) || 'Component');
11496          didWarnAboutUnsafeLifecycles.add(fiber.type);
11497        });
11498        pendingComponentWillReceivePropsWarnings = [];
11499      }
11500
11501      var UNSAFE_componentWillReceivePropsUniqueNames = new Set();
11502
11503      if (pendingUNSAFE_ComponentWillReceivePropsWarnings.length > 0) {
vendor: 17,827 bytes, lines 11504-11918
11504        pendingUNSAFE_ComponentWillReceivePropsWarnings.forEach(function (fiber) {
11505          UNSAFE_componentWillReceivePropsUniqueNames.add(getComponentName(fiber.type) || 'Component');
11506          didWarnAboutUnsafeLifecycles.add(fiber.type);
11507        });
11508        pendingUNSAFE_ComponentWillReceivePropsWarnings = [];
11509      }
11510
11511      var componentWillUpdateUniqueNames = new Set();
11512
11513      if (pendingComponentWillUpdateWarnings.length > 0) {
11514        pendingComponentWillUpdateWarnings.forEach(function (fiber) {
11515          componentWillUpdateUniqueNames.add(getComponentName(fiber.type) || 'Component');
11516          didWarnAboutUnsafeLifecycles.add(fiber.type);
11517        });
11518        pendingComponentWillUpdateWarnings = [];
11519      }
11520
11521      var UNSAFE_componentWillUpdateUniqueNames = new Set();
11522
11523      if (pendingUNSAFE_ComponentWillUpdateWarnings.length > 0) {
11524        pendingUNSAFE_ComponentWillUpdateWarnings.forEach(function (fiber) {
11525          UNSAFE_componentWillUpdateUniqueNames.add(getComponentName(fiber.type) || 'Component');
11526          didWarnAboutUnsafeLifecycles.add(fiber.type);
11527        });
11528        pendingUNSAFE_ComponentWillUpdateWarnings = [];
11529      } // Finally, we flush all the warnings
11530      // UNSAFE_ ones before the deprecated ones, since they'll be 'louder'
11531
11532
11533      if (UNSAFE_componentWillMountUniqueNames.size > 0) {
11534        var sortedNames = setToSortedString(UNSAFE_componentWillMountUniqueNames);
11535
11536        error('Using UNSAFE_componentWillMount in strict mode is not recommended and may indicate bugs in your code. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\n\n' + '* Move code with side effects to componentDidMount, and set initial state in the constructor.\n' + '\nPlease update the following components: %s', sortedNames);
11537      }
11538
11539      if (UNSAFE_componentWillReceivePropsUniqueNames.size > 0) {
11540        var _sortedNames = setToSortedString(UNSAFE_componentWillReceivePropsUniqueNames);
11541
11542        error('Using UNSAFE_componentWillReceiveProps in strict mode is not recommended ' + 'and may indicate bugs in your code. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\n\n' + '* Move data fetching code or side effects to componentDidUpdate.\n' + "* If you're updating state whenever props change, " + 'refactor your code to use memoization techniques or move it to ' + 'static getDerivedStateFromProps. Learn more at: https://reactjs.org/link/derived-state\n' + '\nPlease update the following components: %s', _sortedNames);
11543      }
11544
11545      if (UNSAFE_componentWillUpdateUniqueNames.size > 0) {
11546        var _sortedNames2 = setToSortedString(UNSAFE_componentWillUpdateUniqueNames);
11547
11548        error('Using UNSAFE_componentWillUpdate in strict mode is not recommended ' + 'and may indicate bugs in your code. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\n\n' + '* Move data fetching code or side effects to componentDidUpdate.\n' + '\nPlease update the following components: %s', _sortedNames2);
11549      }
11550
11551      if (componentWillMountUniqueNames.size > 0) {
11552        var _sortedNames3 = setToSortedString(componentWillMountUniqueNames);
11553
11554        warn('componentWillMount has been renamed, and is not recommended for use. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\n\n' + '* Move code with side effects to componentDidMount, and set initial state in the constructor.\n' + '* Rename componentWillMount to UNSAFE_componentWillMount to suppress ' + 'this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\n' + '\nPlease update the following components: %s', _sortedNames3);
11555      }
11556
11557      if (componentWillReceivePropsUniqueNames.size > 0) {
11558        var _sortedNames4 = setToSortedString(componentWillReceivePropsUniqueNames);
11559
11560        warn('componentWillReceiveProps has been renamed, and is not recommended for use. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\n\n' + '* Move data fetching code or side effects to componentDidUpdate.\n' + "* If you're updating state whenever props change, refactor your " + 'code to use memoization techniques or move it to ' + 'static getDerivedStateFromProps. Learn more at: https://reactjs.org/link/derived-state\n' + '* Rename componentWillReceiveProps to UNSAFE_componentWillReceiveProps to suppress ' + 'this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\n' + '\nPlease update the following components: %s', _sortedNames4);
11561      }
11562
11563      if (componentWillUpdateUniqueNames.size > 0) {
11564        var _sortedNames5 = setToSortedString(componentWillUpdateUniqueNames);
11565
11566        warn('componentWillUpdate has been renamed, and is not recommended for use. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\n\n' + '* Move data fetching code or side effects to componentDidUpdate.\n' + '* Rename componentWillUpdate to UNSAFE_componentWillUpdate to suppress ' + 'this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\n' + '\nPlease update the following components: %s', _sortedNames5);
11567      }
11568    };
11569
11570    var pendingLegacyContextWarning = new Map(); // Tracks components we have already warned about.
11571
11572    var didWarnAboutLegacyContext = new Set();
11573
11574    ReactStrictModeWarnings.recordLegacyContextWarning = function (fiber, instance) {
11575      var strictRoot = findStrictRoot(fiber);
11576
11577      if (strictRoot === null) {
11578        error('Expected to find a StrictMode component in a strict mode tree. ' + 'This error is likely caused by a bug in React. Please file an issue.');
11579
11580        return;
11581      } // Dedup strategy: Warn once per component.
11582
11583
11584      if (didWarnAboutLegacyContext.has(fiber.type)) {
11585        return;
11586      }
11587
11588      var warningsForRoot = pendingLegacyContextWarning.get(strictRoot);
11589
11590      if (fiber.type.contextTypes != null || fiber.type.childContextTypes != null || instance !== null && typeof instance.getChildContext === 'function') {
11591        if (warningsForRoot === undefined) {
11592          warningsForRoot = [];
11593          pendingLegacyContextWarning.set(strictRoot, warningsForRoot);
11594        }
11595
11596        warningsForRoot.push(fiber);
11597      }
11598    };
11599
11600    ReactStrictModeWarnings.flushLegacyContextWarning = function () {
11601      pendingLegacyContextWarning.forEach(function (fiberArray, strictRoot) {
11602        if (fiberArray.length === 0) {
11603          return;
11604        }
11605
11606        var firstFiber = fiberArray[0];
11607        var uniqueNames = new Set();
11608        fiberArray.forEach(function (fiber) {
11609          uniqueNames.add(getComponentName(fiber.type) || 'Component');
11610          didWarnAboutLegacyContext.add(fiber.type);
11611        });
11612        var sortedNames = setToSortedString(uniqueNames);
11613
11614        try {
11615          setCurrentFiber(firstFiber);
11616
11617          error('Legacy context API has been detected within a strict-mode tree.' + '\n\nThe old API will be supported in all 16.x releases, but applications ' + 'using it should migrate to the new version.' + '\n\nPlease update the following components: %s' + '\n\nLearn more about this warning here: https://reactjs.org/link/legacy-context', sortedNames);
11618        } finally {
11619          resetCurrentFiber();
11620        }
11621      });
11622    };
11623
11624    ReactStrictModeWarnings.discardPendingWarnings = function () {
11625      pendingComponentWillMountWarnings = [];
11626      pendingUNSAFE_ComponentWillMountWarnings = [];
11627      pendingComponentWillReceivePropsWarnings = [];
11628      pendingUNSAFE_ComponentWillReceivePropsWarnings = [];
11629      pendingComponentWillUpdateWarnings = [];
11630      pendingUNSAFE_ComponentWillUpdateWarnings = [];
11631      pendingLegacyContextWarning = new Map();
11632    };
11633  }
11634
11635  function resolveDefaultProps(Component, baseProps) {
11636    if (Component && Component.defaultProps) {
11637      // Resolve default props. Taken from ReactElement
11638      var props = _assign({}, baseProps);
11639
11640      var defaultProps = Component.defaultProps;
11641
11642      for (var propName in defaultProps) {
11643        if (props[propName] === undefined) {
11644          props[propName] = defaultProps[propName];
11645        }
11646      }
11647
11648      return props;
11649    }
11650
11651    return baseProps;
11652  }
11653
11654  // Max 31 bit integer. The max integer size in V8 for 32-bit systems.
11655  // Math.pow(2, 30) - 1
11656  // 0b111111111111111111111111111111
11657  var MAX_SIGNED_31_BIT_INT = 1073741823;
11658
11659  var valueCursor = createCursor(null);
11660  var rendererSigil;
11661
11662  {
11663    // Use this to detect multiple renderers using the same context
11664    rendererSigil = {};
11665  }
11666
11667  var currentlyRenderingFiber = null;
11668  var lastContextDependency = null;
11669  var lastContextWithAllBitsObserved = null;
11670  var isDisallowedContextReadInDEV = false;
11671  function resetContextDependencies() {
11672    // This is called right before React yields execution, to ensure `readContext`
11673    // cannot be called outside the render phase.
11674    currentlyRenderingFiber = null;
11675    lastContextDependency = null;
11676    lastContextWithAllBitsObserved = null;
11677
11678    {
11679      isDisallowedContextReadInDEV = false;
11680    }
11681  }
11682  function enterDisallowedContextReadInDEV() {
11683    {
11684      isDisallowedContextReadInDEV = true;
11685    }
11686  }
11687  function exitDisallowedContextReadInDEV() {
11688    {
11689      isDisallowedContextReadInDEV = false;
11690    }
11691  }
11692  function pushProvider(providerFiber, nextValue) {
11693    var context = providerFiber.type._context;
11694
11695    {
11696      push(valueCursor, context._currentValue, providerFiber);
11697      context._currentValue = nextValue;
11698
11699      {
11700        if (context._currentRenderer !== undefined && context._currentRenderer !== null && context._currentRenderer !== rendererSigil) {
11701          error('Detected multiple renderers concurrently rendering the ' + 'same context provider. This is currently unsupported.');
11702        }
11703
11704        context._currentRenderer = rendererSigil;
11705      }
11706    }
11707  }
11708  function popProvider(providerFiber) {
11709    var currentValue = valueCursor.current;
11710    pop(valueCursor, providerFiber);
11711    var context = providerFiber.type._context;
11712
11713    {
11714      context._currentValue = currentValue;
11715    }
11716  }
11717  function calculateChangedBits(context, newValue, oldValue) {
11718    if (objectIs(oldValue, newValue)) {
11719      // No change
11720      return 0;
11721    } else {
11722      var changedBits = typeof context._calculateChangedBits === 'function' ? context._calculateChangedBits(oldValue, newValue) : MAX_SIGNED_31_BIT_INT;
11723
11724      {
11725        if ((changedBits & MAX_SIGNED_31_BIT_INT) !== changedBits) {
11726          error('calculateChangedBits: Expected the return value to be a ' + '31-bit integer. Instead received: %s', changedBits);
11727        }
11728      }
11729
11730      return changedBits | 0;
11731    }
11732  }
11733  function scheduleWorkOnParentPath(parent, renderLanes) {
11734    // Update the child lanes of all the ancestors, including the alternates.
11735    var node = parent;
11736
11737    while (node !== null) {
11738      var alternate = node.alternate;
11739
11740      if (!isSubsetOfLanes(node.childLanes, renderLanes)) {
11741        node.childLanes = mergeLanes(node.childLanes, renderLanes);
11742
11743        if (alternate !== null) {
11744          alternate.childLanes = mergeLanes(alternate.childLanes, renderLanes);
11745        }
11746      } else if (alternate !== null && !isSubsetOfLanes(alternate.childLanes, renderLanes)) {
11747        alternate.childLanes = mergeLanes(alternate.childLanes, renderLanes);
11748      } else {
11749        // Neither alternate was updated, which means the rest of the
11750        // ancestor path already has sufficient priority.
11751        break;
11752      }
11753
11754      node = node.return;
11755    }
11756  }
11757  function propagateContextChange(workInProgress, context, changedBits, renderLanes) {
11758    var fiber = workInProgress.child;
11759
11760    if (fiber !== null) {
11761      // Set the return pointer of the child to the work-in-progress fiber.
11762      fiber.return = workInProgress;
11763    }
11764
11765    while (fiber !== null) {
11766      var nextFiber = void 0; // Visit this fiber.
11767
11768      var list = fiber.dependencies;
11769
11770      if (list !== null) {
11771        nextFiber = fiber.child;
11772        var dependency = list.firstContext;
11773
11774        while (dependency !== null) {
11775          // Check if the context matches.
11776          if (dependency.context === context && (dependency.observedBits & changedBits) !== 0) {
11777            // Match! Schedule an update on this fiber.
11778            if (fiber.tag === ClassComponent) {
11779              // Schedule a force update on the work-in-progress.
11780              var update = createUpdate(NoTimestamp, pickArbitraryLane(renderLanes));
11781              update.tag = ForceUpdate; // TODO: Because we don't have a work-in-progress, this will add the
11782              // update to the current fiber, too, which means it will persist even if
11783              // this render is thrown away. Since it's a race condition, not sure it's
11784              // worth fixing.
11785
11786              enqueueUpdate(fiber, update);
11787            }
11788
11789            fiber.lanes = mergeLanes(fiber.lanes, renderLanes);
11790            var alternate = fiber.alternate;
11791
11792            if (alternate !== null) {
11793              alternate.lanes = mergeLanes(alternate.lanes, renderLanes);
11794            }
11795
11796            scheduleWorkOnParentPath(fiber.return, renderLanes); // Mark the updated lanes on the list, too.
11797
11798            list.lanes = mergeLanes(list.lanes, renderLanes); // Since we already found a match, we can stop traversing the
11799            // dependency list.
11800
11801            break;
11802          }
11803
11804          dependency = dependency.next;
11805        }
11806      } else if (fiber.tag === ContextProvider) {
11807        // Don't scan deeper if this is a matching provider
11808        nextFiber = fiber.type === workInProgress.type ? null : fiber.child;
11809      } else {
11810        // Traverse down.
11811        nextFiber = fiber.child;
11812      }
11813
11814      if (nextFiber !== null) {
11815        // Set the return pointer of the child to the work-in-progress fiber.
11816        nextFiber.return = fiber;
11817      } else {
11818        // No child. Traverse to next sibling.
11819        nextFiber = fiber;
11820
11821        while (nextFiber !== null) {
11822          if (nextFiber === workInProgress) {
11823            // We're back to the root of this subtree. Exit.
11824            nextFiber = null;
11825            break;
11826          }
11827
11828          var sibling = nextFiber.sibling;
11829
11830          if (sibling !== null) {
11831            // Set the return pointer of the sibling to the work-in-progress fiber.
11832            sibling.return = nextFiber.return;
11833            nextFiber = sibling;
11834            break;
11835          } // No more siblings. Traverse up.
11836
11837
11838          nextFiber = nextFiber.return;
11839        }
11840      }
11841
11842      fiber = nextFiber;
11843    }
11844  }
11845  function prepareToReadContext(workInProgress, renderLanes) {
11846    currentlyRenderingFiber = workInProgress;
11847    lastContextDependency = null;
11848    lastContextWithAllBitsObserved = null;
11849    var dependencies = workInProgress.dependencies;
11850
11851    if (dependencies !== null) {
11852      var firstContext = dependencies.firstContext;
11853
11854      if (firstContext !== null) {
11855        if (includesSomeLane(dependencies.lanes, renderLanes)) {
11856          // Context list has a pending update. Mark that this fiber performed work.
11857          markWorkInProgressReceivedUpdate();
11858        } // Reset the work-in-progress list
11859
11860
11861        dependencies.firstContext = null;
11862      }
11863    }
11864  }
11865  function readContext(context, observedBits) {
11866    {
11867      // This warning would fire if you read context inside a Hook like useMemo.
11868      // Unlike the class check below, it's not enforced in production for perf.
11869      if (isDisallowedContextReadInDEV) {
11870        error('Context can only be read while React is rendering. ' + 'In classes, you can read it in the render method or getDerivedStateFromProps. ' + 'In function components, you can read it directly in the function body, but not ' + 'inside Hooks like useReducer() or useMemo().');
11871      }
11872    }
11873
11874    if (lastContextWithAllBitsObserved === context) ; else if (observedBits === false || observedBits === 0) ; else {
11875      var resolvedObservedBits; // Avoid deopting on observable arguments or heterogeneous types.
11876
11877      if (typeof observedBits !== 'number' || observedBits === MAX_SIGNED_31_BIT_INT) {
11878        // Observe all updates.
11879        lastContextWithAllBitsObserved = context;
11880        resolvedObservedBits = MAX_SIGNED_31_BIT_INT;
11881      } else {
11882        resolvedObservedBits = observedBits;
11883      }
11884
11885      var contextItem = {
11886        context: context,
11887        observedBits: resolvedObservedBits,
11888        next: null
11889      };
11890
11891      if (lastContextDependency === null) {
11892        if (!(currentlyRenderingFiber !== null)) {
11893          {
11894            throw Error( "Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo()." );
11895          }
11896        } // This is the first dependency for this component. Create a new list.
11897
11898
11899        lastContextDependency = contextItem;
11900        currentlyRenderingFiber.dependencies = {
11901          lanes: NoLanes,
11902          firstContext: contextItem,
11903          responders: null
11904        };
11905      } else {
11906        // Append a new context item.
11907        lastContextDependency = lastContextDependency.next = contextItem;
11908      }
11909    }
11910
11911    return  context._currentValue ;
11912  }
11913
11914  var UpdateState = 0;
11915  var ReplaceState = 1;
11916  var ForceUpdate = 2;
11917  var CaptureUpdate = 3; // Global state that is reset at the beginning of calling `processUpdateQueue`.
11918  // It should only be read right after calling `processUpdateQueue`, via
vendor: 13,176 bytes, lines 11919-12330
11919  // `checkHasForceUpdateAfterProcessing`.
11920
11921  var hasForceUpdate = false;
11922  var didWarnUpdateInsideUpdate;
11923  var currentlyProcessingQueue;
11924
11925  {
11926    didWarnUpdateInsideUpdate = false;
11927    currentlyProcessingQueue = null;
11928  }
11929
11930  function initializeUpdateQueue(fiber) {
11931    var queue = {
11932      baseState: fiber.memoizedState,
11933      firstBaseUpdate: null,
11934      lastBaseUpdate: null,
11935      shared: {
11936        pending: null
11937      },
11938      effects: null
11939    };
11940    fiber.updateQueue = queue;
11941  }
11942  function cloneUpdateQueue(current, workInProgress) {
11943    // Clone the update queue from current. Unless it's already a clone.
11944    var queue = workInProgress.updateQueue;
11945    var currentQueue = current.updateQueue;
11946
11947    if (queue === currentQueue) {
11948      var clone = {
11949        baseState: currentQueue.baseState,
11950        firstBaseUpdate: currentQueue.firstBaseUpdate,
11951        lastBaseUpdate: currentQueue.lastBaseUpdate,
11952        shared: currentQueue.shared,
11953        effects: currentQueue.effects
11954      };
11955      workInProgress.updateQueue = clone;
11956    }
11957  }
11958  function createUpdate(eventTime, lane) {
11959    var update = {
11960      eventTime: eventTime,
11961      lane: lane,
11962      tag: UpdateState,
11963      payload: null,
11964      callback: null,
11965      next: null
11966    };
11967    return update;
11968  }
11969  function enqueueUpdate(fiber, update) {
11970    var updateQueue = fiber.updateQueue;
11971
11972    if (updateQueue === null) {
11973      // Only occurs if the fiber has been unmounted.
11974      return;
11975    }
11976
11977    var sharedQueue = updateQueue.shared;
11978    var pending = sharedQueue.pending;
11979
11980    if (pending === null) {
11981      // This is the first update. Create a circular list.
11982      update.next = update;
11983    } else {
11984      update.next = pending.next;
11985      pending.next = update;
11986    }
11987
11988    sharedQueue.pending = update;
11989
11990    {
11991      if (currentlyProcessingQueue === sharedQueue && !didWarnUpdateInsideUpdate) {
11992        error('An update (setState, replaceState, or forceUpdate) was scheduled ' + 'from inside an update function. Update functions should be pure, ' + 'with zero side-effects. Consider using componentDidUpdate or a ' + 'callback.');
11993
11994        didWarnUpdateInsideUpdate = true;
11995      }
11996    }
11997  }
11998  function enqueueCapturedUpdate(workInProgress, capturedUpdate) {
11999    // Captured updates are updates that are thrown by a child during the render
12000    // phase. They should be discarded if the render is aborted. Therefore,
12001    // we should only put them on the work-in-progress queue, not the current one.
12002    var queue = workInProgress.updateQueue; // Check if the work-in-progress queue is a clone.
12003
12004    var current = workInProgress.alternate;
12005
12006    if (current !== null) {
12007      var currentQueue = current.updateQueue;
12008
12009      if (queue === currentQueue) {
12010        // The work-in-progress queue is the same as current. This happens when
12011        // we bail out on a parent fiber that then captures an error thrown by
12012        // a child. Since we want to append the update only to the work-in
12013        // -progress queue, we need to clone the updates. We usually clone during
12014        // processUpdateQueue, but that didn't happen in this case because we
12015        // skipped over the parent when we bailed out.
12016        var newFirst = null;
12017        var newLast = null;
12018        var firstBaseUpdate = queue.firstBaseUpdate;
12019
12020        if (firstBaseUpdate !== null) {
12021          // Loop through the updates and clone them.
12022          var update = firstBaseUpdate;
12023
12024          do {
12025            var clone = {
12026              eventTime: update.eventTime,
12027              lane: update.lane,
12028              tag: update.tag,
12029              payload: update.payload,
12030              callback: update.callback,
12031              next: null
12032            };
12033
12034            if (newLast === null) {
12035              newFirst = newLast = clone;
12036            } else {
12037              newLast.next = clone;
12038              newLast = clone;
12039            }
12040
12041            update = update.next;
12042          } while (update !== null); // Append the captured update the end of the cloned list.
12043
12044
12045          if (newLast === null) {
12046            newFirst = newLast = capturedUpdate;
12047          } else {
12048            newLast.next = capturedUpdate;
12049            newLast = capturedUpdate;
12050          }
12051        } else {
12052          // There are no base updates.
12053          newFirst = newLast = capturedUpdate;
12054        }
12055
12056        queue = {
12057          baseState: currentQueue.baseState,
12058          firstBaseUpdate: newFirst,
12059          lastBaseUpdate: newLast,
12060          shared: currentQueue.shared,
12061          effects: currentQueue.effects
12062        };
12063        workInProgress.updateQueue = queue;
12064        return;
12065      }
12066    } // Append the update to the end of the list.
12067
12068
12069    var lastBaseUpdate = queue.lastBaseUpdate;
12070
12071    if (lastBaseUpdate === null) {
12072      queue.firstBaseUpdate = capturedUpdate;
12073    } else {
12074      lastBaseUpdate.next = capturedUpdate;
12075    }
12076
12077    queue.lastBaseUpdate = capturedUpdate;
12078  }
12079
12080  function getStateFromUpdate(workInProgress, queue, update, prevState, nextProps, instance) {
12081    switch (update.tag) {
12082      case ReplaceState:
12083        {
12084          var payload = update.payload;
12085
12086          if (typeof payload === 'function') {
12087            // Updater function
12088            {
12089              enterDisallowedContextReadInDEV();
12090            }
12091
12092            var nextState = payload.call(instance, prevState, nextProps);
12093
12094            {
12095              if ( workInProgress.mode & StrictMode) {
12096                disableLogs();
12097
12098                try {
12099                  payload.call(instance, prevState, nextProps);
12100                } finally {
12101                  reenableLogs();
12102                }
12103              }
12104
12105              exitDisallowedContextReadInDEV();
12106            }
12107
12108            return nextState;
12109          } // State object
12110
12111
12112          return payload;
12113        }
12114
12115      case CaptureUpdate:
12116        {
12117          workInProgress.flags = workInProgress.flags & ~ShouldCapture | DidCapture;
12118        }
12119      // Intentional fallthrough
12120
12121      case UpdateState:
12122        {
12123          var _payload = update.payload;
12124          var partialState;
12125
12126          if (typeof _payload === 'function') {
12127            // Updater function
12128            {
12129              enterDisallowedContextReadInDEV();
12130            }
12131
12132            partialState = _payload.call(instance, prevState, nextProps);
12133
12134            {
12135              if ( workInProgress.mode & StrictMode) {
12136                disableLogs();
12137
12138                try {
12139                  _payload.call(instance, prevState, nextProps);
12140                } finally {
12141                  reenableLogs();
12142                }
12143              }
12144
12145              exitDisallowedContextReadInDEV();
12146            }
12147          } else {
12148            // Partial state object
12149            partialState = _payload;
12150          }
12151
12152          if (partialState === null || partialState === undefined) {
12153            // Null and undefined are treated as no-ops.
12154            return prevState;
12155          } // Merge the partial state and the previous state.
12156
12157
12158          return _assign({}, prevState, partialState);
12159        }
12160
12161      case ForceUpdate:
12162        {
12163          hasForceUpdate = true;
12164          return prevState;
12165        }
12166    }
12167
12168    return prevState;
12169  }
12170
12171  function processUpdateQueue(workInProgress, props, instance, renderLanes) {
12172    // This is always non-null on a ClassComponent or HostRoot
12173    var queue = workInProgress.updateQueue;
12174    hasForceUpdate = false;
12175
12176    {
12177      currentlyProcessingQueue = queue.shared;
12178    }
12179
12180    var firstBaseUpdate = queue.firstBaseUpdate;
12181    var lastBaseUpdate = queue.lastBaseUpdate; // Check if there are pending updates. If so, transfer them to the base queue.
12182
12183    var pendingQueue = queue.shared.pending;
12184
12185    if (pendingQueue !== null) {
12186      queue.shared.pending = null; // The pending queue is circular. Disconnect the pointer between first
12187      // and last so that it's non-circular.
12188
12189      var lastPendingUpdate = pendingQueue;
12190      var firstPendingUpdate = lastPendingUpdate.next;
12191      lastPendingUpdate.next = null; // Append pending updates to base queue
12192
12193      if (lastBaseUpdate === null) {
12194        firstBaseUpdate = firstPendingUpdate;
12195      } else {
12196        lastBaseUpdate.next = firstPendingUpdate;
12197      }
12198
12199      lastBaseUpdate = lastPendingUpdate; // If there's a current queue, and it's different from the base queue, then
12200      // we need to transfer the updates to that queue, too. Because the base
12201      // queue is a singly-linked list with no cycles, we can append to both
12202      // lists and take advantage of structural sharing.
12203      // TODO: Pass `current` as argument
12204
12205      var current = workInProgress.alternate;
12206
12207      if (current !== null) {
12208        // This is always non-null on a ClassComponent or HostRoot
12209        var currentQueue = current.updateQueue;
12210        var currentLastBaseUpdate = currentQueue.lastBaseUpdate;
12211
12212        if (currentLastBaseUpdate !== lastBaseUpdate) {
12213          if (currentLastBaseUpdate === null) {
12214            currentQueue.firstBaseUpdate = firstPendingUpdate;
12215          } else {
12216            currentLastBaseUpdate.next = firstPendingUpdate;
12217          }
12218
12219          currentQueue.lastBaseUpdate = lastPendingUpdate;
12220        }
12221      }
12222    } // These values may change as we process the queue.
12223
12224
12225    if (firstBaseUpdate !== null) {
12226      // Iterate through the list of updates to compute the result.
12227      var newState = queue.baseState; // TODO: Don't need to accumulate this. Instead, we can remove renderLanes
12228      // from the original lanes.
12229
12230      var newLanes = NoLanes;
12231      var newBaseState = null;
12232      var newFirstBaseUpdate = null;
12233      var newLastBaseUpdate = null;
12234      var update = firstBaseUpdate;
12235
12236      do {
12237        var updateLane = update.lane;
12238        var updateEventTime = update.eventTime;
12239
12240        if (!isSubsetOfLanes(renderLanes, updateLane)) {
12241          // Priority is insufficient. Skip this update. If this is the first
12242          // skipped update, the previous update/state is the new base
12243          // update/state.
12244          var clone = {
12245            eventTime: updateEventTime,
12246            lane: updateLane,
12247            tag: update.tag,
12248            payload: update.payload,
12249            callback: update.callback,
12250            next: null
12251          };
12252
12253          if (newLastBaseUpdate === null) {
12254            newFirstBaseUpdate = newLastBaseUpdate = clone;
12255            newBaseState = newState;
12256          } else {
12257            newLastBaseUpdate = newLastBaseUpdate.next = clone;
12258          } // Update the remaining priority in the queue.
12259
12260
12261          newLanes = mergeLanes(newLanes, updateLane);
12262        } else {
12263          // This update does have sufficient priority.
12264          if (newLastBaseUpdate !== null) {
12265            var _clone = {
12266              eventTime: updateEventTime,
12267              // This update is going to be committed so we never want uncommit
12268              // it. Using NoLane works because 0 is a subset of all bitmasks, so
12269              // this will never be skipped by the check above.
12270              lane: NoLane,
12271              tag: update.tag,
12272              payload: update.payload,
12273              callback: update.callback,
12274              next: null
12275            };
12276            newLastBaseUpdate = newLastBaseUpdate.next = _clone;
12277          } // Process this update.
12278
12279
12280          newState = getStateFromUpdate(workInProgress, queue, update, newState, props, instance);
12281          var callback = update.callback;
12282
12283          if (callback !== null) {
12284            workInProgress.flags |= Callback;
12285            var effects = queue.effects;
12286
12287            if (effects === null) {
12288              queue.effects = [update];
12289            } else {
12290              effects.push(update);
12291            }
12292          }
12293        }
12294
12295        update = update.next;
12296
12297        if (update === null) {
12298          pendingQueue = queue.shared.pending;
12299
12300          if (pendingQueue === null) {
12301            break;
12302          } else {
12303            // An update was scheduled from inside a reducer. Add the new
12304            // pending updates to the end of the list and keep processing.
12305            var _lastPendingUpdate = pendingQueue; // Intentionally unsound. Pending updates form a circular list, but we
12306            // unravel them when transferring them to the base queue.
12307
12308            var _firstPendingUpdate = _lastPendingUpdate.next;
12309            _lastPendingUpdate.next = null;
12310            update = _firstPendingUpdate;
12311            queue.lastBaseUpdate = _lastPendingUpdate;
12312            queue.shared.pending = null;
12313          }
12314        }
12315      } while (true);
12316
12317      if (newLastBaseUpdate === null) {
12318        newBaseState = newState;
12319      }
12320
12321      queue.baseState = newBaseState;
12322      queue.firstBaseUpdate = newFirstBaseUpdate;
12323      queue.lastBaseUpdate = newLastBaseUpdate; // Set the remaining expiration time to be whatever is remaining in the queue.
12324      // This should be fine because the only two other things that contribute to
12325      // expiration time are props and context. We're already in the middle of the
12326      // begin phase by the time we start processing the queue, so we've already
12327      // dealt with the props. Context in components that specify
12328      // shouldComponentUpdate is tricky; but we'll have to account for
12329      // that regardless.
12330
vendor: 5,595 bytes, lines 12331-12489
12331      markSkippedUpdateLanes(newLanes);
12332      workInProgress.lanes = newLanes;
12333      workInProgress.memoizedState = newState;
12334    }
12335
12336    {
12337      currentlyProcessingQueue = null;
12338    }
12339  }
12340
12341  function callCallback(callback, context) {
12342    if (!(typeof callback === 'function')) {
12343      {
12344        throw Error( "Invalid argument passed as callback. Expected a function. Instead received: " + callback );
12345      }
12346    }
12347
12348    callback.call(context);
12349  }
12350
12351  function resetHasForceUpdateBeforeProcessing() {
12352    hasForceUpdate = false;
12353  }
12354  function checkHasForceUpdateAfterProcessing() {
12355    return hasForceUpdate;
12356  }
12357  function commitUpdateQueue(finishedWork, finishedQueue, instance) {
12358    // Commit the effects
12359    var effects = finishedQueue.effects;
12360    finishedQueue.effects = null;
12361
12362    if (effects !== null) {
12363      for (var i = 0; i < effects.length; i++) {
12364        var effect = effects[i];
12365        var callback = effect.callback;
12366
12367        if (callback !== null) {
12368          effect.callback = null;
12369          callCallback(callback, instance);
12370        }
12371      }
12372    }
12373  }
12374
12375  var fakeInternalInstance = {};
12376  var isArray = Array.isArray; // React.Component uses a shared frozen object by default.
12377  // We'll use it to determine whether we need to initialize legacy refs.
12378
12379  var emptyRefsObject = new React.Component().refs;
12380  var didWarnAboutStateAssignmentForComponent;
12381  var didWarnAboutUninitializedState;
12382  var didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate;
12383  var didWarnAboutLegacyLifecyclesAndDerivedState;
12384  var didWarnAboutUndefinedDerivedState;
12385  var warnOnUndefinedDerivedState;
12386  var warnOnInvalidCallback;
12387  var didWarnAboutDirectlyAssigningPropsToState;
12388  var didWarnAboutContextTypeAndContextTypes;
12389  var didWarnAboutInvalidateContextType;
12390
12391  {
12392    didWarnAboutStateAssignmentForComponent = new Set();
12393    didWarnAboutUninitializedState = new Set();
12394    didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate = new Set();
12395    didWarnAboutLegacyLifecyclesAndDerivedState = new Set();
12396    didWarnAboutDirectlyAssigningPropsToState = new Set();
12397    didWarnAboutUndefinedDerivedState = new Set();
12398    didWarnAboutContextTypeAndContextTypes = new Set();
12399    didWarnAboutInvalidateContextType = new Set();
12400    var didWarnOnInvalidCallback = new Set();
12401
12402    warnOnInvalidCallback = function (callback, callerName) {
12403      if (callback === null || typeof callback === 'function') {
12404        return;
12405      }
12406
12407      var key = callerName + '_' + callback;
12408
12409      if (!didWarnOnInvalidCallback.has(key)) {
12410        didWarnOnInvalidCallback.add(key);
12411
12412        error('%s(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callerName, callback);
12413      }
12414    };
12415
12416    warnOnUndefinedDerivedState = function (type, partialState) {
12417      if (partialState === undefined) {
12418        var componentName = getComponentName(type) || 'Component';
12419
12420        if (!didWarnAboutUndefinedDerivedState.has(componentName)) {
12421          didWarnAboutUndefinedDerivedState.add(componentName);
12422
12423          error('%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. ' + 'You have returned undefined.', componentName);
12424        }
12425      }
12426    }; // This is so gross but it's at least non-critical and can be removed if
12427    // it causes problems. This is meant to give a nicer error message for
12428    // ReactDOM15.unstable_renderSubtreeIntoContainer(reactDOM16Component,
12429    // ...)) which otherwise throws a "_processChildContext is not a function"
12430    // exception.
12431
12432
12433    Object.defineProperty(fakeInternalInstance, '_processChildContext', {
12434      enumerable: false,
12435      value: function () {
12436        {
12437          {
12438            throw Error( "_processChildContext is not available in React 16+. This likely means you have multiple copies of React and are attempting to nest a React 15 tree inside a React 16 tree using unstable_renderSubtreeIntoContainer, which isn't supported. Try to make sure you have only one copy of React (and ideally, switch to ReactDOM.createPortal)." );
12439          }
12440        }
12441      }
12442    });
12443    Object.freeze(fakeInternalInstance);
12444  }
12445
12446  function applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, nextProps) {
12447    var prevState = workInProgress.memoizedState;
12448
12449    {
12450      if ( workInProgress.mode & StrictMode) {
12451        disableLogs();
12452
12453        try {
12454          // Invoke the function an extra time to help detect side-effects.
12455          getDerivedStateFromProps(nextProps, prevState);
12456        } finally {
12457          reenableLogs();
12458        }
12459      }
12460    }
12461
12462    var partialState = getDerivedStateFromProps(nextProps, prevState);
12463
12464    {
12465      warnOnUndefinedDerivedState(ctor, partialState);
12466    } // Merge the partial state and the previous state.
12467
12468
12469    var memoizedState = partialState === null || partialState === undefined ? prevState : _assign({}, prevState, partialState);
12470    workInProgress.memoizedState = memoizedState; // Once the update queue is empty, persist the derived state onto the
12471    // base state.
12472
12473    if (workInProgress.lanes === NoLanes) {
12474      // Queue is always non-null for classes
12475      var updateQueue = workInProgress.updateQueue;
12476      updateQueue.baseState = memoizedState;
12477    }
12478  }
12479  var classComponentUpdater = {
12480    isMounted: isMounted,
12481    enqueueSetState: function (inst, payload, callback) {
12482      var fiber = get(inst);
12483      var eventTime = requestEventTime();
12484      var lane = requestUpdateLane(fiber);
12485      var update = createUpdate(eventTime, lane);
12486      update.payload = payload;
12487
12488      if (callback !== undefined && callback !== null) {
12489        {
12490          warnOnInvalidCallback(callback, 'setState');
12491        }
12492
12493        update.callback = callback;
12494      }
12495
12496      enqueueUpdate(fiber, update);
12497      scheduleUpdateOnFiber(fiber, lane, eventTime);
12498    },
12499    enqueueReplaceState: function (inst, payload, callback) {
12500      var fiber = get(inst);
12501      var eventTime = requestEventTime();
12502      var lane = requestUpdateLane(fiber);
12503      var update = createUpdate(eventTime, lane);
12504      update.tag = ReplaceState;
12505      update.payload = payload;
12506
12507      if (callback !== undefined && callback !== null) {
12508        {
12509          warnOnInvalidCallback(callback, 'replaceState');
12510        }
12511
12512        update.callback = callback;
12513      }
12514
12515      enqueueUpdate(fiber, update);
12516      scheduleUpdateOnFiber(fiber, lane, eventTime);
12517    },
12518    enqueueForceUpdate: function (inst, callback) {
12519      var fiber = get(inst);
12520      var eventTime = requestEventTime();
12521      var lane = requestUpdateLane(fiber);
12522      var update = createUpdate(eventTime, lane);
12523      update.tag = ForceUpdate;
12524
12525      if (callback !== undefined && callback !== null) {
12526        {
vendor: 17,183 bytes, lines 12527-12892
12527          warnOnInvalidCallback(callback, 'forceUpdate');
12528        }
12529
12530        update.callback = callback;
12531      }
12532
12533      enqueueUpdate(fiber, update);
12534      scheduleUpdateOnFiber(fiber, lane, eventTime);
12535    }
12536  };
12537
12538  function checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext) {
12539    var instance = workInProgress.stateNode;
12540
12541    if (typeof instance.shouldComponentUpdate === 'function') {
12542      {
12543        if ( workInProgress.mode & StrictMode) {
12544          disableLogs();
12545
12546          try {
12547            // Invoke the function an extra time to help detect side-effects.
12548            instance.shouldComponentUpdate(newProps, newState, nextContext);
12549          } finally {
12550            reenableLogs();
12551          }
12552        }
12553      }
12554
12555      var shouldUpdate = instance.shouldComponentUpdate(newProps, newState, nextContext);
12556
12557      {
12558        if (shouldUpdate === undefined) {
12559          error('%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', getComponentName(ctor) || 'Component');
12560        }
12561      }
12562
12563      return shouldUpdate;
12564    }
12565
12566    if (ctor.prototype && ctor.prototype.isPureReactComponent) {
12567      return !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState);
12568    }
12569
12570    return true;
12571  }
12572
12573  function checkClassInstance(workInProgress, ctor, newProps) {
12574    var instance = workInProgress.stateNode;
12575
12576    {
12577      var name = getComponentName(ctor) || 'Component';
12578      var renderPresent = instance.render;
12579
12580      if (!renderPresent) {
12581        if (ctor.prototype && typeof ctor.prototype.render === 'function') {
12582          error('%s(...): No `render` method found on the returned component ' + 'instance: did you accidentally return an object from the constructor?', name);
12583        } else {
12584          error('%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render`.', name);
12585        }
12586      }
12587
12588      if (instance.getInitialState && !instance.getInitialState.isReactClassApproved && !instance.state) {
12589        error('getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', name);
12590      }
12591
12592      if (instance.getDefaultProps && !instance.getDefaultProps.isReactClassApproved) {
12593        error('getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', name);
12594      }
12595
12596      if (instance.propTypes) {
12597        error('propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', name);
12598      }
12599
12600      if (instance.contextType) {
12601        error('contextType was defined as an instance property on %s. Use a static ' + 'property to define contextType instead.', name);
12602      }
12603
12604      {
12605        if (instance.contextTypes) {
12606          error('contextTypes was defined as an instance property on %s. Use a static ' + 'property to define contextTypes instead.', name);
12607        }
12608
12609        if (ctor.contextType && ctor.contextTypes && !didWarnAboutContextTypeAndContextTypes.has(ctor)) {
12610          didWarnAboutContextTypeAndContextTypes.add(ctor);
12611
12612          error('%s declares both contextTypes and contextType static properties. ' + 'The legacy contextTypes property will be ignored.', name);
12613        }
12614      }
12615
12616      if (typeof instance.componentShouldUpdate === 'function') {
12617        error('%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', name);
12618      }
12619
12620      if (ctor.prototype && ctor.prototype.isPureReactComponent && typeof instance.shouldComponentUpdate !== 'undefined') {
12621        error('%s has a method called shouldComponentUpdate(). ' + 'shouldComponentUpdate should not be used when extending React.PureComponent. ' + 'Please extend React.Component if shouldComponentUpdate is used.', getComponentName(ctor) || 'A pure component');
12622      }
12623
12624      if (typeof instance.componentDidUnmount === 'function') {
12625        error('%s has a method called ' + 'componentDidUnmount(). But there is no such lifecycle method. ' + 'Did you mean componentWillUnmount()?', name);
12626      }
12627
12628      if (typeof instance.componentDidReceiveProps === 'function') {
12629        error('%s has a method called ' + 'componentDidReceiveProps(). But there is no such lifecycle method. ' + 'If you meant to update the state in response to changing props, ' + 'use componentWillReceiveProps(). If you meant to fetch data or ' + 'run side-effects or mutations after React has updated the UI, use componentDidUpdate().', name);
12630      }
12631
12632      if (typeof instance.componentWillRecieveProps === 'function') {
12633        error('%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', name);
12634      }
12635
12636      if (typeof instance.UNSAFE_componentWillRecieveProps === 'function') {
12637        error('%s has a method called ' + 'UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?', name);
12638      }
12639
12640      var hasMutatedProps = instance.props !== newProps;
12641
12642      if (instance.props !== undefined && hasMutatedProps) {
12643        error('%s(...): When calling super() in `%s`, make sure to pass ' + "up the same props that your component's constructor was passed.", name, name);
12644      }
12645
12646      if (instance.defaultProps) {
12647        error('Setting defaultProps as an instance property on %s is not supported and will be ignored.' + ' Instead, define defaultProps as a static property on %s.', name, name);
12648      }
12649
12650      if (typeof instance.getSnapshotBeforeUpdate === 'function' && typeof instance.componentDidUpdate !== 'function' && !didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.has(ctor)) {
12651        didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.add(ctor);
12652
12653        error('%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). ' + 'This component defines getSnapshotBeforeUpdate() only.', getComponentName(ctor));
12654      }
12655
12656      if (typeof instance.getDerivedStateFromProps === 'function') {
12657        error('%s: getDerivedStateFromProps() is defined as an instance method ' + 'and will be ignored. Instead, declare it as a static method.', name);
12658      }
12659
12660      if (typeof instance.getDerivedStateFromError === 'function') {
12661        error('%s: getDerivedStateFromError() is defined as an instance method ' + 'and will be ignored. Instead, declare it as a static method.', name);
12662      }
12663
12664      if (typeof ctor.getSnapshotBeforeUpdate === 'function') {
12665        error('%s: getSnapshotBeforeUpdate() is defined as a static method ' + 'and will be ignored. Instead, declare it as an instance method.', name);
12666      }
12667
12668      var _state = instance.state;
12669
12670      if (_state && (typeof _state !== 'object' || isArray(_state))) {
12671        error('%s.state: must be set to an object or null', name);
12672      }
12673
12674      if (typeof instance.getChildContext === 'function' && typeof ctor.childContextTypes !== 'object') {
12675        error('%s.getChildContext(): childContextTypes must be defined in order to ' + 'use getChildContext().', name);
12676      }
12677    }
12678  }
12679
12680  function adoptClassInstance(workInProgress, instance) {
12681    instance.updater = classComponentUpdater;
12682    workInProgress.stateNode = instance; // The instance needs access to the fiber so that it can schedule updates
12683
12684    set(instance, workInProgress);
12685
12686    {
12687      instance._reactInternalInstance = fakeInternalInstance;
12688    }
12689  }
12690
12691  function constructClassInstance(workInProgress, ctor, props) {
12692    var isLegacyContextConsumer = false;
12693    var unmaskedContext = emptyContextObject;
12694    var context = emptyContextObject;
12695    var contextType = ctor.contextType;
12696
12697    {
12698      if ('contextType' in ctor) {
12699        var isValid = // Allow null for conditional declaration
12700        contextType === null || contextType !== undefined && contextType.$$typeof === REACT_CONTEXT_TYPE && contextType._context === undefined; // Not a <Context.Consumer>
12701
12702        if (!isValid && !didWarnAboutInvalidateContextType.has(ctor)) {
12703          didWarnAboutInvalidateContextType.add(ctor);
12704          var addendum = '';
12705
12706          if (contextType === undefined) {
12707            addendum = ' However, it is set to undefined. ' + 'This can be caused by a typo or by mixing up named and default imports. ' + 'This can also happen due to a circular dependency, so ' + 'try moving the createContext() call to a separate file.';
12708          } else if (typeof contextType !== 'object') {
12709            addendum = ' However, it is set to a ' + typeof contextType + '.';
12710          } else if (contextType.$$typeof === REACT_PROVIDER_TYPE) {
12711            addendum = ' Did you accidentally pass the Context.Provider instead?';
12712          } else if (contextType._context !== undefined) {
12713            // <Context.Consumer>
12714            addendum = ' Did you accidentally pass the Context.Consumer instead?';
12715          } else {
12716            addendum = ' However, it is set to an object with keys {' + Object.keys(contextType).join(', ') + '}.';
12717          }
12718
12719          error('%s defines an invalid contextType. ' + 'contextType should point to the Context object returned by React.createContext().%s', getComponentName(ctor) || 'Component', addendum);
12720        }
12721      }
12722    }
12723
12724    if (typeof contextType === 'object' && contextType !== null) {
12725      context = readContext(contextType);
12726    } else {
12727      unmaskedContext = getUnmaskedContext(workInProgress, ctor, true);
12728      var contextTypes = ctor.contextTypes;
12729      isLegacyContextConsumer = contextTypes !== null && contextTypes !== undefined;
12730      context = isLegacyContextConsumer ? getMaskedContext(workInProgress, unmaskedContext) : emptyContextObject;
12731    } // Instantiate twice to help detect side-effects.
12732
12733
12734    {
12735      if ( workInProgress.mode & StrictMode) {
12736        disableLogs();
12737
12738        try {
12739          new ctor(props, context); // eslint-disable-line no-new
12740        } finally {
12741          reenableLogs();
12742        }
12743      }
12744    }
12745
12746    var instance = new ctor(props, context);
12747    var state = workInProgress.memoizedState = instance.state !== null && instance.state !== undefined ? instance.state : null;
12748    adoptClassInstance(workInProgress, instance);
12749
12750    {
12751      if (typeof ctor.getDerivedStateFromProps === 'function' && state === null) {
12752        var componentName = getComponentName(ctor) || 'Component';
12753
12754        if (!didWarnAboutUninitializedState.has(componentName)) {
12755          didWarnAboutUninitializedState.add(componentName);
12756
12757          error('`%s` uses `getDerivedStateFromProps` but its initial state is ' + '%s. This is not recommended. Instead, define the initial state by ' + 'assigning an object to `this.state` in the constructor of `%s`. ' + 'This ensures that `getDerivedStateFromProps` arguments have a consistent shape.', componentName, instance.state === null ? 'null' : 'undefined', componentName);
12758        }
12759      } // If new component APIs are defined, "unsafe" lifecycles won't be called.
12760      // Warn about these lifecycles if they are present.
12761      // Don't warn about react-lifecycles-compat polyfilled methods though.
12762
12763
12764      if (typeof ctor.getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function') {
12765        var foundWillMountName = null;
12766        var foundWillReceivePropsName = null;
12767        var foundWillUpdateName = null;
12768
12769        if (typeof instance.componentWillMount === 'function' && instance.componentWillMount.__suppressDeprecationWarning !== true) {
12770          foundWillMountName = 'componentWillMount';
12771        } else if (typeof instance.UNSAFE_componentWillMount === 'function') {
12772          foundWillMountName = 'UNSAFE_componentWillMount';
12773        }
12774
12775        if (typeof instance.componentWillReceiveProps === 'function' && instance.componentWillReceiveProps.__suppressDeprecationWarning !== true) {
12776          foundWillReceivePropsName = 'componentWillReceiveProps';
12777        } else if (typeof instance.UNSAFE_componentWillReceiveProps === 'function') {
12778          foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';
12779        }
12780
12781        if (typeof instance.componentWillUpdate === 'function' && instance.componentWillUpdate.__suppressDeprecationWarning !== true) {
12782          foundWillUpdateName = 'componentWillUpdate';
12783        } else if (typeof instance.UNSAFE_componentWillUpdate === 'function') {
12784          foundWillUpdateName = 'UNSAFE_componentWillUpdate';
12785        }
12786
12787        if (foundWillMountName !== null || foundWillReceivePropsName !== null || foundWillUpdateName !== null) {
12788          var _componentName = getComponentName(ctor) || 'Component';
12789
12790          var newApiName = typeof ctor.getDerivedStateFromProps === 'function' ? 'getDerivedStateFromProps()' : 'getSnapshotBeforeUpdate()';
12791
12792          if (!didWarnAboutLegacyLifecyclesAndDerivedState.has(_componentName)) {
12793            didWarnAboutLegacyLifecyclesAndDerivedState.add(_componentName);
12794
12795            error('Unsafe legacy lifecycles will not be called for components using new component APIs.\n\n' + '%s uses %s but also contains the following legacy lifecycles:%s%s%s\n\n' + 'The above lifecycles should be removed. Learn more about this warning here:\n' + 'https://reactjs.org/link/unsafe-component-lifecycles', _componentName, newApiName, foundWillMountName !== null ? "\n  " + foundWillMountName : '', foundWillReceivePropsName !== null ? "\n  " + foundWillReceivePropsName : '', foundWillUpdateName !== null ? "\n  " + foundWillUpdateName : '');
12796          }
12797        }
12798      }
12799    } // Cache unmasked context so we can avoid recreating masked context unless necessary.
12800    // ReactFiberContext usually updates this cache but can't for newly-created instances.
12801
12802
12803    if (isLegacyContextConsumer) {
12804      cacheContext(workInProgress, unmaskedContext, context);
12805    }
12806
12807    return instance;
12808  }
12809
12810  function callComponentWillMount(workInProgress, instance) {
12811    var oldState = instance.state;
12812
12813    if (typeof instance.componentWillMount === 'function') {
12814      instance.componentWillMount();
12815    }
12816
12817    if (typeof instance.UNSAFE_componentWillMount === 'function') {
12818      instance.UNSAFE_componentWillMount();
12819    }
12820
12821    if (oldState !== instance.state) {
12822      {
12823        error('%s.componentWillMount(): Assigning directly to this.state is ' + "deprecated (except inside a component's " + 'constructor). Use setState instead.', getComponentName(workInProgress.type) || 'Component');
12824      }
12825
12826      classComponentUpdater.enqueueReplaceState(instance, instance.state, null);
12827    }
12828  }
12829
12830  function callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext) {
12831    var oldState = instance.state;
12832
12833    if (typeof instance.componentWillReceiveProps === 'function') {
12834      instance.componentWillReceiveProps(newProps, nextContext);
12835    }
12836
12837    if (typeof instance.UNSAFE_componentWillReceiveProps === 'function') {
12838      instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);
12839    }
12840
12841    if (instance.state !== oldState) {
12842      {
12843        var componentName = getComponentName(workInProgress.type) || 'Component';
12844
12845        if (!didWarnAboutStateAssignmentForComponent.has(componentName)) {
12846          didWarnAboutStateAssignmentForComponent.add(componentName);
12847
12848          error('%s.componentWillReceiveProps(): Assigning directly to ' + "this.state is deprecated (except inside a component's " + 'constructor). Use setState instead.', componentName);
12849        }
12850      }
12851
12852      classComponentUpdater.enqueueReplaceState(instance, instance.state, null);
12853    }
12854  } // Invokes the mount life-cycles on a previously never rendered instance.
12855
12856
12857  function mountClassInstance(workInProgress, ctor, newProps, renderLanes) {
12858    {
12859      checkClassInstance(workInProgress, ctor, newProps);
12860    }
12861
12862    var instance = workInProgress.stateNode;
12863    instance.props = newProps;
12864    instance.state = workInProgress.memoizedState;
12865    instance.refs = emptyRefsObject;
12866    initializeUpdateQueue(workInProgress);
12867    var contextType = ctor.contextType;
12868
12869    if (typeof contextType === 'object' && contextType !== null) {
12870      instance.context = readContext(contextType);
12871    } else {
12872      var unmaskedContext = getUnmaskedContext(workInProgress, ctor, true);
12873      instance.context = getMaskedContext(workInProgress, unmaskedContext);
12874    }
12875
12876    {
12877      if (instance.state === newProps) {
12878        var componentName = getComponentName(ctor) || 'Component';
12879
12880        if (!didWarnAboutDirectlyAssigningPropsToState.has(componentName)) {
12881          didWarnAboutDirectlyAssigningPropsToState.add(componentName);
12882
12883          error('%s: It is not recommended to assign props directly to state ' + "because updates to props won't be reflected in state. " + 'In most cases, it is better to use props directly.', componentName);
12884        }
12885      }
12886
12887      if (workInProgress.mode & StrictMode) {
12888        ReactStrictModeWarnings.recordLegacyContextWarning(workInProgress, instance);
12889      }
12890
12891      {
12892        ReactStrictModeWarnings.recordUnsafeLifecycleWarnings(wor
vendor: 10,774 bytes, lines 12892-13129
12892kInProgress, instance);
12893      }
12894    }
12895
12896    processUpdateQueue(workInProgress, newProps, instance, renderLanes);
12897    instance.state = workInProgress.memoizedState;
12898    var getDerivedStateFromProps = ctor.getDerivedStateFromProps;
12899
12900    if (typeof getDerivedStateFromProps === 'function') {
12901      applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);
12902      instance.state = workInProgress.memoizedState;
12903    } // In order to support react-lifecycles-compat polyfilled components,
12904    // Unsafe lifecycles should not be invoked for components using the new APIs.
12905
12906
12907    if (typeof ctor.getDerivedStateFromProps !== 'function' && typeof instance.getSnapshotBeforeUpdate !== 'function' && (typeof instance.UNSAFE_componentWillMount === 'function' || typeof instance.componentWillMount === 'function')) {
12908      callComponentWillMount(workInProgress, instance); // If we had additional state updates during this life-cycle, let's
12909      // process them now.
12910
12911      processUpdateQueue(workInProgress, newProps, instance, renderLanes);
12912      instance.state = workInProgress.memoizedState;
12913    }
12914
12915    if (typeof instance.componentDidMount === 'function') {
12916      workInProgress.flags |= Update;
12917    }
12918  }
12919
12920  function resumeMountClassInstance(workInProgress, ctor, newProps, renderLanes) {
12921    var instance = workInProgress.stateNode;
12922    var oldProps = workInProgress.memoizedProps;
12923    instance.props = oldProps;
12924    var oldContext = instance.context;
12925    var contextType = ctor.contextType;
12926    var nextContext = emptyContextObject;
12927
12928    if (typeof contextType === 'object' && contextType !== null) {
12929      nextContext = readContext(contextType);
12930    } else {
12931      var nextLegacyUnmaskedContext = getUnmaskedContext(workInProgress, ctor, true);
12932      nextContext = getMaskedContext(workInProgress, nextLegacyUnmaskedContext);
12933    }
12934
12935    var getDerivedStateFromProps = ctor.getDerivedStateFromProps;
12936    var hasNewLifecycles = typeof getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function'; // Note: During these life-cycles, instance.props/instance.state are what
12937    // ever the previously attempted to render - not the "current". However,
12938    // during componentDidUpdate we pass the "current" props.
12939    // In order to support react-lifecycles-compat polyfilled components,
12940    // Unsafe lifecycles should not be invoked for components using the new APIs.
12941
12942    if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillReceiveProps === 'function' || typeof instance.componentWillReceiveProps === 'function')) {
12943      if (oldProps !== newProps || oldContext !== nextContext) {
12944        callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext);
12945      }
12946    }
12947
12948    resetHasForceUpdateBeforeProcessing();
12949    var oldState = workInProgress.memoizedState;
12950    var newState = instance.state = oldState;
12951    processUpdateQueue(workInProgress, newProps, instance, renderLanes);
12952    newState = workInProgress.memoizedState;
12953
12954    if (oldProps === newProps && oldState === newState && !hasContextChanged() && !checkHasForceUpdateAfterProcessing()) {
12955      // If an update was already in progress, we should schedule an Update
12956      // effect even though we're bailing out, so that cWU/cDU are called.
12957      if (typeof instance.componentDidMount === 'function') {
12958        workInProgress.flags |= Update;
12959      }
12960
12961      return false;
12962    }
12963
12964    if (typeof getDerivedStateFromProps === 'function') {
12965      applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);
12966      newState = workInProgress.memoizedState;
12967    }
12968
12969    var shouldUpdate = checkHasForceUpdateAfterProcessing() || checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext);
12970
12971    if (shouldUpdate) {
12972      // In order to support react-lifecycles-compat polyfilled components,
12973      // Unsafe lifecycles should not be invoked for components using the new APIs.
12974      if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillMount === 'function' || typeof instance.componentWillMount === 'function')) {
12975        if (typeof instance.componentWillMount === 'function') {
12976          instance.componentWillMount();
12977        }
12978
12979        if (typeof instance.UNSAFE_componentWillMount === 'function') {
12980          instance.UNSAFE_componentWillMount();
12981        }
12982      }
12983
12984      if (typeof instance.componentDidMount === 'function') {
12985        workInProgress.flags |= Update;
12986      }
12987    } else {
12988      // If an update was already in progress, we should schedule an Update
12989      // effect even though we're bailing out, so that cWU/cDU are called.
12990      if (typeof instance.componentDidMount === 'function') {
12991        workInProgress.flags |= Update;
12992      } // If shouldComponentUpdate returned false, we should still update the
12993      // memoized state to indicate that this work can be reused.
12994
12995
12996      workInProgress.memoizedProps = newProps;
12997      workInProgress.memoizedState = newState;
12998    } // Update the existing instance's state, props, and context pointers even
12999    // if shouldComponentUpdate returns false.
13000
13001
13002    instance.props = newProps;
13003    instance.state = newState;
13004    instance.context = nextContext;
13005    return shouldUpdate;
13006  } // Invokes the update life-cycles and returns false if it shouldn't rerender.
13007
13008
13009  function updateClassInstance(current, workInProgress, ctor, newProps, renderLanes) {
13010    var instance = workInProgress.stateNode;
13011    cloneUpdateQueue(current, workInProgress);
13012    var unresolvedOldProps = workInProgress.memoizedProps;
13013    var oldProps = workInProgress.type === workInProgress.elementType ? unresolvedOldProps : resolveDefaultProps(workInProgress.type, unresolvedOldProps);
13014    instance.props = oldProps;
13015    var unresolvedNewProps = workInProgress.pendingProps;
13016    var oldContext = instance.context;
13017    var contextType = ctor.contextType;
13018    var nextContext = emptyContextObject;
13019
13020    if (typeof contextType === 'object' && contextType !== null) {
13021      nextContext = readContext(contextType);
13022    } else {
13023      var nextUnmaskedContext = getUnmaskedContext(workInProgress, ctor, true);
13024      nextContext = getMaskedContext(workInProgress, nextUnmaskedContext);
13025    }
13026
13027    var getDerivedStateFromProps = ctor.getDerivedStateFromProps;
13028    var hasNewLifecycles = typeof getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function'; // Note: During these life-cycles, instance.props/instance.state are what
13029    // ever the previously attempted to render - not the "current". However,
13030    // during componentDidUpdate we pass the "current" props.
13031    // In order to support react-lifecycles-compat polyfilled components,
13032    // Unsafe lifecycles should not be invoked for components using the new APIs.
13033
13034    if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillReceiveProps === 'function' || typeof instance.componentWillReceiveProps === 'function')) {
13035      if (unresolvedOldProps !== unresolvedNewProps || oldContext !== nextContext) {
13036        callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext);
13037      }
13038    }
13039
13040    resetHasForceUpdateBeforeProcessing();
13041    var oldState = workInProgress.memoizedState;
13042    var newState = instance.state = oldState;
13043    processUpdateQueue(workInProgress, newProps, instance, renderLanes);
13044    newState = workInProgress.memoizedState;
13045
13046    if (unresolvedOldProps === unresolvedNewProps && oldState === newState && !hasContextChanged() && !checkHasForceUpdateAfterProcessing()) {
13047      // If an update was already in progress, we should schedule an Update
13048      // effect even though we're bailing out, so that cWU/cDU are called.
13049      if (typeof instance.componentDidUpdate === 'function') {
13050        if (unresolvedOldProps !== current.memoizedProps || oldState !== current.memoizedState) {
13051          workInProgress.flags |= Update;
13052        }
13053      }
13054
13055      if (typeof instance.getSnapshotBeforeUpdate === 'function') {
13056        if (unresolvedOldProps !== current.memoizedProps || oldState !== current.memoizedState) {
13057          workInProgress.flags |= Snapshot;
13058        }
13059      }
13060
13061      return false;
13062    }
13063
13064    if (typeof getDerivedStateFromProps === 'function') {
13065      applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);
13066      newState = workInProgress.memoizedState;
13067    }
13068
13069    var shouldUpdate = checkHasForceUpdateAfterProcessing() || checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext);
13070
13071    if (shouldUpdate) {
13072      // In order to support react-lifecycles-compat polyfilled components,
13073      // Unsafe lifecycles should not be invoked for components using the new APIs.
13074      if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillUpdate === 'function' || typeof instance.componentWillUpdate === 'function')) {
13075        if (typeof instance.componentWillUpdate === 'function') {
13076          instance.componentWillUpdate(newProps, newState, nextContext);
13077        }
13078
13079        if (typeof instance.UNSAFE_componentWillUpdate === 'function') {
13080          instance.UNSAFE_componentWillUpdate(newProps, newState, nextContext);
13081        }
13082      }
13083
13084      if (typeof instance.componentDidUpdate === 'function') {
13085        workInProgress.flags |= Update;
13086      }
13087
13088      if (typeof instance.getSnapshotBeforeUpdate === 'function') {
13089        workInProgress.flags |= Snapshot;
13090      }
13091    } else {
13092      // If an update was already in progress, we should schedule an Update
13093      // effect even though we're bailing out, so that cWU/cDU are called.
13094      if (typeof instance.componentDidUpdate === 'function') {
13095        if (unresolvedOldProps !== current.memoizedProps || oldState !== current.memoizedState) {
13096          workInProgress.flags |= Update;
13097        }
13098      }
13099
13100      if (typeof instance.getSnapshotBeforeUpdate === 'function') {
13101        if (unresolvedOldProps !== current.memoizedProps || oldState !== current.memoizedState) {
13102          workInProgress.flags |= Snapshot;
13103        }
13104      } // If shouldComponentUpdate returned false, we should still update the
13105      // memoized props/state to indicate that this work can be reused.
13106
13107
13108      workInProgress.memoizedProps = newProps;
13109      workInProgress.memoizedState = newState;
13110    } // Update the existing instance's state, props, and context pointers even
13111    // if shouldComponentUpdate returns false.
13112
13113
13114    instance.props = newProps;
13115    instance.state = newState;
13116    instance.context = nextContext;
13117    return shouldUpdate;
13118  }
13119
13120  var didWarnAboutMaps;
13121  var didWarnAboutGenerators;
13122  var didWarnAboutStringRefs;
13123  var ownerHasKeyUseWarning;
13124  var ownerHasFunctionTypeWarning;
13125
13126  var warnForMissingKey = function (child, returnFiber) {};
13127
13128  {
13129    didWarnAboutMaps = false;
vendor: 4,713 bytes, lines 13130-13256
13130    didWarnAboutGenerators = false;
13131    didWarnAboutStringRefs = {};
13132    /**
13133     * Warn if there's no key explicitly set on dynamic arrays of children or
13134     * object keys are not valid. This allows us to keep track of children between
13135     * updates.
13136     */
13137
13138    ownerHasKeyUseWarning = {};
13139    ownerHasFunctionTypeWarning = {};
13140
13141    warnForMissingKey = function (child, returnFiber) {
13142      if (child === null || typeof child !== 'object') {
13143        return;
13144      }
13145
13146      if (!child._store || child._store.validated || child.key != null) {
13147        return;
13148      }
13149
13150      if (!(typeof child._store === 'object')) {
13151        {
13152          throw Error( "React Component in warnForMissingKey should have a _store. This error is likely caused by a bug in React. Please file an issue." );
13153        }
13154      }
13155
13156      child._store.validated = true;
13157      var componentName = getComponentName(returnFiber.type) || 'Component';
13158
13159      if (ownerHasKeyUseWarning[componentName]) {
13160        return;
13161      }
13162
13163      ownerHasKeyUseWarning[componentName] = true;
13164
13165      error('Each child in a list should have a unique ' + '"key" prop. See https://reactjs.org/link/warning-keys for ' + 'more information.');
13166    };
13167  }
13168
13169  var isArray$1 = Array.isArray;
13170
13171  function coerceRef(returnFiber, current, element) {
13172    var mixedRef = element.ref;
13173
13174    if (mixedRef !== null && typeof mixedRef !== 'function' && typeof mixedRef !== 'object') {
13175      {
13176        // TODO: Clean this up once we turn on the string ref warning for
13177        // everyone, because the strict mode case will no longer be relevant
13178        if ((returnFiber.mode & StrictMode || warnAboutStringRefs) && // We warn in ReactElement.js if owner and self are equal for string refs
13179        // because these cannot be automatically converted to an arrow function
13180        // using a codemod. Therefore, we don't have to warn about string refs again.
13181        !(element._owner && element._self && element._owner.stateNode !== element._self)) {
13182          var componentName = getComponentName(returnFiber.type) || 'Component';
13183
13184          if (!didWarnAboutStringRefs[componentName]) {
13185            {
13186              error('A string ref, "%s", has been found within a strict mode tree. ' + 'String refs are a source of potential bugs and should be avoided. ' + 'We recommend using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', mixedRef);
13187            }
13188
13189            didWarnAboutStringRefs[componentName] = true;
13190          }
13191        }
13192      }
13193
13194      if (element._owner) {
13195        var owner = element._owner;
13196        var inst;
13197
13198        if (owner) {
13199          var ownerFiber = owner;
13200
13201          if (!(ownerFiber.tag === ClassComponent)) {
13202            {
13203              throw Error( "Function components cannot have string refs. We recommend using useRef() instead. Learn more about using refs safely here: https://reactjs.org/link/strict-mode-string-ref" );
13204            }
13205          }
13206
13207          inst = ownerFiber.stateNode;
13208        }
13209
13210        if (!inst) {
13211          {
13212            throw Error( "Missing owner for string ref " + mixedRef + ". This error is likely caused by a bug in React. Please file an issue." );
13213          }
13214        }
13215
13216        var stringRef = '' + mixedRef; // Check if previous string ref matches new string ref
13217
13218        if (current !== null && current.ref !== null && typeof current.ref === 'function' && current.ref._stringRef === stringRef) {
13219          return current.ref;
13220        }
13221
13222        var ref = function (value) {
13223          var refs = inst.refs;
13224
13225          if (refs === emptyRefsObject) {
13226            // This is a lazy pooled frozen object, so we need to initialize.
13227            refs = inst.refs = {};
13228          }
13229
13230          if (value === null) {
13231            delete refs[stringRef];
13232          } else {
13233            refs[stringRef] = value;
13234          }
13235        };
13236
13237        ref._stringRef = stringRef;
13238        return ref;
13239      } else {
13240        if (!(typeof mixedRef === 'string')) {
13241          {
13242            throw Error( "Expected ref to be a function, a string, an object returned by React.createRef(), or null." );
13243          }
13244        }
13245
13246        if (!element._owner) {
13247          {
13248            throw Error( "Element ref was specified as a string (" + mixedRef + ") but no owner was set. This could happen for one of the following reasons:\n1. You may be adding a ref to a function component\n2. You may be adding a ref to a component that was not created inside a component's render method\n3. You have multiple copies of React loaded\nSee https://reactjs.org/link/refs-must-have-owner for more information." );
13249          }
13250        }
13251      }
13252    }
13253
13254    return mixedRef;
13255  }
13256
vendor: 8,309 bytes, lines 13257-13498
13257  function throwOnInvalidObjectType(returnFiber, newChild) {
13258    if (returnFiber.type !== 'textarea') {
13259      {
13260        {
13261          throw Error( "Objects are not valid as a React child (found: " + (Object.prototype.toString.call(newChild) === '[object Object]' ? 'object with keys {' + Object.keys(newChild).join(', ') + '}' : newChild) + "). If you meant to render a collection of children, use an array instead." );
13262        }
13263      }
13264    }
13265  }
13266
13267  function warnOnFunctionType(returnFiber) {
13268    {
13269      var componentName = getComponentName(returnFiber.type) || 'Component';
13270
13271      if (ownerHasFunctionTypeWarning[componentName]) {
13272        return;
13273      }
13274
13275      ownerHasFunctionTypeWarning[componentName] = true;
13276
13277      error('Functions are not valid as a React child. This may happen if ' + 'you return a Component instead of <Component /> from render. ' + 'Or maybe you meant to call this function rather than return it.');
13278    }
13279  } // We avoid inlining this to avoid potential deopts from using try/catch.
13280  // to be able to optimize each path individually by branching early. This needs
13281  // a compiler or we can do it manually. Helpers that don't need this branching
13282  // live outside of this function.
13283
13284
13285  function ChildReconciler(shouldTrackSideEffects) {
13286    function deleteChild(returnFiber, childToDelete) {
13287      if (!shouldTrackSideEffects) {
13288        // Noop.
13289        return;
13290      } // Deletions are added in reversed order so we add it to the front.
13291      // At this point, the return fiber's effect list is empty except for
13292      // deletions, so we can just append the deletion to the list. The remaining
13293      // effects aren't added until the complete phase. Once we implement
13294      // resuming, this may not be true.
13295
13296
13297      var last = returnFiber.lastEffect;
13298
13299      if (last !== null) {
13300        last.nextEffect = childToDelete;
13301        returnFiber.lastEffect = childToDelete;
13302      } else {
13303        returnFiber.firstEffect = returnFiber.lastEffect = childToDelete;
13304      }
13305
13306      childToDelete.nextEffect = null;
13307      childToDelete.flags = Deletion;
13308    }
13309
13310    function deleteRemainingChildren(returnFiber, currentFirstChild) {
13311      if (!shouldTrackSideEffects) {
13312        // Noop.
13313        return null;
13314      } // TODO: For the shouldClone case, this could be micro-optimized a bit by
13315      // assuming that after the first child we've already added everything.
13316
13317
13318      var childToDelete = currentFirstChild;
13319
13320      while (childToDelete !== null) {
13321        deleteChild(returnFiber, childToDelete);
13322        childToDelete = childToDelete.sibling;
13323      }
13324
13325      return null;
13326    }
13327
13328    function mapRemainingChildren(returnFiber, currentFirstChild) {
13329      // Add the remaining children to a temporary map so that we can find them by
13330      // keys quickly. Implicit (null) keys get added to this set with their index
13331      // instead.
13332      var existingChildren = new Map();
13333      var existingChild = currentFirstChild;
13334
13335      while (existingChild !== null) {
13336        if (existingChild.key !== null) {
13337          existingChildren.set(existingChild.key, existingChild);
13338        } else {
13339          existingChildren.set(existingChild.index, existingChild);
13340        }
13341
13342        existingChild = existingChild.sibling;
13343      }
13344
13345      return existingChildren;
13346    }
13347
13348    function useFiber(fiber, pendingProps) {
13349      // We currently set sibling to null and index to 0 here because it is easy
13350      // to forget to do before returning it. E.g. for the single child case.
13351      var clone = createWorkInProgress(fiber, pendingProps);
13352      clone.index = 0;
13353      clone.sibling = null;
13354      return clone;
13355    }
13356
13357    function placeChild(newFiber, lastPlacedIndex, newIndex) {
13358      newFiber.index = newIndex;
13359
13360      if (!shouldTrackSideEffects) {
13361        // Noop.
13362        return lastPlacedIndex;
13363      }
13364
13365      var current = newFiber.alternate;
13366
13367      if (current !== null) {
13368        var oldIndex = current.index;
13369
13370        if (oldIndex < lastPlacedIndex) {
13371          // This is a move.
13372          newFiber.flags = Placement;
13373          return lastPlacedIndex;
13374        } else {
13375          // This item can stay in place.
13376          return oldIndex;
13377        }
13378      } else {
13379        // This is an insertion.
13380        newFiber.flags = Placement;
13381        return lastPlacedIndex;
13382      }
13383    }
13384
13385    function placeSingleChild(newFiber) {
13386      // This is simpler for the single child case. We only need to do a
13387      // placement for inserting new children.
13388      if (shouldTrackSideEffects && newFiber.alternate === null) {
13389        newFiber.flags = Placement;
13390      }
13391
13392      return newFiber;
13393    }
13394
13395    function updateTextNode(returnFiber, current, textContent, lanes) {
13396      if (current === null || current.tag !== HostText) {
13397        // Insert
13398        var created = createFiberFromText(textContent, returnFiber.mode, lanes);
13399        created.return = returnFiber;
13400        return created;
13401      } else {
13402        // Update
13403        var existing = useFiber(current, textContent);
13404        existing.return = returnFiber;
13405        return existing;
13406      }
13407    }
13408
13409    function updateElement(returnFiber, current, element, lanes) {
13410      if (current !== null) {
13411        if (current.elementType === element.type || ( // Keep this check inline so it only runs on the false path:
13412         isCompatibleFamilyForHotReloading(current, element) )) {
13413          // Move based on index
13414          var existing = useFiber(current, element.props);
13415          existing.ref = coerceRef(returnFiber, current, element);
13416          existing.return = returnFiber;
13417
13418          {
13419            existing._debugSource = element._source;
13420            existing._debugOwner = element._owner;
13421          }
13422
13423          return existing;
13424        }
13425      } // Insert
13426
13427
13428      var created = createFiberFromElement(element, returnFiber.mode, lanes);
13429      created.ref = coerceRef(returnFiber, current, element);
13430      created.return = returnFiber;
13431      return created;
13432    }
13433
13434    function updatePortal(returnFiber, current, portal, lanes) {
13435      if (current === null || current.tag !== HostPortal || current.stateNode.containerInfo !== portal.containerInfo || current.stateNode.implementation !== portal.implementation) {
13436        // Insert
13437        var created = createFiberFromPortal(portal, returnFiber.mode, lanes);
13438        created.return = returnFiber;
13439        return created;
13440      } else {
13441        // Update
13442        var existing = useFiber(current, portal.children || []);
13443        existing.return = returnFiber;
13444        return existing;
13445      }
13446    }
13447
13448    function updateFragment(returnFiber, current, fragment, lanes, key) {
13449      if (current === null || current.tag !== Fragment) {
13450        // Insert
13451        var created = createFiberFromFragment(fragment, returnFiber.mode, lanes, key);
13452        created.return = returnFiber;
13453        return created;
13454      } else {
13455        // Update
13456        var existing = useFiber(current, fragment);
13457        existing.return = returnFiber;
13458        return existing;
13459      }
13460    }
13461
13462    function createChild(returnFiber, newChild, lanes) {
13463      if (typeof newChild === 'string' || typeof newChild === 'number') {
13464        // Text nodes don't have keys. If the previous node is implicitly keyed
13465        // we can continue to replace it without aborting even if it is not a text
13466        // node.
13467        var created = createFiberFromText('' + newChild, returnFiber.mode, lanes);
13468        created.return = returnFiber;
13469        return created;
13470      }
13471
13472      if (typeof newChild === 'object' && newChild !== null) {
13473        switch (newChild.$$typeof) {
13474          case REACT_ELEMENT_TYPE:
13475            {
13476              var _created = createFiberFromElement(newChild, returnFiber.mode, lanes);
13477
13478              _created.ref = coerceRef(returnFiber, null, newChild);
13479              _created.return = returnFiber;
13480              return _created;
13481            }
13482
13483          case REACT_PORTAL_TYPE:
13484            {
13485              var _created2 = createFiberFromPortal(newChild, returnFiber.mode, lanes);
13486
13487              _created2.return = returnFiber;
13488              return _created2;
13489            }
13490        }
13491
13492        if (isArray$1(newChild) || getIteratorFn(newChild)) {
13493          var _created3 = createFiberFromFragment(newChild, returnFiber.mode, lanes, null);
13494
13495          _created3.return = returnFiber;
13496          return _created3;
13497        }
13498
vendor: 17,160 bytes, lines 13499-13983
13499        throwOnInvalidObjectType(returnFiber, newChild);
13500      }
13501
13502      {
13503        if (typeof newChild === 'function') {
13504          warnOnFunctionType(returnFiber);
13505        }
13506      }
13507
13508      return null;
13509    }
13510
13511    function updateSlot(returnFiber, oldFiber, newChild, lanes) {
13512      // Update the fiber if the keys match, otherwise return null.
13513      var key = oldFiber !== null ? oldFiber.key : null;
13514
13515      if (typeof newChild === 'string' || typeof newChild === 'number') {
13516        // Text nodes don't have keys. If the previous node is implicitly keyed
13517        // we can continue to replace it without aborting even if it is not a text
13518        // node.
13519        if (key !== null) {
13520          return null;
13521        }
13522
13523        return updateTextNode(returnFiber, oldFiber, '' + newChild, lanes);
13524      }
13525
13526      if (typeof newChild === 'object' && newChild !== null) {
13527        switch (newChild.$$typeof) {
13528          case REACT_ELEMENT_TYPE:
13529            {
13530              if (newChild.key === key) {
13531                if (newChild.type === REACT_FRAGMENT_TYPE) {
13532                  return updateFragment(returnFiber, oldFiber, newChild.props.children, lanes, key);
13533                }
13534
13535                return updateElement(returnFiber, oldFiber, newChild, lanes);
13536              } else {
13537                return null;
13538              }
13539            }
13540
13541          case REACT_PORTAL_TYPE:
13542            {
13543              if (newChild.key === key) {
13544                return updatePortal(returnFiber, oldFiber, newChild, lanes);
13545              } else {
13546                return null;
13547              }
13548            }
13549        }
13550
13551        if (isArray$1(newChild) || getIteratorFn(newChild)) {
13552          if (key !== null) {
13553            return null;
13554          }
13555
13556          return updateFragment(returnFiber, oldFiber, newChild, lanes, null);
13557        }
13558
13559        throwOnInvalidObjectType(returnFiber, newChild);
13560      }
13561
13562      {
13563        if (typeof newChild === 'function') {
13564          warnOnFunctionType(returnFiber);
13565        }
13566      }
13567
13568      return null;
13569    }
13570
13571    function updateFromMap(existingChildren, returnFiber, newIdx, newChild, lanes) {
13572      if (typeof newChild === 'string' || typeof newChild === 'number') {
13573        // Text nodes don't have keys, so we neither have to check the old nor
13574        // new node for the key. If both are text nodes, they match.
13575        var matchedFiber = existingChildren.get(newIdx) || null;
13576        return updateTextNode(returnFiber, matchedFiber, '' + newChild, lanes);
13577      }
13578
13579      if (typeof newChild === 'object' && newChild !== null) {
13580        switch (newChild.$$typeof) {
13581          case REACT_ELEMENT_TYPE:
13582            {
13583              var _matchedFiber = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null;
13584
13585              if (newChild.type === REACT_FRAGMENT_TYPE) {
13586                return updateFragment(returnFiber, _matchedFiber, newChild.props.children, lanes, newChild.key);
13587              }
13588
13589              return updateElement(returnFiber, _matchedFiber, newChild, lanes);
13590            }
13591
13592          case REACT_PORTAL_TYPE:
13593            {
13594              var _matchedFiber2 = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null;
13595
13596              return updatePortal(returnFiber, _matchedFiber2, newChild, lanes);
13597            }
13598
13599        }
13600
13601        if (isArray$1(newChild) || getIteratorFn(newChild)) {
13602          var _matchedFiber3 = existingChildren.get(newIdx) || null;
13603
13604          return updateFragment(returnFiber, _matchedFiber3, newChild, lanes, null);
13605        }
13606
13607        throwOnInvalidObjectType(returnFiber, newChild);
13608      }
13609
13610      {
13611        if (typeof newChild === 'function') {
13612          warnOnFunctionType(returnFiber);
13613        }
13614      }
13615
13616      return null;
13617    }
13618    /**
13619     * Warns if there is a duplicate or missing key
13620     */
13621
13622
13623    function warnOnInvalidKey(child, knownKeys, returnFiber) {
13624      {
13625        if (typeof child !== 'object' || child === null) {
13626          return knownKeys;
13627        }
13628
13629        switch (child.$$typeof) {
13630          case REACT_ELEMENT_TYPE:
13631          case REACT_PORTAL_TYPE:
13632            warnForMissingKey(child, returnFiber);
13633            var key = child.key;
13634
13635            if (typeof key !== 'string') {
13636              break;
13637            }
13638
13639            if (knownKeys === null) {
13640              knownKeys = new Set();
13641              knownKeys.add(key);
13642              break;
13643            }
13644
13645            if (!knownKeys.has(key)) {
13646              knownKeys.add(key);
13647              break;
13648            }
13649
13650            error('Encountered two children with the same key, `%s`. ' + 'Keys should be unique so that components maintain their identity ' + 'across updates. Non-unique keys may cause children to be ' + 'duplicated and/or omitted — the behavior is unsupported and ' + 'could change in a future version.', key);
13651
13652            break;
13653        }
13654      }
13655
13656      return knownKeys;
13657    }
13658
13659    function reconcileChildrenArray(returnFiber, currentFirstChild, newChildren, lanes) {
13660      // This algorithm can't optimize by searching from both ends since we
13661      // don't have backpointers on fibers. I'm trying to see how far we can get
13662      // with that model. If it ends up not being worth the tradeoffs, we can
13663      // add it later.
13664      // Even with a two ended optimization, we'd want to optimize for the case
13665      // where there are few changes and brute force the comparison instead of
13666      // going for the Map. It'd like to explore hitting that path first in
13667      // forward-only mode and only go for the Map once we notice that we need
13668      // lots of look ahead. This doesn't handle reversal as well as two ended
13669      // search but that's unusual. Besides, for the two ended optimization to
13670      // work on Iterables, we'd need to copy the whole set.
13671      // In this first iteration, we'll just live with hitting the bad case
13672      // (adding everything to a Map) in for every insert/move.
13673      // If you change this code, also update reconcileChildrenIterator() which
13674      // uses the same algorithm.
13675      {
13676        // First, validate keys.
13677        var knownKeys = null;
13678
13679        for (var i = 0; i < newChildren.length; i++) {
13680          var child = newChildren[i];
13681          knownKeys = warnOnInvalidKey(child, knownKeys, returnFiber);
13682        }
13683      }
13684
13685      var resultingFirstChild = null;
13686      var previousNewFiber = null;
13687      var oldFiber = currentFirstChild;
13688      var lastPlacedIndex = 0;
13689      var newIdx = 0;
13690      var nextOldFiber = null;
13691
13692      for (; oldFiber !== null && newIdx < newChildren.length; newIdx++) {
13693        if (oldFiber.index > newIdx) {
13694          nextOldFiber = oldFiber;
13695          oldFiber = null;
13696        } else {
13697          nextOldFiber = oldFiber.sibling;
13698        }
13699
13700        var newFiber = updateSlot(returnFiber, oldFiber, newChildren[newIdx], lanes);
13701
13702        if (newFiber === null) {
13703          // TODO: This breaks on empty slots like null children. That's
13704          // unfortunate because it triggers the slow path all the time. We need
13705          // a better way to communicate whether this was a miss or null,
13706          // boolean, undefined, etc.
13707          if (oldFiber === null) {
13708            oldFiber = nextOldFiber;
13709          }
13710
13711          break;
13712        }
13713
13714        if (shouldTrackSideEffects) {
13715          if (oldFiber && newFiber.alternate === null) {
13716            // We matched the slot, but we didn't reuse the existing fiber, so we
13717            // need to delete the existing child.
13718            deleteChild(returnFiber, oldFiber);
13719          }
13720        }
13721
13722        lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx);
13723
13724        if (previousNewFiber === null) {
13725          // TODO: Move out of the loop. This only happens for the first run.
13726          resultingFirstChild = newFiber;
13727        } else {
13728          // TODO: Defer siblings if we're not at the right index for this slot.
13729          // I.e. if we had null values before, then we want to defer this
13730          // for each null value. However, we also don't want to call updateSlot
13731          // with the previous one.
13732          previousNewFiber.sibling = newFiber;
13733        }
13734
13735        previousNewFiber = newFiber;
13736        oldFiber = nextOldFiber;
13737      }
13738
13739      if (newIdx === newChildren.length) {
13740        // We've reached the end of the new children. We can delete the rest.
13741        deleteRemainingChildren(returnFiber, oldFiber);
13742        return resultingFirstChild;
13743      }
13744
13745      if (oldFiber === null) {
13746        // If we don't have any more existing children we can choose a fast path
13747        // since the rest will all be insertions.
13748        for (; newIdx < newChildren.length; newIdx++) {
13749          var _newFiber = createChild(returnFiber, newChildren[newIdx], lanes);
13750
13751          if (_newFiber === null) {
13752            continue;
13753          }
13754
13755          lastPlacedIndex = placeChild(_newFiber, lastPlacedIndex, newIdx);
13756
13757          if (previousNewFiber === null) {
13758            // TODO: Move out of the loop. This only happens for the first run.
13759            resultingFirstChild = _newFiber;
13760          } else {
13761            previousNewFiber.sibling = _newFiber;
13762          }
13763
13764          previousNewFiber = _newFiber;
13765        }
13766
13767        return resultingFirstChild;
13768      } // Add all children to a key map for quick lookups.
13769
13770
13771      var existingChildren = mapRemainingChildren(returnFiber, oldFiber); // Keep scanning and use the map to restore deleted items as moves.
13772
13773      for (; newIdx < newChildren.length; newIdx++) {
13774        var _newFiber2 = updateFromMap(existingChildren, returnFiber, newIdx, newChildren[newIdx], lanes);
13775
13776        if (_newFiber2 !== null) {
13777          if (shouldTrackSideEffects) {
13778            if (_newFiber2.alternate !== null) {
13779              // The new fiber is a work in progress, but if there exists a
13780              // current, that means that we reused the fiber. We need to delete
13781              // it from the child list so that we don't add it to the deletion
13782              // list.
13783              existingChildren.delete(_newFiber2.key === null ? newIdx : _newFiber2.key);
13784            }
13785          }
13786
13787          lastPlacedIndex = placeChild(_newFiber2, lastPlacedIndex, newIdx);
13788
13789          if (previousNewFiber === null) {
13790            resultingFirstChild = _newFiber2;
13791          } else {
13792            previousNewFiber.sibling = _newFiber2;
13793          }
13794
13795          previousNewFiber = _newFiber2;
13796        }
13797      }
13798
13799      if (shouldTrackSideEffects) {
13800        // Any existing children that weren't consumed above were deleted. We need
13801        // to add them to the deletion list.
13802        existingChildren.forEach(function (child) {
13803          return deleteChild(returnFiber, child);
13804        });
13805      }
13806
13807      return resultingFirstChild;
13808    }
13809
13810    function reconcileChildrenIterator(returnFiber, currentFirstChild, newChildrenIterable, lanes) {
13811      // This is the same implementation as reconcileChildrenArray(),
13812      // but using the iterator instead.
13813      var iteratorFn = getIteratorFn(newChildrenIterable);
13814
13815      if (!(typeof iteratorFn === 'function')) {
13816        {
13817          throw Error( "An object is not an iterable. This error is likely caused by a bug in React. Please file an issue." );
13818        }
13819      }
13820
13821      {
13822        // We don't support rendering Generators because it's a mutation.
13823        // See https://github.com/facebook/react/issues/12995
13824        if (typeof Symbol === 'function' && // $FlowFixMe Flow doesn't know about toStringTag
13825        newChildrenIterable[Symbol.toStringTag] === 'Generator') {
13826          if (!didWarnAboutGenerators) {
13827            error('Using Generators as children is unsupported and will likely yield ' + 'unexpected results because enumerating a generator mutates it. ' + 'You may convert it to an array with `Array.from()` or the ' + '`[...spread]` operator before rendering. Keep in mind ' + 'you might need to polyfill these features for older browsers.');
13828          }
13829
13830          didWarnAboutGenerators = true;
13831        } // Warn about using Maps as children
13832
13833
13834        if (newChildrenIterable.entries === iteratorFn) {
13835          if (!didWarnAboutMaps) {
13836            error('Using Maps as children is not supported. ' + 'Use an array of keyed ReactElements instead.');
13837          }
13838
13839          didWarnAboutMaps = true;
13840        } // First, validate keys.
13841        // We'll get a different iterator later for the main pass.
13842
13843
13844        var _newChildren = iteratorFn.call(newChildrenIterable);
13845
13846        if (_newChildren) {
13847          var knownKeys = null;
13848
13849          var _step = _newChildren.next();
13850
13851          for (; !_step.done; _step = _newChildren.next()) {
13852            var child = _step.value;
13853            knownKeys = warnOnInvalidKey(child, knownKeys, returnFiber);
13854          }
13855        }
13856      }
13857
13858      var newChildren = iteratorFn.call(newChildrenIterable);
13859
13860      if (!(newChildren != null)) {
13861        {
13862          throw Error( "An iterable object provided no iterator." );
13863        }
13864      }
13865
13866      var resultingFirstChild = null;
13867      var previousNewFiber = null;
13868      var oldFiber = currentFirstChild;
13869      var lastPlacedIndex = 0;
13870      var newIdx = 0;
13871      var nextOldFiber = null;
13872      var step = newChildren.next();
13873
13874      for (; oldFiber !== null && !step.done; newIdx++, step = newChildren.next()) {
13875        if (oldFiber.index > newIdx) {
13876          nextOldFiber = oldFiber;
13877          oldFiber = null;
13878        } else {
13879          nextOldFiber = oldFiber.sibling;
13880        }
13881
13882        var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);
13883
13884        if (newFiber === null) {
13885          // TODO: This breaks on empty slots like null children. That's
13886          // unfortunate because it triggers the slow path all the time. We need
13887          // a better way to communicate whether this was a miss or null,
13888          // boolean, undefined, etc.
13889          if (oldFiber === null) {
13890            oldFiber = nextOldFiber;
13891          }
13892
13893          break;
13894        }
13895
13896        if (shouldTrackSideEffects) {
13897          if (oldFiber && newFiber.alternate === null) {
13898            // We matched the slot, but we didn't reuse the existing fiber, so we
13899            // need to delete the existing child.
13900            deleteChild(returnFiber, oldFiber);
13901          }
13902        }
13903
13904        lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx);
13905
13906        if (previousNewFiber === null) {
13907          // TODO: Move out of the loop. This only happens for the first run.
13908          resultingFirstChild = newFiber;
13909        } else {
13910          // TODO: Defer siblings if we're not at the right index for this slot.
13911          // I.e. if we had null values before, then we want to defer this
13912          // for each null value. However, we also don't want to call updateSlot
13913          // with the previous one.
13914          previousNewFiber.sibling = newFiber;
13915        }
13916
13917        previousNewFiber = newFiber;
13918        oldFiber = nextOldFiber;
13919      }
13920
13921      if (step.done) {
13922        // We've reached the end of the new children. We can delete the rest.
13923        deleteRemainingChildren(returnFiber, oldFiber);
13924        return resultingFirstChild;
13925      }
13926
13927      if (oldFiber === null) {
13928        // If we don't have any more existing children we can choose a fast path
13929        // since the rest will all be insertions.
13930        for (; !step.done; newIdx++, step = newChildren.next()) {
13931          var _newFiber3 = createChild(returnFiber, step.value, lanes);
13932
13933          if (_newFiber3 === null) {
13934            continue;
13935          }
13936
13937          lastPlacedIndex = placeChild(_newFiber3, lastPlacedIndex, newIdx);
13938
13939          if (previousNewFiber === null) {
13940            // TODO: Move out of the loop. This only happens for the first run.
13941            resultingFirstChild = _newFiber3;
13942          } else {
13943            previousNewFiber.sibling = _newFiber3;
13944          }
13945
13946          previousNewFiber = _newFiber3;
13947        }
13948
13949        return resultingFirstChild;
13950      } // Add all children to a key map for quick lookups.
13951
13952
13953      var existingChildren = mapRemainingChildren(returnFiber, oldFiber); // Keep scanning and use the map to restore deleted items as moves.
13954
13955      for (; !step.done; newIdx++, step = newChildren.next()) {
13956        var _newFiber4 = updateFromMap(existingChildren, returnFiber, newIdx, step.value, lanes);
13957
13958        if (_newFiber4 !== null) {
13959          if (shouldTrackSideEffects) {
13960            if (_newFiber4.alternate !== null) {
13961              // The new fiber is a work in progress, but if there exists a
13962              // current, that means that we reused the fiber. We need to delete
13963              // it from the child list so that we don't add it to the deletion
13964              // list.
13965              existingChildren.delete(_newFiber4.key === null ? newIdx : _newFiber4.key);
13966            }
13967          }
13968
13969          lastPlacedIndex = placeChild(_newFiber4, lastPlacedIndex, newIdx);
13970
13971          if (previousNewFiber === null) {
13972            resultingFirstChild = _newFiber4;
13973          } else {
13974            previousNewFiber.sibling = _newFiber4;
13975          }
13976
13977          previousNewFiber = _newFiber4;
13978        }
13979      }
13980
13981      if (shouldTrackSideEffects) {
13982        // Any existing children that weren't consumed above were deleted. We need
13983        // to add them to the deletion list.
vendor: 6,588 bytes, lines 13984-14162
13984        existingChildren.forEach(function (child) {
13985          return deleteChild(returnFiber, child);
13986        });
13987      }
13988
13989      return resultingFirstChild;
13990    }
13991
13992    function reconcileSingleTextNode(returnFiber, currentFirstChild, textContent, lanes) {
13993      // There's no need to check for keys on text nodes since we don't have a
13994      // way to define them.
13995      if (currentFirstChild !== null && currentFirstChild.tag === HostText) {
13996        // We already have an existing node so let's just update it and delete
13997        // the rest.
13998        deleteRemainingChildren(returnFiber, currentFirstChild.sibling);
13999        var existing = useFiber(currentFirstChild, textContent);
14000        existing.return = returnFiber;
14001        return existing;
14002      } // The existing first child is not a text node so we need to create one
14003      // and delete the existing ones.
14004
14005
14006      deleteRemainingChildren(returnFiber, currentFirstChild);
14007      var created = createFiberFromText(textContent, returnFiber.mode, lanes);
14008      created.return = returnFiber;
14009      return created;
14010    }
14011
14012    function reconcileSingleElement(returnFiber, currentFirstChild, element, lanes) {
14013      var key = element.key;
14014      var child = currentFirstChild;
14015
14016      while (child !== null) {
14017        // TODO: If key === null and child.key === null, then this only applies to
14018        // the first item in the list.
14019        if (child.key === key) {
14020          switch (child.tag) {
14021            case Fragment:
14022              {
14023                if (element.type === REACT_FRAGMENT_TYPE) {
14024                  deleteRemainingChildren(returnFiber, child.sibling);
14025                  var existing = useFiber(child, element.props.children);
14026                  existing.return = returnFiber;
14027
14028                  {
14029                    existing._debugSource = element._source;
14030                    existing._debugOwner = element._owner;
14031                  }
14032
14033                  return existing;
14034                }
14035
14036                break;
14037              }
14038
14039            case Block:
14040
14041            // We intentionally fallthrough here if enableBlocksAPI is not on.
14042            // eslint-disable-next-lined no-fallthrough
14043
14044            default:
14045              {
14046                if (child.elementType === element.type || ( // Keep this check inline so it only runs on the false path:
14047                 isCompatibleFamilyForHotReloading(child, element) )) {
14048                  deleteRemainingChildren(returnFiber, child.sibling);
14049
14050                  var _existing3 = useFiber(child, element.props);
14051
14052                  _existing3.ref = coerceRef(returnFiber, child, element);
14053                  _existing3.return = returnFiber;
14054
14055                  {
14056                    _existing3._debugSource = element._source;
14057                    _existing3._debugOwner = element._owner;
14058                  }
14059
14060                  return _existing3;
14061                }
14062
14063                break;
14064              }
14065          } // Didn't match.
14066
14067
14068          deleteRemainingChildren(returnFiber, child);
14069          break;
14070        } else {
14071          deleteChild(returnFiber, child);
14072        }
14073
14074        child = child.sibling;
14075      }
14076
14077      if (element.type === REACT_FRAGMENT_TYPE) {
14078        var created = createFiberFromFragment(element.props.children, returnFiber.mode, lanes, element.key);
14079        created.return = returnFiber;
14080        return created;
14081      } else {
14082        var _created4 = createFiberFromElement(element, returnFiber.mode, lanes);
14083
14084        _created4.ref = coerceRef(returnFiber, currentFirstChild, element);
14085        _created4.return = returnFiber;
14086        return _created4;
14087      }
14088    }
14089
14090    function reconcileSinglePortal(returnFiber, currentFirstChild, portal, lanes) {
14091      var key = portal.key;
14092      var child = currentFirstChild;
14093
14094      while (child !== null) {
14095        // TODO: If key === null and child.key === null, then this only applies to
14096        // the first item in the list.
14097        if (child.key === key) {
14098          if (child.tag === HostPortal && child.stateNode.containerInfo === portal.containerInfo && child.stateNode.implementation === portal.implementation) {
14099            deleteRemainingChildren(returnFiber, child.sibling);
14100            var existing = useFiber(child, portal.children || []);
14101            existing.return = returnFiber;
14102            return existing;
14103          } else {
14104            deleteRemainingChildren(returnFiber, child);
14105            break;
14106          }
14107        } else {
14108          deleteChild(returnFiber, child);
14109        }
14110
14111        child = child.sibling;
14112      }
14113
14114      var created = createFiberFromPortal(portal, returnFiber.mode, lanes);
14115      created.return = returnFiber;
14116      return created;
14117    } // This API will tag the children with the side-effect of the reconciliation
14118    // itself. They will be added to the side-effect list as we pass through the
14119    // children and the parent.
14120
14121
14122    function reconcileChildFibers(returnFiber, currentFirstChild, newChild, lanes) {
14123      // This function is not recursive.
14124      // If the top level item is an array, we treat it as a set of children,
14125      // not as a fragment. Nested arrays on the other hand will be treated as
14126      // fragment nodes. Recursion happens at the normal flow.
14127      // Handle top level unkeyed fragments as if they were arrays.
14128      // This leads to an ambiguity between <>{[...]}</> and <>...</>.
14129      // We treat the ambiguous cases above the same.
14130      var isUnkeyedTopLevelFragment = typeof newChild === 'object' && newChild !== null && newChild.type === REACT_FRAGMENT_TYPE && newChild.key === null;
14131
14132      if (isUnkeyedTopLevelFragment) {
14133        newChild = newChild.props.children;
14134      } // Handle object types
14135
14136
14137      var isObject = typeof newChild === 'object' && newChild !== null;
14138
14139      if (isObject) {
14140        switch (newChild.$$typeof) {
14141          case REACT_ELEMENT_TYPE:
14142            return placeSingleChild(reconcileSingleElement(returnFiber, currentFirstChild, newChild, lanes));
14143
14144          case REACT_PORTAL_TYPE:
14145            return placeSingleChild(reconcileSinglePortal(returnFiber, currentFirstChild, newChild, lanes));
14146
14147        }
14148      }
14149
14150      if (typeof newChild === 'string' || typeof newChild === 'number') {
14151        return placeSingleChild(reconcileSingleTextNode(returnFiber, currentFirstChild, '' + newChild, lanes));
14152      }
14153
14154      if (isArray$1(newChild)) {
14155        return reconcileChildrenArray(returnFiber, currentFirstChild, newChild, lanes);
14156      }
14157
14158      if (getIteratorFn(newChild)) {
14159        return reconcileChildrenIterator(returnFiber, currentFirstChild, newChild, lanes);
14160      }
14161
14162      if (isObject) {
vendor: 18,198 bytes, lines 14163-14733
14163        throwOnInvalidObjectType(returnFiber, newChild);
14164      }
14165
14166      {
14167        if (typeof newChild === 'function') {
14168          warnOnFunctionType(returnFiber);
14169        }
14170      }
14171
14172      if (typeof newChild === 'undefined' && !isUnkeyedTopLevelFragment) {
14173        // If the new child is undefined, and the return fiber is a composite
14174        // component, throw an error. If Fiber return types are disabled,
14175        // we already threw above.
14176        switch (returnFiber.tag) {
14177          case ClassComponent:
14178            {
14179              {
14180                var instance = returnFiber.stateNode;
14181
14182                if (instance.render._isMockFunction) {
14183                  // We allow auto-mocks to proceed as if they're returning null.
14184                  break;
14185                }
14186              }
14187            }
14188          // Intentionally fall through to the next case, which handles both
14189          // functions and classes
14190          // eslint-disable-next-lined no-fallthrough
14191
14192          case Block:
14193          case FunctionComponent:
14194          case ForwardRef:
14195          case SimpleMemoComponent:
14196            {
14197              {
14198                {
14199                  throw Error( (getComponentName(returnFiber.type) || 'Component') + "(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null." );
14200                }
14201              }
14202            }
14203        }
14204      } // Remaining cases are all treated as empty.
14205
14206
14207      return deleteRemainingChildren(returnFiber, currentFirstChild);
14208    }
14209
14210    return reconcileChildFibers;
14211  }
14212
14213  var reconcileChildFibers = ChildReconciler(true);
14214  var mountChildFibers = ChildReconciler(false);
14215  function cloneChildFibers(current, workInProgress) {
14216    if (!(current === null || workInProgress.child === current.child)) {
14217      {
14218        throw Error( "Resuming work not yet implemented." );
14219      }
14220    }
14221
14222    if (workInProgress.child === null) {
14223      return;
14224    }
14225
14226    var currentChild = workInProgress.child;
14227    var newChild = createWorkInProgress(currentChild, currentChild.pendingProps);
14228    workInProgress.child = newChild;
14229    newChild.return = workInProgress;
14230
14231    while (currentChild.sibling !== null) {
14232      currentChild = currentChild.sibling;
14233      newChild = newChild.sibling = createWorkInProgress(currentChild, currentChild.pendingProps);
14234      newChild.return = workInProgress;
14235    }
14236
14237    newChild.sibling = null;
14238  } // Reset a workInProgress child set to prepare it for a second pass.
14239
14240  function resetChildFibers(workInProgress, lanes) {
14241    var child = workInProgress.child;
14242
14243    while (child !== null) {
14244      resetWorkInProgress(child, lanes);
14245      child = child.sibling;
14246    }
14247  }
14248
14249  var NO_CONTEXT = {};
14250  var contextStackCursor$1 = createCursor(NO_CONTEXT);
14251  var contextFiberStackCursor = createCursor(NO_CONTEXT);
14252  var rootInstanceStackCursor = createCursor(NO_CONTEXT);
14253
14254  function requiredContext(c) {
14255    if (!(c !== NO_CONTEXT)) {
14256      {
14257        throw Error( "Expected host context to exist. This error is likely caused by a bug in React. Please file an issue." );
14258      }
14259    }
14260
14261    return c;
14262  }
14263
14264  function getRootHostContainer() {
14265    var rootInstance = requiredContext(rootInstanceStackCursor.current);
14266    return rootInstance;
14267  }
14268
14269  function pushHostContainer(fiber, nextRootInstance) {
14270    // Push current root instance onto the stack;
14271    // This allows us to reset root when portals are popped.
14272    push(rootInstanceStackCursor, nextRootInstance, fiber); // Track the context and the Fiber that provided it.
14273    // This enables us to pop only Fibers that provide unique contexts.
14274
14275    push(contextFiberStackCursor, fiber, fiber); // Finally, we need to push the host context to the stack.
14276    // However, we can't just call getRootHostContext() and push it because
14277    // we'd have a different number of entries on the stack depending on
14278    // whether getRootHostContext() throws somewhere in renderer code or not.
14279    // So we push an empty value first. This lets us safely unwind on errors.
14280
14281    push(contextStackCursor$1, NO_CONTEXT, fiber);
14282    var nextRootContext = getRootHostContext(nextRootInstance); // Now that we know this function doesn't throw, replace it.
14283
14284    pop(contextStackCursor$1, fiber);
14285    push(contextStackCursor$1, nextRootContext, fiber);
14286  }
14287
14288  function popHostContainer(fiber) {
14289    pop(contextStackCursor$1, fiber);
14290    pop(contextFiberStackCursor, fiber);
14291    pop(rootInstanceStackCursor, fiber);
14292  }
14293
14294  function getHostContext() {
14295    var context = requiredContext(contextStackCursor$1.current);
14296    return context;
14297  }
14298
14299  function pushHostContext(fiber) {
14300    var rootInstance = requiredContext(rootInstanceStackCursor.current);
14301    var context = requiredContext(contextStackCursor$1.current);
14302    var nextContext = getChildHostContext(context, fiber.type); // Don't push this Fiber's context unless it's unique.
14303
14304    if (context === nextContext) {
14305      return;
14306    } // Track the context and the Fiber that provided it.
14307    // This enables us to pop only Fibers that provide unique contexts.
14308
14309
14310    push(contextFiberStackCursor, fiber, fiber);
14311    push(contextStackCursor$1, nextContext, fiber);
14312  }
14313
14314  function popHostContext(fiber) {
14315    // Do not pop unless this Fiber provided the current context.
14316    // pushHostContext() only pushes Fibers that provide unique contexts.
14317    if (contextFiberStackCursor.current !== fiber) {
14318      return;
14319    }
14320
14321    pop(contextStackCursor$1, fiber);
14322    pop(contextFiberStackCursor, fiber);
14323  }
14324
14325  var DefaultSuspenseContext = 0; // The Suspense Context is split into two parts. The lower bits is
14326  // inherited deeply down the subtree. The upper bits only affect
14327  // this immediate suspense boundary and gets reset each new
14328  // boundary or suspense list.
14329
14330  var SubtreeSuspenseContextMask = 1; // Subtree Flags:
14331  // InvisibleParentSuspenseContext indicates that one of our parent Suspense
14332  // boundaries is not currently showing visible main content.
14333  // Either because it is already showing a fallback or is not mounted at all.
14334  // We can use this to determine if it is desirable to trigger a fallback at
14335  // the parent. If not, then we might need to trigger undesirable boundaries
14336  // and/or suspend the commit to avoid hiding the parent content.
14337
14338  var InvisibleParentSuspenseContext = 1; // Shallow Flags:
14339  // ForceSuspenseFallback can be used by SuspenseList to force newly added
14340  // items into their fallback state during one of the render passes.
14341
14342  var ForceSuspenseFallback = 2;
14343  var suspenseStackCursor = createCursor(DefaultSuspenseContext);
14344  function hasSuspenseContext(parentContext, flag) {
14345    return (parentContext & flag) !== 0;
14346  }
14347  function setDefaultShallowSuspenseContext(parentContext) {
14348    return parentContext & SubtreeSuspenseContextMask;
14349  }
14350  function setShallowSuspenseContext(parentContext, shallowContext) {
14351    return parentContext & SubtreeSuspenseContextMask | shallowContext;
14352  }
14353  function addSubtreeSuspenseContext(parentContext, subtreeContext) {
14354    return parentContext | subtreeContext;
14355  }
14356  function pushSuspenseContext(fiber, newContext) {
14357    push(suspenseStackCursor, newContext, fiber);
14358  }
14359  function popSuspenseContext(fiber) {
14360    pop(suspenseStackCursor, fiber);
14361  }
14362
14363  function shouldCaptureSuspense(workInProgress, hasInvisibleParent) {
14364    // If it was the primary children that just suspended, capture and render the
14365    // fallback. Otherwise, don't capture and bubble to the next boundary.
14366    var nextState = workInProgress.memoizedState;
14367
14368    if (nextState !== null) {
14369      if (nextState.dehydrated !== null) {
14370        // A dehydrated boundary always captures.
14371        return true;
14372      }
14373
14374      return false;
14375    }
14376
14377    var props = workInProgress.memoizedProps; // In order to capture, the Suspense component must have a fallback prop.
14378
14379    if (props.fallback === undefined) {
14380      return false;
14381    } // Regular boundaries always capture.
14382
14383
14384    if (props.unstable_avoidThisFallback !== true) {
14385      return true;
14386    } // If it's a boundary we should avoid, then we prefer to bubble up to the
14387    // parent boundary if it is currently invisible.
14388
14389
14390    if (hasInvisibleParent) {
14391      return false;
14392    } // If the parent is not able to handle it, we must handle it.
14393
14394
14395    return true;
14396  }
14397  function findFirstSuspended(row) {
14398    var node = row;
14399
14400    while (node !== null) {
14401      if (node.tag === SuspenseComponent) {
14402        var state = node.memoizedState;
14403
14404        if (state !== null) {
14405          var dehydrated = state.dehydrated;
14406
14407          if (dehydrated === null || isSuspenseInstancePending(dehydrated) || isSuspenseInstanceFallback(dehydrated)) {
14408            return node;
14409          }
14410        }
14411      } else if (node.tag === SuspenseListComponent && // revealOrder undefined can't be trusted because it don't
14412      // keep track of whether it suspended or not.
14413      node.memoizedProps.revealOrder !== undefined) {
14414        var didSuspend = (node.flags & DidCapture) !== NoFlags;
14415
14416        if (didSuspend) {
14417          return node;
14418        }
14419      } else if (node.child !== null) {
14420        node.child.return = node;
14421        node = node.child;
14422        continue;
14423      }
14424
14425      if (node === row) {
14426        return null;
14427      }
14428
14429      while (node.sibling === null) {
14430        if (node.return === null || node.return === row) {
14431          return null;
14432        }
14433
14434        node = node.return;
14435      }
14436
14437      node.sibling.return = node.return;
14438      node = node.sibling;
14439    }
14440
14441    return null;
14442  }
14443
14444  var NoFlags$1 =
14445  /*  */
14446  0; // Represents whether effect should fire.
14447
14448  var HasEffect =
14449  /* */
14450  1; // Represents the phase in which the effect (not the clean-up) fires.
14451
14452  var Layout =
14453  /*    */
14454  2;
14455  var Passive$1 =
14456  /*   */
14457  4;
14458
14459  // This may have been an insertion or a hydration.
14460
14461  var hydrationParentFiber = null;
14462  var nextHydratableInstance = null;
14463  var isHydrating = false;
14464
14465  function enterHydrationState(fiber) {
14466
14467    var parentInstance = fiber.stateNode.containerInfo;
14468    nextHydratableInstance = getFirstHydratableChild(parentInstance);
14469    hydrationParentFiber = fiber;
14470    isHydrating = true;
14471    return true;
14472  }
14473
14474  function deleteHydratableInstance(returnFiber, instance) {
14475    {
14476      switch (returnFiber.tag) {
14477        case HostRoot:
14478          didNotHydrateContainerInstance(returnFiber.stateNode.containerInfo, instance);
14479          break;
14480
14481        case HostComponent:
14482          didNotHydrateInstance(returnFiber.type, returnFiber.memoizedProps, returnFiber.stateNode, instance);
14483          break;
14484      }
14485    }
14486
14487    var childToDelete = createFiberFromHostInstanceForDeletion();
14488    childToDelete.stateNode = instance;
14489    childToDelete.return = returnFiber;
14490    childToDelete.flags = Deletion; // This might seem like it belongs on progressedFirstDeletion. However,
14491    // these children are not part of the reconciliation list of children.
14492    // Even if we abort and rereconcile the children, that will try to hydrate
14493    // again and the nodes are still in the host tree so these will be
14494    // recreated.
14495
14496    if (returnFiber.lastEffect !== null) {
14497      returnFiber.lastEffect.nextEffect = childToDelete;
14498      returnFiber.lastEffect = childToDelete;
14499    } else {
14500      returnFiber.firstEffect = returnFiber.lastEffect = childToDelete;
14501    }
14502  }
14503
14504  function insertNonHydratedInstance(returnFiber, fiber) {
14505    fiber.flags = fiber.flags & ~Hydrating | Placement;
14506
14507    {
14508      switch (returnFiber.tag) {
14509        case HostRoot:
14510          {
14511            var parentContainer = returnFiber.stateNode.containerInfo;
14512
14513            switch (fiber.tag) {
14514              case HostComponent:
14515                var type = fiber.type;
14516                var props = fiber.pendingProps;
14517                didNotFindHydratableContainerInstance(parentContainer, type);
14518                break;
14519
14520              case HostText:
14521                var text = fiber.pendingProps;
14522                didNotFindHydratableContainerTextInstance(parentContainer, text);
14523                break;
14524            }
14525
14526            break;
14527          }
14528
14529        case HostComponent:
14530          {
14531            var parentType = returnFiber.type;
14532            var parentProps = returnFiber.memoizedProps;
14533            var parentInstance = returnFiber.stateNode;
14534
14535            switch (fiber.tag) {
14536              case HostComponent:
14537                var _type = fiber.type;
14538                var _props = fiber.pendingProps;
14539                didNotFindHydratableInstance(parentType, parentProps, parentInstance, _type);
14540                break;
14541
14542              case HostText:
14543                var _text = fiber.pendingProps;
14544                didNotFindHydratableTextInstance(parentType, parentProps, parentInstance, _text);
14545                break;
14546
14547              case SuspenseComponent:
14548                didNotFindHydratableSuspenseInstance(parentType, parentProps);
14549                break;
14550            }
14551
14552            break;
14553          }
14554
14555        default:
14556          return;
14557      }
14558    }
14559  }
14560
14561  function tryHydrate(fiber, nextInstance) {
14562    switch (fiber.tag) {
14563      case HostComponent:
14564        {
14565          var type = fiber.type;
14566          var props = fiber.pendingProps;
14567          var instance = canHydrateInstance(nextInstance, type);
14568
14569          if (instance !== null) {
14570            fiber.stateNode = instance;
14571            return true;
14572          }
14573
14574          return false;
14575        }
14576
14577      case HostText:
14578        {
14579          var text = fiber.pendingProps;
14580          var textInstance = canHydrateTextInstance(nextInstance, text);
14581
14582          if (textInstance !== null) {
14583            fiber.stateNode = textInstance;
14584            return true;
14585          }
14586
14587          return false;
14588        }
14589
14590      case SuspenseComponent:
14591        {
14592
14593          return false;
14594        }
14595
14596      default:
14597        return false;
14598    }
14599  }
14600
14601  function tryToClaimNextHydratableInstance(fiber) {
14602    if (!isHydrating) {
14603      return;
14604    }
14605
14606    var nextInstance = nextHydratableInstance;
14607
14608    if (!nextInstance) {
14609      // Nothing to hydrate. Make it an insertion.
14610      insertNonHydratedInstance(hydrationParentFiber, fiber);
14611      isHydrating = false;
14612      hydrationParentFiber = fiber;
14613      return;
14614    }
14615
14616    var firstAttemptedInstance = nextInstance;
14617
14618    if (!tryHydrate(fiber, nextInstance)) {
14619      // If we can't hydrate this instance let's try the next one.
14620      // We use this as a heuristic. It's based on intuition and not data so it
14621      // might be flawed or unnecessary.
14622      nextInstance = getNextHydratableSibling(firstAttemptedInstance);
14623
14624      if (!nextInstance || !tryHydrate(fiber, nextInstance)) {
14625        // Nothing to hydrate. Make it an insertion.
14626        insertNonHydratedInstance(hydrationParentFiber, fiber);
14627        isHydrating = false;
14628        hydrationParentFiber = fiber;
14629        return;
14630      } // We matched the next one, we'll now assume that the first one was
14631      // superfluous and we'll delete it. Since we can't eagerly delete it
14632      // we'll have to schedule a deletion. To do that, this node needs a dummy
14633      // fiber associated with it.
14634
14635
14636      deleteHydratableInstance(hydrationParentFiber, firstAttemptedInstance);
14637    }
14638
14639    hydrationParentFiber = fiber;
14640    nextHydratableInstance = getFirstHydratableChild(nextInstance);
14641  }
14642
14643  function prepareToHydrateHostInstance(fiber, rootContainerInstance, hostContext) {
14644
14645    var instance = fiber.stateNode;
14646    var updatePayload = hydrateInstance(instance, fiber.type, fiber.memoizedProps, rootContainerInstance, hostContext, fiber); // TODO: Type this specific to this type of component.
14647
14648    fiber.updateQueue = updatePayload; // If the update payload indicates that there is a change or if there
14649    // is a new ref we mark this as an update.
14650
14651    if (updatePayload !== null) {
14652      return true;
14653    }
14654
14655    return false;
14656  }
14657
14658  function prepareToHydrateHostTextInstance(fiber) {
14659
14660    var textInstance = fiber.stateNode;
14661    var textContent = fiber.memoizedProps;
14662    var shouldUpdate = hydrateTextInstance(textInstance, textContent, fiber);
14663
14664    {
14665      if (shouldUpdate) {
14666        // We assume that prepareToHydrateHostTextInstance is called in a context where the
14667        // hydration parent is the parent host component of this host text.
14668        var returnFiber = hydrationParentFiber;
14669
14670        if (returnFiber !== null) {
14671          switch (returnFiber.tag) {
14672            case HostRoot:
14673              {
14674                var parentContainer = returnFiber.stateNode.containerInfo;
14675                didNotMatchHydratedContainerTextInstance(parentContainer, textInstance, textContent);
14676                break;
14677              }
14678
14679            case HostComponent:
14680              {
14681                var parentType = returnFiber.type;
14682                var parentProps = returnFiber.memoizedProps;
14683                var parentInstance = returnFiber.stateNode;
14684                didNotMatchHydratedTextInstance(parentType, parentProps, parentInstance, textInstance, textContent);
14685                break;
14686              }
14687          }
14688        }
14689      }
14690    }
14691
14692    return shouldUpdate;
14693  }
14694
14695  function skipPastDehydratedSuspenseInstance(fiber) {
14696
14697    var suspenseState = fiber.memoizedState;
14698    var suspenseInstance = suspenseState !== null ? suspenseState.dehydrated : null;
14699
14700    if (!suspenseInstance) {
14701      {
14702        throw Error( "Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue." );
14703      }
14704    }
14705
14706    return getNextHydratableInstanceAfterSuspenseInstance(suspenseInstance);
14707  }
14708
14709  function popToNextHostParent(fiber) {
14710    var parent = fiber.return;
14711
14712    while (parent !== null && parent.tag !== HostComponent && parent.tag !== HostRoot && parent.tag !== SuspenseComponent) {
14713      parent = parent.return;
14714    }
14715
14716    hydrationParentFiber = parent;
14717  }
14718
14719  function popHydrationState(fiber) {
14720
14721    if (fiber !== hydrationParentFiber) {
14722      // We're deeper than the current hydration context, inside an inserted
14723      // tree.
14724      return false;
14725    }
14726
14727    if (!isHydrating) {
14728      // If we're not currently hydrating but we're in a hydration context, then
14729      // we were an insertion and now need to pop up reenter hydration of our
14730      // siblings.
14731      popToNextHostParent(fiber);
14732      isHydrating = true;
14733      return false;
14734    }
14735
14736    var type = fiber.type; // If we have any remaining hydratable nodes, we need to delete them now.
14737    // We only do this deeper than head and body since they tend to have random
14738    // other nodes in them. We also ignore components with pure text content in
14739    // side of them.
14740    // TODO: Better heuristic.
14741
14742    if (fiber.tag !== HostComponent || type !== 'head' && type !== 'body' && !shouldSetTextContent(type, fiber.memoizedProps)) {
14743      var nextInstance = nextHydratableInstance;
14744
14745      while (nextInstance) {
14746        deleteHydratableInstance(fiber, nextInstance);
14747        nextInstance = getNextHydratableSibling(nextInstance);
14748      }
14749    }
14750
14751    popToNextHostParent(fiber);
14752
14753    if (fiber.tag === SuspenseComponent) {
14754      nextHydratableInstance = skipPastDehydratedSuspenseInstance(fiber);
14755    } else {
14756      nextHydratableInstance = hydrationParentFiber ? getNextHydratableSibling(fiber.stateNode) : null;
14757    }
14758
14759    return true;
14760  }
14761
14762  function resetHydrationState() {
14763
14764    hydrationParentFiber = null;
14765    nextHydratableInstance = null;
14766    isHydrating = false;
14767  }
14768
14769  function getIsHydrating() {
14770    return isHydrating;
14771  }
14772
14773  // and should be reset before starting a new render.
14774  // This tracks which mutable sources need to be reset after a render.
14775
14776  var workInProgressSources = [];
14777  var rendererSigil$1;
14778
14779  {
14780    // Used to detect multiple renderers using the same mutable source.
14781    rendererSigil$1 = {};
14782  }
14783
14784  function markSourceAsDirty(mutableSource) {
14785    workInProgressSources.push(mutableSource);
14786  }
14787  function resetWorkInProgressVersions() {
14788    for (var i = 0; i < workInProgressSources.length; i++) {
14789      var mutableSource = workInProgressSources[i];
14790
14791      {
14792        mutableSource._workInProgressVersionPrimary = null;
14793      }
14794    }
14795
14796    workInProgressSources.length = 0;
14797  }
14798  function getWorkInProgressVersion(mutableSource) {
14799    {
14800      return mutableSource._workInProgressVersionPrimary;
14801    }
14802  }
14803  function setWorkInProgressVersion(mutableSource, version) {
14804    {
14805      mutableSource._workInProgressVersionPrimary = version;
14806    }
14807
14808    workInProgressSources.push(mutableSource);
14809  }
14810  function warnAboutMultipleRenderersDEV(mutableSource) {
14811    {
14812      {
14813        if (mutableSource._currentPrimaryRenderer == null) {
14814          mutableSource._currentPrimaryRenderer = rendererSigil$1;
14815        } else if (mutableSource._currentPrimaryRenderer !== rendererSigil$1) {
14816          error('Detected multiple renderers concurrently rendering the ' + 'same mutable source. This is currently unsupported.');
14817        }
14818      }
14819    }
14820  } // Eager reads the version of a mutable source and stores it on the root.
14821
14822  var ReactCurrentDispatcher$1 = ReactSharedInternals.ReactCurrentDispatcher,
14823      ReactCurrentBatchConfig$1 = ReactSharedInternals.ReactCurrentBatchConfig;
14824  var didWarnAboutMismatchedHooksForComponent;
14825  var didWarnAboutUseOpaqueIdentifier;
14826
14827  {
14828    didWarnAboutUseOpaqueIdentifier = {};
14829    didWarnAboutMismatchedHooksForComponent = new Set();
14830  }
14831
14832  // These are set right before calling the component.
14833  var renderLanes = NoLanes; // The work-in-progress fiber. I've named it differently to distinguish it from
14834  // the work-in-progress hook.
14835
14836  var currentlyRenderingFiber$1 = null; // Hooks are stored as a linked list on the fiber's memoizedState field. The
14837  // current hook list is the list that belongs to the current fiber. The
14838  // work-in-progress hook list is a new list that will be added to the
14839  // work-in-progress fiber.
14840
14841  var currentHook = null;
14842  var workInProgressHook = null; // Whether an update was scheduled at any point during the render phase. This
14843  // does not get reset if we do another render pass; only when we're completely
14844  // finished evaluating this component. This is an optimization so we know
14845  // whether we need to clear render phase updates after a throw.
14846
14847  var didScheduleRenderPhaseUpdate = false; // Where an update was scheduled only during the current render pass. This
14848  // gets reset after each attempt.
14849  // TODO: Maybe there's some way to consolidate this with
14850  // `didScheduleRenderPhaseUpdate`. Or with `numberOfReRenders`.
14851
14852  var didScheduleRenderPhaseUpdateDuringThisPass = false;
vendor: 21,281 bytes, lines 14853-15452
14853  var RE_RENDER_LIMIT = 25; // In DEV, this is the name of the currently executing primitive hook
14854
14855  var currentHookNameInDev = null; // In DEV, this list ensures that hooks are called in the same order between renders.
14856  // The list stores the order of hooks used during the initial render (mount).
14857  // Subsequent renders (updates) reference this list.
14858
14859  var hookTypesDev = null;
14860  var hookTypesUpdateIndexDev = -1; // In DEV, this tracks whether currently rendering component needs to ignore
14861  // the dependencies for Hooks that need them (e.g. useEffect or useMemo).
14862  // When true, such Hooks will always be "remounted". Only used during hot reload.
14863
14864  var ignorePreviousDependencies = false;
14865
14866  function mountHookTypesDev() {
14867    {
14868      var hookName = currentHookNameInDev;
14869
14870      if (hookTypesDev === null) {
14871        hookTypesDev = [hookName];
14872      } else {
14873        hookTypesDev.push(hookName);
14874      }
14875    }
14876  }
14877
14878  function updateHookTypesDev() {
14879    {
14880      var hookName = currentHookNameInDev;
14881
14882      if (hookTypesDev !== null) {
14883        hookTypesUpdateIndexDev++;
14884
14885        if (hookTypesDev[hookTypesUpdateIndexDev] !== hookName) {
14886          warnOnHookMismatchInDev(hookName);
14887        }
14888      }
14889    }
14890  }
14891
14892  function checkDepsAreArrayDev(deps) {
14893    {
14894      if (deps !== undefined && deps !== null && !Array.isArray(deps)) {
14895        // Verify deps, but only on mount to avoid extra checks.
14896        // It's unlikely their type would change as usually you define them inline.
14897        error('%s received a final argument that is not an array (instead, received `%s`). When ' + 'specified, the final argument must be an array.', currentHookNameInDev, typeof deps);
14898      }
14899    }
14900  }
14901
14902  function warnOnHookMismatchInDev(currentHookName) {
14903    {
14904      var componentName = getComponentName(currentlyRenderingFiber$1.type);
14905
14906      if (!didWarnAboutMismatchedHooksForComponent.has(componentName)) {
14907        didWarnAboutMismatchedHooksForComponent.add(componentName);
14908
14909        if (hookTypesDev !== null) {
14910          var table = '';
14911          var secondColumnStart = 30;
14912
14913          for (var i = 0; i <= hookTypesUpdateIndexDev; i++) {
14914            var oldHookName = hookTypesDev[i];
14915            var newHookName = i === hookTypesUpdateIndexDev ? currentHookName : oldHookName;
14916            var row = i + 1 + ". " + oldHookName; // Extra space so second column lines up
14917            // lol @ IE not supporting String#repeat
14918
14919            while (row.length < secondColumnStart) {
14920              row += ' ';
14921            }
14922
14923            row += newHookName + '\n';
14924            table += row;
14925          }
14926
14927          error('React has detected a change in the order of Hooks called by %s. ' + 'This will lead to bugs and errors if not fixed. ' + 'For more information, read the Rules of Hooks: https://reactjs.org/link/rules-of-hooks\n\n' + '   Previous render            Next render\n' + '   ------------------------------------------------------\n' + '%s' + '   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n', componentName, table);
14928        }
14929      }
14930    }
14931  }
14932
14933  function throwInvalidHookError() {
14934    {
14935      {
14936        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://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem." );
14937      }
14938    }
14939  }
14940
14941  function areHookInputsEqual(nextDeps, prevDeps) {
14942    {
14943      if (ignorePreviousDependencies) {
14944        // Only true when this component is being hot reloaded.
14945        return false;
14946      }
14947    }
14948
14949    if (prevDeps === null) {
14950      {
14951        error('%s received a final argument during this render, but not during ' + 'the previous render. Even though the final argument is optional, ' + 'its type cannot change between renders.', currentHookNameInDev);
14952      }
14953
14954      return false;
14955    }
14956
14957    {
14958      // Don't bother comparing lengths in prod because these arrays should be
14959      // passed inline.
14960      if (nextDeps.length !== prevDeps.length) {
14961        error('The final argument passed to %s changed size between renders. The ' + 'order and size of this array must remain constant.\n\n' + 'Previous: %s\n' + 'Incoming: %s', currentHookNameInDev, "[" + prevDeps.join(', ') + "]", "[" + nextDeps.join(', ') + "]");
14962      }
14963    }
14964
14965    for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++) {
14966      if (objectIs(nextDeps[i], prevDeps[i])) {
14967        continue;
14968      }
14969
14970      return false;
14971    }
14972
14973    return true;
14974  }
14975
14976  function renderWithHooks(current, workInProgress, Component, props, secondArg, nextRenderLanes) {
14977    renderLanes = nextRenderLanes;
14978    currentlyRenderingFiber$1 = workInProgress;
14979
14980    {
14981      hookTypesDev = current !== null ? current._debugHookTypes : null;
14982      hookTypesUpdateIndexDev = -1; // Used for hot reloading:
14983
14984      ignorePreviousDependencies = current !== null && current.type !== workInProgress.type;
14985    }
14986
14987    workInProgress.memoizedState = null;
14988    workInProgress.updateQueue = null;
14989    workInProgress.lanes = NoLanes; // The following should have already been reset
14990    // currentHook = null;
14991    // workInProgressHook = null;
14992    // didScheduleRenderPhaseUpdate = false;
14993    // TODO Warn if no hooks are used at all during mount, then some are used during update.
14994    // Currently we will identify the update render as a mount because memoizedState === null.
14995    // This is tricky because it's valid for certain types of components (e.g. React.lazy)
14996    // Using memoizedState to differentiate between mount/update only works if at least one stateful hook is used.
14997    // Non-stateful hooks (e.g. context) don't get added to memoizedState,
14998    // so memoizedState would be null during updates and mounts.
14999
15000    {
15001      if (current !== null && current.memoizedState !== null) {
15002        ReactCurrentDispatcher$1.current = HooksDispatcherOnUpdateInDEV;
15003      } else if (hookTypesDev !== null) {
15004        // This dispatcher handles an edge case where a component is updating,
15005        // but no stateful hooks have been used.
15006        // We want to match the production code behavior (which will use HooksDispatcherOnMount),
15007        // but with the extra DEV validation to ensure hooks ordering hasn't changed.
15008        // This dispatcher does that.
15009        ReactCurrentDispatcher$1.current = HooksDispatcherOnMountWithHookTypesInDEV;
15010      } else {
15011        ReactCurrentDispatcher$1.current = HooksDispatcherOnMountInDEV;
15012      }
15013    }
15014
15015    var children = Component(props, secondArg); // Check if there was a render phase update
15016
15017    if (didScheduleRenderPhaseUpdateDuringThisPass) {
15018      // Keep rendering in a loop for as long as render phase updates continue to
15019      // be scheduled. Use a counter to prevent infinite loops.
15020      var numberOfReRenders = 0;
15021
15022      do {
15023        didScheduleRenderPhaseUpdateDuringThisPass = false;
15024
15025        if (!(numberOfReRenders < RE_RENDER_LIMIT)) {
15026          {
15027            throw Error( "Too many re-renders. React limits the number of renders to prevent an infinite loop." );
15028          }
15029        }
15030
15031        numberOfReRenders += 1;
15032
15033        {
15034          // Even when hot reloading, allow dependencies to stabilize
15035          // after first render to prevent infinite render phase updates.
15036          ignorePreviousDependencies = false;
15037        } // Start over from the beginning of the list
15038
15039
15040        currentHook = null;
15041        workInProgressHook = null;
15042        workInProgress.updateQueue = null;
15043
15044        {
15045          // Also validate hook order for cascading updates.
15046          hookTypesUpdateIndexDev = -1;
15047        }
15048
15049        ReactCurrentDispatcher$1.current =  HooksDispatcherOnRerenderInDEV ;
15050        children = Component(props, secondArg);
15051      } while (didScheduleRenderPhaseUpdateDuringThisPass);
15052    } // We can assume the previous dispatcher is always this one, since we set it
15053    // at the beginning of the render phase and there's no re-entrancy.
15054
15055
15056    ReactCurrentDispatcher$1.current = ContextOnlyDispatcher;
15057
15058    {
15059      workInProgress._debugHookTypes = hookTypesDev;
15060    } // This check uses currentHook so that it works the same in DEV and prod bundles.
15061    // hookTypesDev could catch more cases (e.g. context) but only in DEV bundles.
15062
15063
15064    var didRenderTooFewHooks = currentHook !== null && currentHook.next !== null;
15065    renderLanes = NoLanes;
15066    currentlyRenderingFiber$1 = null;
15067    currentHook = null;
15068    workInProgressHook = null;
15069
15070    {
15071      currentHookNameInDev = null;
15072      hookTypesDev = null;
15073      hookTypesUpdateIndexDev = -1;
15074    }
15075
15076    didScheduleRenderPhaseUpdate = false;
15077
15078    if (!!didRenderTooFewHooks) {
15079      {
15080        throw Error( "Rendered fewer hooks than expected. This may be caused by an accidental early return statement." );
15081      }
15082    }
15083
15084    return children;
15085  }
15086  function bailoutHooks(current, workInProgress, lanes) {
15087    workInProgress.updateQueue = current.updateQueue;
15088    workInProgress.flags &= ~(Passive | Update);
15089    current.lanes = removeLanes(current.lanes, lanes);
15090  }
15091  function resetHooksAfterThrow() {
15092    // We can assume the previous dispatcher is always this one, since we set it
15093    // at the beginning of the render phase and there's no re-entrancy.
15094    ReactCurrentDispatcher$1.current = ContextOnlyDispatcher;
15095
15096    if (didScheduleRenderPhaseUpdate) {
15097      // There were render phase updates. These are only valid for this render
15098      // phase, which we are now aborting. Remove the updates from the queues so
15099      // they do not persist to the next render. Do not remove updates from hooks
15100      // that weren't processed.
15101      //
15102      // Only reset the updates from the queue if it has a clone. If it does
15103      // not have a clone, that means it wasn't processed, and the updates were
15104      // scheduled before we entered the render phase.
15105      var hook = currentlyRenderingFiber$1.memoizedState;
15106
15107      while (hook !== null) {
15108        var queue = hook.queue;
15109
15110        if (queue !== null) {
15111          queue.pending = null;
15112        }
15113
15114        hook = hook.next;
15115      }
15116
15117      didScheduleRenderPhaseUpdate = false;
15118    }
15119
15120    renderLanes = NoLanes;
15121    currentlyRenderingFiber$1 = null;
15122    currentHook = null;
15123    workInProgressHook = null;
15124
15125    {
15126      hookTypesDev = null;
15127      hookTypesUpdateIndexDev = -1;
15128      currentHookNameInDev = null;
15129      isUpdatingOpaqueValueInRenderPhase = false;
15130    }
15131
15132    didScheduleRenderPhaseUpdateDuringThisPass = false;
15133  }
15134
15135  function mountWorkInProgressHook() {
15136    var hook = {
15137      memoizedState: null,
15138      baseState: null,
15139      baseQueue: null,
15140      queue: null,
15141      next: null
15142    };
15143
15144    if (workInProgressHook === null) {
15145      // This is the first hook in the list
15146      currentlyRenderingFiber$1.memoizedState = workInProgressHook = hook;
15147    } else {
15148      // Append to the end of the list
15149      workInProgressHook = workInProgressHook.next = hook;
15150    }
15151
15152    return workInProgressHook;
15153  }
15154
15155  function updateWorkInProgressHook() {
15156    // This function is used both for updates and for re-renders triggered by a
15157    // render phase update. It assumes there is either a current hook we can
15158    // clone, or a work-in-progress hook from a previous render pass that we can
15159    // use as a base. When we reach the end of the base list, we must switch to
15160    // the dispatcher used for mounts.
15161    var nextCurrentHook;
15162
15163    if (currentHook === null) {
15164      var current = currentlyRenderingFiber$1.alternate;
15165
15166      if (current !== null) {
15167        nextCurrentHook = current.memoizedState;
15168      } else {
15169        nextCurrentHook = null;
15170      }
15171    } else {
15172      nextCurrentHook = currentHook.next;
15173    }
15174
15175    var nextWorkInProgressHook;
15176
15177    if (workInProgressHook === null) {
15178      nextWorkInProgressHook = currentlyRenderingFiber$1.memoizedState;
15179    } else {
15180      nextWorkInProgressHook = workInProgressHook.next;
15181    }
15182
15183    if (nextWorkInProgressHook !== null) {
15184      // There's already a work-in-progress. Reuse it.
15185      workInProgressHook = nextWorkInProgressHook;
15186      nextWorkInProgressHook = workInProgressHook.next;
15187      currentHook = nextCurrentHook;
15188    } else {
15189      // Clone from the current hook.
15190      if (!(nextCurrentHook !== null)) {
15191        {
15192          throw Error( "Rendered more hooks than during the previous render." );
15193        }
15194      }
15195
15196      currentHook = nextCurrentHook;
15197      var newHook = {
15198        memoizedState: currentHook.memoizedState,
15199        baseState: currentHook.baseState,
15200        baseQueue: currentHook.baseQueue,
15201        queue: currentHook.queue,
15202        next: null
15203      };
15204
15205      if (workInProgressHook === null) {
15206        // This is the first hook in the list.
15207        currentlyRenderingFiber$1.memoizedState = workInProgressHook = newHook;
15208      } else {
15209        // Append to the end of the list.
15210        workInProgressHook = workInProgressHook.next = newHook;
15211      }
15212    }
15213
15214    return workInProgressHook;
15215  }
15216
15217  function createFunctionComponentUpdateQueue() {
15218    return {
15219      lastEffect: null
15220    };
15221  }
15222
15223  function basicStateReducer(state, action) {
15224    // $FlowFixMe: Flow doesn't like mixed types
15225    return typeof action === 'function' ? action(state) : action;
15226  }
15227
15228  function mountReducer(reducer, initialArg, init) {
15229    var hook = mountWorkInProgressHook();
15230    var initialState;
15231
15232    if (init !== undefined) {
15233      initialState = init(initialArg);
15234    } else {
15235      initialState = initialArg;
15236    }
15237
15238    hook.memoizedState = hook.baseState = initialState;
15239    var queue = hook.queue = {
15240      pending: null,
15241      dispatch: null,
15242      lastRenderedReducer: reducer,
15243      lastRenderedState: initialState
15244    };
15245    var dispatch = queue.dispatch = dispatchAction.bind(null, currentlyRenderingFiber$1, queue);
15246    return [hook.memoizedState, dispatch];
15247  }
15248
15249  function updateReducer(reducer, initialArg, init) {
15250    var hook = updateWorkInProgressHook();
15251    var queue = hook.queue;
15252
15253    if (!(queue !== null)) {
15254      {
15255        throw Error( "Should have a queue. This is likely a bug in React. Please file an issue." );
15256      }
15257    }
15258
15259    queue.lastRenderedReducer = reducer;
15260    var current = currentHook; // The last rebase update that is NOT part of the base state.
15261
15262    var baseQueue = current.baseQueue; // The last pending update that hasn't been processed yet.
15263
15264    var pendingQueue = queue.pending;
15265
15266    if (pendingQueue !== null) {
15267      // We have new updates that haven't been processed yet.
15268      // We'll add them to the base queue.
15269      if (baseQueue !== null) {
15270        // Merge the pending queue and the base queue.
15271        var baseFirst = baseQueue.next;
15272        var pendingFirst = pendingQueue.next;
15273        baseQueue.next = pendingFirst;
15274        pendingQueue.next = baseFirst;
15275      }
15276
15277      {
15278        if (current.baseQueue !== baseQueue) {
15279          // Internal invariant that should never happen, but feasibly could in
15280          // the future if we implement resuming, or some form of that.
15281          error('Internal error: Expected work-in-progress queue to be a clone. ' + 'This is a bug in React.');
15282        }
15283      }
15284
15285      current.baseQueue = baseQueue = pendingQueue;
15286      queue.pending = null;
15287    }
15288
15289    if (baseQueue !== null) {
15290      // We have a queue to process.
15291      var first = baseQueue.next;
15292      var newState = current.baseState;
15293      var newBaseState = null;
15294      var newBaseQueueFirst = null;
15295      var newBaseQueueLast = null;
15296      var update = first;
15297
15298      do {
15299        var updateLane = update.lane;
15300
15301        if (!isSubsetOfLanes(renderLanes, updateLane)) {
15302          // Priority is insufficient. Skip this update. If this is the first
15303          // skipped update, the previous update/state is the new base
15304          // update/state.
15305          var clone = {
15306            lane: updateLane,
15307            action: update.action,
15308            eagerReducer: update.eagerReducer,
15309            eagerState: update.eagerState,
15310            next: null
15311          };
15312
15313          if (newBaseQueueLast === null) {
15314            newBaseQueueFirst = newBaseQueueLast = clone;
15315            newBaseState = newState;
15316          } else {
15317            newBaseQueueLast = newBaseQueueLast.next = clone;
15318          } // Update the remaining priority in the queue.
15319          // TODO: Don't need to accumulate this. Instead, we can remove
15320          // renderLanes from the original lanes.
15321
15322
15323          currentlyRenderingFiber$1.lanes = mergeLanes(currentlyRenderingFiber$1.lanes, updateLane);
15324          markSkippedUpdateLanes(updateLane);
15325        } else {
15326          // This update does have sufficient priority.
15327          if (newBaseQueueLast !== null) {
15328            var _clone = {
15329              // This update is going to be committed so we never want uncommit
15330              // it. Using NoLane works because 0 is a subset of all bitmasks, so
15331              // this will never be skipped by the check above.
15332              lane: NoLane,
15333              action: update.action,
15334              eagerReducer: update.eagerReducer,
15335              eagerState: update.eagerState,
15336              next: null
15337            };
15338            newBaseQueueLast = newBaseQueueLast.next = _clone;
15339          } // Process this update.
15340
15341
15342          if (update.eagerReducer === reducer) {
15343            // If this update was processed eagerly, and its reducer matches the
15344            // current reducer, we can use the eagerly computed state.
15345            newState = update.eagerState;
15346          } else {
15347            var action = update.action;
15348            newState = reducer(newState, action);
15349          }
15350        }
15351
15352        update = update.next;
15353      } while (update !== null && update !== first);
15354
15355      if (newBaseQueueLast === null) {
15356        newBaseState = newState;
15357      } else {
15358        newBaseQueueLast.next = newBaseQueueFirst;
15359      } // Mark that the fiber performed work, but only if the new state is
15360      // different from the current state.
15361
15362
15363      if (!objectIs(newState, hook.memoizedState)) {
15364        markWorkInProgressReceivedUpdate();
15365      }
15366
15367      hook.memoizedState = newState;
15368      hook.baseState = newBaseState;
15369      hook.baseQueue = newBaseQueueLast;
15370      queue.lastRenderedState = newState;
15371    }
15372
15373    var dispatch = queue.dispatch;
15374    return [hook.memoizedState, dispatch];
15375  }
15376
15377  function rerenderReducer(reducer, initialArg, init) {
15378    var hook = updateWorkInProgressHook();
15379    var queue = hook.queue;
15380
15381    if (!(queue !== null)) {
15382      {
15383        throw Error( "Should have a queue. This is likely a bug in React. Please file an issue." );
15384      }
15385    }
15386
15387    queue.lastRenderedReducer = reducer; // This is a re-render. Apply the new render phase updates to the previous
15388    // work-in-progress hook.
15389
15390    var dispatch = queue.dispatch;
15391    var lastRenderPhaseUpdate = queue.pending;
15392    var newState = hook.memoizedState;
15393
15394    if (lastRenderPhaseUpdate !== null) {
15395      // The queue doesn't persist past this render pass.
15396      queue.pending = null;
15397      var firstRenderPhaseUpdate = lastRenderPhaseUpdate.next;
15398      var update = firstRenderPhaseUpdate;
15399
15400      do {
15401        // Process this render phase update. We don't have to check the
15402        // priority because it will always be the same as the current
15403        // render's.
15404        var action = update.action;
15405        newState = reducer(newState, action);
15406        update = update.next;
15407      } while (update !== firstRenderPhaseUpdate); // Mark that the fiber performed work, but only if the new state is
15408      // different from the current state.
15409
15410
15411      if (!objectIs(newState, hook.memoizedState)) {
15412        markWorkInProgressReceivedUpdate();
15413      }
15414
15415      hook.memoizedState = newState; // Don't persist the state accumulated from the render phase updates to
15416      // the base state unless the queue is empty.
15417      // TODO: Not sure if this is the desired semantics, but it's what we
15418      // do for gDSFP. I can't remember why.
15419
15420      if (hook.baseQueue === null) {
15421        hook.baseState = newState;
15422      }
15423
15424      queue.lastRenderedState = newState;
15425    }
15426
15427    return [newState, dispatch];
15428  }
15429
15430  function readFromUnsubcribedMutableSource(root, source, getSnapshot) {
15431    {
15432      warnAboutMultipleRenderersDEV(source);
15433    }
15434
15435    var getVersion = source._getVersion;
15436    var version = getVersion(source._source); // Is it safe for this component to read from this source during the current render?
15437
15438    var isSafeToReadFromSource = false; // Check the version first.
15439    // If this render has already been started with a specific version,
15440    // we can use it alone to determine if we can safely read from the source.
15441
15442    var currentRenderVersion = getWorkInProgressVersion(source);
15443
15444    if (currentRenderVersion !== null) {
15445      // It's safe to read if the store hasn't been mutated since the last time
15446      // we read something.
15447      isSafeToReadFromSource = currentRenderVersion === version;
15448    } else {
15449      // If there's no version, then this is the first time we've read from the
15450      // source during the current render pass, so we need to do a bit more work.
15451      // What we need to determine is if there are any hooks that already
15452      // subscribed to the source, and if so, whether there are any pen
15452ding
15453      // mutations that haven't been synchronized yet.
15454      //
15455      // If there are no pending mutations, then `root.mutableReadLanes` will be
15456      // empty, and we know we can safely read.
15457      //
15458      // If there *are* pending mutations, we may still be able to safely read
15459      // if the currently rendering lanes are inclusive of the pending mutation
15460      // lanes, since that guarantees that the value we're about to read from
15461      // the source is consistent with the values that we read during the most
15462      // recent mutation.
15463      isSafeToReadFromSource = isSubsetOfLanes(renderLanes, root.mutableReadLanes);
15464
15465      if (isSafeToReadFromSource) {
15466        // If it's safe to read from this source during the current render,
15467        // store the version in case other components read from it.
15468        // A changed version number will let those components know to throw and restart the render.
15469        setWorkInProgressVersion(source, version);
15470      }
15471    }
15472
15473    if (isSafeToReadFromSource) {
15474      var snapshot = getSnapshot(source._source);
15475
15476      {
15477        if (typeof snapshot === 'function') {
15478          error('Mutable source should not return a function as the snapshot value. ' + 'Functions may close over mutable values and cause tearing.');
15479        }
15480      }
15481
15482      return snapshot;
15483    } else {
15484      // This handles the special case of a mutable source being shared between renderers.
15485      // In that case, if the source is mutated between the first and second renderer,
15486      // The second renderer don't know that it needs to reset the WIP version during unwind,
15487      // (because the hook only marks sources as dirty if it's written to their WIP version).
15488      // That would cause this tear check to throw again and eventually be visible to the user.
15489      // We can avoid this infinite loop by explicitly marking the source as dirty.
15490      //
15491      // This can lead to tearing in the first renderer when it resumes,
15492      // but there's nothing we can do about that (short of throwing here and refusing to continue the render).
15493      markSourceAsDirty(source);
15494
15495      {
15496        {
15497          throw Error( "Cannot read from mutable source during the current render without tearing. This is a bug in React. Please file an issue." );
15498        }
15499      }
15500    }
15501  }
15502
15503  function useMutableSource(hook, source, getSnapshot, subscribe) {
15504    var root = getWorkInProgressRoot();
15505
15506    if (!(root !== null)) {
15507      {
15508        throw Error( "Expected a work-in-progress root. This is a bug in React. Please file an issue." );
15509      }
15510    }
15511
15512    var getVersion = source._getVersion;
15513    var version = getVersion(source._source);
15514    var dispatcher = ReactCurrentDispatcher$1.current; // eslint-disable-next-line prefer-const
15515
15516    var _dispatcher$useState = dispatcher.useState(function () {
15517      return readFromUnsubcribedMutableSource(root, source, getSnapshot);
15518    }),
15519        currentSnapshot = _dispatcher$useState[0],
15520        setSnapshot = _dispatcher$useState[1];
15521
15522    var snapshot = currentSnapshot; // Grab a handle to the state hook as well.
15523    // We use it to clear the pending update queue if we have a new source.
15524
15525    var stateHook = workInProgressHook;
15526    var memoizedState = hook.memoizedState;
15527    var refs = memoizedState.refs;
15528    var prevGetSnapshot = refs.getSnapshot;
15529    var prevSource = memoizedState.source;
15530    var prevSubscribe = memoizedState.subscribe;
15531    var fiber = currentlyRenderingFiber$1;
15532    hook.memoizedState = {
15533      refs: refs,
15534      source: source,
15535      subscribe: subscribe
15536    }; // Sync the values needed by our subscription handler after each commit.
15537
15538    dispatcher.useEffect(function () {
15539      refs.getSnapshot = getSnapshot; // Normally the dispatch function for a state hook never changes,
15540      // but this hook recreates the queue in certain cases  to avoid updates from stale sources.
15541      // handleChange() below needs to reference the dispatch function without re-subscribing,
15542      // so we use a ref to ensure that it always has the latest version.
15543
15544      refs.setSnapshot = setSnapshot; // Check for a possible change between when we last rendered now.
15545
15546      var maybeNewVersion = getVersion(source._source);
15547
15548      if (!objectIs(version, maybeNewVersion)) {
15549        var maybeNewSnapshot = getSnapshot(source._source);
15550
15551        {
15552          if (typeof maybeNewSnapshot === 'function') {
15553            error('Mutable source should not return a function as the snapshot value. ' + 'Functions may close over mutable values and cause tearing.');
15554          }
15555        }
15556
15557        if (!objectIs(snapshot, maybeNewSnapshot)) {
15558          setSnapshot(maybeNewSnapshot);
15559          var lane = requestUpdateLane(fiber);
15560          markRootMutableRead(root, lane);
15561        } // If the source mutated between render and now,
15562        // there may be state updates already scheduled from the old source.
15563        // Entangle the updates so that they render in the same batch.
15564
15565
15566        markRootEntangled(root, root.mutableReadLanes);
15567      }
15568    }, [getSnapshot, source, subscribe]); // If we got a new source or subscribe function, re-subscribe in a passive effect.
15569
15570    dispatcher.useEffect(function () {
15571      var handleChange = function () {
15572        var latestGetSnapshot = refs.getSnapshot;
15573        var latestSetSnapshot = refs.setSnapshot;
15574
15575        try {
15576          latestSetSnapshot(latestGetSnapshot(source._source)); // Record a pending mutable source update with the same expiration time.
15577
15578          var lane = requestUpdateLane(fiber);
15579          markRootMutableRead(root, lane);
15580        } catch (error) {
15581          // A selector might throw after a source mutation.
15582          // e.g. it might try to read from a part of the store that no longer exists.
15583          // In this case we should still schedule an update with React.
15584          // Worst case the selector will throw again and then an error boundary will handle it.
15585          latestSetSnapshot(function () {
15586            throw error;
15587          });
15588        }
15589      };
15590
15591      var unsubscribe = subscribe(source._source, handleChange);
15592
15593      {
15594        if (typeof unsubscribe !== 'function') {
15595          error('Mutable source subscribe function must return an unsubscribe function.');
15596        }
15597      }
15598
15599      return unsubscribe;
15600    }, [source, subscribe]); // If any of the inputs to useMutableSource change, reading is potentially unsafe.
15601    //
15602    // If either the source or the subscription have changed we can't can't trust the update queue.
15603    // Maybe the source changed in a way that the old subscription ignored but the new one depends on.
15604    //
15605    // If the getSnapshot function changed, we also shouldn't rely on the update queue.
15606    // It's possible that the underlying source was mutated between the when the last "change" event fired,
15607    // and when the current render (with the new getSnapshot function) is processed.
15608    //
15609    // In both cases, we need to throw away pending updates (since they are no longer relevant)
15610    // and treat reading from the source as we do in the mount case.
15611
15612    if (!objectIs(prevGetSnapshot, getSnapshot) || !objectIs(prevSource, source) || !objectIs(prevSubscribe, subscribe)) {
15613      // Create a new queue and setState method,
15614      // So if there are interleaved updates, they get pushed to the older queue.
15615      // When this becomes current, the previous queue and dispatch method will be discarded,
15616      // including any interleaving updates that occur.
15617      var newQueue = {
15618        pending: null,
15619        dispatch: null,
15620        lastRenderedReducer: basicStateReducer,
15621        lastRenderedState: snapshot
15622      };
15623      newQueue.dispatch = setSnapshot = dispatchAction.bind(null, currentlyRenderingFiber$1, newQueue);
15624      stateHook.queue = newQueue;
15625      stateHook.baseQueue = null;
15626      snapshot = readFromUnsubcribedMutableSource(root, source, getSnapshot);
15627      stateHook.memoizedState = stateHook.baseState = snapshot;
15628    }
15629
15630    return snapshot;
15631  }
15632
15633  function mountMutableSource(source, getSnapshot, subscribe) {
15634    var hook = mountWorkInProgressHook();
15635    hook.memoizedState = {
15636      refs: {
15637        getSnapshot: getSnapshot,
15638        setSnapshot: null
15639      },
15640      source: source,
15641      subscribe: subscribe
15642    };
15643    return useMutableSource(hook, source, getSnapshot, subscribe);
15644  }
15645
15646  function updateMutableSource(source, getSnapshot, subscribe) {
15647    var hook = updateWorkInProgressHook();
vendor: 7,876 bytes, lines 15648-15910
15648    return useMutableSource(hook, source, getSnapshot, subscribe);
15649  }
15650
15651  function mountState(initialState) {
15652    var hook = mountWorkInProgressHook();
15653
15654    if (typeof initialState === 'function') {
15655      // $FlowFixMe: Flow doesn't like mixed types
15656      initialState = initialState();
15657    }
15658
15659    hook.memoizedState = hook.baseState = initialState;
15660    var queue = hook.queue = {
15661      pending: null,
15662      dispatch: null,
15663      lastRenderedReducer: basicStateReducer,
15664      lastRenderedState: initialState
15665    };
15666    var dispatch = queue.dispatch = dispatchAction.bind(null, currentlyRenderingFiber$1, queue);
15667    return [hook.memoizedState, dispatch];
15668  }
15669
15670  function updateState(initialState) {
15671    return updateReducer(basicStateReducer);
15672  }
15673
15674  function rerenderState(initialState) {
15675    return rerenderReducer(basicStateReducer);
15676  }
15677
15678  function pushEffect(tag, create, destroy, deps) {
15679    var effect = {
15680      tag: tag,
15681      create: create,
15682      destroy: destroy,
15683      deps: deps,
15684      // Circular
15685      next: null
15686    };
15687    var componentUpdateQueue = currentlyRenderingFiber$1.updateQueue;
15688
15689    if (componentUpdateQueue === null) {
15690      componentUpdateQueue = createFunctionComponentUpdateQueue();
15691      currentlyRenderingFiber$1.updateQueue = componentUpdateQueue;
15692      componentUpdateQueue.lastEffect = effect.next = effect;
15693    } else {
15694      var lastEffect = componentUpdateQueue.lastEffect;
15695
15696      if (lastEffect === null) {
15697        componentUpdateQueue.lastEffect = effect.next = effect;
15698      } else {
15699        var firstEffect = lastEffect.next;
15700        lastEffect.next = effect;
15701        effect.next = firstEffect;
15702        componentUpdateQueue.lastEffect = effect;
15703      }
15704    }
15705
15706    return effect;
15707  }
15708
15709  function mountRef(initialValue) {
15710    var hook = mountWorkInProgressHook();
15711    var ref = {
15712      current: initialValue
15713    };
15714
15715    {
15716      Object.seal(ref);
15717    }
15718
15719    hook.memoizedState = ref;
15720    return ref;
15721  }
15722
15723  function updateRef(initialValue) {
15724    var hook = updateWorkInProgressHook();
15725    return hook.memoizedState;
15726  }
15727
15728  function mountEffectImpl(fiberFlags, hookFlags, create, deps) {
15729    var hook = mountWorkInProgressHook();
15730    var nextDeps = deps === undefined ? null : deps;
15731    currentlyRenderingFiber$1.flags |= fiberFlags;
15732    hook.memoizedState = pushEffect(HasEffect | hookFlags, create, undefined, nextDeps);
15733  }
15734
15735  function updateEffectImpl(fiberFlags, hookFlags, create, deps) {
15736    var hook = updateWorkInProgressHook();
15737    var nextDeps = deps === undefined ? null : deps;
15738    var destroy = undefined;
15739
15740    if (currentHook !== null) {
15741      var prevEffect = currentHook.memoizedState;
15742      destroy = prevEffect.destroy;
15743
15744      if (nextDeps !== null) {
15745        var prevDeps = prevEffect.deps;
15746
15747        if (areHookInputsEqual(nextDeps, prevDeps)) {
15748          pushEffect(hookFlags, create, destroy, nextDeps);
15749          return;
15750        }
15751      }
15752    }
15753
15754    currentlyRenderingFiber$1.flags |= fiberFlags;
15755    hook.memoizedState = pushEffect(HasEffect | hookFlags, create, destroy, nextDeps);
15756  }
15757
15758  function mountEffect(create, deps) {
15759    {
15760      // $FlowExpectedError - jest isn't a global, and isn't recognized outside of tests
15761      if ('undefined' !== typeof jest) {
15762        warnIfNotCurrentlyActingEffectsInDEV(currentlyRenderingFiber$1);
15763      }
15764    }
15765
15766    return mountEffectImpl(Update | Passive, Passive$1, create, deps);
15767  }
15768
15769  function updateEffect(create, deps) {
15770    {
15771      // $FlowExpectedError - jest isn't a global, and isn't recognized outside of tests
15772      if ('undefined' !== typeof jest) {
15773        warnIfNotCurrentlyActingEffectsInDEV(currentlyRenderingFiber$1);
15774      }
15775    }
15776
15777    return updateEffectImpl(Update | Passive, Passive$1, create, deps);
15778  }
15779
15780  function mountLayoutEffect(create, deps) {
15781    return mountEffectImpl(Update, Layout, create, deps);
15782  }
15783
15784  function updateLayoutEffect(create, deps) {
15785    return updateEffectImpl(Update, Layout, create, deps);
15786  }
15787
15788  function imperativeHandleEffect(create, ref) {
15789    if (typeof ref === 'function') {
15790      var refCallback = ref;
15791
15792      var _inst = create();
15793
15794      refCallback(_inst);
15795      return function () {
15796        refCallback(null);
15797      };
15798    } else if (ref !== null && ref !== undefined) {
15799      var refObject = ref;
15800
15801      {
15802        if (!refObject.hasOwnProperty('current')) {
15803          error('Expected useImperativeHandle() first argument to either be a ' + 'ref callback or React.createRef() object. Instead received: %s.', 'an object with keys {' + Object.keys(refObject).join(', ') + '}');
15804        }
15805      }
15806
15807      var _inst2 = create();
15808
15809      refObject.current = _inst2;
15810      return function () {
15811        refObject.current = null;
15812      };
15813    }
15814  }
15815
15816  function mountImperativeHandle(ref, create, deps) {
15817    {
15818      if (typeof create !== 'function') {
15819        error('Expected useImperativeHandle() second argument to be a function ' + 'that creates a handle. Instead received: %s.', create !== null ? typeof create : 'null');
15820      }
15821    } // TODO: If deps are provided, should we skip comparing the ref itself?
15822
15823
15824    var effectDeps = deps !== null && deps !== undefined ? deps.concat([ref]) : null;
15825    return mountEffectImpl(Update, Layout, imperativeHandleEffect.bind(null, create, ref), effectDeps);
15826  }
15827
15828  function updateImperativeHandle(ref, create, deps) {
15829    {
15830      if (typeof create !== 'function') {
15831        error('Expected useImperativeHandle() second argument to be a function ' + 'that creates a handle. Instead received: %s.', create !== null ? typeof create : 'null');
15832      }
15833    } // TODO: If deps are provided, should we skip comparing the ref itself?
15834
15835
15836    var effectDeps = deps !== null && deps !== undefined ? deps.concat([ref]) : null;
15837    return updateEffectImpl(Update, Layout, imperativeHandleEffect.bind(null, create, ref), effectDeps);
15838  }
15839
15840  function mountDebugValue(value, formatterFn) {// This hook is normally a no-op.
15841    // The react-debug-hooks package injects its own implementation
15842    // so that e.g. DevTools can display custom hook values.
15843  }
15844
15845  var updateDebugValue = mountDebugValue;
15846
15847  function mountCallback(callback, deps) {
15848    var hook = mountWorkInProgressHook();
15849    var nextDeps = deps === undefined ? null : deps;
15850    hook.memoizedState = [callback, nextDeps];
15851    return callback;
15852  }
15853
15854  function updateCallback(callback, deps) {
15855    var hook = updateWorkInProgressHook();
15856    var nextDeps = deps === undefined ? null : deps;
15857    var prevState = hook.memoizedState;
15858
15859    if (prevState !== null) {
15860      if (nextDeps !== null) {
15861        var prevDeps = prevState[1];
15862
15863        if (areHookInputsEqual(nextDeps, prevDeps)) {
15864          return prevState[0];
15865        }
15866      }
15867    }
15868
15869    hook.memoizedState = [callback, nextDeps];
15870    return callback;
15871  }
15872
15873  function mountMemo(nextCreate, deps) {
15874    var hook = mountWorkInProgressHook();
15875    var nextDeps = deps === undefined ? null : deps;
15876    var nextValue = nextCreate();
15877    hook.memoizedState = [nextValue, nextDeps];
15878    return nextValue;
15879  }
15880
15881  function updateMemo(nextCreate, deps) {
15882    var hook = updateWorkInProgressHook();
15883    var nextDeps = deps === undefined ? null : deps;
15884    var prevState = hook.memoizedState;
15885
15886    if (prevState !== null) {
15887      // Assume these are defined. If they're not, areHookInputsEqual will warn.
15888      if (nextDeps !== null) {
15889        var prevDeps = prevState[1];
15890
15891        if (areHookInputsEqual(nextDeps, prevDeps)) {
15892          return prevState[0];
15893        }
15894      }
15895    }
15896
15897    var nextValue = nextCreate();
15898    hook.memoizedState = [nextValue, nextDeps];
15899    return nextValue;
15900  }
15901
15902  function mountDeferredValue(value) {
15903    var _mountState = mountState(value),
15904        prevValue = _mountState[0],
15905        setValue = _mountState[1];
15906
15907    mountEffect(function () {
15908      var prevTransition = ReactCurrentBatchConfig$1.transition;
15909      ReactCurrentBatchConfig$1.transition = 1;
15910
15911      try {
15912        setValue(value);
15913      } finally {
15914        ReactCurrentBatchConfig$1.transition = prevTransition;
15915      }
15916    }, [value]);
15917    return prevValue;
15918  }
15919
15920  function updateDeferredValue(value) {
15921    var _updateState = updateState(),
15922        prevValue = _updateState[0],
15923        setValue = _updateState[1];
15924
15925    updateEffect(function () {
15926      var prevTransition = ReactCurrentBatchConfig$1.transition;
15927      ReactCurrentBatchConfig$1.transition = 1;
15928
15929      try {
15930        setValue(value);
15931      } finally {
15932        ReactCurrentBatchConfig$1.transition = prevTransition;
15933      }
15934    }, [value]);
15935    return prevValue;
15936  }
15937
15938  function rerenderDeferredValue(value) {
15939    var _rerenderState = rerenderState(),
15940        prevValue = _rerenderState[0],
15941        setValue = _rerenderState[1];
15942
15943    updateEffect(function () {
15944      var prevTransition = ReactCurrentBatchConfig$1.transition;
15945      ReactCurrentBatchConfig$1.transition = 1;
15946
15947      try {
15948        setValue(value);
15949      } finally {
15950        ReactCurrentBatchConfig$1.transition = prevTransition;
15951      }
15952    }, [value]);
15953    return prevValue;
15954  }
15955
15956  function startTransition(setPending, callback) {
15957    var priorityLevel = getCurrentPriorityLevel();
15958
15959    {
15960      runWithPriority$1(priorityLevel < UserBlockingPriority$2 ? UserBlockingPriority$2 : priorityLevel, function () {
15961        setPending(true);
15962      });
15963      runWithPriority$1(priorityLevel > NormalPriority$1 ? NormalPriority$1 : priorityLevel, function () {
15964        var prevTransition = ReactCurrentBatchConfig$1.transition;
15965        ReactCurrentBatchConfig$1.transition = 1;
15966
15967        try {
15968          setPending(false);
15969          callback();
15970        } finally {
15971          ReactCurrentBatchConfig$1.transition = prevTransition;
15972        }
15973      });
15974    }
15975  }
15976
15977  function mountTransition() {
15978    var _mountState2 = mountState(false),
15979        isPending = _mountState2[0],
15980        setPending = _mountState2[1]; // The `start` method can be stored on a ref, since `setPending`
15981    // never changes.
15982
15983
15984    var start = startTransition.bind(null, setPending);
15985    mountRef(start);
15986    return [start, isPending];
15987  }
15988
15989  function updateTransition() {
15990    var _updateState2 = updateState(),
15991        isPending = _updateState2[0];
15992
15993    var startRef = updateRef();
15994    var start = startRef.current;
15995    return [start, isPending];
15996  }
15997
15998  function rerenderTransition() {
15999    var _rerenderState2 = rerenderState(),
16000        isPending = _rerenderState2[0];
16001
16002    var startRef = updateRef();
16003    var start = startRef.current;
16004    return [start, isPending];
16005  }
16006
16007  var isUpdatingOpaqueValueInRenderPhase = false;
16008  function getIsUpdatingOpaqueValueInRenderPhaseInDEV() {
16009    {
16010      return isUpdatingOpaqueValueInRenderPhase;
16011    }
16012  }
16013
16014  function warnOnOpaqueIdentifierAccessInDEV(fiber) {
16015    {
16016      // TODO: Should warn in effects and callbacks, too
16017      var name = getComponentName(fiber.type) || 'Unknown';
16018
16019      if (getIsRendering() && !didWarnAboutUseOpaqueIdentifier[name]) {
16020        error('The object passed back from useOpaqueIdentifier is meant to be ' + 'passed through to attributes only. Do not read the ' + 'value directly.');
16021
16022        didWarnAboutUseOpaqueIdentifier[name] = true;
16023      }
16024    }
16025  }
16026
16027  function mountOpaqueIdentifier() {
16028    var makeId =  makeClientIdInDEV.bind(null, warnOnOpaqueIdentifierAccessInDEV.bind(null, currentlyRenderingFiber$1)) ;
16029
16030    if (getIsHydrating()) {
16031      var didUpgrade = false;
16032      var fiber = currentlyRenderingFiber$1;
16033
16034      var readValue = function () {
16035        if (!didUpgrade) {
16036          // Only upgrade once. This works even inside the render phase because
16037          // the update is added to a shared queue, which outlasts the
16038          // in-progress render.
16039          didUpgrade = true;
16040
16041          {
16042            isUpdatingOpaqueValueInRenderPhase = true;
16043            setId(makeId());
16044            isUpdatingOpaqueValueInRenderPhase = false;
16045            warnOnOpaqueIdentifierAccessInDEV(fiber);
16046          }
16047        }
16048
16049        {
16050          {
16051            throw Error( "The object passed back from useOpaqueIdentifier is meant to be passed through to attributes only. Do not read the value directly." );
16052          }
16053        }
16054      };
16055
16056      var id = makeOpaqueHydratingObject(readValue);
16057      var setId = mountState(id)[1];
16058
16059      if ((currentlyRenderingFiber$1.mode & BlockingMode) === NoMode) {
16060        currentlyRenderingFiber$1.flags |= Update | Passive;
16061        pushEffect(HasEffect | Passive$1, function () {
16062          setId(makeId());
16063        }, undefined, null);
16064      }
16065
16066      return id;
16067    } else {
16068      var _id = makeId();
16069
16070      mountState(_id);
16071      return _id;
16072    }
16073  }
16074
16075  function updateOpaqueIdentifier() {
16076    var id = updateState()[0];
16077    return id;
16078  }
16079
16080  function rerenderOpaqueIdentifier() {
16081    var id = rerenderState()[0];
16082    return id;
16083  }
16084
16085  function dispatchAction(fiber, queue, action) {
16086    {
16087      if (typeof arguments[3] === 'function') {
16088        error("State updates from the useState() and useReducer() Hooks don't support the " + 'second callback argument. To execute a side effect after ' + 'rendering, declare it in the component body with useEffect().');
16089      }
16090    }
16091
16092    var eventTime = requestEventTime();
16093    var lane = requestUpdateLane(fiber);
16094    var update = {
16095      lane: lane,
16096      action: action,
16097      eagerReducer: null,
16098      eagerState: null,
16099      next: null
16100    }; // Append the update to the end of the list.
16101
16102    var pending = queue.pending;
16103
16104    if (pending === null) {
16105      // This is the first update. Create a circular list.
16106      update.next = update;
16107    } else {
16108      update.next = pending.next;
16109      pending.next = update;
16110    }
16111
16112    queue.pending = update;
16113    var alternate = fiber.alternate;
16114
16115    if (fiber === currentlyRenderingFiber$1 || alternate !== null && alternate === currentlyRenderingFiber$1) {
16116      // This is a render phase update. Stash it in a lazily-created map of
16117      // queue -> linked list of updates. After this render pass, we'll restart
16118      // and apply the stashed updates on top of the work-in-progress hook.
16119      didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate = true;
16120    } else {
16121      if (fiber.lanes === NoLanes && (alternate === null || alternate.lanes === NoLanes)) {
16122        // The queue is currently empty, which means we can eagerly compute the
16123        // next state before entering the render phase. If the new state is the
16124        // same as the current state, we may be able to bail out entirely.
16125        var lastRenderedReducer = queue.lastRenderedReducer;
16126
16127        if (lastRenderedReducer !== null) {
16128          var prevDispatcher;
16129
16130          {
16131            prevDispatcher = ReactCurrentDispatcher$1.current;
16132            ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;
16133          }
16134
16135          try {
16136            var currentState = queue.lastRenderedState;
16137            var eagerState = lastRenderedReducer(currentState, action); // Stash the eagerly computed state, and the reducer used to compute
16138            // it, on the update object. If the reducer hasn't changed by the
16139            // time we enter the render phase, then the eager state can be used
16140            // without calling the reducer again.
16141
16142            update.eagerReducer = lastRenderedReducer;
16143            update.eagerState = eagerState;
16144
16145            if (objectIs(eagerState, currentState)) {
16146              // Fast path. We can bail out without scheduling React to re-render.
16147              // It's still possible that we'll need to rebase this update later,
16148              // if the component re-renders for a different reason and by that
16149              // time the reducer has changed.
16150              return;
16151            }
16152          } catch (error) {// Suppress the error. It will throw again in the render phase.
16153          } finally {
16154            {
16155              ReactCurrentDispatcher$1.current = prevDispatcher;
16156            }
16157          }
16158        }
16159      }
16160
16161      {
16162        // $FlowExpectedError - jest isn't a global, and isn't recognized outside of tests
16163        if ('undefined' !== typeof jest) {
16164          warnIfNotScopedWithMatchingAct(fiber);
16165          warnIfNotCurrentlyActingUpdatesInDev(fiber);
16166        }
16167      }
16168
16169      scheduleUpdateOnFiber(fiber, lane, eventTime);
16170    }
16171  }
16172
vendor: 4,893 bytes, lines 16173-16297
16173  var ContextOnlyDispatcher = {
16174    readContext: readContext,
16175    useCallback: throwInvalidHookError,
16176    useContext: throwInvalidHookError,
16177    useEffect: throwInvalidHookError,
16178    useImperativeHandle: throwInvalidHookError,
16179    useLayoutEffect: throwInvalidHookError,
16180    useMemo: throwInvalidHookError,
16181    useReducer: throwInvalidHookError,
16182    useRef: throwInvalidHookError,
16183    useState: throwInvalidHookError,
16184    useDebugValue: throwInvalidHookError,
16185    useDeferredValue: throwInvalidHookError,
16186    useTransition: throwInvalidHookError,
16187    useMutableSource: throwInvalidHookError,
16188    useOpaqueIdentifier: throwInvalidHookError,
16189    unstable_isNewReconciler: enableNewReconciler
16190  };
16191  var HooksDispatcherOnMountInDEV = null;
16192  var HooksDispatcherOnMountWithHookTypesInDEV = null;
16193  var HooksDispatcherOnUpdateInDEV = null;
16194  var HooksDispatcherOnRerenderInDEV = null;
16195  var InvalidNestedHooksDispatcherOnMountInDEV = null;
16196  var InvalidNestedHooksDispatcherOnUpdateInDEV = null;
16197  var InvalidNestedHooksDispatcherOnRerenderInDEV = null;
16198
16199  {
16200    var warnInvalidContextAccess = function () {
16201      error('Context can only be read while React is rendering. ' + 'In classes, you can read it in the render method or getDerivedStateFromProps. ' + 'In function components, you can read it directly in the function body, but not ' + 'inside Hooks like useReducer() or useMemo().');
16202    };
16203
16204    var warnInvalidHookAccess = function () {
16205      error('Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. ' + 'You can only call Hooks at the top level of your React function. ' + 'For more information, see ' + 'https://reactjs.org/link/rules-of-hooks');
16206    };
16207
16208    HooksDispatcherOnMountInDEV = {
16209      readContext: function (context, observedBits) {
16210        return readContext(context, observedBits);
16211      },
16212      useCallback: function (callback, deps) {
16213        currentHookNameInDev = 'useCallback';
16214        mountHookTypesDev();
16215        checkDepsAreArrayDev(deps);
16216        return mountCallback(callback, deps);
16217      },
16218      useContext: function (context, observedBits) {
16219        currentHookNameInDev = 'useContext';
16220        mountHookTypesDev();
16221        return readContext(context, observedBits);
16222      },
16223      useEffect: function (create, deps) {
16224        currentHookNameInDev = 'useEffect';
16225        mountHookTypesDev();
16226        checkDepsAreArrayDev(deps);
16227        return mountEffect(create, deps);
16228      },
16229      useImperativeHandle: function (ref, create, deps) {
16230        currentHookNameInDev = 'useImperativeHandle';
16231        mountHookTypesDev();
16232        checkDepsAreArrayDev(deps);
16233        return mountImperativeHandle(ref, create, deps);
16234      },
16235      useLayoutEffect: function (create, deps) {
16236        currentHookNameInDev = 'useLayoutEffect';
16237        mountHookTypesDev();
16238        checkDepsAreArrayDev(deps);
16239        return mountLayoutEffect(create, deps);
16240      },
16241      useMemo: function (create, deps) {
16242        currentHookNameInDev = 'useMemo';
16243        mountHookTypesDev();
16244        checkDepsAreArrayDev(deps);
16245        var prevDispatcher = ReactCurrentDispatcher$1.current;
16246        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;
16247
16248        try {
16249          return mountMemo(create, deps);
16250        } finally {
16251          ReactCurrentDispatcher$1.current = prevDispatcher;
16252        }
16253      },
16254      useReducer: function (reducer, initialArg, init) {
16255        currentHookNameInDev = 'useReducer';
16256        mountHookTypesDev();
16257        var prevDispatcher = ReactCurrentDispatcher$1.current;
16258        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;
16259
16260        try {
16261          return mountReducer(reducer, initialArg, init);
16262        } finally {
16263          ReactCurrentDispatcher$1.current = prevDispatcher;
16264        }
16265      },
16266      useRef: function (initialValue) {
16267        currentHookNameInDev = 'useRef';
16268        mountHookTypesDev();
16269        return mountRef(initialValue);
16270      },
16271      useState: function (initialState) {
16272        currentHookNameInDev = 'useState';
16273        mountHookTypesDev();
16274        var prevDispatcher = ReactCurrentDispatcher$1.current;
16275        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;
16276
16277        try {
16278          return mountState(initialState);
16279        } finally {
16280          ReactCurrentDispatcher$1.current = prevDispatcher;
16281        }
16282      },
16283      useDebugValue: function (value, formatterFn) {
16284        currentHookNameInDev = 'useDebugValue';
16285        mountHookTypesDev();
16286        return mountDebugValue();
16287      },
16288      useDeferredValue: function (value) {
16289        currentHookNameInDev = 'useDeferredValue';
16290        mountHookTypesDev();
16291        return mountDeferredValue(value);
16292      },
16293      useTransition: function () {
16294        currentHookNameInDev = 'useTransition';
16295        mountHookTypesDev();
16296        return mountTransition();
16297      },
vendor: 18,798 bytes, lines 16298-16818
16298      useMutableSource: function (source, getSnapshot, subscribe) {
16299        currentHookNameInDev = 'useMutableSource';
16300        mountHookTypesDev();
16301        return mountMutableSource(source, getSnapshot, subscribe);
16302      },
16303      useOpaqueIdentifier: function () {
16304        currentHookNameInDev = 'useOpaqueIdentifier';
16305        mountHookTypesDev();
16306        return mountOpaqueIdentifier();
16307      },
16308      unstable_isNewReconciler: enableNewReconciler
16309    };
16310    HooksDispatcherOnMountWithHookTypesInDEV = {
16311      readContext: function (context, observedBits) {
16312        return readContext(context, observedBits);
16313      },
16314      useCallback: function (callback, deps) {
16315        currentHookNameInDev = 'useCallback';
16316        updateHookTypesDev();
16317        return mountCallback(callback, deps);
16318      },
16319      useContext: function (context, observedBits) {
16320        currentHookNameInDev = 'useContext';
16321        updateHookTypesDev();
16322        return readContext(context, observedBits);
16323      },
16324      useEffect: function (create, deps) {
16325        currentHookNameInDev = 'useEffect';
16326        updateHookTypesDev();
16327        return mountEffect(create, deps);
16328      },
16329      useImperativeHandle: function (ref, create, deps) {
16330        currentHookNameInDev = 'useImperativeHandle';
16331        updateHookTypesDev();
16332        return mountImperativeHandle(ref, create, deps);
16333      },
16334      useLayoutEffect: function (create, deps) {
16335        currentHookNameInDev = 'useLayoutEffect';
16336        updateHookTypesDev();
16337        return mountLayoutEffect(create, deps);
16338      },
16339      useMemo: function (create, deps) {
16340        currentHookNameInDev = 'useMemo';
16341        updateHookTypesDev();
16342        var prevDispatcher = ReactCurrentDispatcher$1.current;
16343        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;
16344
16345        try {
16346          return mountMemo(create, deps);
16347        } finally {
16348          ReactCurrentDispatcher$1.current = prevDispatcher;
16349        }
16350      },
16351      useReducer: function (reducer, initialArg, init) {
16352        currentHookNameInDev = 'useReducer';
16353        updateHookTypesDev();
16354        var prevDispatcher = ReactCurrentDispatcher$1.current;
16355        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;
16356
16357        try {
16358          return mountReducer(reducer, initialArg, init);
16359        } finally {
16360          ReactCurrentDispatcher$1.current = prevDispatcher;
16361        }
16362      },
16363      useRef: function (initialValue) {
16364        currentHookNameInDev = 'useRef';
16365        updateHookTypesDev();
16366        return mountRef(initialValue);
16367      },
16368      useState: function (initialState) {
16369        currentHookNameInDev = 'useState';
16370        updateHookTypesDev();
16371        var prevDispatcher = ReactCurrentDispatcher$1.current;
16372        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;
16373
16374        try {
16375          return mountState(initialState);
16376        } finally {
16377          ReactCurrentDispatcher$1.current = prevDispatcher;
16378        }
16379      },
16380      useDebugValue: function (value, formatterFn) {
16381        currentHookNameInDev = 'useDebugValue';
16382        updateHookTypesDev();
16383        return mountDebugValue();
16384      },
16385      useDeferredValue: function (value) {
16386        currentHookNameInDev = 'useDeferredValue';
16387        updateHookTypesDev();
16388        return mountDeferredValue(value);
16389      },
16390      useTransition: function () {
16391        currentHookNameInDev = 'useTransition';
16392        updateHookTypesDev();
16393        return mountTransition();
16394      },
16395      useMutableSource: function (source, getSnapshot, subscribe) {
16396        currentHookNameInDev = 'useMutableSource';
16397        updateHookTypesDev();
16398        return mountMutableSource(source, getSnapshot, subscribe);
16399      },
16400      useOpaqueIdentifier: function () {
16401        currentHookNameInDev = 'useOpaqueIdentifier';
16402        updateHookTypesDev();
16403        return mountOpaqueIdentifier();
16404      },
16405      unstable_isNewReconciler: enableNewReconciler
16406    };
16407    HooksDispatcherOnUpdateInDEV = {
16408      readContext: function (context, observedBits) {
16409        return readContext(context, observedBits);
16410      },
16411      useCallback: function (callback, deps) {
16412        currentHookNameInDev = 'useCallback';
16413        updateHookTypesDev();
16414        return updateCallback(callback, deps);
16415      },
16416      useContext: function (context, observedBits) {
16417        currentHookNameInDev = 'useContext';
16418        updateHookTypesDev();
16419        return readContext(context, observedBits);
16420      },
16421      useEffect: function (create, deps) {
16422        currentHookNameInDev = 'useEffect';
16423        updateHookTypesDev();
16424        return updateEffect(create, deps);
16425      },
16426      useImperativeHandle: function (ref, create, deps) {
16427        currentHookNameInDev = 'useImperativeHandle';
16428        updateHookTypesDev();
16429        return updateImperativeHandle(ref, create, deps);
16430      },
16431      useLayoutEffect: function (create, deps) {
16432        currentHookNameInDev = 'useLayoutEffect';
16433        updateHookTypesDev();
16434        return updateLayoutEffect(create, deps);
16435      },
16436      useMemo: function (create, deps) {
16437        currentHookNameInDev = 'useMemo';
16438        updateHookTypesDev();
16439        var prevDispatcher = ReactCurrentDispatcher$1.current;
16440        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;
16441
16442        try {
16443          return updateMemo(create, deps);
16444        } finally {
16445          ReactCurrentDispatcher$1.current = prevDispatcher;
16446        }
16447      },
16448      useReducer: function (reducer, initialArg, init) {
16449        currentHookNameInDev = 'useReducer';
16450        updateHookTypesDev();
16451        var prevDispatcher = ReactCurrentDispatcher$1.current;
16452        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;
16453
16454        try {
16455          return updateReducer(reducer, initialArg, init);
16456        } finally {
16457          ReactCurrentDispatcher$1.current = prevDispatcher;
16458        }
16459      },
16460      useRef: function (initialValue) {
16461        currentHookNameInDev = 'useRef';
16462        updateHookTypesDev();
16463        return updateRef();
16464      },
16465      useState: function (initialState) {
16466        currentHookNameInDev = 'useState';
16467        updateHookTypesDev();
16468        var prevDispatcher = ReactCurrentDispatcher$1.current;
16469        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;
16470
16471        try {
16472          return updateState(initialState);
16473        } finally {
16474          ReactCurrentDispatcher$1.current = prevDispatcher;
16475        }
16476      },
16477      useDebugValue: function (value, formatterFn) {
16478        currentHookNameInDev = 'useDebugValue';
16479        updateHookTypesDev();
16480        return updateDebugValue();
16481      },
16482      useDeferredValue: function (value) {
16483        currentHookNameInDev = 'useDeferredValue';
16484        updateHookTypesDev();
16485        return updateDeferredValue(value);
16486      },
16487      useTransition: function () {
16488        currentHookNameInDev = 'useTransition';
16489        updateHookTypesDev();
16490        return updateTransition();
16491      },
16492      useMutableSource: function (source, getSnapshot, subscribe) {
16493        currentHookNameInDev = 'useMutableSource';
16494        updateHookTypesDev();
16495        return updateMutableSource(source, getSnapshot, subscribe);
16496      },
16497      useOpaqueIdentifier: function () {
16498        currentHookNameInDev = 'useOpaqueIdentifier';
16499        updateHookTypesDev();
16500        return updateOpaqueIdentifier();
16501      },
16502      unstable_isNewReconciler: enableNewReconciler
16503    };
16504    HooksDispatcherOnRerenderInDEV = {
16505      readContext: function (context, observedBits) {
16506        return readContext(context, observedBits);
16507      },
16508      useCallback: function (callback, deps) {
16509        currentHookNameInDev = 'useCallback';
16510        updateHookTypesDev();
16511        return updateCallback(callback, deps);
16512      },
16513      useContext: function (context, observedBits) {
16514        currentHookNameInDev = 'useContext';
16515        updateHookTypesDev();
16516        return readContext(context, observedBits);
16517      },
16518      useEffect: function (create, deps) {
16519        currentHookNameInDev = 'useEffect';
16520        updateHookTypesDev();
16521        return updateEffect(create, deps);
16522      },
16523      useImperativeHandle: function (ref, create, deps) {
16524        currentHookNameInDev = 'useImperativeHandle';
16525        updateHookTypesDev();
16526        return updateImperativeHandle(ref, create, deps);
16527      },
16528      useLayoutEffect: function (create, deps) {
16529        currentHookNameInDev = 'useLayoutEffect';
16530        updateHookTypesDev();
16531        return updateLayoutEffect(create, deps);
16532      },
16533      useMemo: function (create, deps) {
16534        currentHookNameInDev = 'useMemo';
16535        updateHookTypesDev();
16536        var prevDispatcher = ReactCurrentDispatcher$1.current;
16537        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnRerenderInDEV;
16538
16539        try {
16540          return updateMemo(create, deps);
16541        } finally {
16542          ReactCurrentDispatcher$1.current = prevDispatcher;
16543        }
16544      },
16545      useReducer: function (reducer, initialArg, init) {
16546        currentHookNameInDev = 'useReducer';
16547        updateHookTypesDev();
16548        var prevDispatcher = ReactCurrentDispatcher$1.current;
16549        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnRerenderInDEV;
16550
16551        try {
16552          return rerenderReducer(reducer, initialArg, init);
16553        } finally {
16554          ReactCurrentDispatcher$1.current = prevDispatcher;
16555        }
16556      },
16557      useRef: function (initialValue) {
16558        currentHookNameInDev = 'useRef';
16559        updateHookTypesDev();
16560        return updateRef();
16561      },
16562      useState: function (initialState) {
16563        currentHookNameInDev = 'useState';
16564        updateHookTypesDev();
16565        var prevDispatcher = ReactCurrentDispatcher$1.current;
16566        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnRerenderInDEV;
16567
16568        try {
16569          return rerenderState(initialState);
16570        } finally {
16571          ReactCurrentDispatcher$1.current = prevDispatcher;
16572        }
16573      },
16574      useDebugValue: function (value, formatterFn) {
16575        currentHookNameInDev = 'useDebugValue';
16576        updateHookTypesDev();
16577        return updateDebugValue();
16578      },
16579      useDeferredValue: function (value) {
16580        currentHookNameInDev = 'useDeferredValue';
16581        updateHookTypesDev();
16582        return rerenderDeferredValue(value);
16583      },
16584      useTransition: function () {
16585        currentHookNameInDev = 'useTransition';
16586        updateHookTypesDev();
16587        return rerenderTransition();
16588      },
16589      useMutableSource: function (source, getSnapshot, subscribe) {
16590        currentHookNameInDev = 'useMutableSource';
16591        updateHookTypesDev();
16592        return updateMutableSource(source, getSnapshot, subscribe);
16593      },
16594      useOpaqueIdentifier: function () {
16595        currentHookNameInDev = 'useOpaqueIdentifier';
16596        updateHookTypesDev();
16597        return rerenderOpaqueIdentifier();
16598      },
16599      unstable_isNewReconciler: enableNewReconciler
16600    };
16601    InvalidNestedHooksDispatcherOnMountInDEV = {
16602      readContext: function (context, observedBits) {
16603        warnInvalidContextAccess();
16604        return readContext(context, observedBits);
16605      },
16606      useCallback: function (callback, deps) {
16607        currentHookNameInDev = 'useCallback';
16608        warnInvalidHookAccess();
16609        mountHookTypesDev();
16610        return mountCallback(callback, deps);
16611      },
16612      useContext: function (context, observedBits) {
16613        currentHookNameInDev = 'useContext';
16614        warnInvalidHookAccess();
16615        mountHookTypesDev();
16616        return readContext(context, observedBits);
16617      },
16618      useEffect: function (create, deps) {
16619        currentHookNameInDev = 'useEffect';
16620        warnInvalidHookAccess();
16621        mountHookTypesDev();
16622        return mountEffect(create, deps);
16623      },
16624      useImperativeHandle: function (ref, create, deps) {
16625        currentHookNameInDev = 'useImperativeHandle';
16626        warnInvalidHookAccess();
16627        mountHookTypesDev();
16628        return mountImperativeHandle(ref, create, deps);
16629      },
16630      useLayoutEffect: function (create, deps) {
16631        currentHookNameInDev = 'useLayoutEffect';
16632        warnInvalidHookAccess();
16633        mountHookTypesDev();
16634        return mountLayoutEffect(create, deps);
16635      },
16636      useMemo: function (create, deps) {
16637        currentHookNameInDev = 'useMemo';
16638        warnInvalidHookAccess();
16639        mountHookTypesDev();
16640        var prevDispatcher = ReactCurrentDispatcher$1.current;
16641        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;
16642
16643        try {
16644          return mountMemo(create, deps);
16645        } finally {
16646          ReactCurrentDispatcher$1.current = prevDispatcher;
16647        }
16648      },
16649      useReducer: function (reducer, initialArg, init) {
16650        currentHookNameInDev = 'useReducer';
16651        warnInvalidHookAccess();
16652        mountHookTypesDev();
16653        var prevDispatcher = ReactCurrentDispatcher$1.current;
16654        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;
16655
16656        try {
16657          return mountReducer(reducer, initialArg, init);
16658        } finally {
16659          ReactCurrentDispatcher$1.current = prevDispatcher;
16660        }
16661      },
16662      useRef: function (initialValue) {
16663        currentHookNameInDev = 'useRef';
16664        warnInvalidHookAccess();
16665        mountHookTypesDev();
16666        return mountRef(initialValue);
16667      },
16668      useState: function (initialState) {
16669        currentHookNameInDev = 'useState';
16670        warnInvalidHookAccess();
16671        mountHookTypesDev();
16672        var prevDispatcher = ReactCurrentDispatcher$1.current;
16673        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;
16674
16675        try {
16676          return mountState(initialState);
16677        } finally {
16678          ReactCurrentDispatcher$1.current = prevDispatcher;
16679        }
16680      },
16681      useDebugValue: function (value, formatterFn) {
16682        currentHookNameInDev = 'useDebugValue';
16683        warnInvalidHookAccess();
16684        mountHookTypesDev();
16685        return mountDebugValue();
16686      },
16687      useDeferredValue: function (value) {
16688        currentHookNameInDev = 'useDeferredValue';
16689        warnInvalidHookAccess();
16690        mountHookTypesDev();
16691        return mountDeferredValue(value);
16692      },
16693      useTransition: function () {
16694        currentHookNameInDev = 'useTransition';
16695        warnInvalidHookAccess();
16696        mountHookTypesDev();
16697        return mountTransition();
16698      },
16699      useMutableSource: function (source, getSnapshot, subscribe) {
16700        currentHookNameInDev = 'useMutableSource';
16701        warnInvalidHookAccess();
16702        mountHookTypesDev();
16703        return mountMutableSource(source, getSnapshot, subscribe);
16704      },
16705      useOpaqueIdentifier: function () {
16706        currentHookNameInDev = 'useOpaqueIdentifier';
16707        warnInvalidHookAccess();
16708        mountHookTypesDev();
16709        return mountOpaqueIdentifier();
16710      },
16711      unstable_isNewReconciler: enableNewReconciler
16712    };
16713    InvalidNestedHooksDispatcherOnUpdateInDEV = {
16714      readContext: function (context, observedBits) {
16715        warnInvalidContextAccess();
16716        return readContext(context, observedBits);
16717      },
16718      useCallback: function (callback, deps) {
16719        currentHookNameInDev = 'useCallback';
16720        warnInvalidHookAccess();
16721        updateHookTypesDev();
16722        return updateCallback(callback, deps);
16723      },
16724      useContext: function (context, observedBits) {
16725        currentHookNameInDev = 'useContext';
16726        warnInvalidHookAccess();
16727        updateHookTypesDev();
16728        return readContext(context, observedBits);
16729      },
16730      useEffect: function (create, deps) {
16731        currentHookNameInDev = 'useEffect';
16732        warnInvalidHookAccess();
16733        updateHookTypesDev();
16734        return updateEffect(create, deps);
16735      },
16736      useImperativeHandle: function (ref, create, deps) {
16737        currentHookNameInDev = 'useImperativeHandle';
16738        warnInvalidHookAccess();
16739        updateHookTypesDev();
16740        return updateImperativeHandle(ref, create, deps);
16741      },
16742      useLayoutEffect: function (create, deps) {
16743        currentHookNameInDev = 'useLayoutEffect';
16744        warnInvalidHookAccess();
16745        updateHookTypesDev();
16746        return updateLayoutEffect(create, deps);
16747      },
16748      useMemo: function (create, deps) {
16749        currentHookNameInDev = 'useMemo';
16750        warnInvalidHookAccess();
16751        updateHookTypesDev();
16752        var prevDispatcher = ReactCurrentDispatcher$1.current;
16753        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;
16754
16755        try {
16756          return updateMemo(create, deps);
16757        } finally {
16758          ReactCurrentDispatcher$1.current = prevDispatcher;
16759        }
16760      },
16761      useReducer: function (reducer, initialArg, init) {
16762        currentHookNameInDev = 'useReducer';
16763        warnInvalidHookAccess();
16764        updateHookTypesDev();
16765        var prevDispatcher = ReactCurrentDispatcher$1.current;
16766        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;
16767
16768        try {
16769          return updateReducer(reducer, initialArg, init);
16770        } finally {
16771          ReactCurrentDispatcher$1.current = prevDispatcher;
16772        }
16773      },
16774      useRef: function (initialValue) {
16775        currentHookNameInDev = 'useRef';
16776        warnInvalidHookAccess();
16777        updateHookTypesDev();
16778        return updateRef();
16779      },
16780      useState: function (initialState) {
16781        currentHookNameInDev = 'useState';
16782        warnInvalidHookAccess();
16783        updateHookTypesDev();
16784        var prevDispatcher = ReactCurrentDispatcher$1.current;
16785        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;
16786
16787        try {
16788          return updateState(initialState);
16789        } finally {
16790          ReactCurrentDispatcher$1.current = prevDispatcher;
16791        }
16792      },
16793      useDebugValue: function (value, formatterFn) {
16794        currentHookNameInDev = 'useDebugValue';
16795        warnInvalidHookAccess();
16796        updateHookTypesDev();
16797        return updateDebugValue();
16798      },
16799      useDeferredValue: function (value) {
16800        currentHookNameInDev = 'useDeferredValue';
16801        warnInvalidHookAccess();
16802        updateHookTypesDev();
16803        return updateDeferredValue(value);
16804      },
16805      useTransition: function () {
16806        currentHookNameInDev = 'useTransition';
16807        warnInvalidHookAccess();
16808        updateHookTypesDev();
16809        return updateTransition();
16810      },
16811      useMutableSource: function (source, getSnapshot, subscribe) {
16812        currentHookNameInDev = 'useMutableSource';
16813        warnInvalidHookAccess();
16814        updateHookTypesDev();
16815        return updateMutableSource(source, getSnapshot, subscribe);
16816      },
16817      useOpaqueIdentifier: function () {
16818        currentHookNameInDev = 'useOpaqueIdentifier';
vendor: 4,368 bytes, lines 16819-16948
16819        warnInvalidHookAccess();
16820        updateHookTypesDev();
16821        return updateOpaqueIdentifier();
16822      },
16823      unstable_isNewReconciler: enableNewReconciler
16824    };
16825    InvalidNestedHooksDispatcherOnRerenderInDEV = {
16826      readContext: function (context, observedBits) {
16827        warnInvalidContextAccess();
16828        return readContext(context, observedBits);
16829      },
16830      useCallback: function (callback, deps) {
16831        currentHookNameInDev = 'useCallback';
16832        warnInvalidHookAccess();
16833        updateHookTypesDev();
16834        return updateCallback(callback, deps);
16835      },
16836      useContext: function (context, observedBits) {
16837        currentHookNameInDev = 'useContext';
16838        warnInvalidHookAccess();
16839        updateHookTypesDev();
16840        return readContext(context, observedBits);
16841      },
16842      useEffect: function (create, deps) {
16843        currentHookNameInDev = 'useEffect';
16844        warnInvalidHookAccess();
16845        updateHookTypesDev();
16846        return updateEffect(create, deps);
16847      },
16848      useImperativeHandle: function (ref, create, deps) {
16849        currentHookNameInDev = 'useImperativeHandle';
16850        warnInvalidHookAccess();
16851        updateHookTypesDev();
16852        return updateImperativeHandle(ref, create, deps);
16853      },
16854      useLayoutEffect: function (create, deps) {
16855        currentHookNameInDev = 'useLayoutEffect';
16856        warnInvalidHookAccess();
16857        updateHookTypesDev();
16858        return updateLayoutEffect(create, deps);
16859      },
16860      useMemo: function (create, deps) {
16861        currentHookNameInDev = 'useMemo';
16862        warnInvalidHookAccess();
16863        updateHookTypesDev();
16864        var prevDispatcher = ReactCurrentDispatcher$1.current;
16865        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;
16866
16867        try {
16868          return updateMemo(create, deps);
16869        } finally {
16870          ReactCurrentDispatcher$1.current = prevDispatcher;
16871        }
16872      },
16873      useReducer: function (reducer, initialArg, init) {
16874        currentHookNameInDev = 'useReducer';
16875        warnInvalidHookAccess();
16876        updateHookTypesDev();
16877        var prevDispatcher = ReactCurrentDispatcher$1.current;
16878        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;
16879
16880        try {
16881          return rerenderReducer(reducer, initialArg, init);
16882        } finally {
16883          ReactCurrentDispatcher$1.current = prevDispatcher;
16884        }
16885      },
16886      useRef: function (initialValue) {
16887        currentHookNameInDev = 'useRef';
16888        warnInvalidHookAccess();
16889        updateHookTypesDev();
16890        return updateRef();
16891      },
16892      useState: function (initialState) {
16893        currentHookNameInDev = 'useState';
16894        warnInvalidHookAccess();
16895        updateHookTypesDev();
16896        var prevDispatcher = ReactCurrentDispatcher$1.current;
16897        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;
16898
16899        try {
16900          return rerenderState(initialState);
16901        } finally {
16902          ReactCurrentDispatcher$1.current = prevDispatcher;
16903        }
16904      },
16905      useDebugValue: function (value, formatterFn) {
16906        currentHookNameInDev = 'useDebugValue';
16907        warnInvalidHookAccess();
16908        updateHookTypesDev();
16909        return updateDebugValue();
16910      },
16911      useDeferredValue: function (value) {
16912        currentHookNameInDev = 'useDeferredValue';
16913        warnInvalidHookAccess();
16914        updateHookTypesDev();
16915        return rerenderDeferredValue(value);
16916      },
16917      useTransition: function () {
16918        currentHookNameInDev = 'useTransition';
16919        warnInvalidHookAccess();
16920        updateHookTypesDev();
16921        return rerenderTransition();
16922      },
16923      useMutableSource: function (source, getSnapshot, subscribe) {
16924        currentHookNameInDev = 'useMutableSource';
16925        warnInvalidHookAccess();
16926        updateHookTypesDev();
16927        return updateMutableSource(source, getSnapshot, subscribe);
16928      },
16929      useOpaqueIdentifier: function () {
16930        currentHookNameInDev = 'useOpaqueIdentifier';
16931        warnInvalidHookAccess();
16932        updateHookTypesDev();
16933        return rerenderOpaqueIdentifier();
16934      },
16935      unstable_isNewReconciler: enableNewReconciler
16936    };
16937  }
16938
16939  var now$1 = unstable_now;
16940  var commitTime = 0;
16941  var profilerStartTime = -1;
16942
16943  function getCommitTime() {
16944    return commitTime;
16945  }
16946
16947  function recordCommitTime() {
16948
vendor: 4,160 bytes, lines 16949-17053
16949    commitTime = now$1();
16950  }
16951
16952  function startProfilerTimer(fiber) {
16953
16954    profilerStartTime = now$1();
16955
16956    if (fiber.actualStartTime < 0) {
16957      fiber.actualStartTime = now$1();
16958    }
16959  }
16960
16961  function stopProfilerTimerIfRunning(fiber) {
16962
16963    profilerStartTime = -1;
16964  }
16965
16966  function stopProfilerTimerIfRunningAndRecordDelta(fiber, overrideBaseTime) {
16967
16968    if (profilerStartTime >= 0) {
16969      var elapsedTime = now$1() - profilerStartTime;
16970      fiber.actualDuration += elapsedTime;
16971
16972      if (overrideBaseTime) {
16973        fiber.selfBaseDuration = elapsedTime;
16974      }
16975
16976      profilerStartTime = -1;
16977    }
16978  }
16979
16980  function transferActualDuration(fiber) {
16981    // Transfer time spent rendering these children so we don't lose it
16982    // after we rerender. This is used as a helper in special cases
16983    // where we should count the work of multiple passes.
16984    var child = fiber.child;
16985
16986    while (child) {
16987      fiber.actualDuration += child.actualDuration;
16988      child = child.sibling;
16989    }
16990  }
16991
16992  var ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;
16993  var didReceiveUpdate = false;
16994  var didWarnAboutBadClass;
16995  var didWarnAboutModulePatternComponent;
16996  var didWarnAboutContextTypeOnFunctionComponent;
16997  var didWarnAboutGetDerivedStateOnFunctionComponent;
16998  var didWarnAboutFunctionRefs;
16999  var didWarnAboutReassigningProps;
17000  var didWarnAboutRevealOrder;
17001  var didWarnAboutTailOptions;
17002
17003  {
17004    didWarnAboutBadClass = {};
17005    didWarnAboutModulePatternComponent = {};
17006    didWarnAboutContextTypeOnFunctionComponent = {};
17007    didWarnAboutGetDerivedStateOnFunctionComponent = {};
17008    didWarnAboutFunctionRefs = {};
17009    didWarnAboutReassigningProps = false;
17010    didWarnAboutRevealOrder = {};
17011    didWarnAboutTailOptions = {};
17012  }
17013
17014  function reconcileChildren(current, workInProgress, nextChildren, renderLanes) {
17015    if (current === null) {
17016      // If this is a fresh new component that hasn't been rendered yet, we
17017      // won't update its child set by applying minimal side-effects. Instead,
17018      // we will add them all to the child before it gets rendered. That means
17019      // we can optimize this reconciliation pass by not tracking side-effects.
17020      workInProgress.child = mountChildFibers(workInProgress, null, nextChildren, renderLanes);
17021    } else {
17022      // If the current child is the same as the work in progress, it means that
17023      // we haven't yet started any work on these children. Therefore, we use
17024      // the clone algorithm to create a copy of all the current children.
17025      // If we had any progressed work already, that is invalid at this point so
17026      // let's throw it out.
17027      workInProgress.child = reconcileChildFibers(workInProgress, current.child, nextChildren, renderLanes);
17028    }
17029  }
17030
17031  function forceUnmountCurrentAndReconcile(current, workInProgress, nextChildren, renderLanes) {
17032    // This function is fork of reconcileChildren. It's used in cases where we
17033    // want to reconcile without matching against the existing set. This has the
17034    // effect of all current children being unmounted; even if the type and key
17035    // are the same, the old child is unmounted and a new child is created.
17036    //
17037    // To do this, we're going to go through the reconcile algorithm twice. In
17038    // the first pass, we schedule a deletion for all the current children by
17039    // passing null.
17040    workInProgress.child = reconcileChildFibers(workInProgress, current.child, null, renderLanes); // In the second pass, we mount the new children. The trick here is that we
17041    // pass null in place of where we usually pass the current child set. This has
17042    // the effect of remounting all children regardless of whether their
17043    // identities match.
17044
17045    workInProgress.child = reconcileChildFibers(workInProgress, null, nextChildren, renderLanes);
17046  }
17047
17048  function updateForwardRef(current, workInProgress, Component, nextProps, renderLanes) {
17049    // TODO: current can be non-null here even if the component
17050    // hasn't yet mounted. This happens after the first render suspends.
17051    // We'll need to figure out if this is fine or can cause issues.
17052    {
17053      if (workInProgress.type !== workInProgress.elementType) {
vendor: 4,263 bytes, lines 17054-17173
17054        // Lazy component props can't be validated in createElement
17055        // because they're only guaranteed to be resolved here.
17056        var innerPropTypes = Component.propTypes;
17057
17058        if (innerPropTypes) {
17059          checkPropTypes(innerPropTypes, nextProps, // Resolved props
17060          'prop', getComponentName(Component));
17061        }
17062      }
17063    }
17064
17065    var render = Component.render;
17066    var ref = workInProgress.ref; // The rest is a fork of updateFunctionComponent
17067
17068    var nextChildren;
17069    prepareToReadContext(workInProgress, renderLanes);
17070
17071    {
17072      ReactCurrentOwner$1.current = workInProgress;
17073      setIsRendering(true);
17074      nextChildren = renderWithHooks(current, workInProgress, render, nextProps, ref, renderLanes);
17075
17076      if ( workInProgress.mode & StrictMode) {
17077        disableLogs();
17078
17079        try {
17080          nextChildren = renderWithHooks(current, workInProgress, render, nextProps, ref, renderLanes);
17081        } finally {
17082          reenableLogs();
17083        }
17084      }
17085
17086      setIsRendering(false);
17087    }
17088
17089    if (current !== null && !didReceiveUpdate) {
17090      bailoutHooks(current, workInProgress, renderLanes);
17091      return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
17092    } // React DevTools reads this flag.
17093
17094
17095    workInProgress.flags |= PerformedWork;
17096    reconcileChildren(current, workInProgress, nextChildren, renderLanes);
17097    return workInProgress.child;
17098  }
17099
17100  function updateMemoComponent(current, workInProgress, Component, nextProps, updateLanes, renderLanes) {
17101    if (current === null) {
17102      var type = Component.type;
17103
17104      if (isSimpleFunctionComponent(type) && Component.compare === null && // SimpleMemoComponent codepath doesn't resolve outer props either.
17105      Component.defaultProps === undefined) {
17106        var resolvedType = type;
17107
17108        {
17109          resolvedType = resolveFunctionForHotReloading(type);
17110        } // If this is a plain function component without default props,
17111        // and with only the default shallow comparison, we upgrade it
17112        // to a SimpleMemoComponent to allow fast path updates.
17113
17114
17115        workInProgress.tag = SimpleMemoComponent;
17116        workInProgress.type = resolvedType;
17117
17118        {
17119          validateFunctionComponentInDev(workInProgress, type);
17120        }
17121
17122        return updateSimpleMemoComponent(current, workInProgress, resolvedType, nextProps, updateLanes, renderLanes);
17123      }
17124
17125      {
17126        var innerPropTypes = type.propTypes;
17127
17128        if (innerPropTypes) {
17129          // Inner memo component props aren't currently validated in createElement.
17130          // We could move it there, but we'd still need this for lazy code path.
17131          checkPropTypes(innerPropTypes, nextProps, // Resolved props
17132          'prop', getComponentName(type));
17133        }
17134      }
17135
17136      var child = createFiberFromTypeAndProps(Component.type, null, nextProps, workInProgress, workInProgress.mode, renderLanes);
17137      child.ref = workInProgress.ref;
17138      child.return = workInProgress;
17139      workInProgress.child = child;
17140      return child;
17141    }
17142
17143    {
17144      var _type = Component.type;
17145      var _innerPropTypes = _type.propTypes;
17146
17147      if (_innerPropTypes) {
17148        // Inner memo component props aren't currently validated in createElement.
17149        // We could move it there, but we'd still need this for lazy code path.
17150        checkPropTypes(_innerPropTypes, nextProps, // Resolved props
17151        'prop', getComponentName(_type));
17152      }
17153    }
17154
17155    var currentChild = current.child; // This is always exactly one child
17156
17157    if (!includesSomeLane(updateLanes, renderLanes)) {
17158      // This will be the props with resolved defaultProps,
17159      // unlike current.memoizedProps which will be the unresolved ones.
17160      var prevProps = currentChild.memoizedProps; // Default to shallow comparison
17161
17162      var compare = Component.compare;
17163      compare = compare !== null ? compare : shallowEqual;
17164
17165      if (compare(prevProps, nextProps) && current.ref === workInProgress.ref) {
17166        return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
17167      }
17168    } // React DevTools reads this flag.
17169
17170
17171    workInProgress.flags |= PerformedWork;
17172    var newChild = createWorkInProgress(currentChild, nextProps);
17173    newChild.ref = workInProgress.ref;
vendor: 2,727 bytes, lines 17174-17231
17174    newChild.return = workInProgress;
17175    workInProgress.child = newChild;
17176    return newChild;
17177  }
17178
17179  function updateSimpleMemoComponent(current, workInProgress, Component, nextProps, updateLanes, renderLanes) {
17180    // TODO: current can be non-null here even if the component
17181    // hasn't yet mounted. This happens when the inner render suspends.
17182    // We'll need to figure out if this is fine or can cause issues.
17183    {
17184      if (workInProgress.type !== workInProgress.elementType) {
17185        // Lazy component props can't be validated in createElement
17186        // because they're only guaranteed to be resolved here.
17187        var outerMemoType = workInProgress.elementType;
17188
17189        if (outerMemoType.$$typeof === REACT_LAZY_TYPE) {
17190          // We warn when you define propTypes on lazy()
17191          // so let's just skip over it to find memo() outer wrapper.
17192          // Inner props for memo are validated later.
17193          var lazyComponent = outerMemoType;
17194          var payload = lazyComponent._payload;
17195          var init = lazyComponent._init;
17196
17197          try {
17198            outerMemoType = init(payload);
17199          } catch (x) {
17200            outerMemoType = null;
17201          } // Inner propTypes will be validated in the function component path.
17202
17203
17204          var outerPropTypes = outerMemoType && outerMemoType.propTypes;
17205
17206          if (outerPropTypes) {
17207            checkPropTypes(outerPropTypes, nextProps, // Resolved (SimpleMemoComponent has no defaultProps)
17208            'prop', getComponentName(outerMemoType));
17209          }
17210        }
17211      }
17212    }
17213
17214    if (current !== null) {
17215      var prevProps = current.memoizedProps;
17216
17217      if (shallowEqual(prevProps, nextProps) && current.ref === workInProgress.ref && ( // Prevent bailout if the implementation changed due to hot reload.
17218       workInProgress.type === current.type )) {
17219        didReceiveUpdate = false;
17220
17221        if (!includesSomeLane(renderLanes, updateLanes)) {
17222          // The pending lanes were cleared at the beginning of beginWork. We're
17223          // about to bail out, but there might be other lanes that weren't
17224          // included in the current render. Usually, the priority level of the
17225          // remaining updates is accumlated during the evaluation of the
17226          // component (i.e. when processing the update queue). But since since
17227          // we're bailing out early *without* evaluating the component, we need
17228          // to account for it here, too. Reset to the value of the current fiber.
17229          // NOTE: This only applies to SimpleMemoComponent, not MemoComponent,
17230          // because a MemoComponent fiber does not have hooks or an update queue;
17231          // rather, it wraps around an inner component, which may or may not
17232          // contains hooks.
17233          // TODO: Move the reset at in beginWork out of the common path so that
17234          // this is no longer necessary.
17235          workInProgress.lanes = current.lanes;
17236          return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
17237        } else if ((current.flags & ForceUpdateForLegacySuspense) !== NoFlags) {
17238          // This is a special case that only exists for legacy mode.
17239          // See https://github.com/facebook/react/pull/19216.
17240          didReceiveUpdate = true;
17241        }
17242      }
17243    }
17244
17245    return updateFunctionComponent(current, workInProgress, Component, nextProps, renderLanes);
17246  }
17247
17248  function updateOffscreenComponent(current, workInProgress, renderLanes) {
17249    var nextProps = workInProgress.pendingProps;
17250    var nextChildren = nextProps.children;
17251    var prevState = current !== null ? current.memoizedState : null;
17252
17253    if (nextProps.mode === 'hidden' || nextProps.mode === 'unstable-defer-without-hiding') {
17254      if ((workInProgress.mode & ConcurrentMode) === NoMode) {
17255        // In legacy sync mode, don't defer the subtree. Render it now.
17256        // TODO: Figure out what we should do in Blocking mode.
17257        var nextState = {
17258          baseLanes: NoLanes
17259        };
17260        workInProgress.memoizedState = nextState;
17261        pushRenderLanes(workInProgress, renderLanes);
17262      } else if (!includesSomeLane(renderLanes, OffscreenLane)) {
17263        var nextBaseLanes;
17264
17265        if (prevState !== null) {
17266          var prevBaseLanes = prevState.baseLanes;
17267          nextBaseLanes = mergeLanes(prevBaseLanes, renderLanes);
17268        } else {
17269          nextBaseLanes = renderLanes;
17270        } // Schedule this fiber to re-render at offscreen priority. Then bailout.
17271
17272
17273        {
17274          markSpawnedWork(OffscreenLane);
17275        }
17276
17277        workInProgress.lanes = workInProgress.childLanes = laneToLanes(OffscreenLane);
17278        var _nextState = {
17279          baseLanes: nextBaseLanes
17280        };
17281        workInProgress.memoizedState = _nextState; // We're about to bail out, but we need to push this to the stack anyway
17282        // to avoid a push/pop misalignment.
17283
17284        pushRenderLanes(workInProgress, nextBaseLanes);
17285        return null;
17286      } else {
17287        // Rendering at offscreen, so we can clear the base lanes.
17288        var _nextState2 = {
17289          baseLanes: NoLanes
17290        };
17291        workInProgress.memoizedState = _nextState2; // Push the lanes that were skipped when we bailed out.
17292
17293        var subtreeRenderLanes = prevState !== null ? prevState.baseLanes : renderLanes;
17294        pushRenderLanes(workInProgress, subtreeRenderLanes);
17295      }
17296    } else {
17297      var _subtreeRenderLanes;
17298
17299      if (prevState !== null) {
17300        _subtreeRenderLanes = mergeLanes(prevState.baseLanes, renderLanes); // Since we're not hidden anymore, reset the state
17301
17302        workInProgress.memoizedState = null;
17303      } else {
17304        // We weren't previously hidden, and we still aren't, so there's nothing
17305        // special to do. Need to push to the stack regardless, though, to avoid
17306        // a push/pop misalignment.
17307        _subtreeRenderLanes = renderLanes;
17308      }
17309
17310      pushRenderLanes(workInProgress, _subtreeRenderLanes);
17311    }
17312
17313    reconcileChildren(current, workInProgress, nextChildren, renderLanes);
17314    return workInProgress.child;
17315  } // Note: These happen to have identical begin phases, for now. We shouldn't hold
17316  // ourselves to this constraint, though. If the behavior diverges, we should
17317  // fork the function.
17318
17319
17320  var updateLegacyHiddenComponent = updateOffscreenComponent;
17321
17322  function updateFragment(current, workInProgress, renderLanes) {
17323    var nextChildren = workInProgress.pendingProps;
17324    reconcileChildren(current, workInProgress, nextChildren, renderLanes);
17325    return workInProgress.child;
17326  }
17327
17328  function updateMode(current, workInProgress, renderLanes) {
17329    var nextChildren = workInProgress.pendingProps.children;
17330    reconcileChildren(current, workInProgress, nextChildren, renderLanes);
17331    return workInProgress.child;
17332  }
17333
17334  function updateProfiler(current, workInProgress, renderLanes) {
17335    {
17336      workInProgress.flags |= Update; // Reset effect durations for the next eventual effect phase.
17337      // These are reset during render to allow the DevTools commit hook a chance to read them,
17338
17339      var stateNode = workInProgress.stateNode;
17340      stateNode.effectDuration = 0;
17341      stateNode.passiveEffectDuration = 0;
17342    }
17343
17344    var nextProps = workInProgress.pendingProps;
17345    var nextChildren = nextProps.children;
17346    reconcileChildren(current, workInProgress, nextChildren, renderLanes);
17347    return workInProgress.child;
17348  }
17349
17350  function markRef(current, workInProgress) {
17351    var ref = workInProgress.ref;
17352
17353    if (current === null && ref !== null || current !== null && current.ref !== ref) {
17354      // Schedule a Ref effect
vendor: 25,136 bytes, lines 17355-18012
17355      workInProgress.flags |= Ref;
17356    }
17357  }
17358
17359  function updateFunctionComponent(current, workInProgress, Component, nextProps, renderLanes) {
17360    {
17361      if (workInProgress.type !== workInProgress.elementType) {
17362        // Lazy component props can't be validated in createElement
17363        // because they're only guaranteed to be resolved here.
17364        var innerPropTypes = Component.propTypes;
17365
17366        if (innerPropTypes) {
17367          checkPropTypes(innerPropTypes, nextProps, // Resolved props
17368          'prop', getComponentName(Component));
17369        }
17370      }
17371    }
17372
17373    var context;
17374
17375    {
17376      var unmaskedContext = getUnmaskedContext(workInProgress, Component, true);
17377      context = getMaskedContext(workInProgress, unmaskedContext);
17378    }
17379
17380    var nextChildren;
17381    prepareToReadContext(workInProgress, renderLanes);
17382
17383    {
17384      ReactCurrentOwner$1.current = workInProgress;
17385      setIsRendering(true);
17386      nextChildren = renderWithHooks(current, workInProgress, Component, nextProps, context, renderLanes);
17387
17388      if ( workInProgress.mode & StrictMode) {
17389        disableLogs();
17390
17391        try {
17392          nextChildren = renderWithHooks(current, workInProgress, Component, nextProps, context, renderLanes);
17393        } finally {
17394          reenableLogs();
17395        }
17396      }
17397
17398      setIsRendering(false);
17399    }
17400
17401    if (current !== null && !didReceiveUpdate) {
17402      bailoutHooks(current, workInProgress, renderLanes);
17403      return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
17404    } // React DevTools reads this flag.
17405
17406
17407    workInProgress.flags |= PerformedWork;
17408    reconcileChildren(current, workInProgress, nextChildren, renderLanes);
17409    return workInProgress.child;
17410  }
17411
17412  function updateClassComponent(current, workInProgress, Component, nextProps, renderLanes) {
17413    {
17414      if (workInProgress.type !== workInProgress.elementType) {
17415        // Lazy component props can't be validated in createElement
17416        // because they're only guaranteed to be resolved here.
17417        var innerPropTypes = Component.propTypes;
17418
17419        if (innerPropTypes) {
17420          checkPropTypes(innerPropTypes, nextProps, // Resolved props
17421          'prop', getComponentName(Component));
17422        }
17423      }
17424    } // Push context providers early to prevent context stack mismatches.
17425    // During mounting we don't know the child context yet as the instance doesn't exist.
17426    // We will invalidate the child context in finishClassComponent() right after rendering.
17427
17428
17429    var hasContext;
17430
17431    if (isContextProvider(Component)) {
17432      hasContext = true;
17433      pushContextProvider(workInProgress);
17434    } else {
17435      hasContext = false;
17436    }
17437
17438    prepareToReadContext(workInProgress, renderLanes);
17439    var instance = workInProgress.stateNode;
17440    var shouldUpdate;
17441
17442    if (instance === null) {
17443      if (current !== null) {
17444        // A class component without an instance only mounts if it suspended
17445        // inside a non-concurrent tree, in an inconsistent state. We want to
17446        // treat it like a new mount, even though an empty version of it already
17447        // committed. Disconnect the alternate pointers.
17448        current.alternate = null;
17449        workInProgress.alternate = null; // Since this is conceptually a new fiber, schedule a Placement effect
17450
17451        workInProgress.flags |= Placement;
17452      } // In the initial pass we might need to construct the instance.
17453
17454
17455      constructClassInstance(workInProgress, Component, nextProps);
17456      mountClassInstance(workInProgress, Component, nextProps, renderLanes);
17457      shouldUpdate = true;
17458    } else if (current === null) {
17459      // In a resume, we'll already have an instance we can reuse.
17460      shouldUpdate = resumeMountClassInstance(workInProgress, Component, nextProps, renderLanes);
17461    } else {
17462      shouldUpdate = updateClassInstance(current, workInProgress, Component, nextProps, renderLanes);
17463    }
17464
17465    var nextUnitOfWork = finishClassComponent(current, workInProgress, Component, shouldUpdate, hasContext, renderLanes);
17466
17467    {
17468      var inst = workInProgress.stateNode;
17469
17470      if (shouldUpdate && inst.props !== nextProps) {
17471        if (!didWarnAboutReassigningProps) {
17472          error('It looks like %s is reassigning its own `this.props` while rendering. ' + 'This is not supported and can lead to confusing bugs.', getComponentName(workInProgress.type) || 'a component');
17473        }
17474
17475        didWarnAboutReassigningProps = true;
17476      }
17477    }
17478
17479    return nextUnitOfWork;
17480  }
17481
17482  function finishClassComponent(current, workInProgress, Component, shouldUpdate, hasContext, renderLanes) {
17483    // Refs should update even if shouldComponentUpdate returns false
17484    markRef(current, workInProgress);
17485    var didCaptureError = (workInProgress.flags & DidCapture) !== NoFlags;
17486
17487    if (!shouldUpdate && !didCaptureError) {
17488      // Context providers should defer to sCU for rendering
17489      if (hasContext) {
17490        invalidateContextProvider(workInProgress, Component, false);
17491      }
17492
17493      return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
17494    }
17495
17496    var instance = workInProgress.stateNode; // Rerender
17497
17498    ReactCurrentOwner$1.current = workInProgress;
17499    var nextChildren;
17500
17501    if (didCaptureError && typeof Component.getDerivedStateFromError !== 'function') {
17502      // If we captured an error, but getDerivedStateFromError is not defined,
17503      // unmount all the children. componentDidCatch will schedule an update to
17504      // re-render a fallback. This is temporary until we migrate everyone to
17505      // the new API.
17506      // TODO: Warn in a future release.
17507      nextChildren = null;
17508
17509      {
17510        stopProfilerTimerIfRunning();
17511      }
17512    } else {
17513      {
17514        setIsRendering(true);
17515        nextChildren = instance.render();
17516
17517        if ( workInProgress.mode & StrictMode) {
17518          disableLogs();
17519
17520          try {
17521            instance.render();
17522          } finally {
17523            reenableLogs();
17524          }
17525        }
17526
17527        setIsRendering(false);
17528      }
17529    } // React DevTools reads this flag.
17530
17531
17532    workInProgress.flags |= PerformedWork;
17533
17534    if (current !== null && didCaptureError) {
17535      // If we're recovering from an error, reconcile without reusing any of
17536      // the existing children. Conceptually, the normal children and the children
17537      // that are shown on error are two different sets, so we shouldn't reuse
17538      // normal children even if their identities match.
17539      forceUnmountCurrentAndReconcile(current, workInProgress, nextChildren, renderLanes);
17540    } else {
17541      reconcileChildren(current, workInProgress, nextChildren, renderLanes);
17542    } // Memoize state using the values we just used to render.
17543    // TODO: Restructure so we never read values from the instance.
17544
17545
17546    workInProgress.memoizedState = instance.state; // The context might have changed so we need to recalculate it.
17547
17548    if (hasContext) {
17549      invalidateContextProvider(workInProgress, Component, true);
17550    }
17551
17552    return workInProgress.child;
17553  }
17554
17555  function pushHostRootContext(workInProgress) {
17556    var root = workInProgress.stateNode;
17557
17558    if (root.pendingContext) {
17559      pushTopLevelContextObject(workInProgress, root.pendingContext, root.pendingContext !== root.context);
17560    } else if (root.context) {
17561      // Should always be set
17562      pushTopLevelContextObject(workInProgress, root.context, false);
17563    }
17564
17565    pushHostContainer(workInProgress, root.containerInfo);
17566  }
17567
17568  function updateHostRoot(current, workInProgress, renderLanes) {
17569    pushHostRootContext(workInProgress);
17570    var updateQueue = workInProgress.updateQueue;
17571
17572    if (!(current !== null && updateQueue !== null)) {
17573      {
17574        throw Error( "If the root does not have an updateQueue, we should have already bailed out. This error is likely caused by a bug in React. Please file an issue." );
17575      }
17576    }
17577
17578    var nextProps = workInProgress.pendingProps;
17579    var prevState = workInProgress.memoizedState;
17580    var prevChildren = prevState !== null ? prevState.element : null;
17581    cloneUpdateQueue(current, workInProgress);
17582    processUpdateQueue(workInProgress, nextProps, null, renderLanes);
17583    var nextState = workInProgress.memoizedState; // Caution: React DevTools currently depends on this property
17584    // being called "element".
17585
17586    var nextChildren = nextState.element;
17587
17588    if (nextChildren === prevChildren) {
17589      resetHydrationState();
17590      return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
17591    }
17592
17593    var root = workInProgress.stateNode;
17594
17595    if (root.hydrate && enterHydrationState(workInProgress)) {
17596      // If we don't have any current children this might be the first pass.
17597      // We always try to hydrate. If this isn't a hydration pass there won't
17598      // be any children to hydrate which is effectively the same thing as
17599      // not hydrating.
17600      {
17601        var mutableSourceEagerHydrationData = root.mutableSourceEagerHydrationData;
17602
17603        if (mutableSourceEagerHydrationData != null) {
17604          for (var i = 0; i < mutableSourceEagerHydrationData.length; i += 2) {
17605            var mutableSource = mutableSourceEagerHydrationData[i];
17606            var version = mutableSourceEagerHydrationData[i + 1];
17607            setWorkInProgressVersion(mutableSource, version);
17608          }
17609        }
17610      }
17611
17612      var child = mountChildFibers(workInProgress, null, nextChildren, renderLanes);
17613      workInProgress.child = child;
17614      var node = child;
17615
17616      while (node) {
17617        // Mark each child as hydrating. This is a fast path to know whether this
17618        // tree is part of a hydrating tree. This is used to determine if a child
17619        // node has fully mounted yet, and for scheduling event replaying.
17620        // Conceptually this is similar to Placement in that a new subtree is
17621        // inserted into the React tree here. It just happens to not need DOM
17622        // mutations because it already exists.
17623        node.flags = node.flags & ~Placement | Hydrating;
17624        node = node.sibling;
17625      }
17626    } else {
17627      // Otherwise reset hydration state in case we aborted and resumed another
17628      // root.
17629      reconcileChildren(current, workInProgress, nextChildren, renderLanes);
17630      resetHydrationState();
17631    }
17632
17633    return workInProgress.child;
17634  }
17635
17636  function updateHostComponent(current, workInProgress, renderLanes) {
17637    pushHostContext(workInProgress);
17638
17639    if (current === null) {
17640      tryToClaimNextHydratableInstance(workInProgress);
17641    }
17642
17643    var type = workInProgress.type;
17644    var nextProps = workInProgress.pendingProps;
17645    var prevProps = current !== null ? current.memoizedProps : null;
17646    var nextChildren = nextProps.children;
17647    var isDirectTextChild = shouldSetTextContent(type, nextProps);
17648
17649    if (isDirectTextChild) {
17650      // We special case a direct text child of a host node. This is a common
17651      // case. We won't handle it as a reified child. We will instead handle
17652      // this in the host environment that also has access to this prop. That
17653      // avoids allocating another HostText fiber and traversing it.
17654      nextChildren = null;
17655    } else if (prevProps !== null && shouldSetTextContent(type, prevProps)) {
17656      // If we're switching from a direct text child to a normal child, or to
17657      // empty, we need to schedule the text content to be reset.
17658      workInProgress.flags |= ContentReset;
17659    }
17660
17661    markRef(current, workInProgress);
17662    reconcileChildren(current, workInProgress, nextChildren, renderLanes);
17663    return workInProgress.child;
17664  }
17665
17666  function updateHostText(current, workInProgress) {
17667    if (current === null) {
17668      tryToClaimNextHydratableInstance(workInProgress);
17669    } // Nothing to do here. This is terminal. We'll do the completion step
17670    // immediately after.
17671
17672
17673    return null;
17674  }
17675
17676  function mountLazyComponent(_current, workInProgress, elementType, updateLanes, renderLanes) {
17677    if (_current !== null) {
17678      // A lazy component only mounts if it suspended inside a non-
17679      // concurrent tree, in an inconsistent state. We want to treat it like
17680      // a new mount, even though an empty version of it already committed.
17681      // Disconnect the alternate pointers.
17682      _current.alternate = null;
17683      workInProgress.alternate = null; // Since this is conceptually a new fiber, schedule a Placement effect
17684
17685      workInProgress.flags |= Placement;
17686    }
17687
17688    var props = workInProgress.pendingProps;
17689    var lazyComponent = elementType;
17690    var payload = lazyComponent._payload;
17691    var init = lazyComponent._init;
17692    var Component = init(payload); // Store the unwrapped component in the type.
17693
17694    workInProgress.type = Component;
17695    var resolvedTag = workInProgress.tag = resolveLazyComponentTag(Component);
17696    var resolvedProps = resolveDefaultProps(Component, props);
17697    var child;
17698
17699    switch (resolvedTag) {
17700      case FunctionComponent:
17701        {
17702          {
17703            validateFunctionComponentInDev(workInProgress, Component);
17704            workInProgress.type = Component = resolveFunctionForHotReloading(Component);
17705          }
17706
17707          child = updateFunctionComponent(null, workInProgress, Component, resolvedProps, renderLanes);
17708          return child;
17709        }
17710
17711      case ClassComponent:
17712        {
17713          {
17714            workInProgress.type = Component = resolveClassForHotReloading(Component);
17715          }
17716
17717          child = updateClassComponent(null, workInProgress, Component, resolvedProps, renderLanes);
17718          return child;
17719        }
17720
17721      case ForwardRef:
17722        {
17723          {
17724            workInProgress.type = Component = resolveForwardRefForHotReloading(Component);
17725          }
17726
17727          child = updateForwardRef(null, workInProgress, Component, resolvedProps, renderLanes);
17728          return child;
17729        }
17730
17731      case MemoComponent:
17732        {
17733          {
17734            if (workInProgress.type !== workInProgress.elementType) {
17735              var outerPropTypes = Component.propTypes;
17736
17737              if (outerPropTypes) {
17738                checkPropTypes(outerPropTypes, resolvedProps, // Resolved for outer only
17739                'prop', getComponentName(Component));
17740              }
17741            }
17742          }
17743
17744          child = updateMemoComponent(null, workInProgress, Component, resolveDefaultProps(Component.type, resolvedProps), // The inner type can have defaults too
17745          updateLanes, renderLanes);
17746          return child;
17747        }
17748    }
17749
17750    var hint = '';
17751
17752    {
17753      if (Component !== null && typeof Component === 'object' && Component.$$typeof === REACT_LAZY_TYPE) {
17754        hint = ' Did you wrap a component in React.lazy() more than once?';
17755      }
17756    } // This message intentionally doesn't mention ForwardRef or MemoComponent
17757    // because the fact that it's a separate type of work is an
17758    // implementation detail.
17759
17760
17761    {
17762      {
17763        throw Error( "Element type is invalid. Received a promise that resolves to: " + Component + ". Lazy element type must resolve to a class or function." + hint );
17764      }
17765    }
17766  }
17767
17768  function mountIncompleteClassComponent(_current, workInProgress, Component, nextProps, renderLanes) {
17769    if (_current !== null) {
17770      // An incomplete component only mounts if it suspended inside a non-
17771      // concurrent tree, in an inconsistent state. We want to treat it like
17772      // a new mount, even though an empty version of it already committed.
17773      // Disconnect the alternate pointers.
17774      _current.alternate = null;
17775      workInProgress.alternate = null; // Since this is conceptually a new fiber, schedule a Placement effect
17776
17777      workInProgress.flags |= Placement;
17778    } // Promote the fiber to a class and try rendering again.
17779
17780
17781    workInProgress.tag = ClassComponent; // The rest of this function is a fork of `updateClassComponent`
17782    // Push context providers early to prevent context stack mismatches.
17783    // During mounting we don't know the child context yet as the instance doesn't exist.
17784    // We will invalidate the child context in finishClassComponent() right after rendering.
17785
17786    var hasContext;
17787
17788    if (isContextProvider(Component)) {
17789      hasContext = true;
17790      pushContextProvider(workInProgress);
17791    } else {
17792      hasContext = false;
17793    }
17794
17795    prepareToReadContext(workInProgress, renderLanes);
17796    constructClassInstance(workInProgress, Component, nextProps);
17797    mountClassInstance(workInProgress, Component, nextProps, renderLanes);
17798    return finishClassComponent(null, workInProgress, Component, true, hasContext, renderLanes);
17799  }
17800
17801  function mountIndeterminateComponent(_current, workInProgress, Component, renderLanes) {
17802    if (_current !== null) {
17803      // An indeterminate component only mounts if it suspended inside a non-
17804      // concurrent tree, in an inconsistent state. We want to treat it like
17805      // a new mount, even though an empty version of it already committed.
17806      // Disconnect the alternate pointers.
17807      _current.alternate = null;
17808      workInProgress.alternate = null; // Since this is conceptually a new fiber, schedule a Placement effect
17809
17810      workInProgress.flags |= Placement;
17811    }
17812
17813    var props = workInProgress.pendingProps;
17814    var context;
17815
17816    {
17817      var unmaskedContext = getUnmaskedContext(workInProgress, Component, false);
17818      context = getMaskedContext(workInProgress, unmaskedContext);
17819    }
17820
17821    prepareToReadContext(workInProgress, renderLanes);
17822    var value;
17823
17824    {
17825      if (Component.prototype && typeof Component.prototype.render === 'function') {
17826        var componentName = getComponentName(Component) || 'Unknown';
17827
17828        if (!didWarnAboutBadClass[componentName]) {
17829          error("The <%s /> component appears to have a render method, but doesn't extend React.Component. " + 'This is likely to cause errors. Change %s to extend React.Component instead.', componentName, componentName);
17830
17831          didWarnAboutBadClass[componentName] = true;
17832        }
17833      }
17834
17835      if (workInProgress.mode & StrictMode) {
17836        ReactStrictModeWarnings.recordLegacyContextWarning(workInProgress, null);
17837      }
17838
17839      setIsRendering(true);
17840      ReactCurrentOwner$1.current = workInProgress;
17841      value = renderWithHooks(null, workInProgress, Component, props, context, renderLanes);
17842      setIsRendering(false);
17843    } // React DevTools reads this flag.
17844
17845
17846    workInProgress.flags |= PerformedWork;
17847
17848    {
17849      // Support for module components is deprecated and is removed behind a flag.
17850      // Whether or not it would crash later, we want to show a good message in DEV first.
17851      if (typeof value === 'object' && value !== null && typeof value.render === 'function' && value.$$typeof === undefined) {
17852        var _componentName = getComponentName(Component) || 'Unknown';
17853
17854        if (!didWarnAboutModulePatternComponent[_componentName]) {
17855          error('The <%s /> component appears to be a function component that returns a class instance. ' + 'Change %s to a class that extends React.Component instead. ' + "If you can't use a class try assigning the prototype on the function as a workaround. " + "`%s.prototype = React.Component.prototype`. Don't use an arrow function since it " + 'cannot be called with `new` by React.', _componentName, _componentName, _componentName);
17856
17857          didWarnAboutModulePatternComponent[_componentName] = true;
17858        }
17859      }
17860    }
17861
17862    if ( // Run these checks in production only if the flag is off.
17863    // Eventually we'll delete this branch altogether.
17864     typeof value === 'object' && value !== null && typeof value.render === 'function' && value.$$typeof === undefined) {
17865      {
17866        var _componentName2 = getComponentName(Component) || 'Unknown';
17867
17868        if (!didWarnAboutModulePatternComponent[_componentName2]) {
17869          error('The <%s /> component appears to be a function component that returns a class instance. ' + 'Change %s to a class that extends React.Component instead. ' + "If you can't use a class try assigning the prototype on the function as a workaround. " + "`%s.prototype = React.Component.prototype`. Don't use an arrow function since it " + 'cannot be called with `new` by React.', _componentName2, _componentName2, _componentName2);
17870
17871          didWarnAboutModulePatternComponent[_componentName2] = true;
17872        }
17873      } // Proceed under the assumption that this is a class instance
17874
17875
17876      workInProgress.tag = ClassComponent; // Throw out any hooks that were used.
17877
17878      workInProgress.memoizedState = null;
17879      workInProgress.updateQueue = null; // Push context providers early to prevent context stack mismatches.
17880      // During mounting we don't know the child context yet as the instance doesn't exist.
17881      // We will invalidate the child context in finishClassComponent() right after rendering.
17882
17883      var hasContext = false;
17884
17885      if (isContextProvider(Component)) {
17886        hasContext = true;
17887        pushContextProvider(workInProgress);
17888      } else {
17889        hasContext = false;
17890      }
17891
17892      workInProgress.memoizedState = value.state !== null && value.state !== undefined ? value.state : null;
17893      initializeUpdateQueue(workInProgress);
17894      var getDerivedStateFromProps = Component.getDerivedStateFromProps;
17895
17896      if (typeof getDerivedStateFromProps === 'function') {
17897        applyDerivedStateFromProps(workInProgress, Component, getDerivedStateFromProps, props);
17898      }
17899
17900      adoptClassInstance(workInProgress, value);
17901      mountClassInstance(workInProgress, Component, props, renderLanes);
17902      return finishClassComponent(null, workInProgress, Component, true, hasContext, renderLanes);
17903    } else {
17904      // Proceed under the assumption that this is a function component
17905      workInProgress.tag = FunctionComponent;
17906
17907      {
17908
17909        if ( workInProgress.mode & StrictMode) {
17910          disableLogs();
17911
17912          try {
17913            value = renderWithHooks(null, workInProgress, Component, props, context, renderLanes);
17914          } finally {
17915            reenableLogs();
17916          }
17917        }
17918      }
17919
17920      reconcileChildren(null, workInProgress, value, renderLanes);
17921
17922      {
17923        validateFunctionComponentInDev(workInProgress, Component);
17924      }
17925
17926      return workInProgress.child;
17927    }
17928  }
17929
17930  function validateFunctionComponentInDev(workInProgress, Component) {
17931    {
17932      if (Component) {
17933        if (Component.childContextTypes) {
17934          error('%s(...): childContextTypes cannot be defined on a function component.', Component.displayName || Component.name || 'Component');
17935        }
17936      }
17937
17938      if (workInProgress.ref !== null) {
17939        var info = '';
17940        var ownerName = getCurrentFiberOwnerNameInDevOrNull();
17941
17942        if (ownerName) {
17943          info += '\n\nCheck the render method of `' + ownerName + '`.';
17944        }
17945
17946        var warningKey = ownerName || workInProgress._debugID || '';
17947        var debugSource = workInProgress._debugSource;
17948
17949        if (debugSource) {
17950          warningKey = debugSource.fileName + ':' + debugSource.lineNumber;
17951        }
17952
17953        if (!didWarnAboutFunctionRefs[warningKey]) {
17954          didWarnAboutFunctionRefs[warningKey] = true;
17955
17956          error('Function components cannot be given refs. ' + 'Attempts to access this ref will fail. ' + 'Did you mean to use React.forwardRef()?%s', info);
17957        }
17958      }
17959
17960      if (typeof Component.getDerivedStateFromProps === 'function') {
17961        var _componentName3 = getComponentName(Component) || 'Unknown';
17962
17963        if (!didWarnAboutGetDerivedStateOnFunctionComponent[_componentName3]) {
17964          error('%s: Function components do not support getDerivedStateFromProps.', _componentName3);
17965
17966          didWarnAboutGetDerivedStateOnFunctionComponent[_componentName3] = true;
17967        }
17968      }
17969
17970      if (typeof Component.contextType === 'object' && Component.contextType !== null) {
17971        var _componentName4 = getComponentName(Component) || 'Unknown';
17972
17973        if (!didWarnAboutContextTypeOnFunctionComponent[_componentName4]) {
17974          error('%s: Function components do not support contextType.', _componentName4);
17975
17976          didWarnAboutContextTypeOnFunctionComponent[_componentName4] = true;
17977        }
17978      }
17979    }
17980  }
17981
17982  var SUSPENDED_MARKER = {
17983    dehydrated: null,
17984    retryLane: NoLane
17985  };
17986
17987  function mountSuspenseOffscreenState(renderLanes) {
17988    return {
17989      baseLanes: renderLanes
17990    };
17991  }
17992
17993  function updateSuspenseOffscreenState(prevOffscreenState, renderLanes) {
17994    return {
17995      baseLanes: mergeLanes(prevOffscreenState.baseLanes, renderLanes)
17996    };
17997  } // TODO: Probably should inline this back
17998
17999
18000  function shouldRemainOnFallback(suspenseContext, current, workInProgress, renderLanes) {
18001    // If we're already showing a fallback, there are cases where we need to
18002    // remain on that fallback regardless of whether the content has resolved.
18003    // For example, SuspenseList coordinates when nested content appears.
18004    if (current !== null) {
18005      var suspenseState = current.memoizedState;
18006
18007      if (suspenseState === null) {
18008        // Currently showing content. Don't hide it, even if ForceSuspenseFallack
18009        // is true. More precise name might be "ForceRemainSuspenseFallback".
18010        // Note: This is a factoring smell. Can't remain on a fallback if there's
18011        // no fallback to remain on.
18012        return false;
18013      }
18014    } // Not currently showing content. Consult the Suspense context.
18015
18016
18017    return hasSuspenseContext(suspenseContext, ForceSuspenseFallback);
18018  }
18019
18020  function getRemainingWorkInPrimaryTree(current, renderLanes) {
18021    // TODO: Should not remove render lanes that were pinged during this render
18022    return removeLanes(current.childLanes, renderLanes);
18023  }
18024
18025  function updateSuspenseComponent(current, workInProgress, renderLanes) {
18026    var nextProps = workInProgress.pendingProps; // This is used by DevTools to force a boundary to suspend.
18027
18028    {
18029      if (shouldSuspend(workInProgress)) {
18030        workInProgress.flags |= DidCapture;
18031      }
18032    }
18033
18034    var suspenseContext = suspenseStackCursor.current;
18035    var showFallback = false;
18036    var didSuspend = (workInProgress.flags & DidCapture) !== NoFlags;
18037
18038    if (didSuspend || shouldRemainOnFallback(suspenseContext, current)) {
18039      // Something in this boundary's subtree already suspended. Switch to
18040      // rendering the fallback children.
18041      showFallback = true;
18042      workInProgress.flags &= ~DidCapture;
18043    } else {
18044      // Attempting the main content
18045      if (current === null || current.memoizedState !== null) {
18046        // This is a new mount or this boundary is already showing a fallback state.
18047        // Mark this subtree context as having at least one invisible parent that could
18048        // handle the fallback state.
18049        // Boundaries without fallbacks or should be avoided are not considered since
18050        // they cannot handle preferred fallback states.
18051        if (nextProps.fallback !== undefined && nextProps.unstable_avoidThisFallback !== true) {
18052          suspenseContext = addSubtreeSuspenseContext(suspenseContext, InvisibleParentSuspenseContext);
18053        }
18054      }
18055    }
18056
18057    suspenseContext = setDefaultShallowSuspenseContext(suspenseContext);
18058    pushSuspenseContext(workInProgress, suspenseContext); // OK, the next part is confusing. We're about to reconcile the Suspense
18059    // boundary's children. This involves some custom reconcilation logic. Two
18060    // main reasons this is so complicated.
18061    //
18062    // First, Legacy Mode has different semantics for backwards compatibility. The
18063    // primary tree will commit in an inconsistent state, so when we do the
18064    // second pass to render the fallback, we do some exceedingly, uh, clever
18065    // hacks to make that not totally break. Like transferring effects and
18066    // deletions from hidden tree. In Concurrent Mode, it's much simpler,
18067    // because we bailout on the primary tree completely and leave it in its old
18068    // state, no effects. Same as what we do for Offscreen (except that
18069    // Offscreen doesn't have the first render pass).
18070    //
18071    // Second is hydration. During hydration, the Suspense fiber has a slightly
18072    // different layout, where the child points to a dehydrated fragment, which
18073    // contains the DOM rendered by the server.
18074    //
18075    // Third, even if you set all that aside, Suspense is like error boundaries in
18076    // that we first we try to render one tree, and if that fails, we render again
18077    // and switch to a different tree. Like a try/catch block. So we have to track
18078    // which branch we're currently rendering. Ideally we would model this using
18079    // a stack.
18080
18081    if (current === null) {
18082      // Initial mount
18083      // If we're currently hydrating, try to hydrate this boundary.
18084      // But only if this has a fallback.
18085      if (nextProps.fallback !== undefined) {
18086        tryToClaimNextHydratableInstance(workInProgress); // This could've been a dehydrated suspense component.
18087      }
18088
18089      var nextPrimaryChildren = nextProps.children;
18090      var nextFallbackChildren = nextProps.fallback;
18091
18092      if (showFallback) {
18093        var fallbackFragment = mountSuspenseFallbackChildren(workInProgress, nextPrimaryChildren, nextFallbackChildren, renderLanes);
18094        var primaryChildFragment = workInProgress.child;
18095        primaryChildFragment.memoizedState = mountSuspenseOffscreenState(renderLanes);
18096        workInProgress.memoizedState = SUSPENDED_MARKER;
18097        return fallbackFragment;
18098      } else if (typeof nextProps.unstable_expectedLoadTime === 'number') {
18099        // This is a CPU-bound tree. Skip this tree and show a placeholder to
18100        // unblock the surrounding content. Then immediately retry after the
18101        // initial commit.
18102        var _fallbackFragment = mountSuspenseFallbackChildren(workInProgress, nextPrimaryChildren, nextFallbackChildren, renderLanes);
18103
18104        var _primaryChildFragment = workInProgress.child;
18105        _primaryChildFragment.memoizedState = mountSuspenseOffscreenState(renderLanes);
18106        workInProgress.memoizedState = SUSPENDED_MARKER; // Since nothing actually suspended, there will nothing to ping this to
18107        // get it started back up to attempt the next item. While in terms of
18108        // priority this work has the same priority as this current render, it's
18109        // not part of the same transition once the transition has committed. If
18110        // it's sync, we still want to yield so that it can be painted.
18111        // Conceptually, this is really the same as pinging. We can use any
18112        // RetryLane even if it's the one currently rendering since we're leaving
18113        // it behind on this node.
18114
18115        workInProgress.lanes = SomeRetryLane;
18116
18117        {
18118          markSpawnedWork(SomeRetryLane);
18119        }
18120
18121        return _fallbackFragment;
18122      } else {
18123        return mountSuspensePrimaryChildren(workInProgress, nextPrimaryChildren, renderLanes);
18124      }
18125    } else {
18126      // This is an update.
18127      // If the current fiber has a SuspenseState, that means it's already showing
18128      // a fallback.
18129      var prevState = current.memoizedState;
18130
18131      if (prevState !== null) {
18132
18133        if (showFallback) {
18134          var _nextFallbackChildren2 = nextProps.fallback;
18135          var _nextPrimaryChildren2 = nextProps.children;
18136
18137          var _fallbackChildFragment = updateSuspenseFallbackChildren(current, workInProgress, _nextPrimaryChildren2, _nextFallbackChildren2, renderLanes);
18138
18139          var _primaryChildFragment3 = workInProgress.child;
18140          var prevOffscreenState = current.child.memoizedState;
18141          _primaryChildFragment3.memoizedState = prevOffscreenState === null ? mountSuspenseOffscreenState(renderLanes) : updateSuspenseOffscreenState(prevOffscreenState, renderLanes);
18142          _primaryChildFragment3.childLanes = getRemainingWorkInPrimaryTree(current, renderLanes);
18143          workInProgress.memoizedState = SUSPENDED_MARKER;
18144          return _fallbackChildFragment;
18145        } else {
18146          var _nextPrimaryChildren3 = nextProps.children;
18147
18148          var _primaryChildFragment4 = updateSuspensePrimaryChildren(current, workInProgress, _nextPrimaryChildren3, renderLanes);
18149
18150          workInProgress.memoizedState = null;
18151          return _primaryChildFragment4;
18152        }
18153      } else {
18154        // The current tree is not already showing a fallback.
18155        if (showFallback) {
18156          // Timed out.
18157          var _nextFallbackChildren3 = nextProps.fallback;
18158          var _nextPrimaryChildren4 = nextProps.children;
18159
18160          var _fallbackChildFragment2 = updateSuspenseFallbackChildren(current, workInProgress, _nextPrimaryChildren4, _nextFallbackChildren3, renderLanes);
18161
18162          var _primaryChildFragment5 = workInProgress.child;
18163          var _prevOffscreenState = current.child.memoizedState;
18164          _primaryChildFragment5.memoizedState = _prevOffscreenState === null ? mountSuspenseOffscreenState(renderLanes) : updateSuspenseOffscreenState(_prevOffscreenState, renderLanes);
18165          _primaryChildFragment5.childLanes = getRemainingWorkInPrimaryTree(current, renderLanes); // Skip the primary children, and continue working on the
18166          // fallback children.
18167
18168          workInProgress.memoizedState = SUSPENDED_MARKER;
18169          return _fallbackChildFragment2;
18170        } else {
18171          // Still haven't timed out. Continue rendering the children, like we
18172          // normally do.
18173          var _nextPrimaryChildren5 = nextProps.children;
18174
18175          var _primaryChildFragment6 = updateSuspensePrimaryChildren(current, workInProgress, _nextPrimaryChildren5, renderLanes);
18176
18177          workInProgress.memoizedState = null;
18178          return _primaryChildFragment6;
18179        }
18180      }
18181    }
18182  }
18183
18184  function mountSuspensePrimaryChildren(workInProgress, primaryChildren, renderLanes) {
18185    var mode = workInProgress.mode;
18186    var primaryChildProps = {
18187      mode: 'visible',
18188      children: primaryChildren
18189    };
18190    var primaryChildFragment = createFiberFromOffscreen(primaryChildProps, mode, renderLanes, null);
vendor: 5,347 bytes, lines 18191-18304
18191    primaryChildFragment.return = workInProgress;
18192    workInProgress.child = primaryChildFragment;
18193    return primaryChildFragment;
18194  }
18195
18196  function mountSuspenseFallbackChildren(workInProgress, primaryChildren, fallbackChildren, renderLanes) {
18197    var mode = workInProgress.mode;
18198    var progressedPrimaryFragment = workInProgress.child;
18199    var primaryChildProps = {
18200      mode: 'hidden',
18201      children: primaryChildren
18202    };
18203    var primaryChildFragment;
18204    var fallbackChildFragment;
18205
18206    if ((mode & BlockingMode) === NoMode && progressedPrimaryFragment !== null) {
18207      // In legacy mode, we commit the primary tree as if it successfully
18208      // completed, even though it's in an inconsistent state.
18209      primaryChildFragment = progressedPrimaryFragment;
18210      primaryChildFragment.childLanes = NoLanes;
18211      primaryChildFragment.pendingProps = primaryChildProps;
18212
18213      if ( workInProgress.mode & ProfileMode) {
18214        // Reset the durations from the first pass so they aren't included in the
18215        // final amounts. This seems counterintuitive, since we're intentionally
18216        // not measuring part of the render phase, but this makes it match what we
18217        // do in Concurrent Mode.
18218        primaryChildFragment.actualDuration = 0;
18219        primaryChildFragment.actualStartTime = -1;
18220        primaryChildFragment.selfBaseDuration = 0;
18221        primaryChildFragment.treeBaseDuration = 0;
18222      }
18223
18224      fallbackChildFragment = createFiberFromFragment(fallbackChildren, mode, renderLanes, null);
18225    } else {
18226      primaryChildFragment = createFiberFromOffscreen(primaryChildProps, mode, NoLanes, null);
18227      fallbackChildFragment = createFiberFromFragment(fallbackChildren, mode, renderLanes, null);
18228    }
18229
18230    primaryChildFragment.return = workInProgress;
18231    fallbackChildFragment.return = workInProgress;
18232    primaryChildFragment.sibling = fallbackChildFragment;
18233    workInProgress.child = primaryChildFragment;
18234    return fallbackChildFragment;
18235  }
18236
18237  function createWorkInProgressOffscreenFiber(current, offscreenProps) {
18238    // The props argument to `createWorkInProgress` is `any` typed, so we use this
18239    // wrapper function to constrain it.
18240    return createWorkInProgress(current, offscreenProps);
18241  }
18242
18243  function updateSuspensePrimaryChildren(current, workInProgress, primaryChildren, renderLanes) {
18244    var currentPrimaryChildFragment = current.child;
18245    var currentFallbackChildFragment = currentPrimaryChildFragment.sibling;
18246    var primaryChildFragment = createWorkInProgressOffscreenFiber(currentPrimaryChildFragment, {
18247      mode: 'visible',
18248      children: primaryChildren
18249    });
18250
18251    if ((workInProgress.mode & BlockingMode) === NoMode) {
18252      primaryChildFragment.lanes = renderLanes;
18253    }
18254
18255    primaryChildFragment.return = workInProgress;
18256    primaryChildFragment.sibling = null;
18257
18258    if (currentFallbackChildFragment !== null) {
18259      // Delete the fallback child fragment
18260      currentFallbackChildFragment.nextEffect = null;
18261      currentFallbackChildFragment.flags = Deletion;
18262      workInProgress.firstEffect = workInProgress.lastEffect = currentFallbackChildFragment;
18263    }
18264
18265    workInProgress.child = primaryChildFragment;
18266    return primaryChildFragment;
18267  }
18268
18269  function updateSuspenseFallbackChildren(current, workInProgress, primaryChildren, fallbackChildren, renderLanes) {
18270    var mode = workInProgress.mode;
18271    var currentPrimaryChildFragment = current.child;
18272    var currentFallbackChildFragment = currentPrimaryChildFragment.sibling;
18273    var primaryChildProps = {
18274      mode: 'hidden',
18275      children: primaryChildren
18276    };
18277    var primaryChildFragment;
18278
18279    if ( // In legacy mode, we commit the primary tree as if it successfully
18280    // completed, even though it's in an inconsistent state.
18281    (mode & BlockingMode) === NoMode && // Make sure we're on the second pass, i.e. the primary child fragment was
18282    // already cloned. In legacy mode, the only case where this isn't true is
18283    // when DevTools forces us to display a fallback; we skip the first render
18284    // pass entirely and go straight to rendering the fallback. (In Concurrent
18285    // Mode, SuspenseList can also trigger this scenario, but this is a legacy-
18286    // only codepath.)
18287    workInProgress.child !== currentPrimaryChildFragment) {
18288      var progressedPrimaryFragment = workInProgress.child;
18289      primaryChildFragment = progressedPrimaryFragment;
18290      primaryChildFragment.childLanes = NoLanes;
18291      primaryChildFragment.pendingProps = primaryChildProps;
18292
18293      if ( workInProgress.mode & ProfileMode) {
18294        // Reset the durations from the first pass so they aren't included in the
18295        // final amounts. This seems counterintuitive, since we're intentionally
18296        // not measuring part of the render phase, but this makes it match what we
18297        // do in Concurrent Mode.
18298        primaryChildFragment.actualDuration = 0;
18299        primaryChildFragment.actualStartTime = -1;
18300        primaryChildFragment.selfBaseDuration = currentPrimaryChildFragment.selfBaseDuration;
18301        primaryChildFragment.treeBaseDuration = currentPrimaryChildFragment.treeBaseDuration;
18302      } // The fallback fiber was added as a deletion effect during the first pass.
18303      // However, since we're going to remain on the fallback, we no longer want
18304      // to delete it. So we need to remove it from the list. Deleti
vendor: 13,438 bytes, lines 18304-18657
18304ons are stored
18305      // on the same list as effects. We want to keep the effects from the primary
18306      // tree. So we copy the primary child fragment's effect list, which does not
18307      // include the fallback deletion effect.
18308
18309
18310      var progressedLastEffect = primaryChildFragment.lastEffect;
18311
18312      if (progressedLastEffect !== null) {
18313        workInProgress.firstEffect = primaryChildFragment.firstEffect;
18314        workInProgress.lastEffect = progressedLastEffect;
18315        progressedLastEffect.nextEffect = null;
18316      } else {
18317        // TODO: Reset this somewhere else? Lol legacy mode is so weird.
18318        workInProgress.firstEffect = workInProgress.lastEffect = null;
18319      }
18320    } else {
18321      primaryChildFragment = createWorkInProgressOffscreenFiber(currentPrimaryChildFragment, primaryChildProps);
18322    }
18323
18324    var fallbackChildFragment;
18325
18326    if (currentFallbackChildFragment !== null) {
18327      fallbackChildFragment = createWorkInProgress(currentFallbackChildFragment, fallbackChildren);
18328    } else {
18329      fallbackChildFragment = createFiberFromFragment(fallbackChildren, mode, renderLanes, null); // Needs a placement effect because the parent (the Suspense boundary) already
18330      // mounted but this is a new fiber.
18331
18332      fallbackChildFragment.flags |= Placement;
18333    }
18334
18335    fallbackChildFragment.return = workInProgress;
18336    primaryChildFragment.return = workInProgress;
18337    primaryChildFragment.sibling = fallbackChildFragment;
18338    workInProgress.child = primaryChildFragment;
18339    return fallbackChildFragment;
18340  }
18341
18342  function scheduleWorkOnFiber(fiber, renderLanes) {
18343    fiber.lanes = mergeLanes(fiber.lanes, renderLanes);
18344    var alternate = fiber.alternate;
18345
18346    if (alternate !== null) {
18347      alternate.lanes = mergeLanes(alternate.lanes, renderLanes);
18348    }
18349
18350    scheduleWorkOnParentPath(fiber.return, renderLanes);
18351  }
18352
18353  function propagateSuspenseContextChange(workInProgress, firstChild, renderLanes) {
18354    // Mark any Suspense boundaries with fallbacks as having work to do.
18355    // If they were previously forced into fallbacks, they may now be able
18356    // to unblock.
18357    var node = firstChild;
18358
18359    while (node !== null) {
18360      if (node.tag === SuspenseComponent) {
18361        var state = node.memoizedState;
18362
18363        if (state !== null) {
18364          scheduleWorkOnFiber(node, renderLanes);
18365        }
18366      } else if (node.tag === SuspenseListComponent) {
18367        // If the tail is hidden there might not be an Suspense boundaries
18368        // to schedule work on. In this case we have to schedule it on the
18369        // list itself.
18370        // We don't have to traverse to the children of the list since
18371        // the list will propagate the change when it rerenders.
18372        scheduleWorkOnFiber(node, renderLanes);
18373      } else if (node.child !== null) {
18374        node.child.return = node;
18375        node = node.child;
18376        continue;
18377      }
18378
18379      if (node === workInProgress) {
18380        return;
18381      }
18382
18383      while (node.sibling === null) {
18384        if (node.return === null || node.return === workInProgress) {
18385          return;
18386        }
18387
18388        node = node.return;
18389      }
18390
18391      node.sibling.return = node.return;
18392      node = node.sibling;
18393    }
18394  }
18395
18396  function findLastContentRow(firstChild) {
18397    // This is going to find the last row among these children that is already
18398    // showing content on the screen, as opposed to being in fallback state or
18399    // new. If a row has multiple Suspense boundaries, any of them being in the
18400    // fallback state, counts as the whole row being in a fallback state.
18401    // Note that the "rows" will be workInProgress, but any nested children
18402    // will still be current since we haven't rendered them yet. The mounted
18403    // order may not be the same as the new order. We use the new order.
18404    var row = firstChild;
18405    var lastContentRow = null;
18406
18407    while (row !== null) {
18408      var currentRow = row.alternate; // New rows can't be content rows.
18409
18410      if (currentRow !== null && findFirstSuspended(currentRow) === null) {
18411        lastContentRow = row;
18412      }
18413
18414      row = row.sibling;
18415    }
18416
18417    return lastContentRow;
18418  }
18419
18420  function validateRevealOrder(revealOrder) {
18421    {
18422      if (revealOrder !== undefined && revealOrder !== 'forwards' && revealOrder !== 'backwards' && revealOrder !== 'together' && !didWarnAboutRevealOrder[revealOrder]) {
18423        didWarnAboutRevealOrder[revealOrder] = true;
18424
18425        if (typeof revealOrder === 'string') {
18426          switch (revealOrder.toLowerCase()) {
18427            case 'together':
18428            case 'forwards':
18429            case 'backwards':
18430              {
18431                error('"%s" is not a valid value for revealOrder on <SuspenseList />. ' + 'Use lowercase "%s" instead.', revealOrder, revealOrder.toLowerCase());
18432
18433                break;
18434              }
18435
18436            case 'forward':
18437            case 'backward':
18438              {
18439                error('"%s" is not a valid value for revealOrder on <SuspenseList />. ' + 'React uses the -s suffix in the spelling. Use "%ss" instead.', revealOrder, revealOrder.toLowerCase());
18440
18441                break;
18442              }
18443
18444            default:
18445              error('"%s" is not a supported revealOrder on <SuspenseList />. ' + 'Did you mean "together", "forwards" or "backwards"?', revealOrder);
18446
18447              break;
18448          }
18449        } else {
18450          error('%s is not a supported value for revealOrder on <SuspenseList />. ' + 'Did you mean "together", "forwards" or "backwards"?', revealOrder);
18451        }
18452      }
18453    }
18454  }
18455
18456  function validateTailOptions(tailMode, revealOrder) {
18457    {
18458      if (tailMode !== undefined && !didWarnAboutTailOptions[tailMode]) {
18459        if (tailMode !== 'collapsed' && tailMode !== 'hidden') {
18460          didWarnAboutTailOptions[tailMode] = true;
18461
18462          error('"%s" is not a supported value for tail on <SuspenseList />. ' + 'Did you mean "collapsed" or "hidden"?', tailMode);
18463        } else if (revealOrder !== 'forwards' && revealOrder !== 'backwards') {
18464          didWarnAboutTailOptions[tailMode] = true;
18465
18466          error('<SuspenseList tail="%s" /> is only valid if revealOrder is ' + '"forwards" or "backwards". ' + 'Did you mean to specify revealOrder="forwards"?', tailMode);
18467        }
18468      }
18469    }
18470  }
18471
18472  function validateSuspenseListNestedChild(childSlot, index) {
18473    {
18474      var isArray = Array.isArray(childSlot);
18475      var isIterable = !isArray && typeof getIteratorFn(childSlot) === 'function';
18476
18477      if (isArray || isIterable) {
18478        var type = isArray ? 'array' : 'iterable';
18479
18480        error('A nested %s was passed to row #%s in <SuspenseList />. Wrap it in ' + 'an additional SuspenseList to configure its revealOrder: ' + '<SuspenseList revealOrder=...> ... ' + '<SuspenseList revealOrder=...>{%s}</SuspenseList> ... ' + '</SuspenseList>', type, index, type);
18481
18482        return false;
18483      }
18484    }
18485
18486    return true;
18487  }
18488
18489  function validateSuspenseListChildren(children, revealOrder) {
18490    {
18491      if ((revealOrder === 'forwards' || revealOrder === 'backwards') && children !== undefined && children !== null && children !== false) {
18492        if (Array.isArray(children)) {
18493          for (var i = 0; i < children.length; i++) {
18494            if (!validateSuspenseListNestedChild(children[i], i)) {
18495              return;
18496            }
18497          }
18498        } else {
18499          var iteratorFn = getIteratorFn(children);
18500
18501          if (typeof iteratorFn === 'function') {
18502            var childrenIterator = iteratorFn.call(children);
18503
18504            if (childrenIterator) {
18505              var step = childrenIterator.next();
18506              var _i = 0;
18507
18508              for (; !step.done; step = childrenIterator.next()) {
18509                if (!validateSuspenseListNestedChild(step.value, _i)) {
18510                  return;
18511                }
18512
18513                _i++;
18514              }
18515            }
18516          } else {
18517            error('A single row was passed to a <SuspenseList revealOrder="%s" />. ' + 'This is not useful since it needs multiple rows. ' + 'Did you mean to pass multiple children or an array?', revealOrder);
18518          }
18519        }
18520      }
18521    }
18522  }
18523
18524  function initSuspenseListRenderState(workInProgress, isBackwards, tail, lastContentRow, tailMode, lastEffectBeforeRendering) {
18525    var renderState = workInProgress.memoizedState;
18526
18527    if (renderState === null) {
18528      workInProgress.memoizedState = {
18529        isBackwards: isBackwards,
18530        rendering: null,
18531        renderingStartTime: 0,
18532        last: lastContentRow,
18533        tail: tail,
18534        tailMode: tailMode,
18535        lastEffect: lastEffectBeforeRendering
18536      };
18537    } else {
18538      // We can reuse the existing object from previous renders.
18539      renderState.isBackwards = isBackwards;
18540      renderState.rendering = null;
18541      renderState.renderingStartTime = 0;
18542      renderState.last = lastContentRow;
18543      renderState.tail = tail;
18544      renderState.tailMode = tailMode;
18545      renderState.lastEffect = lastEffectBeforeRendering;
18546    }
18547  } // This can end up rendering this component multiple passes.
18548  // The first pass splits the children fibers into two sets. A head and tail.
18549  // We first render the head. If anything is in fallback state, we do another
18550  // pass through beginWork to rerender all children (including the tail) with
18551  // the force suspend context. If the first render didn't have anything in
18552  // in fallback state. Then we render each row in the tail one-by-one.
18553  // That happens in the completeWork phase without going back to beginWork.
18554
18555
18556  function updateSuspenseListComponent(current, workInProgress, renderLanes) {
18557    var nextProps = workInProgress.pendingProps;
18558    var revealOrder = nextProps.revealOrder;
18559    var tailMode = nextProps.tail;
18560    var newChildren = nextProps.children;
18561    validateRevealOrder(revealOrder);
18562    validateTailOptions(tailMode, revealOrder);
18563    validateSuspenseListChildren(newChildren, revealOrder);
18564    reconcileChildren(current, workInProgress, newChildren, renderLanes);
18565    var suspenseContext = suspenseStackCursor.current;
18566    var shouldForceFallback = hasSuspenseContext(suspenseContext, ForceSuspenseFallback);
18567
18568    if (shouldForceFallback) {
18569      suspenseContext = setShallowSuspenseContext(suspenseContext, ForceSuspenseFallback);
18570      workInProgress.flags |= DidCapture;
18571    } else {
18572      var didSuspendBefore = current !== null && (current.flags & DidCapture) !== NoFlags;
18573
18574      if (didSuspendBefore) {
18575        // If we previously forced a fallback, we need to schedule work
18576        // on any nested boundaries to let them know to try to render
18577        // again. This is the same as context updating.
18578        propagateSuspenseContextChange(workInProgress, workInProgress.child, renderLanes);
18579      }
18580
18581      suspenseContext = setDefaultShallowSuspenseContext(suspenseContext);
18582    }
18583
18584    pushSuspenseContext(workInProgress, suspenseContext);
18585
18586    if ((workInProgress.mode & BlockingMode) === NoMode) {
18587      // In legacy mode, SuspenseList doesn't work so we just
18588      // use make it a noop by treating it as the default revealOrder.
18589      workInProgress.memoizedState = null;
18590    } else {
18591      switch (revealOrder) {
18592        case 'forwards':
18593          {
18594            var lastContentRow = findLastContentRow(workInProgress.child);
18595            var tail;
18596
18597            if (lastContentRow === null) {
18598              // The whole list is part of the tail.
18599              // TODO: We could fast path by just rendering the tail now.
18600              tail = workInProgress.child;
18601              workInProgress.child = null;
18602            } else {
18603              // Disconnect the tail rows after the content row.
18604              // We're going to render them separately later.
18605              tail = lastContentRow.sibling;
18606              lastContentRow.sibling = null;
18607            }
18608
18609            initSuspenseListRenderState(workInProgress, false, // isBackwards
18610            tail, lastContentRow, tailMode, workInProgress.lastEffect);
18611            break;
18612          }
18613
18614        case 'backwards':
18615          {
18616            // We're going to find the first row that has existing content.
18617            // At the same time we're going to reverse the list of everything
18618            // we pass in the meantime. That's going to be our tail in reverse
18619            // order.
18620            var _tail = null;
18621            var row = workInProgress.child;
18622            workInProgress.child = null;
18623
18624            while (row !== null) {
18625              var currentRow = row.alternate; // New rows can't be content rows.
18626
18627              if (currentRow !== null && findFirstSuspended(currentRow) === null) {
18628                // This is the beginning of the main content.
18629                workInProgress.child = row;
18630                break;
18631              }
18632
18633              var nextRow = row.sibling;
18634              row.sibling = _tail;
18635              _tail = row;
18636              row = nextRow;
18637            } // TODO: If workInProgress.child is null, we can continue on the tail immediately.
18638
18639
18640            initSuspenseListRenderState(workInProgress, true, // isBackwards
18641            _tail, null, // last
18642            tailMode, workInProgress.lastEffect);
18643            break;
18644          }
18645
18646        case 'together':
18647          {
18648            initSuspenseListRenderState(workInProgress, false, // isBackwards
18649            null, // tail
18650            null, // last
18651            undefined, workInProgress.lastEffect);
18652            break;
18653          }
18654
18655        default:
18656          {
18657            // The default reveal order is the same as not having
18658            // a boundary.
18659            workInProgress.memoizedState = null;
18660          }
18661      }
18662    }
18663
18664    return workInProgress.child;
18665  }
18666
18667  function updatePortalComponent(current, workInProgress, renderLanes) {
18668    pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);
18669    var nextChildren = workInProgress.pendingProps;
18670
18671    if (current === null) {
18672      // Portals are special because we don't append the children during mount
18673      // but at commit. Therefore we need to track insertions which the normal
18674      // flow doesn't do during mount. This doesn't happen at the root because
18675      // the root always starts with a "current" with a null child.
18676      // TODO: Consider unifying this with how the root works.
18677      workInProgress.child = reconcileChildFibers(workInProgress, null, nextChildren, renderLanes);
18678    } else {
18679      reconcileChildren(current, workInProgress, nextChildren, renderLanes);
18680    }
18681
18682    return workInProgress.child;
18683  }
18684
18685  var hasWarnedAboutUsingNoValuePropOnContextProvider = false;
vendor: 4,119 bytes, lines 18686-18792
18686
18687  function updateContextProvider(current, workInProgress, renderLanes) {
18688    var providerType = workInProgress.type;
18689    var context = providerType._context;
18690    var newProps = workInProgress.pendingProps;
18691    var oldProps = workInProgress.memoizedProps;
18692    var newValue = newProps.value;
18693
18694    {
18695      if (!('value' in newProps)) {
18696        if (!hasWarnedAboutUsingNoValuePropOnContextProvider) {
18697          hasWarnedAboutUsingNoValuePropOnContextProvider = true;
18698
18699          error('The `value` prop is required for the `<Context.Provider>`. Did you misspell it or forget to pass it?');
18700        }
18701      }
18702
18703      var providerPropTypes = workInProgress.type.propTypes;
18704
18705      if (providerPropTypes) {
18706        checkPropTypes(providerPropTypes, newProps, 'prop', 'Context.Provider');
18707      }
18708    }
18709
18710    pushProvider(workInProgress, newValue);
18711
18712    if (oldProps !== null) {
18713      var oldValue = oldProps.value;
18714      var changedBits = calculateChangedBits(context, newValue, oldValue);
18715
18716      if (changedBits === 0) {
18717        // No change. Bailout early if children are the same.
18718        if (oldProps.children === newProps.children && !hasContextChanged()) {
18719          return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
18720        }
18721      } else {
18722        // The context value changed. Search for matching consumers and schedule
18723        // them to update.
18724        propagateContextChange(workInProgress, context, changedBits, renderLanes);
18725      }
18726    }
18727
18728    var newChildren = newProps.children;
18729    reconcileChildren(current, workInProgress, newChildren, renderLanes);
18730    return workInProgress.child;
18731  }
18732
18733  var hasWarnedAboutUsingContextAsConsumer = false;
18734
18735  function updateContextConsumer(current, workInProgress, renderLanes) {
18736    var context = workInProgress.type; // The logic below for Context differs depending on PROD or DEV mode. In
18737    // DEV mode, we create a separate object for Context.Consumer that acts
18738    // like a proxy to Context. This proxy object adds unnecessary code in PROD
18739    // so we use the old behaviour (Context.Consumer references Context) to
18740    // reduce size and overhead. The separate object references context via
18741    // a property called "_context", which also gives us the ability to check
18742    // in DEV mode if this property exists or not and warn if it does not.
18743
18744    {
18745      if (context._context === undefined) {
18746        // This may be because it's a Context (rather than a Consumer).
18747        // Or it may be because it's older React where they're the same thing.
18748        // We only want to warn if we're sure it's a new React.
18749        if (context !== context.Consumer) {
18750          if (!hasWarnedAboutUsingContextAsConsumer) {
18751            hasWarnedAboutUsingContextAsConsumer = true;
18752
18753            error('Rendering <Context> directly is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');
18754          }
18755        }
18756      } else {
18757        context = context._context;
18758      }
18759    }
18760
18761    var newProps = workInProgress.pendingProps;
18762    var render = newProps.children;
18763
18764    {
18765      if (typeof render !== 'function') {
18766        error('A context consumer was rendered with multiple children, or a child ' + "that isn't a function. A context consumer expects a single child " + 'that is a function. If you did pass a function, make sure there ' + 'is no trailing or leading whitespace around it.');
18767      }
18768    }
18769
18770    prepareToReadContext(workInProgress, renderLanes);
18771    var newValue = readContext(context, newProps.unstable_observedBits);
18772    var newChildren;
18773
18774    {
18775      ReactCurrentOwner$1.current = workInProgress;
18776      setIsRendering(true);
18777      newChildren = render(newValue);
18778      setIsRendering(false);
18779    } // React DevTools reads this flag.
18780
18781
18782    workInProgress.flags |= PerformedWork;
18783    reconcileChildren(current, workInProgress, newChildren, renderLanes);
18784    return workInProgress.child;
18785  }
18786
18787  function markWorkInProgressReceivedUpdate() {
18788    didReceiveUpdate = true;
18789  }
18790
18791  function bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes) {
18792    if (current !== null) {
vendor: 4,905 bytes, lines 18793-18932
18793      // Reuse previous dependencies
18794      workInProgress.dependencies = current.dependencies;
18795    }
18796
18797    {
18798      // Don't update "base" render times for bailouts.
18799      stopProfilerTimerIfRunning();
18800    }
18801
18802    markSkippedUpdateLanes(workInProgress.lanes); // Check if the children have any pending work.
18803
18804    if (!includesSomeLane(renderLanes, workInProgress.childLanes)) {
18805      // The children don't have any work either. We can skip them.
18806      // TODO: Once we add back resuming, we should check if the children are
18807      // a work-in-progress set. If so, we need to transfer their effects.
18808      return null;
18809    } else {
18810      // This fiber doesn't have work, but its subtree does. Clone the child
18811      // fibers and continue.
18812      cloneChildFibers(current, workInProgress);
18813      return workInProgress.child;
18814    }
18815  }
18816
18817  function remountFiber(current, oldWorkInProgress, newWorkInProgress) {
18818    {
18819      var returnFiber = oldWorkInProgress.return;
18820
18821      if (returnFiber === null) {
18822        throw new Error('Cannot swap the root fiber.');
18823      } // Disconnect from the old current.
18824      // It will get deleted.
18825
18826
18827      current.alternate = null;
18828      oldWorkInProgress.alternate = null; // Connect to the new tree.
18829
18830      newWorkInProgress.index = oldWorkInProgress.index;
18831      newWorkInProgress.sibling = oldWorkInProgress.sibling;
18832      newWorkInProgress.return = oldWorkInProgress.return;
18833      newWorkInProgress.ref = oldWorkInProgress.ref; // Replace the child/sibling pointers above it.
18834
18835      if (oldWorkInProgress === returnFiber.child) {
18836        returnFiber.child = newWorkInProgress;
18837      } else {
18838        var prevSibling = returnFiber.child;
18839
18840        if (prevSibling === null) {
18841          throw new Error('Expected parent to have a child.');
18842        }
18843
18844        while (prevSibling.sibling !== oldWorkInProgress) {
18845          prevSibling = prevSibling.sibling;
18846
18847          if (prevSibling === null) {
18848            throw new Error('Expected to find the previous sibling.');
18849          }
18850        }
18851
18852        prevSibling.sibling = newWorkInProgress;
18853      } // Delete the old fiber and place the new one.
18854      // Since the old fiber is disconnected, we have to schedule it manually.
18855
18856
18857      var last = returnFiber.lastEffect;
18858
18859      if (last !== null) {
18860        last.nextEffect = current;
18861        returnFiber.lastEffect = current;
18862      } else {
18863        returnFiber.firstEffect = returnFiber.lastEffect = current;
18864      }
18865
18866      current.nextEffect = null;
18867      current.flags = Deletion;
18868      newWorkInProgress.flags |= Placement; // Restart work from the new fiber.
18869
18870      return newWorkInProgress;
18871    }
18872  }
18873
18874  function beginWork(current, workInProgress, renderLanes) {
18875    var updateLanes = workInProgress.lanes;
18876
18877    {
18878      if (workInProgress._debugNeedsRemount && current !== null) {
18879        // This will restart the begin phase with a new fiber.
18880        return remountFiber(current, workInProgress, createFiberFromTypeAndProps(workInProgress.type, workInProgress.key, workInProgress.pendingProps, workInProgress._debugOwner || null, workInProgress.mode, workInProgress.lanes));
18881      }
18882    }
18883
18884    if (current !== null) {
18885      var oldProps = current.memoizedProps;
18886      var newProps = workInProgress.pendingProps;
18887
18888      if (oldProps !== newProps || hasContextChanged() || ( // Force a re-render if the implementation changed due to hot reload:
18889       workInProgress.type !== current.type )) {
18890        // If props or context changed, mark the fiber as having performed work.
18891        // This may be unset if the props are determined to be equal later (memo).
18892        didReceiveUpdate = true;
18893      } else if (!includesSomeLane(renderLanes, updateLanes)) {
18894        didReceiveUpdate = false; // This fiber does not have any pending work. Bailout without entering
18895        // the begin phase. There's still some bookkeeping we that needs to be done
18896        // in this optimized path, mostly pushing stuff onto the stack.
18897
18898        switch (workInProgress.tag) {
18899          case HostRoot:
18900            pushHostRootContext(workInProgress);
18901            resetHydrationState();
18902            break;
18903
18904          case HostComponent:
18905            pushHostContext(workInProgress);
18906            break;
18907
18908          case ClassComponent:
18909            {
18910              var Component = workInProgress.type;
18911
18912              if (isContextProvider(Component)) {
18913                pushContextProvider(workInProgress);
18914              }
18915
18916              break;
18917            }
18918
18919          case HostPortal:
18920            pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);
18921            break;
18922
18923          case ContextProvider:
18924            {
18925              var newValue = workInProgress.memoizedProps.value;
18926              pushProvider(workInProgress, newValue);
18927              break;
18928            }
18929
18930          case Profiler:
18931            {
18932              // Profiler should only call onRender when one of its desce
vendor: 5,722 bytes, lines 18932-19058
18932ndants actually rendered.
18933              var hasChildWork = includesSomeLane(renderLanes, workInProgress.childLanes);
18934
18935              if (hasChildWork) {
18936                workInProgress.flags |= Update;
18937              } // Reset effect durations for the next eventual effect phase.
18938              // These are reset during render to allow the DevTools commit hook a chance to read them,
18939
18940
18941              var stateNode = workInProgress.stateNode;
18942              stateNode.effectDuration = 0;
18943              stateNode.passiveEffectDuration = 0;
18944            }
18945
18946            break;
18947
18948          case SuspenseComponent:
18949            {
18950              var state = workInProgress.memoizedState;
18951
18952              if (state !== null) {
18953                // whether to retry the primary children, or to skip over it and
18954                // go straight to the fallback. Check the priority of the primary
18955                // child fragment.
18956
18957
18958                var primaryChildFragment = workInProgress.child;
18959                var primaryChildLanes = primaryChildFragment.childLanes;
18960
18961                if (includesSomeLane(renderLanes, primaryChildLanes)) {
18962                  // The primary children have pending work. Use the normal path
18963                  // to attempt to render the primary children again.
18964                  return updateSuspenseComponent(current, workInProgress, renderLanes);
18965                } else {
18966                  // The primary child fragment does not have pending work marked
18967                  // on it
18968                  pushSuspenseContext(workInProgress, setDefaultShallowSuspenseContext(suspenseStackCursor.current)); // The primary children do not have pending work with sufficient
18969                  // priority. Bailout.
18970
18971                  var child = bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
18972
18973                  if (child !== null) {
18974                    // The fallback children have pending work. Skip over the
18975                    // primary children and work on the fallback.
18976                    return child.sibling;
18977                  } else {
18978                    return null;
18979                  }
18980                }
18981              } else {
18982                pushSuspenseContext(workInProgress, setDefaultShallowSuspenseContext(suspenseStackCursor.current));
18983              }
18984
18985              break;
18986            }
18987
18988          case SuspenseListComponent:
18989            {
18990              var didSuspendBefore = (current.flags & DidCapture) !== NoFlags;
18991
18992              var _hasChildWork = includesSomeLane(renderLanes, workInProgress.childLanes);
18993
18994              if (didSuspendBefore) {
18995                if (_hasChildWork) {
18996                  // If something was in fallback state last time, and we have all the
18997                  // same children then we're still in progressive loading state.
18998                  // Something might get unblocked by state updates or retries in the
18999                  // tree which will affect the tail. So we need to use the normal
19000                  // path to compute the correct tail.
19001                  return updateSuspenseListComponent(current, workInProgress, renderLanes);
19002                } // If none of the children had any work, that means that none of
19003                // them got retried so they'll still be blocked in the same way
19004                // as before. We can fast bail out.
19005
19006
19007                workInProgress.flags |= DidCapture;
19008              } // If nothing suspended before and we're rendering the same children,
19009              // then the tail doesn't matter. Anything new that suspends will work
19010              // in the "together" mode, so we can continue from the state we had.
19011
19012
19013              var renderState = workInProgress.memoizedState;
19014
19015              if (renderState !== null) {
19016                // Reset to the "together" mode in case we've started a different
19017                // update in the past but didn't complete it.
19018                renderState.rendering = null;
19019                renderState.tail = null;
19020                renderState.lastEffect = null;
19021              }
19022
19023              pushSuspenseContext(workInProgress, suspenseStackCursor.current);
19024
19025              if (_hasChildWork) {
19026                break;
19027              } else {
19028                // If none of the children had any work, that means that none of
19029                // them got retried so they'll still be blocked in the same way
19030                // as before. We can fast bail out.
19031                return null;
19032              }
19033            }
19034
19035          case OffscreenComponent:
19036          case LegacyHiddenComponent:
19037            {
19038              // Need to check if the tree still needs to be deferred. This is
19039              // almost identical to the logic used in the normal update path,
19040              // so we'll just enter that. The only difference is we'll bail out
19041              // at the next level instead of this one, because the child props
19042              // have not changed. Which is fine.
19043              // TODO: Probably should refactor `beginWork` to split the bailout
19044              // path from the normal path. I'm tempted to do a labeled break here
19045              // but I won't :)
19046              workInProgress.lanes = NoLanes;
19047              return updateOffscreenComponent(current, workInProgress, renderLanes);
19048            }
19049        }
19050
19051        return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
19052      } else {
19053        if ((current.flags & ForceUpdateForLegacySuspense) !== NoFlags) {
19054          // This is a special case that only exists for legacy mode.
19055          // See https://github.com/facebook/react/pull/19216.
19056          didReceiveUpdate = true;
19057        } else {
19058          // An update was scheduled on this fiber, but there are no new props
vendor: 5,788 bytes, lines 19059-19229
19059          // nor legacy context. Set this to false. If an update queue or context
19060          // consumer produces a changed value, it will set this to true. Otherwise,
19061          // the component will assume the children have not changed and bail out.
19062          didReceiveUpdate = false;
19063        }
19064      }
19065    } else {
19066      didReceiveUpdate = false;
19067    } // Before entering the begin phase, clear pending update priority.
19068    // TODO: This assumes that we're about to evaluate the component and process
19069    // the update queue. However, there's an exception: SimpleMemoComponent
19070    // sometimes bails out later in the begin phase. This indicates that we should
19071    // move this assignment out of the common path and into each branch.
19072
19073
19074    workInProgress.lanes = NoLanes;
19075
19076    switch (workInProgress.tag) {
19077      case IndeterminateComponent:
19078        {
19079          return mountIndeterminateComponent(current, workInProgress, workInProgress.type, renderLanes);
19080        }
19081
19082      case LazyComponent:
19083        {
19084          var elementType = workInProgress.elementType;
19085          return mountLazyComponent(current, workInProgress, elementType, updateLanes, renderLanes);
19086        }
19087
19088      case FunctionComponent:
19089        {
19090          var _Component = workInProgress.type;
19091          var unresolvedProps = workInProgress.pendingProps;
19092          var resolvedProps = workInProgress.elementType === _Component ? unresolvedProps : resolveDefaultProps(_Component, unresolvedProps);
19093          return updateFunctionComponent(current, workInProgress, _Component, resolvedProps, renderLanes);
19094        }
19095
19096      case ClassComponent:
19097        {
19098          var _Component2 = workInProgress.type;
19099          var _unresolvedProps = workInProgress.pendingProps;
19100
19101          var _resolvedProps = workInProgress.elementType === _Component2 ? _unresolvedProps : resolveDefaultProps(_Component2, _unresolvedProps);
19102
19103          return updateClassComponent(current, workInProgress, _Component2, _resolvedProps, renderLanes);
19104        }
19105
19106      case HostRoot:
19107        return updateHostRoot(current, workInProgress, renderLanes);
19108
19109      case HostComponent:
19110        return updateHostComponent(current, workInProgress, renderLanes);
19111
19112      case HostText:
19113        return updateHostText(current, workInProgress);
19114
19115      case SuspenseComponent:
19116        return updateSuspenseComponent(current, workInProgress, renderLanes);
19117
19118      case HostPortal:
19119        return updatePortalComponent(current, workInProgress, renderLanes);
19120
19121      case ForwardRef:
19122        {
19123          var type = workInProgress.type;
19124          var _unresolvedProps2 = workInProgress.pendingProps;
19125
19126          var _resolvedProps2 = workInProgress.elementType === type ? _unresolvedProps2 : resolveDefaultProps(type, _unresolvedProps2);
19127
19128          return updateForwardRef(current, workInProgress, type, _resolvedProps2, renderLanes);
19129        }
19130
19131      case Fragment:
19132        return updateFragment(current, workInProgress, renderLanes);
19133
19134      case Mode:
19135        return updateMode(current, workInProgress, renderLanes);
19136
19137      case Profiler:
19138        return updateProfiler(current, workInProgress, renderLanes);
19139
19140      case ContextProvider:
19141        return updateContextProvider(current, workInProgress, renderLanes);
19142
19143      case ContextConsumer:
19144        return updateContextConsumer(current, workInProgress, renderLanes);
19145
19146      case MemoComponent:
19147        {
19148          var _type2 = workInProgress.type;
19149          var _unresolvedProps3 = workInProgress.pendingProps; // Resolve outer props first, then resolve inner props.
19150
19151          var _resolvedProps3 = resolveDefaultProps(_type2, _unresolvedProps3);
19152
19153          {
19154            if (workInProgress.type !== workInProgress.elementType) {
19155              var outerPropTypes = _type2.propTypes;
19156
19157              if (outerPropTypes) {
19158                checkPropTypes(outerPropTypes, _resolvedProps3, // Resolved for outer only
19159                'prop', getComponentName(_type2));
19160              }
19161            }
19162          }
19163
19164          _resolvedProps3 = resolveDefaultProps(_type2.type, _resolvedProps3);
19165          return updateMemoComponent(current, workInProgress, _type2, _resolvedProps3, updateLanes, renderLanes);
19166        }
19167
19168      case SimpleMemoComponent:
19169        {
19170          return updateSimpleMemoComponent(current, workInProgress, workInProgress.type, workInProgress.pendingProps, updateLanes, renderLanes);
19171        }
19172
19173      case IncompleteClassComponent:
19174        {
19175          var _Component3 = workInProgress.type;
19176          var _unresolvedProps4 = workInProgress.pendingProps;
19177
19178          var _resolvedProps4 = workInProgress.elementType === _Component3 ? _unresolvedProps4 : resolveDefaultProps(_Component3, _unresolvedProps4);
19179
19180          return mountIncompleteClassComponent(current, workInProgress, _Component3, _resolvedProps4, renderLanes);
19181        }
19182
19183      case SuspenseListComponent:
19184        {
19185          return updateSuspenseListComponent(current, workInProgress, renderLanes);
19186        }
19187
19188      case FundamentalComponent:
19189        {
19190
19191          break;
19192        }
19193
19194      case ScopeComponent:
19195        {
19196
19197          break;
19198        }
19199
19200      case Block:
19201        {
19202
19203          break;
19204        }
19205
19206      case OffscreenComponent:
19207        {
19208          return updateOffscreenComponent(current, workInProgress, renderLanes);
19209        }
19210
19211      case LegacyHiddenComponent:
19212        {
19213          return updateLegacyHiddenComponent(current, workInProgress, renderLanes);
19214        }
19215    }
19216
19217    {
19218      {
19219        throw Error( "Unknown unit of work tag (" + workInProgress.tag + "). This error is likely caused by a bug in React. Please file an issue." );
19220      }
19221    }
19222  }
19223
19224  function markUpdate(workInProgress) {
19225    // Tag the fiber with an update effect. This turns a Placement into
19226    // a PlacementAndUpdate.
19227    workInProgress.flags |= Update;
19228  }
19229
vendor: 4,173 bytes, lines 19230-19346
19230  function markRef$1(workInProgress) {
19231    workInProgress.flags |= Ref;
19232  }
19233
19234  var appendAllChildren;
19235  var updateHostContainer;
19236  var updateHostComponent$1;
19237  var updateHostText$1;
19238
19239  {
19240    // Mutation mode
19241    appendAllChildren = function (parent, workInProgress, needsVisibilityToggle, isHidden) {
19242      // We only have the top Fiber that was created but we need recurse down its
19243      // children to find all the terminal nodes.
19244      var node = workInProgress.child;
19245
19246      while (node !== null) {
19247        if (node.tag === HostComponent || node.tag === HostText) {
19248          appendInitialChild(parent, node.stateNode);
19249        } else if (node.tag === HostPortal) ; else if (node.child !== null) {
19250          node.child.return = node;
19251          node = node.child;
19252          continue;
19253        }
19254
19255        if (node === workInProgress) {
19256          return;
19257        }
19258
19259        while (node.sibling === null) {
19260          if (node.return === null || node.return === workInProgress) {
19261            return;
19262          }
19263
19264          node = node.return;
19265        }
19266
19267        node.sibling.return = node.return;
19268        node = node.sibling;
19269      }
19270    };
19271
19272    updateHostContainer = function (workInProgress) {// Noop
19273    };
19274
19275    updateHostComponent$1 = function (current, workInProgress, type, newProps, rootContainerInstance) {
19276      // If we have an alternate, that means this is an update and we need to
19277      // schedule a side-effect to do the updates.
19278      var oldProps = current.memoizedProps;
19279
19280      if (oldProps === newProps) {
19281        // In mutation mode, this is sufficient for a bailout because
19282        // we won't touch this node even if children changed.
19283        return;
19284      } // If we get updated because one of our children updated, we don't
19285      // have newProps so we'll have to reuse them.
19286      // TODO: Split the update API as separate for the props vs. children.
19287      // Even better would be if children weren't special cased at all tho.
19288
19289
19290      var instance = workInProgress.stateNode;
19291      var currentHostContext = getHostContext(); // TODO: Experiencing an error where oldProps is null. Suggests a host
19292      // component is hitting the resume path. Figure out why. Possibly
19293      // related to `hidden`.
19294
19295      var updatePayload = prepareUpdate(instance, type, oldProps, newProps, rootContainerInstance, currentHostContext); // TODO: Type this specific to this type of component.
19296
19297      workInProgress.updateQueue = updatePayload; // If the update payload indicates that there is a change or if there
19298      // is a new ref we mark this as an update. All the work is done in commitWork.
19299
19300      if (updatePayload) {
19301        markUpdate(workInProgress);
19302      }
19303    };
19304
19305    updateHostText$1 = function (current, workInProgress, oldText, newText) {
19306      // If the text differs, mark it as an update. All the work in done in commitWork.
19307      if (oldText !== newText) {
19308        markUpdate(workInProgress);
19309      }
19310    };
19311  }
19312
19313  function cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {
19314    if (getIsHydrating()) {
19315      // If we're hydrating, we should consume as many items as we can
19316      // so we don't leave any behind.
19317      return;
19318    }
19319
19320    switch (renderState.tailMode) {
19321      case 'hidden':
19322        {
19323          // Any insertions at the end of the tail list after this point
19324          // should be invisible. If there are already mounted boundaries
19325          // anything before them are not considered for collapsing.
19326          // Therefore we need to go through the whole tail to find if
19327          // there are any.
19328          var tailNode = renderState.tail;
19329          var lastTailNode = null;
19330
19331          while (tailNode !== null) {
19332            if (tailNode.alternate !== null) {
19333              lastTailNode = tailNode;
19334            }
19335
19336            tailNode = tailNode.sibling;
19337          } // Next we're simply going to delete all insertions after the
19338          // last rendered item.
19339
19340
19341          if (lastTailNode === null) {
19342            // All remaining items in the tail are insertions.
19343            renderState.tail = null;
19344          } else {
19345            // Detach the insertion after the last node that was already
19346            // inserted.
vendor: 3,927 bytes, lines 19347-19463
19347            lastTailNode.sibling = null;
19348          }
19349
19350          break;
19351        }
19352
19353      case 'collapsed':
19354        {
19355          // Any insertions at the end of the tail list after this point
19356          // should be invisible. If there are already mounted boundaries
19357          // anything before them are not considered for collapsing.
19358          // Therefore we need to go through the whole tail to find if
19359          // there are any.
19360          var _tailNode = renderState.tail;
19361          var _lastTailNode = null;
19362
19363          while (_tailNode !== null) {
19364            if (_tailNode.alternate !== null) {
19365              _lastTailNode = _tailNode;
19366            }
19367
19368            _tailNode = _tailNode.sibling;
19369          } // Next we're simply going to delete all insertions after the
19370          // last rendered item.
19371
19372
19373          if (_lastTailNode === null) {
19374            // All remaining items in the tail are insertions.
19375            if (!hasRenderedATailFallback && renderState.tail !== null) {
19376              // We suspended during the head. We want to show at least one
19377              // row at the tail. So we'll keep on and cut off the rest.
19378              renderState.tail.sibling = null;
19379            } else {
19380              renderState.tail = null;
19381            }
19382          } else {
19383            // Detach the insertion after the last node that was already
19384            // inserted.
19385            _lastTailNode.sibling = null;
19386          }
19387
19388          break;
19389        }
19390    }
19391  }
19392
19393  function completeWork(current, workInProgress, renderLanes) {
19394    var newProps = workInProgress.pendingProps;
19395
19396    switch (workInProgress.tag) {
19397      case IndeterminateComponent:
19398      case LazyComponent:
19399      case SimpleMemoComponent:
19400      case FunctionComponent:
19401      case ForwardRef:
19402      case Fragment:
19403      case Mode:
19404      case Profiler:
19405      case ContextConsumer:
19406      case MemoComponent:
19407        return null;
19408
19409      case ClassComponent:
19410        {
19411          var Component = workInProgress.type;
19412
19413          if (isContextProvider(Component)) {
19414            popContext(workInProgress);
19415          }
19416
19417          return null;
19418        }
19419
19420      case HostRoot:
19421        {
19422          popHostContainer(workInProgress);
19423          popTopLevelContextObject(workInProgress);
19424          resetWorkInProgressVersions();
19425          var fiberRoot = workInProgress.stateNode;
19426
19427          if (fiberRoot.pendingContext) {
19428            fiberRoot.context = fiberRoot.pendingContext;
19429            fiberRoot.pendingContext = null;
19430          }
19431
19432          if (current === null || current.child === null) {
19433            // If we hydrated, pop so that we can delete any remaining children
19434            // that weren't hydrated.
19435            var wasHydrated = popHydrationState(workInProgress);
19436
19437            if (wasHydrated) {
19438              // If we hydrated, then we'll need to schedule an update for
19439              // the commit side-effects on the root.
19440              markUpdate(workInProgress);
19441            } else if (!fiberRoot.hydrate) {
19442              // Schedule an effect to clear this container at the start of the next commit.
19443              // This handles the case of React rendering into a container with previous children.
19444              // It's also safe to do for updates too, because current.child would only be null
19445              // if the previous render was null (so the the container would already be empty).
19446              workInProgress.flags |= Snapshot;
19447            }
19448          }
19449
19450          updateHostContainer(workInProgress);
19451          return null;
19452        }
19453
19454      case HostComponent:
19455        {
19456          popHostContext(workInProgress);
19457          var rootContainerInstance = getRootHostContainer();
19458          var type = workInProgress.type;
19459
19460          if (current !== null && workInProgress.stateNode != null) {
19461            updateHostComponent$1(current, workInProgress, type, newProps, rootContainerInstance);
19462
19463            if (current.ref !== workInProgress.ref) {
19464              markRef$1(workInProgress);
19465            }
19466          } else {
19467            if (!newProps) {
19468              if (!(workInProgress.stateNode !== null)) {
19469                {
19470                  throw Error( "We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue." );
19471                }
19472              } // This can happen when we abort work.
19473
19474
19475              return null;
19476            }
19477
19478            var currentHostContext = getHostContext(); // TODO: Move createInstance to beginWork and keep it on a context
19479            // "stack" as the parent. Then append children as we go in beginWork
19480            // or completeWork depending on whether we want to add them top->down or
19481            // bottom->up. Top->down is faster in IE11.
19482
19483            var _wasHydrated = popHydrationState(workInProgress);
19484
19485            if (_wasHydrated) {
19486              // TODO: Move this and createInstance step into the beginPhase
19487              // to consolidate.
19488              if (prepareToHydrateHostInstance(workInProgress, rootContainerInstance, currentHostContext)) {
19489                // If changes to the hydrated node need to be applied at the
19490                // commit-phase we mark this as such.
19491                markUpdate(workInProgress);
19492              }
19493            } else {
19494              var instance = createInstance(type, newProps, rootContainerInstance, currentHostContext, workInProgress);
19495              appendAllChildren(instance, workInProgress, false, false);
19496              workInProgress.stateNode = instance; // Certain renderers require commit-time effects for initial mount.
19497              // (eg DOM renderer supports auto-focus for certain elements).
19498              // Make sure such renderers get scheduled for later work.
19499
19500              if (finalizeInitialChildren(instance, type, newProps, rootContainerInstance)) {
19501                markUpdate(workInProgress);
19502              }
19503            }
19504
19505            if (workInProgress.ref !== null) {
19506              // If there is a ref on a host node we need to schedule a callback
vendor: 20,055 bytes, lines 19507-20036
19507              markRef$1(workInProgress);
19508            }
19509          }
19510
19511          return null;
19512        }
19513
19514      case HostText:
19515        {
19516          var newText = newProps;
19517
19518          if (current && workInProgress.stateNode != null) {
19519            var oldText = current.memoizedProps; // If we have an alternate, that means this is an update and we need
19520            // to schedule a side-effect to do the updates.
19521
19522            updateHostText$1(current, workInProgress, oldText, newText);
19523          } else {
19524            if (typeof newText !== 'string') {
19525              if (!(workInProgress.stateNode !== null)) {
19526                {
19527                  throw Error( "We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue." );
19528                }
19529              } // This can happen when we abort work.
19530
19531            }
19532
19533            var _rootContainerInstance = getRootHostContainer();
19534
19535            var _currentHostContext = getHostContext();
19536
19537            var _wasHydrated2 = popHydrationState(workInProgress);
19538
19539            if (_wasHydrated2) {
19540              if (prepareToHydrateHostTextInstance(workInProgress)) {
19541                markUpdate(workInProgress);
19542              }
19543            } else {
19544              workInProgress.stateNode = createTextInstance(newText, _rootContainerInstance, _currentHostContext, workInProgress);
19545            }
19546          }
19547
19548          return null;
19549        }
19550
19551      case SuspenseComponent:
19552        {
19553          popSuspenseContext(workInProgress);
19554          var nextState = workInProgress.memoizedState;
19555
19556          if ((workInProgress.flags & DidCapture) !== NoFlags) {
19557            // Something suspended. Re-render with the fallback children.
19558            workInProgress.lanes = renderLanes; // Do not reset the effect list.
19559
19560            if ( (workInProgress.mode & ProfileMode) !== NoMode) {
19561              transferActualDuration(workInProgress);
19562            }
19563
19564            return workInProgress;
19565          }
19566
19567          var nextDidTimeout = nextState !== null;
19568          var prevDidTimeout = false;
19569
19570          if (current === null) {
19571            if (workInProgress.memoizedProps.fallback !== undefined) {
19572              popHydrationState(workInProgress);
19573            }
19574          } else {
19575            var prevState = current.memoizedState;
19576            prevDidTimeout = prevState !== null;
19577          }
19578
19579          if (nextDidTimeout && !prevDidTimeout) {
19580            // If this subtreee is running in blocking mode we can suspend,
19581            // otherwise we won't suspend.
19582            // TODO: This will still suspend a synchronous tree if anything
19583            // in the concurrent tree already suspended during this render.
19584            // This is a known bug.
19585            if ((workInProgress.mode & BlockingMode) !== NoMode) {
19586              // TODO: Move this back to throwException because this is too late
19587              // if this is a large tree which is common for initial loads. We
19588              // don't know if we should restart a render or not until we get
19589              // this marker, and this is too late.
19590              // If this render already had a ping or lower pri updates,
19591              // and this is the first time we know we're going to suspend we
19592              // should be able to immediately restart from within throwException.
19593              var hasInvisibleChildContext = current === null && workInProgress.memoizedProps.unstable_avoidThisFallback !== true;
19594
19595              if (hasInvisibleChildContext || hasSuspenseContext(suspenseStackCursor.current, InvisibleParentSuspenseContext)) {
19596                // If this was in an invisible tree or a new render, then showing
19597                // this boundary is ok.
19598                renderDidSuspend();
19599              } else {
19600                // Otherwise, we're going to have to hide content so we should
19601                // suspend for longer if possible.
19602                renderDidSuspendDelayIfPossible();
19603              }
19604            }
19605          }
19606
19607          {
19608            // TODO: Only schedule updates if these values are non equal, i.e. it changed.
19609            if (nextDidTimeout || prevDidTimeout) {
19610              // If this boundary just timed out, schedule an effect to attach a
19611              // retry listener to the promise. This flag is also used to hide the
19612              // primary children. In mutation mode, we also need the flag to
19613              // *unhide* children that were previously hidden, so check if this
19614              // is currently timed out, too.
19615              workInProgress.flags |= Update;
19616            }
19617          }
19618
19619          return null;
19620        }
19621
19622      case HostPortal:
19623        popHostContainer(workInProgress);
19624        updateHostContainer(workInProgress);
19625
19626        if (current === null) {
19627          preparePortalMount(workInProgress.stateNode.containerInfo);
19628        }
19629
19630        return null;
19631
19632      case ContextProvider:
19633        // Pop provider fiber
19634        popProvider(workInProgress);
19635        return null;
19636
19637      case IncompleteClassComponent:
19638        {
19639          // Same as class component case. I put it down here so that the tags are
19640          // sequential to ensure this switch is compiled to a jump table.
19641          var _Component = workInProgress.type;
19642
19643          if (isContextProvider(_Component)) {
19644            popContext(workInProgress);
19645          }
19646
19647          return null;
19648        }
19649
19650      case SuspenseListComponent:
19651        {
19652          popSuspenseContext(workInProgress);
19653          var renderState = workInProgress.memoizedState;
19654
19655          if (renderState === null) {
19656            // We're running in the default, "independent" mode.
19657            // We don't do anything in this mode.
19658            return null;
19659          }
19660
19661          var didSuspendAlready = (workInProgress.flags & DidCapture) !== NoFlags;
19662          var renderedTail = renderState.rendering;
19663
19664          if (renderedTail === null) {
19665            // We just rendered the head.
19666            if (!didSuspendAlready) {
19667              // This is the first pass. We need to figure out if anything is still
19668              // suspended in the rendered set.
19669              // If new content unsuspended, but there's still some content that
19670              // didn't. Then we need to do a second pass that forces everything
19671              // to keep showing their fallbacks.
19672              // We might be suspended if something in this render pass suspended, or
19673              // something in the previous committed pass suspended. Otherwise,
19674              // there's no chance so we can skip the expensive call to
19675              // findFirstSuspended.
19676              var cannotBeSuspended = renderHasNotSuspendedYet() && (current === null || (current.flags & DidCapture) === NoFlags);
19677
19678              if (!cannotBeSuspended) {
19679                var row = workInProgress.child;
19680
19681                while (row !== null) {
19682                  var suspended = findFirstSuspended(row);
19683
19684                  if (suspended !== null) {
19685                    didSuspendAlready = true;
19686                    workInProgress.flags |= DidCapture;
19687                    cutOffTailIfNeeded(renderState, false); // If this is a newly suspended tree, it might not get committed as
19688                    // part of the second pass. In that case nothing will subscribe to
19689                    // its thennables. Instead, we'll transfer its thennables to the
19690                    // SuspenseList so that it can retry if they resolve.
19691                    // There might be multiple of these in the list but since we're
19692                    // going to wait for all of them anyway, it doesn't really matter
19693                    // which ones gets to ping. In theory we could get clever and keep
19694                    // track of how many dependencies remain but it gets tricky because
19695                    // in the meantime, we can add/remove/change items and dependencies.
19696                    // We might bail out of the loop before finding any but that
19697                    // doesn't matter since that means that the other boundaries that
19698                    // we did find already has their listeners attached.
19699
19700                    var newThennables = suspended.updateQueue;
19701
19702                    if (newThennables !== null) {
19703                      workInProgress.updateQueue = newThennables;
19704                      workInProgress.flags |= Update;
19705                    } // Rerender the whole list, but this time, we'll force fallbacks
19706                    // to stay in place.
19707                    // Reset the effect list before doing the second pass since that's now invalid.
19708
19709
19710                    if (renderState.lastEffect === null) {
19711                      workInProgress.firstEffect = null;
19712                    }
19713
19714                    workInProgress.lastEffect = renderState.lastEffect; // Reset the child fibers to their original state.
19715
19716                    resetChildFibers(workInProgress, renderLanes); // Set up the Suspense Context to force suspense and immediately
19717                    // rerender the children.
19718
19719                    pushSuspenseContext(workInProgress, setShallowSuspenseContext(suspenseStackCursor.current, ForceSuspenseFallback));
19720                    return workInProgress.child;
19721                  }
19722
19723                  row = row.sibling;
19724                }
19725              }
19726
19727              if (renderState.tail !== null && now() > getRenderTargetTime()) {
19728                // We have already passed our CPU deadline but we still have rows
19729                // left in the tail. We'll just give up further attempts to render
19730                // the main content and only render fallbacks.
19731                workInProgress.flags |= DidCapture;
19732                didSuspendAlready = true;
19733                cutOffTailIfNeeded(renderState, false); // Since nothing actually suspended, there will nothing to ping this
19734                // to get it started back up to attempt the next item. While in terms
19735                // of priority this work has the same priority as this current render,
19736                // it's not part of the same transition once the transition has
19737                // committed. If it's sync, we still want to yield so that it can be
19738                // painted. Conceptually, this is really the same as pinging.
19739                // We can use any RetryLane even if it's the one currently rendering
19740                // since we're leaving it behind on this node.
19741
19742                workInProgress.lanes = SomeRetryLane;
19743
19744                {
19745                  markSpawnedWork(SomeRetryLane);
19746                }
19747              }
19748            } else {
19749              cutOffTailIfNeeded(renderState, false);
19750            } // Next we're going to render the tail.
19751
19752          } else {
19753            // Append the rendered row to the child list.
19754            if (!didSuspendAlready) {
19755              var _suspended = findFirstSuspended(renderedTail);
19756
19757              if (_suspended !== null) {
19758                workInProgress.flags |= DidCapture;
19759                didSuspendAlready = true; // Ensure we transfer the update queue to the parent so that it doesn't
19760                // get lost if this row ends up dropped during a second pass.
19761
19762                var _newThennables = _suspended.updateQueue;
19763
19764                if (_newThennables !== null) {
19765                  workInProgress.updateQueue = _newThennables;
19766                  workInProgress.flags |= Update;
19767                }
19768
19769                cutOffTailIfNeeded(renderState, true); // This might have been modified.
19770
19771                if (renderState.tail === null && renderState.tailMode === 'hidden' && !renderedTail.alternate && !getIsHydrating() // We don't cut it if we're hydrating.
19772                ) {
19773                    // We need to delete the row we just rendered.
19774                    // Reset the effect list to what it was before we rendered this
19775                    // child. The nested children have already appended themselves.
19776                    var lastEffect = workInProgress.lastEffect = renderState.lastEffect; // Remove any effects that were appended after this point.
19777
19778                    if (lastEffect !== null) {
19779                      lastEffect.nextEffect = null;
19780                    } // We're done.
19781
19782
19783                    return null;
19784                  }
19785              } else if ( // The time it took to render last row is greater than the remaining
19786              // time we have to render. So rendering one more row would likely
19787              // exceed it.
19788              now() * 2 - renderState.renderingStartTime > getRenderTargetTime() && renderLanes !== OffscreenLane) {
19789                // We have now passed our CPU deadline and we'll just give up further
19790                // attempts to render the main content and only render fallbacks.
19791                // The assumption is that this is usually faster.
19792                workInProgress.flags |= DidCapture;
19793                didSuspendAlready = true;
19794                cutOffTailIfNeeded(renderState, false); // Since nothing actually suspended, there will nothing to ping this
19795                // to get it started back up to attempt the next item. While in terms
19796                // of priority this work has the same priority as this current render,
19797                // it's not part of the same transition once the transition has
19798                // committed. If it's sync, we still want to yield so that it can be
19799                // painted. Conceptually, this is really the same as pinging.
19800                // We can use any RetryLane even if it's the one currently rendering
19801                // since we're leaving it behind on this node.
19802
19803                workInProgress.lanes = SomeRetryLane;
19804
19805                {
19806                  markSpawnedWork(SomeRetryLane);
19807                }
19808              }
19809            }
19810
19811            if (renderState.isBackwards) {
19812              // The effect list of the backwards tail will have been added
19813              // to the end. This breaks the guarantee that life-cycles fire in
19814              // sibling order but that isn't a strong guarantee promised by React.
19815              // Especially since these might also just pop in during future commits.
19816              // Append to the beginning of the list.
19817              renderedTail.sibling = workInProgress.child;
19818              workInProgress.child = renderedTail;
19819            } else {
19820              var previousSibling = renderState.last;
19821
19822              if (previousSibling !== null) {
19823                previousSibling.sibling = renderedTail;
19824              } else {
19825                workInProgress.child = renderedTail;
19826              }
19827
19828              renderState.last = renderedTail;
19829            }
19830          }
19831
19832          if (renderState.tail !== null) {
19833            // We still have tail rows to render.
19834            // Pop a row.
19835            var next = renderState.tail;
19836            renderState.rendering = next;
19837            renderState.tail = next.sibling;
19838            renderState.lastEffect = workInProgress.lastEffect;
19839            renderState.renderingStartTime = now();
19840            next.sibling = null; // Restore the context.
19841            // TODO: We can probably just avoid popping it instead and only
19842            // setting it the first time we go from not suspended to suspended.
19843
19844            var suspenseContext = suspenseStackCursor.current;
19845
19846            if (didSuspendAlready) {
19847              suspenseContext = setShallowSuspenseContext(suspenseContext, ForceSuspenseFallback);
19848            } else {
19849              suspenseContext = setDefaultShallowSuspenseContext(suspenseContext);
19850            }
19851
19852            pushSuspenseContext(workInProgress, suspenseContext); // Do a pass over the next row.
19853
19854            return next;
19855          }
19856
19857          return null;
19858        }
19859
19860      case FundamentalComponent:
19861        {
19862
19863          break;
19864        }
19865
19866      case ScopeComponent:
19867        {
19868
19869          break;
19870        }
19871
19872      case Block:
19873
19874        break;
19875
19876      case OffscreenComponent:
19877      case LegacyHiddenComponent:
19878        {
19879          popRenderLanes(workInProgress);
19880
19881          if (current !== null) {
19882            var _nextState = workInProgress.memoizedState;
19883            var _prevState = current.memoizedState;
19884            var prevIsHidden = _prevState !== null;
19885            var nextIsHidden = _nextState !== null;
19886
19887            if (prevIsHidden !== nextIsHidden && newProps.mode !== 'unstable-defer-without-hiding') {
19888              workInProgress.flags |= Update;
19889            }
19890          }
19891
19892          return null;
19893        }
19894    }
19895
19896    {
19897      {
19898        throw Error( "Unknown unit of work tag (" + workInProgress.tag + "). This error is likely caused by a bug in React. Please file an issue." );
19899      }
19900    }
19901  }
19902
19903  function unwindWork(workInProgress, renderLanes) {
19904    switch (workInProgress.tag) {
19905      case ClassComponent:
19906        {
19907          var Component = workInProgress.type;
19908
19909          if (isContextProvider(Component)) {
19910            popContext(workInProgress);
19911          }
19912
19913          var flags = workInProgress.flags;
19914
19915          if (flags & ShouldCapture) {
19916            workInProgress.flags = flags & ~ShouldCapture | DidCapture;
19917
19918            if ( (workInProgress.mode & ProfileMode) !== NoMode) {
19919              transferActualDuration(workInProgress);
19920            }
19921
19922            return workInProgress;
19923          }
19924
19925          return null;
19926        }
19927
19928      case HostRoot:
19929        {
19930          popHostContainer(workInProgress);
19931          popTopLevelContextObject(workInProgress);
19932          resetWorkInProgressVersions();
19933          var _flags = workInProgress.flags;
19934
19935          if (!((_flags & DidCapture) === NoFlags)) {
19936            {
19937              throw Error( "The root failed to unmount after an error. This is likely a bug in React. Please file an issue." );
19938            }
19939          }
19940
19941          workInProgress.flags = _flags & ~ShouldCapture | DidCapture;
19942          return workInProgress;
19943        }
19944
19945      case HostComponent:
19946        {
19947          // TODO: popHydrationState
19948          popHostContext(workInProgress);
19949          return null;
19950        }
19951
19952      case SuspenseComponent:
19953        {
19954          popSuspenseContext(workInProgress);
19955
19956          var _flags2 = workInProgress.flags;
19957
19958          if (_flags2 & ShouldCapture) {
19959            workInProgress.flags = _flags2 & ~ShouldCapture | DidCapture; // Captured a suspense effect. Re-render the boundary.
19960
19961            if ( (workInProgress.mode & ProfileMode) !== NoMode) {
19962              transferActualDuration(workInProgress);
19963            }
19964
19965            return workInProgress;
19966          }
19967
19968          return null;
19969        }
19970
19971      case SuspenseListComponent:
19972        {
19973          popSuspenseContext(workInProgress); // SuspenseList doesn't actually catch anything. It should've been
19974          // caught by a nested boundary. If not, it should bubble through.
19975
19976          return null;
19977        }
19978
19979      case HostPortal:
19980        popHostContainer(workInProgress);
19981        return null;
19982
19983      case ContextProvider:
19984        popProvider(workInProgress);
19985        return null;
19986
19987      case OffscreenComponent:
19988      case LegacyHiddenComponent:
19989        popRenderLanes(workInProgress);
19990        return null;
19991
19992      default:
19993        return null;
19994    }
19995  }
19996
19997  function unwindInterruptedWork(interruptedWork) {
19998    switch (interruptedWork.tag) {
19999      case ClassComponent:
20000        {
20001          var childContextTypes = interruptedWork.type.childContextTypes;
20002
20003          if (childContextTypes !== null && childContextTypes !== undefined) {
20004            popContext(interruptedWork);
20005          }
20006
20007          break;
20008        }
20009
20010      case HostRoot:
20011        {
20012          popHostContainer(interruptedWork);
20013          popTopLevelContextObject(interruptedWork);
20014          resetWorkInProgressVersions();
20015          break;
20016        }
20017
20018      case HostComponent:
20019        {
20020          popHostContext(interruptedWork);
20021          break;
20022        }
20023
20024      case HostPortal:
20025        popHostContainer(interruptedWork);
20026        break;
20027
20028      case SuspenseComponent:
20029        popSuspenseContext(interruptedWork);
20030        break;
20031
20032      case SuspenseListComponent:
20033        popSuspenseContext(interruptedWork);
20034        break;
20035
20036      case ContextProvider:
20037        popProvider(interruptedWork);
20038        break;
20039
20040      case OffscreenComponent:
20041      case LegacyHiddenComponent:
20042        popRenderLanes(interruptedWork);
20043        break;
20044    }
20045  }
20046
20047  function createCapturedValue(value, source) {
20048    // If the value is an error, call this function immediately after it is thrown
20049    // so the stack is accurate.
20050    return {
20051      value: value,
20052      source: source,
20053      stack: getStackByFiberInDevAndProd(source)
20054    };
20055  }
20056
20057  // This module is forked in different environments.
20058  // By default, return `true` to log errors to the console.
20059  // Forks can return `false` if this isn't desirable.
20060  function showErrorDialog(boundary, errorInfo) {
20061    return true;
20062  }
20063
20064  function logCapturedError(boundary, errorInfo) {
20065    try {
20066      var logError = showErrorDialog(boundary, errorInfo); // Allow injected showErrorDialog() to prevent default console.error logging.
20067      // This enables renderers like ReactNative to better manage redbox behavior.
20068
20069      if (logError === false) {
20070        return;
20071      }
20072
20073      var error = errorInfo.value;
20074
20075      if (true) {
20076        var source = errorInfo.source;
20077        var stack = errorInfo.stack;
20078        var componentStack = stack !== null ? stack : ''; // Browsers support silencing uncaught errors by calling
20079        // `preventDefault()` in window `error` handler.
20080        // We record this information as an expando on the error.
20081
20082        if (error != null && error._suppressLogging) {
20083          if (boundary.tag === ClassComponent) {
20084            // The error is recoverable and was silenced.
20085            // Ignore it and don't print the stack addendum.
20086            // This is handy for testing error boundaries without noise.
20087            return;
20088          } // The error is fatal. Since the silencing might have
20089          // been accidental, we'll surface it anyway.
20090          // However, the browser would have silenced the original error
20091          // so we'll print it first, and then print the stack addendum.
20092
20093
20094          console['error'](error); // Don't transform to our wrapper
20095          // For a more detailed description of this block, see:
20096          // https://github.com/facebook/react/pull/13384
20097        }
20098
20099        var componentName = source ? getComponentName(source.type) : null;
20100        var componentNameMessage = componentName ? "The above error occurred in the <" + componentName + "> component:" : 'The above error occurred in one of your React components:';
20101        var errorBoundaryMessage;
20102        var errorBoundaryName = getComponentName(boundary.type);
20103
20104        if (errorBoundaryName) {
20105          errorBoundaryMessage = "React will try to recreate this component tree from scratch " + ("using the error boundary you provided, " + errorBoundaryName + ".");
20106        } else {
20107          errorBoundaryMessage = 'Consider adding an error boundary to your tree to customize error handling behavior.\n' + 'Visit https://reactjs.org/link/error-boundaries to learn more about error boundaries.';
20108        }
20109
20110        var combinedMessage = componentNameMessage + "\n" + componentStack + "\n\n" + ("" + errorBoundaryMessage); // In development, we provide our own message with just the component stack.
20111        // We don't include the original error message and JS stack because the browser
20112        // has already printed it. Even if the application swallows the error, it is still
20113        // displayed by the browser thanks to the DEV-only fake event trick in ReactErrorUtils.
20114
20115        console['error'](combinedMessage); // Don't transform to our wrapper
20116      } else {
20117        // In production, we print the error directly.
20118        // This will include the message, the JS stack, and anything the browser wants to show.
20119        // We pass the error object instead of custom message so that the browser displays the error natively.
20120        console['error'](error); // Don't transform to our wrapper
20121      }
20122    } catch (e) {
20123      // This method must not throw, or React internal state will get messed up.
20124      // If console.error is overridden, or logCapturedError() shows a dialog that throws,
20125      // we want to report this error outside of the normal stack as a last resort.
20126      // https://github.com/facebook/react/issues/13188
20127      setTimeout(function () {
20128        throw e;
20129      });
20130    }
20131  }
20132
20133  var PossiblyWeakMap$1 = typeof WeakMap === 'function' ? WeakMap : Map;
20134
20135  function createRootErrorUpdate(fiber, errorInfo, lane) {
20136    var update = createUpdate(NoTimestamp, lane); // Unmount the root by rendering null.
20137
20138    update.tag = CaptureUpdate; // Caution: React DevTools currently depends on this property
20139    // being called "element".
20140
20141    update.payload = {
20142      element: null
20143    };
20144    var error = errorInfo.value;
20145
20146    update.callback = function () {
20147      onUncaughtError(error);
20148      logCapturedError(fiber, errorInfo);
20149    };
20150
20151    return update;
20152  }
20153
20154  function createClassErrorUpdate(fiber, errorInfo, lane) {
20155    var update = createUpdate(NoTimestamp, lane);
20156    update.tag = CaptureUpdate;
20157    var getDerivedStateFromError = fiber.type.getDerivedStateFromError;
20158
20159    if (typeof getDerivedStateFromError === 'function') {
20160      var error$1 = errorInfo.value;
20161
20162      update.payload = function () {
20163        logCapturedError(fiber, errorInfo);
20164        return getDerivedStateFromError(error$1);
20165      };
20166    }
20167
20168    var inst = fiber.stateNode;
20169
20170    if (inst !== null && typeof inst.componentDidCatch === 'function') {
20171      update.callback = function callback() {
20172        {
20173          markFailedErrorBoundaryForHotReloading(fiber);
20174        }
20175
20176        if (typeof getDerivedStateFromError !== 'function') {
20177          // To preserve the preexisting retry behavior of error boundaries,
20178          // we keep track of which ones already failed during this batch.
20179          // This gets reset before we yield back to the browser.
20180          // TODO: Warn in strict mode if getDerivedStateFromError is
20181          // not defined.
20182          markLegacyErrorBoundaryAsFailed(this); // Only log here if componentDidCatch is the only error boundary method defined
20183
20184          logCapturedError(fiber, errorInfo);
20185        }
20186
20187        var error$1 = errorInfo.value;
20188        var stack = errorInfo.stack;
20189        this.componentDidCatch(error$1, {
20190          componentStack: stack !== null ? stack : ''
20191        });
20192
20193        {
20194          if (typeof getDerivedStateFromError !== 'function') {
20195            // If componentDidCatch is the only error boundary method defined,
vendor: 16,625 bytes, lines 20196-20614
20196            // then it needs to call setState to recover from errors.
20197            // If no state update is scheduled then the boundary will swallow the error.
20198            if (!includesSomeLane(fiber.lanes, SyncLane)) {
20199              error('%s: Error boundaries should implement getDerivedStateFromError(). ' + 'In that method, return a state update to display an error message or fallback UI.', getComponentName(fiber.type) || 'Unknown');
20200            }
20201          }
20202        }
20203      };
20204    } else {
20205      update.callback = function () {
20206        markFailedErrorBoundaryForHotReloading(fiber);
20207      };
20208    }
20209
20210    return update;
20211  }
20212
20213  function attachPingListener(root, wakeable, lanes) {
20214    // Attach a listener to the promise to "ping" the root and retry. But only if
20215    // one does not already exist for the lanes we're currently rendering (which
20216    // acts like a "thread ID" here).
20217    var pingCache = root.pingCache;
20218    var threadIDs;
20219
20220    if (pingCache === null) {
20221      pingCache = root.pingCache = new PossiblyWeakMap$1();
20222      threadIDs = new Set();
20223      pingCache.set(wakeable, threadIDs);
20224    } else {
20225      threadIDs = pingCache.get(wakeable);
20226
20227      if (threadIDs === undefined) {
20228        threadIDs = new Set();
20229        pingCache.set(wakeable, threadIDs);
20230      }
20231    }
20232
20233    if (!threadIDs.has(lanes)) {
20234      // Memoize using the thread ID to prevent redundant listeners.
20235      threadIDs.add(lanes);
20236      var ping = pingSuspendedRoot.bind(null, root, wakeable, lanes);
20237      wakeable.then(ping, ping);
20238    }
20239  }
20240
20241  function throwException(root, returnFiber, sourceFiber, value, rootRenderLanes) {
20242    // The source fiber did not complete.
20243    sourceFiber.flags |= Incomplete; // Its effect list is no longer valid.
20244
20245    sourceFiber.firstEffect = sourceFiber.lastEffect = null;
20246
20247    if (value !== null && typeof value === 'object' && typeof value.then === 'function') {
20248      // This is a wakeable.
20249      var wakeable = value;
20250
20251      if ((sourceFiber.mode & BlockingMode) === NoMode) {
20252        // Reset the memoizedState to what it was before we attempted
20253        // to render it.
20254        var currentSource = sourceFiber.alternate;
20255
20256        if (currentSource) {
20257          sourceFiber.updateQueue = currentSource.updateQueue;
20258          sourceFiber.memoizedState = currentSource.memoizedState;
20259          sourceFiber.lanes = currentSource.lanes;
20260        } else {
20261          sourceFiber.updateQueue = null;
20262          sourceFiber.memoizedState = null;
20263        }
20264      }
20265
20266      var hasInvisibleParentBoundary = hasSuspenseContext(suspenseStackCursor.current, InvisibleParentSuspenseContext); // Schedule the nearest Suspense to re-render the timed out view.
20267
20268      var _workInProgress = returnFiber;
20269
20270      do {
20271        if (_workInProgress.tag === SuspenseComponent && shouldCaptureSuspense(_workInProgress, hasInvisibleParentBoundary)) {
20272          // Found the nearest boundary.
20273          // Stash the promise on the boundary fiber. If the boundary times out, we'll
20274          // attach another listener to flip the boundary back to its normal state.
20275          var wakeables = _workInProgress.updateQueue;
20276
20277          if (wakeables === null) {
20278            var updateQueue = new Set();
20279            updateQueue.add(wakeable);
20280            _workInProgress.updateQueue = updateQueue;
20281          } else {
20282            wakeables.add(wakeable);
20283          } // If the boundary is outside of blocking mode, we should *not*
20284          // suspend the commit. Pretend as if the suspended component rendered
20285          // null and keep rendering. In the commit phase, we'll schedule a
20286          // subsequent synchronous update to re-render the Suspense.
20287          //
20288          // Note: It doesn't matter whether the component that suspended was
20289          // inside a blocking mode tree. If the Suspense is outside of it, we
20290          // should *not* suspend the commit.
20291
20292
20293          if ((_workInProgress.mode & BlockingMode) === NoMode) {
20294            _workInProgress.flags |= DidCapture;
20295            sourceFiber.flags |= ForceUpdateForLegacySuspense; // We're going to commit this fiber even though it didn't complete.
20296            // But we shouldn't call any lifecycle methods or callbacks. Remove
20297            // all lifecycle effect tags.
20298
20299            sourceFiber.flags &= ~(LifecycleEffectMask | Incomplete);
20300
20301            if (sourceFiber.tag === ClassComponent) {
20302              var currentSourceFiber = sourceFiber.alternate;
20303
20304              if (currentSourceFiber === null) {
20305                // This is a new mount. Change the tag so it's not mistaken for a
20306                // completed class component. For example, we should not call
20307                // componentWillUnmount if it is deleted.
20308                sourceFiber.tag = IncompleteClassComponent;
20309              } else {
20310                // When we try rendering again, we should not reuse the current fiber,
20311                // since it's known to be in an inconsistent state. Use a force update to
20312                // prevent a bail out.
20313                var update = createUpdate(NoTimestamp, SyncLane);
20314                update.tag = ForceUpdate;
20315                enqueueUpdate(sourceFiber, update);
20316              }
20317            } // The source fiber did not complete. Mark it with Sync priority to
20318            // indicate that it still has pending work.
20319
20320
20321            sourceFiber.lanes = mergeLanes(sourceFiber.lanes, SyncLane); // Exit without suspending.
20322
20323            return;
20324          } // Confirmed that the boundary is in a concurrent mode tree. Continue
20325          // with the normal suspend path.
20326          //
20327          // After this we'll use a set of heuristics to determine whether this
20328          // render pass will run to completion or restart or "suspend" the commit.
20329          // The actual logic for this is spread out in different places.
20330          //
20331          // This first principle is that if we're going to suspend when we complete
20332          // a root, then we should also restart if we get an update or ping that
20333          // might unsuspend it, and vice versa. The only reason to suspend is
20334          // because you think you might want to restart before committing. However,
20335          // it doesn't make sense to restart only while in the period we're suspended.
20336          //
20337          // Restarting too aggressively is also not good because it starves out any
20338          // intermediate loading state. So we use heuristics to determine when.
20339          // Suspense Heuristics
20340          //
20341          // If nothing threw a Promise or all the same fallbacks are already showing,
20342          // then don't suspend/restart.
20343          //
20344          // If this is an initial render of a new tree of Suspense boundaries and
20345          // those trigger a fallback, then don't suspend/restart. We want to ensure
20346          // that we can show the initial loading state as quickly as possible.
20347          //
20348          // If we hit a "Delayed" case, such as when we'd switch from content back into
20349          // a fallback, then we should always suspend/restart. Transitions apply
20350          // to this case. If none is defined, JND is used instead.
20351          //
20352          // If we're already showing a fallback and it gets "retried", allowing us to show
20353          // another level, but there's still an inner boundary that would show a fallback,
20354          // then we suspend/restart for 500ms since the last time we showed a fallback
20355          // anywhere in the tree. This effectively throttles progressive loading into a
20356          // consistent train of commits. This also gives us an opportunity to restart to
20357          // get to the completed state slightly earlier.
20358          //
20359          // If there's ambiguity due to batching it's resolved in preference of:
20360          // 1) "delayed", 2) "initial render", 3) "retry".
20361          //
20362          // We want to ensure that a "busy" state doesn't get force committed. We want to
20363          // ensure that new initial loading states can commit as soon as possible.
20364
20365
20366          attachPingListener(root, wakeable, rootRenderLanes);
20367          _workInProgress.flags |= ShouldCapture;
20368          _workInProgress.lanes = rootRenderLanes;
20369          return;
20370        } // This boundary already captured during this render. Continue to the next
20371        // boundary.
20372
20373
20374        _workInProgress = _workInProgress.return;
20375      } while (_workInProgress !== null); // No boundary was found. Fallthrough to error mode.
20376      // TODO: Use invariant so the message is stripped in prod?
20377
20378
20379      value = new Error((getComponentName(sourceFiber.type) || 'A React component') + ' suspended while rendering, but no fallback UI was specified.\n' + '\n' + 'Add a <Suspense fallback=...> component higher in the tree to ' + 'provide a loading indicator or placeholder to display.');
20380    } // We didn't find a boundary that could handle this type of exception. Start
20381    // over and traverse parent path again, this time treating the exception
20382    // as an error.
20383
20384
20385    renderDidError();
20386    value = createCapturedValue(value, sourceFiber);
20387    var workInProgress = returnFiber;
20388
20389    do {
20390      switch (workInProgress.tag) {
20391        case HostRoot:
20392          {
20393            var _errorInfo = value;
20394            workInProgress.flags |= ShouldCapture;
20395            var lane = pickArbitraryLane(rootRenderLanes);
20396            workInProgress.lanes = mergeLanes(workInProgress.lanes, lane);
20397
20398            var _update = createRootErrorUpdate(workInProgress, _errorInfo, lane);
20399
20400            enqueueCapturedUpdate(workInProgress, _update);
20401            return;
20402          }
20403
20404        case ClassComponent:
20405          // Capture and retry
20406          var errorInfo = value;
20407          var ctor = workInProgress.type;
20408          var instance = workInProgress.stateNode;
20409
20410          if ((workInProgress.flags & DidCapture) === NoFlags && (typeof ctor.getDerivedStateFromError === 'function' || instance !== null && typeof instance.componentDidCatch === 'function' && !isAlreadyFailedLegacyErrorBoundary(instance))) {
20411            workInProgress.flags |= ShouldCapture;
20412
20413            var _lane = pickArbitraryLane(rootRenderLanes);
20414
20415            workInProgress.lanes = mergeLanes(workInProgress.lanes, _lane); // Schedule the error boundary to re-render using updated state
20416
20417            var _update2 = createClassErrorUpdate(workInProgress, errorInfo, _lane);
20418
20419            enqueueCapturedUpdate(workInProgress, _update2);
20420            return;
20421          }
20422
20423          break;
20424      }
20425
20426      workInProgress = workInProgress.return;
20427    } while (workInProgress !== null);
20428  }
20429
20430  var didWarnAboutUndefinedSnapshotBeforeUpdate = null;
20431
20432  {
20433    didWarnAboutUndefinedSnapshotBeforeUpdate = new Set();
20434  }
20435
20436  var PossiblyWeakSet = typeof WeakSet === 'function' ? WeakSet : Set;
20437
20438  var callComponentWillUnmountWithTimer = function (current, instance) {
20439    instance.props = current.memoizedProps;
20440    instance.state = current.memoizedState;
20441
20442    {
20443      instance.componentWillUnmount();
20444    }
20445  }; // Capture errors so they don't interrupt unmounting.
20446
20447
20448  function safelyCallComponentWillUnmount(current, instance) {
20449    {
20450      invokeGuardedCallback(null, callComponentWillUnmountWithTimer, null, current, instance);
20451
20452      if (hasCaughtError()) {
20453        var unmountError = clearCaughtError();
20454        captureCommitPhaseError(current, unmountError);
20455      }
20456    }
20457  }
20458
20459  function safelyDetachRef(current) {
20460    var ref = current.ref;
20461
20462    if (ref !== null) {
20463      if (typeof ref === 'function') {
20464        {
20465          invokeGuardedCallback(null, ref, null, null);
20466
20467          if (hasCaughtError()) {
20468            var refError = clearCaughtError();
20469            captureCommitPhaseError(current, refError);
20470          }
20471        }
20472      } else {
20473        ref.current = null;
20474      }
20475    }
20476  }
20477
20478  function safelyCallDestroy(current, destroy) {
20479    {
20480      invokeGuardedCallback(null, destroy, null);
20481
20482      if (hasCaughtError()) {
20483        var error = clearCaughtError();
20484        captureCommitPhaseError(current, error);
20485      }
20486    }
20487  }
20488
20489  function commitBeforeMutationLifeCycles(current, finishedWork) {
20490    switch (finishedWork.tag) {
20491      case FunctionComponent:
20492      case ForwardRef:
20493      case SimpleMemoComponent:
20494      case Block:
20495        {
20496          return;
20497        }
20498
20499      case ClassComponent:
20500        {
20501          if (finishedWork.flags & Snapshot) {
20502            if (current !== null) {
20503              var prevProps = current.memoizedProps;
20504              var prevState = current.memoizedState;
20505              var instance = finishedWork.stateNode; // We could update instance props and state here,
20506              // but instead we rely on them being set during last render.
20507              // TODO: revisit this when we implement resuming.
20508
20509              {
20510                if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {
20511                  if (instance.props !== finishedWork.memoizedProps) {
20512                    error('Expected %s props to match memoized props before ' + 'getSnapshotBeforeUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');
20513                  }
20514
20515                  if (instance.state !== finishedWork.memoizedState) {
20516                    error('Expected %s state to match memoized state before ' + 'getSnapshotBeforeUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.state`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');
20517                  }
20518                }
20519              }
20520
20521              var snapshot = instance.getSnapshotBeforeUpdate(finishedWork.elementType === finishedWork.type ? prevProps : resolveDefaultProps(finishedWork.type, prevProps), prevState);
20522
20523              {
20524                var didWarnSet = didWarnAboutUndefinedSnapshotBeforeUpdate;
20525
20526                if (snapshot === undefined && !didWarnSet.has(finishedWork.type)) {
20527                  didWarnSet.add(finishedWork.type);
20528
20529                  error('%s.getSnapshotBeforeUpdate(): A snapshot value (or null) ' + 'must be returned. You have returned undefined.', getComponentName(finishedWork.type));
20530                }
20531              }
20532
20533              instance.__reactInternalSnapshotBeforeUpdate = snapshot;
20534            }
20535          }
20536
20537          return;
20538        }
20539
20540      case HostRoot:
20541        {
20542          {
20543            if (finishedWork.flags & Snapshot) {
20544              var root = finishedWork.stateNode;
20545              clearContainer(root.containerInfo);
20546            }
20547          }
20548
20549          return;
20550        }
20551
20552      case HostComponent:
20553      case HostText:
20554      case HostPortal:
20555      case IncompleteClassComponent:
20556        // Nothing to do for these component types
20557        return;
20558    }
20559
20560    {
20561      {
20562        throw Error( "This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue." );
20563      }
20564    }
20565  }
20566
20567  function commitHookEffectListUnmount(tag, finishedWork) {
20568    var updateQueue = finishedWork.updateQueue;
20569    var lastEffect = updateQueue !== null ? updateQueue.lastEffect : null;
20570
20571    if (lastEffect !== null) {
20572      var firstEffect = lastEffect.next;
20573      var effect = firstEffect;
20574
20575      do {
20576        if ((effect.tag & tag) === tag) {
20577          // Unmount
20578          var destroy = effect.destroy;
20579          effect.destroy = undefined;
20580
20581          if (destroy !== undefined) {
20582            destroy();
20583          }
20584        }
20585
20586        effect = effect.next;
20587      } while (effect !== firstEffect);
20588    }
20589  }
20590
20591  function commitHookEffectListMount(tag, finishedWork) {
20592    var updateQueue = finishedWork.updateQueue;
20593    var lastEffect = updateQueue !== null ? updateQueue.lastEffect : null;
20594
20595    if (lastEffect !== null) {
20596      var firstEffect = lastEffect.next;
20597      var effect = firstEffect;
20598
20599      do {
20600        if ((effect.tag & tag) === tag) {
20601          // Mount
20602          var create = effect.create;
20603          effect.destroy = create();
20604
20605          {
20606            var destroy = effect.destroy;
20607
20608            if (destroy !== undefined && typeof destroy !== 'function') {
20609              var addendum = void 0;
20610
20611              if (destroy === null) {
20612                addendum = ' You returned null. If your effect does not require clean ' + 'up, return undefined (or nothing).';
20613              } else if (typeof destroy.then === 'function') {
20614                addendum = '\n\nIt looks like you wrote useEffect(async () => ...) or returned a Promise. ' + 'Instead, write the async function inside your effect ' + 'and call it immediately:\n\n' + 'useEffect(() =>
20614 {\n' + '  async function fetchData() {\n' + '    // You can await here\n' + '    const response = await MyAPI.getData(someId);\n' + '    // ...\n' + '  }\n' + '  fetchData();\n' + "}, [someId]); // Or [] if effect doesn't need props or state\n\n" + 'Learn more about data fetching with Hooks: https://reactjs.org/link/hooks-data-fetching';
20615              } else {
20616                addendum = ' You returned: ' + destroy;
20617              }
20618
20619              error('An effect function must not return anything besides a function, ' + 'which is used for clean-up.%s', addendum);
20620            }
20621          }
20622        }
20623
20624        effect = effect.next;
20625      } while (effect !== firstEffect);
20626    }
20627  }
20628
20629  function schedulePassiveEffects(finishedWork) {
20630    var updateQueue = finishedWork.updateQueue;
20631    var lastEffect = updateQueue !== null ? updateQueue.lastEffect : null;
20632
20633    if (lastEffect !== null) {
20634      var firstEffect = lastEffect.next;
20635      var effect = firstEffect;
20636
20637      do {
20638        var _effect = effect,
20639            next = _effect.next,
20640            tag = _effect.tag;
20641
20642        if ((tag & Passive$1) !== NoFlags$1 && (tag & HasEffect) !== NoFlags$1) {
20643          enqueuePendingPassiveHookEffectUnmount(finishedWork, effect);
20644          enqueuePendingPassiveHookEffectMount(finishedWork, effect);
20645        }
20646
20647        effect = next;
20648      } while (effect !== firstEffect);
20649    }
20650  }
20651
20652  function commitLifeCycles(finishedRoot, current, finishedWork, committedLanes) {
20653    switch (finishedWork.tag) {
20654      case FunctionComponent:
20655      case ForwardRef:
20656      case SimpleMemoComponent:
20657      case Block:
20658        {
20659          // At this point layout effects have already been destroyed (during mutation phase).
20660          // This is done to prevent sibling component effects from interfering with each other,
20661          // e.g. a destroy function in one component should never override a ref set
20662          // by a create function in another component during the same commit.
20663          {
20664            commitHookEffectListMount(Layout | HasEffect, finishedWork);
20665          }
20666
20667          schedulePassiveEffects(finishedWork);
20668          return;
20669        }
20670
20671      case ClassComponent:
20672        {
20673          var instance = finishedWork.stateNode;
20674
20675          if (finishedWork.flags & Update) {
20676            if (current === null) {
20677              // We could update instance props and state here,
20678              // but instead we rely on them being set during last render.
20679              // TODO: revisit this when we implement resuming.
20680              {
20681                if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {
20682                  if (instance.props !== finishedWork.memoizedProps) {
20683                    error('Expected %s props to match memoized props before ' + 'componentDidMount. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');
20684                  }
20685
20686                  if (instance.state !== finishedWork.memoizedState) {
20687                    error('Expected %s state to match memoized state before ' + 'componentDidMount. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.state`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');
20688                  }
20689                }
20690              }
20691
20692              {
20693                instance.componentDidMount();
20694              }
20695            } else {
20696              var prevProps = finishedWork.elementType === finishedWork.type ? current.memoizedProps : resolveDefaultProps(finishedWork.type, current.memoizedProps);
20697              var prevState = current.memoizedState; // We could update instance props and state here,
20698              // but instead we rely on them being set during last render.
20699              // TODO: revisit this when we implement resuming.
20700
20701              {
20702                if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {
20703                  if (instance.props !== finishedWork.memoizedProps) {
20704                    error('Expected %s props to match memoized props before ' + 'componentDidUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');
20705                  }
20706
20707                  if (instance.state !== finishedWork.memoizedState) {
20708                    error('Expected %s state to match memoized state before ' + 'componentDidUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.state`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');
20709                  }
20710                }
20711              }
20712
20713              {
20714                instance.componentDidUpdate(prevProps, prevState, instance.__reactInternalSnapshotBeforeUpdate);
20715              }
20716            }
20717          } // TODO: I think this is now always non-null by the time it reaches the
20718          // commit phase. Consider removing the type check.
20719
20720
20721          var updateQueue = finishedWork.updateQueue;
20722
20723          if (updateQueue !== null) {
20724            {
20725              if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {
20726                if (instance.props !== finishedWork.memoizedProps) {
20727                  error('Expected %s props to match memoized props before ' + 'processing the update queue. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');
20728                }
20729
20730                if (instance.state !== finishedWork.memoizedState) {
20731                  error('Expected %s state to match memoized state before ' + 'processing the update queue. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.state`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');
20732                }
20733              }
20734            } // We could update instance props and state here,
20735            // but instead we rely on them being set during last render.
20736            // TODO: revisit this when we implement resuming.
20737
20738
20739            commitUpdateQueue(finishedWork, updateQueue, instance);
20740          }
20741
20742          return;
20743        }
20744
20745      case HostRoot:
20746        {
20747          // TODO: I think this is now always non-null by the time it reaches the
20748          // commit phase. Consider removing the type check.
20749          var _updateQueue = finishedWork.updateQueue;
20750
20751          if (_updateQueue !== null) {
20752            var _instance = null;
20753
20754            if (finishedWork.child !== null) {
20755              switch (finishedWork.child.tag) {
20756                case HostComponent:
20757                  _instance = getPublicInstance(finishedWork.child.stateNode);
20758                  break;
20759
20760                case ClassComponent:
vendor: 4,920 bytes, lines 20761-20929
20761                  _instance = finishedWork.child.stateNode;
20762                  break;
20763              }
20764            }
20765
20766            commitUpdateQueue(finishedWork, _updateQueue, _instance);
20767          }
20768
20769          return;
20770        }
20771
20772      case HostComponent:
20773        {
20774          var _instance2 = finishedWork.stateNode; // Renderers may schedule work to be done after host components are mounted
20775          // (eg DOM renderer may schedule auto-focus for inputs and form controls).
20776          // These effects should only be committed when components are first mounted,
20777          // aka when there is no current/alternate.
20778
20779          if (current === null && finishedWork.flags & Update) {
20780            var type = finishedWork.type;
20781            var props = finishedWork.memoizedProps;
20782            commitMount(_instance2, type, props);
20783          }
20784
20785          return;
20786        }
20787
20788      case HostText:
20789        {
20790          // We have no life-cycles associated with text.
20791          return;
20792        }
20793
20794      case HostPortal:
20795        {
20796          // We have no life-cycles associated with portals.
20797          return;
20798        }
20799
20800      case Profiler:
20801        {
20802          {
20803            var _finishedWork$memoize2 = finishedWork.memoizedProps,
20804                onCommit = _finishedWork$memoize2.onCommit,
20805                onRender = _finishedWork$memoize2.onRender;
20806            var effectDuration = finishedWork.stateNode.effectDuration;
20807            var commitTime = getCommitTime();
20808
20809            if (typeof onRender === 'function') {
20810              {
20811                onRender(finishedWork.memoizedProps.id, current === null ? 'mount' : 'update', finishedWork.actualDuration, finishedWork.treeBaseDuration, finishedWork.actualStartTime, commitTime, finishedRoot.memoizedInteractions);
20812              }
20813            }
20814          }
20815
20816          return;
20817        }
20818
20819      case SuspenseComponent:
20820        {
20821          commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);
20822          return;
20823        }
20824
20825      case SuspenseListComponent:
20826      case IncompleteClassComponent:
20827      case FundamentalComponent:
20828      case ScopeComponent:
20829      case OffscreenComponent:
20830      case LegacyHiddenComponent:
20831        return;
20832    }
20833
20834    {
20835      {
20836        throw Error( "This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue." );
20837      }
20838    }
20839  }
20840
20841  function hideOrUnhideAllChildren(finishedWork, isHidden) {
20842    {
20843      // We only have the top Fiber that was inserted but we need to recurse down its
20844      // children to find all the terminal nodes.
20845      var node = finishedWork;
20846
20847      while (true) {
20848        if (node.tag === HostComponent) {
20849          var instance = node.stateNode;
20850
20851          if (isHidden) {
20852            hideInstance(instance);
20853          } else {
20854            unhideInstance(node.stateNode, node.memoizedProps);
20855          }
20856        } else if (node.tag === HostText) {
20857          var _instance3 = node.stateNode;
20858
20859          if (isHidden) {
20860            hideTextInstance(_instance3);
20861          } else {
20862            unhideTextInstance(_instance3, node.memoizedProps);
20863          }
20864        } else if ((node.tag === OffscreenComponent || node.tag === LegacyHiddenComponent) && node.memoizedState !== null && node !== finishedWork) ; else if (node.child !== null) {
20865          node.child.return = node;
20866          node = node.child;
20867          continue;
20868        }
20869
20870        if (node === finishedWork) {
20871          return;
20872        }
20873
20874        while (node.sibling === null) {
20875          if (node.return === null || node.return === finishedWork) {
20876            return;
20877          }
20878
20879          node = node.return;
20880        }
20881
20882        node.sibling.return = node.return;
20883        node = node.sibling;
20884      }
20885    }
20886  }
20887
20888  function commitAttachRef(finishedWork) {
20889    var ref = finishedWork.ref;
20890
20891    if (ref !== null) {
20892      var instance = finishedWork.stateNode;
20893      var instanceToUse;
20894
20895      switch (finishedWork.tag) {
20896        case HostComponent:
20897          instanceToUse = getPublicInstance(instance);
20898          break;
20899
20900        default:
20901          instanceToUse = instance;
20902      } // Moved outside to ensure DCE works with this flag
20903
20904      if (typeof ref === 'function') {
20905        ref(instanceToUse);
20906      } else {
20907        {
20908          if (!ref.hasOwnProperty('current')) {
20909            error('Unexpected ref object provided for %s. ' + 'Use either a ref-setter function or React.createRef().', getComponentName(finishedWork.type));
20910          }
20911        }
20912
20913        ref.current = instanceToUse;
20914      }
20915    }
20916  }
20917
20918  function commitDetachRef(current) {
20919    var currentRef = current.ref;
20920
20921    if (currentRef !== null) {
20922      if (typeof currentRef === 'function') {
20923        currentRef(null);
20924      } else {
20925        currentRef.current = null;
20926      }
20927    }
20928  } // User-originating errors (lifecycles and refs) should not interrupt
20929  // deletion, so don't let them throw. Host-originating errors should
vendor: 4,256 bytes, lines 20930-21074
20930  // interrupt deletion, so it's okay
20931
20932
20933  function commitUnmount(finishedRoot, current, renderPriorityLevel) {
20934    onCommitUnmount(current);
20935
20936    switch (current.tag) {
20937      case FunctionComponent:
20938      case ForwardRef:
20939      case MemoComponent:
20940      case SimpleMemoComponent:
20941      case Block:
20942        {
20943          var updateQueue = current.updateQueue;
20944
20945          if (updateQueue !== null) {
20946            var lastEffect = updateQueue.lastEffect;
20947
20948            if (lastEffect !== null) {
20949              var firstEffect = lastEffect.next;
20950              var effect = firstEffect;
20951
20952              do {
20953                var _effect2 = effect,
20954                    destroy = _effect2.destroy,
20955                    tag = _effect2.tag;
20956
20957                if (destroy !== undefined) {
20958                  if ((tag & Passive$1) !== NoFlags$1) {
20959                    enqueuePendingPassiveHookEffectUnmount(current, effect);
20960                  } else {
20961                    {
20962                      safelyCallDestroy(current, destroy);
20963                    }
20964                  }
20965                }
20966
20967                effect = effect.next;
20968              } while (effect !== firstEffect);
20969            }
20970          }
20971
20972          return;
20973        }
20974
20975      case ClassComponent:
20976        {
20977          safelyDetachRef(current);
20978          var instance = current.stateNode;
20979
20980          if (typeof instance.componentWillUnmount === 'function') {
20981            safelyCallComponentWillUnmount(current, instance);
20982          }
20983
20984          return;
20985        }
20986
20987      case HostComponent:
20988        {
20989          safelyDetachRef(current);
20990          return;
20991        }
20992
20993      case HostPortal:
20994        {
20995          // TODO: this is recursive.
20996          // We are also not using this parent because
20997          // the portal will get pushed immediately.
20998          {
20999            unmountHostComponents(finishedRoot, current);
21000          }
21001
21002          return;
21003        }
21004
21005      case FundamentalComponent:
21006        {
21007
21008          return;
21009        }
21010
21011      case DehydratedFragment:
21012        {
21013
21014          return;
21015        }
21016
21017      case ScopeComponent:
21018        {
21019
21020          return;
21021        }
21022    }
21023  }
21024
21025  function commitNestedUnmounts(finishedRoot, root, renderPriorityLevel) {
21026    // While we're inside a removed host node we don't want to call
21027    // removeChild on the inner nodes because they're removed by the top
21028    // call anyway. We also want to call componentWillUnmount on all
21029    // composites before this host node is removed from the tree. Therefore
21030    // we do an inner loop while we're still inside the host node.
21031    var node = root;
21032
21033    while (true) {
21034      commitUnmount(finishedRoot, node); // Visit children because they may contain more composite or host nodes.
21035      // Skip portals because commitUnmount() currently visits them recursively.
21036
21037      if (node.child !== null && ( // If we use mutation we drill down into portals using commitUnmount above.
21038      // If we don't use mutation we drill down into portals here instead.
21039       node.tag !== HostPortal)) {
21040        node.child.return = node;
21041        node = node.child;
21042        continue;
21043      }
21044
21045      if (node === root) {
21046        return;
21047      }
21048
21049      while (node.sibling === null) {
21050        if (node.return === null || node.return === root) {
21051          return;
21052        }
21053
21054        node = node.return;
21055      }
21056
21057      node.sibling.return = node.return;
21058      node = node.sibling;
21059    }
21060  }
21061
21062  function detachFiberMutation(fiber) {
21063    // Cut off the return pointers to disconnect it from the tree. Ideally, we
21064    // should clear the child pointer of the parent alternate to let this
21065    // get GC:ed but we don't know which for sure which parent is the current
21066    // one so we'll settle for GC:ing the subtree of this child. This child
21067    // itself will be GC:ed when the parent updates the next time.
21068    // Note: we cannot null out sibling here, otherwise it can cause issues
21069    // with findDOMNode and how it requires the sibling field to carry out
21070    // traversal in a later effect. See PR #16820. We now clear the sibling
21071    // field after effects, see: detachFiberAfterEffects.
21072    //
21073    // Don't disconnect stateNode now; it will be detached in detachFiberAfterEffects.
21074    // It may be required if the current component is an error boundary,
vendor: 15,201 bytes, lines 21075-21579
21075    // and one of its descendants throws while unmounting a passive effect.
21076    fiber.alternate = null;
21077    fiber.child = null;
21078    fiber.dependencies = null;
21079    fiber.firstEffect = null;
21080    fiber.lastEffect = null;
21081    fiber.memoizedProps = null;
21082    fiber.memoizedState = null;
21083    fiber.pendingProps = null;
21084    fiber.return = null;
21085    fiber.updateQueue = null;
21086
21087    {
21088      fiber._debugOwner = null;
21089    }
21090  }
21091
21092  function getHostParentFiber(fiber) {
21093    var parent = fiber.return;
21094
21095    while (parent !== null) {
21096      if (isHostParent(parent)) {
21097        return parent;
21098      }
21099
21100      parent = parent.return;
21101    }
21102
21103    {
21104      {
21105        throw Error( "Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue." );
21106      }
21107    }
21108  }
21109
21110  function isHostParent(fiber) {
21111    return fiber.tag === HostComponent || fiber.tag === HostRoot || fiber.tag === HostPortal;
21112  }
21113
21114  function getHostSibling(fiber) {
21115    // We're going to search forward into the tree until we find a sibling host
21116    // node. Unfortunately, if multiple insertions are done in a row we have to
21117    // search past them. This leads to exponential search for the next sibling.
21118    // TODO: Find a more efficient way to do this.
21119    var node = fiber;
21120
21121    siblings: while (true) {
21122      // If we didn't find anything, let's try the next sibling.
21123      while (node.sibling === null) {
21124        if (node.return === null || isHostParent(node.return)) {
21125          // If we pop out of the root or hit the parent the fiber we are the
21126          // last sibling.
21127          return null;
21128        }
21129
21130        node = node.return;
21131      }
21132
21133      node.sibling.return = node.return;
21134      node = node.sibling;
21135
21136      while (node.tag !== HostComponent && node.tag !== HostText && node.tag !== DehydratedFragment) {
21137        // If it is not host node and, we might have a host node inside it.
21138        // Try to search down until we find one.
21139        if (node.flags & Placement) {
21140          // If we don't have a child, try the siblings instead.
21141          continue siblings;
21142        } // If we don't have a child, try the siblings instead.
21143        // We also skip portals because they are not part of this host tree.
21144
21145
21146        if (node.child === null || node.tag === HostPortal) {
21147          continue siblings;
21148        } else {
21149          node.child.return = node;
21150          node = node.child;
21151        }
21152      } // Check if this host node is stable or about to be placed.
21153
21154
21155      if (!(node.flags & Placement)) {
21156        // Found it!
21157        return node.stateNode;
21158      }
21159    }
21160  }
21161
21162  function commitPlacement(finishedWork) {
21163
21164
21165    var parentFiber = getHostParentFiber(finishedWork); // Note: these two variables *must* always be updated together.
21166
21167    var parent;
21168    var isContainer;
21169    var parentStateNode = parentFiber.stateNode;
21170
21171    switch (parentFiber.tag) {
21172      case HostComponent:
21173        parent = parentStateNode;
21174        isContainer = false;
21175        break;
21176
21177      case HostRoot:
21178        parent = parentStateNode.containerInfo;
21179        isContainer = true;
21180        break;
21181
21182      case HostPortal:
21183        parent = parentStateNode.containerInfo;
21184        isContainer = true;
21185        break;
21186
21187      case FundamentalComponent:
21188
21189      // eslint-disable-next-line-no-fallthrough
21190
21191      default:
21192        {
21193          {
21194            throw Error( "Invalid host parent fiber. This error is likely caused by a bug in React. Please file an issue." );
21195          }
21196        }
21197
21198    }
21199
21200    if (parentFiber.flags & ContentReset) {
21201      // Reset the text content of the parent before doing any insertions
21202      resetTextContent(parent); // Clear ContentReset from the effect tag
21203
21204      parentFiber.flags &= ~ContentReset;
21205    }
21206
21207    var before = getHostSibling(finishedWork); // We only have the top Fiber that was inserted but we need to recurse down its
21208    // children to find all the terminal nodes.
21209
21210    if (isContainer) {
21211      insertOrAppendPlacementNodeIntoContainer(finishedWork, before, parent);
21212    } else {
21213      insertOrAppendPlacementNode(finishedWork, before, parent);
21214    }
21215  }
21216
21217  function insertOrAppendPlacementNodeIntoContainer(node, before, parent) {
21218    var tag = node.tag;
21219    var isHost = tag === HostComponent || tag === HostText;
21220
21221    if (isHost || enableFundamentalAPI ) {
21222      var stateNode = isHost ? node.stateNode : node.stateNode.instance;
21223
21224      if (before) {
21225        insertInContainerBefore(parent, stateNode, before);
21226      } else {
21227        appendChildToContainer(parent, stateNode);
21228      }
21229    } else if (tag === HostPortal) ; else {
21230      var child = node.child;
21231
21232      if (child !== null) {
21233        insertOrAppendPlacementNodeIntoContainer(child, before, parent);
21234        var sibling = child.sibling;
21235
21236        while (sibling !== null) {
21237          insertOrAppendPlacementNodeIntoContainer(sibling, before, parent);
21238          sibling = sibling.sibling;
21239        }
21240      }
21241    }
21242  }
21243
21244  function insertOrAppendPlacementNode(node, before, parent) {
21245    var tag = node.tag;
21246    var isHost = tag === HostComponent || tag === HostText;
21247
21248    if (isHost || enableFundamentalAPI ) {
21249      var stateNode = isHost ? node.stateNode : node.stateNode.instance;
21250
21251      if (before) {
21252        insertBefore(parent, stateNode, before);
21253      } else {
21254        appendChild(parent, stateNode);
21255      }
21256    } else if (tag === HostPortal) ; else {
21257      var child = node.child;
21258
21259      if (child !== null) {
21260        insertOrAppendPlacementNode(child, before, parent);
21261        var sibling = child.sibling;
21262
21263        while (sibling !== null) {
21264          insertOrAppendPlacementNode(sibling, before, parent);
21265          sibling = sibling.sibling;
21266        }
21267      }
21268    }
21269  }
21270
21271  function unmountHostComponents(finishedRoot, current, renderPriorityLevel) {
21272    // We only have the top Fiber that was deleted but we need to recurse down its
21273    // children to find all the terminal nodes.
21274    var node = current; // Each iteration, currentParent is populated with node's host parent if not
21275    // currentParentIsValid.
21276
21277    var currentParentIsValid = false; // Note: these two variables *must* always be updated together.
21278
21279    var currentParent;
21280    var currentParentIsContainer;
21281
21282    while (true) {
21283      if (!currentParentIsValid) {
21284        var parent = node.return;
21285
21286        findParent: while (true) {
21287          if (!(parent !== null)) {
21288            {
21289              throw Error( "Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue." );
21290            }
21291          }
21292
21293          var parentStateNode = parent.stateNode;
21294
21295          switch (parent.tag) {
21296            case HostComponent:
21297              currentParent = parentStateNode;
21298              currentParentIsContainer = false;
21299              break findParent;
21300
21301            case HostRoot:
21302              currentParent = parentStateNode.containerInfo;
21303              currentParentIsContainer = true;
21304              break findParent;
21305
21306            case HostPortal:
21307              currentParent = parentStateNode.containerInfo;
21308              currentParentIsContainer = true;
21309              break findParent;
21310
21311          }
21312
21313          parent = parent.return;
21314        }
21315
21316        currentParentIsValid = true;
21317      }
21318
21319      if (node.tag === HostComponent || node.tag === HostText) {
21320        commitNestedUnmounts(finishedRoot, node); // After all the children have unmounted, it is now safe to remove the
21321        // node from the tree.
21322
21323        if (currentParentIsContainer) {
21324          removeChildFromContainer(currentParent, node.stateNode);
21325        } else {
21326          removeChild(currentParent, node.stateNode);
21327        } // Don't visit children because we already visited them.
21328
21329      } else if (node.tag === HostPortal) {
21330        if (node.child !== null) {
21331          // When we go into a portal, it becomes the parent to remove from.
21332          // We will reassign it back when we pop the portal on the way up.
21333          currentParent = node.stateNode.containerInfo;
21334          currentParentIsContainer = true; // Visit children because portals might contain host components.
21335
21336          node.child.return = node;
21337          node = node.child;
21338          continue;
21339        }
21340      } else {
21341        commitUnmount(finishedRoot, node); // Visit children because we may find more host components below.
21342
21343        if (node.child !== null) {
21344          node.child.return = node;
21345          node = node.child;
21346          continue;
21347        }
21348      }
21349
21350      if (node === current) {
21351        return;
21352      }
21353
21354      while (node.sibling === null) {
21355        if (node.return === null || node.return === current) {
21356          return;
21357        }
21358
21359        node = node.return;
21360
21361        if (node.tag === HostPortal) {
21362          // When we go out of the portal, we need to restore the parent.
21363          // Since we don't keep a stack of them, we will search for it.
21364          currentParentIsValid = false;
21365        }
21366      }
21367
21368      node.sibling.return = node.return;
21369      node = node.sibling;
21370    }
21371  }
21372
21373  function commitDeletion(finishedRoot, current, renderPriorityLevel) {
21374    {
21375      // Recursively delete all host nodes from the parent.
21376      // Detach refs and call componentWillUnmount() on the whole subtree.
21377      unmountHostComponents(finishedRoot, current);
21378    }
21379
21380    var alternate = current.alternate;
21381    detachFiberMutation(current);
21382
21383    if (alternate !== null) {
21384      detachFiberMutation(alternate);
21385    }
21386  }
21387
21388  function commitWork(current, finishedWork) {
21389
21390    switch (finishedWork.tag) {
21391      case FunctionComponent:
21392      case ForwardRef:
21393      case MemoComponent:
21394      case SimpleMemoComponent:
21395      case Block:
21396        {
21397          // Layout effects are destroyed during the mutation phase so that all
21398          // destroy functions for all fibers are called before any create functions.
21399          // This prevents sibling component effects from interfering with each other,
21400          // e.g. a destroy function in one component should never override a ref set
21401          // by a create function in another component during the same commit.
21402          {
21403            commitHookEffectListUnmount(Layout | HasEffect, finishedWork);
21404          }
21405
21406          return;
21407        }
21408
21409      case ClassComponent:
21410        {
21411          return;
21412        }
21413
21414      case HostComponent:
21415        {
21416          var instance = finishedWork.stateNode;
21417
21418          if (instance != null) {
21419            // Commit the work prepared earlier.
21420            var newProps = finishedWork.memoizedProps; // For hydration we reuse the update path but we treat the oldProps
21421            // as the newProps. The updatePayload will contain the real change in
21422            // this case.
21423
21424            var oldProps = current !== null ? current.memoizedProps : newProps;
21425            var type = finishedWork.type; // TODO: Type the updateQueue to be specific to host components.
21426
21427            var updatePayload = finishedWork.updateQueue;
21428            finishedWork.updateQueue = null;
21429
21430            if (updatePayload !== null) {
21431              commitUpdate(instance, updatePayload, type, oldProps, newProps);
21432            }
21433          }
21434
21435          return;
21436        }
21437
21438      case HostText:
21439        {
21440          if (!(finishedWork.stateNode !== null)) {
21441            {
21442              throw Error( "This should have a text node initialized. This error is likely caused by a bug in React. Please file an issue." );
21443            }
21444          }
21445
21446          var textInstance = finishedWork.stateNode;
21447          var newText = finishedWork.memoizedProps; // For hydration we reuse the update path but we treat the oldProps
21448          // as the newProps. The updatePayload will contain the real change in
21449          // this case.
21450
21451          var oldText = current !== null ? current.memoizedProps : newText;
21452          commitTextUpdate(textInstance, oldText, newText);
21453          return;
21454        }
21455
21456      case HostRoot:
21457        {
21458          {
21459            var _root = finishedWork.stateNode;
21460
21461            if (_root.hydrate) {
21462              // We've just hydrated. No need to hydrate again.
21463              _root.hydrate = false;
21464              commitHydratedContainer(_root.containerInfo);
21465            }
21466          }
21467
21468          return;
21469        }
21470
21471      case Profiler:
21472        {
21473          return;
21474        }
21475
21476      case SuspenseComponent:
21477        {
21478          commitSuspenseComponent(finishedWork);
21479          attachSuspenseRetryListeners(finishedWork);
21480          return;
21481        }
21482
21483      case SuspenseListComponent:
21484        {
21485          attachSuspenseRetryListeners(finishedWork);
21486          return;
21487        }
21488
21489      case IncompleteClassComponent:
21490        {
21491          return;
21492        }
21493
21494      case FundamentalComponent:
21495        {
21496
21497          break;
21498        }
21499
21500      case ScopeComponent:
21501        {
21502
21503          break;
21504        }
21505
21506      case OffscreenComponent:
21507      case LegacyHiddenComponent:
21508        {
21509          var newState = finishedWork.memoizedState;
21510          var isHidden = newState !== null;
21511          hideOrUnhideAllChildren(finishedWork, isHidden);
21512          return;
21513        }
21514    }
21515
21516    {
21517      {
21518        throw Error( "This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue." );
21519      }
21520    }
21521  }
21522
21523  function commitSuspenseComponent(finishedWork) {
21524    var newState = finishedWork.memoizedState;
21525
21526    if (newState !== null) {
21527      markCommitTimeOfFallback();
21528
21529      {
21530        // Hide the Offscreen component that contains the primary children. TODO:
21531        // Ideally, this effect would have been scheduled on the Offscreen fiber
21532        // itself. That's how unhiding works: the Offscreen component schedules an
21533        // effect on itself. However, in this case, the component didn't complete,
21534        // so the fiber was never added to the effect list in the normal path. We
21535        // could have appended it to the effect list in the Suspense component's
21536        // second pass, but doing it this way is less complicated. This would be
21537        // simpler if we got rid of the effect list and traversed the tree, like
21538        // we're planning to do.
21539        var primaryChildParent = finishedWork.child;
21540        hideOrUnhideAllChildren(primaryChildParent, true);
21541      }
21542    }
21543  }
21544
21545  function commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {
21546
21547    var newState = finishedWork.memoizedState;
21548
21549    if (newState === null) {
21550      var current = finishedWork.alternate;
21551
21552      if (current !== null) {
21553        var prevState = current.memoizedState;
21554
21555        if (prevState !== null) {
21556          var suspenseInstance = prevState.dehydrated;
21557
21558          if (suspenseInstance !== null) {
21559            commitHydratedSuspenseInstance(suspenseInstance);
21560          }
21561        }
21562      }
21563    }
21564  }
21565
21566  function attachSuspenseRetryListeners(finishedWork) {
21567    // If this boundary just timed out, then it will have a set of wakeables.
21568    // For each wakeable, attach a listener so that when it resolves, React
21569    // attempts to re-render the boundary in the primary (pre-timeout) state.
21570    var wakeables = finishedWork.updateQueue;
21571
21572    if (wakeables !== null) {
21573      finishedWork.updateQueue = null;
21574      var retryCache = finishedWork.stateNode;
21575
21576      if (retryCache === null) {
21577        retryCache = finishedWork.stateNode = new PossiblyWeakSet();
21578      }
21579
21580      wakeables.forEach(function (wakeable) {
21581        // Memoize using the boundary fiber to prevent redundant listeners.
21582        var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);
21583
21584        if (!retryCache.has(wakeable)) {
21585          {
21586            if (wakeable.__reactDoNotTraceInteractions !== true) {
21587              retry = unstable_wrap(retry);
21588            }
21589          }
21590
21591          retryCache.add(wakeable);
21592          wakeable.then(retry, retry);
21593        }
21594      });
21595    }
21596  } // This function detects when a Suspense boundary goes from visible to hidden.
21597  // It returns false if the boundary is already hidden.
21598  // TODO: Use an effect tag.
21599
21600
21601  function isSuspenseBoundaryBeingHidden(current, finishedWork) {
21602    if (current !== null) {
21603      var oldState = current.memoizedState;
21604
21605      if (oldState === null || oldState.dehydrated !== null) {
21606        var newState = finishedWork.memoizedState;
21607        return newState !== null && newState.dehydrated === null;
21608      }
21609    }
21610
21611    return false;
21612  }
21613
21614  function commitResetTextContent(current) {
21615
21616    resetTextContent(current.stateNode);
21617  }
21618
21619  var COMPONENT_TYPE = 0;
21620  var HAS_PSEUDO_CLASS_TYPE = 1;
21621  var ROLE_TYPE = 2;
21622  var TEST_NAME_TYPE = 3;
21623  var TEXT_TYPE = 4;
21624
21625  if (typeof Symbol === 'function' && Symbol.for) {
21626    var symbolFor$1 = Symbol.for;
21627    COMPONENT_TYPE = symbolFor$1('selector.component');
21628    HAS_PSEUDO_CLASS_TYPE = symbolFor$1('selector.has_pseudo_class');
21629    ROLE_TYPE = symbolFor$1('selector.role');
21630    TEST_NAME_TYPE = symbolFor$1('selector.test_id');
21631    TEXT_TYPE = symbolFor$1('selector.text');
21632  }
21633  var commitHooks = [];
21634  function onCommitRoot$1() {
21635    {
21636      commitHooks.forEach(function (commitHook) {
21637        return commitHook();
21638      });
21639    }
21640  }
21641
21642  var ceil = Math.ceil;
21643  var ReactCurrentDispatcher$2 = ReactSharedInternals.ReactCurrentDispatcher,
21644      ReactCurrentOwner$2 = ReactSharedInternals.ReactCurrentOwner,
21645      IsSomeRendererActing = ReactSharedInternals.IsSomeRendererActing;
21646  var NoContext =
21647  /*             */
21648  0;
21649  var BatchedContext =
21650  /*               */
21651  1;
21652  var EventContext =
21653  /*                 */
21654  2;
21655  var DiscreteEventContext =
21656  /*         */
21657  4;
21658  var LegacyUnbatchedContext =
21659  /*       */
21660  8;
21661  var RenderContext =
21662  /*                */
21663  16;
21664  var CommitContext =
21665  /*                */
21666  32;
21667  var RetryAfterError =
21668  /*       */
21669  64;
21670  var RootIncomplete = 0;
21671  var RootFatalErrored = 1;
21672  var RootErrored = 2;
21673  var RootSuspended = 3;
21674  var RootSuspendedWithDelay = 4;
21675  var RootCompleted = 5; // Describes where we are in the React execution stack
21676
21677  var executionContext = NoContext; // The root we're working on
21678
21679  var workInProgressRoot = null; // The fiber we're working on
21680
21681  var workInProgress = null; // The lanes we're rendering
21682
21683  var workInProgressRootRenderLanes = NoLanes; // Stack that allows components to change the render lanes for its subtree
21684  // This is a superset of the lanes we started working on at the root. The only
21685  // case where it's different from `workInProgressRootRenderLanes` is when we
21686  // enter a subtree that is hidden and needs to be unhidden: Suspense and
21687  // Offscreen component.
21688  //
21689  // Most things in the work loop should deal with workInProgressRootRenderLanes.
21690  // Most things in begin/complete phases should deal with subtreeRenderLanes.
21691
21692  var subtreeRenderLanes = NoLanes;
21693  var subtreeRenderLanesCursor = createCursor(NoLanes); // Whether to root completed, errored, suspended, etc.
21694
21695  var workInProgressRootExitStatus = RootIncomplete; // A fatal error, if one is thrown
21696
21697  var workInProgressRootFatalError = null; // "Included" lanes refer to lanes that were worked on during this render. It's
21698  // slightly different than `renderLanes` because `renderLanes` can change as you
21699  // enter and exit an Offscreen tree. This value is the combination of all render
21700  // lanes for the entire render phase.
21701
21702  var workInProgressRootIncludedLanes = NoLanes; // The work left over by components that were visited during this render. Only
21703  // includes unprocessed updates, not work in bailed out children.
21704
21705  var workInProgressRootSkippedLanes = NoLanes; // Lanes that were updated (in an interleaved event) during this render.
21706
21707  var workInProgressRootUpdatedLanes = NoLanes; // Lanes that were pinged (in an interleaved event) during this render.
21708
21709  var workInProgressRootPingedLanes = NoLanes;
21710  var mostRecentlyUpdatedRoot = null; // The most recent time we committed a fallback. This lets us ensure a train
21711  // model where we don't commit new loading states in too quick succession.
21712
21713  var globalMostRecentFallbackTime = 0;
21714  var FALLBACK_THROTTLE_MS = 500; // The absolute time for when we should start giving up on rendering
21715  // more and prefer CPU suspense heuristics instead.
21716
21717  var workInProgressRootRenderTargetTime = Infinity; // How long a render is supposed to take before we start following CPU
21718  // suspense heuristics and opt out of rendering more content.
21719
21720  var RENDER_TIMEOUT_MS = 500;
21721
21722  function resetRenderTimer() {
21723    workInProgressRootRenderTargetTime = now() + RENDER_TIMEOUT_MS;
21724  }
21725
21726  function getRenderTargetTime() {
21727    return workInProgressRootRenderTargetTime;
21728  }
21729  var nextEffect = null;
21730  var hasUncaughtError = false;
21731  var firstUncaughtError = null;
21732  var legacyErrorBoundariesThatAlreadyFailed = null;
21733  var rootDoesHavePassiveEffects = false;
21734  var rootWithPendingPassiveEffects = null;
21735  var pendingPassiveEffectsRenderPriority = NoPriority$1;
21736  var pendingPassiveEffectsLanes = NoLanes;
21737  var pendingPassiveHookEffectsMount = [];
21738  var pendingPassiveHookEffectsUnmount = [];
21739  var rootsWithPendingDiscreteUpdates = null; // Use these to prevent an infinite loop of nested updates
21740
21741  var NESTED_UPDATE_LIMIT = 50;
21742  var nestedUpdateCount = 0;
21743  var rootWithNestedUpdates = null;
21744  var NESTED_PASSIVE_UPDATE_LIMIT = 50;
21745  var nestedPassiveUpdateCount = 0; // Marks the need to reschedule pending interactions at these lanes
21746  // during the commit phase. This enables them to be traced across components
21747  // that spawn new work during render. E.g. hidden boundaries, suspended SSR
21748  // hydration or SuspenseList.
21749  // TODO: Can use a bitmask instead of an array
21750
21751  var spawnedWorkDuringRender = null; // If two updates are scheduled within the same event, we should treat their
21752  // event times as simultaneous, even if the actual clock time has advanced
21753  // between the first and second call.
21754
21755  var currentEventTime = NoTimestamp;
21756  var currentEventWipLanes = NoLanes;
21757  var currentEventPendingLanes = NoLanes; // Dev only flag that tracks if passive effects are currently being flushed.
21758  // We warn about state updates for unmounted components differently in this case.
21759
21760  var isFlushingPassiveEffects = false;
21761  var focusedInstanceHandle = null;
21762  var shouldFireAfterActiveInstanceBlur = false;
21763  function getWorkInProgressRoot() {
21764    return workInProgressRoot;
21765  }
21766  function requestEventTime() {
21767    if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {
21768      // We're inside React, so it's fine to read the actual time.
21769      return now();
21770    } // We're not inside React, so we may be in the middle of a browser event.
21771
21772
21773    if (currentEventTime !== NoTimestamp) {
21774      // Use the same start time for all updates until we enter React again.
21775      return currentEventTime;
21776    } // This is the first update since React yielded. Compute a new start time.
21777
21778
21779    currentEventTime = now();
21780    return currentEventTime;
21781  }
21782  function requestUpdateLane(fiber) {
21783    // Special cases
21784    var mode = fiber.mode;
21785
21786    if ((mode & BlockingMode) === NoMode) {
21787      return SyncLane;
21788    } else if ((mode & ConcurrentMode) === NoMode) {
21789      return getCurrentPriorityLevel() === ImmediatePriority$1 ? SyncLane : SyncBatchedLane;
21790    } // The algorithm for assigning an update to a lane should be stable for all
21791    // updates at the same priority within the same event. To do this, the inputs
21792    // to the algorithm must be the same. For example, we use the `renderLanes`
21793    // to avoid choosing a lane that is already in the middle of rendering.
21794    //
21795    // However, the "included" lanes could be mutated in between updates in the
21796    // same event, like if you perform an update inside `flushSync`. Or any other
21797    // code path that might call `prepareFreshStack`.
21798    //
21799    // The trick we use is to cache the first of each of these inputs within an
21800    // event. Then reset the cached values once we can be sure the event is over.
21801    // Our heuristic for that is whenever we enter a concurrent work loop.
21802    //
21803    // We'll do the same for `currentEventPendingLanes` below.
21804
21805
21806    if (currentEventWipLanes === NoLanes) {
21807      currentEventWipLanes = workInProgressRootIncludedLanes;
21808    }
21809
21810    var isTransition = requestCurrentTransition() !== NoTransition;
21811
21812    if (isTransition) {
21813      if (currentEventPendingLanes !== NoLanes) {
21814        currentEventPendingLanes = mostRecentlyUpdatedRoot !== null ? mostRecentlyUpdatedRoot.pendingLanes : NoLanes;
21815      }
21816
21817      return findTransitionLane(currentEventWipLanes, currentEventPendingLanes);
21818    } // TODO: Remove this dependency on the Scheduler priority.
21819    // To do that, we're replacing it with an update lane priority.
21820
21821
21822    var schedulerPriority = getCurrentPriorityLevel(); // The old behavior was using the priority level of the Scheduler.
21823    // This couples React to the Scheduler internals, so we're replacing it
21824    // with the currentUpdateLanePriority above. As an example of how this
21825    // could be problematic, if we're not inside `Scheduler.runWithPriority`,
21826    // then we'll get the priority of the current running Scheduler task,
21827    // which is probably not what we want.
21828
21829    var lane;
21830
21831    if ( // TODO: Temporary. We're removing the concept of discrete updates.
21832    (executionContext & DiscreteEventContext) !== NoContext && schedulerPriority === UserBlockingPriority$2) {
21833      lane = findUpdateLane(InputDiscreteLanePriority, currentEventWipLanes);
21834    } else {
21835      var schedulerLanePriority = schedulerPriorityToLanePriority(schedulerPriority);
21836
21837      lane = findUpdateLane(schedulerLanePriority, currentEventWipLanes);
21838    }
21839
21840    return lane;
21841  }
21842
21843  function requestRetryLane(fiber) {
21844    // This is a fork of `requestUpdateLane` designed specifically for Suspense
21845    // "retries" — a special update that attempts to flip a Suspense boundary
21846    // from its placeholder state to its primary/resolved state.
21847    // Special cases
21848    var mode = fiber.mode;
21849
21850    if ((mode & BlockingMode) === NoMode) {
21851      return SyncLane;
21852    } else if ((mode & ConcurrentMode) === NoMode) {
21853      return getCurrentPriorityLevel() === ImmediatePriority$1 ? SyncLane : SyncBatchedLane;
21854    } // See `requestUpdateLane` for explanation of `currentEventWipLanes`
21855
21856
21857    if (currentEventWipLanes === NoLanes) {
21858      currentEventWipLanes = workInProgressRootIncludedLanes;
21859    }
21860
21861    return findRetryLane(currentEventWipLanes);
21862  }
21863
21864  function scheduleUpdateOnFiber(fiber, lane, eventTime) {
21865    checkForNestedUpdates();
21866    warnAboutRenderPhaseUpdatesInDEV(fiber);
21867    var root = markUpdateLaneFromFiberToRoot(fiber, lane);
21868
21869    if (root === null) {
21870      warnAboutUpdateOnUnmountedFiberInDEV(fiber);
21871      return null;
21872    } // Mark that the root has a pending update.
21873
21874
21875    markRootUpdated(root, lane, eventTime);
21876
21877    if (root === workInProgressRoot) {
21878      // Received an update to a tree that's in the middle of rendering. Mark
21879      // that there was an interleaved update work on this root. Unless the
21880      // `deferRenderPhaseUpdateToNextBatch` flag is off and this is a render
21881      // phase update. In that case, we don't treat render phase updates as if
21882      // they were interleaved, for backwards compat reasons.
21883      {
21884        workInProgressRootUpdatedLanes = mergeLanes(workInProgressRootUpdatedLanes, lane);
21885      }
21886
21887      if (workInProgressRootExitStatus === RootSuspendedWithDelay) {
21888        // The root already suspended with a delay, which means this render
21889        // definitely won't finish. Since we have a new update, let's mark it as
21890        // suspended now, right before marking the incoming update. This has the
21891        // effect of interrupting the current render and switching to the update.
21892        // TODO: Make sure this doesn't override pings that happen while we've
21893        // already started rendering.
21894        markRootSuspended$1(root, workInProgressRootRenderLanes);
21895      }
21896    } // TODO: requestUpdateLanePriority also reads the priority. Pass the
21897    // priority as an argument to that function and this one.
21898
21899
21900    var priorityLevel = getCurrentPriorityLevel();
21901
21902    if (lane === SyncLane) {
21903      if ( // Check if we're inside unbatchedUpdates
21904      (executionContext & LegacyUnbatchedContext) !== NoContext && // Check if we're not already rendering
21905      (executionContext & (RenderContext | CommitContext)) === NoContext) {
21906        // Register pending interactions on the root to avoid losing traced interaction data.
21907        schedulePendingInteractions(root, lane);
21907 // This is a legacy edge case. The initial mount of a ReactDOM.render-ed
21908        // root inside of batchedUpdates should be synchronous, but layout updates
21909        // should be deferred until the end of the batch.
21910
21911        performSyncWorkOnRoot(root);
21912      } else {
21913        ensureRootIsScheduled(root, eventTime);
21914        schedulePendingInteractions(root, lane);
21915
21916        if (executionContext === NoContext) {
21917          // Flush the synchronous work now, unless we're already working or inside
21918          // a batch. This is intentionally inside scheduleUpdateOnFiber instead of
21919          // scheduleCallbackForFiber to preserve the ability to schedule a callback
21920          // without immediately flushing it. We only do this for user-initiated
21921          // updates, to preserve historical behavior of legacy mode.
21922          resetRenderTimer();
21923          flushSyncCallbackQueue();
21924        }
21925      }
21926    } else {
21927      // Schedule a discrete update but only if it's not Sync.
21928      if ((executionContext & DiscreteEventContext) !== NoContext && ( // Only updates at user-blocking priority or greater are considered
21929      // discrete, even inside a discrete event.
21930      priorityLevel === UserBlockingPriority$2 || priorityLevel === ImmediatePriority$1)) {
21931        // This is the result of a discrete event. Track the lowest priority
21932        // discrete update per root so we can flush them early, if needed.
21933        if (rootsWithPendingDiscreteUpdates === null) {
21934          rootsWithPendingDiscreteUpdates = new Set([root]);
21935        } else {
21936          rootsWithPendingDiscreteUpdates.add(root);
21937        }
21938      } // Schedule other updates after in case the callback is sync.
21939
21940
21941      ensureRootIsScheduled(root, eventTime);
21942      schedulePendingInteractions(root, lane);
21943    } // We use this when assigning a lane for a transition inside
21944    // `requestUpdateLane`. We assume it's the same as the root being updated,
21945    // since in the common case of a single root app it probably is. If it's not
21946    // the same root, then it's not a huge deal, we just might batch more stuff
21947    // together more than necessary.
21948
21949
21950    mostRecentlyUpdatedRoot = root;
21951  } // This is split into a separate function so we can mark a fiber with pending
21952  // work without treating it as a typical update that originates from an event;
21953  // e.g. retrying a Suspense boundary isn't an update, but it does schedule work
21954  // on a fiber.
21955
21956  function markUpdateLaneFromFiberToRoot(sourceFiber, lane) {
21957    // Update the source fiber's lanes
21958    sourceFiber.lanes = mergeLanes(sourceFiber.lanes, lane);
21959    var alternate = sourceFiber.alternate;
21960
21961    if (alternate !== null) {
21962      alternate.lanes = mergeLanes(alternate.lanes, lane);
21963    }
21964
21965    {
21966      if (alternate === null && (sourceFiber.flags & (Placement | Hydrating)) !== NoFlags) {
21967        warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber);
21968      }
21969    } // Walk the parent path to the root and update the child expiration time.
21970
21971
21972    var node = sourceFiber;
21973    var parent = sourceFiber.return;
21974
21975    while (parent !== null) {
21976      parent.childLanes = mergeLanes(parent.childLanes, lane);
21977      alternate = parent.alternate;
21978
21979      if (alternate !== null) {
21980        alternate.childLanes = mergeLanes(alternate.childLanes, lane);
21981      } else {
21982        {
21983          if ((parent.flags & (Placement | Hydrating)) !== NoFlags) {
21984            warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber);
21985          }
21986        }
21987      }
21988
21989      node = parent;
21990      parent = parent.return;
21991    }
21992
21993    if (node.tag === HostRoot) {
21994      var root = node.stateNode;
21995      return root;
21996    } else {
21997      return null;
21998    }
21999  } // Use this function to schedule a task for a root. There's only one task per
22000  // root; if a task was already scheduled, we'll check to make sure the priority
22001  // of the existing task is the same as the priority of the next level that the
22002  // root has work on. This function is called on every update, and right before
22003  // exiting a task.
22004
22005
22006  function ensureRootIsScheduled(root, currentTime) {
22007    var existingCallbackNode = root.callbackNode; // Check if any lanes are being starved by other work. If so, mark them as
22008    // expired so we know to work on those next.
22009
22010    markStarvedLanesAsExpired(root, currentTime); // Determine the next lanes to work on, and their priority.
22011
22012    var nextLanes = getNextLanes(root, root === workInProgressRoot ? workInProgressRootRenderLanes : NoLanes); // This returns the priority level computed during the `getNextLanes` call.
22013
22014    var newCallbackPriority = returnNextLanesPriority();
22015
22016    if (nextLanes === NoLanes) {
22017      // Special case: There's nothing to work on.
22018      if (existingCallbackNode !== null) {
22019        cancelCallback(existingCallbackNode);
22020        root.callbackNode = null;
22021        root.callbackPriority = NoLanePriority;
22022      }
22023
22024      return;
22025    } // Check if there's an existing task. We may be able to reuse it.
22026
22027
22028    if (existingCallbackNode !== null) {
22029      var existingCallbackPriority = root.callbackPriority;
22030
22031      if (existingCallbackPriority === newCallbackPriority) {
22032        // The priority hasn't changed. We can reuse the existing task. Exit.
22033        return;
22034      } // The priority changed. Cancel the existing callback. We'll schedule a new
22035      // one below.
22036
22037
22038      cancelCallback(existingCallbackNode);
22039    } // Schedule a new callback.
22040
22041
22042    var newCallbackNode;
22043
22044    if (newCallbackPriority === SyncLanePriority) {
22045      // Special case: Sync React callbacks are scheduled on a special
22046      // internal queue
22047      newCallbackNode = scheduleSyncCallback(performSyncWorkOnRoot.bind(null, root));
22048    } else if (newCallbackPriority === SyncBatchedLanePriority) {
22049      newCallbackNode = scheduleCallback(ImmediatePriority$1, performSyncWorkOnRoot.bind(null, root));
22050    } else {
22051      var schedulerPriorityLevel = lanePriorityToSchedulerPriority(newCallbackPriority);
22052      newCallbackNode = scheduleCallback(schedulerPriorityLevel, performConcurrentWorkOnRoot.bind(null, root));
22053    }
22054
22055    root.callbackPriority = newCallbackPriority;
22056    root.callbackNode = newCallbackNode;
22057  } // This is the entry point for every concurrent task, i.e. anything that
22058  // goes through Scheduler.
22059
22060
22061  function performConcurrentWorkOnRoot(root) {
22062    // Since we know we're in a React event, we can clear the current
22063    // event time. The next update will compute a new event time.
22064    currentEventTime = NoTimestamp;
22065    currentEventWipLanes = NoLanes;
22066    currentEventPendingLanes = NoLanes;
22067
22068    if (!((executionContext & (RenderContext | CommitContext)) === NoContext)) {
22069      {
22070        throw Error( "Should not already be working." );
22071      }
22072    } // Flush any pending passive effects before deciding which lanes to work on,
22073    // in case they schedule additional work.
22074
22075
22076    var originalCallbackNode = root.callbackNode;
22077    var didFlushPassiveEffects = flushPassiveEffects();
22078
22079    if (didFlushPassiveEffects) {
22080      // Something in the passive effect phase may have canceled the current task.
22081      // Check if the task node for this root was changed.
22082      if (root.callbackNode !== originalCallbackNode) {
22083        // The current task was canceled. Exit. We don't need to call
22084        // `ensureRootIsScheduled` because the check above implies either that
22085        // there's a new task, or that there's no remaining work on this root.
22086        return null;
22087      }
22088    } // Determine the next expiration time to work on, using the fields stored
22089    // on the root.
22090
22091
22092    var lanes = getNextLanes(root, root === workInProgressRoot ? workInProgressRootRenderLanes : NoLanes);
22093
22094    if (lanes === NoLanes) {
22095      // Defensive coding. This is never expected to happen.
22096      return null;
22097    }
22098
22099    var exitStatus = renderRootConcurrent(root, lanes);
22100
22101    if (includesSomeLane(workInProgressRootIncludedLanes, workInProgressRootUpdatedLanes)) {
22102      // The render included lanes that were updated during the render phase.
22103      // For example, when unhiding a hidden tree, we include all the lanes
22104      // that were previously skipped when the tree was hidden. That set of
22105      // lanes is a superset of the lanes we started rendering with.
22106      //
22107      // So we'll throw out the current work and restart.
22108      prepareFreshStack(root, NoLanes);
22109    } else if (exitStatus !== RootIncomplete) {
22110      if (exitStatus === RootErrored) {
22111        executionContext |= RetryAfterError; // If an error occurred during hydration,
22112        // discard server response and fall back to client side render.
22113
22114        if (root.hydrate) {
22115          root.hydrate = false;
22116          clearContainer(root.containerInfo);
22117        } // If something threw an error, try rendering one more time. We'll render
22118        // synchronously to block concurrent data mutations, and we'll includes
22119        // all pending updates are included. If it still fails after the second
22120        // attempt, we'll give up and commit the resulting tree.
22121
22122
22123        lanes = getLanesToRetrySynchronouslyOnError(root);
22124
22125        if (lanes !== NoLanes) {
22126          exitStatus = renderRootSync(root, lanes);
22127        }
22128      }
22129
22130      if (exitStatus === RootFatalErrored) {
22131        var fatalError = workInProgressRootFatalError;
22132        prepareFreshStack(root, NoLanes);
22133        markRootSuspended$1(root, lanes);
22134        ensureRootIsScheduled(root, now());
22135        throw fatalError;
22136      } // We now have a consistent tree. The next step is either to commit it,
22137      // or, if something suspended, wait to commit it after a timeout.
22138
22139
22140      var finishedWork = root.current.alternate;
22141      root.finishedWork = finishedWork;
22142      root.finishedLanes = lanes;
22143      finishConcurrentRender(root, exitStatus, lanes);
22144    }
22145
22146    ensureRootIsScheduled(root, now());
22147
22148    if (root.callbackNode === originalCallbackNode) {
22149      // The task node scheduled for this root is the same one that's
22150      // currently executed. Need to return a continuation.
22151      return performConcurrentWorkOnRoot.bind(null, root);
22152    }
22153
22154    return null;
22155  }
22156
22157  function finishConcurrentRender(root, exitStatus, lanes) {
22158    switch (exitStatus) {
22159      case RootIncomplete:
22160      case RootFatalErrored:
22161        {
22162          {
22163            {
22164              throw Error( "Root did not complete. This is a bug in React." );
22165            }
22166          }
22167        }
22168      // Flow knows about invariant, so it complains if I add a break
22169      // statement, but eslint doesn't know about invariant, so it complains
22170      // if I do. eslint-disable-next-line no-fallthrough
22171
22172      case RootErrored:
22173        {
22174          // We should have already attempted to retry this tree. If we reached
22175          // this point, it errored again. Commit it.
22176          commitRoot(root);
22177          break;
22178        }
22179
22180      case RootSuspended:
22181        {
22182          markRootSuspended$1(root, lanes); // We have an acceptable loading state. We need to figure out if we
22183          // should immediately commit it or wait a bit.
22184
22185          if (includesOnlyRetries(lanes) && // do not delay if we're inside an act() scope
22186          !shouldForceFlushFallbacksInDEV()) {
22187            // This render only included retries, no updates. Throttle committing
22188            // retries so that we don't show too many loading states too quickly.
22189            var msUntilTimeout = globalMostRecentFallbackTime + FALLBACK_THROTTLE_MS - now(); // Don't bother with a very short suspense time.
22190
22191            if (msUntilTimeout > 10) {
22192              var nextLanes = getNextLanes(root, NoLanes);
22193
22194              if (nextLanes !== NoLanes) {
22195                // There's additional work on this root.
22196                break;
22197              }
22198
22199              var suspendedLanes = root.suspendedLanes;
22200
22201              if (!isSubsetOfLanes(suspendedLanes, lanes)) {
22202                // We should prefer to render the fallback of at the last
22203                // suspended level. Ping the last suspended level to try
22204                // rendering it again.
22205                // FIXME: What if the suspended lanes are Idle? Should not restart.
22206                var eventTime = requestEventTime();
22207                markRootPinged(root, suspendedLanes);
22208                break;
22209              } // The render is suspended, it hasn't timed out, and there's no
22210              // lower priority work to do. Instead of committing the fallback
22211              // immediately, wait for more data to arrive.
22212
22213
22214              root.timeoutHandle = scheduleTimeout(commitRoot.bind(null, root), msUntilTimeout);
22215              break;
22216            }
22217          } // The work expired. Commit immediately.
22218
22219
22220          commitRoot(root);
22221          break;
22222        }
22223
22224      case RootSuspendedWithDelay:
22225        {
22226          markRootSuspended$1(root, lanes);
22227
22228          if (includesOnlyTransitions(lanes)) {
22229            // This is a transition, so we should exit without committing a
22230            // placeholder and without scheduling a timeout. Delay indefinitely
22231            // until we receive more data.
22232            break;
22233          }
22234
22235          if (!shouldForceFlushFallbacksInDEV()) {
22236            // This is not a transition, but we did trigger an avoided state.
22237            // Schedule a placeholder to display after a short delay, using the Just
22238            // Noticeable Difference.
22239            // TODO: Is the JND optimization worth the added complexity? If this is
22240            // the only reason we track the event time, then probably not.
22241            // Consider removing.
22242            var mostRecentEventTime = getMostRecentEventTime(root, lanes);
22243            var eventTimeMs = mostRecentEventTime;
22244            var timeElapsedMs = now() - eventTimeMs;
22245
22246            var _msUntilTimeout = jnd(timeElapsedMs) - timeElapsedMs; // Don't bother with a very short suspense time.
22247
22248
22249            if (_msUntilTimeout > 10) {
22250              // Instead of committing the fallback immediately, wait for more data
22251              // to arrive.
22252              root.timeoutHandle = scheduleTimeout(commitRoot.bind(null, root), _msUntilTimeout);
22253              break;
22254            }
22255          } // Commit the placeholder.
22256
22257
22258          commitRoot(root);
22259          break;
22260        }
22261
22262      case RootCompleted:
22263        {
22264          // The work completed. Ready to commit.
22265          commitRoot(root);
22266          break;
22267        }
22268
22269      default:
22270        {
22271          {
22272            {
22273              throw Error( "Unknown root exit status." );
22274            }
22275          }
22276        }
22277    }
22278  }
22279
22280  function markRootSuspended$1(root, suspendedLanes) {
22281    // When suspending, we should always exclude lanes that were pinged or (more
22282    // rarely, since we try to avoid it) updated during the render phase.
22283    // TODO: Lol maybe there's a better way to factor this besides this
22284    // obnoxiously named function :)
22285    suspendedLanes = removeLanes(suspendedLanes, workInProgressRootPingedLanes);
22286    suspendedLanes = removeLanes(suspendedLanes, workInProgressRootUpdatedLanes);
22287    markRootSuspended(root, suspendedLanes);
22288  } // This is the entry point for synchronous tasks that don't go
22289  // through Scheduler
22290
22291
22292  function performSyncWorkOnRoot(root) {
22293    if (!((executionContext & (RenderContext | CommitContext)) === NoContext)) {
22294      {
22295        throw Error( "Should not already be working." );
22296      }
22297    }
22298
22299    flushPassiveEffects();
22300    var lanes;
22301    var exitStatus;
22302
22303    if (root === workInProgressRoot && includesSomeLane(root.expiredLanes, workInProgressRootRenderLanes)) {
22304      // There's a partial tree, and at least one of its lanes has expired. Finish
22305      // rendering it before rendering the rest of the expired work.
22306      lanes = workInProgressRootRenderLanes;
22307      exitStatus = renderRootSync(root, lanes);
22308
22309      if (includesSomeLane(workInProgressRootIncludedLanes, workInProgressRootUpdatedLanes)) {
22310        // The render included lanes that were updated during the render phase.
22311        // For example, when unhiding a hidden tree, we include all the lanes
22312        // that were previously skipped when the tree was hidden. That set of
22313        // lanes is a superset of the lanes we started rendering with.
22314        //
22315        // Note that this only happens when part of the tree is rendered
22316        // concurrently. If the whole tree is rendered synchronously, then there
22317        // are no interleaved events.
22318        lanes = getNextLanes(root, lanes);
22319        exitStatus = renderRootSync(root, lanes);
22320      }
22321    } else {
22322      lanes = getNextLanes(root, NoLanes);
22323      exitStatus = renderRootSync(root, lanes);
22324    }
22325
22326    if (root.tag !== LegacyRoot && exitStatus === RootErrored) {
22327      executionContext |= RetryAfterError; // If an error occurred during hydration,
22328      // discard server response and fall back to client side render.
22329
22330      if (root.hydrate) {
22331        root.hydrate = false;
22332        clearContainer(root.containerInfo);
22333      } // If something threw an error, try rendering one more time. We'll render
22334      // synchronously to block concurrent data mutations, and we'll includes
22335      // all pending updates are included. If it still fails after the second
22336      // attempt, we'll give up and commit the resulting tree.
22337
22338
22339      lanes = getLanesToRetrySynchronouslyOnError(root);
22340
22341      if (lanes !== NoLanes) {
22342        exitStatus = renderRootSync(root, lanes);
22343      }
22344    }
22345
22346    if (exitStatus === RootFatalErrored) {
22347      var fatalError = workInProgressRootFatalError;
22348      prepareFreshStack(root, NoLanes);
22349      markRootSuspended$1(root, lanes);
22350      ensureRootIsScheduled(root, now());
22351      throw fatalError;
22352    } // We now have a consistent tree. Because this is a sync render, we
22353    // will commit it even if something suspended.
22354
22355
22356    var finishedWork = root.current.alternate;
22357    root.finishedWork = finishedWork;
22358    root.finishedLanes = lanes;
22359    commitRoot(root); // Before exiting, make sure there's a callback scheduled for the next
22360    // pending level.
22361
22362    ensureRootIsScheduled(root, now());
22363    return null;
22364  }
22365  function flushDiscreteUpdates() {
22366    // TODO: Should be able to flush inside batchedUpdates, but not inside `act`.
22367    // However, `act` uses `batchedUpdates`, so there's no way to distinguish
22368    // those two cases. Need to fix this before exposing flushDiscreteUpdates
22369    // as a public API.
22370    if ((executionContext & (BatchedContext | RenderContext | CommitContext)) !== NoContext) {
22371      {
22372        if ((executionContext & RenderContext) !== NoContext) {
22373          error('unstable_flushDiscreteUpdates: Cannot flush updates when React is ' + 'already rendering.');
22374        }
22375      } // We're already rendering, so we can't synchronously flush pending work.
22376      // This is probably a nested event dispatch triggered by a lifecycle/effect,
22377      // like `el.focus()`. Exit.
22378
22379
22380      return;
22381    }
22382
22383    flushPendingDiscreteUpdates(); // If the discrete updates scheduled passive effects, flush them now so that
22384    // they fire before the next serial event.
22385
22386    flushPassiveEffects();
22387  }
22388
22389  function flushPendingDiscreteUpdates() {
22390    if (rootsWithPendingDiscreteUpdates !== null) {
22391      // For each root with pending discrete updates, schedule a callback to
22392      // immediately flush them.
22393      var roots = rootsWithPendingDiscreteUpdates;
22394      rootsWithPendingDiscreteUpdates = null;
22395      roots.forEach(function (root) {
22396        markDiscreteUpdatesExpired(root);
22397        ensureRootIsScheduled(root, now());
22398      });
22399    } // Now flush the immediate queue.
22400
22401
22402    flushSyncCallbackQueue();
22403  }
22404
22405  function batchedUpdates$1(fn, a) {
22406    var prevExecutionContext = executionContext;
22407    executionContext |= BatchedContext;
22408
22409    try {
22410      return fn(a);
22411    } finally {
22412      executionContext = prevExecutionContext;
22413
22414      if (executionContext === NoContext) {
22415        // Flush the immediate callbacks that were scheduled during this batch
22416        resetRenderTimer();
22417        flushSyncCallbackQueue();
22418      }
22419    }
22420  }
22421  function batchedEventUpdates$1(fn, a) {
22422    var prevExecutionContext = executionContext;
22423    executionContext |= EventContext;
22424
22425    try {
22426      return fn(a);
22427    } finally {
22428      executionContext = prevExecutionContext;
22429
22430      if (executionContext === NoContext) {
22431        // Flush the immediate callbacks that were scheduled during this batch
22432        resetRenderTimer();
22433        flushSyncCallbackQueue();
22434      }
22435    }
22436  }
22437  function discreteUpdates$1(fn, a, b, c, d) {
22438    var prevExecutionContext = executionContext;
22439    executionContext |= DiscreteEventContext;
22440
22441    {
22442      try {
22443        return runWithPriority$1(UserBlockingPriority$2, fn.bind(null, a, b, c, d));
22444      } finally {
22445        executionContext = prevExecutionContext;
22446
22447        if (executionContext === NoContext) {
22448          // Flush the immediate callbacks that were scheduled during this batch
22449          resetRenderTimer();
22450          flushSyncCallbackQueue();
22451        }
22452      }
22453    }
22454  }
22455  function unbatchedUpdates(fn, a) {
22456    var prevExecutionContext = executionContext;
22457    executionContext &= ~BatchedContext;
22458    executionContext |= LegacyUnbatchedContext;
22459
22460    try {
22461      return fn(a);
22462    } finally {
22463      executionContext = prevExecutionContext;
22464
22465      if (executionContext === NoContext) {
22466        // Flush the immediate callbacks that were scheduled during this batch
22467        resetRenderTimer();
22468        flushSyncCallbackQueue();
22469      }
22470    }
22471  }
22472  function flushSync(fn, a) {
22473    var prevExecutionContext = executionContext;
22474
22475    if ((prevExecutionContext & (RenderContext | CommitContext)) !== NoContext) {
22476      {
22477        error('flushSync was called from inside a lifecycle method. React cannot ' + 'flush when React is already rendering. Consider moving this call to ' + 'a scheduler task or micro task.');
22478      }
22479
22480      return fn(a);
22481    }
22482
22483    executionContext |= BatchedContext;
22484
22485    {
22486      try {
22487        if (fn) {
22488          return runWithPriority$1(ImmediatePriority$1, fn.bind(null, a));
22489        } else {
22490          return undefined;
22491        }
22492      } finally {
22493        executionContext = prevExecutionContext; // Flush the immediate callbacks that were scheduled during this batch.
22494        // Note that this will happen even if batchedUpdates is higher up
22495        // the stack.
22496
22497        flushSyncCallbackQueue();
22498      }
22499    }
22500  }
22501  function pushRenderLanes(fiber, lanes) {
22502    push(subtreeRenderLanesCursor, subtreeRenderLanes, fiber);
22503    subtreeRenderLanes = mergeLanes(subtreeRenderLanes, lanes);
22504    workInProgressRootIncludedLanes = mergeLanes(workInProgressRootIncludedLanes, lanes);
22505  }
22506  function popRenderLanes(fiber) {
22507    subtreeRenderLanes = subtreeRenderLanesCursor.current;
22508    pop(subtreeRenderLanesCursor, fiber);
22509  }
22510
22511  function prepareFreshStack(root, lanes) {
22512    root.finishedWork = null;
22513    root.finishedLanes = NoLanes;
22514    var timeoutHandle = root.timeoutHandle;
22515
22516    if (timeoutHandle !== noTimeout) {
22517      // The root previous suspended and scheduled a timeout to commit a fallback
22518      // state. Now that we have additional work, cancel the timeout.
22519      root.timeoutHandle = noTimeout; // $FlowFixMe Complains noTimeout is not a TimeoutID, despite the check above
22520
22521      cancelTimeout(timeoutHandle);
22522    }
22523
22524    if (workInProgress !== null) {
22525      var interruptedWork = workInProgress.return;
22526
22527      while (interruptedWork !== null) {
22528        unwindInterruptedWork(interruptedWork);
22529        interruptedWork = interruptedWork.return;
22530      }
22531    }
22532
22533    workInProgressRoot = root;
22534    workInProgress = createWorkInProgress(root.current, null);
vendor: 5,791 bytes, lines 22535-22687
22535    workInProgressRootRenderLanes = subtreeRenderLanes = workInProgressRootIncludedLanes = lanes;
22536    workInProgressRootExitStatus = RootIncomplete;
22537    workInProgressRootFatalError = null;
22538    workInProgressRootSkippedLanes = NoLanes;
22539    workInProgressRootUpdatedLanes = NoLanes;
22540    workInProgressRootPingedLanes = NoLanes;
22541
22542    {
22543      spawnedWorkDuringRender = null;
22544    }
22545
22546    {
22547      ReactStrictModeWarnings.discardPendingWarnings();
22548    }
22549  }
22550
22551  function handleError(root, thrownValue) {
22552    do {
22553      var erroredWork = workInProgress;
22554
22555      try {
22556        // Reset module-level state that was set during the render phase.
22557        resetContextDependencies();
22558        resetHooksAfterThrow();
22559        resetCurrentFiber(); // TODO: I found and added this missing line while investigating a
22560        // separate issue. Write a regression test using string refs.
22561
22562        ReactCurrentOwner$2.current = null;
22563
22564        if (erroredWork === null || erroredWork.return === null) {
22565          // Expected to be working on a non-root fiber. This is a fatal error
22566          // because there's no ancestor that can handle it; the root is
22567          // supposed to capture all errors that weren't caught by an error
22568          // boundary.
22569          workInProgressRootExitStatus = RootFatalErrored;
22570          workInProgressRootFatalError = thrownValue; // Set `workInProgress` to null. This represents advancing to the next
22571          // sibling, or the parent if there are no siblings. But since the root
22572          // has no siblings nor a parent, we set it to null. Usually this is
22573          // handled by `completeUnitOfWork` or `unwindWork`, but since we're
22574          // intentionally not calling those, we need set it here.
22575          // TODO: Consider calling `unwindWork` to pop the contexts.
22576
22577          workInProgress = null;
22578          return;
22579        }
22580
22581        if (enableProfilerTimer && erroredWork.mode & ProfileMode) {
22582          // Record the time spent rendering before an error was thrown. This
22583          // avoids inaccurate Profiler durations in the case of a
22584          // suspended render.
22585          stopProfilerTimerIfRunningAndRecordDelta(erroredWork, true);
22586        }
22587
22588        throwException(root, erroredWork.return, erroredWork, thrownValue, workInProgressRootRenderLanes);
22589        completeUnitOfWork(erroredWork);
22590      } catch (yetAnotherThrownValue) {
22591        // Something in the return path also threw.
22592        thrownValue = yetAnotherThrownValue;
22593
22594        if (workInProgress === erroredWork && erroredWork !== null) {
22595          // If this boundary has already errored, then we had trouble processing
22596          // the error. Bubble it to the next boundary.
22597          erroredWork = erroredWork.return;
22598          workInProgress = erroredWork;
22599        } else {
22600          erroredWork = workInProgress;
22601        }
22602
22603        continue;
22604      } // Return to the normal work loop.
22605
22606
22607      return;
22608    } while (true);
22609  }
22610
22611  function pushDispatcher() {
22612    var prevDispatcher = ReactCurrentDispatcher$2.current;
22613    ReactCurrentDispatcher$2.current = ContextOnlyDispatcher;
22614
22615    if (prevDispatcher === null) {
22616      // The React isomorphic package does not include a default dispatcher.
22617      // Instead the first renderer will lazily attach one, in order to give
22618      // nicer error messages.
22619      return ContextOnlyDispatcher;
22620    } else {
22621      return prevDispatcher;
22622    }
22623  }
22624
22625  function popDispatcher(prevDispatcher) {
22626    ReactCurrentDispatcher$2.current = prevDispatcher;
22627  }
22628
22629  function pushInteractions(root) {
22630    {
22631      var prevInteractions = __interactionsRef.current;
22632      __interactionsRef.current = root.memoizedInteractions;
22633      return prevInteractions;
22634    }
22635  }
22636
22637  function popInteractions(prevInteractions) {
22638    {
22639      __interactionsRef.current = prevInteractions;
22640    }
22641  }
22642
22643  function markCommitTimeOfFallback() {
22644    globalMostRecentFallbackTime = now();
22645  }
22646  function markSkippedUpdateLanes(lane) {
22647    workInProgressRootSkippedLanes = mergeLanes(lane, workInProgressRootSkippedLanes);
22648  }
22649  function renderDidSuspend() {
22650    if (workInProgressRootExitStatus === RootIncomplete) {
22651      workInProgressRootExitStatus = RootSuspended;
22652    }
22653  }
22654  function renderDidSuspendDelayIfPossible() {
22655    if (workInProgressRootExitStatus === RootIncomplete || workInProgressRootExitStatus === RootSuspended) {
22656      workInProgressRootExitStatus = RootSuspendedWithDelay;
22657    } // Check if there are updates that we skipped tree that might have unblocked
22658    // this render.
22659
22660
22661    if (workInProgressRoot !== null && (includesNonIdleWork(workInProgressRootSkippedLanes) || includesNonIdleWork(workInProgressRootUpdatedLanes))) {
22662      // Mark the current render as suspended so that we switch to working on
22663      // the updates that were skipped. Usually we only suspend at the end of
22664      // the render phase.
22665      // TODO: We should probably always mark the root as suspended immediately
22666      // (inside this function), since by suspending at the end of the render
22667      // phase introduces a potential mistake where we suspend lanes that were
22668      // pinged or updated while we were rendering.
22669      markRootSuspended$1(workInProgressRoot, workInProgressRootRenderLanes);
22670    }
22671  }
22672  function renderDidError() {
22673    if (workInProgressRootExitStatus !== RootCompleted) {
22674      workInProgressRootExitStatus = RootErrored;
22675    }
22676  } // Called during render to determine if anything has suspended.
22677  // Returns false if we're not sure.
22678
22679  function renderHasNotSuspendedYet() {
22680    // If something errored or completed, we can't really be sure,
22681    // so those are false.
22682    return workInProgressRootExitStatus === RootIncomplete;
22683  }
22684
22685  function renderRootSync(root, lanes) {
22686    var prevExecutionContext = executionContext;
22687    executionContext |= RenderContext;
22688    var prevDispatcher = pushDispatcher(); // If the root or lanes have changed, throw out the existing stack
22689    // and prepare a fresh one. Otherwise we'll continue where we left off.
22690
22691    if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes) {
22692      prepareFreshStack(root, lanes);
22693      startWorkOnPendingInteractions(root, lanes);
22694    }
22695
22696    var prevInteractions = pushInteractions(root);
22697
22698    do {
22699      try {
22700        workLoopSync();
22701        break;
22702      } catch (thrownValue) {
22703        handleError(root, thrownValue);
22704      }
22705    } while (true);
22706
22707    resetContextDependencies();
22708
22709    {
22710      popInteractions(prevInteractions);
22711    }
22712
22713    executionContext = prevExecutionContext;
22714    popDispatcher(prevDispatcher);
22715
22716    if (workInProgress !== null) {
22717      // This is a sync render, so we should have finished the whole tree.
22718      {
22719        {
22720          throw Error( "Cannot commit an incomplete root. This error is likely caused by a bug in React. Please file an issue." );
22721        }
22722      }
22723    }
22724
22725
22726    workInProgressRoot = null;
22727    workInProgressRootRenderLanes = NoLanes;
22728    return workInProgressRootExitStatus;
22729  } // The work loop is an extremely hot path. Tell Closure not to inline it.
22730
22731  /** @noinline */
22732
22733
22734  function workLoopSync() {
22735    // Already timed out, so perform work without checking if we need to yield.
22736    while (workInProgress !== null) {
22737      performUnitOfWork(workInProgress);
22738    }
22739  }
22740
22741  function renderRootConcurrent(root, lanes) {
22742    var prevExecutionContext = executionContext;
22743    executionContext |= RenderContext;
22744    var prevDispatcher = pushDispatcher(); // If the root or lanes have changed, throw out the existing stack
22745    // and prepare a fresh one. Otherwise we'll continue where we left off.
22746
22747    if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes) {
22748      resetRenderTimer();
22749      prepareFreshStack(root, lanes);
22750      startWorkOnPendingInteractions(root, lanes);
22751    }
22752
22753    var prevInteractions = pushInteractions(root);
22754
22755    do {
22756      try {
22757        workLoopConcurrent();
22758        break;
22759      } catch (thrownValue) {
22760        handleError(root, thrownValue);
22761      }
22762    } while (true);
22763
22764    resetContextDependencies();
22765
22766    {
22767      popInteractions(prevInteractions);
22768    }
22769
22770    popDispatcher(prevDispatcher);
22771    executionContext = prevExecutionContext;
22772
22773
22774    if (workInProgress !== null) {
22775
22776      return RootIncomplete;
22777    } else {
22778
22779
22780      workInProgressRoot = null;
22781      workInProgressRootRenderLanes = NoLanes; // Return the final exit status.
22782
22783      return workInProgressRootExitStatus;
22784    }
22785  }
22786  /** @noinline */
22787
22788
22789  function workLoopConcurrent() {
22790    // Perform work until Scheduler asks us to yield
22791    while (workInProgress !== null && !shouldYield()) {
22792      performUnitOfWork(workInProgress);
22793    }
22794  }
22795
22796  function performUnitOfWork(unitOfWork) {
22797    // The current, flushed, state of this fiber is the alternate. Ideally
22798    // nothing should rely on this, but relying on it here means that we don't
22799    // need an additional field on the work in progress.
22800    var current = unitOfWork.alternate;
22801    setCurrentFiber(unitOfWork);
22802    var next;
22803
22804    if ( (unitOfWork.mode & ProfileMode) !== NoMode) {
22805      startProfilerTimer(unitOfWork);
22806      next = beginWork$1(current, unitOfWork, subtreeRenderLanes);
22807      stopProfilerTimerIfRunningAndRecordDelta(unitOfWork, true);
22808    } else {
22809      next = beginWork$1(current, unitOfWork, subtreeRenderLanes);
22810    }
22811
22812    resetCurrentFiber();
22813    unitOfWork.memoizedProps = unitOfWork.pendingProps;
22814
22815    if (next === null) {
22816      // If this doesn't spawn new work, complete the current work.
22817      completeUnitOfWork(unitOfWork);
22818    } else {
22819      workInProgress = next;
22820    }
22821
22822    ReactCurrentOwner$2.current = null;
22823  }
22824
22825  function completeUnitOfWork(unitOfWork) {
22826    // Attempt to complete the current unit of work, then move to the next
22827    // sibling. If there are no more siblings, return to the parent fiber.
22828    var completedWork = unitOfWork;
22829
22830    do {
22831      // The current, flushed, state of this fiber is the alternate. Ideally
22832      // nothing should rely on this, but relying on it here means that we don't
22833      // need an additional field on the work in progress.
22834      var current = completedWork.alternate;
22835      var returnFiber = completedWork.return; // Check if the work completed or if something threw.
22836
22837      if ((completedWork.flags & Incomplete) === NoFlags) {
22838        setCurrentFiber(completedWork);
22839        var next = void 0;
22840
22841        if ( (completedWork.mode & ProfileMode) === NoMode) {
22842          next = completeWork(current, completedWork, subtreeRenderLanes);
22843        } else {
22844          startProfilerTimer(completedWork);
22845          next = completeWork(current, completedWork, subtreeRenderLanes); // Update render duration assuming we didn't error.
22846
22847          stopProfilerTimerIfRunningAndRecordDelta(completedWork, false);
22848        }
22849
22850        resetCurrentFiber();
22851
22852        if (next !== null) {
22853          // Completing this fiber spawned new work. Work on that next.
22854          workInProgress = next;
22855          return;
22856        }
22857
22858        resetChildLanes(completedWork);
22859
22860        if (returnFiber !== null && // Do not append effects to parents if a sibling failed to complete
22861        (returnFiber.flags & Incomplete) === NoFlags) {
22862          // Append all the effects of the subtree and this fiber onto the effect
22863          // list of the parent. The completion order of the children affects the
22864          // side-effect order.
22865          if (returnFiber.firstEffect === null) {
22866            returnFiber.firstEffect = completedWork.firstEffect;
22867          }
22868
22869          if (completedWork.lastEffect !== null) {
22870            if (returnFiber.lastEffect !== null) {
22871              returnFiber.lastEffect.nextEffect = completedWork.firstEffect;
22872            }
22873
22874            returnFiber.lastEffect = completedWork.lastEffect;
22875          } // If this fiber had side-effects, we append it AFTER the children's
22876          // side-effects. We can perform certain side-effects earlier if needed,
22877          // by doing multiple passes over the effect list. We don't want to
22878          // schedule our own side-effect on our own list because if end up
22879          // reusing children we'll schedule this effect onto itself since we're
22880          // at the end.
22881
22882
22883          var flags = completedWork.flags; // Skip both NoWork and PerformedWork tags when creating the effect
22884          // list. PerformedWork effect is read by React DevTools but shouldn't be
22885          // committed.
22886
22887          if (flags > PerformedWork) {
22888            if (returnFiber.lastEffect !== null) {
22889              returnFiber.lastEffect.nextEffect = completedWork;
22890            } else {
22891              returnFiber.firstEffect = completedWork;
22892            }
22893
22894            returnFiber.lastEffect = completedWork;
22895          }
22896        }
22897      } else {
22898        // This fiber did not complete because something threw. Pop values off
22899        // the stack without entering the complete phase. If this is a boundary,
22900        // capture values if possible.
22901        var _next = unwindWork(completedWork); // Because this fiber did not complete, don't reset its expiration time.
22902
22903
22904        if (_next !== null) {
22905          // If completing this work spawned new work, do that next. We'll come
22906          // back here again.
22907          // Since we're restarting, remove anything that is not a host effect
22908          // from the effect tag.
22909          _next.flags &= HostEffectMask;
22910          workInProgress = _next;
22911          return;
22912        }
22913
22914        if ( (completedWork.mode & ProfileMode) !== NoMode) {
22915          // Record the render duration for the fiber that errored.
22916          stopProfilerTimerIfRunningAndRecordDelta(completedWork, false); // Include the time spent working on failed children before continuing.
22917
22918          var actualDuration = completedWork.actualDuration;
22919          var child = completedWork.child;
22920
22921          while (child !== null) {
22922            actualDuration += child.actualDuration;
22923            child = child.sibling;
22924          }
22925
22926          completedWork.actualDuration = actualDuration;
22927        }
22928
22929        if (returnFiber !== null) {
22930          // Mark the parent fiber as incomplete and clear its effect list.
22931          returnFiber.firstEffect = returnFiber.lastEffect = null;
22932          returnFiber.flags |= Incomplete;
22933        }
22934      }
22935
22936      var siblingFiber = completedWork.sibling;
22937
22938      if (siblingFiber !== null) {
22939        // If there is more work to do in this returnFiber, do that next.
22940        workInProgress = siblingFiber;
22941        return;
22942      } // Otherwise, return to the parent
22943
22944
22945      completedWork = returnFiber; // Update the next thing we're working on in case something throws.
22946
22947      workInProgress = completedWork;
22948    } while (completedWork !== null); // We've reached the root.
22949
22950
22951    if (workInProgressRootExitStatus === RootIncomplete) {
22952      workInProgressRootExitStatus = RootCompleted;
22953    }
22954  }
22955
22956  function resetChildLanes(completedWork) {
22957    if ( // TODO: Move this check out of the hot path by moving `resetChildLanes`
22958    // to switch statement in `completeWork`.
22959    (completedWork.tag === LegacyHiddenComponent || completedWork.tag === OffscreenComponent) && completedWork.memoizedState !== null && !includesSomeLane(subtreeRenderLanes, OffscreenLane) && (completedWork.mode & ConcurrentMode) !== NoLanes) {
22960      // The children of this component are hidden. Don't bubble their
22961      // expiration times.
22962      return;
22963    }
22964
22965    var newChildLanes = NoLanes; // Bubble up the earliest expiration time.
22966
22967    if ( (completedWork.mode & ProfileMode) !== NoMode) {
22968      // In profiling mode, resetChildExpirationTime is also used to reset
22969      // profiler durations.
22970      var actualDuration = completedWork.actualDuration;
22971      var treeBaseDuration = completedWork.selfBaseDuration; // When a fiber is cloned, its actualDuration is reset to 0. This value will
22972      // only be updated if work is done on the fiber (i.e. it doesn't bailout).
22973      // When work is done, it should bubble to the parent's actualDuration. If
vendor: 5,555 bytes, lines 22974-23116
22974      // the fiber has not been cloned though, (meaning no work was done), then
22975      // this value will reflect the amount of time spent working on a previous
22976      // render. In that case it should not bubble. We determine whether it was
22977      // cloned by comparing the child pointer.
22978
22979      var shouldBubbleActualDurations = completedWork.alternate === null || completedWork.child !== completedWork.alternate.child;
22980      var child = completedWork.child;
22981
22982      while (child !== null) {
22983        newChildLanes = mergeLanes(newChildLanes, mergeLanes(child.lanes, child.childLanes));
22984
22985        if (shouldBubbleActualDurations) {
22986          actualDuration += child.actualDuration;
22987        }
22988
22989        treeBaseDuration += child.treeBaseDuration;
22990        child = child.sibling;
22991      }
22992
22993      var isTimedOutSuspense = completedWork.tag === SuspenseComponent && completedWork.memoizedState !== null;
22994
22995      if (isTimedOutSuspense) {
22996        // Don't count time spent in a timed out Suspense subtree as part of the base duration.
22997        var primaryChildFragment = completedWork.child;
22998
22999        if (primaryChildFragment !== null) {
23000          treeBaseDuration -= primaryChildFragment.treeBaseDuration;
23001        }
23002      }
23003
23004      completedWork.actualDuration = actualDuration;
23005      completedWork.treeBaseDuration = treeBaseDuration;
23006    } else {
23007      var _child = completedWork.child;
23008
23009      while (_child !== null) {
23010        newChildLanes = mergeLanes(newChildLanes, mergeLanes(_child.lanes, _child.childLanes));
23011        _child = _child.sibling;
23012      }
23013    }
23014
23015    completedWork.childLanes = newChildLanes;
23016  }
23017
23018  function commitRoot(root) {
23019    var renderPriorityLevel = getCurrentPriorityLevel();
23020    runWithPriority$1(ImmediatePriority$1, commitRootImpl.bind(null, root, renderPriorityLevel));
23021    return null;
23022  }
23023
23024  function commitRootImpl(root, renderPriorityLevel) {
23025    do {
23026      // `flushPassiveEffects` will call `flushSyncUpdateQueue` at the end, which
23027      // means `flushPassiveEffects` will sometimes result in additional
23028      // passive effects. So we need to keep flushing in a loop until there are
23029      // no more pending effects.
23030      // TODO: Might be better if `flushPassiveEffects` did not automatically
23031      // flush synchronous work at the end, to avoid factoring hazards like this.
23032      flushPassiveEffects();
23033    } while (rootWithPendingPassiveEffects !== null);
23034
23035    flushRenderPhaseStrictModeWarningsInDEV();
23036
23037    if (!((executionContext & (RenderContext | CommitContext)) === NoContext)) {
23038      {
23039        throw Error( "Should not already be working." );
23040      }
23041    }
23042
23043    var finishedWork = root.finishedWork;
23044    var lanes = root.finishedLanes;
23045
23046    if (finishedWork === null) {
23047
23048      return null;
23049    }
23050
23051    root.finishedWork = null;
23052    root.finishedLanes = NoLanes;
23053
23054    if (!(finishedWork !== root.current)) {
23055      {
23056        throw Error( "Cannot commit the same tree as before. This error is likely caused by a bug in React. Please file an issue." );
23057      }
23058    } // commitRoot never returns a continuation; it always finishes synchronously.
23059    // So we can clear these now to allow a new callback to be scheduled.
23060
23061
23062    root.callbackNode = null; // Update the first and last pending times on this root. The new first
23063    // pending time is whatever is left on the root fiber.
23064
23065    var remainingLanes = mergeLanes(finishedWork.lanes, finishedWork.childLanes);
23066    markRootFinished(root, remainingLanes); // Clear already finished discrete updates in case that a later call of
23067    // `flushDiscreteUpdates` starts a useless render pass which may cancels
23068    // a scheduled timeout.
23069
23070    if (rootsWithPendingDiscreteUpdates !== null) {
23071      if (!hasDiscreteLanes(remainingLanes) && rootsWithPendingDiscreteUpdates.has(root)) {
23072        rootsWithPendingDiscreteUpdates.delete(root);
23073      }
23074    }
23075
23076    if (root === workInProgressRoot) {
23077      // We can reset these now that they are finished.
23078      workInProgressRoot = null;
23079      workInProgress = null;
23080      workInProgressRootRenderLanes = NoLanes;
23081    } // Get the list of effects.
23082
23083
23084    var firstEffect;
23085
23086    if (finishedWork.flags > PerformedWork) {
23087      // A fiber's effect list consists only of its children, not itself. So if
23088      // the root has an effect, we need to add it to the end of the list. The
23089      // resulting list is the set that would belong to the root's parent, if it
23090      // had one; that is, all the effects in the tree including the root.
23091      if (finishedWork.lastEffect !== null) {
23092        finishedWork.lastEffect.nextEffect = finishedWork;
23093        firstEffect = finishedWork.firstEffect;
23094      } else {
23095        firstEffect = finishedWork;
23096      }
23097    } else {
23098      // There is no effect on the root.
23099      firstEffect = finishedWork.firstEffect;
23100    }
23101
23102    if (firstEffect !== null) {
23103
23104      var prevExecutionContext = executionContext;
23105      executionContext |= CommitContext;
23106      var prevInteractions = pushInteractions(root); // Reset this to null before calling lifecycles
23107
23108      ReactCurrentOwner$2.current = null; // The commit phase is broken into several sub-phases. We do a separate pass
23109      // of the effect list for each phase: all mutation effects come before all
23110      // layout effects, and so on.
23111      // The first phase a "before mutation" phase. We use this phase to read the
23112      // state of the host tree right before we mutate it. This is where
23113      // getSnapshotBeforeUpdate is called.
23114
23115      focusedInstanceHandle = prepareForCommit(root.containerInfo);
23116      shouldFireAfterActiveInstanceBlur = false;
23117      nextEffect = firstEffect;
23118
23119      do {
23120        {
23121          invokeGuardedCallback(null, commitBeforeMutationEffects, null);
23122
23123          if (hasCaughtError()) {
23124            if (!(nextEffect !== null)) {
23125              {
23126                throw Error( "Should be working on an effect." );
23127              }
23128            }
23129
23130            var error = clearCaughtError();
23131            captureCommitPhaseError(nextEffect, error);
23132            nextEffect = nextEffect.nextEffect;
23133          }
23134        }
23135      } while (nextEffect !== null); // We no longer need to track the active instance fiber
23136
23137
23138      focusedInstanceHandle = null;
23139
23140      {
23141        // Mark the current commit time to be shared by all Profilers in this
23142        // batch. This enables them to be grouped later.
23143        recordCommitTime();
23144      } // The next phase is the mutation phase, where we mutate the host tree.
23145
23146
23147      nextEffect = firstEffect;
23148
23149      do {
23150        {
23151          invokeGuardedCallback(null, commitMutationEffects, null, root, renderPriorityLevel);
23152
23153          if (hasCaughtError()) {
23154            if (!(nextEffect !== null)) {
23155              {
23156                throw Error( "Should be working on an effect." );
23157              }
23158            }
23159
23160            var _error = clearCaughtError();
23161
23162            captureCommitPhaseError(nextEffect, _error);
23163            nextEffect = nextEffect.nextEffect;
23164          }
23165        }
23166      } while (nextEffect !== null);
23167
23168      resetAfterCommit(root.containerInfo); // The work-in-progress tree is now the current tree. This must come after
23169      // the mutation phase, so that the previous tree is still current during
23170      // componentWillUnmount, but before the layout phase, so that the finished
23171      // work is current during componentDidMount/Update.
23172
23173      root.current = finishedWork; // The next phase is the layout phase, where we call effects that read
23174      // the host tree after it's been mutated. The idiomatic use case for this is
23175      // layout, but class component lifecycles also fire here for legacy reasons.
23176
23177      nextEffect = firstEffect;
23178
23179      do {
23180        {
23181          invokeGuardedCallback(null, commitLayoutEffects, null, root, lanes);
23182
23183          if (hasCaughtError()) {
23184            if (!(nextEffect !== null)) {
23185              {
23186                throw Error( "Should be working on an effect." );
23187              }
23188            }
23189
23190            var _error2 = clearCaughtError();
23191
23192            captureCommitPhaseError(nextEffect, _error2);
23193            nextEffect = nextEffect.nextEffect;
23194          }
23195        }
23196      } while (nextEffect !== null);
23197
23198      nextEffect = null; // Tell Scheduler to yield at the end of the frame, so the browser has an
23199      // opportunity to paint.
23200
23201      requestPaint();
23202
23203      {
23204        popInteractions(prevInteractions);
23205      }
23206
23207      executionContext = prevExecutionContext;
23208    } else {
23209      // No effects.
23210      root.current = finishedWork; // Measure these anyway so the flamegraph explicitly shows that there were
23211      // no effects.
23212      // TODO: Maybe there's a better way to report this.
23213
23214      {
23215        recordCommitTime();
23216      }
23217    }
23218
23219    var rootDidHavePassiveEffects = rootDoesHavePassiveEffects;
23220
23221    if (rootDoesHavePassiveEffects) {
23222      // This commit has passive effects. Stash a reference to them. But don't
23223      // schedule a callback until after flushing layout work.
23224      rootDoesHavePassiveEffects = false;
23225      rootWithPendingPassiveEffects = root;
23226      pendingPassiveEffectsLanes = lanes;
23227      pendingPassiveEffectsRenderPriority = renderPriorityLevel;
23228    } else {
23229      // We are done with the effect chain at this point so let's clear the
23230      // nextEffect pointers to assist with GC. If we have passive effects, we'll
23231      // clear this in flushPassiveEffects.
23232      nextEffect = firstEffect;
23233
23234      while (nextEffect !== null) {
23235        var nextNextEffect = nextEffect.nextEffect;
23236        nextEffect.nextEffect = null;
23237
23238        if (nextEffect.flags & Deletion) {
23239          detachFiberAfterEffects(nextEffect);
23240        }
23241
23242        nextEffect = nextNextEffect;
23243      }
23244    } // Read this again, since an effect might have updated it
23245
23246
23247    remainingLanes = root.pendingLanes; // Check if there's remaining work on this root
23248
23249    if (remainingLanes !== NoLanes) {
23250      {
23251        if (spawnedWorkDuringRender !== null) {
23252          var expirationTimes = spawnedWorkDuringRender;
23253          spawnedWorkDuringRender = null;
23254
23255          for (var i = 0; i < expirationTimes.length; i++) {
23256            scheduleInteractions(root, expirationTimes[i], root.memoizedInteractions);
23257          }
23258        }
23259
23260        schedulePendingInteractions(root, remainingLanes);
23261      }
23262    } else {
23263      // If there's no remaining work, we can clear the set of already failed
23264      // error boundaries.
23265      legacyErrorBoundariesThatAlreadyFailed = null;
23266    }
23267
23268    {
23269      if (!rootDidHavePassiveEffects) {
23270        // If there are no passive effects, then we can complete the pending interactions.
23271        // Otherwise, we'll wait until after the passive effects are flushed.
23272        // Wait to do this until after remaining work has been scheduled,
23273        // so that we don't prematurely signal complete for interactions when there's e.g. hidden work.
23274        finishPendingInteractions(root, lanes);
23275      }
23276    }
23277
23278    if (remainingLanes === SyncLane) {
23279      // Count the number of times the root synchronously re-renders without
23280      // finishing. If there are too many, it indicates an infinite update loop.
23281      if (root === rootWithNestedUpdates) {
23282        nestedUpdateCount++;
23283      } else {
23284        nestedUpdateCount = 0;
23285        rootWithNestedUpdates = root;
23286      }
23287    } else {
23288      nestedUpdateCount = 0;
23289    }
23290
vendor: 3,288 bytes, lines 23291-23392
23291    onCommitRoot(finishedWork.stateNode, renderPriorityLevel);
23292
23293    {
23294      onCommitRoot$1();
23295    } // Always call this before exiting `commitRoot`, to ensure that any
23296    // additional work on this root is scheduled.
23297
23298
23299    ensureRootIsScheduled(root, now());
23300
23301    if (hasUncaughtError) {
23302      hasUncaughtError = false;
23303      var _error3 = firstUncaughtError;
23304      firstUncaughtError = null;
23305      throw _error3;
23306    }
23307
23308    if ((executionContext & LegacyUnbatchedContext) !== NoContext) {
23309      // a ReactDOM.render-ed root inside of batchedUpdates. The commit fired
23310      // synchronously, but layout updates should be deferred until the end
23311      // of the batch.
23312
23313
23314      return null;
23315    } // If layout work was scheduled, flush it now.
23316
23317
23318    flushSyncCallbackQueue();
23319
23320    return null;
23321  }
23322
23323  function commitBeforeMutationEffects() {
23324    while (nextEffect !== null) {
23325      var current = nextEffect.alternate;
23326
23327      if (!shouldFireAfterActiveInstanceBlur && focusedInstanceHandle !== null) {
23328        if ((nextEffect.flags & Deletion) !== NoFlags) {
23329          if (doesFiberContain(nextEffect, focusedInstanceHandle)) {
23330            shouldFireAfterActiveInstanceBlur = true;
23331          }
23332        } else {
23333          // TODO: Move this out of the hot path using a dedicated effect tag.
23334          if (nextEffect.tag === SuspenseComponent && isSuspenseBoundaryBeingHidden(current, nextEffect) && doesFiberContain(nextEffect, focusedInstanceHandle)) {
23335            shouldFireAfterActiveInstanceBlur = true;
23336          }
23337        }
23338      }
23339
23340      var flags = nextEffect.flags;
23341
23342      if ((flags & Snapshot) !== NoFlags) {
23343        setCurrentFiber(nextEffect);
23344        commitBeforeMutationLifeCycles(current, nextEffect);
23345        resetCurrentFiber();
23346      }
23347
23348      if ((flags & Passive) !== NoFlags) {
23349        // If there are passive effects, schedule a callback to flush at
23350        // the earliest opportunity.
23351        if (!rootDoesHavePassiveEffects) {
23352          rootDoesHavePassiveEffects = true;
23353          scheduleCallback(NormalPriority$1, function () {
23354            flushPassiveEffects();
23355            return null;
23356          });
23357        }
23358      }
23359
23360      nextEffect = nextEffect.nextEffect;
23361    }
23362  }
23363
23364  function commitMutationEffects(root, renderPriorityLevel) {
23365    // TODO: Should probably move the bulk of this function to commitWork.
23366    while (nextEffect !== null) {
23367      setCurrentFiber(nextEffect);
23368      var flags = nextEffect.flags;
23369
23370      if (flags & ContentReset) {
23371        commitResetTextContent(nextEffect);
23372      }
23373
23374      if (flags & Ref) {
23375        var current = nextEffect.alternate;
23376
23377        if (current !== null) {
23378          commitDetachRef(current);
23379        }
23380      } // The following switch statement is only concerned about placement,
23381      // updates, and deletions. To avoid needing to add a case for every possible
23382      // bitmap value, we remove the secondary effects from the effect tag and
23383      // switch on that value.
23384
23385
23386      var primaryFlags = flags & (Placement | Update | Deletion | Hydrating);
23387
23388      switch (primaryFlags) {
23389        case Placement:
23390          {
23391            commitPlacement(nextEffect); // Clear the "placement" from effect tag so that we know that this is
23392            // inserted, before any life-cycles like componentDidMount gets called.
23393            // TODO: findDOMNode doesn't rely on this any more but isMounted does
23394            // and isMounted is deprecated anyway so we should be able to kill this.
23395
23396            nextEffect.flags &= ~Placement;
23397            break;
23398          }
23399
23400        case PlacementAndUpdate:
23401          {
23402            // Placement
23403            commitPlacement(nextEffect); // Clear the "placement" from effect tag so that we know that this is
23404            // inserted, before any life-cycles like componentDidMount gets called.
23405
23406            nextEffect.flags &= ~Placement; // Update
23407
23408            var _current = nextEffect.alternate;
23409            commitWork(_current, nextEffect);
23410            break;
23411          }
23412
23413        case Hydrating:
23414          {
23415            nextEffect.flags &= ~Hydrating;
23416            break;
23417          }
23418
23419        case HydratingAndUpdate:
23420          {
23421            nextEffect.flags &= ~Hydrating; // Update
23422
23423            var _current2 = nextEffect.alternate;
23424            commitWork(_current2, nextEffect);
23425            break;
23426          }
23427
23428        case Update:
23429          {
23430            var _current3 = nextEffect.alternate;
23431            commitWork(_current3, nextEffect);
23432            break;
23433          }
23434
23435        case Deletion:
23436          {
23437            commitDeletion(root, nextEffect);
23438            break;
23439          }
23440      }
23441
23442      resetCurrentFiber();
23443      nextEffect = nextEffect.nextEffect;
23444    }
23445  }
23446
23447  function commitLayoutEffects(root, committedLanes) {
23448
23449
23450    while (nextEffect !== null) {
23451      setCurrentFiber(nextEffect);
23452      var flags = nextEffect.flags;
23453
23454      if (flags & (Update | Callback)) {
23455        var current = nextEffect.alternate;
23456        commitLifeCycles(root, current, nextEffect);
23457      }
23458
23459      {
23460        if (flags & Ref) {
23461          commitAttachRef(nextEffect);
23462        }
23463      }
23464
23465      resetCurrentFiber();
23466      nextEffect = nextEffect.nextEffect;
23467    }
23468  }
23469
23470  function flushPassiveEffects() {
23471    // Returns whether passive effects were flushed.
23472    if (pendingPassiveEffectsRenderPriority !== NoPriority$1) {
23473      var priorityLevel = pendingPassiveEffectsRenderPriority > NormalPriority$1 ? NormalPriority$1 : pendingPassiveEffectsRenderPriority;
23474      pendingPassiveEffectsRenderPriority = NoPriority$1;
23475
23476      {
23477        return runWithPriority$1(priorityLevel, flushPassiveEffectsImpl);
23478      }
23479    }
23480
23481    return false;
23482  }
23483  function enqueuePendingPassiveHookEffectMount(fiber, effect) {
23484    pendingPassiveHookEffectsMount.push(effect, fiber);
23485
23486    if (!rootDoesHavePassiveEffects) {
23487      rootDoesHavePassiveEffects = true;
23488      scheduleCallback(NormalPriority$1, function () {
23489        flushPassiveEffects();
23490        return null;
23491      });
23492    }
23493  }
23494  function enqueuePendingPassiveHookEffectUnmount(fiber, effect) {
23495    pendingPassiveHookEffectsUnmount.push(effect, fiber);
23496
23497    {
23498      fiber.flags |= PassiveUnmountPendingDev;
23499      var alternate = fiber.alternate;
23500
23501      if (alternate !== null) {
23502        alternate.flags |= PassiveUnmountPendingDev;
23503      }
23504    }
23505
23506    if (!rootDoesHavePassiveEffects) {
23507      rootDoesHavePassiveEffects = true;
23508      scheduleCallback(NormalPriority$1, function () {
23509        flushPassiveEffects();
23510        return null;
23511      });
23512    }
23513  }
23514
23515  function invokePassiveEffectCreate(effect) {
23516    var create = effect.create;
23517    effect.destroy = create();
23518  }
23519
23520  function flushPassiveEffectsImpl() {
23521    if (rootWithPendingPassiveEffects === null) {
23522      return false;
23523    }
23524
23525    var root = rootWithPendingPassiveEffects;
23526    var lanes = pendingPassiveEffectsLanes;
23527    rootWithPendingPassiveEffects = null;
23528    pendingPassiveEffectsLanes = NoLanes;
23529
23530    if (!((executionContext & (RenderContext | CommitContext)) === NoContext)) {
23531      {
23532        throw Error( "Cannot flush passive effects while already rendering." );
23533      }
23534    }
23535
23536    {
23537      isFlushingPassiveEffects = true;
23538    }
23539
23540    var prevExecutionContext = executionContext;
23541    executionContext |= CommitContext;
23542    var prevInteractions = pushInteractions(root); // It's important that ALL pending passive effect destroy functions are called
23543    // before ANY passive effect create functions are called.
23544    // Otherwise effects in sibling components might interfere with each other.
23545    // e.g. a destroy function in one component may unintentionally override a ref
23546    // value set by a create function in another component.
23547    // Layout effects have the same constraint.
23548    // First pass: Destroy stale passive effects.
23549
23550    var unmountEffects = pendingPassiveHookEffectsUnmount;
23551    pendingPassiveHookEffectsUnmount = [];
23552
23553    for (var i = 0; i < unmountEffects.length; i += 2) {
23554      var _effect = unmountEffects[i];
23555      var fiber = unmountEffects[i + 1];
23556      var destroy = _effect.destroy;
23557      _effect.destroy = undefined;
23558
23559      {
23560        fiber.flags &= ~PassiveUnmountPendingDev;
23561        var alternate = fiber.alternate;
23562
23563        if (alternate !== null) {
23564          alternate.flags &= ~PassiveUnmountPendingDev;
23565        }
23566      }
23567
23568      if (typeof destroy === 'function') {
23569        {
23570          setCurrentFiber(fiber);
23571
23572          {
23573            invokeGuardedCallback(null, destroy, null);
23574          }
23575
23576          if (hasCaughtError()) {
23577            if (!(fiber !== null)) {
23578              {
23579                throw Error( "Should be working on an effect." );
23580              }
23581            }
23582
23583            var error = clearCaughtError();
23584            captureCommitPhaseError(fiber, error);
23585          }
23586
23587          resetCurrentFiber();
23588        }
23589      }
23590    } // Second pass: Create new passive effects.
23591
23592
23593    var mountEffects = pendingPassiveHookEffectsMount;
23594    pendingPassiveHookEffectsMount = [];
23595
23596    for (var _i = 0; _i < mountEffects.length; _i += 2) {
23597      var _effect2 = mountEffects[_i];
23598      var _fiber = mountEffects[_i + 1];
23599
23600      {
23601        setCurrentFiber(_fiber);
23602
23603        {
23604          invokeGuardedCallback(null, invokePassiveEffectCreate, null, _effect2);
23605        }
23606
23607        if (hasCaughtError()) {
23608          if (!(_fiber !== null)) {
23609            {
23610              throw Error( "Should be working on an effect." );
23611            }
23612          }
23613
23614          var _error4 = clearCaughtError();
23615
23616          captureCommitPhaseError(_fiber, _error4);
23617        }
23618
23619        resetCurrentFiber();
23620      }
23621    } // Note: This currently assumes there are no passive effects on the root fiber
23622    // because the root is not part of its own effect list.
23623    // This could change in the future.
23624
23625
23626    var effect = root.current.firstEffect;
23627
23628    while (effect !== null) {
23629      var nextNextEffect = effect.nextEffect; // Remove nextEffect pointer to assist GC
23630
23631      effect.nextEffect = null;
23632
23633      if (effect.flags & Deletion) {
23634        detachFiberAfterEffects(effect);
23635      }
23636
23637      effect = nextNextEffect;
23638    }
23639
23640    {
23641      popInteractions(prevInteractions);
23642      finishPendingInteractions(root, lanes);
23643    }
23644
23645    {
23646      isFlushingPassiveEffects = false;
vendor: 7,954 bytes, lines 23647-23838
23647    }
23648
23649    executionContext = prevExecutionContext;
23650    flushSyncCallbackQueue(); // If additional passive effects were scheduled, increment a counter. If this
23651    // exceeds the limit, we'll fire a warning.
23652
23653    nestedPassiveUpdateCount = rootWithPendingPassiveEffects === null ? 0 : nestedPassiveUpdateCount + 1;
23654    return true;
23655  }
23656
23657  function isAlreadyFailedLegacyErrorBoundary(instance) {
23658    return legacyErrorBoundariesThatAlreadyFailed !== null && legacyErrorBoundariesThatAlreadyFailed.has(instance);
23659  }
23660  function markLegacyErrorBoundaryAsFailed(instance) {
23661    if (legacyErrorBoundariesThatAlreadyFailed === null) {
23662      legacyErrorBoundariesThatAlreadyFailed = new Set([instance]);
23663    } else {
23664      legacyErrorBoundariesThatAlreadyFailed.add(instance);
23665    }
23666  }
23667
23668  function prepareToThrowUncaughtError(error) {
23669    if (!hasUncaughtError) {
23670      hasUncaughtError = true;
23671      firstUncaughtError = error;
23672    }
23673  }
23674
23675  var onUncaughtError = prepareToThrowUncaughtError;
23676
23677  function captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {
23678    var errorInfo = createCapturedValue(error, sourceFiber);
23679    var update = createRootErrorUpdate(rootFiber, errorInfo, SyncLane);
23680    enqueueUpdate(rootFiber, update);
23681    var eventTime = requestEventTime();
23682    var root = markUpdateLaneFromFiberToRoot(rootFiber, SyncLane);
23683
23684    if (root !== null) {
23685      markRootUpdated(root, SyncLane, eventTime);
23686      ensureRootIsScheduled(root, eventTime);
23687      schedulePendingInteractions(root, SyncLane);
23688    }
23689  }
23690
23691  function captureCommitPhaseError(sourceFiber, error) {
23692    if (sourceFiber.tag === HostRoot) {
23693      // Error was thrown at the root. There is no parent, so the root
23694      // itself should capture it.
23695      captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error);
23696      return;
23697    }
23698
23699    var fiber = sourceFiber.return;
23700
23701    while (fiber !== null) {
23702      if (fiber.tag === HostRoot) {
23703        captureCommitPhaseErrorOnRoot(fiber, sourceFiber, error);
23704        return;
23705      } else if (fiber.tag === ClassComponent) {
23706        var ctor = fiber.type;
23707        var instance = fiber.stateNode;
23708
23709        if (typeof ctor.getDerivedStateFromError === 'function' || typeof instance.componentDidCatch === 'function' && !isAlreadyFailedLegacyErrorBoundary(instance)) {
23710          var errorInfo = createCapturedValue(error, sourceFiber);
23711          var update = createClassErrorUpdate(fiber, errorInfo, SyncLane);
23712          enqueueUpdate(fiber, update);
23713          var eventTime = requestEventTime();
23714          var root = markUpdateLaneFromFiberToRoot(fiber, SyncLane);
23715
23716          if (root !== null) {
23717            markRootUpdated(root, SyncLane, eventTime);
23718            ensureRootIsScheduled(root, eventTime);
23719            schedulePendingInteractions(root, SyncLane);
23720          } else {
23721            // This component has already been unmounted.
23722            // We can't schedule any follow up work for the root because the fiber is already unmounted,
23723            // but we can still call the log-only boundary so the error isn't swallowed.
23724            //
23725            // TODO This is only a temporary bandaid for the old reconciler fork.
23726            // We can delete this special case once the new fork is merged.
23727            if (typeof instance.componentDidCatch === 'function' && !isAlreadyFailedLegacyErrorBoundary(instance)) {
23728              try {
23729                instance.componentDidCatch(error, errorInfo);
23730              } catch (errorToIgnore) {// TODO Ignore this error? Rethrow it?
23731                // This is kind of an edge case.
23732              }
23733            }
23734          }
23735
23736          return;
23737        }
23738      }
23739
23740      fiber = fiber.return;
23741    }
23742  }
23743  function pingSuspendedRoot(root, wakeable, pingedLanes) {
23744    var pingCache = root.pingCache;
23745
23746    if (pingCache !== null) {
23747      // The wakeable resolved, so we no longer need to memoize, because it will
23748      // never be thrown again.
23749      pingCache.delete(wakeable);
23750    }
23751
23752    var eventTime = requestEventTime();
23753    markRootPinged(root, pingedLanes);
23754
23755    if (workInProgressRoot === root && isSubsetOfLanes(workInProgressRootRenderLanes, pingedLanes)) {
23756      // Received a ping at the same priority level at which we're currently
23757      // rendering. We might want to restart this render. This should mirror
23758      // the logic of whether or not a root suspends once it completes.
23759      // TODO: If we're rendering sync either due to Sync, Batched or expired,
23760      // we should probably never restart.
23761      // If we're suspended with delay, or if it's a retry, we'll always suspend
23762      // so we can always restart.
23763      if (workInProgressRootExitStatus === RootSuspendedWithDelay || workInProgressRootExitStatus === RootSuspended && includesOnlyRetries(workInProgressRootRenderLanes) && now() - globalMostRecentFallbackTime < FALLBACK_THROTTLE_MS) {
23764        // Restart from the root.
23765        prepareFreshStack(root, NoLanes);
23766      } else {
23767        // Even though we can't restart right now, we might get an
23768        // opportunity later. So we mark this render as having a ping.
23769        workInProgressRootPingedLanes = mergeLanes(workInProgressRootPingedLanes, pingedLanes);
23770      }
23771    }
23772
23773    ensureRootIsScheduled(root, eventTime);
23774    schedulePendingInteractions(root, pingedLanes);
23775  }
23776
23777  function retryTimedOutBoundary(boundaryFiber, retryLane) {
23778    // The boundary fiber (a Suspense component or SuspenseList component)
23779    // previously was rendered in its fallback state. One of the promises that
23780    // suspended it has resolved, which means at least part of the tree was
23781    // likely unblocked. Try rendering again, at a new expiration time.
23782    if (retryLane === NoLane) {
23783      retryLane = requestRetryLane(boundaryFiber);
23784    } // TODO: Special case idle priority?
23785
23786
23787    var eventTime = requestEventTime();
23788    var root = markUpdateLaneFromFiberToRoot(boundaryFiber, retryLane);
23789
23790    if (root !== null) {
23791      markRootUpdated(root, retryLane, eventTime);
23792      ensureRootIsScheduled(root, eventTime);
23793      schedulePendingInteractions(root, retryLane);
23794    }
23795  }
23796  function resolveRetryWakeable(boundaryFiber, wakeable) {
23797    var retryLane = NoLane; // Default
23798
23799    var retryCache;
23800
23801    {
23802      retryCache = boundaryFiber.stateNode;
23803    }
23804
23805    if (retryCache !== null) {
23806      // The wakeable resolved, so we no longer need to memoize, because it will
23807      // never be thrown again.
23808      retryCache.delete(wakeable);
23809    }
23810
23811    retryTimedOutBoundary(boundaryFiber, retryLane);
23812  } // Computes the next Just Noticeable Difference (JND) boundary.
23813  // The theory is that a person can't tell the difference between small differences in time.
23814  // Therefore, if we wait a bit longer than necessary that won't translate to a noticeable
23815  // difference in the experience. However, waiting for longer might mean that we can avoid
23816  // showing an intermediate loading state. The longer we have already waited, the harder it
23817  // is to tell small differences in time. Therefore, the longer we've already waited,
23818  // the longer we can wait additionally. At some point we have to give up though.
23819  // We pick a train model where the next boundary commits at a consistent schedule.
23820  // These particular numbers are vague estimates. We expect to adjust them based on research.
23821
23822  function jnd(timeElapsed) {
23823    return timeElapsed < 120 ? 120 : timeElapsed < 480 ? 480 : timeElapsed < 1080 ? 1080 : timeElapsed < 1920 ? 1920 : timeElapsed < 3000 ? 3000 : timeElapsed < 4320 ? 4320 : ceil(timeElapsed / 1960) * 1960;
23824  }
23825
23826  function checkForNestedUpdates() {
23827    if (nestedUpdateCount > NESTED_UPDATE_LIMIT) {
23828      nestedUpdateCount = 0;
23829      rootWithNestedUpdates = null;
23830
23831      {
23832        {
23833          throw Error( "Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops." );
23834        }
23835      }
23836    }
23837
23838    {
23839      if (nestedPassiveUpdateCount > NESTED_PASSIVE_UPDATE_LIMIT) {
23840        nestedPassiveUpdateCount = 0;
23841
23842        error('Maximum update depth exceeded. This can happen when a component ' + "calls setState inside useEffect, but useEffect either doesn't " + 'have a dependency array, or one of the dependencies changes on ' + 'every render.');
23843      }
23844    }
23845  }
23846
23847  function flushRenderPhaseStrictModeWarningsInDEV() {
23848    {
23849      ReactStrictModeWarnings.flushLegacyContextWarning();
23850
23851      {
23852        ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings();
23853      }
23854    }
23855  }
23856
23857  var didWarnStateUpdateForNotYetMountedComponent = null;
23858
23859  function warnAboutUpdateOnNotYetMountedFiberInDEV(fiber) {
23860    {
23861      if ((executionContext & RenderContext) !== NoContext) {
23862        // We let the other warning about render phase updates deal with this one.
23863        return;
23864      }
23865
23866      if (!(fiber.mode & (BlockingMode | ConcurrentMode))) {
23867        return;
23868      }
23869
23870      var tag = fiber.tag;
23871
23872      if (tag !== IndeterminateComponent && tag !== HostRoot && tag !== ClassComponent && tag !== FunctionComponent && tag !== ForwardRef && tag !== MemoComponent && tag !== SimpleMemoComponent && tag !== Block) {
23873        // Only warn for user-defined components, not internal ones like Suspense.
23874        return;
23875      } // We show the whole stack but dedupe on the top component's name because
23876      // the problematic code almost always lies inside that component.
23877
23878
23879      var componentName = getComponentName(fiber.type) || 'ReactComponent';
23880
23881      if (didWarnStateUpdateForNotYetMountedComponent !== null) {
23882        if (didWarnStateUpdateForNotYetMountedComponent.has(componentName)) {
23883          return;
23884        }
23885
23886        didWarnStateUpdateForNotYetMountedComponent.add(componentName);
23887      } else {
23888        didWarnStateUpdateForNotYetMountedComponent = new Set([componentName]);
23889      }
23890
23891      var previousFiber = current;
23892
23893      try {
23894        setCurrentFiber(fiber);
23895
23896        error("Can't perform a React state update on a component that hasn't mounted yet. " + 'This indicates that you have a side-effect in your render function that ' + 'asynchronously later calls tries to update the component. Move this work to ' + 'useEffect instead.');
23897      } finally {
23898        if (previousFiber) {
23899          setCurrentFiber(fiber);
23900        } else {
23901          resetCurrentFiber();
23902        }
23903      }
23904    }
23905  }
23906
23907  var didWarnStateUpdateForUnmountedComponent = null;
23908
23909  function warnAboutUpdateOnUnmountedFiberInDEV(fiber) {
23910    {
23911      var tag = fiber.tag;
23912
23913      if (tag !== HostRoot && tag !== ClassComponent && tag !== FunctionComponent && tag !== ForwardRef && tag !== MemoComponent && tag !== SimpleMemoComponent && tag !== Block) {
23914        // Only warn for user-defined components, not internal ones like Suspense.
23915        return;
23916      } // If there are pending passive effects unmounts for this Fiber,
23917      // we can assume that they would have prevented this update.
23918
23919
23920      if ((fiber.flags & PassiveUnmountPendingDev) !== NoFlags) {
23921        return;
23922      } // We show the whole stack but dedupe on the top component's name because
23923      // the problematic code almost always lies inside that component.
23924
23925
23926      var componentName = getComponentName(fiber.type) || 'ReactComponent';
23927
23928      if (didWarnStateUpdateForUnmountedComponent !== null) {
23929        if (didWarnStateUpdateForUnmountedComponent.has(componentName)) {
23930          return;
23931        }
23932
23933        didWarnStateUpdateForUnmountedComponent.add(componentName);
23934      } else {
23935        didWarnStateUpdateForUnmountedComponent = new Set([componentName]);
23936      }
23937
23938      if (isFlushingPassiveEffects) ; else {
23939        var previousFiber = current;
23940
23941        try {
23942          setCurrentFiber(fiber);
23943
23944          error("Can't perform a React state update on an unmounted component. This " + 'is a no-op, but it indicates a memory leak in your application. To ' + 'fix, cancel all subscriptions and asynchronous tasks in %s.', tag === ClassComponent ? 'the componentWillUnmount method' : 'a useEffect cleanup function');
23945        } finally {
23946          if (previousFiber) {
23947            setCurrentFiber(fiber);
23948          } else {
23949            resetCurrentFiber();
23950          }
23951        }
23952      }
23953    }
23954  }
23955
23956  var beginWork$1;
23957
23958  {
23959    var dummyFiber = null;
23960
23961    beginWork$1 = function (current, unitOfWork, lanes) {
23962      // If a component throws an error, we replay it again in a synchronously
23963      // dispatched event, so that the debugger will treat it as an uncaught
23964      // error See ReactErrorUtils for more information.
23965      // Before entering the begin phase, copy the work-in-progress onto a dummy
23966      // fiber. If beginWork throws, we'll use this to reset the state.
23967      var originalWorkInProgressCopy = assignFiberPropertiesInDEV(dummyFiber, unitOfWork);
23968
vendor: 4,773 bytes, lines 23969-24081
23969      try {
23970        return beginWork(current, unitOfWork, lanes);
23971      } catch (originalError) {
23972        if (originalError !== null && typeof originalError === 'object' && typeof originalError.then === 'function') {
23973          // Don't replay promises. Treat everything else like an error.
23974          throw originalError;
23975        } // Keep this code in sync with handleError; any changes here must have
23976        // corresponding changes there.
23977
23978
23979        resetContextDependencies();
23980        resetHooksAfterThrow(); // Don't reset current debug fiber, since we're about to work on the
23981        // same fiber again.
23982        // Unwind the failed stack frame
23983
23984        unwindInterruptedWork(unitOfWork); // Restore the original properties of the fiber.
23985
23986        assignFiberPropertiesInDEV(unitOfWork, originalWorkInProgressCopy);
23987
23988        if ( unitOfWork.mode & ProfileMode) {
23989          // Reset the profiler timer.
23990          startProfilerTimer(unitOfWork);
23991        } // Run beginWork again.
23992
23993
23994        invokeGuardedCallback(null, beginWork, null, current, unitOfWork, lanes);
23995
23996        if (hasCaughtError()) {
23997          var replayError = clearCaughtError(); // `invokeGuardedCallback` sometimes sets an expando `_suppressLogging`.
23998          // Rethrow this error instead of the original one.
23999
24000          throw replayError;
24001        } else {
24002          // This branch is reachable if the render phase is impure.
24003          throw originalError;
24004        }
24005      }
24006    };
24007  }
24008
24009  var didWarnAboutUpdateInRender = false;
24010  var didWarnAboutUpdateInRenderForAnotherComponent;
24011
24012  {
24013    didWarnAboutUpdateInRenderForAnotherComponent = new Set();
24014  }
24015
24016  function warnAboutRenderPhaseUpdatesInDEV(fiber) {
24017    {
24018      if (isRendering && (executionContext & RenderContext) !== NoContext && !getIsUpdatingOpaqueValueInRenderPhaseInDEV()) {
24019        switch (fiber.tag) {
24020          case FunctionComponent:
24021          case ForwardRef:
24022          case SimpleMemoComponent:
24023            {
24024              var renderingComponentName = workInProgress && getComponentName(workInProgress.type) || 'Unknown'; // Dedupe by the rendering component because it's the one that needs to be fixed.
24025
24026              var dedupeKey = renderingComponentName;
24027
24028              if (!didWarnAboutUpdateInRenderForAnotherComponent.has(dedupeKey)) {
24029                didWarnAboutUpdateInRenderForAnotherComponent.add(dedupeKey);
24030                var setStateComponentName = getComponentName(fiber.type) || 'Unknown';
24031
24032                error('Cannot update a component (`%s`) while rendering a ' + 'different component (`%s`). To locate the bad setState() call inside `%s`, ' + 'follow the stack trace as described in https://reactjs.org/link/setstate-in-render', setStateComponentName, renderingComponentName, renderingComponentName);
24033              }
24034
24035              break;
24036            }
24037
24038          case ClassComponent:
24039            {
24040              if (!didWarnAboutUpdateInRender) {
24041                error('Cannot update during an existing state transition (such as ' + 'within `render`). Render methods should be a pure ' + 'function of props and state.');
24042
24043                didWarnAboutUpdateInRender = true;
24044              }
24045
24046              break;
24047            }
24048        }
24049      }
24050    }
24051  } // a 'shared' variable that changes when act() opens/closes in tests.
24052
24053
24054  var IsThisRendererActing = {
24055    current: false
24056  };
24057  function warnIfNotScopedWithMatchingAct(fiber) {
24058    {
24059      if ( IsSomeRendererActing.current === true && IsThisRendererActing.current !== true) {
24060        var previousFiber = current;
24061
24062        try {
24063          setCurrentFiber(fiber);
24064
24065          error("It looks like you're using the wrong act() around your test interactions.\n" + 'Be sure to use the matching version of act() corresponding to your renderer:\n\n' + '// for react-dom:\n' + // Break up imports to avoid accidentally parsing them as dependencies.
24066          'import {act} fr' + "om 'react-dom/test-utils';\n" + '// ...\n' + 'act(() => ...);\n\n' + '// for react-test-renderer:\n' + // Break up imports to avoid accidentally parsing them as dependencies.
24067          'import TestRenderer fr' + "om react-test-renderer';\n" + 'const {act} = TestRenderer;\n' + '// ...\n' + 'act(() => ...);');
24068        } finally {
24069          if (previousFiber) {
24070            setCurrentFiber(fiber);
24071          } else {
24072            resetCurrentFiber();
24073          }
24074        }
24075      }
24076    }
24077  }
24078  function warnIfNotCurrentlyActingEffectsInDEV(fiber) {
24079    {
24080      if ( (fiber.mode & StrictMode) !== NoMode && IsSomeRendererActing.current === false && IsThisRendererActing.current === false) {
24081        error('An update to %s ran an effect, but was not wrapped in act(...).\n\n' + 'When testing, code that causes React state updates should be ' + 'wrapped into act(...):\n\n' + 'act(() =>
24081 {\n' + '  /* fire events that update state */\n' + '});\n' + '/* assert on the output */\n\n' + "This ensures that you're testing the behavior the user would see " + 'in the browser.' + ' Learn more at https://reactjs.org/link/wrap-tests-with-act', getComponentName(fiber.type));
24082      }
24083    }
24084  }
24085
24086  function warnIfNotCurrentlyActingUpdatesInDEV(fiber) {
24087    {
24088      if ( executionContext === NoContext && IsSomeRendererActing.current === false && IsThisRendererActing.current === false) {
24089        var previousFiber = current;
24090
24091        try {
24092          setCurrentFiber(fiber);
24093
24094          error('An update to %s inside a test was not wrapped in act(...).\n\n' + 'When testing, code that causes React state updates should be ' + 'wrapped into act(...):\n\n' + 'act(() => {\n' + '  /* fire events that update state */\n' + '});\n' + '/* assert on the output */\n\n' + "This ensures that you're testing the behavior the user would see " + 'in the browser.' + ' Learn more at https://reactjs.org/link/wrap-tests-with-act', getComponentName(fiber.type));
24095        } finally {
24096          if (previousFiber) {
24097            setCurrentFiber(fiber);
24098          } else {
24099            resetCurrentFiber();
24100          }
24101        }
24102      }
24103    }
24104  }
24105
24106  var warnIfNotCurrentlyActingUpdatesInDev = warnIfNotCurrentlyActingUpdatesInDEV; // In tests, we want to enforce a mocked scheduler.
24107
24108  var didWarnAboutUnmockedScheduler = false; // TODO Before we release concurrent mode, revisit this and decide whether a mocked
24109  // scheduler is the actual recommendation. The alternative could be a testing build,
24110  // a new lib, or whatever; we dunno just yet. This message is for early adopters
24111  // to get their tests right.
24112
24113  function warnIfUnmockedScheduler(fiber) {
24114    {
24115      if (didWarnAboutUnmockedScheduler === false && unstable_flushAllWithoutAsserting === undefined) {
24116        if (fiber.mode & BlockingMode || fiber.mode & ConcurrentMode) {
24117          didWarnAboutUnmockedScheduler = true;
24118
24119          error('In Concurrent or Sync modes, the "scheduler" module needs to be mocked ' + 'to guarantee consistent behaviour across tests and browsers. ' + 'For example, with jest: \n' + // Break up requires to avoid accidentally parsing them as dependencies.
24120          "jest.mock('scheduler', () => require" + "('scheduler/unstable_mock'));\n\n" + 'For more info, visit https://reactjs.org/link/mock-scheduler');
24121        }
24122      }
24123    }
24124  }
24125
24126  function computeThreadID(root, lane) {
24127    // Interaction threads are unique per root and expiration time.
24128    // NOTE: Intentionally unsound cast. All that matters is that it's a number
24129    // and it represents a batch of work. Could make a helper function instead,
24130    // but meh this is fine for now.
24131    return lane * 1000 + root.interactionThreadID;
24132  }
24133
24134  function markSpawnedWork(lane) {
24135
24136    if (spawnedWorkDuringRender === null) {
24137      spawnedWorkDuringRender = [lane];
24138    } else {
24139      spawnedWorkDuringRender.push(lane);
24140    }
24141  }
24142
24143  function scheduleInteractions(root, lane, interactions) {
24144
24145    if (interactions.size > 0) {
24146      var pendingInteractionMap = root.pendingInteractionMap;
24147      var pendingInteractions = pendingInteractionMap.get(lane);
24148
24149      if (pendingInteractions != null) {
24150        interactions.forEach(function (interaction) {
24151          if (!pendingInteractions.has(interaction)) {
24152            // Update the pending async work count for previously unscheduled interaction.
24153            interaction.__count++;
24154          }
24155
24156          pendingInteractions.add(interaction);
24157        });
24158      } else {
24159        pendingInteractionMap.set(lane, new Set(interactions)); // Update the pending async work count for the current interactions.
24160
24161        interactions.forEach(function (interaction) {
24162          interaction.__count++;
24163        });
24164      }
24165
24166      var subscriber = __subscriberRef.current;
24167
24168      if (subscriber !== null) {
24169        var threadID = computeThreadID(root, lane);
24170        subscriber.onWorkScheduled(interactions, threadID);
24171      }
24172    }
24173  }
24174
24175  function schedulePendingInteractions(root, lane) {
24176
24177    scheduleInteractions(root, lane, __interactionsRef.current);
24178  }
24179
24180  function startWorkOnPendingInteractions(root, lanes) {
24181    // we can accurately attribute time spent working on it, And so that cascading
24182    // work triggered during the render phase will be associated with it.
24183
24184
24185    var interactions = new Set();
vendor: 29,396 bytes, lines 24186-25087
24186    root.pendingInteractionMap.forEach(function (scheduledInteractions, scheduledLane) {
24187      if (includesSomeLane(lanes, scheduledLane)) {
24188        scheduledInteractions.forEach(function (interaction) {
24189          return interactions.add(interaction);
24190        });
24191      }
24192    }); // Store the current set of interactions on the FiberRoot for a few reasons:
24193    // We can re-use it in hot functions like performConcurrentWorkOnRoot()
24194    // without having to recalculate it. We will also use it in commitWork() to
24195    // pass to any Profiler onRender() hooks. This also provides DevTools with a
24196    // way to access it when the onCommitRoot() hook is called.
24197
24198    root.memoizedInteractions = interactions;
24199
24200    if (interactions.size > 0) {
24201      var subscriber = __subscriberRef.current;
24202
24203      if (subscriber !== null) {
24204        var threadID = computeThreadID(root, lanes);
24205
24206        try {
24207          subscriber.onWorkStarted(interactions, threadID);
24208        } catch (error) {
24209          // If the subscriber throws, rethrow it in a separate task
24210          scheduleCallback(ImmediatePriority$1, function () {
24211            throw error;
24212          });
24213        }
24214      }
24215    }
24216  }
24217
24218  function finishPendingInteractions(root, committedLanes) {
24219
24220    var remainingLanesAfterCommit = root.pendingLanes;
24221    var subscriber;
24222
24223    try {
24224      subscriber = __subscriberRef.current;
24225
24226      if (subscriber !== null && root.memoizedInteractions.size > 0) {
24227        // FIXME: More than one lane can finish in a single commit.
24228        var threadID = computeThreadID(root, committedLanes);
24229        subscriber.onWorkStopped(root.memoizedInteractions, threadID);
24230      }
24231    } catch (error) {
24232      // If the subscriber throws, rethrow it in a separate task
24233      scheduleCallback(ImmediatePriority$1, function () {
24234        throw error;
24235      });
24236    } finally {
24237      // Clear completed interactions from the pending Map.
24238      // Unless the render was suspended or cascading work was scheduled,
24239      // In which case– leave pending interactions until the subsequent render.
24240      var pendingInteractionMap = root.pendingInteractionMap;
24241      pendingInteractionMap.forEach(function (scheduledInteractions, lane) {
24242        // Only decrement the pending interaction count if we're done.
24243        // If there's still work at the current priority,
24244        // That indicates that we are waiting for suspense data.
24245        if (!includesSomeLane(remainingLanesAfterCommit, lane)) {
24246          pendingInteractionMap.delete(lane);
24247          scheduledInteractions.forEach(function (interaction) {
24248            interaction.__count--;
24249
24250            if (subscriber !== null && interaction.__count === 0) {
24251              try {
24252                subscriber.onInteractionScheduledWorkCompleted(interaction);
24253              } catch (error) {
24254                // If the subscriber throws, rethrow it in a separate task
24255                scheduleCallback(ImmediatePriority$1, function () {
24256                  throw error;
24257                });
24258              }
24259            }
24260          });
24261        }
24262      });
24263    }
24264  } // `act` testing API
24265
24266  function shouldForceFlushFallbacksInDEV() {
24267    // Never force flush in production. This function should get stripped out.
24268    return  actingUpdatesScopeDepth > 0;
24269  }
24270  // so we can tell if any async act() calls try to run in parallel.
24271
24272
24273  var actingUpdatesScopeDepth = 0;
24274
24275  function detachFiberAfterEffects(fiber) {
24276    fiber.sibling = null;
24277    fiber.stateNode = null;
24278  }
24279
24280  var resolveFamily = null; // $FlowFixMe Flow gets confused by a WeakSet feature check below.
24281
24282  var failedBoundaries = null;
24283  var setRefreshHandler = function (handler) {
24284    {
24285      resolveFamily = handler;
24286    }
24287  };
24288  function resolveFunctionForHotReloading(type) {
24289    {
24290      if (resolveFamily === null) {
24291        // Hot reloading is disabled.
24292        return type;
24293      }
24294
24295      var family = resolveFamily(type);
24296
24297      if (family === undefined) {
24298        return type;
24299      } // Use the latest known implementation.
24300
24301
24302      return family.current;
24303    }
24304  }
24305  function resolveClassForHotReloading(type) {
24306    // No implementation differences.
24307    return resolveFunctionForHotReloading(type);
24308  }
24309  function resolveForwardRefForHotReloading(type) {
24310    {
24311      if (resolveFamily === null) {
24312        // Hot reloading is disabled.
24313        return type;
24314      }
24315
24316      var family = resolveFamily(type);
24317
24318      if (family === undefined) {
24319        // Check if we're dealing with a real forwardRef. Don't want to crash early.
24320        if (type !== null && type !== undefined && typeof type.render === 'function') {
24321          // ForwardRef is special because its resolved .type is an object,
24322          // but it's possible that we only have its inner render function in the map.
24323          // If that inner render function is different, we'll build a new forwardRef type.
24324          var currentRender = resolveFunctionForHotReloading(type.render);
24325
24326          if (type.render !== currentRender) {
24327            var syntheticType = {
24328              $$typeof: REACT_FORWARD_REF_TYPE,
24329              render: currentRender
24330            };
24331
24332            if (type.displayName !== undefined) {
24333              syntheticType.displayName = type.displayName;
24334            }
24335
24336            return syntheticType;
24337          }
24338        }
24339
24340        return type;
24341      } // Use the latest known implementation.
24342
24343
24344      return family.current;
24345    }
24346  }
24347  function isCompatibleFamilyForHotReloading(fiber, element) {
24348    {
24349      if (resolveFamily === null) {
24350        // Hot reloading is disabled.
24351        return false;
24352      }
24353
24354      var prevType = fiber.elementType;
24355      var nextType = element.type; // If we got here, we know types aren't === equal.
24356
24357      var needsCompareFamilies = false;
24358      var $$typeofNextType = typeof nextType === 'object' && nextType !== null ? nextType.$$typeof : null;
24359
24360      switch (fiber.tag) {
24361        case ClassComponent:
24362          {
24363            if (typeof nextType === 'function') {
24364              needsCompareFamilies = true;
24365            }
24366
24367            break;
24368          }
24369
24370        case FunctionComponent:
24371          {
24372            if (typeof nextType === 'function') {
24373              needsCompareFamilies = true;
24374            } else if ($$typeofNextType === REACT_LAZY_TYPE) {
24375              // We don't know the inner type yet.
24376              // We're going to assume that the lazy inner type is stable,
24377              // and so it is sufficient to avoid reconciling it away.
24378              // We're not going to unwrap or actually use the new lazy type.
24379              needsCompareFamilies = true;
24380            }
24381
24382            break;
24383          }
24384
24385        case ForwardRef:
24386          {
24387            if ($$typeofNextType === REACT_FORWARD_REF_TYPE) {
24388              needsCompareFamilies = true;
24389            } else if ($$typeofNextType === REACT_LAZY_TYPE) {
24390              needsCompareFamilies = true;
24391            }
24392
24393            break;
24394          }
24395
24396        case MemoComponent:
24397        case SimpleMemoComponent:
24398          {
24399            if ($$typeofNextType === REACT_MEMO_TYPE) {
24400              // TODO: if it was but can no longer be simple,
24401              // we shouldn't set this.
24402              needsCompareFamilies = true;
24403            } else if ($$typeofNextType === REACT_LAZY_TYPE) {
24404              needsCompareFamilies = true;
24405            }
24406
24407            break;
24408          }
24409
24410        default:
24411          return false;
24412      } // Check if both types have a family and it's the same one.
24413
24414
24415      if (needsCompareFamilies) {
24416        // Note: memo() and forwardRef() we'll compare outer rather than inner type.
24417        // This means both of them need to be registered to preserve state.
24418        // If we unwrapped and compared the inner types for wrappers instead,
24419        // then we would risk falsely saying two separate memo(Foo)
24420        // calls are equivalent because they wrap the same Foo function.
24421        var prevFamily = resolveFamily(prevType);
24422
24423        if (prevFamily !== undefined && prevFamily === resolveFamily(nextType)) {
24424          return true;
24425        }
24426      }
24427
24428      return false;
24429    }
24430  }
24431  function markFailedErrorBoundaryForHotReloading(fiber) {
24432    {
24433      if (resolveFamily === null) {
24434        // Hot reloading is disabled.
24435        return;
24436      }
24437
24438      if (typeof WeakSet !== 'function') {
24439        return;
24440      }
24441
24442      if (failedBoundaries === null) {
24443        failedBoundaries = new WeakSet();
24444      }
24445
24446      failedBoundaries.add(fiber);
24447    }
24448  }
24449  var scheduleRefresh = function (root, update) {
24450    {
24451      if (resolveFamily === null) {
24452        // Hot reloading is disabled.
24453        return;
24454      }
24455
24456      var staleFamilies = update.staleFamilies,
24457          updatedFamilies = update.updatedFamilies;
24458      flushPassiveEffects();
24459      flushSync(function () {
24460        scheduleFibersWithFamiliesRecursively(root.current, updatedFamilies, staleFamilies);
24461      });
24462    }
24463  };
24464  var scheduleRoot = function (root, element) {
24465    {
24466      if (root.context !== emptyContextObject) {
24467        // Super edge case: root has a legacy _renderSubtree context
24468        // but we don't know the parentComponent so we can't pass it.
24469        // Just ignore. We'll delete this with _renderSubtree code path later.
24470        return;
24471      }
24472
24473      flushPassiveEffects();
24474      flushSync(function () {
24475        updateContainer(element, root, null, null);
24476      });
24477    }
24478  };
24479
24480  function scheduleFibersWithFamiliesRecursively(fiber, updatedFamilies, staleFamilies) {
24481    {
24482      var alternate = fiber.alternate,
24483          child = fiber.child,
24484          sibling = fiber.sibling,
24485          tag = fiber.tag,
24486          type = fiber.type;
24487      var candidateType = null;
24488
24489      switch (tag) {
24490        case FunctionComponent:
24491        case SimpleMemoComponent:
24492        case ClassComponent:
24493          candidateType = type;
24494          break;
24495
24496        case ForwardRef:
24497          candidateType = type.render;
24498          break;
24499      }
24500
24501      if (resolveFamily === null) {
24502        throw new Error('Expected resolveFamily to be set during hot reload.');
24503      }
24504
24505      var needsRender = false;
24506      var needsRemount = false;
24507
24508      if (candidateType !== null) {
24509        var family = resolveFamily(candidateType);
24510
24511        if (family !== undefined) {
24512          if (staleFamilies.has(family)) {
24513            needsRemount = true;
24514          } else if (updatedFamilies.has(family)) {
24515            if (tag === ClassComponent) {
24516              needsRemount = true;
24517            } else {
24518              needsRender = true;
24519            }
24520          }
24521        }
24522      }
24523
24524      if (failedBoundaries !== null) {
24525        if (failedBoundaries.has(fiber) || alternate !== null && failedBoundaries.has(alternate)) {
24526          needsRemount = true;
24527        }
24528      }
24529
24530      if (needsRemount) {
24531        fiber._debugNeedsRemount = true;
24532      }
24533
24534      if (needsRemount || needsRender) {
24535        scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp);
24536      }
24537
24538      if (child !== null && !needsRemount) {
24539        scheduleFibersWithFamiliesRecursively(child, updatedFamilies, staleFamilies);
24540      }
24541
24542      if (sibling !== null) {
24543        scheduleFibersWithFamiliesRecursively(sibling, updatedFamilies, staleFamilies);
24544      }
24545    }
24546  }
24547
24548  var findHostInstancesForRefresh = function (root, families) {
24549    {
24550      var hostInstances = new Set();
24551      var types = new Set(families.map(function (family) {
24552        return family.current;
24553      }));
24554      findHostInstancesForMatchingFibersRecursively(root.current, types, hostInstances);
24555      return hostInstances;
24556    }
24557  };
24558
24559  function findHostInstancesForMatchingFibersRecursively(fiber, types, hostInstances) {
24560    {
24561      var child = fiber.child,
24562          sibling = fiber.sibling,
24563          tag = fiber.tag,
24564          type = fiber.type;
24565      var candidateType = null;
24566
24567      switch (tag) {
24568        case FunctionComponent:
24569        case SimpleMemoComponent:
24570        case ClassComponent:
24571          candidateType = type;
24572          break;
24573
24574        case ForwardRef:
24575          candidateType = type.render;
24576          break;
24577      }
24578
24579      var didMatch = false;
24580
24581      if (candidateType !== null) {
24582        if (types.has(candidateType)) {
24583          didMatch = true;
24584        }
24585      }
24586
24587      if (didMatch) {
24588        // We have a match. This only drills down to the closest host components.
24589        // There's no need to search deeper because for the purpose of giving
24590        // visual feedback, "flashing" outermost parent rectangles is sufficient.
24591        findHostInstancesForFiberShallowly(fiber, hostInstances);
24592      } else {
24593        // If there's no match, maybe there will be one further down in the child tree.
24594        if (child !== null) {
24595          findHostInstancesForMatchingFibersRecursively(child, types, hostInstances);
24596        }
24597      }
24598
24599      if (sibling !== null) {
24600        findHostInstancesForMatchingFibersRecursively(sibling, types, hostInstances);
24601      }
24602    }
24603  }
24604
24605  function findHostInstancesForFiberShallowly(fiber, hostInstances) {
24606    {
24607      var foundHostInstances = findChildHostInstancesForFiberShallowly(fiber, hostInstances);
24608
24609      if (foundHostInstances) {
24610        return;
24611      } // If we didn't find any host children, fallback to closest host parent.
24612
24613
24614      var node = fiber;
24615
24616      while (true) {
24617        switch (node.tag) {
24618          case HostComponent:
24619            hostInstances.add(node.stateNode);
24620            return;
24621
24622          case HostPortal:
24623            hostInstances.add(node.stateNode.containerInfo);
24624            return;
24625
24626          case HostRoot:
24627            hostInstances.add(node.stateNode.containerInfo);
24628            return;
24629        }
24630
24631        if (node.return === null) {
24632          throw new Error('Expected to reach root first.');
24633        }
24634
24635        node = node.return;
24636      }
24637    }
24638  }
24639
24640  function findChildHostInstancesForFiberShallowly(fiber, hostInstances) {
24641    {
24642      var node = fiber;
24643      var foundHostInstances = false;
24644
24645      while (true) {
24646        if (node.tag === HostComponent) {
24647          // We got a match.
24648          foundHostInstances = true;
24649          hostInstances.add(node.stateNode); // There may still be more, so keep searching.
24650        } else if (node.child !== null) {
24651          node.child.return = node;
24652          node = node.child;
24653          continue;
24654        }
24655
24656        if (node === fiber) {
24657          return foundHostInstances;
24658        }
24659
24660        while (node.sibling === null) {
24661          if (node.return === null || node.return === fiber) {
24662            return foundHostInstances;
24663          }
24664
24665          node = node.return;
24666        }
24667
24668        node.sibling.return = node.return;
24669        node = node.sibling;
24670      }
24671    }
24672
24673    return false;
24674  }
24675
24676  var hasBadMapPolyfill;
24677
24678  {
24679    hasBadMapPolyfill = false;
24680
24681    try {
24682      var nonExtensibleObject = Object.preventExtensions({});
24683      /* eslint-disable no-new */
24684
24685      new Map([[nonExtensibleObject, null]]);
24686      new Set([nonExtensibleObject]);
24687      /* eslint-enable no-new */
24688    } catch (e) {
24689      // TODO: Consider warning about bad polyfills
24690      hasBadMapPolyfill = true;
24691    }
24692  }
24693
24694  var debugCounter = 1;
24695
24696  function FiberNode(tag, pendingProps, key, mode) {
24697    // Instance
24698    this.tag = tag;
24699    this.key = key;
24700    this.elementType = null;
24701    this.type = null;
24702    this.stateNode = null; // Fiber
24703
24704    this.return = null;
24705    this.child = null;
24706    this.sibling = null;
24707    this.index = 0;
24708    this.ref = null;
24709    this.pendingProps = pendingProps;
24710    this.memoizedProps = null;
24711    this.updateQueue = null;
24712    this.memoizedState = null;
24713    this.dependencies = null;
24714    this.mode = mode; // Effects
24715
24716    this.flags = NoFlags;
24717    this.nextEffect = null;
24718    this.firstEffect = null;
24719    this.lastEffect = null;
24720    this.lanes = NoLanes;
24721    this.childLanes = NoLanes;
24722    this.alternate = null;
24723
24724    {
24725      // Note: The following is done to avoid a v8 performance cliff.
24726      //
24727      // Initializing the fields below to smis and later updating them with
24728      // double values will cause Fibers to end up having separate shapes.
24729      // This behavior/bug has something to do with Object.preventExtension().
24730      // Fortunately this only impacts DEV builds.
24731      // Unfortunately it makes React unusably slow for some applications.
24732      // To work around this, initialize the fields below with doubles.
24733      //
24734      // Learn more about this here:
24735      // https://github.com/facebook/react/issues/14365
24736      // https://bugs.chromium.org/p/v8/issues/detail?id=8538
24737      this.actualDuration = Number.NaN;
24738      this.actualStartTime = Number.NaN;
24739      this.selfBaseDuration = Number.NaN;
24740      this.treeBaseDuration = Number.NaN; // It's okay to replace the initial doubles with smis after initialization.
24741      // This won't trigger the performance cliff mentioned above,
24742      // and it simplifies other profiler code (including DevTools).
24743
24744      this.actualDuration = 0;
24745      this.actualStartTime = -1;
24746      this.selfBaseDuration = 0;
24747      this.treeBaseDuration = 0;
24748    }
24749
24750    {
24751      // This isn't directly used but is handy for debugging internals:
24752      this._debugID = debugCounter++;
24753      this._debugSource = null;
24754      this._debugOwner = null;
24755      this._debugNeedsRemount = false;
24756      this._debugHookTypes = null;
24757
24758      if (!hasBadMapPolyfill && typeof Object.preventExtensions === 'function') {
24759        Object.preventExtensions(this);
24760      }
24761    }
24762  } // This is a constructor function, rather than a POJO constructor, still
24763  // please ensure we do the following:
24764  // 1) Nobody should add any instance methods on this. Instance methods can be
24765  //    more difficult to predict when they get optimized and they are almost
24766  //    never inlined properly in static compilers.
24767  // 2) Nobody should rely on `instanceof Fiber` for type testing. We should
24768  //    always know when it is a fiber.
24769  // 3) We might want to experiment with using numeric keys since they are easier
24770  //    to optimize in a non-JIT environment.
24771  // 4) We can easily go from a constructor to a createFiber object literal if that
24772  //    is faster.
24773  // 5) It should be easy to port this to a C struct and keep a C implementation
24774  //    compatible.
24775
24776
24777  var createFiber = function (tag, pendingProps, key, mode) {
24778    // $FlowFixMe: the shapes are exact here but Flow doesn't like constructors
24779    return new FiberNode(tag, pendingProps, key, mode);
24780  };
24781
24782  function shouldConstruct$1(Component) {
24783    var prototype = Component.prototype;
24784    return !!(prototype && prototype.isReactComponent);
24785  }
24786
24787  function isSimpleFunctionComponent(type) {
24788    return typeof type === 'function' && !shouldConstruct$1(type) && type.defaultProps === undefined;
24789  }
24790  function resolveLazyComponentTag(Component) {
24791    if (typeof Component === 'function') {
24792      return shouldConstruct$1(Component) ? ClassComponent : FunctionComponent;
24793    } else if (Component !== undefined && Component !== null) {
24794      var $$typeof = Component.$$typeof;
24795
24796      if ($$typeof === REACT_FORWARD_REF_TYPE) {
24797        return ForwardRef;
24798      }
24799
24800      if ($$typeof === REACT_MEMO_TYPE) {
24801        return MemoComponent;
24802      }
24803    }
24804
24805    return IndeterminateComponent;
24806  } // This is used to create an alternate fiber to do work on.
24807
24808  function createWorkInProgress(current, pendingProps) {
24809    var workInProgress = current.alternate;
24810
24811    if (workInProgress === null) {
24812      // We use a double buffering pooling technique because we know that we'll
24813      // only ever need at most two versions of a tree. We pool the "other" unused
24814      // node that we're free to reuse. This is lazily created to avoid allocating
24815      // extra objects for things that are never updated. It also allow us to
24816      // reclaim the extra memory if needed.
24817      workInProgress = createFiber(current.tag, pendingProps, current.key, current.mode);
24818      workInProgress.elementType = current.elementType;
24819      workInProgress.type = current.type;
24820      workInProgress.stateNode = current.stateNode;
24821
24822      {
24823        // DEV-only fields
24824        workInProgress._debugID = current._debugID;
24825        workInProgress._debugSource = current._debugSource;
24826        workInProgress._debugOwner = current._debugOwner;
24827        workInProgress._debugHookTypes = current._debugHookTypes;
24828      }
24829
24830      workInProgress.alternate = current;
24831      current.alternate = workInProgress;
24832    } else {
24833      workInProgress.pendingProps = pendingProps; // Needed because Blocks store data on type.
24834
24835      workInProgress.type = current.type; // We already have an alternate.
24836      // Reset the effect tag.
24837
24838      workInProgress.flags = NoFlags; // The effect list is no longer valid.
24839
24840      workInProgress.nextEffect = null;
24841      workInProgress.firstEffect = null;
24842      workInProgress.lastEffect = null;
24843
24844      {
24845        // We intentionally reset, rather than copy, actualDuration & actualStartTime.
24846        // This prevents time from endlessly accumulating in new commits.
24847        // This has the downside of resetting values for different priority renders,
24848        // But works for yielding (the common case) and should support resuming.
24849        workInProgress.actualDuration = 0;
24850        workInProgress.actualStartTime = -1;
24851      }
24852    }
24853
24854    workInProgress.childLanes = current.childLanes;
24855    workInProgress.lanes = current.lanes;
24856    workInProgress.child = current.child;
24857    workInProgress.memoizedProps = current.memoizedProps;
24858    workInProgress.memoizedState = current.memoizedState;
24859    workInProgress.updateQueue = current.updateQueue; // Clone the dependencies object. This is mutated during the render phase, so
24860    // it cannot be shared with the current fiber.
24861
24862    var currentDependencies = current.dependencies;
24863    workInProgress.dependencies = currentDependencies === null ? null : {
24864      lanes: currentDependencies.lanes,
24865      firstContext: currentDependencies.firstContext
24866    }; // These will be overridden during the parent's reconciliation
24867
24868    workInProgress.sibling = current.sibling;
24869    workInProgress.index = current.index;
24870    workInProgress.ref = current.ref;
24871
24872    {
24873      workInProgress.selfBaseDuration = current.selfBaseDuration;
24874      workInProgress.treeBaseDuration = current.treeBaseDuration;
24875    }
24876
24877    {
24878      workInProgress._debugNeedsRemount = current._debugNeedsRemount;
24879
24880      switch (workInProgress.tag) {
24881        case IndeterminateComponent:
24882        case FunctionComponent:
24883        case SimpleMemoComponent:
24884          workInProgress.type = resolveFunctionForHotReloading(current.type);
24885          break;
24886
24887        case ClassComponent:
24888          workInProgress.type = resolveClassForHotReloading(current.type);
24889          break;
24890
24891        case ForwardRef:
24892          workInProgress.type = resolveForwardRefForHotReloading(current.type);
24893          break;
24894      }
24895    }
24896
24897    return workInProgress;
24898  } // Used to reuse a Fiber for a second pass.
24899
24900  function resetWorkInProgress(workInProgress, renderLanes) {
24901    // This resets the Fiber to what createFiber or createWorkInProgress would
24902    // have set the values to before during the first pass. Ideally this wouldn't
24903    // be necessary but unfortunately many code paths reads from the workInProgress
24904    // when they should be reading from current and writing to workInProgress.
24905    // We assume pendingProps, index, key, ref, return are still untouched to
24906    // avoid doing another reconciliation.
24907    // Reset the effect tag but keep any Placement tags, since that's something
24908    // that child fiber is setting, not the reconciliation.
24909    workInProgress.flags &= Placement; // The effect list is no longer valid.
24910
24911    workInProgress.nextEffect = null;
24912    workInProgress.firstEffect = null;
24913    workInProgress.lastEffect = null;
24914    var current = workInProgress.alternate;
24915
24916    if (current === null) {
24917      // Reset to createFiber's initial values.
24918      workInProgress.childLanes = NoLanes;
24919      workInProgress.lanes = renderLanes;
24920      workInProgress.child = null;
24921      workInProgress.memoizedProps = null;
24922      workInProgress.memoizedState = null;
24923      workInProgress.updateQueue = null;
24924      workInProgress.dependencies = null;
24925      workInProgress.stateNode = null;
24926
24927      {
24928        // Note: We don't reset the actualTime counts. It's useful to accumulate
24929        // actual time across multiple render passes.
24930        workInProgress.selfBaseDuration = 0;
24931        workInProgress.treeBaseDuration = 0;
24932      }
24933    } else {
24934      // Reset to the cloned values that createWorkInProgress would've.
24935      workInProgress.childLanes = current.childLanes;
24936      workInProgress.lanes = current.lanes;
24937      workInProgress.child = current.child;
24938      workInProgress.memoizedProps = current.memoizedProps;
24939      workInProgress.memoizedState = current.memoizedState;
24940      workInProgress.updateQueue = current.updateQueue; // Needed because Blocks store data on type.
24941
24942      workInProgress.type = current.type; // Clone the dependencies object. This is mutated during the render phase, so
24943      // it cannot be shared with the current fiber.
24944
24945      var currentDependencies = current.dependencies;
24946      workInProgress.dependencies = currentDependencies === null ? null : {
24947        lanes: currentDependencies.lanes,
24948        firstContext: currentDependencies.firstContext
24949      };
24950
24951      {
24952        // Note: We don't reset the actualTime counts. It's useful to accumulate
24953        // actual time across multiple render passes.
24954        workInProgress.selfBaseDuration = current.selfBaseDuration;
24955        workInProgress.treeBaseDuration = current.treeBaseDuration;
24956      }
24957    }
24958
24959    return workInProgress;
24960  }
24961  function createHostRootFiber(tag) {
24962    var mode;
24963
24964    if (tag === ConcurrentRoot) {
24965      mode = ConcurrentMode | BlockingMode | StrictMode;
24966    } else if (tag === BlockingRoot) {
24967      mode = BlockingMode | StrictMode;
24968    } else {
24969      mode = NoMode;
24970    }
24971
24972    if ( isDevToolsPresent) {
24973      // Always collect profile timings when DevTools are present.
24974      // This enables DevTools to start capturing timing at any point–
24975      // Without some nodes in the tree having empty base times.
24976      mode |= ProfileMode;
24977    }
24978
24979    return createFiber(HostRoot, null, null, mode);
24980  }
24981  function createFiberFromTypeAndProps(type, // React$ElementType
24982  key, pendingProps, owner, mode, lanes) {
24983    var fiberTag = IndeterminateComponent; // The resolved type is set if we know what the final type will be. I.e. it's not lazy.
24984
24985    var resolvedType = type;
24986
24987    if (typeof type === 'function') {
24988      if (shouldConstruct$1(type)) {
24989        fiberTag = ClassComponent;
24990
24991        {
24992          resolvedType = resolveClassForHotReloading(resolvedType);
24993        }
24994      } else {
24995        {
24996          resolvedType = resolveFunctionForHotReloading(resolvedType);
24997        }
24998      }
24999    } else if (typeof type === 'string') {
25000      fiberTag = HostComponent;
25001    } else {
25002      getTag: switch (type) {
25003        case REACT_FRAGMENT_TYPE:
25004          return createFiberFromFragment(pendingProps.children, mode, lanes, key);
25005
25006        case REACT_DEBUG_TRACING_MODE_TYPE:
25007          fiberTag = Mode;
25008          mode |= DebugTracingMode;
25009          break;
25010
25011        case REACT_STRICT_MODE_TYPE:
25012          fiberTag = Mode;
25013          mode |= StrictMode;
25014          break;
25015
25016        case REACT_PROFILER_TYPE:
25017          return createFiberFromProfiler(pendingProps, mode, lanes, key);
25018
25019        case REACT_SUSPENSE_TYPE:
25020          return createFiberFromSuspense(pendingProps, mode, lanes, key);
25021
25022        case REACT_SUSPENSE_LIST_TYPE:
25023          return createFiberFromSuspenseList(pendingProps, mode, lanes, key);
25024
25025        case REACT_OFFSCREEN_TYPE:
25026          return createFiberFromOffscreen(pendingProps, mode, lanes, key);
25027
25028        case REACT_LEGACY_HIDDEN_TYPE:
25029          return createFiberFromLegacyHidden(pendingProps, mode, lanes, key);
25030
25031        case REACT_SCOPE_TYPE:
25032
25033        // eslint-disable-next-line no-fallthrough
25034
25035        default:
25036          {
25037            if (typeof type === 'object' && type !== null) {
25038              switch (type.$$typeof) {
25039                case REACT_PROVIDER_TYPE:
25040                  fiberTag = ContextProvider;
25041                  break getTag;
25042
25043                case REACT_CONTEXT_TYPE:
25044                  // This is a consumer
25045                  fiberTag = ContextConsumer;
25046                  break getTag;
25047
25048                case REACT_FORWARD_REF_TYPE:
25049                  fiberTag = ForwardRef;
25050
25051                  {
25052                    resolvedType = resolveForwardRefForHotReloading(resolvedType);
25053                  }
25054
25055                  break getTag;
25056
25057                case REACT_MEMO_TYPE:
25058                  fiberTag = MemoComponent;
25059                  break getTag;
25060
25061                case REACT_LAZY_TYPE:
25062                  fiberTag = LazyComponent;
25063                  resolvedType = null;
25064                  break getTag;
25065
25066                case REACT_BLOCK_TYPE:
25067                  fiberTag = Block;
25068                  break getTag;
25069              }
25070            }
25071
25072            var info = '';
25073
25074            {
25075              if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {
25076                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.';
25077              }
25078
25079              var ownerName = owner ? getComponentName(owner.type) : null;
25080
25081              if (ownerName) {
25082                info += '\n\nCheck the render method of `' + ownerName + '`.';
25083              }
25084            }
25085
25086            {
25087              {
vendor: 4,520 bytes, lines 25088-25230
25088                throw Error( "Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: " + (type == null ? type : typeof type) + "." + info );
25089              }
25090            }
25091          }
25092      }
25093    }
25094
25095    var fiber = createFiber(fiberTag, pendingProps, key, mode);
25096    fiber.elementType = type;
25097    fiber.type = resolvedType;
25098    fiber.lanes = lanes;
25099
25100    {
25101      fiber._debugOwner = owner;
25102    }
25103
25104    return fiber;
25105  }
25106  function createFiberFromElement(element, mode, lanes) {
25107    var owner = null;
25108
25109    {
25110      owner = element._owner;
25111    }
25112
25113    var type = element.type;
25114    var key = element.key;
25115    var pendingProps = element.props;
25116    var fiber = createFiberFromTypeAndProps(type, key, pendingProps, owner, mode, lanes);
25117
25118    {
25119      fiber._debugSource = element._source;
25120      fiber._debugOwner = element._owner;
25121    }
25122
25123    return fiber;
25124  }
25125  function createFiberFromFragment(elements, mode, lanes, key) {
25126    var fiber = createFiber(Fragment, elements, key, mode);
25127    fiber.lanes = lanes;
25128    return fiber;
25129  }
25130
25131  function createFiberFromProfiler(pendingProps, mode, lanes, key) {
25132    {
25133      if (typeof pendingProps.id !== 'string') {
25134        error('Profiler must specify an "id" as a prop');
25135      }
25136    }
25137
25138    var fiber = createFiber(Profiler, pendingProps, key, mode | ProfileMode); // TODO: The Profiler fiber shouldn't have a type. It has a tag.
25139
25140    fiber.elementType = REACT_PROFILER_TYPE;
25141    fiber.type = REACT_PROFILER_TYPE;
25142    fiber.lanes = lanes;
25143
25144    {
25145      fiber.stateNode = {
25146        effectDuration: 0,
25147        passiveEffectDuration: 0
25148      };
25149    }
25150
25151    return fiber;
25152  }
25153
25154  function createFiberFromSuspense(pendingProps, mode, lanes, key) {
25155    var fiber = createFiber(SuspenseComponent, pendingProps, key, mode); // TODO: The SuspenseComponent fiber shouldn't have a type. It has a tag.
25156    // This needs to be fixed in getComponentName so that it relies on the tag
25157    // instead.
25158
25159    fiber.type = REACT_SUSPENSE_TYPE;
25160    fiber.elementType = REACT_SUSPENSE_TYPE;
25161    fiber.lanes = lanes;
25162    return fiber;
25163  }
25164  function createFiberFromSuspenseList(pendingProps, mode, lanes, key) {
25165    var fiber = createFiber(SuspenseListComponent, pendingProps, key, mode);
25166
25167    {
25168      // TODO: The SuspenseListComponent fiber shouldn't have a type. It has a tag.
25169      // This needs to be fixed in getComponentName so that it relies on the tag
25170      // instead.
25171      fiber.type = REACT_SUSPENSE_LIST_TYPE;
25172    }
25173
25174    fiber.elementType = REACT_SUSPENSE_LIST_TYPE;
25175    fiber.lanes = lanes;
25176    return fiber;
25177  }
25178  function createFiberFromOffscreen(pendingProps, mode, lanes, key) {
25179    var fiber = createFiber(OffscreenComponent, pendingProps, key, mode); // TODO: The OffscreenComponent fiber shouldn't have a type. It has a tag.
25180    // This needs to be fixed in getComponentName so that it relies on the tag
25181    // instead.
25182
25183    {
25184      fiber.type = REACT_OFFSCREEN_TYPE;
25185    }
25186
25187    fiber.elementType = REACT_OFFSCREEN_TYPE;
25188    fiber.lanes = lanes;
25189    return fiber;
25190  }
25191  function createFiberFromLegacyHidden(pendingProps, mode, lanes, key) {
25192    var fiber = createFiber(LegacyHiddenComponent, pendingProps, key, mode); // TODO: The LegacyHidden fiber shouldn't have a type. It has a tag.
25193    // This needs to be fixed in getComponentName so that it relies on the tag
25194    // instead.
25195
25196    {
25197      fiber.type = REACT_LEGACY_HIDDEN_TYPE;
25198    }
25199
25200    fiber.elementType = REACT_LEGACY_HIDDEN_TYPE;
25201    fiber.lanes = lanes;
25202    return fiber;
25203  }
25204  function createFiberFromText(content, mode, lanes) {
25205    var fiber = createFiber(HostText, content, null, mode);
25206    fiber.lanes = lanes;
25207    return fiber;
25208  }
25209  function createFiberFromHostInstanceForDeletion() {
25210    var fiber = createFiber(HostComponent, null, null, NoMode); // TODO: These should not need a type.
25211
25212    fiber.elementType = 'DELETED';
25213    fiber.type = 'DELETED';
25214    return fiber;
25215  }
25216  function createFiberFromPortal(portal, mode, lanes) {
25217    var pendingProps = portal.children !== null ? portal.children : [];
25218    var fiber = createFiber(HostPortal, pendingProps, portal.key, mode);
25219    fiber.lanes = lanes;
25220    fiber.stateNode = {
25221      containerInfo: portal.containerInfo,
25222      pendingChildren: null,
25223      // Used by persistent updates
25224      implementation: portal.implementation
25225    };
25226    return fiber;
25227  } // Used for stashing WIP properties to replay failed work in DEV.
25228
25229  function assignFiberPropertiesInDEV(target, source) {
25230    if (target === null) {
25231      // This Fiber's initial properties will always be overwritten.
25232      // We only use a Fiber to ensure the same hidden class so DEV isn't slow.
25233      target = createFiber(IndeterminateComponent, null, null, NoMode);
25234    } // This is intentionally written as a list of all properties.
25235    // We tried to use Object.assign() instead but this is called in
25236    // the hottest path, and Object.assign() was too slow:
25237    // https://github.com/facebook/react/issues/12502
25238    // This code is DEV-only so size is not a concern.
25239
25240
25241    target.tag = source.tag;
25242    target.key = source.key;
25243    target.elementType = source.elementType;
25244    target.type = source.type;
25245    target.stateNode = source.stateNode;
25246    target.return = source.return;
25247    target.child = source.child;
25248    target.sibling = source.sibling;
25249    target.index = source.index;
25250    target.ref = source.ref;
25251    target.pendingProps = source.pendingProps;
25252    target.memoizedProps = source.memoizedProps;
25253    target.updateQueue = source.updateQueue;
25254    target.memoizedState = source.memoizedState;
25255    target.dependencies = source.dependencies;
25256    target.mode = source.mode;
25257    target.flags = source.flags;
25258    target.nextEffect = source.nextEffect;
25259    target.firstEffect = source.firstEffect;
25260    target.lastEffect = source.lastEffect;
25261    target.lanes = source.lanes;
25262    target.childLanes = source.childLanes;
25263    target.alternate = source.alternate;
25264
25265    {
25266      target.actualDuration = source.actualDuration;
25267      target.actualStartTime = source.actualStartTime;
25268      target.selfBaseDuration = source.selfBaseDuration;
25269      target.treeBaseDuration = source.treeBaseDuration;
25270    }
25271
25272    target._debugID = source._debugID;
25273    target._debugSource = source._debugSource;
25274    target._debugOwner = source._debugOwner;
25275    target._debugNeedsRemount = source._debugNeedsRemount;
25276    target._debugHookTypes = source._debugHookTypes;
25277    return target;
25278  }
25279
25280  function FiberRootNode(containerInfo, tag, hydrate) {
25281    this.tag = tag;
25282    this.containerInfo = containerInfo;
25283    this.pendingChildren = null;
25284    this.current = null;
25285    this.pingCache = null;
25286    this.finishedWork = null;
25287    this.timeoutHandle = noTimeout;
25288    this.context = null;
25289    this.pendingContext = null;
25290    this.hydrate = hydrate;
25291    this.callbackNode = null;
25292    this.callbackPriority = NoLanePriority;
25293    this.eventTimes = createLaneMap(NoLanes);
25294    this.expirationTimes = createLaneMap(NoTimestamp);
25295    this.pendingLanes = NoLanes;
25296    this.suspendedLanes = NoLanes;
25297    this.pingedLanes = NoLanes;
25298    this.expiredLanes = NoLanes;
25299    this.mutableReadLanes = NoLanes;
25300    this.finishedLanes = NoLanes;
25301    this.entangledLanes = NoLanes;
25302    this.entanglements = createLaneMap(NoLanes);
25303
25304    {
25305      this.mutableSourceEagerHydrationData = null;
25306    }
25307
25308    {
25309      this.interactionThreadID = unstable_getThreadID();
25310      this.memoizedInteractions = new Set();
25311      this.pendingInteractionMap = new Map();
25312    }
25313
25314    {
25315      switch (tag) {
25316        case BlockingRoot:
25317          this._debugRootType = 'createBlockingRoot()';
25318          break;
25319
25320        case ConcurrentRoot:
25321          this._debugRootType = 'createRoot()';
25322          break;
25323
25324        case LegacyRoot:
25325          this._debugRootType = 'createLegacyRoot()';
25326          break;
25327      }
25328    }
25329  }
25330
25331  function createFiberRoot(containerInfo, tag, hydrate, hydrationCallbacks) {
25332    var root = new FiberRootNode(containerInfo, tag, hydrate);
25333    // stateNode is any.
25334
25335
25336    var uninitializedFiber = createHostRootFiber(tag);
25337    root.current = uninitializedFiber;
25338    uninitializedFiber.stateNode = root;
25339    initializeUpdateQueue(uninitializedFiber);
25340    return root;
25341  }
25342
25343  // This ensures that the version used for server rendering matches the one
25344  // that is eventually read during hydration.
25345  // If they don't match there's a potential tear and a full deopt render is required.
25346
25347  function registerMutableSourceForHydration(root, mutableSource) {
25348    var getVersion = mutableSource._getVersion;
25349    var version = getVersion(mutableSource._source); // TODO Clear this data once all pending hydration work is finished.
25350    // Retaining it forever may interfere with GC.
25351
25352    if (root.mutableSourceEagerHydrationData == null) {
25353      root.mutableSourceEagerHydrationData = [mutableSource, version];
25354    } else {
25355      root.mutableSourceEagerHydrationData.push(mutableSource, version);
25356    }
25357  }
25358
vendor: 7,988 bytes, lines 25359-25612
25359  function createPortal(children, containerInfo, // TODO: figure out the API for cross-renderer implementation.
25360  implementation) {
25361    var key = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
25362    return {
25363      // This tag allow us to uniquely identify this as a React Portal
25364      $$typeof: REACT_PORTAL_TYPE,
25365      key: key == null ? null : '' + key,
25366      children: children,
25367      containerInfo: containerInfo,
25368      implementation: implementation
25369    };
25370  }
25371
25372  var didWarnAboutNestedUpdates;
25373  var didWarnAboutFindNodeInStrictMode;
25374
25375  {
25376    didWarnAboutNestedUpdates = false;
25377    didWarnAboutFindNodeInStrictMode = {};
25378  }
25379
25380  function getContextForSubtree(parentComponent) {
25381    if (!parentComponent) {
25382      return emptyContextObject;
25383    }
25384
25385    var fiber = get(parentComponent);
25386    var parentContext = findCurrentUnmaskedContext(fiber);
25387
25388    if (fiber.tag === ClassComponent) {
25389      var Component = fiber.type;
25390
25391      if (isContextProvider(Component)) {
25392        return processChildContext(fiber, Component, parentContext);
25393      }
25394    }
25395
25396    return parentContext;
25397  }
25398
25399  function findHostInstanceWithWarning(component, methodName) {
25400    {
25401      var fiber = get(component);
25402
25403      if (fiber === undefined) {
25404        if (typeof component.render === 'function') {
25405          {
25406            {
25407              throw Error( "Unable to find node on an unmounted component." );
25408            }
25409          }
25410        } else {
25411          {
25412            {
25413              throw Error( "Argument appears to not be a ReactComponent. Keys: " + Object.keys(component) );
25414            }
25415          }
25416        }
25417      }
25418
25419      var hostFiber = findCurrentHostFiber(fiber);
25420
25421      if (hostFiber === null) {
25422        return null;
25423      }
25424
25425      if (hostFiber.mode & StrictMode) {
25426        var componentName = getComponentName(fiber.type) || 'Component';
25427
25428        if (!didWarnAboutFindNodeInStrictMode[componentName]) {
25429          didWarnAboutFindNodeInStrictMode[componentName] = true;
25430          var previousFiber = current;
25431
25432          try {
25433            setCurrentFiber(hostFiber);
25434
25435            if (fiber.mode & StrictMode) {
25436              error('%s is deprecated in StrictMode. ' + '%s was passed an instance of %s which is inside StrictMode. ' + 'Instead, add a ref directly to the element you want to reference. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-find-node', methodName, methodName, componentName);
25437            } else {
25438              error('%s is deprecated in StrictMode. ' + '%s was passed an instance of %s which renders StrictMode children. ' + 'Instead, add a ref directly to the element you want to reference. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-find-node', methodName, methodName, componentName);
25439            }
25440          } finally {
25441            // Ideally this should reset to previous but this shouldn't be called in
25442            // render and there's another warning for that anyway.
25443            if (previousFiber) {
25444              setCurrentFiber(previousFiber);
25445            } else {
25446              resetCurrentFiber();
25447            }
25448          }
25449        }
25450      }
25451
25452      return hostFiber.stateNode;
25453    }
25454  }
25455
25456  function createContainer(containerInfo, tag, hydrate, hydrationCallbacks) {
25457    return createFiberRoot(containerInfo, tag, hydrate);
25458  }
25459  function updateContainer(element, container, parentComponent, callback) {
25460    {
25461      onScheduleRoot(container, element);
25462    }
25463
25464    var current$1 = container.current;
25465    var eventTime = requestEventTime();
25466
25467    {
25468      // $FlowExpectedError - jest isn't a global, and isn't recognized outside of tests
25469      if ('undefined' !== typeof jest) {
25470        warnIfUnmockedScheduler(current$1);
25471        warnIfNotScopedWithMatchingAct(current$1);
25472      }
25473    }
25474
25475    var lane = requestUpdateLane(current$1);
25476
25477    var context = getContextForSubtree(parentComponent);
25478
25479    if (container.context === null) {
25480      container.context = context;
25481    } else {
25482      container.pendingContext = context;
25483    }
25484
25485    {
25486      if (isRendering && current !== null && !didWarnAboutNestedUpdates) {
25487        didWarnAboutNestedUpdates = true;
25488
25489        error('Render methods should be a pure function of props and state; ' + 'triggering nested component updates from render is not allowed. ' + 'If necessary, trigger nested updates in componentDidUpdate.\n\n' + 'Check the render method of %s.', getComponentName(current.type) || 'Unknown');
25490      }
25491    }
25492
25493    var update = createUpdate(eventTime, lane); // Caution: React DevTools currently depends on this property
25494    // being called "element".
25495
25496    update.payload = {
25497      element: element
25498    };
25499    callback = callback === undefined ? null : callback;
25500
25501    if (callback !== null) {
25502      {
25503        if (typeof callback !== 'function') {
25504          error('render(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callback);
25505        }
25506      }
25507
25508      update.callback = callback;
25509    }
25510
25511    enqueueUpdate(current$1, update);
25512    scheduleUpdateOnFiber(current$1, lane, eventTime);
25513    return lane;
25514  }
25515  function getPublicRootInstance(container) {
25516    var containerFiber = container.current;
25517
25518    if (!containerFiber.child) {
25519      return null;
25520    }
25521
25522    switch (containerFiber.child.tag) {
25523      case HostComponent:
25524        return getPublicInstance(containerFiber.child.stateNode);
25525
25526      default:
25527        return containerFiber.child.stateNode;
25528    }
25529  }
25530
25531  function markRetryLaneImpl(fiber, retryLane) {
25532    var suspenseState = fiber.memoizedState;
25533
25534    if (suspenseState !== null && suspenseState.dehydrated !== null) {
25535      suspenseState.retryLane = higherPriorityLane(suspenseState.retryLane, retryLane);
25536    }
25537  } // Increases the priority of thennables when they resolve within this boundary.
25538
25539
25540  function markRetryLaneIfNotHydrated(fiber, retryLane) {
25541    markRetryLaneImpl(fiber, retryLane);
25542    var alternate = fiber.alternate;
25543
25544    if (alternate) {
25545      markRetryLaneImpl(alternate, retryLane);
25546    }
25547  }
25548
25549  function attemptUserBlockingHydration$1(fiber) {
25550    if (fiber.tag !== SuspenseComponent) {
25551      // We ignore HostRoots here because we can't increase
25552      // their priority and they should not suspend on I/O,
25553      // since you have to wrap anything that might suspend in
25554      // Suspense.
25555      return;
25556    }
25557
25558    var eventTime = requestEventTime();
25559    var lane = InputDiscreteHydrationLane;
25560    scheduleUpdateOnFiber(fiber, lane, eventTime);
25561    markRetryLaneIfNotHydrated(fiber, lane);
25562  }
25563  function attemptContinuousHydration$1(fiber) {
25564    if (fiber.tag !== SuspenseComponent) {
25565      // We ignore HostRoots here because we can't increase
25566      // their priority and they should not suspend on I/O,
25567      // since you have to wrap anything that might suspend in
25568      // Suspense.
25569      return;
25570    }
25571
25572    var eventTime = requestEventTime();
25573    var lane = SelectiveHydrationLane;
25574    scheduleUpdateOnFiber(fiber, lane, eventTime);
25575    markRetryLaneIfNotHydrated(fiber, lane);
25576  }
25577  function attemptHydrationAtCurrentPriority$1(fiber) {
25578    if (fiber.tag !== SuspenseComponent) {
25579      // We ignore HostRoots here because we can't increase
25580      // their priority other than synchronously flush it.
25581      return;
25582    }
25583
25584    var eventTime = requestEventTime();
25585    var lane = requestUpdateLane(fiber);
25586    scheduleUpdateOnFiber(fiber, lane, eventTime);
25587    markRetryLaneIfNotHydrated(fiber, lane);
25588  }
25589  function runWithPriority$2(priority, fn) {
25590
25591    try {
25592      setCurrentUpdateLanePriority(priority);
25593      return fn();
25594    } finally {
25595    }
25596  }
25597  function findHostInstanceWithNoPortals(fiber) {
25598    var hostFiber = findCurrentHostFiberWithNoPortals(fiber);
25599
25600    if (hostFiber === null) {
25601      return null;
25602    }
25603
25604    if (hostFiber.tag === FundamentalComponent) {
25605      return hostFiber.stateNode.instance;
25606    }
25607
25608    return hostFiber.stateNode;
25609  }
25610
25611  var shouldSuspendImpl = function (fiber) {
25612    return false;
vendor: 5,625 bytes, lines 25613-25771
25613  };
25614
25615  function shouldSuspend(fiber) {
25616    return shouldSuspendImpl(fiber);
25617  }
25618  var overrideHookState = null;
25619  var overrideHookStateDeletePath = null;
25620  var overrideHookStateRenamePath = null;
25621  var overrideProps = null;
25622  var overridePropsDeletePath = null;
25623  var overridePropsRenamePath = null;
25624  var scheduleUpdate = null;
25625  var setSuspenseHandler = null;
25626
25627  {
25628    var copyWithDeleteImpl = function (obj, path, index) {
25629      var key = path[index];
25630      var updated = Array.isArray(obj) ? obj.slice() : _assign({}, obj);
25631
25632      if (index + 1 === path.length) {
25633        if (Array.isArray(updated)) {
25634          updated.splice(key, 1);
25635        } else {
25636          delete updated[key];
25637        }
25638
25639        return updated;
25640      } // $FlowFixMe number or string is fine here
25641
25642
25643      updated[key] = copyWithDeleteImpl(obj[key], path, index + 1);
25644      return updated;
25645    };
25646
25647    var copyWithDelete = function (obj, path) {
25648      return copyWithDeleteImpl(obj, path, 0);
25649    };
25650
25651    var copyWithRenameImpl = function (obj, oldPath, newPath, index) {
25652      var oldKey = oldPath[index];
25653      var updated = Array.isArray(obj) ? obj.slice() : _assign({}, obj);
25654
25655      if (index + 1 === oldPath.length) {
25656        var newKey = newPath[index]; // $FlowFixMe number or string is fine here
25657
25658        updated[newKey] = updated[oldKey];
25659
25660        if (Array.isArray(updated)) {
25661          updated.splice(oldKey, 1);
25662        } else {
25663          delete updated[oldKey];
25664        }
25665      } else {
25666        // $FlowFixMe number or string is fine here
25667        updated[oldKey] = copyWithRenameImpl( // $FlowFixMe number or string is fine here
25668        obj[oldKey], oldPath, newPath, index + 1);
25669      }
25670
25671      return updated;
25672    };
25673
25674    var copyWithRename = function (obj, oldPath, newPath) {
25675      if (oldPath.length !== newPath.length) {
25676        warn('copyWithRename() expects paths of the same length');
25677
25678        return;
25679      } else {
25680        for (var i = 0; i < newPath.length - 1; i++) {
25681          if (oldPath[i] !== newPath[i]) {
25682            warn('copyWithRename() expects paths to be the same except for the deepest key');
25683
25684            return;
25685          }
25686        }
25687      }
25688
25689      return copyWithRenameImpl(obj, oldPath, newPath, 0);
25690    };
25691
25692    var copyWithSetImpl = function (obj, path, index, value) {
25693      if (index >= path.length) {
25694        return value;
25695      }
25696
25697      var key = path[index];
25698      var updated = Array.isArray(obj) ? obj.slice() : _assign({}, obj); // $FlowFixMe number or string is fine here
25699
25700      updated[key] = copyWithSetImpl(obj[key], path, index + 1, value);
25701      return updated;
25702    };
25703
25704    var copyWithSet = function (obj, path, value) {
25705      return copyWithSetImpl(obj, path, 0, value);
25706    };
25707
25708    var findHook = function (fiber, id) {
25709      // For now, the "id" of stateful hooks is just the stateful hook index.
25710      // This may change in the future with e.g. nested hooks.
25711      var currentHook = fiber.memoizedState;
25712
25713      while (currentHook !== null && id > 0) {
25714        currentHook = currentHook.next;
25715        id--;
25716      }
25717
25718      return currentHook;
25719    }; // Support DevTools editable values for useState and useReducer.
25720
25721
25722    overrideHookState = function (fiber, id, path, value) {
25723      var hook = findHook(fiber, id);
25724
25725      if (hook !== null) {
25726        var newState = copyWithSet(hook.memoizedState, path, value);
25727        hook.memoizedState = newState;
25728        hook.baseState = newState; // We aren't actually adding an update to the queue,
25729        // because there is no update we can add for useReducer hooks that won't trigger an error.
25730        // (There's no appropriate action type for DevTools overrides.)
25731        // As a result though, React will see the scheduled update as a noop and bailout.
25732        // Shallow cloning props works as a workaround for now to bypass the bailout check.
25733
25734        fiber.memoizedProps = _assign({}, fiber.memoizedProps);
25735        scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp);
25736      }
25737    };
25738
25739    overrideHookStateDeletePath = function (fiber, id, path) {
25740      var hook = findHook(fiber, id);
25741
25742      if (hook !== null) {
25743        var newState = copyWithDelete(hook.memoizedState, path);
25744        hook.memoizedState = newState;
25745        hook.baseState = newState; // We aren't actually adding an update to the queue,
25746        // because there is no update we can add for useReducer hooks that won't trigger an error.
25747        // (There's no appropriate action type for DevTools overrides.)
25748        // As a result though, React will see the scheduled update as a noop and bailout.
25749        // Shallow cloning props works as a workaround for now to bypass the bailout check.
25750
25751        fiber.memoizedProps = _assign({}, fiber.memoizedProps);
25752        scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp);
25753      }
25754    };
25755
25756    overrideHookStateRenamePath = function (fiber, id, oldPath, newPath) {
25757      var hook = findHook(fiber, id);
25758
25759      if (hook !== null) {
25760        var newState = copyWithRename(hook.memoizedState, oldPath, newPath);
25761        hook.memoizedState = newState;
25762        hook.baseState = newState; // We aren't actually adding an update to the queue,
25763        // because there is no update we can add for useReducer hooks that won't trigger an error.
25764        // (There's no appropriate action type for DevTools overrides.)
25765        // As a result though, React will see the scheduled update as a noop and bailout.
25766        // Shallow cloning props works as a workaround for now to bypass the bailout check.
25767
25768        fiber.memoizedProps = _assign({}, fiber.memoizedProps);
25769        scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp);
25770      }
25771    };
vendor: 20,564 bytes, lines 25771-26292
25771 // Support DevTools props for function components, forwardRef, memo, host components, etc.
25772
25773
25774    overrideProps = function (fiber, path, value) {
25775      fiber.pendingProps = copyWithSet(fiber.memoizedProps, path, value);
25776
25777      if (fiber.alternate) {
25778        fiber.alternate.pendingProps = fiber.pendingProps;
25779      }
25780
25781      scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp);
25782    };
25783
25784    overridePropsDeletePath = function (fiber, path) {
25785      fiber.pendingProps = copyWithDelete(fiber.memoizedProps, path);
25786
25787      if (fiber.alternate) {
25788        fiber.alternate.pendingProps = fiber.pendingProps;
25789      }
25790
25791      scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp);
25792    };
25793
25794    overridePropsRenamePath = function (fiber, oldPath, newPath) {
25795      fiber.pendingProps = copyWithRename(fiber.memoizedProps, oldPath, newPath);
25796
25797      if (fiber.alternate) {
25798        fiber.alternate.pendingProps = fiber.pendingProps;
25799      }
25800
25801      scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp);
25802    };
25803
25804    scheduleUpdate = function (fiber) {
25805      scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp);
25806    };
25807
25808    setSuspenseHandler = function (newShouldSuspendImpl) {
25809      shouldSuspendImpl = newShouldSuspendImpl;
25810    };
25811  }
25812
25813  function findHostInstanceByFiber(fiber) {
25814    var hostFiber = findCurrentHostFiber(fiber);
25815
25816    if (hostFiber === null) {
25817      return null;
25818    }
25819
25820    return hostFiber.stateNode;
25821  }
25822
25823  function emptyFindFiberByHostInstance(instance) {
25824    return null;
25825  }
25826
25827  function getCurrentFiberForDevTools() {
25828    return current;
25829  }
25830
25831  function injectIntoDevTools(devToolsConfig) {
25832    var findFiberByHostInstance = devToolsConfig.findFiberByHostInstance;
25833    var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;
25834    return injectInternals({
25835      bundleType: devToolsConfig.bundleType,
25836      version: devToolsConfig.version,
25837      rendererPackageName: devToolsConfig.rendererPackageName,
25838      rendererConfig: devToolsConfig.rendererConfig,
25839      overrideHookState: overrideHookState,
25840      overrideHookStateDeletePath: overrideHookStateDeletePath,
25841      overrideHookStateRenamePath: overrideHookStateRenamePath,
25842      overrideProps: overrideProps,
25843      overridePropsDeletePath: overridePropsDeletePath,
25844      overridePropsRenamePath: overridePropsRenamePath,
25845      setSuspenseHandler: setSuspenseHandler,
25846      scheduleUpdate: scheduleUpdate,
25847      currentDispatcherRef: ReactCurrentDispatcher,
25848      findHostInstanceByFiber: findHostInstanceByFiber,
25849      findFiberByHostInstance: findFiberByHostInstance || emptyFindFiberByHostInstance,
25850      // React Refresh
25851      findHostInstancesForRefresh:  findHostInstancesForRefresh ,
25852      scheduleRefresh:  scheduleRefresh ,
25853      scheduleRoot:  scheduleRoot ,
25854      setRefreshHandler:  setRefreshHandler ,
25855      // Enables DevTools to append owner stacks to error messages in DEV mode.
25856      getCurrentFiber:  getCurrentFiberForDevTools 
25857    });
25858  }
25859
25860  function ReactDOMRoot(container, options) {
25861    this._internalRoot = createRootImpl(container, ConcurrentRoot, options);
25862  }
25863
25864  function ReactDOMBlockingRoot(container, tag, options) {
25865    this._internalRoot = createRootImpl(container, tag, options);
25866  }
25867
25868  ReactDOMRoot.prototype.render = ReactDOMBlockingRoot.prototype.render = function (children) {
25869    var root = this._internalRoot;
25870
25871    {
25872      if (typeof arguments[1] === 'function') {
25873        error('render(...): does not support the second callback argument. ' + 'To execute a side effect after rendering, declare it in a component body with useEffect().');
25874      }
25875
25876      var container = root.containerInfo;
25877
25878      if (container.nodeType !== COMMENT_NODE) {
25879        var hostInstance = findHostInstanceWithNoPortals(root.current);
25880
25881        if (hostInstance) {
25882          if (hostInstance.parentNode !== container) {
25883            error('render(...): It looks like the React-rendered content of the ' + 'root container was removed without using React. This is not ' + 'supported and will cause errors. Instead, call ' + "root.unmount() to empty a root's container.");
25884          }
25885        }
25886      }
25887    }
25888
25889    updateContainer(children, root, null, null);
25890  };
25891
25892  ReactDOMRoot.prototype.unmount = ReactDOMBlockingRoot.prototype.unmount = function () {
25893    {
25894      if (typeof arguments[0] === 'function') {
25895        error('unmount(...): does not support a callback argument. ' + 'To execute a side effect after rendering, declare it in a component body with useEffect().');
25896      }
25897    }
25898
25899    var root = this._internalRoot;
25900    var container = root.containerInfo;
25901    updateContainer(null, root, null, function () {
25902      unmarkContainerAsRoot(container);
25903    });
25904  };
25905
25906  function createRootImpl(container, tag, options) {
25907    // Tag is either LegacyRoot or Concurrent Root
25908    var hydrate = options != null && options.hydrate === true;
25909    var hydrationCallbacks = options != null && options.hydrationOptions || null;
25910    var mutableSources = options != null && options.hydrationOptions != null && options.hydrationOptions.mutableSources || null;
25911    var root = createContainer(container, tag, hydrate);
25912    markContainerAsRoot(root.current, container);
25913    var containerNodeType = container.nodeType;
25914
25915    {
25916      var rootContainerElement = container.nodeType === COMMENT_NODE ? container.parentNode : container;
25917      listenToAllSupportedEvents(rootContainerElement);
25918    }
25919
25920    if (mutableSources) {
25921      for (var i = 0; i < mutableSources.length; i++) {
25922        var mutableSource = mutableSources[i];
25923        registerMutableSourceForHydration(root, mutableSource);
25924      }
25925    }
25926
25927    return root;
25928  }
25929  function createLegacyRoot(container, options) {
25930    return new ReactDOMBlockingRoot(container, LegacyRoot, options);
25931  }
25932  function isValidContainer(node) {
25933    return !!(node && (node.nodeType === ELEMENT_NODE || node.nodeType === DOCUMENT_NODE || node.nodeType === DOCUMENT_FRAGMENT_NODE || node.nodeType === COMMENT_NODE && node.nodeValue === ' react-mount-point-unstable '));
25934  }
25935
25936  var ReactCurrentOwner$3 = ReactSharedInternals.ReactCurrentOwner;
25937  var topLevelUpdateWarnings;
25938  var warnedAboutHydrateAPI = false;
25939
25940  {
25941    topLevelUpdateWarnings = function (container) {
25942      if (container._reactRootContainer && container.nodeType !== COMMENT_NODE) {
25943        var hostInstance = findHostInstanceWithNoPortals(container._reactRootContainer._internalRoot.current);
25944
25945        if (hostInstance) {
25946          if (hostInstance.parentNode !== container) {
25947            error('render(...): It looks like the React-rendered content of this ' + 'container was removed without using React. This is not ' + 'supported and will cause errors. Instead, call ' + 'ReactDOM.unmountComponentAtNode to empty a container.');
25948          }
25949        }
25950      }
25951
25952      var isRootRenderedBySomeReact = !!container._reactRootContainer;
25953      var rootEl = getReactRootElementInContainer(container);
25954      var hasNonRootReactChild = !!(rootEl && getInstanceFromNode(rootEl));
25955
25956      if (hasNonRootReactChild && !isRootRenderedBySomeReact) {
25957        error('render(...): Replacing React-rendered children with a new root ' + 'component. If you intended to update the children of this node, ' + 'you should instead have the existing children update their state ' + 'and render the new components instead of calling ReactDOM.render.');
25958      }
25959
25960      if (container.nodeType === ELEMENT_NODE && container.tagName && container.tagName.toUpperCase() === 'BODY') {
25961        error('render(): Rendering components directly into document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try rendering into a container element created ' + 'for your app.');
25962      }
25963    };
25964  }
25965
25966  function getReactRootElementInContainer(container) {
25967    if (!container) {
25968      return null;
25969    }
25970
25971    if (container.nodeType === DOCUMENT_NODE) {
25972      return container.documentElement;
25973    } else {
25974      return container.firstChild;
25975    }
25976  }
25977
25978  function shouldHydrateDueToLegacyHeuristic(container) {
25979    var rootElement = getReactRootElementInContainer(container);
25980    return !!(rootElement && rootElement.nodeType === ELEMENT_NODE && rootElement.hasAttribute(ROOT_ATTRIBUTE_NAME));
25981  }
25982
25983  function legacyCreateRootFromDOMContainer(container, forceHydrate) {
25984    var shouldHydrate = forceHydrate || shouldHydrateDueToLegacyHeuristic(container); // First clear any existing content.
25985
25986    if (!shouldHydrate) {
25987      var warned = false;
25988      var rootSibling;
25989
25990      while (rootSibling = container.lastChild) {
25991        {
25992          if (!warned && rootSibling.nodeType === ELEMENT_NODE && rootSibling.hasAttribute(ROOT_ATTRIBUTE_NAME)) {
25993            warned = true;
25994
25995            error('render(): Target node has markup rendered by React, but there ' + 'are unrelated nodes as well. This is most commonly caused by ' + 'white-space inserted around server-rendered markup.');
25996          }
25997        }
25998
25999        container.removeChild(rootSibling);
26000      }
26001    }
26002
26003    {
26004      if (shouldHydrate && !forceHydrate && !warnedAboutHydrateAPI) {
26005        warnedAboutHydrateAPI = true;
26006
26007        warn('render(): Calling ReactDOM.render() to hydrate server-rendered markup ' + 'will stop working in React v18. Replace the ReactDOM.render() call ' + 'with ReactDOM.hydrate() if you want React to attach to the server HTML.');
26008      }
26009    }
26010
26011    return createLegacyRoot(container, shouldHydrate ? {
26012      hydrate: true
26013    } : undefined);
26014  }
26015
26016  function warnOnInvalidCallback$1(callback, callerName) {
26017    {
26018      if (callback !== null && typeof callback !== 'function') {
26019        error('%s(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callerName, callback);
26020      }
26021    }
26022  }
26023
26024  function legacyRenderSubtreeIntoContainer(parentComponent, children, container, forceHydrate, callback) {
26025    {
26026      topLevelUpdateWarnings(container);
26027      warnOnInvalidCallback$1(callback === undefined ? null : callback, 'render');
26028    } // TODO: Without `any` type, Flow says "Property cannot be accessed on any
26029    // member of intersection type." Whyyyyyy.
26030
26031
26032    var root = container._reactRootContainer;
26033    var fiberRoot;
26034
26035    if (!root) {
26036      // Initial mount
26037      root = container._reactRootContainer = legacyCreateRootFromDOMContainer(container, forceHydrate);
26038      fiberRoot = root._internalRoot;
26039
26040      if (typeof callback === 'function') {
26041        var originalCallback = callback;
26042
26043        callback = function () {
26044          var instance = getPublicRootInstance(fiberRoot);
26045          originalCallback.call(instance);
26046        };
26047      } // Initial mount should not be batched.
26048
26049
26050      unbatchedUpdates(function () {
26051        updateContainer(children, fiberRoot, parentComponent, callback);
26052      });
26053    } else {
26054      fiberRoot = root._internalRoot;
26055
26056      if (typeof callback === 'function') {
26057        var _originalCallback = callback;
26058
26059        callback = function () {
26060          var instance = getPublicRootInstance(fiberRoot);
26061
26062          _originalCallback.call(instance);
26063        };
26064      } // Update
26065
26066
26067      updateContainer(children, fiberRoot, parentComponent, callback);
26068    }
26069
26070    return getPublicRootInstance(fiberRoot);
26071  }
26072
26073  function findDOMNode(componentOrElement) {
26074    {
26075      var owner = ReactCurrentOwner$3.current;
26076
26077      if (owner !== null && owner.stateNode !== null) {
26078        var warnedAboutRefsInRender = owner.stateNode._warnedAboutRefsInRender;
26079
26080        if (!warnedAboutRefsInRender) {
26081          error('%s is accessing findDOMNode inside its render(). ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', getComponentName(owner.type) || 'A component');
26082        }
26083
26084        owner.stateNode._warnedAboutRefsInRender = true;
26085      }
26086    }
26087
26088    if (componentOrElement == null) {
26089      return null;
26090    }
26091
26092    if (componentOrElement.nodeType === ELEMENT_NODE) {
26093      return componentOrElement;
26094    }
26095
26096    {
26097      return findHostInstanceWithWarning(componentOrElement, 'findDOMNode');
26098    }
26099  }
26100  function hydrate(element, container, callback) {
26101    if (!isValidContainer(container)) {
26102      {
26103        throw Error( "Target container is not a DOM element." );
26104      }
26105    }
26106
26107    {
26108      var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined;
26109
26110      if (isModernRoot) {
26111        error('You are calling ReactDOM.hydrate() on a container that was previously ' + 'passed to ReactDOM.createRoot(). This is not supported. ' + 'Did you mean to call createRoot(container, {hydrate: true}).render(element)?');
26112      }
26113    } // TODO: throw or warn if we couldn't hydrate?
26114
26115
26116    return legacyRenderSubtreeIntoContainer(null, element, container, true, callback);
26117  }
26118  function render(element, container, callback) {
26119    if (!isValidContainer(container)) {
26120      {
26121        throw Error( "Target container is not a DOM element." );
26122      }
26123    }
26124
26125    {
26126      var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined;
26127
26128      if (isModernRoot) {
26129        error('You are calling ReactDOM.render() on a container that was previously ' + 'passed to ReactDOM.createRoot(). This is not supported. ' + 'Did you mean to call root.render(element)?');
26130      }
26131    }
26132
26133    return legacyRenderSubtreeIntoContainer(null, element, container, false, callback);
26134  }
26135  function unstable_renderSubtreeIntoContainer(parentComponent, element, containerNode, callback) {
26136    if (!isValidContainer(containerNode)) {
26137      {
26138        throw Error( "Target container is not a DOM element." );
26139      }
26140    }
26141
26142    if (!(parentComponent != null && has(parentComponent))) {
26143      {
26144        throw Error( "parentComponent must be a valid React Component" );
26145      }
26146    }
26147
26148    return legacyRenderSubtreeIntoContainer(parentComponent, element, containerNode, false, callback);
26149  }
26150  function unmountComponentAtNode(container) {
26151    if (!isValidContainer(container)) {
26152      {
26153        throw Error( "unmountComponentAtNode(...): Target container is not a DOM element." );
26154      }
26155    }
26156
26157    {
26158      var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined;
26159
26160      if (isModernRoot) {
26161        error('You are calling ReactDOM.unmountComponentAtNode() on a container that was previously ' + 'passed to ReactDOM.createRoot(). This is not supported. Did you mean to call root.unmount()?');
26162      }
26163    }
26164
26165    if (container._reactRootContainer) {
26166      {
26167        var rootEl = getReactRootElementInContainer(container);
26168        var renderedByDifferentReact = rootEl && !getInstanceFromNode(rootEl);
26169
26170        if (renderedByDifferentReact) {
26171          error("unmountComponentAtNode(): The node you're attempting to unmount " + 'was rendered by another copy of React.');
26172        }
26173      } // Unmount should not be batched.
26174
26175
26176      unbatchedUpdates(function () {
26177        legacyRenderSubtreeIntoContainer(null, null, container, false, function () {
26178          // $FlowFixMe This should probably use `delete container._reactRootContainer`
26179          container._reactRootContainer = null;
26180          unmarkContainerAsRoot(container);
26181        });
26182      }); // If you call unmountComponentAtNode twice in quick succession, you'll
26183      // get `true` twice. That's probably fine?
26184
26185      return true;
26186    } else {
26187      {
26188        var _rootEl = getReactRootElementInContainer(container);
26189
26190        var hasNonRootReactChild = !!(_rootEl && getInstanceFromNode(_rootEl)); // Check if the container itself is a React root node.
26191
26192        var isContainerReactRoot = container.nodeType === ELEMENT_NODE && isValidContainer(container.parentNode) && !!container.parentNode._reactRootContainer;
26193
26194        if (hasNonRootReactChild) {
26195          error("unmountComponentAtNode(): The node you're attempting to unmount " + 'was rendered by React and is not a top-level container. %s', isContainerReactRoot ? 'You may have accidentally passed in a React root node instead ' + 'of its container.' : 'Instead, have the parent component update its state and ' + 'rerender in order to remove this component.');
26196        }
26197      }
26198
26199      return false;
26200    }
26201  }
26202
26203  setAttemptUserBlockingHydration(attemptUserBlockingHydration$1);
26204  setAttemptContinuousHydration(attemptContinuousHydration$1);
26205  setAttemptHydrationAtCurrentPriority(attemptHydrationAtCurrentPriority$1);
26206  setAttemptHydrationAtPriority(runWithPriority$2);
26207  var didWarnAboutUnstableCreatePortal = false;
26208
26209  {
26210    if (typeof Map !== 'function' || // $FlowIssue Flow incorrectly thinks Map has no prototype
26211    Map.prototype == null || typeof Map.prototype.forEach !== 'function' || typeof Set !== 'function' || // $FlowIssue Flow incorrectly thinks Set has no prototype
26212    Set.prototype == null || typeof Set.prototype.clear !== 'function' || typeof Set.prototype.forEach !== 'function') {
26213      error('React depends on Map and Set built-in types. Make sure that you load a ' + 'polyfill in older browsers. https://reactjs.org/link/react-polyfills');
26214    }
26215  }
26216
26217  setRestoreImplementation(restoreControlledState$3);
26218  setBatchingImplementation(batchedUpdates$1, discreteUpdates$1, flushDiscreteUpdates, batchedEventUpdates$1);
26219
26220  function createPortal$1(children, container) {
26221    var key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
26222
26223    if (!isValidContainer(container)) {
26224      {
26225        throw Error( "Target container is not a DOM element." );
26226      }
26227    } // TODO: pass ReactDOM portal implementation as third argument
26228    // $FlowFixMe The Flow type is opaque but there's no way to actually create it.
26229
26230
26231    return createPortal(children, container, null, key);
26232  }
26233
26234  function renderSubtreeIntoContainer(parentComponent, element, containerNode, callback) {
26235
26236    return unstable_renderSubtreeIntoContainer(parentComponent, element, containerNode, callback);
26237  }
26238
26239  function unstable_createPortal(children, container) {
26240    var key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
26241
26242    {
26243      if (!didWarnAboutUnstableCreatePortal) {
26244        didWarnAboutUnstableCreatePortal = true;
26245
26246        warn('The ReactDOM.unstable_createPortal() alias has been deprecated, ' + 'and will be removed in React 18+. Update your code to use ' + 'ReactDOM.createPortal() instead. It has the exact same API, ' + 'but without the "unstable_" prefix.');
26247      }
26248    }
26249
26250    return createPortal$1(children, container, key);
26251  }
26252
26253  var Internals = {
26254    // Keep in sync with ReactTestUtils.js, and ReactTestUtilsAct.js.
26255    // This is an array for better minification.
26256    Events: [getInstanceFromNode, getNodeFromInstance, getFiberCurrentPropsFromNode, enqueueStateRestore, restoreStateIfNeeded, flushPassiveEffects, // TODO: This is related to `act`, not events. Move to separate key?
26257    IsThisRendererActing]
26258  };
26259  var foundDevTools = injectIntoDevTools({
26260    findFiberByHostInstance: getClosestInstanceFromNode,
26261    bundleType:  1 ,
26262    version: ReactVersion,
26263    rendererPackageName: 'react-dom'
26264  });
26265
26266  {
26267    if (!foundDevTools && canUseDOM && window.top === window.self) {
26268      // If we're in Chrome or Firefox, provide a download link if not installed.
26269      if (navigator.userAgent.indexOf('Chrome') > -1 && navigator.userAgent.indexOf('Edge') === -1 || navigator.userAgent.indexOf('Firefox') > -1) {
26270        var protocol = window.location.protocol; // Don't warn in exotic cases like chrome-extension://.
26271
26272        // if (/^(https?|file):$/.test(protocol)) {
26273        //   // eslint-disable-next-line react-internal/no-production-logging
26274        //   console.info('%cDownload the React DevTools ' + 'for a better development experience: ' + 'https://reactjs.org/link/react-devtools' + (protocol === 'file:' ? '\nYou might need to use a local HTTP server (instead of file://): ' + 'https://reactjs.org/link/react-devtools-faq' : ''), 'font-weight:bold');
26275        // }
26276      }
26277    }
26278  }
26279
26280  exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = Internals;
26281  exports.createPortal = createPortal$1;
26282  exports.findDOMNode = findDOMNode;
26283  exports.flushSync = flushSync;
26284  exports.hydrate = hydrate;
26285  exports.render = render;
26286  exports.unmountComponentAtNode = unmountComponentAtNode;
26287  exports.unstable_batchedUpdates = batchedUpdates$1;
26288  exports.unstable_createPortal = unstable_createPortal;
26289  exports.unstable_renderSubtreeIntoContainer = renderSubtreeIntoContainer;
26290  exports.version = ReactVersion;
26291
26292})));

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.