diff --git a/Api/DocumentationsController.cs b/Api/DocumentationsController.cs index d07a54c..1ccdf73 100644 --- a/Api/DocumentationsController.cs +++ b/Api/DocumentationsController.cs @@ -15,9 +15,9 @@ public HttpResponseMessage Save(Documentation data) { var doc = data.DocumentationId == -1 ? new Documentation() { - ClassId = data.ClassId, - MemberId = data.MemberId - } : DocumentationRepository.Instance.GetDocumentation(data.DocumentationId); + ModuleId = ApiBrowserModuleContext.ModuleContext.ModuleID, + FullName = data.FullName + } : DocumentationRepository.Instance.GetDocumentation(ActiveModule.ModuleID, data.DocumentationId); if (doc.DocumentationId != -1 && !ApiBrowserModuleContext.Security.CanModerate) { if (doc.CreatedByUserID != UserInfo.UserID || doc.IsCurrentVersion) @@ -35,24 +35,27 @@ public HttpResponseMessage Save(Documentation data) { DocumentationRepository.Instance.UpdateDocumentation(db, UserInfo.UserID); } - return Request.CreateResponse(HttpStatusCode.OK, DocumentationRepository.Instance.GetDocumentation(db.DocumentationId)); + return Request.CreateResponse(HttpStatusCode.OK, DocumentationRepository.Instance.GetDocumentation(ActiveModule.ModuleID, db.DocumentationId)); } [HttpPost] [ApiBrowserAuthorize(SecurityLevel = SecurityAccessLevel.Moderate)] public HttpResponseMessage SetCurrent(int id) { - var doc = DocumentationRepository.Instance.GetDocumentation(id); - if (doc.ClassId == -1) + var doc = DocumentationRepository.Instance.GetDocumentation(ActiveModule.ModuleID, id); + var m = MemberRepository.Instance.GetMember(doc.ModuleId, doc.FullName); + if (m != null) { - var m = MemberRepository.Instance.GetMember(doc.MemberId); m.DocumentationId = doc.DocumentationId; MemberRepository.Instance.UpdateMember(m.GetMemberBase()); } else { - var c = ApiClassRepository.Instance.GetApiClass(doc.ClassId); - c.DocumentationId = doc.DocumentationId; - ApiClassRepository.Instance.UpdateApiClass(c.GetApiClassBase()); + var c = ApiClassRepository.Instance.GetApiClass(doc.ModuleId, doc.FullName); + if (c != null) + { + c.DocumentationId = doc.DocumentationId; + ApiClassRepository.Instance.UpdateApiClass(c.GetApiClassBase()); + } } return Request.CreateResponse(HttpStatusCode.OK); } @@ -60,7 +63,7 @@ public HttpResponseMessage SetCurrent(int id) [ApiBrowserAuthorize(SecurityLevel = SecurityAccessLevel.Comment)] public HttpResponseMessage Delete(int id) { - var doc = DocumentationRepository.Instance.GetDocumentation(id); + var doc = DocumentationRepository.Instance.GetDocumentation(ActiveModule.ModuleID, id); if (doc.DocumentationId != -1 && !ApiBrowserModuleContext.Security.CanModerate) { if (doc.CreatedByUserID != UserInfo.UserID || doc.IsCurrentVersion) @@ -68,20 +71,23 @@ public HttpResponseMessage Delete(int id) return ServiceError("Not allowed"); } } - DocumentationRepository.Instance.DeleteDocumentation(id); + DocumentationRepository.Instance.DeleteDocumentation(ActiveModule.ModuleID, id); if (doc.IsCurrentVersion) { - if (doc.ClassId == -1) + var m = MemberRepository.Instance.GetMember(doc.ModuleId, doc.FullName); + if (m != null) { - var m = MemberRepository.Instance.GetMember(doc.MemberId); m.DocumentationId = -1; MemberRepository.Instance.UpdateMember(m.GetMemberBase()); } else { - var c = ApiClassRepository.Instance.GetApiClass(doc.ClassId); - c.DocumentationId = -1; - ApiClassRepository.Instance.UpdateApiClass(c.GetApiClassBase()); + var c = ApiClassRepository.Instance.GetApiClass(doc.ModuleId, doc.FullName); + if (c != null) + { + c.DocumentationId = -1; + ApiClassRepository.Instance.UpdateApiClass(c.GetApiClassBase()); + } } } return Request.CreateResponse(HttpStatusCode.OK); diff --git a/Connect.ApiBrowser.Core/Models/ApiClasses/ApiClass_Declaration.cs b/Connect.ApiBrowser.Core/Models/ApiClasses/ApiClass_Declaration.cs index 99d6ec4..069a342 100644 --- a/Connect.ApiBrowser.Core/Models/ApiClasses/ApiClass_Declaration.cs +++ b/Connect.ApiBrowser.Core/Models/ApiClasses/ApiClass_Declaration.cs @@ -26,6 +26,8 @@ public ApiClass() : base() [DataMember] public string FullQualifier { get; set; } [DataMember] + public int ModuleId { get; set; } + [DataMember] public string ComponentName { get; set; } [DataMember] public string LatestVersion { get; set; } @@ -71,6 +73,7 @@ public ApiClass Clone() res.DocumentationContents = DocumentationContents; res.NamespaceName = NamespaceName; res.FullQualifier = FullQualifier; + res.ModuleId = ModuleId; res.ComponentName = ComponentName; res.LatestVersion = LatestVersion; res.MemberCount = MemberCount; diff --git a/Connect.ApiBrowser.Core/Models/ApiClasses/ApiClass_Interfaces.cs b/Connect.ApiBrowser.Core/Models/ApiClasses/ApiClass_Interfaces.cs index 7fd3257..adbc1f8 100644 --- a/Connect.ApiBrowser.Core/Models/ApiClasses/ApiClass_Interfaces.cs +++ b/Connect.ApiBrowser.Core/Models/ApiClasses/ApiClass_Interfaces.cs @@ -20,6 +20,7 @@ public override void Fill(IDataReader dr) DocumentationContents = Convert.ToString(Null.SetNull(dr["DocumentationContents"], DocumentationContents)); NamespaceName = Convert.ToString(Null.SetNull(dr["NamespaceName"], NamespaceName)); FullQualifier = Convert.ToString(Null.SetNull(dr["FullQualifier"], FullQualifier)); + ModuleId = Convert.ToInt32(Null.SetNull(dr["ModuleId"], ModuleId)); ComponentName = Convert.ToString(Null.SetNull(dr["ComponentName"], ComponentName)); LatestVersion = Convert.ToString(Null.SetNull(dr["LatestVersion"], LatestVersion)); MemberCount = Convert.ToInt32(Null.SetNull(dr["MemberCount"], MemberCount)); @@ -40,6 +41,8 @@ public override string GetProperty(string strPropertyName, string strFormat, Sys return PropertyAccess.FormatString(NamespaceName, strFormat); case "fullqualifier": // NVarChar return PropertyAccess.FormatString(FullQualifier, strFormat); + case "moduleid": // Int + return ModuleId.ToString(strFormat, formatProvider); case "componentname": // NVarChar return PropertyAccess.FormatString(ComponentName, strFormat); case "latestversion": // VarChar diff --git a/Connect.ApiBrowser.Core/Models/Documentations/DocumentationBase.cs b/Connect.ApiBrowser.Core/Models/Documentations/DocumentationBase.cs index a61a12b..90bbfce 100644 --- a/Connect.ApiBrowser.Core/Models/Documentations/DocumentationBase.cs +++ b/Connect.ApiBrowser.Core/Models/Documentations/DocumentationBase.cs @@ -9,6 +9,7 @@ namespace Connect.ApiBrowser.Core.Models.Documentations [TableName("Connect_ApiBrowser_Documentations")] [PrimaryKey("DocumentationId", AutoIncrement = true)] [DataContract] + [Scope("ModuleId")] public partial class DocumentationBase : AuditableEntity { @@ -23,9 +24,9 @@ public DocumentationBase() [DataMember] public int DocumentationId { get; set; } [DataMember] - public int ClassId { get; set; } + public int ModuleId { get; set; } [DataMember] - public int MemberId { get; set; } + public string FullName { get; set; } [DataMember] public string Contents { get; set; } #endregion @@ -36,11 +37,11 @@ public void ReadDocumentationBase(DocumentationBase documentation) if (documentation.DocumentationId > -1) DocumentationId = documentation.DocumentationId; - if (documentation.ClassId > -1) - ClassId = documentation.ClassId; + if (documentation.ModuleId > -1) + ModuleId = documentation.ModuleId; - if (documentation.MemberId > -1) - MemberId = documentation.MemberId; + if (!String.IsNullOrEmpty(documentation.FullName)) + FullName = documentation.FullName; if (!String.IsNullOrEmpty(documentation.Contents)) Contents = documentation.Contents; diff --git a/Connect.ApiBrowser.Core/Models/Documentations/DocumentationBase_Interfaces.cs b/Connect.ApiBrowser.Core/Models/Documentations/DocumentationBase_Interfaces.cs index fc60b9b..ff7b098 100644 --- a/Connect.ApiBrowser.Core/Models/Documentations/DocumentationBase_Interfaces.cs +++ b/Connect.ApiBrowser.Core/Models/Documentations/DocumentationBase_Interfaces.cs @@ -18,8 +18,8 @@ public virtual void Fill(IDataReader dr) { FillAuditFields(dr); DocumentationId = Convert.ToInt32(Null.SetNull(dr["DocumentationId"], DocumentationId)); - ClassId = Convert.ToInt32(Null.SetNull(dr["ClassId"], ClassId)); - MemberId = Convert.ToInt32(Null.SetNull(dr["MemberId"], MemberId)); + ModuleId = Convert.ToInt32(Null.SetNull(dr["ModuleId"], ModuleId)); + FullName = Convert.ToString(Null.SetNull(dr["FullName"], FullName)); Contents = Convert.ToString(Null.SetNull(dr["Contents"], Contents)); } @@ -38,10 +38,10 @@ public virtual string GetProperty(string strPropertyName, string strFormat, Syst { case "documentationid": // Int return DocumentationId.ToString(strFormat, formatProvider); - case "classid": // Int - return ClassId.ToString(strFormat, formatProvider); - case "memberid": // Int - return MemberId.ToString(strFormat, formatProvider); + case "moduleid": // Int + return ModuleId.ToString(strFormat, formatProvider); + case "fullname": // NVarChar + return PropertyAccess.FormatString(FullName, strFormat); case "contents": // NVarCharMax return PropertyAccess.FormatString(Contents, strFormat); default: diff --git a/Connect.ApiBrowser.Core/Models/Documentations/Documentation_Declaration.cs b/Connect.ApiBrowser.Core/Models/Documentations/Documentation_Declaration.cs index edfeecf..65eb665 100644 --- a/Connect.ApiBrowser.Core/Models/Documentations/Documentation_Declaration.cs +++ b/Connect.ApiBrowser.Core/Models/Documentations/Documentation_Declaration.cs @@ -9,6 +9,7 @@ namespace Connect.ApiBrowser.Core.Models.Documentations [TableName("vw_Connect_ApiBrowser_Documentations")] [PrimaryKey("DocumentationId", AutoIncrement = true)] [DataContract] + [Scope("ModuleId")] public partial class Documentation : DocumentationBase { @@ -20,8 +21,6 @@ public Documentation() : base() #region Properties [DataMember] - public string FullQualifier { get; set; } - [DataMember] public bool IsCurrentVersion { get; set; } [DataMember] public string CreatedByUserDisplayName { get; set; } @@ -38,8 +37,8 @@ public DocumentationBase GetDocumentationBase() { DocumentationBase res = new DocumentationBase(); res.DocumentationId = DocumentationId; - res.ClassId = ClassId; - res.MemberId = MemberId; + res.ModuleId = ModuleId; + res.FullName = FullName; res.Contents = Contents; res.CreatedByUserID = CreatedByUserID; res.CreatedOnDate = CreatedOnDate; @@ -51,10 +50,9 @@ public Documentation Clone() { Documentation res = new Documentation(); res.DocumentationId = DocumentationId; - res.ClassId = ClassId; - res.MemberId = MemberId; + res.ModuleId = ModuleId; + res.FullName = FullName; res.Contents = Contents; - res.FullQualifier = FullQualifier; res.IsCurrentVersion = IsCurrentVersion; res.CreatedByUserDisplayName = CreatedByUserDisplayName; res.CreatedByUserEmail = CreatedByUserEmail; diff --git a/Connect.ApiBrowser.Core/Models/Documentations/Documentation_Interfaces.cs b/Connect.ApiBrowser.Core/Models/Documentations/Documentation_Interfaces.cs index d9fa9a9..3c3a50d 100644 --- a/Connect.ApiBrowser.Core/Models/Documentations/Documentation_Interfaces.cs +++ b/Connect.ApiBrowser.Core/Models/Documentations/Documentation_Interfaces.cs @@ -17,7 +17,6 @@ public partial class Documentation public override void Fill(IDataReader dr) { base.Fill(dr); - FullQualifier = Convert.ToString(Null.SetNull(dr["FullQualifier"], FullQualifier)); IsCurrentVersion = Convert.ToBoolean(Null.SetNull(dr["IsCurrentVersion"], IsCurrentVersion)); CreatedByUserDisplayName = Convert.ToString(Null.SetNull(dr["CreatedByUserDisplayName"], CreatedByUserDisplayName)); CreatedByUserEmail = Convert.ToString(Null.SetNull(dr["CreatedByUserEmail"], CreatedByUserEmail)); @@ -30,12 +29,6 @@ public override void Fill(IDataReader dr) public override string GetProperty(string strPropertyName, string strFormat, System.Globalization.CultureInfo formatProvider, DotNetNuke.Entities.Users.UserInfo accessingUser, DotNetNuke.Services.Tokens.Scope accessLevel, ref bool propertyNotFound) { switch (strPropertyName.ToLower()) { - case "fullqualifier": // NVarChar - if (FullQualifier == null) - { - return ""; - }; - return PropertyAccess.FormatString(FullQualifier, strFormat); case "iscurrentversion": // Bit if (IsCurrentVersion == null) { diff --git a/Connect.ApiBrowser.Core/Models/Members/Member_Declaration.cs b/Connect.ApiBrowser.Core/Models/Members/Member_Declaration.cs index 882103f..b156e62 100644 --- a/Connect.ApiBrowser.Core/Models/Members/Member_Declaration.cs +++ b/Connect.ApiBrowser.Core/Models/Members/Member_Declaration.cs @@ -28,6 +28,8 @@ public Member() : base() [DataMember] public string FullQualifier { get; set; } [DataMember] + public int ModuleId { get; set; } + [DataMember] public string ComponentName { get; set; } [DataMember] public string LatestVersion { get; set; } @@ -74,6 +76,7 @@ public Member Clone() res.ClassName = ClassName; res.NamespaceName = NamespaceName; res.FullQualifier = FullQualifier; + res.ModuleId = ModuleId; res.ComponentName = ComponentName; res.LatestVersion = LatestVersion; res.CodeBlockCount = CodeBlockCount; diff --git a/Connect.ApiBrowser.Core/Models/Members/Member_Interfaces.cs b/Connect.ApiBrowser.Core/Models/Members/Member_Interfaces.cs index 64fe00c..5665484 100644 --- a/Connect.ApiBrowser.Core/Models/Members/Member_Interfaces.cs +++ b/Connect.ApiBrowser.Core/Models/Members/Member_Interfaces.cs @@ -21,6 +21,7 @@ public override void Fill(IDataReader dr) ClassName = Convert.ToString(Null.SetNull(dr["ClassName"], ClassName)); NamespaceName = Convert.ToString(Null.SetNull(dr["NamespaceName"], NamespaceName)); FullQualifier = Convert.ToString(Null.SetNull(dr["FullQualifier"], FullQualifier)); + ModuleId = Convert.ToInt32(Null.SetNull(dr["ModuleId"], ModuleId)); ComponentName = Convert.ToString(Null.SetNull(dr["ComponentName"], ComponentName)); LatestVersion = Convert.ToString(Null.SetNull(dr["LatestVersion"], LatestVersion)); CodeBlockCount = Convert.ToInt32(Null.SetNull(dr["CodeBlockCount"], CodeBlockCount)); @@ -43,6 +44,8 @@ public override string GetProperty(string strPropertyName, string strFormat, Sys return PropertyAccess.FormatString(NamespaceName, strFormat); case "fullqualifier": // NVarChar return PropertyAccess.FormatString(FullQualifier, strFormat); + case "moduleid": // Int + return ModuleId.ToString(strFormat, formatProvider); case "componentname": // NVarChar return PropertyAccess.FormatString(ComponentName, strFormat); case "latestversion": // VarChar diff --git a/Connect.ApiBrowser.Core/Repositories/ApiClassRepository.cs b/Connect.ApiBrowser.Core/Repositories/ApiClassRepository.cs index b7c7148..68a79d3 100644 --- a/Connect.ApiBrowser.Core/Repositories/ApiClassRepository.cs +++ b/Connect.ApiBrowser.Core/Repositories/ApiClassRepository.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; using System.Linq; -using DotNetNuke.Common; using DotNetNuke.Data; using DotNetNuke.Framework; using Connect.ApiBrowser.Core.Models.ApiClasses; @@ -10,9 +7,19 @@ namespace Connect.ApiBrowser.Core.Repositories { public partial class ApiClassRepository : ServiceLocator, IApiClassRepository { + public ApiClass GetApiClass(int moduleId, string fullName) + { + using (var context = DataContext.Instance()) + { + return context.ExecuteQuery(System.Data.CommandType.Text, + "SELECT * FROM {databaseOwner}{objectQualifier}vw_Connect_ApiBrowser_ApiClasses WHERE ModuleId=@0 AND FullQualifier=@1", + moduleId, fullName).FirstOrDefault(); + } + } } public partial interface IApiClassRepository { + ApiClass GetApiClass(int moduleId, string fullName); } } diff --git a/Connect.ApiBrowser.Core/Repositories/DocumentationRepository.cs b/Connect.ApiBrowser.Core/Repositories/DocumentationRepository.cs index bc4d571..a2809c5 100644 --- a/Connect.ApiBrowser.Core/Repositories/DocumentationRepository.cs +++ b/Connect.ApiBrowser.Core/Repositories/DocumentationRepository.cs @@ -10,18 +10,18 @@ namespace Connect.ApiBrowser.Core.Repositories { public partial class DocumentationRepository : ServiceLocator, IDocumentationRepository { - public IEnumerable GetDocumentations(int classId, int memberId) + public IEnumerable GetDocumentations(int moduleId, string fullName) { using (var context = DataContext.Instance()) { var rep = context.GetRepository(); - return rep.Find("WHERE ClassId=@0 AND MemberId=@1", classId, memberId); + return rep.Find("WHERE ModuleId=@0 AND FullName=@1", moduleId, fullName); } } } public partial interface IDocumentationRepository { - IEnumerable GetDocumentations(int classId, int memberId); + IEnumerable GetDocumentations(int moduleId, string fullName); } } diff --git a/Connect.ApiBrowser.Core/Repositories/DocumentationRepository_Core.cs b/Connect.ApiBrowser.Core/Repositories/DocumentationRepository_Core.cs index da9adb0..bf58b2b 100644 --- a/Connect.ApiBrowser.Core/Repositories/DocumentationRepository_Core.cs +++ b/Connect.ApiBrowser.Core/Repositories/DocumentationRepository_Core.cs @@ -15,25 +15,26 @@ protected override Func GetFactory() { return () => new DocumentationRepository(); } - public IEnumerable GetDocumentations() + public IEnumerable GetDocumentations(int moduleId) { using (var context = DataContext.Instance()) { var rep = context.GetRepository(); - return rep.Get(); + return rep.Get(moduleId); } } - public Documentation GetDocumentation(int documentationId) + public Documentation GetDocumentation(int moduleId, int documentationId) { using (var context = DataContext.Instance()) { var rep = context.GetRepository(); - return rep.GetById(documentationId); + return rep.GetById(documentationId, moduleId); } } public int AddDocumentation(ref DocumentationBase documentation, int userId) { Requires.NotNull(documentation); + Requires.PropertyNotNegative(documentation, "ModuleId"); documentation.CreatedByUserID = userId; documentation.CreatedOnDate = DateTime.Now; documentation.LastModifiedByUserID = userId; @@ -55,12 +56,12 @@ public void DeleteDocumentation(DocumentationBase documentation) rep.Delete(documentation); } } - public void DeleteDocumentation(int documentationId) + public void DeleteDocumentation(int moduleId, int documentationId) { using (var context = DataContext.Instance()) { var rep = context.GetRepository(); - rep.Delete("WHERE DocumentationId = @0", documentationId); + rep.Delete("WHERE ModuleId = @0 AND DocumentationId = @1", moduleId, documentationId); } } public void UpdateDocumentation(DocumentationBase documentation, int userId) @@ -78,11 +79,11 @@ public void UpdateDocumentation(DocumentationBase documentation, int userId) } public partial interface IDocumentationRepository { - IEnumerable GetDocumentations(); - Documentation GetDocumentation(int documentationId); + IEnumerable GetDocumentations(int moduleId); + Documentation GetDocumentation(int moduleId, int documentationId); int AddDocumentation(ref DocumentationBase documentation, int userId); void DeleteDocumentation(DocumentationBase documentation); - void DeleteDocumentation(int documentationId); + void DeleteDocumentation(int moduleId, int documentationId); void UpdateDocumentation(DocumentationBase documentation, int userId); } } diff --git a/Connect.ApiBrowser.Core/Repositories/MemberRepository.cs b/Connect.ApiBrowser.Core/Repositories/MemberRepository.cs index 8e8b811..b13d850 100644 --- a/Connect.ApiBrowser.Core/Repositories/MemberRepository.cs +++ b/Connect.ApiBrowser.Core/Repositories/MemberRepository.cs @@ -1,18 +1,25 @@ -using System; -using System.Collections.Generic; using System.Linq; -using DotNetNuke.Common; using DotNetNuke.Data; using DotNetNuke.Framework; using Connect.ApiBrowser.Core.Models.Members; namespace Connect.ApiBrowser.Core.Repositories { - public partial class MemberRepository : ServiceLocator, IMemberRepository + public partial class MemberRepository : ServiceLocator, IMemberRepository { + public Member GetMember(int moduleId, string fullName) + { + using (var context = DataContext.Instance()) + { + return context.ExecuteQuery(System.Data.CommandType.Text, + "SELECT * FROM {databaseOwner}{objectQualifier}vw_Connect_ApiBrowser_Members WHERE ModuleId=@0 AND FullQualifier=@1", + moduleId, fullName).FirstOrDefault(); + } + } } public partial interface IMemberRepository { + Member GetMember(int moduleId, string fullName); } } diff --git a/Controllers/DocumentationController.cs b/Controllers/DocumentationController.cs index 3e9cd6a..dd219f0 100644 --- a/Controllers/DocumentationController.cs +++ b/Controllers/DocumentationController.cs @@ -8,12 +8,12 @@ public class DocumentationController : ApiBrowserMvcController { [HttpGet] [ApiBrowserMvcAuthorize(SecurityLevel = SecurityAccessLevel.Comment)] - public ActionResult Edit(int classId, int memberId) + public ActionResult Edit(string name) { var d = new Documentation() { - ClassId = classId, - MemberId = memberId + ModuleId = ActiveModule.ModuleID, + FullName = name }; return View(d); } diff --git a/Views/Documentation/Edit.cshtml b/Views/Documentation/Edit.cshtml index 39c95f2..e133656 100644 --- a/Views/Documentation/Edit.cshtml +++ b/Views/Documentation/Edit.cshtml @@ -4,9 +4,24 @@ @using Connect.ApiBrowser.Core.Repositories; @{ ApiBrowserModuleContext.AddModuleScript(); - var currentlist = DocumentationRepository.Instance.GetDocumentations(Model.ClassId, Model.MemberId); - var returnObject = Model.ClassId == -1 ? MemberRepository.Instance.GetMember(Model.MemberId).FullQualifier : ApiClassRepository.Instance.GetApiClass(Model.ClassId).FullQualifier; - var current = Model.ClassId == -1 ? MemberRepository.Instance.GetMember(Model.MemberId).DocumentationId : ApiClassRepository.Instance.GetApiClass(Model.ClassId).DocumentationId; + var currentlist = DocumentationRepository.Instance.GetDocumentations(ApiBrowserModuleContext.ModuleContext.ModuleID, Model.FullName); + var returnObject = ""; + var current = -1; + var m = MemberRepository.Instance.GetMember(ApiBrowserModuleContext.ModuleContext.ModuleID, Model.FullName); + if (m != null) + { + returnObject = m.FullQualifier; + current = m.DocumentationId != null ? (int)m.DocumentationId : -1; + } + else + { + var c = ApiClassRepository.Instance.GetApiClass(ApiBrowserModuleContext.ModuleContext.ModuleID, Model.FullName); + if (c != null) + { + returnObject = c.FullQualifier; + current = c.DocumentationId != null ? (int)c.DocumentationId : -1; + } + } }
1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/process/browser.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nmodule.exports = whitespace;\n\nvar fromCode = String.fromCharCode;\nvar re = /\\s/;\n\n/* Check if the given character code, or the character\n * code at the first character, is a whitespace character. */\nfunction whitespace(character) {\n return re.test(\n typeof character === 'number' ? fromCode(character) : character.charAt(0)\n );\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/is-whitespace-character/index.js\n// module id = 2\n// module chunks = 0","\"use strict\";\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nfunction makeEmptyFunction(arg) {\n return function () {\n return arg;\n };\n}\n\n/**\n * This function accepts and discards inputs; it has no side effects. This is\n * primarily useful idiomatically for overridable function endpoints which\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n */\nvar emptyFunction = function emptyFunction() {};\n\nemptyFunction.thatReturns = makeEmptyFunction;\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\nemptyFunction.thatReturnsThis = function () {\n return this;\n};\nemptyFunction.thatReturnsArgument = function (arg) {\n return arg;\n};\n\nmodule.exports = emptyFunction;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/fbjs/lib/emptyFunction.js\n// module id = 3\n// module chunks = 0","module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n var target = {}\n\n for (var i = 0; i < arguments.length; i++) {\n var source = arguments[i]\n\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n target[key] = source[key]\n }\n }\n }\n\n return target\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/xtend/immutable.js\n// module id = 4\n// module chunks = 0","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_global.js\n// module id = 5\n// module chunks = 0","module.exports = jQuery;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"jQuery\"\n// module id = 6\n// module chunks = 0","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_core.js\n// module id = 7\n// module chunks = 0","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-dp.js\n// module id = 8\n// module chunks = 0","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_descriptors.js\n// module id = 9\n// module chunks = 0","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_has.js\n// module id = 10\n// module chunks = 0","\nexports = module.exports = trim;\n\nfunction trim(str){\n return str.replace(/^\\s*|\\s*$/g, '');\n}\n\nexports.left = function(str){\n return str.replace(/^\\s*/, '');\n};\n\nexports.right = function(str){\n return str.replace(/\\s*$/, '');\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/trim/index.js\n// module id = 11\n// module chunks = 0","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var IS_WRAP = type & $export.W;\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE];\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && key in exports) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? ctx(out, global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_export.js\n// module id = 12\n// module chunks = 0","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_hide.js\n// module id = 13\n// module chunks = 0","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_is-object.js\n// module id = 14\n// module chunks = 0","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-iobject.js\n// module id = 15\n// module chunks = 0","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_wks.js\n// module id = 16\n// module chunks = 0","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar validateFormat = function validateFormat(format) {};\n\nif (process.env.NODE_ENV !== 'production') {\n validateFormat = function validateFormat(format) {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n };\n}\n\nfunction invariant(condition, format, a, b, c, d, e, f) {\n validateFormat(format);\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n}\n\nmodule.exports = invariant;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/fbjs/lib/invariant.js\n// module id = 17\n// module chunks = 0","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' &&\n Symbol.for &&\n Symbol.for('react.element')) ||\n 0xeac7;\n\n var isValidElement = function(object) {\n return typeof object === 'object' &&\n object !== null &&\n object.$$typeof === REACT_ELEMENT_TYPE;\n };\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(isValidElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/prop-types/index.js\n// module id = 18\n// module chunks = 0","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_an-object.js\n// module id = 19\n// module chunks = 0","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_fails.js\n// module id = 20\n// module chunks = 0","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n'use strict';\n\nvar emptyObject = {};\n\nif (process.env.NODE_ENV !== 'production') {\n Object.freeze(emptyObject);\n}\n\nmodule.exports = emptyObject;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/fbjs/lib/emptyObject.js\n// module id = 21\n// module chunks = 0","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n'use strict';\n\nvar emptyFunction = require('./emptyFunction');\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = emptyFunction;\n\nif (process.env.NODE_ENV !== 'production') {\n var printWarning = function printWarning(format) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n\n warning = function warning(condition, format) {\n if (format === undefined) {\n throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n }\n\n if (format.indexOf('Failed Composite propType: ') === 0) {\n return; // Ignore CompositeComponent proptype check.\n }\n\n if (!condition) {\n for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n args[_key2 - 2] = arguments[_key2];\n }\n\n printWarning.apply(undefined, [format].concat(args));\n }\n };\n}\n\nmodule.exports = warning;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/fbjs/lib/warning.js\n// module id = 22\n// module chunks = 0","'use strict';\n\nmodule.exports = decimal;\n\n/* Check if the given character code, or the character\n * code at the first character, is decimal. */\nfunction decimal(character) {\n var code = typeof character === 'string' ?\n character.charCodeAt(0) : character;\n\n return code >= 48 && code <= 57; /* 0-9 */\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/is-decimal/index.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nmodule.exports = visit;\n\nvar is = require('unist-util-is');\n\nvar CONTINUE = true;\nvar SKIP = 'skip';\nvar EXIT = false;\n\nvisit.CONTINUE = CONTINUE;\nvisit.SKIP = SKIP;\nvisit.EXIT = EXIT;\n\nfunction visit(tree, test, visitor, reverse) {\n if (typeof test === 'function' && typeof visitor !== 'function') {\n reverse = visitor;\n visitor = test;\n test = null;\n }\n\n one(tree);\n\n /* Visit a single node. */\n function one(node, index, parent) {\n var result;\n\n index = index || (parent ? 0 : null);\n\n if (!test || node.type === test || is(test, node, index, parent || null)) {\n result = visitor(node, index, parent || null);\n }\n\n if (result === EXIT) {\n return result;\n }\n\n if (node.children && result !== SKIP) {\n return all(node.children, node) === EXIT ? EXIT : result;\n }\n\n return result;\n }\n\n /* Visit children in `parent`. */\n function all(children, parent) {\n var step = reverse ? -1 : 1;\n var index = (reverse ? children.length : -1) + step;\n var child;\n var result;\n\n while (index > -1 && index < children.length) {\n child = children[index];\n result = child && one(child, index, parent);\n\n if (result === EXIT) {\n return result;\n }\n\n index = typeof result === 'number' ? result : index + step;\n }\n\n return CONTINUE;\n }\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/unist-util-visit/index.js\n// module id = 24\n// module chunks = 0","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_property-desc.js\n// module id = 25\n// module chunks = 0","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-keys.js\n// module id = 26\n// module chunks = 0","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_uid.js\n// module id = 27\n// module chunks = 0","exports.f = {}.propertyIsEnumerable;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-pie.js\n// module id = 28\n// module chunks = 0","\"use strict\";\n\nexports.__esModule = true;\n\nexports.default = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/helpers/classCallCheck.js\n// module id = 29\n// module chunks = 0","\"use strict\";\n\nexports.__esModule = true;\n\nvar _typeof2 = require(\"../helpers/typeof\");\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && ((typeof call === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(call)) === \"object\" || typeof call === \"function\") ? call : self;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/helpers/possibleConstructorReturn.js\n// module id = 30\n// module chunks = 0","\"use strict\";\n\nexports.__esModule = true;\n\nvar _iterator = require(\"../core-js/symbol/iterator\");\n\nvar _iterator2 = _interopRequireDefault(_iterator);\n\nvar _symbol = require(\"../core-js/symbol\");\n\nvar _symbol2 = _interopRequireDefault(_symbol);\n\nvar _typeof = typeof _symbol2.default === \"function\" && typeof _iterator2.default === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = typeof _symbol2.default === \"function\" && _typeof(_iterator2.default) === \"symbol\" ? function (obj) {\n return typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n} : function (obj) {\n return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/helpers/typeof.js\n// module id = 31\n// module chunks = 0","\"use strict\";\n\nexports.__esModule = true;\n\nvar _setPrototypeOf = require(\"../core-js/object/set-prototype-of\");\n\nvar _setPrototypeOf2 = _interopRequireDefault(_setPrototypeOf);\n\nvar _create = require(\"../core-js/object/create\");\n\nvar _create2 = _interopRequireDefault(_create);\n\nvar _typeof2 = require(\"../helpers/typeof\");\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(superClass)));\n }\n\n subClass.prototype = (0, _create2.default)(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf2.default ? (0, _setPrototypeOf2.default)(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/helpers/inherits.js\n// module id = 32\n// module chunks = 0","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== 'production') {\n var invariant = require('fbjs/lib/invariant');\n var warning = require('fbjs/lib/warning');\n var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n var loggedTypeFailures = {};\n}\n\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\nfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n if (process.env.NODE_ENV !== 'production') {\n for (var typeSpecName in typeSpecs) {\n if (typeSpecs.hasOwnProperty(typeSpecName)) {\n var error;\n // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n invariant(typeof typeSpecs[typeSpecName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'the `prop-types` package, but received `%s`.', componentName || 'React class', location, typeSpecName, typeof typeSpecs[typeSpecName]);\n error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n } catch (ex) {\n error = ex;\n }\n warning(!error || error instanceof 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);\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error.message] = true;\n\n var stack = getStack ? getStack() : '';\n\n warning(false, 'Failed %s type: %s%s', location, error.message, stack != null ? stack : '');\n }\n }\n }\n }\n}\n\nmodule.exports = checkPropTypes;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/prop-types/checkPropTypes.js\n// module id = 33\n// module chunks = 0","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/prop-types/lib/ReactPropTypesSecret.js\n// module id = 34\n// module chunks = 0","'use strict';\n\n/* Dependencies. */\nvar characterEntities = require('character-entities');\nvar legacy = require('character-entities-legacy');\nvar invalid = require('character-reference-invalid');\nvar decimal = require('is-decimal');\nvar hexadecimal = require('is-hexadecimal');\nvar alphanumerical = require('is-alphanumerical');\n\n/* Expose. */\nmodule.exports = wrapper;\n\n/* Methods. */\nvar own = {}.hasOwnProperty;\nvar fromCharCode = String.fromCharCode;\nvar noop = Function.prototype;\n\n/* Characters. */\nvar REPLACEMENT = '\\uFFFD';\nvar FORM_FEED = '\\f';\nvar AMPERSAND = '&';\nvar OCTOTHORP = '#';\nvar SEMICOLON = ';';\nvar NEWLINE = '\\n';\nvar X_LOWER = 'x';\nvar X_UPPER = 'X';\nvar SPACE = ' ';\nvar LESS_THAN = '<';\nvar EQUAL = '=';\nvar EMPTY = '';\nvar TAB = '\\t';\n\n/* Default settings. */\nvar defaults = {\n warning: null,\n reference: null,\n text: null,\n warningContext: null,\n referenceContext: null,\n textContext: null,\n position: {},\n additional: null,\n attribute: false,\n nonTerminated: true\n};\n\n/* Reference types. */\nvar NAMED = 'named';\nvar HEXADECIMAL = 'hexadecimal';\nvar DECIMAL = 'decimal';\n\n/* Map of bases. */\nvar BASE = {};\n\nBASE[HEXADECIMAL] = 16;\nBASE[DECIMAL] = 10;\n\n/* Map of types to tests. Each type of character reference\n * accepts different characters. This test is used to\n * detect whether a reference has ended (as the semicolon\n * is not strictly needed). */\nvar TESTS = {};\n\nTESTS[NAMED] = alphanumerical;\nTESTS[DECIMAL] = decimal;\nTESTS[HEXADECIMAL] = hexadecimal;\n\n/* Warning messages. */\nvar NAMED_NOT_TERMINATED = 1;\nvar NUMERIC_NOT_TERMINATED = 2;\nvar NAMED_EMPTY = 3;\nvar NUMERIC_EMPTY = 4;\nvar NAMED_UNKNOWN = 5;\nvar NUMERIC_DISALLOWED = 6;\nvar NUMERIC_PROHIBITED = 7;\n\nvar NUMERIC_REFERENCE = 'Numeric character references';\nvar NAMED_REFERENCE = 'Named character references';\nvar TERMINATED = ' must be terminated by a semicolon';\nvar VOID = ' cannot be empty';\n\nvar MESSAGES = {};\n\nMESSAGES[NAMED_NOT_TERMINATED] = NAMED_REFERENCE + TERMINATED;\nMESSAGES[NUMERIC_NOT_TERMINATED] = NUMERIC_REFERENCE + TERMINATED;\nMESSAGES[NAMED_EMPTY] = NAMED_REFERENCE + VOID;\nMESSAGES[NUMERIC_EMPTY] = NUMERIC_REFERENCE + VOID;\nMESSAGES[NAMED_UNKNOWN] = NAMED_REFERENCE + ' must be known';\nMESSAGES[NUMERIC_DISALLOWED] = NUMERIC_REFERENCE + ' cannot be disallowed';\nMESSAGES[NUMERIC_PROHIBITED] = NUMERIC_REFERENCE + ' cannot be outside the ' +\n 'permissible Unicode range';\n\n/* Wrap to ensure clean parameters are given to `parse`. */\nfunction wrapper(value, options) {\n var settings = {};\n var option;\n var key;\n\n if (!options) {\n options = {};\n }\n\n for (key in defaults) {\n option = options[key];\n settings[key] = option === null || option === undefined ? defaults[key] : option;\n }\n\n if (settings.position.indent || settings.position.start) {\n settings.indent = settings.position.indent || [];\n settings.position = settings.position.start;\n }\n\n return parse(value, settings);\n}\n\n/* Parse entities. */\nfunction parse(value, settings) {\n var additional = settings.additional;\n var nonTerminated = settings.nonTerminated;\n var handleText = settings.text;\n var handleReference = settings.reference;\n var handleWarning = settings.warning;\n var textContext = settings.textContext;\n var referenceContext = settings.referenceContext;\n var warningContext = settings.warningContext;\n var pos = settings.position;\n var indent = settings.indent || [];\n var length = value.length;\n var index = 0;\n var lines = -1;\n var column = pos.column || 1;\n var line = pos.line || 1;\n var queue = EMPTY;\n var result = [];\n var entityCharacters;\n var terminated;\n var characters;\n var character;\n var reference;\n var following;\n var warning;\n var reason;\n var output;\n var entity;\n var begin;\n var start;\n var type;\n var test;\n var prev;\n var next;\n var diff;\n var end;\n\n /* Cache the current point. */\n prev = now();\n\n /* Wrap `handleWarning`. */\n warning = handleWarning ? parseError : noop;\n\n /* Ensure the algorithm walks over the first character\n * and the end (inclusive). */\n index--;\n length++;\n\n while (++index < length) {\n /* If the previous character was a newline. */\n if (character === NEWLINE) {\n column = indent[lines] || 1;\n }\n\n character = at(index);\n\n /* Handle anything other than an ampersand,\n * including newlines and EOF. */\n if (character !== AMPERSAND) {\n if (character === NEWLINE) {\n line++;\n lines++;\n column = 0;\n }\n\n if (character) {\n queue += character;\n column++;\n } else {\n flush();\n }\n } else {\n following = at(index + 1);\n\n /* The behaviour depends on the identity of the next\n * character. */\n if (\n following === TAB ||\n following === NEWLINE ||\n following === FORM_FEED ||\n following === SPACE ||\n following === LESS_THAN ||\n following === AMPERSAND ||\n following === EMPTY ||\n (additional && following === additional)\n ) {\n /* Not a character reference. No characters\n * are consumed, and nothing is returned.\n * This is not an error, either. */\n queue += character;\n column++;\n\n continue;\n }\n\n start = index + 1;\n begin = start;\n end = start;\n\n /* Numerical entity. */\n if (following !== OCTOTHORP) {\n type = NAMED;\n } else {\n end = ++begin;\n\n /* The behaviour further depends on the\n * character after the U+0023 NUMBER SIGN. */\n following = at(end);\n\n if (following === X_LOWER || following === X_UPPER) {\n /* ASCII hex digits. */\n type = HEXADECIMAL;\n end = ++begin;\n } else {\n /* ASCII digits. */\n type = DECIMAL;\n }\n }\n\n entityCharacters = EMPTY;\n entity = EMPTY;\n characters = EMPTY;\n test = TESTS[type];\n end--;\n\n while (++end < length) {\n following = at(end);\n\n if (!test(following)) {\n break;\n }\n\n characters += following;\n\n /* Check if we can match a legacy named\n * reference. If so, we cache that as the\n * last viable named reference. This\n * ensures we do not need to walk backwards\n * later. */\n if (type === NAMED && own.call(legacy, characters)) {\n entityCharacters = characters;\n entity = legacy[characters];\n }\n }\n\n terminated = at(end) === SEMICOLON;\n\n if (terminated) {\n end++;\n\n if (type === NAMED && own.call(characterEntities, characters)) {\n entityCharacters = characters;\n entity = characterEntities[characters];\n }\n }\n\n diff = 1 + end - start;\n\n if (!terminated && !nonTerminated) {\n /* Empty. */\n } else if (!characters) {\n /* An empty (possible) entity is valid, unless\n * its numeric (thus an ampersand followed by\n * an octothorp). */\n if (type !== NAMED) {\n warning(NUMERIC_EMPTY, diff);\n }\n } else if (type === NAMED) {\n /* An ampersand followed by anything\n * unknown, and not terminated, is invalid. */\n if (terminated && !entity) {\n warning(NAMED_UNKNOWN, 1);\n } else {\n /* If theres something after an entity\n * name which is not known, cap the\n * reference. */\n if (entityCharacters !== characters) {\n end = begin + entityCharacters.length;\n diff = 1 + end - begin;\n terminated = false;\n }\n\n /* If the reference is not terminated,\n * warn. */\n if (!terminated) {\n reason = entityCharacters ?\n NAMED_NOT_TERMINATED :\n NAMED_EMPTY;\n\n if (!settings.attribute) {\n warning(reason, diff);\n } else {\n following = at(end);\n\n if (following === EQUAL) {\n warning(reason, diff);\n entity = null;\n } else if (alphanumerical(following)) {\n entity = null;\n } else {\n warning(reason, diff);\n }\n }\n }\n }\n\n reference = entity;\n } else {\n if (!terminated) {\n /* All non-terminated numeric entities are\n * not rendered, and trigger a warning. */\n warning(NUMERIC_NOT_TERMINATED, diff);\n }\n\n /* When terminated and number, parse as\n * either hexadecimal or decimal. */\n reference = parseInt(characters, BASE[type]);\n\n /* Trigger a warning when the parsed number\n * is prohibited, and replace with\n * replacement character. */\n if (isProhibited(reference)) {\n warning(NUMERIC_PROHIBITED, diff);\n\n reference = REPLACEMENT;\n } else if (reference in invalid) {\n /* Trigger a warning when the parsed number\n * is disallowed, and replace by an\n * alternative. */\n warning(NUMERIC_DISALLOWED, diff);\n\n reference = invalid[reference];\n } else {\n /* Parse the number. */\n output = EMPTY;\n\n /* Trigger a warning when the parsed\n * number should not be used. */\n if (isWarning(reference)) {\n warning(NUMERIC_DISALLOWED, diff);\n }\n\n /* Stringify the number. */\n if (reference > 0xFFFF) {\n reference -= 0x10000;\n output += fromCharCode((reference >>> (10 & 0x3FF)) | 0xD800);\n reference = 0xDC00 | (reference & 0x3FF);\n }\n\n reference = output + fromCharCode(reference);\n }\n }\n\n /* If we could not find a reference, queue the\n * checked characters (as normal characters),\n * and move the pointer to their end. This is\n * possible because we can be certain neither\n * newlines nor ampersands are included. */\n if (!reference) {\n characters = value.slice(start - 1, end);\n queue += characters;\n column += characters.length;\n index = end - 1;\n } else {\n /* Found it! First eat the queued\n * characters as normal text, then eat\n * an entity. */\n flush();\n\n prev = now();\n index = end - 1;\n column += end - start + 1;\n result.push(reference);\n next = now();\n next.offset++;\n\n if (handleReference) {\n handleReference.call(referenceContext, reference, {\n start: prev,\n end: next\n }, value.slice(start - 1, end));\n }\n\n prev = next;\n }\n }\n }\n\n /* Return the reduced nodes, and any possible warnings. */\n return result.join(EMPTY);\n\n /* Get current position. */\n function now() {\n return {\n line: line,\n column: column,\n offset: index + (pos.offset || 0)\n };\n }\n\n /* “Throw” a parse-error: a warning. */\n function parseError(code, offset) {\n var position = now();\n\n position.column += offset;\n position.offset += offset;\n\n handleWarning.call(warningContext, MESSAGES[code], position, code);\n }\n\n /* Get character at position. */\n function at(position) {\n return value.charAt(position);\n }\n\n /* Flush `queue` (normal text). Macro invoked before\n * each entity and at the end of `value`.\n * Does nothing when `queue` is empty. */\n function flush() {\n if (queue) {\n result.push(queue);\n\n if (handleText) {\n handleText.call(textContext, queue, {\n start: prev,\n end: now()\n });\n }\n\n queue = EMPTY;\n }\n }\n}\n\n/* Check if `character` is outside the permissible\n * unicode range. */\nfunction isProhibited(code) {\n return (code >= 0xD800 && code <= 0xDFFF) || (code > 0x10FFFF);\n}\n\n/* Check if `character` is disallowed. */\nfunction isWarning(code) {\n if (\n (code >= 0x0001 && code <= 0x0008) ||\n code === 0x000B ||\n (code >= 0x000D && code <= 0x001F) ||\n (code >= 0x007F && code <= 0x009F) ||\n (code >= 0xFDD0 && code <= 0xFDEF) ||\n (code & 0xFFFF) === 0xFFFF ||\n (code & 0xFFFF) === 0xFFFE\n ) {\n return true;\n }\n\n return false;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/parse-entities/index.js\n// module id = 35\n// module chunks = 0","/*!\n * repeat-string \n *\n * Copyright (c) 2014-2015, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\n/**\n * Results cache\n */\n\nvar res = '';\nvar cache;\n\n/**\n * Expose `repeat`\n */\n\nmodule.exports = repeat;\n\n/**\n * Repeat the given `string` the specified `number`\n * of times.\n *\n * **Example:**\n *\n * ```js\n * var repeat = require('repeat-string');\n * repeat('A', 5);\n * //=> AAAAA\n * ```\n *\n * @param {String} `string` The string to repeat\n * @param {Number} `number` The number of times to repeat the string\n * @return {String} Repeated string\n * @api public\n */\n\nfunction repeat(str, num) {\n if (typeof str !== 'string') {\n throw new TypeError('expected a string');\n }\n\n // cover common, quick use cases\n if (num === 1) return str;\n if (num === 2) return str + str;\n\n var max = str.length * num;\n if (cache !== str || typeof cache === 'undefined') {\n cache = str;\n res = '';\n } else if (res.length >= max) {\n return res.substr(0, max);\n }\n\n while (max > res.length && num > 1) {\n if (num & 1) {\n res += str;\n }\n\n num >>= 1;\n str += str;\n }\n\n res += str;\n res = res.substr(0, max);\n return res;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/repeat-string/index.js\n// module id = 36\n// module chunks = 0","'use strict';\n\nmodule.exports = trimTrailingLines;\n\nvar line = '\\n';\n\n/* Remove final newline characters from `value`. */\nfunction trimTrailingLines(value) {\n var val = String(value);\n var index = val.length;\n\n while (val.charAt(--index) === line) { /* empty */ }\n\n return val.slice(0, index + 1);\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/trim-trailing-lines/index.js\n// module id = 37\n// module chunks = 0","'use strict';\n\nmodule.exports = interrupt;\n\nfunction interrupt(interruptors, tokenizers, ctx, params) {\n var bools = ['pedantic', 'commonmark'];\n var count = bools.length;\n var length = interruptors.length;\n var index = -1;\n var interruptor;\n var config;\n var fn;\n var offset;\n var bool;\n var ignore;\n\n while (++index < length) {\n interruptor = interruptors[index];\n config = interruptor[1] || {};\n fn = interruptor[0];\n offset = -1;\n ignore = false;\n\n while (++offset < count) {\n bool = bools[offset];\n\n if (config[bool] !== undefined && config[bool] !== ctx.options[bool]) {\n ignore = true;\n break;\n }\n }\n\n if (ignore) {\n continue;\n }\n\n if (tokenizers[fn].apply(ctx, params)) {\n return true;\n }\n }\n\n return false;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/remark-parse/lib/util/interrupt.js\n// module id = 38\n// module chunks = 0","'use strict';\n\nvar collapseWhiteSpace = require('collapse-white-space');\n\nmodule.exports = normalize;\n\n/* Normalize an identifier. Collapses multiple white space\n * characters into a single space, and removes casing. */\nfunction normalize(value) {\n return collapseWhiteSpace(value).toLowerCase();\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/remark-parse/lib/util/normalize.js\n// module id = 39\n// module chunks = 0","\"use strict\";\n\nexports.__esModule = true;\n\nvar _assign = require(\"../core-js/object/assign\");\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _assign2.default || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/helpers/extends.js\n// module id = 40\n// module chunks = 0","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-primitive.js\n// module id = 41\n// module chunks = 0","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_defined.js\n// module id = 42\n// module chunks = 0","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-integer.js\n// module id = 43\n// module chunks = 0","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_shared-key.js\n// module id = 44\n// module chunks = 0","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_shared.js\n// module id = 45\n// module chunks = 0","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_enum-bug-keys.js\n// module id = 46\n// module chunks = 0","exports.f = Object.getOwnPropertySymbols;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gops.js\n// module id = 47\n// module chunks = 0","module.exports = true;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_library.js\n// module id = 48\n// module chunks = 0","module.exports = {};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_iterators.js\n// module id = 49\n// module chunks = 0","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-create.js\n// module id = 50\n// module chunks = 0","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_set-to-string-tag.js\n// module id = 51\n// module chunks = 0","exports.f = require('./_wks');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_wks-ext.js\n// module id = 52\n// module chunks = 0","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_wks-define.js\n// module id = 53\n// module chunks = 0","import * as React from \"react\";\r\nimport * as ReactDOM from \"react-dom\";\r\nimport * as $ from \"jquery\";\r\nimport * as Models from './Models/';\r\nimport DataService from \"./Service\";\r\n\r\nexport class AppManager {\r\n public static Modules = new Models.KeyedCollection();\r\n public static loadData(): void {\r\n $('.connectapibrowser').each(function (i, el) {\r\n var moduleId = $(el).data('moduleid');\r\n AppManager.Modules.Add(moduleId, new Models.AppModule(moduleId, $(el).data('tabid'), $(el).data('locale'), $(el).data('resources'), $(el).data('security'), new DataService(moduleId)));\r\n });\r\n }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./js/src/AppManager.tsx","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react/node_modules/object-assign/index.js\n// module id = 55\n// module chunks = 0","'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom.production.min.js');\n} else {\n module.exports = require('./cjs/react-dom.development.js');\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-dom/index.js\n// module id = 56\n// module chunks = 0","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n'use strict';\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\n/**\n * Simple, lightweight module assisting with the detection and context of\n * Worker. Helps avoid circular dependencies and allows code to reason about\n * whether or not they are in a Worker, even if they never include the main\n * `ReactWorker` dependency.\n */\nvar ExecutionEnvironment = {\n\n canUseDOM: canUseDOM,\n\n canUseWorkers: typeof Worker !== 'undefined',\n\n canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent),\n\n canUseViewport: canUseDOM && !!window.screen,\n\n isInWorker: !canUseDOM // For now, this is true - might change in the future.\n\n};\n\nmodule.exports = ExecutionEnvironment;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/fbjs/lib/ExecutionEnvironment.js\n// module id = 57\n// module chunks = 0","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-dom/node_modules/object-assign/index.js\n// module id = 58\n// module chunks = 0","'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n */\n\nvar emptyFunction = require('./emptyFunction');\n\n/**\n * Upstream version of event listener. Does not take into account specific\n * nature of platform.\n */\nvar EventListener = {\n /**\n * Listen to DOM events during the bubble phase.\n *\n * @param {DOMEventTarget} target DOM element to register listener on.\n * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.\n * @param {function} callback Callback function.\n * @return {object} Object with a `remove` method.\n */\n listen: function listen(target, eventType, callback) {\n if (target.addEventListener) {\n target.addEventListener(eventType, callback, false);\n return {\n remove: function remove() {\n target.removeEventListener(eventType, callback, false);\n }\n };\n } else if (target.attachEvent) {\n target.attachEvent('on' + eventType, callback);\n return {\n remove: function remove() {\n target.detachEvent('on' + eventType, callback);\n }\n };\n }\n },\n\n /**\n * Listen to DOM events during the capture phase.\n *\n * @param {DOMEventTarget} target DOM element to register listener on.\n * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.\n * @param {function} callback Callback function.\n * @return {object} Object with a `remove` method.\n */\n capture: function capture(target, eventType, callback) {\n if (target.addEventListener) {\n target.addEventListener(eventType, callback, true);\n return {\n remove: function remove() {\n target.removeEventListener(eventType, callback, true);\n }\n };\n } else {\n if (process.env.NODE_ENV !== 'production') {\n console.error('Attempted to listen to events during the capture phase on a ' + 'browser that does not support the capture phase. Your application ' + 'will not receive some events.');\n }\n return {\n remove: emptyFunction\n };\n }\n },\n\n registerDefault: function registerDefault() {}\n};\n\nmodule.exports = EventListener;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/fbjs/lib/EventListener.js\n// module id = 59\n// module chunks = 0","'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n */\n\n/* eslint-disable fb-www/typeof-undefined */\n\n/**\n * Same as document.activeElement but wraps in a try-catch block. In IE it is\n * not safe to call document.activeElement if there is nothing focused.\n *\n * The activeElement will be null only if the document or document body is not\n * yet defined.\n *\n * @param {?DOMDocument} doc Defaults to current document.\n * @return {?DOMElement}\n */\nfunction getActiveElement(doc) /*?DOMElement*/{\n doc = doc || (typeof document !== 'undefined' ? document : undefined);\n if (typeof doc === 'undefined') {\n return null;\n }\n try {\n return doc.activeElement || doc.body;\n } catch (e) {\n return doc.body;\n }\n}\n\nmodule.exports = getActiveElement;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/fbjs/lib/getActiveElement.js\n// module id = 60\n// module chunks = 0","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n * \n */\n\n/*eslint-disable no-self-compare */\n\n'use strict';\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n // Added the nonzero y check to make Flow happy, but it is redundant\n return x !== 0 || y !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n}\n\n/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * Returns true when the values of all keys are strictly equal.\n */\nfunction shallowEqual(objA, objB) {\n if (is(objA, objB)) {\n return true;\n }\n\n if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n // Test for A's keys different from B.\n for (var i = 0; i < keysA.length; i++) {\n if (!hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n\n return true;\n}\n\nmodule.exports = shallowEqual;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/fbjs/lib/shallowEqual.js\n// module id = 61\n// module chunks = 0","'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar isTextNode = require('./isTextNode');\n\n/*eslint-disable no-bitwise */\n\n/**\n * Checks if a given DOM node contains or is another DOM node.\n */\nfunction containsNode(outerNode, innerNode) {\n if (!outerNode || !innerNode) {\n return false;\n } else if (outerNode === innerNode) {\n return true;\n } else if (isTextNode(outerNode)) {\n return false;\n } else if (isTextNode(innerNode)) {\n return containsNode(outerNode, innerNode.parentNode);\n } else if ('contains' in outerNode) {\n return outerNode.contains(innerNode);\n } else if (outerNode.compareDocumentPosition) {\n return !!(outerNode.compareDocumentPosition(innerNode) & 16);\n } else {\n return false;\n }\n}\n\nmodule.exports = containsNode;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/fbjs/lib/containsNode.js\n// module id = 62\n// module chunks = 0","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n'use strict';\n\n/**\n * @param {DOMElement} node input/textarea to focus\n */\n\nfunction focusNode(node) {\n // IE8 can throw \"Can't move focus to the control because it is invisible,\n // not enabled, or of a type that does not accept the focus.\" for all kinds of\n // reasons that are too expensive and fragile to test.\n try {\n node.focus();\n } catch (e) {}\n}\n\nmodule.exports = focusNode;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/fbjs/lib/focusNode.js\n// module id = 63\n// module chunks = 0","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar splitPath = function(filename) {\n return splitPathRe.exec(filename).slice(1);\n};\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/';\n\n // Normalize the path\n path = normalizeArray(filter(path.split('/'), function(p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function(p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n return p;\n }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function(path) {\n var result = splitPath(path),\n root = result[0],\n dir = result[1];\n\n if (!root && !dir) {\n // No dirname whatsoever\n return '.';\n }\n\n if (dir) {\n // It has a dirname, strip trailing slash\n dir = dir.substr(0, dir.length - 1);\n }\n\n return root + dir;\n};\n\n\nexports.basename = function(path, ext) {\n var f = splitPath(path)[2];\n // TODO: make this comparison case-insensitive on windows?\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\n\nexports.extname = function(path) {\n return splitPath(path)[3];\n};\n\nfunction filter (xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n ? function (str, start, len) { return str.substr(start, len) }\n : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n }\n;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/path-browserify/index.js\n// module id = 64\n// module chunks = 0","'use strict';\n\nmodule.exports = alphabetical;\n\n/* Check if the given character code, or the character\n * code at the first character, is alphabetical. */\nfunction alphabetical(character) {\n var code = typeof character === 'string' ?\n character.charCodeAt(0) : character;\n\n return (code >= 97 && code <= 122) || /* a-z */\n (code >= 65 && code <= 90); /* A-Z */\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/is-alphabetical/index.js\n// module id = 65\n// module chunks = 0","'use strict';\n\nmodule.exports = {\n position: true,\n gfm: true,\n commonmark: false,\n footnotes: false,\n pedantic: false,\n blocks: require('./block-elements.json')\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/remark-parse/lib/defaults.js\n// module id = 66\n// module chunks = 0","'use strict';\n\nmodule.exports = indentation;\n\n/* Map of characters, and their column length,\n * which can be used as indentation. */\nvar characters = {' ': 1, '\\t': 4};\n\n/* Gets indentation information for a line. */\nfunction indentation(value) {\n var index = 0;\n var indent = 0;\n var character = value.charAt(index);\n var stops = {};\n var size;\n\n while (character in characters) {\n size = characters[character];\n\n indent += size;\n\n if (size > 1) {\n indent = Math.floor(indent / size) * size;\n }\n\n stops[indent] = index;\n\n character = value.charAt(++index);\n }\n\n return {indent: indent, stops: stops};\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/remark-parse/lib/util/get-indentation.js\n// module id = 67\n// module chunks = 0","'use strict';\n\nvar attributeName = '[a-zA-Z_:][a-zA-Z0-9:._-]*';\nvar unquoted = '[^\"\\'=<>`\\\\u0000-\\\\u0020]+';\nvar singleQuoted = '\\'[^\\']*\\'';\nvar doubleQuoted = '\"[^\"]*\"';\nvar attributeValue = '(?:' + unquoted + '|' + singleQuoted + '|' + doubleQuoted + ')';\nvar attribute = '(?:\\\\s+' + attributeName + '(?:\\\\s*=\\\\s*' + attributeValue + ')?)';\nvar openTag = '<[A-Za-z][A-Za-z0-9\\\\-]*' + attribute + '*\\\\s*\\\\/?>';\nvar closeTag = '<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>';\nvar comment = '|';\nvar processing = '<[?].*?[?]>';\nvar declaration = ']*>';\nvar cdata = '';\n\nexports.openCloseTag = new RegExp('^(?:' + openTag + '|' + closeTag + ')');\n\nexports.tag = new RegExp('^(?:' +\n openTag + '|' +\n closeTag + '|' +\n comment + '|' +\n processing + '|' +\n declaration + '|' +\n cdata +\n')');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/remark-parse/lib/util/html.js\n// module id = 68\n// module chunks = 0","'use strict';\n\nmodule.exports = locate;\n\nfunction locate(value, fromIndex) {\n return value.indexOf('<', fromIndex);\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/remark-parse/lib/locate/tag.js\n// module id = 69\n// module chunks = 0","'use strict';\n\nmodule.exports = locate;\n\nfunction locate(value, fromIndex) {\n var link = value.indexOf('[', fromIndex);\n var image = value.indexOf('![', fromIndex);\n\n if (image === -1) {\n return link;\n }\n\n /* Link can never be `-1` if an image is found, so we don’t need\n * to check for that :) */\n return link < image ? link : image;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/remark-parse/lib/locate/link.js\n// module id = 70\n// module chunks = 0","import _extends from 'babel-runtime/helpers/extends';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport warning from 'warning';\nimport { traverseTreeNodes, updateCheckState, getOffset, getCheck, getStrictlyValue, isPositionPrefix } from './util';\n\nfunction noop() {}\n\nexport var contextTypes = {\n rcTree: PropTypes.shape({\n selectable: PropTypes.bool\n })\n};\n\nvar Tree = function (_React$Component) {\n _inherits(Tree, _React$Component);\n\n function Tree(props) {\n _classCallCheck(this, Tree);\n\n var _this = _possibleConstructorReturn(this, _React$Component.call(this, props));\n\n _initialiseProps.call(_this);\n\n var checkedKeys = _this.calcCheckedKeys(props);\n _this.state = {\n expandedKeys: _this.calcExpandedKeys(props),\n checkedKeys: checkedKeys.checkedKeys,\n halfCheckedKeys: checkedKeys.halfCheckedKeys,\n selectedKeys: _this.calcSelectedKeys(props),\n dragNodesKeys: '',\n dragOverNodeKey: '',\n dropNodeKey: ''\n };\n return _this;\n }\n\n Tree.prototype.getChildContext = function getChildContext() {\n var selectable = this.props.selectable;\n\n return {\n rcTree: {\n selectable: selectable\n }\n };\n };\n\n Tree.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n var props = this.props;\n\n var newState = {};\n var expandedKeys = nextProps.expandedKeys !== props.expandedKeys ? this.calcExpandedKeys(nextProps, true) : undefined;\n if (expandedKeys) {\n newState.expandedKeys = expandedKeys;\n }\n\n var checkedKeys = nextProps.checkedKeys !== props.checkedKeys || props.loadData ? this.calcCheckedKeys(nextProps, true) : undefined;\n if (checkedKeys) {\n newState.checkedKeys = checkedKeys.checkedKeys;\n newState.halfCheckedKeys = checkedKeys.halfCheckedKeys;\n }\n\n var selectedKeys = nextProps.selectedKeys !== props.selectedKeys ? this.calcSelectedKeys(nextProps, true) : undefined;\n if (selectedKeys) {\n newState.selectedKeys = selectedKeys;\n }\n this.setState(newState);\n };\n\n Tree.prototype.onDragStart = function onDragStart(e, treeNode) {\n this.dragNode = treeNode;\n var newState = {\n dragNodesKeys: this.getDragNodesKeys(treeNode)\n };\n var expandedKeys = this.getExpandedKeys(treeNode, false);\n if (expandedKeys) {\n newState.expandedKeys = expandedKeys;\n }\n this.setState(newState);\n this.props.onDragStart({\n event: e,\n node: treeNode\n });\n };\n\n Tree.prototype.onDragEnter = function onDragEnter(e, treeNode) {\n var _this2 = this;\n\n var dropPosition = this.calcDropPosition(e, treeNode);\n if (this.dragNode.props.eventKey === treeNode.props.eventKey && dropPosition === 0) {\n this.setState({\n dragOverNodeKey: '',\n dropPosition: null\n });\n return;\n }\n this.setState({\n dragOverNodeKey: treeNode.props.eventKey,\n dropPosition: dropPosition\n });\n\n if (!this.delayedDragEnterLogic) {\n this.delayedDragEnterLogic = {};\n }\n Object.keys(this.delayedDragEnterLogic).forEach(function (key) {\n clearTimeout(_this2.delayedDragEnterLogic[key]);\n });\n this.delayedDragEnterLogic[treeNode.props.pos] = setTimeout(function () {\n var expandedKeys = _this2.getExpandedKeys(treeNode, true);\n if (expandedKeys) {\n _this2.setState({ expandedKeys: expandedKeys });\n }\n _this2.props.onDragEnter({\n event: e,\n node: treeNode,\n expandedKeys: expandedKeys && [].concat(expandedKeys) || [].concat(_this2.state.expandedKeys)\n });\n }, 400);\n };\n\n Tree.prototype.onDragOver = function onDragOver(e, treeNode) {\n this.props.onDragOver({ event: e, node: treeNode });\n };\n\n Tree.prototype.onDragLeave = function onDragLeave(e, treeNode) {\n this.props.onDragLeave({ event: e, node: treeNode });\n };\n\n Tree.prototype.onDrop = function onDrop(e, treeNode) {\n var state = this.state;\n\n var eventKey = treeNode.props.eventKey;\n this.setState({\n dragOverNodeKey: '',\n dropNodeKey: eventKey\n });\n if (state.dragNodesKeys.indexOf(eventKey) > -1) {\n warning(false, 'Can not drop to dragNode(include it\\'s children node)');\n return;\n }\n\n var posArr = treeNode.props.pos.split('-');\n var res = {\n event: e,\n node: treeNode,\n dragNode: this.dragNode,\n dragNodesKeys: [].concat(state.dragNodesKeys),\n dropPosition: state.dropPosition + Number(posArr[posArr.length - 1])\n };\n if (state.dropPosition !== 0) {\n res.dropToGap = true;\n }\n this.props.onDrop(res);\n };\n\n Tree.prototype.onDragEnd = function onDragEnd(e, treeNode) {\n this.setState({\n dragOverNodeKey: ''\n });\n this.props.onDragEnd({ event: e, node: treeNode });\n };\n\n Tree.prototype.onExpand = function onExpand(treeNode) {\n var _this3 = this;\n\n var props = this.props,\n state = this.state;\n\n var expanded = !treeNode.props.expanded;\n var expandedKeys = [].concat(state.expandedKeys);\n var eventKey = treeNode.props.eventKey;\n\n var index = expandedKeys.indexOf(eventKey);\n if (expanded && index === -1) {\n expandedKeys.push(eventKey);\n } else if (!expanded && index > -1) {\n expandedKeys.splice(index, 1);\n }\n\n var controlled = 'expandedKeys' in props;\n if (!controlled) {\n this.setState({ expandedKeys: expandedKeys });\n }\n props.onExpand(expandedKeys, { node: treeNode, expanded: expanded });\n\n // After data loaded, need set new expandedKeys\n if (expanded && props.loadData) {\n return props.loadData(treeNode).then(function () {\n if (!controlled) {\n _this3.setState({ expandedKeys: expandedKeys });\n }\n });\n }\n };\n\n Tree.prototype.onSelect = function onSelect(treeNode) {\n var props = this.props,\n state = this.state;\n\n var eventKey = treeNode.props.eventKey;\n var selected = !treeNode.props.selected;\n\n var selectedKeys = [].concat(state.selectedKeys);\n if (!selected) {\n var index = selectedKeys.indexOf(eventKey);\n selectedKeys.splice(index, 1);\n } else if (!props.multiple) {\n selectedKeys = [eventKey];\n } else {\n selectedKeys.push(eventKey);\n }\n\n // TODO: can be optimized if we remove selectedNodes in API\n var selectedNodes = [];\n if (selectedKeys.length) {\n traverseTreeNodes(props.children, function (item) {\n if (selectedKeys.indexOf(item.key) !== -1) {\n selectedNodes.push(item);\n }\n });\n }\n\n if (!('selectedKeys' in props)) {\n this.setState({\n selectedKeys: selectedKeys\n });\n }\n\n var eventObj = {\n event: 'select',\n selected: selected,\n node: treeNode,\n selectedNodes: selectedNodes\n };\n props.onSelect(selectedKeys, eventObj);\n };\n\n Tree.prototype.onMouseEnter = function onMouseEnter(e, treeNode) {\n this.props.onMouseEnter({ event: e, node: treeNode });\n };\n\n Tree.prototype.onMouseLeave = function onMouseLeave(e, treeNode) {\n this.props.onMouseLeave({ event: e, node: treeNode });\n };\n\n Tree.prototype.onContextMenu = function onContextMenu(e, treeNode) {\n if (this.props.onRightClick) {\n e.preventDefault();\n this.props.onRightClick({ event: e, node: treeNode });\n }\n };\n\n // all keyboard events callbacks run from here at first\n\n\n Tree.prototype.getOpenTransitionName = function getOpenTransitionName() {\n var props = this.props;\n var transitionName = props.openTransitionName;\n var animationName = props.openAnimation;\n if (!transitionName && typeof animationName === 'string') {\n return props.prefixCls + '-open-' + animationName;\n }\n return transitionName;\n };\n\n Tree.prototype.getDragNodesKeys = function getDragNodesKeys(treeNode) {\n var dragNodesKeys = [];\n traverseTreeNodes(treeNode.props.children, function (item, index, pos, key) {\n if (isPositionPrefix(treeNode.props.pos, pos)) {\n dragNodesKeys.push(key);\n }\n });\n dragNodesKeys.push(treeNode.props.eventKey || treeNode.props.pos);\n return dragNodesKeys;\n };\n\n Tree.prototype.getExpandedKeys = function getExpandedKeys(treeNode, expand) {\n var eventKey = treeNode.props.eventKey;\n var expandedKeys = this.state.expandedKeys;\n var expandedIndex = expandedKeys.indexOf(eventKey);\n if (!expand && expandedIndex > -1) {\n var exKeys = [].concat(expandedKeys);\n exKeys.splice(expandedIndex, 1);\n return exKeys;\n }\n if (expand && expandedKeys.indexOf(eventKey) === -1) {\n return expandedKeys.concat([eventKey]);\n }\n };\n\n Tree.prototype.generateTreeNodesStates = function generateTreeNodesStates(children, checkedKeys) {\n var checkedPositions = [];\n var treeNodesStates = {};\n traverseTreeNodes(children, function (item, _, pos, key, childrenPos, parentPos) {\n treeNodesStates[pos] = {\n node: item,\n key: key,\n checked: false,\n halfChecked: false,\n disabled: item.props.disabled,\n disableCheckbox: item.props.disableCheckbox,\n childrenPos: childrenPos,\n parentPos: parentPos\n };\n if (checkedKeys.indexOf(key) !== -1) {\n treeNodesStates[pos].checked = true;\n checkedPositions.push(pos);\n }\n });\n checkedPositions.forEach(function (checkedPosition) {\n updateCheckState(treeNodesStates, checkedPosition, true);\n });\n return treeNodesStates;\n };\n\n Tree.prototype.calcExpandedKeys = function calcExpandedKeys(props, isNotInit) {\n var expandedKeys = props.expandedKeys || (isNotInit ? undefined : props.defaultExpandedKeys);\n if (!expandedKeys) {\n return undefined;\n }\n var expandAll = isNotInit ? false : props.defaultExpandAll;\n if (!expandAll && !props.autoExpandParent) {\n return expandedKeys;\n }\n\n var expandedPositionArr = [];\n if (props.autoExpandParent) {\n traverseTreeNodes(props.children, function (item, index, pos, key) {\n if (expandedKeys.indexOf(key) > -1) {\n expandedPositionArr.push(pos);\n }\n });\n }\n var filterExpandedKeysSet = {};\n traverseTreeNodes(props.children, function (item, index, pos, key) {\n if (expandAll) {\n filterExpandedKeysSet[key] = true;\n } else if (props.autoExpandParent) {\n var isCurrentParentOfExpanded = expandedPositionArr.some(function (p) {\n return isPositionPrefix(pos, p);\n });\n if (isCurrentParentOfExpanded) {\n filterExpandedKeysSet[key] = true;\n }\n }\n });\n var filterExpandedKeys = Object.keys(filterExpandedKeysSet);\n return filterExpandedKeys.length ? filterExpandedKeys : expandedKeys;\n };\n\n Tree.prototype.calcCheckedKeys = function calcCheckedKeys(props, isNotInit) {\n if (!props.checkable) {\n return { checkedKeys: [], halfCheckedKeys: [] };\n }\n\n var checkedKeys = props.checkedKeys || (isNotInit && !props.loadData ? undefined : props.defaultCheckedKeys);\n if (!checkedKeys) {\n return undefined;\n }\n if (Array.isArray(checkedKeys)) {\n checkedKeys = { checkedKeys: checkedKeys, halfCheckedKeys: [] };\n } else if (typeof checkedKeys === 'object') {\n checkedKeys = { checkedKeys: checkedKeys.checked, halfCheckedKeys: checkedKeys.halfChecked };\n }\n\n if (!props.checkStrictly) {\n var checked = checkedKeys.checkedKeys || [];\n var treeNodesStates = this.generateTreeNodesStates(props.children, checked);\n return getCheck(treeNodesStates);\n }\n\n return checkedKeys;\n };\n\n Tree.prototype.calcSelectedKeys = function calcSelectedKeys(props, isNotInit) {\n var selectedKeys = props.selectedKeys || (isNotInit ? undefined : props.defaultSelectedKeys);\n if (!selectedKeys) {\n return undefined;\n }\n if (props.multiple) {\n return [].concat(selectedKeys);\n }\n if (selectedKeys.length) {\n return [selectedKeys[0]];\n }\n return selectedKeys;\n };\n\n Tree.prototype.calcDropPosition = function calcDropPosition(e, treeNode) {\n var offsetTop = getOffset(treeNode.selectHandle).top;\n var offsetHeight = treeNode.selectHandle.offsetHeight;\n var pageY = e.pageY;\n var gapHeight = 2; // TODO: remove hard code\n if (pageY > offsetTop + offsetHeight - gapHeight) {\n return 1;\n }\n if (pageY < offsetTop + gapHeight) {\n return -1;\n }\n return 0;\n };\n\n Tree.prototype.renderTreeNode = function renderTreeNode(child, index) {\n var level = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var state = this.state,\n props = this.props;\n\n var pos = level + '-' + index;\n var key = child.key || pos;\n\n var childProps = {\n root: this,\n eventKey: key,\n pos: pos,\n loadData: props.loadData,\n prefixCls: props.prefixCls,\n showIcon: props.showIcon,\n draggable: props.draggable,\n dragOver: state.dragOverNodeKey === key && state.dropPosition === 0,\n dragOverGapTop: state.dragOverNodeKey === key && state.dropPosition === -1,\n dragOverGapBottom: state.dragOverNodeKey === key && state.dropPosition === 1,\n expanded: state.expandedKeys.indexOf(key) !== -1,\n selected: state.selectedKeys.indexOf(key) !== -1,\n openTransitionName: this.getOpenTransitionName(),\n openAnimation: props.openAnimation,\n filterTreeNode: this.filterTreeNode\n };\n if (props.checkable) {\n childProps.checkable = props.checkable;\n childProps.checked = state.checkedKeys.indexOf(key) !== -1;\n childProps.halfChecked = state.halfCheckedKeys.indexOf(key) !== -1;\n }\n return React.cloneElement(child, childProps);\n };\n\n Tree.prototype.render = function render() {\n var _classNames;\n\n var props = this.props;\n var className = classNames(props.prefixCls, props.className, (_classNames = {}, _classNames[props.prefixCls + '-show-line'] = props.showLine, _classNames));\n var domProps = {};\n if (props.focusable) {\n domProps.tabIndex = '0';\n domProps.onKeyDown = this.onKeyDown;\n }\n\n return React.createElement(\n 'ul',\n _extends({}, domProps, {\n className: className,\n role: 'tree-node',\n unselectable: 'on'\n }),\n React.Children.map(props.children, this.renderTreeNode, this)\n );\n };\n\n return Tree;\n}(React.Component);\n\nTree.propTypes = {\n prefixCls: PropTypes.string,\n children: PropTypes.any,\n showLine: PropTypes.bool,\n showIcon: PropTypes.bool,\n selectable: PropTypes.bool,\n multiple: PropTypes.bool,\n checkable: PropTypes.oneOfType([PropTypes.bool, PropTypes.node]),\n checkStrictly: PropTypes.bool,\n draggable: PropTypes.bool,\n autoExpandParent: PropTypes.bool,\n defaultExpandAll: PropTypes.bool,\n defaultExpandedKeys: PropTypes.arrayOf(PropTypes.string),\n expandedKeys: PropTypes.arrayOf(PropTypes.string),\n defaultCheckedKeys: PropTypes.arrayOf(PropTypes.string),\n checkedKeys: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.object]),\n defaultSelectedKeys: PropTypes.arrayOf(PropTypes.string),\n selectedKeys: PropTypes.arrayOf(PropTypes.string),\n onExpand: PropTypes.func,\n onCheck: PropTypes.func,\n onSelect: PropTypes.func,\n loadData: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onRightClick: PropTypes.func,\n onDragStart: PropTypes.func,\n onDragEnter: PropTypes.func,\n onDragOver: PropTypes.func,\n onDragLeave: PropTypes.func,\n onDrop: PropTypes.func,\n onDragEnd: PropTypes.func,\n filterTreeNode: PropTypes.func,\n openTransitionName: PropTypes.string,\n openAnimation: PropTypes.oneOfType([PropTypes.string, PropTypes.object])\n};\nTree.childContextTypes = contextTypes;\nTree.defaultProps = {\n prefixCls: 'rc-tree',\n showLine: false,\n showIcon: true,\n selectable: true,\n multiple: false,\n checkable: false,\n checkStrictly: false,\n draggable: false,\n autoExpandParent: true,\n defaultExpandAll: false,\n defaultExpandedKeys: [],\n defaultCheckedKeys: [],\n defaultSelectedKeys: [],\n onExpand: noop,\n onCheck: noop,\n onSelect: noop,\n onDragStart: noop,\n onDragEnter: noop,\n onDragOver: noop,\n onDragLeave: noop,\n onDrop: noop,\n onDragEnd: noop,\n onMouseEnter: noop,\n onMouseLeave: noop\n};\n\nvar _initialiseProps = function _initialiseProps() {\n var _this4 = this;\n\n this.onCheck = function (treeNode) {\n var props = _this4.props,\n state = _this4.state;\n\n var checked = !treeNode.props.checked || treeNode.props.halfChecked;\n var eventObj = {\n event: 'check',\n node: treeNode,\n checked: checked\n };\n\n if (props.checkStrictly) {\n var eventKey = treeNode.props.eventKey;\n var checkedKeys = [].concat(state.checkedKeys);\n var index = checkedKeys.indexOf(eventKey);\n if (checked && index === -1) {\n checkedKeys.push(eventKey);\n }\n if (!checked && index > -1) {\n checkedKeys.splice(index, 1);\n }\n\n eventObj.checkedNodes = [];\n traverseTreeNodes(props.children, function (item) {\n if (checkedKeys.indexOf(item.key) !== -1) {\n eventObj.checkedNodes.push(item);\n }\n });\n\n if (!('checkedKeys' in props)) {\n _this4.setState({\n checkedKeys: checkedKeys\n });\n }\n props.onCheck(getStrictlyValue(checkedKeys, state.halfCheckedKeys), eventObj);\n } else {\n var treeNodesStates = _this4.generateTreeNodesStates(props.children, state.checkedKeys);\n treeNodesStates[treeNode.props.pos].checked = checked;\n treeNodesStates[treeNode.props.pos].halfChecked = false;\n updateCheckState(treeNodesStates, treeNode.props.pos, checked);\n\n var checkKeys = getCheck(treeNodesStates);\n eventObj.checkedNodes = checkKeys.checkedNodes;\n eventObj.checkedNodesPositions = checkKeys.checkedNodesPositions; // TODO: not in API\n eventObj.halfCheckedKeys = checkKeys.halfCheckedKeys; // TODO: not in API\n\n if (!('checkedKeys' in props)) {\n _this4.setState({\n checkedKeys: checkKeys.checkedKeys,\n halfCheckedKeys: checkKeys.halfCheckedKeys\n });\n }\n props.onCheck(checkKeys.checkedKeys, eventObj);\n }\n };\n\n this.onKeyDown = function (e) {\n e.preventDefault();\n };\n\n this.filterTreeNode = function (treeNode) {\n var filterTreeNode = _this4.props.filterTreeNode;\n if (typeof filterTreeNode !== 'function' || treeNode.props.disabled) {\n return false;\n }\n return filterTreeNode.call(_this4, treeNode);\n };\n};\n\nexport default Tree;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/rc-tree/es/Tree.js\n// module id = 71\n// module chunks = 0","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_ctx.js\n// module id = 72\n// module chunks = 0","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_ie8-dom-define.js\n// module id = 73\n// module chunks = 0","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_dom-create.js\n// module id = 74\n// module chunks = 0","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-keys-internal.js\n// module id = 75\n// module chunks = 0","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_iobject.js\n// module id = 76\n// module chunks = 0","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_cof.js\n// module id = 77\n// module chunks = 0","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-object.js\n// module id = 78\n// module chunks = 0","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_iter-define.js\n// module id = 79\n// module chunks = 0","module.exports = require('./_hide');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_redefine.js\n// module id = 80\n// module chunks = 0","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gopn.js\n// module id = 81\n// module chunks = 0","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gopd.js\n// module id = 82\n// module chunks = 0","/*!\n Copyright (c) 2016 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tclasses.push(classNames.apply(null, arg));\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/classnames/index.js\n// module id = 83\n// module chunks = 0","module.exports = { \"default\": require(\"core-js/library/fn/object/define-property\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/core-js/object/define-property.js\n// module id = 84\n// module chunks = 0","\"use strict\";\n\nexports.__esModule = true;\n\nvar _defineProperty = require(\"../core-js/object/define-property\");\n\nvar _defineProperty2 = _interopRequireDefault(_defineProperty);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n (0, _defineProperty2.default)(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/helpers/createClass.js\n// module id = 85\n// module chunks = 0","module.exports = function(arr, obj){\n if (arr.indexOf) return arr.indexOf(obj);\n for (var i = 0; i < arr.length; ++i) {\n if (arr[i] === obj) return i;\n }\n return -1;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/component-indexof/index.js\n// module id = 86\n// module chunks = 0","var util = {\n isAppearSupported: function isAppearSupported(props) {\n return props.transitionName && props.transitionAppear || props.animation.appear;\n },\n isEnterSupported: function isEnterSupported(props) {\n return props.transitionName && props.transitionEnter || props.animation.enter;\n },\n isLeaveSupported: function isLeaveSupported(props) {\n return props.transitionName && props.transitionLeave || props.animation.leave;\n },\n allowAppearCallback: function allowAppearCallback(props) {\n return props.transitionAppear || props.animation.appear;\n },\n allowEnterCallback: function allowEnterCallback(props) {\n return props.transitionEnter || props.animation.enter;\n },\n allowLeaveCallback: function allowLeaveCallback(props) {\n return props.transitionLeave || props.animation.leave;\n }\n};\nexport default util;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/rc-animate/es/util.js\n// module id = 87\n// module chunks = 0","import * as React from \"react\";\r\nimport * as ReactDOM from \"react-dom\";\r\nimport * as $ from \"jquery\";\r\nimport { AppManager } from \"./AppManager\";\r\nimport { ComponentLoader } from \"./ComponentLoader\";\r\n\r\nvar modules = {};\r\n\r\n$(document).ready(function () {\r\n AppManager.loadData();\r\n ComponentLoader.load();\r\n});\r\n\n\n\n// WEBPACK FOOTER //\n// ./js/src/App.tsx","export * from './IApiClass';\r\nexport * from './IApiNamespace';\r\nexport * from './IAppModule';\r\nexport * from './ICodeBlock';\r\nexport * from './IComment';\r\nexport * from './ICommentLike';\r\nexport * from './IComponent';\r\nexport * from './IContextSecurity';\r\nexport * from './IDocumentation';\r\nexport * from './IKeyedCollection';\r\nexport * from './IMember';\r\nexport * from './IMemberCodeBlock';\r\nexport * from './INamespacesAndClass';\r\nexport * from './INameValuePair';\r\nexport * from './IScheduledFile';\r\nexport * from './ITreeviewNode';\r\nexport * from './IViewSelection';\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./js/src/Models/index.js\n// module id = 89\n// module chunks = 0","import { IMember } from \"./IMember\";\r\n\r\nexport interface IApiClass {\r\n ClassId: number;\r\n NamespaceId: number;\r\n ComponentId?: number;\r\n ClassName: string;\r\n Declaration: string;\r\n Documentation: string;\r\n Description: string;\r\n AppearedInVersion: string;\r\n DeprecatedInVersion: string;\r\n DisappearedInVersion: string;\r\n IsDeprecated: boolean;\r\n DeprecationMessage: string;\r\n DocumentationId?: number;\r\n DocumentationContents: string;\r\n NamespaceName: string;\r\n FullQualifier: string;\r\n ComponentName: string;\r\n LatestVersion: string;\r\n MemberCount?: number;\r\n Members?: IMember[];\r\n}\r\n\r\nexport class ApiClass implements IApiClass {\r\n ClassId: number;\r\n NamespaceId: number;\r\n ComponentId?: number;\r\n ClassName: string;\r\n Declaration: string;\r\n Documentation: string;\r\n Description: string;\r\n AppearedInVersion: string;\r\n DeprecatedInVersion: string;\r\n DisappearedInVersion: string;\r\n IsDeprecated: boolean;\r\n DeprecationMessage: string;\r\n DocumentationId?: number;\r\n DocumentationContents: string;\r\n NamespaceName: string;\r\n FullQualifier: string;\r\n ComponentName: string;\r\n LatestVersion: string;\r\n MemberCount?: number;\r\n Members?: IMember[];\r\n constructor() {\r\n this.ClassId = -1;\r\n this.NamespaceId = -1;\r\n this.ClassName = \"\";\r\n this.AppearedInVersion = \"\";\r\n this.IsDeprecated = false;\r\n this.NamespaceName = \"\";\r\n this.FullQualifier = \"\";\r\n this.ComponentName = \"\";\r\n this.LatestVersion = \"\";\r\n }\r\n}\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./js/src/Models/IApiClass.ts","export interface IApiNamespace {\r\n NamespaceId: number;\r\n ParentId: number;\r\n ModuleId: number;\r\n NamespaceName: string;\r\n LastQualifier: string;\r\n Description: string;\r\n}\r\n\r\nexport class ApiNamespace implements IApiNamespace {\r\n NamespaceId: number;\r\n ParentId: number;\r\n ModuleId: number;\r\n NamespaceName: string;\r\n LastQualifier: string;\r\n Description: string;\r\n constructor() {\r\n this.NamespaceId = -1;\r\n this.ParentId = -1;\r\n this.ModuleId = -1;\r\n this.NamespaceName = \"\";\r\n this.LastQualifier = \"\";\r\n }\r\n}\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./js/src/Models/IApiNamespace.ts","import DataService from \"../Service\";\r\nimport { IContextSecurity } from \"./index\";\r\n\r\nexport interface IAppModule {\r\n moduleId: number;\r\n tabId: number;\r\n locale: string;\r\n resources: any;\r\n security: IContextSecurity;\r\n service: DataService;\r\n}\r\n\r\nexport class AppModule implements IAppModule {\r\n public moduleId: number;\r\n public tabId: number;\r\n public locale: string;\r\n public resources: any;\r\n public security: IContextSecurity;\r\n public service: DataService;\r\n constructor(moduleId: number, tabId: number, locale: string, resources: any, security: any, service: DataService) {\r\n this.moduleId = moduleId;\r\n this.tabId = tabId;\r\n this.locale = locale;\r\n this.resources = resources;\r\n this.security = security;\r\n this.service = service;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./js/src/Models/IAppModule.ts","export interface IComment {\r\n CommentID: number;\r\n ComponentId: number;\r\n ItemType: number;\r\n ItemId: number;\r\n ParentId?: number;\r\n Message: string;\r\n Approved?: boolean;\r\n}\r\n\r\nexport class Comment implements IComment {\r\n CommentID: number;\r\n ComponentId: number;\r\n ItemType: number;\r\n ItemId: number;\r\n ParentId?: number;\r\n Message: string;\r\n Approved?: boolean;\r\n constructor() {\r\n this.CommentID = -1;\r\n this.ComponentId = -1;\r\n this.ItemType = -1;\r\n this.ItemId = -1;\r\n this.Message = \"\";\r\n }\r\n}\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./js/src/Models/IComment.ts","export interface ICommentLike {\r\n CommentId: number;\r\n UserId: number;\r\n Datime: Date;\r\n}\r\n\r\nexport class CommentLike implements ICommentLike {\r\n CommentId: number;\r\n UserId: number;\r\n Datime: Date;\r\n constructor() {\r\n this.CommentId = -1;\r\n this.UserId = -1;\r\n this.Datime = new Date();\r\n }\r\n}\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./js/src/Models/ICommentLike.ts","export interface IComponent {\r\n ComponentId: number;\r\n ModuleId: number;\r\n ComponentName: string;\r\n LatestVersion: string;\r\n Description: string;\r\n}\r\n\r\nexport class Component implements IComponent {\r\n ComponentId: number;\r\n ModuleId: number;\r\n ComponentName: string;\r\n LatestVersion: string;\r\n Description: string;\r\n constructor() {\r\n this.ComponentId = -1;\r\n this.ModuleId = -1;\r\n this.ComponentName = \"\";\r\n this.LatestVersion = \"\";\r\n }\r\n}\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./js/src/Models/IComponent.ts","export interface IDocumentation {\r\n DocumentationId: number;\r\n ClassId: number;\r\n MemberId: number;\r\n Contents: string;\r\n FullQualifier: string;\r\n IsCurrentVersion?: boolean;\r\n CreatedByUserDisplayName: string;\r\n CreatedByUserEmail: string;\r\n LastModifiedByUserDisplayName: string;\r\n LastModifiedByUserEmail: string;\r\n CreatedByUserID: number;\r\n CreatedOnDate: Date;\r\n LastModifiedByUserID: number;\r\n LastModifiedOnDate: Date;\r\n}\r\n\r\nexport class Documentation implements IDocumentation {\r\n DocumentationId: number;\r\n ClassId: number;\r\n MemberId: number;\r\n Contents: string;\r\n FullQualifier: string;\r\n IsCurrentVersion?: boolean;\r\n CreatedByUserDisplayName: string;\r\n CreatedByUserEmail: string;\r\n LastModifiedByUserDisplayName: string;\r\n LastModifiedByUserEmail: string;\r\n CreatedByUserID: number;\r\n CreatedOnDate: Date;\r\n LastModifiedByUserID: number;\r\n LastModifiedOnDate: Date;\r\n constructor() {\r\n this.DocumentationId = -1;\r\n this.ClassId = -1;\r\n this.MemberId = -1;\r\n this.Contents = \"\";\r\n this.CreatedByUserDisplayName = \"\";\r\n this.LastModifiedByUserDisplayName = \"\";\r\n this.CreatedByUserID = -1;\r\n this.CreatedOnDate = new Date();\r\n this.LastModifiedByUserID = -1;\r\n this.LastModifiedOnDate = new Date();\r\n }\r\n}\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./js/src/Models/IDocumentation.ts","export interface IKeyedCollection {\r\n Add(key: string, value: T): void;\r\n ContainsKey(key: string): boolean;\r\n Count(): number;\r\n Item(key: string): T;\r\n Keys(): string[];\r\n Remove(key: string): T;\r\n Values(): T[];\r\n}\r\nexport class KeyedCollection implements IKeyedCollection {\r\n private items: { [index: string]: T } = {};\r\n\r\n private count: number = 0;\r\n\r\n public ContainsKey(key: string): boolean {\r\n return this.items.hasOwnProperty(key);\r\n }\r\n\r\n public Count(): number {\r\n return this.count;\r\n }\r\n\r\n public Add(key: string, value: T) {\r\n this.items[key] = value;\r\n this.count++;\r\n }\r\n\r\n public Remove(key: string): T {\r\n var val = this.items[key];\r\n delete this.items[key];\r\n this.count--;\r\n return val;\r\n }\r\n\r\n public Item(key: string): T {\r\n return this.items[key];\r\n }\r\n\r\n public Keys(): string[] {\r\n var keySet: string[] = [];\r\n\r\n for (var prop in this.items) {\r\n if (this.items.hasOwnProperty(prop)) {\r\n keySet.push(prop);\r\n }\r\n }\r\n\r\n return keySet;\r\n }\r\n\r\n public Values(): T[] {\r\n var values: T[] = [];\r\n\r\n for (var prop in this.items) {\r\n if (this.items.hasOwnProperty(prop)) {\r\n values.push(this.items[prop]);\r\n }\r\n }\r\n\r\n return values;\r\n }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./js/src/Models/IKeyedCollection.ts","export interface IMember {\r\n MemberId: number;\r\n ClassId: number;\r\n MemberType: number;\r\n MemberName: string;\r\n Declaration: string;\r\n Documentation: string;\r\n Description: string;\r\n AppearedInVersion: string;\r\n DeprecatedInVersion: string;\r\n DisappearedInVersion: string;\r\n IsDeprecated: boolean;\r\n DeprecationMessage: string;\r\n DocumentationId?: number;\r\n DocumentationContents: string;\r\n ClassName: string;\r\n NamespaceName: string;\r\n FullQualifier: string;\r\n ComponentName: string;\r\n LatestVersion: string;\r\n CodeBlockCount?: number;\r\n}\r\n\r\nexport class Member implements IMember {\r\n MemberId: number;\r\n ClassId: number;\r\n MemberType: number;\r\n MemberName: string;\r\n Declaration: string;\r\n Documentation: string;\r\n Description: string;\r\n AppearedInVersion: string;\r\n DeprecatedInVersion: string;\r\n DisappearedInVersion: string;\r\n IsDeprecated: boolean;\r\n DeprecationMessage: string;\r\n DocumentationId?: number;\r\n DocumentationContents: string;\r\n ClassName: string;\r\n NamespaceName: string;\r\n FullQualifier: string;\r\n ComponentName: string;\r\n LatestVersion: string;\r\n CodeBlockCount?: number;\r\n constructor() {\r\n this.MemberId = -1;\r\n this.ClassId = -1;\r\n this.MemberType = -1;\r\n this.MemberName = \"\";\r\n this.AppearedInVersion = \"\";\r\n this.IsDeprecated = false;\r\n this.ClassName = \"\";\r\n this.NamespaceName = \"\";\r\n this.FullQualifier = \"\";\r\n this.ComponentName = \"\";\r\n this.LatestVersion = \"\";\r\n }\r\n}\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./js/src/Models/IMember.ts","export interface IMemberCodeBlock {\r\n CodeBlockId: number;\r\n MemberId: number;\r\n Version: string;\r\n CodeHash: string;\r\n StartLine?: number;\r\n StartColumn?: number;\r\n EndLine?: number;\r\n EndColumn?: number;\r\n FileName: string;\r\n}\r\n\r\nexport class MemberCodeBlock implements IMemberCodeBlock {\r\n CodeBlockId: number;\r\n MemberId: number;\r\n Version: string;\r\n CodeHash: string;\r\n StartLine?: number;\r\n StartColumn?: number;\r\n EndLine?: number;\r\n EndColumn?: number;\r\n FileName: string;\r\n constructor() {\r\n this.CodeBlockId = -1;\r\n this.MemberId = -1;\r\n this.Version = \"\";\r\n this.CodeHash = \"\";\r\n }\r\n}\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./js/src/Models/IMemberCodeBlock.ts","export interface INamespacesAndClass {\r\n ModuleId: number;\r\n NamespaceId: number;\r\n ClassId: number;\r\n IsClass?: boolean;\r\n Name: string;\r\n Description: string;\r\n IsDeprecated: number;\r\n DeprecatedInVersion: string;\r\n DisappearedInVersion: string;\r\n}\r\n\r\nexport class NamespacesAndClass implements INamespacesAndClass {\r\n ModuleId: number;\r\n NamespaceId: number;\r\n ClassId: number;\r\n IsClass?: boolean;\r\n Name: string;\r\n Description: string;\r\n IsDeprecated: number;\r\n DeprecatedInVersion: string;\r\n DisappearedInVersion: string;\r\n constructor() {\r\n this.ModuleId = -1;\r\n this.NamespaceId = -1;\r\n this.ClassId = -1;\r\n this.Name = \"\";\r\n this.IsDeprecated = -1;\r\n }\r\n}\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./js/src/Models/INamespacesAndClass.ts","export interface ITreeviewNode {\r\n text: string;\r\n nodes: ITreeviewNode[] | undefined;\r\n}\r\n\r\nexport class TreeviewNode implements ITreeviewNode {\r\n text: string;\r\n nodes: ITreeviewNode[] | undefined;\r\n constructor(title: string) {\r\n this.text = title;\r\n } \r\n}\n\n\n// WEBPACK FOOTER //\n// ./js/src/Models/ITreeviewNode.ts","import * as Models from './Models/';\r\n\r\nexport interface DnnServiceFramework extends JQueryStatic {\r\n dnnSF(moduleId: number): DnnServiceFramework;\r\n getServiceRoot(path: string): string;\r\n setModuleHeaders(): void;\r\n}\r\n\r\nexport default class DataService {\r\n private moduleId: number = -1;\r\n private dnn: DnnServiceFramework = $;\r\n private baseServicepath: string = this.dnn.dnnSF(this.moduleId).getServiceRoot('Connect/ApiBrowser');\r\n constructor(mid: number) {\r\n this.moduleId = mid;\r\n };\r\n private ajaxCall(type: string, servicePath: string, controller: string, action: string, id: any, data: any, success: Function, fail?: Function)\r\n : void {\r\n $.ajax({\r\n type: type,\r\n url: servicePath + controller + '/' + action + (id != undefined\r\n ? '/' + id\r\n : ''),\r\n beforeSend: this\r\n .dnn\r\n .dnnSF(this.moduleId)\r\n .setModuleHeaders,\r\n data: data\r\n })\r\n .done(function (retdata: any) {\r\n if (success != undefined) {\r\n success(retdata);\r\n }\r\n })\r\n .fail(function (xhr: any, status: any) {\r\n if (fail != undefined) {\r\n fail(xhr.responseText);\r\n }\r\n });\r\n };\r\n public deleteDocumentation(docid: number, success: Function): any {\r\n this.ajaxCall('POST', this.baseServicepath, 'Documentations', 'Delete', docid, null, success)\r\n }\r\n public getAll(classes: boolean, namespaces: boolean, searchText: string, pageIndex: number, pageSize: number, success: Function): any {\r\n this.ajaxCall('GET', this.baseServicepath, 'NamespacesAndClasses', 'List', null, { classes: classes, namespaces: namespaces, searchText: searchText, pageIndex: pageIndex, pageSize: pageSize }, success)\r\n }\r\n public getCodeblock(codeblockId: number, success: Function): any {\r\n this.ajaxCall('GET', this.baseServicepath, 'MemberCodeBlocks', 'Get', codeblockId, null, success)\r\n }\r\n public getMemberCodeBlocks(memberId: number, success: Function): any {\r\n this.ajaxCall('GET', this.baseServicepath, 'Members', 'Codeblocks', memberId, null, success)\r\n }\r\n public getMembers(classId: number, success: Function): any {\r\n this.ajaxCall('GET', this.baseServicepath, 'ApiClasses', 'Members', classId, null, success)\r\n }\r\n public getScheduledFiles(success: Function): any {\r\n this.ajaxCall('GET', this.baseServicepath, 'Files', 'Files', null, null, success)\r\n }\r\n public processFiles(success: Function): any {\r\n this.ajaxCall('POST', this.baseServicepath, 'Files', 'Process', null, null, success)\r\n }\r\n public saveDocumentation(documentation: Models.IDocumentation, success: Function): any {\r\n this.ajaxCall('POST', this.baseServicepath, 'Documentations', 'Save', null, documentation, success)\r\n }\r\n public setCurrentVersion(docid: number, success: Function): any {\r\n this.ajaxCall('POST', this.baseServicepath, 'Documentations', 'SetCurrent', docid, null, success)\r\n }\r\n public postFiles(files: any, success: Function, fail?: Function) {\r\n var data = new FormData();\r\n $.each(files, function (key, value) {\r\n data.append(key, value);\r\n });\r\n //this.showLoading();\r\n var that = this;\r\n $.ajax({\r\n type: \"POST\",\r\n url: that.baseServicepath + 'Files/Upload',\r\n beforeSend: that\r\n .dnn\r\n .dnnSF(that.moduleId)\r\n .setModuleHeaders,\r\n data: data,\r\n cache: false,\r\n dataType: 'json',\r\n processData: false,\r\n contentType: false\r\n }).done(function (retdata) {\r\n //that.hideLoading();\r\n if (success != undefined) {\r\n success(retdata);\r\n }\r\n }).fail(function (xhr, status) {\r\n //that.hideLoading();\r\n //that.showError(xhr.responseText);\r\n if (fail != undefined) {\r\n fail(xhr.responseText);\r\n }\r\n });\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./js/src/Service.ts","import * as React from \"react\";\r\nimport * as ReactDOM from \"react-dom\";\r\nimport * as $ from \"jquery\";\r\nimport { AppManager } from \"./AppManager\";\r\nimport Browser from \"./Components/Browser/Browser\";\r\nimport FileManager from \"./Components/Files/FileManager\";\r\nimport ClassesAndNamespacesGrid from \"./Components/ClassesAndNamespaces/Grid\";\r\nimport DocumentationEditor from \"./Components/Editor/DocumentationEditor\";\r\n\r\nexport class ComponentLoader {\r\n\r\n public static load(): void {\r\n $('.apibrowser').each(function (i, el) {\r\n var moduleId = $(el).data('moduleid');\r\n ReactDOM.render(, el);\r\n });\r\n $('.filemanager').each(function (i, el) {\r\n var moduleId = $(el).data('moduleid');\r\n ReactDOM.render(, el);\r\n });\r\n $('.classesandnamespaces').each(function (i, el) {\r\n var moduleId = $(el).data('moduleid');\r\n ReactDOM.render(, el);\r\n });\r\n $('.documentationeditor').each(function (i, el) {\r\n var moduleId = $(el).data('moduleid');\r\n ReactDOM.render(, el);\r\n });\r\n\r\n }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./js/src/ComponentLoader.tsx","/** @license React v16.2.0\n * react.production.min.js\n *\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var m=require(\"object-assign\"),n=require(\"fbjs/lib/emptyObject\"),p=require(\"fbjs/lib/emptyFunction\"),q=\"function\"===typeof Symbol&&Symbol[\"for\"],r=q?Symbol[\"for\"](\"react.element\"):60103,t=q?Symbol[\"for\"](\"react.call\"):60104,u=q?Symbol[\"for\"](\"react.return\"):60105,v=q?Symbol[\"for\"](\"react.portal\"):60106,w=q?Symbol[\"for\"](\"react.fragment\"):60107,x=\"function\"===typeof Symbol&&Symbol.iterator;\nfunction y(a){for(var b=arguments.length-1,e=\"Minified React error #\"+a+\"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant\\x3d\"+a,c=0;cM.length&&M.push(a)}\nfunction P(a,b,e,c){var d=typeof a;if(\"undefined\"===d||\"boolean\"===d)a=null;var g=!1;if(null===a)g=!0;else switch(d){case \"string\":case \"number\":g=!0;break;case \"object\":switch(a.$$typeof){case r:case t:case u:case v:g=!0}}if(g)return e(c,a,\"\"===b?\".\"+Q(a,0):b),1;g=0;b=\"\"===b?\".\":b+\":\";if(Array.isArray(a))for(var k=0;k 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.warn(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n\n lowPriorityWarning = function (condition, format) {\n if (format === undefined) {\n throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n }\n if (!condition) {\n for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n args[_key2 - 2] = arguments[_key2];\n }\n\n printWarning.apply(undefined, [format].concat(args));\n }\n };\n}\n\nvar lowPriorityWarning$1 = lowPriorityWarning;\n\nvar didWarnStateUpdateForUnmountedComponent = {};\n\nfunction warnNoop(publicInstance, callerName) {\n {\n var constructor = publicInstance.constructor;\n var componentName = constructor && (constructor.displayName || constructor.name) || 'ReactClass';\n var warningKey = componentName + '.' + callerName;\n if (didWarnStateUpdateForUnmountedComponent[warningKey]) {\n return;\n }\n warning(false, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op.\\n\\nPlease check the code for the %s component.', callerName, callerName, componentName);\n didWarnStateUpdateForUnmountedComponent[warningKey] = true;\n }\n}\n\n/**\n * This is the abstract API for an update queue.\n */\nvar ReactNoopUpdateQueue = {\n /**\n * Checks whether or not this composite component is mounted.\n * @param {ReactClass} publicInstance The instance we want to test.\n * @return {boolean} True if mounted, false otherwise.\n * @protected\n * @final\n */\n isMounted: function (publicInstance) {\n return false;\n },\n\n /**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {?function} callback Called after component is updated.\n * @param {?string} callerName name of the calling function in the public API.\n * @internal\n */\n enqueueForceUpdate: function (publicInstance, callback, callerName) {\n warnNoop(publicInstance, 'forceUpdate');\n },\n\n /**\n * Replaces all of the state. Always use this or `setState` to mutate state.\n * You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} completeState Next state.\n * @param {?function} callback Called after component is updated.\n * @param {?string} callerName name of the calling function in the public API.\n * @internal\n */\n enqueueReplaceState: function (publicInstance, completeState, callback, callerName) {\n warnNoop(publicInstance, 'replaceState');\n },\n\n /**\n * Sets a subset of the state. This only exists because _pendingState is\n * internal. This provides a merging strategy that is not available to deep\n * properties which is confusing. TODO: Expose pendingState or don't use it\n * during the merge.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} partialState Next partial state to be merged with state.\n * @param {?function} callback Called after component is updated.\n * @param {?string} Name of the calling function in the public API.\n * @internal\n */\n enqueueSetState: function (publicInstance, partialState, callback, callerName) {\n warnNoop(publicInstance, 'setState');\n }\n};\n\n/**\n * Base class helpers for the updating state of a component.\n */\nfunction Component(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n // We initialize the default updater but the real one gets injected by the\n // renderer.\n this.updater = updater || ReactNoopUpdateQueue;\n}\n\nComponent.prototype.isReactComponent = {};\n\n/**\n * Sets a subset of the state. Always use this to mutate\n * state. You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * There is no guarantee that calls to `setState` will run synchronously,\n * as they may eventually be batched together. You can provide an optional\n * callback that will be executed when the call to setState is actually\n * completed.\n *\n * When a function is provided to setState, it will be called at some point in\n * the future (not synchronously). It will be called with the up to date\n * component arguments (state, props, context). These values can be different\n * from this.* because your function may be called after receiveProps but before\n * shouldComponentUpdate, and this new state, props, and context will not yet be\n * assigned to this.\n *\n * @param {object|function} partialState Next partial state or function to\n * produce next partial state to be merged with current state.\n * @param {?function} callback Called after state is updated.\n * @final\n * @protected\n */\nComponent.prototype.setState = function (partialState, callback) {\n !(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null) ? invariant(false, 'setState(...): takes an object of state variables to update or a function which returns an object of state variables.') : void 0;\n this.updater.enqueueSetState(this, partialState, callback, 'setState');\n};\n\n/**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {?function} callback Called after update is complete.\n * @final\n * @protected\n */\nComponent.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, 'forceUpdate');\n};\n\n/**\n * Deprecated APIs. These APIs used to exist on classic React classes but since\n * we would like to deprecate them, we're not going to move them over to this\n * modern base class. Instead, we define a getter that warns if it's accessed.\n */\n{\n var deprecatedAPIs = {\n isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],\n replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']\n };\n var defineDeprecationWarning = function (methodName, info) {\n Object.defineProperty(Component.prototype, methodName, {\n get: function () {\n lowPriorityWarning$1(false, '%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]);\n return undefined;\n }\n });\n };\n for (var fnName in deprecatedAPIs) {\n if (deprecatedAPIs.hasOwnProperty(fnName)) {\n defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n }\n }\n}\n\n/**\n * Base class helpers for the updating state of a component.\n */\nfunction PureComponent(props, context, updater) {\n // Duplicated from Component.\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n // We initialize the default updater but the real one gets injected by the\n // renderer.\n this.updater = updater || ReactNoopUpdateQueue;\n}\n\nfunction ComponentDummy() {}\nComponentDummy.prototype = Component.prototype;\nvar pureComponentPrototype = PureComponent.prototype = new ComponentDummy();\npureComponentPrototype.constructor = PureComponent;\n// Avoid an extra prototype jump for these methods.\n_assign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = true;\n\nfunction AsyncComponent(props, context, updater) {\n // Duplicated from Component.\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n // We initialize the default updater but the real one gets injected by the\n // renderer.\n this.updater = updater || ReactNoopUpdateQueue;\n}\n\nvar asyncComponentPrototype = AsyncComponent.prototype = new ComponentDummy();\nasyncComponentPrototype.constructor = AsyncComponent;\n// Avoid an extra prototype jump for these methods.\n_assign(asyncComponentPrototype, Component.prototype);\nasyncComponentPrototype.unstable_isAsyncReactComponent = true;\nasyncComponentPrototype.render = function () {\n return this.props.children;\n};\n\n/**\n * Keeps track of the current owner.\n *\n * The current owner is the component who should own any components that are\n * currently being constructed.\n */\nvar ReactCurrentOwner = {\n /**\n * @internal\n * @type {ReactComponent}\n */\n current: null\n};\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\n\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n return config.key !== undefined;\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n var warnAboutAccessingKey = function () {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n warning(false, '%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName);\n }\n };\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n var warnAboutAccessingRef = function () {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n warning(false, '%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName);\n }\n };\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n}\n\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, no instanceof check\n * will work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} key\n * @param {string|object} ref\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @param {*} owner\n * @param {*} props\n * @internal\n */\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allow us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {};\n\n // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n });\n // self and source are DEV only properties.\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n });\n // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n};\n\n/**\n * Create and return a new ReactElement of the given type.\n * See https://reactjs.org/docs/react-api.html#createelement\n */\nfunction createElement(type, config, children) {\n var propName;\n\n // Reserved names are extracted\n var props = {};\n\n var key = null;\n var ref = null;\n var self = null;\n var source = null;\n\n if (config != null) {\n if (hasValidRef(config)) {\n ref = config.ref;\n }\n if (hasValidKey(config)) {\n key = '' + config.key;\n }\n\n self = config.__self === undefined ? null : config.__self;\n source = config.__source === undefined ? null : config.__source;\n // Remaining properties are added to a new props object\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n }\n }\n\n // Children can be more than one argument, and those are transferred onto\n // the newly allocated props object.\n var childrenLength = arguments.length - 2;\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 2];\n }\n {\n if (Object.freeze) {\n Object.freeze(childArray);\n }\n }\n props.children = childArray;\n }\n\n // Resolve default props\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n {\n if (key || ref) {\n if (typeof props.$$typeof === 'undefined' || props.$$typeof !== REACT_ELEMENT_TYPE) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n }\n }\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n}\n\n/**\n * Return a function that produces ReactElements of a given type.\n * See https://reactjs.org/docs/react-api.html#createfactory\n */\n\n\nfunction cloneAndReplaceKey(oldElement, newKey) {\n var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);\n\n return newElement;\n}\n\n/**\n * Clone and return a new ReactElement using element as the starting point.\n * See https://reactjs.org/docs/react-api.html#cloneelement\n */\nfunction cloneElement(element, config, children) {\n var propName;\n\n // Original props are copied\n var props = _assign({}, element.props);\n\n // Reserved names are extracted\n var key = element.key;\n var ref = element.ref;\n // Self is preserved since the owner is preserved.\n var self = element._self;\n // Source is preserved since cloneElement is unlikely to be targeted by a\n // transpiler, and the original source is probably a better indicator of the\n // true owner.\n var source = element._source;\n\n // Owner will be preserved, unless ref is overridden\n var owner = element._owner;\n\n if (config != null) {\n if (hasValidRef(config)) {\n // Silently steal the ref from the parent.\n ref = config.ref;\n owner = ReactCurrentOwner.current;\n }\n if (hasValidKey(config)) {\n key = '' + config.key;\n }\n\n // Remaining properties override existing props\n var defaultProps;\n if (element.type && element.type.defaultProps) {\n defaultProps = element.type.defaultProps;\n }\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n if (config[propName] === undefined && defaultProps !== undefined) {\n // Resolve default props\n props[propName] = defaultProps[propName];\n } else {\n props[propName] = config[propName];\n }\n }\n }\n }\n\n // Children can be more than one argument, and those are transferred onto\n // the newly allocated props object.\n var childrenLength = arguments.length - 2;\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 2];\n }\n props.children = childArray;\n }\n\n return ReactElement(element.type, key, ref, self, source, owner, props);\n}\n\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a valid component.\n * @final\n */\nfunction isValidElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\n\nvar ReactDebugCurrentFrame = {};\n\n{\n // Component that is being worked on\n ReactDebugCurrentFrame.getCurrentStack = null;\n\n ReactDebugCurrentFrame.getStackAddendum = function () {\n var impl = ReactDebugCurrentFrame.getCurrentStack;\n if (impl) {\n return impl();\n }\n return null;\n };\n}\n\nvar SEPARATOR = '.';\nvar SUBSEPARATOR = ':';\n\n/**\n * Escape and wrap key so it is safe to use as a reactid\n *\n * @param {string} key to be escaped.\n * @return {string} the escaped key.\n */\nfunction escape(key) {\n var escapeRegex = /[=:]/g;\n var escaperLookup = {\n '=': '=0',\n ':': '=2'\n };\n var escapedString = ('' + key).replace(escapeRegex, function (match) {\n return escaperLookup[match];\n });\n\n return '$' + escapedString;\n}\n\n/**\n * TODO: Test that a single child and an array with one item have the same key\n * pattern.\n */\n\nvar didWarnAboutMaps = false;\n\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction escapeUserProvidedKey(text) {\n return ('' + text).replace(userProvidedKeyEscapeRegex, '$&/');\n}\n\nvar POOL_SIZE = 10;\nvar traverseContextPool = [];\nfunction getPooledTraverseContext(mapResult, keyPrefix, mapFunction, mapContext) {\n if (traverseContextPool.length) {\n var traverseContext = traverseContextPool.pop();\n traverseContext.result = mapResult;\n traverseContext.keyPrefix = keyPrefix;\n traverseContext.func = mapFunction;\n traverseContext.context = mapContext;\n traverseContext.count = 0;\n return traverseContext;\n } else {\n return {\n result: mapResult,\n keyPrefix: keyPrefix,\n func: mapFunction,\n context: mapContext,\n count: 0\n };\n }\n}\n\nfunction releaseTraverseContext(traverseContext) {\n traverseContext.result = null;\n traverseContext.keyPrefix = null;\n traverseContext.func = null;\n traverseContext.context = null;\n traverseContext.count = 0;\n if (traverseContextPool.length < POOL_SIZE) {\n traverseContextPool.push(traverseContext);\n }\n}\n\n/**\n * @param {?*} children Children tree container.\n * @param {!string} nameSoFar Name of the key path so far.\n * @param {!function} callback Callback to invoke with each child found.\n * @param {?*} traverseContext Used to pass information throughout the traversal\n * process.\n * @return {!number} The number of children in this subtree.\n */\nfunction traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {\n var type = typeof children;\n\n if (type === 'undefined' || type === 'boolean') {\n // All of the above are perceived as null.\n children = null;\n }\n\n var invokeCallback = false;\n\n if (children === null) {\n invokeCallback = true;\n } else {\n switch (type) {\n case 'string':\n case 'number':\n invokeCallback = true;\n break;\n case 'object':\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_CALL_TYPE:\n case REACT_RETURN_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = true;\n }\n }\n }\n\n if (invokeCallback) {\n callback(traverseContext, children,\n // If it's the only child, treat the name as if it was wrapped in an array\n // so that it's consistent if the number of children grows.\n nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);\n return 1;\n }\n\n var child;\n var nextName;\n var subtreeCount = 0; // Count of children found in the current subtree.\n var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;\n\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n nextName = nextNamePrefix + getComponentKey(child, i);\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n }\n } else {\n var iteratorFn = getIteratorFn(children);\n if (typeof iteratorFn === 'function') {\n {\n // Warn about using Maps as children\n if (iteratorFn === children.entries) {\n warning(didWarnAboutMaps, 'Using Maps as children is unsupported and will likely yield ' + 'unexpected results. Convert it to a sequence/iterable of keyed ' + 'ReactElements instead.%s', ReactDebugCurrentFrame.getStackAddendum());\n didWarnAboutMaps = true;\n }\n }\n\n var iterator = iteratorFn.call(children);\n var step;\n var ii = 0;\n while (!(step = iterator.next()).done) {\n child = step.value;\n nextName = nextNamePrefix + getComponentKey(child, ii++);\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n }\n } else if (type === 'object') {\n var addendum = '';\n {\n addendum = ' If you meant to render a collection of children, use an array ' + 'instead.' + ReactDebugCurrentFrame.getStackAddendum();\n }\n var childrenString = '' + children;\n invariant(false, 'Objects are not valid as a React child (found: %s).%s', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum);\n }\n }\n\n return subtreeCount;\n}\n\n/**\n * Traverses children that are typically specified as `props.children`, but\n * might also be specified through attributes:\n *\n * - `traverseAllChildren(this.props.children, ...)`\n * - `traverseAllChildren(this.props.leftPanelChildren, ...)`\n *\n * The `traverseContext` is an optional argument that is passed through the\n * entire traversal. It can be used to store accumulations or anything else that\n * the callback might find relevant.\n *\n * @param {?*} children Children tree object.\n * @param {!function} callback To invoke upon traversing each child.\n * @param {?*} traverseContext Context for traversal.\n * @return {!number} The number of children in this subtree.\n */\nfunction traverseAllChildren(children, callback, traverseContext) {\n if (children == null) {\n return 0;\n }\n\n return traverseAllChildrenImpl(children, '', callback, traverseContext);\n}\n\n/**\n * Generate a key string that identifies a component within a set.\n *\n * @param {*} component A component that could contain a manual key.\n * @param {number} index Index that is used if a manual key is not provided.\n * @return {string}\n */\nfunction getComponentKey(component, index) {\n // Do some typechecking here since we call this blindly. We want to ensure\n // that we don't block potential future ES APIs.\n if (typeof component === 'object' && component !== null && component.key != null) {\n // Explicit key\n return escape(component.key);\n }\n // Implicit key determined by the index in the set\n return index.toString(36);\n}\n\nfunction forEachSingleChild(bookKeeping, child, name) {\n var func = bookKeeping.func,\n context = bookKeeping.context;\n\n func.call(context, child, bookKeeping.count++);\n}\n\n/**\n * Iterates through children that are typically specified as `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#react.children.foreach\n *\n * The provided forEachFunc(child, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} forEachFunc\n * @param {*} forEachContext Context for forEachContext.\n */\nfunction forEachChildren(children, forEachFunc, forEachContext) {\n if (children == null) {\n return children;\n }\n var traverseContext = getPooledTraverseContext(null, null, forEachFunc, forEachContext);\n traverseAllChildren(children, forEachSingleChild, traverseContext);\n releaseTraverseContext(traverseContext);\n}\n\nfunction mapSingleChildIntoContext(bookKeeping, child, childKey) {\n var result = bookKeeping.result,\n keyPrefix = bookKeeping.keyPrefix,\n func = bookKeeping.func,\n context = bookKeeping.context;\n\n\n var mappedChild = func.call(context, child, bookKeeping.count++);\n if (Array.isArray(mappedChild)) {\n mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, emptyFunction.thatReturnsArgument);\n } else if (mappedChild != null) {\n if (isValidElement(mappedChild)) {\n mappedChild = cloneAndReplaceKey(mappedChild,\n // Keep both the (mapped) and old keys if they differ, just as\n // traverseAllChildren used to do for objects as children\n keyPrefix + (mappedChild.key && (!child || child.key !== mappedChild.key) ? escapeUserProvidedKey(mappedChild.key) + '/' : '') + childKey);\n }\n result.push(mappedChild);\n }\n}\n\nfunction mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {\n var escapedPrefix = '';\n if (prefix != null) {\n escapedPrefix = escapeUserProvidedKey(prefix) + '/';\n }\n var traverseContext = getPooledTraverseContext(array, escapedPrefix, func, context);\n traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);\n releaseTraverseContext(traverseContext);\n}\n\n/**\n * Maps children that are typically specified as `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#react.children.map\n *\n * The provided mapFunction(child, key, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} func The map function.\n * @param {*} context Context for mapFunction.\n * @return {object} Object containing the ordered map of results.\n */\nfunction mapChildren(children, func, context) {\n if (children == null) {\n return children;\n }\n var result = [];\n mapIntoWithKeyPrefixInternal(children, result, null, func, context);\n return result;\n}\n\n/**\n * Count the number of children that are typically specified as\n * `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#react.children.count\n *\n * @param {?*} children Children tree container.\n * @return {number} The number of children.\n */\nfunction countChildren(children, context) {\n return traverseAllChildren(children, emptyFunction.thatReturnsNull, null);\n}\n\n/**\n * Flatten a children object (typically specified as `props.children`) and\n * return an array with appropriately re-keyed children.\n *\n * See https://reactjs.org/docs/react-api.html#react.children.toarray\n */\nfunction toArray(children) {\n var result = [];\n mapIntoWithKeyPrefixInternal(children, result, null, emptyFunction.thatReturnsArgument);\n return result;\n}\n\n/**\n * Returns the first child in a collection of children and verifies that there\n * is only one child in the collection.\n *\n * See https://reactjs.org/docs/react-api.html#react.children.only\n *\n * The current implementation of this function assumes that a single child gets\n * passed without a wrapper, but the purpose of this helper function is to\n * abstract away the particular structure of children.\n *\n * @param {?object} children Child collection structure.\n * @return {ReactElement} The first and only `ReactElement` contained in the\n * structure.\n */\nfunction onlyChild(children) {\n !isValidElement(children) ? invariant(false, 'React.Children.only expected to receive a single React element child.') : void 0;\n return children;\n}\n\nvar describeComponentFrame = function (name, source, ownerName) {\n return '\\n in ' + (name || 'Unknown') + (source ? ' (at ' + source.fileName.replace(/^.*[\\\\\\/]/, '') + ':' + source.lineNumber + ')' : ownerName ? ' (created by ' + ownerName + ')' : '');\n};\n\nfunction getComponentName(fiber) {\n var type = fiber.type;\n\n if (typeof type === 'string') {\n return type;\n }\n if (typeof type === 'function') {\n return type.displayName || type.name;\n }\n return null;\n}\n\n/**\n * ReactElementValidator provides a wrapper around a element factory\n * which validates the props passed to the element. This is intended to be\n * used only in DEV and could be replaced by a static type checker for languages\n * that support it.\n */\n\n{\n var currentlyValidatingElement = null;\n\n var propTypesMisspellWarningShown = false;\n\n var getDisplayName = function (element) {\n if (element == null) {\n return '#empty';\n } else if (typeof element === 'string' || typeof element === 'number') {\n return '#text';\n } else if (typeof element.type === 'string') {\n return element.type;\n } else if (element.type === REACT_FRAGMENT_TYPE) {\n return 'React.Fragment';\n } else {\n return element.type.displayName || element.type.name || 'Unknown';\n }\n };\n\n var getStackAddendum = function () {\n var stack = '';\n if (currentlyValidatingElement) {\n var name = getDisplayName(currentlyValidatingElement);\n var owner = currentlyValidatingElement._owner;\n stack += describeComponentFrame(name, currentlyValidatingElement._source, owner && getComponentName(owner));\n }\n stack += ReactDebugCurrentFrame.getStackAddendum() || '';\n return stack;\n };\n\n var VALID_FRAGMENT_PROPS = new Map([['children', true], ['key', true]]);\n}\n\nfunction getDeclarationErrorAddendum() {\n if (ReactCurrentOwner.current) {\n var name = getComponentName(ReactCurrentOwner.current);\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n return '';\n}\n\nfunction getSourceInfoErrorAddendum(elementProps) {\n if (elementProps !== null && elementProps !== undefined && elementProps.__source !== undefined) {\n var source = elementProps.__source;\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n var lineNumber = source.lineNumber;\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n }\n return '';\n}\n\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n if (parentName) {\n info = '\\n\\nCheck the top-level render call using <' + parentName + '>.';\n }\n }\n return info;\n}\n\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\nfunction validateExplicitKey(element, parentType) {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n element._store.validated = true;\n\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true;\n\n // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n var childOwner = '';\n if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\n // Give the component that originally created this child.\n childOwner = ' It was passed a child from ' + getComponentName(element._owner) + '.';\n }\n\n currentlyValidatingElement = element;\n {\n warning(false, 'Each child in an array or iterator should have a unique \"key\" prop.' + '%s%s See https://fb.me/react-warning-keys for more information.%s', currentComponentErrorInfo, childOwner, getStackAddendum());\n }\n currentlyValidatingElement = null;\n}\n\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\nfunction validateChildKeys(node, parentType) {\n if (typeof node !== 'object') {\n return;\n }\n if (Array.isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else if (node) {\n var iteratorFn = getIteratorFn(node);\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n}\n\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\nfunction validatePropTypes(element) {\n var componentClass = element.type;\n if (typeof componentClass !== 'function') {\n return;\n }\n var name = componentClass.displayName || componentClass.name;\n var propTypes = componentClass.propTypes;\n if (propTypes) {\n currentlyValidatingElement = element;\n checkPropTypes(propTypes, element.props, 'prop', name, getStackAddendum);\n currentlyValidatingElement = null;\n } else if (componentClass.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n propTypesMisspellWarningShown = true;\n warning(false, 'Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', name || 'Unknown');\n }\n if (typeof componentClass.getDefaultProps === 'function') {\n warning(componentClass.getDefaultProps.isReactClassApproved, 'getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n }\n}\n\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\nfunction validateFragmentProps(fragment) {\n currentlyValidatingElement = fragment;\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = Object.keys(fragment.props)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var key = _step.value;\n\n if (!VALID_FRAGMENT_PROPS.has(key)) {\n warning(false, 'Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.%s', key, getStackAddendum());\n break;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator['return']) {\n _iterator['return']();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n if (fragment.ref !== null) {\n warning(false, 'Invalid attribute `ref` supplied to `React.Fragment`.%s', getStackAddendum());\n }\n\n currentlyValidatingElement = null;\n}\n\nfunction createElementWithValidation(type, props, children) {\n var validType = typeof type === 'string' || typeof type === 'function' || typeof type === 'symbol' || typeof type === 'number';\n // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n if (!validType) {\n var info = '';\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n 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.\";\n }\n\n var sourceInfo = getSourceInfoErrorAddendum(props);\n if (sourceInfo) {\n info += sourceInfo;\n } else {\n info += getDeclarationErrorAddendum();\n }\n\n info += getStackAddendum() || '';\n\n warning(false, 'React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', type == null ? type : typeof type, info);\n }\n\n var element = createElement.apply(this, arguments);\n\n // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n if (element == null) {\n return element;\n }\n\n // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n if (validType) {\n for (var i = 2; i < arguments.length; i++) {\n validateChildKeys(arguments[i], type);\n }\n }\n\n if (typeof type === 'symbol' && type === REACT_FRAGMENT_TYPE) {\n validateFragmentProps(element);\n } else {\n validatePropTypes(element);\n }\n\n return element;\n}\n\nfunction createFactoryWithValidation(type) {\n var validatedFactory = createElementWithValidation.bind(null, type);\n // Legacy hook TODO: Warn if this is accessed\n validatedFactory.type = type;\n\n {\n Object.defineProperty(validatedFactory, 'type', {\n enumerable: false,\n get: function () {\n lowPriorityWarning$1(false, 'Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.');\n Object.defineProperty(this, 'type', {\n value: type\n });\n return type;\n }\n });\n }\n\n return validatedFactory;\n}\n\nfunction cloneElementWithValidation(element, props, children) {\n var newElement = cloneElement.apply(this, arguments);\n for (var i = 2; i < arguments.length; i++) {\n validateChildKeys(arguments[i], newElement.type);\n }\n validatePropTypes(newElement);\n return newElement;\n}\n\nvar React = {\n Children: {\n map: mapChildren,\n forEach: forEachChildren,\n count: countChildren,\n toArray: toArray,\n only: onlyChild\n },\n\n Component: Component,\n PureComponent: PureComponent,\n unstable_AsyncComponent: AsyncComponent,\n\n Fragment: REACT_FRAGMENT_TYPE,\n\n createElement: createElementWithValidation,\n cloneElement: cloneElementWithValidation,\n createFactory: createFactoryWithValidation,\n isValidElement: isValidElement,\n\n version: ReactVersion,\n\n __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: {\n ReactCurrentOwner: ReactCurrentOwner,\n // Used by renderers to avoid bundling object-assign twice in UMD bundles:\n assign: _assign\n }\n};\n\n{\n _assign(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, {\n // These should not be included in production.\n ReactDebugCurrentFrame: ReactDebugCurrentFrame,\n // Shim for React DOM 16.0.0 which still destructured (but not used) this.\n // TODO: remove in React 17.0.\n ReactComponentTreeHook: {}\n });\n}\n\n\n\nvar React$2 = Object.freeze({\n\tdefault: React\n});\n\nvar React$3 = ( React$2 && React ) || React$2;\n\n// TODO: decide on the top-level export form.\n// This is hacky but makes it work with both Rollup and Jest.\nvar react = React$3['default'] ? React$3['default'] : React$3;\n\nmodule.exports = react;\n })();\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react/cjs/react.development.js\n// module id = 109\n// module chunks = 0","/** @license React v16.2.0\n * react-dom.production.min.js\n *\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),l=require(\"fbjs/lib/ExecutionEnvironment\"),B=require(\"object-assign\"),C=require(\"fbjs/lib/emptyFunction\"),ba=require(\"fbjs/lib/EventListener\"),da=require(\"fbjs/lib/getActiveElement\"),ea=require(\"fbjs/lib/shallowEqual\"),fa=require(\"fbjs/lib/containsNode\"),ia=require(\"fbjs/lib/focusNode\"),D=require(\"fbjs/lib/emptyObject\");\nfunction E(a){for(var b=arguments.length-1,c=\"Minified React error #\"+a+\"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant\\x3d\"+a,d=0;d=g.hasBooleanValue+g.hasNumericValue+g.hasOverloadedBooleanValue?void 0:E(\"50\",f);e.hasOwnProperty(f)&&(g.attributeName=e[f]);d.hasOwnProperty(f)&&(g.attributeNamespace=d[f]);a.hasOwnProperty(f)&&(g.mutationMethod=a[f]);ua[f]=g}}},ua={};\nfunction va(a,b){if(oa.hasOwnProperty(a)||2this.eventPool.length&&this.eventPool.push(a)}function Jb(a){a.eventPool=[];a.getPooled=Kb;a.release=Lb}function Mb(a,b,c,d){return T.call(this,a,b,c,d)}T.augmentClass(Mb,{data:null});function Nb(a,b,c,d){return T.call(this,a,b,c,d)}T.augmentClass(Nb,{data:null});var Pb=[9,13,27,32],Vb=l.canUseDOM&&\"CompositionEvent\"in window,Wb=null;l.canUseDOM&&\"documentMode\"in document&&(Wb=document.documentMode);var Xb;\nif(Xb=l.canUseDOM&&\"TextEvent\"in window&&!Wb){var Yb=window.opera;Xb=!(\"object\"===typeof Yb&&\"function\"===typeof Yb.version&&12>=parseInt(Yb.version(),10))}\nvar Zb=Xb,$b=l.canUseDOM&&(!Vb||Wb&&8=Wb),ac=String.fromCharCode(32),bc={beforeInput:{phasedRegistrationNames:{bubbled:\"onBeforeInput\",captured:\"onBeforeInputCapture\"},dependencies:[\"topCompositionEnd\",\"topKeyPress\",\"topTextInput\",\"topPaste\"]},compositionEnd:{phasedRegistrationNames:{bubbled:\"onCompositionEnd\",captured:\"onCompositionEndCapture\"},dependencies:\"topBlur topCompositionEnd topKeyDown topKeyPress topKeyUp topMouseDown\".split(\" \")},compositionStart:{phasedRegistrationNames:{bubbled:\"onCompositionStart\",\ncaptured:\"onCompositionStartCapture\"},dependencies:\"topBlur topCompositionStart topKeyDown topKeyPress topKeyUp topMouseDown\".split(\" \")},compositionUpdate:{phasedRegistrationNames:{bubbled:\"onCompositionUpdate\",captured:\"onCompositionUpdateCapture\"},dependencies:\"topBlur topCompositionUpdate topKeyDown topKeyPress topKeyUp topMouseDown\".split(\" \")}},cc=!1;\nfunction dc(a,b){switch(a){case \"topKeyUp\":return-1!==Pb.indexOf(b.keyCode);case \"topKeyDown\":return 229!==b.keyCode;case \"topKeyPress\":case \"topMouseDown\":case \"topBlur\":return!0;default:return!1}}function ec(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var fc=!1;function gc(a,b){switch(a){case \"topCompositionEnd\":return ec(b);case \"topKeyPress\":if(32!==b.which)return null;cc=!0;return ac;case \"topTextInput\":return a=b.data,a===ac&&cc?null:a;default:return null}}\nfunction hc(a,b){if(fc)return\"topCompositionEnd\"===a||!Vb&&dc(a,b)?(a=Fb(),S._root=null,S._startText=null,S._fallbackText=null,fc=!1,a):null;switch(a){case \"topPaste\":return null;case \"topKeyPress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1qd.length&&qd.push(a)}}}\nvar xd=Object.freeze({get _enabled(){return td},get _handleTopLevel(){return sd},setHandleTopLevel:function(a){sd=a},setEnabled:ud,isEnabled:function(){return td},trapBubbledEvent:U,trapCapturedEvent:wd,dispatchEvent:vd});function yd(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c[\"Webkit\"+a]=\"webkit\"+b;c[\"Moz\"+a]=\"moz\"+b;c[\"ms\"+a]=\"MS\"+b;c[\"O\"+a]=\"o\"+b.toLowerCase();return c}\nvar zd={animationend:yd(\"Animation\",\"AnimationEnd\"),animationiteration:yd(\"Animation\",\"AnimationIteration\"),animationstart:yd(\"Animation\",\"AnimationStart\"),transitionend:yd(\"Transition\",\"TransitionEnd\")},Ad={},Bd={};l.canUseDOM&&(Bd=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete zd.animationend.animation,delete zd.animationiteration.animation,delete zd.animationstart.animation),\"TransitionEvent\"in window||delete zd.transitionend.transition);\nfunction Cd(a){if(Ad[a])return Ad[a];if(!zd[a])return a;var b=zd[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Bd)return Ad[a]=b[c];return\"\"}\nvar Dd={topAbort:\"abort\",topAnimationEnd:Cd(\"animationend\")||\"animationend\",topAnimationIteration:Cd(\"animationiteration\")||\"animationiteration\",topAnimationStart:Cd(\"animationstart\")||\"animationstart\",topBlur:\"blur\",topCancel:\"cancel\",topCanPlay:\"canplay\",topCanPlayThrough:\"canplaythrough\",topChange:\"change\",topClick:\"click\",topClose:\"close\",topCompositionEnd:\"compositionend\",topCompositionStart:\"compositionstart\",topCompositionUpdate:\"compositionupdate\",topContextMenu:\"contextmenu\",topCopy:\"copy\",\ntopCut:\"cut\",topDoubleClick:\"dblclick\",topDrag:\"drag\",topDragEnd:\"dragend\",topDragEnter:\"dragenter\",topDragExit:\"dragexit\",topDragLeave:\"dragleave\",topDragOver:\"dragover\",topDragStart:\"dragstart\",topDrop:\"drop\",topDurationChange:\"durationchange\",topEmptied:\"emptied\",topEncrypted:\"encrypted\",topEnded:\"ended\",topError:\"error\",topFocus:\"focus\",topInput:\"input\",topKeyDown:\"keydown\",topKeyPress:\"keypress\",topKeyUp:\"keyup\",topLoadedData:\"loadeddata\",topLoad:\"load\",topLoadedMetadata:\"loadedmetadata\",topLoadStart:\"loadstart\",\ntopMouseDown:\"mousedown\",topMouseMove:\"mousemove\",topMouseOut:\"mouseout\",topMouseOver:\"mouseover\",topMouseUp:\"mouseup\",topPaste:\"paste\",topPause:\"pause\",topPlay:\"play\",topPlaying:\"playing\",topProgress:\"progress\",topRateChange:\"ratechange\",topScroll:\"scroll\",topSeeked:\"seeked\",topSeeking:\"seeking\",topSelectionChange:\"selectionchange\",topStalled:\"stalled\",topSuspend:\"suspend\",topTextInput:\"textInput\",topTimeUpdate:\"timeupdate\",topToggle:\"toggle\",topTouchCancel:\"touchcancel\",topTouchEnd:\"touchend\",topTouchMove:\"touchmove\",\ntopTouchStart:\"touchstart\",topTransitionEnd:Cd(\"transitionend\")||\"transitionend\",topVolumeChange:\"volumechange\",topWaiting:\"waiting\",topWheel:\"wheel\"},Ed={},Fd=0,Gd=\"_reactListenersID\"+(\"\"+Math.random()).slice(2);function Hd(a){Object.prototype.hasOwnProperty.call(a,Gd)||(a[Gd]=Fd++,Ed[a[Gd]]={});return Ed[a[Gd]]}function Id(a){for(;a&&a.firstChild;)a=a.firstChild;return a}\nfunction Jd(a,b){var c=Id(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Id(c)}}function Kd(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&\"text\"===a.type||\"textarea\"===b||\"true\"===a.contentEditable)}\nvar Ld=l.canUseDOM&&\"documentMode\"in document&&11>=document.documentMode,Md={select:{phasedRegistrationNames:{bubbled:\"onSelect\",captured:\"onSelectCapture\"},dependencies:\"topBlur topContextMenu topFocus topKeyDown topKeyUp topMouseDown topMouseUp topSelectionChange\".split(\" \")}},Nd=null,Od=null,Pd=null,Qd=!1;\nfunction Rd(a,b){if(Qd||null==Nd||Nd!==da())return null;var c=Nd;\"selectionStart\"in c&&Kd(c)?c={start:c.selectionStart,end:c.selectionEnd}:window.getSelection?(c=window.getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset}):c=void 0;return Pd&&ea(Pd,c)?null:(Pd=c,a=T.getPooled(Md.select,Od,a,b),a.type=\"select\",a.target=Nd,Ab(a),a)}\nvar Sd={eventTypes:Md,extractEvents:function(a,b,c,d){var e=d.window===d?d.document:9===d.nodeType?d:d.ownerDocument,f;if(!(f=!e)){a:{e=Hd(e);f=Sa.onSelect;for(var g=0;ghe||(a.current=ge[he],ge[he]=null,he--)}function W(a,b){he++;ge[he]=a.current;a.current=b}new Set;var ie={current:D},X={current:!1},je=D;function ke(a){return le(a)?je:ie.current}\nfunction me(a,b){var c=a.type.contextTypes;if(!c)return D;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function le(a){return 2===a.tag&&null!=a.type.childContextTypes}function ne(a){le(a)&&(V(X,a),V(ie,a))}\nfunction oe(a,b,c){null!=ie.cursor?E(\"168\"):void 0;W(ie,b,a);W(X,c,a)}function pe(a,b){var c=a.stateNode,d=a.type.childContextTypes;if(\"function\"!==typeof c.getChildContext)return b;c=c.getChildContext();for(var e in c)e in d?void 0:E(\"108\",jd(a)||\"Unknown\",e);return B({},b,c)}function qe(a){if(!le(a))return!1;var b=a.stateNode;b=b&&b.__reactInternalMemoizedMergedChildContext||D;je=ie.current;W(ie,b,a);W(X,X.current,a);return!0}\nfunction re(a,b){var c=a.stateNode;c?void 0:E(\"169\");if(b){var d=pe(a,je);c.__reactInternalMemoizedMergedChildContext=d;V(X,a);V(ie,a);W(ie,d,a)}else V(X,a);W(X,b,a)}\nfunction Y(a,b,c){this.tag=a;this.key=b;this.stateNode=this.type=null;this.sibling=this.child=this[\"return\"]=null;this.index=0;this.memoizedState=this.updateQueue=this.memoizedProps=this.pendingProps=this.ref=null;this.internalContextTag=c;this.effectTag=0;this.lastEffect=this.firstEffect=this.nextEffect=null;this.expirationTime=0;this.alternate=null}\nfunction se(a,b,c){var d=a.alternate;null===d?(d=new Y(a.tag,a.key,a.internalContextTag),d.type=a.type,d.stateNode=a.stateNode,d.alternate=a,a.alternate=d):(d.effectTag=0,d.nextEffect=null,d.firstEffect=null,d.lastEffect=null);d.expirationTime=c;d.pendingProps=b;d.child=a.child;d.memoizedProps=a.memoizedProps;d.memoizedState=a.memoizedState;d.updateQueue=a.updateQueue;d.sibling=a.sibling;d.index=a.index;d.ref=a.ref;return d}\nfunction te(a,b,c){var d=void 0,e=a.type,f=a.key;\"function\"===typeof e?(d=e.prototype&&e.prototype.isReactComponent?new Y(2,f,b):new Y(0,f,b),d.type=e,d.pendingProps=a.props):\"string\"===typeof e?(d=new Y(5,f,b),d.type=e,d.pendingProps=a.props):\"object\"===typeof e&&null!==e&&\"number\"===typeof e.tag?(d=e,d.pendingProps=a.props):E(\"130\",null==e?e:typeof e,\"\");d.expirationTime=c;return d}function ue(a,b,c,d){b=new Y(10,d,b);b.pendingProps=a;b.expirationTime=c;return b}\nfunction ve(a,b,c){b=new Y(6,null,b);b.pendingProps=a;b.expirationTime=c;return b}function we(a,b,c){b=new Y(7,a.key,b);b.type=a.handler;b.pendingProps=a;b.expirationTime=c;return b}function xe(a,b,c){a=new Y(9,null,b);a.expirationTime=c;return a}function ye(a,b,c){b=new Y(4,a.key,b);b.pendingProps=a.children||[];b.expirationTime=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}var ze=null,Ae=null;\nfunction Be(a){return function(b){try{return a(b)}catch(c){}}}function Ce(a){if(\"undefined\"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var b=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(b.isDisabled||!b.supportsFiber)return!0;try{var c=b.inject(a);ze=Be(function(a){return b.onCommitFiberRoot(c,a)});Ae=Be(function(a){return b.onCommitFiberUnmount(c,a)})}catch(d){}return!0}function De(a){\"function\"===typeof ze&&ze(a)}function Ee(a){\"function\"===typeof Ae&&Ae(a)}\nfunction Fe(a){return{baseState:a,expirationTime:0,first:null,last:null,callbackList:null,hasForceUpdate:!1,isInitialized:!1}}function Ge(a,b){null===a.last?a.first=a.last=b:(a.last.next=b,a.last=b);if(0===a.expirationTime||a.expirationTime>b.expirationTime)a.expirationTime=b.expirationTime}\nfunction He(a,b){var c=a.alternate,d=a.updateQueue;null===d&&(d=a.updateQueue=Fe(null));null!==c?(a=c.updateQueue,null===a&&(a=c.updateQueue=Fe(null))):a=null;a=a!==d?a:null;null===a?Ge(d,b):null===d.last||null===a.last?(Ge(d,b),Ge(a,b)):(Ge(d,b),a.last=b)}function Ie(a,b,c,d){a=a.partialState;return\"function\"===typeof a?a.call(b,c,d):a}\nfunction Je(a,b,c,d,e,f){null!==a&&a.updateQueue===c&&(c=b.updateQueue={baseState:c.baseState,expirationTime:c.expirationTime,first:c.first,last:c.last,isInitialized:c.isInitialized,callbackList:null,hasForceUpdate:!1});c.expirationTime=0;c.isInitialized?a=c.baseState:(a=c.baseState=b.memoizedState,c.isInitialized=!0);for(var g=!0,h=c.first,k=!1;null!==h;){var q=h.expirationTime;if(q>f){var v=c.expirationTime;if(0===v||v>q)c.expirationTime=q;k||(k=!0,c.baseState=a)}else{k||(c.first=h.next,null===\nc.first&&(c.last=null));if(h.isReplace)a=Ie(h,d,a,e),g=!0;else if(q=Ie(h,d,a,e))a=g?B({},a,q):B(a,q),g=!1;h.isForced&&(c.hasForceUpdate=!0);null!==h.callback&&(q=c.callbackList,null===q&&(q=c.callbackList=[]),q.push(h))}h=h.next}null!==c.callbackList?b.effectTag|=32:null!==c.first||c.hasForceUpdate||(b.updateQueue=null);k||(c.baseState=a);return a}\nfunction Ke(a,b){var c=a.callbackList;if(null!==c)for(a.callbackList=null,a=0;aw?(k=n,n=null):k=n.sibling;var x=G(e,n,m[w],A);if(null===x){null===n&&(n=k);break}a&&n&&null===x.alternate&&b(e,n);g=f(x,g,w);null===r?h=x:r.sibling=x;r=x;n=k}if(w===m.length)return c(e,n),h;if(null===n){for(;ww?(k=n,n=null):k=n.sibling;var J=G(e,n,x.value,A);if(null===J){n||(n=k);break}a&&n&&null===J.alternate&&b(e,n);g=f(J,\ng,w);null===r?h=J:r.sibling=J;r=J;n=k}if(x.done)return c(e,n),h;if(null===n){for(;!x.done;w++,x=m.next())x=z(e,x.value,A),null!==x&&(g=f(x,g,w),null===r?h=x:r.sibling=x,r=x);return h}for(n=d(e,n);!x.done;w++,x=m.next())if(x=I(n,e,w,x.value,A),null!==x){if(a&&null!==x.alternate)n[\"delete\"](null===x.key?w:x.key);g=f(x,g,w);null===r?h=x:r.sibling=x;r=x}a&&n.forEach(function(a){return b(e,a)});return h}return function(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===Ve&&null===f.key&&(f=f.props.children);\nvar m=\"object\"===typeof f&&null!==f;if(m)switch(f.$$typeof){case Re:a:{var r=f.key;for(m=d;null!==m;){if(m.key===r)if(10===m.tag?f.type===Ve:m.type===f.type){c(a,m.sibling);d=e(m,f.type===Ve?f.props.children:f.props,h);d.ref=Ze(m,f);d[\"return\"]=a;a=d;break a}else{c(a,m);break}else b(a,m);m=m.sibling}f.type===Ve?(d=ue(f.props.children,a.internalContextTag,h,f.key),d[\"return\"]=a,a=d):(h=te(f,a.internalContextTag,h),h.ref=Ze(d,f),h[\"return\"]=a,a=h)}return g(a);case Se:a:{for(m=f.key;null!==d;){if(d.key===\nm)if(7===d.tag){c(a,d.sibling);d=e(d,f,h);d[\"return\"]=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=we(f,a.internalContextTag,h);d[\"return\"]=a;a=d}return g(a);case Te:a:{if(null!==d)if(9===d.tag){c(a,d.sibling);d=e(d,null,h);d.type=f.value;d[\"return\"]=a;a=d;break a}else c(a,d);d=xe(f,a.internalContextTag,h);d.type=f.value;d[\"return\"]=a;a=d}return g(a);case Ue:a:{for(m=f.key;null!==d;){if(d.key===m)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===\nf.implementation){c(a,d.sibling);d=e(d,f.children||[],h);d[\"return\"]=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=ye(f,a.internalContextTag,h);d[\"return\"]=a;a=d}return g(a)}if(\"string\"===typeof f||\"number\"===typeof f)return f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f,h)):(c(a,d),d=ve(f,a.internalContextTag,h)),d[\"return\"]=a,a=d,g(a);if(Ye(f))return L(a,d,f,h);if(Xe(f))return N(a,d,f,h);m&&$e(a,f);if(\"undefined\"===typeof f)switch(a.tag){case 2:case 1:h=a.type,E(\"152\",h.displayName||\nh.name||\"Component\")}return c(a,d)}}var bf=af(!0),cf=af(!1);\nfunction df(a,b,c,d,e){function f(a,b,c){var d=b.expirationTime;b.child=null===a?cf(b,null,c,d):bf(b,a.child,c,d)}function g(a,b){var c=b.ref;null===c||a&&a.ref===c||(b.effectTag|=128)}function h(a,b,c,d){g(a,b);if(!c)return d&&re(b,!1),q(a,b);c=b.stateNode;id.current=b;var e=c.render();b.effectTag|=1;f(a,b,e);b.memoizedState=c.state;b.memoizedProps=c.props;d&&re(b,!0);return b.child}function k(a){var b=a.stateNode;b.pendingContext?oe(a,b.pendingContext,b.pendingContext!==b.context):b.context&&oe(a,\nb.context,!1);I(a,b.containerInfo)}function q(a,b){null!==a&&b.child!==a.child?E(\"153\"):void 0;if(null!==b.child){a=b.child;var c=se(a,a.pendingProps,a.expirationTime);b.child=c;for(c[\"return\"]=b;null!==a.sibling;)a=a.sibling,c=c.sibling=se(a,a.pendingProps,a.expirationTime),c[\"return\"]=b;c.sibling=null}return b.child}function v(a,b){switch(b.tag){case 3:k(b);break;case 2:qe(b);break;case 4:I(b,b.stateNode.containerInfo)}return null}var y=a.shouldSetTextContent,u=a.useSyncScheduling,z=a.shouldDeprioritizeSubtree,\nG=b.pushHostContext,I=b.pushHostContainer,L=c.enterHydrationState,N=c.resetHydrationState,J=c.tryToClaimNextHydratableInstance;a=Le(d,e,function(a,b){a.memoizedProps=b},function(a,b){a.memoizedState=b});var w=a.adoptClassInstance,m=a.constructClassInstance,A=a.mountClassInstance,Ob=a.updateClassInstance;return{beginWork:function(a,b,c){if(0===b.expirationTime||b.expirationTime>c)return v(a,b);switch(b.tag){case 0:null!==a?E(\"155\"):void 0;var d=b.type,e=b.pendingProps,r=ke(b);r=me(b,r);d=d(e,r);b.effectTag|=\n1;\"object\"===typeof d&&null!==d&&\"function\"===typeof d.render?(b.tag=2,e=qe(b),w(b,d),A(b,c),b=h(a,b,!0,e)):(b.tag=1,f(a,b,d),b.memoizedProps=e,b=b.child);return b;case 1:a:{e=b.type;c=b.pendingProps;d=b.memoizedProps;if(X.current)null===c&&(c=d);else if(null===c||d===c){b=q(a,b);break a}d=ke(b);d=me(b,d);e=e(c,d);b.effectTag|=1;f(a,b,e);b.memoizedProps=c;b=b.child}return b;case 2:return e=qe(b),d=void 0,null===a?b.stateNode?E(\"153\"):(m(b,b.pendingProps),A(b,c),d=!0):d=Ob(a,b,c),h(a,b,d,e);case 3:return k(b),\ne=b.updateQueue,null!==e?(d=b.memoizedState,e=Je(a,b,e,null,null,c),d===e?(N(),b=q(a,b)):(d=e.element,r=b.stateNode,(null===a||null===a.child)&&r.hydrate&&L(b)?(b.effectTag|=2,b.child=cf(b,null,d,c)):(N(),f(a,b,d)),b.memoizedState=e,b=b.child)):(N(),b=q(a,b)),b;case 5:G(b);null===a&&J(b);e=b.type;var n=b.memoizedProps;d=b.pendingProps;null===d&&(d=n,null===d?E(\"154\"):void 0);r=null!==a?a.memoizedProps:null;X.current||null!==d&&n!==d?(n=d.children,y(e,d)?n=null:r&&y(e,r)&&(b.effectTag|=16),g(a,b),\n2147483647!==c&&!u&&z(e,d)?(b.expirationTime=2147483647,b=null):(f(a,b,n),b.memoizedProps=d,b=b.child)):b=q(a,b);return b;case 6:return null===a&&J(b),a=b.pendingProps,null===a&&(a=b.memoizedProps),b.memoizedProps=a,null;case 8:b.tag=7;case 7:e=b.pendingProps;if(X.current)null===e&&(e=a&&a.memoizedProps,null===e?E(\"154\"):void 0);else if(null===e||b.memoizedProps===e)e=b.memoizedProps;d=e.children;b.stateNode=null===a?cf(b,b.stateNode,d,c):bf(b,b.stateNode,d,c);b.memoizedProps=e;return b.stateNode;\ncase 9:return null;case 4:a:{I(b,b.stateNode.containerInfo);e=b.pendingProps;if(X.current)null===e&&(e=a&&a.memoizedProps,null==e?E(\"154\"):void 0);else if(null===e||b.memoizedProps===e){b=q(a,b);break a}null===a?b.child=bf(b,null,e,c):f(a,b,e);b.memoizedProps=e;b=b.child}return b;case 10:a:{c=b.pendingProps;if(X.current)null===c&&(c=b.memoizedProps);else if(null===c||b.memoizedProps===c){b=q(a,b);break a}f(a,b,c);b.memoizedProps=c;b=b.child}return b;default:E(\"156\")}},beginFailedWork:function(a,b,\nc){switch(b.tag){case 2:qe(b);break;case 3:k(b);break;default:E(\"157\")}b.effectTag|=64;null===a?b.child=null:b.child!==a.child&&(b.child=a.child);if(0===b.expirationTime||b.expirationTime>c)return v(a,b);b.firstEffect=null;b.lastEffect=null;b.child=null===a?cf(b,null,null,c):bf(b,a.child,null,c);2===b.tag&&(a=b.stateNode,b.memoizedProps=a.props,b.memoizedState=a.state);return b.child}}}\nfunction ef(a,b,c){function d(a){a.effectTag|=4}var e=a.createInstance,f=a.createTextInstance,g=a.appendInitialChild,h=a.finalizeInitialChildren,k=a.prepareUpdate,q=a.persistence,v=b.getRootHostContainer,y=b.popHostContext,u=b.getHostContext,z=b.popHostContainer,G=c.prepareToHydrateHostInstance,I=c.prepareToHydrateHostTextInstance,L=c.popHydrationState,N=void 0,J=void 0,w=void 0;a.mutation?(N=function(){},J=function(a,b,c){(b.updateQueue=c)&&d(b)},w=function(a,b,c,e){c!==e&&d(b)}):q?E(\"235\"):E(\"236\");\nreturn{completeWork:function(a,b,c){var m=b.pendingProps;if(null===m)m=b.memoizedProps;else if(2147483647!==b.expirationTime||2147483647===c)b.pendingProps=null;switch(b.tag){case 1:return null;case 2:return ne(b),null;case 3:z(b);V(X,b);V(ie,b);m=b.stateNode;m.pendingContext&&(m.context=m.pendingContext,m.pendingContext=null);if(null===a||null===a.child)L(b),b.effectTag&=-3;N(b);return null;case 5:y(b);c=v();var A=b.type;if(null!==a&&null!=b.stateNode){var p=a.memoizedProps,q=b.stateNode,x=u();q=\nk(q,A,p,m,c,x);J(a,b,q,A,p,m,c);a.ref!==b.ref&&(b.effectTag|=128)}else{if(!m)return null===b.stateNode?E(\"166\"):void 0,null;a=u();if(L(b))G(b,c,a)&&d(b);else{a=e(A,m,c,a,b);a:for(p=b.child;null!==p;){if(5===p.tag||6===p.tag)g(a,p.stateNode);else if(4!==p.tag&&null!==p.child){p.child[\"return\"]=p;p=p.child;continue}if(p===b)break;for(;null===p.sibling;){if(null===p[\"return\"]||p[\"return\"]===b)break a;p=p[\"return\"]}p.sibling[\"return\"]=p[\"return\"];p=p.sibling}h(a,A,m,c)&&d(b);b.stateNode=a}null!==b.ref&&\n(b.effectTag|=128)}return null;case 6:if(a&&null!=b.stateNode)w(a,b,a.memoizedProps,m);else{if(\"string\"!==typeof m)return null===b.stateNode?E(\"166\"):void 0,null;a=v();c=u();L(b)?I(b)&&d(b):b.stateNode=f(m,a,c,b)}return null;case 7:(m=b.memoizedProps)?void 0:E(\"165\");b.tag=8;A=[];a:for((p=b.stateNode)&&(p[\"return\"]=b);null!==p;){if(5===p.tag||6===p.tag||4===p.tag)E(\"247\");else if(9===p.tag)A.push(p.type);else if(null!==p.child){p.child[\"return\"]=p;p=p.child;continue}for(;null===p.sibling;){if(null===\np[\"return\"]||p[\"return\"]===b)break a;p=p[\"return\"]}p.sibling[\"return\"]=p[\"return\"];p=p.sibling}p=m.handler;m=p(m.props,A);b.child=bf(b,null!==a?a.child:null,m,c);return b.child;case 8:return b.tag=7,null;case 9:return null;case 10:return null;case 4:return z(b),N(b),null;case 0:E(\"167\");default:E(\"156\")}}}}\nfunction ff(a,b){function c(a){var c=a.ref;if(null!==c)try{c(null)}catch(A){b(a,A)}}function d(a){\"function\"===typeof Ee&&Ee(a);switch(a.tag){case 2:c(a);var d=a.stateNode;if(\"function\"===typeof d.componentWillUnmount)try{d.props=a.memoizedProps,d.state=a.memoizedState,d.componentWillUnmount()}catch(A){b(a,A)}break;case 5:c(a);break;case 7:e(a.stateNode);break;case 4:k&&g(a)}}function e(a){for(var b=a;;)if(d(b),null===b.child||k&&4===b.tag){if(b===a)break;for(;null===b.sibling;){if(null===b[\"return\"]||\nb[\"return\"]===a)return;b=b[\"return\"]}b.sibling[\"return\"]=b[\"return\"];b=b.sibling}else b.child[\"return\"]=b,b=b.child}function f(a){return 5===a.tag||3===a.tag||4===a.tag}function g(a){for(var b=a,c=!1,f=void 0,g=void 0;;){if(!c){c=b[\"return\"];a:for(;;){null===c?E(\"160\"):void 0;switch(c.tag){case 5:f=c.stateNode;g=!1;break a;case 3:f=c.stateNode.containerInfo;g=!0;break a;case 4:f=c.stateNode.containerInfo;g=!0;break a}c=c[\"return\"]}c=!0}if(5===b.tag||6===b.tag)e(b),g?J(f,b.stateNode):N(f,b.stateNode);\nelse if(4===b.tag?f=b.stateNode.containerInfo:d(b),null!==b.child){b.child[\"return\"]=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b[\"return\"]||b[\"return\"]===a)return;b=b[\"return\"];4===b.tag&&(c=!1)}b.sibling[\"return\"]=b[\"return\"];b=b.sibling}}var h=a.getPublicInstance,k=a.mutation;a=a.persistence;k||(a?E(\"235\"):E(\"236\"));var q=k.commitMount,v=k.commitUpdate,y=k.resetTextContent,u=k.commitTextUpdate,z=k.appendChild,G=k.appendChildToContainer,I=k.insertBefore,L=k.insertInContainerBefore,\nN=k.removeChild,J=k.removeChildFromContainer;return{commitResetTextContent:function(a){y(a.stateNode)},commitPlacement:function(a){a:{for(var b=a[\"return\"];null!==b;){if(f(b)){var c=b;break a}b=b[\"return\"]}E(\"160\");c=void 0}var d=b=void 0;switch(c.tag){case 5:b=c.stateNode;d=!1;break;case 3:b=c.stateNode.containerInfo;d=!0;break;case 4:b=c.stateNode.containerInfo;d=!0;break;default:E(\"161\")}c.effectTag&16&&(y(b),c.effectTag&=-17);a:b:for(c=a;;){for(;null===c.sibling;){if(null===c[\"return\"]||f(c[\"return\"])){c=\nnull;break a}c=c[\"return\"]}c.sibling[\"return\"]=c[\"return\"];for(c=c.sibling;5!==c.tag&&6!==c.tag;){if(c.effectTag&2)continue b;if(null===c.child||4===c.tag)continue b;else c.child[\"return\"]=c,c=c.child}if(!(c.effectTag&2)){c=c.stateNode;break a}}for(var e=a;;){if(5===e.tag||6===e.tag)c?d?L(b,e.stateNode,c):I(b,e.stateNode,c):d?G(b,e.stateNode):z(b,e.stateNode);else if(4!==e.tag&&null!==e.child){e.child[\"return\"]=e;e=e.child;continue}if(e===a)break;for(;null===e.sibling;){if(null===e[\"return\"]||e[\"return\"]===\na)return;e=e[\"return\"]}e.sibling[\"return\"]=e[\"return\"];e=e.sibling}},commitDeletion:function(a){g(a);a[\"return\"]=null;a.child=null;a.alternate&&(a.alternate.child=null,a.alternate[\"return\"]=null)},commitWork:function(a,b){switch(b.tag){case 2:break;case 5:var c=b.stateNode;if(null!=c){var d=b.memoizedProps;a=null!==a?a.memoizedProps:d;var e=b.type,f=b.updateQueue;b.updateQueue=null;null!==f&&v(c,f,e,a,d,b)}break;case 6:null===b.stateNode?E(\"162\"):void 0;c=b.memoizedProps;u(b.stateNode,null!==a?a.memoizedProps:\nc,c);break;case 3:break;default:E(\"163\")}},commitLifeCycles:function(a,b){switch(b.tag){case 2:var c=b.stateNode;if(b.effectTag&4)if(null===a)c.props=b.memoizedProps,c.state=b.memoizedState,c.componentDidMount();else{var d=a.memoizedProps;a=a.memoizedState;c.props=b.memoizedProps;c.state=b.memoizedState;c.componentDidUpdate(d,a)}b=b.updateQueue;null!==b&&Ke(b,c);break;case 3:c=b.updateQueue;null!==c&&Ke(c,null!==b.child?b.child.stateNode:null);break;case 5:c=b.stateNode;null===a&&b.effectTag&4&&q(c,\nb.type,b.memoizedProps,b);break;case 6:break;case 4:break;default:E(\"163\")}},commitAttachRef:function(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:b(h(c));break;default:b(c)}}},commitDetachRef:function(a){a=a.ref;null!==a&&a(null)}}}var gf={};\nfunction hf(a){function b(a){a===gf?E(\"174\"):void 0;return a}var c=a.getChildHostContext,d=a.getRootHostContext,e={current:gf},f={current:gf},g={current:gf};return{getHostContext:function(){return b(e.current)},getRootHostContainer:function(){return b(g.current)},popHostContainer:function(a){V(e,a);V(f,a);V(g,a)},popHostContext:function(a){f.current===a&&(V(e,a),V(f,a))},pushHostContainer:function(a,b){W(g,b,a);b=d(b);W(f,a,a);W(e,b,a)},pushHostContext:function(a){var d=b(g.current),h=b(e.current);\nd=c(h,a.type,d);h!==d&&(W(f,a,a),W(e,d,a))},resetHostContainer:function(){e.current=gf;g.current=gf}}}\nfunction jf(a){function b(a,b){var c=new Y(5,null,0);c.type=\"DELETED\";c.stateNode=b;c[\"return\"]=a;c.effectTag=8;null!==a.lastEffect?(a.lastEffect.nextEffect=c,a.lastEffect=c):a.firstEffect=a.lastEffect=c}function c(a,b){switch(a.tag){case 5:return b=f(b,a.type,a.pendingProps),null!==b?(a.stateNode=b,!0):!1;case 6:return b=g(b,a.pendingProps),null!==b?(a.stateNode=b,!0):!1;default:return!1}}function d(a){for(a=a[\"return\"];null!==a&&5!==a.tag&&3!==a.tag;)a=a[\"return\"];y=a}var e=a.shouldSetTextContent;\na=a.hydration;if(!a)return{enterHydrationState:function(){return!1},resetHydrationState:function(){},tryToClaimNextHydratableInstance:function(){},prepareToHydrateHostInstance:function(){E(\"175\")},prepareToHydrateHostTextInstance:function(){E(\"176\")},popHydrationState:function(){return!1}};var f=a.canHydrateInstance,g=a.canHydrateTextInstance,h=a.getNextHydratableSibling,k=a.getFirstHydratableChild,q=a.hydrateInstance,v=a.hydrateTextInstance,y=null,u=null,z=!1;return{enterHydrationState:function(a){u=\nk(a.stateNode.containerInfo);y=a;return z=!0},resetHydrationState:function(){u=y=null;z=!1},tryToClaimNextHydratableInstance:function(a){if(z){var d=u;if(d){if(!c(a,d)){d=h(d);if(!d||!c(a,d)){a.effectTag|=2;z=!1;y=a;return}b(y,u)}y=a;u=k(d)}else a.effectTag|=2,z=!1,y=a}},prepareToHydrateHostInstance:function(a,b,c){b=q(a.stateNode,a.type,a.memoizedProps,b,c,a);a.updateQueue=b;return null!==b?!0:!1},prepareToHydrateHostTextInstance:function(a){return v(a.stateNode,a.memoizedProps,a)},popHydrationState:function(a){if(a!==\ny)return!1;if(!z)return d(a),z=!0,!1;var c=a.type;if(5!==a.tag||\"head\"!==c&&\"body\"!==c&&!e(c,a.memoizedProps))for(c=u;c;)b(a,c),c=h(c);d(a);u=y?h(a.stateNode):null;return!0}}}\nfunction kf(a){function b(a){Qb=ja=!0;var b=a.stateNode;b.current===a?E(\"177\"):void 0;b.isReadyForCommit=!1;id.current=null;if(1g.expirationTime)&&(f=g.expirationTime),g=g.sibling;e.expirationTime=f}if(null!==b)return b;null!==c&&(null===c.firstEffect&&(c.firstEffect=a.firstEffect),null!==a.lastEffect&&(null!==c.lastEffect&&(c.lastEffect.nextEffect=a.firstEffect),c.lastEffect=a.lastEffect),1a))if(H<=Uc)for(;null!==F;)F=k(F)?e(F):d(F);else for(;null!==F&&!A();)F=k(F)?e(F):d(F)}else if(!(0===H||H>a))if(H<=Uc)for(;null!==F;)F=d(F);else for(;null!==F&&!A();)F=d(F)}function g(a,b){ja?E(\"243\"):void 0;ja=!0;a.isReadyForCommit=\n!1;if(a!==ra||b!==H||null===F){for(;-1b)a.expirationTime=b;null!==a.alternate&&(0===a.alternate.expirationTime||a.alternate.expirationTime>b)&&(a.alternate.expirationTime=b);if(null===a[\"return\"])if(3===a.tag){var c=a.stateNode;!ja&&c===ra&&bIg&&E(\"185\");if(null===d.nextScheduledRoot)d.remainingExpirationTime=e,null===O?(sa=O=d,d.nextScheduledRoot=d):(O=O.nextScheduledRoot=d,O.nextScheduledRoot=sa);else{var f=d.remainingExpirationTime;if(0===f||eTb)return;Jg(Xc)}var b=Wc()-Pe;Tb=a;Xc=Kg(J,{timeout:10*(a-2)-b})}function N(){var a=0,b=null;if(null!==O)for(var c=O,d=sa;null!==d;){var e=d.remainingExpirationTime;if(0===e){null===c||null===O?E(\"244\"):void 0;if(d===d.nextScheduledRoot){sa=O=d.nextScheduledRoot=null;break}else if(d===sa)sa=e=d.nextScheduledRoot,\nO.nextScheduledRoot=e,d.nextScheduledRoot=null;else if(d===O){O=c;O.nextScheduledRoot=sa;d.nextScheduledRoot=null;break}else c.nextScheduledRoot=d.nextScheduledRoot,d.nextScheduledRoot=null;d=c.nextScheduledRoot}else{if(0===a||eLg?!1:Yc=!0}function Ob(a){null===ma?E(\"246\"):\nvoid 0;ma.remainingExpirationTime=0;Ub||(Ub=!0,Zc=a)}var r=hf(a),n=jf(a),p=r.popHostContainer,qg=r.popHostContext,x=r.resetHostContainer,Me=df(a,r,n,u,y),rg=Me.beginWork,Gg=Me.beginFailedWork,Fg=ef(a,r,n).completeWork;r=ff(a,h);var zg=r.commitResetTextContent,Ne=r.commitPlacement,Bg=r.commitDeletion,Oe=r.commitWork,Dg=r.commitLifeCycles,Eg=r.commitAttachRef,Ag=r.commitDetachRef,Wc=a.now,Kg=a.scheduleDeferredCallback,Jg=a.cancelDeferredCallback,Hg=a.useSyncScheduling,yg=a.prepareForCommit,Cg=a.resetAfterCommit,\nPe=Wc(),Uc=2,ka=0,ja=!1,F=null,ra=null,H=0,t=null,R=null,qa=null,ha=null,ca=null,eb=!1,Qb=!1,Sc=!1,sa=null,O=null,Tb=0,Xc=-1,Fa=!1,ma=null,na=0,Yc=!1,Ub=!1,Zc=null,fb=null,la=!1,Sb=!1,Ig=1E3,Rb=0,Lg=1;return{computeAsyncExpiration:v,computeExpirationForFiber:y,scheduleWork:u,batchedUpdates:function(a,b){var c=la;la=!0;try{return a(b)}finally{(la=c)||Fa||w(1,null)}},unbatchedUpdates:function(a){if(la&&!Sb){Sb=!0;try{return a()}finally{Sb=!1}}return a()},flushSync:function(a){var b=la;la=!0;try{a:{var c=\nka;ka=1;try{var d=a();break a}finally{ka=c}d=void 0}return d}finally{la=b,Fa?E(\"187\"):void 0,w(1,null)}},deferredUpdates:function(a){var b=ka;ka=v();try{return a()}finally{ka=b}}}}\nfunction lf(a){function b(a){a=od(a);return null===a?null:a.stateNode}var c=a.getPublicInstance;a=kf(a);var d=a.computeAsyncExpiration,e=a.computeExpirationForFiber,f=a.scheduleWork;return{createContainer:function(a,b){var c=new Y(3,null,0);a={current:c,containerInfo:a,pendingChildren:null,remainingExpirationTime:0,isReadyForCommit:!1,finishedWork:null,context:null,pendingContext:null,hydrate:b,nextScheduledRoot:null};return c.stateNode=a},updateContainer:function(a,b,c,q){var g=b.current;if(c){c=\nc._reactInternalFiber;var h;b:{2===kd(c)&&2===c.tag?void 0:E(\"170\");for(h=c;3!==h.tag;){if(le(h)){h=h.stateNode.__reactInternalMemoizedMergedChildContext;break b}(h=h[\"return\"])?void 0:E(\"171\")}h=h.stateNode.context}c=le(c)?pe(c,h):h}else c=D;null===b.context?b.context=c:b.pendingContext=c;b=q;b=void 0===b?null:b;q=null!=a&&null!=a.type&&null!=a.type.prototype&&!0===a.type.prototype.unstable_isAsyncReactComponent?d():e(g);He(g,{expirationTime:q,partialState:{element:a},callback:b,isReplace:!1,isForced:!1,\nnextCallback:null,next:null});f(g,q)},batchedUpdates:a.batchedUpdates,unbatchedUpdates:a.unbatchedUpdates,deferredUpdates:a.deferredUpdates,flushSync:a.flushSync,getPublicRootInstance:function(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return c(a.child.stateNode);default:return a.child.stateNode}},findHostInstance:b,findHostInstanceWithNoPortals:function(a){a=pd(a);return null===a?null:a.stateNode},injectIntoDevTools:function(a){var c=a.findFiberByHostInstance;return Ce(B({},\na,{findHostInstanceByFiber:function(a){return b(a)},findFiberByHostInstance:function(a){return c?c(a):null}}))}}}var mf=Object.freeze({default:lf}),nf=mf&&lf||mf,of=nf[\"default\"]?nf[\"default\"]:nf;function pf(a,b,c){var d=3=yf-a)if(-1!==wf&&wf<=\na)Bf.didTimeout=!0;else{xf||(xf=!0,requestAnimationFrame(Df));return}else Bf.didTimeout=!1;wf=-1;a=uf;uf=null;null!==a&&a(Bf)}},!1);var Df=function(a){xf=!1;var b=a-yf+Af;bb&&(b=8),Af=bc||d.hasOverloadedBooleanValue&&!1===c?Jf(a,b):d.mustUseProperty?a[d.propertyName]=c:(b=d.attributeName,(e=d.attributeNamespace)?a.setAttributeNS(e,b,\"\"+c):d.hasBooleanValue||d.hasOverloadedBooleanValue&&!0===c?a.setAttribute(b,\"\"):a.setAttribute(b,\"\"+c))}else Kf(a,b,va(b,c)?c:null)}\nfunction Kf(a,b,c){Hf(b)&&(null==c?a.removeAttribute(b):a.setAttribute(b,\"\"+c))}function Jf(a,b){var c=wa(b);c?(b=c.mutationMethod)?b(a,void 0):c.mustUseProperty?a[c.propertyName]=c.hasBooleanValue?!1:\"\":a.removeAttribute(c.attributeName):a.removeAttribute(b)}\nfunction Lf(a,b){var c=b.value,d=b.checked;return B({type:void 0,step:void 0,min:void 0,max:void 0},b,{defaultChecked:void 0,defaultValue:void 0,value:null!=c?c:a._wrapperState.initialValue,checked:null!=d?d:a._wrapperState.initialChecked})}function Mf(a,b){var c=b.defaultValue;a._wrapperState={initialChecked:null!=b.checked?b.checked:b.defaultChecked,initialValue:null!=b.value?b.value:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}\nfunction Nf(a,b){b=b.checked;null!=b&&If(a,\"checked\",b)}function Of(a,b){Nf(a,b);var c=b.value;if(null!=c)if(0===c&&\"\"===a.value)a.value=\"0\";else if(\"number\"===b.type){if(b=parseFloat(a.value)||0,c!=b||c==b&&a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else null==b.value&&null!=b.defaultValue&&a.defaultValue!==\"\"+b.defaultValue&&(a.defaultValue=\"\"+b.defaultValue),null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction Pf(a,b){switch(b.type){case \"submit\":case \"reset\":break;case \"color\":case \"date\":case \"datetime\":case \"datetime-local\":case \"month\":case \"time\":case \"week\":a.value=\"\";a.value=a.defaultValue;break;default:a.value=a.value}b=a.name;\"\"!==b&&(a.name=\"\");a.defaultChecked=!a.defaultChecked;a.defaultChecked=!a.defaultChecked;\"\"!==b&&(a.name=b)}function Qf(a){var b=\"\";aa.Children.forEach(a,function(a){null==a||\"string\"!==typeof a&&\"number\"!==typeof a||(b+=a)});return b}\nfunction Rf(a,b){a=B({children:void 0},b);if(b=Qf(b.children))a.children=b;return a}function Sf(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e=b.length?void 0:E(\"93\"),b=b[0]),c=\"\"+b),null==c&&(c=\"\"));a._wrapperState={initialValue:\"\"+c}}\nfunction Wf(a,b){var c=b.value;null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&(a.defaultValue=c));null!=b.defaultValue&&(a.defaultValue=b.defaultValue)}function Xf(a){var b=a.textContent;b===a._wrapperState.initialValue&&(a.value=b)}var Yf={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction Zf(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function $f(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?Zf(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar ag=void 0,bg=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==Yf.svg||\"innerHTML\"in a)a.innerHTML=b;else{ag=ag||document.createElement(\"div\");ag.innerHTML=\"\\x3csvg\\x3e\"+b+\"\\x3c/svg\\x3e\";for(b=ag.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction cg(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar dg={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,\nstopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},eg=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(dg).forEach(function(a){eg.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);dg[b]=dg[a]})});\nfunction fg(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\");var e=c;var f=b[c];e=null==f||\"boolean\"===typeof f||\"\"===f?\"\":d||\"number\"!==typeof f||0===f||dg.hasOwnProperty(e)&&dg[e]?(\"\"+f).trim():f+\"px\";\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var gg=B({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction hg(a,b,c){b&&(gg[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML?E(\"137\",a,c()):void 0),null!=b.dangerouslySetInnerHTML&&(null!=b.children?E(\"60\"):void 0,\"object\"===typeof b.dangerouslySetInnerHTML&&\"__html\"in b.dangerouslySetInnerHTML?void 0:E(\"61\")),null!=b.style&&\"object\"!==typeof b.style?E(\"62\",c()):void 0)}\nfunction ig(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var jg=Yf.html,kg=C.thatReturns(\"\");\nfunction lg(a,b){a=9===a.nodeType||11===a.nodeType?a:a.ownerDocument;var c=Hd(a);b=Sa[b];for(var d=0;d\nd&&(e=d,d=a,a=e);e=Jd(c,a);var f=Jd(c,d);if(e&&f&&(1!==b.rangeCount||b.anchorNode!==e.node||b.anchorOffset!==e.offset||b.focusNode!==f.node||b.focusOffset!==f.offset)){var g=document.createRange();g.setStart(e.node,e.offset);b.removeAllRanges();a>d?(b.addRange(g),b.extend(f.node,f.offset)):(g.setEnd(f.node,f.offset),b.addRange(g))}}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});ia(c);for(c=0;c 2 && (name[0] === 'o' || name[0] === 'O') && (name[1] === 'n' || name[1] === 'N')) {\n return false;\n }\n if (value === null) {\n return true;\n }\n switch (typeof value) {\n case 'boolean':\n return shouldAttributeAcceptBooleanValue(name);\n case 'undefined':\n case 'number':\n case 'string':\n case 'object':\n return true;\n default:\n // function, symbol\n return false;\n }\n}\n\nfunction getPropertyInfo(name) {\n return properties.hasOwnProperty(name) ? properties[name] : null;\n}\n\nfunction shouldAttributeAcceptBooleanValue(name) {\n if (isReservedProp(name)) {\n return true;\n }\n var propertyInfo = getPropertyInfo(name);\n if (propertyInfo) {\n return propertyInfo.hasBooleanValue || propertyInfo.hasStringBooleanValue || propertyInfo.hasOverloadedBooleanValue;\n }\n var prefix = name.toLowerCase().slice(0, 5);\n return prefix === 'data-' || prefix === 'aria-';\n}\n\n/**\n * Checks to see if a property name is within the list of properties\n * reserved for internal React operations. These properties should\n * not be set on an HTML element.\n *\n * @private\n * @param {string} name\n * @return {boolean} If the name is within reserved props\n */\nfunction isReservedProp(name) {\n return RESERVED_PROPS.hasOwnProperty(name);\n}\n\nvar injection = DOMPropertyInjection;\n\nvar MUST_USE_PROPERTY = injection.MUST_USE_PROPERTY;\nvar HAS_BOOLEAN_VALUE = injection.HAS_BOOLEAN_VALUE;\nvar HAS_NUMERIC_VALUE = injection.HAS_NUMERIC_VALUE;\nvar HAS_POSITIVE_NUMERIC_VALUE = injection.HAS_POSITIVE_NUMERIC_VALUE;\nvar HAS_OVERLOADED_BOOLEAN_VALUE = injection.HAS_OVERLOADED_BOOLEAN_VALUE;\nvar HAS_STRING_BOOLEAN_VALUE = injection.HAS_STRING_BOOLEAN_VALUE;\n\nvar HTMLDOMPropertyConfig = {\n // When adding attributes to this list, be sure to also add them to\n // the `possibleStandardNames` module to ensure casing and incorrect\n // name warnings.\n Properties: {\n allowFullScreen: HAS_BOOLEAN_VALUE,\n // specifies target context for links with `preload` type\n async: HAS_BOOLEAN_VALUE,\n // Note: there is a special case that prevents it from being written to the DOM\n // on the client side because the browsers are inconsistent. Instead we call focus().\n autoFocus: HAS_BOOLEAN_VALUE,\n autoPlay: HAS_BOOLEAN_VALUE,\n capture: HAS_OVERLOADED_BOOLEAN_VALUE,\n checked: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n cols: HAS_POSITIVE_NUMERIC_VALUE,\n contentEditable: HAS_STRING_BOOLEAN_VALUE,\n controls: HAS_BOOLEAN_VALUE,\n 'default': HAS_BOOLEAN_VALUE,\n defer: HAS_BOOLEAN_VALUE,\n disabled: HAS_BOOLEAN_VALUE,\n download: HAS_OVERLOADED_BOOLEAN_VALUE,\n draggable: HAS_STRING_BOOLEAN_VALUE,\n formNoValidate: HAS_BOOLEAN_VALUE,\n hidden: HAS_BOOLEAN_VALUE,\n loop: HAS_BOOLEAN_VALUE,\n // Caution; `option.selected` is not updated if `select.multiple` is\n // disabled with `removeAttribute`.\n multiple: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n muted: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n noValidate: HAS_BOOLEAN_VALUE,\n open: HAS_BOOLEAN_VALUE,\n playsInline: HAS_BOOLEAN_VALUE,\n readOnly: HAS_BOOLEAN_VALUE,\n required: HAS_BOOLEAN_VALUE,\n reversed: HAS_BOOLEAN_VALUE,\n rows: HAS_POSITIVE_NUMERIC_VALUE,\n rowSpan: HAS_NUMERIC_VALUE,\n scoped: HAS_BOOLEAN_VALUE,\n seamless: HAS_BOOLEAN_VALUE,\n selected: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n size: HAS_POSITIVE_NUMERIC_VALUE,\n start: HAS_NUMERIC_VALUE,\n // support for projecting regular DOM Elements via V1 named slots ( shadow dom )\n span: HAS_POSITIVE_NUMERIC_VALUE,\n spellCheck: HAS_STRING_BOOLEAN_VALUE,\n // Style must be explicitly set in the attribute list. React components\n // expect a style object\n style: 0,\n // Keep it in the whitelist because it is case-sensitive for SVG.\n tabIndex: 0,\n // itemScope is for for Microdata support.\n // See http://schema.org/docs/gs.html\n itemScope: HAS_BOOLEAN_VALUE,\n // These attributes must stay in the white-list because they have\n // different attribute names (see DOMAttributeNames below)\n acceptCharset: 0,\n className: 0,\n htmlFor: 0,\n httpEquiv: 0,\n // Attributes with mutation methods must be specified in the whitelist\n // Set the string boolean flag to allow the behavior\n value: HAS_STRING_BOOLEAN_VALUE\n },\n DOMAttributeNames: {\n acceptCharset: 'accept-charset',\n className: 'class',\n htmlFor: 'for',\n httpEquiv: 'http-equiv'\n },\n DOMMutationMethods: {\n value: function (node, value) {\n if (value == null) {\n return node.removeAttribute('value');\n }\n\n // Number inputs get special treatment due to some edge cases in\n // Chrome. Let everything else assign the value attribute as normal.\n // https://github.com/facebook/react/issues/7253#issuecomment-236074326\n if (node.type !== 'number' || node.hasAttribute('value') === false) {\n node.setAttribute('value', '' + value);\n } else if (node.validity && !node.validity.badInput && node.ownerDocument.activeElement !== node) {\n // Don't assign an attribute if validation reports bad\n // input. Chrome will clear the value. Additionally, don't\n // operate on inputs that have focus, otherwise Chrome might\n // strip off trailing decimal places and cause the user's\n // cursor position to jump to the beginning of the input.\n //\n // In ReactDOMInput, we have an onBlur event that will trigger\n // this function again when focus is lost.\n node.setAttribute('value', '' + value);\n }\n }\n }\n};\n\nvar HAS_STRING_BOOLEAN_VALUE$1 = injection.HAS_STRING_BOOLEAN_VALUE;\n\n\nvar NS = {\n xlink: 'http://www.w3.org/1999/xlink',\n xml: 'http://www.w3.org/XML/1998/namespace'\n};\n\n/**\n * This is a list of all SVG attributes that need special casing,\n * namespacing, or boolean value assignment.\n *\n * When adding attributes to this list, be sure to also add them to\n * the `possibleStandardNames` module to ensure casing and incorrect\n * name warnings.\n *\n * SVG Attributes List:\n * https://www.w3.org/TR/SVG/attindex.html\n * SMIL Spec:\n * https://www.w3.org/TR/smil\n */\nvar ATTRS = ['accent-height', 'alignment-baseline', 'arabic-form', 'baseline-shift', 'cap-height', 'clip-path', 'clip-rule', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'dominant-baseline', 'enable-background', 'fill-opacity', 'fill-rule', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'glyph-name', 'glyph-orientation-horizontal', 'glyph-orientation-vertical', 'horiz-adv-x', 'horiz-origin-x', 'image-rendering', 'letter-spacing', 'lighting-color', 'marker-end', 'marker-mid', 'marker-start', 'overline-position', 'overline-thickness', 'paint-order', 'panose-1', 'pointer-events', 'rendering-intent', 'shape-rendering', 'stop-color', 'stop-opacity', 'strikethrough-position', 'strikethrough-thickness', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'text-anchor', 'text-decoration', 'text-rendering', 'underline-position', 'underline-thickness', 'unicode-bidi', 'unicode-range', 'units-per-em', 'v-alphabetic', 'v-hanging', 'v-ideographic', 'v-mathematical', 'vector-effect', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'word-spacing', 'writing-mode', 'x-height', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xmlns:xlink', 'xml:lang', 'xml:space'];\n\nvar SVGDOMPropertyConfig = {\n Properties: {\n autoReverse: HAS_STRING_BOOLEAN_VALUE$1,\n externalResourcesRequired: HAS_STRING_BOOLEAN_VALUE$1,\n preserveAlpha: HAS_STRING_BOOLEAN_VALUE$1\n },\n DOMAttributeNames: {\n autoReverse: 'autoReverse',\n externalResourcesRequired: 'externalResourcesRequired',\n preserveAlpha: 'preserveAlpha'\n },\n DOMAttributeNamespaces: {\n xlinkActuate: NS.xlink,\n xlinkArcrole: NS.xlink,\n xlinkHref: NS.xlink,\n xlinkRole: NS.xlink,\n xlinkShow: NS.xlink,\n xlinkTitle: NS.xlink,\n xlinkType: NS.xlink,\n xmlBase: NS.xml,\n xmlLang: NS.xml,\n xmlSpace: NS.xml\n }\n};\n\nvar CAMELIZE = /[\\-\\:]([a-z])/g;\nvar capitalize = function (token) {\n return token[1].toUpperCase();\n};\n\nATTRS.forEach(function (original) {\n var reactName = original.replace(CAMELIZE, capitalize);\n\n SVGDOMPropertyConfig.Properties[reactName] = 0;\n SVGDOMPropertyConfig.DOMAttributeNames[reactName] = original;\n});\n\ninjection.injectDOMPropertyConfig(HTMLDOMPropertyConfig);\ninjection.injectDOMPropertyConfig(SVGDOMPropertyConfig);\n\nvar ReactErrorUtils = {\n // Used by Fiber to simulate a try-catch.\n _caughtError: null,\n _hasCaughtError: false,\n\n // Used by event system to capture/rethrow the first error.\n _rethrowError: null,\n _hasRethrowError: false,\n\n injection: {\n injectErrorUtils: function (injectedErrorUtils) {\n !(typeof injectedErrorUtils.invokeGuardedCallback === 'function') ? invariant(false, 'Injected invokeGuardedCallback() must be a function.') : void 0;\n invokeGuardedCallback = injectedErrorUtils.invokeGuardedCallback;\n }\n },\n\n /**\n * Call a function while guarding against errors that happens within it.\n * Returns an error if it throws, otherwise null.\n *\n * In production, this is implemented using a try-catch. The reason we don't\n * use a try-catch directly is so that we can swap out a different\n * implementation in DEV mode.\n *\n * @param {String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} context The context to use when calling the function\n * @param {...*} args Arguments for function\n */\n invokeGuardedCallback: function (name, func, context, a, b, c, d, e, f) {\n invokeGuardedCallback.apply(ReactErrorUtils, arguments);\n },\n\n /**\n * Same as invokeGuardedCallback, but instead of returning an error, it stores\n * it in a global so it can be rethrown by `rethrowCaughtError` later.\n * TODO: See if _caughtError and _rethrowError can be unified.\n *\n * @param {String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} context The context to use when calling the function\n * @param {...*} args Arguments for function\n */\n invokeGuardedCallbackAndCatchFirstError: function (name, func, context, a, b, c, d, e, f) {\n ReactErrorUtils.invokeGuardedCallback.apply(this, arguments);\n if (ReactErrorUtils.hasCaughtError()) {\n var error = ReactErrorUtils.clearCaughtError();\n if (!ReactErrorUtils._hasRethrowError) {\n ReactErrorUtils._hasRethrowError = true;\n ReactErrorUtils._rethrowError = error;\n }\n }\n },\n\n /**\n * During execution of guarded functions we will capture the first error which\n * we will rethrow to be handled by the top level error handler.\n */\n rethrowCaughtError: function () {\n return rethrowCaughtError.apply(ReactErrorUtils, arguments);\n },\n\n hasCaughtError: function () {\n return ReactErrorUtils._hasCaughtError;\n },\n\n clearCaughtError: function () {\n if (ReactErrorUtils._hasCaughtError) {\n var error = ReactErrorUtils._caughtError;\n ReactErrorUtils._caughtError = null;\n ReactErrorUtils._hasCaughtError = false;\n return error;\n } else {\n invariant(false, 'clearCaughtError was called but no error was captured. This error is likely caused by a bug in React. Please file an issue.');\n }\n }\n};\n\nvar invokeGuardedCallback = function (name, func, context, a, b, c, d, e, f) {\n ReactErrorUtils._hasCaughtError = false;\n ReactErrorUtils._caughtError = null;\n var funcArgs = Array.prototype.slice.call(arguments, 3);\n try {\n func.apply(context, funcArgs);\n } catch (error) {\n ReactErrorUtils._caughtError = error;\n ReactErrorUtils._hasCaughtError = true;\n }\n};\n\n{\n // In DEV mode, we swap out invokeGuardedCallback for a special version\n // that plays more nicely with the browser's DevTools. The idea is to preserve\n // \"Pause on exceptions\" behavior. Because React wraps all user-provided\n // functions in invokeGuardedCallback, and the production version of\n // invokeGuardedCallback uses a try-catch, all user exceptions are treated\n // like caught exceptions, and the DevTools won't pause unless the developer\n // takes the extra step of enabling pause on caught exceptions. This is\n // untintuitive, though, because even though React has caught the error, from\n // the developer's perspective, the error is uncaught.\n //\n // To preserve the expected \"Pause on exceptions\" behavior, we don't use a\n // try-catch in DEV. Instead, we synchronously dispatch a fake event to a fake\n // DOM node, and call the user-provided callback from inside an event handler\n // for that fake event. If the callback throws, the error is \"captured\" using\n // a global event handler. But because the error happens in a different\n // event loop context, it does not interrupt the normal program flow.\n // Effectively, this gives us try-catch behavior without actually using\n // try-catch. Neat!\n\n // Check that the browser supports the APIs we need to implement our special\n // DEV version of invokeGuardedCallback\n if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') {\n var fakeNode = document.createElement('react');\n\n var invokeGuardedCallbackDev = function (name, func, context, a, b, c, d, e, f) {\n // Keeps track of whether the user-provided callback threw an error. We\n // set this to true at the beginning, then set it to false right after\n // calling the function. If the function errors, `didError` will never be\n // set to false. This strategy works even if the browser is flaky and\n // fails to call our global error handler, because it doesn't rely on\n // the error event at all.\n var didError = true;\n\n // Create an event handler for our fake event. We will synchronously\n // dispatch our fake event using `dispatchEvent`. Inside the handler, we\n // call the user-provided callback.\n var funcArgs = Array.prototype.slice.call(arguments, 3);\n function callCallback() {\n // We immediately remove the callback from event listeners so that\n // nested `invokeGuardedCallback` calls do not clash. Otherwise, a\n // nested call would trigger the fake event handlers of any call higher\n // in the stack.\n fakeNode.removeEventListener(evtType, callCallback, false);\n func.apply(context, funcArgs);\n didError = false;\n }\n\n // Create a global error event handler. We use this to capture the value\n // that was thrown. It's possible that this error handler will fire more\n // than once; for example, if non-React code also calls `dispatchEvent`\n // and a handler for that event throws. We should be resilient to most of\n // those cases. Even if our error event handler fires more than once, the\n // last error event is always used. If the callback actually does error,\n // we know that the last error event is the correct one, because it's not\n // possible for anything else to have happened in between our callback\n // erroring and the code that follows the `dispatchEvent` call below. If\n // the callback doesn't error, but the error event was fired, we know to\n // ignore it because `didError` will be false, as described above.\n var error = void 0;\n // Use this to track whether the error event is ever called.\n var didSetError = false;\n var isCrossOriginError = false;\n\n function onError(event) {\n error = event.error;\n didSetError = true;\n if (error === null && event.colno === 0 && event.lineno === 0) {\n isCrossOriginError = true;\n }\n }\n\n // Create a fake event type.\n var evtType = 'react-' + (name ? name : 'invokeguardedcallback');\n\n // Attach our event handlers\n window.addEventListener('error', onError);\n fakeNode.addEventListener(evtType, callCallback, false);\n\n // Synchronously dispatch our fake event. If the user-provided function\n // errors, it will trigger our global error handler.\n var evt = document.createEvent('Event');\n evt.initEvent(evtType, false, false);\n fakeNode.dispatchEvent(evt);\n\n if (didError) {\n if (!didSetError) {\n // The callback errored, but the error event never fired.\n 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.');\n } else if (isCrossOriginError) {\n error = new Error(\"A cross-origin error was thrown. React doesn't have access to \" + 'the actual error object in development. ' + 'See https://fb.me/react-crossorigin-error for more information.');\n }\n ReactErrorUtils._hasCaughtError = true;\n ReactErrorUtils._caughtError = error;\n } else {\n ReactErrorUtils._hasCaughtError = false;\n ReactErrorUtils._caughtError = null;\n }\n\n // Remove our event listeners\n window.removeEventListener('error', onError);\n };\n\n invokeGuardedCallback = invokeGuardedCallbackDev;\n }\n}\n\nvar rethrowCaughtError = function () {\n if (ReactErrorUtils._hasRethrowError) {\n var error = ReactErrorUtils._rethrowError;\n ReactErrorUtils._rethrowError = null;\n ReactErrorUtils._hasRethrowError = false;\n throw error;\n }\n};\n\n/**\n * Injectable ordering of event plugins.\n */\nvar eventPluginOrder = null;\n\n/**\n * Injectable mapping from names to event plugin modules.\n */\nvar namesToPlugins = {};\n\n/**\n * Recomputes the plugin list using the injected plugins and plugin ordering.\n *\n * @private\n */\nfunction recomputePluginOrdering() {\n if (!eventPluginOrder) {\n // Wait until an `eventPluginOrder` is injected.\n return;\n }\n for (var pluginName in namesToPlugins) {\n var pluginModule = namesToPlugins[pluginName];\n var pluginIndex = eventPluginOrder.indexOf(pluginName);\n !(pluginIndex > -1) ? invariant(false, 'EventPluginRegistry: Cannot inject event plugins that do not exist in the plugin ordering, `%s`.', pluginName) : void 0;\n if (plugins[pluginIndex]) {\n continue;\n }\n !pluginModule.extractEvents ? invariant(false, 'EventPluginRegistry: Event plugins must implement an `extractEvents` method, but `%s` does not.', pluginName) : void 0;\n plugins[pluginIndex] = pluginModule;\n var publishedEvents = pluginModule.eventTypes;\n for (var eventName in publishedEvents) {\n !publishEventForPlugin(publishedEvents[eventName], pluginModule, eventName) ? invariant(false, 'EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.', eventName, pluginName) : void 0;\n }\n }\n}\n\n/**\n * Publishes an event so that it can be dispatched by the supplied plugin.\n *\n * @param {object} dispatchConfig Dispatch configuration for the event.\n * @param {object} PluginModule Plugin publishing the event.\n * @return {boolean} True if the event was successfully published.\n * @private\n */\nfunction publishEventForPlugin(dispatchConfig, pluginModule, eventName) {\n !!eventNameDispatchConfigs.hasOwnProperty(eventName) ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same event name, `%s`.', eventName) : void 0;\n eventNameDispatchConfigs[eventName] = dispatchConfig;\n\n var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;\n if (phasedRegistrationNames) {\n for (var phaseName in phasedRegistrationNames) {\n if (phasedRegistrationNames.hasOwnProperty(phaseName)) {\n var phasedRegistrationName = phasedRegistrationNames[phaseName];\n publishRegistrationName(phasedRegistrationName, pluginModule, eventName);\n }\n }\n return true;\n } else if (dispatchConfig.registrationName) {\n publishRegistrationName(dispatchConfig.registrationName, pluginModule, eventName);\n return true;\n }\n return false;\n}\n\n/**\n * Publishes a registration name that is used to identify dispatched events.\n *\n * @param {string} registrationName Registration name to add.\n * @param {object} PluginModule Plugin publishing the event.\n * @private\n */\nfunction publishRegistrationName(registrationName, pluginModule, eventName) {\n !!registrationNameModules[registrationName] ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same registration name, `%s`.', registrationName) : void 0;\n registrationNameModules[registrationName] = pluginModule;\n registrationNameDependencies[registrationName] = pluginModule.eventTypes[eventName].dependencies;\n\n {\n var lowerCasedName = registrationName.toLowerCase();\n possibleRegistrationNames[lowerCasedName] = registrationName;\n\n if (registrationName === 'onDoubleClick') {\n possibleRegistrationNames.ondblclick = registrationName;\n }\n }\n}\n\n/**\n * Registers plugins so that they can extract and dispatch events.\n *\n * @see {EventPluginHub}\n */\n\n/**\n * Ordered list of injected plugins.\n */\nvar plugins = [];\n\n/**\n * Mapping from event name to dispatch config\n */\nvar eventNameDispatchConfigs = {};\n\n/**\n * Mapping from registration name to plugin module\n */\nvar registrationNameModules = {};\n\n/**\n * Mapping from registration name to event name\n */\nvar registrationNameDependencies = {};\n\n/**\n * Mapping from lowercase registration names to the properly cased version,\n * used to warn in the case of missing event handlers. Available\n * only in true.\n * @type {Object}\n */\nvar possibleRegistrationNames = {};\n// Trust the developer to only use possibleRegistrationNames in true\n\n/**\n * Injects an ordering of plugins (by plugin name). This allows the ordering\n * to be decoupled from injection of the actual plugins so that ordering is\n * always deterministic regardless of packaging, on-the-fly injection, etc.\n *\n * @param {array} InjectedEventPluginOrder\n * @internal\n * @see {EventPluginHub.injection.injectEventPluginOrder}\n */\nfunction injectEventPluginOrder(injectedEventPluginOrder) {\n !!eventPluginOrder ? invariant(false, 'EventPluginRegistry: Cannot inject event plugin ordering more than once. You are likely trying to load more than one copy of React.') : void 0;\n // Clone the ordering so it cannot be dynamically mutated.\n eventPluginOrder = Array.prototype.slice.call(injectedEventPluginOrder);\n recomputePluginOrdering();\n}\n\n/**\n * Injects plugins to be used by `EventPluginHub`. The plugin names must be\n * in the ordering injected by `injectEventPluginOrder`.\n *\n * Plugins can be injected as part of page initialization or on-the-fly.\n *\n * @param {object} injectedNamesToPlugins Map from names to plugin modules.\n * @internal\n * @see {EventPluginHub.injection.injectEventPluginsByName}\n */\nfunction injectEventPluginsByName(injectedNamesToPlugins) {\n var isOrderingDirty = false;\n for (var pluginName in injectedNamesToPlugins) {\n if (!injectedNamesToPlugins.hasOwnProperty(pluginName)) {\n continue;\n }\n var pluginModule = injectedNamesToPlugins[pluginName];\n if (!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== pluginModule) {\n !!namesToPlugins[pluginName] ? invariant(false, 'EventPluginRegistry: Cannot inject two different event plugins using the same name, `%s`.', pluginName) : void 0;\n namesToPlugins[pluginName] = pluginModule;\n isOrderingDirty = true;\n }\n }\n if (isOrderingDirty) {\n recomputePluginOrdering();\n }\n}\n\nvar EventPluginRegistry = Object.freeze({\n\tplugins: plugins,\n\teventNameDispatchConfigs: eventNameDispatchConfigs,\n\tregistrationNameModules: registrationNameModules,\n\tregistrationNameDependencies: registrationNameDependencies,\n\tpossibleRegistrationNames: possibleRegistrationNames,\n\tinjectEventPluginOrder: injectEventPluginOrder,\n\tinjectEventPluginsByName: injectEventPluginsByName\n});\n\nvar getFiberCurrentPropsFromNode = null;\nvar getInstanceFromNode = null;\nvar getNodeFromInstance = null;\n\nvar injection$2 = {\n injectComponentTree: function (Injected) {\n getFiberCurrentPropsFromNode = Injected.getFiberCurrentPropsFromNode;\n getInstanceFromNode = Injected.getInstanceFromNode;\n getNodeFromInstance = Injected.getNodeFromInstance;\n\n {\n warning(getNodeFromInstance && getInstanceFromNode, 'EventPluginUtils.injection.injectComponentTree(...): Injected ' + 'module is missing getNodeFromInstance or getInstanceFromNode.');\n }\n }\n};\n\n\n\n\n\n\nvar validateEventDispatches;\n{\n validateEventDispatches = function (event) {\n var dispatchListeners = event._dispatchListeners;\n var dispatchInstances = event._dispatchInstances;\n\n var listenersIsArr = Array.isArray(dispatchListeners);\n var listenersLen = listenersIsArr ? dispatchListeners.length : dispatchListeners ? 1 : 0;\n\n var instancesIsArr = Array.isArray(dispatchInstances);\n var instancesLen = instancesIsArr ? dispatchInstances.length : dispatchInstances ? 1 : 0;\n\n warning(instancesIsArr === listenersIsArr && instancesLen === listenersLen, 'EventPluginUtils: Invalid `event`.');\n };\n}\n\n/**\n * Dispatch the event to the listener.\n * @param {SyntheticEvent} event SyntheticEvent to handle\n * @param {boolean} simulated If the event is simulated (changes exn behavior)\n * @param {function} listener Application-level callback\n * @param {*} inst Internal component instance\n */\nfunction executeDispatch(event, simulated, listener, inst) {\n var type = event.type || 'unknown-event';\n event.currentTarget = getNodeFromInstance(inst);\n ReactErrorUtils.invokeGuardedCallbackAndCatchFirstError(type, listener, undefined, event);\n event.currentTarget = null;\n}\n\n/**\n * Standard/simple iteration through an event's collected dispatches.\n */\nfunction executeDispatchesInOrder(event, simulated) {\n var dispatchListeners = event._dispatchListeners;\n var dispatchInstances = event._dispatchInstances;\n {\n validateEventDispatches(event);\n }\n if (Array.isArray(dispatchListeners)) {\n for (var i = 0; i < dispatchListeners.length; i++) {\n if (event.isPropagationStopped()) {\n break;\n }\n // Listeners and Instances are two parallel arrays that are always in sync.\n executeDispatch(event, simulated, dispatchListeners[i], dispatchInstances[i]);\n }\n } else if (dispatchListeners) {\n executeDispatch(event, simulated, dispatchListeners, dispatchInstances);\n }\n event._dispatchListeners = null;\n event._dispatchInstances = null;\n}\n\n/**\n * @see executeDispatchesInOrderStopAtTrueImpl\n */\n\n\n/**\n * Execution of a \"direct\" dispatch - there must be at most one dispatch\n * accumulated on the event or it is considered an error. It doesn't really make\n * sense for an event with multiple dispatches (bubbled) to keep track of the\n * return values at each dispatch execution, but it does tend to make sense when\n * dealing with \"direct\" dispatches.\n *\n * @return {*} The return value of executing the single dispatch.\n */\n\n\n/**\n * @param {SyntheticEvent} event\n * @return {boolean} True iff number of dispatches accumulated is greater than 0.\n */\n\n/**\n * Accumulates items that must not be null or undefined into the first one. This\n * is used to conserve memory by avoiding array allocations, and thus sacrifices\n * API cleanness. Since `current` can be null before being passed in and not\n * null after this function, make sure to assign it back to `current`:\n *\n * `a = accumulateInto(a, b);`\n *\n * This API should be sparingly used. Try `accumulate` for something cleaner.\n *\n * @return {*|array<*>} An accumulation of items.\n */\n\nfunction accumulateInto(current, next) {\n !(next != null) ? invariant(false, 'accumulateInto(...): Accumulated items must not be null or undefined.') : void 0;\n\n if (current == null) {\n return next;\n }\n\n // Both are not empty. Warning: Never call x.concat(y) when you are not\n // certain that x is an Array (x could be a string with concat method).\n if (Array.isArray(current)) {\n if (Array.isArray(next)) {\n current.push.apply(current, next);\n return current;\n }\n current.push(next);\n return current;\n }\n\n if (Array.isArray(next)) {\n // A bit too dangerous to mutate `next`.\n return [current].concat(next);\n }\n\n return [current, next];\n}\n\n/**\n * @param {array} arr an \"accumulation\" of items which is either an Array or\n * a single item. Useful when paired with the `accumulate` module. This is a\n * simple utility that allows us to reason about a collection of items, but\n * handling the case when there is exactly one item (and we do not need to\n * allocate an array).\n * @param {function} cb Callback invoked with each element or a collection.\n * @param {?} [scope] Scope used as `this` in a callback.\n */\nfunction forEachAccumulated(arr, cb, scope) {\n if (Array.isArray(arr)) {\n arr.forEach(cb, scope);\n } else if (arr) {\n cb.call(scope, arr);\n }\n}\n\n/**\n * Internal queue of events that have accumulated their dispatches and are\n * waiting to have their dispatches executed.\n */\nvar eventQueue = null;\n\n/**\n * Dispatches an event and releases it back into the pool, unless persistent.\n *\n * @param {?object} event Synthetic event to be dispatched.\n * @param {boolean} simulated If the event is simulated (changes exn behavior)\n * @private\n */\nvar executeDispatchesAndRelease = function (event, simulated) {\n if (event) {\n executeDispatchesInOrder(event, simulated);\n\n if (!event.isPersistent()) {\n event.constructor.release(event);\n }\n }\n};\nvar executeDispatchesAndReleaseSimulated = function (e) {\n return executeDispatchesAndRelease(e, true);\n};\nvar executeDispatchesAndReleaseTopLevel = function (e) {\n return executeDispatchesAndRelease(e, false);\n};\n\nfunction isInteractive(tag) {\n return tag === 'button' || tag === 'input' || tag === 'select' || tag === 'textarea';\n}\n\nfunction shouldPreventMouseEvent(name, type, props) {\n switch (name) {\n case 'onClick':\n case 'onClickCapture':\n case 'onDoubleClick':\n case 'onDoubleClickCapture':\n case 'onMouseDown':\n case 'onMouseDownCapture':\n case 'onMouseMove':\n case 'onMouseMoveCapture':\n case 'onMouseUp':\n case 'onMouseUpCapture':\n return !!(props.disabled && isInteractive(type));\n default:\n return false;\n }\n}\n\n/**\n * This is a unified interface for event plugins to be installed and configured.\n *\n * Event plugins can implement the following properties:\n *\n * `extractEvents` {function(string, DOMEventTarget, string, object): *}\n * Required. When a top-level event is fired, this method is expected to\n * extract synthetic events that will in turn be queued and dispatched.\n *\n * `eventTypes` {object}\n * Optional, plugins that fire events must publish a mapping of registration\n * names that are used to register listeners. Values of this mapping must\n * be objects that contain `registrationName` or `phasedRegistrationNames`.\n *\n * `executeDispatch` {function(object, function, string)}\n * Optional, allows plugins to override how an event gets dispatched. By\n * default, the listener is simply invoked.\n *\n * Each plugin that is injected into `EventsPluginHub` is immediately operable.\n *\n * @public\n */\n\n/**\n * Methods for injecting dependencies.\n */\nvar injection$1 = {\n /**\n * @param {array} InjectedEventPluginOrder\n * @public\n */\n injectEventPluginOrder: injectEventPluginOrder,\n\n /**\n * @param {object} injectedNamesToPlugins Map from names to plugin modules.\n */\n injectEventPluginsByName: injectEventPluginsByName\n};\n\n/**\n * @param {object} inst The instance, which is the source of events.\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n * @return {?function} The stored callback.\n */\nfunction getListener(inst, registrationName) {\n var listener;\n\n // TODO: shouldPreventMouseEvent is DOM-specific and definitely should not\n // live here; needs to be moved to a better place soon\n var stateNode = inst.stateNode;\n if (!stateNode) {\n // Work in progress (ex: onload events in incremental mode).\n return null;\n }\n var props = getFiberCurrentPropsFromNode(stateNode);\n if (!props) {\n // Work in progress.\n return null;\n }\n listener = props[registrationName];\n if (shouldPreventMouseEvent(registrationName, inst.type, props)) {\n return null;\n }\n !(!listener || typeof listener === 'function') ? invariant(false, 'Expected `%s` listener to be a function, instead got a value of `%s` type.', registrationName, typeof listener) : void 0;\n return listener;\n}\n\n/**\n * Allows registered plugins an opportunity to extract events from top-level\n * native browser events.\n *\n * @return {*} An accumulation of synthetic events.\n * @internal\n */\nfunction extractEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n var events;\n for (var i = 0; i < plugins.length; i++) {\n // Not every plugin in the ordering may be loaded at runtime.\n var possiblePlugin = plugins[i];\n if (possiblePlugin) {\n var extractedEvents = possiblePlugin.extractEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget);\n if (extractedEvents) {\n events = accumulateInto(events, extractedEvents);\n }\n }\n }\n return events;\n}\n\n/**\n * Enqueues a synthetic event that should be dispatched when\n * `processEventQueue` is invoked.\n *\n * @param {*} events An accumulation of synthetic events.\n * @internal\n */\nfunction enqueueEvents(events) {\n if (events) {\n eventQueue = accumulateInto(eventQueue, events);\n }\n}\n\n/**\n * Dispatches all synthetic events on the event queue.\n *\n * @internal\n */\nfunction processEventQueue(simulated) {\n // Set `eventQueue` to null before processing it so that we can tell if more\n // events get enqueued while processing.\n var processingEventQueue = eventQueue;\n eventQueue = null;\n\n if (!processingEventQueue) {\n return;\n }\n\n if (simulated) {\n forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseSimulated);\n } else {\n forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseTopLevel);\n }\n !!eventQueue ? invariant(false, 'processEventQueue(): Additional events were enqueued while processing an event queue. Support for this has not yet been implemented.') : void 0;\n // This would be a good time to rethrow if any of the event handlers threw.\n ReactErrorUtils.rethrowCaughtError();\n}\n\nvar EventPluginHub = Object.freeze({\n\tinjection: injection$1,\n\tgetListener: getListener,\n\textractEvents: extractEvents,\n\tenqueueEvents: enqueueEvents,\n\tprocessEventQueue: processEventQueue\n});\n\nvar IndeterminateComponent = 0; // Before we know whether it is functional or class\nvar FunctionalComponent = 1;\nvar ClassComponent = 2;\nvar HostRoot = 3; // Root of a host tree. Could be nested inside another node.\nvar HostPortal = 4; // A subtree. Could be an entry point to a different renderer.\nvar HostComponent = 5;\nvar HostText = 6;\nvar CallComponent = 7;\nvar CallHandlerPhase = 8;\nvar ReturnComponent = 9;\nvar Fragment = 10;\n\nvar randomKey = Math.random().toString(36).slice(2);\nvar internalInstanceKey = '__reactInternalInstance$' + randomKey;\nvar internalEventHandlersKey = '__reactEventHandlers$' + randomKey;\n\nfunction precacheFiberNode$1(hostInst, node) {\n node[internalInstanceKey] = hostInst;\n}\n\n/**\n * Given a DOM node, return the closest ReactDOMComponent or\n * ReactDOMTextComponent instance ancestor.\n */\nfunction getClosestInstanceFromNode(node) {\n if (node[internalInstanceKey]) {\n return node[internalInstanceKey];\n }\n\n // Walk up the tree until we find an ancestor whose instance we have cached.\n var parents = [];\n while (!node[internalInstanceKey]) {\n parents.push(node);\n if (node.parentNode) {\n node = node.parentNode;\n } else {\n // Top of the tree. This node must not be part of a React tree (or is\n // unmounted, potentially).\n return null;\n }\n }\n\n var closest = void 0;\n var inst = node[internalInstanceKey];\n if (inst.tag === HostComponent || inst.tag === HostText) {\n // In Fiber, this will always be the deepest root.\n return inst;\n }\n for (; node && (inst = node[internalInstanceKey]); node = parents.pop()) {\n closest = inst;\n }\n\n return closest;\n}\n\n/**\n * Given a DOM node, return the ReactDOMComponent or ReactDOMTextComponent\n * instance, or null if the node was not rendered by this React.\n */\nfunction getInstanceFromNode$1(node) {\n var inst = node[internalInstanceKey];\n if (inst) {\n if (inst.tag === HostComponent || inst.tag === HostText) {\n return inst;\n } else {\n return null;\n }\n }\n return null;\n}\n\n/**\n * Given a ReactDOMComponent or ReactDOMTextComponent, return the corresponding\n * DOM node.\n */\nfunction getNodeFromInstance$1(inst) {\n if (inst.tag === HostComponent || inst.tag === HostText) {\n // In Fiber this, is just the state node right now. We assume it will be\n // a host component or host text.\n return inst.stateNode;\n }\n\n // Without this first invariant, passing a non-DOM-component triggers the next\n // invariant for a missing parent, which is super confusing.\n invariant(false, 'getNodeFromInstance: Invalid argument.');\n}\n\nfunction getFiberCurrentPropsFromNode$1(node) {\n return node[internalEventHandlersKey] || null;\n}\n\nfunction updateFiberProps$1(node, props) {\n node[internalEventHandlersKey] = props;\n}\n\nvar ReactDOMComponentTree = Object.freeze({\n\tprecacheFiberNode: precacheFiberNode$1,\n\tgetClosestInstanceFromNode: getClosestInstanceFromNode,\n\tgetInstanceFromNode: getInstanceFromNode$1,\n\tgetNodeFromInstance: getNodeFromInstance$1,\n\tgetFiberCurrentPropsFromNode: getFiberCurrentPropsFromNode$1,\n\tupdateFiberProps: updateFiberProps$1\n});\n\nfunction getParent(inst) {\n do {\n inst = inst['return'];\n // TODO: If this is a HostRoot we might want to bail out.\n // That is depending on if we want nested subtrees (layers) to bubble\n // events to their parent. We could also go through parentNode on the\n // host node but that wouldn't work for React Native and doesn't let us\n // do the portal feature.\n } while (inst && inst.tag !== HostComponent);\n if (inst) {\n return inst;\n }\n return null;\n}\n\n/**\n * Return the lowest common ancestor of A and B, or null if they are in\n * different trees.\n */\nfunction getLowestCommonAncestor(instA, instB) {\n var depthA = 0;\n for (var tempA = instA; tempA; tempA = getParent(tempA)) {\n depthA++;\n }\n var depthB = 0;\n for (var tempB = instB; tempB; tempB = getParent(tempB)) {\n depthB++;\n }\n\n // If A is deeper, crawl up.\n while (depthA - depthB > 0) {\n instA = getParent(instA);\n depthA--;\n }\n\n // If B is deeper, crawl up.\n while (depthB - depthA > 0) {\n instB = getParent(instB);\n depthB--;\n }\n\n // Walk in lockstep until we find a match.\n var depth = depthA;\n while (depth--) {\n if (instA === instB || instA === instB.alternate) {\n return instA;\n }\n instA = getParent(instA);\n instB = getParent(instB);\n }\n return null;\n}\n\n/**\n * Return if A is an ancestor of B.\n */\n\n\n/**\n * Return the parent instance of the passed-in instance.\n */\nfunction getParentInstance(inst) {\n return getParent(inst);\n}\n\n/**\n * Simulates the traversal of a two-phase, capture/bubble event dispatch.\n */\nfunction traverseTwoPhase(inst, fn, arg) {\n var path = [];\n while (inst) {\n path.push(inst);\n inst = getParent(inst);\n }\n var i;\n for (i = path.length; i-- > 0;) {\n fn(path[i], 'captured', arg);\n }\n for (i = 0; i < path.length; i++) {\n fn(path[i], 'bubbled', arg);\n }\n}\n\n/**\n * Traverses the ID hierarchy and invokes the supplied `cb` on any IDs that\n * should would receive a `mouseEnter` or `mouseLeave` event.\n *\n * Does not invoke the callback on the nearest common ancestor because nothing\n * \"entered\" or \"left\" that element.\n */\nfunction traverseEnterLeave(from, to, fn, argFrom, argTo) {\n var common = from && to ? getLowestCommonAncestor(from, to) : null;\n var pathFrom = [];\n while (true) {\n if (!from) {\n break;\n }\n if (from === common) {\n break;\n }\n var alternate = from.alternate;\n if (alternate !== null && alternate === common) {\n break;\n }\n pathFrom.push(from);\n from = getParent(from);\n }\n var pathTo = [];\n while (true) {\n if (!to) {\n break;\n }\n if (to === common) {\n break;\n }\n var _alternate = to.alternate;\n if (_alternate !== null && _alternate === common) {\n break;\n }\n pathTo.push(to);\n to = getParent(to);\n }\n for (var i = 0; i < pathFrom.length; i++) {\n fn(pathFrom[i], 'bubbled', argFrom);\n }\n for (var _i = pathTo.length; _i-- > 0;) {\n fn(pathTo[_i], 'captured', argTo);\n }\n}\n\n/**\n * Some event types have a notion of different registration names for different\n * \"phases\" of propagation. This finds listeners by a given phase.\n */\nfunction listenerAtPhase(inst, event, propagationPhase) {\n var registrationName = event.dispatchConfig.phasedRegistrationNames[propagationPhase];\n return getListener(inst, registrationName);\n}\n\n/**\n * A small set of propagation patterns, each of which will accept a small amount\n * of information, and generate a set of \"dispatch ready event objects\" - which\n * are sets of events that have already been annotated with a set of dispatched\n * listener functions/ids. The API is designed this way to discourage these\n * propagation strategies from actually executing the dispatches, since we\n * always want to collect the entire set of dispatches before executing even a\n * single one.\n */\n\n/**\n * Tags a `SyntheticEvent` with dispatched listeners. Creating this function\n * here, allows us to not have to bind or create functions for each event.\n * Mutating the event's members allows us to not have to create a wrapping\n * \"dispatch\" object that pairs the event with the listener.\n */\nfunction accumulateDirectionalDispatches(inst, phase, event) {\n {\n warning(inst, 'Dispatching inst must not be null');\n }\n var listener = listenerAtPhase(inst, event, phase);\n if (listener) {\n event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);\n event._dispatchInstances = accumulateInto(event._dispatchInstances, inst);\n }\n}\n\n/**\n * Collect dispatches (must be entirely collected before dispatching - see unit\n * tests). Lazily allocate the array to conserve memory. We must loop through\n * each event and perform the traversal for each one. We cannot perform a\n * single traversal for the entire collection of events because each event may\n * have a different target.\n */\nfunction accumulateTwoPhaseDispatchesSingle(event) {\n if (event && event.dispatchConfig.phasedRegistrationNames) {\n traverseTwoPhase(event._targetInst, accumulateDirectionalDispatches, event);\n }\n}\n\n/**\n * Same as `accumulateTwoPhaseDispatchesSingle`, but skips over the targetID.\n */\nfunction accumulateTwoPhaseDispatchesSingleSkipTarget(event) {\n if (event && event.dispatchConfig.phasedRegistrationNames) {\n var targetInst = event._targetInst;\n var parentInst = targetInst ? getParentInstance(targetInst) : null;\n traverseTwoPhase(parentInst, accumulateDirectionalDispatches, event);\n }\n}\n\n/**\n * Accumulates without regard to direction, does not look for phased\n * registration names. Same as `accumulateDirectDispatchesSingle` but without\n * requiring that the `dispatchMarker` be the same as the dispatched ID.\n */\nfunction accumulateDispatches(inst, ignoredDirection, event) {\n if (inst && event && event.dispatchConfig.registrationName) {\n var registrationName = event.dispatchConfig.registrationName;\n var listener = getListener(inst, registrationName);\n if (listener) {\n event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);\n event._dispatchInstances = accumulateInto(event._dispatchInstances, inst);\n }\n }\n}\n\n/**\n * Accumulates dispatches on an `SyntheticEvent`, but only for the\n * `dispatchMarker`.\n * @param {SyntheticEvent} event\n */\nfunction accumulateDirectDispatchesSingle(event) {\n if (event && event.dispatchConfig.registrationName) {\n accumulateDispatches(event._targetInst, null, event);\n }\n}\n\nfunction accumulateTwoPhaseDispatches(events) {\n forEachAccumulated(events, accumulateTwoPhaseDispatchesSingle);\n}\n\nfunction accumulateTwoPhaseDispatchesSkipTarget(events) {\n forEachAccumulated(events, accumulateTwoPhaseDispatchesSingleSkipTarget);\n}\n\nfunction accumulateEnterLeaveDispatches(leave, enter, from, to) {\n traverseEnterLeave(from, to, accumulateDispatches, leave, enter);\n}\n\nfunction accumulateDirectDispatches(events) {\n forEachAccumulated(events, accumulateDirectDispatchesSingle);\n}\n\nvar EventPropagators = Object.freeze({\n\taccumulateTwoPhaseDispatches: accumulateTwoPhaseDispatches,\n\taccumulateTwoPhaseDispatchesSkipTarget: accumulateTwoPhaseDispatchesSkipTarget,\n\taccumulateEnterLeaveDispatches: accumulateEnterLeaveDispatches,\n\taccumulateDirectDispatches: accumulateDirectDispatches\n});\n\nvar contentKey = null;\n\n/**\n * Gets the key used to access text content on a DOM node.\n *\n * @return {?string} Key used to access text content.\n * @internal\n */\nfunction getTextContentAccessor() {\n if (!contentKey && ExecutionEnvironment.canUseDOM) {\n // Prefer textContent to innerText because many browsers support both but\n // SVG elements don't support innerText even when
does.\n contentKey = 'textContent' in document.documentElement ? 'textContent' : 'innerText';\n }\n return contentKey;\n}\n\n/**\n * This helper object stores information about text content of a target node,\n * allowing comparison of content before and after a given event.\n *\n * Identify the node where selection currently begins, then observe\n * both its text content and its current position in the DOM. Since the\n * browser may natively replace the target node during composition, we can\n * use its position to find its replacement.\n *\n *\n */\nvar compositionState = {\n _root: null,\n _startText: null,\n _fallbackText: null\n};\n\nfunction initialize(nativeEventTarget) {\n compositionState._root = nativeEventTarget;\n compositionState._startText = getText();\n return true;\n}\n\nfunction reset() {\n compositionState._root = null;\n compositionState._startText = null;\n compositionState._fallbackText = null;\n}\n\nfunction getData() {\n if (compositionState._fallbackText) {\n return compositionState._fallbackText;\n }\n\n var start;\n var startValue = compositionState._startText;\n var startLength = startValue.length;\n var end;\n var endValue = getText();\n var endLength = endValue.length;\n\n for (start = 0; start < startLength; start++) {\n if (startValue[start] !== endValue[start]) {\n break;\n }\n }\n\n var minEnd = startLength - start;\n for (end = 1; end <= minEnd; end++) {\n if (startValue[startLength - end] !== endValue[endLength - end]) {\n break;\n }\n }\n\n var sliceTail = end > 1 ? 1 - end : undefined;\n compositionState._fallbackText = endValue.slice(start, sliceTail);\n return compositionState._fallbackText;\n}\n\nfunction getText() {\n if ('value' in compositionState._root) {\n return compositionState._root.value;\n }\n return compositionState._root[getTextContentAccessor()];\n}\n\n/* eslint valid-typeof: 0 */\n\nvar didWarnForAddedNewProperty = false;\nvar isProxySupported = typeof Proxy === 'function';\nvar EVENT_POOL_SIZE = 10;\n\nvar shouldBeReleasedProperties = ['dispatchConfig', '_targetInst', 'nativeEvent', 'isDefaultPrevented', 'isPropagationStopped', '_dispatchListeners', '_dispatchInstances'];\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar EventInterface = {\n type: null,\n target: null,\n // currentTarget is set when dispatching; no use in copying it here\n currentTarget: emptyFunction.thatReturnsNull,\n eventPhase: null,\n bubbles: null,\n cancelable: null,\n timeStamp: function (event) {\n return event.timeStamp || Date.now();\n },\n defaultPrevented: null,\n isTrusted: null\n};\n\n/**\n * Synthetic events are dispatched by event plugins, typically in response to a\n * top-level event delegation handler.\n *\n * These systems should generally use pooling to reduce the frequency of garbage\n * collection. The system should check `isPersistent` to determine whether the\n * event should be released into the pool after being dispatched. Users that\n * need a persisted event should invoke `persist`.\n *\n * Synthetic events (and subclasses) implement the DOM Level 3 Events API by\n * normalizing browser quirks. Subclasses do not necessarily have to implement a\n * DOM interface; custom application-specific events can also subclass this.\n *\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {*} targetInst Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @param {DOMEventTarget} nativeEventTarget Target node.\n */\nfunction SyntheticEvent(dispatchConfig, targetInst, nativeEvent, nativeEventTarget) {\n {\n // these have a getter/setter for warnings\n delete this.nativeEvent;\n delete this.preventDefault;\n delete this.stopPropagation;\n }\n\n this.dispatchConfig = dispatchConfig;\n this._targetInst = targetInst;\n this.nativeEvent = nativeEvent;\n\n var Interface = this.constructor.Interface;\n for (var propName in Interface) {\n if (!Interface.hasOwnProperty(propName)) {\n continue;\n }\n {\n delete this[propName]; // this has a getter/setter for warnings\n }\n var normalize = Interface[propName];\n if (normalize) {\n this[propName] = normalize(nativeEvent);\n } else {\n if (propName === 'target') {\n this.target = nativeEventTarget;\n } else {\n this[propName] = nativeEvent[propName];\n }\n }\n }\n\n var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false;\n if (defaultPrevented) {\n this.isDefaultPrevented = emptyFunction.thatReturnsTrue;\n } else {\n this.isDefaultPrevented = emptyFunction.thatReturnsFalse;\n }\n this.isPropagationStopped = emptyFunction.thatReturnsFalse;\n return this;\n}\n\n_assign(SyntheticEvent.prototype, {\n preventDefault: function () {\n this.defaultPrevented = true;\n var event = this.nativeEvent;\n if (!event) {\n return;\n }\n\n if (event.preventDefault) {\n event.preventDefault();\n } else if (typeof event.returnValue !== 'unknown') {\n event.returnValue = false;\n }\n this.isDefaultPrevented = emptyFunction.thatReturnsTrue;\n },\n\n stopPropagation: function () {\n var event = this.nativeEvent;\n if (!event) {\n return;\n }\n\n if (event.stopPropagation) {\n event.stopPropagation();\n } else if (typeof event.cancelBubble !== 'unknown') {\n // The ChangeEventPlugin registers a \"propertychange\" event for\n // IE. This event does not support bubbling or cancelling, and\n // any references to cancelBubble throw \"Member not found\". A\n // typeof check of \"unknown\" circumvents this issue (and is also\n // IE specific).\n event.cancelBubble = true;\n }\n\n this.isPropagationStopped = emptyFunction.thatReturnsTrue;\n },\n\n /**\n * We release all dispatched `SyntheticEvent`s after each event loop, adding\n * them back into the pool. This allows a way to hold onto a reference that\n * won't be added back into the pool.\n */\n persist: function () {\n this.isPersistent = emptyFunction.thatReturnsTrue;\n },\n\n /**\n * Checks if this event should be released back into the pool.\n *\n * @return {boolean} True if this should not be released, false otherwise.\n */\n isPersistent: emptyFunction.thatReturnsFalse,\n\n /**\n * `PooledClass` looks for `destructor` on each instance it releases.\n */\n destructor: function () {\n var Interface = this.constructor.Interface;\n for (var propName in Interface) {\n {\n Object.defineProperty(this, propName, getPooledWarningPropertyDefinition(propName, Interface[propName]));\n }\n }\n for (var i = 0; i < shouldBeReleasedProperties.length; i++) {\n this[shouldBeReleasedProperties[i]] = null;\n }\n {\n Object.defineProperty(this, 'nativeEvent', getPooledWarningPropertyDefinition('nativeEvent', null));\n Object.defineProperty(this, 'preventDefault', getPooledWarningPropertyDefinition('preventDefault', emptyFunction));\n Object.defineProperty(this, 'stopPropagation', getPooledWarningPropertyDefinition('stopPropagation', emptyFunction));\n }\n }\n});\n\nSyntheticEvent.Interface = EventInterface;\n\n/**\n * Helper to reduce boilerplate when creating subclasses.\n *\n * @param {function} Class\n * @param {?object} Interface\n */\nSyntheticEvent.augmentClass = function (Class, Interface) {\n var Super = this;\n\n var E = function () {};\n E.prototype = Super.prototype;\n var prototype = new E();\n\n _assign(prototype, Class.prototype);\n Class.prototype = prototype;\n Class.prototype.constructor = Class;\n\n Class.Interface = _assign({}, Super.Interface, Interface);\n Class.augmentClass = Super.augmentClass;\n addEventPoolingTo(Class);\n};\n\n/** Proxying after everything set on SyntheticEvent\n * to resolve Proxy issue on some WebKit browsers\n * in which some Event properties are set to undefined (GH#10010)\n */\n{\n if (isProxySupported) {\n /*eslint-disable no-func-assign */\n SyntheticEvent = new Proxy(SyntheticEvent, {\n construct: function (target, args) {\n return this.apply(target, Object.create(target.prototype), args);\n },\n apply: function (constructor, that, args) {\n return new Proxy(constructor.apply(that, args), {\n set: function (target, prop, value) {\n if (prop !== 'isPersistent' && !target.constructor.Interface.hasOwnProperty(prop) && shouldBeReleasedProperties.indexOf(prop) === -1) {\n warning(didWarnForAddedNewProperty || target.isPersistent(), \"This synthetic event is reused for performance reasons. If you're \" + \"seeing this, you're adding a new property in the synthetic event object. \" + 'The property is never released. See ' + 'https://fb.me/react-event-pooling for more information.');\n didWarnForAddedNewProperty = true;\n }\n target[prop] = value;\n return true;\n }\n });\n }\n });\n /*eslint-enable no-func-assign */\n }\n}\n\naddEventPoolingTo(SyntheticEvent);\n\n/**\n * Helper to nullify syntheticEvent instance properties when destructing\n *\n * @param {String} propName\n * @param {?object} getVal\n * @return {object} defineProperty object\n */\nfunction getPooledWarningPropertyDefinition(propName, getVal) {\n var isFunction = typeof getVal === 'function';\n return {\n configurable: true,\n set: set,\n get: get\n };\n\n function set(val) {\n var action = isFunction ? 'setting the method' : 'setting the property';\n warn(action, 'This is effectively a no-op');\n return val;\n }\n\n function get() {\n var action = isFunction ? 'accessing the method' : 'accessing the property';\n var result = isFunction ? 'This is a no-op function' : 'This is set to null';\n warn(action, result);\n return getVal;\n }\n\n function warn(action, result) {\n var warningCondition = false;\n warning(warningCondition, \"This synthetic event is reused for performance reasons. If you're seeing this, \" + \"you're %s `%s` on a released/nullified synthetic event. %s. \" + 'If you must keep the original synthetic event around, use event.persist(). ' + 'See https://fb.me/react-event-pooling for more information.', action, propName, result);\n }\n}\n\nfunction getPooledEvent(dispatchConfig, targetInst, nativeEvent, nativeInst) {\n var EventConstructor = this;\n if (EventConstructor.eventPool.length) {\n var instance = EventConstructor.eventPool.pop();\n EventConstructor.call(instance, dispatchConfig, targetInst, nativeEvent, nativeInst);\n return instance;\n }\n return new EventConstructor(dispatchConfig, targetInst, nativeEvent, nativeInst);\n}\n\nfunction releasePooledEvent(event) {\n var EventConstructor = this;\n !(event instanceof EventConstructor) ? invariant(false, 'Trying to release an event instance into a pool of a different type.') : void 0;\n event.destructor();\n if (EventConstructor.eventPool.length < EVENT_POOL_SIZE) {\n EventConstructor.eventPool.push(event);\n }\n}\n\nfunction addEventPoolingTo(EventConstructor) {\n EventConstructor.eventPool = [];\n EventConstructor.getPooled = getPooledEvent;\n EventConstructor.release = releasePooledEvent;\n}\n\nvar SyntheticEvent$1 = SyntheticEvent;\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents\n */\nvar CompositionEventInterface = {\n data: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticEvent}\n */\nfunction SyntheticCompositionEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n return SyntheticEvent$1.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent$1.augmentClass(SyntheticCompositionEvent, CompositionEventInterface);\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105\n * /#events-inputevents\n */\nvar InputEventInterface = {\n data: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticEvent}\n */\nfunction SyntheticInputEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n return SyntheticEvent$1.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent$1.augmentClass(SyntheticInputEvent, InputEventInterface);\n\nvar END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space\nvar START_KEYCODE = 229;\n\nvar canUseCompositionEvent = ExecutionEnvironment.canUseDOM && 'CompositionEvent' in window;\n\nvar documentMode = null;\nif (ExecutionEnvironment.canUseDOM && 'documentMode' in document) {\n documentMode = document.documentMode;\n}\n\n// Webkit offers a very useful `textInput` event that can be used to\n// directly represent `beforeInput`. The IE `textinput` event is not as\n// useful, so we don't use it.\nvar canUseTextInputEvent = ExecutionEnvironment.canUseDOM && 'TextEvent' in window && !documentMode && !isPresto();\n\n// In IE9+, we have access to composition events, but the data supplied\n// by the native compositionend event may be incorrect. Japanese ideographic\n// spaces, for instance (\\u3000) are not recorded correctly.\nvar useFallbackCompositionData = ExecutionEnvironment.canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11);\n\n/**\n * Opera <= 12 includes TextEvent in window, but does not fire\n * text input events. Rely on keypress instead.\n */\nfunction isPresto() {\n var opera = window.opera;\n return typeof opera === 'object' && typeof opera.version === 'function' && parseInt(opera.version(), 10) <= 12;\n}\n\nvar SPACEBAR_CODE = 32;\nvar SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE);\n\n// Events and their corresponding property names.\nvar eventTypes = {\n beforeInput: {\n phasedRegistrationNames: {\n bubbled: 'onBeforeInput',\n captured: 'onBeforeInputCapture'\n },\n dependencies: ['topCompositionEnd', 'topKeyPress', 'topTextInput', 'topPaste']\n },\n compositionEnd: {\n phasedRegistrationNames: {\n bubbled: 'onCompositionEnd',\n captured: 'onCompositionEndCapture'\n },\n dependencies: ['topBlur', 'topCompositionEnd', 'topKeyDown', 'topKeyPress', 'topKeyUp', 'topMouseDown']\n },\n compositionStart: {\n phasedRegistrationNames: {\n bubbled: 'onCompositionStart',\n captured: 'onCompositionStartCapture'\n },\n dependencies: ['topBlur', 'topCompositionStart', 'topKeyDown', 'topKeyPress', 'topKeyUp', 'topMouseDown']\n },\n compositionUpdate: {\n phasedRegistrationNames: {\n bubbled: 'onCompositionUpdate',\n captured: 'onCompositionUpdateCapture'\n },\n dependencies: ['topBlur', 'topCompositionUpdate', 'topKeyDown', 'topKeyPress', 'topKeyUp', 'topMouseDown']\n }\n};\n\n// Track whether we've ever handled a keypress on the space key.\nvar hasSpaceKeypress = false;\n\n/**\n * Return whether a native keypress event is assumed to be a command.\n * This is required because Firefox fires `keypress` events for key commands\n * (cut, copy, select-all, etc.) even though no character is inserted.\n */\nfunction isKeypressCommand(nativeEvent) {\n return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) &&\n // ctrlKey && altKey is equivalent to AltGr, and is not a command.\n !(nativeEvent.ctrlKey && nativeEvent.altKey);\n}\n\n/**\n * Translate native top level events into event types.\n *\n * @param {string} topLevelType\n * @return {object}\n */\nfunction getCompositionEventType(topLevelType) {\n switch (topLevelType) {\n case 'topCompositionStart':\n return eventTypes.compositionStart;\n case 'topCompositionEnd':\n return eventTypes.compositionEnd;\n case 'topCompositionUpdate':\n return eventTypes.compositionUpdate;\n }\n}\n\n/**\n * Does our fallback best-guess model think this event signifies that\n * composition has begun?\n *\n * @param {string} topLevelType\n * @param {object} nativeEvent\n * @return {boolean}\n */\nfunction isFallbackCompositionStart(topLevelType, nativeEvent) {\n return topLevelType === 'topKeyDown' && nativeEvent.keyCode === START_KEYCODE;\n}\n\n/**\n * Does our fallback mode think that this event is the end of composition?\n *\n * @param {string} topLevelType\n * @param {object} nativeEvent\n * @return {boolean}\n */\nfunction isFallbackCompositionEnd(topLevelType, nativeEvent) {\n switch (topLevelType) {\n case 'topKeyUp':\n // Command keys insert or clear IME input.\n return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1;\n case 'topKeyDown':\n // Expect IME keyCode on each keydown. If we get any other\n // code we must have exited earlier.\n return nativeEvent.keyCode !== START_KEYCODE;\n case 'topKeyPress':\n case 'topMouseDown':\n case 'topBlur':\n // Events are not possible without cancelling IME.\n return true;\n default:\n return false;\n }\n}\n\n/**\n * Google Input Tools provides composition data via a CustomEvent,\n * with the `data` property populated in the `detail` object. If this\n * is available on the event object, use it. If not, this is a plain\n * composition event and we have nothing special to extract.\n *\n * @param {object} nativeEvent\n * @return {?string}\n */\nfunction getDataFromCustomEvent(nativeEvent) {\n var detail = nativeEvent.detail;\n if (typeof detail === 'object' && 'data' in detail) {\n return detail.data;\n }\n return null;\n}\n\n// Track the current IME composition status, if any.\nvar isComposing = false;\n\n/**\n * @return {?object} A SyntheticCompositionEvent.\n */\nfunction extractCompositionEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n var eventType;\n var fallbackData;\n\n if (canUseCompositionEvent) {\n eventType = getCompositionEventType(topLevelType);\n } else if (!isComposing) {\n if (isFallbackCompositionStart(topLevelType, nativeEvent)) {\n eventType = eventTypes.compositionStart;\n }\n } else if (isFallbackCompositionEnd(topLevelType, nativeEvent)) {\n eventType = eventTypes.compositionEnd;\n }\n\n if (!eventType) {\n return null;\n }\n\n if (useFallbackCompositionData) {\n // The current composition is stored statically and must not be\n // overwritten while composition continues.\n if (!isComposing && eventType === eventTypes.compositionStart) {\n isComposing = initialize(nativeEventTarget);\n } else if (eventType === eventTypes.compositionEnd) {\n if (isComposing) {\n fallbackData = getData();\n }\n }\n }\n\n var event = SyntheticCompositionEvent.getPooled(eventType, targetInst, nativeEvent, nativeEventTarget);\n\n if (fallbackData) {\n // Inject data generated from fallback path into the synthetic event.\n // This matches the property of native CompositionEventInterface.\n event.data = fallbackData;\n } else {\n var customData = getDataFromCustomEvent(nativeEvent);\n if (customData !== null) {\n event.data = customData;\n }\n }\n\n accumulateTwoPhaseDispatches(event);\n return event;\n}\n\n/**\n * @param {TopLevelTypes} topLevelType Record from `BrowserEventConstants`.\n * @param {object} nativeEvent Native browser event.\n * @return {?string} The string corresponding to this `beforeInput` event.\n */\nfunction getNativeBeforeInputChars(topLevelType, nativeEvent) {\n switch (topLevelType) {\n case 'topCompositionEnd':\n return getDataFromCustomEvent(nativeEvent);\n case 'topKeyPress':\n /**\n * If native `textInput` events are available, our goal is to make\n * use of them. However, there is a special case: the spacebar key.\n * In Webkit, preventing default on a spacebar `textInput` event\n * cancels character insertion, but it *also* causes the browser\n * to fall back to its default spacebar behavior of scrolling the\n * page.\n *\n * Tracking at:\n * https://code.google.com/p/chromium/issues/detail?id=355103\n *\n * To avoid this issue, use the keypress event as if no `textInput`\n * event is available.\n */\n var which = nativeEvent.which;\n if (which !== SPACEBAR_CODE) {\n return null;\n }\n\n hasSpaceKeypress = true;\n return SPACEBAR_CHAR;\n\n case 'topTextInput':\n // Record the characters to be added to the DOM.\n var chars = nativeEvent.data;\n\n // If it's a spacebar character, assume that we have already handled\n // it at the keypress level and bail immediately. Android Chrome\n // doesn't give us keycodes, so we need to blacklist it.\n if (chars === SPACEBAR_CHAR && hasSpaceKeypress) {\n return null;\n }\n\n return chars;\n\n default:\n // For other native event types, do nothing.\n return null;\n }\n}\n\n/**\n * For browsers that do not provide the `textInput` event, extract the\n * appropriate string to use for SyntheticInputEvent.\n *\n * @param {string} topLevelType Record from `BrowserEventConstants`.\n * @param {object} nativeEvent Native browser event.\n * @return {?string} The fallback string for this `beforeInput` event.\n */\nfunction getFallbackBeforeInputChars(topLevelType, nativeEvent) {\n // If we are currently composing (IME) and using a fallback to do so,\n // try to extract the composed characters from the fallback object.\n // If composition event is available, we extract a string only at\n // compositionevent, otherwise extract it at fallback events.\n if (isComposing) {\n if (topLevelType === 'topCompositionEnd' || !canUseCompositionEvent && isFallbackCompositionEnd(topLevelType, nativeEvent)) {\n var chars = getData();\n reset();\n isComposing = false;\n return chars;\n }\n return null;\n }\n\n switch (topLevelType) {\n case 'topPaste':\n // If a paste event occurs after a keypress, throw out the input\n // chars. Paste events should not lead to BeforeInput events.\n return null;\n case 'topKeyPress':\n /**\n * As of v27, Firefox may fire keypress events even when no character\n * will be inserted. A few possibilities:\n *\n * - `which` is `0`. Arrow keys, Esc key, etc.\n *\n * - `which` is the pressed key code, but no char is available.\n * Ex: 'AltGr + d` in Polish. There is no modified character for\n * this key combination and no character is inserted into the\n * document, but FF fires the keypress for char code `100` anyway.\n * No `input` event will occur.\n *\n * - `which` is the pressed key code, but a command combination is\n * being used. Ex: `Cmd+C`. No character is inserted, and no\n * `input` event will occur.\n */\n if (!isKeypressCommand(nativeEvent)) {\n // IE fires the `keypress` event when a user types an emoji via\n // Touch keyboard of Windows. In such a case, the `char` property\n // holds an emoji character like `\\uD83D\\uDE0A`. Because its length\n // is 2, the property `which` does not represent an emoji correctly.\n // In such a case, we directly return the `char` property instead of\n // using `which`.\n if (nativeEvent.char && nativeEvent.char.length > 1) {\n return nativeEvent.char;\n } else if (nativeEvent.which) {\n return String.fromCharCode(nativeEvent.which);\n }\n }\n return null;\n case 'topCompositionEnd':\n return useFallbackCompositionData ? null : nativeEvent.data;\n default:\n return null;\n }\n}\n\n/**\n * Extract a SyntheticInputEvent for `beforeInput`, based on either native\n * `textInput` or fallback behavior.\n *\n * @return {?object} A SyntheticInputEvent.\n */\nfunction extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n var chars;\n\n if (canUseTextInputEvent) {\n chars = getNativeBeforeInputChars(topLevelType, nativeEvent);\n } else {\n chars = getFallbackBeforeInputChars(topLevelType, nativeEvent);\n }\n\n // If no characters are being inserted, no BeforeInput event should\n // be fired.\n if (!chars) {\n return null;\n }\n\n var event = SyntheticInputEvent.getPooled(eventTypes.beforeInput, targetInst, nativeEvent, nativeEventTarget);\n\n event.data = chars;\n accumulateTwoPhaseDispatches(event);\n return event;\n}\n\n/**\n * Create an `onBeforeInput` event to match\n * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.\n *\n * This event plugin is based on the native `textInput` event\n * available in Chrome, Safari, Opera, and IE. This event fires after\n * `onKeyPress` and `onCompositionEnd`, but before `onInput`.\n *\n * `beforeInput` is spec'd but not implemented in any browsers, and\n * the `input` event does not provide any useful information about what has\n * actually been added, contrary to the spec. Thus, `textInput` is the best\n * available event to identify the characters that have actually been inserted\n * into the target node.\n *\n * This plugin is also responsible for emitting `composition` events, thus\n * allowing us to share composition fallback code for both `beforeInput` and\n * `composition` event types.\n */\nvar BeforeInputEventPlugin = {\n eventTypes: eventTypes,\n\n extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n return [extractCompositionEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget), extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget)];\n }\n};\n\n// Use to restore controlled state after a change event has fired.\n\nvar fiberHostComponent = null;\n\nvar ReactControlledComponentInjection = {\n injectFiberControlledHostComponent: function (hostComponentImpl) {\n // The fiber implementation doesn't use dynamic dispatch so we need to\n // inject the implementation.\n fiberHostComponent = hostComponentImpl;\n }\n};\n\nvar restoreTarget = null;\nvar restoreQueue = null;\n\nfunction restoreStateOfTarget(target) {\n // We perform this translation at the end of the event loop so that we\n // always receive the correct fiber here\n var internalInstance = getInstanceFromNode(target);\n if (!internalInstance) {\n // Unmounted\n return;\n }\n !(fiberHostComponent && typeof fiberHostComponent.restoreControlledState === 'function') ? invariant(false, 'Fiber needs to be injected to handle a fiber target for controlled events. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n var props = getFiberCurrentPropsFromNode(internalInstance.stateNode);\n fiberHostComponent.restoreControlledState(internalInstance.stateNode, internalInstance.type, props);\n}\n\nvar injection$3 = ReactControlledComponentInjection;\n\nfunction enqueueStateRestore(target) {\n if (restoreTarget) {\n if (restoreQueue) {\n restoreQueue.push(target);\n } else {\n restoreQueue = [target];\n }\n } else {\n restoreTarget = target;\n }\n}\n\nfunction restoreStateIfNeeded() {\n if (!restoreTarget) {\n return;\n }\n var target = restoreTarget;\n var queuedTargets = restoreQueue;\n restoreTarget = null;\n restoreQueue = null;\n\n restoreStateOfTarget(target);\n if (queuedTargets) {\n for (var i = 0; i < queuedTargets.length; i++) {\n restoreStateOfTarget(queuedTargets[i]);\n }\n }\n}\n\nvar ReactControlledComponent = Object.freeze({\n\tinjection: injection$3,\n\tenqueueStateRestore: enqueueStateRestore,\n\trestoreStateIfNeeded: restoreStateIfNeeded\n});\n\n// Used as a way to call batchedUpdates when we don't have a reference to\n// the renderer. Such as when we're dispatching events or if third party\n// libraries need to call batchedUpdates. Eventually, this API will go away when\n// everything is batched by default. We'll then have a similar API to opt-out of\n// scheduled work and instead do synchronous work.\n\n// Defaults\nvar fiberBatchedUpdates = function (fn, bookkeeping) {\n return fn(bookkeeping);\n};\n\nvar isNestingBatched = false;\nfunction batchedUpdates(fn, bookkeeping) {\n if (isNestingBatched) {\n // If we are currently inside another batch, we need to wait until it\n // fully completes before restoring state. Therefore, we add the target to\n // a queue of work.\n return fiberBatchedUpdates(fn, bookkeeping);\n }\n isNestingBatched = true;\n try {\n return fiberBatchedUpdates(fn, bookkeeping);\n } finally {\n // Here we wait until all updates have propagated, which is important\n // when using controlled components within layers:\n // https://github.com/facebook/react/issues/1698\n // Then we restore state of any controlled component.\n isNestingBatched = false;\n restoreStateIfNeeded();\n }\n}\n\nvar ReactGenericBatchingInjection = {\n injectFiberBatchedUpdates: function (_batchedUpdates) {\n fiberBatchedUpdates = _batchedUpdates;\n }\n};\n\nvar injection$4 = ReactGenericBatchingInjection;\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary\n */\nvar supportedInputTypes = {\n color: true,\n date: true,\n datetime: true,\n 'datetime-local': true,\n email: true,\n month: true,\n number: true,\n password: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true\n};\n\nfunction isTextInputElement(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n\n if (nodeName === 'input') {\n return !!supportedInputTypes[elem.type];\n }\n\n if (nodeName === 'textarea') {\n return true;\n }\n\n return false;\n}\n\n/**\n * HTML nodeType values that represent the type of the node\n */\n\nvar ELEMENT_NODE = 1;\nvar TEXT_NODE = 3;\nvar COMMENT_NODE = 8;\nvar DOCUMENT_NODE = 9;\nvar DOCUMENT_FRAGMENT_NODE = 11;\n\n/**\n * Gets the target node from a native browser event by accounting for\n * inconsistencies in browser DOM APIs.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {DOMEventTarget} Target node.\n */\nfunction getEventTarget(nativeEvent) {\n var target = nativeEvent.target || nativeEvent.srcElement || window;\n\n // Normalize SVG element events #4963\n if (target.correspondingUseElement) {\n target = target.correspondingUseElement;\n }\n\n // Safari may fire events on text nodes (Node.TEXT_NODE is 3).\n // @see http://www.quirksmode.org/js/events_properties.html\n return target.nodeType === TEXT_NODE ? target.parentNode : target;\n}\n\nvar useHasFeature;\nif (ExecutionEnvironment.canUseDOM) {\n useHasFeature = document.implementation && document.implementation.hasFeature &&\n // always returns true in newer browsers as per the standard.\n // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n document.implementation.hasFeature('', '') !== true;\n}\n\n/**\n * Checks if an event is supported in the current execution environment.\n *\n * NOTE: This will not work correctly for non-generic events such as `change`,\n * `reset`, `load`, `error`, and `select`.\n *\n * Borrows from Modernizr.\n *\n * @param {string} eventNameSuffix Event name, e.g. \"click\".\n * @param {?boolean} capture Check if the capture phase is supported.\n * @return {boolean} True if the event is supported.\n * @internal\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\n */\nfunction isEventSupported(eventNameSuffix, capture) {\n if (!ExecutionEnvironment.canUseDOM || capture && !('addEventListener' in document)) {\n return false;\n }\n\n var eventName = 'on' + eventNameSuffix;\n var isSupported = eventName in document;\n\n if (!isSupported) {\n var element = document.createElement('div');\n element.setAttribute(eventName, 'return;');\n isSupported = typeof element[eventName] === 'function';\n }\n\n if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {\n // This is the only way to test support for the `wheel` event in IE9+.\n isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n }\n\n return isSupported;\n}\n\nfunction isCheckable(elem) {\n var type = elem.type;\n var nodeName = elem.nodeName;\n return nodeName && nodeName.toLowerCase() === 'input' && (type === 'checkbox' || type === 'radio');\n}\n\nfunction getTracker(node) {\n return node._valueTracker;\n}\n\nfunction detachTracker(node) {\n node._valueTracker = null;\n}\n\nfunction getValueFromNode(node) {\n var value = '';\n if (!node) {\n return value;\n }\n\n if (isCheckable(node)) {\n value = node.checked ? 'true' : 'false';\n } else {\n value = node.value;\n }\n\n return value;\n}\n\nfunction trackValueOnNode(node) {\n var valueField = isCheckable(node) ? 'checked' : 'value';\n var descriptor = Object.getOwnPropertyDescriptor(node.constructor.prototype, valueField);\n\n var currentValue = '' + node[valueField];\n\n // if someone has already defined a value or Safari, then bail\n // and don't track value will cause over reporting of changes,\n // but it's better then a hard failure\n // (needed for certain tests that spyOn input values and Safari)\n if (node.hasOwnProperty(valueField) || typeof descriptor.get !== 'function' || typeof descriptor.set !== 'function') {\n return;\n }\n\n Object.defineProperty(node, valueField, {\n enumerable: descriptor.enumerable,\n configurable: true,\n get: function () {\n return descriptor.get.call(this);\n },\n set: function (value) {\n currentValue = '' + value;\n descriptor.set.call(this, value);\n }\n });\n\n var tracker = {\n getValue: function () {\n return currentValue;\n },\n setValue: function (value) {\n currentValue = '' + value;\n },\n stopTracking: function () {\n detachTracker(node);\n delete node[valueField];\n }\n };\n return tracker;\n}\n\nfunction track(node) {\n if (getTracker(node)) {\n return;\n }\n\n // TODO: Once it's just Fiber we can move this to node._wrapperState\n node._valueTracker = trackValueOnNode(node);\n}\n\nfunction updateValueIfChanged(node) {\n if (!node) {\n return false;\n }\n\n var tracker = getTracker(node);\n // if there is no tracker at this point it's unlikely\n // that trying again will succeed\n if (!tracker) {\n return true;\n }\n\n var lastValue = tracker.getValue();\n var nextValue = getValueFromNode(node);\n if (nextValue !== lastValue) {\n tracker.setValue(nextValue);\n return true;\n }\n return false;\n}\n\nvar eventTypes$1 = {\n change: {\n phasedRegistrationNames: {\n bubbled: 'onChange',\n captured: 'onChangeCapture'\n },\n dependencies: ['topBlur', 'topChange', 'topClick', 'topFocus', 'topInput', 'topKeyDown', 'topKeyUp', 'topSelectionChange']\n }\n};\n\nfunction createAndAccumulateChangeEvent(inst, nativeEvent, target) {\n var event = SyntheticEvent$1.getPooled(eventTypes$1.change, inst, nativeEvent, target);\n event.type = 'change';\n // Flag this event loop as needing state restore.\n enqueueStateRestore(target);\n accumulateTwoPhaseDispatches(event);\n return event;\n}\n/**\n * For IE shims\n */\nvar activeElement = null;\nvar activeElementInst = null;\n\n/**\n * SECTION: handle `change` event\n */\nfunction shouldUseChangeEvent(elem) {\n var nodeName = elem.nodeName && elem.nodeName.toLowerCase();\n return nodeName === 'select' || nodeName === 'input' && elem.type === 'file';\n}\n\nfunction manualDispatchChangeEvent(nativeEvent) {\n var event = createAndAccumulateChangeEvent(activeElementInst, nativeEvent, getEventTarget(nativeEvent));\n\n // If change and propertychange bubbled, we'd just bind to it like all the\n // other events and have it go through ReactBrowserEventEmitter. Since it\n // doesn't, we manually listen for the events and so we have to enqueue and\n // process the abstract event manually.\n //\n // Batching is necessary here in order to ensure that all event handlers run\n // before the next rerender (including event handlers attached to ancestor\n // elements instead of directly on the input). Without this, controlled\n // components don't work properly in conjunction with event bubbling because\n // the component is rerendered and the value reverted before all the event\n // handlers can run. See https://github.com/facebook/react/issues/708.\n batchedUpdates(runEventInBatch, event);\n}\n\nfunction runEventInBatch(event) {\n enqueueEvents(event);\n processEventQueue(false);\n}\n\nfunction getInstIfValueChanged(targetInst) {\n var targetNode = getNodeFromInstance$1(targetInst);\n if (updateValueIfChanged(targetNode)) {\n return targetInst;\n }\n}\n\nfunction getTargetInstForChangeEvent(topLevelType, targetInst) {\n if (topLevelType === 'topChange') {\n return targetInst;\n }\n}\n\n/**\n * SECTION: handle `input` event\n */\nvar isInputEventSupported = false;\nif (ExecutionEnvironment.canUseDOM) {\n // IE9 claims to support the input event but fails to trigger it when\n // deleting text, so we ignore its input events.\n isInputEventSupported = isEventSupported('input') && (!document.documentMode || document.documentMode > 9);\n}\n\n/**\n * (For IE <=9) Starts tracking propertychange events on the passed-in element\n * and override the value property so that we can distinguish user events from\n * value changes in JS.\n */\nfunction startWatchingForValueChange(target, targetInst) {\n activeElement = target;\n activeElementInst = targetInst;\n activeElement.attachEvent('onpropertychange', handlePropertyChange);\n}\n\n/**\n * (For IE <=9) Removes the event listeners from the currently-tracked element,\n * if any exists.\n */\nfunction stopWatchingForValueChange() {\n if (!activeElement) {\n return;\n }\n activeElement.detachEvent('onpropertychange', handlePropertyChange);\n activeElement = null;\n activeElementInst = null;\n}\n\n/**\n * (For IE <=9) Handles a propertychange event, sending a `change` event if\n * the value of the active element has changed.\n */\nfunction handlePropertyChange(nativeEvent) {\n if (nativeEvent.propertyName !== 'value') {\n return;\n }\n if (getInstIfValueChanged(activeElementInst)) {\n manualDispatchChangeEvent(nativeEvent);\n }\n}\n\nfunction handleEventsForInputEventPolyfill(topLevelType, target, targetInst) {\n if (topLevelType === 'topFocus') {\n // In IE9, propertychange fires for most input events but is buggy and\n // doesn't fire when text is deleted, but conveniently, selectionchange\n // appears to fire in all of the remaining cases so we catch those and\n // forward the event if the value has changed\n // In either case, we don't want to call the event handler if the value\n // is changed from JS so we redefine a setter for `.value` that updates\n // our activeElementValue variable, allowing us to ignore those changes\n //\n // stopWatching() should be a noop here but we call it just in case we\n // missed a blur event somehow.\n stopWatchingForValueChange();\n startWatchingForValueChange(target, targetInst);\n } else if (topLevelType === 'topBlur') {\n stopWatchingForValueChange();\n }\n}\n\n// For IE8 and IE9.\nfunction getTargetInstForInputEventPolyfill(topLevelType, targetInst) {\n if (topLevelType === 'topSelectionChange' || topLevelType === 'topKeyUp' || topLevelType === 'topKeyDown') {\n // On the selectionchange event, the target is just document which isn't\n // helpful for us so just check activeElement instead.\n //\n // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire\n // propertychange on the first input event after setting `value` from a\n // script and fires only keydown, keypress, keyup. Catching keyup usually\n // gets it and catching keydown lets us fire an event for the first\n // keystroke if user does a key repeat (it'll be a little delayed: right\n // before the second keystroke). Other input methods (e.g., paste) seem to\n // fire selectionchange normally.\n return getInstIfValueChanged(activeElementInst);\n }\n}\n\n/**\n * SECTION: handle `click` event\n */\nfunction shouldUseClickEvent(elem) {\n // Use the `click` event to detect changes to checkbox and radio inputs.\n // This approach works across all browsers, whereas `change` does not fire\n // until `blur` in IE8.\n var nodeName = elem.nodeName;\n return nodeName && nodeName.toLowerCase() === 'input' && (elem.type === 'checkbox' || elem.type === 'radio');\n}\n\nfunction getTargetInstForClickEvent(topLevelType, targetInst) {\n if (topLevelType === 'topClick') {\n return getInstIfValueChanged(targetInst);\n }\n}\n\nfunction getTargetInstForInputOrChangeEvent(topLevelType, targetInst) {\n if (topLevelType === 'topInput' || topLevelType === 'topChange') {\n return getInstIfValueChanged(targetInst);\n }\n}\n\nfunction handleControlledInputBlur(inst, node) {\n // TODO: In IE, inst is occasionally null. Why?\n if (inst == null) {\n return;\n }\n\n // Fiber and ReactDOM keep wrapper state in separate places\n var state = inst._wrapperState || node._wrapperState;\n\n if (!state || !state.controlled || node.type !== 'number') {\n return;\n }\n\n // If controlled, assign the value attribute to the current value on blur\n var value = '' + node.value;\n if (node.getAttribute('value') !== value) {\n node.setAttribute('value', value);\n }\n}\n\n/**\n * This plugin creates an `onChange` event that normalizes change events\n * across form elements. This event fires at a time when it's possible to\n * change the element's value without seeing a flicker.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - select\n */\nvar ChangeEventPlugin = {\n eventTypes: eventTypes$1,\n\n _isInputEventSupported: isInputEventSupported,\n\n extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n var targetNode = targetInst ? getNodeFromInstance$1(targetInst) : window;\n\n var getTargetInstFunc, handleEventFunc;\n if (shouldUseChangeEvent(targetNode)) {\n getTargetInstFunc = getTargetInstForChangeEvent;\n } else if (isTextInputElement(targetNode)) {\n if (isInputEventSupported) {\n getTargetInstFunc = getTargetInstForInputOrChangeEvent;\n } else {\n getTargetInstFunc = getTargetInstForInputEventPolyfill;\n handleEventFunc = handleEventsForInputEventPolyfill;\n }\n } else if (shouldUseClickEvent(targetNode)) {\n getTargetInstFunc = getTargetInstForClickEvent;\n }\n\n if (getTargetInstFunc) {\n var inst = getTargetInstFunc(topLevelType, targetInst);\n if (inst) {\n var event = createAndAccumulateChangeEvent(inst, nativeEvent, nativeEventTarget);\n return event;\n }\n }\n\n if (handleEventFunc) {\n handleEventFunc(topLevelType, targetNode, targetInst);\n }\n\n // When blurring, set the value attribute for number inputs\n if (topLevelType === 'topBlur') {\n handleControlledInputBlur(targetInst, targetNode);\n }\n }\n};\n\n/**\n * Module that is injectable into `EventPluginHub`, that specifies a\n * deterministic ordering of `EventPlugin`s. A convenient way to reason about\n * plugins, without having to package every one of them. This is better than\n * having plugins be ordered in the same order that they are injected because\n * that ordering would be influenced by the packaging order.\n * `ResponderEventPlugin` must occur before `SimpleEventPlugin` so that\n * preventing default on events is convenient in `SimpleEventPlugin` handlers.\n */\nvar DOMEventPluginOrder = ['ResponderEventPlugin', 'SimpleEventPlugin', 'TapEventPlugin', 'EnterLeaveEventPlugin', 'ChangeEventPlugin', 'SelectEventPlugin', 'BeforeInputEventPlugin'];\n\n/**\n * @interface UIEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar UIEventInterface = {\n view: null,\n detail: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticEvent}\n */\nfunction SyntheticUIEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n return SyntheticEvent$1.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent$1.augmentClass(SyntheticUIEvent, UIEventInterface);\n\n/**\n * Translation from modifier key to the associated property in the event.\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers\n */\n\nvar modifierKeyToProp = {\n Alt: 'altKey',\n Control: 'ctrlKey',\n Meta: 'metaKey',\n Shift: 'shiftKey'\n};\n\n// IE8 does not implement getModifierState so we simply map it to the only\n// modifier keys exposed by the event itself, does not support Lock-keys.\n// Currently, all major browsers except Chrome seems to support Lock-keys.\nfunction modifierStateGetter(keyArg) {\n var syntheticEvent = this;\n var nativeEvent = syntheticEvent.nativeEvent;\n if (nativeEvent.getModifierState) {\n return nativeEvent.getModifierState(keyArg);\n }\n var keyProp = modifierKeyToProp[keyArg];\n return keyProp ? !!nativeEvent[keyProp] : false;\n}\n\nfunction getEventModifierState(nativeEvent) {\n return modifierStateGetter;\n}\n\n/**\n * @interface MouseEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar MouseEventInterface = {\n screenX: null,\n screenY: null,\n clientX: null,\n clientY: null,\n pageX: null,\n pageY: null,\n ctrlKey: null,\n shiftKey: null,\n altKey: null,\n metaKey: null,\n getModifierState: getEventModifierState,\n button: null,\n buttons: null,\n relatedTarget: function (event) {\n return event.relatedTarget || (event.fromElement === event.srcElement ? event.toElement : event.fromElement);\n }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticMouseEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticMouseEvent, MouseEventInterface);\n\nvar eventTypes$2 = {\n mouseEnter: {\n registrationName: 'onMouseEnter',\n dependencies: ['topMouseOut', 'topMouseOver']\n },\n mouseLeave: {\n registrationName: 'onMouseLeave',\n dependencies: ['topMouseOut', 'topMouseOver']\n }\n};\n\nvar EnterLeaveEventPlugin = {\n eventTypes: eventTypes$2,\n\n /**\n * For almost every interaction we care about, there will be both a top-level\n * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that\n * we do not extract duplicate events. However, moving the mouse into the\n * browser from outside will not fire a `mouseout` event. In this case, we use\n * the `mouseover` top-level event.\n */\n extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n if (topLevelType === 'topMouseOver' && (nativeEvent.relatedTarget || nativeEvent.fromElement)) {\n return null;\n }\n if (topLevelType !== 'topMouseOut' && topLevelType !== 'topMouseOver') {\n // Must not be a mouse in or mouse out - ignoring.\n return null;\n }\n\n var win;\n if (nativeEventTarget.window === nativeEventTarget) {\n // `nativeEventTarget` is probably a window object.\n win = nativeEventTarget;\n } else {\n // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\n var doc = nativeEventTarget.ownerDocument;\n if (doc) {\n win = doc.defaultView || doc.parentWindow;\n } else {\n win = window;\n }\n }\n\n var from;\n var to;\n if (topLevelType === 'topMouseOut') {\n from = targetInst;\n var related = nativeEvent.relatedTarget || nativeEvent.toElement;\n to = related ? getClosestInstanceFromNode(related) : null;\n } else {\n // Moving to a node from outside the window.\n from = null;\n to = targetInst;\n }\n\n if (from === to) {\n // Nothing pertains to our managed components.\n return null;\n }\n\n var fromNode = from == null ? win : getNodeFromInstance$1(from);\n var toNode = to == null ? win : getNodeFromInstance$1(to);\n\n var leave = SyntheticMouseEvent.getPooled(eventTypes$2.mouseLeave, from, nativeEvent, nativeEventTarget);\n leave.type = 'mouseleave';\n leave.target = fromNode;\n leave.relatedTarget = toNode;\n\n var enter = SyntheticMouseEvent.getPooled(eventTypes$2.mouseEnter, to, nativeEvent, nativeEventTarget);\n enter.type = 'mouseenter';\n enter.target = toNode;\n enter.relatedTarget = fromNode;\n\n accumulateEnterLeaveDispatches(leave, enter, from, to);\n\n return [leave, enter];\n }\n};\n\n/**\n * `ReactInstanceMap` maintains a mapping from a public facing stateful\n * instance (key) and the internal representation (value). This allows public\n * methods to accept the user facing instance as an argument and map them back\n * to internal methods.\n *\n * Note that this module is currently shared and assumed to be stateless.\n * If this becomes an actual Map, that will break.\n */\n\n/**\n * This API should be called `delete` but we'd have to make sure to always\n * transform these to strings for IE support. When this transform is fully\n * supported we can rename it.\n */\n\n\nfunction get(key) {\n return key._reactInternalFiber;\n}\n\nfunction has(key) {\n return key._reactInternalFiber !== undefined;\n}\n\nfunction set(key, value) {\n key._reactInternalFiber = value;\n}\n\nvar ReactInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nvar ReactCurrentOwner = ReactInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame = ReactInternals.ReactDebugCurrentFrame;\n\nfunction getComponentName(fiber) {\n var type = fiber.type;\n\n if (typeof type === 'string') {\n return type;\n }\n if (typeof type === 'function') {\n return type.displayName || type.name;\n }\n return null;\n}\n\n// Don't change these two values:\nvar NoEffect = 0; // 0b00000000\nvar PerformedWork = 1; // 0b00000001\n\n// You can change the rest (and add more).\nvar Placement = 2; // 0b00000010\nvar Update = 4; // 0b00000100\nvar PlacementAndUpdate = 6; // 0b00000110\nvar Deletion = 8; // 0b00001000\nvar ContentReset = 16; // 0b00010000\nvar Callback = 32; // 0b00100000\nvar Err = 64; // 0b01000000\nvar Ref = 128; // 0b10000000\n\nvar MOUNTING = 1;\nvar MOUNTED = 2;\nvar UNMOUNTED = 3;\n\nfunction isFiberMountedImpl(fiber) {\n var node = fiber;\n if (!fiber.alternate) {\n // If there is no alternate, this might be a new tree that isn't inserted\n // yet. If it is, then it will have a pending insertion effect on it.\n if ((node.effectTag & Placement) !== NoEffect) {\n return MOUNTING;\n }\n while (node['return']) {\n node = node['return'];\n if ((node.effectTag & Placement) !== NoEffect) {\n return MOUNTING;\n }\n }\n } else {\n while (node['return']) {\n node = node['return'];\n }\n }\n if (node.tag === HostRoot) {\n // TODO: Check if this was a nested HostRoot when used with\n // renderContainerIntoSubtree.\n return MOUNTED;\n }\n // If we didn't hit the root, that means that we're in an disconnected tree\n // that has been unmounted.\n return UNMOUNTED;\n}\n\nfunction isFiberMounted(fiber) {\n return isFiberMountedImpl(fiber) === MOUNTED;\n}\n\nfunction isMounted(component) {\n {\n var owner = ReactCurrentOwner.current;\n if (owner !== null && owner.tag === ClassComponent) {\n var ownerFiber = owner;\n var instance = ownerFiber.stateNode;\n warning(instance._warnedAboutRefsInRender, '%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) || 'A component');\n instance._warnedAboutRefsInRender = true;\n }\n }\n\n var fiber = get(component);\n if (!fiber) {\n return false;\n }\n return isFiberMountedImpl(fiber) === MOUNTED;\n}\n\nfunction assertIsMounted(fiber) {\n !(isFiberMountedImpl(fiber) === MOUNTED) ? invariant(false, 'Unable to find node on an unmounted component.') : void 0;\n}\n\nfunction findCurrentFiberUsingSlowPath(fiber) {\n var alternate = fiber.alternate;\n if (!alternate) {\n // If there is no alternate, then we only need to check if it is mounted.\n var state = isFiberMountedImpl(fiber);\n !(state !== UNMOUNTED) ? invariant(false, 'Unable to find node on an unmounted component.') : void 0;\n if (state === MOUNTING) {\n return null;\n }\n return fiber;\n }\n // If we have two possible branches, we'll walk backwards up to the root\n // to see what path the root points to. On the way we may hit one of the\n // special cases and we'll deal with them.\n var a = fiber;\n var b = alternate;\n while (true) {\n var parentA = a['return'];\n var parentB = parentA ? parentA.alternate : null;\n if (!parentA || !parentB) {\n // We're at the root.\n break;\n }\n\n // If both copies of the parent fiber point to the same child, we can\n // assume that the child is current. This happens when we bailout on low\n // priority: the bailed out fiber's child reuses the current child.\n if (parentA.child === parentB.child) {\n var child = parentA.child;\n while (child) {\n if (child === a) {\n // We've determined that A is the current branch.\n assertIsMounted(parentA);\n return fiber;\n }\n if (child === b) {\n // We've determined that B is the current branch.\n assertIsMounted(parentA);\n return alternate;\n }\n child = child.sibling;\n }\n // We should never have an alternate for any mounting node. So the only\n // way this could possibly happen is if this was unmounted, if at all.\n invariant(false, 'Unable to find node on an unmounted component.');\n }\n\n if (a['return'] !== b['return']) {\n // The return pointer of A and the return pointer of B point to different\n // fibers. We assume that return pointers never criss-cross, so A must\n // belong to the child set of A.return, and B must belong to the child\n // set of B.return.\n a = parentA;\n b = parentB;\n } else {\n // The return pointers point to the same fiber. We'll have to use the\n // default, slow path: scan the child sets of each parent alternate to see\n // which child belongs to which set.\n //\n // Search parent A's child set\n var didFindChild = false;\n var _child = parentA.child;\n while (_child) {\n if (_child === a) {\n didFindChild = true;\n a = parentA;\n b = parentB;\n break;\n }\n if (_child === b) {\n didFindChild = true;\n b = parentA;\n a = parentB;\n break;\n }\n _child = _child.sibling;\n }\n if (!didFindChild) {\n // Search parent B's child set\n _child = parentB.child;\n while (_child) {\n if (_child === a) {\n didFindChild = true;\n a = parentB;\n b = parentA;\n break;\n }\n if (_child === b) {\n didFindChild = true;\n b = parentB;\n a = parentA;\n break;\n }\n _child = _child.sibling;\n }\n !didFindChild ? invariant(false, 'Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue.') : void 0;\n }\n }\n\n !(a.alternate === b) ? invariant(false, 'Return fibers should always be each others\\' alternates. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n }\n // If the root is not a host container, we're in a disconnected tree. I.e.\n // unmounted.\n !(a.tag === HostRoot) ? invariant(false, 'Unable to find node on an unmounted component.') : void 0;\n if (a.stateNode.current === a) {\n // We've determined that A is the current branch.\n return fiber;\n }\n // Otherwise B has to be current branch.\n return alternate;\n}\n\nfunction findCurrentHostFiber(parent) {\n var currentParent = findCurrentFiberUsingSlowPath(parent);\n if (!currentParent) {\n return null;\n }\n\n // Next we'll drill down this component to find the first HostComponent/Text.\n var node = currentParent;\n while (true) {\n if (node.tag === HostComponent || node.tag === HostText) {\n return node;\n } else if (node.child) {\n node.child['return'] = node;\n node = node.child;\n continue;\n }\n if (node === currentParent) {\n return null;\n }\n while (!node.sibling) {\n if (!node['return'] || node['return'] === currentParent) {\n return null;\n }\n node = node['return'];\n }\n node.sibling['return'] = node['return'];\n node = node.sibling;\n }\n // Flow needs the return null here, but ESLint complains about it.\n // eslint-disable-next-line no-unreachable\n return null;\n}\n\nfunction findCurrentHostFiberWithNoPortals(parent) {\n var currentParent = findCurrentFiberUsingSlowPath(parent);\n if (!currentParent) {\n return null;\n }\n\n // Next we'll drill down this component to find the first HostComponent/Text.\n var node = currentParent;\n while (true) {\n if (node.tag === HostComponent || node.tag === HostText) {\n return node;\n } else if (node.child && node.tag !== HostPortal) {\n node.child['return'] = node;\n node = node.child;\n continue;\n }\n if (node === currentParent) {\n return null;\n }\n while (!node.sibling) {\n if (!node['return'] || node['return'] === currentParent) {\n return null;\n }\n node = node['return'];\n }\n node.sibling['return'] = node['return'];\n node = node.sibling;\n }\n // Flow needs the return null here, but ESLint complains about it.\n // eslint-disable-next-line no-unreachable\n return null;\n}\n\nvar CALLBACK_BOOKKEEPING_POOL_SIZE = 10;\nvar callbackBookkeepingPool = [];\n\n/**\n * Find the deepest React component completely containing the root of the\n * passed-in instance (for use when entire React trees are nested within each\n * other). If React trees are not nested, returns null.\n */\nfunction findRootContainerNode(inst) {\n // TODO: It may be a good idea to cache this to prevent unnecessary DOM\n // traversal, but caching is difficult to do correctly without using a\n // mutation observer to listen for all DOM changes.\n while (inst['return']) {\n inst = inst['return'];\n }\n if (inst.tag !== HostRoot) {\n // This can happen if we're in a detached tree.\n return null;\n }\n return inst.stateNode.containerInfo;\n}\n\n// Used to store ancestor hierarchy in top level callback\nfunction getTopLevelCallbackBookKeeping(topLevelType, nativeEvent, targetInst) {\n if (callbackBookkeepingPool.length) {\n var instance = callbackBookkeepingPool.pop();\n instance.topLevelType = topLevelType;\n instance.nativeEvent = nativeEvent;\n instance.targetInst = targetInst;\n return instance;\n }\n return {\n topLevelType: topLevelType,\n nativeEvent: nativeEvent,\n targetInst: targetInst,\n ancestors: []\n };\n}\n\nfunction releaseTopLevelCallbackBookKeeping(instance) {\n instance.topLevelType = null;\n instance.nativeEvent = null;\n instance.targetInst = null;\n instance.ancestors.length = 0;\n if (callbackBookkeepingPool.length < CALLBACK_BOOKKEEPING_POOL_SIZE) {\n callbackBookkeepingPool.push(instance);\n }\n}\n\nfunction handleTopLevelImpl(bookKeeping) {\n var targetInst = bookKeeping.targetInst;\n\n // Loop through the hierarchy, in case there's any nested components.\n // It's important that we build the array of ancestors before calling any\n // event handlers, because event handlers can modify the DOM, leading to\n // inconsistencies with ReactMount's node cache. See #1105.\n var ancestor = targetInst;\n do {\n if (!ancestor) {\n bookKeeping.ancestors.push(ancestor);\n break;\n }\n var root = findRootContainerNode(ancestor);\n if (!root) {\n break;\n }\n bookKeeping.ancestors.push(ancestor);\n ancestor = getClosestInstanceFromNode(root);\n } while (ancestor);\n\n for (var i = 0; i < bookKeeping.ancestors.length; i++) {\n targetInst = bookKeeping.ancestors[i];\n _handleTopLevel(bookKeeping.topLevelType, targetInst, bookKeeping.nativeEvent, getEventTarget(bookKeeping.nativeEvent));\n }\n}\n\n// TODO: can we stop exporting these?\nvar _enabled = true;\nvar _handleTopLevel = void 0;\n\nfunction setHandleTopLevel(handleTopLevel) {\n _handleTopLevel = handleTopLevel;\n}\n\nfunction setEnabled(enabled) {\n _enabled = !!enabled;\n}\n\nfunction isEnabled() {\n return _enabled;\n}\n\n/**\n * Traps top-level events by using event bubbling.\n *\n * @param {string} topLevelType Record from `BrowserEventConstants`.\n * @param {string} handlerBaseName Event name (e.g. \"click\").\n * @param {object} element Element on which to attach listener.\n * @return {?object} An object with a remove function which will forcefully\n * remove the listener.\n * @internal\n */\nfunction trapBubbledEvent(topLevelType, handlerBaseName, element) {\n if (!element) {\n return null;\n }\n return EventListener.listen(element, handlerBaseName, dispatchEvent.bind(null, topLevelType));\n}\n\n/**\n * Traps a top-level event by using event capturing.\n *\n * @param {string} topLevelType Record from `BrowserEventConstants`.\n * @param {string} handlerBaseName Event name (e.g. \"click\").\n * @param {object} element Element on which to attach listener.\n * @return {?object} An object with a remove function which will forcefully\n * remove the listener.\n * @internal\n */\nfunction trapCapturedEvent(topLevelType, handlerBaseName, element) {\n if (!element) {\n return null;\n }\n return EventListener.capture(element, handlerBaseName, dispatchEvent.bind(null, topLevelType));\n}\n\nfunction dispatchEvent(topLevelType, nativeEvent) {\n if (!_enabled) {\n return;\n }\n\n var nativeEventTarget = getEventTarget(nativeEvent);\n var targetInst = getClosestInstanceFromNode(nativeEventTarget);\n if (targetInst !== null && typeof targetInst.tag === 'number' && !isFiberMounted(targetInst)) {\n // If we get an event (ex: img onload) before committing that\n // component's mount, ignore it for now (that is, treat it as if it was an\n // event on a non-React tree). We might also consider queueing events and\n // dispatching them after the mount.\n targetInst = null;\n }\n\n var bookKeeping = getTopLevelCallbackBookKeeping(topLevelType, nativeEvent, targetInst);\n\n try {\n // Event queue being processed in the same cycle allows\n // `preventDefault`.\n batchedUpdates(handleTopLevelImpl, bookKeeping);\n } finally {\n releaseTopLevelCallbackBookKeeping(bookKeeping);\n }\n}\n\nvar ReactDOMEventListener = Object.freeze({\n\tget _enabled () { return _enabled; },\n\tget _handleTopLevel () { return _handleTopLevel; },\n\tsetHandleTopLevel: setHandleTopLevel,\n\tsetEnabled: setEnabled,\n\tisEnabled: isEnabled,\n\ttrapBubbledEvent: trapBubbledEvent,\n\ttrapCapturedEvent: trapCapturedEvent,\n\tdispatchEvent: dispatchEvent\n});\n\n/**\n * Generate a mapping of standard vendor prefixes using the defined style property and event name.\n *\n * @param {string} styleProp\n * @param {string} eventName\n * @returns {object}\n */\nfunction makePrefixMap(styleProp, eventName) {\n var prefixes = {};\n\n prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n prefixes['Webkit' + styleProp] = 'webkit' + eventName;\n prefixes['Moz' + styleProp] = 'moz' + eventName;\n prefixes['ms' + styleProp] = 'MS' + eventName;\n prefixes['O' + styleProp] = 'o' + eventName.toLowerCase();\n\n return prefixes;\n}\n\n/**\n * A list of event names to a configurable list of vendor prefixes.\n */\nvar vendorPrefixes = {\n animationend: makePrefixMap('Animation', 'AnimationEnd'),\n animationiteration: makePrefixMap('Animation', 'AnimationIteration'),\n animationstart: makePrefixMap('Animation', 'AnimationStart'),\n transitionend: makePrefixMap('Transition', 'TransitionEnd')\n};\n\n/**\n * Event names that have already been detected and prefixed (if applicable).\n */\nvar prefixedEventNames = {};\n\n/**\n * Element to check for prefixes on.\n */\nvar style = {};\n\n/**\n * Bootstrap if a DOM exists.\n */\nif (ExecutionEnvironment.canUseDOM) {\n style = document.createElement('div').style;\n\n // On some platforms, in particular some releases of Android 4.x,\n // the un-prefixed \"animation\" and \"transition\" properties are defined on the\n // style object but the events that fire will still be prefixed, so we need\n // to check if the un-prefixed events are usable, and if not remove them from the map.\n if (!('AnimationEvent' in window)) {\n delete vendorPrefixes.animationend.animation;\n delete vendorPrefixes.animationiteration.animation;\n delete vendorPrefixes.animationstart.animation;\n }\n\n // Same as above\n if (!('TransitionEvent' in window)) {\n delete vendorPrefixes.transitionend.transition;\n }\n}\n\n/**\n * Attempts to determine the correct vendor prefixed event name.\n *\n * @param {string} eventName\n * @returns {string}\n */\nfunction getVendorPrefixedEventName(eventName) {\n if (prefixedEventNames[eventName]) {\n return prefixedEventNames[eventName];\n } else if (!vendorPrefixes[eventName]) {\n return eventName;\n }\n\n var prefixMap = vendorPrefixes[eventName];\n\n for (var styleProp in prefixMap) {\n if (prefixMap.hasOwnProperty(styleProp) && styleProp in style) {\n return prefixedEventNames[eventName] = prefixMap[styleProp];\n }\n }\n\n return '';\n}\n\n/**\n * Types of raw signals from the browser caught at the top level.\n *\n * For events like 'submit' which don't consistently bubble (which we\n * trap at a lower node than `document`), binding at `document` would\n * cause duplicate events so we don't include them here.\n */\nvar topLevelTypes$1 = {\n topAbort: 'abort',\n topAnimationEnd: getVendorPrefixedEventName('animationend') || 'animationend',\n topAnimationIteration: getVendorPrefixedEventName('animationiteration') || 'animationiteration',\n topAnimationStart: getVendorPrefixedEventName('animationstart') || 'animationstart',\n topBlur: 'blur',\n topCancel: 'cancel',\n topCanPlay: 'canplay',\n topCanPlayThrough: 'canplaythrough',\n topChange: 'change',\n topClick: 'click',\n topClose: 'close',\n topCompositionEnd: 'compositionend',\n topCompositionStart: 'compositionstart',\n topCompositionUpdate: 'compositionupdate',\n topContextMenu: 'contextmenu',\n topCopy: 'copy',\n topCut: 'cut',\n topDoubleClick: 'dblclick',\n topDrag: 'drag',\n topDragEnd: 'dragend',\n topDragEnter: 'dragenter',\n topDragExit: 'dragexit',\n topDragLeave: 'dragleave',\n topDragOver: 'dragover',\n topDragStart: 'dragstart',\n topDrop: 'drop',\n topDurationChange: 'durationchange',\n topEmptied: 'emptied',\n topEncrypted: 'encrypted',\n topEnded: 'ended',\n topError: 'error',\n topFocus: 'focus',\n topInput: 'input',\n topKeyDown: 'keydown',\n topKeyPress: 'keypress',\n topKeyUp: 'keyup',\n topLoadedData: 'loadeddata',\n topLoad: 'load',\n topLoadedMetadata: 'loadedmetadata',\n topLoadStart: 'loadstart',\n topMouseDown: 'mousedown',\n topMouseMove: 'mousemove',\n topMouseOut: 'mouseout',\n topMouseOver: 'mouseover',\n topMouseUp: 'mouseup',\n topPaste: 'paste',\n topPause: 'pause',\n topPlay: 'play',\n topPlaying: 'playing',\n topProgress: 'progress',\n topRateChange: 'ratechange',\n topScroll: 'scroll',\n topSeeked: 'seeked',\n topSeeking: 'seeking',\n topSelectionChange: 'selectionchange',\n topStalled: 'stalled',\n topSuspend: 'suspend',\n topTextInput: 'textInput',\n topTimeUpdate: 'timeupdate',\n topToggle: 'toggle',\n topTouchCancel: 'touchcancel',\n topTouchEnd: 'touchend',\n topTouchMove: 'touchmove',\n topTouchStart: 'touchstart',\n topTransitionEnd: getVendorPrefixedEventName('transitionend') || 'transitionend',\n topVolumeChange: 'volumechange',\n topWaiting: 'waiting',\n topWheel: 'wheel'\n};\n\nvar BrowserEventConstants = {\n topLevelTypes: topLevelTypes$1\n};\n\nfunction runEventQueueInBatch(events) {\n enqueueEvents(events);\n processEventQueue(false);\n}\n\n/**\n * Streams a fired top-level event to `EventPluginHub` where plugins have the\n * opportunity to create `ReactEvent`s to be dispatched.\n */\nfunction handleTopLevel(topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n var events = extractEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget);\n runEventQueueInBatch(events);\n}\n\nvar topLevelTypes = BrowserEventConstants.topLevelTypes;\n\n/**\n * Summary of `ReactBrowserEventEmitter` event handling:\n *\n * - Top-level delegation is used to trap most native browser events. This\n * may only occur in the main thread and is the responsibility of\n * ReactDOMEventListener, which is injected and can therefore support\n * pluggable event sources. This is the only work that occurs in the main\n * thread.\n *\n * - We normalize and de-duplicate events to account for browser quirks. This\n * may be done in the worker thread.\n *\n * - Forward these native events (with the associated top-level type used to\n * trap it) to `EventPluginHub`, which in turn will ask plugins if they want\n * to extract any synthetic events.\n *\n * - The `EventPluginHub` will then process each event by annotating them with\n * \"dispatches\", a sequence of listeners and IDs that care about that event.\n *\n * - The `EventPluginHub` then dispatches the events.\n *\n * Overview of React and the event system:\n *\n * +------------+ .\n * | DOM | .\n * +------------+ .\n * | .\n * v .\n * +------------+ .\n * | ReactEvent | .\n * | Listener | .\n * +------------+ . +-----------+\n * | . +--------+|SimpleEvent|\n * | . | |Plugin |\n * +-----|------+ . v +-----------+\n * | | | . +--------------+ +------------+\n * | +-----------.--->|EventPluginHub| | Event |\n * | | . | | +-----------+ | Propagators|\n * | ReactEvent | . | | |TapEvent | |------------|\n * | Emitter | . | |<---+|Plugin | |other plugin|\n * | | . | | +-----------+ | utilities |\n * | +-----------.--->| | +------------+\n * | | | . +--------------+\n * +-----|------+ . ^ +-----------+\n * | . | |Enter/Leave|\n * + . +-------+|Plugin |\n * +-------------+ . +-----------+\n * | application | .\n * |-------------| .\n * | | .\n * | | .\n * +-------------+ .\n * .\n * React Core . General Purpose Event Plugin System\n */\n\nvar alreadyListeningTo = {};\nvar reactTopListenersCounter = 0;\n\n/**\n * To ensure no conflicts with other potential React instances on the page\n */\nvar topListenersIDKey = '_reactListenersID' + ('' + Math.random()).slice(2);\n\nfunction getListeningForDocument(mountAt) {\n // In IE8, `mountAt` is a host object and doesn't have `hasOwnProperty`\n // directly.\n if (!Object.prototype.hasOwnProperty.call(mountAt, topListenersIDKey)) {\n mountAt[topListenersIDKey] = reactTopListenersCounter++;\n alreadyListeningTo[mountAt[topListenersIDKey]] = {};\n }\n return alreadyListeningTo[mountAt[topListenersIDKey]];\n}\n\n/**\n * We listen for bubbled touch events on the document object.\n *\n * Firefox v8.01 (and possibly others) exhibited strange behavior when\n * mounting `onmousemove` events at some node that was not the document\n * element. The symptoms were that if your mouse is not moving over something\n * contained within that mount point (for example on the background) the\n * top-level listeners for `onmousemove` won't be called. However, if you\n * register the `mousemove` on the document object, then it will of course\n * catch all `mousemove`s. This along with iOS quirks, justifies restricting\n * top-level listeners to the document object only, at least for these\n * movement types of events and possibly all events.\n *\n * @see http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html\n *\n * Also, `keyup`/`keypress`/`keydown` do not bubble to the window on IE, but\n * they bubble to document.\n *\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n * @param {object} contentDocumentHandle Document which owns the container\n */\nfunction listenTo(registrationName, contentDocumentHandle) {\n var mountAt = contentDocumentHandle;\n var isListening = getListeningForDocument(mountAt);\n var dependencies = registrationNameDependencies[registrationName];\n\n for (var i = 0; i < dependencies.length; i++) {\n var dependency = dependencies[i];\n if (!(isListening.hasOwnProperty(dependency) && isListening[dependency])) {\n if (dependency === 'topScroll') {\n trapCapturedEvent('topScroll', 'scroll', mountAt);\n } else if (dependency === 'topFocus' || dependency === 'topBlur') {\n trapCapturedEvent('topFocus', 'focus', mountAt);\n trapCapturedEvent('topBlur', 'blur', mountAt);\n\n // to make sure blur and focus event listeners are only attached once\n isListening.topBlur = true;\n isListening.topFocus = true;\n } else if (dependency === 'topCancel') {\n if (isEventSupported('cancel', true)) {\n trapCapturedEvent('topCancel', 'cancel', mountAt);\n }\n isListening.topCancel = true;\n } else if (dependency === 'topClose') {\n if (isEventSupported('close', true)) {\n trapCapturedEvent('topClose', 'close', mountAt);\n }\n isListening.topClose = true;\n } else if (topLevelTypes.hasOwnProperty(dependency)) {\n trapBubbledEvent(dependency, topLevelTypes[dependency], mountAt);\n }\n\n isListening[dependency] = true;\n }\n }\n}\n\nfunction isListeningToAllDependencies(registrationName, mountAt) {\n var isListening = getListeningForDocument(mountAt);\n var dependencies = registrationNameDependencies[registrationName];\n for (var i = 0; i < dependencies.length; i++) {\n var dependency = dependencies[i];\n if (!(isListening.hasOwnProperty(dependency) && isListening[dependency])) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Given any node return the first leaf node without children.\n *\n * @param {DOMElement|DOMTextNode} node\n * @return {DOMElement|DOMTextNode}\n */\nfunction getLeafNode(node) {\n while (node && node.firstChild) {\n node = node.firstChild;\n }\n return node;\n}\n\n/**\n * Get the next sibling within a container. This will walk up the\n * DOM if a node's siblings have been exhausted.\n *\n * @param {DOMElement|DOMTextNode} node\n * @return {?DOMElement|DOMTextNode}\n */\nfunction getSiblingNode(node) {\n while (node) {\n if (node.nextSibling) {\n return node.nextSibling;\n }\n node = node.parentNode;\n }\n}\n\n/**\n * Get object describing the nodes which contain characters at offset.\n *\n * @param {DOMElement|DOMTextNode} root\n * @param {number} offset\n * @return {?object}\n */\nfunction getNodeForCharacterOffset(root, offset) {\n var node = getLeafNode(root);\n var nodeStart = 0;\n var nodeEnd = 0;\n\n while (node) {\n if (node.nodeType === TEXT_NODE) {\n nodeEnd = nodeStart + node.textContent.length;\n\n if (nodeStart <= offset && nodeEnd >= offset) {\n return {\n node: node,\n offset: offset - nodeStart\n };\n }\n\n nodeStart = nodeEnd;\n }\n\n node = getLeafNode(getSiblingNode(node));\n }\n}\n\n/**\n * @param {DOMElement} outerNode\n * @return {?object}\n */\nfunction getOffsets(outerNode) {\n var selection = window.getSelection && window.getSelection();\n\n if (!selection || selection.rangeCount === 0) {\n return null;\n }\n\n var anchorNode = selection.anchorNode,\n anchorOffset = selection.anchorOffset,\n focusNode$$1 = selection.focusNode,\n focusOffset = selection.focusOffset;\n\n // In Firefox, anchorNode and focusNode can be \"anonymous divs\", e.g. the\n // up/down buttons on an . Anonymous divs do not seem to\n // expose properties, triggering a \"Permission denied error\" if any of its\n // properties are accessed. The only seemingly possible way to avoid erroring\n // is to access a property that typically works for non-anonymous divs and\n // catch any error that may otherwise arise. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=208427\n\n try {\n /* eslint-disable no-unused-expressions */\n anchorNode.nodeType;\n focusNode$$1.nodeType;\n /* eslint-enable no-unused-expressions */\n } catch (e) {\n return null;\n }\n\n return getModernOffsetsFromPoints(outerNode, anchorNode, anchorOffset, focusNode$$1, focusOffset);\n}\n\n/**\n * Returns {start, end} where `start` is the character/codepoint index of\n * (anchorNode, anchorOffset) within the textContent of `outerNode`, and\n * `end` is the index of (focusNode, focusOffset).\n *\n * Returns null if you pass in garbage input but we should probably just crash.\n *\n * Exported only for testing.\n */\nfunction getModernOffsetsFromPoints(outerNode, anchorNode, anchorOffset, focusNode$$1, focusOffset) {\n var length = 0;\n var start = -1;\n var end = -1;\n var indexWithinAnchor = 0;\n var indexWithinFocus = 0;\n var node = outerNode;\n var parentNode = null;\n\n outer: while (true) {\n var next = null;\n\n while (true) {\n if (node === anchorNode && (anchorOffset === 0 || node.nodeType === TEXT_NODE)) {\n start = length + anchorOffset;\n }\n if (node === focusNode$$1 && (focusOffset === 0 || node.nodeType === TEXT_NODE)) {\n end = length + focusOffset;\n }\n\n if (node.nodeType === TEXT_NODE) {\n length += node.nodeValue.length;\n }\n\n if ((next = node.firstChild) === null) {\n break;\n }\n // Moving from `node` to its first child `next`.\n parentNode = node;\n node = next;\n }\n\n while (true) {\n if (node === outerNode) {\n // If `outerNode` has children, this is always the second time visiting\n // it. If it has no children, this is still the first loop, and the only\n // valid selection is anchorNode and focusNode both equal to this node\n // and both offsets 0, in which case we will have handled above.\n break outer;\n }\n if (parentNode === anchorNode && ++indexWithinAnchor === anchorOffset) {\n start = length;\n }\n if (parentNode === focusNode$$1 && ++indexWithinFocus === focusOffset) {\n end = length;\n }\n if ((next = node.nextSibling) !== null) {\n break;\n }\n node = parentNode;\n parentNode = node.parentNode;\n }\n\n // Moving from `node` to its next sibling `next`.\n node = next;\n }\n\n if (start === -1 || end === -1) {\n // This should never happen. (Would happen if the anchor/focus nodes aren't\n // actually inside the passed-in node.)\n return null;\n }\n\n return {\n start: start,\n end: end\n };\n}\n\n/**\n * In modern non-IE browsers, we can support both forward and backward\n * selections.\n *\n * Note: IE10+ supports the Selection object, but it does not support\n * the `extend` method, which means that even in modern IE, it's not possible\n * to programmatically create a backward selection. Thus, for all IE\n * versions, we use the old IE API to create our selections.\n *\n * @param {DOMElement|DOMTextNode} node\n * @param {object} offsets\n */\nfunction setOffsets(node, offsets) {\n if (!window.getSelection) {\n return;\n }\n\n var selection = window.getSelection();\n var length = node[getTextContentAccessor()].length;\n var start = Math.min(offsets.start, length);\n var end = offsets.end === undefined ? start : Math.min(offsets.end, length);\n\n // IE 11 uses modern selection, but doesn't support the extend method.\n // Flip backward selections, so we can set with a single range.\n if (!selection.extend && start > end) {\n var temp = end;\n end = start;\n start = temp;\n }\n\n var startMarker = getNodeForCharacterOffset(node, start);\n var endMarker = getNodeForCharacterOffset(node, end);\n\n if (startMarker && endMarker) {\n if (selection.rangeCount === 1 && selection.anchorNode === startMarker.node && selection.anchorOffset === startMarker.offset && selection.focusNode === endMarker.node && selection.focusOffset === endMarker.offset) {\n return;\n }\n var range = document.createRange();\n range.setStart(startMarker.node, startMarker.offset);\n selection.removeAllRanges();\n\n if (start > end) {\n selection.addRange(range);\n selection.extend(endMarker.node, endMarker.offset);\n } else {\n range.setEnd(endMarker.node, endMarker.offset);\n selection.addRange(range);\n }\n }\n}\n\nfunction isInDocument(node) {\n return containsNode(document.documentElement, node);\n}\n\n/**\n * @ReactInputSelection: React input selection module. Based on Selection.js,\n * but modified to be suitable for react and has a couple of bug fixes (doesn't\n * assume buttons have range selections allowed).\n * Input selection module for React.\n */\n\nfunction hasSelectionCapabilities(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return nodeName && (nodeName === 'input' && elem.type === 'text' || nodeName === 'textarea' || elem.contentEditable === 'true');\n}\n\nfunction getSelectionInformation() {\n var focusedElem = getActiveElement();\n return {\n focusedElem: focusedElem,\n selectionRange: hasSelectionCapabilities(focusedElem) ? getSelection$1(focusedElem) : null\n };\n}\n\n/**\n * @restoreSelection: If any selection information was potentially lost,\n * restore it. This is useful when performing operations that could remove dom\n * nodes and place them back in, resulting in focus being lost.\n */\nfunction restoreSelection(priorSelectionInformation) {\n var curFocusedElem = getActiveElement();\n var priorFocusedElem = priorSelectionInformation.focusedElem;\n var priorSelectionRange = priorSelectionInformation.selectionRange;\n if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) {\n if (hasSelectionCapabilities(priorFocusedElem)) {\n setSelection(priorFocusedElem, priorSelectionRange);\n }\n\n // Focusing a node can change the scroll position, which is undesirable\n var ancestors = [];\n var ancestor = priorFocusedElem;\n while (ancestor = ancestor.parentNode) {\n if (ancestor.nodeType === ELEMENT_NODE) {\n ancestors.push({\n element: ancestor,\n left: ancestor.scrollLeft,\n top: ancestor.scrollTop\n });\n }\n }\n\n focusNode(priorFocusedElem);\n\n for (var i = 0; i < ancestors.length; i++) {\n var info = ancestors[i];\n info.element.scrollLeft = info.left;\n info.element.scrollTop = info.top;\n }\n }\n}\n\n/**\n * @getSelection: Gets the selection bounds of a focused textarea, input or\n * contentEditable node.\n * -@input: Look up selection bounds of this input\n * -@return {start: selectionStart, end: selectionEnd}\n */\nfunction getSelection$1(input) {\n var selection = void 0;\n\n if ('selectionStart' in input) {\n // Modern browser with input or textarea.\n selection = {\n start: input.selectionStart,\n end: input.selectionEnd\n };\n } else {\n // Content editable or old IE textarea.\n selection = getOffsets(input);\n }\n\n return selection || { start: 0, end: 0 };\n}\n\n/**\n * @setSelection: Sets the selection bounds of a textarea or input and focuses\n * the input.\n * -@input Set selection bounds of this input or textarea\n * -@offsets Object of same form that is returned from get*\n */\nfunction setSelection(input, offsets) {\n var start = offsets.start,\n end = offsets.end;\n\n if (end === undefined) {\n end = start;\n }\n\n if ('selectionStart' in input) {\n input.selectionStart = start;\n input.selectionEnd = Math.min(end, input.value.length);\n } else {\n setOffsets(input, offsets);\n }\n}\n\nvar skipSelectionChangeEvent = ExecutionEnvironment.canUseDOM && 'documentMode' in document && document.documentMode <= 11;\n\nvar eventTypes$3 = {\n select: {\n phasedRegistrationNames: {\n bubbled: 'onSelect',\n captured: 'onSelectCapture'\n },\n dependencies: ['topBlur', 'topContextMenu', 'topFocus', 'topKeyDown', 'topKeyUp', 'topMouseDown', 'topMouseUp', 'topSelectionChange']\n }\n};\n\nvar activeElement$1 = null;\nvar activeElementInst$1 = null;\nvar lastSelection = null;\nvar mouseDown = false;\n\n/**\n * Get an object which is a unique representation of the current selection.\n *\n * The return value will not be consistent across nodes or browsers, but\n * two identical selections on the same node will return identical objects.\n *\n * @param {DOMElement} node\n * @return {object}\n */\nfunction getSelection(node) {\n if ('selectionStart' in node && hasSelectionCapabilities(node)) {\n return {\n start: node.selectionStart,\n end: node.selectionEnd\n };\n } else if (window.getSelection) {\n var selection = window.getSelection();\n return {\n anchorNode: selection.anchorNode,\n anchorOffset: selection.anchorOffset,\n focusNode: selection.focusNode,\n focusOffset: selection.focusOffset\n };\n }\n}\n\n/**\n * Poll selection to see whether it's changed.\n *\n * @param {object} nativeEvent\n * @return {?SyntheticEvent}\n */\nfunction constructSelectEvent(nativeEvent, nativeEventTarget) {\n // Ensure we have the right element, and that the user is not dragging a\n // selection (this matches native `select` event behavior). In HTML5, select\n // fires only on input and textarea thus if there's no focused element we\n // won't dispatch.\n if (mouseDown || activeElement$1 == null || activeElement$1 !== getActiveElement()) {\n return null;\n }\n\n // Only fire when selection has actually changed.\n var currentSelection = getSelection(activeElement$1);\n if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) {\n lastSelection = currentSelection;\n\n var syntheticEvent = SyntheticEvent$1.getPooled(eventTypes$3.select, activeElementInst$1, nativeEvent, nativeEventTarget);\n\n syntheticEvent.type = 'select';\n syntheticEvent.target = activeElement$1;\n\n accumulateTwoPhaseDispatches(syntheticEvent);\n\n return syntheticEvent;\n }\n\n return null;\n}\n\n/**\n * This plugin creates an `onSelect` event that normalizes select events\n * across form elements.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - contentEditable\n *\n * This differs from native browser implementations in the following ways:\n * - Fires on contentEditable fields as well as inputs.\n * - Fires for collapsed selection.\n * - Fires after user input.\n */\nvar SelectEventPlugin = {\n eventTypes: eventTypes$3,\n\n extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n var doc = nativeEventTarget.window === nativeEventTarget ? nativeEventTarget.document : nativeEventTarget.nodeType === DOCUMENT_NODE ? nativeEventTarget : nativeEventTarget.ownerDocument;\n // Track whether all listeners exists for this plugin. If none exist, we do\n // not extract events. See #3639.\n if (!doc || !isListeningToAllDependencies('onSelect', doc)) {\n return null;\n }\n\n var targetNode = targetInst ? getNodeFromInstance$1(targetInst) : window;\n\n switch (topLevelType) {\n // Track the input node that has focus.\n case 'topFocus':\n if (isTextInputElement(targetNode) || targetNode.contentEditable === 'true') {\n activeElement$1 = targetNode;\n activeElementInst$1 = targetInst;\n lastSelection = null;\n }\n break;\n case 'topBlur':\n activeElement$1 = null;\n activeElementInst$1 = null;\n lastSelection = null;\n break;\n // Don't fire the event while the user is dragging. This matches the\n // semantics of the native select event.\n case 'topMouseDown':\n mouseDown = true;\n break;\n case 'topContextMenu':\n case 'topMouseUp':\n mouseDown = false;\n return constructSelectEvent(nativeEvent, nativeEventTarget);\n // Chrome and IE fire non-standard event when selection is changed (and\n // sometimes when it hasn't). IE's event fires out of order with respect\n // to key and input events on deletion, so we discard it.\n //\n // Firefox doesn't support selectionchange, so check selection status\n // after each key entry. The selection changes after keydown and before\n // keyup, but we check on keydown as well in the case of holding down a\n // key, when multiple keydown events are fired but only one keyup is.\n // This is also our approach for IE handling, for the reason above.\n case 'topSelectionChange':\n if (skipSelectionChangeEvent) {\n break;\n }\n // falls through\n case 'topKeyDown':\n case 'topKeyUp':\n return constructSelectEvent(nativeEvent, nativeEventTarget);\n }\n\n return null;\n }\n};\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/css3-animations/#AnimationEvent-interface\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AnimationEvent\n */\nvar AnimationEventInterface = {\n animationName: null,\n elapsedTime: null,\n pseudoElement: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticEvent}\n */\nfunction SyntheticAnimationEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n return SyntheticEvent$1.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent$1.augmentClass(SyntheticAnimationEvent, AnimationEventInterface);\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/clipboard-apis/\n */\nvar ClipboardEventInterface = {\n clipboardData: function (event) {\n return 'clipboardData' in event ? event.clipboardData : window.clipboardData;\n }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticEvent}\n */\nfunction SyntheticClipboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n return SyntheticEvent$1.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent$1.augmentClass(SyntheticClipboardEvent, ClipboardEventInterface);\n\n/**\n * @interface FocusEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar FocusEventInterface = {\n relatedTarget: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticFocusEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticFocusEvent, FocusEventInterface);\n\n/**\n * `charCode` represents the actual \"character code\" and is safe to use with\n * `String.fromCharCode`. As such, only keys that correspond to printable\n * characters produce a valid `charCode`, the only exception to this is Enter.\n * The Tab-key is considered non-printable and does not have a `charCode`,\n * presumably because it does not produce a tab-character in browsers.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {number} Normalized `charCode` property.\n */\nfunction getEventCharCode(nativeEvent) {\n var charCode;\n var keyCode = nativeEvent.keyCode;\n\n if ('charCode' in nativeEvent) {\n charCode = nativeEvent.charCode;\n\n // FF does not set `charCode` for the Enter-key, check against `keyCode`.\n if (charCode === 0 && keyCode === 13) {\n charCode = 13;\n }\n } else {\n // IE8 does not implement `charCode`, but `keyCode` has the correct value.\n charCode = keyCode;\n }\n\n // Some non-printable keys are reported in `charCode`/`keyCode`, discard them.\n // Must not discard the (non-)printable Enter-key.\n if (charCode >= 32 || charCode === 13) {\n return charCode;\n }\n\n return 0;\n}\n\n/**\n * Normalization of deprecated HTML5 `key` values\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\n */\nvar normalizeKey = {\n Esc: 'Escape',\n Spacebar: ' ',\n Left: 'ArrowLeft',\n Up: 'ArrowUp',\n Right: 'ArrowRight',\n Down: 'ArrowDown',\n Del: 'Delete',\n Win: 'OS',\n Menu: 'ContextMenu',\n Apps: 'ContextMenu',\n Scroll: 'ScrollLock',\n MozPrintableKey: 'Unidentified'\n};\n\n/**\n * Translation from legacy `keyCode` to HTML5 `key`\n * Only special keys supported, all others depend on keyboard layout or browser\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\n */\nvar translateToKey = {\n '8': 'Backspace',\n '9': 'Tab',\n '12': 'Clear',\n '13': 'Enter',\n '16': 'Shift',\n '17': 'Control',\n '18': 'Alt',\n '19': 'Pause',\n '20': 'CapsLock',\n '27': 'Escape',\n '32': ' ',\n '33': 'PageUp',\n '34': 'PageDown',\n '35': 'End',\n '36': 'Home',\n '37': 'ArrowLeft',\n '38': 'ArrowUp',\n '39': 'ArrowRight',\n '40': 'ArrowDown',\n '45': 'Insert',\n '46': 'Delete',\n '112': 'F1',\n '113': 'F2',\n '114': 'F3',\n '115': 'F4',\n '116': 'F5',\n '117': 'F6',\n '118': 'F7',\n '119': 'F8',\n '120': 'F9',\n '121': 'F10',\n '122': 'F11',\n '123': 'F12',\n '144': 'NumLock',\n '145': 'ScrollLock',\n '224': 'Meta'\n};\n\n/**\n * @param {object} nativeEvent Native browser event.\n * @return {string} Normalized `key` property.\n */\nfunction getEventKey(nativeEvent) {\n if (nativeEvent.key) {\n // Normalize inconsistent values reported by browsers due to\n // implementations of a working draft specification.\n\n // FireFox implements `key` but returns `MozPrintableKey` for all\n // printable characters (normalized to `Unidentified`), ignore it.\n var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n if (key !== 'Unidentified') {\n return key;\n }\n }\n\n // Browser does not implement `key`, polyfill as much of it as we can.\n if (nativeEvent.type === 'keypress') {\n var charCode = getEventCharCode(nativeEvent);\n\n // The enter-key is technically both printable and non-printable and can\n // thus be captured by `keypress`, no other non-printable key should.\n return charCode === 13 ? 'Enter' : String.fromCharCode(charCode);\n }\n if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') {\n // While user keyboard layout determines the actual meaning of each\n // `keyCode` value, almost all function keys have a universal value.\n return translateToKey[nativeEvent.keyCode] || 'Unidentified';\n }\n return '';\n}\n\n/**\n * @interface KeyboardEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar KeyboardEventInterface = {\n key: getEventKey,\n location: null,\n ctrlKey: null,\n shiftKey: null,\n altKey: null,\n metaKey: null,\n repeat: null,\n locale: null,\n getModifierState: getEventModifierState,\n // Legacy Interface\n charCode: function (event) {\n // `charCode` is the result of a KeyPress event and represents the value of\n // the actual printable character.\n\n // KeyPress is deprecated, but its replacement is not yet final and not\n // implemented in any major browser. Only KeyPress has charCode.\n if (event.type === 'keypress') {\n return getEventCharCode(event);\n }\n return 0;\n },\n keyCode: function (event) {\n // `keyCode` is the result of a KeyDown/Up event and represents the value of\n // physical keyboard key.\n\n // The actual meaning of the value depends on the users' keyboard layout\n // which cannot be detected. Assuming that it is a US keyboard layout\n // provides a surprisingly accurate mapping for US and European users.\n // Due to this, it is left to the user to implement at this time.\n if (event.type === 'keydown' || event.type === 'keyup') {\n return event.keyCode;\n }\n return 0;\n },\n which: function (event) {\n // `which` is an alias for either `keyCode` or `charCode` depending on the\n // type of the event.\n if (event.type === 'keypress') {\n return getEventCharCode(event);\n }\n if (event.type === 'keydown' || event.type === 'keyup') {\n return event.keyCode;\n }\n return 0;\n }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticKeyboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticKeyboardEvent, KeyboardEventInterface);\n\n/**\n * @interface DragEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar DragEventInterface = {\n dataTransfer: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticMouseEvent}\n */\nfunction SyntheticDragEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n return SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticMouseEvent.augmentClass(SyntheticDragEvent, DragEventInterface);\n\n/**\n * @interface TouchEvent\n * @see http://www.w3.org/TR/touch-events/\n */\nvar TouchEventInterface = {\n touches: null,\n targetTouches: null,\n changedTouches: null,\n altKey: null,\n metaKey: null,\n ctrlKey: null,\n shiftKey: null,\n getModifierState: getEventModifierState\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticTouchEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticTouchEvent, TouchEventInterface);\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/2009/WD-css3-transitions-20090320/#transition-events-\n * @see https://developer.mozilla.org/en-US/docs/Web/API/TransitionEvent\n */\nvar TransitionEventInterface = {\n propertyName: null,\n elapsedTime: null,\n pseudoElement: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticEvent}\n */\nfunction SyntheticTransitionEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n return SyntheticEvent$1.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent$1.augmentClass(SyntheticTransitionEvent, TransitionEventInterface);\n\n/**\n * @interface WheelEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar WheelEventInterface = {\n deltaX: function (event) {\n return 'deltaX' in event ? event.deltaX : // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive).\n 'wheelDeltaX' in event ? -event.wheelDeltaX : 0;\n },\n deltaY: function (event) {\n return 'deltaY' in event ? event.deltaY : // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive).\n 'wheelDeltaY' in event ? -event.wheelDeltaY : // Fallback to `wheelDelta` for IE<9 and normalize (down is positive).\n 'wheelDelta' in event ? -event.wheelDelta : 0;\n },\n deltaZ: null,\n\n // Browsers without \"deltaMode\" is reporting in raw wheel delta where one\n // notch on the scroll is always +/- 120, roughly equivalent to pixels.\n // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or\n // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size.\n deltaMode: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticMouseEvent}\n */\nfunction SyntheticWheelEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n return SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticMouseEvent.augmentClass(SyntheticWheelEvent, WheelEventInterface);\n\n/**\n * Turns\n * ['abort', ...]\n * into\n * eventTypes = {\n * 'abort': {\n * phasedRegistrationNames: {\n * bubbled: 'onAbort',\n * captured: 'onAbortCapture',\n * },\n * dependencies: ['topAbort'],\n * },\n * ...\n * };\n * topLevelEventsToDispatchConfig = {\n * 'topAbort': { sameConfig }\n * };\n */\nvar eventTypes$4 = {};\nvar topLevelEventsToDispatchConfig = {};\n['abort', 'animationEnd', 'animationIteration', 'animationStart', 'blur', 'cancel', 'canPlay', 'canPlayThrough', 'click', 'close', 'contextMenu', 'copy', 'cut', 'doubleClick', 'drag', 'dragEnd', 'dragEnter', 'dragExit', 'dragLeave', 'dragOver', 'dragStart', 'drop', 'durationChange', 'emptied', 'encrypted', 'ended', 'error', 'focus', 'input', 'invalid', 'keyDown', 'keyPress', 'keyUp', 'load', 'loadedData', 'loadedMetadata', 'loadStart', 'mouseDown', 'mouseMove', 'mouseOut', 'mouseOver', 'mouseUp', 'paste', 'pause', 'play', 'playing', 'progress', 'rateChange', 'reset', 'scroll', 'seeked', 'seeking', 'stalled', 'submit', 'suspend', 'timeUpdate', 'toggle', 'touchCancel', 'touchEnd', 'touchMove', 'touchStart', 'transitionEnd', 'volumeChange', 'waiting', 'wheel'].forEach(function (event) {\n var capitalizedEvent = event[0].toUpperCase() + event.slice(1);\n var onEvent = 'on' + capitalizedEvent;\n var topEvent = 'top' + capitalizedEvent;\n\n var type = {\n phasedRegistrationNames: {\n bubbled: onEvent,\n captured: onEvent + 'Capture'\n },\n dependencies: [topEvent]\n };\n eventTypes$4[event] = type;\n topLevelEventsToDispatchConfig[topEvent] = type;\n});\n\n// Only used in DEV for exhaustiveness validation.\nvar knownHTMLTopLevelTypes = ['topAbort', 'topCancel', 'topCanPlay', 'topCanPlayThrough', 'topClose', 'topDurationChange', 'topEmptied', 'topEncrypted', 'topEnded', 'topError', 'topInput', 'topInvalid', 'topLoad', 'topLoadedData', 'topLoadedMetadata', 'topLoadStart', 'topPause', 'topPlay', 'topPlaying', 'topProgress', 'topRateChange', 'topReset', 'topSeeked', 'topSeeking', 'topStalled', 'topSubmit', 'topSuspend', 'topTimeUpdate', 'topToggle', 'topVolumeChange', 'topWaiting'];\n\nvar SimpleEventPlugin = {\n eventTypes: eventTypes$4,\n\n extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n var dispatchConfig = topLevelEventsToDispatchConfig[topLevelType];\n if (!dispatchConfig) {\n return null;\n }\n var EventConstructor;\n switch (topLevelType) {\n case 'topKeyPress':\n // Firefox creates a keypress event for function keys too. This removes\n // the unwanted keypress events. Enter is however both printable and\n // non-printable. One would expect Tab to be as well (but it isn't).\n if (getEventCharCode(nativeEvent) === 0) {\n return null;\n }\n /* falls through */\n case 'topKeyDown':\n case 'topKeyUp':\n EventConstructor = SyntheticKeyboardEvent;\n break;\n case 'topBlur':\n case 'topFocus':\n EventConstructor = SyntheticFocusEvent;\n break;\n case 'topClick':\n // Firefox creates a click event on right mouse clicks. This removes the\n // unwanted click events.\n if (nativeEvent.button === 2) {\n return null;\n }\n /* falls through */\n case 'topDoubleClick':\n case 'topMouseDown':\n case 'topMouseMove':\n case 'topMouseUp':\n // TODO: Disabled elements should not respond to mouse events\n /* falls through */\n case 'topMouseOut':\n case 'topMouseOver':\n case 'topContextMenu':\n EventConstructor = SyntheticMouseEvent;\n break;\n case 'topDrag':\n case 'topDragEnd':\n case 'topDragEnter':\n case 'topDragExit':\n case 'topDragLeave':\n case 'topDragOver':\n case 'topDragStart':\n case 'topDrop':\n EventConstructor = SyntheticDragEvent;\n break;\n case 'topTouchCancel':\n case 'topTouchEnd':\n case 'topTouchMove':\n case 'topTouchStart':\n EventConstructor = SyntheticTouchEvent;\n break;\n case 'topAnimationEnd':\n case 'topAnimationIteration':\n case 'topAnimationStart':\n EventConstructor = SyntheticAnimationEvent;\n break;\n case 'topTransitionEnd':\n EventConstructor = SyntheticTransitionEvent;\n break;\n case 'topScroll':\n EventConstructor = SyntheticUIEvent;\n break;\n case 'topWheel':\n EventConstructor = SyntheticWheelEvent;\n break;\n case 'topCopy':\n case 'topCut':\n case 'topPaste':\n EventConstructor = SyntheticClipboardEvent;\n break;\n default:\n {\n if (knownHTMLTopLevelTypes.indexOf(topLevelType) === -1) {\n warning(false, 'SimpleEventPlugin: Unhandled event type, `%s`. This warning ' + 'is likely caused by a bug in React. Please file an issue.', topLevelType);\n }\n }\n // HTML Events\n // @see http://www.w3.org/TR/html5/index.html#events-0\n EventConstructor = SyntheticEvent$1;\n break;\n }\n var event = EventConstructor.getPooled(dispatchConfig, targetInst, nativeEvent, nativeEventTarget);\n accumulateTwoPhaseDispatches(event);\n return event;\n }\n};\n\nsetHandleTopLevel(handleTopLevel);\n\n/**\n * Inject modules for resolving DOM hierarchy and plugin ordering.\n */\ninjection$1.injectEventPluginOrder(DOMEventPluginOrder);\ninjection$2.injectComponentTree(ReactDOMComponentTree);\n\n/**\n * Some important event plugins included by default (without having to require\n * them).\n */\ninjection$1.injectEventPluginsByName({\n SimpleEventPlugin: SimpleEventPlugin,\n EnterLeaveEventPlugin: EnterLeaveEventPlugin,\n ChangeEventPlugin: ChangeEventPlugin,\n SelectEventPlugin: SelectEventPlugin,\n BeforeInputEventPlugin: BeforeInputEventPlugin\n});\n\nvar enableAsyncSubtreeAPI = true;\nvar enableAsyncSchedulingByDefaultInReactDOM = false;\n// Exports ReactDOM.createRoot\nvar enableCreateRoot = false;\nvar enableUserTimingAPI = true;\n\n// Mutating mode (React DOM, React ART, React Native):\nvar enableMutatingReconciler = true;\n// Experimental noop mode (currently unused):\nvar enableNoopReconciler = false;\n// Experimental persistent mode (CS):\nvar enablePersistentReconciler = false;\n\n// Helps identify side effects in begin-phase lifecycle hooks and setState reducers:\nvar debugRenderPhaseSideEffects = false;\n\n// Only used in www builds.\n\nvar valueStack = [];\n\n{\n var fiberStack = [];\n}\n\nvar index = -1;\n\nfunction createCursor(defaultValue) {\n return {\n current: defaultValue\n };\n}\n\n\n\nfunction pop(cursor, fiber) {\n if (index < 0) {\n {\n warning(false, 'Unexpected pop.');\n }\n return;\n }\n\n {\n if (fiber !== fiberStack[index]) {\n warning(false, 'Unexpected Fiber popped.');\n }\n }\n\n cursor.current = valueStack[index];\n\n valueStack[index] = null;\n\n {\n fiberStack[index] = null;\n }\n\n index--;\n}\n\nfunction push(cursor, value, fiber) {\n index++;\n\n valueStack[index] = cursor.current;\n\n {\n fiberStack[index] = fiber;\n }\n\n cursor.current = value;\n}\n\nfunction reset$1() {\n while (index > -1) {\n valueStack[index] = null;\n\n {\n fiberStack[index] = null;\n }\n\n index--;\n }\n}\n\nvar describeComponentFrame = function (name, source, ownerName) {\n return '\\n in ' + (name || 'Unknown') + (source ? ' (at ' + source.fileName.replace(/^.*[\\\\\\/]/, '') + ':' + source.lineNumber + ')' : ownerName ? ' (created by ' + ownerName + ')' : '');\n};\n\nfunction describeFiber(fiber) {\n switch (fiber.tag) {\n case IndeterminateComponent:\n case FunctionalComponent:\n case ClassComponent:\n case HostComponent:\n var owner = fiber._debugOwner;\n var source = fiber._debugSource;\n var name = getComponentName(fiber);\n var ownerName = null;\n if (owner) {\n ownerName = getComponentName(owner);\n }\n return describeComponentFrame(name, source, ownerName);\n default:\n return '';\n }\n}\n\n// This function can only be called with a work-in-progress fiber and\n// only during begin or complete phase. Do not call it under any other\n// circumstances.\nfunction getStackAddendumByWorkInProgressFiber(workInProgress) {\n var info = '';\n var node = workInProgress;\n do {\n info += describeFiber(node);\n // Otherwise this return pointer might point to the wrong tree:\n node = node['return'];\n } while (node);\n return info;\n}\n\nfunction getCurrentFiberOwnerName() {\n {\n var fiber = ReactDebugCurrentFiber.current;\n if (fiber === null) {\n return null;\n }\n var owner = fiber._debugOwner;\n if (owner !== null && typeof owner !== 'undefined') {\n return getComponentName(owner);\n }\n }\n return null;\n}\n\nfunction getCurrentFiberStackAddendum() {\n {\n var fiber = ReactDebugCurrentFiber.current;\n if (fiber === null) {\n return null;\n }\n // Safe because if current fiber exists, we are reconciling,\n // and it is guaranteed to be the work-in-progress version.\n return getStackAddendumByWorkInProgressFiber(fiber);\n }\n return null;\n}\n\nfunction resetCurrentFiber() {\n ReactDebugCurrentFrame.getCurrentStack = null;\n ReactDebugCurrentFiber.current = null;\n ReactDebugCurrentFiber.phase = null;\n}\n\nfunction setCurrentFiber(fiber) {\n ReactDebugCurrentFrame.getCurrentStack = getCurrentFiberStackAddendum;\n ReactDebugCurrentFiber.current = fiber;\n ReactDebugCurrentFiber.phase = null;\n}\n\nfunction setCurrentPhase(phase) {\n ReactDebugCurrentFiber.phase = phase;\n}\n\nvar ReactDebugCurrentFiber = {\n current: null,\n phase: null,\n resetCurrentFiber: resetCurrentFiber,\n setCurrentFiber: setCurrentFiber,\n setCurrentPhase: setCurrentPhase,\n getCurrentFiberOwnerName: getCurrentFiberOwnerName,\n getCurrentFiberStackAddendum: getCurrentFiberStackAddendum\n};\n\n// Prefix measurements so that it's possible to filter them.\n// Longer prefixes are hard to read in DevTools.\nvar reactEmoji = '\\u269B';\nvar warningEmoji = '\\u26D4';\nvar supportsUserTiming = typeof performance !== 'undefined' && typeof performance.mark === 'function' && typeof performance.clearMarks === 'function' && typeof performance.measure === 'function' && typeof performance.clearMeasures === 'function';\n\n// Keep track of current fiber so that we know the path to unwind on pause.\n// TODO: this looks the same as nextUnitOfWork in scheduler. Can we unify them?\nvar currentFiber = null;\n// If we're in the middle of user code, which fiber and method is it?\n// Reusing `currentFiber` would be confusing for this because user code fiber\n// can change during commit phase too, but we don't need to unwind it (since\n// lifecycles in the commit phase don't resemble a tree).\nvar currentPhase = null;\nvar currentPhaseFiber = null;\n// Did lifecycle hook schedule an update? This is often a performance problem,\n// so we will keep track of it, and include it in the report.\n// Track commits caused by cascading updates.\nvar isCommitting = false;\nvar hasScheduledUpdateInCurrentCommit = false;\nvar hasScheduledUpdateInCurrentPhase = false;\nvar commitCountInCurrentWorkLoop = 0;\nvar effectCountInCurrentCommit = 0;\nvar isWaitingForCallback = false;\n// During commits, we only show a measurement once per method name\n// to avoid stretch the commit phase with measurement overhead.\nvar labelsInCurrentCommit = new Set();\n\nvar formatMarkName = function (markName) {\n return reactEmoji + ' ' + markName;\n};\n\nvar formatLabel = function (label, warning$$1) {\n var prefix = warning$$1 ? warningEmoji + ' ' : reactEmoji + ' ';\n var suffix = warning$$1 ? ' Warning: ' + warning$$1 : '';\n return '' + prefix + label + suffix;\n};\n\nvar beginMark = function (markName) {\n performance.mark(formatMarkName(markName));\n};\n\nvar clearMark = function (markName) {\n performance.clearMarks(formatMarkName(markName));\n};\n\nvar endMark = function (label, markName, warning$$1) {\n var formattedMarkName = formatMarkName(markName);\n var formattedLabel = formatLabel(label, warning$$1);\n try {\n performance.measure(formattedLabel, formattedMarkName);\n } catch (err) {}\n // If previous mark was missing for some reason, this will throw.\n // This could only happen if React crashed in an unexpected place earlier.\n // Don't pile on with more errors.\n\n // Clear marks immediately to avoid growing buffer.\n performance.clearMarks(formattedMarkName);\n performance.clearMeasures(formattedLabel);\n};\n\nvar getFiberMarkName = function (label, debugID) {\n return label + ' (#' + debugID + ')';\n};\n\nvar getFiberLabel = function (componentName, isMounted, phase) {\n if (phase === null) {\n // These are composite component total time measurements.\n return componentName + ' [' + (isMounted ? 'update' : 'mount') + ']';\n } else {\n // Composite component methods.\n return componentName + '.' + phase;\n }\n};\n\nvar beginFiberMark = function (fiber, phase) {\n var componentName = getComponentName(fiber) || 'Unknown';\n var debugID = fiber._debugID;\n var isMounted = fiber.alternate !== null;\n var label = getFiberLabel(componentName, isMounted, phase);\n\n if (isCommitting && labelsInCurrentCommit.has(label)) {\n // During the commit phase, we don't show duplicate labels because\n // there is a fixed overhead for every measurement, and we don't\n // want to stretch the commit phase beyond necessary.\n return false;\n }\n labelsInCurrentCommit.add(label);\n\n var markName = getFiberMarkName(label, debugID);\n beginMark(markName);\n return true;\n};\n\nvar clearFiberMark = function (fiber, phase) {\n var componentName = getComponentName(fiber) || 'Unknown';\n var debugID = fiber._debugID;\n var isMounted = fiber.alternate !== null;\n var label = getFiberLabel(componentName, isMounted, phase);\n var markName = getFiberMarkName(label, debugID);\n clearMark(markName);\n};\n\nvar endFiberMark = function (fiber, phase, warning$$1) {\n var componentName = getComponentName(fiber) || 'Unknown';\n var debugID = fiber._debugID;\n var isMounted = fiber.alternate !== null;\n var label = getFiberLabel(componentName, isMounted, phase);\n var markName = getFiberMarkName(label, debugID);\n endMark(label, markName, warning$$1);\n};\n\nvar shouldIgnoreFiber = function (fiber) {\n // Host components should be skipped in the timeline.\n // We could check typeof fiber.type, but does this work with RN?\n switch (fiber.tag) {\n case HostRoot:\n case HostComponent:\n case HostText:\n case HostPortal:\n case ReturnComponent:\n case Fragment:\n return true;\n default:\n return false;\n }\n};\n\nvar clearPendingPhaseMeasurement = function () {\n if (currentPhase !== null && currentPhaseFiber !== null) {\n clearFiberMark(currentPhaseFiber, currentPhase);\n }\n currentPhaseFiber = null;\n currentPhase = null;\n hasScheduledUpdateInCurrentPhase = false;\n};\n\nvar pauseTimers = function () {\n // Stops all currently active measurements so that they can be resumed\n // if we continue in a later deferred loop from the same unit of work.\n var fiber = currentFiber;\n while (fiber) {\n if (fiber._debugIsCurrentlyTiming) {\n endFiberMark(fiber, null, null);\n }\n fiber = fiber['return'];\n }\n};\n\nvar resumeTimersRecursively = function (fiber) {\n if (fiber['return'] !== null) {\n resumeTimersRecursively(fiber['return']);\n }\n if (fiber._debugIsCurrentlyTiming) {\n beginFiberMark(fiber, null);\n }\n};\n\nvar resumeTimers = function () {\n // Resumes all measurements that were active during the last deferred loop.\n if (currentFiber !== null) {\n resumeTimersRecursively(currentFiber);\n }\n};\n\nfunction recordEffect() {\n if (enableUserTimingAPI) {\n effectCountInCurrentCommit++;\n }\n}\n\nfunction recordScheduleUpdate() {\n if (enableUserTimingAPI) {\n if (isCommitting) {\n hasScheduledUpdateInCurrentCommit = true;\n }\n if (currentPhase !== null && currentPhase !== 'componentWillMount' && currentPhase !== 'componentWillReceiveProps') {\n hasScheduledUpdateInCurrentPhase = true;\n }\n }\n}\n\nfunction startRequestCallbackTimer() {\n if (enableUserTimingAPI) {\n if (supportsUserTiming && !isWaitingForCallback) {\n isWaitingForCallback = true;\n beginMark('(Waiting for async callback...)');\n }\n }\n}\n\nfunction stopRequestCallbackTimer(didExpire) {\n if (enableUserTimingAPI) {\n if (supportsUserTiming) {\n isWaitingForCallback = false;\n var warning$$1 = didExpire ? 'React was blocked by main thread' : null;\n endMark('(Waiting for async callback...)', '(Waiting for async callback...)', warning$$1);\n }\n }\n}\n\nfunction startWorkTimer(fiber) {\n if (enableUserTimingAPI) {\n if (!supportsUserTiming || shouldIgnoreFiber(fiber)) {\n return;\n }\n // If we pause, this is the fiber to unwind from.\n currentFiber = fiber;\n if (!beginFiberMark(fiber, null)) {\n return;\n }\n fiber._debugIsCurrentlyTiming = true;\n }\n}\n\nfunction cancelWorkTimer(fiber) {\n if (enableUserTimingAPI) {\n if (!supportsUserTiming || shouldIgnoreFiber(fiber)) {\n return;\n }\n // Remember we shouldn't complete measurement for this fiber.\n // Otherwise flamechart will be deep even for small updates.\n fiber._debugIsCurrentlyTiming = false;\n clearFiberMark(fiber, null);\n }\n}\n\nfunction stopWorkTimer(fiber) {\n if (enableUserTimingAPI) {\n if (!supportsUserTiming || shouldIgnoreFiber(fiber)) {\n return;\n }\n // If we pause, its parent is the fiber to unwind from.\n currentFiber = fiber['return'];\n if (!fiber._debugIsCurrentlyTiming) {\n return;\n }\n fiber._debugIsCurrentlyTiming = false;\n endFiberMark(fiber, null, null);\n }\n}\n\nfunction stopFailedWorkTimer(fiber) {\n if (enableUserTimingAPI) {\n if (!supportsUserTiming || shouldIgnoreFiber(fiber)) {\n return;\n }\n // If we pause, its parent is the fiber to unwind from.\n currentFiber = fiber['return'];\n if (!fiber._debugIsCurrentlyTiming) {\n return;\n }\n fiber._debugIsCurrentlyTiming = false;\n var warning$$1 = 'An error was thrown inside this error boundary';\n endFiberMark(fiber, null, warning$$1);\n }\n}\n\nfunction startPhaseTimer(fiber, phase) {\n if (enableUserTimingAPI) {\n if (!supportsUserTiming) {\n return;\n }\n clearPendingPhaseMeasurement();\n if (!beginFiberMark(fiber, phase)) {\n return;\n }\n currentPhaseFiber = fiber;\n currentPhase = phase;\n }\n}\n\nfunction stopPhaseTimer() {\n if (enableUserTimingAPI) {\n if (!supportsUserTiming) {\n return;\n }\n if (currentPhase !== null && currentPhaseFiber !== null) {\n var warning$$1 = hasScheduledUpdateInCurrentPhase ? 'Scheduled a cascading update' : null;\n endFiberMark(currentPhaseFiber, currentPhase, warning$$1);\n }\n currentPhase = null;\n currentPhaseFiber = null;\n }\n}\n\nfunction startWorkLoopTimer(nextUnitOfWork) {\n if (enableUserTimingAPI) {\n currentFiber = nextUnitOfWork;\n if (!supportsUserTiming) {\n return;\n }\n commitCountInCurrentWorkLoop = 0;\n // This is top level call.\n // Any other measurements are performed within.\n beginMark('(React Tree Reconciliation)');\n // Resume any measurements that were in progress during the last loop.\n resumeTimers();\n }\n}\n\nfunction stopWorkLoopTimer(interruptedBy) {\n if (enableUserTimingAPI) {\n if (!supportsUserTiming) {\n return;\n }\n var warning$$1 = null;\n if (interruptedBy !== null) {\n if (interruptedBy.tag === HostRoot) {\n warning$$1 = 'A top-level update interrupted the previous render';\n } else {\n var componentName = getComponentName(interruptedBy) || 'Unknown';\n warning$$1 = 'An update to ' + componentName + ' interrupted the previous render';\n }\n } else if (commitCountInCurrentWorkLoop > 1) {\n warning$$1 = 'There were cascading updates';\n }\n commitCountInCurrentWorkLoop = 0;\n // Pause any measurements until the next loop.\n pauseTimers();\n endMark('(React Tree Reconciliation)', '(React Tree Reconciliation)', warning$$1);\n }\n}\n\nfunction startCommitTimer() {\n if (enableUserTimingAPI) {\n if (!supportsUserTiming) {\n return;\n }\n isCommitting = true;\n hasScheduledUpdateInCurrentCommit = false;\n labelsInCurrentCommit.clear();\n beginMark('(Committing Changes)');\n }\n}\n\nfunction stopCommitTimer() {\n if (enableUserTimingAPI) {\n if (!supportsUserTiming) {\n return;\n }\n\n var warning$$1 = null;\n if (hasScheduledUpdateInCurrentCommit) {\n warning$$1 = 'Lifecycle hook scheduled a cascading update';\n } else if (commitCountInCurrentWorkLoop > 0) {\n warning$$1 = 'Caused by a cascading update in earlier commit';\n }\n hasScheduledUpdateInCurrentCommit = false;\n commitCountInCurrentWorkLoop++;\n isCommitting = false;\n labelsInCurrentCommit.clear();\n\n endMark('(Committing Changes)', '(Committing Changes)', warning$$1);\n }\n}\n\nfunction startCommitHostEffectsTimer() {\n if (enableUserTimingAPI) {\n if (!supportsUserTiming) {\n return;\n }\n effectCountInCurrentCommit = 0;\n beginMark('(Committing Host Effects)');\n }\n}\n\nfunction stopCommitHostEffectsTimer() {\n if (enableUserTimingAPI) {\n if (!supportsUserTiming) {\n return;\n }\n var count = effectCountInCurrentCommit;\n effectCountInCurrentCommit = 0;\n endMark('(Committing Host Effects: ' + count + ' Total)', '(Committing Host Effects)', null);\n }\n}\n\nfunction startCommitLifeCyclesTimer() {\n if (enableUserTimingAPI) {\n if (!supportsUserTiming) {\n return;\n }\n effectCountInCurrentCommit = 0;\n beginMark('(Calling Lifecycle Methods)');\n }\n}\n\nfunction stopCommitLifeCyclesTimer() {\n if (enableUserTimingAPI) {\n if (!supportsUserTiming) {\n return;\n }\n var count = effectCountInCurrentCommit;\n effectCountInCurrentCommit = 0;\n endMark('(Calling Lifecycle Methods: ' + count + ' Total)', '(Calling Lifecycle Methods)', null);\n }\n}\n\n{\n var warnedAboutMissingGetChildContext = {};\n}\n\n// A cursor to the current merged context object on the stack.\nvar contextStackCursor = createCursor(emptyObject);\n// A cursor to a boolean indicating whether the context has changed.\nvar didPerformWorkStackCursor = createCursor(false);\n// Keep track of the previous context object that was on the stack.\n// We use this to get access to the parent context after we have already\n// pushed the next context provider, and now need to merge their contexts.\nvar previousContext = emptyObject;\n\nfunction getUnmaskedContext(workInProgress) {\n var hasOwnContext = isContextProvider(workInProgress);\n if (hasOwnContext) {\n // If the fiber is a context provider itself, when we read its context\n // we have already pushed its own child context on the stack. A context\n // provider should not \"see\" its own child context. Therefore we read the\n // previous (parent) context instead for a context provider.\n return previousContext;\n }\n return contextStackCursor.current;\n}\n\nfunction cacheContext(workInProgress, unmaskedContext, maskedContext) {\n var instance = workInProgress.stateNode;\n instance.__reactInternalMemoizedUnmaskedChildContext = unmaskedContext;\n instance.__reactInternalMemoizedMaskedChildContext = maskedContext;\n}\n\nfunction getMaskedContext(workInProgress, unmaskedContext) {\n var type = workInProgress.type;\n var contextTypes = type.contextTypes;\n if (!contextTypes) {\n return emptyObject;\n }\n\n // Avoid recreating masked context unless unmasked context has changed.\n // Failing to do this will result in unnecessary calls to componentWillReceiveProps.\n // This may trigger infinite loops if componentWillReceiveProps calls setState.\n var instance = workInProgress.stateNode;\n if (instance && instance.__reactInternalMemoizedUnmaskedChildContext === unmaskedContext) {\n return instance.__reactInternalMemoizedMaskedChildContext;\n }\n\n var context = {};\n for (var key in contextTypes) {\n context[key] = unmaskedContext[key];\n }\n\n {\n var name = getComponentName(workInProgress) || 'Unknown';\n checkPropTypes(contextTypes, context, 'context', name, ReactDebugCurrentFiber.getCurrentFiberStackAddendum);\n }\n\n // Cache unmasked context so we can avoid recreating masked context unless necessary.\n // Context is created before the class component is instantiated so check for instance.\n if (instance) {\n cacheContext(workInProgress, unmaskedContext, context);\n }\n\n return context;\n}\n\nfunction hasContextChanged() {\n return didPerformWorkStackCursor.current;\n}\n\nfunction isContextConsumer(fiber) {\n return fiber.tag === ClassComponent && fiber.type.contextTypes != null;\n}\n\nfunction isContextProvider(fiber) {\n return fiber.tag === ClassComponent && fiber.type.childContextTypes != null;\n}\n\nfunction popContextProvider(fiber) {\n if (!isContextProvider(fiber)) {\n return;\n }\n\n pop(didPerformWorkStackCursor, fiber);\n pop(contextStackCursor, fiber);\n}\n\nfunction popTopLevelContextObject(fiber) {\n pop(didPerformWorkStackCursor, fiber);\n pop(contextStackCursor, fiber);\n}\n\nfunction pushTopLevelContextObject(fiber, context, didChange) {\n !(contextStackCursor.cursor == null) ? invariant(false, 'Unexpected context found on stack. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n\n push(contextStackCursor, context, fiber);\n push(didPerformWorkStackCursor, didChange, fiber);\n}\n\nfunction processChildContext(fiber, parentContext) {\n var instance = fiber.stateNode;\n var childContextTypes = fiber.type.childContextTypes;\n\n // TODO (bvaughn) Replace this behavior with an invariant() in the future.\n // It has only been added in Fiber to match the (unintentional) behavior in Stack.\n if (typeof instance.getChildContext !== 'function') {\n {\n var componentName = getComponentName(fiber) || 'Unknown';\n\n if (!warnedAboutMissingGetChildContext[componentName]) {\n warnedAboutMissingGetChildContext[componentName] = true;\n warning(false, '%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);\n }\n }\n return parentContext;\n }\n\n var childContext = void 0;\n {\n ReactDebugCurrentFiber.setCurrentPhase('getChildContext');\n }\n startPhaseTimer(fiber, 'getChildContext');\n childContext = instance.getChildContext();\n stopPhaseTimer();\n {\n ReactDebugCurrentFiber.setCurrentPhase(null);\n }\n for (var contextKey in childContext) {\n !(contextKey in childContextTypes) ? invariant(false, '%s.getChildContext(): key \"%s\" is not defined in childContextTypes.', getComponentName(fiber) || 'Unknown', contextKey) : void 0;\n }\n {\n var name = getComponentName(fiber) || 'Unknown';\n checkPropTypes(childContextTypes, childContext, 'child context', name,\n // In practice, there is one case in which we won't get a stack. It's when\n // somebody calls unstable_renderSubtreeIntoContainer() and we process\n // context from the parent component instance. The stack will be missing\n // because it's outside of the reconciliation, and so the pointer has not\n // been set. This is rare and doesn't matter. We'll also remove that API.\n ReactDebugCurrentFiber.getCurrentFiberStackAddendum);\n }\n\n return _assign({}, parentContext, childContext);\n}\n\nfunction pushContextProvider(workInProgress) {\n if (!isContextProvider(workInProgress)) {\n return false;\n }\n\n var instance = workInProgress.stateNode;\n // We push the context as early as possible to ensure stack integrity.\n // If the instance does not exist yet, we will push null at first,\n // and replace it on the stack later when invalidating the context.\n var memoizedMergedChildContext = instance && instance.__reactInternalMemoizedMergedChildContext || emptyObject;\n\n // Remember the parent context so we can merge with it later.\n // Inherit the parent's did-perform-work value to avoid inadvertently blocking updates.\n previousContext = contextStackCursor.current;\n push(contextStackCursor, memoizedMergedChildContext, workInProgress);\n push(didPerformWorkStackCursor, didPerformWorkStackCursor.current, workInProgress);\n\n return true;\n}\n\nfunction invalidateContextProvider(workInProgress, didChange) {\n var instance = workInProgress.stateNode;\n !instance ? invariant(false, 'Expected to have an instance by this point. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n\n if (didChange) {\n // Merge parent and own context.\n // Skip this if we're not updating due to sCU.\n // This avoids unnecessarily recomputing memoized values.\n var mergedContext = processChildContext(workInProgress, previousContext);\n instance.__reactInternalMemoizedMergedChildContext = mergedContext;\n\n // Replace the old (or empty) context with the new one.\n // It is important to unwind the context in the reverse order.\n pop(didPerformWorkStackCursor, workInProgress);\n pop(contextStackCursor, workInProgress);\n // Now push the new context and mark that it has changed.\n push(contextStackCursor, mergedContext, workInProgress);\n push(didPerformWorkStackCursor, didChange, workInProgress);\n } else {\n pop(didPerformWorkStackCursor, workInProgress);\n push(didPerformWorkStackCursor, didChange, workInProgress);\n }\n}\n\nfunction resetContext() {\n previousContext = emptyObject;\n contextStackCursor.current = emptyObject;\n didPerformWorkStackCursor.current = false;\n}\n\nfunction findCurrentUnmaskedContext(fiber) {\n // Currently this is only used with renderSubtreeIntoContainer; not sure if it\n // makes sense elsewhere\n !(isFiberMounted(fiber) && fiber.tag === ClassComponent) ? invariant(false, 'Expected subtree parent to be a mounted class component. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n\n var node = fiber;\n while (node.tag !== HostRoot) {\n if (isContextProvider(node)) {\n return node.stateNode.__reactInternalMemoizedMergedChildContext;\n }\n var parent = node['return'];\n !parent ? invariant(false, 'Found unexpected detached subtree parent. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n node = parent;\n }\n return node.stateNode.context;\n}\n\nvar NoWork = 0; // TODO: Use an opaque type once ESLint et al support the syntax\n\nvar Sync = 1;\nvar Never = 2147483647; // Max int32: Math.pow(2, 31) - 1\n\nvar UNIT_SIZE = 10;\nvar MAGIC_NUMBER_OFFSET = 2;\n\n// 1 unit of expiration time represents 10ms.\nfunction msToExpirationTime(ms) {\n // Always add an offset so that we don't clash with the magic number for NoWork.\n return (ms / UNIT_SIZE | 0) + MAGIC_NUMBER_OFFSET;\n}\n\nfunction expirationTimeToMs(expirationTime) {\n return (expirationTime - MAGIC_NUMBER_OFFSET) * UNIT_SIZE;\n}\n\nfunction ceiling(num, precision) {\n return ((num / precision | 0) + 1) * precision;\n}\n\nfunction computeExpirationBucket(currentTime, expirationInMs, bucketSizeMs) {\n return ceiling(currentTime + expirationInMs / UNIT_SIZE, bucketSizeMs / UNIT_SIZE);\n}\n\nvar NoContext = 0;\nvar AsyncUpdates = 1;\n\n{\n var hasBadMapPolyfill = false;\n try {\n var nonExtensibleObject = Object.preventExtensions({});\n /* eslint-disable no-new */\n \n /* eslint-enable no-new */\n } catch (e) {\n // TODO: Consider warning about bad polyfills\n hasBadMapPolyfill = true;\n }\n}\n\n// A Fiber is work on a Component that needs to be done or was done. There can\n// be more than one per component.\n\n\n{\n var debugCounter = 1;\n}\n\nfunction FiberNode(tag, key, internalContextTag) {\n // Instance\n this.tag = tag;\n this.key = key;\n this.type = null;\n this.stateNode = null;\n\n // Fiber\n this['return'] = null;\n this.child = null;\n this.sibling = null;\n this.index = 0;\n\n this.ref = null;\n\n this.pendingProps = null;\n this.memoizedProps = null;\n this.updateQueue = null;\n this.memoizedState = null;\n\n this.internalContextTag = internalContextTag;\n\n // Effects\n this.effectTag = NoEffect;\n this.nextEffect = null;\n\n this.firstEffect = null;\n this.lastEffect = null;\n\n this.expirationTime = NoWork;\n\n this.alternate = null;\n\n {\n this._debugID = debugCounter++;\n this._debugSource = null;\n this._debugOwner = null;\n this._debugIsCurrentlyTiming = false;\n if (!hasBadMapPolyfill && typeof Object.preventExtensions === 'function') {\n Object.preventExtensions(this);\n }\n }\n}\n\n// This is a constructor function, rather than a POJO constructor, still\n// please ensure we do the following:\n// 1) Nobody should add any instance methods on this. Instance methods can be\n// more difficult to predict when they get optimized and they are almost\n// never inlined properly in static compilers.\n// 2) Nobody should rely on `instanceof Fiber` for type testing. We should\n// always know when it is a fiber.\n// 3) We might want to experiment with using numeric keys since they are easier\n// to optimize in a non-JIT environment.\n// 4) We can easily go from a constructor to a createFiber object literal if that\n// is faster.\n// 5) It should be easy to port this to a C struct and keep a C implementation\n// compatible.\nvar createFiber = function (tag, key, internalContextTag) {\n // $FlowFixMe: the shapes are exact here but Flow doesn't like constructors\n return new FiberNode(tag, key, internalContextTag);\n};\n\nfunction shouldConstruct(Component) {\n return !!(Component.prototype && Component.prototype.isReactComponent);\n}\n\n// This is used to create an alternate fiber to do work on.\nfunction createWorkInProgress(current, pendingProps, expirationTime) {\n var workInProgress = current.alternate;\n if (workInProgress === null) {\n // We use a double buffering pooling technique because we know that we'll\n // only ever need at most two versions of a tree. We pool the \"other\" unused\n // node that we're free to reuse. This is lazily created to avoid allocating\n // extra objects for things that are never updated. It also allow us to\n // reclaim the extra memory if needed.\n workInProgress = createFiber(current.tag, current.key, current.internalContextTag);\n workInProgress.type = current.type;\n workInProgress.stateNode = current.stateNode;\n\n {\n // DEV-only fields\n workInProgress._debugID = current._debugID;\n workInProgress._debugSource = current._debugSource;\n workInProgress._debugOwner = current._debugOwner;\n }\n\n workInProgress.alternate = current;\n current.alternate = workInProgress;\n } else {\n // We already have an alternate.\n // Reset the effect tag.\n workInProgress.effectTag = NoEffect;\n\n // The effect list is no longer valid.\n workInProgress.nextEffect = null;\n workInProgress.firstEffect = null;\n workInProgress.lastEffect = null;\n }\n\n workInProgress.expirationTime = expirationTime;\n workInProgress.pendingProps = pendingProps;\n\n workInProgress.child = current.child;\n workInProgress.memoizedProps = current.memoizedProps;\n workInProgress.memoizedState = current.memoizedState;\n workInProgress.updateQueue = current.updateQueue;\n\n // These will be overridden during the parent's reconciliation\n workInProgress.sibling = current.sibling;\n workInProgress.index = current.index;\n workInProgress.ref = current.ref;\n\n return workInProgress;\n}\n\nfunction createHostRootFiber() {\n var fiber = createFiber(HostRoot, null, NoContext);\n return fiber;\n}\n\nfunction createFiberFromElement(element, internalContextTag, expirationTime) {\n var owner = null;\n {\n owner = element._owner;\n }\n\n var fiber = void 0;\n var type = element.type,\n key = element.key;\n\n if (typeof type === 'function') {\n fiber = shouldConstruct(type) ? createFiber(ClassComponent, key, internalContextTag) : createFiber(IndeterminateComponent, key, internalContextTag);\n fiber.type = type;\n fiber.pendingProps = element.props;\n } else if (typeof type === 'string') {\n fiber = createFiber(HostComponent, key, internalContextTag);\n fiber.type = type;\n fiber.pendingProps = element.props;\n } else if (typeof type === 'object' && type !== null && typeof type.tag === 'number') {\n // Currently assumed to be a continuation and therefore is a fiber already.\n // TODO: The yield system is currently broken for updates in some cases.\n // The reified yield stores a fiber, but we don't know which fiber that is;\n // the current or a workInProgress? When the continuation gets rendered here\n // we don't know if we can reuse that fiber or if we need to clone it.\n // There is probably a clever way to restructure this.\n fiber = type;\n fiber.pendingProps = element.props;\n } else {\n var info = '';\n {\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n 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.\";\n }\n var ownerName = owner ? getComponentName(owner) : null;\n if (ownerName) {\n info += '\\n\\nCheck the render method of `' + ownerName + '`.';\n }\n }\n invariant(false, 'Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s', type == null ? type : typeof type, info);\n }\n\n {\n fiber._debugSource = element._source;\n fiber._debugOwner = element._owner;\n }\n\n fiber.expirationTime = expirationTime;\n\n return fiber;\n}\n\nfunction createFiberFromFragment(elements, internalContextTag, expirationTime, key) {\n var fiber = createFiber(Fragment, key, internalContextTag);\n fiber.pendingProps = elements;\n fiber.expirationTime = expirationTime;\n return fiber;\n}\n\nfunction createFiberFromText(content, internalContextTag, expirationTime) {\n var fiber = createFiber(HostText, null, internalContextTag);\n fiber.pendingProps = content;\n fiber.expirationTime = expirationTime;\n return fiber;\n}\n\nfunction createFiberFromHostInstanceForDeletion() {\n var fiber = createFiber(HostComponent, null, NoContext);\n fiber.type = 'DELETED';\n return fiber;\n}\n\nfunction createFiberFromCall(call, internalContextTag, expirationTime) {\n var fiber = createFiber(CallComponent, call.key, internalContextTag);\n fiber.type = call.handler;\n fiber.pendingProps = call;\n fiber.expirationTime = expirationTime;\n return fiber;\n}\n\nfunction createFiberFromReturn(returnNode, internalContextTag, expirationTime) {\n var fiber = createFiber(ReturnComponent, null, internalContextTag);\n fiber.expirationTime = expirationTime;\n return fiber;\n}\n\nfunction createFiberFromPortal(portal, internalContextTag, expirationTime) {\n var fiber = createFiber(HostPortal, portal.key, internalContextTag);\n fiber.pendingProps = portal.children || [];\n fiber.expirationTime = expirationTime;\n fiber.stateNode = {\n containerInfo: portal.containerInfo,\n pendingChildren: null, // Used by persistent updates\n implementation: portal.implementation\n };\n return fiber;\n}\n\nfunction createFiberRoot(containerInfo, hydrate) {\n // Cyclic construction. This cheats the type system right now because\n // stateNode is any.\n var uninitializedFiber = createHostRootFiber();\n var root = {\n current: uninitializedFiber,\n containerInfo: containerInfo,\n pendingChildren: null,\n remainingExpirationTime: NoWork,\n isReadyForCommit: false,\n finishedWork: null,\n context: null,\n pendingContext: null,\n hydrate: hydrate,\n nextScheduledRoot: null\n };\n uninitializedFiber.stateNode = root;\n return root;\n}\n\nvar onCommitFiberRoot = null;\nvar onCommitFiberUnmount = null;\nvar hasLoggedError = false;\n\nfunction catchErrors(fn) {\n return function (arg) {\n try {\n return fn(arg);\n } catch (err) {\n if (true && !hasLoggedError) {\n hasLoggedError = true;\n warning(false, 'React DevTools encountered an error: %s', err);\n }\n }\n };\n}\n\nfunction injectInternals(internals) {\n if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {\n // No DevTools\n return false;\n }\n var hook = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n if (hook.isDisabled) {\n // This isn't a real property on the hook, but it can be set to opt out\n // of DevTools integration and associated warnings and logs.\n // https://github.com/facebook/react/issues/3877\n return true;\n }\n if (!hook.supportsFiber) {\n {\n warning(false, 'The installed version of React DevTools is too old and will not work ' + 'with the current version of React. Please update React DevTools. ' + 'https://fb.me/react-devtools');\n }\n // DevTools exists, even though it doesn't support Fiber.\n return true;\n }\n try {\n var rendererID = hook.inject(internals);\n // We have successfully injected, so now it is safe to set up hooks.\n onCommitFiberRoot = catchErrors(function (root) {\n return hook.onCommitFiberRoot(rendererID, root);\n });\n onCommitFiberUnmount = catchErrors(function (fiber) {\n return hook.onCommitFiberUnmount(rendererID, fiber);\n });\n } catch (err) {\n // Catch all errors because it is unsafe to throw during initialization.\n {\n warning(false, 'React DevTools encountered an error: %s.', err);\n }\n }\n // DevTools exists\n return true;\n}\n\nfunction onCommitRoot(root) {\n if (typeof onCommitFiberRoot === 'function') {\n onCommitFiberRoot(root);\n }\n}\n\nfunction onCommitUnmount(fiber) {\n if (typeof onCommitFiberUnmount === 'function') {\n onCommitFiberUnmount(fiber);\n }\n}\n\n{\n var didWarnUpdateInsideUpdate = false;\n}\n\n// Callbacks are not validated until invocation\n\n\n// Singly linked-list of updates. When an update is scheduled, it is added to\n// the queue of the current fiber and the work-in-progress fiber. The two queues\n// are separate but they share a persistent structure.\n//\n// During reconciliation, updates are removed from the work-in-progress fiber,\n// but they remain on the current fiber. That ensures that if a work-in-progress\n// is aborted, the aborted updates are recovered by cloning from current.\n//\n// The work-in-progress queue is always a subset of the current queue.\n//\n// When the tree is committed, the work-in-progress becomes the current.\n\n\nfunction createUpdateQueue(baseState) {\n var queue = {\n baseState: baseState,\n expirationTime: NoWork,\n first: null,\n last: null,\n callbackList: null,\n hasForceUpdate: false,\n isInitialized: false\n };\n {\n queue.isProcessing = false;\n }\n return queue;\n}\n\nfunction insertUpdateIntoQueue(queue, update) {\n // Append the update to the end of the list.\n if (queue.last === null) {\n // Queue is empty\n queue.first = queue.last = update;\n } else {\n queue.last.next = update;\n queue.last = update;\n }\n if (queue.expirationTime === NoWork || queue.expirationTime > update.expirationTime) {\n queue.expirationTime = update.expirationTime;\n }\n}\n\nfunction insertUpdateIntoFiber(fiber, update) {\n // We'll have at least one and at most two distinct update queues.\n var alternateFiber = fiber.alternate;\n var queue1 = fiber.updateQueue;\n if (queue1 === null) {\n // TODO: We don't know what the base state will be until we begin work.\n // It depends on which fiber is the next current. Initialize with an empty\n // base state, then set to the memoizedState when rendering. Not super\n // happy with this approach.\n queue1 = fiber.updateQueue = createUpdateQueue(null);\n }\n\n var queue2 = void 0;\n if (alternateFiber !== null) {\n queue2 = alternateFiber.updateQueue;\n if (queue2 === null) {\n queue2 = alternateFiber.updateQueue = createUpdateQueue(null);\n }\n } else {\n queue2 = null;\n }\n queue2 = queue2 !== queue1 ? queue2 : null;\n\n // Warn if an update is scheduled from inside an updater function.\n {\n if ((queue1.isProcessing || queue2 !== null && queue2.isProcessing) && !didWarnUpdateInsideUpdate) {\n warning(false, '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.');\n didWarnUpdateInsideUpdate = true;\n }\n }\n\n // If there's only one queue, add the update to that queue and exit.\n if (queue2 === null) {\n insertUpdateIntoQueue(queue1, update);\n return;\n }\n\n // If either queue is empty, we need to add to both queues.\n if (queue1.last === null || queue2.last === null) {\n insertUpdateIntoQueue(queue1, update);\n insertUpdateIntoQueue(queue2, update);\n return;\n }\n\n // If both lists are not empty, the last update is the same for both lists\n // because of structural sharing. So, we should only append to one of\n // the lists.\n insertUpdateIntoQueue(queue1, update);\n // But we still need to update the `last` pointer of queue2.\n queue2.last = update;\n}\n\nfunction getUpdateExpirationTime(fiber) {\n if (fiber.tag !== ClassComponent && fiber.tag !== HostRoot) {\n return NoWork;\n }\n var updateQueue = fiber.updateQueue;\n if (updateQueue === null) {\n return NoWork;\n }\n return updateQueue.expirationTime;\n}\n\nfunction getStateFromUpdate(update, instance, prevState, props) {\n var partialState = update.partialState;\n if (typeof partialState === 'function') {\n var updateFn = partialState;\n\n // Invoke setState callback an extra time to help detect side-effects.\n if (debugRenderPhaseSideEffects) {\n updateFn.call(instance, prevState, props);\n }\n\n return updateFn.call(instance, prevState, props);\n } else {\n return partialState;\n }\n}\n\nfunction processUpdateQueue(current, workInProgress, queue, instance, props, renderExpirationTime) {\n if (current !== null && current.updateQueue === queue) {\n // We need to create a work-in-progress queue, by cloning the current queue.\n var currentQueue = queue;\n queue = workInProgress.updateQueue = {\n baseState: currentQueue.baseState,\n expirationTime: currentQueue.expirationTime,\n first: currentQueue.first,\n last: currentQueue.last,\n isInitialized: currentQueue.isInitialized,\n // These fields are no longer valid because they were already committed.\n // Reset them.\n callbackList: null,\n hasForceUpdate: false\n };\n }\n\n {\n // Set this flag so we can warn if setState is called inside the update\n // function of another setState.\n queue.isProcessing = true;\n }\n\n // Reset the remaining expiration time. If we skip over any updates, we'll\n // increase this accordingly.\n queue.expirationTime = NoWork;\n\n // TODO: We don't know what the base state will be until we begin work.\n // It depends on which fiber is the next current. Initialize with an empty\n // base state, then set to the memoizedState when rendering. Not super\n // happy with this approach.\n var state = void 0;\n if (queue.isInitialized) {\n state = queue.baseState;\n } else {\n state = queue.baseState = workInProgress.memoizedState;\n queue.isInitialized = true;\n }\n var dontMutatePrevState = true;\n var update = queue.first;\n var didSkip = false;\n while (update !== null) {\n var updateExpirationTime = update.expirationTime;\n if (updateExpirationTime > renderExpirationTime) {\n // This update does not have sufficient priority. Skip it.\n var remainingExpirationTime = queue.expirationTime;\n if (remainingExpirationTime === NoWork || remainingExpirationTime > updateExpirationTime) {\n // Update the remaining expiration time.\n queue.expirationTime = updateExpirationTime;\n }\n if (!didSkip) {\n didSkip = true;\n queue.baseState = state;\n }\n // Continue to the next update.\n update = update.next;\n continue;\n }\n\n // This update does have sufficient priority.\n\n // If no previous updates were skipped, drop this update from the queue by\n // advancing the head of the list.\n if (!didSkip) {\n queue.first = update.next;\n if (queue.first === null) {\n queue.last = null;\n }\n }\n\n // Process the update\n var _partialState = void 0;\n if (update.isReplace) {\n state = getStateFromUpdate(update, instance, state, props);\n dontMutatePrevState = true;\n } else {\n _partialState = getStateFromUpdate(update, instance, state, props);\n if (_partialState) {\n if (dontMutatePrevState) {\n // $FlowFixMe: Idk how to type this properly.\n state = _assign({}, state, _partialState);\n } else {\n state = _assign(state, _partialState);\n }\n dontMutatePrevState = false;\n }\n }\n if (update.isForced) {\n queue.hasForceUpdate = true;\n }\n if (update.callback !== null) {\n // Append to list of callbacks.\n var _callbackList = queue.callbackList;\n if (_callbackList === null) {\n _callbackList = queue.callbackList = [];\n }\n _callbackList.push(update);\n }\n update = update.next;\n }\n\n if (queue.callbackList !== null) {\n workInProgress.effectTag |= Callback;\n } else if (queue.first === null && !queue.hasForceUpdate) {\n // The queue is empty. We can reset it.\n workInProgress.updateQueue = null;\n }\n\n if (!didSkip) {\n didSkip = true;\n queue.baseState = state;\n }\n\n {\n // No longer processing.\n queue.isProcessing = false;\n }\n\n return state;\n}\n\nfunction commitCallbacks(queue, context) {\n var callbackList = queue.callbackList;\n if (callbackList === null) {\n return;\n }\n // Set the list to null to make sure they don't get called more than once.\n queue.callbackList = null;\n for (var i = 0; i < callbackList.length; i++) {\n var update = callbackList[i];\n var _callback = update.callback;\n // This update might be processed again. Clear the callback so it's only\n // called once.\n update.callback = null;\n !(typeof _callback === 'function') ? invariant(false, 'Invalid argument passed as callback. Expected a function. Instead received: %s', _callback) : void 0;\n _callback.call(context);\n }\n}\n\nvar fakeInternalInstance = {};\nvar isArray = Array.isArray;\n\n{\n var didWarnAboutStateAssignmentForComponent = {};\n\n var warnOnInvalidCallback = function (callback, callerName) {\n warning(callback === null || typeof callback === 'function', '%s(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callerName, callback);\n };\n\n // This is so gross but it's at least non-critical and can be removed if\n // it causes problems. This is meant to give a nicer error message for\n // ReactDOM15.unstable_renderSubtreeIntoContainer(reactDOM16Component,\n // ...)) which otherwise throws a \"_processChildContext is not a function\"\n // exception.\n Object.defineProperty(fakeInternalInstance, '_processChildContext', {\n enumerable: false,\n value: function () {\n invariant(false, '_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).');\n }\n });\n Object.freeze(fakeInternalInstance);\n}\n\nvar ReactFiberClassComponent = function (scheduleWork, computeExpirationForFiber, memoizeProps, memoizeState) {\n // Class component state updater\n var updater = {\n isMounted: isMounted,\n enqueueSetState: function (instance, partialState, callback) {\n var fiber = get(instance);\n callback = callback === undefined ? null : callback;\n {\n warnOnInvalidCallback(callback, 'setState');\n }\n var expirationTime = computeExpirationForFiber(fiber);\n var update = {\n expirationTime: expirationTime,\n partialState: partialState,\n callback: callback,\n isReplace: false,\n isForced: false,\n nextCallback: null,\n next: null\n };\n insertUpdateIntoFiber(fiber, update);\n scheduleWork(fiber, expirationTime);\n },\n enqueueReplaceState: function (instance, state, callback) {\n var fiber = get(instance);\n callback = callback === undefined ? null : callback;\n {\n warnOnInvalidCallback(callback, 'replaceState');\n }\n var expirationTime = computeExpirationForFiber(fiber);\n var update = {\n expirationTime: expirationTime,\n partialState: state,\n callback: callback,\n isReplace: true,\n isForced: false,\n nextCallback: null,\n next: null\n };\n insertUpdateIntoFiber(fiber, update);\n scheduleWork(fiber, expirationTime);\n },\n enqueueForceUpdate: function (instance, callback) {\n var fiber = get(instance);\n callback = callback === undefined ? null : callback;\n {\n warnOnInvalidCallback(callback, 'forceUpdate');\n }\n var expirationTime = computeExpirationForFiber(fiber);\n var update = {\n expirationTime: expirationTime,\n partialState: null,\n callback: callback,\n isReplace: false,\n isForced: true,\n nextCallback: null,\n next: null\n };\n insertUpdateIntoFiber(fiber, update);\n scheduleWork(fiber, expirationTime);\n }\n };\n\n function checkShouldComponentUpdate(workInProgress, oldProps, newProps, oldState, newState, newContext) {\n if (oldProps === null || workInProgress.updateQueue !== null && workInProgress.updateQueue.hasForceUpdate) {\n // If the workInProgress already has an Update effect, return true\n return true;\n }\n\n var instance = workInProgress.stateNode;\n var type = workInProgress.type;\n if (typeof instance.shouldComponentUpdate === 'function') {\n startPhaseTimer(workInProgress, 'shouldComponentUpdate');\n var shouldUpdate = instance.shouldComponentUpdate(newProps, newState, newContext);\n stopPhaseTimer();\n\n // Simulate an async bailout/interruption by invoking lifecycle twice.\n if (debugRenderPhaseSideEffects) {\n instance.shouldComponentUpdate(newProps, newState, newContext);\n }\n\n {\n warning(shouldUpdate !== undefined, '%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', getComponentName(workInProgress) || 'Unknown');\n }\n\n return shouldUpdate;\n }\n\n if (type.prototype && type.prototype.isPureReactComponent) {\n return !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState);\n }\n\n return true;\n }\n\n function checkClassInstance(workInProgress) {\n var instance = workInProgress.stateNode;\n var type = workInProgress.type;\n {\n var name = getComponentName(workInProgress);\n var renderPresent = instance.render;\n\n if (!renderPresent) {\n if (type.prototype && typeof type.prototype.render === 'function') {\n warning(false, '%s(...): No `render` method found on the returned component ' + 'instance: did you accidentally return an object from the constructor?', name);\n } else {\n warning(false, '%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render`.', name);\n }\n }\n\n var noGetInitialStateOnES6 = !instance.getInitialState || instance.getInitialState.isReactClassApproved || instance.state;\n warning(noGetInitialStateOnES6, '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);\n var noGetDefaultPropsOnES6 = !instance.getDefaultProps || instance.getDefaultProps.isReactClassApproved;\n warning(noGetDefaultPropsOnES6, '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);\n var noInstancePropTypes = !instance.propTypes;\n warning(noInstancePropTypes, 'propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', name);\n var noInstanceContextTypes = !instance.contextTypes;\n warning(noInstanceContextTypes, 'contextTypes was defined as an instance property on %s. Use a static ' + 'property to define contextTypes instead.', name);\n var noComponentShouldUpdate = typeof instance.componentShouldUpdate !== 'function';\n warning(noComponentShouldUpdate, '%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);\n if (type.prototype && type.prototype.isPureReactComponent && typeof instance.shouldComponentUpdate !== 'undefined') {\n warning(false, '%s has a method called shouldComponentUpdate(). ' + 'shouldComponentUpdate should not be used when extending React.PureComponent. ' + 'Please extend React.Component if shouldComponentUpdate is used.', getComponentName(workInProgress) || 'A pure component');\n }\n var noComponentDidUnmount = typeof instance.componentDidUnmount !== 'function';\n warning(noComponentDidUnmount, '%s has a method called ' + 'componentDidUnmount(). But there is no such lifecycle method. ' + 'Did you mean componentWillUnmount()?', name);\n var noComponentDidReceiveProps = typeof instance.componentDidReceiveProps !== 'function';\n warning(noComponentDidReceiveProps, '%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);\n var noComponentWillRecieveProps = typeof instance.componentWillRecieveProps !== 'function';\n warning(noComponentWillRecieveProps, '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', name);\n var hasMutatedProps = instance.props !== workInProgress.pendingProps;\n warning(instance.props === undefined || !hasMutatedProps, '%s(...): When calling super() in `%s`, make sure to pass ' + \"up the same props that your component's constructor was passed.\", name, name);\n var noInstanceDefaultProps = !instance.defaultProps;\n warning(noInstanceDefaultProps, '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);\n }\n\n var state = instance.state;\n if (state && (typeof state !== 'object' || isArray(state))) {\n warning(false, '%s.state: must be set to an object or null', getComponentName(workInProgress));\n }\n if (typeof instance.getChildContext === 'function') {\n warning(typeof workInProgress.type.childContextTypes === 'object', '%s.getChildContext(): childContextTypes must be defined in order to ' + 'use getChildContext().', getComponentName(workInProgress));\n }\n }\n\n function resetInputPointers(workInProgress, instance) {\n instance.props = workInProgress.memoizedProps;\n instance.state = workInProgress.memoizedState;\n }\n\n function adoptClassInstance(workInProgress, instance) {\n instance.updater = updater;\n workInProgress.stateNode = instance;\n // The instance needs access to the fiber so that it can schedule updates\n set(instance, workInProgress);\n {\n instance._reactInternalInstance = fakeInternalInstance;\n }\n }\n\n function constructClassInstance(workInProgress, props) {\n var ctor = workInProgress.type;\n var unmaskedContext = getUnmaskedContext(workInProgress);\n var needsContext = isContextConsumer(workInProgress);\n var context = needsContext ? getMaskedContext(workInProgress, unmaskedContext) : emptyObject;\n var instance = new ctor(props, context);\n adoptClassInstance(workInProgress, instance);\n\n // Cache unmasked context so we can avoid recreating masked context unless necessary.\n // ReactFiberContext usually updates this cache but can't for newly-created instances.\n if (needsContext) {\n cacheContext(workInProgress, unmaskedContext, context);\n }\n\n return instance;\n }\n\n function callComponentWillMount(workInProgress, instance) {\n startPhaseTimer(workInProgress, 'componentWillMount');\n var oldState = instance.state;\n instance.componentWillMount();\n stopPhaseTimer();\n\n // Simulate an async bailout/interruption by invoking lifecycle twice.\n if (debugRenderPhaseSideEffects) {\n instance.componentWillMount();\n }\n\n if (oldState !== instance.state) {\n {\n warning(false, '%s.componentWillMount(): Assigning directly to this.state is ' + \"deprecated (except inside a component's \" + 'constructor). Use setState instead.', getComponentName(workInProgress));\n }\n updater.enqueueReplaceState(instance, instance.state, null);\n }\n }\n\n function callComponentWillReceiveProps(workInProgress, instance, newProps, newContext) {\n startPhaseTimer(workInProgress, 'componentWillReceiveProps');\n var oldState = instance.state;\n instance.componentWillReceiveProps(newProps, newContext);\n stopPhaseTimer();\n\n // Simulate an async bailout/interruption by invoking lifecycle twice.\n if (debugRenderPhaseSideEffects) {\n instance.componentWillReceiveProps(newProps, newContext);\n }\n\n if (instance.state !== oldState) {\n {\n var componentName = getComponentName(workInProgress) || 'Component';\n if (!didWarnAboutStateAssignmentForComponent[componentName]) {\n warning(false, '%s.componentWillReceiveProps(): Assigning directly to ' + \"this.state is deprecated (except inside a component's \" + 'constructor). Use setState instead.', componentName);\n didWarnAboutStateAssignmentForComponent[componentName] = true;\n }\n }\n updater.enqueueReplaceState(instance, instance.state, null);\n }\n }\n\n // Invokes the mount life-cycles on a previously never rendered instance.\n function mountClassInstance(workInProgress, renderExpirationTime) {\n var current = workInProgress.alternate;\n\n {\n checkClassInstance(workInProgress);\n }\n\n var instance = workInProgress.stateNode;\n var state = instance.state || null;\n\n var props = workInProgress.pendingProps;\n !props ? invariant(false, 'There must be pending props for an initial mount. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n\n var unmaskedContext = getUnmaskedContext(workInProgress);\n\n instance.props = props;\n instance.state = workInProgress.memoizedState = state;\n instance.refs = emptyObject;\n instance.context = getMaskedContext(workInProgress, unmaskedContext);\n\n if (enableAsyncSubtreeAPI && workInProgress.type != null && workInProgress.type.prototype != null && workInProgress.type.prototype.unstable_isAsyncReactComponent === true) {\n workInProgress.internalContextTag |= AsyncUpdates;\n }\n\n if (typeof instance.componentWillMount === 'function') {\n callComponentWillMount(workInProgress, instance);\n // If we had additional state updates during this life-cycle, let's\n // process them now.\n var updateQueue = workInProgress.updateQueue;\n if (updateQueue !== null) {\n instance.state = processUpdateQueue(current, workInProgress, updateQueue, instance, props, renderExpirationTime);\n }\n }\n if (typeof instance.componentDidMount === 'function') {\n workInProgress.effectTag |= Update;\n }\n }\n\n // Called on a preexisting class instance. Returns false if a resumed render\n // could be reused.\n // function resumeMountClassInstance(\n // workInProgress: Fiber,\n // priorityLevel: PriorityLevel,\n // ): boolean {\n // const instance = workInProgress.stateNode;\n // resetInputPointers(workInProgress, instance);\n\n // let newState = workInProgress.memoizedState;\n // let newProps = workInProgress.pendingProps;\n // if (!newProps) {\n // // If there isn't any new props, then we'll reuse the memoized props.\n // // This could be from already completed work.\n // newProps = workInProgress.memoizedProps;\n // invariant(\n // newProps != null,\n // 'There should always be pending or memoized props. This error is ' +\n // 'likely caused by a bug in React. Please file an issue.',\n // );\n // }\n // const newUnmaskedContext = getUnmaskedContext(workInProgress);\n // const newContext = getMaskedContext(workInProgress, newUnmaskedContext);\n\n // const oldContext = instance.context;\n // const oldProps = workInProgress.memoizedProps;\n\n // if (\n // typeof instance.componentWillReceiveProps === 'function' &&\n // (oldProps !== newProps || oldContext !== newContext)\n // ) {\n // callComponentWillReceiveProps(\n // workInProgress,\n // instance,\n // newProps,\n // newContext,\n // );\n // }\n\n // // Process the update queue before calling shouldComponentUpdate\n // const updateQueue = workInProgress.updateQueue;\n // if (updateQueue !== null) {\n // newState = processUpdateQueue(\n // workInProgress,\n // updateQueue,\n // instance,\n // newState,\n // newProps,\n // priorityLevel,\n // );\n // }\n\n // // TODO: Should we deal with a setState that happened after the last\n // // componentWillMount and before this componentWillMount? Probably\n // // unsupported anyway.\n\n // if (\n // !checkShouldComponentUpdate(\n // workInProgress,\n // workInProgress.memoizedProps,\n // newProps,\n // workInProgress.memoizedState,\n // newState,\n // newContext,\n // )\n // ) {\n // // Update the existing instance's state, props, and context pointers even\n // // though we're bailing out.\n // instance.props = newProps;\n // instance.state = newState;\n // instance.context = newContext;\n // return false;\n // }\n\n // // Update the input pointers now so that they are correct when we call\n // // componentWillMount\n // instance.props = newProps;\n // instance.state = newState;\n // instance.context = newContext;\n\n // if (typeof instance.componentWillMount === 'function') {\n // callComponentWillMount(workInProgress, instance);\n // // componentWillMount may have called setState. Process the update queue.\n // const newUpdateQueue = workInProgress.updateQueue;\n // if (newUpdateQueue !== null) {\n // newState = processUpdateQueue(\n // workInProgress,\n // newUpdateQueue,\n // instance,\n // newState,\n // newProps,\n // priorityLevel,\n // );\n // }\n // }\n\n // if (typeof instance.componentDidMount === 'function') {\n // workInProgress.effectTag |= Update;\n // }\n\n // instance.state = newState;\n\n // return true;\n // }\n\n // Invokes the update life-cycles and returns false if it shouldn't rerender.\n function updateClassInstance(current, workInProgress, renderExpirationTime) {\n var instance = workInProgress.stateNode;\n resetInputPointers(workInProgress, instance);\n\n var oldProps = workInProgress.memoizedProps;\n var newProps = workInProgress.pendingProps;\n if (!newProps) {\n // If there aren't any new props, then we'll reuse the memoized props.\n // This could be from already completed work.\n newProps = oldProps;\n !(newProps != null) ? invariant(false, 'There should always be pending or memoized props. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n }\n var oldContext = instance.context;\n var newUnmaskedContext = getUnmaskedContext(workInProgress);\n var newContext = getMaskedContext(workInProgress, newUnmaskedContext);\n\n // Note: During these life-cycles, instance.props/instance.state are what\n // ever the previously attempted to render - not the \"current\". However,\n // during componentDidUpdate we pass the \"current\" props.\n\n if (typeof instance.componentWillReceiveProps === 'function' && (oldProps !== newProps || oldContext !== newContext)) {\n callComponentWillReceiveProps(workInProgress, instance, newProps, newContext);\n }\n\n // Compute the next state using the memoized state and the update queue.\n var oldState = workInProgress.memoizedState;\n // TODO: Previous state can be null.\n var newState = void 0;\n if (workInProgress.updateQueue !== null) {\n newState = processUpdateQueue(current, workInProgress, workInProgress.updateQueue, instance, newProps, renderExpirationTime);\n } else {\n newState = oldState;\n }\n\n if (oldProps === newProps && oldState === newState && !hasContextChanged() && !(workInProgress.updateQueue !== null && workInProgress.updateQueue.hasForceUpdate)) {\n // If an update was already in progress, we should schedule an Update\n // effect even though we're bailing out, so that cWU/cDU are called.\n if (typeof instance.componentDidUpdate === 'function') {\n if (oldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n workInProgress.effectTag |= Update;\n }\n }\n return false;\n }\n\n var shouldUpdate = checkShouldComponentUpdate(workInProgress, oldProps, newProps, oldState, newState, newContext);\n\n if (shouldUpdate) {\n if (typeof instance.componentWillUpdate === 'function') {\n startPhaseTimer(workInProgress, 'componentWillUpdate');\n instance.componentWillUpdate(newProps, newState, newContext);\n stopPhaseTimer();\n\n // Simulate an async bailout/interruption by invoking lifecycle twice.\n if (debugRenderPhaseSideEffects) {\n instance.componentWillUpdate(newProps, newState, newContext);\n }\n }\n if (typeof instance.componentDidUpdate === 'function') {\n workInProgress.effectTag |= Update;\n }\n } else {\n // If an update was already in progress, we should schedule an Update\n // effect even though we're bailing out, so that cWU/cDU are called.\n if (typeof instance.componentDidUpdate === 'function') {\n if (oldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n workInProgress.effectTag |= Update;\n }\n }\n\n // If shouldComponentUpdate returned false, we should still update the\n // memoized props/state to indicate that this work can be reused.\n memoizeProps(workInProgress, newProps);\n memoizeState(workInProgress, newState);\n }\n\n // Update the existing instance's state, props, and context pointers even\n // if shouldComponentUpdate returns false.\n instance.props = newProps;\n instance.state = newState;\n instance.context = newContext;\n\n return shouldUpdate;\n }\n\n return {\n adoptClassInstance: adoptClassInstance,\n constructClassInstance: constructClassInstance,\n mountClassInstance: mountClassInstance,\n // resumeMountClassInstance,\n updateClassInstance: updateClassInstance\n };\n};\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol['for'];\n\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol['for']('react.element') : 0xeac7;\nvar REACT_CALL_TYPE = hasSymbol ? Symbol['for']('react.call') : 0xeac8;\nvar REACT_RETURN_TYPE = hasSymbol ? Symbol['for']('react.return') : 0xeac9;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol['for']('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol['for']('react.fragment') : 0xeacb;\n\nvar MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\n\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable === 'undefined') {\n return null;\n }\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n return null;\n}\n\nvar getCurrentFiberStackAddendum$1 = ReactDebugCurrentFiber.getCurrentFiberStackAddendum;\n\n\n{\n var didWarnAboutMaps = false;\n /**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n var ownerHasKeyUseWarning = {};\n var ownerHasFunctionTypeWarning = {};\n\n var warnForMissingKey = function (child) {\n if (child === null || typeof child !== 'object') {\n return;\n }\n if (!child._store || child._store.validated || child.key != null) {\n return;\n }\n !(typeof child._store === 'object') ? invariant(false, 'React Component in warnForMissingKey should have a _store. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n child._store.validated = true;\n\n var currentComponentErrorInfo = 'Each child in an array or iterator should have a unique ' + '\"key\" prop. See https://fb.me/react-warning-keys for ' + 'more information.' + (getCurrentFiberStackAddendum$1() || '');\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true;\n\n warning(false, 'Each child in an array or iterator should have a unique ' + '\"key\" prop. See https://fb.me/react-warning-keys for ' + 'more information.%s', getCurrentFiberStackAddendum$1());\n };\n}\n\nvar isArray$1 = Array.isArray;\n\nfunction coerceRef(current, element) {\n var mixedRef = element.ref;\n if (mixedRef !== null && typeof mixedRef !== 'function') {\n if (element._owner) {\n var owner = element._owner;\n var inst = void 0;\n if (owner) {\n var ownerFiber = owner;\n !(ownerFiber.tag === ClassComponent) ? invariant(false, 'Stateless function components cannot have refs.') : void 0;\n inst = ownerFiber.stateNode;\n }\n !inst ? invariant(false, 'Missing owner for string ref %s. This error is likely caused by a bug in React. Please file an issue.', mixedRef) : void 0;\n var stringRef = '' + mixedRef;\n // Check if previous string ref matches new string ref\n if (current !== null && current.ref !== null && current.ref._stringRef === stringRef) {\n return current.ref;\n }\n var ref = function (value) {\n var refs = inst.refs === emptyObject ? inst.refs = {} : inst.refs;\n if (value === null) {\n delete refs[stringRef];\n } else {\n refs[stringRef] = value;\n }\n };\n ref._stringRef = stringRef;\n return ref;\n } else {\n !(typeof mixedRef === 'string') ? invariant(false, 'Expected ref to be a function or a string.') : void 0;\n !element._owner ? invariant(false, 'Element ref was specified as a string (%s) but no owner was set. You may have multiple copies of React loaded. (details: https://fb.me/react-refs-must-have-owner).', mixedRef) : void 0;\n }\n }\n return mixedRef;\n}\n\nfunction throwOnInvalidObjectType(returnFiber, newChild) {\n if (returnFiber.type !== 'textarea') {\n var addendum = '';\n {\n addendum = ' If you meant to render a collection of children, use an array ' + 'instead.' + (getCurrentFiberStackAddendum$1() || '');\n }\n invariant(false, 'Objects are not valid as a React child (found: %s).%s', Object.prototype.toString.call(newChild) === '[object Object]' ? 'object with keys {' + Object.keys(newChild).join(', ') + '}' : newChild, addendum);\n }\n}\n\nfunction warnOnFunctionType() {\n var currentComponentErrorInfo = 'Functions are not valid as a React child. This may happen if ' + 'you return a Component instead of from render. ' + 'Or maybe you meant to call this function rather than return it.' + (getCurrentFiberStackAddendum$1() || '');\n\n if (ownerHasFunctionTypeWarning[currentComponentErrorInfo]) {\n return;\n }\n ownerHasFunctionTypeWarning[currentComponentErrorInfo] = true;\n\n warning(false, 'Functions are not valid as a React child. This may happen if ' + 'you return a Component instead of from render. ' + 'Or maybe you meant to call this function rather than return it.%s', getCurrentFiberStackAddendum$1() || '');\n}\n\n// This wrapper function exists because I expect to clone the code in each path\n// to be able to optimize each path individually by branching early. This needs\n// a compiler or we can do it manually. Helpers that don't need this branching\n// live outside of this function.\nfunction ChildReconciler(shouldTrackSideEffects) {\n function deleteChild(returnFiber, childToDelete) {\n if (!shouldTrackSideEffects) {\n // Noop.\n return;\n }\n // Deletions are added in reversed order so we add it to the front.\n // At this point, the return fiber's effect list is empty except for\n // deletions, so we can just append the deletion to the list. The remaining\n // effects aren't added until the complete phase. Once we implement\n // resuming, this may not be true.\n var last = returnFiber.lastEffect;\n if (last !== null) {\n last.nextEffect = childToDelete;\n returnFiber.lastEffect = childToDelete;\n } else {\n returnFiber.firstEffect = returnFiber.lastEffect = childToDelete;\n }\n childToDelete.nextEffect = null;\n childToDelete.effectTag = Deletion;\n }\n\n function deleteRemainingChildren(returnFiber, currentFirstChild) {\n if (!shouldTrackSideEffects) {\n // Noop.\n return null;\n }\n\n // TODO: For the shouldClone case, this could be micro-optimized a bit by\n // assuming that after the first child we've already added everything.\n var childToDelete = currentFirstChild;\n while (childToDelete !== null) {\n deleteChild(returnFiber, childToDelete);\n childToDelete = childToDelete.sibling;\n }\n return null;\n }\n\n function mapRemainingChildren(returnFiber, currentFirstChild) {\n // Add the remaining children to a temporary map so that we can find them by\n // keys quickly. Implicit (null) keys get added to this set with their index\n var existingChildren = new Map();\n\n var existingChild = currentFirstChild;\n while (existingChild !== null) {\n if (existingChild.key !== null) {\n existingChildren.set(existingChild.key, existingChild);\n } else {\n existingChildren.set(existingChild.index, existingChild);\n }\n existingChild = existingChild.sibling;\n }\n return existingChildren;\n }\n\n function useFiber(fiber, pendingProps, expirationTime) {\n // We currently set sibling to null and index to 0 here because it is easy\n // to forget to do before returning it. E.g. for the single child case.\n var clone = createWorkInProgress(fiber, pendingProps, expirationTime);\n clone.index = 0;\n clone.sibling = null;\n return clone;\n }\n\n function placeChild(newFiber, lastPlacedIndex, newIndex) {\n newFiber.index = newIndex;\n if (!shouldTrackSideEffects) {\n // Noop.\n return lastPlacedIndex;\n }\n var current = newFiber.alternate;\n if (current !== null) {\n var oldIndex = current.index;\n if (oldIndex < lastPlacedIndex) {\n // This is a move.\n newFiber.effectTag = Placement;\n return lastPlacedIndex;\n } else {\n // This item can stay in place.\n return oldIndex;\n }\n } else {\n // This is an insertion.\n newFiber.effectTag = Placement;\n return lastPlacedIndex;\n }\n }\n\n function placeSingleChild(newFiber) {\n // This is simpler for the single child case. We only need to do a\n // placement for inserting new children.\n if (shouldTrackSideEffects && newFiber.alternate === null) {\n newFiber.effectTag = Placement;\n }\n return newFiber;\n }\n\n function updateTextNode(returnFiber, current, textContent, expirationTime) {\n if (current === null || current.tag !== HostText) {\n // Insert\n var created = createFiberFromText(textContent, returnFiber.internalContextTag, expirationTime);\n created['return'] = returnFiber;\n return created;\n } else {\n // Update\n var existing = useFiber(current, textContent, expirationTime);\n existing['return'] = returnFiber;\n return existing;\n }\n }\n\n function updateElement(returnFiber, current, element, expirationTime) {\n if (current !== null && current.type === element.type) {\n // Move based on index\n var existing = useFiber(current, element.props, expirationTime);\n existing.ref = coerceRef(current, element);\n existing['return'] = returnFiber;\n {\n existing._debugSource = element._source;\n existing._debugOwner = element._owner;\n }\n return existing;\n } else {\n // Insert\n var created = createFiberFromElement(element, returnFiber.internalContextTag, expirationTime);\n created.ref = coerceRef(current, element);\n created['return'] = returnFiber;\n return created;\n }\n }\n\n function updateCall(returnFiber, current, call, expirationTime) {\n // TODO: Should this also compare handler to determine whether to reuse?\n if (current === null || current.tag !== CallComponent) {\n // Insert\n var created = createFiberFromCall(call, returnFiber.internalContextTag, expirationTime);\n created['return'] = returnFiber;\n return created;\n } else {\n // Move based on index\n var existing = useFiber(current, call, expirationTime);\n existing['return'] = returnFiber;\n return existing;\n }\n }\n\n function updateReturn(returnFiber, current, returnNode, expirationTime) {\n if (current === null || current.tag !== ReturnComponent) {\n // Insert\n var created = createFiberFromReturn(returnNode, returnFiber.internalContextTag, expirationTime);\n created.type = returnNode.value;\n created['return'] = returnFiber;\n return created;\n } else {\n // Move based on index\n var existing = useFiber(current, null, expirationTime);\n existing.type = returnNode.value;\n existing['return'] = returnFiber;\n return existing;\n }\n }\n\n function updatePortal(returnFiber, current, portal, expirationTime) {\n if (current === null || current.tag !== HostPortal || current.stateNode.containerInfo !== portal.containerInfo || current.stateNode.implementation !== portal.implementation) {\n // Insert\n var created = createFiberFromPortal(portal, returnFiber.internalContextTag, expirationTime);\n created['return'] = returnFiber;\n return created;\n } else {\n // Update\n var existing = useFiber(current, portal.children || [], expirationTime);\n existing['return'] = returnFiber;\n return existing;\n }\n }\n\n function updateFragment(returnFiber, current, fragment, expirationTime, key) {\n if (current === null || current.tag !== Fragment) {\n // Insert\n var created = createFiberFromFragment(fragment, returnFiber.internalContextTag, expirationTime, key);\n created['return'] = returnFiber;\n return created;\n } else {\n // Update\n var existing = useFiber(current, fragment, expirationTime);\n existing['return'] = returnFiber;\n return existing;\n }\n }\n\n function createChild(returnFiber, newChild, expirationTime) {\n if (typeof newChild === 'string' || typeof newChild === 'number') {\n // Text nodes don't have keys. If the previous node is implicitly keyed\n // we can continue to replace it without aborting even if it is not a text\n // node.\n var created = createFiberFromText('' + newChild, returnFiber.internalContextTag, expirationTime);\n created['return'] = returnFiber;\n return created;\n }\n\n if (typeof newChild === 'object' && newChild !== null) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n {\n if (newChild.type === REACT_FRAGMENT_TYPE) {\n var _created = createFiberFromFragment(newChild.props.children, returnFiber.internalContextTag, expirationTime, newChild.key);\n _created['return'] = returnFiber;\n return _created;\n } else {\n var _created2 = createFiberFromElement(newChild, returnFiber.internalContextTag, expirationTime);\n _created2.ref = coerceRef(null, newChild);\n _created2['return'] = returnFiber;\n return _created2;\n }\n }\n\n case REACT_CALL_TYPE:\n {\n var _created3 = createFiberFromCall(newChild, returnFiber.internalContextTag, expirationTime);\n _created3['return'] = returnFiber;\n return _created3;\n }\n\n case REACT_RETURN_TYPE:\n {\n var _created4 = createFiberFromReturn(newChild, returnFiber.internalContextTag, expirationTime);\n _created4.type = newChild.value;\n _created4['return'] = returnFiber;\n return _created4;\n }\n\n case REACT_PORTAL_TYPE:\n {\n var _created5 = createFiberFromPortal(newChild, returnFiber.internalContextTag, expirationTime);\n _created5['return'] = returnFiber;\n return _created5;\n }\n }\n\n if (isArray$1(newChild) || getIteratorFn(newChild)) {\n var _created6 = createFiberFromFragment(newChild, returnFiber.internalContextTag, expirationTime, null);\n _created6['return'] = returnFiber;\n return _created6;\n }\n\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n\n {\n if (typeof newChild === 'function') {\n warnOnFunctionType();\n }\n }\n\n return null;\n }\n\n function updateSlot(returnFiber, oldFiber, newChild, expirationTime) {\n // Update the fiber if the keys match, otherwise return null.\n\n var key = oldFiber !== null ? oldFiber.key : null;\n\n if (typeof newChild === 'string' || typeof newChild === 'number') {\n // Text nodes don't have keys. If the previous node is implicitly keyed\n // we can continue to replace it without aborting even if it is not a text\n // node.\n if (key !== null) {\n return null;\n }\n return updateTextNode(returnFiber, oldFiber, '' + newChild, expirationTime);\n }\n\n if (typeof newChild === 'object' && newChild !== null) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n {\n if (newChild.key === key) {\n if (newChild.type === REACT_FRAGMENT_TYPE) {\n return updateFragment(returnFiber, oldFiber, newChild.props.children, expirationTime, key);\n }\n return updateElement(returnFiber, oldFiber, newChild, expirationTime);\n } else {\n return null;\n }\n }\n\n case REACT_CALL_TYPE:\n {\n if (newChild.key === key) {\n return updateCall(returnFiber, oldFiber, newChild, expirationTime);\n } else {\n return null;\n }\n }\n\n case REACT_RETURN_TYPE:\n {\n // Returns don't have keys. If the previous node is implicitly keyed\n // we can continue to replace it without aborting even if it is not a\n // yield.\n if (key === null) {\n return updateReturn(returnFiber, oldFiber, newChild, expirationTime);\n } else {\n return null;\n }\n }\n\n case REACT_PORTAL_TYPE:\n {\n if (newChild.key === key) {\n return updatePortal(returnFiber, oldFiber, newChild, expirationTime);\n } else {\n return null;\n }\n }\n }\n\n if (isArray$1(newChild) || getIteratorFn(newChild)) {\n if (key !== null) {\n return null;\n }\n\n return updateFragment(returnFiber, oldFiber, newChild, expirationTime, null);\n }\n\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n\n {\n if (typeof newChild === 'function') {\n warnOnFunctionType();\n }\n }\n\n return null;\n }\n\n function updateFromMap(existingChildren, returnFiber, newIdx, newChild, expirationTime) {\n if (typeof newChild === 'string' || typeof newChild === 'number') {\n // Text nodes don't have keys, so we neither have to check the old nor\n // new node for the key. If both are text nodes, they match.\n var matchedFiber = existingChildren.get(newIdx) || null;\n return updateTextNode(returnFiber, matchedFiber, '' + newChild, expirationTime);\n }\n\n if (typeof newChild === 'object' && newChild !== null) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n {\n var _matchedFiber = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null;\n if (newChild.type === REACT_FRAGMENT_TYPE) {\n return updateFragment(returnFiber, _matchedFiber, newChild.props.children, expirationTime, newChild.key);\n }\n return updateElement(returnFiber, _matchedFiber, newChild, expirationTime);\n }\n\n case REACT_CALL_TYPE:\n {\n var _matchedFiber2 = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null;\n return updateCall(returnFiber, _matchedFiber2, newChild, expirationTime);\n }\n\n case REACT_RETURN_TYPE:\n {\n // Returns don't have keys, so we neither have to check the old nor\n // new node for the key. If both are returns, they match.\n var _matchedFiber3 = existingChildren.get(newIdx) || null;\n return updateReturn(returnFiber, _matchedFiber3, newChild, expirationTime);\n }\n\n case REACT_PORTAL_TYPE:\n {\n var _matchedFiber4 = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null;\n return updatePortal(returnFiber, _matchedFiber4, newChild, expirationTime);\n }\n }\n\n if (isArray$1(newChild) || getIteratorFn(newChild)) {\n var _matchedFiber5 = existingChildren.get(newIdx) || null;\n return updateFragment(returnFiber, _matchedFiber5, newChild, expirationTime, null);\n }\n\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n\n {\n if (typeof newChild === 'function') {\n warnOnFunctionType();\n }\n }\n\n return null;\n }\n\n /**\n * Warns if there is a duplicate or missing key\n */\n function warnOnInvalidKey(child, knownKeys) {\n {\n if (typeof child !== 'object' || child === null) {\n return knownKeys;\n }\n switch (child.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_CALL_TYPE:\n case REACT_PORTAL_TYPE:\n warnForMissingKey(child);\n var key = child.key;\n if (typeof key !== 'string') {\n break;\n }\n if (knownKeys === null) {\n knownKeys = new Set();\n knownKeys.add(key);\n break;\n }\n if (!knownKeys.has(key)) {\n knownKeys.add(key);\n break;\n }\n warning(false, '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.%s', key, getCurrentFiberStackAddendum$1());\n break;\n default:\n break;\n }\n }\n return knownKeys;\n }\n\n function reconcileChildrenArray(returnFiber, currentFirstChild, newChildren, expirationTime) {\n // This algorithm can't optimize by searching from boths ends since we\n // don't have backpointers on fibers. I'm trying to see how far we can get\n // with that model. If it ends up not being worth the tradeoffs, we can\n // add it later.\n\n // Even with a two ended optimization, we'd want to optimize for the case\n // where there are few changes and brute force the comparison instead of\n // going for the Map. It'd like to explore hitting that path first in\n // forward-only mode and only go for the Map once we notice that we need\n // lots of look ahead. This doesn't handle reversal as well as two ended\n // search but that's unusual. Besides, for the two ended optimization to\n // work on Iterables, we'd need to copy the whole set.\n\n // In this first iteration, we'll just live with hitting the bad case\n // (adding everything to a Map) in for every insert/move.\n\n // If you change this code, also update reconcileChildrenIterator() which\n // uses the same algorithm.\n\n {\n // First, validate keys.\n var knownKeys = null;\n for (var i = 0; i < newChildren.length; i++) {\n var child = newChildren[i];\n knownKeys = warnOnInvalidKey(child, knownKeys);\n }\n }\n\n var resultingFirstChild = null;\n var previousNewFiber = null;\n\n var oldFiber = currentFirstChild;\n var lastPlacedIndex = 0;\n var newIdx = 0;\n var nextOldFiber = null;\n for (; oldFiber !== null && newIdx < newChildren.length; newIdx++) {\n if (oldFiber.index > newIdx) {\n nextOldFiber = oldFiber;\n oldFiber = null;\n } else {\n nextOldFiber = oldFiber.sibling;\n }\n var newFiber = updateSlot(returnFiber, oldFiber, newChildren[newIdx], expirationTime);\n if (newFiber === null) {\n // TODO: This breaks on empty slots like null children. That's\n // unfortunate because it triggers the slow path all the time. We need\n // a better way to communicate whether this was a miss or null,\n // boolean, undefined, etc.\n if (oldFiber === null) {\n oldFiber = nextOldFiber;\n }\n break;\n }\n if (shouldTrackSideEffects) {\n if (oldFiber && newFiber.alternate === null) {\n // We matched the slot, but we didn't reuse the existing fiber, so we\n // need to delete the existing child.\n deleteChild(returnFiber, oldFiber);\n }\n }\n lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx);\n if (previousNewFiber === null) {\n // TODO: Move out of the loop. This only happens for the first run.\n resultingFirstChild = newFiber;\n } else {\n // TODO: Defer siblings if we're not at the right index for this slot.\n // I.e. if we had null values before, then we want to defer this\n // for each null value. However, we also don't want to call updateSlot\n // with the previous one.\n previousNewFiber.sibling = newFiber;\n }\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n\n if (newIdx === newChildren.length) {\n // We've reached the end of the new children. We can delete the rest.\n deleteRemainingChildren(returnFiber, oldFiber);\n return resultingFirstChild;\n }\n\n if (oldFiber === null) {\n // If we don't have any more existing children we can choose a fast path\n // since the rest will all be insertions.\n for (; newIdx < newChildren.length; newIdx++) {\n var _newFiber = createChild(returnFiber, newChildren[newIdx], expirationTime);\n if (!_newFiber) {\n continue;\n }\n lastPlacedIndex = placeChild(_newFiber, lastPlacedIndex, newIdx);\n if (previousNewFiber === null) {\n // TODO: Move out of the loop. This only happens for the first run.\n resultingFirstChild = _newFiber;\n } else {\n previousNewFiber.sibling = _newFiber;\n }\n previousNewFiber = _newFiber;\n }\n return resultingFirstChild;\n }\n\n // Add all children to a key map for quick lookups.\n var existingChildren = mapRemainingChildren(returnFiber, oldFiber);\n\n // Keep scanning and use the map to restore deleted items as moves.\n for (; newIdx < newChildren.length; newIdx++) {\n var _newFiber2 = updateFromMap(existingChildren, returnFiber, newIdx, newChildren[newIdx], expirationTime);\n if (_newFiber2) {\n if (shouldTrackSideEffects) {\n if (_newFiber2.alternate !== null) {\n // The new fiber is a work in progress, but if there exists a\n // current, that means that we reused the fiber. We need to delete\n // it from the child list so that we don't add it to the deletion\n // list.\n existingChildren['delete'](_newFiber2.key === null ? newIdx : _newFiber2.key);\n }\n }\n lastPlacedIndex = placeChild(_newFiber2, lastPlacedIndex, newIdx);\n if (previousNewFiber === null) {\n resultingFirstChild = _newFiber2;\n } else {\n previousNewFiber.sibling = _newFiber2;\n }\n previousNewFiber = _newFiber2;\n }\n }\n\n if (shouldTrackSideEffects) {\n // Any existing children that weren't consumed above were deleted. We need\n // to add them to the deletion list.\n existingChildren.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n }\n\n return resultingFirstChild;\n }\n\n function reconcileChildrenIterator(returnFiber, currentFirstChild, newChildrenIterable, expirationTime) {\n // This is the same implementation as reconcileChildrenArray(),\n // but using the iterator instead.\n\n var iteratorFn = getIteratorFn(newChildrenIterable);\n !(typeof iteratorFn === 'function') ? invariant(false, 'An object is not an iterable. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n\n {\n // Warn about using Maps as children\n if (typeof newChildrenIterable.entries === 'function') {\n var possibleMap = newChildrenIterable;\n if (possibleMap.entries === iteratorFn) {\n warning(didWarnAboutMaps, 'Using Maps as children is unsupported and will likely yield ' + 'unexpected results. Convert it to a sequence/iterable of keyed ' + 'ReactElements instead.%s', getCurrentFiberStackAddendum$1());\n didWarnAboutMaps = true;\n }\n }\n\n // First, validate keys.\n // We'll get a different iterator later for the main pass.\n var _newChildren = iteratorFn.call(newChildrenIterable);\n if (_newChildren) {\n var knownKeys = null;\n var _step = _newChildren.next();\n for (; !_step.done; _step = _newChildren.next()) {\n var child = _step.value;\n knownKeys = warnOnInvalidKey(child, knownKeys);\n }\n }\n }\n\n var newChildren = iteratorFn.call(newChildrenIterable);\n !(newChildren != null) ? invariant(false, 'An iterable object provided no iterator.') : void 0;\n\n var resultingFirstChild = null;\n var previousNewFiber = null;\n\n var oldFiber = currentFirstChild;\n var lastPlacedIndex = 0;\n var newIdx = 0;\n var nextOldFiber = null;\n\n var step = newChildren.next();\n for (; oldFiber !== null && !step.done; newIdx++, step = newChildren.next()) {\n if (oldFiber.index > newIdx) {\n nextOldFiber = oldFiber;\n oldFiber = null;\n } else {\n nextOldFiber = oldFiber.sibling;\n }\n var newFiber = updateSlot(returnFiber, oldFiber, step.value, expirationTime);\n if (newFiber === null) {\n // TODO: This breaks on empty slots like null children. That's\n // unfortunate because it triggers the slow path all the time. We need\n // a better way to communicate whether this was a miss or null,\n // boolean, undefined, etc.\n if (!oldFiber) {\n oldFiber = nextOldFiber;\n }\n break;\n }\n if (shouldTrackSideEffects) {\n if (oldFiber && newFiber.alternate === null) {\n // We matched the slot, but we didn't reuse the existing fiber, so we\n // need to delete the existing child.\n deleteChild(returnFiber, oldFiber);\n }\n }\n lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx);\n if (previousNewFiber === null) {\n // TODO: Move out of the loop. This only happens for the first run.\n resultingFirstChild = newFiber;\n } else {\n // TODO: Defer siblings if we're not at the right index for this slot.\n // I.e. if we had null values before, then we want to defer this\n // for each null value. However, we also don't want to call updateSlot\n // with the previous one.\n previousNewFiber.sibling = newFiber;\n }\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n\n if (step.done) {\n // We've reached the end of the new children. We can delete the rest.\n deleteRemainingChildren(returnFiber, oldFiber);\n return resultingFirstChild;\n }\n\n if (oldFiber === null) {\n // If we don't have any more existing children we can choose a fast path\n // since the rest will all be insertions.\n for (; !step.done; newIdx++, step = newChildren.next()) {\n var _newFiber3 = createChild(returnFiber, step.value, expirationTime);\n if (_newFiber3 === null) {\n continue;\n }\n lastPlacedIndex = placeChild(_newFiber3, lastPlacedIndex, newIdx);\n if (previousNewFiber === null) {\n // TODO: Move out of the loop. This only happens for the first run.\n resultingFirstChild = _newFiber3;\n } else {\n previousNewFiber.sibling = _newFiber3;\n }\n previousNewFiber = _newFiber3;\n }\n return resultingFirstChild;\n }\n\n // Add all children to a key map for quick lookups.\n var existingChildren = mapRemainingChildren(returnFiber, oldFiber);\n\n // Keep scanning and use the map to restore deleted items as moves.\n for (; !step.done; newIdx++, step = newChildren.next()) {\n var _newFiber4 = updateFromMap(existingChildren, returnFiber, newIdx, step.value, expirationTime);\n if (_newFiber4 !== null) {\n if (shouldTrackSideEffects) {\n if (_newFiber4.alternate !== null) {\n // The new fiber is a work in progress, but if there exists a\n // current, that means that we reused the fiber. We need to delete\n // it from the child list so that we don't add it to the deletion\n // list.\n existingChildren['delete'](_newFiber4.key === null ? newIdx : _newFiber4.key);\n }\n }\n lastPlacedIndex = placeChild(_newFiber4, lastPlacedIndex, newIdx);\n if (previousNewFiber === null) {\n resultingFirstChild = _newFiber4;\n } else {\n previousNewFiber.sibling = _newFiber4;\n }\n previousNewFiber = _newFiber4;\n }\n }\n\n if (shouldTrackSideEffects) {\n // Any existing children that weren't consumed above were deleted. We need\n // to add them to the deletion list.\n existingChildren.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n }\n\n return resultingFirstChild;\n }\n\n function reconcileSingleTextNode(returnFiber, currentFirstChild, textContent, expirationTime) {\n // There's no need to check for keys on text nodes since we don't have a\n // way to define them.\n if (currentFirstChild !== null && currentFirstChild.tag === HostText) {\n // We already have an existing node so let's just update it and delete\n // the rest.\n deleteRemainingChildren(returnFiber, currentFirstChild.sibling);\n var existing = useFiber(currentFirstChild, textContent, expirationTime);\n existing['return'] = returnFiber;\n return existing;\n }\n // The existing first child is not a text node so we need to create one\n // and delete the existing ones.\n deleteRemainingChildren(returnFiber, currentFirstChild);\n var created = createFiberFromText(textContent, returnFiber.internalContextTag, expirationTime);\n created['return'] = returnFiber;\n return created;\n }\n\n function reconcileSingleElement(returnFiber, currentFirstChild, element, expirationTime) {\n var key = element.key;\n var child = currentFirstChild;\n while (child !== null) {\n // TODO: If key === null and child.key === null, then this only applies to\n // the first item in the list.\n if (child.key === key) {\n if (child.tag === Fragment ? element.type === REACT_FRAGMENT_TYPE : child.type === element.type) {\n deleteRemainingChildren(returnFiber, child.sibling);\n var existing = useFiber(child, element.type === REACT_FRAGMENT_TYPE ? element.props.children : element.props, expirationTime);\n existing.ref = coerceRef(child, element);\n existing['return'] = returnFiber;\n {\n existing._debugSource = element._source;\n existing._debugOwner = element._owner;\n }\n return existing;\n } else {\n deleteRemainingChildren(returnFiber, child);\n break;\n }\n } else {\n deleteChild(returnFiber, child);\n }\n child = child.sibling;\n }\n\n if (element.type === REACT_FRAGMENT_TYPE) {\n var created = createFiberFromFragment(element.props.children, returnFiber.internalContextTag, expirationTime, element.key);\n created['return'] = returnFiber;\n return created;\n } else {\n var _created7 = createFiberFromElement(element, returnFiber.internalContextTag, expirationTime);\n _created7.ref = coerceRef(currentFirstChild, element);\n _created7['return'] = returnFiber;\n return _created7;\n }\n }\n\n function reconcileSingleCall(returnFiber, currentFirstChild, call, expirationTime) {\n var key = call.key;\n var child = currentFirstChild;\n while (child !== null) {\n // TODO: If key === null and child.key === null, then this only applies to\n // the first item in the list.\n if (child.key === key) {\n if (child.tag === CallComponent) {\n deleteRemainingChildren(returnFiber, child.sibling);\n var existing = useFiber(child, call, expirationTime);\n existing['return'] = returnFiber;\n return existing;\n } else {\n deleteRemainingChildren(returnFiber, child);\n break;\n }\n } else {\n deleteChild(returnFiber, child);\n }\n child = child.sibling;\n }\n\n var created = createFiberFromCall(call, returnFiber.internalContextTag, expirationTime);\n created['return'] = returnFiber;\n return created;\n }\n\n function reconcileSingleReturn(returnFiber, currentFirstChild, returnNode, expirationTime) {\n // There's no need to check for keys on yields since they're stateless.\n var child = currentFirstChild;\n if (child !== null) {\n if (child.tag === ReturnComponent) {\n deleteRemainingChildren(returnFiber, child.sibling);\n var existing = useFiber(child, null, expirationTime);\n existing.type = returnNode.value;\n existing['return'] = returnFiber;\n return existing;\n } else {\n deleteRemainingChildren(returnFiber, child);\n }\n }\n\n var created = createFiberFromReturn(returnNode, returnFiber.internalContextTag, expirationTime);\n created.type = returnNode.value;\n created['return'] = returnFiber;\n return created;\n }\n\n function reconcileSinglePortal(returnFiber, currentFirstChild, portal, expirationTime) {\n var key = portal.key;\n var child = currentFirstChild;\n while (child !== null) {\n // TODO: If key === null and child.key === null, then this only applies to\n // the first item in the list.\n if (child.key === key) {\n if (child.tag === HostPortal && child.stateNode.containerInfo === portal.containerInfo && child.stateNode.implementation === portal.implementation) {\n deleteRemainingChildren(returnFiber, child.sibling);\n var existing = useFiber(child, portal.children || [], expirationTime);\n existing['return'] = returnFiber;\n return existing;\n } else {\n deleteRemainingChildren(returnFiber, child);\n break;\n }\n } else {\n deleteChild(returnFiber, child);\n }\n child = child.sibling;\n }\n\n var created = createFiberFromPortal(portal, returnFiber.internalContextTag, expirationTime);\n created['return'] = returnFiber;\n return created;\n }\n\n // This API will tag the children with the side-effect of the reconciliation\n // itself. They will be added to the side-effect list as we pass through the\n // children and the parent.\n function reconcileChildFibers(returnFiber, currentFirstChild, newChild, expirationTime) {\n // This function is not recursive.\n // If the top level item is an array, we treat it as a set of children,\n // not as a fragment. Nested arrays on the other hand will be treated as\n // fragment nodes. Recursion happens at the normal flow.\n\n // Handle top level unkeyed fragments as if they were arrays.\n // This leads to an ambiguity between <>{[...]} and <>....\n // We treat the ambiguous cases above the same.\n if (typeof newChild === 'object' && newChild !== null && newChild.type === REACT_FRAGMENT_TYPE && newChild.key === null) {\n newChild = newChild.props.children;\n }\n\n // Handle object types\n var isObject = typeof newChild === 'object' && newChild !== null;\n\n if (isObject) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return placeSingleChild(reconcileSingleElement(returnFiber, currentFirstChild, newChild, expirationTime));\n\n case REACT_CALL_TYPE:\n return placeSingleChild(reconcileSingleCall(returnFiber, currentFirstChild, newChild, expirationTime));\n case REACT_RETURN_TYPE:\n return placeSingleChild(reconcileSingleReturn(returnFiber, currentFirstChild, newChild, expirationTime));\n case REACT_PORTAL_TYPE:\n return placeSingleChild(reconcileSinglePortal(returnFiber, currentFirstChild, newChild, expirationTime));\n }\n }\n\n if (typeof newChild === 'string' || typeof newChild === 'number') {\n return placeSingleChild(reconcileSingleTextNode(returnFiber, currentFirstChild, '' + newChild, expirationTime));\n }\n\n if (isArray$1(newChild)) {\n return reconcileChildrenArray(returnFiber, currentFirstChild, newChild, expirationTime);\n }\n\n if (getIteratorFn(newChild)) {\n return reconcileChildrenIterator(returnFiber, currentFirstChild, newChild, expirationTime);\n }\n\n if (isObject) {\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n\n {\n if (typeof newChild === 'function') {\n warnOnFunctionType();\n }\n }\n if (typeof newChild === 'undefined') {\n // If the new child is undefined, and the return fiber is a composite\n // component, throw an error. If Fiber return types are disabled,\n // we already threw above.\n switch (returnFiber.tag) {\n case ClassComponent:\n {\n {\n var instance = returnFiber.stateNode;\n if (instance.render._isMockFunction) {\n // We allow auto-mocks to proceed as if they're returning null.\n break;\n }\n }\n }\n // Intentionally fall through to the next case, which handles both\n // functions and classes\n // eslint-disable-next-lined no-fallthrough\n case FunctionalComponent:\n {\n var Component = returnFiber.type;\n invariant(false, '%s(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null.', Component.displayName || Component.name || 'Component');\n }\n }\n }\n\n // Remaining cases are all treated as empty.\n return deleteRemainingChildren(returnFiber, currentFirstChild);\n }\n\n return reconcileChildFibers;\n}\n\nvar reconcileChildFibers = ChildReconciler(true);\nvar mountChildFibers = ChildReconciler(false);\n\nfunction cloneChildFibers(current, workInProgress) {\n !(current === null || workInProgress.child === current.child) ? invariant(false, 'Resuming work not yet implemented.') : void 0;\n\n if (workInProgress.child === null) {\n return;\n }\n\n var currentChild = workInProgress.child;\n var newChild = createWorkInProgress(currentChild, currentChild.pendingProps, currentChild.expirationTime);\n workInProgress.child = newChild;\n\n newChild['return'] = workInProgress;\n while (currentChild.sibling !== null) {\n currentChild = currentChild.sibling;\n newChild = newChild.sibling = createWorkInProgress(currentChild, currentChild.pendingProps, currentChild.expirationTime);\n newChild['return'] = workInProgress;\n }\n newChild.sibling = null;\n}\n\n{\n var warnedAboutStatelessRefs = {};\n}\n\nvar ReactFiberBeginWork = function (config, hostContext, hydrationContext, scheduleWork, computeExpirationForFiber) {\n var shouldSetTextContent = config.shouldSetTextContent,\n useSyncScheduling = config.useSyncScheduling,\n shouldDeprioritizeSubtree = config.shouldDeprioritizeSubtree;\n var pushHostContext = hostContext.pushHostContext,\n pushHostContainer = hostContext.pushHostContainer;\n var enterHydrationState = hydrationContext.enterHydrationState,\n resetHydrationState = hydrationContext.resetHydrationState,\n tryToClaimNextHydratableInstance = hydrationContext.tryToClaimNextHydratableInstance;\n\n var _ReactFiberClassCompo = ReactFiberClassComponent(scheduleWork, computeExpirationForFiber, memoizeProps, memoizeState),\n adoptClassInstance = _ReactFiberClassCompo.adoptClassInstance,\n constructClassInstance = _ReactFiberClassCompo.constructClassInstance,\n mountClassInstance = _ReactFiberClassCompo.mountClassInstance,\n updateClassInstance = _ReactFiberClassCompo.updateClassInstance;\n\n // TODO: Remove this and use reconcileChildrenAtExpirationTime directly.\n\n\n function reconcileChildren(current, workInProgress, nextChildren) {\n reconcileChildrenAtExpirationTime(current, workInProgress, nextChildren, workInProgress.expirationTime);\n }\n\n function reconcileChildrenAtExpirationTime(current, workInProgress, nextChildren, renderExpirationTime) {\n if (current === null) {\n // If this is a fresh new component that hasn't been rendered yet, we\n // won't update its child set by applying minimal side-effects. Instead,\n // we will add them all to the child before it gets rendered. That means\n // we can optimize this reconciliation pass by not tracking side-effects.\n workInProgress.child = mountChildFibers(workInProgress, null, nextChildren, renderExpirationTime);\n } else {\n // If the current child is the same as the work in progress, it means that\n // we haven't yet started any work on these children. Therefore, we use\n // the clone algorithm to create a copy of all the current children.\n\n // If we had any progressed work already, that is invalid at this point so\n // let's throw it out.\n workInProgress.child = reconcileChildFibers(workInProgress, current.child, nextChildren, renderExpirationTime);\n }\n }\n\n function updateFragment(current, workInProgress) {\n var nextChildren = workInProgress.pendingProps;\n if (hasContextChanged()) {\n // Normally we can bail out on props equality but if context has changed\n // we don't do the bailout and we have to reuse existing props instead.\n if (nextChildren === null) {\n nextChildren = workInProgress.memoizedProps;\n }\n } else if (nextChildren === null || workInProgress.memoizedProps === nextChildren) {\n return bailoutOnAlreadyFinishedWork(current, workInProgress);\n }\n reconcileChildren(current, workInProgress, nextChildren);\n memoizeProps(workInProgress, nextChildren);\n return workInProgress.child;\n }\n\n function markRef(current, workInProgress) {\n var ref = workInProgress.ref;\n if (ref !== null && (!current || current.ref !== ref)) {\n // Schedule a Ref effect\n workInProgress.effectTag |= Ref;\n }\n }\n\n function updateFunctionalComponent(current, workInProgress) {\n var fn = workInProgress.type;\n var nextProps = workInProgress.pendingProps;\n\n var memoizedProps = workInProgress.memoizedProps;\n if (hasContextChanged()) {\n // Normally we can bail out on props equality but if context has changed\n // we don't do the bailout and we have to reuse existing props instead.\n if (nextProps === null) {\n nextProps = memoizedProps;\n }\n } else {\n if (nextProps === null || memoizedProps === nextProps) {\n return bailoutOnAlreadyFinishedWork(current, workInProgress);\n }\n // TODO: consider bringing fn.shouldComponentUpdate() back.\n // It used to be here.\n }\n\n var unmaskedContext = getUnmaskedContext(workInProgress);\n var context = getMaskedContext(workInProgress, unmaskedContext);\n\n var nextChildren;\n\n {\n ReactCurrentOwner.current = workInProgress;\n ReactDebugCurrentFiber.setCurrentPhase('render');\n nextChildren = fn(nextProps, context);\n ReactDebugCurrentFiber.setCurrentPhase(null);\n }\n // React DevTools reads this flag.\n workInProgress.effectTag |= PerformedWork;\n reconcileChildren(current, workInProgress, nextChildren);\n memoizeProps(workInProgress, nextProps);\n return workInProgress.child;\n }\n\n function updateClassComponent(current, workInProgress, renderExpirationTime) {\n // Push context providers early to prevent context stack mismatches.\n // During mounting we don't know the child context yet as the instance doesn't exist.\n // We will invalidate the child context in finishClassComponent() right after rendering.\n var hasContext = pushContextProvider(workInProgress);\n\n var shouldUpdate = void 0;\n if (current === null) {\n if (!workInProgress.stateNode) {\n // In the initial pass we might need to construct the instance.\n constructClassInstance(workInProgress, workInProgress.pendingProps);\n mountClassInstance(workInProgress, renderExpirationTime);\n shouldUpdate = true;\n } else {\n invariant(false, 'Resuming work not yet implemented.');\n // In a resume, we'll already have an instance we can reuse.\n // shouldUpdate = resumeMountClassInstance(workInProgress, renderExpirationTime);\n }\n } else {\n shouldUpdate = updateClassInstance(current, workInProgress, renderExpirationTime);\n }\n return finishClassComponent(current, workInProgress, shouldUpdate, hasContext);\n }\n\n function finishClassComponent(current, workInProgress, shouldUpdate, hasContext) {\n // Refs should update even if shouldComponentUpdate returns false\n markRef(current, workInProgress);\n\n if (!shouldUpdate) {\n // Context providers should defer to sCU for rendering\n if (hasContext) {\n invalidateContextProvider(workInProgress, false);\n }\n\n return bailoutOnAlreadyFinishedWork(current, workInProgress);\n }\n\n var instance = workInProgress.stateNode;\n\n // Rerender\n ReactCurrentOwner.current = workInProgress;\n var nextChildren = void 0;\n {\n ReactDebugCurrentFiber.setCurrentPhase('render');\n nextChildren = instance.render();\n if (debugRenderPhaseSideEffects) {\n instance.render();\n }\n ReactDebugCurrentFiber.setCurrentPhase(null);\n }\n // React DevTools reads this flag.\n workInProgress.effectTag |= PerformedWork;\n reconcileChildren(current, workInProgress, nextChildren);\n // Memoize props and state using the values we just used to render.\n // TODO: Restructure so we never read values from the instance.\n memoizeState(workInProgress, instance.state);\n memoizeProps(workInProgress, instance.props);\n\n // The context might have changed so we need to recalculate it.\n if (hasContext) {\n invalidateContextProvider(workInProgress, true);\n }\n\n return workInProgress.child;\n }\n\n function pushHostRootContext(workInProgress) {\n var root = workInProgress.stateNode;\n if (root.pendingContext) {\n pushTopLevelContextObject(workInProgress, root.pendingContext, root.pendingContext !== root.context);\n } else if (root.context) {\n // Should always be set\n pushTopLevelContextObject(workInProgress, root.context, false);\n }\n pushHostContainer(workInProgress, root.containerInfo);\n }\n\n function updateHostRoot(current, workInProgress, renderExpirationTime) {\n pushHostRootContext(workInProgress);\n var updateQueue = workInProgress.updateQueue;\n if (updateQueue !== null) {\n var prevState = workInProgress.memoizedState;\n var state = processUpdateQueue(current, workInProgress, updateQueue, null, null, renderExpirationTime);\n if (prevState === state) {\n // If the state is the same as before, that's a bailout because we had\n // no work that expires at this time.\n resetHydrationState();\n return bailoutOnAlreadyFinishedWork(current, workInProgress);\n }\n var element = state.element;\n var root = workInProgress.stateNode;\n if ((current === null || current.child === null) && root.hydrate && enterHydrationState(workInProgress)) {\n // If we don't have any current children this might be the first pass.\n // We always try to hydrate. If this isn't a hydration pass there won't\n // be any children to hydrate which is effectively the same thing as\n // not hydrating.\n\n // This is a bit of a hack. We track the host root as a placement to\n // know that we're currently in a mounting state. That way isMounted\n // works as expected. We must reset this before committing.\n // TODO: Delete this when we delete isMounted and findDOMNode.\n workInProgress.effectTag |= Placement;\n\n // Ensure that children mount into this root without tracking\n // side-effects. This ensures that we don't store Placement effects on\n // nodes that will be hydrated.\n workInProgress.child = mountChildFibers(workInProgress, null, element, renderExpirationTime);\n } else {\n // Otherwise reset hydration state in case we aborted and resumed another\n // root.\n resetHydrationState();\n reconcileChildren(current, workInProgress, element);\n }\n memoizeState(workInProgress, state);\n return workInProgress.child;\n }\n resetHydrationState();\n // If there is no update queue, that's a bailout because the root has no props.\n return bailoutOnAlreadyFinishedWork(current, workInProgress);\n }\n\n function updateHostComponent(current, workInProgress, renderExpirationTime) {\n pushHostContext(workInProgress);\n\n if (current === null) {\n tryToClaimNextHydratableInstance(workInProgress);\n }\n\n var type = workInProgress.type;\n var memoizedProps = workInProgress.memoizedProps;\n var nextProps = workInProgress.pendingProps;\n if (nextProps === null) {\n nextProps = memoizedProps;\n !(nextProps !== null) ? invariant(false, 'We should always have pending or current props. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n }\n var prevProps = current !== null ? current.memoizedProps : null;\n\n if (hasContextChanged()) {\n // Normally we can bail out on props equality but if context has changed\n // we don't do the bailout and we have to reuse existing props instead.\n } else if (nextProps === null || memoizedProps === nextProps) {\n return bailoutOnAlreadyFinishedWork(current, workInProgress);\n }\n\n var nextChildren = nextProps.children;\n var isDirectTextChild = shouldSetTextContent(type, nextProps);\n\n if (isDirectTextChild) {\n // We special case a direct text child of a host node. This is a common\n // case. We won't handle it as a reified child. We will instead handle\n // this in the host environment that also have access to this prop. That\n // avoids allocating another HostText fiber and traversing it.\n nextChildren = null;\n } else if (prevProps && shouldSetTextContent(type, prevProps)) {\n // If we're switching from a direct text child to a normal child, or to\n // empty, we need to schedule the text content to be reset.\n workInProgress.effectTag |= ContentReset;\n }\n\n markRef(current, workInProgress);\n\n // Check the host config to see if the children are offscreen/hidden.\n if (renderExpirationTime !== Never && !useSyncScheduling && shouldDeprioritizeSubtree(type, nextProps)) {\n // Down-prioritize the children.\n workInProgress.expirationTime = Never;\n // Bailout and come back to this fiber later.\n return null;\n }\n\n reconcileChildren(current, workInProgress, nextChildren);\n memoizeProps(workInProgress, nextProps);\n return workInProgress.child;\n }\n\n function updateHostText(current, workInProgress) {\n if (current === null) {\n tryToClaimNextHydratableInstance(workInProgress);\n }\n var nextProps = workInProgress.pendingProps;\n if (nextProps === null) {\n nextProps = workInProgress.memoizedProps;\n }\n memoizeProps(workInProgress, nextProps);\n // Nothing to do here. This is terminal. We'll do the completion step\n // immediately after.\n return null;\n }\n\n function mountIndeterminateComponent(current, workInProgress, renderExpirationTime) {\n !(current === null) ? invariant(false, 'An indeterminate component should never have mounted. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n var fn = workInProgress.type;\n var props = workInProgress.pendingProps;\n var unmaskedContext = getUnmaskedContext(workInProgress);\n var context = getMaskedContext(workInProgress, unmaskedContext);\n\n var value;\n\n {\n if (fn.prototype && typeof fn.prototype.render === 'function') {\n var componentName = getComponentName(workInProgress);\n warning(false, \"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);\n }\n ReactCurrentOwner.current = workInProgress;\n value = fn(props, context);\n }\n // React DevTools reads this flag.\n workInProgress.effectTag |= PerformedWork;\n\n if (typeof value === 'object' && value !== null && typeof value.render === 'function') {\n // Proceed under the assumption that this is a class instance\n workInProgress.tag = ClassComponent;\n\n // Push context providers early to prevent context stack mismatches.\n // During mounting we don't know the child context yet as the instance doesn't exist.\n // We will invalidate the child context in finishClassComponent() right after rendering.\n var hasContext = pushContextProvider(workInProgress);\n adoptClassInstance(workInProgress, value);\n mountClassInstance(workInProgress, renderExpirationTime);\n return finishClassComponent(current, workInProgress, true, hasContext);\n } else {\n // Proceed under the assumption that this is a functional component\n workInProgress.tag = FunctionalComponent;\n {\n var Component = workInProgress.type;\n\n if (Component) {\n warning(!Component.childContextTypes, '%s(...): childContextTypes cannot be defined on a functional component.', Component.displayName || Component.name || 'Component');\n }\n if (workInProgress.ref !== null) {\n var info = '';\n var ownerName = ReactDebugCurrentFiber.getCurrentFiberOwnerName();\n if (ownerName) {\n info += '\\n\\nCheck the render method of `' + ownerName + '`.';\n }\n\n var warningKey = ownerName || workInProgress._debugID || '';\n var debugSource = workInProgress._debugSource;\n if (debugSource) {\n warningKey = debugSource.fileName + ':' + debugSource.lineNumber;\n }\n if (!warnedAboutStatelessRefs[warningKey]) {\n warnedAboutStatelessRefs[warningKey] = true;\n warning(false, 'Stateless function components cannot be given refs. ' + 'Attempts to access this ref will fail.%s%s', info, ReactDebugCurrentFiber.getCurrentFiberStackAddendum());\n }\n }\n }\n reconcileChildren(current, workInProgress, value);\n memoizeProps(workInProgress, props);\n return workInProgress.child;\n }\n }\n\n function updateCallComponent(current, workInProgress, renderExpirationTime) {\n var nextCall = workInProgress.pendingProps;\n if (hasContextChanged()) {\n // Normally we can bail out on props equality but if context has changed\n // we don't do the bailout and we have to reuse existing props instead.\n if (nextCall === null) {\n nextCall = current && current.memoizedProps;\n !(nextCall !== null) ? invariant(false, 'We should always have pending or current props. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n }\n } else if (nextCall === null || workInProgress.memoizedProps === nextCall) {\n nextCall = workInProgress.memoizedProps;\n // TODO: When bailing out, we might need to return the stateNode instead\n // of the child. To check it for work.\n // return bailoutOnAlreadyFinishedWork(current, workInProgress);\n }\n\n var nextChildren = nextCall.children;\n\n // The following is a fork of reconcileChildrenAtExpirationTime but using\n // stateNode to store the child.\n if (current === null) {\n workInProgress.stateNode = mountChildFibers(workInProgress, workInProgress.stateNode, nextChildren, renderExpirationTime);\n } else {\n workInProgress.stateNode = reconcileChildFibers(workInProgress, workInProgress.stateNode, nextChildren, renderExpirationTime);\n }\n\n memoizeProps(workInProgress, nextCall);\n // This doesn't take arbitrary time so we could synchronously just begin\n // eagerly do the work of workInProgress.child as an optimization.\n return workInProgress.stateNode;\n }\n\n function updatePortalComponent(current, workInProgress, renderExpirationTime) {\n pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n var nextChildren = workInProgress.pendingProps;\n if (hasContextChanged()) {\n // Normally we can bail out on props equality but if context has changed\n // we don't do the bailout and we have to reuse existing props instead.\n if (nextChildren === null) {\n nextChildren = current && current.memoizedProps;\n !(nextChildren != null) ? invariant(false, 'We should always have pending or current props. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n }\n } else if (nextChildren === null || workInProgress.memoizedProps === nextChildren) {\n return bailoutOnAlreadyFinishedWork(current, workInProgress);\n }\n\n if (current === null) {\n // Portals are special because we don't append the children during mount\n // but at commit. Therefore we need to track insertions which the normal\n // flow doesn't do during mount. This doesn't happen at the root because\n // the root always starts with a \"current\" with a null child.\n // TODO: Consider unifying this with how the root works.\n workInProgress.child = reconcileChildFibers(workInProgress, null, nextChildren, renderExpirationTime);\n memoizeProps(workInProgress, nextChildren);\n } else {\n reconcileChildren(current, workInProgress, nextChildren);\n memoizeProps(workInProgress, nextChildren);\n }\n return workInProgress.child;\n }\n\n /*\n function reuseChildrenEffects(returnFiber : Fiber, firstChild : Fiber) {\n let child = firstChild;\n do {\n // Ensure that the first and last effect of the parent corresponds\n // to the children's first and last effect.\n if (!returnFiber.firstEffect) {\n returnFiber.firstEffect = child.firstEffect;\n }\n if (child.lastEffect) {\n if (returnFiber.lastEffect) {\n returnFiber.lastEffect.nextEffect = child.firstEffect;\n }\n returnFiber.lastEffect = child.lastEffect;\n }\n } while (child = child.sibling);\n }\n */\n\n function bailoutOnAlreadyFinishedWork(current, workInProgress) {\n cancelWorkTimer(workInProgress);\n\n // TODO: We should ideally be able to bail out early if the children have no\n // more work to do. However, since we don't have a separation of this\n // Fiber's priority and its children yet - we don't know without doing lots\n // of the same work we do anyway. Once we have that separation we can just\n // bail out here if the children has no more work at this priority level.\n // if (workInProgress.priorityOfChildren <= priorityLevel) {\n // // If there are side-effects in these children that have not yet been\n // // committed we need to ensure that they get properly transferred up.\n // if (current && current.child !== workInProgress.child) {\n // reuseChildrenEffects(workInProgress, child);\n // }\n // return null;\n // }\n\n cloneChildFibers(current, workInProgress);\n return workInProgress.child;\n }\n\n function bailoutOnLowPriority(current, workInProgress) {\n cancelWorkTimer(workInProgress);\n\n // TODO: Handle HostComponent tags here as well and call pushHostContext()?\n // See PR 8590 discussion for context\n switch (workInProgress.tag) {\n case HostRoot:\n pushHostRootContext(workInProgress);\n break;\n case ClassComponent:\n pushContextProvider(workInProgress);\n break;\n case HostPortal:\n pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n break;\n }\n // TODO: What if this is currently in progress?\n // How can that happen? How is this not being cloned?\n return null;\n }\n\n // TODO: Delete memoizeProps/State and move to reconcile/bailout instead\n function memoizeProps(workInProgress, nextProps) {\n workInProgress.memoizedProps = nextProps;\n }\n\n function memoizeState(workInProgress, nextState) {\n workInProgress.memoizedState = nextState;\n // Don't reset the updateQueue, in case there are pending updates. Resetting\n // is handled by processUpdateQueue.\n }\n\n function beginWork(current, workInProgress, renderExpirationTime) {\n if (workInProgress.expirationTime === NoWork || workInProgress.expirationTime > renderExpirationTime) {\n return bailoutOnLowPriority(current, workInProgress);\n }\n\n switch (workInProgress.tag) {\n case IndeterminateComponent:\n return mountIndeterminateComponent(current, workInProgress, renderExpirationTime);\n case FunctionalComponent:\n return updateFunctionalComponent(current, workInProgress);\n case ClassComponent:\n return updateClassComponent(current, workInProgress, renderExpirationTime);\n case HostRoot:\n return updateHostRoot(current, workInProgress, renderExpirationTime);\n case HostComponent:\n return updateHostComponent(current, workInProgress, renderExpirationTime);\n case HostText:\n return updateHostText(current, workInProgress);\n case CallHandlerPhase:\n // This is a restart. Reset the tag to the initial phase.\n workInProgress.tag = CallComponent;\n // Intentionally fall through since this is now the same.\n case CallComponent:\n return updateCallComponent(current, workInProgress, renderExpirationTime);\n case ReturnComponent:\n // A return component is just a placeholder, we can just run through the\n // next one immediately.\n return null;\n case HostPortal:\n return updatePortalComponent(current, workInProgress, renderExpirationTime);\n case Fragment:\n return updateFragment(current, workInProgress);\n default:\n invariant(false, 'Unknown unit of work tag. This error is likely caused by a bug in React. Please file an issue.');\n }\n }\n\n function beginFailedWork(current, workInProgress, renderExpirationTime) {\n // Push context providers here to avoid a push/pop context mismatch.\n switch (workInProgress.tag) {\n case ClassComponent:\n pushContextProvider(workInProgress);\n break;\n case HostRoot:\n pushHostRootContext(workInProgress);\n break;\n default:\n invariant(false, 'Invalid type of work. This error is likely caused by a bug in React. Please file an issue.');\n }\n\n // Add an error effect so we can handle the error during the commit phase\n workInProgress.effectTag |= Err;\n\n // This is a weird case where we do \"resume\" work — work that failed on\n // our first attempt. Because we no longer have a notion of \"progressed\n // deletions,\" reset the child to the current child to make sure we delete\n // it again. TODO: Find a better way to handle this, perhaps during a more\n // general overhaul of error handling.\n if (current === null) {\n workInProgress.child = null;\n } else if (workInProgress.child !== current.child) {\n workInProgress.child = current.child;\n }\n\n if (workInProgress.expirationTime === NoWork || workInProgress.expirationTime > renderExpirationTime) {\n return bailoutOnLowPriority(current, workInProgress);\n }\n\n // If we don't bail out, we're going be recomputing our children so we need\n // to drop our effect list.\n workInProgress.firstEffect = null;\n workInProgress.lastEffect = null;\n\n // Unmount the current children as if the component rendered null\n var nextChildren = null;\n reconcileChildrenAtExpirationTime(current, workInProgress, nextChildren, renderExpirationTime);\n\n if (workInProgress.tag === ClassComponent) {\n var instance = workInProgress.stateNode;\n workInProgress.memoizedProps = instance.props;\n workInProgress.memoizedState = instance.state;\n }\n\n return workInProgress.child;\n }\n\n return {\n beginWork: beginWork,\n beginFailedWork: beginFailedWork\n };\n};\n\nvar ReactFiberCompleteWork = function (config, hostContext, hydrationContext) {\n var createInstance = config.createInstance,\n createTextInstance = config.createTextInstance,\n appendInitialChild = config.appendInitialChild,\n finalizeInitialChildren = config.finalizeInitialChildren,\n prepareUpdate = config.prepareUpdate,\n mutation = config.mutation,\n persistence = config.persistence;\n var getRootHostContainer = hostContext.getRootHostContainer,\n popHostContext = hostContext.popHostContext,\n getHostContext = hostContext.getHostContext,\n popHostContainer = hostContext.popHostContainer;\n var prepareToHydrateHostInstance = hydrationContext.prepareToHydrateHostInstance,\n prepareToHydrateHostTextInstance = hydrationContext.prepareToHydrateHostTextInstance,\n popHydrationState = hydrationContext.popHydrationState;\n\n\n function markUpdate(workInProgress) {\n // Tag the fiber with an update effect. This turns a Placement into\n // an UpdateAndPlacement.\n workInProgress.effectTag |= Update;\n }\n\n function markRef(workInProgress) {\n workInProgress.effectTag |= Ref;\n }\n\n function appendAllReturns(returns, workInProgress) {\n var node = workInProgress.stateNode;\n if (node) {\n node['return'] = workInProgress;\n }\n while (node !== null) {\n if (node.tag === HostComponent || node.tag === HostText || node.tag === HostPortal) {\n invariant(false, 'A call cannot have host component children.');\n } else if (node.tag === ReturnComponent) {\n returns.push(node.type);\n } else if (node.child !== null) {\n node.child['return'] = node;\n node = node.child;\n continue;\n }\n while (node.sibling === null) {\n if (node['return'] === null || node['return'] === workInProgress) {\n return;\n }\n node = node['return'];\n }\n node.sibling['return'] = node['return'];\n node = node.sibling;\n }\n }\n\n function moveCallToHandlerPhase(current, workInProgress, renderExpirationTime) {\n var call = workInProgress.memoizedProps;\n !call ? invariant(false, 'Should be resolved by now. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n\n // First step of the call has completed. Now we need to do the second.\n // TODO: It would be nice to have a multi stage call represented by a\n // single component, or at least tail call optimize nested ones. Currently\n // that requires additional fields that we don't want to add to the fiber.\n // So this requires nested handlers.\n // Note: This doesn't mutate the alternate node. I don't think it needs to\n // since this stage is reset for every pass.\n workInProgress.tag = CallHandlerPhase;\n\n // Build up the returns.\n // TODO: Compare this to a generator or opaque helpers like Children.\n var returns = [];\n appendAllReturns(returns, workInProgress);\n var fn = call.handler;\n var props = call.props;\n var nextChildren = fn(props, returns);\n\n var currentFirstChild = current !== null ? current.child : null;\n workInProgress.child = reconcileChildFibers(workInProgress, currentFirstChild, nextChildren, renderExpirationTime);\n return workInProgress.child;\n }\n\n function appendAllChildren(parent, workInProgress) {\n // We only have the top Fiber that was created but we need recurse down its\n // children to find all the terminal nodes.\n var node = workInProgress.child;\n while (node !== null) {\n if (node.tag === HostComponent || node.tag === HostText) {\n appendInitialChild(parent, node.stateNode);\n } else if (node.tag === HostPortal) {\n // If we have a portal child, then we don't want to traverse\n // down its children. Instead, we'll get insertions from each child in\n // the portal directly.\n } else if (node.child !== null) {\n node.child['return'] = node;\n node = node.child;\n continue;\n }\n if (node === workInProgress) {\n return;\n }\n while (node.sibling === null) {\n if (node['return'] === null || node['return'] === workInProgress) {\n return;\n }\n node = node['return'];\n }\n node.sibling['return'] = node['return'];\n node = node.sibling;\n }\n }\n\n var updateHostContainer = void 0;\n var updateHostComponent = void 0;\n var updateHostText = void 0;\n if (mutation) {\n if (enableMutatingReconciler) {\n // Mutation mode\n updateHostContainer = function (workInProgress) {\n // Noop\n };\n updateHostComponent = function (current, workInProgress, updatePayload, type, oldProps, newProps, rootContainerInstance) {\n // TODO: Type this specific to this type of component.\n workInProgress.updateQueue = updatePayload;\n // If the update payload indicates that there is a change or if there\n // is a new ref we mark this as an update. All the work is done in commitWork.\n if (updatePayload) {\n markUpdate(workInProgress);\n }\n };\n updateHostText = function (current, workInProgress, oldText, newText) {\n // If the text differs, mark it as an update. All the work in done in commitWork.\n if (oldText !== newText) {\n markUpdate(workInProgress);\n }\n };\n } else {\n invariant(false, 'Mutating reconciler is disabled.');\n }\n } else if (persistence) {\n if (enablePersistentReconciler) {\n // Persistent host tree mode\n var cloneInstance = persistence.cloneInstance,\n createContainerChildSet = persistence.createContainerChildSet,\n appendChildToContainerChildSet = persistence.appendChildToContainerChildSet,\n finalizeContainerChildren = persistence.finalizeContainerChildren;\n\n // An unfortunate fork of appendAllChildren because we have two different parent types.\n\n var appendAllChildrenToContainer = function (containerChildSet, workInProgress) {\n // We only have the top Fiber that was created but we need recurse down its\n // children to find all the terminal nodes.\n var node = workInProgress.child;\n while (node !== null) {\n if (node.tag === HostComponent || node.tag === HostText) {\n appendChildToContainerChildSet(containerChildSet, node.stateNode);\n } else if (node.tag === HostPortal) {\n // If we have a portal child, then we don't want to traverse\n // down its children. Instead, we'll get insertions from each child in\n // the portal directly.\n } else if (node.child !== null) {\n node.child['return'] = node;\n node = node.child;\n continue;\n }\n if (node === workInProgress) {\n return;\n }\n while (node.sibling === null) {\n if (node['return'] === null || node['return'] === workInProgress) {\n return;\n }\n node = node['return'];\n }\n node.sibling['return'] = node['return'];\n node = node.sibling;\n }\n };\n updateHostContainer = function (workInProgress) {\n var portalOrRoot = workInProgress.stateNode;\n var childrenUnchanged = workInProgress.firstEffect === null;\n if (childrenUnchanged) {\n // No changes, just reuse the existing instance.\n } else {\n var container = portalOrRoot.containerInfo;\n var newChildSet = createContainerChildSet(container);\n if (finalizeContainerChildren(container, newChildSet)) {\n markUpdate(workInProgress);\n }\n portalOrRoot.pendingChildren = newChildSet;\n // If children might have changed, we have to add them all to the set.\n appendAllChildrenToContainer(newChildSet, workInProgress);\n // Schedule an update on the container to swap out the container.\n markUpdate(workInProgress);\n }\n };\n updateHostComponent = function (current, workInProgress, updatePayload, type, oldProps, newProps, rootContainerInstance) {\n // If there are no effects associated with this node, then none of our children had any updates.\n // This guarantees that we can reuse all of them.\n var childrenUnchanged = workInProgress.firstEffect === null;\n var currentInstance = current.stateNode;\n if (childrenUnchanged && updatePayload === null) {\n // No changes, just reuse the existing instance.\n // Note that this might release a previous clone.\n workInProgress.stateNode = currentInstance;\n } else {\n var recyclableInstance = workInProgress.stateNode;\n var newInstance = cloneInstance(currentInstance, updatePayload, type, oldProps, newProps, workInProgress, childrenUnchanged, recyclableInstance);\n if (finalizeInitialChildren(newInstance, type, newProps, rootContainerInstance)) {\n markUpdate(workInProgress);\n }\n workInProgress.stateNode = newInstance;\n if (childrenUnchanged) {\n // If there are no other effects in this tree, we need to flag this node as having one.\n // Even though we're not going to use it for anything.\n // Otherwise parents won't know that there are new children to propagate upwards.\n markUpdate(workInProgress);\n } else {\n // If children might have changed, we have to add them all to the set.\n appendAllChildren(newInstance, workInProgress);\n }\n }\n };\n updateHostText = function (current, workInProgress, oldText, newText) {\n if (oldText !== newText) {\n // If the text content differs, we'll create a new text instance for it.\n var rootContainerInstance = getRootHostContainer();\n var currentHostContext = getHostContext();\n workInProgress.stateNode = createTextInstance(newText, rootContainerInstance, currentHostContext, workInProgress);\n // We'll have to mark it as having an effect, even though we won't use the effect for anything.\n // This lets the parents know that at least one of their children has changed.\n markUpdate(workInProgress);\n }\n };\n } else {\n invariant(false, 'Persistent reconciler is disabled.');\n }\n } else {\n if (enableNoopReconciler) {\n // No host operations\n updateHostContainer = function (workInProgress) {\n // Noop\n };\n updateHostComponent = function (current, workInProgress, updatePayload, type, oldProps, newProps, rootContainerInstance) {\n // Noop\n };\n updateHostText = function (current, workInProgress, oldText, newText) {\n // Noop\n };\n } else {\n invariant(false, 'Noop reconciler is disabled.');\n }\n }\n\n function completeWork(current, workInProgress, renderExpirationTime) {\n // Get the latest props.\n var newProps = workInProgress.pendingProps;\n if (newProps === null) {\n newProps = workInProgress.memoizedProps;\n } else if (workInProgress.expirationTime !== Never || renderExpirationTime === Never) {\n // Reset the pending props, unless this was a down-prioritization.\n workInProgress.pendingProps = null;\n }\n\n switch (workInProgress.tag) {\n case FunctionalComponent:\n return null;\n case ClassComponent:\n {\n // We are leaving this subtree, so pop context if any.\n popContextProvider(workInProgress);\n return null;\n }\n case HostRoot:\n {\n popHostContainer(workInProgress);\n popTopLevelContextObject(workInProgress);\n var fiberRoot = workInProgress.stateNode;\n if (fiberRoot.pendingContext) {\n fiberRoot.context = fiberRoot.pendingContext;\n fiberRoot.pendingContext = null;\n }\n\n if (current === null || current.child === null) {\n // If we hydrated, pop so that we can delete any remaining children\n // that weren't hydrated.\n popHydrationState(workInProgress);\n // This resets the hacky state to fix isMounted before committing.\n // TODO: Delete this when we delete isMounted and findDOMNode.\n workInProgress.effectTag &= ~Placement;\n }\n updateHostContainer(workInProgress);\n return null;\n }\n case HostComponent:\n {\n popHostContext(workInProgress);\n var rootContainerInstance = getRootHostContainer();\n var type = workInProgress.type;\n if (current !== null && workInProgress.stateNode != null) {\n // If we have an alternate, that means this is an update and we need to\n // schedule a side-effect to do the updates.\n var oldProps = current.memoizedProps;\n // If we get updated because one of our children updated, we don't\n // have newProps so we'll have to reuse them.\n // TODO: Split the update API as separate for the props vs. children.\n // Even better would be if children weren't special cased at all tho.\n var instance = workInProgress.stateNode;\n var currentHostContext = getHostContext();\n var updatePayload = prepareUpdate(instance, type, oldProps, newProps, rootContainerInstance, currentHostContext);\n\n updateHostComponent(current, workInProgress, updatePayload, type, oldProps, newProps, rootContainerInstance);\n\n if (current.ref !== workInProgress.ref) {\n markRef(workInProgress);\n }\n } else {\n if (!newProps) {\n !(workInProgress.stateNode !== null) ? invariant(false, 'We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n // This can happen when we abort work.\n return null;\n }\n\n var _currentHostContext = getHostContext();\n // TODO: Move createInstance to beginWork and keep it on a context\n // \"stack\" as the parent. Then append children as we go in beginWork\n // or completeWork depending on we want to add then top->down or\n // bottom->up. Top->down is faster in IE11.\n var wasHydrated = popHydrationState(workInProgress);\n if (wasHydrated) {\n // TODO: Move this and createInstance step into the beginPhase\n // to consolidate.\n if (prepareToHydrateHostInstance(workInProgress, rootContainerInstance, _currentHostContext)) {\n // If changes to the hydrated node needs to be applied at the\n // commit-phase we mark this as such.\n markUpdate(workInProgress);\n }\n } else {\n var _instance = createInstance(type, newProps, rootContainerInstance, _currentHostContext, workInProgress);\n\n appendAllChildren(_instance, workInProgress);\n\n // Certain renderers require commit-time effects for initial mount.\n // (eg DOM renderer supports auto-focus for certain elements).\n // Make sure such renderers get scheduled for later work.\n if (finalizeInitialChildren(_instance, type, newProps, rootContainerInstance)) {\n markUpdate(workInProgress);\n }\n workInProgress.stateNode = _instance;\n }\n\n if (workInProgress.ref !== null) {\n // If there is a ref on a host node we need to schedule a callback\n markRef(workInProgress);\n }\n }\n return null;\n }\n case HostText:\n {\n var newText = newProps;\n if (current && workInProgress.stateNode != null) {\n var oldText = current.memoizedProps;\n // If we have an alternate, that means this is an update and we need\n // to schedule a side-effect to do the updates.\n updateHostText(current, workInProgress, oldText, newText);\n } else {\n if (typeof newText !== 'string') {\n !(workInProgress.stateNode !== null) ? invariant(false, 'We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n // This can happen when we abort work.\n return null;\n }\n var _rootContainerInstance = getRootHostContainer();\n var _currentHostContext2 = getHostContext();\n var _wasHydrated = popHydrationState(workInProgress);\n if (_wasHydrated) {\n if (prepareToHydrateHostTextInstance(workInProgress)) {\n markUpdate(workInProgress);\n }\n } else {\n workInProgress.stateNode = createTextInstance(newText, _rootContainerInstance, _currentHostContext2, workInProgress);\n }\n }\n return null;\n }\n case CallComponent:\n return moveCallToHandlerPhase(current, workInProgress, renderExpirationTime);\n case CallHandlerPhase:\n // Reset the tag to now be a first phase call.\n workInProgress.tag = CallComponent;\n return null;\n case ReturnComponent:\n // Does nothing.\n return null;\n case Fragment:\n return null;\n case HostPortal:\n popHostContainer(workInProgress);\n updateHostContainer(workInProgress);\n return null;\n // Error cases\n case IndeterminateComponent:\n invariant(false, 'An indeterminate component should have become determinate before completing. This error is likely caused by a bug in React. Please file an issue.');\n // eslint-disable-next-line no-fallthrough\n default:\n invariant(false, 'Unknown unit of work tag. This error is likely caused by a bug in React. Please file an issue.');\n }\n }\n\n return {\n completeWork: completeWork\n };\n};\n\nvar invokeGuardedCallback$2 = ReactErrorUtils.invokeGuardedCallback;\nvar hasCaughtError$1 = ReactErrorUtils.hasCaughtError;\nvar clearCaughtError$1 = ReactErrorUtils.clearCaughtError;\n\n\nvar ReactFiberCommitWork = function (config, captureError) {\n var getPublicInstance = config.getPublicInstance,\n mutation = config.mutation,\n persistence = config.persistence;\n\n\n var callComponentWillUnmountWithTimer = function (current, instance) {\n startPhaseTimer(current, 'componentWillUnmount');\n instance.props = current.memoizedProps;\n instance.state = current.memoizedState;\n instance.componentWillUnmount();\n stopPhaseTimer();\n };\n\n // Capture errors so they don't interrupt unmounting.\n function safelyCallComponentWillUnmount(current, instance) {\n {\n invokeGuardedCallback$2(null, callComponentWillUnmountWithTimer, null, current, instance);\n if (hasCaughtError$1()) {\n var unmountError = clearCaughtError$1();\n captureError(current, unmountError);\n }\n }\n }\n\n function safelyDetachRef(current) {\n var ref = current.ref;\n if (ref !== null) {\n {\n invokeGuardedCallback$2(null, ref, null, null);\n if (hasCaughtError$1()) {\n var refError = clearCaughtError$1();\n captureError(current, refError);\n }\n }\n }\n }\n\n function commitLifeCycles(current, finishedWork) {\n switch (finishedWork.tag) {\n case ClassComponent:\n {\n var instance = finishedWork.stateNode;\n if (finishedWork.effectTag & Update) {\n if (current === null) {\n startPhaseTimer(finishedWork, 'componentDidMount');\n instance.props = finishedWork.memoizedProps;\n instance.state = finishedWork.memoizedState;\n instance.componentDidMount();\n stopPhaseTimer();\n } else {\n var prevProps = current.memoizedProps;\n var prevState = current.memoizedState;\n startPhaseTimer(finishedWork, 'componentDidUpdate');\n instance.props = finishedWork.memoizedProps;\n instance.state = finishedWork.memoizedState;\n instance.componentDidUpdate(prevProps, prevState);\n stopPhaseTimer();\n }\n }\n var updateQueue = finishedWork.updateQueue;\n if (updateQueue !== null) {\n commitCallbacks(updateQueue, instance);\n }\n return;\n }\n case HostRoot:\n {\n var _updateQueue = finishedWork.updateQueue;\n if (_updateQueue !== null) {\n var _instance = finishedWork.child !== null ? finishedWork.child.stateNode : null;\n commitCallbacks(_updateQueue, _instance);\n }\n return;\n }\n case HostComponent:\n {\n var _instance2 = finishedWork.stateNode;\n\n // Renderers may schedule work to be done after host components are mounted\n // (eg DOM renderer may schedule auto-focus for inputs and form controls).\n // These effects should only be committed when components are first mounted,\n // aka when there is no current/alternate.\n if (current === null && finishedWork.effectTag & Update) {\n var type = finishedWork.type;\n var props = finishedWork.memoizedProps;\n commitMount(_instance2, type, props, finishedWork);\n }\n\n return;\n }\n case HostText:\n {\n // We have no life-cycles associated with text.\n return;\n }\n case HostPortal:\n {\n // We have no life-cycles associated with portals.\n return;\n }\n default:\n {\n invariant(false, 'This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.');\n }\n }\n }\n\n function commitAttachRef(finishedWork) {\n var ref = finishedWork.ref;\n if (ref !== null) {\n var instance = finishedWork.stateNode;\n switch (finishedWork.tag) {\n case HostComponent:\n ref(getPublicInstance(instance));\n break;\n default:\n ref(instance);\n }\n }\n }\n\n function commitDetachRef(current) {\n var currentRef = current.ref;\n if (currentRef !== null) {\n currentRef(null);\n }\n }\n\n // User-originating errors (lifecycles and refs) should not interrupt\n // deletion, so don't let them throw. Host-originating errors should\n // interrupt deletion, so it's okay\n function commitUnmount(current) {\n if (typeof onCommitUnmount === 'function') {\n onCommitUnmount(current);\n }\n\n switch (current.tag) {\n case ClassComponent:\n {\n safelyDetachRef(current);\n var instance = current.stateNode;\n if (typeof instance.componentWillUnmount === 'function') {\n safelyCallComponentWillUnmount(current, instance);\n }\n return;\n }\n case HostComponent:\n {\n safelyDetachRef(current);\n return;\n }\n case CallComponent:\n {\n commitNestedUnmounts(current.stateNode);\n return;\n }\n case HostPortal:\n {\n // TODO: this is recursive.\n // We are also not using this parent because\n // the portal will get pushed immediately.\n if (enableMutatingReconciler && mutation) {\n unmountHostComponents(current);\n } else if (enablePersistentReconciler && persistence) {\n emptyPortalContainer(current);\n }\n return;\n }\n }\n }\n\n function commitNestedUnmounts(root) {\n // While we're inside a removed host node we don't want to call\n // removeChild on the inner nodes because they're removed by the top\n // call anyway. We also want to call componentWillUnmount on all\n // composites before this host node is removed from the tree. Therefore\n var node = root;\n while (true) {\n commitUnmount(node);\n // Visit children because they may contain more composite or host nodes.\n // Skip portals because commitUnmount() currently visits them recursively.\n if (node.child !== null && (\n // If we use mutation we drill down into portals using commitUnmount above.\n // If we don't use mutation we drill down into portals here instead.\n !mutation || node.tag !== HostPortal)) {\n node.child['return'] = node;\n node = node.child;\n continue;\n }\n if (node === root) {\n return;\n }\n while (node.sibling === null) {\n if (node['return'] === null || node['return'] === root) {\n return;\n }\n node = node['return'];\n }\n node.sibling['return'] = node['return'];\n node = node.sibling;\n }\n }\n\n function detachFiber(current) {\n // Cut off the return pointers to disconnect it from the tree. Ideally, we\n // should clear the child pointer of the parent alternate to let this\n // get GC:ed but we don't know which for sure which parent is the current\n // one so we'll settle for GC:ing the subtree of this child. This child\n // itself will be GC:ed when the parent updates the next time.\n current['return'] = null;\n current.child = null;\n if (current.alternate) {\n current.alternate.child = null;\n current.alternate['return'] = null;\n }\n }\n\n if (!mutation) {\n var commitContainer = void 0;\n if (persistence) {\n var replaceContainerChildren = persistence.replaceContainerChildren,\n createContainerChildSet = persistence.createContainerChildSet;\n\n var emptyPortalContainer = function (current) {\n var portal = current.stateNode;\n var containerInfo = portal.containerInfo;\n\n var emptyChildSet = createContainerChildSet(containerInfo);\n replaceContainerChildren(containerInfo, emptyChildSet);\n };\n commitContainer = function (finishedWork) {\n switch (finishedWork.tag) {\n case ClassComponent:\n {\n return;\n }\n case HostComponent:\n {\n return;\n }\n case HostText:\n {\n return;\n }\n case HostRoot:\n case HostPortal:\n {\n var portalOrRoot = finishedWork.stateNode;\n var containerInfo = portalOrRoot.containerInfo,\n _pendingChildren = portalOrRoot.pendingChildren;\n\n replaceContainerChildren(containerInfo, _pendingChildren);\n return;\n }\n default:\n {\n invariant(false, 'This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.');\n }\n }\n };\n } else {\n commitContainer = function (finishedWork) {\n // Noop\n };\n }\n if (enablePersistentReconciler || enableNoopReconciler) {\n return {\n commitResetTextContent: function (finishedWork) {},\n commitPlacement: function (finishedWork) {},\n commitDeletion: function (current) {\n // Detach refs and call componentWillUnmount() on the whole subtree.\n commitNestedUnmounts(current);\n detachFiber(current);\n },\n commitWork: function (current, finishedWork) {\n commitContainer(finishedWork);\n },\n\n commitLifeCycles: commitLifeCycles,\n commitAttachRef: commitAttachRef,\n commitDetachRef: commitDetachRef\n };\n } else if (persistence) {\n invariant(false, 'Persistent reconciler is disabled.');\n } else {\n invariant(false, 'Noop reconciler is disabled.');\n }\n }\n var commitMount = mutation.commitMount,\n commitUpdate = mutation.commitUpdate,\n resetTextContent = mutation.resetTextContent,\n commitTextUpdate = mutation.commitTextUpdate,\n appendChild = mutation.appendChild,\n appendChildToContainer = mutation.appendChildToContainer,\n insertBefore = mutation.insertBefore,\n insertInContainerBefore = mutation.insertInContainerBefore,\n removeChild = mutation.removeChild,\n removeChildFromContainer = mutation.removeChildFromContainer;\n\n\n function getHostParentFiber(fiber) {\n var parent = fiber['return'];\n while (parent !== null) {\n if (isHostParent(parent)) {\n return parent;\n }\n parent = parent['return'];\n }\n invariant(false, 'Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.');\n }\n\n function isHostParent(fiber) {\n return fiber.tag === HostComponent || fiber.tag === HostRoot || fiber.tag === HostPortal;\n }\n\n function getHostSibling(fiber) {\n // We're going to search forward into the tree until we find a sibling host\n // node. Unfortunately, if multiple insertions are done in a row we have to\n // search past them. This leads to exponential search for the next sibling.\n var node = fiber;\n siblings: while (true) {\n // If we didn't find anything, let's try the next sibling.\n while (node.sibling === null) {\n if (node['return'] === null || isHostParent(node['return'])) {\n // If we pop out of the root or hit the parent the fiber we are the\n // last sibling.\n return null;\n }\n node = node['return'];\n }\n node.sibling['return'] = node['return'];\n node = node.sibling;\n while (node.tag !== HostComponent && node.tag !== HostText) {\n // If it is not host node and, we might have a host node inside it.\n // Try to search down until we find one.\n if (node.effectTag & Placement) {\n // If we don't have a child, try the siblings instead.\n continue siblings;\n }\n // If we don't have a child, try the siblings instead.\n // We also skip portals because they are not part of this host tree.\n if (node.child === null || node.tag === HostPortal) {\n continue siblings;\n } else {\n node.child['return'] = node;\n node = node.child;\n }\n }\n // Check if this host node is stable or about to be placed.\n if (!(node.effectTag & Placement)) {\n // Found it!\n return node.stateNode;\n }\n }\n }\n\n function commitPlacement(finishedWork) {\n // Recursively insert all host nodes into the parent.\n var parentFiber = getHostParentFiber(finishedWork);\n var parent = void 0;\n var isContainer = void 0;\n switch (parentFiber.tag) {\n case HostComponent:\n parent = parentFiber.stateNode;\n isContainer = false;\n break;\n case HostRoot:\n parent = parentFiber.stateNode.containerInfo;\n isContainer = true;\n break;\n case HostPortal:\n parent = parentFiber.stateNode.containerInfo;\n isContainer = true;\n break;\n default:\n invariant(false, 'Invalid host parent fiber. This error is likely caused by a bug in React. Please file an issue.');\n }\n if (parentFiber.effectTag & ContentReset) {\n // Reset the text content of the parent before doing any insertions\n resetTextContent(parent);\n // Clear ContentReset from the effect tag\n parentFiber.effectTag &= ~ContentReset;\n }\n\n var before = getHostSibling(finishedWork);\n // We only have the top Fiber that was inserted but we need recurse down its\n // children to find all the terminal nodes.\n var node = finishedWork;\n while (true) {\n if (node.tag === HostComponent || node.tag === HostText) {\n if (before) {\n if (isContainer) {\n insertInContainerBefore(parent, node.stateNode, before);\n } else {\n insertBefore(parent, node.stateNode, before);\n }\n } else {\n if (isContainer) {\n appendChildToContainer(parent, node.stateNode);\n } else {\n appendChild(parent, node.stateNode);\n }\n }\n } else if (node.tag === HostPortal) {\n // If the insertion itself is a portal, then we don't want to traverse\n // down its children. Instead, we'll get insertions from each child in\n // the portal directly.\n } else if (node.child !== null) {\n node.child['return'] = node;\n node = node.child;\n continue;\n }\n if (node === finishedWork) {\n return;\n }\n while (node.sibling === null) {\n if (node['return'] === null || node['return'] === finishedWork) {\n return;\n }\n node = node['return'];\n }\n node.sibling['return'] = node['return'];\n node = node.sibling;\n }\n }\n\n function unmountHostComponents(current) {\n // We only have the top Fiber that was inserted but we need recurse down its\n var node = current;\n\n // Each iteration, currentParent is populated with node's host parent if not\n // currentParentIsValid.\n var currentParentIsValid = false;\n var currentParent = void 0;\n var currentParentIsContainer = void 0;\n\n while (true) {\n if (!currentParentIsValid) {\n var parent = node['return'];\n findParent: while (true) {\n !(parent !== null) ? invariant(false, 'Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n switch (parent.tag) {\n case HostComponent:\n currentParent = parent.stateNode;\n currentParentIsContainer = false;\n break findParent;\n case HostRoot:\n currentParent = parent.stateNode.containerInfo;\n currentParentIsContainer = true;\n break findParent;\n case HostPortal:\n currentParent = parent.stateNode.containerInfo;\n currentParentIsContainer = true;\n break findParent;\n }\n parent = parent['return'];\n }\n currentParentIsValid = true;\n }\n\n if (node.tag === HostComponent || node.tag === HostText) {\n commitNestedUnmounts(node);\n // After all the children have unmounted, it is now safe to remove the\n // node from the tree.\n if (currentParentIsContainer) {\n removeChildFromContainer(currentParent, node.stateNode);\n } else {\n removeChild(currentParent, node.stateNode);\n }\n // Don't visit children because we already visited them.\n } else if (node.tag === HostPortal) {\n // When we go into a portal, it becomes the parent to remove from.\n // We will reassign it back when we pop the portal on the way up.\n currentParent = node.stateNode.containerInfo;\n // Visit children because portals might contain host components.\n if (node.child !== null) {\n node.child['return'] = node;\n node = node.child;\n continue;\n }\n } else {\n commitUnmount(node);\n // Visit children because we may find more host components below.\n if (node.child !== null) {\n node.child['return'] = node;\n node = node.child;\n continue;\n }\n }\n if (node === current) {\n return;\n }\n while (node.sibling === null) {\n if (node['return'] === null || node['return'] === current) {\n return;\n }\n node = node['return'];\n if (node.tag === HostPortal) {\n // When we go out of the portal, we need to restore the parent.\n // Since we don't keep a stack of them, we will search for it.\n currentParentIsValid = false;\n }\n }\n node.sibling['return'] = node['return'];\n node = node.sibling;\n }\n }\n\n function commitDeletion(current) {\n // Recursively delete all host nodes from the parent.\n // Detach refs and call componentWillUnmount() on the whole subtree.\n unmountHostComponents(current);\n detachFiber(current);\n }\n\n function commitWork(current, finishedWork) {\n switch (finishedWork.tag) {\n case ClassComponent:\n {\n return;\n }\n case HostComponent:\n {\n var instance = finishedWork.stateNode;\n if (instance != null) {\n // Commit the work prepared earlier.\n var newProps = finishedWork.memoizedProps;\n // For hydration we reuse the update path but we treat the oldProps\n // as the newProps. The updatePayload will contain the real change in\n // this case.\n var oldProps = current !== null ? current.memoizedProps : newProps;\n var type = finishedWork.type;\n // TODO: Type the updateQueue to be specific to host components.\n var updatePayload = finishedWork.updateQueue;\n finishedWork.updateQueue = null;\n if (updatePayload !== null) {\n commitUpdate(instance, updatePayload, type, oldProps, newProps, finishedWork);\n }\n }\n return;\n }\n case HostText:\n {\n !(finishedWork.stateNode !== null) ? invariant(false, 'This should have a text node initialized. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n var textInstance = finishedWork.stateNode;\n var newText = finishedWork.memoizedProps;\n // For hydration we reuse the update path but we treat the oldProps\n // as the newProps. The updatePayload will contain the real change in\n // this case.\n var oldText = current !== null ? current.memoizedProps : newText;\n commitTextUpdate(textInstance, oldText, newText);\n return;\n }\n case HostRoot:\n {\n return;\n }\n default:\n {\n invariant(false, 'This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.');\n }\n }\n }\n\n function commitResetTextContent(current) {\n resetTextContent(current.stateNode);\n }\n\n if (enableMutatingReconciler) {\n return {\n commitResetTextContent: commitResetTextContent,\n commitPlacement: commitPlacement,\n commitDeletion: commitDeletion,\n commitWork: commitWork,\n commitLifeCycles: commitLifeCycles,\n commitAttachRef: commitAttachRef,\n commitDetachRef: commitDetachRef\n };\n } else {\n invariant(false, 'Mutating reconciler is disabled.');\n }\n};\n\nvar NO_CONTEXT = {};\n\nvar ReactFiberHostContext = function (config) {\n var getChildHostContext = config.getChildHostContext,\n getRootHostContext = config.getRootHostContext;\n\n\n var contextStackCursor = createCursor(NO_CONTEXT);\n var contextFiberStackCursor = createCursor(NO_CONTEXT);\n var rootInstanceStackCursor = createCursor(NO_CONTEXT);\n\n function requiredContext(c) {\n !(c !== NO_CONTEXT) ? invariant(false, 'Expected host context to exist. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n return c;\n }\n\n function getRootHostContainer() {\n var rootInstance = requiredContext(rootInstanceStackCursor.current);\n return rootInstance;\n }\n\n function pushHostContainer(fiber, nextRootInstance) {\n // Push current root instance onto the stack;\n // This allows us to reset root when portals are popped.\n push(rootInstanceStackCursor, nextRootInstance, fiber);\n\n var nextRootContext = getRootHostContext(nextRootInstance);\n\n // Track the context and the Fiber that provided it.\n // This enables us to pop only Fibers that provide unique contexts.\n push(contextFiberStackCursor, fiber, fiber);\n push(contextStackCursor, nextRootContext, fiber);\n }\n\n function popHostContainer(fiber) {\n pop(contextStackCursor, fiber);\n pop(contextFiberStackCursor, fiber);\n pop(rootInstanceStackCursor, fiber);\n }\n\n function getHostContext() {\n var context = requiredContext(contextStackCursor.current);\n return context;\n }\n\n function pushHostContext(fiber) {\n var rootInstance = requiredContext(rootInstanceStackCursor.current);\n var context = requiredContext(contextStackCursor.current);\n var nextContext = getChildHostContext(context, fiber.type, rootInstance);\n\n // Don't push this Fiber's context unless it's unique.\n if (context === nextContext) {\n return;\n }\n\n // Track the context and the Fiber that provided it.\n // This enables us to pop only Fibers that provide unique contexts.\n push(contextFiberStackCursor, fiber, fiber);\n push(contextStackCursor, nextContext, fiber);\n }\n\n function popHostContext(fiber) {\n // Do not pop unless this Fiber provided the current context.\n // pushHostContext() only pushes Fibers that provide unique contexts.\n if (contextFiberStackCursor.current !== fiber) {\n return;\n }\n\n pop(contextStackCursor, fiber);\n pop(contextFiberStackCursor, fiber);\n }\n\n function resetHostContainer() {\n contextStackCursor.current = NO_CONTEXT;\n rootInstanceStackCursor.current = NO_CONTEXT;\n }\n\n return {\n getHostContext: getHostContext,\n getRootHostContainer: getRootHostContainer,\n popHostContainer: popHostContainer,\n popHostContext: popHostContext,\n pushHostContainer: pushHostContainer,\n pushHostContext: pushHostContext,\n resetHostContainer: resetHostContainer\n };\n};\n\nvar ReactFiberHydrationContext = function (config) {\n var shouldSetTextContent = config.shouldSetTextContent,\n hydration = config.hydration;\n\n // If this doesn't have hydration mode.\n\n if (!hydration) {\n return {\n enterHydrationState: function () {\n return false;\n },\n resetHydrationState: function () {},\n tryToClaimNextHydratableInstance: function () {},\n prepareToHydrateHostInstance: function () {\n invariant(false, 'Expected prepareToHydrateHostInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.');\n },\n prepareToHydrateHostTextInstance: function () {\n invariant(false, 'Expected prepareToHydrateHostTextInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.');\n },\n popHydrationState: function (fiber) {\n return false;\n }\n };\n }\n\n var canHydrateInstance = hydration.canHydrateInstance,\n canHydrateTextInstance = hydration.canHydrateTextInstance,\n getNextHydratableSibling = hydration.getNextHydratableSibling,\n getFirstHydratableChild = hydration.getFirstHydratableChild,\n hydrateInstance = hydration.hydrateInstance,\n hydrateTextInstance = hydration.hydrateTextInstance,\n didNotMatchHydratedContainerTextInstance = hydration.didNotMatchHydratedContainerTextInstance,\n didNotMatchHydratedTextInstance = hydration.didNotMatchHydratedTextInstance,\n didNotHydrateContainerInstance = hydration.didNotHydrateContainerInstance,\n didNotHydrateInstance = hydration.didNotHydrateInstance,\n didNotFindHydratableContainerInstance = hydration.didNotFindHydratableContainerInstance,\n didNotFindHydratableContainerTextInstance = hydration.didNotFindHydratableContainerTextInstance,\n didNotFindHydratableInstance = hydration.didNotFindHydratableInstance,\n didNotFindHydratableTextInstance = hydration.didNotFindHydratableTextInstance;\n\n // The deepest Fiber on the stack involved in a hydration context.\n // This may have been an insertion or a hydration.\n\n var hydrationParentFiber = null;\n var nextHydratableInstance = null;\n var isHydrating = false;\n\n function enterHydrationState(fiber) {\n var parentInstance = fiber.stateNode.containerInfo;\n nextHydratableInstance = getFirstHydratableChild(parentInstance);\n hydrationParentFiber = fiber;\n isHydrating = true;\n return true;\n }\n\n function deleteHydratableInstance(returnFiber, instance) {\n {\n switch (returnFiber.tag) {\n case HostRoot:\n didNotHydrateContainerInstance(returnFiber.stateNode.containerInfo, instance);\n break;\n case HostComponent:\n didNotHydrateInstance(returnFiber.type, returnFiber.memoizedProps, returnFiber.stateNode, instance);\n break;\n }\n }\n\n var childToDelete = createFiberFromHostInstanceForDeletion();\n childToDelete.stateNode = instance;\n childToDelete['return'] = returnFiber;\n childToDelete.effectTag = Deletion;\n\n // This might seem like it belongs on progressedFirstDeletion. However,\n // these children are not part of the reconciliation list of children.\n // Even if we abort and rereconcile the children, that will try to hydrate\n // again and the nodes are still in the host tree so these will be\n // recreated.\n if (returnFiber.lastEffect !== null) {\n returnFiber.lastEffect.nextEffect = childToDelete;\n returnFiber.lastEffect = childToDelete;\n } else {\n returnFiber.firstEffect = returnFiber.lastEffect = childToDelete;\n }\n }\n\n function insertNonHydratedInstance(returnFiber, fiber) {\n fiber.effectTag |= Placement;\n {\n switch (returnFiber.tag) {\n case HostRoot:\n {\n var parentContainer = returnFiber.stateNode.containerInfo;\n switch (fiber.tag) {\n case HostComponent:\n var type = fiber.type;\n var props = fiber.pendingProps;\n didNotFindHydratableContainerInstance(parentContainer, type, props);\n break;\n case HostText:\n var text = fiber.pendingProps;\n didNotFindHydratableContainerTextInstance(parentContainer, text);\n break;\n }\n break;\n }\n case HostComponent:\n {\n var parentType = returnFiber.type;\n var parentProps = returnFiber.memoizedProps;\n var parentInstance = returnFiber.stateNode;\n switch (fiber.tag) {\n case HostComponent:\n var _type = fiber.type;\n var _props = fiber.pendingProps;\n didNotFindHydratableInstance(parentType, parentProps, parentInstance, _type, _props);\n break;\n case HostText:\n var _text = fiber.pendingProps;\n didNotFindHydratableTextInstance(parentType, parentProps, parentInstance, _text);\n break;\n }\n break;\n }\n default:\n return;\n }\n }\n }\n\n function tryHydrate(fiber, nextInstance) {\n switch (fiber.tag) {\n case HostComponent:\n {\n var type = fiber.type;\n var props = fiber.pendingProps;\n var instance = canHydrateInstance(nextInstance, type, props);\n if (instance !== null) {\n fiber.stateNode = instance;\n return true;\n }\n return false;\n }\n case HostText:\n {\n var text = fiber.pendingProps;\n var textInstance = canHydrateTextInstance(nextInstance, text);\n if (textInstance !== null) {\n fiber.stateNode = textInstance;\n return true;\n }\n return false;\n }\n default:\n return false;\n }\n }\n\n function tryToClaimNextHydratableInstance(fiber) {\n if (!isHydrating) {\n return;\n }\n var nextInstance = nextHydratableInstance;\n if (!nextInstance) {\n // Nothing to hydrate. Make it an insertion.\n insertNonHydratedInstance(hydrationParentFiber, fiber);\n isHydrating = false;\n hydrationParentFiber = fiber;\n return;\n }\n if (!tryHydrate(fiber, nextInstance)) {\n // If we can't hydrate this instance let's try the next one.\n // We use this as a heuristic. It's based on intuition and not data so it\n // might be flawed or unnecessary.\n nextInstance = getNextHydratableSibling(nextInstance);\n if (!nextInstance || !tryHydrate(fiber, nextInstance)) {\n // Nothing to hydrate. Make it an insertion.\n insertNonHydratedInstance(hydrationParentFiber, fiber);\n isHydrating = false;\n hydrationParentFiber = fiber;\n return;\n }\n // We matched the next one, we'll now assume that the first one was\n // superfluous and we'll delete it. Since we can't eagerly delete it\n // we'll have to schedule a deletion. To do that, this node needs a dummy\n // fiber associated with it.\n deleteHydratableInstance(hydrationParentFiber, nextHydratableInstance);\n }\n hydrationParentFiber = fiber;\n nextHydratableInstance = getFirstHydratableChild(nextInstance);\n }\n\n function prepareToHydrateHostInstance(fiber, rootContainerInstance, hostContext) {\n var instance = fiber.stateNode;\n var updatePayload = hydrateInstance(instance, fiber.type, fiber.memoizedProps, rootContainerInstance, hostContext, fiber);\n // TODO: Type this specific to this type of component.\n fiber.updateQueue = updatePayload;\n // If the update payload indicates that there is a change or if there\n // is a new ref we mark this as an update.\n if (updatePayload !== null) {\n return true;\n }\n return false;\n }\n\n function prepareToHydrateHostTextInstance(fiber) {\n var textInstance = fiber.stateNode;\n var textContent = fiber.memoizedProps;\n var shouldUpdate = hydrateTextInstance(textInstance, textContent, fiber);\n {\n if (shouldUpdate) {\n // We assume that prepareToHydrateHostTextInstance is called in a context where the\n // hydration parent is the parent host component of this host text.\n var returnFiber = hydrationParentFiber;\n if (returnFiber !== null) {\n switch (returnFiber.tag) {\n case HostRoot:\n {\n var parentContainer = returnFiber.stateNode.containerInfo;\n didNotMatchHydratedContainerTextInstance(parentContainer, textInstance, textContent);\n break;\n }\n case HostComponent:\n {\n var parentType = returnFiber.type;\n var parentProps = returnFiber.memoizedProps;\n var parentInstance = returnFiber.stateNode;\n didNotMatchHydratedTextInstance(parentType, parentProps, parentInstance, textInstance, textContent);\n break;\n }\n }\n }\n }\n }\n return shouldUpdate;\n }\n\n function popToNextHostParent(fiber) {\n var parent = fiber['return'];\n while (parent !== null && parent.tag !== HostComponent && parent.tag !== HostRoot) {\n parent = parent['return'];\n }\n hydrationParentFiber = parent;\n }\n\n function popHydrationState(fiber) {\n if (fiber !== hydrationParentFiber) {\n // We're deeper than the current hydration context, inside an inserted\n // tree.\n return false;\n }\n if (!isHydrating) {\n // If we're not currently hydrating but we're in a hydration context, then\n // we were an insertion and now need to pop up reenter hydration of our\n // siblings.\n popToNextHostParent(fiber);\n isHydrating = true;\n return false;\n }\n\n var type = fiber.type;\n\n // If we have any remaining hydratable nodes, we need to delete them now.\n // We only do this deeper than head and body since they tend to have random\n // other nodes in them. We also ignore components with pure text content in\n // side of them.\n // TODO: Better heuristic.\n if (fiber.tag !== HostComponent || type !== 'head' && type !== 'body' && !shouldSetTextContent(type, fiber.memoizedProps)) {\n var nextInstance = nextHydratableInstance;\n while (nextInstance) {\n deleteHydratableInstance(fiber, nextInstance);\n nextInstance = getNextHydratableSibling(nextInstance);\n }\n }\n\n popToNextHostParent(fiber);\n nextHydratableInstance = hydrationParentFiber ? getNextHydratableSibling(fiber.stateNode) : null;\n return true;\n }\n\n function resetHydrationState() {\n hydrationParentFiber = null;\n nextHydratableInstance = null;\n isHydrating = false;\n }\n\n return {\n enterHydrationState: enterHydrationState,\n resetHydrationState: resetHydrationState,\n tryToClaimNextHydratableInstance: tryToClaimNextHydratableInstance,\n prepareToHydrateHostInstance: prepareToHydrateHostInstance,\n prepareToHydrateHostTextInstance: prepareToHydrateHostTextInstance,\n popHydrationState: popHydrationState\n };\n};\n\n// This lets us hook into Fiber to debug what it's doing.\n// See https://github.com/facebook/react/pull/8033.\n// This is not part of the public API, not even for React DevTools.\n// You may only inject a debugTool if you work on React Fiber itself.\nvar ReactFiberInstrumentation = {\n debugTool: null\n};\n\nvar ReactFiberInstrumentation_1 = ReactFiberInstrumentation;\n\nvar defaultShowDialog = function (capturedError) {\n return true;\n};\n\nvar showDialog = defaultShowDialog;\n\nfunction logCapturedError(capturedError) {\n var logError = showDialog(capturedError);\n\n // Allow injected showDialog() to prevent default console.error logging.\n // This enables renderers like ReactNative to better manage redbox behavior.\n if (logError === false) {\n return;\n }\n\n var error = capturedError.error;\n var suppressLogging = error && error.suppressReactErrorLogging;\n if (suppressLogging) {\n return;\n }\n\n {\n var componentName = capturedError.componentName,\n componentStack = capturedError.componentStack,\n errorBoundaryName = capturedError.errorBoundaryName,\n errorBoundaryFound = capturedError.errorBoundaryFound,\n willRetry = capturedError.willRetry;\n\n\n var componentNameMessage = componentName ? 'The above error occurred in the <' + componentName + '> component:' : 'The above error occurred in one of your React components:';\n\n var errorBoundaryMessage = void 0;\n // errorBoundaryFound check is sufficient; errorBoundaryName check is to satisfy Flow.\n if (errorBoundaryFound && errorBoundaryName) {\n if (willRetry) {\n errorBoundaryMessage = 'React will try to recreate this component tree from scratch ' + ('using the error boundary you provided, ' + errorBoundaryName + '.');\n } else {\n errorBoundaryMessage = 'This error was initially handled by the error boundary ' + errorBoundaryName + '.\\n' + 'Recreating the tree from scratch failed so React will unmount the tree.';\n }\n } else {\n errorBoundaryMessage = 'Consider adding an error boundary to your tree to customize error handling behavior.\\n' + 'Visit https://fb.me/react-error-boundaries to learn more about error boundaries.';\n }\n var combinedMessage = '' + componentNameMessage + componentStack + '\\n\\n' + ('' + errorBoundaryMessage);\n\n // In development, we provide our own message with just the component stack.\n // We don't include the original error message and JS stack because the browser\n // has already printed it. Even if the application swallows the error, it is still\n // displayed by the browser thanks to the DEV-only fake event trick in ReactErrorUtils.\n console.error(combinedMessage);\n }\n}\n\nvar invokeGuardedCallback$1 = ReactErrorUtils.invokeGuardedCallback;\nvar hasCaughtError = ReactErrorUtils.hasCaughtError;\nvar clearCaughtError = ReactErrorUtils.clearCaughtError;\n\n\n{\n var didWarnAboutStateTransition = false;\n var didWarnSetStateChildContext = false;\n var didWarnStateUpdateForUnmountedComponent = {};\n\n var warnAboutUpdateOnUnmounted = function (fiber) {\n var componentName = getComponentName(fiber) || 'ReactClass';\n if (didWarnStateUpdateForUnmountedComponent[componentName]) {\n return;\n }\n warning(false, 'Can only update a mounted or mounting ' + 'component. This usually means you called setState, replaceState, ' + 'or forceUpdate on an unmounted component. This is a no-op.\\n\\nPlease ' + 'check the code for the %s component.', componentName);\n didWarnStateUpdateForUnmountedComponent[componentName] = true;\n };\n\n var warnAboutInvalidUpdates = function (instance) {\n switch (ReactDebugCurrentFiber.phase) {\n case 'getChildContext':\n if (didWarnSetStateChildContext) {\n return;\n }\n warning(false, 'setState(...): Cannot call setState() inside getChildContext()');\n didWarnSetStateChildContext = true;\n break;\n case 'render':\n if (didWarnAboutStateTransition) {\n return;\n }\n warning(false, 'Cannot update during an existing state transition (such as within ' + \"`render` or another component's constructor). Render methods should \" + 'be a pure function of props and state; constructor side-effects are ' + 'an anti-pattern, but can be moved to `componentWillMount`.');\n didWarnAboutStateTransition = true;\n break;\n }\n };\n}\n\nvar ReactFiberScheduler = function (config) {\n var hostContext = ReactFiberHostContext(config);\n var hydrationContext = ReactFiberHydrationContext(config);\n var popHostContainer = hostContext.popHostContainer,\n popHostContext = hostContext.popHostContext,\n resetHostContainer = hostContext.resetHostContainer;\n\n var _ReactFiberBeginWork = ReactFiberBeginWork(config, hostContext, hydrationContext, scheduleWork, computeExpirationForFiber),\n beginWork = _ReactFiberBeginWork.beginWork,\n beginFailedWork = _ReactFiberBeginWork.beginFailedWork;\n\n var _ReactFiberCompleteWo = ReactFiberCompleteWork(config, hostContext, hydrationContext),\n completeWork = _ReactFiberCompleteWo.completeWork;\n\n var _ReactFiberCommitWork = ReactFiberCommitWork(config, captureError),\n commitResetTextContent = _ReactFiberCommitWork.commitResetTextContent,\n commitPlacement = _ReactFiberCommitWork.commitPlacement,\n commitDeletion = _ReactFiberCommitWork.commitDeletion,\n commitWork = _ReactFiberCommitWork.commitWork,\n commitLifeCycles = _ReactFiberCommitWork.commitLifeCycles,\n commitAttachRef = _ReactFiberCommitWork.commitAttachRef,\n commitDetachRef = _ReactFiberCommitWork.commitDetachRef;\n\n var now = config.now,\n scheduleDeferredCallback = config.scheduleDeferredCallback,\n cancelDeferredCallback = config.cancelDeferredCallback,\n useSyncScheduling = config.useSyncScheduling,\n prepareForCommit = config.prepareForCommit,\n resetAfterCommit = config.resetAfterCommit;\n\n // Represents the current time in ms.\n\n var startTime = now();\n var mostRecentCurrentTime = msToExpirationTime(0);\n\n // Represents the expiration time that incoming updates should use. (If this\n // is NoWork, use the default strategy: async updates in async mode, sync\n // updates in sync mode.)\n var expirationContext = NoWork;\n\n var isWorking = false;\n\n // The next work in progress fiber that we're currently working on.\n var nextUnitOfWork = null;\n var nextRoot = null;\n // The time at which we're currently rendering work.\n var nextRenderExpirationTime = NoWork;\n\n // The next fiber with an effect that we're currently committing.\n var nextEffect = null;\n\n // Keep track of which fibers have captured an error that need to be handled.\n // Work is removed from this collection after componentDidCatch is called.\n var capturedErrors = null;\n // Keep track of which fibers have failed during the current batch of work.\n // This is a different set than capturedErrors, because it is not reset until\n // the end of the batch. This is needed to propagate errors correctly if a\n // subtree fails more than once.\n var failedBoundaries = null;\n // Error boundaries that captured an error during the current commit.\n var commitPhaseBoundaries = null;\n var firstUncaughtError = null;\n var didFatal = false;\n\n var isCommitting = false;\n var isUnmounting = false;\n\n // Used for performance tracking.\n var interruptedBy = null;\n\n function resetContextStack() {\n // Reset the stack\n reset$1();\n // Reset the cursors\n resetContext();\n resetHostContainer();\n }\n\n function commitAllHostEffects() {\n while (nextEffect !== null) {\n {\n ReactDebugCurrentFiber.setCurrentFiber(nextEffect);\n }\n recordEffect();\n\n var effectTag = nextEffect.effectTag;\n if (effectTag & ContentReset) {\n commitResetTextContent(nextEffect);\n }\n\n if (effectTag & Ref) {\n var current = nextEffect.alternate;\n if (current !== null) {\n commitDetachRef(current);\n }\n }\n\n // The following switch statement is only concerned about placement,\n // updates, and deletions. To avoid needing to add a case for every\n // possible bitmap value, we remove the secondary effects from the\n // effect tag and switch on that value.\n var primaryEffectTag = effectTag & ~(Callback | Err | ContentReset | Ref | PerformedWork);\n switch (primaryEffectTag) {\n case Placement:\n {\n commitPlacement(nextEffect);\n // Clear the \"placement\" from effect tag so that we know that this is inserted, before\n // any life-cycles like componentDidMount gets called.\n // TODO: findDOMNode doesn't rely on this any more but isMounted\n // does and isMounted is deprecated anyway so we should be able\n // to kill this.\n nextEffect.effectTag &= ~Placement;\n break;\n }\n case PlacementAndUpdate:\n {\n // Placement\n commitPlacement(nextEffect);\n // Clear the \"placement\" from effect tag so that we know that this is inserted, before\n // any life-cycles like componentDidMount gets called.\n nextEffect.effectTag &= ~Placement;\n\n // Update\n var _current = nextEffect.alternate;\n commitWork(_current, nextEffect);\n break;\n }\n case Update:\n {\n var _current2 = nextEffect.alternate;\n commitWork(_current2, nextEffect);\n break;\n }\n case Deletion:\n {\n isUnmounting = true;\n commitDeletion(nextEffect);\n isUnmounting = false;\n break;\n }\n }\n nextEffect = nextEffect.nextEffect;\n }\n\n {\n ReactDebugCurrentFiber.resetCurrentFiber();\n }\n }\n\n function commitAllLifeCycles() {\n while (nextEffect !== null) {\n var effectTag = nextEffect.effectTag;\n\n if (effectTag & (Update | Callback)) {\n recordEffect();\n var current = nextEffect.alternate;\n commitLifeCycles(current, nextEffect);\n }\n\n if (effectTag & Ref) {\n recordEffect();\n commitAttachRef(nextEffect);\n }\n\n if (effectTag & Err) {\n recordEffect();\n commitErrorHandling(nextEffect);\n }\n\n var next = nextEffect.nextEffect;\n // Ensure that we clean these up so that we don't accidentally keep them.\n // I'm not actually sure this matters because we can't reset firstEffect\n // and lastEffect since they're on every node, not just the effectful\n // ones. So we have to clean everything as we reuse nodes anyway.\n nextEffect.nextEffect = null;\n // Ensure that we reset the effectTag here so that we can rely on effect\n // tags to reason about the current life-cycle.\n nextEffect = next;\n }\n }\n\n function commitRoot(finishedWork) {\n // We keep track of this so that captureError can collect any boundaries\n // that capture an error during the commit phase. The reason these aren't\n // local to this function is because errors that occur during cWU are\n // captured elsewhere, to prevent the unmount from being interrupted.\n isWorking = true;\n isCommitting = true;\n startCommitTimer();\n\n var root = finishedWork.stateNode;\n !(root.current !== finishedWork) ? invariant(false, 'Cannot commit the same tree as before. This is probably a bug related to the return field. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n root.isReadyForCommit = false;\n\n // Reset this to null before calling lifecycles\n ReactCurrentOwner.current = null;\n\n var firstEffect = void 0;\n if (finishedWork.effectTag > PerformedWork) {\n // A fiber's effect list consists only of its children, not itself. So if\n // the root has an effect, we need to add it to the end of the list. The\n // resulting list is the set that would belong to the root's parent, if\n // it had one; that is, all the effects in the tree including the root.\n if (finishedWork.lastEffect !== null) {\n finishedWork.lastEffect.nextEffect = finishedWork;\n firstEffect = finishedWork.firstEffect;\n } else {\n firstEffect = finishedWork;\n }\n } else {\n // There is no effect on the root.\n firstEffect = finishedWork.firstEffect;\n }\n\n prepareForCommit();\n\n // Commit all the side-effects within a tree. We'll do this in two passes.\n // The first pass performs all the host insertions, updates, deletions and\n // ref unmounts.\n nextEffect = firstEffect;\n startCommitHostEffectsTimer();\n while (nextEffect !== null) {\n var didError = false;\n var _error = void 0;\n {\n invokeGuardedCallback$1(null, commitAllHostEffects, null);\n if (hasCaughtError()) {\n didError = true;\n _error = clearCaughtError();\n }\n }\n if (didError) {\n !(nextEffect !== null) ? invariant(false, 'Should have next effect. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n captureError(nextEffect, _error);\n // Clean-up\n if (nextEffect !== null) {\n nextEffect = nextEffect.nextEffect;\n }\n }\n }\n stopCommitHostEffectsTimer();\n\n resetAfterCommit();\n\n // The work-in-progress tree is now the current tree. This must come after\n // the first pass of the commit phase, so that the previous tree is still\n // current during componentWillUnmount, but before the second pass, so that\n // the finished work is current during componentDidMount/Update.\n root.current = finishedWork;\n\n // In the second pass we'll perform all life-cycles and ref callbacks.\n // Life-cycles happen as a separate pass so that all placements, updates,\n // and deletions in the entire tree have already been invoked.\n // This pass also triggers any renderer-specific initial effects.\n nextEffect = firstEffect;\n startCommitLifeCyclesTimer();\n while (nextEffect !== null) {\n var _didError = false;\n var _error2 = void 0;\n {\n invokeGuardedCallback$1(null, commitAllLifeCycles, null);\n if (hasCaughtError()) {\n _didError = true;\n _error2 = clearCaughtError();\n }\n }\n if (_didError) {\n !(nextEffect !== null) ? invariant(false, 'Should have next effect. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n captureError(nextEffect, _error2);\n if (nextEffect !== null) {\n nextEffect = nextEffect.nextEffect;\n }\n }\n }\n\n isCommitting = false;\n isWorking = false;\n stopCommitLifeCyclesTimer();\n stopCommitTimer();\n if (typeof onCommitRoot === 'function') {\n onCommitRoot(finishedWork.stateNode);\n }\n if (true && ReactFiberInstrumentation_1.debugTool) {\n ReactFiberInstrumentation_1.debugTool.onCommitWork(finishedWork);\n }\n\n // If we caught any errors during this commit, schedule their boundaries\n // to update.\n if (commitPhaseBoundaries) {\n commitPhaseBoundaries.forEach(scheduleErrorRecovery);\n commitPhaseBoundaries = null;\n }\n\n if (firstUncaughtError !== null) {\n var _error3 = firstUncaughtError;\n firstUncaughtError = null;\n onUncaughtError(_error3);\n }\n\n var remainingTime = root.current.expirationTime;\n\n if (remainingTime === NoWork) {\n capturedErrors = null;\n failedBoundaries = null;\n }\n\n return remainingTime;\n }\n\n function resetExpirationTime(workInProgress, renderTime) {\n if (renderTime !== Never && workInProgress.expirationTime === Never) {\n // The children of this component are hidden. Don't bubble their\n // expiration times.\n return;\n }\n\n // Check for pending updates.\n var newExpirationTime = getUpdateExpirationTime(workInProgress);\n\n // TODO: Calls need to visit stateNode\n\n // Bubble up the earliest expiration time.\n var child = workInProgress.child;\n while (child !== null) {\n if (child.expirationTime !== NoWork && (newExpirationTime === NoWork || newExpirationTime > child.expirationTime)) {\n newExpirationTime = child.expirationTime;\n }\n child = child.sibling;\n }\n workInProgress.expirationTime = newExpirationTime;\n }\n\n function completeUnitOfWork(workInProgress) {\n while (true) {\n // The current, flushed, state of this fiber is the alternate.\n // Ideally nothing should rely on this, but relying on it here\n // means that we don't need an additional field on the work in\n // progress.\n var current = workInProgress.alternate;\n {\n ReactDebugCurrentFiber.setCurrentFiber(workInProgress);\n }\n var next = completeWork(current, workInProgress, nextRenderExpirationTime);\n {\n ReactDebugCurrentFiber.resetCurrentFiber();\n }\n\n var returnFiber = workInProgress['return'];\n var siblingFiber = workInProgress.sibling;\n\n resetExpirationTime(workInProgress, nextRenderExpirationTime);\n\n if (next !== null) {\n stopWorkTimer(workInProgress);\n if (true && ReactFiberInstrumentation_1.debugTool) {\n ReactFiberInstrumentation_1.debugTool.onCompleteWork(workInProgress);\n }\n // If completing this work spawned new work, do that next. We'll come\n // back here again.\n return next;\n }\n\n if (returnFiber !== null) {\n // Append all the effects of the subtree and this fiber onto the effect\n // list of the parent. The completion order of the children affects the\n // side-effect order.\n if (returnFiber.firstEffect === null) {\n returnFiber.firstEffect = workInProgress.firstEffect;\n }\n if (workInProgress.lastEffect !== null) {\n if (returnFiber.lastEffect !== null) {\n returnFiber.lastEffect.nextEffect = workInProgress.firstEffect;\n }\n returnFiber.lastEffect = workInProgress.lastEffect;\n }\n\n // If this fiber had side-effects, we append it AFTER the children's\n // side-effects. We can perform certain side-effects earlier if\n // needed, by doing multiple passes over the effect list. We don't want\n // to schedule our own side-effect on our own list because if end up\n // reusing children we'll schedule this effect onto itself since we're\n // at the end.\n var effectTag = workInProgress.effectTag;\n // Skip both NoWork and PerformedWork tags when creating the effect list.\n // PerformedWork effect is read by React DevTools but shouldn't be committed.\n if (effectTag > PerformedWork) {\n if (returnFiber.lastEffect !== null) {\n returnFiber.lastEffect.nextEffect = workInProgress;\n } else {\n returnFiber.firstEffect = workInProgress;\n }\n returnFiber.lastEffect = workInProgress;\n }\n }\n\n stopWorkTimer(workInProgress);\n if (true && ReactFiberInstrumentation_1.debugTool) {\n ReactFiberInstrumentation_1.debugTool.onCompleteWork(workInProgress);\n }\n\n if (siblingFiber !== null) {\n // If there is more work to do in this returnFiber, do that next.\n return siblingFiber;\n } else if (returnFiber !== null) {\n // If there's no more work in this returnFiber. Complete the returnFiber.\n workInProgress = returnFiber;\n continue;\n } else {\n // We've reached the root.\n var root = workInProgress.stateNode;\n root.isReadyForCommit = true;\n return null;\n }\n }\n\n // Without this explicit null return Flow complains of invalid return type\n // TODO Remove the above while(true) loop\n // eslint-disable-next-line no-unreachable\n return null;\n }\n\n function performUnitOfWork(workInProgress) {\n // The current, flushed, state of this fiber is the alternate.\n // Ideally nothing should rely on this, but relying on it here\n // means that we don't need an additional field on the work in\n // progress.\n var current = workInProgress.alternate;\n\n // See if beginning this work spawns more work.\n startWorkTimer(workInProgress);\n {\n ReactDebugCurrentFiber.setCurrentFiber(workInProgress);\n }\n\n var next = beginWork(current, workInProgress, nextRenderExpirationTime);\n {\n ReactDebugCurrentFiber.resetCurrentFiber();\n }\n if (true && ReactFiberInstrumentation_1.debugTool) {\n ReactFiberInstrumentation_1.debugTool.onBeginWork(workInProgress);\n }\n\n if (next === null) {\n // If this doesn't spawn new work, complete the current work.\n next = completeUnitOfWork(workInProgress);\n }\n\n ReactCurrentOwner.current = null;\n\n return next;\n }\n\n function performFailedUnitOfWork(workInProgress) {\n // The current, flushed, state of this fiber is the alternate.\n // Ideally nothing should rely on this, but relying on it here\n // means that we don't need an additional field on the work in\n // progress.\n var current = workInProgress.alternate;\n\n // See if beginning this work spawns more work.\n startWorkTimer(workInProgress);\n {\n ReactDebugCurrentFiber.setCurrentFiber(workInProgress);\n }\n var next = beginFailedWork(current, workInProgress, nextRenderExpirationTime);\n {\n ReactDebugCurrentFiber.resetCurrentFiber();\n }\n if (true && ReactFiberInstrumentation_1.debugTool) {\n ReactFiberInstrumentation_1.debugTool.onBeginWork(workInProgress);\n }\n\n if (next === null) {\n // If this doesn't spawn new work, complete the current work.\n next = completeUnitOfWork(workInProgress);\n }\n\n ReactCurrentOwner.current = null;\n\n return next;\n }\n\n function workLoop(expirationTime) {\n if (capturedErrors !== null) {\n // If there are unhandled errors, switch to the slow work loop.\n // TODO: How to avoid this check in the fast path? Maybe the renderer\n // could keep track of which roots have unhandled errors and call a\n // forked version of renderRoot.\n slowWorkLoopThatChecksForFailedWork(expirationTime);\n return;\n }\n if (nextRenderExpirationTime === NoWork || nextRenderExpirationTime > expirationTime) {\n return;\n }\n\n if (nextRenderExpirationTime <= mostRecentCurrentTime) {\n // Flush all expired work.\n while (nextUnitOfWork !== null) {\n nextUnitOfWork = performUnitOfWork(nextUnitOfWork);\n }\n } else {\n // Flush asynchronous work until the deadline runs out of time.\n while (nextUnitOfWork !== null && !shouldYield()) {\n nextUnitOfWork = performUnitOfWork(nextUnitOfWork);\n }\n }\n }\n\n function slowWorkLoopThatChecksForFailedWork(expirationTime) {\n if (nextRenderExpirationTime === NoWork || nextRenderExpirationTime > expirationTime) {\n return;\n }\n\n if (nextRenderExpirationTime <= mostRecentCurrentTime) {\n // Flush all expired work.\n while (nextUnitOfWork !== null) {\n if (hasCapturedError(nextUnitOfWork)) {\n // Use a forked version of performUnitOfWork\n nextUnitOfWork = performFailedUnitOfWork(nextUnitOfWork);\n } else {\n nextUnitOfWork = performUnitOfWork(nextUnitOfWork);\n }\n }\n } else {\n // Flush asynchronous work until the deadline runs out of time.\n while (nextUnitOfWork !== null && !shouldYield()) {\n if (hasCapturedError(nextUnitOfWork)) {\n // Use a forked version of performUnitOfWork\n nextUnitOfWork = performFailedUnitOfWork(nextUnitOfWork);\n } else {\n nextUnitOfWork = performUnitOfWork(nextUnitOfWork);\n }\n }\n }\n }\n\n function renderRootCatchBlock(root, failedWork, boundary, expirationTime) {\n // We're going to restart the error boundary that captured the error.\n // Conceptually, we're unwinding the stack. We need to unwind the\n // context stack, too.\n unwindContexts(failedWork, boundary);\n\n // Restart the error boundary using a forked version of\n // performUnitOfWork that deletes the boundary's children. The entire\n // failed subree will be unmounted. During the commit phase, a special\n // lifecycle method is called on the error boundary, which triggers\n // a re-render.\n nextUnitOfWork = performFailedUnitOfWork(boundary);\n\n // Continue working.\n workLoop(expirationTime);\n }\n\n function renderRoot(root, expirationTime) {\n !!isWorking ? invariant(false, 'renderRoot was called recursively. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n isWorking = true;\n\n // We're about to mutate the work-in-progress tree. If the root was pending\n // commit, it no longer is: we'll need to complete it again.\n root.isReadyForCommit = false;\n\n // Check if we're starting from a fresh stack, or if we're resuming from\n // previously yielded work.\n if (root !== nextRoot || expirationTime !== nextRenderExpirationTime || nextUnitOfWork === null) {\n // Reset the stack and start working from the root.\n resetContextStack();\n nextRoot = root;\n nextRenderExpirationTime = expirationTime;\n nextUnitOfWork = createWorkInProgress(nextRoot.current, null, expirationTime);\n }\n\n startWorkLoopTimer(nextUnitOfWork);\n\n var didError = false;\n var error = null;\n {\n invokeGuardedCallback$1(null, workLoop, null, expirationTime);\n if (hasCaughtError()) {\n didError = true;\n error = clearCaughtError();\n }\n }\n\n // An error was thrown during the render phase.\n while (didError) {\n if (didFatal) {\n // This was a fatal error. Don't attempt to recover from it.\n firstUncaughtError = error;\n break;\n }\n\n var failedWork = nextUnitOfWork;\n if (failedWork === null) {\n // An error was thrown but there's no current unit of work. This can\n // happen during the commit phase if there's a bug in the renderer.\n didFatal = true;\n continue;\n }\n\n // \"Capture\" the error by finding the nearest boundary. If there is no\n // error boundary, we use the root.\n var boundary = captureError(failedWork, error);\n !(boundary !== null) ? invariant(false, 'Should have found an error boundary. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n\n if (didFatal) {\n // The error we just captured was a fatal error. This happens\n // when the error propagates to the root more than once.\n continue;\n }\n\n didError = false;\n error = null;\n {\n invokeGuardedCallback$1(null, renderRootCatchBlock, null, root, failedWork, boundary, expirationTime);\n if (hasCaughtError()) {\n didError = true;\n error = clearCaughtError();\n continue;\n }\n }\n // We're finished working. Exit the error loop.\n break;\n }\n\n var uncaughtError = firstUncaughtError;\n\n // We're done performing work. Time to clean up.\n stopWorkLoopTimer(interruptedBy);\n interruptedBy = null;\n isWorking = false;\n didFatal = false;\n firstUncaughtError = null;\n\n if (uncaughtError !== null) {\n onUncaughtError(uncaughtError);\n }\n\n return root.isReadyForCommit ? root.current.alternate : null;\n }\n\n // Returns the boundary that captured the error, or null if the error is ignored\n function captureError(failedWork, error) {\n // It is no longer valid because we exited the user code.\n ReactCurrentOwner.current = null;\n {\n ReactDebugCurrentFiber.resetCurrentFiber();\n }\n\n // Search for the nearest error boundary.\n var boundary = null;\n\n // Passed to logCapturedError()\n var errorBoundaryFound = false;\n var willRetry = false;\n var errorBoundaryName = null;\n\n // Host containers are a special case. If the failed work itself is a host\n // container, then it acts as its own boundary. In all other cases, we\n // ignore the work itself and only search through the parents.\n if (failedWork.tag === HostRoot) {\n boundary = failedWork;\n\n if (isFailedBoundary(failedWork)) {\n // If this root already failed, there must have been an error when\n // attempting to unmount it. This is a worst-case scenario and\n // should only be possible if there's a bug in the renderer.\n didFatal = true;\n }\n } else {\n var node = failedWork['return'];\n while (node !== null && boundary === null) {\n if (node.tag === ClassComponent) {\n var instance = node.stateNode;\n if (typeof instance.componentDidCatch === 'function') {\n errorBoundaryFound = true;\n errorBoundaryName = getComponentName(node);\n\n // Found an error boundary!\n boundary = node;\n willRetry = true;\n }\n } else if (node.tag === HostRoot) {\n // Treat the root like a no-op error boundary\n boundary = node;\n }\n\n if (isFailedBoundary(node)) {\n // This boundary is already in a failed state.\n\n // If we're currently unmounting, that means this error was\n // thrown while unmounting a failed subtree. We should ignore\n // the error.\n if (isUnmounting) {\n return null;\n }\n\n // If we're in the commit phase, we should check to see if\n // this boundary already captured an error during this commit.\n // This case exists because multiple errors can be thrown during\n // a single commit without interruption.\n if (commitPhaseBoundaries !== null && (commitPhaseBoundaries.has(node) || node.alternate !== null && commitPhaseBoundaries.has(node.alternate))) {\n // If so, we should ignore this error.\n return null;\n }\n\n // The error should propagate to the next boundary -— we keep looking.\n boundary = null;\n willRetry = false;\n }\n\n node = node['return'];\n }\n }\n\n if (boundary !== null) {\n // Add to the collection of failed boundaries. This lets us know that\n // subsequent errors in this subtree should propagate to the next boundary.\n if (failedBoundaries === null) {\n failedBoundaries = new Set();\n }\n failedBoundaries.add(boundary);\n\n // This method is unsafe outside of the begin and complete phases.\n // We might be in the commit phase when an error is captured.\n // The risk is that the return path from this Fiber may not be accurate.\n // That risk is acceptable given the benefit of providing users more context.\n var _componentStack = getStackAddendumByWorkInProgressFiber(failedWork);\n var _componentName = getComponentName(failedWork);\n\n // Add to the collection of captured errors. This is stored as a global\n // map of errors and their component stack location keyed by the boundaries\n // that capture them. We mostly use this Map as a Set; it's a Map only to\n // avoid adding a field to Fiber to store the error.\n if (capturedErrors === null) {\n capturedErrors = new Map();\n }\n\n var capturedError = {\n componentName: _componentName,\n componentStack: _componentStack,\n error: error,\n errorBoundary: errorBoundaryFound ? boundary.stateNode : null,\n errorBoundaryFound: errorBoundaryFound,\n errorBoundaryName: errorBoundaryName,\n willRetry: willRetry\n };\n\n capturedErrors.set(boundary, capturedError);\n\n try {\n logCapturedError(capturedError);\n } catch (e) {\n // Prevent cycle if logCapturedError() throws.\n // A cycle may still occur if logCapturedError renders a component that throws.\n var suppressLogging = e && e.suppressReactErrorLogging;\n if (!suppressLogging) {\n console.error(e);\n }\n }\n\n // If we're in the commit phase, defer scheduling an update on the\n // boundary until after the commit is complete\n if (isCommitting) {\n if (commitPhaseBoundaries === null) {\n commitPhaseBoundaries = new Set();\n }\n commitPhaseBoundaries.add(boundary);\n } else {\n // Otherwise, schedule an update now.\n // TODO: Is this actually necessary during the render phase? Is it\n // possible to unwind and continue rendering at the same priority,\n // without corrupting internal state?\n scheduleErrorRecovery(boundary);\n }\n return boundary;\n } else if (firstUncaughtError === null) {\n // If no boundary is found, we'll need to throw the error\n firstUncaughtError = error;\n }\n return null;\n }\n\n function hasCapturedError(fiber) {\n // TODO: capturedErrors should store the boundary instance, to avoid needing\n // to check the alternate.\n return capturedErrors !== null && (capturedErrors.has(fiber) || fiber.alternate !== null && capturedErrors.has(fiber.alternate));\n }\n\n function isFailedBoundary(fiber) {\n // TODO: failedBoundaries should store the boundary instance, to avoid\n // needing to check the alternate.\n return failedBoundaries !== null && (failedBoundaries.has(fiber) || fiber.alternate !== null && failedBoundaries.has(fiber.alternate));\n }\n\n function commitErrorHandling(effectfulFiber) {\n var capturedError = void 0;\n if (capturedErrors !== null) {\n capturedError = capturedErrors.get(effectfulFiber);\n capturedErrors['delete'](effectfulFiber);\n if (capturedError == null) {\n if (effectfulFiber.alternate !== null) {\n effectfulFiber = effectfulFiber.alternate;\n capturedError = capturedErrors.get(effectfulFiber);\n capturedErrors['delete'](effectfulFiber);\n }\n }\n }\n\n !(capturedError != null) ? invariant(false, 'No error for given unit of work. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n\n switch (effectfulFiber.tag) {\n case ClassComponent:\n var instance = effectfulFiber.stateNode;\n\n var info = {\n componentStack: capturedError.componentStack\n };\n\n // Allow the boundary to handle the error, usually by scheduling\n // an update to itself\n instance.componentDidCatch(capturedError.error, info);\n return;\n case HostRoot:\n if (firstUncaughtError === null) {\n firstUncaughtError = capturedError.error;\n }\n return;\n default:\n invariant(false, 'Invalid type of work. This error is likely caused by a bug in React. Please file an issue.');\n }\n }\n\n function unwindContexts(from, to) {\n var node = from;\n while (node !== null) {\n switch (node.tag) {\n case ClassComponent:\n popContextProvider(node);\n break;\n case HostComponent:\n popHostContext(node);\n break;\n case HostRoot:\n popHostContainer(node);\n break;\n case HostPortal:\n popHostContainer(node);\n break;\n }\n if (node === to || node.alternate === to) {\n stopFailedWorkTimer(node);\n break;\n } else {\n stopWorkTimer(node);\n }\n node = node['return'];\n }\n }\n\n function computeAsyncExpiration() {\n // Given the current clock time, returns an expiration time. We use rounding\n // to batch like updates together.\n // Should complete within ~1000ms. 1200ms max.\n var currentTime = recalculateCurrentTime();\n var expirationMs = 1000;\n var bucketSizeMs = 200;\n return computeExpirationBucket(currentTime, expirationMs, bucketSizeMs);\n }\n\n function computeExpirationForFiber(fiber) {\n var expirationTime = void 0;\n if (expirationContext !== NoWork) {\n // An explicit expiration context was set;\n expirationTime = expirationContext;\n } else if (isWorking) {\n if (isCommitting) {\n // Updates that occur during the commit phase should have sync priority\n // by default.\n expirationTime = Sync;\n } else {\n // Updates during the render phase should expire at the same time as\n // the work that is being rendered.\n expirationTime = nextRenderExpirationTime;\n }\n } else {\n // No explicit expiration context was set, and we're not currently\n // performing work. Calculate a new expiration time.\n if (useSyncScheduling && !(fiber.internalContextTag & AsyncUpdates)) {\n // This is a sync update\n expirationTime = Sync;\n } else {\n // This is an async update\n expirationTime = computeAsyncExpiration();\n }\n }\n return expirationTime;\n }\n\n function scheduleWork(fiber, expirationTime) {\n return scheduleWorkImpl(fiber, expirationTime, false);\n }\n\n function checkRootNeedsClearing(root, fiber, expirationTime) {\n if (!isWorking && root === nextRoot && expirationTime < nextRenderExpirationTime) {\n // Restart the root from the top.\n if (nextUnitOfWork !== null) {\n // This is an interruption. (Used for performance tracking.)\n interruptedBy = fiber;\n }\n nextRoot = null;\n nextUnitOfWork = null;\n nextRenderExpirationTime = NoWork;\n }\n }\n\n function scheduleWorkImpl(fiber, expirationTime, isErrorRecovery) {\n recordScheduleUpdate();\n\n {\n if (!isErrorRecovery && fiber.tag === ClassComponent) {\n var instance = fiber.stateNode;\n warnAboutInvalidUpdates(instance);\n }\n }\n\n var node = fiber;\n while (node !== null) {\n // Walk the parent path to the root and update each node's\n // expiration time.\n if (node.expirationTime === NoWork || node.expirationTime > expirationTime) {\n node.expirationTime = expirationTime;\n }\n if (node.alternate !== null) {\n if (node.alternate.expirationTime === NoWork || node.alternate.expirationTime > expirationTime) {\n node.alternate.expirationTime = expirationTime;\n }\n }\n if (node['return'] === null) {\n if (node.tag === HostRoot) {\n var root = node.stateNode;\n\n checkRootNeedsClearing(root, fiber, expirationTime);\n requestWork(root, expirationTime);\n checkRootNeedsClearing(root, fiber, expirationTime);\n } else {\n {\n if (!isErrorRecovery && fiber.tag === ClassComponent) {\n warnAboutUpdateOnUnmounted(fiber);\n }\n }\n return;\n }\n }\n node = node['return'];\n }\n }\n\n function scheduleErrorRecovery(fiber) {\n scheduleWorkImpl(fiber, Sync, true);\n }\n\n function recalculateCurrentTime() {\n // Subtract initial time so it fits inside 32bits\n var ms = now() - startTime;\n mostRecentCurrentTime = msToExpirationTime(ms);\n return mostRecentCurrentTime;\n }\n\n function deferredUpdates(fn) {\n var previousExpirationContext = expirationContext;\n expirationContext = computeAsyncExpiration();\n try {\n return fn();\n } finally {\n expirationContext = previousExpirationContext;\n }\n }\n\n function syncUpdates(fn) {\n var previousExpirationContext = expirationContext;\n expirationContext = Sync;\n try {\n return fn();\n } finally {\n expirationContext = previousExpirationContext;\n }\n }\n\n // TODO: Everything below this is written as if it has been lifted to the\n // renderers. I'll do this in a follow-up.\n\n // Linked-list of roots\n var firstScheduledRoot = null;\n var lastScheduledRoot = null;\n\n var callbackExpirationTime = NoWork;\n var callbackID = -1;\n var isRendering = false;\n var nextFlushedRoot = null;\n var nextFlushedExpirationTime = NoWork;\n var deadlineDidExpire = false;\n var hasUnhandledError = false;\n var unhandledError = null;\n var deadline = null;\n\n var isBatchingUpdates = false;\n var isUnbatchingUpdates = false;\n\n // Use these to prevent an infinite loop of nested updates\n var NESTED_UPDATE_LIMIT = 1000;\n var nestedUpdateCount = 0;\n\n var timeHeuristicForUnitOfWork = 1;\n\n function scheduleCallbackWithExpiration(expirationTime) {\n if (callbackExpirationTime !== NoWork) {\n // A callback is already scheduled. Check its expiration time (timeout).\n if (expirationTime > callbackExpirationTime) {\n // Existing callback has sufficient timeout. Exit.\n return;\n } else {\n // Existing callback has insufficient timeout. Cancel and schedule a\n // new one.\n cancelDeferredCallback(callbackID);\n }\n // The request callback timer is already running. Don't start a new one.\n } else {\n startRequestCallbackTimer();\n }\n\n // Compute a timeout for the given expiration time.\n var currentMs = now() - startTime;\n var expirationMs = expirationTimeToMs(expirationTime);\n var timeout = expirationMs - currentMs;\n\n callbackExpirationTime = expirationTime;\n callbackID = scheduleDeferredCallback(performAsyncWork, { timeout: timeout });\n }\n\n // requestWork is called by the scheduler whenever a root receives an update.\n // It's up to the renderer to call renderRoot at some point in the future.\n function requestWork(root, expirationTime) {\n if (nestedUpdateCount > NESTED_UPDATE_LIMIT) {\n invariant(false, '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.');\n }\n\n // Add the root to the schedule.\n // Check if this root is already part of the schedule.\n if (root.nextScheduledRoot === null) {\n // This root is not already scheduled. Add it.\n root.remainingExpirationTime = expirationTime;\n if (lastScheduledRoot === null) {\n firstScheduledRoot = lastScheduledRoot = root;\n root.nextScheduledRoot = root;\n } else {\n lastScheduledRoot.nextScheduledRoot = root;\n lastScheduledRoot = root;\n lastScheduledRoot.nextScheduledRoot = firstScheduledRoot;\n }\n } else {\n // This root is already scheduled, but its priority may have increased.\n var remainingExpirationTime = root.remainingExpirationTime;\n if (remainingExpirationTime === NoWork || expirationTime < remainingExpirationTime) {\n // Update the priority.\n root.remainingExpirationTime = expirationTime;\n }\n }\n\n if (isRendering) {\n // Prevent reentrancy. Remaining work will be scheduled at the end of\n // the currently rendering batch.\n return;\n }\n\n if (isBatchingUpdates) {\n // Flush work at the end of the batch.\n if (isUnbatchingUpdates) {\n // ...unless we're inside unbatchedUpdates, in which case we should\n // flush it now.\n nextFlushedRoot = root;\n nextFlushedExpirationTime = Sync;\n performWorkOnRoot(nextFlushedRoot, nextFlushedExpirationTime);\n }\n return;\n }\n\n // TODO: Get rid of Sync and use current time?\n if (expirationTime === Sync) {\n performWork(Sync, null);\n } else {\n scheduleCallbackWithExpiration(expirationTime);\n }\n }\n\n function findHighestPriorityRoot() {\n var highestPriorityWork = NoWork;\n var highestPriorityRoot = null;\n\n if (lastScheduledRoot !== null) {\n var previousScheduledRoot = lastScheduledRoot;\n var root = firstScheduledRoot;\n while (root !== null) {\n var remainingExpirationTime = root.remainingExpirationTime;\n if (remainingExpirationTime === NoWork) {\n // This root no longer has work. Remove it from the scheduler.\n\n // TODO: This check is redudant, but Flow is confused by the branch\n // below where we set lastScheduledRoot to null, even though we break\n // from the loop right after.\n !(previousScheduledRoot !== null && lastScheduledRoot !== null) ? invariant(false, 'Should have a previous and last root. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n if (root === root.nextScheduledRoot) {\n // This is the only root in the list.\n root.nextScheduledRoot = null;\n firstScheduledRoot = lastScheduledRoot = null;\n break;\n } else if (root === firstScheduledRoot) {\n // This is the first root in the list.\n var next = root.nextScheduledRoot;\n firstScheduledRoot = next;\n lastScheduledRoot.nextScheduledRoot = next;\n root.nextScheduledRoot = null;\n } else if (root === lastScheduledRoot) {\n // This is the last root in the list.\n lastScheduledRoot = previousScheduledRoot;\n lastScheduledRoot.nextScheduledRoot = firstScheduledRoot;\n root.nextScheduledRoot = null;\n break;\n } else {\n previousScheduledRoot.nextScheduledRoot = root.nextScheduledRoot;\n root.nextScheduledRoot = null;\n }\n root = previousScheduledRoot.nextScheduledRoot;\n } else {\n if (highestPriorityWork === NoWork || remainingExpirationTime < highestPriorityWork) {\n // Update the priority, if it's higher\n highestPriorityWork = remainingExpirationTime;\n highestPriorityRoot = root;\n }\n if (root === lastScheduledRoot) {\n break;\n }\n previousScheduledRoot = root;\n root = root.nextScheduledRoot;\n }\n }\n }\n\n // If the next root is the same as the previous root, this is a nested\n // update. To prevent an infinite loop, increment the nested update count.\n var previousFlushedRoot = nextFlushedRoot;\n if (previousFlushedRoot !== null && previousFlushedRoot === highestPriorityRoot) {\n nestedUpdateCount++;\n } else {\n // Reset whenever we switch roots.\n nestedUpdateCount = 0;\n }\n nextFlushedRoot = highestPriorityRoot;\n nextFlushedExpirationTime = highestPriorityWork;\n }\n\n function performAsyncWork(dl) {\n performWork(NoWork, dl);\n }\n\n function performWork(minExpirationTime, dl) {\n deadline = dl;\n\n // Keep working on roots until there's no more work, or until the we reach\n // the deadline.\n findHighestPriorityRoot();\n\n if (enableUserTimingAPI && deadline !== null) {\n var didExpire = nextFlushedExpirationTime < recalculateCurrentTime();\n stopRequestCallbackTimer(didExpire);\n }\n\n while (nextFlushedRoot !== null && nextFlushedExpirationTime !== NoWork && (minExpirationTime === NoWork || nextFlushedExpirationTime <= minExpirationTime) && !deadlineDidExpire) {\n performWorkOnRoot(nextFlushedRoot, nextFlushedExpirationTime);\n // Find the next highest priority work.\n findHighestPriorityRoot();\n }\n\n // We're done flushing work. Either we ran out of time in this callback,\n // or there's no more work left with sufficient priority.\n\n // If we're inside a callback, set this to false since we just completed it.\n if (deadline !== null) {\n callbackExpirationTime = NoWork;\n callbackID = -1;\n }\n // If there's work left over, schedule a new callback.\n if (nextFlushedExpirationTime !== NoWork) {\n scheduleCallbackWithExpiration(nextFlushedExpirationTime);\n }\n\n // Clean-up.\n deadline = null;\n deadlineDidExpire = false;\n nestedUpdateCount = 0;\n\n if (hasUnhandledError) {\n var _error4 = unhandledError;\n unhandledError = null;\n hasUnhandledError = false;\n throw _error4;\n }\n }\n\n function performWorkOnRoot(root, expirationTime) {\n !!isRendering ? invariant(false, 'performWorkOnRoot was called recursively. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n\n isRendering = true;\n\n // Check if this is async work or sync/expired work.\n // TODO: Pass current time as argument to renderRoot, commitRoot\n if (expirationTime <= recalculateCurrentTime()) {\n // Flush sync work.\n var finishedWork = root.finishedWork;\n if (finishedWork !== null) {\n // This root is already complete. We can commit it.\n root.finishedWork = null;\n root.remainingExpirationTime = commitRoot(finishedWork);\n } else {\n root.finishedWork = null;\n finishedWork = renderRoot(root, expirationTime);\n if (finishedWork !== null) {\n // We've completed the root. Commit it.\n root.remainingExpirationTime = commitRoot(finishedWork);\n }\n }\n } else {\n // Flush async work.\n var _finishedWork = root.finishedWork;\n if (_finishedWork !== null) {\n // This root is already complete. We can commit it.\n root.finishedWork = null;\n root.remainingExpirationTime = commitRoot(_finishedWork);\n } else {\n root.finishedWork = null;\n _finishedWork = renderRoot(root, expirationTime);\n if (_finishedWork !== null) {\n // We've completed the root. Check the deadline one more time\n // before committing.\n if (!shouldYield()) {\n // Still time left. Commit the root.\n root.remainingExpirationTime = commitRoot(_finishedWork);\n } else {\n // There's no time left. Mark this root as complete. We'll come\n // back and commit it later.\n root.finishedWork = _finishedWork;\n }\n }\n }\n }\n\n isRendering = false;\n }\n\n // When working on async work, the reconciler asks the renderer if it should\n // yield execution. For DOM, we implement this with requestIdleCallback.\n function shouldYield() {\n if (deadline === null) {\n return false;\n }\n if (deadline.timeRemaining() > timeHeuristicForUnitOfWork) {\n // Disregard deadline.didTimeout. Only expired work should be flushed\n // during a timeout. This path is only hit for non-expired work.\n return false;\n }\n deadlineDidExpire = true;\n return true;\n }\n\n // TODO: Not happy about this hook. Conceptually, renderRoot should return a\n // tuple of (isReadyForCommit, didError, error)\n function onUncaughtError(error) {\n !(nextFlushedRoot !== null) ? invariant(false, 'Should be working on a root. This error is likely caused by a bug in React. Please file an issue.') : void 0;\n // Unschedule this root so we don't work on it again until there's\n // another update.\n nextFlushedRoot.remainingExpirationTime = NoWork;\n if (!hasUnhandledError) {\n hasUnhandledError = true;\n unhandledError = error;\n }\n }\n\n // TODO: Batching should be implemented at the renderer level, not inside\n // the reconciler.\n function batchedUpdates(fn, a) {\n var previousIsBatchingUpdates = isBatchingUpdates;\n isBatchingUpdates = true;\n try {\n return fn(a);\n } finally {\n isBatchingUpdates = previousIsBatchingUpdates;\n if (!isBatchingUpdates && !isRendering) {\n performWork(Sync, null);\n }\n }\n }\n\n // TODO: Batching should be implemented at the renderer level, not inside\n // the reconciler.\n function unbatchedUpdates(fn) {\n if (isBatchingUpdates && !isUnbatchingUpdates) {\n isUnbatchingUpdates = true;\n try {\n return fn();\n } finally {\n isUnbatchingUpdates = false;\n }\n }\n return fn();\n }\n\n // TODO: Batching should be implemented at the renderer level, not within\n // the reconciler.\n function flushSync(fn) {\n var previousIsBatchingUpdates = isBatchingUpdates;\n isBatchingUpdates = true;\n try {\n return syncUpdates(fn);\n } finally {\n isBatchingUpdates = previousIsBatchingUpdates;\n !!isRendering ? invariant(false, 'flushSync was called from inside a lifecycle method. It cannot be called when React is already rendering.') : void 0;\n performWork(Sync, null);\n }\n }\n\n return {\n computeAsyncExpiration: computeAsyncExpiration,\n computeExpirationForFiber: computeExpirationForFiber,\n scheduleWork: scheduleWork,\n batchedUpdates: batchedUpdates,\n unbatchedUpdates: unbatchedUpdates,\n flushSync: flushSync,\n deferredUpdates: deferredUpdates\n };\n};\n\n{\n var didWarnAboutNestedUpdates = false;\n}\n\n// 0 is PROD, 1 is DEV.\n// Might add PROFILE later.\n\n\nfunction getContextForSubtree(parentComponent) {\n if (!parentComponent) {\n return emptyObject;\n }\n\n var fiber = get(parentComponent);\n var parentContext = findCurrentUnmaskedContext(fiber);\n return isContextProvider(fiber) ? processChildContext(fiber, parentContext) : parentContext;\n}\n\nvar ReactFiberReconciler$1 = function (config) {\n var getPublicInstance = config.getPublicInstance;\n\n var _ReactFiberScheduler = ReactFiberScheduler(config),\n computeAsyncExpiration = _ReactFiberScheduler.computeAsyncExpiration,\n computeExpirationForFiber = _ReactFiberScheduler.computeExpirationForFiber,\n scheduleWork = _ReactFiberScheduler.scheduleWork,\n batchedUpdates = _ReactFiberScheduler.batchedUpdates,\n unbatchedUpdates = _ReactFiberScheduler.unbatchedUpdates,\n flushSync = _ReactFiberScheduler.flushSync,\n deferredUpdates = _ReactFiberScheduler.deferredUpdates;\n\n function scheduleTopLevelUpdate(current, element, callback) {\n {\n if (ReactDebugCurrentFiber.phase === 'render' && ReactDebugCurrentFiber.current !== null && !didWarnAboutNestedUpdates) {\n didWarnAboutNestedUpdates = true;\n warning(false, '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(ReactDebugCurrentFiber.current) || 'Unknown');\n }\n }\n\n callback = callback === undefined ? null : callback;\n {\n warning(callback === null || typeof callback === 'function', 'render(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callback);\n }\n\n var expirationTime = void 0;\n // Check if the top-level element is an async wrapper component. If so,\n // treat updates to the root as async. This is a bit weird but lets us\n // avoid a separate `renderAsync` API.\n if (enableAsyncSubtreeAPI && element != null && element.type != null && element.type.prototype != null && element.type.prototype.unstable_isAsyncReactComponent === true) {\n expirationTime = computeAsyncExpiration();\n } else {\n expirationTime = computeExpirationForFiber(current);\n }\n\n var update = {\n expirationTime: expirationTime,\n partialState: { element: element },\n callback: callback,\n isReplace: false,\n isForced: false,\n nextCallback: null,\n next: null\n };\n insertUpdateIntoFiber(current, update);\n scheduleWork(current, expirationTime);\n }\n\n function findHostInstance(fiber) {\n var hostFiber = findCurrentHostFiber(fiber);\n if (hostFiber === null) {\n return null;\n }\n return hostFiber.stateNode;\n }\n\n return {\n createContainer: function (containerInfo, hydrate) {\n return createFiberRoot(containerInfo, hydrate);\n },\n updateContainer: function (element, container, parentComponent, callback) {\n // TODO: If this is a nested container, this won't be the root.\n var current = container.current;\n\n {\n if (ReactFiberInstrumentation_1.debugTool) {\n if (current.alternate === null) {\n ReactFiberInstrumentation_1.debugTool.onMountContainer(container);\n } else if (element === null) {\n ReactFiberInstrumentation_1.debugTool.onUnmountContainer(container);\n } else {\n ReactFiberInstrumentation_1.debugTool.onUpdateContainer(container);\n }\n }\n }\n\n var context = getContextForSubtree(parentComponent);\n if (container.context === null) {\n container.context = context;\n } else {\n container.pendingContext = context;\n }\n\n scheduleTopLevelUpdate(current, element, callback);\n },\n\n\n batchedUpdates: batchedUpdates,\n\n unbatchedUpdates: unbatchedUpdates,\n\n deferredUpdates: deferredUpdates,\n\n flushSync: flushSync,\n\n getPublicRootInstance: function (container) {\n var containerFiber = container.current;\n if (!containerFiber.child) {\n return null;\n }\n switch (containerFiber.child.tag) {\n case HostComponent:\n return getPublicInstance(containerFiber.child.stateNode);\n default:\n return containerFiber.child.stateNode;\n }\n },\n\n\n findHostInstance: findHostInstance,\n\n findHostInstanceWithNoPortals: function (fiber) {\n var hostFiber = findCurrentHostFiberWithNoPortals(fiber);\n if (hostFiber === null) {\n return null;\n }\n return hostFiber.stateNode;\n },\n injectIntoDevTools: function (devToolsConfig) {\n var findFiberByHostInstance = devToolsConfig.findFiberByHostInstance;\n\n return injectInternals(_assign({}, devToolsConfig, {\n findHostInstanceByFiber: function (fiber) {\n return findHostInstance(fiber);\n },\n findFiberByHostInstance: function (instance) {\n if (!findFiberByHostInstance) {\n // Might not be implemented by the renderer.\n return null;\n }\n return findFiberByHostInstance(instance);\n }\n }));\n }\n };\n};\n\nvar ReactFiberReconciler$2 = Object.freeze({\n\tdefault: ReactFiberReconciler$1\n});\n\nvar ReactFiberReconciler$3 = ( ReactFiberReconciler$2 && ReactFiberReconciler$1 ) || ReactFiberReconciler$2;\n\n// TODO: bundle Flow types with the package.\n\n\n\n// TODO: decide on the top-level export form.\n// This is hacky but makes it work with both Rollup and Jest.\nvar reactReconciler = ReactFiberReconciler$3['default'] ? ReactFiberReconciler$3['default'] : ReactFiberReconciler$3;\n\nfunction createPortal$1(children, containerInfo,\n// TODO: figure out the API for cross-renderer implementation.\nimplementation) {\n var key = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n return {\n // This tag allow us to uniquely identify this as a React Portal\n $$typeof: REACT_PORTAL_TYPE,\n key: key == null ? null : '' + key,\n children: children,\n containerInfo: containerInfo,\n implementation: implementation\n };\n}\n\n// TODO: this is special because it gets imported during build.\n\nvar ReactVersion = '16.2.0';\n\n// a requestAnimationFrame, storing the time for the start of the frame, then\n// scheduling a postMessage which gets scheduled after paint. Within the\n// postMessage handler do as much work as possible until time + frame rate.\n// By separating the idle call into a separate event tick we ensure that\n// layout, paint and other browser work is counted against the available time.\n// The frame rate is dynamically adjusted.\n\n{\n if (ExecutionEnvironment.canUseDOM && typeof requestAnimationFrame !== 'function') {\n warning(false, 'React depends on requestAnimationFrame. Make sure that you load a ' + 'polyfill in older browsers. http://fb.me/react-polyfills');\n }\n}\n\nvar hasNativePerformanceNow = typeof performance === 'object' && typeof performance.now === 'function';\n\nvar now = void 0;\nif (hasNativePerformanceNow) {\n now = function () {\n return performance.now();\n };\n} else {\n now = function () {\n return Date.now();\n };\n}\n\n// TODO: There's no way to cancel, because Fiber doesn't atm.\nvar rIC = void 0;\nvar cIC = void 0;\n\nif (!ExecutionEnvironment.canUseDOM) {\n rIC = function (frameCallback) {\n return setTimeout(function () {\n frameCallback({\n timeRemaining: function () {\n return Infinity;\n }\n });\n });\n };\n cIC = function (timeoutID) {\n clearTimeout(timeoutID);\n };\n} else if (typeof requestIdleCallback !== 'function' || typeof cancelIdleCallback !== 'function') {\n // Polyfill requestIdleCallback and cancelIdleCallback\n\n var scheduledRICCallback = null;\n var isIdleScheduled = false;\n var timeoutTime = -1;\n\n var isAnimationFrameScheduled = false;\n\n var frameDeadline = 0;\n // We start out assuming that we run at 30fps but then the heuristic tracking\n // will adjust this value to a faster fps if we get more frequent animation\n // frames.\n var previousFrameTime = 33;\n var activeFrameTime = 33;\n\n var frameDeadlineObject;\n if (hasNativePerformanceNow) {\n frameDeadlineObject = {\n didTimeout: false,\n timeRemaining: function () {\n // We assume that if we have a performance timer that the rAF callback\n // gets a performance timer value. Not sure if this is always true.\n var remaining = frameDeadline - performance.now();\n return remaining > 0 ? remaining : 0;\n }\n };\n } else {\n frameDeadlineObject = {\n didTimeout: false,\n timeRemaining: function () {\n // Fallback to Date.now()\n var remaining = frameDeadline - Date.now();\n return remaining > 0 ? remaining : 0;\n }\n };\n }\n\n // We use the postMessage trick to defer idle work until after the repaint.\n var messageKey = '__reactIdleCallback$' + Math.random().toString(36).slice(2);\n var idleTick = function (event) {\n if (event.source !== window || event.data !== messageKey) {\n return;\n }\n\n isIdleScheduled = false;\n\n var currentTime = now();\n if (frameDeadline - currentTime <= 0) {\n // There's no time left in this idle period. Check if the callback has\n // a timeout and whether it's been exceeded.\n if (timeoutTime !== -1 && timeoutTime <= currentTime) {\n // Exceeded the timeout. Invoke the callback even though there's no\n // time left.\n frameDeadlineObject.didTimeout = true;\n } else {\n // No timeout.\n if (!isAnimationFrameScheduled) {\n // Schedule another animation callback so we retry later.\n isAnimationFrameScheduled = true;\n requestAnimationFrame(animationTick);\n }\n // Exit without invoking the callback.\n return;\n }\n } else {\n // There's still time left in this idle period.\n frameDeadlineObject.didTimeout = false;\n }\n\n timeoutTime = -1;\n var callback = scheduledRICCallback;\n scheduledRICCallback = null;\n if (callback !== null) {\n callback(frameDeadlineObject);\n }\n };\n // Assumes that we have addEventListener in this environment. Might need\n // something better for old IE.\n window.addEventListener('message', idleTick, false);\n\n var animationTick = function (rafTime) {\n isAnimationFrameScheduled = false;\n var nextFrameTime = rafTime - frameDeadline + activeFrameTime;\n if (nextFrameTime < activeFrameTime && previousFrameTime < activeFrameTime) {\n if (nextFrameTime < 8) {\n // Defensive coding. We don't support higher frame rates than 120hz.\n // If we get lower than that, it is probably a bug.\n nextFrameTime = 8;\n }\n // If one frame goes long, then the next one can be short to catch up.\n // If two frames are short in a row, then that's an indication that we\n // actually have a higher frame rate than what we're currently optimizing.\n // We adjust our heuristic dynamically accordingly. For example, if we're\n // running on 120hz display or 90hz VR display.\n // Take the max of the two in case one of them was an anomaly due to\n // missed frame deadlines.\n activeFrameTime = nextFrameTime < previousFrameTime ? previousFrameTime : nextFrameTime;\n } else {\n previousFrameTime = nextFrameTime;\n }\n frameDeadline = rafTime + activeFrameTime;\n if (!isIdleScheduled) {\n isIdleScheduled = true;\n window.postMessage(messageKey, '*');\n }\n };\n\n rIC = function (callback, options) {\n // This assumes that we only schedule one callback at a time because that's\n // how Fiber uses it.\n scheduledRICCallback = callback;\n if (options != null && typeof options.timeout === 'number') {\n timeoutTime = now() + options.timeout;\n }\n if (!isAnimationFrameScheduled) {\n // If rAF didn't already schedule one, we need to schedule a frame.\n // TODO: If this rAF doesn't materialize because the browser throttles, we\n // might want to still have setTimeout trigger rIC as a backup to ensure\n // that we keep performing work.\n isAnimationFrameScheduled = true;\n requestAnimationFrame(animationTick);\n }\n return 0;\n };\n\n cIC = function () {\n scheduledRICCallback = null;\n isIdleScheduled = false;\n timeoutTime = -1;\n };\n} else {\n rIC = window.requestIdleCallback;\n cIC = window.cancelIdleCallback;\n}\n\n/**\n * Forked from fbjs/warning:\n * https://github.com/facebook/fbjs/blob/e66ba20ad5be433eb54423f2b097d829324d9de6/packages/fbjs/src/__forks__/warning.js\n *\n * Only change is we use console.warn instead of console.error,\n * and do nothing when 'console' is not supported.\n * This really simplifies the code.\n * ---\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar lowPriorityWarning = function () {};\n\n{\n var printWarning = function (format) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.warn(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n\n lowPriorityWarning = function (condition, format) {\n if (format === undefined) {\n throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n }\n if (!condition) {\n for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n args[_key2 - 2] = arguments[_key2];\n }\n\n printWarning.apply(undefined, [format].concat(args));\n }\n };\n}\n\nvar lowPriorityWarning$1 = lowPriorityWarning;\n\n// isAttributeNameSafe() is currently duplicated in DOMMarkupOperations.\n// TODO: Find a better place for this.\nvar VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + ATTRIBUTE_NAME_START_CHAR + '][' + ATTRIBUTE_NAME_CHAR + ']*$');\nvar illegalAttributeNameCache = {};\nvar validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n if (validatedAttributeNameCache.hasOwnProperty(attributeName)) {\n return true;\n }\n if (illegalAttributeNameCache.hasOwnProperty(attributeName)) {\n return false;\n }\n if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {\n validatedAttributeNameCache[attributeName] = true;\n return true;\n }\n illegalAttributeNameCache[attributeName] = true;\n {\n warning(false, 'Invalid attribute name: `%s`', attributeName);\n }\n return false;\n}\n\n// shouldIgnoreValue() is currently duplicated in DOMMarkupOperations.\n// TODO: Find a better place for this.\nfunction shouldIgnoreValue(propertyInfo, value) {\n return value == null || propertyInfo.hasBooleanValue && !value || propertyInfo.hasNumericValue && isNaN(value) || propertyInfo.hasPositiveNumericValue && value < 1 || propertyInfo.hasOverloadedBooleanValue && value === false;\n}\n\n/**\n * Operations for dealing with DOM properties.\n */\n\n\n\n\n\n/**\n * Get the value for a property on a node. Only used in DEV for SSR validation.\n * The \"expected\" argument is used as a hint of what the expected value is.\n * Some properties have multiple equivalent values.\n */\nfunction getValueForProperty(node, name, expected) {\n {\n var propertyInfo = getPropertyInfo(name);\n if (propertyInfo) {\n var mutationMethod = propertyInfo.mutationMethod;\n if (mutationMethod || propertyInfo.mustUseProperty) {\n return node[propertyInfo.propertyName];\n } else {\n var attributeName = propertyInfo.attributeName;\n\n var stringValue = null;\n\n if (propertyInfo.hasOverloadedBooleanValue) {\n if (node.hasAttribute(attributeName)) {\n var value = node.getAttribute(attributeName);\n if (value === '') {\n return true;\n }\n if (shouldIgnoreValue(propertyInfo, expected)) {\n return value;\n }\n if (value === '' + expected) {\n return expected;\n }\n return value;\n }\n } else if (node.hasAttribute(attributeName)) {\n if (shouldIgnoreValue(propertyInfo, expected)) {\n // We had an attribute but shouldn't have had one, so read it\n // for the error message.\n return node.getAttribute(attributeName);\n }\n if (propertyInfo.hasBooleanValue) {\n // If this was a boolean, it doesn't matter what the value is\n // the fact that we have it is the same as the expected.\n return expected;\n }\n // Even if this property uses a namespace we use getAttribute\n // because we assume its namespaced name is the same as our config.\n // To use getAttributeNS we need the local name which we don't have\n // in our config atm.\n stringValue = node.getAttribute(attributeName);\n }\n\n if (shouldIgnoreValue(propertyInfo, expected)) {\n return stringValue === null ? expected : stringValue;\n } else if (stringValue === '' + expected) {\n return expected;\n } else {\n return stringValue;\n }\n }\n }\n }\n}\n\n/**\n * Get the value for a attribute on a node. Only used in DEV for SSR validation.\n * The third argument is used as a hint of what the expected value is. Some\n * attributes have multiple equivalent values.\n */\nfunction getValueForAttribute(node, name, expected) {\n {\n if (!isAttributeNameSafe(name)) {\n return;\n }\n if (!node.hasAttribute(name)) {\n return expected === undefined ? undefined : null;\n }\n var value = node.getAttribute(name);\n if (value === '' + expected) {\n return expected;\n }\n return value;\n }\n}\n\n/**\n * Sets the value for a property on a node.\n *\n * @param {DOMElement} node\n * @param {string} name\n * @param {*} value\n */\nfunction setValueForProperty(node, name, value) {\n var propertyInfo = getPropertyInfo(name);\n\n if (propertyInfo && shouldSetAttribute(name, value)) {\n var mutationMethod = propertyInfo.mutationMethod;\n if (mutationMethod) {\n mutationMethod(node, value);\n } else if (shouldIgnoreValue(propertyInfo, value)) {\n deleteValueForProperty(node, name);\n return;\n } else if (propertyInfo.mustUseProperty) {\n // Contrary to `setAttribute`, object properties are properly\n // `toString`ed by IE8/9.\n node[propertyInfo.propertyName] = value;\n } else {\n var attributeName = propertyInfo.attributeName;\n var namespace = propertyInfo.attributeNamespace;\n // `setAttribute` with objects becomes only `[object]` in IE8/9,\n // ('' + value) makes it output the correct toString()-value.\n if (namespace) {\n node.setAttributeNS(namespace, attributeName, '' + value);\n } else if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {\n node.setAttribute(attributeName, '');\n } else {\n node.setAttribute(attributeName, '' + value);\n }\n }\n } else {\n setValueForAttribute(node, name, shouldSetAttribute(name, value) ? value : null);\n return;\n }\n\n {\n \n }\n}\n\nfunction setValueForAttribute(node, name, value) {\n if (!isAttributeNameSafe(name)) {\n return;\n }\n if (value == null) {\n node.removeAttribute(name);\n } else {\n node.setAttribute(name, '' + value);\n }\n\n {\n \n }\n}\n\n/**\n * Deletes an attributes from a node.\n *\n * @param {DOMElement} node\n * @param {string} name\n */\nfunction deleteValueForAttribute(node, name) {\n node.removeAttribute(name);\n}\n\n/**\n * Deletes the value for a property on a node.\n *\n * @param {DOMElement} node\n * @param {string} name\n */\nfunction deleteValueForProperty(node, name) {\n var propertyInfo = getPropertyInfo(name);\n if (propertyInfo) {\n var mutationMethod = propertyInfo.mutationMethod;\n if (mutationMethod) {\n mutationMethod(node, undefined);\n } else if (propertyInfo.mustUseProperty) {\n var propName = propertyInfo.propertyName;\n if (propertyInfo.hasBooleanValue) {\n node[propName] = false;\n } else {\n node[propName] = '';\n }\n } else {\n node.removeAttribute(propertyInfo.attributeName);\n }\n } else {\n node.removeAttribute(name);\n }\n}\n\nvar ReactControlledValuePropTypes = {\n checkPropTypes: null\n};\n\n{\n var hasReadOnlyValue = {\n button: true,\n checkbox: true,\n image: true,\n hidden: true,\n radio: true,\n reset: true,\n submit: true\n };\n\n var propTypes = {\n value: function (props, propName, componentName) {\n if (!props[propName] || hasReadOnlyValue[props.type] || props.onChange || props.readOnly || props.disabled) {\n return null;\n }\n return new 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`.');\n },\n checked: function (props, propName, componentName) {\n if (!props[propName] || props.onChange || props.readOnly || props.disabled) {\n return null;\n }\n return new Error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n }\n };\n\n /**\n * Provide a linked `value` attribute for controlled forms. You should not use\n * this outside of the ReactDOM controlled form components.\n */\n ReactControlledValuePropTypes.checkPropTypes = function (tagName, props, getStack) {\n checkPropTypes(propTypes, props, 'prop', tagName, getStack);\n };\n}\n\n// TODO: direct imports like some-package/src/* are bad. Fix me.\nvar getCurrentFiberOwnerName$2 = ReactDebugCurrentFiber.getCurrentFiberOwnerName;\nvar getCurrentFiberStackAddendum$3 = ReactDebugCurrentFiber.getCurrentFiberStackAddendum;\n\nvar didWarnValueDefaultValue = false;\nvar didWarnCheckedDefaultChecked = false;\nvar didWarnControlledToUncontrolled = false;\nvar didWarnUncontrolledToControlled = false;\n\nfunction isControlled(props) {\n var usesChecked = props.type === 'checkbox' || props.type === 'radio';\n return usesChecked ? props.checked != null : props.value != null;\n}\n\n/**\n * Implements an host component that allows setting these optional\n * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.\n *\n * If `checked` or `value` are not supplied (or null/undefined), user actions\n * that affect the checked state or value will trigger updates to the element.\n *\n * If they are supplied (and not null/undefined), the rendered element will not\n * trigger updates to the element. Instead, the props must change in order for\n * the rendered element to be updated.\n *\n * The rendered element will be initialized as unchecked (or `defaultChecked`)\n * with an empty value (or `defaultValue`).\n *\n * See http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html\n */\n\nfunction getHostProps(element, props) {\n var node = element;\n var value = props.value;\n var checked = props.checked;\n\n var hostProps = _assign({\n // Make sure we set .type before any other properties (setting .value\n // before .type means .value is lost in IE11 and below)\n type: undefined,\n // Make sure we set .step before .value (setting .value before .step\n // means .value is rounded on mount, based upon step precision)\n step: undefined,\n // Make sure we set .min & .max before .value (to ensure proper order\n // in corner cases such as min or max deriving from value, e.g. Issue #7170)\n min: undefined,\n max: undefined\n }, props, {\n defaultChecked: undefined,\n defaultValue: undefined,\n value: value != null ? value : node._wrapperState.initialValue,\n checked: checked != null ? checked : node._wrapperState.initialChecked\n });\n\n return hostProps;\n}\n\nfunction initWrapperState(element, props) {\n {\n ReactControlledValuePropTypes.checkPropTypes('input', props, getCurrentFiberStackAddendum$3);\n\n if (props.checked !== undefined && props.defaultChecked !== undefined && !didWarnCheckedDefaultChecked) {\n warning(false, '%s contains an input of type %s with both checked and defaultChecked props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the checked prop, or the defaultChecked prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', getCurrentFiberOwnerName$2() || 'A component', props.type);\n didWarnCheckedDefaultChecked = true;\n }\n if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {\n warning(false, '%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://fb.me/react-controlled-components', getCurrentFiberOwnerName$2() || 'A component', props.type);\n didWarnValueDefaultValue = true;\n }\n }\n\n var defaultValue = props.defaultValue;\n var node = element;\n node._wrapperState = {\n initialChecked: props.checked != null ? props.checked : props.defaultChecked,\n initialValue: props.value != null ? props.value : defaultValue,\n controlled: isControlled(props)\n };\n}\n\nfunction updateChecked(element, props) {\n var node = element;\n var checked = props.checked;\n if (checked != null) {\n setValueForProperty(node, 'checked', checked);\n }\n}\n\nfunction updateWrapper(element, props) {\n var node = element;\n {\n var controlled = isControlled(props);\n\n if (!node._wrapperState.controlled && controlled && !didWarnUncontrolledToControlled) {\n warning(false, 'A component is changing an uncontrolled input of type %s to be controlled. ' + 'Input elements should not switch from uncontrolled to controlled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components%s', props.type, getCurrentFiberStackAddendum$3());\n didWarnUncontrolledToControlled = true;\n }\n if (node._wrapperState.controlled && !controlled && !didWarnControlledToUncontrolled) {\n warning(false, 'A component is changing a controlled input of type %s to be uncontrolled. ' + 'Input elements should not switch from controlled to uncontrolled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components%s', props.type, getCurrentFiberStackAddendum$3());\n didWarnControlledToUncontrolled = true;\n }\n }\n\n updateChecked(element, props);\n\n var value = props.value;\n if (value != null) {\n if (value === 0 && node.value === '') {\n node.value = '0';\n // Note: IE9 reports a number inputs as 'text', so check props instead.\n } else if (props.type === 'number') {\n // Simulate `input.valueAsNumber`. IE9 does not support it\n var valueAsNumber = parseFloat(node.value) || 0;\n\n if (\n // eslint-disable-next-line\n value != valueAsNumber ||\n // eslint-disable-next-line\n value == valueAsNumber && node.value != value) {\n // Cast `value` to a string to ensure the value is set correctly. While\n // browsers typically do this as necessary, jsdom doesn't.\n node.value = '' + value;\n }\n } else if (node.value !== '' + value) {\n // Cast `value` to a string to ensure the value is set correctly. While\n // browsers typically do this as necessary, jsdom doesn't.\n node.value = '' + value;\n }\n } else {\n if (props.value == null && props.defaultValue != null) {\n // In Chrome, assigning defaultValue to certain input types triggers input validation.\n // For number inputs, the display value loses trailing decimal points. For email inputs,\n // Chrome raises \"The specified value is not a valid email address\".\n //\n // Here we check to see if the defaultValue has actually changed, avoiding these problems\n // when the user is inputting text\n //\n // https://github.com/facebook/react/issues/7253\n if (node.defaultValue !== '' + props.defaultValue) {\n node.defaultValue = '' + props.defaultValue;\n }\n }\n if (props.checked == null && props.defaultChecked != null) {\n node.defaultChecked = !!props.defaultChecked;\n }\n }\n}\n\nfunction postMountWrapper(element, props) {\n var node = element;\n\n // Detach value from defaultValue. We won't do anything if we're working on\n // submit or reset inputs as those values & defaultValues are linked. They\n // are not resetable nodes so this operation doesn't matter and actually\n // removes browser-default values (eg \"Submit Query\") when no value is\n // provided.\n\n switch (props.type) {\n case 'submit':\n case 'reset':\n break;\n case 'color':\n case 'date':\n case 'datetime':\n case 'datetime-local':\n case 'month':\n case 'time':\n case 'week':\n // This fixes the no-show issue on iOS Safari and Android Chrome:\n // https://github.com/facebook/react/issues/7233\n node.value = '';\n node.value = node.defaultValue;\n break;\n default:\n node.value = node.value;\n break;\n }\n\n // Normally, we'd just do `node.checked = node.checked` upon initial mount, less this bug\n // this is needed to work around a chrome bug where setting defaultChecked\n // will sometimes influence the value of checked (even after detachment).\n // Reference: https://bugs.chromium.org/p/chromium/issues/detail?id=608416\n // We need to temporarily unset name to avoid disrupting radio button groups.\n var name = node.name;\n if (name !== '') {\n node.name = '';\n }\n node.defaultChecked = !node.defaultChecked;\n node.defaultChecked = !node.defaultChecked;\n if (name !== '') {\n node.name = name;\n }\n}\n\nfunction restoreControlledState$1(element, props) {\n var node = element;\n updateWrapper(node, props);\n updateNamedCousins(node, props);\n}\n\nfunction updateNamedCousins(rootNode, props) {\n var name = props.name;\n if (props.type === 'radio' && name != null) {\n var queryRoot = rootNode;\n\n while (queryRoot.parentNode) {\n queryRoot = queryRoot.parentNode;\n }\n\n // If `rootNode.form` was non-null, then we could try `form.elements`,\n // but that sometimes behaves strangely in IE8. We could also try using\n // `form.getElementsByName`, but that will only return direct children\n // and won't include inputs that use the HTML5 `form=` attribute. Since\n // the input might not even be in a form. It might not even be in the\n // document. Let's just use the local `querySelectorAll` to ensure we don't\n // miss anything.\n var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type=\"radio\"]');\n\n for (var i = 0; i < group.length; i++) {\n var otherNode = group[i];\n if (otherNode === rootNode || otherNode.form !== rootNode.form) {\n continue;\n }\n // This will throw if radio buttons rendered by different copies of React\n // and the same name are rendered into the same form (same as #1939).\n // That's probably okay; we don't support it just as we don't support\n // mixing React radio buttons with non-React ones.\n var otherProps = getFiberCurrentPropsFromNode$1(otherNode);\n !otherProps ? invariant(false, 'ReactDOMInput: Mixing React and non-React radio inputs with the same `name` is not supported.') : void 0;\n\n // We need update the tracked value on the named cousin since the value\n // was changed but the input saw no event or value set\n updateValueIfChanged(otherNode);\n\n // If this is a controlled radio button group, forcing the input that\n // was previously checked to update will cause it to be come re-checked\n // as appropriate.\n updateWrapper(otherNode, otherProps);\n }\n }\n}\n\nfunction flattenChildren(children) {\n var content = '';\n\n // Flatten children and warn if they aren't strings or numbers;\n // invalid types are ignored.\n // We can silently skip them because invalid DOM nesting warning\n // catches these cases in Fiber.\n React.Children.forEach(children, function (child) {\n if (child == null) {\n return;\n }\n if (typeof child === 'string' || typeof child === 'number') {\n content += child;\n }\n });\n\n return content;\n}\n\n/**\n * Implements an