From c4c6a165d968fefbf8caa52b9c9763b58fc39803 Mon Sep 17 00:00:00 2001 From: Paweł Marks Date: Tue, 11 Feb 2020 14:16:11 +0100 Subject: Creates dokka base --- plugins/base/src/main/kotlin/DokkaBase.kt | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 plugins/base/src/main/kotlin/DokkaBase.kt (limited to 'plugins/base/src/main/kotlin/DokkaBase.kt') diff --git a/plugins/base/src/main/kotlin/DokkaBase.kt b/plugins/base/src/main/kotlin/DokkaBase.kt new file mode 100644 index 00000000..e82a59bf --- /dev/null +++ b/plugins/base/src/main/kotlin/DokkaBase.kt @@ -0,0 +1,4 @@ +import org.jetbrains.dokka.plugability.DokkaPlugin + +class DokkaBase: DokkaPlugin() { +} \ No newline at end of file -- cgit From 848f2e0656e80604cb54932db5b250303aaccca8 Mon Sep 17 00:00:00 2001 From: Paweł Marks Date: Wed, 12 Feb 2020 16:01:38 +0100 Subject: Moves DescriptorToDocumentableTransformer to base plugin --- core/src/main/kotlin/CoreExtensions.kt | 1 - core/src/main/kotlin/DokkaGenerator.kt | 2 +- core/src/main/kotlin/model/Documentable.kt | 12 - core/src/main/kotlin/model/classKinds.kt | 25 ++ core/src/main/kotlin/model/typeWrappers.kt | 97 ++++++ .../main/kotlin/plugability/DefaultExtensions.kt | 2 - .../DefaultDescriptorToDocumentationTranslator.kt | 362 --------------------- .../DescriptorToDocumentationTranslator.kt | 3 +- .../psi/DefaultPsiToDocumentationTranslator.kt | 72 ---- plugins/base/build.gradle.kts | 3 +- plugins/base/src/main/kotlin/DokkaBase.kt | 7 + .../DefaultDescriptorToDocumentationTranslator.kt | 338 +++++++++++++++++++ plugins/kotlin-as-java/build.gradle.kts | 4 + ...linAsJavaDescriptorToDocumentationTranslator.kt | 13 +- .../src/main/kotlin/KotlinAsJavaPageBuilder.kt | 1 - .../main/kotlin/KotlinAsJavaPageContentBuilder.kt | 2 +- .../src/main/kotlin/KotlinAsJavaPlugin.kt | 8 +- .../src/main/kotlin/KotlinToJVMResolver.kt | 1 - 18 files changed, 489 insertions(+), 464 deletions(-) create mode 100644 core/src/main/kotlin/model/classKinds.kt create mode 100644 core/src/main/kotlin/model/typeWrappers.kt delete mode 100644 core/src/main/kotlin/transformers/descriptors/DefaultDescriptorToDocumentationTranslator.kt create mode 100644 plugins/base/src/main/kotlin/transformers/descriptors/DefaultDescriptorToDocumentationTranslator.kt (limited to 'plugins/base/src/main/kotlin/DokkaBase.kt') diff --git a/core/src/main/kotlin/CoreExtensions.kt b/core/src/main/kotlin/CoreExtensions.kt index 18cde210..1364f1c1 100644 --- a/core/src/main/kotlin/CoreExtensions.kt +++ b/core/src/main/kotlin/CoreExtensions.kt @@ -30,7 +30,6 @@ object CoreExtensions { val locationProviderFactory by coreExtension() val outputWriter by coreExtension() val renderer by coreExtension() - val fileExtension by coreExtension() val pageMergerStrategy by coreExtension() private fun coreExtension() = object { diff --git a/core/src/main/kotlin/DokkaGenerator.kt b/core/src/main/kotlin/DokkaGenerator.kt index a31c04a6..6a21e031 100644 --- a/core/src/main/kotlin/DokkaGenerator.kt +++ b/core/src/main/kotlin/DokkaGenerator.kt @@ -130,7 +130,7 @@ class DokkaGenerator( .toList() return context.single(CoreExtensions.descriptorToDocumentationTranslator) - .invoke(platformData.name, packageFragments, platformData, context) + .invoke(platformData.name, packageFragments, platformData) } private fun translatePsi(platformData: PlatformData, context: DokkaContext): Module { diff --git a/core/src/main/kotlin/model/Documentable.kt b/core/src/main/kotlin/model/Documentable.kt index e64f82ac..f0820256 100644 --- a/core/src/main/kotlin/model/Documentable.kt +++ b/core/src/main/kotlin/model/Documentable.kt @@ -3,9 +3,6 @@ package org.jetbrains.dokka.model import org.jetbrains.dokka.links.DRI import org.jetbrains.dokka.model.doc.DocumentationNode import org.jetbrains.dokka.pages.PlatformData -import org.jetbrains.dokka.transformers.descriptors.KotlinClassKindTypes -import org.jetbrains.kotlin.descriptors.DeclarationDescriptor -import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibility class Module(override val name: String, val packages: List) : Documentable() { @@ -239,15 +236,6 @@ private fun String.shorten(maxLength: Int) = lineSequence().first().let { if (it.length != length || it.length > maxLength) it.take(maxLength - 3) + "..." else it } -interface TypeWrapper { - val constructorFqName: String? - val constructorNamePathSegments: List - val arguments: List - val dri: DRI? -} - -interface ClassKind - fun Documentable.dfs(predicate: (Documentable) -> Boolean): Documentable? = if (predicate(this)) { this diff --git a/core/src/main/kotlin/model/classKinds.kt b/core/src/main/kotlin/model/classKinds.kt new file mode 100644 index 00000000..2548f68d --- /dev/null +++ b/core/src/main/kotlin/model/classKinds.kt @@ -0,0 +1,25 @@ +package org.jetbrains.dokka.model + +import org.jetbrains.dokka.links.DRI +import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe +import org.jetbrains.kotlin.types.KotlinType + + +interface ClassKind + +enum class KotlinClassKindTypes : ClassKind { + CLASS, + INTERFACE, + ENUM_CLASS, + ENUM_ENTRY, + ANNOTATION_CLASS, + OBJECT; +} + +enum class JavaClassKindTypes : ClassKind { + CLASS, + INTERFACE, + ENUM_CLASS, + ENUM_ENTRY, + ANNOTATION_CLASS; +} diff --git a/core/src/main/kotlin/model/typeWrappers.kt b/core/src/main/kotlin/model/typeWrappers.kt new file mode 100644 index 00000000..5719c6d3 --- /dev/null +++ b/core/src/main/kotlin/model/typeWrappers.kt @@ -0,0 +1,97 @@ +package org.jetbrains.dokka.model + +import com.intellij.psi.PsiArrayType +import com.intellij.psi.PsiEllipsisType +import com.intellij.psi.PsiPrimitiveType +import com.intellij.psi.PsiType +import com.intellij.psi.impl.source.PsiClassReferenceType +import org.jetbrains.dokka.links.DRI +import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe +import org.jetbrains.kotlin.types.KotlinType + +interface TypeWrapper { + val constructorFqName: String? + val constructorNamePathSegments: List + val arguments: List + val dri: DRI? +} + +class KotlinTypeWrapper(private val kotlinType: KotlinType) : TypeWrapper { + private val declarationDescriptor = kotlinType.constructor.declarationDescriptor + private val fqNameSafe = declarationDescriptor?.fqNameSafe + override val constructorFqName = fqNameSafe?.asString() + override val constructorNamePathSegments: List = + fqNameSafe?.pathSegments()?.map { it.asString() } ?: emptyList() + override val arguments: List by lazy { + kotlinType.arguments.map { + KotlinTypeWrapper( + it.type + ) + } + } + override val dri: DRI? by lazy { declarationDescriptor?.let { DRI.from(it) } } +} + +class JavaTypeWrapper : TypeWrapper { + + override val constructorFqName: String? + override val constructorNamePathSegments: List + override val arguments: List + override val dri: DRI? + val isPrimitive: Boolean + + constructor( + constructorNamePathSegments: List, + arguments: List, + dri: DRI?, + isPrimitiveType: Boolean + ) { + this.constructorFqName = constructorNamePathSegments.joinToString(".") + this.constructorNamePathSegments = constructorNamePathSegments + this.arguments = arguments + this.dri = dri + this.isPrimitive = isPrimitiveType + } + + constructor(type: PsiType) { + if (type is PsiClassReferenceType) { + val resolved = type.resolve() + constructorFqName = resolved?.qualifiedName + constructorNamePathSegments = resolved?.qualifiedName?.split('.') ?: emptyList() + arguments = type.parameters.mapNotNull { + if (it is PsiClassReferenceType) JavaTypeWrapper(it) else null + } + dri = fromPsi(type) + this.isPrimitive = false + } else if (type is PsiEllipsisType) { + constructorFqName = type.canonicalText + constructorNamePathSegments = listOf(type.canonicalText) // TODO + arguments = emptyList() + dri = DRI("java.lang", "Object") // TODO + this.isPrimitive = false + } else if (type is PsiArrayType) { + constructorFqName = type.canonicalText + constructorNamePathSegments = listOf(type.canonicalText) + arguments = emptyList() + dri = (type as? PsiClassReferenceType)?.let { fromPsi(it) } // TODO + this.isPrimitive = false + } else { + type as PsiPrimitiveType + constructorFqName = type.name + constructorNamePathSegments = type.name.split('.') + arguments = emptyList() + dri = null + this.isPrimitive = true + } + } + + private fun fromPsi(type: PsiClassReferenceType): DRI { + val className = type.className + val pkg = type.canonicalText.removeSuffix(className).removeSuffix(".") + return DRI(packageName = pkg, classNames = className) + } + + override fun toString(): String { + return constructorFqName.orEmpty() + } +} diff --git a/core/src/main/kotlin/plugability/DefaultExtensions.kt b/core/src/main/kotlin/plugability/DefaultExtensions.kt index 1320c282..70a7e4db 100644 --- a/core/src/main/kotlin/plugability/DefaultExtensions.kt +++ b/core/src/main/kotlin/plugability/DefaultExtensions.kt @@ -6,7 +6,6 @@ import org.jetbrains.dokka.renderers.FileWriter import org.jetbrains.dokka.renderers.OutputWriter import org.jetbrains.dokka.renderers.html.HtmlRenderer import org.jetbrains.dokka.resolvers.DefaultLocationProviderFactory -import org.jetbrains.dokka.transformers.descriptors.DefaultDescriptorToDocumentationTranslator import org.jetbrains.dokka.transformers.documentation.DefaultDocumentationNodeMerger import org.jetbrains.dokka.transformers.documentation.DefaultDocumentationToPageTranslator import org.jetbrains.dokka.transformers.pages.DefaultPageMergerStrategy @@ -28,7 +27,6 @@ internal object DefaultExtensions { @Suppress("IMPLICIT_CAST_TO_ANY", "UNCHECKED_CAST") internal fun > get(point: E, fullContext: DokkaContext): List = when (point) { - CoreExtensions.descriptorToDocumentationTranslator -> DefaultDescriptorToDocumentationTranslator CoreExtensions.psiToDocumentationTranslator -> DefaultPsiToDocumentationTranslator CoreExtensions.documentationMerger -> DefaultDocumentationNodeMerger CoreExtensions.commentsToContentConverter -> converter.get(fullContext) diff --git a/core/src/main/kotlin/transformers/descriptors/DefaultDescriptorToDocumentationTranslator.kt b/core/src/main/kotlin/transformers/descriptors/DefaultDescriptorToDocumentationTranslator.kt deleted file mode 100644 index 173e13ac..00000000 --- a/core/src/main/kotlin/transformers/descriptors/DefaultDescriptorToDocumentationTranslator.kt +++ /dev/null @@ -1,362 +0,0 @@ -package org.jetbrains.dokka.transformers.descriptors - -import org.jetbrains.dokka.analysis.DokkaResolutionFacade -import org.jetbrains.dokka.links.Callable -import org.jetbrains.dokka.links.DRI -import org.jetbrains.dokka.links.withClass -import org.jetbrains.dokka.model.* -import org.jetbrains.dokka.model.ClassKind -import org.jetbrains.dokka.model.Enum -import org.jetbrains.dokka.model.Function -import org.jetbrains.dokka.model.Property -import org.jetbrains.dokka.model.doc.* -import org.jetbrains.dokka.pages.PlatformData -import org.jetbrains.dokka.parsers.MarkdownParser -import org.jetbrains.dokka.plugability.DokkaContext -import org.jetbrains.kotlin.descriptors.* -import org.jetbrains.kotlin.descriptors.impl.DeclarationDescriptorVisitorEmptyBodies -import org.jetbrains.kotlin.idea.kdoc.findKDoc -import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe -import org.jetbrains.kotlin.resolve.descriptorUtil.getAllSuperclassesWithoutAny -import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperInterfaces -import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter -import org.jetbrains.kotlin.resolve.scopes.MemberScope -import org.jetbrains.kotlin.types.KotlinType -import kotlin.reflect.KClass - -object DefaultDescriptorToDocumentationTranslator : DescriptorToDocumentationTranslator { - override fun invoke( - moduleName: String, - packageFragments: Iterable, - platformData: PlatformData, - context: DokkaContext - ) = DokkaDescriptorVisitor(platformData, context.platforms[platformData]?.facade!!).run { - packageFragments.map { - visitPackageFragmentDescriptor( - it, - DRIWithPlatformInfo(DRI.topLevel, null, emptyList()) - ) - } - }.let { Module(moduleName, it) } - -} - - -data class DRIWithPlatformInfo( - val dri: DRI, - val expected: PlatformInfo?, - val actual: List -) - -fun DRI.withEmptyInfo() = DRIWithPlatformInfo(this, null, emptyList()) - -open class DokkaDescriptorVisitor( - private val platformData: PlatformData, - private val resolutionFacade: DokkaResolutionFacade -) : DeclarationDescriptorVisitorEmptyBodies() { - override fun visitDeclarationDescriptor(descriptor: DeclarationDescriptor, parent: DRIWithPlatformInfo): Nothing { - throw IllegalStateException("${javaClass.simpleName} should never enter ${descriptor.javaClass.simpleName}") - } - - override fun visitPackageFragmentDescriptor( - descriptor: PackageFragmentDescriptor, - parent: DRIWithPlatformInfo - ): Package { - val driWithPlatform = DRI(packageName = descriptor.fqName.asString()).withEmptyInfo() - val scope = descriptor.getMemberScope() - - return Package( - dri = driWithPlatform.dri, - functions = scope.functions(driWithPlatform), - properties = scope.properties(driWithPlatform), - classlikes = scope.classlikes(driWithPlatform) - ) - } - - override fun visitClassDescriptor(descriptor: ClassDescriptor, parent: DRIWithPlatformInfo): Classlike = - when (descriptor.kind) { - org.jetbrains.kotlin.descriptors.ClassKind.ENUM_CLASS -> enumDescriptor(descriptor, parent) - else -> classDescriptor(descriptor, parent) - } - - fun enumDescriptor(descriptor: ClassDescriptor, parent: DRIWithPlatformInfo): Enum { - val driWithPlatform = parent.dri.withClass(descriptor.name.asString()).withEmptyInfo() - val scope = descriptor.unsubstitutedMemberScope - val descriptorData = descriptor.takeUnless { it.isExpect }?.resolveClassDescriptionData() - - return Enum( - dri = driWithPlatform.dri, - name = descriptor.name.asString(), - entries = scope.classlikes(driWithPlatform).filter { it.kind == KotlinClassKindTypes.ENUM_ENTRY }.map { - EnumEntry( - it - ) - }, - constructors = descriptor.constructors.map { visitConstructorDescriptor(it, driWithPlatform) }, - functions = scope.functions(driWithPlatform), - properties = scope.properties(driWithPlatform), - classlikes = scope.classlikes(driWithPlatform), - expected = descriptor.takeIf { it.isExpect }?.resolveClassDescriptionData(), - actual = listOfNotNull(descriptorData), - extra = mutableSetOf(), // TODO Implement following method to return proper results getXMLDRIs(descriptor, descriptorData).toMutableSet() - visibility = mapOf(platformData to descriptor.visibility) - ) - } - - fun classDescriptor(descriptor: ClassDescriptor, parent: DRIWithPlatformInfo): Class { - val driWithPlatform = parent.dri.withClass(descriptor.name.asString()).withEmptyInfo() - val scope = descriptor.unsubstitutedMemberScope - val descriptorData = descriptor.takeUnless { it.isExpect }?.resolveClassDescriptionData() - val expected = descriptor.takeIf { it.isExpect }?.resolveClassDescriptionData() - val actual = listOfNotNull(descriptorData) - return Class( - dri = driWithPlatform.dri, - name = descriptor.name.asString(), - kind = KotlinClassKindTypes.valueOf(descriptor.kind.toString()), - constructors = descriptor.constructors.map { - visitConstructorDescriptor( - it, - if (it.isPrimary) - DRIWithPlatformInfo( - driWithPlatform.dri, - expected?.info.filterTagWrappers(listOf(Constructor::class)), - actual.filterTagWrappers(listOf(Constructor::class)) - ) - else - DRIWithPlatformInfo(driWithPlatform.dri, null, emptyList()) - ) - }, - functions = scope.functions(driWithPlatform), - properties = scope.properties(driWithPlatform), - classlikes = scope.classlikes(driWithPlatform), - expected = expected, - actual = actual, - extra = mutableSetOf(), // TODO Implement following method to return proper results getXMLDRIs(descriptor, descriptorData).toMutableSet() - visibility = mapOf(platformData to descriptor.visibility) - ) - } - - override fun visitPropertyDescriptor(descriptor: PropertyDescriptor, parent: DRIWithPlatformInfo): Property { - val expected = descriptor.takeIf { it.isExpect }?.resolveDescriptorData() - val actual = listOfNotNull(descriptor.takeUnless { it.isExpect }?.resolveDescriptorData()) - val dri = parent.dri.copy(callable = Callable.from(descriptor)) - - return Property( - dri = dri, - name = descriptor.name.asString(), - receiver = descriptor.extensionReceiverParameter?.let { - visitReceiverParameterDescriptor( - it, - DRIWithPlatformInfo( - dri, - expected?.filterTagWrappers(listOf(Receiver::class)), - actual.filterTagWrappers(listOf(Receiver::class)) - ) - ) - }, - expected = expected, - actual = actual, - accessors = descriptor.accessors.map { visitPropertyAccessorDescriptor(it, descriptor, dri) }, - visibility = mapOf(platformData to descriptor.visibility) - ) - } - - override fun visitFunctionDescriptor(descriptor: FunctionDescriptor, parent: DRIWithPlatformInfo): Function { - val expected = descriptor.takeIf { it.isExpect }?.resolveDescriptorData() - val actual = listOfNotNull(descriptor.takeUnless { it.isExpect }?.resolveDescriptorData()) - val dri = parent.dri.copy(callable = Callable.from(descriptor)) - - return Function( - dri = dri, - name = descriptor.name.asString(), - returnType = descriptor.returnType?.let { KotlinTypeWrapper(it) }, - isConstructor = false, - receiver = descriptor.extensionReceiverParameter?.let { - visitReceiverParameterDescriptor( - it, - DRIWithPlatformInfo( - dri, - expected?.filterTagWrappers(listOf(Receiver::class)), - actual.filterTagWrappers(listOf(Receiver::class)) - ) - ) - }, - parameters = descriptor.valueParameters.mapIndexed { index, desc -> - parameter( - index, desc, - DRIWithPlatformInfo( - dri, - expected.filterTagWrappers(listOf(Param::class), desc.name.asString()), - actual.filterTagWrappers(listOf(Param::class), desc.name.asString()) - ) - ) - }, - expected = expected, - actual = actual, - visibility = mapOf(platformData to descriptor.visibility) - ) - } - - override fun visitConstructorDescriptor(descriptor: ConstructorDescriptor, parent: DRIWithPlatformInfo): Function { - val dri = parent.dri.copy(callable = Callable.from(descriptor)) - return Function( - dri = dri, - name = "", - returnType = KotlinTypeWrapper(descriptor.returnType), - isConstructor = true, - receiver = null, - parameters = descriptor.valueParameters.mapIndexed { index, desc -> - parameter( - index, desc, - DRIWithPlatformInfo( - dri, - parent.expected.filterTagWrappers(listOf(Param::class)), - parent.actual.filterTagWrappers(listOf(Param::class)) - ) - ) - }, - expected = parent.expected ?: descriptor.takeIf { it.isExpect }?.resolveDescriptorData(), - actual = parent.actual, - visibility = mapOf(platformData to descriptor.visibility) - ) - } - - override fun visitReceiverParameterDescriptor( - descriptor: ReceiverParameterDescriptor, - parent: DRIWithPlatformInfo - ) = Parameter( - dri = parent.dri.copy(target = 0), - name = null, - type = KotlinTypeWrapper(descriptor.type), - expected = parent.expected, - actual = parent.actual - ) - - open fun visitPropertyAccessorDescriptor( - descriptor: PropertyAccessorDescriptor, - propertyDescriptor: PropertyDescriptor, - parent: DRI - ): Function { - val dri = parent.copy(callable = Callable.from(descriptor)) - val isGetter = descriptor is PropertyGetterDescriptor - - fun PropertyDescriptor.asParameter(parent: DRI) = - Parameter( - parent.copy(target = 1), - this.name.asString(), - KotlinTypeWrapper(this.type), - descriptor.takeIf { it.isExpect }?.resolveDescriptorData(), - listOfNotNull(descriptor.takeUnless { it.isExpect }?.resolveDescriptorData()) - ) - - val name = run { - val modifier = if (isGetter) "get" else "set" - val rawName = propertyDescriptor.name.asString() - "$modifier${rawName[0].toUpperCase()}${rawName.drop(1)}" - } - - descriptor.visibility - val parameters = - if (isGetter) { - emptyList() - } else { - listOf(propertyDescriptor.asParameter(dri)) - } - - return Function( - dri, - name, - descriptor.returnType?.let { KotlinTypeWrapper(it) }, - false, - null, - parameters, - descriptor.takeIf { it.isExpect }?.resolveDescriptorData(), - listOfNotNull(descriptor.takeUnless { it.isExpect }?.resolveDescriptorData()), - visibility = mapOf(platformData to descriptor.visibility) - ) - } - - private fun parameter(index: Int, descriptor: ValueParameterDescriptor, parent: DRIWithPlatformInfo) = - Parameter( - dri = parent.dri.copy(target = index + 1), - name = descriptor.name.asString(), - type = KotlinTypeWrapper(descriptor.type), - expected = parent.expected, - actual = parent.actual - ) - - private fun MemberScope.functions(parent: DRIWithPlatformInfo): List = - getContributedDescriptors(DescriptorKindFilter.FUNCTIONS) { true } - .filterIsInstance() - .map { visitFunctionDescriptor(it, parent) } - - private fun MemberScope.properties(parent: DRIWithPlatformInfo): List = - getContributedDescriptors(DescriptorKindFilter.VALUES) { true } - .filterIsInstance() - .map { visitPropertyDescriptor(it, parent) } - - private fun MemberScope.classlikes(parent: DRIWithPlatformInfo): List = - getContributedDescriptors(DescriptorKindFilter.CLASSIFIERS) { true } - .filterIsInstance() - .map { visitClassDescriptor(it, parent) } - - private fun DeclarationDescriptor.resolveDescriptorData(): PlatformInfo { - val doc = findKDoc() - val parser: MarkdownParser = MarkdownParser(resolutionFacade, this) - val docHeader = parser.parseFromKDocTag(doc) - - return BasePlatformInfo(docHeader, listOf(platformData)) - } - - private fun ClassDescriptor.resolveClassDescriptionData(): ClassPlatformInfo { - return ClassPlatformInfo(resolveDescriptorData(), - (getSuperInterfaces() + getAllSuperclassesWithoutAny()).map { DRI.from(it) }) - } - - private fun PlatformInfo?.filterTagWrappers( - types: List>, - name: String? = null - ): PlatformInfo? { - if (this == null) - return null - return BasePlatformInfo( - DocumentationNode( - this.documentationNode.children.filter { it::class in types && (it as? NamedTagWrapper)?.name == name } - ), - this.platformData - ) - } - - private fun List.filterTagWrappers( - types: List>, - name: String? = null - ): List = - this.map { it.filterTagWrappers(types, name)!! } -} - -data class XMLMega(val key: String, val dri: DRI) : Extra - -enum class KotlinClassKindTypes : ClassKind { - CLASS, - INTERFACE, - ENUM_CLASS, - ENUM_ENTRY, - ANNOTATION_CLASS, - OBJECT; -} - -class KotlinTypeWrapper(private val kotlinType: KotlinType) : TypeWrapper { - private val declarationDescriptor = kotlinType.constructor.declarationDescriptor - private val fqNameSafe = declarationDescriptor?.fqNameSafe - override val constructorFqName = fqNameSafe?.asString() - override val constructorNamePathSegments: List = - fqNameSafe?.pathSegments()?.map { it.asString() } ?: emptyList() - override val arguments: List by lazy { - kotlinType.arguments.map { - KotlinTypeWrapper( - it.type - ) - } - } - override val dri: DRI? by lazy { declarationDescriptor?.let { DRI.from(it) } } -} \ No newline at end of file diff --git a/core/src/main/kotlin/transformers/descriptors/DescriptorToDocumentationTranslator.kt b/core/src/main/kotlin/transformers/descriptors/DescriptorToDocumentationTranslator.kt index 61d636d6..5074833e 100644 --- a/core/src/main/kotlin/transformers/descriptors/DescriptorToDocumentationTranslator.kt +++ b/core/src/main/kotlin/transformers/descriptors/DescriptorToDocumentationTranslator.kt @@ -9,7 +9,6 @@ interface DescriptorToDocumentationTranslator { fun invoke( moduleName: String, packageFragments: Iterable, - platformData: PlatformData, - context: DokkaContext + platformData: PlatformData ): Module } \ No newline at end of file diff --git a/core/src/main/kotlin/transformers/psi/DefaultPsiToDocumentationTranslator.kt b/core/src/main/kotlin/transformers/psi/DefaultPsiToDocumentationTranslator.kt index 144f319f..055df0b2 100644 --- a/core/src/main/kotlin/transformers/psi/DefaultPsiToDocumentationTranslator.kt +++ b/core/src/main/kotlin/transformers/psi/DefaultPsiToDocumentationTranslator.kt @@ -141,75 +141,3 @@ object DefaultPsiToDocumentationTranslator : PsiToDocumentationTranslator { } } } - -enum class JavaClassKindTypes : ClassKind { - CLASS, - INTERFACE, - ENUM_CLASS, - ENUM_ENTRY, - ANNOTATION_CLASS; -} - -class JavaTypeWrapper : TypeWrapper { - - override val constructorFqName: String? - override val constructorNamePathSegments: List - override val arguments: List - override val dri: DRI? - val isPrimitive: Boolean - - constructor( - constructorNamePathSegments: List, - arguments: List, - dri: DRI?, - isPrimitiveType: Boolean - ) { - this.constructorFqName = constructorNamePathSegments.joinToString(".") - this.constructorNamePathSegments = constructorNamePathSegments - this.arguments = arguments - this.dri = dri - this.isPrimitive = isPrimitiveType - } - - constructor(type: PsiType) { - if (type is PsiClassReferenceType) { - val resolved = type.resolve() - constructorFqName = resolved?.qualifiedName - constructorNamePathSegments = resolved?.qualifiedName?.split('.') ?: emptyList() - arguments = type.parameters.mapNotNull { - if (it is PsiClassReferenceType) JavaTypeWrapper(it) else null - } - dri = fromPsi(type) - this.isPrimitive = false - } else if (type is PsiEllipsisType) { - constructorFqName = type.canonicalText - constructorNamePathSegments = listOf(type.canonicalText) // TODO - arguments = emptyList() - dri = DRI("java.lang", "Object") // TODO - this.isPrimitive = false - } else if (type is PsiArrayType) { - constructorFqName = type.canonicalText - constructorNamePathSegments = listOf(type.canonicalText) - arguments = emptyList() - dri = (type as? PsiClassReferenceType)?.let { fromPsi(it) } // TODO - this.isPrimitive = false - } else { - type as PsiPrimitiveType - constructorFqName = type.name - constructorNamePathSegments = type.name.split('.') - arguments = emptyList() - dri = null - this.isPrimitive = true - } - } - - private fun fromPsi(type: PsiClassReferenceType): DRI { - val className = type.className - val pkg = type.canonicalText.removeSuffix(className).removeSuffix(".") - return DRI(packageName = pkg, classNames = className) - } - - override fun toString(): String { - return constructorFqName.orEmpty() - } -} \ No newline at end of file diff --git a/plugins/base/build.gradle.kts b/plugins/base/build.gradle.kts index 386a3288..ba0b5753 100644 --- a/plugins/base/build.gradle.kts +++ b/plugins/base/build.gradle.kts @@ -5,4 +5,5 @@ publishing { from(components["java"]) } } -} \ No newline at end of file +} + diff --git a/plugins/base/src/main/kotlin/DokkaBase.kt b/plugins/base/src/main/kotlin/DokkaBase.kt index e82a59bf..5c579e54 100644 --- a/plugins/base/src/main/kotlin/DokkaBase.kt +++ b/plugins/base/src/main/kotlin/DokkaBase.kt @@ -1,4 +1,11 @@ +package org.jetbrains.dokka.base + +import org.jetbrains.dokka.CoreExtensions +import org.jetbrains.dokka.base.transformers.descriptors.DefaultDescriptorToDocumentationTranslator import org.jetbrains.dokka.plugability.DokkaPlugin class DokkaBase: DokkaPlugin() { + val defaultDescriptorToDocumentationTranslator by extending { + CoreExtensions.descriptorToDocumentationTranslator providing ::DefaultDescriptorToDocumentationTranslator + } } \ No newline at end of file diff --git a/plugins/base/src/main/kotlin/transformers/descriptors/DefaultDescriptorToDocumentationTranslator.kt b/plugins/base/src/main/kotlin/transformers/descriptors/DefaultDescriptorToDocumentationTranslator.kt new file mode 100644 index 00000000..1358cef1 --- /dev/null +++ b/plugins/base/src/main/kotlin/transformers/descriptors/DefaultDescriptorToDocumentationTranslator.kt @@ -0,0 +1,338 @@ +package org.jetbrains.dokka.base.transformers.descriptors + +import org.jetbrains.dokka.analysis.DokkaResolutionFacade +import org.jetbrains.dokka.links.Callable +import org.jetbrains.dokka.links.DRI +import org.jetbrains.dokka.links.withClass +import org.jetbrains.dokka.model.* +import org.jetbrains.dokka.model.ClassKind +import org.jetbrains.dokka.model.Enum +import org.jetbrains.dokka.model.Function +import org.jetbrains.dokka.model.Property +import org.jetbrains.dokka.model.doc.* +import org.jetbrains.dokka.pages.PlatformData +import org.jetbrains.dokka.parsers.MarkdownParser +import org.jetbrains.dokka.plugability.DokkaContext +import org.jetbrains.dokka.transformers.descriptors.DescriptorToDocumentationTranslator +import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.descriptors.impl.DeclarationDescriptorVisitorEmptyBodies +import org.jetbrains.kotlin.idea.kdoc.findKDoc +import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe +import org.jetbrains.kotlin.resolve.descriptorUtil.getAllSuperclassesWithoutAny +import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperInterfaces +import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter +import org.jetbrains.kotlin.resolve.scopes.MemberScope +import org.jetbrains.kotlin.types.KotlinType +import kotlin.reflect.KClass + +class DefaultDescriptorToDocumentationTranslator( + private val context: DokkaContext +) : DescriptorToDocumentationTranslator { + override fun invoke( + moduleName: String, + packageFragments: Iterable, + platformData: PlatformData + ) = DokkaDescriptorVisitor(platformData, context.platforms[platformData]?.facade!!).run { + packageFragments.map { + visitPackageFragmentDescriptor( + it, + DRIWithPlatformInfo(DRI.topLevel, null, emptyList()) + ) + } + }.let { Module(moduleName, it) } + +} + + +data class DRIWithPlatformInfo( + val dri: DRI, + val expected: PlatformInfo?, + val actual: List +) + +fun DRI.withEmptyInfo() = DRIWithPlatformInfo(this, null, emptyList()) + +open class DokkaDescriptorVisitor( // TODO: close this class and make it private together with DRIWithPlatformInfo + private val platformData: PlatformData, + private val resolutionFacade: DokkaResolutionFacade +) : DeclarationDescriptorVisitorEmptyBodies() { + override fun visitDeclarationDescriptor(descriptor: DeclarationDescriptor, parent: DRIWithPlatformInfo): Nothing { + throw IllegalStateException("${javaClass.simpleName} should never enter ${descriptor.javaClass.simpleName}") + } + + override fun visitPackageFragmentDescriptor( + descriptor: PackageFragmentDescriptor, + parent: DRIWithPlatformInfo + ): Package { + val driWithPlatform = DRI(packageName = descriptor.fqName.asString()).withEmptyInfo() + val scope = descriptor.getMemberScope() + + return Package( + dri = driWithPlatform.dri, + functions = scope.functions(driWithPlatform), + properties = scope.properties(driWithPlatform), + classlikes = scope.classlikes(driWithPlatform) + ) + } + + override fun visitClassDescriptor(descriptor: ClassDescriptor, parent: DRIWithPlatformInfo): Classlike = + when (descriptor.kind) { + org.jetbrains.kotlin.descriptors.ClassKind.ENUM_CLASS -> enumDescriptor(descriptor, parent) + else -> classDescriptor(descriptor, parent) + } + + fun enumDescriptor(descriptor: ClassDescriptor, parent: DRIWithPlatformInfo): Enum { + val driWithPlatform = parent.dri.withClass(descriptor.name.asString()).withEmptyInfo() + val scope = descriptor.unsubstitutedMemberScope + val descriptorData = descriptor.takeUnless { it.isExpect }?.resolveClassDescriptionData() + + return Enum( + dri = driWithPlatform.dri, + name = descriptor.name.asString(), + entries = scope.classlikes(driWithPlatform).filter { it.kind == KotlinClassKindTypes.ENUM_ENTRY }.map { + EnumEntry( + it + ) + }, + constructors = descriptor.constructors.map { visitConstructorDescriptor(it, driWithPlatform) }, + functions = scope.functions(driWithPlatform), + properties = scope.properties(driWithPlatform), + classlikes = scope.classlikes(driWithPlatform), + expected = descriptor.takeIf { it.isExpect }?.resolveClassDescriptionData(), + actual = listOfNotNull(descriptorData), + extra = mutableSetOf(), // TODO Implement following method to return proper results getXMLDRIs(descriptor, descriptorData).toMutableSet() + visibility = mapOf(platformData to descriptor.visibility) + ) + } + + fun classDescriptor(descriptor: ClassDescriptor, parent: DRIWithPlatformInfo): Class { + val driWithPlatform = parent.dri.withClass(descriptor.name.asString()).withEmptyInfo() + val scope = descriptor.unsubstitutedMemberScope + val descriptorData = descriptor.takeUnless { it.isExpect }?.resolveClassDescriptionData() + val expected = descriptor.takeIf { it.isExpect }?.resolveClassDescriptionData() + val actual = listOfNotNull(descriptorData) + return Class( + dri = driWithPlatform.dri, + name = descriptor.name.asString(), + kind = KotlinClassKindTypes.valueOf(descriptor.kind.toString()), + constructors = descriptor.constructors.map { + visitConstructorDescriptor( + it, + if (it.isPrimary) + DRIWithPlatformInfo( + driWithPlatform.dri, + expected?.info.filterTagWrappers(listOf(Constructor::class)), + actual.filterTagWrappers(listOf(Constructor::class)) + ) + else + DRIWithPlatformInfo(driWithPlatform.dri, null, emptyList()) + ) + }, + functions = scope.functions(driWithPlatform), + properties = scope.properties(driWithPlatform), + classlikes = scope.classlikes(driWithPlatform), + expected = expected, + actual = actual, + extra = mutableSetOf(), // TODO Implement following method to return proper results getXMLDRIs(descriptor, descriptorData).toMutableSet() + visibility = mapOf(platformData to descriptor.visibility) + ) + } + + override fun visitPropertyDescriptor(descriptor: PropertyDescriptor, parent: DRIWithPlatformInfo): Property { + val expected = descriptor.takeIf { it.isExpect }?.resolveDescriptorData() + val actual = listOfNotNull(descriptor.takeUnless { it.isExpect }?.resolveDescriptorData()) + val dri = parent.dri.copy(callable = Callable.from(descriptor)) + + return Property( + dri = dri, + name = descriptor.name.asString(), + receiver = descriptor.extensionReceiverParameter?.let { + visitReceiverParameterDescriptor( + it, + DRIWithPlatformInfo( + dri, + expected?.filterTagWrappers(listOf(Receiver::class)), + actual.filterTagWrappers(listOf(Receiver::class)) + ) + ) + }, + expected = expected, + actual = actual, + accessors = descriptor.accessors.map { visitPropertyAccessorDescriptor(it, descriptor, dri) }, + visibility = mapOf(platformData to descriptor.visibility) + ) + } + + override fun visitFunctionDescriptor(descriptor: FunctionDescriptor, parent: DRIWithPlatformInfo): Function { + val expected = descriptor.takeIf { it.isExpect }?.resolveDescriptorData() + val actual = listOfNotNull(descriptor.takeUnless { it.isExpect }?.resolveDescriptorData()) + val dri = parent.dri.copy(callable = Callable.from(descriptor)) + + return Function( + dri = dri, + name = descriptor.name.asString(), + returnType = descriptor.returnType?.let { KotlinTypeWrapper(it) }, + isConstructor = false, + receiver = descriptor.extensionReceiverParameter?.let { + visitReceiverParameterDescriptor( + it, + DRIWithPlatformInfo( + dri, + expected?.filterTagWrappers(listOf(Receiver::class)), + actual.filterTagWrappers(listOf(Receiver::class)) + ) + ) + }, + parameters = descriptor.valueParameters.mapIndexed { index, desc -> + parameter( + index, desc, + DRIWithPlatformInfo( + dri, + expected.filterTagWrappers(listOf(Param::class), desc.name.asString()), + actual.filterTagWrappers(listOf(Param::class), desc.name.asString()) + ) + ) + }, + expected = expected, + actual = actual, + visibility = mapOf(platformData to descriptor.visibility) + ) + } + + override fun visitConstructorDescriptor(descriptor: ConstructorDescriptor, parent: DRIWithPlatformInfo): Function { + val dri = parent.dri.copy(callable = Callable.from(descriptor)) + return Function( + dri = dri, + name = "", + returnType = KotlinTypeWrapper(descriptor.returnType), + isConstructor = true, + receiver = null, + parameters = descriptor.valueParameters.mapIndexed { index, desc -> + parameter( + index, desc, + DRIWithPlatformInfo( + dri, + parent.expected.filterTagWrappers(listOf(Param::class)), + parent.actual.filterTagWrappers(listOf(Param::class)) + ) + ) + }, + expected = parent.expected ?: descriptor.takeIf { it.isExpect }?.resolveDescriptorData(), + actual = parent.actual, + visibility = mapOf(platformData to descriptor.visibility) + ) + } + + override fun visitReceiverParameterDescriptor( + descriptor: ReceiverParameterDescriptor, + parent: DRIWithPlatformInfo + ) = Parameter( + dri = parent.dri.copy(target = 0), + name = null, + type = KotlinTypeWrapper(descriptor.type), + expected = parent.expected, + actual = parent.actual + ) + + open fun visitPropertyAccessorDescriptor( + descriptor: PropertyAccessorDescriptor, + propertyDescriptor: PropertyDescriptor, + parent: DRI + ): Function { + val dri = parent.copy(callable = Callable.from(descriptor)) + val isGetter = descriptor is PropertyGetterDescriptor + + fun PropertyDescriptor.asParameter(parent: DRI) = + Parameter( + parent.copy(target = 1), + this.name.asString(), + KotlinTypeWrapper(this.type), + descriptor.takeIf { it.isExpect }?.resolveDescriptorData(), + listOfNotNull(descriptor.takeUnless { it.isExpect }?.resolveDescriptorData()) + ) + + val name = run { + val modifier = if (isGetter) "get" else "set" + val rawName = propertyDescriptor.name.asString() + "$modifier${rawName[0].toUpperCase()}${rawName.drop(1)}" + } + + descriptor.visibility + val parameters = + if (isGetter) { + emptyList() + } else { + listOf(propertyDescriptor.asParameter(dri)) + } + + return Function( + dri, + name, + descriptor.returnType?.let { KotlinTypeWrapper(it) }, + false, + null, + parameters, + descriptor.takeIf { it.isExpect }?.resolveDescriptorData(), + listOfNotNull(descriptor.takeUnless { it.isExpect }?.resolveDescriptorData()), + visibility = mapOf(platformData to descriptor.visibility) + ) + } + + private fun parameter(index: Int, descriptor: ValueParameterDescriptor, parent: DRIWithPlatformInfo) = + Parameter( + dri = parent.dri.copy(target = index + 1), + name = descriptor.name.asString(), + type = KotlinTypeWrapper(descriptor.type), + expected = parent.expected, + actual = parent.actual + ) + + private fun MemberScope.functions(parent: DRIWithPlatformInfo): List = + getContributedDescriptors(DescriptorKindFilter.FUNCTIONS) { true } + .filterIsInstance() + .map { visitFunctionDescriptor(it, parent) } + + private fun MemberScope.properties(parent: DRIWithPlatformInfo): List = + getContributedDescriptors(DescriptorKindFilter.VALUES) { true } + .filterIsInstance() + .map { visitPropertyDescriptor(it, parent) } + + private fun MemberScope.classlikes(parent: DRIWithPlatformInfo): List = + getContributedDescriptors(DescriptorKindFilter.CLASSIFIERS) { true } + .filterIsInstance() + .map { visitClassDescriptor(it, parent) } + + private fun DeclarationDescriptor.resolveDescriptorData(): PlatformInfo { + val doc = findKDoc() + val parser = MarkdownParser(resolutionFacade, this) + val docHeader = parser.parseFromKDocTag(doc) + + return BasePlatformInfo(docHeader, listOf(platformData)) + } + + private fun ClassDescriptor.resolveClassDescriptionData(): ClassPlatformInfo { + return ClassPlatformInfo(resolveDescriptorData(), + (getSuperInterfaces() + getAllSuperclassesWithoutAny()).map { DRI.from(it) }) + } + + private fun PlatformInfo?.filterTagWrappers( + types: List>, + name: String? = null + ): PlatformInfo? { + if (this == null) + return null + return BasePlatformInfo( + DocumentationNode( + this.documentationNode.children.filter { it::class in types && (it as? NamedTagWrapper)?.name == name } + ), + this.platformData + ) + } + + private fun List.filterTagWrappers( + types: List>, + name: String? = null + ): List = + this.map { it.filterTagWrappers(types, name)!! } +} + diff --git a/plugins/kotlin-as-java/build.gradle.kts b/plugins/kotlin-as-java/build.gradle.kts index 3b281d53..32f9c931 100644 --- a/plugins/kotlin-as-java/build.gradle.kts +++ b/plugins/kotlin-as-java/build.gradle.kts @@ -5,4 +5,8 @@ publishing { from(components["java"]) } } +} + +dependencies { + implementation(project(":plugins:base")) } \ No newline at end of file diff --git a/plugins/kotlin-as-java/src/main/kotlin/KotlinAsJavaDescriptorToDocumentationTranslator.kt b/plugins/kotlin-as-java/src/main/kotlin/KotlinAsJavaDescriptorToDocumentationTranslator.kt index 9c4ee9aa..1edf4aa1 100644 --- a/plugins/kotlin-as-java/src/main/kotlin/KotlinAsJavaDescriptorToDocumentationTranslator.kt +++ b/plugins/kotlin-as-java/src/main/kotlin/KotlinAsJavaDescriptorToDocumentationTranslator.kt @@ -1,6 +1,9 @@ package org.jetbrains.dokka.kotlinAsJava import org.jetbrains.dokka.analysis.DokkaResolutionFacade +import org.jetbrains.dokka.base.transformers.descriptors.DRIWithPlatformInfo +import org.jetbrains.dokka.base.transformers.descriptors.DokkaDescriptorVisitor +import org.jetbrains.dokka.base.transformers.descriptors.withEmptyInfo import org.jetbrains.dokka.links.Callable import org.jetbrains.dokka.links.DRI import org.jetbrains.dokka.links.withClass @@ -8,18 +11,16 @@ import org.jetbrains.dokka.model.* import org.jetbrains.dokka.model.Function import org.jetbrains.dokka.pages.PlatformData import org.jetbrains.dokka.plugability.DokkaContext -import org.jetbrains.dokka.transformers.descriptors.DRIWithPlatformInfo import org.jetbrains.dokka.transformers.descriptors.DescriptorToDocumentationTranslator -import org.jetbrains.dokka.transformers.descriptors.DokkaDescriptorVisitor -import org.jetbrains.dokka.transformers.descriptors.withEmptyInfo import org.jetbrains.kotlin.descriptors.* -object KotlinAsJavaDescriptorToDocumentationTranslator : DescriptorToDocumentationTranslator { +class KotlinAsJavaDescriptorToDocumentationTranslator( + private val context: DokkaContext +) : DescriptorToDocumentationTranslator { override fun invoke( moduleName: String, packageFragments: Iterable, - platformData: PlatformData, - context: DokkaContext + platformData: PlatformData ): Module = KotlinAsJavaDokkaDescriptorVisitor(platformData, context.platforms[platformData]?.facade!!).run { packageFragments.map { visitPackageFragmentDescriptor(it, DRI.topLevel.withEmptyInfo()) } diff --git a/plugins/kotlin-as-java/src/main/kotlin/KotlinAsJavaPageBuilder.kt b/plugins/kotlin-as-java/src/main/kotlin/KotlinAsJavaPageBuilder.kt index 8f026477..6fe10ce1 100644 --- a/plugins/kotlin-as-java/src/main/kotlin/KotlinAsJavaPageBuilder.kt +++ b/plugins/kotlin-as-java/src/main/kotlin/KotlinAsJavaPageBuilder.kt @@ -9,7 +9,6 @@ import org.jetbrains.dokka.model.* import org.jetbrains.dokka.model.Enum import org.jetbrains.dokka.model.Function import org.jetbrains.dokka.pages.* -import org.jetbrains.dokka.transformers.descriptors.KotlinClassKindTypes import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.js.resolve.diagnostics.findPsi diff --git a/plugins/kotlin-as-java/src/main/kotlin/KotlinAsJavaPageContentBuilder.kt b/plugins/kotlin-as-java/src/main/kotlin/KotlinAsJavaPageContentBuilder.kt index 05896d11..a5d0bd33 100644 --- a/plugins/kotlin-as-java/src/main/kotlin/KotlinAsJavaPageContentBuilder.kt +++ b/plugins/kotlin-as-java/src/main/kotlin/KotlinAsJavaPageContentBuilder.kt @@ -2,8 +2,8 @@ package org.jetbrains.dokka.kotlinAsJava import org.jetbrains.dokka.links.DRI import org.jetbrains.dokka.model.Function +import org.jetbrains.dokka.model.JavaTypeWrapper import org.jetbrains.dokka.pages.* -import org.jetbrains.dokka.transformers.psi.JavaTypeWrapper import org.jetbrains.dokka.utilities.DokkaLogger class KotlinAsJavaPageContentBuilder( diff --git a/plugins/kotlin-as-java/src/main/kotlin/KotlinAsJavaPlugin.kt b/plugins/kotlin-as-java/src/main/kotlin/KotlinAsJavaPlugin.kt index 345dc9be..e99e0843 100644 --- a/plugins/kotlin-as-java/src/main/kotlin/KotlinAsJavaPlugin.kt +++ b/plugins/kotlin-as-java/src/main/kotlin/KotlinAsJavaPlugin.kt @@ -12,8 +12,12 @@ import org.jetbrains.dokka.transformers.documentation.DocumentationToPageTransla import org.jetbrains.kotlin.descriptors.DeclarationDescriptor class KotlinAsJavaPlugin : DokkaPlugin() { - val kotlinAsJavaDescriptorToDocumentableTranslator by extending { CoreExtensions.descriptorToDocumentationTranslator with KotlinAsJavaDescriptorToDocumentationTranslator } - val kotlinAsJavaDocumentableToPageTranslator by extending { CoreExtensions.documentationToPageTranslator with KotlinAsJavaDocumentationToPageTranslator } + val kotlinAsJavaDescriptorToDocumentableTranslator by extending { + CoreExtensions.descriptorToDocumentationTranslator providing ::KotlinAsJavaDescriptorToDocumentationTranslator + } + val kotlinAsJavaDocumentableToPageTranslator by extending { + CoreExtensions.documentationToPageTranslator with KotlinAsJavaDocumentationToPageTranslator + } } object DescriptorCache { diff --git a/plugins/kotlin-as-java/src/main/kotlin/KotlinToJVMResolver.kt b/plugins/kotlin-as-java/src/main/kotlin/KotlinToJVMResolver.kt index 87a173f3..7b0495e9 100644 --- a/plugins/kotlin-as-java/src/main/kotlin/KotlinToJVMResolver.kt +++ b/plugins/kotlin-as-java/src/main/kotlin/KotlinToJVMResolver.kt @@ -5,7 +5,6 @@ import org.jetbrains.dokka.links.* import org.jetbrains.dokka.model.* import org.jetbrains.dokka.model.Function import org.jetbrains.dokka.model.Enum -import org.jetbrains.dokka.transformers.psi.JavaTypeWrapper import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.PropertyDescriptor -- cgit From e82beddda7b51f285f0422c6a7078a0a80d54d14 Mon Sep 17 00:00:00 2001 From: Paweł Marks Date: Thu, 13 Feb 2020 16:05:04 +0100 Subject: Adds option to mark extension as fallback --- core/src/main/kotlin/DokkaGenerator.kt | 1 - core/src/main/kotlin/plugability/DokkaContext.kt | 32 +++++++++++++--------- core/src/main/kotlin/plugability/DokkaPlugin.kt | 11 ++++++-- core/src/main/kotlin/plugability/extensions.kt | 28 ++++++++++++++----- core/src/main/kotlin/renderers/DefaultRenderer.kt | 1 - core/src/main/kotlin/renderers/OutputWriter.kt | 4 --- .../kotlin/resolvers/DefaultLocationProvider.kt | 2 -- .../DefaultDocumentationToPageTranslator.kt | 1 - plugins/base/src/main/kotlin/DokkaBase.kt | 2 +- .../src/main/kotlin/KotlinAsJavaPlugin.kt | 1 - 10 files changed, 49 insertions(+), 34 deletions(-) (limited to 'plugins/base/src/main/kotlin/DokkaBase.kt') diff --git a/core/src/main/kotlin/DokkaGenerator.kt b/core/src/main/kotlin/DokkaGenerator.kt index 6a21e031..573ba13e 100644 --- a/core/src/main/kotlin/DokkaGenerator.kt +++ b/core/src/main/kotlin/DokkaGenerator.kt @@ -10,7 +10,6 @@ import org.jetbrains.dokka.pages.PlatformData import org.jetbrains.dokka.pages.RootPageNode import org.jetbrains.dokka.plugability.DokkaContext import org.jetbrains.dokka.plugability.DokkaPlugin -import org.jetbrains.dokka.plugability.single import org.jetbrains.dokka.utilities.DokkaLogger import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation diff --git a/core/src/main/kotlin/plugability/DokkaContext.kt b/core/src/main/kotlin/plugability/DokkaContext.kt index 6a8ac4a3..b4be5862 100644 --- a/core/src/main/kotlin/plugability/DokkaContext.kt +++ b/core/src/main/kotlin/plugability/DokkaContext.kt @@ -17,6 +17,8 @@ interface DokkaContext { operator fun get(point: E, askDefault: AskDefault = AskDefault.WhenEmpty): List where T : Any, E : ExtensionPoint + fun single(point: E): T where T : Any, E : ExtensionPoint + val logger: DokkaLogger val configuration: DokkaConfiguration val platforms: Map @@ -41,19 +43,6 @@ interface DokkaContext { } } -fun DokkaContext.single(point: E): T where T : Any, E : ExtensionPoint { - fun throwBadArity(substitution: String): Nothing = throw IllegalStateException( - "$point was expected to have exactly one extension registered, but $substitution found." - ) - - val extensions = get(point, AskDefault.WhenEmpty) - return when (extensions.size) { - 0 -> throwBadArity("none was") - 1 -> extensions.first() - else -> throwBadArity("multiple were") - } -} - interface DokkaContextConfiguration { fun addExtensionDependencies(extension: Extension<*>) } @@ -110,6 +99,23 @@ private class DokkaContextConfigurationImpl( actions(point)?.takeIf { it.isNotEmpty() } ?: DefaultExtensions.get(point, this) } as List + @Suppress("UNCHECKED_CAST") + override fun single(point: E): T where T : Any, E : ExtensionPoint { + fun throwBadArity(substitution: String): Nothing = throw IllegalStateException( + "$point was expected to have exactly one extension registered, but $substitution found." + ) + + val extensions = extensions[point].orEmpty() as List> + return when (extensions.size) { + 0 -> DefaultExtensions.get(point, this).single() ?: throwBadArity("none was") + 1 -> extensions.single().action.get(this) + else -> { + val notFallbacks = extensions.filterNot { it.isFallback } + if (notFallbacks.size == 1) notFallbacks.single().action.get(this) else throwBadArity("many were") + } + } + } + private fun > actions(point: E) = extensions[point]?.map { it.action.get(this) } @Suppress("UNCHECKED_CAST") diff --git a/core/src/main/kotlin/plugability/DokkaPlugin.kt b/core/src/main/kotlin/plugability/DokkaPlugin.kt index 1fcbd934..cdc92ca5 100644 --- a/core/src/main/kotlin/plugability/DokkaPlugin.kt +++ b/core/src/main/kotlin/plugability/DokkaPlugin.kt @@ -14,7 +14,7 @@ abstract class DokkaPlugin { internal var context: DokkaContext? = null protected inline fun plugin(): T = context?.plugin(T::class) - ?: throw IllegalStateException("Querying about plugins is only possible with dokka context initialised") + ?: throw IllegalStateException("Querying about plugins is only possible with dokka context initialised") protected fun extensionPoint() = object : ReadOnlyProperty> { @@ -24,7 +24,12 @@ abstract class DokkaPlugin { ) } - protected fun extending(definition: ExtendingDSL.() -> Extension) = ExtensionProvider(definition) + protected fun extending(isFallback: Boolean = false, definition: ExtendingDSL.() -> Extension) = + if (isFallback) { + ExtensionProvider { definition().markedAsFallback() } + } else { + ExtensionProvider(definition) + } protected class ExtensionProvider internal constructor( private val definition: ExtendingDSL.() -> Extension @@ -41,6 +46,6 @@ abstract class DokkaPlugin { extensionDelegates.asSequence() .filterIsInstance>>() // should be always true .map { it.get(this) } - .forEach { if(it.condition.invoke(configuration)) ctx.addExtensionDependencies(it) } + .forEach { if (it.condition.invoke(configuration)) ctx.addExtensionDependencies(it) } } } \ No newline at end of file diff --git a/core/src/main/kotlin/plugability/extensions.kt b/core/src/main/kotlin/plugability/extensions.kt index 4cbb61eb..46c356df 100644 --- a/core/src/main/kotlin/plugability/extensions.kt +++ b/core/src/main/kotlin/plugability/extensions.kt @@ -15,7 +15,8 @@ abstract class Extension internal constructor( internal val extensionName: String, internal val action: LazyEvaluated, internal val ordering: (OrderDsl.() -> Unit)? = null, - internal val condition: DokkaConfiguration.() -> Boolean = { true } + internal val condition: DokkaConfiguration.() -> Boolean = { true }, + internal val isFallback: Boolean ) { override fun toString() = "Extension: $pluginClass/$extensionName" @@ -26,6 +27,8 @@ abstract class Extension internal constructor( override fun hashCode() = listOf(pluginClass, extensionName).hashCode() abstract fun setCondition(condition: (DokkaConfiguration.() -> Boolean)): Extension + + abstract fun markedAsFallback(): Extension } class ExtensionOrdered internal constructor( @@ -34,17 +37,22 @@ class ExtensionOrdered internal constructor( extensionName: String, action: LazyEvaluated, ordering: (OrderDsl.() -> Unit), - condition: DokkaConfiguration.() -> Boolean = { true } + condition: DokkaConfiguration.() -> Boolean = { true }, + isFallback: Boolean = false ) : Extension( extensionPoint, pluginClass, extensionName, action, ordering, - condition + condition, + isFallback ) { override fun setCondition(condition: DokkaConfiguration.() -> Boolean) = ExtensionOrdered(extensionPoint, pluginClass, extensionName, action, ordering!!, condition) + + override fun markedAsFallback() = + ExtensionOrdered(extensionPoint, pluginClass, extensionName, action, ordering!!, condition, true) } class ExtensionUnordered internal constructor( @@ -52,17 +60,22 @@ class ExtensionUnordered internal constructor( pluginClass: String, extensionName: String, action: LazyEvaluated, - condition: DokkaConfiguration.() -> Boolean = { true } + condition: DokkaConfiguration.() -> Boolean = { true }, + isFallback: Boolean = false ) : Extension( extensionPoint, pluginClass, extensionName, action, null, - condition + condition, + isFallback ) { override fun setCondition(condition: DokkaConfiguration.() -> Boolean) = ExtensionUnordered(extensionPoint, pluginClass, extensionName, action, condition) + + override fun markedAsFallback() = + ExtensionUnordered(extensionPoint, pluginClass, extensionName, action, condition, true) } internal data class Ordering(val previous: Set>, val following: Set>) @@ -79,10 +92,11 @@ class ExtendingDSL(private val pluginClass: String, private val extensionName: S infix fun ExtensionPoint.providing(action: (DokkaContext) -> T) = ExtensionUnordered(this, this@ExtendingDSL.pluginClass, extensionName, LazyEvaluated.fromRecipe(action)) - infix fun ExtensionUnordered.order(block: OrderDsl.() -> Unit) = + infix fun ExtensionUnordered.order(block: OrderDsl.() -> Unit) = ExtensionOrdered(extensionPoint, pluginClass, extensionName, action, block) - infix fun Extension.applyIf(condition: DokkaConfiguration.() -> Boolean): Extension = this.setCondition(condition) + infix fun Extension.applyIf(condition: DokkaConfiguration.() -> Boolean): Extension = + this.setCondition(condition) } @ExtensionsDsl diff --git a/core/src/main/kotlin/renderers/DefaultRenderer.kt b/core/src/main/kotlin/renderers/DefaultRenderer.kt index 16cdb4c1..d09d9ded 100644 --- a/core/src/main/kotlin/renderers/DefaultRenderer.kt +++ b/core/src/main/kotlin/renderers/DefaultRenderer.kt @@ -3,7 +3,6 @@ package org.jetbrains.dokka.renderers import org.jetbrains.dokka.CoreExtensions import org.jetbrains.dokka.pages.* import org.jetbrains.dokka.plugability.DokkaContext -import org.jetbrains.dokka.plugability.single import org.jetbrains.dokka.resolvers.LocationProvider import org.jetbrains.dokka.transformers.pages.PageNodeTransformer diff --git a/core/src/main/kotlin/renderers/OutputWriter.kt b/core/src/main/kotlin/renderers/OutputWriter.kt index 30b2b0b6..e317f8ef 100644 --- a/core/src/main/kotlin/renderers/OutputWriter.kt +++ b/core/src/main/kotlin/renderers/OutputWriter.kt @@ -1,9 +1,5 @@ package org.jetbrains.dokka.renderers -import org.jetbrains.dokka.CoreExtensions -import org.jetbrains.dokka.plugability.DokkaContext -import org.jetbrains.dokka.plugability.single - interface OutputWriter { fun write(path: String, text: String, ext: String) diff --git a/core/src/main/kotlin/resolvers/DefaultLocationProvider.kt b/core/src/main/kotlin/resolvers/DefaultLocationProvider.kt index d30264bb..65d2f794 100644 --- a/core/src/main/kotlin/resolvers/DefaultLocationProvider.kt +++ b/core/src/main/kotlin/resolvers/DefaultLocationProvider.kt @@ -1,10 +1,8 @@ package org.jetbrains.dokka.resolvers -import org.jetbrains.dokka.CoreExtensions import org.jetbrains.dokka.links.DRI import org.jetbrains.dokka.pages.* import org.jetbrains.dokka.plugability.DokkaContext -import org.jetbrains.dokka.plugability.single import org.jetbrains.dokka.utilities.htmlEscape import java.util.* diff --git a/core/src/main/kotlin/transformers/documentation/DefaultDocumentationToPageTranslator.kt b/core/src/main/kotlin/transformers/documentation/DefaultDocumentationToPageTranslator.kt index 81c6dfea..c2a21150 100644 --- a/core/src/main/kotlin/transformers/documentation/DefaultDocumentationToPageTranslator.kt +++ b/core/src/main/kotlin/transformers/documentation/DefaultDocumentationToPageTranslator.kt @@ -6,7 +6,6 @@ import org.jetbrains.dokka.pages.DefaultPageBuilder import org.jetbrains.dokka.pages.DefaultPageContentBuilder import org.jetbrains.dokka.pages.ModulePageNode import org.jetbrains.dokka.plugability.DokkaContext -import org.jetbrains.dokka.plugability.single object DefaultDocumentationToPageTranslator : DocumentationToPageTranslator { diff --git a/plugins/base/src/main/kotlin/DokkaBase.kt b/plugins/base/src/main/kotlin/DokkaBase.kt index 5c579e54..648acfbb 100644 --- a/plugins/base/src/main/kotlin/DokkaBase.kt +++ b/plugins/base/src/main/kotlin/DokkaBase.kt @@ -5,7 +5,7 @@ import org.jetbrains.dokka.base.transformers.descriptors.DefaultDescriptorToDocu import org.jetbrains.dokka.plugability.DokkaPlugin class DokkaBase: DokkaPlugin() { - val defaultDescriptorToDocumentationTranslator by extending { + val defaultDescriptorToDocumentationTranslator by extending(isFallback = true) { CoreExtensions.descriptorToDocumentationTranslator providing ::DefaultDescriptorToDocumentationTranslator } } \ No newline at end of file diff --git a/plugins/kotlin-as-java/src/main/kotlin/KotlinAsJavaPlugin.kt b/plugins/kotlin-as-java/src/main/kotlin/KotlinAsJavaPlugin.kt index e99e0843..dd95f00e 100644 --- a/plugins/kotlin-as-java/src/main/kotlin/KotlinAsJavaPlugin.kt +++ b/plugins/kotlin-as-java/src/main/kotlin/KotlinAsJavaPlugin.kt @@ -7,7 +7,6 @@ import org.jetbrains.dokka.model.Module import org.jetbrains.dokka.pages.ModulePageNode import org.jetbrains.dokka.plugability.DokkaContext import org.jetbrains.dokka.plugability.DokkaPlugin -import org.jetbrains.dokka.plugability.single import org.jetbrains.dokka.transformers.documentation.DocumentationToPageTranslator import org.jetbrains.kotlin.descriptors.DeclarationDescriptor -- cgit From 705c6d45f95408633c71bc0bcd6bc93c9d79a381 Mon Sep 17 00:00:00 2001 From: Paweł Marks Date: Sun, 16 Feb 2020 23:02:30 +0100 Subject: Renames DocumentationMerger and moves it to base plugin --- core/src/main/kotlin/CoreExtensions.kt | 4 +- core/src/main/kotlin/DokkaGenerator.kt | 2 +- .../main/kotlin/plugability/DefaultExtensions.kt | 2 - .../DefaultDocumentationNodeMerger.kt | 114 -------------------- .../documentation/DocumentableMerger.kt | 8 ++ .../documentation/DocumentationNodeMerger.kt | 8 -- core/src/main/kotlin/utilities/genericUtils.kt | 3 + plugins/base/src/main/kotlin/DokkaBase.kt | 5 + .../documentables/DefaultDocumentableMerger.kt | 116 +++++++++++++++++++++ 9 files changed, 135 insertions(+), 127 deletions(-) delete mode 100644 core/src/main/kotlin/transformers/documentation/DefaultDocumentationNodeMerger.kt create mode 100644 core/src/main/kotlin/transformers/documentation/DocumentableMerger.kt delete mode 100644 core/src/main/kotlin/transformers/documentation/DocumentationNodeMerger.kt create mode 100644 core/src/main/kotlin/utilities/genericUtils.kt create mode 100644 plugins/base/src/main/kotlin/transformers/documentables/DefaultDocumentableMerger.kt (limited to 'plugins/base/src/main/kotlin/DokkaBase.kt') diff --git a/core/src/main/kotlin/CoreExtensions.kt b/core/src/main/kotlin/CoreExtensions.kt index 1364f1c1..47f2e4c1 100644 --- a/core/src/main/kotlin/CoreExtensions.kt +++ b/core/src/main/kotlin/CoreExtensions.kt @@ -6,7 +6,7 @@ import org.jetbrains.dokka.renderers.Renderer import org.jetbrains.dokka.renderers.OutputWriter import org.jetbrains.dokka.resolvers.LocationProviderFactory import org.jetbrains.dokka.transformers.descriptors.DescriptorToDocumentationTranslator -import org.jetbrains.dokka.transformers.documentation.DocumentationNodeMerger +import org.jetbrains.dokka.transformers.documentation.DocumentableMerger import org.jetbrains.dokka.transformers.documentation.DocumentationNodeTransformer import org.jetbrains.dokka.transformers.documentation.DocumentationToPageTranslator import org.jetbrains.dokka.transformers.pages.PageMergerStrategy @@ -22,7 +22,7 @@ import kotlin.reflect.KProperty object CoreExtensions { val descriptorToDocumentationTranslator by coreExtension() val psiToDocumentationTranslator by coreExtension() - val documentationMerger by coreExtension() + val documentableMerger by coreExtension() val documentationTransformer by coreExtension() val commentsToContentConverter by coreExtension() val documentationToPageTranslator by coreExtension() diff --git a/core/src/main/kotlin/DokkaGenerator.kt b/core/src/main/kotlin/DokkaGenerator.kt index 573ba13e..1829c9e4 100644 --- a/core/src/main/kotlin/DokkaGenerator.kt +++ b/core/src/main/kotlin/DokkaGenerator.kt @@ -78,7 +78,7 @@ class DokkaGenerator( fun mergeDocumentationModels( modulesFromPlatforms: List, context: DokkaContext - ) = context.single(CoreExtensions.documentationMerger).invoke(modulesFromPlatforms, context) + ) = context.single(CoreExtensions.documentableMerger).invoke(modulesFromPlatforms, context) fun transformDocumentationModel( documentationModel: Module, diff --git a/core/src/main/kotlin/plugability/DefaultExtensions.kt b/core/src/main/kotlin/plugability/DefaultExtensions.kt index 70a7e4db..c1a72c74 100644 --- a/core/src/main/kotlin/plugability/DefaultExtensions.kt +++ b/core/src/main/kotlin/plugability/DefaultExtensions.kt @@ -6,7 +6,6 @@ import org.jetbrains.dokka.renderers.FileWriter import org.jetbrains.dokka.renderers.OutputWriter import org.jetbrains.dokka.renderers.html.HtmlRenderer import org.jetbrains.dokka.resolvers.DefaultLocationProviderFactory -import org.jetbrains.dokka.transformers.documentation.DefaultDocumentationNodeMerger import org.jetbrains.dokka.transformers.documentation.DefaultDocumentationToPageTranslator import org.jetbrains.dokka.transformers.pages.DefaultPageMergerStrategy import org.jetbrains.dokka.transformers.psi.DefaultPsiToDocumentationTranslator @@ -28,7 +27,6 @@ internal object DefaultExtensions { internal fun > get(point: E, fullContext: DokkaContext): List = when (point) { CoreExtensions.psiToDocumentationTranslator -> DefaultPsiToDocumentationTranslator - CoreExtensions.documentationMerger -> DefaultDocumentationNodeMerger CoreExtensions.commentsToContentConverter -> converter.get(fullContext) CoreExtensions.documentationToPageTranslator -> DefaultDocumentationToPageTranslator CoreExtensions.pageTransformer -> DefaultPageNodeMerger(fullContext) diff --git a/core/src/main/kotlin/transformers/documentation/DefaultDocumentationNodeMerger.kt b/core/src/main/kotlin/transformers/documentation/DefaultDocumentationNodeMerger.kt deleted file mode 100644 index 0d7fa249..00000000 --- a/core/src/main/kotlin/transformers/documentation/DefaultDocumentationNodeMerger.kt +++ /dev/null @@ -1,114 +0,0 @@ -package org.jetbrains.dokka.transformers.documentation - -import org.jetbrains.dokka.model.* -import org.jetbrains.dokka.model.Enum -import org.jetbrains.dokka.model.Function -import org.jetbrains.dokka.plugability.DokkaContext - -internal object DefaultDocumentationNodeMerger : DocumentationNodeMerger { - override fun invoke(modules: Collection, context: DokkaContext): Module { - if (!modules.all { it.name == modules.first().name }) - context.logger.error("All module names need to be the same") - return Module( - modules.first().name, - merge( - modules.flatMap { it.packages }, - Package::mergeWith - ) - ) - } -} - -private fun merge(elements: List, reducer: (T, T) -> T): List = - elements.groupingBy { it.dri } - .reduce { _, left, right -> reducer(left, right) } - .values.toList() - -fun PlatformInfo.mergeWith(other: PlatformInfo?) = BasePlatformInfo( - documentationNode, - (platformData + (other?.platformData ?: emptyList())).distinct() -) - -fun ClassPlatformInfo.mergeWith(other: ClassPlatformInfo?) = ClassPlatformInfo( - info.mergeWith(other?.info), - (inherited + (other?.inherited ?: emptyList())).distinct() -) - -fun List.mergeClassPlatformInfo(): List = - groupingBy { it.documentationNode.children + it.inherited }.reduce { _, left, right -> - left.mergeWith(right) - }.values.toList() - -fun List.merge(): List = - groupingBy { it.documentationNode }.reduce { _, left, right -> - left.mergeWith(right) - }.values.toList() - -fun Function.mergeWith(other: Function): Function = Function( - dri, - name, - returnType, - isConstructor, - if (receiver != null && other.receiver != null) receiver.mergeWith(other.receiver) else null, - merge(parameters + other.parameters, Parameter::mergeWith), - expected?.mergeWith(other.expected), - (actual + other.actual).merge(), - visibility = (visibility + other.visibility) -) - -fun Property.mergeWith(other: Property) = Property( - dri, - name, - if (receiver != null && other.receiver != null) receiver.mergeWith(other.receiver) else null, - expected?.mergeWith(other.expected), - (actual + other.actual).merge(), - accessors = (this.accessors + other.accessors).distinct(), - visibility = (visibility + other.visibility) -) - -fun Classlike.mergeWith(other: Classlike): Classlike = when { - this is Class && other is Class -> mergeWith(other) - this is Enum && other is Enum -> mergeWith(other) - else -> throw IllegalStateException("${this::class.qualifiedName} ${this.name} cannot be merged with ${other::class.qualifiedName} ${other.name}") -} - -fun Class.mergeWith(other: Class) = Class( - dri = dri, - name = name, - kind = kind, - constructors = merge(constructors + other.constructors, Function::mergeWith), - functions = merge(functions + other.functions, Function::mergeWith), - properties = merge(properties + other.properties, Property::mergeWith), - classlikes = merge(classlikes + other.classlikes, Classlike::mergeWith), - expected = expected?.mergeWith(other.expected), - actual = (actual + other.actual).mergeClassPlatformInfo(), - visibility = (visibility + other.visibility) -) - -fun Enum.mergeWith(other: Enum) = Enum( - dri = dri, - name = name, - functions = merge(functions + other.functions, Function::mergeWith), - properties = merge(properties + other.properties, Property::mergeWith), - classlikes = merge(classlikes + other.classlikes, Classlike::mergeWith), - expected = expected?.mergeWith(other.expected), - actual = (actual + other.actual).mergeClassPlatformInfo(), - entries = (this.entries + other.entries.distinctBy { it.dri }.toList()), - constructors = merge(constructors + other.constructors, Function::mergeWith), - visibility = visibility -) - -fun Parameter.mergeWith(other: Parameter) = Parameter( - dri, - name, - type, - expected?.mergeWith(other.expected), - (actual + other.actual).merge() -) - -fun Package.mergeWith(other: Package): Package = Package( - dri, - merge(functions + other.functions, Function::mergeWith), - merge(properties + other.properties, Property::mergeWith), - merge(classlikes + other.classlikes, Classlike::mergeWith) -) \ No newline at end of file diff --git a/core/src/main/kotlin/transformers/documentation/DocumentableMerger.kt b/core/src/main/kotlin/transformers/documentation/DocumentableMerger.kt new file mode 100644 index 00000000..5a17bc24 --- /dev/null +++ b/core/src/main/kotlin/transformers/documentation/DocumentableMerger.kt @@ -0,0 +1,8 @@ +package org.jetbrains.dokka.transformers.documentation + +import org.jetbrains.dokka.model.Module +import org.jetbrains.dokka.plugability.DokkaContext + +interface DocumentableMerger { + operator fun invoke(modules: Collection, context: DokkaContext): Module +} \ No newline at end of file diff --git a/core/src/main/kotlin/transformers/documentation/DocumentationNodeMerger.kt b/core/src/main/kotlin/transformers/documentation/DocumentationNodeMerger.kt deleted file mode 100644 index 25be625e..00000000 --- a/core/src/main/kotlin/transformers/documentation/DocumentationNodeMerger.kt +++ /dev/null @@ -1,8 +0,0 @@ -package org.jetbrains.dokka.transformers.documentation - -import org.jetbrains.dokka.model.Module -import org.jetbrains.dokka.plugability.DokkaContext - -interface DocumentationNodeMerger { - operator fun invoke(modules: Collection, context: DokkaContext): Module -} \ No newline at end of file diff --git a/core/src/main/kotlin/utilities/genericUtils.kt b/core/src/main/kotlin/utilities/genericUtils.kt new file mode 100644 index 00000000..e94e4e8f --- /dev/null +++ b/core/src/main/kotlin/utilities/genericUtils.kt @@ -0,0 +1,3 @@ +package org.jetbrains.dokka.utilities + +fun Pair.pullOutNull(): Pair? = first?.let { f -> second?.let { s -> f to s } } \ No newline at end of file diff --git a/plugins/base/src/main/kotlin/DokkaBase.kt b/plugins/base/src/main/kotlin/DokkaBase.kt index 648acfbb..b18e2ad5 100644 --- a/plugins/base/src/main/kotlin/DokkaBase.kt +++ b/plugins/base/src/main/kotlin/DokkaBase.kt @@ -2,10 +2,15 @@ package org.jetbrains.dokka.base import org.jetbrains.dokka.CoreExtensions import org.jetbrains.dokka.base.transformers.descriptors.DefaultDescriptorToDocumentationTranslator +import org.jetbrains.dokka.base.transformers.documentables.DefaultDocumentableMerger import org.jetbrains.dokka.plugability.DokkaPlugin class DokkaBase: DokkaPlugin() { val defaultDescriptorToDocumentationTranslator by extending(isFallback = true) { CoreExtensions.descriptorToDocumentationTranslator providing ::DefaultDescriptorToDocumentationTranslator } + + val defaultDocumentableMerger by extending(isFallback = true) { + CoreExtensions.documentableMerger with DefaultDocumentableMerger + } } \ No newline at end of file diff --git a/plugins/base/src/main/kotlin/transformers/documentables/DefaultDocumentableMerger.kt b/plugins/base/src/main/kotlin/transformers/documentables/DefaultDocumentableMerger.kt new file mode 100644 index 00000000..f2e6f177 --- /dev/null +++ b/plugins/base/src/main/kotlin/transformers/documentables/DefaultDocumentableMerger.kt @@ -0,0 +1,116 @@ +package org.jetbrains.dokka.base.transformers.documentables + +import org.jetbrains.dokka.model.* +import org.jetbrains.dokka.model.Enum +import org.jetbrains.dokka.model.Function +import org.jetbrains.dokka.plugability.DokkaContext +import org.jetbrains.dokka.transformers.documentation.DocumentableMerger +import org.jetbrains.dokka.utilities.pullOutNull + +internal object DefaultDocumentableMerger : DocumentableMerger { + override fun invoke(modules: Collection, context: DokkaContext): Module { + if (!modules.all { it.name == modules.first().name }) + context.logger.error("All module names need to be the same") + return Module( + modules.first().name, + merge( + modules.flatMap { it.packages }, + Package::mergeWith + ) + ) + } +} + +private fun merge(elements: List, reducer: (T, T) -> T): List = + elements.groupingBy { it.dri } + .reduce { _, left, right -> reducer(left, right) } + .values.toList() + +fun PlatformInfo.mergeWith(other: PlatformInfo?) = BasePlatformInfo( + documentationNode, + (platformData + (other?.platformData ?: emptyList())).distinct() +) + +fun ClassPlatformInfo.mergeWith(other: ClassPlatformInfo?) = ClassPlatformInfo( + info.mergeWith(other?.info), + (inherited + (other?.inherited ?: emptyList())).distinct() +) + +fun List.mergeClassPlatformInfo(): List = + groupingBy { it.documentationNode.children + it.inherited }.reduce { _, left, right -> + left.mergeWith(right) + }.values.toList() + +fun List.merge(): List = + groupingBy { it.documentationNode }.reduce { _, left, right -> + left.mergeWith(right) + }.values.toList() + +fun Function.mergeWith(other: Function): Function = Function( + dri, + name, + returnType, + isConstructor, + (receiver to other.receiver).pullOutNull()?.let { (f, s) -> f.mergeWith(s) }, + merge(parameters + other.parameters, Parameter::mergeWith), + expected?.mergeWith(other.expected), + (actual + other.actual).merge(), + visibility = (visibility + other.visibility) +) + +fun Property.mergeWith(other: Property) = Property( + dri, + name, + (receiver to other.receiver).pullOutNull()?.let { (f, s) -> f.mergeWith(s) }, + expected?.mergeWith(other.expected), + (actual + other.actual).merge(), + accessors = (this.accessors + other.accessors).distinct(), + visibility = (visibility + other.visibility) +) + +fun Classlike.mergeWith(other: Classlike): Classlike = when { + this is Class && other is Class -> mergeWith(other) + this is Enum && other is Enum -> mergeWith(other) + else -> throw IllegalStateException("${this::class.qualifiedName} ${this.name} cannot be merged with ${other::class.qualifiedName} ${other.name}") +} + +fun Class.mergeWith(other: Class) = Class( + dri = dri, + name = name, + kind = kind, + constructors = merge(constructors + other.constructors, Function::mergeWith), + functions = merge(functions + other.functions, Function::mergeWith), + properties = merge(properties + other.properties, Property::mergeWith), + classlikes = merge(classlikes + other.classlikes, Classlike::mergeWith), + expected = expected?.mergeWith(other.expected), + actual = (actual + other.actual).mergeClassPlatformInfo(), + visibility = (visibility + other.visibility) +) + +fun Enum.mergeWith(other: Enum) = Enum( + dri = dri, + name = name, + functions = merge(functions + other.functions, Function::mergeWith), + properties = merge(properties + other.properties, Property::mergeWith), + classlikes = merge(classlikes + other.classlikes, Classlike::mergeWith), + expected = expected?.mergeWith(other.expected), + actual = (actual + other.actual).mergeClassPlatformInfo(), + entries = (this.entries + other.entries.distinctBy { it.dri }.toList()), + constructors = merge(constructors + other.constructors, Function::mergeWith), + visibility = visibility +) + +fun Parameter.mergeWith(other: Parameter) = Parameter( + dri, + name, + type, + expected?.mergeWith(other.expected), + (actual + other.actual).merge() +) + +fun Package.mergeWith(other: Package): Package = Package( + dri, + merge(functions + other.functions, Function::mergeWith), + merge(properties + other.properties, Property::mergeWith), + merge(classlikes + other.classlikes, Classlike::mergeWith) +) \ No newline at end of file -- cgit From 3b200cf10e0c50c2eee4b9da3f7039d678fa4aad Mon Sep 17 00:00:00 2001 From: Paweł Marks Date: Sun, 16 Feb 2020 23:20:17 +0100 Subject: Renames DocumentationToPagesTranslatero and moves its implementation to base plugin --- core/src/main/kotlin/CoreExtensions.kt | 4 +- core/src/main/kotlin/DokkaGenerator.kt | 2 +- core/src/main/kotlin/pages/PageBuilder.kt | 158 --------------- core/src/main/kotlin/pages/PageContentBuilder.kt | 215 -------------------- .../main/kotlin/plugability/DefaultExtensions.kt | 2 - .../DefaultDocumentationToPageTranslator.kt | 23 --- .../documentation/DocumentablesToPageTranslator.kt | 9 + .../documentation/DocumentationToPageTranslator.kt | 9 - plugins/base/src/main/kotlin/DokkaBase.kt | 9 +- .../DefaultDocumentablesToPageTranslator.kt | 22 +++ .../transformers/documentables/PageBuilder.kt | 159 +++++++++++++++ .../documentables/PageContentBuilder.kt | 217 +++++++++++++++++++++ .../src/main/kotlin/KotlinAsJavaPageBuilder.kt | 2 + .../main/kotlin/KotlinAsJavaPageContentBuilder.kt | 17 +- .../src/main/kotlin/KotlinAsJavaPlugin.kt | 6 +- 15 files changed, 432 insertions(+), 422 deletions(-) delete mode 100644 core/src/main/kotlin/pages/PageBuilder.kt delete mode 100644 core/src/main/kotlin/pages/PageContentBuilder.kt delete mode 100644 core/src/main/kotlin/transformers/documentation/DefaultDocumentationToPageTranslator.kt create mode 100644 core/src/main/kotlin/transformers/documentation/DocumentablesToPageTranslator.kt delete mode 100644 core/src/main/kotlin/transformers/documentation/DocumentationToPageTranslator.kt create mode 100644 plugins/base/src/main/kotlin/transformers/documentables/DefaultDocumentablesToPageTranslator.kt create mode 100644 plugins/base/src/main/kotlin/transformers/documentables/PageBuilder.kt create mode 100644 plugins/base/src/main/kotlin/transformers/documentables/PageContentBuilder.kt (limited to 'plugins/base/src/main/kotlin/DokkaBase.kt') diff --git a/core/src/main/kotlin/CoreExtensions.kt b/core/src/main/kotlin/CoreExtensions.kt index 47f2e4c1..8ae333ee 100644 --- a/core/src/main/kotlin/CoreExtensions.kt +++ b/core/src/main/kotlin/CoreExtensions.kt @@ -8,7 +8,7 @@ import org.jetbrains.dokka.resolvers.LocationProviderFactory import org.jetbrains.dokka.transformers.descriptors.DescriptorToDocumentationTranslator import org.jetbrains.dokka.transformers.documentation.DocumentableMerger import org.jetbrains.dokka.transformers.documentation.DocumentationNodeTransformer -import org.jetbrains.dokka.transformers.documentation.DocumentationToPageTranslator +import org.jetbrains.dokka.transformers.documentation.DocumentablesToPageTranslator import org.jetbrains.dokka.transformers.pages.PageMergerStrategy import org.jetbrains.dokka.transformers.pages.PageNodeTransformer import org.jetbrains.dokka.transformers.psi.PsiToDocumentationTranslator @@ -25,7 +25,7 @@ object CoreExtensions { val documentableMerger by coreExtension() val documentationTransformer by coreExtension() val commentsToContentConverter by coreExtension() - val documentationToPageTranslator by coreExtension() + val documentablesToPageTranslator by coreExtension() val pageTransformer by coreExtension() val locationProviderFactory by coreExtension() val outputWriter by coreExtension() diff --git a/core/src/main/kotlin/DokkaGenerator.kt b/core/src/main/kotlin/DokkaGenerator.kt index 1829c9e4..1ad93f4f 100644 --- a/core/src/main/kotlin/DokkaGenerator.kt +++ b/core/src/main/kotlin/DokkaGenerator.kt @@ -88,7 +88,7 @@ class DokkaGenerator( fun createPages( transformedDocumentation: Module, context: DokkaContext - ) = context.single(CoreExtensions.documentationToPageTranslator).invoke(transformedDocumentation, context) + ) = context.single(CoreExtensions.documentablesToPageTranslator).invoke(transformedDocumentation, context) fun transformPages( pages: RootPageNode, diff --git a/core/src/main/kotlin/pages/PageBuilder.kt b/core/src/main/kotlin/pages/PageBuilder.kt deleted file mode 100644 index eb6f5e21..00000000 --- a/core/src/main/kotlin/pages/PageBuilder.kt +++ /dev/null @@ -1,158 +0,0 @@ -package org.jetbrains.dokka.pages - -import org.jetbrains.dokka.model.* -import org.jetbrains.dokka.model.Enum -import org.jetbrains.dokka.model.Function -import org.jetbrains.dokka.model.doc.TagWrapper - -open class DefaultPageBuilder( - override val rootContentGroup: RootContentBuilder -) : PageBuilder { - - override fun pageForModule(m: Module): ModulePageNode = - ModulePageNode(m.name.ifEmpty { "root" }, contentForModule(m), m, m.packages.map { pageForPackage(it) }) - - override fun pageForPackage(p: Package) = - PackagePageNode(p.name, contentForPackage(p), setOf(p.dri), p, - p.classlikes.map { pageForClasslike(it) } + - p.functions.map { pageForMember(it) }) - - override fun pageForClasslike(c: Classlike): ClasslikePageNode { - val constructors = when (c) { - is Class -> c.constructors - is Enum -> c.constructors - else -> emptyList() - } - - return ClasslikePageNode(c.name, contentForClasslike(c), setOf(c.dri), c, - constructors.map { pageForMember(it) } + - c.classlikes.map { pageForClasslike(it) } + - c.functions.map { pageForMember(it) }) - } - - override fun pageForMember(m: CallableNode): MemberPageNode = - when (m) { - is Function -> - MemberPageNode(m.name, contentForFunction(m), setOf(m.dri), m) - else -> throw IllegalStateException("$m should not be present here") - } - - protected open fun group(node: Documentable, content: PageContentBuilderFunction) = - rootContentGroup(node, ContentKind.Main, content) - - protected open fun contentForModule(m: Module) = group(m) { - header(1) { text("root") } - block("Packages", 2, ContentKind.Packages, m.packages, m.platformData) { - link(it.name, it.dri) - } - text("Index\n") - text("Link to allpage here") - } - - protected open fun contentForPackage(p: Package) = group(p) { - header(1) { text("Package ${p.name}") } - block("Types", 2, ContentKind.Properties, p.classlikes, p.platformData) { - link(it.name, it.dri) - text(it.briefDocTagString) - } - block("Functions", 2, ContentKind.Functions, p.functions, p.platformData) { - link(it.name, it.dri) - signature(it) - text(it.briefDocTagString) - } - } - - open fun contentForClasslike(c: Classlike): ContentGroup = when (c) { - is Class -> contentForClass(c) - is Enum -> contentForEnum(c) - else -> throw IllegalStateException("$c should not be present here") - } - - protected fun contentForClass(c: Class) = group(c) { - header(1) { text(c.name) } - - c.inherited.takeIf { it.isNotEmpty() }?.let { - header(2) { text("SuperInterfaces") } - linkTable(it) - } - contentForComments(c) - block("Constructors", 2, ContentKind.Functions, c.constructors, c.platformData) { - link(it.name, it.dri) - signature(it) - text(it.briefDocTagString) - } - block("Functions", 2, ContentKind.Functions, c.functions, c.platformData) { - link(it.name, it.dri) - signature(it) - text(it.briefDocTagString) - } - block("Properties", 2, ContentKind.Properties, c.properties, c.platformData) { - link(it.name, it.dri) - text(it.briefDocTagString) - - } - } - - fun contentForEnum(c: Enum): ContentGroup = group(c) { - header(1) { text("enum ${c.name}") } - - block("Entries", 2, ContentKind.Properties, c.entries, c.platformData) { entry -> - link(entry.name, entry.dri) - contentForComments(entry) - } - - c.inherited.takeIf { it.isNotEmpty() }?.let { - header(2) { text("SuperInterfaces") } - linkTable(it) - } - contentForComments(c) - block("Constructors", 2, ContentKind.Functions, c.constructors, c.platformData) { - link(it.name, it.dri) - signature(it) - text(it.briefDocTagString) - } - block("Functions", 2, ContentKind.Functions, c.functions, c.platformData) { - link(it.name, it.dri) - signature(it) - text(it.briefDocTagString) - } - block("Properties", 2, ContentKind.Properties, c.properties, c.platformData) { - link(it.name, it.dri) - text(it.briefDocTagString) - } - } - - private fun PageContentBuilder.contentForComments(d: Documentable) = - d.platformInfo.forEach { platformInfo -> - platformInfo.documentationNode.children.forEach { - header(3) { - text(it.toHeaderString()) - text(" [${platformInfo.platformData.joinToString(", ") { it.platformType.name }}]") - } - comment(it.root) - text("\n") - } - } - - private fun contentForFunction(f: Function) = group(f) { - header(1) { text(f.name) } - signature(f) - contentForComments(f) - block("Parameters", 2, ContentKind.Parameters, f.children, f.platformData) { - text(it.name ?: "") - it.platformInfo.forEach { it.documentationNode.children.forEach { comment(it.root) } } - } - } - - private fun TagWrapper.toHeaderString() = this.javaClass.toGenericString().split('.').last() -} - -typealias RootContentBuilder = (Documentable, Kind, PageContentBuilderFunction) -> ContentGroup - -interface PageBuilder { - val rootContentGroup: RootContentBuilder - fun pageForModule(m: Module): ModulePageNode - fun pageForPackage(p: Package): PackagePageNode - fun pageForMember(m: CallableNode): MemberPageNode - fun pageForClasslike(c: Classlike): ClasslikePageNode -} \ No newline at end of file diff --git a/core/src/main/kotlin/pages/PageContentBuilder.kt b/core/src/main/kotlin/pages/PageContentBuilder.kt deleted file mode 100644 index ed0a0fea..00000000 --- a/core/src/main/kotlin/pages/PageContentBuilder.kt +++ /dev/null @@ -1,215 +0,0 @@ -package org.jetbrains.dokka.pages - -import org.jetbrains.dokka.links.DRI -import org.jetbrains.dokka.model.Documentable -import org.jetbrains.dokka.model.Function -import org.jetbrains.dokka.model.Parameter -import org.jetbrains.dokka.model.TypeWrapper -import org.jetbrains.dokka.model.doc.DocTag -import org.jetbrains.dokka.utilities.DokkaLogger - -open class DefaultPageContentBuilder( - private val dri: Set, - private val platformData: Set, - private val kind: Kind, - private val commentsConverter: CommentsToContentConverter, - open val logger: DokkaLogger, - private val styles: Set\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","/* eslint-env node, browser */\n'use strict'\n\nmodule.exports = function (element, options) {\n var self = this\n var Combokeys = self.constructor\n\n /**\n * an object of passed options\n *\n * @type { storeInstancesGlobally?: true }\n */\n\n self.options = Object.assign({ storeInstancesGlobally: true }, options || {})\n\n /**\n * a list of all the callbacks setup via Combokeys.bind()\n *\n * @type {Object}\n */\n self.callbacks = {}\n\n /**\n * direct map of string combinations to callbacks used for trigger()\n *\n * @type {Object}\n */\n self.directMap = {}\n\n /**\n * keeps track of what level each sequence is at since multiple\n * sequences can start out with the same sequence\n *\n * @type {Object}\n */\n self.sequenceLevels = {}\n\n /**\n * variable to store the setTimeout call\n *\n * @type {null|number}\n */\n self.resetTimer = null\n\n /**\n * temporary state where we will ignore the next keyup\n *\n * @type {boolean|string}\n */\n self.ignoreNextKeyup = false\n\n /**\n * temporary state where we will ignore the next keypress\n *\n * @type {boolean}\n */\n self.ignoreNextKeypress = false\n\n /**\n * are we currently inside of a sequence?\n * type of action (\"keyup\" or \"keydown\" or \"keypress\") or false\n *\n * @type {boolean|string}\n */\n self.nextExpectedAction = false\n\n self.element = element\n\n self.addEvents()\n\n if (self.options.storeInstancesGlobally) {\n Combokeys.instances.push(self)\n }\n\n return self\n}\n\nmodule.exports.prototype.bind = require('./prototype/bind')\nmodule.exports.prototype.bindMultiple = require('./prototype/bindMultiple')\nmodule.exports.prototype.unbind = require('./prototype/unbind')\nmodule.exports.prototype.trigger = require('./prototype/trigger')\nmodule.exports.prototype.reset = require('./prototype/reset.js')\nmodule.exports.prototype.stopCallback = require('./prototype/stopCallback')\nmodule.exports.prototype.handleKey = require('./prototype/handleKey')\nmodule.exports.prototype.addEvents = require('./prototype/addEvents')\nmodule.exports.prototype.bindSingle = require('./prototype/bindSingle')\nmodule.exports.prototype.getKeyInfo = require('./prototype/getKeyInfo')\nmodule.exports.prototype.pickBestAction = require('./prototype/pickBestAction')\nmodule.exports.prototype.getReverseMap = require('./prototype/getReverseMap')\nmodule.exports.prototype.getMatches = require('./prototype/getMatches')\nmodule.exports.prototype.resetSequences = require('./prototype/resetSequences')\nmodule.exports.prototype.fireCallback = require('./prototype/fireCallback')\nmodule.exports.prototype.bindSequence = require('./prototype/bindSequence')\nmodule.exports.prototype.resetSequenceTimer = require('./prototype/resetSequenceTimer')\nmodule.exports.prototype.detach = require('./prototype/detach')\n\nmodule.exports.instances = []\nmodule.exports.reset = require('./reset')\n\n/**\n * variable to store the flipped version of MAP from above\n * needed to check if we should use keypress or not when no action\n * is specified\n *\n * @type {Object|undefined}\n */\nmodule.exports.REVERSE_MAP = null\n","module.exports = { \"default\": require(\"core-js/library/fn/object/get-own-property-descriptor\"), __esModule: true };","\"use strict\";\n\nexports.__esModule = true;\n\nexports.default = function (obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n};","module.exports = { \"default\": require(\"core-js/library/fn/promise\"), __esModule: true };","var _typeof = require(\"../helpers/typeof\");\n\nvar assertThisInitialized = require(\"./assertThisInitialized\");\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}\n\nmodule.exports = _possibleConstructorReturn;","function _getPrototypeOf(o) {\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nmodule.exports = _getPrototypeOf;","var setPrototypeOf = require(\"./setPrototypeOf\");\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inherits;","var content = require(\"!!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!./global.css\");\ncontent = content.__esModule ? content.default : content;\n\nif (typeof content === 'string') {\n content = [[module.id, content, '']];\n}\n\nvar options = {}\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = require(\"!../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\")(content, options);\n\nif (content.locals) {\n module.exports = content.locals;\n}\n","/** @license React v16.13.1\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\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 l=require(\"object-assign\"),n=\"function\"===typeof Symbol&&Symbol.for,p=n?Symbol.for(\"react.element\"):60103,q=n?Symbol.for(\"react.portal\"):60106,r=n?Symbol.for(\"react.fragment\"):60107,t=n?Symbol.for(\"react.strict_mode\"):60108,u=n?Symbol.for(\"react.profiler\"):60114,v=n?Symbol.for(\"react.provider\"):60109,w=n?Symbol.for(\"react.context\"):60110,x=n?Symbol.for(\"react.forward_ref\"):60112,y=n?Symbol.for(\"react.suspense\"):60113,z=n?Symbol.for(\"react.memo\"):60115,A=n?Symbol.for(\"react.lazy\"):\n60116,B=\"function\"===typeof Symbol&&Symbol.iterator;function C(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cQ.length&&Q.push(a)}\nfunction T(a,b,c,e){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 p:case q:g=!0}}if(g)return c(e,a,\"\"===b?\".\"+U(a,0):b),1;g=0;b=\"\"===b?\".\":b+\":\";if(Array.isArray(a))for(var k=0;kb}return!1}function v(a,b,c,d,e,f){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f}var C={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){C[a]=new v(a,0,!1,a,null,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];C[b]=new v(b,1,!1,a[1],null,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){C[a]=new v(a,2,!1,a.toLowerCase(),null,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){C[a]=new v(a,2,!1,a,null,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){C[a]=new v(a,3,!1,a.toLowerCase(),null,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){C[a]=new v(a,3,!0,a,null,!1)});[\"capture\",\"download\"].forEach(function(a){C[a]=new v(a,4,!1,a,null,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){C[a]=new v(a,6,!1,a,null,!1)});[\"rowSpan\",\"start\"].forEach(function(a){C[a]=new v(a,5,!1,a.toLowerCase(),null,!1)});var Ua=/[\\-:]([a-z])/g;function Va(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(Ua,\nVa);C[b]=new v(b,1,!1,a,null,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(Ua,Va);C[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(Ua,Va);C[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){C[a]=new v(a,1,!1,a.toLowerCase(),null,!1)});\nC.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){C[a]=new v(a,1,!1,a.toLowerCase(),null,!0)});var Wa=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;Wa.hasOwnProperty(\"ReactCurrentDispatcher\")||(Wa.ReactCurrentDispatcher={current:null});Wa.hasOwnProperty(\"ReactCurrentBatchConfig\")||(Wa.ReactCurrentBatchConfig={suspense:null});\nfunction Xa(a,b,c,d){var e=C.hasOwnProperty(b)?C[b]:null;var f=null!==e?0===e.type:d?!1:!(2=c.length))throw Error(u(93));c=c[0]}b=c}null==b&&(b=\"\");c=b}a._wrapperState={initialValue:rb(c)}}\nfunction Kb(a,b){var c=rb(b.value),d=rb(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function Lb(a){var b=a.textContent;b===a._wrapperState.initialValue&&\"\"!==b&&null!==b&&(a.value=b)}var Mb={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction Nb(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 Ob(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?Nb(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar Pb,Qb=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!==Mb.svg||\"innerHTML\"in a)a.innerHTML=b;else{Pb=Pb||document.createElement(\"div\");Pb.innerHTML=\"\"+b.valueOf().toString()+\"\";for(b=Pb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction Rb(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}function Sb(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c[\"Webkit\"+a]=\"webkit\"+b;c[\"Moz\"+a]=\"moz\"+b;return c}var Tb={animationend:Sb(\"Animation\",\"AnimationEnd\"),animationiteration:Sb(\"Animation\",\"AnimationIteration\"),animationstart:Sb(\"Animation\",\"AnimationStart\"),transitionend:Sb(\"Transition\",\"TransitionEnd\")},Ub={},Vb={};\nya&&(Vb=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete Tb.animationend.animation,delete Tb.animationiteration.animation,delete Tb.animationstart.animation),\"TransitionEvent\"in window||delete Tb.transitionend.transition);function Wb(a){if(Ub[a])return Ub[a];if(!Tb[a])return a;var b=Tb[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Vb)return Ub[a]=b[c];return a}\nvar Xb=Wb(\"animationend\"),Yb=Wb(\"animationiteration\"),Zb=Wb(\"animationstart\"),$b=Wb(\"transitionend\"),ac=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),bc=new (\"function\"===typeof WeakMap?WeakMap:Map);function cc(a){var b=bc.get(a);void 0===b&&(b=new Map,bc.set(a,b));return b}\nfunction dc(a){var b=a,c=a;if(a.alternate)for(;b.return;)b=b.return;else{a=b;do b=a,0!==(b.effectTag&1026)&&(c=b.return),a=b.return;while(a)}return 3===b.tag?c:null}function ec(a){if(13===a.tag){var b=a.memoizedState;null===b&&(a=a.alternate,null!==a&&(b=a.memoizedState));if(null!==b)return b.dehydrated}return null}function fc(a){if(dc(a)!==a)throw Error(u(188));}\nfunction gc(a){var b=a.alternate;if(!b){b=dc(a);if(null===b)throw Error(u(188));return b!==a?null:a}for(var c=a,d=b;;){var e=c.return;if(null===e)break;var f=e.alternate;if(null===f){d=e.return;if(null!==d){c=d;continue}break}if(e.child===f.child){for(f=e.child;f;){if(f===c)return fc(e),a;if(f===d)return fc(e),b;f=f.sibling}throw Error(u(188));}if(c.return!==d.return)c=e,d=f;else{for(var g=!1,h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=f.child;h;){if(h===\nc){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}if(!g)throw Error(u(189));}}if(c.alternate!==d)throw Error(u(190));}if(3!==c.tag)throw Error(u(188));return c.stateNode.current===c?a:b}function hc(a){a=gc(a);if(!a)return null;for(var b=a;;){if(5===b.tag||6===b.tag)return b;if(b.child)b.child.return=b,b=b.child;else{if(b===a)break;for(;!b.sibling;){if(!b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}}return null}\nfunction ic(a,b){if(null==b)throw Error(u(30));if(null==a)return b;if(Array.isArray(a)){if(Array.isArray(b))return a.push.apply(a,b),a;a.push(b);return a}return Array.isArray(b)?[a].concat(b):[a,b]}function jc(a,b,c){Array.isArray(a)?a.forEach(b,c):a&&b.call(c,a)}var kc=null;\nfunction lc(a){if(a){var b=a._dispatchListeners,c=a._dispatchInstances;if(Array.isArray(b))for(var d=0;dpc.length&&pc.push(a)}\nfunction rc(a,b,c,d){if(pc.length){var e=pc.pop();e.topLevelType=a;e.eventSystemFlags=d;e.nativeEvent=b;e.targetInst=c;return e}return{topLevelType:a,eventSystemFlags:d,nativeEvent:b,targetInst:c,ancestors:[]}}\nfunction sc(a){var b=a.targetInst,c=b;do{if(!c){a.ancestors.push(c);break}var d=c;if(3===d.tag)d=d.stateNode.containerInfo;else{for(;d.return;)d=d.return;d=3!==d.tag?null:d.stateNode.containerInfo}if(!d)break;b=c.tag;5!==b&&6!==b||a.ancestors.push(c);c=tc(d)}while(c);for(c=0;c=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=ud(c)}}\nfunction wd(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?wd(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}function xd(){for(var a=window,b=td();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=td(a.document)}return b}\nfunction yd(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}var zd=\"$\",Ad=\"/$\",Bd=\"$?\",Cd=\"$!\",Dd=null,Ed=null;function Fd(a,b){switch(a){case \"button\":case \"input\":case \"select\":case \"textarea\":return!!b.autoFocus}return!1}\nfunction Gd(a,b){return\"textarea\"===a||\"option\"===a||\"noscript\"===a||\"string\"===typeof b.children||\"number\"===typeof b.children||\"object\"===typeof b.dangerouslySetInnerHTML&&null!==b.dangerouslySetInnerHTML&&null!=b.dangerouslySetInnerHTML.__html}var Hd=\"function\"===typeof setTimeout?setTimeout:void 0,Id=\"function\"===typeof clearTimeout?clearTimeout:void 0;function Jd(a){for(;null!=a;a=a.nextSibling){var b=a.nodeType;if(1===b||3===b)break}return a}\nfunction Kd(a){a=a.previousSibling;for(var b=0;a;){if(8===a.nodeType){var c=a.data;if(c===zd||c===Cd||c===Bd){if(0===b)return a;b--}else c===Ad&&b++}a=a.previousSibling}return null}var Ld=Math.random().toString(36).slice(2),Md=\"__reactInternalInstance$\"+Ld,Nd=\"__reactEventHandlers$\"+Ld,Od=\"__reactContainere$\"+Ld;\nfunction tc(a){var b=a[Md];if(b)return b;for(var c=a.parentNode;c;){if(b=c[Od]||c[Md]){c=b.alternate;if(null!==b.child||null!==c&&null!==c.child)for(a=Kd(a);null!==a;){if(c=a[Md])return c;a=Kd(a)}return b}a=c;c=a.parentNode}return null}function Nc(a){a=a[Md]||a[Od];return!a||5!==a.tag&&6!==a.tag&&13!==a.tag&&3!==a.tag?null:a}function Pd(a){if(5===a.tag||6===a.tag)return a.stateNode;throw Error(u(33));}function Qd(a){return a[Nd]||null}\nfunction Rd(a){do a=a.return;while(a&&5!==a.tag);return a?a:null}\nfunction Sd(a,b){var c=a.stateNode;if(!c)return null;var d=la(c);if(!d)return null;c=d[b];a:switch(b){case \"onClick\":case \"onClickCapture\":case \"onDoubleClick\":case \"onDoubleClickCapture\":case \"onMouseDown\":case \"onMouseDownCapture\":case \"onMouseMove\":case \"onMouseMoveCapture\":case \"onMouseUp\":case \"onMouseUpCapture\":case \"onMouseEnter\":(d=!d.disabled)||(a=a.type,d=!(\"button\"===a||\"input\"===a||\"select\"===a||\"textarea\"===a));a=!d;break a;default:a=!1}if(a)return null;if(c&&\"function\"!==typeof c)throw Error(u(231,\nb,typeof c));return c}function Td(a,b,c){if(b=Sd(a,c.dispatchConfig.phasedRegistrationNames[b]))c._dispatchListeners=ic(c._dispatchListeners,b),c._dispatchInstances=ic(c._dispatchInstances,a)}function Ud(a){if(a&&a.dispatchConfig.phasedRegistrationNames){for(var b=a._targetInst,c=[];b;)c.push(b),b=Rd(b);for(b=c.length;0this.eventPool.length&&this.eventPool.push(a)}function de(a){a.eventPool=[];a.getPooled=ee;a.release=fe}var ge=G.extend({data:null}),he=G.extend({data:null}),ie=[9,13,27,32],je=ya&&\"CompositionEvent\"in window,ke=null;ya&&\"documentMode\"in document&&(ke=document.documentMode);\nvar le=ya&&\"TextEvent\"in window&&!ke,me=ya&&(!je||ke&&8=ke),ne=String.fromCharCode(32),oe={beforeInput:{phasedRegistrationNames:{bubbled:\"onBeforeInput\",captured:\"onBeforeInputCapture\"},dependencies:[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]},compositionEnd:{phasedRegistrationNames:{bubbled:\"onCompositionEnd\",captured:\"onCompositionEndCapture\"},dependencies:\"blur compositionend keydown keypress keyup mousedown\".split(\" \")},compositionStart:{phasedRegistrationNames:{bubbled:\"onCompositionStart\",\ncaptured:\"onCompositionStartCapture\"},dependencies:\"blur compositionstart keydown keypress keyup mousedown\".split(\" \")},compositionUpdate:{phasedRegistrationNames:{bubbled:\"onCompositionUpdate\",captured:\"onCompositionUpdateCapture\"},dependencies:\"blur compositionupdate keydown keypress keyup mousedown\".split(\" \")}},pe=!1;\nfunction qe(a,b){switch(a){case \"keyup\":return-1!==ie.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"blur\":return!0;default:return!1}}function re(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var se=!1;function te(a,b){switch(a){case \"compositionend\":return re(b);case \"keypress\":if(32!==b.which)return null;pe=!0;return ne;case \"textInput\":return a=b.data,a===ne&&pe?null:a;default:return null}}\nfunction ue(a,b){if(se)return\"compositionend\"===a||!je&&qe(a,b)?(a=ae(),$d=Zd=Yd=null,se=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=document.documentMode,df={select:{phasedRegistrationNames:{bubbled:\"onSelect\",captured:\"onSelectCapture\"},dependencies:\"blur contextmenu dragend focus keydown keyup mousedown mouseup selectionchange\".split(\" \")}},ef=null,ff=null,gf=null,hf=!1;\nfunction jf(a,b){var c=b.window===b?b.document:9===b.nodeType?b:b.ownerDocument;if(hf||null==ef||ef!==td(c))return null;c=ef;\"selectionStart\"in c&&yd(c)?c={start:c.selectionStart,end:c.selectionEnd}:(c=(c.ownerDocument&&c.ownerDocument.defaultView||window).getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset});return gf&&bf(gf,c)?null:(gf=c,a=G.getPooled(df.select,ff,a,b),a.type=\"select\",a.target=ef,Xd(a),a)}\nvar kf={eventTypes:df,extractEvents:function(a,b,c,d,e,f){e=f||(d.window===d?d.document:9===d.nodeType?d:d.ownerDocument);if(!(f=!e)){a:{e=cc(e);f=wa.onSelect;for(var g=0;gzf||(a.current=yf[zf],yf[zf]=null,zf--)}\nfunction I(a,b){zf++;yf[zf]=a.current;a.current=b}var Af={},J={current:Af},K={current:!1},Bf=Af;function Cf(a,b){var c=a.type.contextTypes;if(!c)return Af;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 L(a){a=a.childContextTypes;return null!==a&&void 0!==a}\nfunction Df(){H(K);H(J)}function Ef(a,b,c){if(J.current!==Af)throw Error(u(168));I(J,b);I(K,c)}function Ff(a,b,c){var d=a.stateNode;a=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in a))throw Error(u(108,pb(b)||\"Unknown\",e));return n({},c,{},d)}function Gf(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Af;Bf=J.current;I(J,a);I(K,K.current);return!0}\nfunction Hf(a,b,c){var d=a.stateNode;if(!d)throw Error(u(169));c?(a=Ff(a,b,Bf),d.__reactInternalMemoizedMergedChildContext=a,H(K),H(J),I(J,a)):H(K);I(K,c)}\nvar If=r.unstable_runWithPriority,Jf=r.unstable_scheduleCallback,Kf=r.unstable_cancelCallback,Lf=r.unstable_requestPaint,Mf=r.unstable_now,Nf=r.unstable_getCurrentPriorityLevel,Of=r.unstable_ImmediatePriority,Pf=r.unstable_UserBlockingPriority,Qf=r.unstable_NormalPriority,Rf=r.unstable_LowPriority,Sf=r.unstable_IdlePriority,Tf={},Uf=r.unstable_shouldYield,Vf=void 0!==Lf?Lf:function(){},Wf=null,Xf=null,Yf=!1,Zf=Mf(),$f=1E4>Zf?Mf:function(){return Mf()-Zf};\nfunction ag(){switch(Nf()){case Of:return 99;case Pf:return 98;case Qf:return 97;case Rf:return 96;case Sf:return 95;default:throw Error(u(332));}}function bg(a){switch(a){case 99:return Of;case 98:return Pf;case 97:return Qf;case 96:return Rf;case 95:return Sf;default:throw Error(u(332));}}function cg(a,b){a=bg(a);return If(a,b)}function dg(a,b,c){a=bg(a);return Jf(a,b,c)}function eg(a){null===Wf?(Wf=[a],Xf=Jf(Of,fg)):Wf.push(a);return Tf}function gg(){if(null!==Xf){var a=Xf;Xf=null;Kf(a)}fg()}\nfunction fg(){if(!Yf&&null!==Wf){Yf=!0;var a=0;try{var b=Wf;cg(99,function(){for(;a=b&&(rg=!0),a.firstContext=null)}\nfunction sg(a,b){if(mg!==a&&!1!==b&&0!==b){if(\"number\"!==typeof b||1073741823===b)mg=a,b=1073741823;b={context:a,observedBits:b,next:null};if(null===lg){if(null===kg)throw Error(u(308));lg=b;kg.dependencies={expirationTime:0,firstContext:b,responders:null}}else lg=lg.next=b}return a._currentValue}var tg=!1;function ug(a){a.updateQueue={baseState:a.memoizedState,baseQueue:null,shared:{pending:null},effects:null}}\nfunction vg(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,baseQueue:a.baseQueue,shared:a.shared,effects:a.effects})}function wg(a,b){a={expirationTime:a,suspenseConfig:b,tag:0,payload:null,callback:null,next:null};return a.next=a}function xg(a,b){a=a.updateQueue;if(null!==a){a=a.shared;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}}\nfunction yg(a,b){var c=a.alternate;null!==c&&vg(c,a);a=a.updateQueue;c=a.baseQueue;null===c?(a.baseQueue=b.next=b,b.next=b):(b.next=c.next,c.next=b)}\nfunction zg(a,b,c,d){var e=a.updateQueue;tg=!1;var f=e.baseQueue,g=e.shared.pending;if(null!==g){if(null!==f){var h=f.next;f.next=g.next;g.next=h}f=g;e.shared.pending=null;h=a.alternate;null!==h&&(h=h.updateQueue,null!==h&&(h.baseQueue=g))}if(null!==f){h=f.next;var k=e.baseState,l=0,m=null,p=null,x=null;if(null!==h){var z=h;do{g=z.expirationTime;if(gl&&(l=g)}else{null!==x&&(x=x.next={expirationTime:1073741823,suspenseConfig:z.suspenseConfig,tag:z.tag,payload:z.payload,callback:z.callback,next:null});Ag(g,z.suspenseConfig);a:{var D=a,t=z;g=b;ca=c;switch(t.tag){case 1:D=t.payload;if(\"function\"===typeof D){k=D.call(ca,k,g);break a}k=D;break a;case 3:D.effectTag=D.effectTag&-4097|64;case 0:D=t.payload;g=\"function\"===typeof D?D.call(ca,k,g):D;if(null===g||void 0===g)break a;k=n({},k,g);break a;case 2:tg=!0}}null!==z.callback&&\n(a.effectTag|=32,g=e.effects,null===g?e.effects=[z]:g.push(z))}z=z.next;if(null===z||z===h)if(g=e.shared.pending,null===g)break;else z=f.next=g.next,g.next=h,e.baseQueue=f=g,e.shared.pending=null}while(1)}null===x?m=k:x.next=p;e.baseState=m;e.baseQueue=x;Bg(l);a.expirationTime=l;a.memoizedState=k}}\nfunction Cg(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;by?(A=m,m=null):A=m.sibling;var q=x(e,m,h[y],k);if(null===q){null===m&&(m=A);break}a&&\nm&&null===q.alternate&&b(e,m);g=f(q,g,y);null===t?l=q:t.sibling=q;t=q;m=A}if(y===h.length)return c(e,m),l;if(null===m){for(;yy?(A=t,t=null):A=t.sibling;var D=x(e,t,q.value,l);if(null===D){null===t&&(t=A);break}a&&t&&null===D.alternate&&b(e,t);g=f(D,g,y);null===m?k=D:m.sibling=D;m=D;t=A}if(q.done)return c(e,t),k;if(null===t){for(;!q.done;y++,q=h.next())q=p(e,q.value,l),null!==q&&(g=f(q,g,y),null===m?k=q:m.sibling=q,m=q);return k}for(t=d(e,t);!q.done;y++,q=h.next())q=z(t,e,y,q.value,l),null!==q&&(a&&null!==\nq.alternate&&t.delete(null===q.key?y:q.key),g=f(q,g,y),null===m?k=q:m.sibling=q,m=q);a&&t.forEach(function(a){return b(e,a)});return k}return function(a,d,f,h){var k=\"object\"===typeof f&&null!==f&&f.type===ab&&null===f.key;k&&(f=f.props.children);var l=\"object\"===typeof f&&null!==f;if(l)switch(f.$$typeof){case Za:a:{l=f.key;for(k=d;null!==k;){if(k.key===l){switch(k.tag){case 7:if(f.type===ab){c(a,k.sibling);d=e(k,f.props.children);d.return=a;a=d;break a}break;default:if(k.elementType===f.type){c(a,\nk.sibling);d=e(k,f.props);d.ref=Pg(a,k,f);d.return=a;a=d;break a}}c(a,k);break}else b(a,k);k=k.sibling}f.type===ab?(d=Wg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Ug(f.type,f.key,f.props,null,a.mode,h),h.ref=Pg(a,d,f),h.return=a,a=h)}return g(a);case $a:a:{for(k=f.key;null!==d;){if(d.key===k)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=\nd.sibling}d=Vg(f,a.mode,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),d.return=a,a=d):(c(a,d),d=Tg(f,a.mode,h),d.return=a,a=d),g(a);if(Og(f))return ca(a,d,f,h);if(nb(f))return D(a,d,f,h);l&&Qg(a,f);if(\"undefined\"===typeof f&&!k)switch(a.tag){case 1:case 0:throw a=a.type,Error(u(152,a.displayName||a.name||\"Component\"));}return c(a,d)}}var Xg=Rg(!0),Yg=Rg(!1),Zg={},$g={current:Zg},ah={current:Zg},bh={current:Zg};\nfunction ch(a){if(a===Zg)throw Error(u(174));return a}function dh(a,b){I(bh,b);I(ah,a);I($g,Zg);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:Ob(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=Ob(b,a)}H($g);I($g,b)}function eh(){H($g);H(ah);H(bh)}function fh(a){ch(bh.current);var b=ch($g.current);var c=Ob(b,a.type);b!==c&&(I(ah,a),I($g,c))}function gh(a){ah.current===a&&(H($g),H(ah))}var M={current:0};\nfunction hh(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||c.data===Bd||c.data===Cd))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.effectTag&64))return b}else if(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 null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}function ih(a,b){return{responder:a,props:b}}\nvar jh=Wa.ReactCurrentDispatcher,kh=Wa.ReactCurrentBatchConfig,lh=0,N=null,O=null,P=null,mh=!1;function Q(){throw Error(u(321));}function nh(a,b){if(null===b)return!1;for(var c=0;cf))throw Error(u(301));f+=1;P=O=null;b.updateQueue=null;jh.current=rh;a=c(d,e)}while(b.expirationTime===lh)}jh.current=sh;b=null!==O&&null!==O.next;lh=0;P=O=N=null;mh=!1;if(b)throw Error(u(300));return a}\nfunction th(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===P?N.memoizedState=P=a:P=P.next=a;return P}function uh(){if(null===O){var a=N.alternate;a=null!==a?a.memoizedState:null}else a=O.next;var b=null===P?N.memoizedState:P.next;if(null!==b)P=b,O=a;else{if(null===a)throw Error(u(310));O=a;a={memoizedState:O.memoizedState,baseState:O.baseState,baseQueue:O.baseQueue,queue:O.queue,next:null};null===P?N.memoizedState=P=a:P=P.next=a}return P}\nfunction vh(a,b){return\"function\"===typeof b?b(a):b}\nfunction wh(a){var b=uh(),c=b.queue;if(null===c)throw Error(u(311));c.lastRenderedReducer=a;var d=O,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g}d.baseQueue=e=f;c.pending=null}if(null!==e){e=e.next;d=d.baseState;var h=g=f=null,k=e;do{var l=k.expirationTime;if(lN.expirationTime&&\n(N.expirationTime=l,Bg(l))}else null!==h&&(h=h.next={expirationTime:1073741823,suspenseConfig:k.suspenseConfig,action:k.action,eagerReducer:k.eagerReducer,eagerState:k.eagerState,next:null}),Ag(l,k.suspenseConfig),d=k.eagerReducer===a?k.eagerState:a(d,k.action);k=k.next}while(null!==k&&k!==e);null===h?f=d:h.next=g;$e(d,b.memoizedState)||(rg=!0);b.memoizedState=d;b.baseState=f;b.baseQueue=h;c.lastRenderedState=d}return[b.memoizedState,c.dispatch]}\nfunction xh(a){var b=uh(),c=b.queue;if(null===c)throw Error(u(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);$e(f,b.memoizedState)||(rg=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f}return[f,d]}\nfunction yh(a){var b=th();\"function\"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a=b.queue={pending:null,dispatch:null,lastRenderedReducer:vh,lastRenderedState:a};a=a.dispatch=zh.bind(null,N,a);return[b.memoizedState,a]}function Ah(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};b=N.updateQueue;null===b?(b={lastEffect:null},N.updateQueue=b,b.lastEffect=a.next=a):(c=b.lastEffect,null===c?b.lastEffect=a.next=a:(d=c.next,c.next=a,a.next=d,b.lastEffect=a));return a}\nfunction Bh(){return uh().memoizedState}function Ch(a,b,c,d){var e=th();N.effectTag|=a;e.memoizedState=Ah(1|b,c,void 0,void 0===d?null:d)}function Dh(a,b,c,d){var e=uh();d=void 0===d?null:d;var f=void 0;if(null!==O){var g=O.memoizedState;f=g.destroy;if(null!==d&&nh(d,g.deps)){Ah(b,c,f,d);return}}N.effectTag|=a;e.memoizedState=Ah(1|b,c,f,d)}function Eh(a,b){return Ch(516,4,a,b)}function Fh(a,b){return Dh(516,4,a,b)}function Gh(a,b){return Dh(4,2,a,b)}\nfunction Hh(a,b){if(\"function\"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}function Ih(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Dh(4,2,Hh.bind(null,b,a),c)}function Jh(){}function Kh(a,b){th().memoizedState=[a,void 0===b?null:b];return a}function Lh(a,b){var c=uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&nh(b,d[1]))return d[0];c.memoizedState=[a,b];return a}\nfunction Mh(a,b){var c=uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&nh(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a}function Nh(a,b,c){var d=ag();cg(98>d?98:d,function(){a(!0)});cg(97\\x3c/script>\",a=a.removeChild(a.firstChild)):\"string\"===typeof d.is?a=g.createElement(e,{is:d.is}):(a=g.createElement(e),\"select\"===e&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,e);a[Md]=b;a[Nd]=d;ni(a,b,!1,!1);b.stateNode=a;g=pd(e,d);switch(e){case \"iframe\":case \"object\":case \"embed\":F(\"load\",\na);h=d;break;case \"video\":case \"audio\":for(h=0;hd.tailExpiration&&1b)&&tj.set(a,b)))}}\nfunction xj(a,b){a.expirationTimea?c:a;return 2>=a&&b!==a?0:a}\nfunction Z(a){if(0!==a.lastExpiredTime)a.callbackExpirationTime=1073741823,a.callbackPriority=99,a.callbackNode=eg(yj.bind(null,a));else{var b=zj(a),c=a.callbackNode;if(0===b)null!==c&&(a.callbackNode=null,a.callbackExpirationTime=0,a.callbackPriority=90);else{var d=Gg();1073741823===b?d=99:1===b||2===b?d=95:(d=10*(1073741821-b)-10*(1073741821-d),d=0>=d?99:250>=d?98:5250>=d?97:95);if(null!==c){var e=a.callbackPriority;if(a.callbackExpirationTime===b&&e>=d)return;c!==Tf&&Kf(c)}a.callbackExpirationTime=\nb;a.callbackPriority=d;b=1073741823===b?eg(yj.bind(null,a)):dg(d,Bj.bind(null,a),{timeout:10*(1073741821-b)-$f()});a.callbackNode=b}}}\nfunction Bj(a,b){wj=0;if(b)return b=Gg(),Cj(a,b),Z(a),null;var c=zj(a);if(0!==c){b=a.callbackNode;if((W&(fj|gj))!==V)throw Error(u(327));Dj();a===T&&c===U||Ej(a,c);if(null!==X){var d=W;W|=fj;var e=Fj();do try{Gj();break}catch(h){Hj(a,h)}while(1);ng();W=d;cj.current=e;if(S===hj)throw b=kj,Ej(a,c),xi(a,c),Z(a),b;if(null===X)switch(e=a.finishedWork=a.current.alternate,a.finishedExpirationTime=c,d=S,T=null,d){case ti:case hj:throw Error(u(345));case ij:Cj(a,2=c){a.lastPingedTime=c;Ej(a,c);break}}f=zj(a);if(0!==f&&f!==c)break;if(0!==d&&d!==c){a.lastPingedTime=d;break}a.timeoutHandle=Hd(Jj.bind(null,a),e);break}Jj(a);break;case vi:xi(a,c);d=a.lastSuspendedTime;c===d&&(a.nextKnownPendingLevel=Ij(e));if(oj&&(e=a.lastPingedTime,0===e||e>=c)){a.lastPingedTime=c;Ej(a,c);break}e=zj(a);if(0!==e&&e!==c)break;if(0!==d&&d!==c){a.lastPingedTime=\nd;break}1073741823!==mj?d=10*(1073741821-mj)-$f():1073741823===lj?d=0:(d=10*(1073741821-lj)-5E3,e=$f(),c=10*(1073741821-c)-e,d=e-d,0>d&&(d=0),d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*bj(d/1960))-d,c=d?d=0:(e=g.busyDelayMs|0,f=$f()-(10*(1073741821-f)-(g.timeoutMs|0||5E3)),d=f<=e?0:e+d-f);if(10 component higher in the tree to provide a loading indicator or placeholder to display.\"+qb(g))}S!==\njj&&(S=ij);h=Ai(h,g);p=f;do{switch(p.tag){case 3:k=h;p.effectTag|=4096;p.expirationTime=b;var B=Xi(p,k,b);yg(p,B);break a;case 1:k=h;var w=p.type,ub=p.stateNode;if(0===(p.effectTag&64)&&(\"function\"===typeof w.getDerivedStateFromError||null!==ub&&\"function\"===typeof ub.componentDidCatch&&(null===aj||!aj.has(ub)))){p.effectTag|=4096;p.expirationTime=b;var vb=$i(p,k,b);yg(p,vb);break a}}p=p.return}while(null!==p)}X=Pj(X)}catch(Xc){b=Xc;continue}break}while(1)}\nfunction Fj(){var a=cj.current;cj.current=sh;return null===a?sh:a}function Ag(a,b){awi&&(wi=a)}function Kj(){for(;null!==X;)X=Qj(X)}function Gj(){for(;null!==X&&!Uf();)X=Qj(X)}function Qj(a){var b=Rj(a.alternate,a,U);a.memoizedProps=a.pendingProps;null===b&&(b=Pj(a));dj.current=null;return b}\nfunction Pj(a){X=a;do{var b=X.alternate;a=X.return;if(0===(X.effectTag&2048)){b=si(b,X,U);if(1===U||1!==X.childExpirationTime){for(var c=0,d=X.child;null!==d;){var e=d.expirationTime,f=d.childExpirationTime;e>c&&(c=e);f>c&&(c=f);d=d.sibling}X.childExpirationTime=c}if(null!==b)return b;null!==a&&0===(a.effectTag&2048)&&(null===a.firstEffect&&(a.firstEffect=X.firstEffect),null!==X.lastEffect&&(null!==a.lastEffect&&(a.lastEffect.nextEffect=X.firstEffect),a.lastEffect=X.lastEffect),1a?b:a}function Jj(a){var b=ag();cg(99,Sj.bind(null,a,b));return null}\nfunction Sj(a,b){do Dj();while(null!==rj);if((W&(fj|gj))!==V)throw Error(u(327));var c=a.finishedWork,d=a.finishedExpirationTime;if(null===c)return null;a.finishedWork=null;a.finishedExpirationTime=0;if(c===a.current)throw Error(u(177));a.callbackNode=null;a.callbackExpirationTime=0;a.callbackPriority=90;a.nextKnownPendingLevel=0;var e=Ij(c);a.firstPendingTime=e;d<=a.lastSuspendedTime?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:d<=a.firstSuspendedTime&&(a.firstSuspendedTime=\nd-1);d<=a.lastPingedTime&&(a.lastPingedTime=0);d<=a.lastExpiredTime&&(a.lastExpiredTime=0);a===T&&(X=T=null,U=0);1h&&(l=h,h=g,g=l),l=vd(q,g),m=vd(q,h),l&&m&&(1!==w.rangeCount||w.anchorNode!==l.node||w.anchorOffset!==l.offset||w.focusNode!==m.node||w.focusOffset!==m.offset)&&(B=B.createRange(),B.setStart(l.node,l.offset),w.removeAllRanges(),g>h?(w.addRange(B),w.extend(m.node,m.offset)):(B.setEnd(m.node,m.offset),w.addRange(B))))));B=[];for(w=q;w=w.parentNode;)1===w.nodeType&&B.push({element:w,left:w.scrollLeft,\ntop:w.scrollTop});\"function\"===typeof q.focus&&q.focus();for(q=0;q=c)return ji(a,b,c);I(M,M.current&1);b=$h(a,b,c);return null!==b?b.sibling:null}I(M,M.current&1);break;case 19:d=b.childExpirationTime>=c;if(0!==(a.effectTag&64)){if(d)return mi(a,b,c);b.effectTag|=64}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null);I(M,M.current);if(!d)return null}return $h(a,b,c)}rg=!1}}else rg=!1;b.expirationTime=0;switch(b.tag){case 2:d=b.type;null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2);a=b.pendingProps;e=Cf(b,J.current);qg(b,c);e=oh(null,\nb,d,a,e,c);b.effectTag|=1;if(\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof){b.tag=1;b.memoizedState=null;b.updateQueue=null;if(L(d)){var f=!0;Gf(b)}else f=!1;b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null;ug(b);var g=d.getDerivedStateFromProps;\"function\"===typeof g&&Fg(b,d,g,a);e.updater=Jg;b.stateNode=e;e._reactInternalFiber=b;Ng(b,d,a,c);b=gi(null,b,d,!0,f,c)}else b.tag=0,R(null,b,e,c),b=b.child;return b;case 16:a:{e=b.elementType;null!==a&&(a.alternate=\nnull,b.alternate=null,b.effectTag|=2);a=b.pendingProps;ob(e);if(1!==e._status)throw e._result;e=e._result;b.type=e;f=b.tag=Xj(e);a=ig(e,a);switch(f){case 0:b=di(null,b,e,a,c);break a;case 1:b=fi(null,b,e,a,c);break a;case 11:b=Zh(null,b,e,a,c);break a;case 14:b=ai(null,b,e,ig(e.type,a),d,c);break a}throw Error(u(306,e,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),di(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),fi(a,b,d,e,c);\ncase 3:hi(b);d=b.updateQueue;if(null===a||null===d)throw Error(u(282));d=b.pendingProps;e=b.memoizedState;e=null!==e?e.element:null;vg(a,b);zg(b,d,null,c);d=b.memoizedState.element;if(d===e)Xh(),b=$h(a,b,c);else{if(e=b.stateNode.hydrate)Ph=Jd(b.stateNode.containerInfo.firstChild),Oh=b,e=Qh=!0;if(e)for(c=Yg(b,null,d,c),b.child=c;c;)c.effectTag=c.effectTag&-3|1024,c=c.sibling;else R(a,b,d,c),Xh();b=b.child}return b;case 5:return fh(b),null===a&&Uh(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:\nnull,g=e.children,Gd(d,e)?g=null:null!==f&&Gd(d,f)&&(b.effectTag|=16),ei(a,b),b.mode&4&&1!==c&&e.hidden?(b.expirationTime=b.childExpirationTime=1,b=null):(R(a,b,g,c),b=b.child),b;case 6:return null===a&&Uh(b),null;case 13:return ji(a,b,c);case 4:return dh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Xg(b,null,d,c):R(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),Zh(a,b,d,e,c);case 7:return R(a,b,b.pendingProps,c),b.child;case 8:return R(a,\nb,b.pendingProps.children,c),b.child;case 12:return R(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;g=b.memoizedProps;f=e.value;var h=b.type._context;I(jg,h._currentValue);h._currentValue=f;if(null!==g)if(h=g.value,f=$e(h,f)?0:(\"function\"===typeof d._calculateChangedBits?d._calculateChangedBits(h,f):1073741823)|0,0===f){if(g.children===e.children&&!K.current){b=$h(a,b,c);break a}}else for(h=b.child,null!==h&&(h.return=b);null!==h;){var k=h.dependencies;if(null!==\nk){g=h.child;for(var l=k.firstContext;null!==l;){if(l.context===d&&0!==(l.observedBits&f)){1===h.tag&&(l=wg(c,null),l.tag=2,xg(h,l));h.expirationTime=b&&a<=b}function xi(a,b){var c=a.firstSuspendedTime,d=a.lastSuspendedTime;cb||0===c)a.lastSuspendedTime=b;b<=a.lastPingedTime&&(a.lastPingedTime=0);b<=a.lastExpiredTime&&(a.lastExpiredTime=0)}\nfunction yi(a,b){b>a.firstPendingTime&&(a.firstPendingTime=b);var c=a.firstSuspendedTime;0!==c&&(b>=c?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:b>=a.lastSuspendedTime&&(a.lastSuspendedTime=b+1),b>a.nextKnownPendingLevel&&(a.nextKnownPendingLevel=b))}function Cj(a,b){var c=a.lastExpiredTime;if(0===c||c>b)a.lastExpiredTime=b}\nfunction bk(a,b,c,d){var e=b.current,f=Gg(),g=Dg.suspense;f=Hg(f,e,g);a:if(c){c=c._reactInternalFiber;b:{if(dc(c)!==c||1!==c.tag)throw Error(u(170));var h=c;do{switch(h.tag){case 3:h=h.stateNode.context;break b;case 1:if(L(h.type)){h=h.stateNode.__reactInternalMemoizedMergedChildContext;break b}}h=h.return}while(null!==h);throw Error(u(171));}if(1===c.tag){var k=c.type;if(L(k)){c=Ff(c,k,h);break a}}c=h}else c=Af;null===b.context?b.context=c:b.pendingContext=c;b=wg(f,g);b.payload={element:a};d=void 0===\nd?null:d;null!==d&&(b.callback=d);xg(e,b);Ig(e,f);return f}function ck(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function dk(a,b){a=a.memoizedState;null!==a&&null!==a.dehydrated&&a.retryTime=G};l=function(){};exports.unstable_forceFrameRate=function(a){0>a||125>>1,e=a[d];if(void 0!==e&&0K(n,c))void 0!==r&&0>K(r,n)?(a[d]=r,a[v]=c,d=v):(a[d]=n,a[m]=c,d=m);else if(void 0!==r&&0>K(r,c))a[d]=r,a[v]=c,d=v;else break a}}return b}return null}function K(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}var N=[],O=[],P=1,Q=null,R=3,S=!1,T=!1,U=!1;\nfunction V(a){for(var b=L(O);null!==b;){if(null===b.callback)M(O);else if(b.startTime<=a)M(O),b.sortIndex=b.expirationTime,J(N,b);else break;b=L(O)}}function W(a){U=!1;V(a);if(!T)if(null!==L(N))T=!0,f(X);else{var b=L(O);null!==b&&g(W,b.startTime-a)}}\nfunction X(a,b){T=!1;U&&(U=!1,h());S=!0;var c=R;try{V(b);for(Q=L(N);null!==Q&&(!(Q.expirationTime>b)||a&&!k());){var d=Q.callback;if(null!==d){Q.callback=null;R=Q.priorityLevel;var e=d(Q.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?Q.callback=e:Q===L(N)&&M(N);V(b)}else M(N);Q=L(N)}if(null!==Q)var m=!0;else{var n=L(O);null!==n&&g(W,n.startTime-b);m=!1}return m}finally{Q=null,R=c,S=!1}}\nfunction Y(a){switch(a){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1E4;default:return 5E3}}var Z=l;exports.unstable_IdlePriority=5;exports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){T||S||(T=!0,f(X))};\nexports.unstable_getCurrentPriorityLevel=function(){return R};exports.unstable_getFirstCallbackNode=function(){return L(N)};exports.unstable_next=function(a){switch(R){case 1:case 2:case 3:var b=3;break;default:b=R}var c=R;R=b;try{return a()}finally{R=c}};exports.unstable_pauseExecution=function(){};exports.unstable_requestPaint=Z;exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=R;R=a;try{return b()}finally{R=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();if(\"object\"===typeof c&&null!==c){var e=c.delay;e=\"number\"===typeof e&&0d?(a.sortIndex=e,J(O,a),null===L(N)&&a===L(O)&&(U?h():U=!0,g(W,e-d))):(a.sortIndex=c,J(N,a),T||S||(T=!0,f(X)));return a};\nexports.unstable_shouldYield=function(){var a=exports.unstable_now();V(a);var b=L(N);return b!==Q&&null!==Q&&null!==b&&null!==b.callback&&b.startTime<=a&&b.expirationTime -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = _indexOf(['eval', ''], locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join('@') || undefined;\n return new StackFrame(functionName,\n undefined,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame(\n match[3] || undefined,\n undefined,\n match[2],\n match[1],\n undefined,\n lines[i]\n )\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n return new StackFrame(\n functionName,\n args,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar filenameWithoutLoaders = exports.filenameWithoutLoaders = function filenameWithoutLoaders() {\n var filename = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n\n var index = filename.lastIndexOf('!');\n\n return index < 0 ? filename : filename.substr(index + 1);\n};\n\nvar filenameHasLoaders = exports.filenameHasLoaders = function filenameHasLoaders(filename) {\n var actualFilename = _get__('filenameWithoutLoaders')(filename);\n\n return actualFilename !== filename;\n};\n\nvar filenameHasSchema = exports.filenameHasSchema = function filenameHasSchema(filename) {\n return (/^[\\w]+\\:/.test(filename)\n );\n};\n\nvar isFilenameAbsolute = exports.isFilenameAbsolute = function isFilenameAbsolute(filename) {\n var actualFilename = _get__('filenameWithoutLoaders')(filename);\n\n if (actualFilename.indexOf('/') === 0) {\n return true;\n }\n\n return false;\n};\n\nvar makeUrl = exports.makeUrl = function makeUrl(filename, scheme, line, column) {\n var actualFilename = _get__('filenameWithoutLoaders')(filename);\n\n if (_get__('filenameHasSchema')(filename)) {\n return actualFilename;\n }\n\n var url = 'file://' + actualFilename;\n\n if (scheme === 'vscode') {\n url = scheme + '://file/' + url;\n url = url.replace(/file:\\/\\/\\//, ''); // visual studio code does not need file:/// in its scheme\n if (line && actualFilename === filename) {\n url = url + ':' + line;\n\n if (column) {\n url = url + ':' + column;\n }\n }\n } else if (scheme) {\n url = scheme + '://open?url=' + url;\n\n if (line && actualFilename === filename) {\n url = url + '&line=' + line;\n\n if (column) {\n url = url + '&column=' + column;\n }\n }\n }\n\n return url;\n};\n\nvar makeLinkText = exports.makeLinkText = function makeLinkText(filename, line, column) {\n var text = _get__('filenameWithoutLoaders')(filename);\n\n if (line && text === filename) {\n text = text + ':' + line;\n\n if (column) {\n text = text + ':' + column;\n }\n }\n\n return text;\n};\n\nvar _RewiredData__ = Object.create(null);\n\nvar INTENTIONAL_UNDEFINED = '__INTENTIONAL_UNDEFINED__';\nvar _RewireAPI__ = {};\n\n(function () {\n function addPropertyToAPIObject(name, value) {\n Object.defineProperty(_RewireAPI__, name, {\n value: value,\n enumerable: false,\n configurable: true\n });\n }\n\n addPropertyToAPIObject('__get__', _get__);\n addPropertyToAPIObject('__GetDependency__', _get__);\n addPropertyToAPIObject('__Rewire__', _set__);\n addPropertyToAPIObject('__set__', _set__);\n addPropertyToAPIObject('__reset__', _reset__);\n addPropertyToAPIObject('__ResetDependency__', _reset__);\n addPropertyToAPIObject('__with__', _with__);\n})();\n\nfunction _get__(variableName) {\n if (_RewiredData__ === undefined || _RewiredData__[variableName] === undefined) {\n return _get_original__(variableName);\n } else {\n var value = _RewiredData__[variableName];\n\n if (value === INTENTIONAL_UNDEFINED) {\n return undefined;\n } else {\n return value;\n }\n }\n}\n\nfunction _get_original__(variableName) {\n switch (variableName) {\n case 'filenameWithoutLoaders':\n return filenameWithoutLoaders;\n\n case 'filenameHasSchema':\n return filenameHasSchema;\n }\n\n return undefined;\n}\n\nfunction _assign__(variableName, value) {\n if (_RewiredData__ === undefined || _RewiredData__[variableName] === undefined) {\n return _set_original__(variableName, value);\n } else {\n return _RewiredData__[variableName] = value;\n }\n}\n\nfunction _set_original__(variableName, _value) {\n switch (variableName) {}\n\n return undefined;\n}\n\nfunction _update_operation__(operation, variableName, prefix) {\n var oldValue = _get__(variableName);\n\n var newValue = operation === '++' ? oldValue + 1 : oldValue - 1;\n\n _assign__(variableName, newValue);\n\n return prefix ? newValue : oldValue;\n}\n\nfunction _set__(variableName, value) {\n if ((typeof variableName === 'undefined' ? 'undefined' : _typeof(variableName)) === 'object') {\n Object.keys(variableName).forEach(function (name) {\n _RewiredData__[name] = variableName[name];\n });\n } else {\n if (value === undefined) {\n _RewiredData__[variableName] = INTENTIONAL_UNDEFINED;\n } else {\n _RewiredData__[variableName] = value;\n }\n\n return function () {\n _reset__(variableName);\n };\n }\n}\n\nfunction _reset__(variableName) {\n delete _RewiredData__[variableName];\n}\n\nfunction _with__(object) {\n var rewiredVariableNames = Object.keys(object);\n var previousValues = {};\n\n function reset() {\n rewiredVariableNames.forEach(function (variableName) {\n _RewiredData__[variableName] = previousValues[variableName];\n });\n }\n\n return function (callback) {\n rewiredVariableNames.forEach(function (variableName) {\n previousValues[variableName] = _RewiredData__[variableName];\n _RewiredData__[variableName] = object[variableName];\n });\n var result = callback();\n\n if (!!result && typeof result.then == 'function') {\n result.then(reset).catch(reset);\n } else {\n reset();\n }\n\n return result;\n };\n}\n\nexports.__get__ = _get__;\nexports.__GetDependency__ = _get__;\nexports.__Rewire__ = _set__;\nexports.__set__ = _set__;\nexports.__ResetDependency__ = _reset__;\nexports.__RewireAPI__ = _RewireAPI__;\nexports.default = _RewireAPI__;","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"sourceMappedStackTrace\"] = factory();\n\telse\n\t\troot[\"sourceMappedStackTrace\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*\n\t * sourcemapped-stacktrace.js\n\t * created by James Salter (2014)\n\t *\n\t * https://github.com/novocaine/sourcemapped-stacktrace\n\t *\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\n\t/*global define */\n\n\t// note we only include source-map-consumer, not the whole source-map library,\n\t// which includes gear for generating source maps that we don't need\n\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(1)], __WEBPACK_AMD_DEFINE_RESULT__ = function(source_map_consumer) {\n\n\t var global_mapForUri = {};\n\n\t /**\n\t * Re-map entries in a stacktrace using sourcemaps if available.\n\t *\n\t * @param {str} stack - The stacktrace from the browser.\n\t * @param {function} done - Callback invoked with the transformed stacktrace\n\t * (an Array of Strings) passed as the first\n\t * argument\n\t * @param {Object} [opts] - Optional options object.\n\t * @param {Function} [opts.filter] - Filter function applied to each stackTrace line.\n\t * Lines which do not pass the filter won't be processesd.\n\t * @param {boolean} [opts.cacheGlobally] - Whether to cache sourcemaps globally across multiple calls.\n\t * @param {boolean} [opts.sync] - Whether to use synchronous ajax to load the sourcemaps.\n\t * @param {string} [opts.traceFormat] - If `error.stack` is formatted according to chrome or\n\t * Firefox's style. Can be either `\"chrome\"`, `\"firefox\"`\n\t * or `undefined` (default). If `undefined`, this library\n\t * will guess based on `navigator.userAgent`.\n\t */\n\t var mapStackTrace = function(stack, done, opts) {\n\t var lines;\n\t var line;\n\t var mapForUri = {};\n\t var rows = {};\n\t var fields;\n\t var uri;\n\t var expected_fields;\n\t var regex;\n\t var skip_lines;\n\n\t var fetcher = new Fetcher(opts);\n\n\t var traceFormat = opts && opts.traceFormat;\n\t if (traceFormat !== \"chrome\" && traceFormat !== \"firefox\") {\n\t if (traceFormat) {\n\t throw new Error(\"unknown traceFormat \\\"\" + traceFormat + \"\\\" :(\");\n\t } else if (isChromeOrEdge() || isIE11Plus()) {\n\t traceFormat = \"chrome\";\n\t } else if (isFirefox() || isSafari()) {\n\t traceFormat = \"firefox\";\n\t } else {\n\t throw new Error(\"unknown browser :(\");\n\t }\n\t }\n\n\t if (traceFormat === \"chrome\") {\n\t regex = /^ +at.+\\((.*):([0-9]+):([0-9]+)/;\n\t expected_fields = 4;\n\t // (skip first line containing exception message)\n\t skip_lines = 1;\n\t } else {\n\t regex = /@(.*):([0-9]+):([0-9]+)/;\n\t expected_fields = 4;\n\t skip_lines = 0;\n\t }\n\n\t lines = stack.split(\"\\n\").slice(skip_lines);\n\n\t for (var i=0; i < lines.length; i++) {\n\t line = lines[i];\n\t if ( opts && opts.filter && !opts.filter(line) ) continue;\n\t \n\t fields = line.match(regex);\n\t if (fields && fields.length === expected_fields) {\n\t rows[i] = fields;\n\t uri = fields[1];\n\t if (!uri.match(//)) {\n\t fetcher.fetchScript(uri);\n\t }\n\t }\n\t }\n\n\t fetcher.sem.whenReady(function() {\n\t var result = processSourceMaps(lines, rows, fetcher.mapForUri, traceFormat);\n\t done(result);\n\t });\n\t };\n\n\t var isChromeOrEdge = function() {\n\t return navigator.userAgent.toLowerCase().indexOf('chrome') > -1;\n\t };\n\n\t var isFirefox = function() {\n\t return navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n\t }; \n\n\t var isSafari = function() {\n\t return navigator.userAgent.toLowerCase().indexOf('safari') > -1;\n\t };\n\t\t\t\n\t var isIE11Plus = function() {\n\t \treturn document.documentMode && document.documentMode >= 11;\n\t };\n\n\n\t var Semaphore = function() {\n\t this.count = 0;\n\t this.pending = [];\n\t };\n\n\t Semaphore.prototype.incr = function() {\n\t this.count++;\n\t };\n\n\t Semaphore.prototype.decr = function() {\n\t this.count--;\n\t this.flush();\n\t };\n\n\t Semaphore.prototype.whenReady = function(fn) {\n\t this.pending.push(fn);\n\t this.flush();\n\t };\n\n\t Semaphore.prototype.flush = function() {\n\t if (this.count === 0) {\n\t this.pending.forEach(function(fn) { fn(); });\n\t this.pending = [];\n\t }\n\t };\n\n\n\t var Fetcher = function(opts) {\n\t this.sem = new Semaphore();\n\t this.sync = opts && opts.sync;\n\t this.mapForUri = opts && opts.cacheGlobally ? global_mapForUri : {};\n\t };\n\n\t Fetcher.prototype.ajax = function(uri, callback) {\n\t var xhr = createXMLHTTPObject();\n\t var that = this;\n\t xhr.onreadystatechange = function() {\n\t if (xhr.readyState == 4) {\n\t callback.call(that, xhr, uri);\n\t }\n\t };\n\t xhr.open(\"GET\", uri, !this.sync);\n\t xhr.send();\n\t }\n\n\t Fetcher.prototype.fetchScript = function(uri) {\n\t if (!(uri in this.mapForUri)) {\n\t this.sem.incr();\n\t this.mapForUri[uri] = null;\n\t } else {\n\t return;\n\t }\n\n\t this.ajax(uri, this.onScriptLoad);\n\t };\n\n\t var absUrlRegex = new RegExp('^(?:[a-z]+:)?//', 'i');\n\n\t Fetcher.prototype.onScriptLoad = function(xhr, uri) {\n\t if (xhr.status === 200 || (uri.slice(0, 7) === \"file://\" && xhr.status === 0)) {\n\t // find .map in file.\n\t //\n\t // attempt to find it at the very end of the file, but tolerate trailing\n\t // whitespace inserted by some packers.\n\t var match = xhr.responseText.match(\"//# [s]ourceMappingURL=(.*)[\\\\s]*$\", \"m\");\n\t if (match && match.length === 2) {\n\t // get the map\n\t var mapUri = match[1];\n\n\t var embeddedSourceMap = mapUri.match(\"data:application/json;(charset=[^;]+;)?base64,(.*)\");\n\n\t if (embeddedSourceMap && embeddedSourceMap[2]) {\n\t this.mapForUri[uri] = new source_map_consumer.SourceMapConsumer(atob(embeddedSourceMap[2]));\n\t this.sem.decr();\n\t } else {\n\t if (!absUrlRegex.test(mapUri)) {\n\t // relative url; according to sourcemaps spec is 'source origin'\n\t var origin;\n\t var lastSlash = uri.lastIndexOf('/');\n\t if (lastSlash !== -1) {\n\t origin = uri.slice(0, lastSlash + 1);\n\t mapUri = origin + mapUri;\n\t // note if lastSlash === -1, actual script uri has no slash\n\t // somehow, so no way to use it as a prefix... we give up and try\n\t // as absolute\n\t }\n\t }\n\n\t this.ajax(mapUri, function(xhr) {\n\t if (xhr.status === 200 || (mapUri.slice(0, 7) === \"file://\" && xhr.status === 0)) {\n\t this.mapForUri[uri] = new source_map_consumer.SourceMapConsumer(xhr.responseText);\n\t }\n\t this.sem.decr();\n\t });\n\t }\n\t } else {\n\t // no map\n\t this.sem.decr();\n\t }\n\t } else {\n\t // HTTP error fetching uri of the script\n\t this.sem.decr();\n\t }\n\t };\n\n\t var processSourceMaps = function(lines, rows, mapForUri, traceFormat) {\n\t var result = [];\n\t var map;\n\t var origName = traceFormat === \"chrome\" ? origNameChrome : origNameFirefox;\n\t for (var i=0; i < lines.length; i++) {\n\t var row = rows[i];\n\t if (row) {\n\t var uri = row[1];\n\t var line = parseInt(row[2], 10);\n\t var column = parseInt(row[3], 10);\n\t map = mapForUri[uri];\n\n\t if (map) {\n\t // we think we have a map for that uri. call source-map library\n\t var origPos = map.originalPositionFor(\n\t { line: line, column: column });\n\t result.push(formatOriginalPosition(origPos.source,\n\t origPos.line, origPos.column, origPos.name || origName(lines[i])));\n\t } else {\n\t // we can't find a map for that url, but we parsed the row.\n\t // reformat unchanged line for consistency with the sourcemapped\n\t // lines.\n\t result.push(formatOriginalPosition(uri, line, column, origName(lines[i])));\n\t }\n\t } else {\n\t // we weren't able to parse the row, push back what we were given\n\t result.push(lines[i]);\n\t }\n\t }\n\n\t return result;\n\t };\n\n\t function origNameChrome(origLine) {\n\t var match = / +at +([^ ]*).*/.exec(origLine);\n\t return match && match[1];\n\t }\n\n\t function origNameFirefox(origLine) {\n\t var match = /([^@]*)@.*/.exec(origLine);\n\t return match && match[1];\n\t }\n\n\t var formatOriginalPosition = function(source, line, column, name) {\n\t // mimic chrome's format\n\t return \" at \" + (name ? name : \"(unknown)\") +\n\t \" (\" + source + \":\" + line + \":\" + column + \")\";\n\t };\n\n\t // xmlhttprequest boilerplate\n\t var XMLHttpFactories = [\n\t\tfunction () {return new XMLHttpRequest();},\n\t\tfunction () {return new ActiveXObject(\"Msxml2.XMLHTTP\");},\n\t\tfunction () {return new ActiveXObject(\"Msxml3.XMLHTTP\");},\n\t\tfunction () {return new ActiveXObject(\"Microsoft.XMLHTTP\");}\n\t ];\n\n\t function createXMLHTTPObject() {\n\t var xmlhttp = false;\n\t for (var i=0;i= 0) {\n\t var mapping = this._originalMappings[index];\n\n\t if (aArgs.column === undefined) {\n\t var originalLine = mapping.originalLine;\n\n\t // Iterate until either we run out of mappings, or we run into\n\t // a mapping for a different line than the one we found. Since\n\t // mappings are sorted, this is guaranteed to find all mappings for\n\t // the line we found.\n\t while (mapping && mapping.originalLine === originalLine) {\n\t mappings.push({\n\t line: util.getArg(mapping, 'generatedLine', null),\n\t column: util.getArg(mapping, 'generatedColumn', null),\n\t lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n\t });\n\n\t mapping = this._originalMappings[++index];\n\t }\n\t } else {\n\t var originalColumn = mapping.originalColumn;\n\n\t // Iterate until either we run out of mappings, or we run into\n\t // a mapping for a different line than the one we were searching for.\n\t // Since mappings are sorted, this is guaranteed to find all mappings for\n\t // the line we are searching for.\n\t while (mapping &&\n\t mapping.originalLine === line &&\n\t mapping.originalColumn == originalColumn) {\n\t mappings.push({\n\t line: util.getArg(mapping, 'generatedLine', null),\n\t column: util.getArg(mapping, 'generatedColumn', null),\n\t lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n\t });\n\n\t mapping = this._originalMappings[++index];\n\t }\n\t }\n\t }\n\n\t return mappings;\n\t };\n\n\texports.SourceMapConsumer = SourceMapConsumer;\n\n\t/**\n\t * A BasicSourceMapConsumer instance represents a parsed source map which we can\n\t * query for information about the original file positions by giving it a file\n\t * position in the generated source.\n\t *\n\t * The only parameter is the raw source map (either as a JSON string, or\n\t * already parsed to an object). According to the spec, source maps have the\n\t * following attributes:\n\t *\n\t * - version: Which version of the source map spec this map is following.\n\t * - sources: An array of URLs to the original source files.\n\t * - names: An array of identifiers which can be referrenced by individual mappings.\n\t * - sourceRoot: Optional. The URL root from which all sources are relative.\n\t * - sourcesContent: Optional. An array of contents of the original source files.\n\t * - mappings: A string of base64 VLQs which contain the actual mappings.\n\t * - file: Optional. The generated file this source map is associated with.\n\t *\n\t * Here is an example source map, taken from the source map spec[0]:\n\t *\n\t * {\n\t * version : 3,\n\t * file: \"out.js\",\n\t * sourceRoot : \"\",\n\t * sources: [\"foo.js\", \"bar.js\"],\n\t * names: [\"src\", \"maps\", \"are\", \"fun\"],\n\t * mappings: \"AA,AB;;ABCDE;\"\n\t * }\n\t *\n\t * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n\t */\n\tfunction BasicSourceMapConsumer(aSourceMap) {\n\t var sourceMap = aSourceMap;\n\t if (typeof aSourceMap === 'string') {\n\t sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n\t }\n\n\t var version = util.getArg(sourceMap, 'version');\n\t var sources = util.getArg(sourceMap, 'sources');\n\t // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n\t // requires the array) to play nice here.\n\t var names = util.getArg(sourceMap, 'names', []);\n\t var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n\t var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n\t var mappings = util.getArg(sourceMap, 'mappings');\n\t var file = util.getArg(sourceMap, 'file', null);\n\n\t // Once again, Sass deviates from the spec and supplies the version as a\n\t // string rather than a number, so we use loose equality checking here.\n\t if (version != this._version) {\n\t throw new Error('Unsupported version: ' + version);\n\t }\n\n\t sources = sources\n\t .map(String)\n\t // Some source maps produce relative source paths like \"./foo.js\" instead of\n\t // \"foo.js\". Normalize these first so that future comparisons will succeed.\n\t // See bugzil.la/1090768.\n\t .map(util.normalize)\n\t // Always ensure that absolute sources are internally stored relative to\n\t // the source root, if the source root is absolute. Not doing this would\n\t // be particularly problematic when the source root is a prefix of the\n\t // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n\t .map(function (source) {\n\t return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n\t ? util.relative(sourceRoot, source)\n\t : source;\n\t });\n\n\t // Pass `true` below to allow duplicate names and sources. While source maps\n\t // are intended to be compressed and deduplicated, the TypeScript compiler\n\t // sometimes generates source maps with duplicates in them. See Github issue\n\t // #72 and bugzil.la/889492.\n\t this._names = ArraySet.fromArray(names.map(String), true);\n\t this._sources = ArraySet.fromArray(sources, true);\n\n\t this.sourceRoot = sourceRoot;\n\t this.sourcesContent = sourcesContent;\n\t this._mappings = mappings;\n\t this.file = file;\n\t}\n\n\tBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\n\tBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n\t/**\n\t * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n\t *\n\t * @param SourceMapGenerator aSourceMap\n\t * The source map that will be consumed.\n\t * @returns BasicSourceMapConsumer\n\t */\n\tBasicSourceMapConsumer.fromSourceMap =\n\t function SourceMapConsumer_fromSourceMap(aSourceMap) {\n\t var smc = Object.create(BasicSourceMapConsumer.prototype);\n\n\t var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n\t var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n\t smc.sourceRoot = aSourceMap._sourceRoot;\n\t smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n\t smc.sourceRoot);\n\t smc.file = aSourceMap._file;\n\n\t // Because we are modifying the entries (by converting string sources and\n\t // names to indices into the sources and names ArraySets), we have to make\n\t // a copy of the entry or else bad things happen. Shared mutable state\n\t // strikes again! See github issue #191.\n\n\t var generatedMappings = aSourceMap._mappings.toArray().slice();\n\t var destGeneratedMappings = smc.__generatedMappings = [];\n\t var destOriginalMappings = smc.__originalMappings = [];\n\n\t for (var i = 0, length = generatedMappings.length; i < length; i++) {\n\t var srcMapping = generatedMappings[i];\n\t var destMapping = new Mapping;\n\t destMapping.generatedLine = srcMapping.generatedLine;\n\t destMapping.generatedColumn = srcMapping.generatedColumn;\n\n\t if (srcMapping.source) {\n\t destMapping.source = sources.indexOf(srcMapping.source);\n\t destMapping.originalLine = srcMapping.originalLine;\n\t destMapping.originalColumn = srcMapping.originalColumn;\n\n\t if (srcMapping.name) {\n\t destMapping.name = names.indexOf(srcMapping.name);\n\t }\n\n\t destOriginalMappings.push(destMapping);\n\t }\n\n\t destGeneratedMappings.push(destMapping);\n\t }\n\n\t quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\n\t return smc;\n\t };\n\n\t/**\n\t * The version of the source mapping spec that we are consuming.\n\t */\n\tBasicSourceMapConsumer.prototype._version = 3;\n\n\t/**\n\t * The list of original sources.\n\t */\n\tObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n\t get: function () {\n\t return this._sources.toArray().map(function (s) {\n\t return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s;\n\t }, this);\n\t }\n\t});\n\n\t/**\n\t * Provide the JIT with a nice shape / hidden class.\n\t */\n\tfunction Mapping() {\n\t this.generatedLine = 0;\n\t this.generatedColumn = 0;\n\t this.source = null;\n\t this.originalLine = null;\n\t this.originalColumn = null;\n\t this.name = null;\n\t}\n\n\t/**\n\t * Parse the mappings in a string in to a data structure which we can easily\n\t * query (the ordered arrays in the `this.__generatedMappings` and\n\t * `this.__originalMappings` properties).\n\t */\n\tBasicSourceMapConsumer.prototype._parseMappings =\n\t function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n\t var generatedLine = 1;\n\t var previousGeneratedColumn = 0;\n\t var previousOriginalLine = 0;\n\t var previousOriginalColumn = 0;\n\t var previousSource = 0;\n\t var previousName = 0;\n\t var length = aStr.length;\n\t var index = 0;\n\t var cachedSegments = {};\n\t var temp = {};\n\t var originalMappings = [];\n\t var generatedMappings = [];\n\t var mapping, str, segment, end, value;\n\n\t while (index < length) {\n\t if (aStr.charAt(index) === ';') {\n\t generatedLine++;\n\t index++;\n\t previousGeneratedColumn = 0;\n\t }\n\t else if (aStr.charAt(index) === ',') {\n\t index++;\n\t }\n\t else {\n\t mapping = new Mapping();\n\t mapping.generatedLine = generatedLine;\n\n\t // Because each offset is encoded relative to the previous one,\n\t // many segments often have the same encoding. We can exploit this\n\t // fact by caching the parsed variable length fields of each segment,\n\t // allowing us to avoid a second parse if we encounter the same\n\t // segment again.\n\t for (end = index; end < length; end++) {\n\t if (this._charIsMappingSeparator(aStr, end)) {\n\t break;\n\t }\n\t }\n\t str = aStr.slice(index, end);\n\n\t segment = cachedSegments[str];\n\t if (segment) {\n\t index += str.length;\n\t } else {\n\t segment = [];\n\t while (index < end) {\n\t base64VLQ.decode(aStr, index, temp);\n\t value = temp.value;\n\t index = temp.rest;\n\t segment.push(value);\n\t }\n\n\t if (segment.length === 2) {\n\t throw new Error('Found a source, but no line and column');\n\t }\n\n\t if (segment.length === 3) {\n\t throw new Error('Found a source and line, but no column');\n\t }\n\n\t cachedSegments[str] = segment;\n\t }\n\n\t // Generated column.\n\t mapping.generatedColumn = previousGeneratedColumn + segment[0];\n\t previousGeneratedColumn = mapping.generatedColumn;\n\n\t if (segment.length > 1) {\n\t // Original source.\n\t mapping.source = previousSource + segment[1];\n\t previousSource += segment[1];\n\n\t // Original line.\n\t mapping.originalLine = previousOriginalLine + segment[2];\n\t previousOriginalLine = mapping.originalLine;\n\t // Lines are stored 0-based\n\t mapping.originalLine += 1;\n\n\t // Original column.\n\t mapping.originalColumn = previousOriginalColumn + segment[3];\n\t previousOriginalColumn = mapping.originalColumn;\n\n\t if (segment.length > 4) {\n\t // Original name.\n\t mapping.name = previousName + segment[4];\n\t previousName += segment[4];\n\t }\n\t }\n\n\t generatedMappings.push(mapping);\n\t if (typeof mapping.originalLine === 'number') {\n\t originalMappings.push(mapping);\n\t }\n\t }\n\t }\n\n\t quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n\t this.__generatedMappings = generatedMappings;\n\n\t quickSort(originalMappings, util.compareByOriginalPositions);\n\t this.__originalMappings = originalMappings;\n\t };\n\n\t/**\n\t * Find the mapping that best matches the hypothetical \"needle\" mapping that\n\t * we are searching for in the given \"haystack\" of mappings.\n\t */\n\tBasicSourceMapConsumer.prototype._findMapping =\n\t function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n\t aColumnName, aComparator, aBias) {\n\t // To return the position we are searching for, we must first find the\n\t // mapping for the given position and then return the opposite position it\n\t // points to. Because the mappings are sorted, we can use binary search to\n\t // find the best mapping.\n\n\t if (aNeedle[aLineName] <= 0) {\n\t throw new TypeError('Line must be greater than or equal to 1, got '\n\t + aNeedle[aLineName]);\n\t }\n\t if (aNeedle[aColumnName] < 0) {\n\t throw new TypeError('Column must be greater than or equal to 0, got '\n\t + aNeedle[aColumnName]);\n\t }\n\n\t return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n\t };\n\n\t/**\n\t * Compute the last column for each generated mapping. The last column is\n\t * inclusive.\n\t */\n\tBasicSourceMapConsumer.prototype.computeColumnSpans =\n\t function SourceMapConsumer_computeColumnSpans() {\n\t for (var index = 0; index < this._generatedMappings.length; ++index) {\n\t var mapping = this._generatedMappings[index];\n\n\t // Mappings do not contain a field for the last generated columnt. We\n\t // can come up with an optimistic estimate, however, by assuming that\n\t // mappings are contiguous (i.e. given two consecutive mappings, the\n\t // first mapping ends where the second one starts).\n\t if (index + 1 < this._generatedMappings.length) {\n\t var nextMapping = this._generatedMappings[index + 1];\n\n\t if (mapping.generatedLine === nextMapping.generatedLine) {\n\t mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n\t continue;\n\t }\n\t }\n\n\t // The last mapping for each line spans the entire line.\n\t mapping.lastGeneratedColumn = Infinity;\n\t }\n\t };\n\n\t/**\n\t * Returns the original source, line, and column information for the generated\n\t * source's line and column positions provided. The only argument is an object\n\t * with the following properties:\n\t *\n\t * - line: The line number in the generated source.\n\t * - column: The column number in the generated source.\n\t * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n\t * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t * closest element that is smaller than or greater than the one we are\n\t * searching for, respectively, if the exact element cannot be found.\n\t * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t * - source: The original source file, or null.\n\t * - line: The line number in the original source, or null.\n\t * - column: The column number in the original source, or null.\n\t * - name: The original identifier, or null.\n\t */\n\tBasicSourceMapConsumer.prototype.originalPositionFor =\n\t function SourceMapConsumer_originalPositionFor(aArgs) {\n\t var needle = {\n\t generatedLine: util.getArg(aArgs, 'line'),\n\t generatedColumn: util.getArg(aArgs, 'column')\n\t };\n\n\t var index = this._findMapping(\n\t needle,\n\t this._generatedMappings,\n\t \"generatedLine\",\n\t \"generatedColumn\",\n\t util.compareByGeneratedPositionsDeflated,\n\t util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n\t );\n\n\t if (index >= 0) {\n\t var mapping = this._generatedMappings[index];\n\n\t if (mapping.generatedLine === needle.generatedLine) {\n\t var source = util.getArg(mapping, 'source', null);\n\t if (source !== null) {\n\t source = this._sources.at(source);\n\t if (this.sourceRoot != null) {\n\t source = util.join(this.sourceRoot, source);\n\t }\n\t }\n\t var name = util.getArg(mapping, 'name', null);\n\t if (name !== null) {\n\t name = this._names.at(name);\n\t }\n\t return {\n\t source: source,\n\t line: util.getArg(mapping, 'originalLine', null),\n\t column: util.getArg(mapping, 'originalColumn', null),\n\t name: name\n\t };\n\t }\n\t }\n\n\t return {\n\t source: null,\n\t line: null,\n\t column: null,\n\t name: null\n\t };\n\t };\n\n\t/**\n\t * Return true if we have the source content for every source in the source\n\t * map, false otherwise.\n\t */\n\tBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n\t function BasicSourceMapConsumer_hasContentsOfAllSources() {\n\t if (!this.sourcesContent) {\n\t return false;\n\t }\n\t return this.sourcesContent.length >= this._sources.size() &&\n\t !this.sourcesContent.some(function (sc) { return sc == null; });\n\t };\n\n\t/**\n\t * Returns the original source content. The only argument is the url of the\n\t * original source file. Returns null if no original source content is\n\t * available.\n\t */\n\tBasicSourceMapConsumer.prototype.sourceContentFor =\n\t function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n\t if (!this.sourcesContent) {\n\t return null;\n\t }\n\n\t if (this.sourceRoot != null) {\n\t aSource = util.relative(this.sourceRoot, aSource);\n\t }\n\n\t if (this._sources.has(aSource)) {\n\t return this.sourcesContent[this._sources.indexOf(aSource)];\n\t }\n\n\t var url;\n\t if (this.sourceRoot != null\n\t && (url = util.urlParse(this.sourceRoot))) {\n\t // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n\t // many users. We can help them out when they expect file:// URIs to\n\t // behave like it would if they were running a local HTTP server. See\n\t // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n\t var fileUriAbsPath = aSource.replace(/^file:\\/\\//, \"\");\n\t if (url.scheme == \"file\"\n\t && this._sources.has(fileUriAbsPath)) {\n\t return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n\t }\n\n\t if ((!url.path || url.path == \"/\")\n\t && this._sources.has(\"/\" + aSource)) {\n\t return this.sourcesContent[this._sources.indexOf(\"/\" + aSource)];\n\t }\n\t }\n\n\t // This function is used recursively from\n\t // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n\t // don't want to throw if we can't find the source - we just want to\n\t // return null, so we provide a flag to exit gracefully.\n\t if (nullOnMissing) {\n\t return null;\n\t }\n\t else {\n\t throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n\t }\n\t };\n\n\t/**\n\t * Returns the generated line and column information for the original source,\n\t * line, and column positions provided. The only argument is an object with\n\t * the following properties:\n\t *\n\t * - source: The filename of the original source.\n\t * - line: The line number in the original source.\n\t * - column: The column number in the original source.\n\t * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n\t * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t * closest element that is smaller than or greater than the one we are\n\t * searching for, respectively, if the exact element cannot be found.\n\t * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t * - line: The line number in the generated source, or null.\n\t * - column: The column number in the generated source, or null.\n\t */\n\tBasicSourceMapConsumer.prototype.generatedPositionFor =\n\t function SourceMapConsumer_generatedPositionFor(aArgs) {\n\t var source = util.getArg(aArgs, 'source');\n\t if (this.sourceRoot != null) {\n\t source = util.relative(this.sourceRoot, source);\n\t }\n\t if (!this._sources.has(source)) {\n\t return {\n\t line: null,\n\t column: null,\n\t lastColumn: null\n\t };\n\t }\n\t source = this._sources.indexOf(source);\n\n\t var needle = {\n\t source: source,\n\t originalLine: util.getArg(aArgs, 'line'),\n\t originalColumn: util.getArg(aArgs, 'column')\n\t };\n\n\t var index = this._findMapping(\n\t needle,\n\t this._originalMappings,\n\t \"originalLine\",\n\t \"originalColumn\",\n\t util.compareByOriginalPositions,\n\t util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n\t );\n\n\t if (index >= 0) {\n\t var mapping = this._originalMappings[index];\n\n\t if (mapping.source === needle.source) {\n\t return {\n\t line: util.getArg(mapping, 'generatedLine', null),\n\t column: util.getArg(mapping, 'generatedColumn', null),\n\t lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n\t };\n\t }\n\t }\n\n\t return {\n\t line: null,\n\t column: null,\n\t lastColumn: null\n\t };\n\t };\n\n\texports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n\t/**\n\t * An IndexedSourceMapConsumer instance represents a parsed source map which\n\t * we can query for information. It differs from BasicSourceMapConsumer in\n\t * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n\t * input.\n\t *\n\t * The only parameter is a raw source map (either as a JSON string, or already\n\t * parsed to an object). According to the spec for indexed source maps, they\n\t * have the following attributes:\n\t *\n\t * - version: Which version of the source map spec this map is following.\n\t * - file: Optional. The generated file this source map is associated with.\n\t * - sections: A list of section definitions.\n\t *\n\t * Each value under the \"sections\" field has two fields:\n\t * - offset: The offset into the original specified at which this section\n\t * begins to apply, defined as an object with a \"line\" and \"column\"\n\t * field.\n\t * - map: A source map definition. This source map could also be indexed,\n\t * but doesn't have to be.\n\t *\n\t * Instead of the \"map\" field, it's also possible to have a \"url\" field\n\t * specifying a URL to retrieve a source map from, but that's currently\n\t * unsupported.\n\t *\n\t * Here's an example source map, taken from the source map spec[0], but\n\t * modified to omit a section which uses the \"url\" field.\n\t *\n\t * {\n\t * version : 3,\n\t * file: \"app.js\",\n\t * sections: [{\n\t * offset: {line:100, column:10},\n\t * map: {\n\t * version : 3,\n\t * file: \"section.js\",\n\t * sources: [\"foo.js\", \"bar.js\"],\n\t * names: [\"src\", \"maps\", \"are\", \"fun\"],\n\t * mappings: \"AAAA,E;;ABCDE;\"\n\t * }\n\t * }],\n\t * }\n\t *\n\t * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n\t */\n\tfunction IndexedSourceMapConsumer(aSourceMap) {\n\t var sourceMap = aSourceMap;\n\t if (typeof aSourceMap === 'string') {\n\t sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n\t }\n\n\t var version = util.getArg(sourceMap, 'version');\n\t var sections = util.getArg(sourceMap, 'sections');\n\n\t if (version != this._version) {\n\t throw new Error('Unsupported version: ' + version);\n\t }\n\n\t this._sources = new ArraySet();\n\t this._names = new ArraySet();\n\n\t var lastOffset = {\n\t line: -1,\n\t column: 0\n\t };\n\t this._sections = sections.map(function (s) {\n\t if (s.url) {\n\t // The url field will require support for asynchronicity.\n\t // See https://github.com/mozilla/source-map/issues/16\n\t throw new Error('Support for url field in sections not implemented.');\n\t }\n\t var offset = util.getArg(s, 'offset');\n\t var offsetLine = util.getArg(offset, 'line');\n\t var offsetColumn = util.getArg(offset, 'column');\n\n\t if (offsetLine < lastOffset.line ||\n\t (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n\t throw new Error('Section offsets must be ordered and non-overlapping.');\n\t }\n\t lastOffset = offset;\n\n\t return {\n\t generatedOffset: {\n\t // The offset fields are 0-based, but we use 1-based indices when\n\t // encoding/decoding from VLQ.\n\t generatedLine: offsetLine + 1,\n\t generatedColumn: offsetColumn + 1\n\t },\n\t consumer: new SourceMapConsumer(util.getArg(s, 'map'))\n\t }\n\t });\n\t}\n\n\tIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\n\tIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n\t/**\n\t * The version of the source mapping spec that we are consuming.\n\t */\n\tIndexedSourceMapConsumer.prototype._version = 3;\n\n\t/**\n\t * The list of original sources.\n\t */\n\tObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n\t get: function () {\n\t var sources = [];\n\t for (var i = 0; i < this._sections.length; i++) {\n\t for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n\t sources.push(this._sections[i].consumer.sources[j]);\n\t }\n\t }\n\t return sources;\n\t }\n\t});\n\n\t/**\n\t * Returns the original source, line, and column information for the generated\n\t * source's line and column positions provided. The only argument is an object\n\t * with the following properties:\n\t *\n\t * - line: The line number in the generated source.\n\t * - column: The column number in the generated source.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t * - source: The original source file, or null.\n\t * - line: The line number in the original source, or null.\n\t * - column: The column number in the original source, or null.\n\t * - name: The original identifier, or null.\n\t */\n\tIndexedSourceMapConsumer.prototype.originalPositionFor =\n\t function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n\t var needle = {\n\t generatedLine: util.getArg(aArgs, 'line'),\n\t generatedColumn: util.getArg(aArgs, 'column')\n\t };\n\n\t // Find the section containing the generated position we're trying to map\n\t // to an original position.\n\t var sectionIndex = binarySearch.search(needle, this._sections,\n\t function(needle, section) {\n\t var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n\t if (cmp) {\n\t return cmp;\n\t }\n\n\t return (needle.generatedColumn -\n\t section.generatedOffset.generatedColumn);\n\t });\n\t var section = this._sections[sectionIndex];\n\n\t if (!section) {\n\t return {\n\t source: null,\n\t line: null,\n\t column: null,\n\t name: null\n\t };\n\t }\n\n\t return section.consumer.originalPositionFor({\n\t line: needle.generatedLine -\n\t (section.generatedOffset.generatedLine - 1),\n\t column: needle.generatedColumn -\n\t (section.generatedOffset.generatedLine === needle.generatedLine\n\t ? section.generatedOffset.generatedColumn - 1\n\t : 0),\n\t bias: aArgs.bias\n\t });\n\t };\n\n\t/**\n\t * Return true if we have the source content for every source in the source\n\t * map, false otherwise.\n\t */\n\tIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n\t function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n\t return this._sections.every(function (s) {\n\t return s.consumer.hasContentsOfAllSources();\n\t });\n\t };\n\n\t/**\n\t * Returns the original source content. The only argument is the url of the\n\t * original source file. Returns null if no original source content is\n\t * available.\n\t */\n\tIndexedSourceMapConsumer.prototype.sourceContentFor =\n\t function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n\t for (var i = 0; i < this._sections.length; i++) {\n\t var section = this._sections[i];\n\n\t var content = section.consumer.sourceContentFor(aSource, true);\n\t if (content) {\n\t return content;\n\t }\n\t }\n\t if (nullOnMissing) {\n\t return null;\n\t }\n\t else {\n\t throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n\t }\n\t };\n\n\t/**\n\t * Returns the generated line and column information for the original source,\n\t * line, and column positions provided. The only argument is an object with\n\t * the following properties:\n\t *\n\t * - source: The filename of the original source.\n\t * - line: The line number in the original source.\n\t * - column: The column number in the original source.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t * - line: The line number in the generated source, or null.\n\t * - column: The column number in the generated source, or null.\n\t */\n\tIndexedSourceMapConsumer.prototype.generatedPositionFor =\n\t function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n\t for (var i = 0; i < this._sections.length; i++) {\n\t var section = this._sections[i];\n\n\t // Only consider this section if the requested source is in the list of\n\t // sources of the consumer.\n\t if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) {\n\t continue;\n\t }\n\t var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n\t if (generatedPosition) {\n\t var ret = {\n\t line: generatedPosition.line +\n\t (section.generatedOffset.generatedLine - 1),\n\t column: generatedPosition.column +\n\t (section.generatedOffset.generatedLine === generatedPosition.line\n\t ? section.generatedOffset.generatedColumn - 1\n\t : 0)\n\t };\n\t return ret;\n\t }\n\t }\n\n\t return {\n\t line: null,\n\t column: null\n\t };\n\t };\n\n\t/**\n\t * Parse the mappings in a string in to a data structure which we can easily\n\t * query (the ordered arrays in the `this.__generatedMappings` and\n\t * `this.__originalMappings` properties).\n\t */\n\tIndexedSourceMapConsumer.prototype._parseMappings =\n\t function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n\t this.__generatedMappings = [];\n\t this.__originalMappings = [];\n\t for (var i = 0; i < this._sections.length; i++) {\n\t var section = this._sections[i];\n\t var sectionMappings = section.consumer._generatedMappings;\n\t for (var j = 0; j < sectionMappings.length; j++) {\n\t var mapping = sectionMappings[j];\n\n\t var source = section.consumer._sources.at(mapping.source);\n\t if (section.consumer.sourceRoot !== null) {\n\t source = util.join(section.consumer.sourceRoot, source);\n\t }\n\t this._sources.add(source);\n\t source = this._sources.indexOf(source);\n\n\t var name = section.consumer._names.at(mapping.name);\n\t this._names.add(name);\n\t name = this._names.indexOf(name);\n\n\t // The mappings coming from the consumer for the section have\n\t // generated positions relative to the start of the section, so we\n\t // need to offset them to be relative to the start of the concatenated\n\t // generated file.\n\t var adjustedMapping = {\n\t source: source,\n\t generatedLine: mapping.generatedLine +\n\t (section.generatedOffset.generatedLine - 1),\n\t generatedColumn: mapping.generatedColumn +\n\t (section.generatedOffset.generatedLine === mapping.generatedLine\n\t ? section.generatedOffset.generatedColumn - 1\n\t : 0),\n\t originalLine: mapping.originalLine,\n\t originalColumn: mapping.originalColumn,\n\t name: name\n\t };\n\n\t this.__generatedMappings.push(adjustedMapping);\n\t if (typeof adjustedMapping.originalLine === 'number') {\n\t this.__originalMappings.push(adjustedMapping);\n\t }\n\t }\n\t }\n\n\t quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n\t quickSort(this.__originalMappings, util.compareByOriginalPositions);\n\t };\n\n\texports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\n\t/**\n\t * This is a helper function for getting values from parameter/options\n\t * objects.\n\t *\n\t * @param args The object we are extracting values from\n\t * @param name The name of the property we are getting.\n\t * @param defaultValue An optional value to return if the property is missing\n\t * from the object. If this is not specified and the property is missing, an\n\t * error will be thrown.\n\t */\n\tfunction getArg(aArgs, aName, aDefaultValue) {\n\t if (aName in aArgs) {\n\t return aArgs[aName];\n\t } else if (arguments.length === 3) {\n\t return aDefaultValue;\n\t } else {\n\t throw new Error('\"' + aName + '\" is a required argument.');\n\t }\n\t}\n\texports.getArg = getArg;\n\n\tvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/;\n\tvar dataUrlRegexp = /^data:.+\\,.+$/;\n\n\tfunction urlParse(aUrl) {\n\t var match = aUrl.match(urlRegexp);\n\t if (!match) {\n\t return null;\n\t }\n\t return {\n\t scheme: match[1],\n\t auth: match[2],\n\t host: match[3],\n\t port: match[4],\n\t path: match[5]\n\t };\n\t}\n\texports.urlParse = urlParse;\n\n\tfunction urlGenerate(aParsedUrl) {\n\t var url = '';\n\t if (aParsedUrl.scheme) {\n\t url += aParsedUrl.scheme + ':';\n\t }\n\t url += '//';\n\t if (aParsedUrl.auth) {\n\t url += aParsedUrl.auth + '@';\n\t }\n\t if (aParsedUrl.host) {\n\t url += aParsedUrl.host;\n\t }\n\t if (aParsedUrl.port) {\n\t url += \":\" + aParsedUrl.port\n\t }\n\t if (aParsedUrl.path) {\n\t url += aParsedUrl.path;\n\t }\n\t return url;\n\t}\n\texports.urlGenerate = urlGenerate;\n\n\t/**\n\t * Normalizes a path, or the path portion of a URL:\n\t *\n\t * - Replaces consecutive slashes with one slash.\n\t * - Removes unnecessary '.' parts.\n\t * - Removes unnecessary '/..' parts.\n\t *\n\t * Based on code in the Node.js 'path' core module.\n\t *\n\t * @param aPath The path or url to normalize.\n\t */\n\tfunction normalize(aPath) {\n\t var path = aPath;\n\t var url = urlParse(aPath);\n\t if (url) {\n\t if (!url.path) {\n\t return aPath;\n\t }\n\t path = url.path;\n\t }\n\t var isAbsolute = exports.isAbsolute(path);\n\n\t var parts = path.split(/\\/+/);\n\t for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n\t part = parts[i];\n\t if (part === '.') {\n\t parts.splice(i, 1);\n\t } else if (part === '..') {\n\t up++;\n\t } else if (up > 0) {\n\t if (part === '') {\n\t // The first part is blank if the path is absolute. Trying to go\n\t // above the root is a no-op. Therefore we can remove all '..' parts\n\t // directly after the root.\n\t parts.splice(i + 1, up);\n\t up = 0;\n\t } else {\n\t parts.splice(i, 2);\n\t up--;\n\t }\n\t }\n\t }\n\t path = parts.join('/');\n\n\t if (path === '') {\n\t path = isAbsolute ? '/' : '.';\n\t }\n\n\t if (url) {\n\t url.path = path;\n\t return urlGenerate(url);\n\t }\n\t return path;\n\t}\n\texports.normalize = normalize;\n\n\t/**\n\t * Joins two paths/URLs.\n\t *\n\t * @param aRoot The root path or URL.\n\t * @param aPath The path or URL to be joined with the root.\n\t *\n\t * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n\t * scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n\t * first.\n\t * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n\t * is updated with the result and aRoot is returned. Otherwise the result\n\t * is returned.\n\t * - If aPath is absolute, the result is aPath.\n\t * - Otherwise the two paths are joined with a slash.\n\t * - Joining for example 'http://' and 'www.example.com' is also supported.\n\t */\n\tfunction join(aRoot, aPath) {\n\t if (aRoot === \"\") {\n\t aRoot = \".\";\n\t }\n\t if (aPath === \"\") {\n\t aPath = \".\";\n\t }\n\t var aPathUrl = urlParse(aPath);\n\t var aRootUrl = urlParse(aRoot);\n\t if (aRootUrl) {\n\t aRoot = aRootUrl.path || '/';\n\t }\n\n\t // `join(foo, '//www.example.org')`\n\t if (aPathUrl && !aPathUrl.scheme) {\n\t if (aRootUrl) {\n\t aPathUrl.scheme = aRootUrl.scheme;\n\t }\n\t return urlGenerate(aPathUrl);\n\t }\n\n\t if (aPathUrl || aPath.match(dataUrlRegexp)) {\n\t return aPath;\n\t }\n\n\t // `join('http://', 'www.example.com')`\n\t if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n\t aRootUrl.host = aPath;\n\t return urlGenerate(aRootUrl);\n\t }\n\n\t var joined = aPath.charAt(0) === '/'\n\t ? aPath\n\t : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n\t if (aRootUrl) {\n\t aRootUrl.path = joined;\n\t return urlGenerate(aRootUrl);\n\t }\n\t return joined;\n\t}\n\texports.join = join;\n\n\texports.isAbsolute = function (aPath) {\n\t return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp);\n\t};\n\n\t/**\n\t * Make a path relative to a URL or another path.\n\t *\n\t * @param aRoot The root path or URL.\n\t * @param aPath The path or URL to be made relative to aRoot.\n\t */\n\tfunction relative(aRoot, aPath) {\n\t if (aRoot === \"\") {\n\t aRoot = \".\";\n\t }\n\n\t aRoot = aRoot.replace(/\\/$/, '');\n\n\t // It is possible for the path to be above the root. In this case, simply\n\t // checking whether the root is a prefix of the path won't work. Instead, we\n\t // need to remove components from the root one by one, until either we find\n\t // a prefix that fits, or we run out of components to remove.\n\t var level = 0;\n\t while (aPath.indexOf(aRoot + '/') !== 0) {\n\t var index = aRoot.lastIndexOf(\"/\");\n\t if (index < 0) {\n\t return aPath;\n\t }\n\n\t // If the only part of the root that is left is the scheme (i.e. http://,\n\t // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n\t // have exhausted all components, so the path is not relative to the root.\n\t aRoot = aRoot.slice(0, index);\n\t if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n\t return aPath;\n\t }\n\n\t ++level;\n\t }\n\n\t // Make sure we add a \"../\" for each component we removed from the root.\n\t return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n\t}\n\texports.relative = relative;\n\n\tvar supportsNullProto = (function () {\n\t var obj = Object.create(null);\n\t return !('__proto__' in obj);\n\t}());\n\n\tfunction identity (s) {\n\t return s;\n\t}\n\n\t/**\n\t * Because behavior goes wacky when you set `__proto__` on objects, we\n\t * have to prefix all the strings in our set with an arbitrary character.\n\t *\n\t * See https://github.com/mozilla/source-map/pull/31 and\n\t * https://github.com/mozilla/source-map/issues/30\n\t *\n\t * @param String aStr\n\t */\n\tfunction toSetString(aStr) {\n\t if (isProtoString(aStr)) {\n\t return '$' + aStr;\n\t }\n\n\t return aStr;\n\t}\n\texports.toSetString = supportsNullProto ? identity : toSetString;\n\n\tfunction fromSetString(aStr) {\n\t if (isProtoString(aStr)) {\n\t return aStr.slice(1);\n\t }\n\n\t return aStr;\n\t}\n\texports.fromSetString = supportsNullProto ? identity : fromSetString;\n\n\tfunction isProtoString(s) {\n\t if (!s) {\n\t return false;\n\t }\n\n\t var length = s.length;\n\n\t if (length < 9 /* \"__proto__\".length */) {\n\t return false;\n\t }\n\n\t if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||\n\t s.charCodeAt(length - 2) !== 95 /* '_' */ ||\n\t s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n\t s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n\t s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n\t s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n\t s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n\t s.charCodeAt(length - 8) !== 95 /* '_' */ ||\n\t s.charCodeAt(length - 9) !== 95 /* '_' */) {\n\t return false;\n\t }\n\n\t for (var i = length - 10; i >= 0; i--) {\n\t if (s.charCodeAt(i) !== 36 /* '$' */) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t}\n\n\t/**\n\t * Comparator between two mappings where the original positions are compared.\n\t *\n\t * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n\t * mappings with the same original source/line/column, but different generated\n\t * line and column the same. Useful when searching for a mapping with a\n\t * stubbed out mapping.\n\t */\n\tfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n\t var cmp = mappingA.source - mappingB.source;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\n\t cmp = mappingA.originalLine - mappingB.originalLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\n\t cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t if (cmp !== 0 || onlyCompareOriginal) {\n\t return cmp;\n\t }\n\n\t cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\n\t cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\n\t return mappingA.name - mappingB.name;\n\t}\n\texports.compareByOriginalPositions = compareByOriginalPositions;\n\n\t/**\n\t * Comparator between two mappings with deflated source and name indices where\n\t * the generated positions are compared.\n\t *\n\t * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n\t * mappings with the same generated line and column, but different\n\t * source/name/original line and column the same. Useful when searching for a\n\t * mapping with a stubbed out mapping.\n\t */\n\tfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n\t var cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\n\t cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t if (cmp !== 0 || onlyCompareGenerated) {\n\t return cmp;\n\t }\n\n\t cmp = mappingA.source - mappingB.source;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\n\t cmp = mappingA.originalLine - mappingB.originalLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\n\t cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\n\t return mappingA.name - mappingB.name;\n\t}\n\texports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\n\tfunction strcmp(aStr1, aStr2) {\n\t if (aStr1 === aStr2) {\n\t return 0;\n\t }\n\n\t if (aStr1 > aStr2) {\n\t return 1;\n\t }\n\n\t return -1;\n\t}\n\n\t/**\n\t * Comparator between two mappings with inflated source and name strings where\n\t * the generated positions are compared.\n\t */\n\tfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n\t var cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\n\t cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\n\t cmp = strcmp(mappingA.source, mappingB.source);\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\n\t cmp = mappingA.originalLine - mappingB.originalLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\n\t cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\n\t return strcmp(mappingA.name, mappingB.name);\n\t}\n\texports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\n\texports.GREATEST_LOWER_BOUND = 1;\n\texports.LEAST_UPPER_BOUND = 2;\n\n\t/**\n\t * Recursive implementation of binary search.\n\t *\n\t * @param aLow Indices here and lower do not contain the needle.\n\t * @param aHigh Indices here and higher do not contain the needle.\n\t * @param aNeedle The element being searched for.\n\t * @param aHaystack The non-empty array being searched.\n\t * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n\t * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n\t * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t * closest element that is smaller than or greater than the one we are\n\t * searching for, respectively, if the exact element cannot be found.\n\t */\n\tfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n\t // This function terminates when one of the following is true:\n\t //\n\t // 1. We find the exact element we are looking for.\n\t //\n\t // 2. We did not find the exact element, but we can return the index of\n\t // the next-closest element.\n\t //\n\t // 3. We did not find the exact element, and there is no next-closest\n\t // element than the one we are searching for, so we return -1.\n\t var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n\t var cmp = aCompare(aNeedle, aHaystack[mid], true);\n\t if (cmp === 0) {\n\t // Found the element we are looking for.\n\t return mid;\n\t }\n\t else if (cmp > 0) {\n\t // Our needle is greater than aHaystack[mid].\n\t if (aHigh - mid > 1) {\n\t // The element is in the upper half.\n\t return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n\t }\n\n\t // The exact needle element was not found in this haystack. Determine if\n\t // we are in termination case (3) or (2) and return the appropriate thing.\n\t if (aBias == exports.LEAST_UPPER_BOUND) {\n\t return aHigh < aHaystack.length ? aHigh : -1;\n\t } else {\n\t return mid;\n\t }\n\t }\n\t else {\n\t // Our needle is less than aHaystack[mid].\n\t if (mid - aLow > 1) {\n\t // The element is in the lower half.\n\t return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n\t }\n\n\t // we are in termination case (3) or (2) and return the appropriate thing.\n\t if (aBias == exports.LEAST_UPPER_BOUND) {\n\t return mid;\n\t } else {\n\t return aLow < 0 ? -1 : aLow;\n\t }\n\t }\n\t}\n\n\t/**\n\t * This is an implementation of binary search which will always try and return\n\t * the index of the closest element if there is no exact hit. This is because\n\t * mappings between original and generated line/col pairs are single points,\n\t * and there is an implicit region between each of them, so a miss just means\n\t * that you aren't on the very start of a region.\n\t *\n\t * @param aNeedle The element you are looking for.\n\t * @param aHaystack The array that is being searched.\n\t * @param aCompare A function which takes the needle and an element in the\n\t * array and returns -1, 0, or 1 depending on whether the needle is less\n\t * than, equal to, or greater than the element, respectively.\n\t * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n\t * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t * closest element that is smaller than or greater than the one we are\n\t * searching for, respectively, if the exact element cannot be found.\n\t * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n\t */\n\texports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n\t if (aHaystack.length === 0) {\n\t return -1;\n\t }\n\n\t var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n\t aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n\t if (index < 0) {\n\t return -1;\n\t }\n\n\t // We have found either the exact element, or the next-closest element than\n\t // the one we are searching for. However, there may be more than one such\n\t // element. Make sure we always return the smallest of these.\n\t while (index - 1 >= 0) {\n\t if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n\t break;\n\t }\n\t --index;\n\t }\n\n\t return index;\n\t};\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\n\tvar util = __webpack_require__(2);\n\tvar has = Object.prototype.hasOwnProperty;\n\n\t/**\n\t * A data structure which is a combination of an array and a set. Adding a new\n\t * member is O(1), testing for membership is O(1), and finding the index of an\n\t * element is O(1). Removing elements from the set is not supported. Only\n\t * strings are supported for membership.\n\t */\n\tfunction ArraySet() {\n\t this._array = [];\n\t this._set = Object.create(null);\n\t}\n\n\t/**\n\t * Static method for creating ArraySet instances from an existing array.\n\t */\n\tArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n\t var set = new ArraySet();\n\t for (var i = 0, len = aArray.length; i < len; i++) {\n\t set.add(aArray[i], aAllowDuplicates);\n\t }\n\t return set;\n\t};\n\n\t/**\n\t * Return how many unique items are in this ArraySet. If duplicates have been\n\t * added, than those do not count towards the size.\n\t *\n\t * @returns Number\n\t */\n\tArraySet.prototype.size = function ArraySet_size() {\n\t return Object.getOwnPropertyNames(this._set).length;\n\t};\n\n\t/**\n\t * Add the given string to this set.\n\t *\n\t * @param String aStr\n\t */\n\tArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n\t var sStr = util.toSetString(aStr);\n\t var isDuplicate = has.call(this._set, sStr);\n\t var idx = this._array.length;\n\t if (!isDuplicate || aAllowDuplicates) {\n\t this._array.push(aStr);\n\t }\n\t if (!isDuplicate) {\n\t this._set[sStr] = idx;\n\t }\n\t};\n\n\t/**\n\t * Is the given string a member of this set?\n\t *\n\t * @param String aStr\n\t */\n\tArraySet.prototype.has = function ArraySet_has(aStr) {\n\t var sStr = util.toSetString(aStr);\n\t return has.call(this._set, sStr);\n\t};\n\n\t/**\n\t * What is the index of the given string in the array?\n\t *\n\t * @param String aStr\n\t */\n\tArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n\t var sStr = util.toSetString(aStr);\n\t if (has.call(this._set, sStr)) {\n\t return this._set[sStr];\n\t }\n\t throw new Error('\"' + aStr + '\" is not in the set.');\n\t};\n\n\t/**\n\t * What is the element at the given index?\n\t *\n\t * @param Number aIdx\n\t */\n\tArraySet.prototype.at = function ArraySet_at(aIdx) {\n\t if (aIdx >= 0 && aIdx < this._array.length) {\n\t return this._array[aIdx];\n\t }\n\t throw new Error('No element indexed by ' + aIdx);\n\t};\n\n\t/**\n\t * Returns the array representation of this set (which has the proper indices\n\t * indicated by indexOf). Note that this is a copy of the internal array used\n\t * for storing the members so that no one can mess with internal state.\n\t */\n\tArraySet.prototype.toArray = function ArraySet_toArray() {\n\t return this._array.slice();\n\t};\n\n\texports.ArraySet = ArraySet;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t *\n\t * Based on the Base 64 VLQ implementation in Closure Compiler:\n\t * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n\t *\n\t * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n\t * Redistribution and use in source and binary forms, with or without\n\t * modification, are permitted provided that the following conditions are\n\t * met:\n\t *\n\t * * Redistributions of source code must retain the above copyright\n\t * notice, this list of conditions and the following disclaimer.\n\t * * Redistributions in binary form must reproduce the above\n\t * copyright notice, this list of conditions and the following\n\t * disclaimer in the documentation and/or other materials provided\n\t * with the distribution.\n\t * * Neither the name of Google Inc. nor the names of its\n\t * contributors may be used to endorse or promote products derived\n\t * from this software without specific prior written permission.\n\t *\n\t * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\t * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n\t * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n\t * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n\t * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n\t * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n\t * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n\t * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n\t * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n\t * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t */\n\n\tvar base64 = __webpack_require__(6);\n\n\t// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n\t// length quantities we use in the source map spec, the first bit is the sign,\n\t// the next four bits are the actual value, and the 6th bit is the\n\t// continuation bit. The continuation bit tells us whether there are more\n\t// digits in this value following this digit.\n\t//\n\t// Continuation\n\t// | Sign\n\t// | |\n\t// V V\n\t// 101011\n\n\tvar VLQ_BASE_SHIFT = 5;\n\n\t// binary: 100000\n\tvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n\t// binary: 011111\n\tvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n\t// binary: 100000\n\tvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n\t/**\n\t * Converts from a two-complement value to a value where the sign bit is\n\t * placed in the least significant bit. For example, as decimals:\n\t * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n\t * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n\t */\n\tfunction toVLQSigned(aValue) {\n\t return aValue < 0\n\t ? ((-aValue) << 1) + 1\n\t : (aValue << 1) + 0;\n\t}\n\n\t/**\n\t * Converts to a two-complement value from a value where the sign bit is\n\t * placed in the least significant bit. For example, as decimals:\n\t * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n\t * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n\t */\n\tfunction fromVLQSigned(aValue) {\n\t var isNegative = (aValue & 1) === 1;\n\t var shifted = aValue >> 1;\n\t return isNegative\n\t ? -shifted\n\t : shifted;\n\t}\n\n\t/**\n\t * Returns the base 64 VLQ encoded value.\n\t */\n\texports.encode = function base64VLQ_encode(aValue) {\n\t var encoded = \"\";\n\t var digit;\n\n\t var vlq = toVLQSigned(aValue);\n\n\t do {\n\t digit = vlq & VLQ_BASE_MASK;\n\t vlq >>>= VLQ_BASE_SHIFT;\n\t if (vlq > 0) {\n\t // There are still more digits in this value, so we must make sure the\n\t // continuation bit is marked.\n\t digit |= VLQ_CONTINUATION_BIT;\n\t }\n\t encoded += base64.encode(digit);\n\t } while (vlq > 0);\n\n\t return encoded;\n\t};\n\n\t/**\n\t * Decodes the next base 64 VLQ value from the given string and returns the\n\t * value and the rest of the string via the out parameter.\n\t */\n\texports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n\t var strLen = aStr.length;\n\t var result = 0;\n\t var shift = 0;\n\t var continuation, digit;\n\n\t do {\n\t if (aIndex >= strLen) {\n\t throw new Error(\"Expected more digits in base 64 VLQ value.\");\n\t }\n\n\t digit = base64.decode(aStr.charCodeAt(aIndex++));\n\t if (digit === -1) {\n\t throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n\t }\n\n\t continuation = !!(digit & VLQ_CONTINUATION_BIT);\n\t digit &= VLQ_BASE_MASK;\n\t result = result + (digit << shift);\n\t shift += VLQ_BASE_SHIFT;\n\t } while (continuation);\n\n\t aOutParam.value = fromVLQSigned(result);\n\t aOutParam.rest = aIndex;\n\t};\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\n\tvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n\t/**\n\t * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n\t */\n\texports.encode = function (number) {\n\t if (0 <= number && number < intToCharMap.length) {\n\t return intToCharMap[number];\n\t }\n\t throw new TypeError(\"Must be between 0 and 63: \" + number);\n\t};\n\n\t/**\n\t * Decode a single base 64 character code digit to an integer. Returns -1 on\n\t * failure.\n\t */\n\texports.decode = function (charCode) {\n\t var bigA = 65; // 'A'\n\t var bigZ = 90; // 'Z'\n\n\t var littleA = 97; // 'a'\n\t var littleZ = 122; // 'z'\n\n\t var zero = 48; // '0'\n\t var nine = 57; // '9'\n\n\t var plus = 43; // '+'\n\t var slash = 47; // '/'\n\n\t var littleOffset = 26;\n\t var numberOffset = 52;\n\n\t // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n\t if (bigA <= charCode && charCode <= bigZ) {\n\t return (charCode - bigA);\n\t }\n\n\t // 26 - 51: abcdefghijklmnopqrstuvwxyz\n\t if (littleA <= charCode && charCode <= littleZ) {\n\t return (charCode - littleA + littleOffset);\n\t }\n\n\t // 52 - 61: 0123456789\n\t if (zero <= charCode && charCode <= nine) {\n\t return (charCode - zero + numberOffset);\n\t }\n\n\t // 62: +\n\t if (charCode == plus) {\n\t return 62;\n\t }\n\n\t // 63: /\n\t if (charCode == slash) {\n\t return 63;\n\t }\n\n\t // Invalid base64 digit.\n\t return -1;\n\t};\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\n\t// It turns out that some (most?) JavaScript engines don't self-host\n\t// `Array.prototype.sort`. This makes sense because C++ will likely remain\n\t// faster than JS when doing raw CPU-intensive sorting. However, when using a\n\t// custom comparator function, calling back and forth between the VM's C++ and\n\t// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n\t// worse generated code for the comparator function than would be optimal. In\n\t// fact, when sorting with a comparator, these costs outweigh the benefits of\n\t// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n\t// a ~3500ms mean speed-up in `bench/bench.html`.\n\n\t/**\n\t * Swap the elements indexed by `x` and `y` in the array `ary`.\n\t *\n\t * @param {Array} ary\n\t * The array.\n\t * @param {Number} x\n\t * The index of the first item.\n\t * @param {Number} y\n\t * The index of the second item.\n\t */\n\tfunction swap(ary, x, y) {\n\t var temp = ary[x];\n\t ary[x] = ary[y];\n\t ary[y] = temp;\n\t}\n\n\t/**\n\t * Returns a random integer within the range `low .. high` inclusive.\n\t *\n\t * @param {Number} low\n\t * The lower bound on the range.\n\t * @param {Number} high\n\t * The upper bound on the range.\n\t */\n\tfunction randomIntInRange(low, high) {\n\t return Math.round(low + (Math.random() * (high - low)));\n\t}\n\n\t/**\n\t * The Quick Sort algorithm.\n\t *\n\t * @param {Array} ary\n\t * An array to sort.\n\t * @param {function} comparator\n\t * Function to use to compare two items.\n\t * @param {Number} p\n\t * Start index of the array\n\t * @param {Number} r\n\t * End index of the array\n\t */\n\tfunction doQuickSort(ary, comparator, p, r) {\n\t // If our lower bound is less than our upper bound, we (1) partition the\n\t // array into two pieces and (2) recurse on each half. If it is not, this is\n\t // the empty array and our base case.\n\n\t if (p < r) {\n\t // (1) Partitioning.\n\t //\n\t // The partitioning chooses a pivot between `p` and `r` and moves all\n\t // elements that are less than or equal to the pivot to the before it, and\n\t // all the elements that are greater than it after it. The effect is that\n\t // once partition is done, the pivot is in the exact place it will be when\n\t // the array is put in sorted order, and it will not need to be moved\n\t // again. This runs in O(n) time.\n\n\t // Always choose a random pivot so that an input array which is reverse\n\t // sorted does not cause O(n^2) running time.\n\t var pivotIndex = randomIntInRange(p, r);\n\t var i = p - 1;\n\n\t swap(ary, pivotIndex, r);\n\t var pivot = ary[r];\n\n\t // Immediately after `j` is incremented in this loop, the following hold\n\t // true:\n\t //\n\t // * Every element in `ary[p .. i]` is less than or equal to the pivot.\n\t //\n\t // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n\t for (var j = p; j < r; j++) {\n\t if (comparator(ary[j], pivot) <= 0) {\n\t i += 1;\n\t swap(ary, i, j);\n\t }\n\t }\n\n\t swap(ary, i + 1, j);\n\t var q = i + 1;\n\n\t // (2) Recurse on each half.\n\n\t doQuickSort(ary, comparator, p, q - 1);\n\t doQuickSort(ary, comparator, q + 1, r);\n\t }\n\t}\n\n\t/**\n\t * Sort the given array in-place with the given comparator function.\n\t *\n\t * @param {Array} ary\n\t * An array to sort.\n\t * @param {function} comparator\n\t * Function to use to compare two items.\n\t */\n\texports.quickSort = function (ary, comparator) {\n\t doQuickSort(ary, comparator, 0, ary.length - 1);\n\t};\n\n\n/***/ })\n/******/ ])\n});\n;","module.exports = require('./_shared')('native-function-to-string', Function.toString);\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = require('./_descriptors') ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n require('./_redefine')(global, NUMBER, $Number);\n}\n","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","'use strict';\nvar regexpExec = require('./_regexp-exec');\nrequire('./_export')({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n","var aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar toLength = require('./_to-length');\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IObject(O);\n var length = toLength(O.length);\n var index = isRight ? length - 1 : 0;\n var i = isRight ? -1 : 1;\n if (aLen < 2) for (;;) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (isRight ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n};\n","'use strict';\n// 21.1.3.25 String.prototype.trim()\nrequire('./_string-trim')('trim', function ($trim) {\n return function trim() {\n return $trim(this, 3);\n };\n});\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_ICSS_IMPORT_0___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../global/global.css\");\nvar ___CSS_LOADER_AT_RULE_IMPORT_0___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../global/variables.css\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\nexports.i(___CSS_LOADER_ICSS_IMPORT_0___, \"\", true);\nexports.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n// Module\nexports.push([module.id, \".icon_c95 {\\n display: inline-block;\\n\\n fill: currentColor;\\n}\\n\\n.glyph_54e {\\n display: inline-flex;\\n\\n margin-right: -1px;\\n margin-left: -1px;\\n\\n pointer-events: none\\n}\\n\\n.glyph_54e[width='10'] {\\n vertical-align: -1px;\\n }\\n\\n.glyph_54e[width='14'] {\\n margin-right: -2px;\\n margin-left: 0;\\n\\n vertical-align: -3px;\\n }\\n\\n.glyph_54e[width='16'] {\\n vertical-align: -3px;\\n }\\n\\n.glyph_54e[width='20'] {\\n vertical-align: -2px;\\n }\\n\\n.glyph_54e.compatibilityMode_228 {\\n width: 16px;\\n height: 16px;\\n margin-right: 0;\\n margin-left: 0;\\n }\\n\\n/* HACK: This media query hack makes styles applied for WebKit browsers only */\\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\\n .glyph_54e {\\n width: auto; /* Safari size bug workaround, see https://youtrack.jetbrains.com/issue/RG-1983 */\\n }\\n}\\n\\n.gray_f7e {\\n color: #999;\\n color: var(--ring-icon-secondary-color);\\n}\\n\\n.hover_366 {\\n color: #80c6ff;\\n color: var(--ring-icon-hover-color);\\n}\\n\\n.green_08f {\\n color: #59a869;\\n color: var(--ring-icon-success-color);\\n}\\n\\n.magenta_e9b {\\n color: #ff008c;\\n color: var(--ring-link-hover-color);\\n}\\n\\n.red_9ec {\\n color: #db5860;\\n color: var(--ring-icon-error-color);\\n}\\n\\n.blue_ab2 {\\n color: #008eff;\\n color: var(--ring-main-color);\\n}\\n\\n.white_666 {\\n color: #fff;\\n color: var(--ring-dark-text-color);\\n}\\n\\n.loading_89d {\\n -webkit-animation-name: icon-loading_55b;\\n animation-name: icon-loading_55b;\\n -webkit-animation-duration: 1200ms;\\n animation-duration: 1200ms;\\n -webkit-animation-iteration-count: infinite;\\n animation-iteration-count: infinite;\\n}\\n\\n@-webkit-keyframes icon-loading_55b {\\n 0% {\\n transform: scale(1);\\n }\\n\\n 50% {\\n transform: scale(0.9);\\n\\n opacity: 0.5;\\n }\\n\\n 100% {\\n transform: scale(1);\\n }\\n}\\n\\n@keyframes icon-loading_55b {\\n 0% {\\n transform: scale(1);\\n }\\n\\n 50% {\\n transform: scale(0.9);\\n\\n opacity: 0.5;\\n }\\n\\n 100% {\\n transform: scale(1);\\n }\\n}\\n\", \"\"]);\n// Exports\nexports.locals = {\n\t\"unit\": \"\" + ___CSS_LOADER_ICSS_IMPORT_0___.locals[\"unit\"] + \"\",\n\t\"icon\": \"icon_c95\",\n\t\"glyph\": \"glyph_54e\",\n\t\"compatibilityMode\": \"compatibilityMode_228\",\n\t\"gray\": \"gray_f7e\",\n\t\"hover\": \"hover_366\",\n\t\"green\": \"green_08f\",\n\t\"magenta\": \"magenta_e9b\",\n\t\"red\": \"red_9ec\",\n\t\"blue\": \"blue_ab2\",\n\t\"white\": \"white_666\",\n\t\"loading\": \"loading_89d\",\n\t\"icon-loading\": \"icon-loading_55b\"\n};\nmodule.exports = exports;\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","module.exports = function(originalModule) {\n\tif (!originalModule.webpackPolyfill) {\n\t\tvar module = Object.create(originalModule);\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"exports\", {\n\t\t\tenumerable: true\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","'use strict';\nvar global = require('./_global');\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar validate = require('./_validate-collection');\nvar NATIVE_WEAK_MAP = require('./_validate-collection');\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (factory());\n}(this, (function () { 'use strict';\n\n /**\n * Applies the :focus-visible polyfill at the given scope.\n * A scope in this case is either the top-level Document or a Shadow Root.\n *\n * @param {(Document|ShadowRoot)} scope\n * @see https://github.com/WICG/focus-visible\n */\n function applyFocusVisiblePolyfill(scope) {\n var hadKeyboardEvent = true;\n var hadFocusVisibleRecently = false;\n var hadFocusVisibleRecentlyTimeout = null;\n\n var inputTypesWhitelist = {\n text: true,\n search: true,\n url: true,\n tel: true,\n email: true,\n password: true,\n number: true,\n date: true,\n month: true,\n week: true,\n time: true,\n datetime: true,\n 'datetime-local': true\n };\n\n /**\n * Helper function for legacy browsers and iframes which sometimes focus\n * elements like document, body, and non-interactive SVG.\n * @param {Element} el\n */\n function isValidFocusTarget(el) {\n if (\n el &&\n el !== document &&\n el.nodeName !== 'HTML' &&\n el.nodeName !== 'BODY' &&\n 'classList' in el &&\n 'contains' in el.classList\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * Computes whether the given element should automatically trigger the\n * `focus-visible` class being added, i.e. whether it should always match\n * `:focus-visible` when focused.\n * @param {Element} el\n * @return {boolean}\n */\n function focusTriggersKeyboardModality(el) {\n var type = el.type;\n var tagName = el.tagName;\n\n if (tagName === 'INPUT' && inputTypesWhitelist[type] && !el.readOnly) {\n return true;\n }\n\n if (tagName === 'TEXTAREA' && !el.readOnly) {\n return true;\n }\n\n if (el.isContentEditable) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Add the `focus-visible` class to the given element if it was not added by\n * the author.\n * @param {Element} el\n */\n function addFocusVisibleClass(el) {\n if (el.classList.contains('focus-visible')) {\n return;\n }\n el.classList.add('focus-visible');\n el.setAttribute('data-focus-visible-added', '');\n }\n\n /**\n * Remove the `focus-visible` class from the given element if it was not\n * originally added by the author.\n * @param {Element} el\n */\n function removeFocusVisibleClass(el) {\n if (!el.hasAttribute('data-focus-visible-added')) {\n return;\n }\n el.classList.remove('focus-visible');\n el.removeAttribute('data-focus-visible-added');\n }\n\n /**\n * If the most recent user interaction was via the keyboard;\n * and the key press did not include a meta, alt/option, or control key;\n * then the modality is keyboard. Otherwise, the modality is not keyboard.\n * Apply `focus-visible` to any current active element and keep track\n * of our keyboard modality state with `hadKeyboardEvent`.\n * @param {KeyboardEvent} e\n */\n function onKeyDown(e) {\n if (e.metaKey || e.altKey || e.ctrlKey) {\n return;\n }\n\n if (isValidFocusTarget(scope.activeElement)) {\n addFocusVisibleClass(scope.activeElement);\n }\n\n hadKeyboardEvent = true;\n }\n\n /**\n * If at any point a user clicks with a pointing device, ensure that we change\n * the modality away from keyboard.\n * This avoids the situation where a user presses a key on an already focused\n * element, and then clicks on a different element, focusing it with a\n * pointing device, while we still think we're in keyboard modality.\n * @param {Event} e\n */\n function onPointerDown(e) {\n hadKeyboardEvent = false;\n }\n\n /**\n * On `focus`, add the `focus-visible` class to the target if:\n * - the target received focus as a result of keyboard navigation, or\n * - the event target is an element that will likely require interaction\n * via the keyboard (e.g. a text box)\n * @param {Event} e\n */\n function onFocus(e) {\n // Prevent IE from focusing the document or HTML element.\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (hadKeyboardEvent || focusTriggersKeyboardModality(e.target)) {\n addFocusVisibleClass(e.target);\n }\n }\n\n /**\n * On `blur`, remove the `focus-visible` class from the target.\n * @param {Event} e\n */\n function onBlur(e) {\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (\n e.target.classList.contains('focus-visible') ||\n e.target.hasAttribute('data-focus-visible-added')\n ) {\n // To detect a tab/window switch, we look for a blur event followed\n // rapidly by a visibility change.\n // If we don't see a visibility change within 100ms, it's probably a\n // regular focus change.\n hadFocusVisibleRecently = true;\n window.clearTimeout(hadFocusVisibleRecentlyTimeout);\n hadFocusVisibleRecentlyTimeout = window.setTimeout(function() {\n hadFocusVisibleRecently = false;\n }, 100);\n removeFocusVisibleClass(e.target);\n }\n }\n\n /**\n * If the user changes tabs, keep track of whether or not the previously\n * focused element had .focus-visible.\n * @param {Event} e\n */\n function onVisibilityChange(e) {\n if (document.visibilityState === 'hidden') {\n // If the tab becomes active again, the browser will handle calling focus\n // on the element (Safari actually calls it twice).\n // If this tab change caused a blur on an element with focus-visible,\n // re-apply the class when the user switches back to the tab.\n if (hadFocusVisibleRecently) {\n hadKeyboardEvent = true;\n }\n addInitialPointerMoveListeners();\n }\n }\n\n /**\n * Add a group of listeners to detect usage of any pointing devices.\n * These listeners will be added when the polyfill first loads, and anytime\n * the window is blurred, so that they are active when the window regains\n * focus.\n */\n function addInitialPointerMoveListeners() {\n document.addEventListener('mousemove', onInitialPointerMove);\n document.addEventListener('mousedown', onInitialPointerMove);\n document.addEventListener('mouseup', onInitialPointerMove);\n document.addEventListener('pointermove', onInitialPointerMove);\n document.addEventListener('pointerdown', onInitialPointerMove);\n document.addEventListener('pointerup', onInitialPointerMove);\n document.addEventListener('touchmove', onInitialPointerMove);\n document.addEventListener('touchstart', onInitialPointerMove);\n document.addEventListener('touchend', onInitialPointerMove);\n }\n\n function removeInitialPointerMoveListeners() {\n document.removeEventListener('mousemove', onInitialPointerMove);\n document.removeEventListener('mousedown', onInitialPointerMove);\n document.removeEventListener('mouseup', onInitialPointerMove);\n document.removeEventListener('pointermove', onInitialPointerMove);\n document.removeEventListener('pointerdown', onInitialPointerMove);\n document.removeEventListener('pointerup', onInitialPointerMove);\n document.removeEventListener('touchmove', onInitialPointerMove);\n document.removeEventListener('touchstart', onInitialPointerMove);\n document.removeEventListener('touchend', onInitialPointerMove);\n }\n\n /**\n * When the polfyill first loads, assume the user is in keyboard modality.\n * If any event is received from a pointing device (e.g. mouse, pointer,\n * touch), turn off keyboard modality.\n * This accounts for situations where focus enters the page from the URL bar.\n * @param {Event} e\n */\n function onInitialPointerMove(e) {\n // Work around a Safari quirk that fires a mousemove on whenever the\n // window blurs, even if you're tabbing out of the page. ¯\\_(ツ)_/¯\n if (e.target.nodeName && e.target.nodeName.toLowerCase() === 'html') {\n return;\n }\n\n hadKeyboardEvent = false;\n removeInitialPointerMoveListeners();\n }\n\n // For some kinds of state, we are interested in changes at the global scope\n // only. For example, global pointer input, global key presses and global\n // visibility change should affect the state at every scope:\n document.addEventListener('keydown', onKeyDown, true);\n document.addEventListener('mousedown', onPointerDown, true);\n document.addEventListener('pointerdown', onPointerDown, true);\n document.addEventListener('touchstart', onPointerDown, true);\n document.addEventListener('visibilitychange', onVisibilityChange, true);\n\n addInitialPointerMoveListeners();\n\n // For focus and blur, we specifically care about state changes in the local\n // scope. This is because focus / blur events that originate from within a\n // shadow root are not re-dispatched from the host element if it was already\n // the active element in its own scope:\n scope.addEventListener('focus', onFocus, true);\n scope.addEventListener('blur', onBlur, true);\n\n // We detect that a node is a ShadowRoot by ensuring that it is a\n // DocumentFragment and also has a host property. This check covers native\n // implementation and polyfill implementation transparently. If we only cared\n // about the native implementation, we could just check if the scope was\n // an instance of a ShadowRoot.\n if (scope.nodeType === Node.DOCUMENT_FRAGMENT_NODE && scope.host) {\n // Since a ShadowRoot is a special kind of DocumentFragment, it does not\n // have a root element to add a class to. So, we add this attribute to the\n // host element instead:\n scope.host.setAttribute('data-js-focus-visible', '');\n } else if (scope.nodeType === Node.DOCUMENT_NODE) {\n document.documentElement.classList.add('js-focus-visible');\n document.documentElement.setAttribute('data-js-focus-visible', '');\n }\n }\n\n // It is important to wrap all references to global window and document in\n // these checks to support server-side rendering use cases\n // @see https://github.com/WICG/focus-visible/issues/199\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n // Make the polyfill helper globally available. This can be used as a signal\n // to interested libraries that wish to coordinate with the polyfill for e.g.,\n // applying the polyfill to a shadow root:\n window.applyFocusVisiblePolyfill = applyFocusVisiblePolyfill;\n\n // Notify interested libraries of the polyfill's presence, in case the\n // polyfill was loaded lazily:\n var event;\n\n try {\n event = new CustomEvent('focus-visible-polyfill-ready');\n } catch (error) {\n // IE11 does not support using CustomEvent as a constructor directly:\n event = document.createEvent('CustomEvent');\n event.initCustomEvent('focus-visible-polyfill-ready', false, false, {});\n }\n\n window.dispatchEvent(event);\n }\n\n if (typeof document !== 'undefined') {\n // Apply the polyfill to the global document, so that no JavaScript\n // coordination is required to use the polyfill in the top-level document:\n applyFocusVisiblePolyfill(document);\n }\n\n})));\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_ICSS_IMPORT_0___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../global/global.css\");\nvar ___CSS_LOADER_ICSS_IMPORT_1___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../button-group/button-group.css\");\nvar ___CSS_LOADER_ICSS_IMPORT_2___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../button-set/button-set.css\");\nvar ___CSS_LOADER_ICSS_IMPORT_3___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../button-toolbar/button-toolbar.css\");\nvar ___CSS_LOADER_AT_RULE_IMPORT_0___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../global/variables.css\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\nexports.i(___CSS_LOADER_ICSS_IMPORT_0___, \"\", true);\nexports.i(___CSS_LOADER_ICSS_IMPORT_1___, \"\", true);\nexports.i(___CSS_LOADER_ICSS_IMPORT_2___, \"\", true);\nexports.i(___CSS_LOADER_ICSS_IMPORT_3___, \"\", true);\nexports.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n// Module\nexports.push([module.id, \"@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.danger_cf9:hover {\\n transition: none;\\n }}\\n\\n:root {\\n /* TODO: This colors are not ready to move to variables.css */\\n /* stylelint-disable color-no-hex */\\n --ring-button-primary-background-color: #1a98ff;\\n --ring-button-primary-border-color: #0062b2;\\n --ring-button-danger-active-color: #ffe7e8;\\n --ring-button-danger-hover-color: var(--ring-icon-error-color);\\n --ring-button-loader-background: #33a3ff;\\n --ring-button-dark-icon-color: #80929d;\\n --ring-button-dark-border-disabled-color: #333;\\n --ring-button-dark-icon-disabled-color: var(--ring-dark-disabled-color);\\n --ring-button-dark-danger-active-color: #26080a;\\n --ring-button-dark-danger-hover-color: var(--ring-error-color);\\n --ring-button-dark-active-color: #062640;\\n --ring-button-dark-loader-background: #002039;\\n /* stylelint-enable color-no-hex */\\n}\\n\\n.light_cfe {\\n color: #1f2326;\\n color: var(--ring-text-color);\\n background-color: #fff;\\n background-color: var(--ring-content-background-color);\\n box-shadow: inset 0 0 0 1px #b8d1e5;\\n box-shadow: inset 0 0 0 1px var(--ring-borders-color)\\n}\\n\\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.light_cfe:hover {\\n box-shadow: inset 0 0 0 1px #80c6ff;\\n box-shadow: inset 0 0 0 1px var(--ring-border-hover-color);\\n }}\\n\\n.light_cfe:active,\\n .light_cfe.active_d34 {\\n background-color: #d4edff;\\n background-color: var(--ring-selected-background-color);\\n box-shadow: inset 0 0 0 1px #80c6ff;\\n box-shadow: inset 0 0 0 1px var(--ring-border-hover-color);\\n }\\n\\n.light_cfe.focus-visible {\\n box-shadow: inset 0 0 0 1px #80c6ff, 0 0 0 1px #80c6ff;\\n box-shadow: inset 0 0 0 1px var(--ring-border-hover-color), 0 0 0 1px var(--ring-border-hover-color);\\n }\\n\\n.light_cfe[disabled] {\\n box-shadow: inset 0 0 0 1px #dbdbdb;\\n box-shadow: inset 0 0 0 1px var(--ring-border-disabled-color);\\n }\\n\\n.light_cfe[disabled],\\n .light_cfe[disabled].withIcon_32e {\\n color: #999;\\n color: var(--ring-disabled-color);\\n }\\n\\n.light_cfe[disabled] .icon_f6a {\\n color: #bbb;\\n color: var(--ring-icon-disabled-color);\\n }\\n\\n.light_cfe.primary_5fd:active,\\n .light_cfe.primary_5fd.active_d34 {\\n background-color: #1a98ff;\\n background-color: var(--ring-button-primary-background-color);\\n box-shadow: inset 0 0 0 1px #0062b2;\\n box-shadow: inset 0 0 0 1px var(--ring-button-primary-border-color);\\n }\\n\\n.light_cfe.danger_cf9:active,\\n .light_cfe.danger_cf9.active_d34 {\\n background-color: #ffe7e8;\\n background-color: var(--ring-button-danger-active-color);\\n }\\n\\n.light_cfe.danger_cf9:active,\\n .light_cfe.danger_cf9.active_d34,\\n .light_cfe.danger_cf9.focus-visible {\\n box-shadow: inset 0 0 0 1px #db5860;\\n box-shadow: inset 0 0 0 1px var(--ring-button-danger-hover-color);\\n }\\n\\n.light_cfe.withIcon_32e {\\n color: #737577;\\n color: var(--ring-secondary-color);\\n }\\n\\n.light_cfe.onlyIcon_900 {\\n color: #999;\\n color: var(--ring-icon-secondary-color);\\n }\\n\\n.light_cfe .loaderBackground_bfc::before {\\n background-image:\\n linear-gradient(\\n to right,\\n #fff,\\n #d4edff 40%,\\n #fff 80%\\n );\\n background-image:\\n linear-gradient(\\n to right,\\n var(--ring-content-background-color),\\n var(--ring-selected-background-color) 40%,\\n var(--ring-content-background-color) 80%\\n );\\n }\\n\\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.light_cfe.danger_cf9:hover {\\n box-shadow: inset 0 0 0 1px #db5860;\\n box-shadow: inset 0 0 0 1px var(--ring-button-danger-hover-color);\\n}}\\n\\n.dark_f7c {\\n color: #888;\\n color: var(--ring-dark-secondary-color);\\n background-color: #000;\\n background-color: var(--ring-navigation-background-color);\\n box-shadow: inset 0 0 0 1px #406380;\\n box-shadow: inset 0 0 0 1px var(--ring-dark-borders-color)\\n}\\n\\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.dark_f7c:hover {\\n box-shadow: inset 0 0 0 1px #70b1e6;\\n box-shadow: inset 0 0 0 1px var(--ring-dark-border-hover-color);\\n }}\\n\\n.dark_f7c:active,\\n .dark_f7c.active_d34 {\\n color: #fff;\\n color: var(--ring-dark-text-color);\\n background-color: #062640;\\n background-color: var(--ring-button-dark-active-color);\\n box-shadow: inset 0 0 0 1px #70b1e6;\\n box-shadow: inset 0 0 0 1px var(--ring-dark-border-hover-color);\\n }\\n\\n.dark_f7c.focus-visible {\\n box-shadow: inset 0 0 0 1px #70b1e6, 0 0 0 1px #70b1e6;\\n box-shadow: inset 0 0 0 1px var(--ring-dark-border-hover-color), 0 0 0 1px var(--ring-dark-border-hover-color);\\n }\\n\\n.dark_f7c[disabled] {\\n box-shadow: inset 0 0 0 1px #333;\\n box-shadow: inset 0 0 0 1px var(--ring-button-dark-border-disabled-color);\\n }\\n\\n.dark_f7c[disabled],\\n .dark_f7c[disabled].withIcon_32e {\\n color: #444;\\n color: var(--ring-dark-disabled-color);\\n }\\n\\n.dark_f7c[disabled] .icon_f6a {\\n color: #444;\\n color: var(--ring-button-dark-icon-disabled-color);\\n }\\n\\n.dark_f7c.primary_5fd:active,\\n .dark_f7c.primary_5fd.active_d34 {\\n background-color: #007ee5;\\n background-color: var(--ring-main-hover-color);\\n box-shadow: inset 0 0 0 1px #80c6ff;\\n box-shadow: inset 0 0 0 1px var(--ring-border-hover-color);\\n }\\n\\n.dark_f7c.danger_cf9:active,\\n .dark_f7c.danger_cf9.active_d34 {\\n color: #db5860;\\n color: var(--ring-icon-error-color);\\n background-color: #26080a;\\n background-color: var(--ring-button-dark-danger-active-color);\\n }\\n\\n.dark_f7c.danger_cf9:active,\\n .dark_f7c.danger_cf9.active_d34,\\n .dark_f7c.danger_cf9.focus-visible {\\n box-shadow: inset 0 0 0 1px #c22731;\\n box-shadow: inset 0 0 0 1px var(--ring-button-dark-danger-hover-color);\\n }\\n\\n.dark_f7c.withIcon_32e {\\n color: #888;\\n color: var(--ring-dark-secondary-color);\\n }\\n\\n.dark_f7c .loaderBackground_bfc::before {\\n background-image:\\n linear-gradient(\\n to right,\\n #000,\\n #002039 40%,\\n #000 80%\\n );\\n background-image:\\n linear-gradient(\\n to right,\\n var(--ring-navigation-background-color),\\n var(--ring-button-dark-loader-background) 40%,\\n var(--ring-navigation-background-color) 80%\\n );\\n }\\n\\n.dark_f7c .dropdownIcon_04c {\\n color: #888;\\n color: var(--ring-dark-secondary-color);\\n }\\n\\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.dark_f7c.danger_cf9:hover {\\n box-shadow: inset 0 0 0 1px #c22731;\\n box-shadow: inset 0 0 0 1px var(--ring-button-dark-danger-hover-color);\\n}}\\n\\n.button_310 {\\n\\n position: relative;\\n\\n display: inline-block;\\n\\n box-sizing: border-box;\\n height: 24px;\\n margin: 0;\\n padding: 0 16px;\\n\\n cursor: pointer;\\n transition: color 0.3s ease-out, background-color 0.3s ease-out, box-shadow 0.3s ease-out;\\n transition: color var(--ring-ease), background-color var(--ring-ease), box-shadow var(--ring-ease);\\n text-decoration: none;\\n\\n border: 0;\\n border-radius: 3px;\\n border-radius: var(--ring-border-radius);\\n outline: 0;\\n\\n font-family: system-ui, -apple-system, Segoe UI, Roboto, Noto Sans, Ubuntu, Cantarell, Helvetica Neue, Arial, sans-serif;\\n\\n font-family: var(--ring-font-family);\\n font-size: 12px;\\n font-size: var(--ring-font-size-smaller);\\n\\n line-height: 24px\\n}\\n\\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.button_310:hover {\\n transition: none;\\n }}\\n\\n.button_310.focus-visible {\\n transition: none;\\n }\\n\\n.button_310[disabled] {\\n pointer-events: none;\\n }\\n\\n.button_310::-moz-focus-inner {\\n padding: 0;\\n\\n border: 0;\\n outline: 0;\\n }\\n\\n.button_310.narrowRight_68c {\\n padding-right: 12px;\\n }\\n\\n.active_d34 {\\n}\\n\\n.primary_5fd {\\n color: #fff;\\n color: var(--ring-dark-text-color);\\n background-color: #008eff;\\n background-color: var(--ring-main-color);\\n box-shadow: none\\n}\\n\\n.primary_5fd.withIcon_32e,\\n .primary_5fd.withIcon_32e:active,\\n .primary_5fd.withIcon_32e.active_d34 {\\n color: #008eff;\\n color: var(--ring-main-color);\\n }\\n\\n.primary_5fd.focus-visible {\\n transition: none;\\n\\n background-color: #007ee5;\\n\\n background-color: var(--ring-main-hover-color);\\n box-shadow: none;\\n }\\n\\n.primary_5fd[disabled] {\\n background-color: #fff;\\n background-color: var(--ring-content-background-color);\\n box-shadow: inset 0 0 0 1px #b8d1e5;\\n box-shadow: inset 0 0 0 1px var(--ring-borders-color);\\n }\\n\\n.primary_5fd .loaderBackground_bfc {\\n top: 0;\\n right: 0;\\n bottom: 0;\\n left: 0;\\n\\n border-radius: 3px;\\n\\n border-radius: var(--ring-border-radius)\\n }\\n\\n.primary_5fd .loaderBackground_bfc::before {\\n background-image:\\n linear-gradient(\\n to right,\\n #008eff,\\n #33a3ff 40%,\\n #008eff 80%\\n );\\n background-image:\\n linear-gradient(\\n to right,\\n var(--ring-main-color),\\n var(--ring-button-loader-background) 40%,\\n var(--ring-main-color) 80%\\n );\\n }\\n\\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.primary_5fd:hover {\\n transition: none;\\n\\n background-color: #007ee5;\\n\\n background-color: var(--ring-main-hover-color);\\n box-shadow: none;\\n}}\\n\\n.danger_cf9,\\n .danger_cf9.withIcon_32e,\\n .danger_cf9.withIcon_32e:active,\\n .danger_cf9.withIcon_32e.active_d34,\\n .danger_cf9.text_7a5,\\n .danger_cf9.text_7a5:active,\\n .danger_cf9.text_7a5.active_d34 {\\n color: #c22731;\\n color: var(--ring-error-color);\\n }\\n\\n.danger_cf9.focus-visible {\\n transition: none;\\n }\\n\\n.dark_f7c.danger_cf9,\\n .dark_f7c.danger_cf9:active,\\n .dark_f7c.danger_cf9.active_d34 {\\n color: #db5860;\\n color: var(--ring-icon-error-color);\\n }\\n\\n.text_7a5.text_7a5,\\n.withIcon_32e.withIcon_32e {\\n background-color: transparent;\\n box-shadow: none\\n}\\n\\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.text_7a5.text_7a5:hover, .withIcon_32e.withIcon_32e:hover {\\n transition: none;\\n }}\\n\\n.text_7a5.text_7a5:active,\\n .text_7a5.text_7a5.active_d34,\\n .withIcon_32e.withIcon_32e:active,\\n .withIcon_32e.withIcon_32e.active_d34 {\\n background-color: transparent;\\n box-shadow: none;\\n }\\n\\n.text_7a5.text_7a5.focus-visible, .withIcon_32e.withIcon_32e.focus-visible {\\n box-shadow: inset 0 0 0 2px #80c6ff;\\n box-shadow: inset 0 0 0 2px var(--ring-border-hover-color);\\n }\\n\\n.loader_38f.text_7a5 > .content_588 {\\n -webkit-animation-name: text-loading_7c1;\\n animation-name: text-loading_7c1;\\n -webkit-animation-duration: 1200ms;\\n animation-duration: 1200ms;\\n -webkit-animation-iteration-count: infinite;\\n animation-iteration-count: infinite;\\n}\\n\\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.text_7a5.text_7a5:hover {\\n background-color: transparent;\\n box-shadow: none;\\n}}\\n\\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.withIcon_32e:hover:not(.focus-visible) {\\n background-color: transparent;\\n box-shadow: none;\\n}}\\n\\n.text_7a5 {\\n color: #008eff;\\n color: var(--ring-main-color);\\n}\\n\\n.inline_908 {\\n display: inline-block;\\n\\n margin: 0;\\n padding: 0;\\n\\n font-size: 13px;\\n\\n font-size: var(--ring-font-size);\\n}\\n\\n.withIcon_32e {\\n padding: 0 8px;\\n}\\n\\n.withIcon_32e:active,\\n .withIcon_32e.active_d34,\\n .text_7a5:active,\\n .text_7a5.active_d34 {\\n color: #008eff;\\n color: var(--ring-main-color);\\n }\\n\\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.withIcon_32e:hover {\\n color: #ff008c;\\n color: var(--ring-link-hover-color);\\n}}\\n\\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.text_7a5:hover {\\n color: #ff008c;\\n color: var(--ring-link-hover-color);\\n}}\\n\\n.onlyIcon_900.focus-visible {\\n color: #80c6ff;\\n color: var(--ring-border-hover-color);\\n }\\n\\n.onlyIcon_900:active,\\n .onlyIcon_900.active_d34 {\\n color: #008eff;\\n color: var(--ring-main-color);\\n }\\n\\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.onlyIcon_900:hover {\\n color: #80c6ff;\\n color: var(--ring-border-hover-color);\\n}}\\n\\n.icon_f6a {\\n color: inherit;\\n\\n line-height: normal\\n}\\n\\n.icon_f6a:not(:last-child) {\\n margin-right: 4px;\\n }\\n\\n.withNormalIconLight_c74 .icon_f6a {\\n transition: color 0.3s ease-out;\\n transition: color var(--ring-ease);\\n\\n color: #b8d1e5;\\n\\n color: var(--ring-icon-color);\\n}\\n\\n.withNormalIconDark_bbc .icon_f6a {\\n transition: color 0.3s ease-out;\\n transition: color var(--ring-ease);\\n\\n color: #80929d;\\n\\n color: var(--ring-button-dark-icon-color);\\n}\\n\\n.withNormalIconLight_c74:active,\\n.withNormalIconLight_c74.active_d34,\\n.withNormalIconDark_bbc:active,\\n.withNormalIconDark_bbc.active_d34 {\\n color: #008eff;\\n color: var(--ring-main-color)\\n}\\n\\n.withNormalIconLight_c74:active .icon_f6a, .withNormalIconLight_c74.active_d34 .icon_f6a, .withNormalIconDark_bbc:active .icon_f6a, .withNormalIconDark_bbc.active_d34 .icon_f6a {\\n transition: none;\\n\\n color: inherit;\\n }\\n\\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.withNormalIconLight_c74:hover .icon_f6a,\\n.withNormalIconDark_bbc:hover .icon_f6a,\\n.withDangerIconLight_449:hover .icon_f6a,\\n.withDangerIconDark_be7:hover .icon_f6a {\\n transition: none;\\n\\n color: inherit;\\n}}\\n\\n.withDangerIconLight_449 .icon_f6a,\\n.withDangerIconLight_449:active .icon_f6a {\\n color: #db5860;\\n color: var(--ring-icon-error-color);\\n}\\n\\n.withDangerIconDark_be7 .icon_f6a,\\n.withDangerIconDark_be7:active .icon_f6a {\\n color: #c22731;\\n color: var(--ring-error-color);\\n}\\n\\n.buttonWithoutIcon_b6a .icon_f6a {\\n display: none;\\n}\\n\\n.loader_38f {\\n position: relative;\\n z-index: 0;\\n\\n pointer-events: none;\\n\\n background-color: transparent;\\n}\\n\\n.loaderBackground_bfc {\\n position: absolute;\\n z-index: -1;\\n top: 1px;\\n right: 1px;\\n bottom: 1px;\\n left: 1px;\\n\\n overflow: hidden;\\n\\n border-radius: 2px;\\n\\n border-radius: var(--ring-border-radius-small)\\n}\\n\\n.loaderBackground_bfc::before {\\n display: block;\\n\\n width: calc(100% + 64px);\\n height: 100%;\\n\\n content: '';\\n -webkit-animation: progress_5c3 1s linear infinite;\\n animation: progress_5c3 1s linear infinite;\\n\\n background-repeat: repeat;\\n background-size: 64px;\\n }\\n\\n.delayed_e4e .content_588::after {\\n content: '…';\\n}\\n\\n.short_6b7 {\\n width: 32px;\\n padding: 0;\\n}\\n\\n.dropdownIcon_04c {\\n margin-right: -2px;\\n\\n margin-left: 2px;\\n\\n transition: color 0.3s ease-out;\\n\\n transition: color var(--ring-ease);\\n\\n color: #999;\\n\\n color: var(--ring-icon-secondary-color);\\n\\n line-height: normal;\\n}\\n\\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.button_310:hover .dropdownIcon_04c {\\n transition: none;\\n\\n color: #008eff;\\n\\n color: var(--ring-main-color);\\n}}\\n\\n@-webkit-keyframes progress_5c3 {\\n from {\\n transform: translateX(-64px);\\n }\\n\\n to {\\n transform: translateX(0);\\n }\\n}\\n\\n@keyframes progress_5c3 {\\n from {\\n transform: translateX(-64px);\\n }\\n\\n to {\\n transform: translateX(0);\\n }\\n}\\n\\n@-webkit-keyframes text-loading_7c1 {\\n 50% {\\n opacity: 0.5;\\n }\\n}\\n\\n@keyframes text-loading_7c1 {\\n 50% {\\n opacity: 0.5;\\n }\\n}\\n\", \"\"]);\n// Exports\nexports.locals = {\n\t\"unit\": \"\" + ___CSS_LOADER_ICSS_IMPORT_0___.locals[\"unit\"] + \"\",\n\t\"button-shadow\": \"inset 0 0 0 1px\",\n\t\"height\": \"24px\",\n\t\"loaderWidth\": \"64px\",\n\t\"danger\": \"danger_cf9\",\n\t\"light\": \"light_cfe\",\n\t\"active\": \"active_d34 \" + ___CSS_LOADER_ICSS_IMPORT_1___.locals[\"active\"] + \"\",\n\t\"withIcon\": \"withIcon_32e\",\n\t\"icon\": \"icon_f6a\",\n\t\"primary\": \"primary_5fd\",\n\t\"onlyIcon\": \"onlyIcon_900\",\n\t\"loaderBackground\": \"loaderBackground_bfc\",\n\t\"dark\": \"dark_f7c\",\n\t\"dropdownIcon\": \"dropdownIcon_04c\",\n\t\"button\": \"button_310 \" + ___CSS_LOADER_ICSS_IMPORT_1___.locals[\"button\"] + \" \" + ___CSS_LOADER_ICSS_IMPORT_2___.locals[\"button\"] + \" \" + ___CSS_LOADER_ICSS_IMPORT_3___.locals[\"button\"] + \"\",\n\t\"narrowRight\": \"narrowRight_68c\",\n\t\"text\": \"text_7a5\",\n\t\"loader\": \"loader_38f\",\n\t\"content\": \"content_588\",\n\t\"text-loading\": \"text-loading_7c1\",\n\t\"inline\": \"inline_908\",\n\t\"withNormalIconLight\": \"withNormalIconLight_c74\",\n\t\"withNormalIconDark\": \"withNormalIconDark_bbc\",\n\t\"withDangerIconLight\": \"withDangerIconLight_449\",\n\t\"withDangerIconDark\": \"withDangerIconDark_be7\",\n\t\"buttonWithoutIcon\": \"buttonWithoutIcon_b6a\",\n\t\"progress\": \"progress_5c3\",\n\t\"delayed\": \"delayed_e4e\",\n\t\"short\": \"short_6b7\"\n};\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_ICSS_IMPORT_0___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../global/global.css\");\nvar ___CSS_LOADER_ICSS_IMPORT_1___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../button-toolbar/button-toolbar.css\");\nvar ___CSS_LOADER_AT_RULE_IMPORT_0___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../global/variables.css\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\nexports.i(___CSS_LOADER_ICSS_IMPORT_0___, \"\", true);\nexports.i(___CSS_LOADER_ICSS_IMPORT_1___, \"\", true);\nexports.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n// Module\nexports.push([module.id, \":root {\\n --ring-button-group-default-z-index: 0;\\n --ring-button-group-disabled-z-index: -1;\\n --ring-button-group-active-z-index: 1;\\n --ring-button-group-hover-z-index: 2;\\n --ring-button-group-focus-z-index: 3;\\n}\\n\\n.buttonGroup_951 {\\n\\n position: relative;\\n z-index: 0;\\n\\n display: inline-block;\\n\\n white-space: nowrap;\\n}\\n\\n.buttonGroup_951 button,\\n.buttonGroup_951 .button_ebb {\\n margin: 0 0 0 -1px;\\n\\n border-radius: 0;\\n}\\n\\n.caption_847 {\\n\\n margin-right: 8px;\\n\\n font-size: 13px;\\n\\n font-size: var(--ring-font-size)\\n}\\n\\n.caption_847:empty {\\n margin-right: 0;\\n }\\n\\n.buttonGroup_951 > .caption_847 + .button_ebb,\\n.buttonGroup_951 > button:first-child,\\n.buttonGroup_951 > .button_ebb:first-child,\\n.buttonGroup_951 > :first-child .button_ebb {\\n margin: 0;\\n\\n border-top-left-radius: 3px;\\n\\n border-top-left-radius: var(--ring-border-radius);\\n border-bottom-left-radius: 3px;\\n border-bottom-left-radius: var(--ring-border-radius);\\n}\\n\\n.buttonGroup_951 > .button_ebb:last-child,\\n.buttonGroup_951 > button:last-child,\\n.buttonGroup_951 > :last-child .button_ebb {\\n border-top-right-radius: 3px;\\n border-top-right-radius: var(--ring-border-radius);\\n border-bottom-right-radius: 3px;\\n border-bottom-right-radius: var(--ring-border-radius);\\n}\\n\\n.buttonGroup_951 .button_ebb {\\n position: relative;\\n z-index: 0;\\n z-index: var(--ring-button-group-default-z-index)\\n }\\n\\n.buttonGroup_951 .button_ebb[disabled] {\\n z-index: -1;\\n z-index: var(--ring-button-group-disabled-z-index);\\n }\\n\\n.buttonGroup_951 .button_ebb:active {\\n z-index: 1;\\n z-index: var(--ring-button-group-active-z-index);\\n }\\n\\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.buttonGroup_951 .button_ebb:hover {\\n z-index: 2;\\n z-index: var(--ring-button-group-hover-z-index);\\n }}\\n\\n.buttonGroup_951 .button_ebb:focus {\\n z-index: 3;\\n z-index: var(--ring-button-group-focus-z-index);\\n }\\n\\n.buttonGroup_951 .active_4b1 {\\n z-index: 1;\\n z-index: var(--ring-button-group-active-z-index);\\n }\\n\", \"\"]);\n// Exports\nexports.locals = {\n\t\"unit\": \"\" + ___CSS_LOADER_ICSS_IMPORT_0___.locals[\"unit\"] + \"\",\n\t\"buttonGroup\": \"buttonGroup_951 \" + ___CSS_LOADER_ICSS_IMPORT_1___.locals[\"buttonGroup\"] + \"\",\n\t\"button\": \"button_ebb\",\n\t\"caption\": \"caption_847 \" + ___CSS_LOADER_ICSS_IMPORT_0___.locals[\"font\"] + \"\",\n\t\"active\": \"active_4b1\"\n};\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_ICSS_IMPORT_0___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../global/global.css\");\nvar ___CSS_LOADER_AT_RULE_IMPORT_0___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../global/variables.css\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\nexports.i(___CSS_LOADER_ICSS_IMPORT_0___, \"\", true);\nexports.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n// Module\nexports.push([module.id, \".buttonSet_1a8 {\\n position: relative;\\n\\n display: inline-block;\\n\\n white-space: nowrap;\\n\\n font-size: 0\\n}\\n\\n.buttonSet_1a8 .button_97b {\\n margin: 0 8px 0 0;\\n }\\n\\n.buttonSet_1a8 > .button_97b:last-child {\\n margin-right: 0;\\n }\\n\", \"\"]);\n// Exports\nexports.locals = {\n\t\"unit\": \"\" + ___CSS_LOADER_ICSS_IMPORT_0___.locals[\"unit\"] + \"\",\n\t\"buttonSet\": \"buttonSet_1a8\",\n\t\"button\": \"button_97b\"\n};\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_AT_RULE_IMPORT_0___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../global/variables.css\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\nexports.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n// Module\nexports.push([module.id, \".dropdown_5d7 {\\n display: inline-block;\\n}\\n\\n.anchor_93a.anchor_93a {\\n margin: 0 -3px;\\n padding: 0 3px;\\n\\n font: inherit;\\n}\\n\\n.chevron_7e5 {\\n margin-left: 2px;\\n\\n line-height: normal;\\n}\\n\", \"\"]);\n// Exports\nexports.locals = {\n\t\"dropdown\": \"dropdown_5d7\",\n\t\"anchor\": \"anchor_93a\",\n\t\"chevron\": \"chevron_7e5\"\n};\nmodule.exports = exports;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_AT_RULE_IMPORT_0___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../global/variables.css\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\nexports.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n// Module\nexports.push([module.id, \".avatar_ef6 {\\n -o-object-fit: contain;\\n object-fit: contain;\\n -o-object-position: center;\\n object-position: center;\\n\\n border-radius: 3px;\\n\\n border-radius: var(--ring-border-radius); /* This is a \\\"graceful degradation\\\" fallback, while the real value is controlled by JS */\\n}\\n\\n.subavatar_596 {\\n position: absolute;\\n top: 15px;\\n left: 27px;\\n\\n border: 1px #fff solid;\\n\\n border: 1px var(--ring-content-background-color) solid;\\n}\\n\\n.empty_1c2 {\\n display: inline-block;\\n\\n box-sizing: border-box;\\n\\n border: 1px solid #b8d1e5;\\n\\n border: 1px solid var(--ring-borders-color);\\n}\\n\", \"\"]);\n// Exports\nexports.locals = {\n\t\"avatar\": \"avatar_ef6\",\n\t\"subavatar\": \"subavatar_596\",\n\t\"empty\": \"empty_1c2\"\n};\nmodule.exports = exports;\n","/* eslint-env node, browser */\n'use strict'\n/**\n * binds an event to Combokeys\n *\n * can be a single key, a combination of keys separated with +,\n * an array of keys, or a sequence of keys separated by spaces\n *\n * be sure to list the modifier keys first to make sure that the\n * correct key ends up getting bound (the last key in the pattern)\n *\n * @param {string|Array} keys\n * @param {Function} callback\n * @param {string=} action - \"keypress\", \"keydown\", or \"keyup\"\n * @returns void\n */\nmodule.exports = function (keys, callback, action) {\n var self = this\n\n keys = keys instanceof Array ? keys : [keys]\n self.bindMultiple(keys, callback, action)\n return self\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * binds multiple combinations to the same callback\n *\n * @param {Array} combinations\n * @param {Function} callback\n * @param {string|undefined} action\n * @returns void\n */\nmodule.exports = function (combinations, callback, action) {\n var self = this\n\n for (var j = 0; j < combinations.length; ++j) {\n self.bindSingle(combinations[j], callback, action)\n }\n}\n","/* eslint-env node, browser */\n'use strict'\n/**\n * unbinds an event to Combokeys\n *\n * the unbinding sets the callback function of the specified key combo\n * to an empty function and deletes the corresponding key in the\n * directMap dict.\n *\n * TODO: actually remove this from the callbacks dictionary instead\n * of binding an empty function\n *\n * the keycombo+action has to be exactly the same as\n * it was defined in the bind method\n *\n * @param {string|Array} keys\n * @param {string} action\n * @returns void\n */\nmodule.exports = function (keys, action) {\n var self = this\n\n return self.bind(keys, function () {}, action)\n}\n","/* eslint-env node, browser */\n'use strict'\n/**\n * triggers an event that has already been bound\n *\n * @param {string} keys\n * @param {string=} action\n * @returns void\n */\nmodule.exports = function (keys, action) {\n var self = this\n if (self.directMap[keys + ':' + action]) {\n self.directMap[keys + ':' + action]({}, keys)\n }\n return this\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * resets the library back to its initial state. This is useful\n * if you want to clear out the current keyboard shortcuts and bind\n * new ones - for example if you switch to another page\n *\n * @returns void\n */\nmodule.exports = function () {\n var self = this\n self.callbacks = {}\n self.directMap = {}\n return this\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n* should we stop this event before firing off callbacks\n*\n* @param {Event} e\n* @param {Element} element\n* @return {boolean}\n*/\nmodule.exports = function (e, element) {\n // if the element has the class \"combokeys\" then no need to stop\n if ((' ' + element.className + ' ').indexOf(' combokeys ') > -1) {\n return false\n }\n\n var tagName = element.tagName.toLowerCase()\n\n // stop for input, select, and textarea\n return tagName === 'input' || tagName === 'select' || tagName === 'textarea' || element.isContentEditable\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * handles a character key event\n *\n * @param {string} character\n * @param {Array} modifiers\n * @param {Event} e\n * @returns void\n */\nmodule.exports = function (character, modifiers, e) {\n var self = this\n var callbacks\n var j\n var doNotReset = {}\n var maxLevel = 0\n var processedSequenceCallback = false\n var isModifier\n var ignoreThisKeypress\n\n callbacks = self.getMatches(character, modifiers, e)\n // Calculate the maxLevel for sequences so we can only execute the longest callback sequence\n for (j = 0; j < callbacks.length; ++j) {\n if (callbacks[j].seq) {\n maxLevel = Math.max(maxLevel, callbacks[j].level)\n }\n }\n\n // loop through matching callbacks for this key event\n for (j = 0; j < callbacks.length; ++j) {\n // fire for all sequence callbacks\n // this is because if for example you have multiple sequences\n // bound such as \"g i\" and \"g t\" they both need to fire the\n // callback for matching g cause otherwise you can only ever\n // match the first one\n if (callbacks[j].seq) {\n // only fire callbacks for the maxLevel to prevent\n // subsequences from also firing\n //\n // for example 'a option b' should not cause 'option b' to fire\n // even though 'option b' is part of the other sequence\n //\n // any sequences that do not match here will be discarded\n // below by the resetSequences call\n if (callbacks[j].level !== maxLevel) {\n continue\n }\n\n processedSequenceCallback = true\n\n // keep a list of which sequences were matches for later\n doNotReset[callbacks[j].seq] = 1\n self.fireCallback(callbacks[j].callback, e, callbacks[j].combo, callbacks[j].seq)\n continue\n }\n\n // if there were no sequence matches but we are still here\n // that means this is a regular match so we should fire that\n if (!processedSequenceCallback) {\n self.fireCallback(callbacks[j].callback, e, callbacks[j].combo)\n }\n }\n\n // if the key you pressed matches the type of sequence without\n // being a modifier (ie \"keyup\" or \"keypress\") then we should\n // reset all sequences that were not matched by this event\n //\n // this is so, for example, if you have the sequence \"h a t\" and you\n // type \"h e a r t\" it does not match. in this case the \"e\" will\n // cause the sequence to reset\n //\n // modifier keys are ignored because you can have a sequence\n // that contains modifiers such as \"enter ctrl+space\" and in most\n // cases the modifier key will be pressed before the next key\n //\n // also if you have a sequence such as \"ctrl+b a\" then pressing the\n // \"b\" key will trigger a \"keypress\" and a \"keydown\"\n //\n // the \"keydown\" is expected when there is a modifier, but the\n // \"keypress\" ends up matching the nextExpectedAction since it occurs\n // after and that causes the sequence to reset\n //\n // we ignore keypresses in a sequence that directly follow a keydown\n // for the same character\n ignoreThisKeypress = e.type === 'keypress' && self.ignoreNextKeypress\n isModifier = require('../../helpers/isModifier')\n if (e.type === self.nextExpectedAction && !isModifier(character) && !ignoreThisKeypress) {\n self.resetSequences(doNotReset)\n }\n\n self.ignoreNextKeypress = processedSequenceCallback && e.type === 'keydown'\n}\n","/* eslint-env node, browser */\n'use strict'\nmodule.exports = function () {\n var self = this\n var on = require('./dom-event')\n var element = self.element\n\n self.eventHandler = require('./handleKeyEvent').bind(self)\n\n on(element, 'keypress', self.eventHandler)\n on(element, 'keydown', self.eventHandler)\n on(element, 'keyup', self.eventHandler)\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * handles a keydown event\n *\n * @param {Event} e\n * @returns void\n */\nmodule.exports = function (e) {\n var self = this\n var characterFromEvent\n var eventModifiers\n\n // normalize e.which for key events\n // @see http://stackoverflow.com/questions/4285627/javascript-keycode-vs-charcode-utter-confusion\n if (typeof e.which !== 'number') {\n e.which = e.keyCode\n }\n characterFromEvent = require('../../helpers/characterFromEvent')\n var character = characterFromEvent(e)\n\n // no character found then stop\n if (character === undefined) {\n return\n }\n\n // need to use === for the character check because the character can be 0\n if (e.type === 'keyup' && self.ignoreNextKeyup === character) {\n self.ignoreNextKeyup = false\n return\n }\n\n eventModifiers = require('../../helpers/eventModifiers')\n self.handleKey(character, eventModifiers(e), e)\n}\n","/* eslint-env node, browser */\n'use strict'\n/**\n * mapping for special characters so they can support\n *\n * this dictionary is only used incase you want to bind a\n * keyup or keydown event to one of these keys\n *\n * @type {Object}\n */\nmodule.exports = {\n 106: '*',\n 107: 'plus',\n 109: 'minus',\n 110: '.',\n 111: '/',\n 186: ';',\n 187: '=',\n 188: ',',\n 189: '-',\n 190: '.',\n 191: '/',\n 192: '`',\n 219: '[',\n 220: '\\\\',\n 221: ']',\n 222: \"'\"\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * takes a key event and figures out what the modifiers are\n *\n * @param {Event} e\n * @returns {Array}\n */\nmodule.exports = function (e) {\n var modifiers = []\n\n if (e.shiftKey) {\n modifiers.push('shift')\n }\n\n if (e.altKey) {\n modifiers.push('alt')\n }\n\n if (e.ctrlKey) {\n modifiers.push('ctrl')\n }\n\n if (e.metaKey) {\n modifiers.push('meta')\n }\n\n return modifiers\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * binds a single keyboard combination\n *\n * @param {string} combination\n * @param {Function} callback\n * @param {string=} action\n * @param {string=} sequenceName - name of sequence if part of sequence\n * @param {number=} level - what part of the sequence the command is\n * @returns void\n */\nmodule.exports = function (combination, callback, action, sequenceName, level) {\n var self = this\n\n // store a direct mapped reference for use with Combokeys.trigger\n self.directMap[combination + ':' + action] = callback\n\n // make sure multiple spaces in a row become a single space\n combination = combination.replace(/\\s+/g, ' ')\n\n var sequence = combination.split(' ')\n var info\n\n // if this pattern is a sequence of keys then run through this method\n // to reprocess each pattern one key at a time\n if (sequence.length > 1) {\n self.bindSequence(combination, sequence, callback, action)\n return\n }\n\n info = self.getKeyInfo(combination, action)\n\n // make sure to initialize array if this is the first time\n // a callback is added for this key\n self.callbacks[info.key] = self.callbacks[info.key] || []\n\n // remove an existing match if there is one\n self.getMatches(info.key, info.modifiers, {type: info.action}, sequenceName, combination, level)\n\n // add this call back to the array\n // if it is a sequence put it at the beginning\n // if not put it at the end\n //\n // this is important because the way these are processed expects\n // the sequence ones to come first\n self.callbacks[info.key][sequenceName ? 'unshift' : 'push']({\n callback: callback,\n modifiers: info.modifiers,\n action: info.action,\n seq: sequenceName,\n level: level,\n combo: combination\n })\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * Gets info for a specific key combination\n *\n * @param {string} combination key combination (\"command+s\" or \"a\" or \"*\")\n * @param {string=} action\n * @returns {Object}\n */\nmodule.exports = function (combination, action) {\n var self = this\n var keysFromString\n var keys\n var key\n var j\n var modifiers = []\n var SPECIAL_ALIASES\n var SHIFT_MAP\n var isModifier\n\n keysFromString = require('../../helpers/keysFromString')\n // take the keys from this pattern and figure out what the actual\n // pattern is all about\n keys = keysFromString(combination)\n\n SPECIAL_ALIASES = require('../../helpers/special-aliases')\n SHIFT_MAP = require('../../helpers/shift-map')\n isModifier = require('../../helpers/isModifier')\n for (j = 0; j < keys.length; ++j) {\n key = keys[j]\n\n // normalize key names\n if (SPECIAL_ALIASES[key]) {\n key = SPECIAL_ALIASES[key]\n }\n\n // if this is not a keypress event then we should\n // be smart about using shift keys\n // this will only work for US keyboards however\n if (action && action !== 'keypress' && SHIFT_MAP[key]) {\n key = SHIFT_MAP[key]\n modifiers.push('shift')\n }\n\n // if this key is a modifier then add it to the list of modifiers\n if (isModifier(key)) {\n modifiers.push(key)\n }\n }\n\n // depending on what the key combination is\n // we will try to pick the best event for it\n action = self.pickBestAction(key, modifiers, action)\n\n return {\n key: key,\n modifiers: modifiers,\n action: action\n }\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * Converts from a string key combination to an array\n *\n * @param {string} combination like \"command+shift+l\"\n * @return {Array}\n */\nmodule.exports = function (combination) {\n if (combination === '+') {\n return ['+']\n }\n\n return combination.split('+')\n}\n","/* eslint-env node, browser */\n'use strict'\n/**\n * this is a list of special strings you can use to map\n * to modifier keys when you specify your keyboard shortcuts\n *\n * @type {Object}\n */\nmodule.exports = {\n 'option': 'alt',\n 'command': 'meta',\n 'return': 'enter',\n 'escape': 'esc',\n 'mod': /Mac|iPod|iPhone|iPad/.test(navigator.platform) ? 'meta' : 'ctrl'\n}\n","/* eslint-env node, browser */\n'use strict'\n/**\n * this is a mapping of keys that require shift on a US keypad\n * back to the non shift equivelents\n *\n * this is so you can use keyup events with these keys\n *\n * note that this will only work reliably on US keyboards\n *\n * @type {Object}\n */\nmodule.exports = {\n '~': '`',\n '!': '1',\n '@': '2',\n '#': '3',\n '$': '4',\n '%': '5',\n '^': '6',\n '&': '7',\n '*': '8',\n '(': '9',\n ')': '0',\n '_': '-',\n '+': '=',\n ':': ';',\n '\"': \"'\",\n '<': ',',\n '>': '.',\n '?': '/',\n '|': '\\\\'\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * picks the best action based on the key combination\n *\n * @param {string} key - character for key\n * @param {Array} modifiers\n * @param {string=} action passed in\n */\nmodule.exports = function (key, modifiers, action) {\n var self = this\n\n // if no action was picked in we should try to pick the one\n // that we think would work best for this key\n if (!action) {\n action = self.getReverseMap()[key] ? 'keydown' : 'keypress'\n }\n\n // modifier keys don't work as expected with keypress,\n // switch to keydown\n if (action === 'keypress' && modifiers.length) {\n action = 'keydown'\n }\n\n return action\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * reverses the map lookup so that we can look for specific keys\n * to see what can and can't use keypress\n *\n * @return {Object}\n */\nmodule.exports = function () {\n var self = this\n var constructor = self.constructor\n var SPECIAL_KEYS_MAP\n\n if (!constructor.REVERSE_MAP) {\n constructor.REVERSE_MAP = {}\n SPECIAL_KEYS_MAP = require('../../helpers/special-keys-map')\n for (var key in SPECIAL_KEYS_MAP) {\n // pull out the numeric keypad from here cause keypress should\n // be able to detect the keys from the character\n if (key > 95 && key < 112) {\n continue\n }\n\n if (SPECIAL_KEYS_MAP.hasOwnProperty(key)) {\n constructor.REVERSE_MAP[SPECIAL_KEYS_MAP[key]] = key\n }\n }\n }\n return constructor.REVERSE_MAP\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * finds all callbacks that match based on the keycode, modifiers,\n * and action\n *\n * @param {string} character\n * @param {Array} modifiers\n * @param {Event|Object} e\n * @param {string=} sequenceName - name of the sequence we are looking for\n * @param {string=} combination\n * @param {number=} level\n * @returns {Array}\n */\nmodule.exports = function (character, modifiers, e, sequenceName, combination, level) {\n var self = this\n var j\n var callback\n var matches = []\n var action = e.type\n var isModifier\n var modifiersMatch\n\n if (\n action === 'keypress' &&\n // Firefox fires keypress for arrows\n !(e.code && e.code.slice(0, 5) === 'Arrow')\n ) {\n // 'any-character' callbacks are only on `keypress`\n var anyCharCallbacks = self.callbacks['any-character'] || []\n anyCharCallbacks.forEach(function (callback) {\n matches.push(callback)\n })\n }\n\n if (!self.callbacks[character]) { return matches }\n\n isModifier = require('../../helpers/isModifier')\n // if a modifier key is coming up on its own we should allow it\n if (action === 'keyup' && isModifier(character)) {\n modifiers = [character]\n }\n\n // loop through all callbacks for the key that was pressed\n // and see if any of them match\n for (j = 0; j < self.callbacks[character].length; ++j) {\n callback = self.callbacks[character][j]\n\n // if a sequence name is not specified, but this is a sequence at\n // the wrong level then move onto the next match\n if (!sequenceName && callback.seq && self.sequenceLevels[callback.seq] !== callback.level) {\n continue\n }\n\n // if the action we are looking for doesn't match the action we got\n // then we should keep going\n if (action !== callback.action) {\n continue\n }\n\n // if this is a keypress event and the meta key and control key\n // are not pressed that means that we need to only look at the\n // character, otherwise check the modifiers as well\n //\n // chrome will not fire a keypress if meta or control is down\n // safari will fire a keypress if meta or meta+shift is down\n // firefox will fire a keypress if meta or control is down\n modifiersMatch = require('./modifiersMatch')\n if ((action === 'keypress' && !e.metaKey && !e.ctrlKey) || modifiersMatch(modifiers, callback.modifiers)) {\n // when you bind a combination or sequence a second time it\n // should overwrite the first one. if a sequenceName or\n // combination is specified in this call it does just that\n //\n // @todo make deleting its own method?\n var deleteCombo = !sequenceName && callback.combo === combination\n var deleteSequence = sequenceName && callback.seq === sequenceName && callback.level === level\n if (deleteCombo || deleteSequence) {\n self.callbacks[character].splice(j, 1)\n }\n\n matches.push(callback)\n }\n }\n\n return matches\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * checks if two arrays are equal\n *\n * @param {Array} modifiers1\n * @param {Array} modifiers2\n * @returns {boolean}\n */\nmodule.exports = function (modifiers1, modifiers2) {\n return modifiers1.sort().join(',') === modifiers2.sort().join(',')\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * resets all sequence counters except for the ones passed in\n *\n * @param {Object} doNotReset\n * @returns void\n */\nmodule.exports = function (doNotReset) {\n var self = this\n\n doNotReset = doNotReset || {}\n\n var activeSequences = false\n var key\n\n for (key in self.sequenceLevels) {\n if (doNotReset[key]) {\n activeSequences = true\n continue\n }\n self.sequenceLevels[key] = 0\n }\n\n if (!activeSequences) {\n self.nextExpectedAction = false\n }\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * actually calls the callback function\n *\n * if your callback function returns false this will use the jquery\n * convention - prevent default and stop propogation on the event\n *\n * @param {Function} callback\n * @param {Event} e\n * @returns void\n */\nmodule.exports = function (callback, e, combo, sequence) {\n var self = this\n var preventDefault\n var stopPropagation\n\n // if this event should not happen stop here\n if (self.stopCallback(e, e.target || e.srcElement, combo, sequence)) {\n return\n }\n\n if (callback(e, combo) === false) {\n preventDefault = require('../../helpers/preventDefault')\n preventDefault(e)\n stopPropagation = require('../../helpers/stopPropagation')\n stopPropagation(e)\n }\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * prevents default for this event\n *\n * @param {Event} e\n * @returns void\n */\nmodule.exports = function (e) {\n if (e.preventDefault) {\n e.preventDefault()\n return\n }\n\n e.returnValue = false\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * stops propogation for this event\n *\n * @param {Event} e\n * @returns void\n */\nmodule.exports = function (e) {\n if (e.stopPropagation) {\n e.stopPropagation()\n return\n }\n\n e.cancelBubble = true\n}\n","/* eslint-env node, browser */\n'use strict'\n\n/**\n * binds a key sequence to an event\n *\n * @param {string} combo - combo specified in bind call\n * @param {Array} keys\n * @param {Function} callback\n * @param {string=} action\n * @returns void\n */\nmodule.exports = function (combo, keys, callback, action) {\n var self = this\n\n // start off by adding a sequence level record for this combination\n // and setting the level to 0\n self.sequenceLevels[combo] = 0\n\n /**\n * callback to increase the sequence level for this sequence and reset\n * all other sequences that were active\n *\n * @param {string} nextAction\n * @returns {Function}\n */\n function increaseSequence (nextAction) {\n return function () {\n self.nextExpectedAction = nextAction\n ++self.sequenceLevels[combo]\n self.resetSequenceTimer()\n }\n }\n\n /**\n * wraps the specified callback inside of another function in order\n * to reset all sequence counters as soon as this sequence is done\n *\n * @param {Event} e\n * @returns void\n */\n function callbackAndReset (e) {\n var characterFromEvent\n self.fireCallback(callback, e, combo)\n\n // we should ignore the next key up if the action is key down\n // or keypress. this is so if you finish a sequence and\n // release the key the final key will not trigger a keyup\n if (action !== 'keyup') {\n characterFromEvent = require('../../helpers/characterFromEvent')\n self.ignoreNextKeyup = characterFromEvent(e)\n }\n\n // weird race condition if a sequence ends with the key\n // another sequence begins with\n setTimeout(\n function () {\n self.resetSequences()\n },\n 10\n )\n }\n\n // loop through keys one at a time and bind the appropriate callback\n // function. for any key leading up to the final one it should\n // increase the sequence. after the final, it should reset all sequences\n //\n // if an action is specified in the original bind call then that will\n // be used throughout. otherwise we will pass the action that the\n // next key in the sequence should match. this allows a sequence\n // to mix and match keypress and keydown events depending on which\n // ones are better suited to the key provided\n for (var j = 0; j < keys.length; ++j) {\n var isFinal = j + 1 === keys.length\n var wrappedCallback = isFinal ? callbackAndReset : increaseSequence(action || self.getKeyInfo(keys[j + 1]).action)\n self.bindSingle(keys[j], wrappedCallback, action, combo, j)\n }\n}\n","/* eslint-env node, browser */\n'use strict'\n/**\n * called to set a 1 second timeout on the specified sequence\n *\n * this is so after each key press in the sequence you have 1 second\n * to press the next key before you have to start over\n *\n * @returns void\n */\nmodule.exports = function () {\n var self = this\n\n clearTimeout(self.resetTimer)\n self.resetTimer = setTimeout(\n function () {\n self.resetSequences()\n },\n 1000\n )\n}\n","var off = require('./dom-event').off\nmodule.exports = function () {\n var self = this\n var element = self.element\n\n off(element, 'keypress', self.eventHandler)\n off(element, 'keydown', self.eventHandler)\n off(element, 'keyup', self.eventHandler)\n}\n","/* eslint-env node, browser */\n'use strict'\n\nmodule.exports = function () {\n var self = this\n\n self.instances.forEach(function (combokeys) {\n combokeys.reset()\n })\n}\n","'use strict';\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar fails = require('./_fails');\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n // IE8-\n test.sort(undefined);\n}) || !fails(function () {\n // V8 bug\n test.sort(null);\n // Old WebKit\n}) || !require('./_strict-method')($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? $sort.call(toObject(this))\n : $sort.call(toObject(this), aFunction(comparefn));\n }\n});\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_ICSS_IMPORT_0___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../global/global.css\");\nvar ___CSS_LOADER_AT_RULE_IMPORT_0___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../global/variables.css\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\nexports.i(___CSS_LOADER_ICSS_IMPORT_0___, \"\", true);\nexports.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n// Module\nexports.push([module.id, \".popup_009 {\\n\\n position: fixed;\\n z-index: 5;\\n z-index: var(--ring-overlay-z-index);\\n top: -100vh;\\n left: -100vw;\\n\\n overflow-y: auto;\\n\\n box-sizing: border-box;\\n\\n border: 1px solid rgba(0, 42, 76, 0.1);\\n\\n border: 1px solid var(--ring-popup-border-color);\\n border-radius: 3px;\\n border-radius: var(--ring-border-radius);\\n\\n background-color: #fff;\\n\\n background-color: var(--ring-popup-background-color);\\n box-shadow: 0 2px 16px 0 rgba(0, 42, 76, 0.15);\\n box-shadow: 0 2px 16px 0 var(--ring-popup-shadow-color);\\n}\\n\\n.hidden_138 {\\n display: none;\\n}\\n\\n.showing_a8d {\\n opacity: 0;\\n}\\n\\n.attached_5ed {\\n border-top: 0;\\n border-top-left-radius: 0;\\n border-top-right-radius: 0;\\n}\\n\", \"\"]);\n// Exports\nexports.locals = {\n\t\"popup\": \"popup_009 \" + ___CSS_LOADER_ICSS_IMPORT_0___.locals[\"font\"] + \"\",\n\t\"hidden\": \"hidden_138\",\n\t\"showing\": \"showing_a8d\",\n\t\"attached\": \"attached_5ed\"\n};\nmodule.exports = exports;\n","'use strict';\nvar $export = require('./_export');\nvar $some = require('./_array-methods')(3);\n\n$export($export.P + $export.F * !require('./_strict-method')([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments[1]);\n }\n});\n","require('../../modules/es6.object.assign');\nmodule.exports = require('../../modules/_core').Object.assign;\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","require('../../modules/es6.object.get-own-property-descriptor');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function getOwnPropertyDescriptor(it, key) {\n return $Object.getOwnPropertyDescriptor(it, key);\n};\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","require('../../modules/es6.object.get-prototype-of');\nmodule.exports = require('../../modules/_core').Object.getPrototypeOf;\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","module.exports = { \"default\": require(\"core-js/library/fn/object/define-property\"), __esModule: true };","require('../../modules/es6.object.define-property');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function defineProperty(it, key, desc) {\n return $Object.defineProperty(it, key, desc);\n};\n","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n","module.exports = { \"default\": require(\"core-js/library/fn/symbol/iterator\"), __esModule: true };","require('../../modules/es6.string.iterator');\nrequire('../../modules/web.dom.iterable');\nmodule.exports = require('../../modules/_wks-ext').f('iterator');\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","module.exports = function () { /* empty */ };\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","module.exports = { \"default\": require(\"core-js/library/fn/symbol\"), __esModule: true };","require('../../modules/es6.symbol');\nrequire('../../modules/es6.object.to-string');\nrequire('../../modules/es7.symbol.async-iterator');\nrequire('../../modules/es7.symbol.observable');\nmodule.exports = require('../../modules/_core').Symbol;\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","require('./_wks-define')('asyncIterator');\n","require('./_wks-define')('observable');\n","module.exports = { \"default\": require(\"core-js/library/fn/object/set-prototype-of\"), __esModule: true };","require('../../modules/es6.object.set-prototype-of');\nmodule.exports = require('../../modules/_core').Object.setPrototypeOf;\n","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","module.exports = { \"default\": require(\"core-js/library/fn/object/create\"), __esModule: true };","require('../../modules/es6.object.create');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function create(P, D) {\n return $Object.create(P, D);\n};\n","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n","require('../../modules/es6.object.keys');\nmodule.exports = require('../../modules/_core').Object.keys;\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","require('../modules/es6.object.to-string');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/web.dom.iterable');\nrequire('../modules/es6.promise');\nrequire('../modules/es7.promise.finally');\nrequire('../modules/es7.promise.try');\nmodule.exports = require('../modules/_core').Promise;\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","var hide = require('./_hide');\nmodule.exports = function (target, src, safe) {\n for (var key in src) {\n if (safe && target[key]) target[key] = src[key];\n else hide(target, key, src[key]);\n } return target;\n};\n","'use strict';\nvar global = require('./_global');\nvar core = require('./_core');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n","'use strict';\n// https://github.com/tc39/proposal-promise-try\nvar $export = require('./_export');\nvar newPromiseCapability = require('./_new-promise-capability');\nvar perform = require('./_perform');\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapability.f(this);\n var result = perform(callbackfn);\n (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n return promiseCapability.promise;\n} });\n","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n module.exports = _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;","function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_ICSS_IMPORT_0___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../global/global.css\");\nvar ___CSS_LOADER_AT_RULE_IMPORT_0___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../global/variables.css\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\nexports.i(___CSS_LOADER_ICSS_IMPORT_0___, \"\", true);\nexports.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n// Module\nexports.push([module.id, \"@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.error_471:hover {\\n color: #c22731;\\n color: var(--ring-error-color);\\n }}\\n\\n.list_735 {\\n position: relative;\\n\\n z-index: 1;\\n\\n border-radius: 3px;\\n\\n border-radius: var(--ring-border-radius);\\n\\n line-height: normal;\\n}\\n\\n.simpleInner_268 {\\n overflow: auto;\\n}\\n\\n.scrolling_6d6 {\\n pointer-events: none;\\n}\\n\\n.separator_6ff {\\n display: block;\\n\\n min-height: 8px;\\n\\n margin-top: 8px;\\n padding: 0 16px 1px;\\n\\n text-align: right;\\n\\n color: #737577;\\n\\n color: var(--ring-secondary-color);\\n border-top: 1px solid #dfe5eb;\\n border-top: 1px solid var(--ring-line-color);\\n\\n font-size: 12px;\\n\\n font-size: var(--ring-font-size-smaller);\\n line-height: 18px;\\n line-height: var(--ring-line-height-lower);\\n}\\n\\n.separator_first_fe8 {\\n margin-top: 0;\\n padding-top: 0;\\n\\n border: none;\\n}\\n\\n.item_857 {\\n display: block;\\n\\n box-sizing: border-box;\\n\\n width: 100%;\\n\\n text-align: left;\\n vertical-align: bottom;\\n white-space: nowrap;\\n text-decoration: none;\\n\\n outline: none;\\n\\n font-size: 13px;\\n\\n font-size: var(--ring-font-size);\\n line-height: 24px;\\n}\\n\\n.item_857.item_857 {\\n padding: 3px 16px 5px;\\n}\\n\\n.itemContainer_a7e {\\n position: relative;\\n}\\n\\n.compact_edd {\\n line-height: 16px;\\n}\\n\\n.error_471 {\\n cursor: default\\n\\n /* Override ring-link */\\n}\\n\\n.error_471,\\n .error_471:focus,\\n .error_471:visited {\\n color: #c22731;\\n color: var(--ring-error-color);\\n }\\n\\n.add_7fe {\\n padding: 8px 16px;\\n\\n line-height: 32px;\\n}\\n\\n.top_37b {\\n display: flex;\\n align-items: baseline;\\n flex-direction: row;\\n}\\n\\n.left_23c {\\n align-self: center;\\n flex-shrink: 0;\\n}\\n\\n.label_088 {\\n overflow: hidden;\\n flex-grow: 1;\\n flex-shrink: 1;\\n\\n text-align: left;\\n white-space: nowrap;\\n text-overflow: ellipsis\\n}\\n\\n[dir=rtl] .label_088 {\\n text-align: right;\\n direction: ltr\\n}\\n\\n.description_aea {\\n overflow: hidden;\\n flex-shrink: 100;\\n\\n padding-left: 8px;\\n\\n text-align: right;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n\\n color: #737577;\\n\\n color: var(--ring-secondary-color);\\n\\n font-size: 12px;\\n\\n font-size: var(--ring-font-size-smaller);\\n font-weight: 400;\\n line-height: 16px;\\n line-height: var(--ring-line-height-lowest);\\n}\\n\\n.right_c60 {\\n display: flex;\\n align-items: center;\\n align-self: center;\\n flex-direction: row;\\n flex-shrink: 0;\\n}\\n\\n.details_ecd {\\n margin-bottom: 6px;\\n\\n white-space: normal;\\n\\n color: #737577;\\n\\n color: var(--ring-secondary-color);\\n\\n font-size: 12px;\\n\\n font-size: var(--ring-font-size-smaller);\\n line-height: 16px;\\n line-height: var(--ring-line-height-lowest);\\n}\\n\\n.padded_029 {\\n margin-left: 20px;\\n}\\n\\n/* Override :last-child */\\n.hint_ace.hint_ace {\\n margin-bottom: 0;\\n\\n border-top: 1px solid #dfe5eb;\\n\\n border-top: 1px solid var(--ring-line-color);\\n background-color: #f7f9fa;\\n background-color: var(--ring-sidebar-background-color);\\n\\n font-size: 12px;\\n\\n font-size: var(--ring-font-size-smaller);\\n}\\n\\n.action_def {\\n cursor: pointer;\\n\\n color: #1f2326;\\n\\n color: var(--ring-text-color);\\n}\\n\\n/* override link */\\n.actionLink_173.actionLink_173 {\\n transition: none;\\n}\\n\\n.hover_a79:not(.error_471) {\\n background-color: #d4edff;\\n background-color: var(--ring-selected-background-color);\\n}\\n\\n.icon_236 {\\n display: inline-block;\\n\\n width: 20px;\\n height: 20px;\\n margin-left: 16px;\\n\\n background-repeat: no-repeat;\\n background-position: center;\\n\\n background-size: contain;\\n}\\n\\n.highlight_e53 {\\n color: #ff008c;\\n color: var(--ring-link-hover-color);\\n}\\n\\n.service_7e0 {\\n color: #737577;\\n color: var(--ring-secondary-color);\\n}\\n\\n.glyph_20d {\\n float: left;\\n\\n width: 20px;\\n margin-right: 8px;\\n\\n color: #999;\\n\\n color: var(--ring-icon-secondary-color);\\n}\\n\\n.avatar_d37 {\\n\\n top: 0;\\n}\\n\\n.rightGlyph_d26 {\\n\\n float: right;\\n\\n margin-right: 0;\\n margin-left: 16px;\\n}\\n\\n.checkboxContainer_741 {\\n position: absolute;\\n top: 7px;\\n left: 19px;\\n\\n width: 20px;\\n height: 20px;\\n margin-right: 8px;\\n}\\n\\n.compact_edd .checkboxContainer_741 {\\n top: 0;\\n\\n width: 16px;\\n height: 16px;\\n}\\n\\n.title_947 {\\n display: block;\\n\\n margin-top: 10px;\\n margin-bottom: 6px;\\n padding: 8px 16px 0;\\n\\n text-align: left\\n}\\n\\n[dir=rtl] .title_947 {\\n text-align: right;\\n direction: ltr\\n}\\n\\n.title_first_45f {\\n margin-top: 0;\\n}\\n\\n.text_001 {\\n letter-spacing: 1.5px;\\n text-transform: uppercase;\\n\\n color: #737577;\\n\\n color: var(--ring-secondary-color);\\n\\n font-size: 12px;\\n\\n font-size: var(--ring-font-size-smaller);\\n}\\n\\n.fade_125 {\\n position: absolute;\\n bottom: 0;\\n\\n width: 100%;\\n height: 24px;\\n\\n pointer-events: none;\\n\\n background: linear-gradient(to bottom, rgba(255, 255, 255, 0), #fff);\\n\\n background: linear-gradient(to bottom, rgba(255, 255, 255, 0), var(--ring-content-background-color));\\n}\\n\\n.disabled_48b {\\n pointer-events: none;\\n\\n color: #999;\\n\\n color: var(--ring-disabled-color);\\n}\\n\", \"\"]);\n// Exports\nexports.locals = {\n\t\"unit\": \"\" + ___CSS_LOADER_ICSS_IMPORT_0___.locals[\"unit\"] + \"\",\n\t\"listSpacing\": \"8px\",\n\t\"error\": \"error_471\",\n\t\"list\": \"list_735\",\n\t\"simpleInner\": \"simpleInner_268\",\n\t\"scrolling\": \"scrolling_6d6\",\n\t\"separator\": \"separator_6ff\",\n\t\"separator_first\": \"separator_first_fe8\",\n\t\"item\": \"item_857\",\n\t\"itemContainer\": \"itemContainer_a7e\",\n\t\"compact\": \"compact_edd\",\n\t\"add\": \"add_7fe\",\n\t\"top\": \"top_37b\",\n\t\"left\": \"left_23c\",\n\t\"label\": \"label_088\",\n\t\"description\": \"description_aea\",\n\t\"right\": \"right_c60\",\n\t\"details\": \"details_ecd\",\n\t\"padded\": \"padded_029\",\n\t\"hint\": \"hint_ace\",\n\t\"action\": \"action_def\",\n\t\"actionLink\": \"actionLink_173\",\n\t\"hover\": \"hover_a79\",\n\t\"icon\": \"icon_236\",\n\t\"highlight\": \"highlight_e53\",\n\t\"service\": \"service_7e0\",\n\t\"glyph\": \"glyph_20d\",\n\t\"avatar\": \"avatar_d37 glyph_20d\",\n\t\"rightGlyph\": \"rightGlyph_d26 glyph_20d\",\n\t\"checkboxContainer\": \"checkboxContainer_741\",\n\t\"title\": \"title_947\",\n\t\"title_first\": \"title_first_45f\",\n\t\"text\": \"text_001\",\n\t\"fade\": \"fade_125\",\n\t\"disabled\": \"disabled_48b\"\n};\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_ICSS_IMPORT_0___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../global/global.css\");\nvar ___CSS_LOADER_AT_RULE_IMPORT_0___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../global/variables.css\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\nexports.i(___CSS_LOADER_ICSS_IMPORT_0___, \"\", true);\nexports.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n// Module\nexports.push([module.id, \".checkbox_e82 {\\n position: relative;\\n\\n display: inline-block;\\n\\n text-align: left;\\n\\n color: #1f2326;\\n\\n color: var(--ring-text-color);\\n outline: none\\n}\\n\\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.checkbox_e82:hover .cell_ff0 {\\n transition: background-color 0.3s ease-out;\\n transition: background-color var(--ring-ease);\\n\\n border-color: #80c6ff;\\n\\n border-color: var(--ring-border-hover-color);\\n }}\\n\\n.cell_ff0 {\\n position: relative;\\n top: -2px;\\n\\n display: inline-block;\\n\\n box-sizing: border-box;\\n width: 14px;\\n height: 14px;\\n\\n -webkit-user-select: none;\\n\\n -moz-user-select: none;\\n\\n -ms-user-select: none;\\n\\n user-select: none;\\n transition: border-color 0.3s ease-out, background-color 0.3s ease-out, box-shadow 0.3s ease-out;\\n transition: border-color var(--ring-ease), background-color var(--ring-ease), box-shadow var(--ring-ease);\\n vertical-align: middle;\\n pointer-events: none;\\n\\n border: 1px solid #b8d1e5;\\n\\n border: 1px solid var(--ring-borders-color);\\n border-radius: 3px;\\n background-color: #fff;\\n background-color: var(--ring-content-background-color);\\n}\\n\\n.icon_5de.icon_5de {\\n position: absolute;\\n top: -12px;\\n left: 1px;\\n\\n width: 16px;\\n height: 16px;\\n\\n transition: opacity 0.15s ease-out, transform 0.15s ease-out;\\n\\n transition: opacity var(--ring-fast-ease), transform var(--ring-fast-ease);\\n\\n opacity: 0\\n}\\n\\n.icon_5de.icon_5de svg {\\n position: absolute;\\n top: 0;\\n left: 0;\\n }\\n\\n.input_d49 {\\n position: absolute;\\n top: 0;\\n left: 0;\\n\\n width: 100%;\\n height: 100%;\\n margin: 0;\\n\\n cursor: pointer;\\n\\n opacity: 0\\n}\\n\\n.input_d49:checked + .cell_ff0 {\\n border-color: #80c6ff;\\n border-color: var(--ring-border-hover-color);\\n background-color: #d4edff;\\n background-color: var(--ring-selected-background-color)\\n\\n /* stylelint-disable-next-line selector-max-specificity */\\n }\\n\\n.input_d49:checked + .cell_ff0 .icon_5de {\\n transform: translateY(8px);\\n\\n opacity: 1;\\n }\\n\\n.input_d49:focus + .cell_ff0,\\n .input_d49.focus_91c + .cell_ff0 {\\n transition: background-color 0.3s ease-out;\\n transition: background-color var(--ring-ease);\\n\\n border-color: #80c6ff;\\n\\n border-color: var(--ring-border-hover-color);\\n box-shadow: 0 0 0 1px #80c6ff;\\n box-shadow: 0 0 0 1px var(--ring-border-hover-color);\\n }\\n\\n.input_d49[disabled] {\\n pointer-events: none;\\n }\\n\\n.input_d49[disabled] + .cell_ff0 {\\n border-color: #dfe5eb;\\n border-color: var(--ring-line-color);\\n background-color: #fff;\\n background-color: var(--ring-content-background-color);\\n }\\n\\n.input_d49 {\\n\\n /* stylelint-disable-next-line selector-max-specificity */\\n}\\n\\n.input_d49[disabled]:checked + .cell_ff0 .icon_5de {\\n opacity: 0.5;\\n }\\n\\n.input_d49[disabled] ~ .label_0f3 {\\n color: #999;\\n color: var(--ring-disabled-color);\\n }\\n\\n.label_0f3 {\\n margin-left: 8px;\\n\\n line-height: normal;\\n}\\n\", \"\"]);\n// Exports\nexports.locals = {\n\t\"unit\": \"\" + ___CSS_LOADER_ICSS_IMPORT_0___.locals[\"unit\"] + \"\",\n\t\"checkboxSize\": \"14px\",\n\t\"checkbox\": \"checkbox_e82\",\n\t\"cell\": \"cell_ff0\",\n\t\"icon\": \"icon_5de\",\n\t\"input\": \"input_d49\",\n\t\"focus\": \"focus_91c\",\n\t\"label\": \"label_0f3\"\n};\nmodule.exports = exports;\n","'use strict';\n// B.2.3.10 String.prototype.link(url)\nrequire('./_string-html')('link', function (createHTML) {\n return function link(url) {\n return createHTML(this, 'a', 'href', url);\n };\n});\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_ICSS_IMPORT_0___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../alert/alert.css\");\nvar ___CSS_LOADER_AT_RULE_IMPORT_0___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../global/variables.css\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\nexports.i(___CSS_LOADER_ICSS_IMPORT_0___, \"\", true);\nexports.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n// Module\nexports.push([module.id, \"@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.link_bf7:hover {\\n transition: none;\\n\\n color: #ff008c;\\n\\n color: var(--ring-link-hover-color);\\n }}\\n\\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.link_bf7:hover {\\n text-decoration: none;\\n }}\\n\\n.link_bf7 { /* To override link stiles inside alert */\\n\\n cursor: pointer;\\n transition: color 0.15s ease-out;\\n transition: color var(--ring-fast-ease);\\n\\n color: #0f5b99;\\n\\n color: var(--ring-link-color);\\n }\\n\\n.link_bf7 {\\n text-decoration: none;\\n }\\n\\n.link_bf7.hover_43a {\\n transition: none;\\n\\n color: #ff008c;\\n\\n color: var(--ring-link-hover-color);\\n }\\n\\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.link_bf7:hover .inner_cbe {\\n border-width: 0;\\n border-bottom: 2px solid;\\n border-image-source: linear-gradient(currentcolor 50%, transparent 50%);\\n border-image-slice: 0 0 100% 0;\\n }}\\n\\n.link_bf7.active_77f {\\n color: inherit;\\n }\\n\\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.link_bf7.compatibilityUnderlineMode_3ea:hover {\\n text-decoration: underline\\n\\n /* stylelint-disable-next-line selector-max-specificity */\\n }}\\n\\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.link_bf7.compatibilityUnderlineMode_3ea:hover .inner_cbe {\\n border: none;\\n }}\\n\\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.link_bf7.pseudo_f79:hover {\\n text-decoration: none\\n\\n /* stylelint-disable-next-line selector-max-specificity */\\n }}\\n\\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.link_bf7.pseudo_f79:hover .inner_cbe {\\n border: none;\\n }}\\n\\n@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 2dppx) {@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.link_bf7:hover .inner_cbe {\\n border-bottom-width: 1px;\\n }}\\n}\\n\\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.inherit_d8a:not(:hover) {\\n color: inherit;\\n}}\\n\\n.pseudo_f79 {\\n padding: 0;\\n\\n text-align: left;\\n\\n border: 0;\\n\\n background: transparent;\\n\\n font: inherit\\n}\\n\\n.pseudo_f79::-moz-focus-inner {\\n padding: 0;\\n\\n border: 0;\\n }\\n\", \"\"]);\n// Exports\nexports.locals = {\n\t\"link\": \"link_bf7 \" + ___CSS_LOADER_ICSS_IMPORT_0___.locals[\"link\"] + \"\",\n\t\"hover\": \"hover_43a\",\n\t\"inner\": \"inner_cbe\",\n\t\"active\": \"active_77f\",\n\t\"compatibilityUnderlineMode\": \"compatibilityUnderlineMode_3ea\",\n\t\"pseudo\": \"pseudo_f79\",\n\t\"inherit\": \"inherit_d8a\"\n};\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_ICSS_IMPORT_0___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../global/global.css\");\nvar ___CSS_LOADER_AT_RULE_IMPORT_0___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../global/variables.css\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\nexports.i(___CSS_LOADER_ICSS_IMPORT_0___, \"\", true);\nexports.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n// Module\nexports.push([module.id, \"@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.close_ab8:hover {\\n color: #ff008c;\\n color: var(--ring-link-hover-color);\\n }}\\n\\n.alert_84a {\\n position: relative;\\n\\n display: flex;\\n align-items: baseline;\\n\\n box-sizing: border-box;\\n min-height: 40px;\\n margin: 8px auto;\\n padding: 0 16px;\\n\\n transition:\\n transform 300ms ease-out,\\n margin-bottom 300ms ease-out,\\n opacity 300ms ease-out;\\n white-space: nowrap;\\n pointer-events: auto;\\n\\n border-radius: 3px;\\n\\n border-radius: var(--ring-border-radius);\\n background-color: #111314;\\n background-color: var(--ring-message-background-color);\\n box-shadow: 0 2px 16px rgba(0, 42, 76, 0.15);\\n box-shadow: 0 2px 16px var(--ring-popup-shadow-color);\\n\\n font-size: 13px;\\n\\n font-size: var(--ring-font-size);\\n line-height: 40px;\\n}\\n\\n.alertInline_b5a {\\n margin: 8px;\\n}\\n\\n.error_4c9 {\\n word-wrap: break-word;\\n\\n color: #c22731;\\n\\n color: var(--ring-error-color);\\n}\\n\\n.icon_1a3 {\\n margin-right: 8px;\\n}\\n\\n.caption_b0a {\\n overflow: hidden;\\n\\n max-width: calc(100% - 40px);\\n\\n margin: 12px 40px 12px 0;\\n\\n white-space: normal;\\n\\n color: #fff;\\n\\n color: var(--ring-dark-text-color);\\n\\n line-height: 20px\\n}\\n\\n.caption_b0a .ring-link,\\n \\n .caption_b0a .link_66c {\\n color: #008eff;\\n color: var(--ring-main-color);\\n }\\n\\n.badge_2a3 {\\n margin-left: 8px;\\n\\n vertical-align: baseline;\\n}\\n\\n.loader_a6d {\\n top: 2px;\\n\\n margin-right: 8px;\\n}\\n\\n.close_ab8 {\\n position: absolute;\\n top: 2px;\\n right: 0;\\n\\n margin: 4px;\\n padding: 8px;\\n\\n cursor: pointer;\\n\\n color: #888;\\n\\n color: var(--ring-dark-secondary-color);\\n border: none;\\n background: transparent;\\n\\n font-size: 0;\\n line-height: 0\\n}\\n\\n.close_ab8:focus {\\n color: #ff008c;\\n color: var(--ring-link-hover-color);\\n }\\n\\n@-webkit-keyframes show_a16 {\\n from {\\n transform: translateY(100%);\\n\\n opacity: 0;\\n }\\n\\n to {\\n transform: translateY(0);\\n\\n opacity: 1;\\n }\\n}\\n\\n@keyframes show_a16 {\\n from {\\n transform: translateY(100%);\\n\\n opacity: 0;\\n }\\n\\n to {\\n transform: translateY(0);\\n\\n opacity: 1;\\n }\\n}\\n\\n@-webkit-keyframes shaking_5d8 {\\n 10%,\\n 90% {\\n transform: translateX(-1px);\\n }\\n\\n 20%,\\n 80% {\\n transform: translateX(2px);\\n }\\n\\n 30%,\\n 50%,\\n 70% {\\n transform: translateX(-4px);\\n }\\n\\n 40%,\\n 60% {\\n transform: translateX(4px);\\n }\\n}\\n\\n@keyframes shaking_5d8 {\\n 10%,\\n 90% {\\n transform: translateX(-1px);\\n }\\n\\n 20%,\\n 80% {\\n transform: translateX(2px);\\n }\\n\\n 30%,\\n 50%,\\n 70% {\\n transform: translateX(-4px);\\n }\\n\\n 40%,\\n 60% {\\n transform: translateX(4px);\\n }\\n}\\n\\n.animationOpen_93d {\\n -webkit-animation-name: show_a16;\\n animation-name: show_a16;\\n -webkit-animation-duration: 300ms;\\n animation-duration: 300ms;\\n}\\n\\n.animationClosing_fdb {\\n z-index: -1;\\n z-index: var(--ring-invisible-element-z-index);\\n\\n opacity: 0;\\n}\\n\\n.animationShaking_6b8 {\\n -webkit-animation-name: shaking_5d8;\\n animation-name: shaking_5d8;\\n -webkit-animation-duration: 500ms;\\n animation-duration: 500ms;\\n}\\n\", \"\"]);\n// Exports\nexports.locals = {\n\t\"unit\": \"\" + ___CSS_LOADER_ICSS_IMPORT_0___.locals[\"unit\"] + \"\",\n\t\"animation-duration\": \"300ms\",\n\t\"animation-easing\": \"ease-out\",\n\t\"close\": \"close_ab8\",\n\t\"alert\": \"alert_84a\",\n\t\"alertInline\": \"alertInline_b5a\",\n\t\"error\": \"error_4c9\",\n\t\"icon\": \"icon_1a3\",\n\t\"caption\": \"caption_b0a\",\n\t\"link\": \"link_66c\",\n\t\"badge\": \"badge_2a3\",\n\t\"loader\": \"loader_a6d\",\n\t\"animationOpen\": \"animationOpen_93d\",\n\t\"show\": \"show_a16\",\n\t\"animationClosing\": \"animationClosing_fdb\",\n\t\"animationShaking\": \"animationShaking_6b8\",\n\t\"shaking\": \"shaking_5d8\"\n};\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_ICSS_IMPORT_0___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../global/global.css\");\nvar ___CSS_LOADER_AT_RULE_IMPORT_0___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../global/variables.css\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\nexports.i(___CSS_LOADER_ICSS_IMPORT_0___, \"\", true);\nexports.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n// Module\nexports.push([module.id, \"@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.input_cc0:-webkit-autofill:hover {\\n -webkit-transition: background-color 50000s ease-in-out 0s;\\n transition: background-color 50000s ease-in-out 0s;\\n }}\\n\\n.container_cc8 {\\n\\n position: relative;\\n\\n box-sizing: border-box;\\n min-height: 64px;\\n padding-top: 16px\\n}\\n\\n.container_cc8 * {\\n box-sizing: border-box;\\n }\\n\\n.compact_da7 {\\n min-height: 32px;\\n padding: 0;\\n}\\n\\n.input_cc0 {\\n width: 100%;\\n min-height: 32px;\\n padding: 0;\\n\\n border: none;\\n outline: none;\\n background: transparent;\\n\\n font: inherit;\\n caret-color: #008eff;\\n caret-color: var(--ring-main-color)\\n}\\n\\n.clearable_6ba .input_cc0 {\\n padding-right: 24px\\n}\\n\\n[dir=rtl] .clearable_6ba .input_cc0 {\\n padding-right: 0;\\n padding-left: 24px\\n}\\n\\n.light_6ee .input_cc0 {\\n color: #1f2326;\\n color: var(--ring-text-color)\\n}\\n\\n.dark_2d8 .input_cc0 {\\n color: #fff;\\n color: var(--ring-dark-text-color)\\n}\\n\\n.input_cc0::-webkit-input-placeholder {\\n color: transparent;\\n }\\n\\n.input_cc0::-moz-placeholder {\\n color: transparent;\\n }\\n\\n.input_cc0:-ms-input-placeholder {\\n color: transparent;\\n }\\n\\n.input_cc0::-ms-input-placeholder {\\n color: transparent;\\n }\\n\\n.input_cc0::placeholder {\\n color: transparent;\\n }\\n\\n.input_cc0[disabled] {\\n color: #999;\\n color: var(--ring-disabled-color);\\n\\n -webkit-text-fill-color: #999;\\n\\n -webkit-text-fill-color: var(--ring-disabled-color); /* Required for Safari, see RG-2063 for details */\\n }\\n\\n.input_cc0 {\\n\\n /*\\n Kill yellow webkit autocomplete\\n https://css-tricks.com/snippets/css/change-autocomplete-styles-webkit-browsers/\\n */\\n}\\n\\n.input_cc0:-webkit-autofill,\\n .input_cc0:-webkit-autofill:focus {\\n -webkit-transition: background-color 50000s ease-in-out 0s;\\n transition: background-color 50000s ease-in-out 0s;\\n }\\n\\n.input_cc0:-webkit-autofill ~ .label_5f1 {\\n top: 4px;\\n\\n font-size: 12px;\\n\\n font-size: var(--ring-font-size-smaller);\\n }\\n\\n.input_cc0 {\\n\\n /* if you need a cross, pass onClear prop */\\n}\\n\\n.input_cc0::-ms-clear {\\n display: none;\\n }\\n\\n.withIcon_dff .input_cc0,\\n.withIcon_dff .label_5f1 {\\n padding-left: 22px\\n}\\n\\n[dir=rtl] .withIcon_dff .input_cc0,\\n[dir=rtl] .withIcon_dff .label_5f1 {\\n padding-right: 22px;\\n padding-left: 0\\n}\\n\\n.icon_ebd,\\n\\n.clear_9db.clear_9db {\\n position: absolute;\\n top: 17px;\\n\\n line-height: 32px\\n}\\n\\n.compact_da7 .icon_ebd,\\n\\n.compact_da7 .clear_9db.clear_9db {\\n top: 1px\\n}\\n\\n.icon_ebd {\\n left: 0;\\n\\n color: #b8d1e5;\\n\\n color: var(--ring-icon-color)\\n}\\n\\n[dir=rtl] .icon_ebd {\\n right: 0;\\n left: auto\\n}\\n\\n.clear_9db {\\n right: 0;\\n\\n padding-right: 0\\n}\\n\\n.empty_1b9 .clear_9db {\\n display: none\\n}\\n\\n[dir=rtl] .clear_9db {\\n right: auto;\\n left: 0\\n}\\n\\ntextarea.input_cc0 {\\n overflow: hidden;\\n\\n box-sizing: border-box;\\n padding-top: 8px;\\n\\n resize: none;\\n}\\n\\n.label_5f1 {\\n position: absolute;\\n top: 23px;\\n left: 0;\\n\\n transition: transform 0.15s ease-out, color 0.15s ease-out;\\n\\n transition: transform var(--ring-fast-ease), color var(--ring-fast-ease);\\n transform-origin: top left;\\n pointer-events: none\\n}\\n\\n.light_6ee .label_5f1 {\\n color: #737577;\\n color: var(--ring-secondary-color)\\n}\\n\\n.dark_2d8 .label_5f1 {\\n color: #888;\\n color: var(--ring-dark-secondary-color)\\n}\\n\\n.input_cc0:focus ~ .label_5f1,\\n.container_cc8.active_51c > .label_5f1,\\n.container_cc8:not(.empty_1b9) > .label_5f1 {\\n transform: translateY(-20px) scale(0.92308);\\n}\\n\\n.noLabel_caf ::-webkit-input-placeholder, .input_cc0:focus::-webkit-input-placeholder {\\n -webkit-transition: color 0.15s ease-out;\\n transition: color 0.15s ease-out;\\n -webkit-transition: color var(--ring-fast-ease);\\n transition: color var(--ring-fast-ease);\\n}\\n\\n.noLabel_caf ::-moz-placeholder, .input_cc0:focus::-moz-placeholder {\\n -moz-transition: color 0.15s ease-out;\\n transition: color 0.15s ease-out;\\n -moz-transition: color var(--ring-fast-ease);\\n transition: color var(--ring-fast-ease);\\n}\\n\\n.noLabel_caf :-ms-input-placeholder, .input_cc0:focus:-ms-input-placeholder {\\n -ms-transition: color 0.15s ease-out;\\n transition: color 0.15s ease-out;\\n -ms-transition: color var(--ring-fast-ease);\\n transition: color var(--ring-fast-ease);\\n}\\n\\n.noLabel_caf ::-ms-input-placeholder, .input_cc0:focus::-ms-input-placeholder {\\n -ms-transition: color 0.15s ease-out;\\n transition: color 0.15s ease-out;\\n -ms-transition: color var(--ring-fast-ease);\\n transition: color var(--ring-fast-ease);\\n}\\n\\n.noLabel_caf ::placeholder,\\n.input_cc0:focus::placeholder {\\n transition: color 0.15s ease-out;\\n transition: color var(--ring-fast-ease);\\n}\\n\\n.light_6ee.noLabel_caf ::-webkit-input-placeholder, .light_6ee :focus::-webkit-input-placeholder {\\n color: #999;\\n color: var(--ring-disabled-color);\\n}\\n\\n.light_6ee.noLabel_caf ::-moz-placeholder, .light_6ee :focus::-moz-placeholder {\\n color: #999;\\n color: var(--ring-disabled-color);\\n}\\n\\n.light_6ee.noLabel_caf :-ms-input-placeholder, .light_6ee :focus:-ms-input-placeholder {\\n color: #999;\\n color: var(--ring-disabled-color);\\n}\\n\\n.light_6ee.noLabel_caf ::-ms-input-placeholder, .light_6ee :focus::-ms-input-placeholder {\\n color: #999;\\n color: var(--ring-disabled-color);\\n}\\n\\n.light_6ee.noLabel_caf ::placeholder,\\n.light_6ee :focus::placeholder {\\n color: #999;\\n color: var(--ring-disabled-color);\\n}\\n\\n/* stylelint-disable-next-line selector-max-specificity */\\n.dark_2d8.noLabel_caf ::-webkit-input-placeholder, .dark_2d8 :focus::-webkit-input-placeholder {\\n color: #737577;\\n color: var(--ring-secondary-color);\\n}\\n.dark_2d8.noLabel_caf ::-moz-placeholder, .dark_2d8 :focus::-moz-placeholder {\\n color: #737577;\\n color: var(--ring-secondary-color);\\n}\\n.dark_2d8.noLabel_caf :-ms-input-placeholder, .dark_2d8 :focus:-ms-input-placeholder {\\n color: #737577;\\n color: var(--ring-secondary-color);\\n}\\n.dark_2d8.noLabel_caf ::-ms-input-placeholder, .dark_2d8 :focus::-ms-input-placeholder {\\n color: #737577;\\n color: var(--ring-secondary-color);\\n}\\n.dark_2d8.noLabel_caf ::placeholder,\\n\\n.dark_2d8 :focus::placeholder {\\n color: #737577;\\n color: var(--ring-secondary-color);\\n}\\n\\n.input_cc0:focus ~ .label_5f1 {\\n color: #008eff;\\n color: var(--ring-main-color);\\n}\\n\\n.error_9e0 > :focus ~ .label_5f1 {\\n color: #c22731;\\n color: var(--ring-error-color);\\n}\\n\\n.underline_d2f {\\n height: 1px;\\n\\n border-bottom-width: 1px;\\n border-bottom-style: solid\\n}\\n\\n.light_6ee .underline_d2f {\\n border-color: #b8d1e5;\\n border-color: var(--ring-borders-color)\\n}\\n\\n.dark_2d8 .underline_d2f {\\n border-color: #406380;\\n border-color: var(--ring-dark-borders-color)\\n}\\n\\n.input_cc0[disabled] ~ .underline_d2f {\\n border-bottom-style: dashed;\\n}\\n\\n.focusUnderline_03a,\\n.errorUnderline_39a {\\n width: 100%;\\n height: 2px;\\n\\n transform: scaleX(0);\\n transform-origin: top left;\\n}\\n\\n.focusUnderline_03a {\\n margin-top: -1px;\\n\\n background: #008eff;\\n\\n background: var(--ring-main-color);\\n}\\n\\n.errorUnderline_39a {\\n margin-top: -2px;\\n\\n background: #db5860;\\n\\n background: var(--ring-icon-error-color)\\n}\\n\\n.dark_2d8 .errorUnderline_39a {\\n background: #c22731;\\n background: var(--ring-error-color)\\n}\\n\\n.input_cc0:focus ~ .focusUnderline_03a,\\n.container_cc8.active_51c > .focusUnderline_03a,\\n.error_9e0 > .errorUnderline_39a {\\n transition: transform 0.15s ease-out;\\n transform: scaleX(1);\\n}\\n\\n.errorText_67d {\\n overflow: hidden;\\n\\n box-sizing: border-box;\\n height: 0;\\n padding: 4px 0 8px;\\n\\n transition: height 0.3s ease-out;\\n\\n color: #c22731;\\n\\n color: var(--ring-error-color);\\n\\n font-size: 12px;\\n\\n font-size: var(--ring-font-size-smaller);\\n line-height: 16px;\\n line-height: var(--ring-line-height-lowest);\\n}\\n\\n.sizeS_b9e {\\n width: 96px;\\n}\\n\\n.sizeM_dea {\\n width: 240px;\\n}\\n\\n.sizeL_ab2 {\\n width: 400px;\\n}\\n\\n.sizeFULL_7a7 {\\n width: 100%;\\n}\\n\", \"\"]);\n// Exports\nexports.locals = {\n\t\"unit\": \"\" + ___CSS_LOADER_ICSS_IMPORT_0___.locals[\"unit\"] + \"\",\n\t\"iconOffset\": \"22px\",\n\t\"input\": \"input_cc0\",\n\t\"container\": \"container_cc8 \" + ___CSS_LOADER_ICSS_IMPORT_0___.locals[\"font-lower\"] + \"\",\n\t\"compact\": \"compact_da7\",\n\t\"clearable\": \"clearable_6ba\",\n\t\"light\": \"light_6ee\",\n\t\"dark\": \"dark_2d8\",\n\t\"label\": \"label_5f1\",\n\t\"withIcon\": \"withIcon_dff\",\n\t\"icon\": \"icon_ebd\",\n\t\"clear\": \"clear_9db\",\n\t\"empty\": \"empty_1b9\",\n\t\"active\": \"active_51c\",\n\t\"noLabel\": \"noLabel_caf\",\n\t\"error\": \"error_9e0\",\n\t\"underline\": \"underline_d2f\",\n\t\"focusUnderline\": \"focusUnderline_03a\",\n\t\"errorUnderline\": \"errorUnderline_39a\",\n\t\"errorText\": \"errorText_67d\",\n\t\"sizeS\": \"sizeS_b9e\",\n\t\"sizeM\": \"sizeM_dea\",\n\t\"sizeL\": \"sizeL_ab2\",\n\t\"sizeFULL\": \"sizeFULL_7a7\"\n};\nmodule.exports = exports;\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_ICSS_IMPORT_0___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../global/global.css\");\nvar ___CSS_LOADER_AT_RULE_IMPORT_0___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../global/variables.css\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\nexports.i(___CSS_LOADER_ICSS_IMPORT_0___, \"\", true);\nexports.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n// Module\nexports.push([module.id, \"@-webkit-keyframes spin_d9f {\\n 0% {\\n transform: rotate(0);\\n }\\n\\n 100% {\\n transform: rotate(360deg);\\n }\\n}\\n\\n@keyframes spin_d9f {\\n 0% {\\n transform: rotate(0);\\n }\\n\\n 100% {\\n transform: rotate(360deg);\\n }\\n}\\n\\n@-webkit-keyframes pulse_757 {\\n 0% {\\n transform: scale(1);\\n }\\n\\n 100% {\\n transform: scale(1.41667);\\n }\\n}\\n\\n@keyframes pulse_757 {\\n 0% {\\n transform: scale(1);\\n }\\n\\n 100% {\\n transform: scale(1.41667);\\n }\\n}\\n\\n.loader_d44,\\n.ring-loader-inline {\\n /* needed for better backward-compatibility */\\n\\n position: relative;\\n\\n display: inline-block;\\n\\n overflow: hidden;\\n\\n transform: rotate(0);\\n -webkit-animation: spin_d9f 1s linear infinite;\\n animation: spin_d9f 1s linear infinite;\\n vertical-align: -3px;\\n\\n border-radius: 8px\\n}\\n\\n.loader_d44,\\n .loader_d44::after,\\n .ring-loader-inline,\\n .ring-loader-inline::after {\\n transform-origin: 50% 50%;\\n }\\n\\n.loader_d44::after, .ring-loader-inline::after {\\n display: block;\\n\\n width: 16px;\\n height: 16px;\\n\\n content: '';\\n -webkit-animation: pulse_757 0.85s cubic-bezier(0.68, 0, 0.74, 0.74) infinite alternate;\\n animation: pulse_757 0.85s cubic-bezier(0.68, 0, 0.74, 0.74) infinite alternate;\\n }\\n\\n.children_144 {\\n margin-left: 4px;\\n}\\n\", \"\"]);\n// Exports\nexports.locals = {\n\t\"unit\": \"\" + ___CSS_LOADER_ICSS_IMPORT_0___.locals[\"unit\"] + \"\",\n\t\"loader\": \"loader_d44\",\n\t\"spin\": \"spin_d9f\",\n\t\"pulse\": \"pulse_757\",\n\t\"children\": \"children_144\"\n};\nmodule.exports = exports;\n","/**\n * CSS conic-gradient() polyfill\n * By Lea Verou — http://lea.verou.me\n * MIT license\n */\n\n(function(){\n\nvar π = Math.PI;\nvar τ = 2 * π;\nvar ε = .00001;\nvar deg = π/180;\n\nvar dummy = document.createElement(\"div\");\ndocument.head.appendChild(dummy);\n\nvar _ = self.ConicGradient = function(o) {\n\tvar me = this;\n\t_.all.push(this);\n\n\to = o || {};\n\n\tthis.canvas = document.createElement(\"canvas\");\n\tthis.context = this.canvas.getContext(\"2d\");\n\n\tthis.repeating = !!o.repeating;\n\n\tthis.size = o.size || Math.max(innerWidth, innerHeight);\n\n\tthis.canvas.width = this.canvas.height = this.size;\n\n\tvar stops = o.stops;\n\n\tthis.stops = (stops || \"\").split(/\\s*,(?![^(]*\\))\\s*/); // commas that are not followed by a ) without a ( first\n\n\tthis.from = 0;\n\n\tfor (var i=0; i 0) {\n\t\tvar first = this.stops[0].clone();\n\t\tfirst.pos = 0;\n\t\tthis.stops.unshift(first);\n\t}\n\n\t// Add dummy last stop or set first stop’s position to 100% if it doesn’t have one\n\tif (this.stops[this.stops.length - 1].pos === undefined) {\n\t\tthis.stops[this.stops.length - 1].pos = 1;\n\t}\n\telse if (!this.repeating && this.stops[this.stops.length - 1].pos < 1) {\n\t\tvar last = this.stops[this.stops.length - 1].clone();\n\t\tlast.pos = 1;\n\t\tthis.stops.push(last);\n\t}\n\n\tthis.stops.forEach(function(stop, i){\n\t\tif (stop.pos === undefined) {\n\t\t\t// Evenly space color stops with no position\n\t\t\tfor (var j=i+1; this[j]; j++) {\n\t\t\t\tif (this[j].pos !== undefined) {\n\t\t\t\t\tstop.pos = this[i-1].pos + (this[j].pos - this[i-1].pos)/(j-i+1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (i > 0) {\n\t\t\t// Normalize color stops whose position is smaller than the position of the stop before them\n\t\t\tstop.pos = Math.max(stop.pos, this[i-1].pos);\n\t\t}\n\t}, this.stops);\n\n\tif (this.repeating) {\n\t\t// Repeat color stops until >= 1\n\t\tvar stops = this.stops.slice();\n\t\tvar lastStop = stops[stops.length-1];\n\t\tvar difference = lastStop.pos - stops[0].pos;\n\n\t\tfor (var i=0; this.stops[this.stops.length-1].pos < 1 && i<10000; i++) {\n\t\t\tfor (var j=0; j' +\n\t\t\t'' +\n\t\t\t'';\n\t},\n\n\tget png() {\n\t\treturn this.canvas.toDataURL();\n\t},\n\n\tget r() {\n\t\treturn Math.sqrt(2) * this.size / 2;\n\t},\n\n\t// Paint the conical gradient on the canvas\n\t// Algorithm inspired from http://jsdo.it/akm2/yr9B\n\tpaint: function() {\n\t\tvar c = this.context;\n\n\t\tvar radius = this.r;\n\t\tvar x = this.size / 2;\n\n\t\tvar stopIndex = 0; // The index of the current color\n\t\tvar stop = this.stops[stopIndex], prevStop;\n\n\t\tvar diff, t;\n\n\t\t// Transform coordinate system so that angles start from the top left, like in CSS\n\t\tc.translate(this.size/2, this.size/2);\n\t\tc.rotate(-90*deg);\n\t\tc.rotate(this.from*deg);\n\t\tc.translate(-this.size/2, -this.size/2);\n\n\t\tfor (var i = 0; i < 360;) {\n\t\t\tif (i/360 + ε >= stop.pos) {\n\t\t\t\t// Switch color stop\n\t\t\t\tdo {\n\t\t\t\t\tprevStop = stop;\n\n\t\t\t\t\tstopIndex++;\n\t\t\t\t\tstop = this.stops[stopIndex];\n\t\t\t\t} while(stop && stop != prevStop && stop.pos === prevStop.pos);\n\n\t\t\t\tif (!stop) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tvar sameColor = prevStop.color + \"\" === stop.color + \"\" && prevStop != stop;\n\n\t\t\t\tdiff = prevStop.color.map(function(c, i){\n\t\t\t\t\treturn stop.color[i] - c;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tt = (i/360 - prevStop.pos) / (stop.pos - prevStop.pos);\n\n\t\t\tvar interpolated = sameColor? stop.color : diff.map(function(d,i){\n\t\t\t\tvar ret = d * t + prevStop.color[i];\n\n\t\t\t\treturn i < 3? ret & 255 : ret;\n\t\t\t});\n\n\t\t\t// Draw a series of arcs, 1deg each\n\t\t\tc.fillStyle = 'rgba(' + interpolated.join(\",\") + ')';\n\t\t\tc.beginPath();\n\t\t\tc.moveTo(x, x);\n\n\t\t\tif (sameColor) {\n\t\t\t\tvar θ = 360 * (stop.pos - prevStop.pos);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar θ = .5;\n\t\t\t}\n\n\t\t\tvar beginArg = i*deg;\n\t\t\tbeginArg = Math.min(360*deg, beginArg);\n\n\t\t\t// .02: To prevent empty blank line and corresponding moire\n\t\t\t// only non-alpha colors are cared now\n\t\t\tvar endArg = beginArg + θ*deg;\n\t\t\tendArg = Math.min(360*deg, endArg + .02);\n\n\t\t\tc.arc(x, x, radius, beginArg, endArg);\n\n\t\t\tc.closePath();\n\t\t\tc.fill();\n\n\t\t\ti += θ;\n\t\t}\n\t}\n};\n\n_.ColorStop = function(gradient, stop) {\n\tthis.gradient = gradient;\n\n\tif (stop) {\n\t\tvar parts = stop.match(/^(.+?)(?:\\s+([\\d.]+)(%|deg|turn|grad|rad)?)?(?:\\s+([\\d.]+)(%|deg|turn|grad|rad)?)?\\s*$/);\n\n\t\tthis.color = _.ColorStop.colorToRGBA(parts[1]);\n\n\t\tif (parts[2]) {\n\t\t\tvar unit = parts[3];\n\n\t\t\tif (unit == \"%\" || parts[2] === \"0\" && !unit) {\n\t\t\t\tthis.pos = parts[2]/100;\n\t\t\t}\n\t\t\telse if (unit == \"turn\") {\n\t\t\t\tthis.pos = +parts[2];\n\t\t\t}\n\t\t\telse if (unit == \"deg\") {\n\t\t\t\tthis.pos = parts[2] / 360;\n\t\t\t}\n\t\t\telse if (unit == \"grad\") {\n\t\t\t\tthis.pos = parts[2] / 400;\n\t\t\t}\n\t\t\telse if (unit == \"rad\") {\n\t\t\t\tthis.pos = parts[2] / τ;\n\t\t\t}\n\t\t}\n\n\t\tif (parts[4]) {\n\t\t\tthis.next = new _.ColorStop(gradient, parts[1] + \" \" + parts[4] + parts[5]);\n\t\t}\n\t}\n}\n\n_.ColorStop.prototype = {\n\tclone: function() {\n\t\tvar ret = new _.ColorStop(this.gradient);\n\t\tret.color = this.color;\n\t\tret.pos = this.pos;\n\n\t\treturn ret;\n\t},\n\n\ttoString: function() {\n\t\treturn \"rgba(\" + this.color.join(\", \") + \") \" + this.pos * 100 + \"%\";\n\t}\n};\n\n_.ColorStop.colorToRGBA = function(color) {\n\tif (!Array.isArray(color) && color.indexOf(\"from\") == -1) {\n\t\tdummy.style.color = color;\n\n\t\tvar rgba = getComputedStyle(dummy).color.match(/rgba?\\(([\\d.]+), ([\\d.]+), ([\\d.]+)(?:, ([\\d.]+))?\\)/);\n\n\t\tif (rgba) {\n\t\t\trgba.shift();\n\t\t\trgba = rgba.map(function(a) { return +a });\n\t\t\trgba[3] = isNaN(rgba[3])? 1 : rgba[3];\n\t\t}\n\n\t\treturn rgba || [0,0,0,0];\n\t}\n\n\treturn color;\n};\n\n})();\n\nif (self.StyleFix) {\n\t// Test if conic gradients are supported first:\n\t(function(){\n\t\tvar dummy = document.createElement(\"p\");\n\t\tdummy.style.backgroundImage = \"conic-gradient(white, black)\";\n\t\tdummy.style.backgroundImage = PrefixFree.prefix + \"conic-gradient(white, black)\";\n\n\t\tif (!dummy.style.backgroundImage) {\n\t\t\t// Not supported, use polyfill\n\t\t\tStyleFix.register(function(css, raw) {\n\t\t\t\tif (css.indexOf(\"conic-gradient\") > -1) {\n\t\t\t\t\tcss = css.replace(/(?:repeating-)?conic-gradient\\(\\s*((?:\\([^()]+\\)|[^;()}])+?)\\)/g, function(gradient, stops) {\n\t\t\t\t\t\treturn new ConicGradient({\n\t\t\t\t\t\t\tstops: stops,\n\t\t\t\t\t\t\trepeating: gradient.indexOf(\"repeating-\") > -1\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn css;\n\t\t\t});\n\t\t}\n\t})();\n}\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_ICSS_IMPORT_0___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../global/global.css\");\nvar ___CSS_LOADER_AT_RULE_IMPORT_0___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../global/variables.css\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\nexports.i(___CSS_LOADER_ICSS_IMPORT_0___, \"\", true);\nexports.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n// Module\nexports.push([module.id, \".tag_923 {\\n\\n position: relative;\\n z-index: 1;\\n\\n display: inline-flex;\\n\\n box-sizing: border-box;\\n max-width: 100%;\\n height: 20px;\\n\\n margin-bottom: 1px;\\n padding: 0 8px;\\n\\n vertical-align: top;\\n\\n color: #1f2326;\\n\\n color: var(--ring-text-color);\\n\\n border: none;\\n border-radius: 3px;\\n border-radius: var(--ring-border-radius);\\n background-color: #e6ecf2;\\n background-color: var(--ring-tag-background-color);\\n\\n font-size: 12px;\\n line-height: 20px;\\n line-height: var(--ring-line-height);\\n}\\n\\n.withRemove_e58 {\\n padding-right: 22px;\\n}\\n\\n.container_34c {\\n position: relative;\\n\\n display: inline-block;\\n\\n max-width: calc(100% - 4px);\\n\\n margin-right: 4px;\\n\\n white-space: nowrap;\\n}\\n\\n.focused_957,\\n.tag_923:focus {\\n position: relative;\\n\\n outline: none;\\n box-shadow: 0 0 0 2px #80c6ff;\\n box-shadow: 0 0 0 2px var(--ring-border-hover-color);\\n}\\n\\n.tagAngled_9c0 {\\n margin-bottom: -5px !important; /* it needs to fix vertical alignment broken by \\\"overflow: hidden\\\". Remove this class, when IE11 will be deprecated */\\n margin-left: 8px;\\n padding-left: 4px;\\n\\n border-top-left-radius: 0;\\n border-bottom-left-radius: 0\\n}\\n\\n.tagAngled_9c0::before {\\n position: absolute;\\n z-index: -1;\\n top: 0;\\n left: 0;\\n\\n box-sizing: border-box;\\n width: 12px;\\n height: 12px;\\n\\n content: '';\\n transform: scaleY(1.177) rotate(45deg);\\n transform-origin: 0 0;\\n\\n border: none;\\n\\n background-color: #e6ecf2;\\n\\n background-color: var(--ring-tag-background-color);\\n }\\n\\n.tagAngled_9c0.focused_957,\\n .tagAngled_9c0:focus {\\n box-shadow: 0 0 0 1px #80c6ff inset, 0 0 0 1px #80c6ff;\\n box-shadow: 0 0 0 1px var(--ring-border-hover-color) inset, 0 0 0 1px var(--ring-border-hover-color);\\n }\\n\\n.tagAngled_9c0:focus::before {\\n box-shadow:\\n 1px -1px #80c6ff inset,\\n -0.8px 0.8px 0 0.5px #80c6ff;\\n box-shadow:\\n 1px -1px var(--ring-border-hover-color) inset,\\n -0.8px 0.8px 0 0.5px var(--ring-border-hover-color);\\n }\\n\\n.content_be9 {\\n}\\n\\n.disabled_3cd {\\n opacity: 0.5;\\n}\\n\\n.remove_d17 {\\n position: absolute;\\n z-index: 1;\\n top: -1px;\\n right: 0;\\n\\n padding: 0 4px;\\n}\\n\\n.removeIcon_800.removeIcon_800 {\\n color: #999;\\n color: var(--ring-icon-secondary-color);\\n}\\n\\n.icon_aae {\\n margin-right: 6px;\\n\\n color: #999;\\n\\n color: var(--ring-icon-secondary-color)\\n}\\n\\n.icon_aae svg {\\n vertical-align: -3px;\\n }\\n\\n.avatarContainer_e30 {\\n display: inline-block;\\n overflow: hidden;\\n\\n box-sizing: border-box;\\n width: 20px;\\n height: 20px;\\n margin-right: 4px;\\n margin-left: -8px;\\n\\n vertical-align: top;\\n\\n border-top-left-radius: 3px;\\n\\n border-top-left-radius: var(--ring-border-radius);\\n border-bottom-left-radius: 3px;\\n border-bottom-left-radius: var(--ring-border-radius);\\n}\\n\\n.customIcon_d24 {\\n max-width: 16px;\\n max-height: 16px;\\n\\n margin-right: 4px;\\n\\n vertical-align: bottom;\\n}\\n\\n.avatarIcon_236 {\\n width: 20px;\\n\\n margin-right: -4px;\\n\\n -o-object-fit: contain;\\n\\n object-fit: contain;\\n -o-object-position: center;\\n object-position: center;\\n}\\n\", \"\"]);\n// Exports\nexports.locals = {\n\t\"unit\": \"\" + ___CSS_LOADER_ICSS_IMPORT_0___.locals[\"unit\"] + \"\",\n\t\"resetButton\": \"\" + ___CSS_LOADER_ICSS_IMPORT_0___.locals[\"resetButton\"] + \"\",\n\t\"background-color\": \"var(--ring-tag-background-color)\",\n\t\"max-height\": \"20px\",\n\t\"tag\": \"tag_923 \" + ___CSS_LOADER_ICSS_IMPORT_0___.locals[\"resetButton\"] + \"\",\n\t\"withRemove\": \"withRemove_e58\",\n\t\"container\": \"container_34c\",\n\t\"focused\": \"focused_957\",\n\t\"tagAngled\": \"tagAngled_9c0\",\n\t\"content\": \"content_be9 \" + ___CSS_LOADER_ICSS_IMPORT_0___.locals[\"ellipsis\"] + \"\",\n\t\"disabled\": \"disabled_3cd\",\n\t\"remove\": \"remove_d17\",\n\t\"removeIcon\": \"removeIcon_800\",\n\t\"icon\": \"icon_aae\",\n\t\"avatarContainer\": \"avatarContainer_e30\",\n\t\"customIcon\": \"customIcon_d24\",\n\t\"avatarIcon\": \"avatarIcon_236\"\n};\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_AT_RULE_IMPORT_0___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../global/variables.css\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\nexports.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n// Module\nexports.push([module.id, \".text_b79 {\\n color: #1f2326;\\n color: var(--ring-text-color);\\n}\\n\\n.info_5a9 {\\n color: #737577;\\n color: var(--ring-secondary-color);\\n}\\n\", \"\"]);\n// Exports\nexports.locals = {\n\t\"text\": \"text_b79\",\n\t\"info\": \"info_5a9\"\n};\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_ICSS_IMPORT_0___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../global/global.css\");\nvar ___CSS_LOADER_AT_RULE_IMPORT_0___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../global/variables.css\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\nexports.i(___CSS_LOADER_ICSS_IMPORT_0___, \"\", true);\nexports.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n// Module\nexports.push([module.id, \".filterWithTags_8f4 {\\n overflow: hidden;\\n\\n margin: 16px 8px 0;\\n padding: 1px;\\n\\n text-align: left;\\n\\n border: 1px solid #b8d1e5;\\n\\n border: 1px solid var(--ring-borders-color)\\n}\\n\\n.filterWithTags_8f4 .filterWrapper_668 {\\n border-bottom: none;\\n }\\n\\n.filterWithTagsFocused_d60 {\\n border: 1px solid #80c6ff;\\n border: 1px solid var(--ring-border-hover-color);\\n}\\n\\n.filter_cd5 {\\n width: 100%\\n}\\n\\n.filter_cd5 input {\\n font-weight: 200;\\n }\\n\\n.filterWrapper_668 {\\n position: relative;\\n\\n margin: 0;\\n padding-right: 8px;\\n padding-left: 44px;\\n\\n border-bottom: 1px solid #b8d1e5;\\n\\n border-bottom: 1px solid var(--ring-borders-color)\\n}\\n\\n[dir=rtl] .filterWrapper_668 {\\n padding-right: 44px;\\n padding-left: 8px\\n}\\n\\n.filterIcon_aa4 {\\n position: absolute;\\n top: 7px;\\n left: 16px;\\n\\n color: #b8d1e5;\\n\\n color: var(--ring-icon-color)\\n}\\n\\n[dir=rtl] .filterIcon_aa4 {\\n right: 16px;\\n left: auto\\n}\\n\\n.bottomLine_2b6 {\\n text-align: center;\\n}\\n\\n.message_bf0 {\\n display: inline-block;\\n\\n margin: 8px 0;\\n padding: 0 16px;\\n}\\n\\n.selectAll_2d3 {\\n display: flex;\\n justify-content: space-between;\\n\\n padding: 8px 16px 0;\\n}\\n\", \"\"]);\n// Exports\nexports.locals = {\n\t\"unit\": \"\" + ___CSS_LOADER_ICSS_IMPORT_0___.locals[\"unit\"] + \"\",\n\t\"filterWithTags\": \"filterWithTags_8f4\",\n\t\"filterWrapper\": \"filterWrapper_668\",\n\t\"filterWithTagsFocused\": \"filterWithTagsFocused_d60\",\n\t\"filter\": \"filter_cd5\",\n\t\"filterIcon\": \"filterIcon_aa4\",\n\t\"bottomLine\": \"bottomLine_2b6\",\n\t\"message\": \"message_bf0\",\n\t\"selectAll\": \"selectAll_2d3\"\n};\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_ICSS_IMPORT_0___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../global/global.css\");\nvar ___CSS_LOADER_AT_RULE_IMPORT_0___ = require(\"-!../../../../css-loader/dist/cjs.js??ref--6-1!../../../../postcss-loader/src/index.js!../global/variables.css\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\nexports.i(___CSS_LOADER_ICSS_IMPORT_0___, \"\", true);\nexports.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n// Module\nexports.push([module.id, \"@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.select_241:hover .value_fbb,\\n.select_241:hover .icons_ae9 {\\n transition: none;\\n\\n color: #008eff;\\n\\n color: var(--ring-main-color);\\n}}\\n\\n.select_241 {\\n position: relative;\\n\\n display: inline-block;\\n\\n white-space: nowrap;\\n\\n color: #1f2326;\\n\\n color: var(--ring-text-color);\\n}\\n\\n.toolbar_0d4 {\\n border-top: 1px solid #dfe5eb;\\n border-top: 1px solid var(--ring-line-color);\\n}\\n\\n.button_e54 {\\n width: 100%;\\n height: 32px;\\n margin: 8px 0;\\n padding: 0 16px;\\n\\n text-align: left\\n}\\n\\n[dir=rtl] .button_e54 {\\n text-align: right;\\n direction: ltr\\n}\\n\\n.icons_ae9 {\\n position: absolute;\\n top: -2px;\\n right: 0;\\n\\n transition: color 0.3s ease-out;\\n\\n transition: color var(--ring-ease);\\n\\n color: #999;\\n\\n color: var(--ring-icon-secondary-color);\\n\\n line-height: 32px\\n}\\n\\n.icons_ae9 .ring-loader_inline {\\n top: 2px;\\n\\n margin-right: 2px;\\n }\\n\\n.inputMode_774 .icons_ae9 {\\n top: 12px;\\n\\n font-size: 13px;\\n\\n font-size: var(--ring-font-size)\\n}\\n\\n.buttonMode_ebe .icons_ae9 {\\n top: -4px;\\n right: 8px\\n}\\n\\n.selectedIcon_b2d {\\n\\n display: inline-block;\\n\\n width: 16px;\\n height: 16px;\\n margin: 0 4px;\\n\\n background-repeat: no-repeat;\\n background-position: center;\\n\\n background-size: contain;\\n}\\n\\n.clearIcon_f95 {\\n padding: 0 3px;\\n\\n vertical-align: -1px;\\n}\\n\\n.clearIcon_f95.clearIcon_f95 > span > span {\\n color: #999;\\n color: var(--ring-icon-secondary-color);\\n}\\n\\n.sizeS_b8c {\\n width: 96px;\\n}\\n\\n.sizeM_ed8 {\\n width: 240px;\\n}\\n\\n.sizeL_152 {\\n width: 400px;\\n}\\n\\n.sizeFULL_199 {\\n width: 100%;\\n}\\n\\n.sizeAUTO_c49 {\\n max-width: 100%;\\n}\\n\\n.buttonMode_ebe,\\n.materialMode_820 {\\n position: relative;\\n\\n cursor: pointer;\\n}\\n\\n.value_fbb {\\n\\n display: inline-block;\\n\\n box-sizing: border-box;\\n width: 100%;\\n height: 33px;\\n padding: 0 0 3px;\\n\\n cursor: pointer;\\n transition: color 0.3s ease-out, border-color 0.3s ease-out;\\n transition: color var(--ring-ease), border-color var(--ring-ease);\\n text-align: left;\\n vertical-align: top;\\n\\n color: #1f2326;\\n\\n color: var(--ring-text-color);\\n\\n border: none;\\n border-bottom: 1px solid #b8d1e5;\\n border-bottom: 1px solid var(--ring-borders-color);\\n outline: none;\\n background: transparent\\n}\\n\\n.value_fbb:focus {\\n border-color: #008eff;\\n border-color: var(--ring-main-color);\\n }\\n\\n.value_fbb.open_5de,\\n .value_fbb:active {\\n border-color: transparent;\\n }\\n\\n.value_fbb::-moz-focus-inner {\\n padding: 0;\\n\\n border: 0;\\n outline: 0;\\n }\\n\\n.buttonValue_96e {\\n\\n width: 100%;\\n\\n text-align: left;\\n vertical-align: -8px;\\n}\\n\\n.buttonValueOpen_16a {\\n border-color: #d4edff;\\n border-color: var(--ring-selected-background-color);\\n background-color: #d4edff;\\n background-color: var(--ring-selected-background-color)\\n}\\n\\n.buttonValueOpen_16a .icons_ae9 {\\n transition: none;\\n\\n color: #008eff;\\n\\n color: var(--ring-main-color);\\n }\\n\\n.label_402 {\\n position: relative;\\n\\n color: #737577;\\n\\n color: var(--ring-secondary-color);\\n}\\n\\n.value_fbb:focus,\\n.value_fbb:focus + .icons_ae9,\\n.open_5de,\\n.open_5de + .icons_ae9 {\\n transition: none;\\n\\n color: #008eff;\\n\\n color: var(--ring-main-color);\\n}\\n\\n.disabled_284 {\\n pointer-events: none;\\n\\n color: #999;\\n\\n color: var(--ring-disabled-color)\\n}\\n\\n.disabled_284 .value_fbb {\\n color: #999;\\n color: var(--ring-disabled-color);\\n border-bottom-style: dashed;\\n }\\n\\n.selectedLabel_188 {\\n position: absolute;\\n top: -12px;\\n\\n color: #737577;\\n\\n color: var(--ring-secondary-color);\\n\\n font-size: 12px;\\n\\n font-size: var(--ring-font-size-smaller);\\n line-height: 16px;\\n line-height: var(--ring-line-height-lowest);\\n}\\n\\n.avatar_53c {\\n margin-right: 4px;\\n\\n vertical-align: -5px;\\n}\\n\\n.popup_dec {\\n min-width: 240px;\\n max-width: 320px;\\n}\\n\\n.chevron_04e.chevron_04e {\\n padding: 0;\\n\\n transition: none;\\n\\n color: inherit;\\n}\\n\\n.chevronIcon_3f6.chevronIcon_3f6 {\\n transition: none;\\n\\n color: inherit;\\n}\\n\", \"\"]);\n// Exports\nexports.locals = {\n\t\"unit\": \"\" + ___CSS_LOADER_ICSS_IMPORT_0___.locals[\"unit\"] + \"\",\n\t\"resetButton\": \"\" + ___CSS_LOADER_ICSS_IMPORT_0___.locals[\"resetButton\"] + \"\",\n\t\"select\": \"select_241\",\n\t\"value\": \"value_fbb \" + ___CSS_LOADER_ICSS_IMPORT_0___.locals[\"ellipsis\"] + \" \" + ___CSS_LOADER_ICSS_IMPORT_0___.locals[\"font\"] + \"\",\n\t\"icons\": \"icons_ae9\",\n\t\"toolbar\": \"toolbar_0d4\",\n\t\"button\": \"button_e54\",\n\t\"inputMode\": \"inputMode_774\",\n\t\"buttonMode\": \"buttonMode_ebe\",\n\t\"selectedIcon\": \"selectedIcon_b2d \" + ___CSS_LOADER_ICSS_IMPORT_0___.locals[\"resetButton\"] + \"\",\n\t\"clearIcon\": \"clearIcon_f95\",\n\t\"sizeS\": \"sizeS_b8c\",\n\t\"sizeM\": \"sizeM_ed8\",\n\t\"sizeL\": \"sizeL_152\",\n\t\"sizeFULL\": \"sizeFULL_199\",\n\t\"sizeAUTO\": \"sizeAUTO_c49\",\n\t\"materialMode\": \"materialMode_820\",\n\t\"open\": \"open_5de\",\n\t\"buttonValue\": \"buttonValue_96e \" + ___CSS_LOADER_ICSS_IMPORT_0___.locals[\"ellipsis\"] + \"\",\n\t\"buttonValueOpen\": \"buttonValueOpen_16a\",\n\t\"label\": \"label_402\",\n\t\"disabled\": \"disabled_284\",\n\t\"selectedLabel\": \"selectedLabel_188\",\n\t\"avatar\": \"avatar_53c\",\n\t\"popup\": \"popup_dec\",\n\t\"chevron\": \"chevron_04e\",\n\t\"chevronIcon\": \"chevronIcon_3f6\"\n};\nmodule.exports = exports;\n","var content = require(\"!!../../../../css-loader/dist/cjs.js!../../../../postcss-loader/src/index.js!../../../../sass-loader/dist/cjs.js??ref--8-3!./input-size.scss\");\ncontent = content.__esModule ? content.default : content;\n\nif (typeof content === 'string') {\n content = [[module.id, content, '']];\n}\n\nvar options = {}\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = require(\"!../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\")(content, options);\n\nif (content.locals) {\n module.exports = content.locals;\n}\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".ring-error-bubble{z-index:2;box-sizing:border-box;display:none;position:absolute;top:0;left:calc(100% + 2px);min-height:24px;padding-right:16px;padding-left:16px;line-height:22px;border-radius:3px;border-radius:var(--ring-border-radius);border:1px solid rgba(0, 42, 76, 0.1);border:1px solid var(--ring-popup-border-color);color:#1f2326;color:var(--ring-text-color);font-size:12px;font-family:system-ui, -apple-system, Segoe UI, Roboto, Noto Sans, Ubuntu, Cantarell, Helvetica Neue, Arial, sans-serif;font-family:var(--ring-font-family);white-space:nowrap;color:#c22731;color:var(--ring-error-color);background:#fff;background:var(--ring-popup-background-color);box-shadow:0 2px 16px 0 rgba(0, 42, 76, 0.15);box-shadow:0 2px 16px 0 var(--ring-popup-shadow-color)}.ring-error-bubble.active{display:inline-block}.ring-error-bubble:before{content:\\\"\\\";transform:rotate(45deg);z-index:-1;z-index:var(--ring-invisible-element-z-index);position:absolute;top:7px;left:-5px;display:block;width:8px;height:8px;border:1px solid rgba(0, 42, 76, 0.1);border:1px solid var(--ring-popup-border-color);border-right:none;border-top:none;background:#fff;background:var(--ring-popup-background-color)}.ring-error-bubble_material{padding-left:8px;box-shadow:none;border:0;background-color:transparent;background:none}.ring-error-bubble_material:before{display:none}.ring-form__control .ring-error-bubble{top:1px}.ring-error-bubble-wrapper{position:relative}.ring-input-size_xs.ring-input-size_xs{display:inline-block;width:50px}.ring-input-size_xs.ring-input-size_xs~.ring-error-bubble{left:52px}.ring-input-size_s.ring-input-size_s{display:inline-block;width:100px}.ring-input-size_s.ring-input-size_s~.ring-error-bubble{left:102px}.ring-input-size_md.ring-input-size_md{display:inline-block;width:200px}.ring-input-size_md.ring-input-size_md~.ring-error-bubble{left:202px}.ring-input-size_l.ring-input-size_l{display:inline-block;width:400px}.ring-input-size_l.ring-input-size_l~.ring-error-bubble{left:402px}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"/* stylelint-disable color-no-hex */\\n\\n:root {\\n --ring-unit: 8px;\\n\\n /* Element */\\n --ring-line-color: #dfe5eb;\\n --ring-dark-line-color: #475159;\\n --ring-borders-color: #b8d1e5;\\n --ring-dark-borders-color: #406380;\\n --ring-icon-color: var(--ring-borders-color);\\n --ring-icon-secondary-color: #999;\\n --ring-border-disabled-color: #dbdbdb;\\n --ring-icon-disabled-color: #bbb;\\n --ring-border-hover-color: #80c6ff;\\n --ring-dark-border-hover-color: #70b1e6;\\n --ring-icon-hover-color: var(--ring-border-hover-color);\\n --ring-main-color: #008eff;\\n --ring-main-hover-color: #007ee5;\\n --ring-icon-error-color: #db5860;\\n --ring-icon-warning-color: #eda200;\\n --ring-icon-success-color: #59a869;\\n --ring-pale-control-color: #cfdbe5;\\n --ring-popup-border-components: 0, 42, 76;\\n --ring-popup-border-color: rgba(var(--ring-popup-border-components), 0.1);\\n --ring-popup-shadow-color: rgba(var(--ring-popup-border-components), 0.15);\\n --ring-message-shadow-color: rgba(var(--ring-popup-border-components), 0.3);\\n\\n /* Text */\\n --ring-search-color: #669ecc;\\n --ring-hint-color: #406380;\\n --ring-link-color: #0f5b99;\\n --ring-link-hover-color: #ff008c;\\n --ring-error-color: #c22731;\\n --ring-warning-color: #cc8b00;\\n --ring-success-color: #1b8833;\\n --ring-text-color: #1f2326;\\n --ring-dark-text-color: #fff;\\n --ring-heading-color: var(--ring-text-color);\\n --ring-secondary-color: #737577;\\n --ring-dark-secondary-color: #888;\\n --ring-disabled-color: #999;\\n --ring-dark-disabled-color: #444;\\n --ring-dark-active-color: #ccc;\\n\\n /* Background */\\n --ring-content-background-color: #fff;\\n --ring-popup-background-color: #fff;\\n --ring-sidebar-background-color: #f7f9fa;\\n --ring-selected-background-color: #d4edff;\\n --ring-hover-background-color: #ebf6ff;\\n --ring-dark-selected-background-color: #002a4d;\\n --ring-message-background-color: #111314;\\n --ring-navigation-background-color: #000;\\n --ring-tag-background-color: #e6ecf2;\\n --ring-removed-background-color: #ffd5cb;\\n --ring-warning-background-color: #faeccd;\\n --ring-added-background-color: #bce8bb;\\n\\n /* Code */\\n --ring-code-background-color: var(--ring-content-background-color);\\n --ring-code-color: #000;\\n --ring-code-comment-color: #707070;\\n --ring-code-meta-color: #707070;\\n --ring-code-keyword-color: #000080;\\n --ring-code-tag-background-color: #efefef;\\n --ring-code-tag-color: var(--ring-code-keyword-color);\\n --ring-code-tag-font-weight: bold;\\n --ring-code-field-color: #660e7a;\\n --ring-code-attribute-color: #00f;\\n --ring-code-number-color: var(--ring-code-attribute-color);\\n --ring-code-string-color: #007a00;\\n --ring-code-addition-color: #aadeaa;\\n --ring-code-deletion-color: #c8c8c8;\\n\\n /* Metrics */\\n --ring-border-radius: 3px;\\n --ring-border-radius-small: 2px;\\n --ring-font-size-larger: 14px;\\n --ring-font-size: 13px;\\n --ring-font-size-smaller: 12px;\\n --ring-line-height-taller: 21px;\\n --ring-line-height: 20px;\\n --ring-line-height-lower: 18px;\\n --ring-line-height-lowest: 16px;\\n --ring-ease: 0.3s ease-out;\\n --ring-fast-ease: 0.15s ease-out;\\n --ring-font-family: system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif, Arial, sans-serif;\\n --ring-font-family-monospace: Menlo, \\\"Bitstream Vera Sans Mono\\\", \\\"Ubuntu Mono\\\", Consolas, \\\"Courier New\\\", Courier, monospace;\\n\\n /* Common z-index-values */\\n\\n /* Invisible element is an absolutely positioned element which should be below */\\n /* all other elements on the page */\\n --ring-invisible-element-z-index: -1;\\n\\n /* z-index for position: fixed elements */\\n --ring-fixed-z-index: 1;\\n\\n /* Elements that should overlay all other elements on the page */\\n --ring-overlay-z-index: 5;\\n\\n /* Alerts should de displayed above overlays */\\n --ring-alert-z-index: 6;\\n}\\n\\nhtml,\\n.app-root {\\n height: 100%;\\n}\\n\\n.search-root {\\n margin: 0;\\n padding: 0;\\n\\n background: #fff;\\n\\n background: var(--ring-content-background-color);\\n\\n font-family: system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif, Arial, sans-serif;\\n\\n font-family: var(--ring-font-family);\\n font-size: 13px;\\n font-size: var(--ring-font-size);\\n line-height: 20px;\\n line-height: var(--ring-line-height);\\n}\\n\\n.search-content {\\n padding: 24px 41px;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","\nfunction expandMap(attrsMap) {\n return Object.entries(attrsMap).\n reduce((result, [key, value]) => (value ? [...result, key] : result), []);\n}\n\nexport default function joinDataTestAttributes(...attrs) {\n return attrs.\n filter(attr => !!attr).\n reduce((result, attr) => {\n if (typeof attr === 'object') {\n return [...result, ...expandMap(attr)];\n }\n return [...result, attr];\n }, []).\n join(' ');\n}\n","/**\n * Commonly used icon colors.\n * @enum {string}\n */\nexport const Color = {\n BLUE: 'blue',\n DEFAULT: '',\n GRAY: 'gray',\n GREEN: 'green',\n MAGENTA: 'magenta',\n RED: 'red',\n WHITE: 'white'\n};\n\n/**\n * @enum {number}\n */\nexport const Size = {\n Size12: 12,\n Size14: 14,\n Size16: 16,\n Size18: 18,\n Size20: 20,\n Size24: 24,\n Size32: 32,\n Size40: 40,\n Size48: 48,\n Size64: 64,\n Size96: 96,\n Size128: 128\n};\n","export default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\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\nfunction componentWillMount() {\n // Call this.constructor.gDSFP to support sub-classes.\n var state = this.constructor.getDerivedStateFromProps(this.props, this.state);\n if (state !== null && state !== undefined) {\n this.setState(state);\n }\n}\n\nfunction componentWillReceiveProps(nextProps) {\n // Call this.constructor.gDSFP to support sub-classes.\n // Use the setState() updater to ensure state isn't stale in certain edge cases.\n function updater(prevState) {\n var state = this.constructor.getDerivedStateFromProps(nextProps, prevState);\n return state !== null && state !== undefined ? state : null;\n }\n // Binding \"this\" is important for shallow renderer support.\n this.setState(updater.bind(this));\n}\n\nfunction componentWillUpdate(nextProps, nextState) {\n try {\n var prevProps = this.props;\n var prevState = this.state;\n this.props = nextProps;\n this.state = nextState;\n this.__reactInternalSnapshotFlag = true;\n this.__reactInternalSnapshot = this.getSnapshotBeforeUpdate(\n prevProps,\n prevState\n );\n } finally {\n this.props = prevProps;\n this.state = prevState;\n }\n}\n\n// React may warn about cWM/cWRP/cWU methods being deprecated.\n// Add a flag to suppress these warnings for this special case.\ncomponentWillMount.__suppressDeprecationWarning = true;\ncomponentWillReceiveProps.__suppressDeprecationWarning = true;\ncomponentWillUpdate.__suppressDeprecationWarning = true;\n\nfunction polyfill(Component) {\n var prototype = Component.prototype;\n\n if (!prototype || !prototype.isReactComponent) {\n throw new Error('Can only polyfill class components');\n }\n\n if (\n typeof Component.getDerivedStateFromProps !== 'function' &&\n typeof prototype.getSnapshotBeforeUpdate !== 'function'\n ) {\n return Component;\n }\n\n // If new component APIs are defined, \"unsafe\" lifecycles won't be called.\n // Error if any of these lifecycles are present,\n // Because they would work differently between older and newer (16.3+) versions of React.\n var foundWillMountName = null;\n var foundWillReceivePropsName = null;\n var foundWillUpdateName = null;\n if (typeof prototype.componentWillMount === 'function') {\n foundWillMountName = 'componentWillMount';\n } else if (typeof prototype.UNSAFE_componentWillMount === 'function') {\n foundWillMountName = 'UNSAFE_componentWillMount';\n }\n if (typeof prototype.componentWillReceiveProps === 'function') {\n foundWillReceivePropsName = 'componentWillReceiveProps';\n } else if (typeof prototype.UNSAFE_componentWillReceiveProps === 'function') {\n foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';\n }\n if (typeof prototype.componentWillUpdate === 'function') {\n foundWillUpdateName = 'componentWillUpdate';\n } else if (typeof prototype.UNSAFE_componentWillUpdate === 'function') {\n foundWillUpdateName = 'UNSAFE_componentWillUpdate';\n }\n if (\n foundWillMountName !== null ||\n foundWillReceivePropsName !== null ||\n foundWillUpdateName !== null\n ) {\n var componentName = Component.displayName || Component.name;\n var newApiName =\n typeof Component.getDerivedStateFromProps === 'function'\n ? 'getDerivedStateFromProps()'\n : 'getSnapshotBeforeUpdate()';\n\n throw Error(\n 'Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n' +\n componentName +\n ' uses ' +\n newApiName +\n ' but also contains the following legacy lifecycles:' +\n (foundWillMountName !== null ? '\\n ' + foundWillMountName : '') +\n (foundWillReceivePropsName !== null\n ? '\\n ' + foundWillReceivePropsName\n : '') +\n (foundWillUpdateName !== null ? '\\n ' + foundWillUpdateName : '') +\n '\\n\\nThe above lifecycles should be removed. Learn more about this warning here:\\n' +\n 'https://fb.me/react-async-component-lifecycle-hooks'\n );\n }\n\n // React <= 16.2 does not support static getDerivedStateFromProps.\n // As a workaround, use cWM and cWRP to invoke the new static lifecycle.\n // Newer versions of React will ignore these lifecycles if gDSFP exists.\n if (typeof Component.getDerivedStateFromProps === 'function') {\n prototype.componentWillMount = componentWillMount;\n prototype.componentWillReceiveProps = componentWillReceiveProps;\n }\n\n // React <= 16.2 does not support getSnapshotBeforeUpdate.\n // As a workaround, use cWU to invoke the new lifecycle.\n // Newer versions of React will ignore that lifecycle if gSBU exists.\n if (typeof prototype.getSnapshotBeforeUpdate === 'function') {\n if (typeof prototype.componentDidUpdate !== 'function') {\n throw new Error(\n 'Cannot polyfill getSnapshotBeforeUpdate() for components that do not define componentDidUpdate() on the prototype'\n );\n }\n\n prototype.componentWillUpdate = componentWillUpdate;\n\n var componentDidUpdate = prototype.componentDidUpdate;\n\n prototype.componentDidUpdate = function componentDidUpdatePolyfill(\n prevProps,\n prevState,\n maybeSnapshot\n ) {\n // 16.3+ will not execute our will-update method;\n // It will pass a snapshot value to did-update though.\n // Older versions will require our polyfilled will-update value.\n // We need to handle both cases, but can't just check for the presence of \"maybeSnapshot\",\n // Because for <= 15.x versions this might be a \"prevContext\" object.\n // We also can't just check \"__reactInternalSnapshot\",\n // Because get-snapshot might return a falsy value.\n // So check for the explicit __reactInternalSnapshotFlag flag to determine behavior.\n var snapshot = this.__reactInternalSnapshotFlag\n ? this.__reactInternalSnapshot\n : maybeSnapshot;\n\n componentDidUpdate.call(this, prevProps, prevState, snapshot);\n };\n }\n\n return Component;\n}\n\nexport { polyfill };\n","import React, { createFactory, Component, createElement } from 'react';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport shallowEqual from 'fbjs/lib/shallowEqual';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport { polyfill } from 'react-lifecycles-compat';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\nimport { createChangeEmitter } from 'change-emitter';\nimport $$observable from 'symbol-observable';\n\nvar setStatic = function setStatic(key, value) {\n return function (BaseComponent) {\n /* eslint-disable no-param-reassign */\n BaseComponent[key] = value;\n /* eslint-enable no-param-reassign */\n\n return BaseComponent;\n };\n};\n\nvar setDisplayName = function setDisplayName(displayName) {\n return setStatic('displayName', displayName);\n};\n\nvar getDisplayName = function getDisplayName(Component$$1) {\n if (typeof Component$$1 === 'string') {\n return Component$$1;\n }\n\n if (!Component$$1) {\n return undefined;\n }\n\n return Component$$1.displayName || Component$$1.name || 'Component';\n};\n\nvar wrapDisplayName = function wrapDisplayName(BaseComponent, hocName) {\n return hocName + \"(\" + getDisplayName(BaseComponent) + \")\";\n};\n\nvar mapProps = function mapProps(propsMapper) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n\n var MapProps = function MapProps(props) {\n return factory(propsMapper(props));\n };\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'mapProps'))(MapProps);\n }\n\n return MapProps;\n };\n};\n\nvar withProps = function withProps(input) {\n var hoc = mapProps(function (props) {\n return _extends({}, props, typeof input === 'function' ? input(props) : input);\n });\n\n if (process.env.NODE_ENV !== 'production') {\n return function (BaseComponent) {\n return setDisplayName(wrapDisplayName(BaseComponent, 'withProps'))(hoc(BaseComponent));\n };\n }\n\n return hoc;\n};\n\nvar pick = function pick(obj, keys) {\n var result = {};\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (obj.hasOwnProperty(key)) {\n result[key] = obj[key];\n }\n }\n\n return result;\n};\n\nvar withPropsOnChange = function withPropsOnChange(shouldMapOrKeys, propsMapper) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n var shouldMap = typeof shouldMapOrKeys === 'function' ? shouldMapOrKeys : function (props, nextProps) {\n return !shallowEqual(pick(props, shouldMapOrKeys), pick(nextProps, shouldMapOrKeys));\n };\n\n var WithPropsOnChange =\n /*#__PURE__*/\n function (_Component) {\n _inheritsLoose(WithPropsOnChange, _Component);\n\n function WithPropsOnChange() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _Component.call.apply(_Component, [this].concat(args)) || this;\n _this.state = {\n computedProps: propsMapper(_this.props),\n prevProps: _this.props\n };\n return _this;\n }\n\n WithPropsOnChange.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n if (shouldMap(prevState.prevProps, nextProps)) {\n return {\n computedProps: propsMapper(nextProps),\n prevProps: nextProps\n };\n }\n\n return {\n prevProps: nextProps\n };\n };\n\n var _proto = WithPropsOnChange.prototype;\n\n _proto.render = function render() {\n return factory(_extends({}, this.props, this.state.computedProps));\n };\n\n return WithPropsOnChange;\n }(Component);\n\n polyfill(WithPropsOnChange);\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'withPropsOnChange'))(WithPropsOnChange);\n }\n\n return WithPropsOnChange;\n };\n};\n\nvar mapValues = function mapValues(obj, func) {\n var result = {};\n /* eslint-disable no-restricted-syntax */\n\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n result[key] = func(obj[key], key);\n }\n }\n /* eslint-enable no-restricted-syntax */\n\n\n return result;\n};\n\nvar withHandlers = function withHandlers(handlers) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n\n var WithHandlers =\n /*#__PURE__*/\n function (_Component) {\n _inheritsLoose(WithHandlers, _Component);\n\n function WithHandlers() {\n var _this;\n\n for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {\n _args[_key] = arguments[_key];\n }\n\n _this = _Component.call.apply(_Component, [this].concat(_args)) || this;\n _this.handlers = mapValues(typeof handlers === 'function' ? handlers(_this.props) : handlers, function (createHandler) {\n return function () {\n var handler = createHandler(_this.props);\n\n if (process.env.NODE_ENV !== 'production' && typeof handler !== 'function') {\n console.error( // eslint-disable-line no-console\n 'withHandlers(): Expected a map of higher-order functions. ' + 'Refer to the docs for more info.');\n }\n\n return handler.apply(void 0, arguments);\n };\n });\n return _this;\n }\n\n var _proto = WithHandlers.prototype;\n\n _proto.render = function render() {\n return factory(_extends({}, this.props, this.handlers));\n };\n\n return WithHandlers;\n }(Component);\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'withHandlers'))(WithHandlers);\n }\n\n return WithHandlers;\n };\n};\n\nvar defaultProps = function defaultProps(props) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n\n var DefaultProps = function DefaultProps(ownerProps) {\n return factory(ownerProps);\n };\n\n DefaultProps.defaultProps = props;\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'defaultProps'))(DefaultProps);\n }\n\n return DefaultProps;\n };\n};\n\nvar omit = function omit(obj, keys) {\n var rest = _extends({}, obj);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (rest.hasOwnProperty(key)) {\n delete rest[key];\n }\n }\n\n return rest;\n};\n\nvar renameProp = function renameProp(oldName, newName) {\n var hoc = mapProps(function (props) {\n var _extends2;\n\n return _extends({}, omit(props, [oldName]), (_extends2 = {}, _extends2[newName] = props[oldName], _extends2));\n });\n\n if (process.env.NODE_ENV !== 'production') {\n return function (BaseComponent) {\n return setDisplayName(wrapDisplayName(BaseComponent, 'renameProp'))(hoc(BaseComponent));\n };\n }\n\n return hoc;\n};\n\nvar keys = Object.keys;\n\nvar mapKeys = function mapKeys(obj, func) {\n return keys(obj).reduce(function (result, key) {\n var val = obj[key];\n /* eslint-disable no-param-reassign */\n\n result[func(val, key)] = val;\n /* eslint-enable no-param-reassign */\n\n return result;\n }, {});\n};\n\nvar renameProps = function renameProps(nameMap) {\n var hoc = mapProps(function (props) {\n return _extends({}, omit(props, keys(nameMap)), mapKeys(pick(props, keys(nameMap)), function (_, oldName) {\n return nameMap[oldName];\n }));\n });\n\n if (process.env.NODE_ENV !== 'production') {\n return function (BaseComponent) {\n return setDisplayName(wrapDisplayName(BaseComponent, 'renameProps'))(hoc(BaseComponent));\n };\n }\n\n return hoc;\n};\n\nvar flattenProp = function flattenProp(propName) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n\n var FlattenProp = function FlattenProp(props) {\n return factory(_extends({}, props, props[propName]));\n };\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'flattenProp'))(FlattenProp);\n }\n\n return FlattenProp;\n };\n};\n\nvar withState = function withState(stateName, stateUpdaterName, initialState) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n\n var WithState =\n /*#__PURE__*/\n function (_Component) {\n _inheritsLoose(WithState, _Component);\n\n function WithState() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _Component.call.apply(_Component, [this].concat(args)) || this;\n _this.state = {\n stateValue: typeof initialState === 'function' ? initialState(_this.props) : initialState\n };\n\n _this.updateStateValue = function (updateFn, callback) {\n return _this.setState(function (_ref) {\n var stateValue = _ref.stateValue;\n return {\n stateValue: typeof updateFn === 'function' ? updateFn(stateValue) : updateFn\n };\n }, callback);\n };\n\n return _this;\n }\n\n var _proto = WithState.prototype;\n\n _proto.render = function render() {\n var _extends2;\n\n return factory(_extends({}, this.props, (_extends2 = {}, _extends2[stateName] = this.state.stateValue, _extends2[stateUpdaterName] = this.updateStateValue, _extends2)));\n };\n\n return WithState;\n }(Component);\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'withState'))(WithState);\n }\n\n return WithState;\n };\n};\n\nvar withStateHandlers = function withStateHandlers(initialState, stateUpdaters) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n\n var WithStateHandlers =\n /*#__PURE__*/\n function (_Component) {\n _inheritsLoose(WithStateHandlers, _Component);\n\n function WithStateHandlers() {\n var _this;\n\n for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {\n _args[_key] = arguments[_key];\n }\n\n _this = _Component.call.apply(_Component, [this].concat(_args)) || this;\n _this.state = typeof initialState === 'function' ? initialState(_this.props) : initialState;\n _this.stateUpdaters = mapValues(stateUpdaters, function (handler) {\n return function (mayBeEvent) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n // Having that functional form of setState can be called async\n // we need to persist SyntheticEvent\n if (mayBeEvent && typeof mayBeEvent.persist === 'function') {\n mayBeEvent.persist();\n }\n\n _this.setState(function (state, props) {\n return handler(state, props).apply(void 0, [mayBeEvent].concat(args));\n });\n };\n });\n return _this;\n }\n\n var _proto = WithStateHandlers.prototype;\n\n _proto.render = function render() {\n return factory(_extends({}, this.props, this.state, this.stateUpdaters));\n };\n\n return WithStateHandlers;\n }(Component);\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'withStateHandlers'))(WithStateHandlers);\n }\n\n return WithStateHandlers;\n };\n};\n\nvar noop = function noop() {};\n\nvar withReducer = function withReducer(stateName, dispatchName, reducer, initialState) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n\n var WithReducer =\n /*#__PURE__*/\n function (_Component) {\n _inheritsLoose(WithReducer, _Component);\n\n function WithReducer() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _Component.call.apply(_Component, [this].concat(args)) || this;\n _this.state = {\n stateValue: _this.initializeStateValue()\n };\n\n _this.dispatch = function (action, callback) {\n if (callback === void 0) {\n callback = noop;\n }\n\n return _this.setState(function (_ref) {\n var stateValue = _ref.stateValue;\n return {\n stateValue: reducer(stateValue, action)\n };\n }, function () {\n return callback(_this.state.stateValue);\n });\n };\n\n return _this;\n }\n\n var _proto = WithReducer.prototype;\n\n _proto.initializeStateValue = function initializeStateValue() {\n if (initialState !== undefined) {\n return typeof initialState === 'function' ? initialState(this.props) : initialState;\n }\n\n return reducer(undefined, {\n type: '@@recompose/INIT'\n });\n };\n\n _proto.render = function render() {\n var _extends2;\n\n return factory(_extends({}, this.props, (_extends2 = {}, _extends2[stateName] = this.state.stateValue, _extends2[dispatchName] = this.dispatch, _extends2)));\n };\n\n return WithReducer;\n }(Component);\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'withReducer'))(WithReducer);\n }\n\n return WithReducer;\n };\n};\n\nvar identity = function identity(Component$$1) {\n return Component$$1;\n};\n\nvar branch = function branch(test, left, right) {\n if (right === void 0) {\n right = identity;\n }\n\n return function (BaseComponent) {\n var leftFactory;\n var rightFactory;\n\n var Branch = function Branch(props) {\n if (test(props)) {\n leftFactory = leftFactory || createFactory(left(BaseComponent));\n return leftFactory(props);\n }\n\n rightFactory = rightFactory || createFactory(right(BaseComponent));\n return rightFactory(props);\n };\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'branch'))(Branch);\n }\n\n return Branch;\n };\n};\n\nvar renderComponent = function renderComponent(Component$$1) {\n return function (_) {\n var factory = createFactory(Component$$1);\n\n var RenderComponent = function RenderComponent(props) {\n return factory(props);\n };\n\n if (process.env.NODE_ENV !== 'production') {\n RenderComponent.displayName = wrapDisplayName(Component$$1, 'renderComponent');\n }\n\n return RenderComponent;\n };\n};\n\nvar Nothing =\n/*#__PURE__*/\nfunction (_Component) {\n _inheritsLoose(Nothing, _Component);\n\n function Nothing() {\n return _Component.apply(this, arguments) || this;\n }\n\n var _proto = Nothing.prototype;\n\n _proto.render = function render() {\n return null;\n };\n\n return Nothing;\n}(Component);\n\nvar renderNothing = function renderNothing(_) {\n return Nothing;\n};\n\nvar shouldUpdate = function shouldUpdate(test) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n\n var ShouldUpdate =\n /*#__PURE__*/\n function (_Component) {\n _inheritsLoose(ShouldUpdate, _Component);\n\n function ShouldUpdate() {\n return _Component.apply(this, arguments) || this;\n }\n\n var _proto = ShouldUpdate.prototype;\n\n _proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n return test(this.props, nextProps);\n };\n\n _proto.render = function render() {\n return factory(this.props);\n };\n\n return ShouldUpdate;\n }(Component);\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'shouldUpdate'))(ShouldUpdate);\n }\n\n return ShouldUpdate;\n };\n};\n\nvar pure = function pure(BaseComponent) {\n var hoc = shouldUpdate(function (props, nextProps) {\n return !shallowEqual(props, nextProps);\n });\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'pure'))(hoc(BaseComponent));\n }\n\n return hoc(BaseComponent);\n};\n\nvar onlyUpdateForKeys = function onlyUpdateForKeys(propKeys) {\n var hoc = shouldUpdate(function (props, nextProps) {\n return !shallowEqual(pick(nextProps, propKeys), pick(props, propKeys));\n });\n\n if (process.env.NODE_ENV !== 'production') {\n return function (BaseComponent) {\n return setDisplayName(wrapDisplayName(BaseComponent, 'onlyUpdateForKeys'))(hoc(BaseComponent));\n };\n }\n\n return hoc;\n};\n\nvar onlyUpdateForPropTypes = function onlyUpdateForPropTypes(BaseComponent) {\n var propTypes = BaseComponent.propTypes;\n\n if (process.env.NODE_ENV !== 'production') {\n if (!propTypes) {\n /* eslint-disable */\n console.error('A component without any `propTypes` was passed to ' + '`onlyUpdateForPropTypes()`. Check the implementation of the ' + (\"component with display name \\\"\" + getDisplayName(BaseComponent) + \"\\\".\"));\n /* eslint-enable */\n }\n }\n\n var propKeys = Object.keys(propTypes || {});\n var OnlyUpdateForPropTypes = onlyUpdateForKeys(propKeys)(BaseComponent);\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'onlyUpdateForPropTypes'))(OnlyUpdateForPropTypes);\n }\n\n return OnlyUpdateForPropTypes;\n};\n\nvar withContext = function withContext(childContextTypes, getChildContext) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n\n var WithContext =\n /*#__PURE__*/\n function (_Component) {\n _inheritsLoose(WithContext, _Component);\n\n function WithContext() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _Component.call.apply(_Component, [this].concat(args)) || this;\n\n _this.getChildContext = function () {\n return getChildContext(_this.props);\n };\n\n return _this;\n }\n\n var _proto = WithContext.prototype;\n\n _proto.render = function render() {\n return factory(this.props);\n };\n\n return WithContext;\n }(Component);\n\n WithContext.childContextTypes = childContextTypes;\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'withContext'))(WithContext);\n }\n\n return WithContext;\n };\n};\n\nvar getContext = function getContext(contextTypes) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n\n var GetContext = function GetContext(ownerProps, context) {\n return factory(_extends({}, ownerProps, context));\n };\n\n GetContext.contextTypes = contextTypes;\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'getContext'))(GetContext);\n }\n\n return GetContext;\n };\n};\n\nvar lifecycle = function lifecycle(spec) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n\n if (process.env.NODE_ENV !== 'production' && spec.hasOwnProperty('render')) {\n console.error('lifecycle() does not support the render method; its behavior is to ' + 'pass all props and state to the base component.');\n }\n\n var Lifecycle =\n /*#__PURE__*/\n function (_Component) {\n _inheritsLoose(Lifecycle, _Component);\n\n function Lifecycle() {\n return _Component.apply(this, arguments) || this;\n }\n\n var _proto = Lifecycle.prototype;\n\n _proto.render = function render() {\n return factory(_extends({}, this.props, this.state));\n };\n\n return Lifecycle;\n }(Component);\n\n Object.keys(spec).forEach(function (hook) {\n return Lifecycle.prototype[hook] = spec[hook];\n });\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'lifecycle'))(Lifecycle);\n }\n\n return Lifecycle;\n };\n};\n\nvar isClassComponent = function isClassComponent(Component$$1) {\n return Boolean(Component$$1 && Component$$1.prototype && typeof Component$$1.prototype.render === 'function');\n};\n\nvar toClass = function toClass(baseComponent) {\n var _class, _temp;\n\n return isClassComponent(baseComponent) ? baseComponent : (_temp = _class =\n /*#__PURE__*/\n function (_Component) {\n _inheritsLoose(ToClass, _Component);\n\n function ToClass() {\n return _Component.apply(this, arguments) || this;\n }\n\n var _proto = ToClass.prototype;\n\n _proto.render = function render() {\n if (typeof baseComponent === 'string') {\n return React.createElement(baseComponent, this.props);\n }\n\n return baseComponent(this.props, this.context);\n };\n\n return ToClass;\n }(Component), _class.displayName = getDisplayName(baseComponent), _class.propTypes = baseComponent.propTypes, _class.contextTypes = baseComponent.contextTypes, _class.defaultProps = baseComponent.defaultProps, _temp);\n};\n\nfunction toRenderProps(hoc) {\n var RenderPropsComponent = function RenderPropsComponent(props) {\n return props.children(props);\n };\n\n return hoc(RenderPropsComponent);\n}\n\nvar fromRenderProps = function fromRenderProps(RenderPropsComponent, propsMapper, renderPropName) {\n if (renderPropName === void 0) {\n renderPropName = 'children';\n }\n\n return function (BaseComponent) {\n var baseFactory = React.createFactory(BaseComponent);\n var renderPropsFactory = React.createFactory(RenderPropsComponent);\n\n var FromRenderProps = function FromRenderProps(ownerProps) {\n var _renderPropsFactory;\n\n return renderPropsFactory((_renderPropsFactory = {}, _renderPropsFactory[renderPropName] = function () {\n return baseFactory(_extends({}, ownerProps, propsMapper.apply(void 0, arguments)));\n }, _renderPropsFactory));\n };\n\n if (process.env.NODE_ENV !== 'production') {\n return setDisplayName(wrapDisplayName(BaseComponent, 'fromRenderProps'))(FromRenderProps);\n }\n\n return FromRenderProps;\n };\n};\n\nvar setPropTypes = function setPropTypes(propTypes) {\n return setStatic('propTypes', propTypes);\n};\n\nvar compose = function compose() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return funcs.reduce(function (a, b) {\n return function () {\n return a(b.apply(void 0, arguments));\n };\n }, function (arg) {\n return arg;\n });\n};\n\nvar createSink = function createSink(callback) {\n var Sink =\n /*#__PURE__*/\n function (_Component) {\n _inheritsLoose(Sink, _Component);\n\n function Sink() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _Component.call.apply(_Component, [this].concat(args)) || this;\n _this.state = {};\n return _this;\n }\n\n Sink.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps) {\n callback(nextProps);\n return null;\n };\n\n var _proto = Sink.prototype;\n\n _proto.render = function render() {\n return null;\n };\n\n return Sink;\n }(Component);\n\n polyfill(Sink);\n return Sink;\n};\n\nvar componentFromProp = function componentFromProp(propName) {\n var Component$$1 = function Component$$1(props) {\n return createElement(props[propName], omit(props, [propName]));\n };\n\n Component$$1.displayName = \"componentFromProp(\" + propName + \")\";\n return Component$$1;\n};\n\nvar nest = function nest() {\n for (var _len = arguments.length, Components = new Array(_len), _key = 0; _key < _len; _key++) {\n Components[_key] = arguments[_key];\n }\n\n var factories = Components.map(createFactory);\n\n var Nest = function Nest(_ref) {\n var children = _ref.children,\n props = _objectWithoutPropertiesLoose(_ref, [\"children\"]);\n\n return factories.reduceRight(function (child, factory) {\n return factory(props, child);\n }, children);\n };\n\n if (process.env.NODE_ENV !== 'production') {\n var displayNames = Components.map(getDisplayName);\n Nest.displayName = \"nest(\" + displayNames.join(', ') + \")\";\n }\n\n return Nest;\n};\n\nvar hoistStatics = function hoistStatics(higherOrderComponent, blacklist) {\n return function (BaseComponent) {\n var NewComponent = higherOrderComponent(BaseComponent);\n hoistNonReactStatics(NewComponent, BaseComponent, blacklist);\n return NewComponent;\n };\n};\n\nvar _config = {\n fromESObservable: null,\n toESObservable: null\n};\n\nvar configureObservable = function configureObservable(c) {\n _config = c;\n};\n\nvar config = {\n fromESObservable: function fromESObservable(observable) {\n return typeof _config.fromESObservable === 'function' ? _config.fromESObservable(observable) : observable;\n },\n toESObservable: function toESObservable(stream) {\n return typeof _config.toESObservable === 'function' ? _config.toESObservable(stream) : stream;\n }\n};\n\nvar componentFromStreamWithConfig = function componentFromStreamWithConfig(config$$1) {\n return function (propsToVdom) {\n return (\n /*#__PURE__*/\n function (_Component) {\n _inheritsLoose(ComponentFromStream, _Component);\n\n function ComponentFromStream() {\n var _config$fromESObserva;\n\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _Component.call.apply(_Component, [this].concat(args)) || this;\n _this.state = {\n vdom: null\n };\n _this.propsEmitter = createChangeEmitter();\n _this.props$ = config$$1.fromESObservable((_config$fromESObserva = {\n subscribe: function subscribe(observer) {\n var unsubscribe = _this.propsEmitter.listen(function (props) {\n if (props) {\n observer.next(props);\n } else {\n observer.complete();\n }\n });\n\n return {\n unsubscribe: unsubscribe\n };\n }\n }, _config$fromESObserva[$$observable] = function () {\n return this;\n }, _config$fromESObserva));\n _this.vdom$ = config$$1.toESObservable(propsToVdom(_this.props$));\n return _this;\n }\n\n var _proto = ComponentFromStream.prototype;\n\n _proto.componentWillMount = function componentWillMount() {\n var _this2 = this;\n\n // Subscribe to child prop changes so we know when to re-render\n this.subscription = this.vdom$.subscribe({\n next: function next(vdom) {\n _this2.setState({\n vdom: vdom\n });\n }\n });\n this.propsEmitter.emit(this.props);\n };\n\n _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n // Receive new props from the owner\n this.propsEmitter.emit(nextProps);\n };\n\n _proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps, nextState) {\n return nextState.vdom !== this.state.vdom;\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n // Call without arguments to complete stream\n this.propsEmitter.emit(); // Clean-up subscription before un-mounting\n\n this.subscription.unsubscribe();\n };\n\n _proto.render = function render() {\n return this.state.vdom;\n };\n\n return ComponentFromStream;\n }(Component)\n );\n };\n};\n\nvar componentFromStream = function componentFromStream(propsToVdom) {\n return componentFromStreamWithConfig(config)(propsToVdom);\n};\n\nvar identity$1 = function identity(t) {\n return t;\n};\n\nvar mapPropsStreamWithConfig = function mapPropsStreamWithConfig(config$$1) {\n var componentFromStream$$1 = componentFromStreamWithConfig({\n fromESObservable: identity$1,\n toESObservable: identity$1\n });\n return function (transform) {\n return function (BaseComponent) {\n var factory = createFactory(BaseComponent);\n var fromESObservable = config$$1.fromESObservable,\n toESObservable = config$$1.toESObservable;\n return componentFromStream$$1(function (props$) {\n var _ref;\n\n return _ref = {\n subscribe: function subscribe(observer) {\n var subscription = toESObservable(transform(fromESObservable(props$))).subscribe({\n next: function next(childProps) {\n return observer.next(factory(childProps));\n }\n });\n return {\n unsubscribe: function unsubscribe() {\n return subscription.unsubscribe();\n }\n };\n }\n }, _ref[$$observable] = function () {\n return this;\n }, _ref;\n });\n };\n };\n};\n\nvar mapPropsStream = function mapPropsStream(transform) {\n var hoc = mapPropsStreamWithConfig(config)(transform);\n\n if (process.env.NODE_ENV !== 'production') {\n return function (BaseComponent) {\n return setDisplayName(wrapDisplayName(BaseComponent, 'mapPropsStream'))(hoc(BaseComponent));\n };\n }\n\n return hoc;\n};\n\nvar createEventHandlerWithConfig = function createEventHandlerWithConfig(config$$1) {\n return function () {\n var _config$fromESObserva;\n\n var emitter = createChangeEmitter();\n var stream = config$$1.fromESObservable((_config$fromESObserva = {\n subscribe: function subscribe(observer) {\n var unsubscribe = emitter.listen(function (value) {\n return observer.next(value);\n });\n return {\n unsubscribe: unsubscribe\n };\n }\n }, _config$fromESObserva[$$observable] = function () {\n return this;\n }, _config$fromESObserva));\n return {\n handler: emitter.emit,\n stream: stream\n };\n };\n};\nvar createEventHandler = createEventHandlerWithConfig(config);\n\n// Higher-order component helpers\n\nexport { mapProps, withProps, withPropsOnChange, withHandlers, defaultProps, renameProp, renameProps, flattenProp, withState, withStateHandlers, withReducer, branch, renderComponent, renderNothing, shouldUpdate, pure, onlyUpdateForKeys, onlyUpdateForPropTypes, withContext, getContext, lifecycle, toClass, toRenderProps, fromRenderProps, setStatic, setPropTypes, setDisplayName, compose, getDisplayName, wrapDisplayName, shallowEqual, isClassComponent, createSink, componentFromProp, nest, hoistStatics, componentFromStream, componentFromStreamWithConfig, mapPropsStream, mapPropsStreamWithConfig, createEventHandler, createEventHandlerWithConfig, configureObservable as setObservableConfig };\n","import Sniffr from 'sniffr';\n\nconst sniffr = new Sniffr();\nsniffr.sniff();\n\nexport default sniffr;\n","export default function memoize(fn) {\n const primitiveCache = new Map();\n const objectCache = new WeakMap();\n return function memoized(arg = '__singleValue__') {\n const cache = arg instanceof Object ? objectCache : primitiveCache;\n if (cache.has(arg)) {\n return cache.get(arg);\n }\n\n const value = fn(arg);\n cache.set(arg, value);\n return value;\n };\n}\n","// Inspired by https://github.com/sairion/svg-inline-react\nimport React from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport {pure} from 'recompose';\n\nimport sniffer from '../global/sniffer';\nimport memoize from '../global/memoize';\n\nimport styles from './icon.css';\n\nconst isIE = sniffer.browser.name === 'ie';\n\nfunction convertReactSVGDOMProperty(str) {\n return str.replace(/[-|:]([a-z])/g, g => g[1].toUpperCase());\n}\n\nfunction serializeAttrs(map) {\n const res = {};\n for (let i = 0; i < map.length; i++) {\n const key = map[i].name;\n let prop = key;\n if (key === 'class') {\n prop = 'className';\n } else if (!key.startsWith('data-')) {\n prop = convertReactSVGDOMProperty(key);\n }\n\n res[prop] = map[i].value;\n }\n return res;\n}\n\nfunction getSVGInnerHTML(svgNode) {\n if (!isIE) {\n return svgNode.innerHTML;\n }\n // IE11 doesn't support svg.innerHTML https://stackoverflow.com/questions/28129956/get-innerhtml-of-svg-tag-result-in-undefined-in-ie\n const serializer = new XMLSerializer();\n\n return Array.from(svgNode.childNodes).\n map(child => serializer.serializeToString(child)).\n join('');\n}\n\nfunction extractSVGProps(svgNode) {\n const map = svgNode.attributes;\n return (map.length > 0) ? serializeAttrs(map) : null;\n}\n\nconst getSVGFromSource = memoize(src => {\n const svgContainer = document.createElement('div');\n svgContainer.innerHTML = src;\n const svg = svgContainer.firstElementChild;\n svg.remove ? svg.remove() : svgContainer.removeChild(svg);\n return {\n props: extractSVGProps(svg),\n html: getSVGInnerHTML(svg)\n };\n});\n\nfunction isCompatibilityMode(iconSrc) {\n const hasWidth = /width=\"[\\d\\.]+\"/ig.test(iconSrc);\n const hasHeight = /height=\"[\\d\\.]+\"/ig.test(iconSrc);\n return !hasWidth || !hasHeight;\n}\n\nfunction IconSVG({src, className, ...rest}) {\n const glyphClasses = classNames(styles.glyph, {\n [styles.compatibilityMode]: isCompatibilityMode(src)\n }, className);\n\n const {props, html} = getSVGFromSource(src);\n\n return (\n \n );\n}\n\nIconSVG.propTypes = {\n className: PropTypes.string,\n src: PropTypes.string.isRequired,\n style: PropTypes.object\n};\n\nexport default pure(IconSVG);\n","/**\n * @name Icon\n */\n\nimport React, {PureComponent} from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport deprecate from 'util-deprecate';\n\nimport {Color, Size} from './icon__constants';\nimport styles from './icon.css';\nimport IconSVG from './icon__svg';\n\nconst warnSize = deprecate(\n () => {},\n `\\`size\\`, \\`width\\` and \\`height\\` props are not recommended to use in Ring UI \\`Icon\\` component. The intrinsic sizes of SVG icon (\\`width\\` and \\`height\\` SVG attributes) are used instead.\n\nWe strongly recommend to use icons handcrafted for particular sizes. If your icon doesn't exist in the desired size, please ask your designer to draw one. \"Responsive\" checkmark should be unchecked when exporting icon.'`\n);\n\nexport default class Icon extends PureComponent {\n static propTypes = {\n className: PropTypes.string,\n color: PropTypes.string,\n glyph: PropTypes.oneOfType([PropTypes.string, PropTypes.elementType]),\n height: PropTypes.number,\n size: PropTypes.number,\n width: PropTypes.number,\n loading: PropTypes.bool,\n suppressSizeWarning: PropTypes.bool\n };\n\n static defaultProps = ({\n className: '',\n color: Color.DEFAULT,\n glyph: ''\n });\n\n static Color = Color;\n static Size = Size;\n\n warnSize() {\n if (this.props.suppressSizeWarning) {\n return;\n }\n warnSize();\n }\n\n getStyle() {\n const {size, width, height} = this.props;\n if (width || height) {\n this.warnSize();\n return {width, height};\n }\n if (size) {\n this.warnSize();\n return {\n width: size,\n height: size\n };\n }\n return null;\n }\n\n getIconSource() {\n const {glyph} = this.props;\n return glyph?.isRingIcon ? glyph.glyph : glyph;\n }\n\n render() {\n const {\n className, size, color, loading, glyph, width, height, suppressSizeWarning,\n ...restProps\n } = this.props;\n\n const IconSrc = this.getIconSource();\n if (!IconSrc) {\n // eslint-disable-next-line no-console\n console.warn('No icon source passed to Icon component', this.props);\n return null;\n }\n\n const classes = classNames(styles.icon,\n {\n [styles[color]]: !!color,\n [styles.loading]: loading\n },\n className\n );\n\n return (\n \n {typeof IconSrc === 'string'\n ? \n : \n }\n \n );\n }\n}\n\nexport {Size};\n\nexport function iconHOC(glyph, displayName) {\n // eslint-disable-next-line react/no-multi-comp\n return class BoundIcon extends PureComponent {\n // Compatibility with angular\n static toString() {\n return glyph;\n }\n\n static displayName = displayName;\n\n static propTypes = {\n iconRef: PropTypes.func\n };\n\n static Color = Color;\n static Size = Size;\n static isRingIcon = true;\n static glyph = glyph;\n\n render() {\n const {iconRef, ...restProps} = this.props;\n return ;\n }\n };\n}\n","/* eslint-disable max-len */\n/* This is a generated file. If you want to change it, edit generate-exports instead. */\n\nimport activity from '@jetbrains/icons/activity.svg';\nimport add10px from '@jetbrains/icons/add-10px.svg';\nimport add20px from '@jetbrains/icons/add-20px.svg';\nimport add from '@jetbrains/icons/add.svg';\nimport analytics from '@jetbrains/icons/analytics.svg';\nimport archive from '@jetbrains/icons/archive.svg';\nimport artifacts from '@jetbrains/icons/artifacts.svg';\nimport asterisk10px from '@jetbrains/icons/asterisk-10px.svg';\nimport asterisk from '@jetbrains/icons/asterisk.svg';\nimport attachment from '@jetbrains/icons/attachment.svg';\nimport average from '@jetbrains/icons/average.svg';\nimport bars from '@jetbrains/icons/bars.svg';\nimport bell from '@jetbrains/icons/bell.svg';\nimport branches from '@jetbrains/icons/branches.svg';\nimport bug from '@jetbrains/icons/bug.svg';\nimport buildType14pxArrow from '@jetbrains/icons/buildType-14px-arrow.svg';\nimport buildType14pxFillArrow from '@jetbrains/icons/buildType-14px-fill-arrow.svg';\nimport buildType14pxFill from '@jetbrains/icons/buildType-14px-fill.svg';\nimport buildType14px from '@jetbrains/icons/buildType-14px.svg';\nimport buildType20pxArrow from '@jetbrains/icons/buildType-20px-arrow.svg';\nimport buildType20pxFillArrow from '@jetbrains/icons/buildType-20px-fill-arrow.svg';\nimport buildType20pxFill from '@jetbrains/icons/buildType-20px-fill.svg';\nimport buildType20px from '@jetbrains/icons/buildType-20px.svg';\nimport buildTypeComposite14pxArrow from '@jetbrains/icons/buildType-composite-14px-arrow.svg';\nimport buildTypeComposite14pxFillArrow from '@jetbrains/icons/buildType-composite-14px-fill-arrow.svg';\nimport buildTypeComposite14pxFill from '@jetbrains/icons/buildType-composite-14px-fill.svg';\nimport buildTypeComposite14px from '@jetbrains/icons/buildType-composite-14px.svg';\nimport buildTypeComposite20pxArrow from '@jetbrains/icons/buildType-composite-20px-arrow.svg';\nimport buildTypeComposite20pxFillArrow from '@jetbrains/icons/buildType-composite-20px-fill-arrow.svg';\nimport buildTypeComposite20pxFill from '@jetbrains/icons/buildType-composite-20px-fill.svg';\nimport buildTypeComposite20px from '@jetbrains/icons/buildType-composite-20px.svg';\nimport burndown from '@jetbrains/icons/burndown.svg';\nimport calendar from '@jetbrains/icons/calendar.svg';\nimport cancel20px from '@jetbrains/icons/cancel-20px.svg';\nimport cancel from '@jetbrains/icons/cancel.svg';\nimport caretDown10px from '@jetbrains/icons/caret-down-10px.svg';\nimport caretRight10px from '@jetbrains/icons/caret-right-10px.svg';\nimport change from '@jetbrains/icons/change.svg';\nimport checkmark from '@jetbrains/icons/checkmark.svg';\nimport chevron10px from '@jetbrains/icons/chevron-10px.svg';\nimport chevronDown from '@jetbrains/icons/chevron-down.svg';\nimport chevronLeft from '@jetbrains/icons/chevron-left.svg';\nimport chevronRight from '@jetbrains/icons/chevron-right.svg';\nimport chevronUp from '@jetbrains/icons/chevron-up.svg';\nimport close from '@jetbrains/icons/close.svg';\nimport cloud from '@jetbrains/icons/cloud.svg';\nimport code from '@jetbrains/icons/code.svg';\nimport collapse from '@jetbrains/icons/collapse.svg';\nimport comment from '@jetbrains/icons/comment.svg';\nimport compare from '@jetbrains/icons/compare.svg';\nimport copy from '@jetbrains/icons/copy.svg';\nimport crop from '@jetbrains/icons/crop.svg';\nimport data from '@jetbrains/icons/data.svg';\nimport dice from '@jetbrains/icons/dice.svg';\nimport disconnected from '@jetbrains/icons/disconnected.svg';\nimport distribution from '@jetbrains/icons/distribution.svg';\nimport doubleChevronLeft from '@jetbrains/icons/double-chevron-left.svg';\nimport doubleChevronRight from '@jetbrains/icons/double-chevron-right.svg';\nimport download from '@jetbrains/icons/download.svg';\nimport drag from '@jetbrains/icons/drag.svg';\nimport drop from '@jetbrains/icons/drop.svg';\nimport eMail from '@jetbrains/icons/e-mail.svg';\nimport earth from '@jetbrains/icons/earth.svg';\nimport emoji from '@jetbrains/icons/emoji.svg';\nimport entry from '@jetbrains/icons/entry.svg';\nimport exception20px from '@jetbrains/icons/exception-20px.svg';\nimport exception from '@jetbrains/icons/exception.svg';\nimport expand from '@jetbrains/icons/expand.svg';\nimport experiment20px from '@jetbrains/icons/experiment-20px.svg';\nimport eye from '@jetbrains/icons/eye.svg';\nimport fields from '@jetbrains/icons/fields.svg';\nimport fileAddAny from '@jetbrains/icons/file-add-any.svg';\nimport fileArchive from '@jetbrains/icons/file-archive.svg';\nimport fileAs from '@jetbrains/icons/file-as.svg';\nimport fileAspectj from '@jetbrains/icons/file-aspectj.svg';\nimport fileConfig from '@jetbrains/icons/file-config.svg';\nimport fileCss from '@jetbrains/icons/file-css.svg';\nimport fileCustom from '@jetbrains/icons/file-custom.svg';\nimport fileDiagram from '@jetbrains/icons/file-diagram.svg';\nimport fileDtd from '@jetbrains/icons/file-dtd.svg';\nimport fileHtaccess from '@jetbrains/icons/file-htaccess.svg';\nimport fileHtml from '@jetbrains/icons/file-html.svg';\nimport fileIdl from '@jetbrains/icons/file-idl.svg';\nimport fileJavaClass from '@jetbrains/icons/file-java-class.svg';\nimport fileJavaOutsideSource from '@jetbrains/icons/file-java-outside-source.svg';\nimport fileJava from '@jetbrains/icons/file-java.svg';\nimport fileJs from '@jetbrains/icons/file-js.svg';\nimport fileJsonDark from '@jetbrains/icons/file-json-dark.svg';\nimport fileJsonSchemaDark from '@jetbrains/icons/file-json-schema-dark.svg';\nimport fileJsonSchema from '@jetbrains/icons/file-json-schema.svg';\nimport fileJson from '@jetbrains/icons/file-json.svg';\nimport fileJsp from '@jetbrains/icons/file-jsp.svg';\nimport fileJspx from '@jetbrains/icons/file-jspx.svg';\nimport fileManifest from '@jetbrains/icons/file-manifest.svg';\nimport fileProperties from '@jetbrains/icons/file-properties.svg';\nimport fileRegexp from '@jetbrains/icons/file-regexp.svg';\nimport fileText from '@jetbrains/icons/file-text.svg';\nimport fileUiForm from '@jetbrains/icons/file-ui-form.svg';\nimport fileUnknown from '@jetbrains/icons/file-unknown.svg';\nimport fileWsdl from '@jetbrains/icons/file-wsdl.svg';\nimport fileXhtml from '@jetbrains/icons/file-xhtml.svg';\nimport fileXml from '@jetbrains/icons/file-xml.svg';\nimport fileXsd from '@jetbrains/icons/file-xsd.svg';\nimport fileYaml from '@jetbrains/icons/file-yaml.svg';\nimport file from '@jetbrains/icons/file.svg';\nimport filters from '@jetbrains/icons/filters.svg';\nimport flag from '@jetbrains/icons/flag.svg';\nimport folder from '@jetbrains/icons/folder.svg';\nimport frown from '@jetbrains/icons/frown.svg';\nimport gift20px from '@jetbrains/icons/gift-20px.svg';\nimport gift from '@jetbrains/icons/gift.svg';\nimport git from '@jetbrains/icons/git.svg';\nimport group from '@jetbrains/icons/group.svg';\nimport help20px from '@jetbrains/icons/help-20px.svg';\nimport help from '@jetbrains/icons/help.svg';\nimport history from '@jetbrains/icons/history.svg';\nimport hourglass20px from '@jetbrains/icons/hourglass-20px.svg';\nimport hourglass from '@jetbrains/icons/hourglass.svg';\nimport ignored from '@jetbrains/icons/ignored.svg';\nimport info from '@jetbrains/icons/info.svg';\nimport investigation14px from '@jetbrains/icons/investigation-14px.svg';\nimport investigation from '@jetbrains/icons/investigation.svg';\nimport lamp from '@jetbrains/icons/lamp.svg';\nimport link from '@jetbrains/icons/link.svg';\nimport lock from '@jetbrains/icons/lock.svg';\nimport magicWand from '@jetbrains/icons/magic-wand.svg';\nimport mammoth20px from '@jetbrains/icons/mammoth-20px.svg';\nimport marker from '@jetbrains/icons/marker.svg';\nimport meta from '@jetbrains/icons/meta.svg';\nimport modified10px from '@jetbrains/icons/modified-10px.svg';\nimport moreOptions from '@jetbrains/icons/more-options.svg';\nimport moveToTop from '@jetbrains/icons/move-to-top.svg';\nimport move from '@jetbrains/icons/move.svg';\nimport mute from '@jetbrains/icons/mute.svg';\nimport muted from '@jetbrains/icons/muted.svg';\nimport newWindow from '@jetbrains/icons/new-window.svg';\nimport noArtifacts from '@jetbrains/icons/no-artifacts.svg';\nimport ok20px from '@jetbrains/icons/ok-20px.svg';\nimport ok from '@jetbrains/icons/ok.svg';\nimport overtime from '@jetbrains/icons/overtime.svg';\nimport paused14px from '@jetbrains/icons/paused-14px.svg';\nimport paused from '@jetbrains/icons/paused.svg';\nimport pencil from '@jetbrains/icons/pencil.svg';\nimport pennant from '@jetbrains/icons/pennant.svg';\nimport permission from '@jetbrains/icons/permission.svg';\nimport pinEmpty from '@jetbrains/icons/pin-empty.svg';\nimport pinFilled from '@jetbrains/icons/pin-filled.svg';\nimport play from '@jetbrains/icons/play.svg';\nimport prClose from '@jetbrains/icons/pr-close.svg';\nimport prMerged from '@jetbrains/icons/pr-merged.svg';\nimport prOpen from '@jetbrains/icons/pr-open.svg';\nimport prUnknown from '@jetbrains/icons/pr-unknown.svg';\nimport printer from '@jetbrains/icons/printer.svg';\nimport project14pxArrow from '@jetbrains/icons/project-14px-arrow.svg';\nimport project14pxFillArrow from '@jetbrains/icons/project-14px-fill-arrow.svg';\nimport project14pxFill from '@jetbrains/icons/project-14px-fill.svg';\nimport project14px from '@jetbrains/icons/project-14px.svg';\nimport project20pxArrow from '@jetbrains/icons/project-20px-arrow.svg';\nimport project20pxFillArrow from '@jetbrains/icons/project-20px-fill-arrow.svg';\nimport project20pxFill from '@jetbrains/icons/project-20px-fill.svg';\nimport project20px from '@jetbrains/icons/project-20px.svg';\nimport puzzle from '@jetbrains/icons/puzzle.svg';\nimport rate from '@jetbrains/icons/rate.svg';\nimport redo from '@jetbrains/icons/redo.svg';\nimport remove10px from '@jetbrains/icons/remove-10px.svg';\nimport renamed10px from '@jetbrains/icons/renamed-10px.svg';\nimport reviewersGraph from '@jetbrains/icons/reviewers-graph.svg';\nimport search20px from '@jetbrains/icons/search-20px.svg';\nimport searchEmpty from '@jetbrains/icons/search-empty.svg';\nimport searchError from '@jetbrains/icons/search-error.svg';\nimport search from '@jetbrains/icons/search.svg';\nimport services20px from '@jetbrains/icons/services-20px.svg';\nimport services from '@jetbrains/icons/services.svg';\nimport settings20px from '@jetbrains/icons/settings-20px.svg';\nimport settings from '@jetbrains/icons/settings.svg';\nimport shield from '@jetbrains/icons/shield.svg';\nimport spinner20px from '@jetbrains/icons/spinner-20px.svg';\nimport spinnerStatic from '@jetbrains/icons/spinner-static.svg';\nimport spinner from '@jetbrains/icons/spinner.svg';\nimport stamp from '@jetbrains/icons/stamp.svg';\nimport starEmpty14px from '@jetbrains/icons/star-empty-14px.svg';\nimport starEmpty from '@jetbrains/icons/star-empty.svg';\nimport starFilled14px from '@jetbrains/icons/star-filled-14px.svg';\nimport starFilled from '@jetbrains/icons/star-filled.svg';\nimport stop from '@jetbrains/icons/stop.svg';\nimport table from '@jetbrains/icons/table.svg';\nimport tag from '@jetbrains/icons/tag.svg';\nimport task from '@jetbrains/icons/task.svg';\nimport template14pxArrow from '@jetbrains/icons/template-14px-arrow.svg';\nimport template14px from '@jetbrains/icons/template-14px.svg';\nimport template20pxArrow from '@jetbrains/icons/template-20px-arrow.svg';\nimport template20px from '@jetbrains/icons/template-20px.svg';\nimport time from '@jetbrains/icons/time.svg';\nimport torrent from '@jetbrains/icons/torrent.svg';\nimport trash from '@jetbrains/icons/trash.svg';\nimport treemap from '@jetbrains/icons/treemap.svg';\nimport umbrella from '@jetbrains/icons/umbrella.svg';\nimport unauthorized from '@jetbrains/icons/unauthorized.svg';\nimport undo from '@jetbrains/icons/undo.svg';\nimport unknownOs from '@jetbrains/icons/unknown-os.svg';\nimport unsorted10px from '@jetbrains/icons/unsorted-10px.svg';\nimport update from '@jetbrains/icons/update.svg';\nimport user20px from '@jetbrains/icons/user-20px.svg';\nimport userCancel20px from '@jetbrains/icons/user-cancel-20px.svg';\nimport userCancel from '@jetbrains/icons/user-cancel.svg';\nimport userException20px from '@jetbrains/icons/user-exception-20px.svg';\nimport userException from '@jetbrains/icons/user-exception.svg';\nimport userGear from '@jetbrains/icons/user-gear.svg';\nimport userHourglass20px from '@jetbrains/icons/user-hourglass-20px.svg';\nimport userHourglass from '@jetbrains/icons/user-hourglass.svg';\nimport userOk20px from '@jetbrains/icons/user-ok-20px.svg';\nimport userOk from '@jetbrains/icons/user-ok.svg';\nimport userSpinner20px from '@jetbrains/icons/user-spinner-20px.svg';\nimport userSpinner from '@jetbrains/icons/user-spinner.svg';\nimport userWarning20px from '@jetbrains/icons/user-warning-20px.svg';\nimport userWarning from '@jetbrains/icons/user-warning.svg';\nimport user from '@jetbrains/icons/user.svg';\nimport vcsRoot14pxArrow from '@jetbrains/icons/vcs-root-14px-arrow.svg';\nimport vcsRoot14px from '@jetbrains/icons/vcs-root-14px.svg';\nimport vcsRoot20pxArrow from '@jetbrains/icons/vcs-root-20px-arrow.svg';\nimport vcsRoot20px from '@jetbrains/icons/vcs-root-20px.svg';\nimport voteEmpty from '@jetbrains/icons/vote-empty.svg';\nimport voteFilled from '@jetbrains/icons/vote-filled.svg';\nimport warning14px from '@jetbrains/icons/warning-14px.svg';\nimport warning20px from '@jetbrains/icons/warning-20px.svg';\nimport warning from '@jetbrains/icons/warning.svg';\nimport wrap from '@jetbrains/icons/wrap.svg';\n\nimport {iconHOC} from './icon';\n\nexport const ActivityIcon = iconHOC(activity, 'ActivityIcon');\nexport const Add10pxIcon = iconHOC(add10px, 'Add10pxIcon');\nexport const Add20pxIcon = iconHOC(add20px, 'Add20pxIcon');\nexport const AddIcon = iconHOC(add, 'AddIcon');\nexport const AnalyticsIcon = iconHOC(analytics, 'AnalyticsIcon');\nexport const ArchiveIcon = iconHOC(archive, 'ArchiveIcon');\nexport const ArtifactsIcon = iconHOC(artifacts, 'ArtifactsIcon');\nexport const Asterisk10pxIcon = iconHOC(asterisk10px, 'Asterisk10pxIcon');\nexport const AsteriskIcon = iconHOC(asterisk, 'AsteriskIcon');\nexport const AttachmentIcon = iconHOC(attachment, 'AttachmentIcon');\nexport const AverageIcon = iconHOC(average, 'AverageIcon');\nexport const BarsIcon = iconHOC(bars, 'BarsIcon');\nexport const BellIcon = iconHOC(bell, 'BellIcon');\nexport const BranchesIcon = iconHOC(branches, 'BranchesIcon');\nexport const BugIcon = iconHOC(bug, 'BugIcon');\nexport const BuildType14pxArrowIcon = iconHOC(buildType14pxArrow, 'BuildType14pxArrowIcon');\nexport const BuildType14pxFillArrowIcon = iconHOC(buildType14pxFillArrow, 'BuildType14pxFillArrowIcon');\nexport const BuildType14pxFillIcon = iconHOC(buildType14pxFill, 'BuildType14pxFillIcon');\nexport const BuildType14pxIcon = iconHOC(buildType14px, 'BuildType14pxIcon');\nexport const BuildType20pxArrowIcon = iconHOC(buildType20pxArrow, 'BuildType20pxArrowIcon');\nexport const BuildType20pxFillArrowIcon = iconHOC(buildType20pxFillArrow, 'BuildType20pxFillArrowIcon');\nexport const BuildType20pxFillIcon = iconHOC(buildType20pxFill, 'BuildType20pxFillIcon');\nexport const BuildType20pxIcon = iconHOC(buildType20px, 'BuildType20pxIcon');\nexport const BuildTypeComposite14pxArrowIcon = iconHOC(buildTypeComposite14pxArrow, 'BuildTypeComposite14pxArrowIcon');\nexport const BuildTypeComposite14pxFillArrowIcon = iconHOC(buildTypeComposite14pxFillArrow, 'BuildTypeComposite14pxFillArrowIcon');\nexport const BuildTypeComposite14pxFillIcon = iconHOC(buildTypeComposite14pxFill, 'BuildTypeComposite14pxFillIcon');\nexport const BuildTypeComposite14pxIcon = iconHOC(buildTypeComposite14px, 'BuildTypeComposite14pxIcon');\nexport const BuildTypeComposite20pxArrowIcon = iconHOC(buildTypeComposite20pxArrow, 'BuildTypeComposite20pxArrowIcon');\nexport const BuildTypeComposite20pxFillArrowIcon = iconHOC(buildTypeComposite20pxFillArrow, 'BuildTypeComposite20pxFillArrowIcon');\nexport const BuildTypeComposite20pxFillIcon = iconHOC(buildTypeComposite20pxFill, 'BuildTypeComposite20pxFillIcon');\nexport const BuildTypeComposite20pxIcon = iconHOC(buildTypeComposite20px, 'BuildTypeComposite20pxIcon');\nexport const BurndownIcon = iconHOC(burndown, 'BurndownIcon');\nexport const CalendarIcon = iconHOC(calendar, 'CalendarIcon');\nexport const Cancel20pxIcon = iconHOC(cancel20px, 'Cancel20pxIcon');\nexport const CancelIcon = iconHOC(cancel, 'CancelIcon');\nexport const CaretDown10pxIcon = iconHOC(caretDown10px, 'CaretDown10pxIcon');\nexport const CaretRight10pxIcon = iconHOC(caretRight10px, 'CaretRight10pxIcon');\nexport const ChangeIcon = iconHOC(change, 'ChangeIcon');\nexport const CheckmarkIcon = iconHOC(checkmark, 'CheckmarkIcon');\nexport const Chevron10pxIcon = iconHOC(chevron10px, 'Chevron10pxIcon');\nexport const ChevronDownIcon = iconHOC(chevronDown, 'ChevronDownIcon');\nexport const ChevronLeftIcon = iconHOC(chevronLeft, 'ChevronLeftIcon');\nexport const ChevronRightIcon = iconHOC(chevronRight, 'ChevronRightIcon');\nexport const ChevronUpIcon = iconHOC(chevronUp, 'ChevronUpIcon');\nexport const CloseIcon = iconHOC(close, 'CloseIcon');\nexport const CloudIcon = iconHOC(cloud, 'CloudIcon');\nexport const CodeIcon = iconHOC(code, 'CodeIcon');\nexport const CollapseIcon = iconHOC(collapse, 'CollapseIcon');\nexport const CommentIcon = iconHOC(comment, 'CommentIcon');\nexport const CompareIcon = iconHOC(compare, 'CompareIcon');\nexport const CopyIcon = iconHOC(copy, 'CopyIcon');\nexport const CropIcon = iconHOC(crop, 'CropIcon');\nexport const DataIcon = iconHOC(data, 'DataIcon');\nexport const DiceIcon = iconHOC(dice, 'DiceIcon');\nexport const DisconnectedIcon = iconHOC(disconnected, 'DisconnectedIcon');\nexport const DistributionIcon = iconHOC(distribution, 'DistributionIcon');\nexport const DoubleChevronLeftIcon = iconHOC(doubleChevronLeft, 'DoubleChevronLeftIcon');\nexport const DoubleChevronRightIcon = iconHOC(doubleChevronRight, 'DoubleChevronRightIcon');\nexport const DownloadIcon = iconHOC(download, 'DownloadIcon');\nexport const DragIcon = iconHOC(drag, 'DragIcon');\nexport const DropIcon = iconHOC(drop, 'DropIcon');\nexport const EMailIcon = iconHOC(eMail, 'EMailIcon');\nexport const EarthIcon = iconHOC(earth, 'EarthIcon');\nexport const EmojiIcon = iconHOC(emoji, 'EmojiIcon');\nexport const EntryIcon = iconHOC(entry, 'EntryIcon');\nexport const Exception20pxIcon = iconHOC(exception20px, 'Exception20pxIcon');\nexport const ExceptionIcon = iconHOC(exception, 'ExceptionIcon');\nexport const ExpandIcon = iconHOC(expand, 'ExpandIcon');\nexport const Experiment20pxIcon = iconHOC(experiment20px, 'Experiment20pxIcon');\nexport const EyeIcon = iconHOC(eye, 'EyeIcon');\nexport const FieldsIcon = iconHOC(fields, 'FieldsIcon');\nexport const FileAddAnyIcon = iconHOC(fileAddAny, 'FileAddAnyIcon');\nexport const FileArchiveIcon = iconHOC(fileArchive, 'FileArchiveIcon');\nexport const FileAsIcon = iconHOC(fileAs, 'FileAsIcon');\nexport const FileAspectjIcon = iconHOC(fileAspectj, 'FileAspectjIcon');\nexport const FileConfigIcon = iconHOC(fileConfig, 'FileConfigIcon');\nexport const FileCssIcon = iconHOC(fileCss, 'FileCssIcon');\nexport const FileCustomIcon = iconHOC(fileCustom, 'FileCustomIcon');\nexport const FileDiagramIcon = iconHOC(fileDiagram, 'FileDiagramIcon');\nexport const FileDtdIcon = iconHOC(fileDtd, 'FileDtdIcon');\nexport const FileHtaccessIcon = iconHOC(fileHtaccess, 'FileHtaccessIcon');\nexport const FileHtmlIcon = iconHOC(fileHtml, 'FileHtmlIcon');\nexport const FileIdlIcon = iconHOC(fileIdl, 'FileIdlIcon');\nexport const FileJavaClassIcon = iconHOC(fileJavaClass, 'FileJavaClassIcon');\nexport const FileJavaOutsideSourceIcon = iconHOC(fileJavaOutsideSource, 'FileJavaOutsideSourceIcon');\nexport const FileJavaIcon = iconHOC(fileJava, 'FileJavaIcon');\nexport const FileJsIcon = iconHOC(fileJs, 'FileJsIcon');\nexport const FileJsonDarkIcon = iconHOC(fileJsonDark, 'FileJsonDarkIcon');\nexport const FileJsonSchemaDarkIcon = iconHOC(fileJsonSchemaDark, 'FileJsonSchemaDarkIcon');\nexport const FileJsonSchemaIcon = iconHOC(fileJsonSchema, 'FileJsonSchemaIcon');\nexport const FileJsonIcon = iconHOC(fileJson, 'FileJsonIcon');\nexport const FileJspIcon = iconHOC(fileJsp, 'FileJspIcon');\nexport const FileJspxIcon = iconHOC(fileJspx, 'FileJspxIcon');\nexport const FileManifestIcon = iconHOC(fileManifest, 'FileManifestIcon');\nexport const FilePropertiesIcon = iconHOC(fileProperties, 'FilePropertiesIcon');\nexport const FileRegexpIcon = iconHOC(fileRegexp, 'FileRegexpIcon');\nexport const FileTextIcon = iconHOC(fileText, 'FileTextIcon');\nexport const FileUiFormIcon = iconHOC(fileUiForm, 'FileUiFormIcon');\nexport const FileUnknownIcon = iconHOC(fileUnknown, 'FileUnknownIcon');\nexport const FileWsdlIcon = iconHOC(fileWsdl, 'FileWsdlIcon');\nexport const FileXhtmlIcon = iconHOC(fileXhtml, 'FileXhtmlIcon');\nexport const FileXmlIcon = iconHOC(fileXml, 'FileXmlIcon');\nexport const FileXsdIcon = iconHOC(fileXsd, 'FileXsdIcon');\nexport const FileYamlIcon = iconHOC(fileYaml, 'FileYamlIcon');\nexport const FileIcon = iconHOC(file, 'FileIcon');\nexport const FiltersIcon = iconHOC(filters, 'FiltersIcon');\nexport const FlagIcon = iconHOC(flag, 'FlagIcon');\nexport const FolderIcon = iconHOC(folder, 'FolderIcon');\nexport const FrownIcon = iconHOC(frown, 'FrownIcon');\nexport const Gift20pxIcon = iconHOC(gift20px, 'Gift20pxIcon');\nexport const GiftIcon = iconHOC(gift, 'GiftIcon');\nexport const GitIcon = iconHOC(git, 'GitIcon');\nexport const GroupIcon = iconHOC(group, 'GroupIcon');\nexport const Help20pxIcon = iconHOC(help20px, 'Help20pxIcon');\nexport const HelpIcon = iconHOC(help, 'HelpIcon');\nexport const HistoryIcon = iconHOC(history, 'HistoryIcon');\nexport const Hourglass20pxIcon = iconHOC(hourglass20px, 'Hourglass20pxIcon');\nexport const HourglassIcon = iconHOC(hourglass, 'HourglassIcon');\nexport const IgnoredIcon = iconHOC(ignored, 'IgnoredIcon');\nexport const InfoIcon = iconHOC(info, 'InfoIcon');\nexport const Investigation14pxIcon = iconHOC(investigation14px, 'Investigation14pxIcon');\nexport const InvestigationIcon = iconHOC(investigation, 'InvestigationIcon');\nexport const LampIcon = iconHOC(lamp, 'LampIcon');\nexport const LinkIcon = iconHOC(link, 'LinkIcon');\nexport const LockIcon = iconHOC(lock, 'LockIcon');\nexport const MagicWandIcon = iconHOC(magicWand, 'MagicWandIcon');\nexport const Mammoth20pxIcon = iconHOC(mammoth20px, 'Mammoth20pxIcon');\nexport const MarkerIcon = iconHOC(marker, 'MarkerIcon');\nexport const MetaIcon = iconHOC(meta, 'MetaIcon');\nexport const Modified10pxIcon = iconHOC(modified10px, 'Modified10pxIcon');\nexport const MoreOptionsIcon = iconHOC(moreOptions, 'MoreOptionsIcon');\nexport const MoveToTopIcon = iconHOC(moveToTop, 'MoveToTopIcon');\nexport const MoveIcon = iconHOC(move, 'MoveIcon');\nexport const MuteIcon = iconHOC(mute, 'MuteIcon');\nexport const MutedIcon = iconHOC(muted, 'MutedIcon');\nexport const NewWindowIcon = iconHOC(newWindow, 'NewWindowIcon');\nexport const NoArtifactsIcon = iconHOC(noArtifacts, 'NoArtifactsIcon');\nexport const Ok20pxIcon = iconHOC(ok20px, 'Ok20pxIcon');\nexport const OkIcon = iconHOC(ok, 'OkIcon');\nexport const OvertimeIcon = iconHOC(overtime, 'OvertimeIcon');\nexport const Paused14pxIcon = iconHOC(paused14px, 'Paused14pxIcon');\nexport const PausedIcon = iconHOC(paused, 'PausedIcon');\nexport const PencilIcon = iconHOC(pencil, 'PencilIcon');\nexport const PennantIcon = iconHOC(pennant, 'PennantIcon');\nexport const PermissionIcon = iconHOC(permission, 'PermissionIcon');\nexport const PinEmptyIcon = iconHOC(pinEmpty, 'PinEmptyIcon');\nexport const PinFilledIcon = iconHOC(pinFilled, 'PinFilledIcon');\nexport const PlayIcon = iconHOC(play, 'PlayIcon');\nexport const PrCloseIcon = iconHOC(prClose, 'PrCloseIcon');\nexport const PrMergedIcon = iconHOC(prMerged, 'PrMergedIcon');\nexport const PrOpenIcon = iconHOC(prOpen, 'PrOpenIcon');\nexport const PrUnknownIcon = iconHOC(prUnknown, 'PrUnknownIcon');\nexport const PrinterIcon = iconHOC(printer, 'PrinterIcon');\nexport const Project14pxArrowIcon = iconHOC(project14pxArrow, 'Project14pxArrowIcon');\nexport const Project14pxFillArrowIcon = iconHOC(project14pxFillArrow, 'Project14pxFillArrowIcon');\nexport const Project14pxFillIcon = iconHOC(project14pxFill, 'Project14pxFillIcon');\nexport const Project14pxIcon = iconHOC(project14px, 'Project14pxIcon');\nexport const Project20pxArrowIcon = iconHOC(project20pxArrow, 'Project20pxArrowIcon');\nexport const Project20pxFillArrowIcon = iconHOC(project20pxFillArrow, 'Project20pxFillArrowIcon');\nexport const Project20pxFillIcon = iconHOC(project20pxFill, 'Project20pxFillIcon');\nexport const Project20pxIcon = iconHOC(project20px, 'Project20pxIcon');\nexport const PuzzleIcon = iconHOC(puzzle, 'PuzzleIcon');\nexport const RateIcon = iconHOC(rate, 'RateIcon');\nexport const RedoIcon = iconHOC(redo, 'RedoIcon');\nexport const Remove10pxIcon = iconHOC(remove10px, 'Remove10pxIcon');\nexport const Renamed10pxIcon = iconHOC(renamed10px, 'Renamed10pxIcon');\nexport const ReviewersGraphIcon = iconHOC(reviewersGraph, 'ReviewersGraphIcon');\nexport const Search20pxIcon = iconHOC(search20px, 'Search20pxIcon');\nexport const SearchEmptyIcon = iconHOC(searchEmpty, 'SearchEmptyIcon');\nexport const SearchErrorIcon = iconHOC(searchError, 'SearchErrorIcon');\nexport const SearchIcon = iconHOC(search, 'SearchIcon');\nexport const Services20pxIcon = iconHOC(services20px, 'Services20pxIcon');\nexport const ServicesIcon = iconHOC(services, 'ServicesIcon');\nexport const Settings20pxIcon = iconHOC(settings20px, 'Settings20pxIcon');\nexport const SettingsIcon = iconHOC(settings, 'SettingsIcon');\nexport const ShieldIcon = iconHOC(shield, 'ShieldIcon');\nexport const Spinner20pxIcon = iconHOC(spinner20px, 'Spinner20pxIcon');\nexport const SpinnerStaticIcon = iconHOC(spinnerStatic, 'SpinnerStaticIcon');\nexport const SpinnerIcon = iconHOC(spinner, 'SpinnerIcon');\nexport const StampIcon = iconHOC(stamp, 'StampIcon');\nexport const StarEmpty14pxIcon = iconHOC(starEmpty14px, 'StarEmpty14pxIcon');\nexport const StarEmptyIcon = iconHOC(starEmpty, 'StarEmptyIcon');\nexport const StarFilled14pxIcon = iconHOC(starFilled14px, 'StarFilled14pxIcon');\nexport const StarFilledIcon = iconHOC(starFilled, 'StarFilledIcon');\nexport const StopIcon = iconHOC(stop, 'StopIcon');\nexport const TableIcon = iconHOC(table, 'TableIcon');\nexport const TagIcon = iconHOC(tag, 'TagIcon');\nexport const TaskIcon = iconHOC(task, 'TaskIcon');\nexport const Template14pxArrowIcon = iconHOC(template14pxArrow, 'Template14pxArrowIcon');\nexport const Template14pxIcon = iconHOC(template14px, 'Template14pxIcon');\nexport const Template20pxArrowIcon = iconHOC(template20pxArrow, 'Template20pxArrowIcon');\nexport const Template20pxIcon = iconHOC(template20px, 'Template20pxIcon');\nexport const TimeIcon = iconHOC(time, 'TimeIcon');\nexport const TorrentIcon = iconHOC(torrent, 'TorrentIcon');\nexport const TrashIcon = iconHOC(trash, 'TrashIcon');\nexport const TreemapIcon = iconHOC(treemap, 'TreemapIcon');\nexport const UmbrellaIcon = iconHOC(umbrella, 'UmbrellaIcon');\nexport const UnauthorizedIcon = iconHOC(unauthorized, 'UnauthorizedIcon');\nexport const UndoIcon = iconHOC(undo, 'UndoIcon');\nexport const UnknownOsIcon = iconHOC(unknownOs, 'UnknownOsIcon');\nexport const Unsorted10pxIcon = iconHOC(unsorted10px, 'Unsorted10pxIcon');\nexport const UpdateIcon = iconHOC(update, 'UpdateIcon');\nexport const User20pxIcon = iconHOC(user20px, 'User20pxIcon');\nexport const UserCancel20pxIcon = iconHOC(userCancel20px, 'UserCancel20pxIcon');\nexport const UserCancelIcon = iconHOC(userCancel, 'UserCancelIcon');\nexport const UserException20pxIcon = iconHOC(userException20px, 'UserException20pxIcon');\nexport const UserExceptionIcon = iconHOC(userException, 'UserExceptionIcon');\nexport const UserGearIcon = iconHOC(userGear, 'UserGearIcon');\nexport const UserHourglass20pxIcon = iconHOC(userHourglass20px, 'UserHourglass20pxIcon');\nexport const UserHourglassIcon = iconHOC(userHourglass, 'UserHourglassIcon');\nexport const UserOk20pxIcon = iconHOC(userOk20px, 'UserOk20pxIcon');\nexport const UserOkIcon = iconHOC(userOk, 'UserOkIcon');\nexport const UserSpinner20pxIcon = iconHOC(userSpinner20px, 'UserSpinner20pxIcon');\nexport const UserSpinnerIcon = iconHOC(userSpinner, 'UserSpinnerIcon');\nexport const UserWarning20pxIcon = iconHOC(userWarning20px, 'UserWarning20pxIcon');\nexport const UserWarningIcon = iconHOC(userWarning, 'UserWarningIcon');\nexport const UserIcon = iconHOC(user, 'UserIcon');\nexport const VcsRoot14pxArrowIcon = iconHOC(vcsRoot14pxArrow, 'VcsRoot14pxArrowIcon');\nexport const VcsRoot14pxIcon = iconHOC(vcsRoot14px, 'VcsRoot14pxIcon');\nexport const VcsRoot20pxArrowIcon = iconHOC(vcsRoot20pxArrow, 'VcsRoot20pxArrowIcon');\nexport const VcsRoot20pxIcon = iconHOC(vcsRoot20px, 'VcsRoot20pxIcon');\nexport const VoteEmptyIcon = iconHOC(voteEmpty, 'VoteEmptyIcon');\nexport const VoteFilledIcon = iconHOC(voteFilled, 'VoteFilledIcon');\nexport const Warning14pxIcon = iconHOC(warning14px, 'Warning14pxIcon');\nexport const Warning20pxIcon = iconHOC(warning20px, 'Warning20pxIcon');\nexport const WarningIcon = iconHOC(warning, 'WarningIcon');\nexport const WrapIcon = iconHOC(wrap, 'WrapIcon');\n","import React, {createContext, forwardRef} from 'react';\nimport {pure, wrapDisplayName} from 'recompose';\n\nconst Theme = {\n LIGHT: 'light',\n DARK: 'dark'\n};\n\nexport const ThemeContext = createContext();\n\nexport const withTheme = (defaultTheme = Theme.LIGHT) => ComposedComponent => {\n // eslint-disable-next-line react/prop-types\n const WithTheme = pure(forwardRef(function WithTheme({theme, ...restProps}, ref) {\n return (\n \n {contextTheme => {\n const usedTheme = theme || contextTheme || defaultTheme;\n return (\n \n \n \n );\n }}\n \n );\n }));\n Object.assign(WithTheme, ComposedComponent);\n WithTheme.displayName = wrapDisplayName(ComposedComponent, 'withTheme');\n return WithTheme;\n};\n\nfunction applyTheme(params) {\n if (!params || !params.element || !params.currentTheme) {\n return;\n }\n\n if (params.prevTheme) {\n params.element.classList.remove(params.prevTheme);\n }\n\n params.element.classList.add(params.currentTheme);\n}\n\n\nexport {applyTheme};\nexport default Theme;\n","import React, {PureComponent} from 'react';\nimport PropTypes from 'prop-types';\n\nconst LEFT_BUTTON = 0;\n// Cmd/Ctrl/Shift/Alt + Click should trigger default browser behaviour. Same applies to non-left clicks\nconst isPlainLeftClick = e =>\n e.button === LEFT_BUTTON && !e.altKey && !e.ctrlKey && !e.metaKey && !e.shiftKey;\n\nexport default class ClickableLink extends PureComponent {\n static propTypes = {\n onClick: PropTypes.func,\n onPlainLeftClick: PropTypes.func,\n onConditionalClick: PropTypes.func,\n activeClassName: PropTypes.string,\n href: PropTypes.string.isRequired,\n children: PropTypes.node.isRequired\n };\n\n onClick = e => {\n const {onClick, onConditionalClick, onPlainLeftClick} = this.props;\n\n const isPlainLeft = isPlainLeftClick(e);\n\n if (onClick) {\n onClick(e);\n }\n\n if (onConditionalClick) {\n onConditionalClick(isPlainLeft, e);\n }\n\n if (onPlainLeftClick && isPlainLeft) {\n e.preventDefault();\n onPlainLeftClick(e);\n }\n };\n\n render() {\n const {\n onConditionalClick, onPlainLeftClick, activeClassName,\n href,\n children,\n ...restProps\n } = this.props;\n\n return {children};\n }\n}\n","import 'focus-visible';\nimport React, {PureComponent} from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport chevronDown from '@jetbrains/icons/chevron-10px.svg';\n\nimport Icon, {Size} from '../icon';\nimport Theme, {withTheme} from '../global/theme';\nimport ClickableLink from '../link/clickableLink';\n\nimport styles from './button.css';\n\n/**\n * @name Button\n */\nclass Button extends PureComponent {\n static propTypes = {\n theme: PropTypes.string,\n active: PropTypes.bool,\n danger: PropTypes.bool,\n delayed: PropTypes.bool,\n loader: PropTypes.bool,\n primary: PropTypes.bool,\n blue(props, propName) {\n if (propName in props) {\n return new Error(`\"${propName}\" prop is deprecated. Use \"primary\" instead`);\n }\n return undefined;\n },\n short: PropTypes.bool,\n text: PropTypes.bool,\n inline: PropTypes.bool,\n dropdown: PropTypes.bool,\n\n href: PropTypes.string,\n\n icon: PropTypes.oneOfType([PropTypes.string, PropTypes.elementType]),\n iconSize: PropTypes.number,\n iconClassName: PropTypes.string,\n iconSuppressSizeWarning: PropTypes.bool,\n\n className: PropTypes.string,\n\n children: PropTypes.node\n };\n\n static IconSize = Size;\n static Theme = Theme;\n\n render() {\n const {\n // Modifiers\n theme,\n active,\n blue,\n danger,\n delayed,\n loader,\n primary,\n short,\n text,\n inline,\n dropdown,\n\n // Props\n icon,\n iconSize,\n iconClassName,\n iconSuppressSizeWarning,\n className,\n children,\n ...props\n } = this.props;\n\n const withNormalIcon = icon && !active && !danger && !primary && !props.disabled;\n const classes = classNames(\n styles.button,\n className,\n styles[theme],\n {\n [styles.active]: active,\n [styles.danger]: danger,\n [styles.delayed]: delayed,\n [styles.withIcon]: icon,\n [styles.onlyIcon]: icon && !children,\n [styles.withNormalIconLight]: (\n withNormalIcon && theme === Theme.LIGHT\n ),\n [styles.withNormalIconDark]: (\n withNormalIcon && theme === Theme.DARK\n ),\n [styles.withDangerIconLight]: (\n icon && danger && theme === Theme.LIGHT\n ),\n [styles.withDangerIconDark]: (\n icon && danger && theme === Theme.DARK\n ),\n [styles.loader]: loader && !icon,\n [styles.primary]: primary || blue,\n [styles.short]: short,\n [styles.text]: text,\n [styles.inline]: inline\n }\n );\n\n const content = (\n \n {icon && (\n \n \n \n )}\n {children && (\n {children}\n )}\n {dropdown && (\n \n )}\n \n );\n const isLink = !!props.href;\n\n const Tag = isLink ? ClickableLink : 'button';\n return (\n \n {loader && !text && !icon &&
}\n {content}\n \n );\n }\n}\n\nexport {Size as IconSize};\n\nexport default withTheme()(Button);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport chevronDown from '@jetbrains/icons/chevron-10px.svg';\nimport classNames from 'classnames';\n\nimport Icon from '../icon';\n\nimport Button from '../button/button';\n\nimport styles from './dropdown.css';\n\nexport default function Anchor({children, className, ...restProps}) {\n return (\n \n {children}\n \n \n );\n}\n\nAnchor.propTypes = {\n children: PropTypes.node,\n className: PropTypes.string\n};\n","import React, {cloneElement, Component} from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport dataTests from '../global/data-tests';\n\nimport Anchor from './anchor';\nimport styles from './dropdown.css';\n\n/**\n * @name Dropdown\n */\n\nexport default class Dropdown extends Component {\n static propTypes = {\n /**\n * Can be string, React element, or a function accepting an object with {active, pinned} properties and returning a React element\n * React element should render some interactive HTML element like `button` or `a`\n */\n anchor: PropTypes.oneOfType([PropTypes.node, PropTypes.func]).isRequired,\n children: PropTypes.element.isRequired,\n initShown: PropTypes.bool,\n className: PropTypes.string,\n activeClassName: PropTypes.string,\n clickMode: PropTypes.bool,\n hoverMode: PropTypes.bool,\n hoverShowTimeOut: PropTypes.number,\n hoverHideTimeOut: PropTypes.number,\n onShow: PropTypes.func,\n onHide: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n 'data-test': PropTypes.string\n };\n\n static defaultProps = {\n initShown: false,\n clickMode: true,\n hoverMode: false,\n hoverShowTimeOut: 300,\n hoverHideTimeOut: 600,\n onShow: () => {},\n onHide: () => {},\n onMouseEnter: () => {},\n onMouseLeave: () => {}\n };\n\n state = {\n show: this.props.initShown,\n pinned: false\n };\n\n onClick = () => {\n const {show, pinned} = this.state;\n let nextPinned = pinned;\n\n if (this.props.hoverMode) {\n if (!pinned) {\n nextPinned = true;\n\n if (show) {\n this.setState({pinned: true});\n return;\n }\n } else {\n nextPinned = false;\n }\n }\n\n this._toggle(!show, nextPinned);\n };\n\n onChildCloseAttempt = () => {\n let nextPinned = this.state.pinned;\n if (this.props.hoverMode) {\n nextPinned = false;\n }\n\n this._toggle(false, nextPinned);\n };\n\n onMouseEnter = event => {\n this._clearTimer();\n this.props.onMouseEnter(event);\n\n this.hoverTimer = setTimeout(() => {\n if (!this.state.show) {\n this._toggle(true);\n }\n }, this.props.hoverShowTimeOut);\n };\n\n onMouseLeave = event => {\n this.props.onMouseLeave(event);\n if (this.state.pinned) {\n return;\n }\n\n this._clearTimer();\n\n this.hoverTimer = setTimeout(() => {\n if (this.state.show) {\n this._toggle(false);\n }\n }, this.props.hoverHideTimeOut);\n };\n\n handlePopupInteraction = () => {\n this.setState(({pinned}) => (pinned ? null : {pinned: true}));\n };\n\n toggle(show = !this.state.show) {\n this._toggle(show);\n }\n\n _toggle(show, pinned = this.state.pinned) {\n this.setState({show, pinned}, () => (show ? this.props.onShow() : this.props.onHide()));\n }\n\n _clearTimer() {\n if (this.hoverTimer) {\n clearTimeout(this.hoverTimer);\n this.hoverTimer = null;\n }\n }\n\n render() {\n const {show, pinned} = this.state;\n const {\n initShown, onShow, onHide, hoverShowTimeOut, hoverHideTimeOut,\n children, anchor, className, activeClassName, hoverMode, clickMode, 'data-test': dataTest,\n ...restProps\n } = this.props;\n\n const classes = classNames(styles.dropdown, className, {\n [activeClassName]: activeClassName != null && show\n });\n\n let anchorElement;\n\n switch (typeof anchor) {\n case 'string':\n anchorElement = ({anchor});\n break;\n case 'function':\n anchorElement = anchor({active: show, pinned});\n break;\n\n default:\n anchorElement = anchor;\n }\n\n return (\n \n {anchorElement}\n {cloneElement(children, {\n hidden: !show,\n onCloseAttempt: this.onChildCloseAttempt,\n onMouseDown: hoverMode ? this.handlePopupInteraction : undefined,\n onContextMenu: hoverMode ? this.handlePopupInteraction : undefined,\n dontCloseOnAnchorClick: true\n })}\n
\n );\n }\n}\n\nexport {Anchor};\n","import sniffer from './sniffer';\n\n/**\n * @description Provides a set of utilities for URL manipulation.\n */\n\n/**\n * @const {RegExp}\n */\nconst ORIGIN_PATTERN = /^[a-z]+:\\/\\/[^/]+/i;\n\n/**\n * @const {RegExp}\n */\nconst ABSOLUTE_URL_PATTERN = /^[a-z]+:\\/\\//i;\n\n/**\n * @const {RegExp}\n */\nexport const ENDING_SLASH_PATTERN = /\\/$/;\n\n/**\n * Get URI from the tag\n * @return {string|undefined} base URI\n */\nexport function getBaseURI() {\n const baseElement = document.getElementsByTagName('base')[0];\n return baseElement ? baseElement.href : undefined;\n}\n\n/**\n * Get absolute URI from the tag\n * @return {string} absolute base URI\n */\nexport function getAbsoluteBaseURL() {\n const baseUrl = getBaseURI();\n const host = `${window.location.protocol}//${window.location.host}`;\n\n let uri;\n if (baseUrl) {\n uri = ABSOLUTE_URL_PATTERN.test(baseUrl) ? baseUrl : host + baseUrl;\n } else {\n uri = host;\n }\n\n return uri;\n}\n\n/**\n * Get origin from the URL\n * @param {string} url URL to extract origin from\n * @returns {string|undefined} origin\n */\nexport function getOrigin(url) {\n const matches = url.match(ORIGIN_PATTERN);\n\n if (matches) {\n return matches[0];\n }\n\n return undefined;\n}\n\n/**\n * Get absolute URI from current page\n * @return {string} absolute URL of current page\n */\nexport function getAbsoluteURL() {\n return window.location.href.split('#')[0];\n}\n\n/**\n * Fixes the URL\n * If the URL is relative and the page contains a TAG, the URL will be converted to absolute\n * : some/path => /some/path\n * @param {string} url URL to fix\n * @param {Function} baseURIGetter a function that returns base URI\n * @return {string} fixed URL\n */\nexport function fixUrl(url, baseURIGetter = getBaseURI) {\n if (url.indexOf('http://') === -1 && url.indexOf('https://') === -1 && url.indexOf('/') !== 0) {\n const baseUrl = baseURIGetter();\n\n if (baseUrl) {\n return baseUrl + url;\n }\n }\n\n return url;\n}\n\nexport function joinBaseURLAndPath(baseUrl, path) {\n if (!baseUrl || path.indexOf('http://') !== -1 || path.indexOf('https://') !== -1) {\n return path;\n }\n\n return baseUrl + path;\n}\n\n/**\n * Resolve URL for SVG icons\n * @param {string} relUrl The value of xlink:href\n * @param {Function} baseURIGetter a function that returns base URI\n * @param {Function} absoluteURLGetter a function that returns absolute URI of current page\n * @return {string} The URL relative to base URL for current page\n */\nexport function resolveRelativeURL(\n relUrl,\n baseURIGetter = getBaseURI,\n absoluteURLGetter = getAbsoluteURL\n) {\n if (baseURIGetter() &&\n (\n sniffer.browser.name === 'firefox' ||\n sniffer.browser.name === 'edge' ||\n // eslint-disable-next-line no-magic-numbers\n sniffer.browser.name === 'chrome' && sniffer.browser.version[0] >= 49\n )\n ) {\n return absoluteURLGetter() + relUrl;\n }\n\n return String(relUrl);\n}\n\n/**\n * Parses a queryString into an object.\n * ```\n * parseQueryString(\"access_token=2YotnFZFEjr1zCsicMWpAA&state=xyz&token_type=example&expires_in=3600\");\n * // is {access_token: \"2YotnFZFEjr1zCsicMWpAA\", state: \"xyz\", token_type: \"example\", expires_in: \"3600\"}\n * ```\n * @param {string} queryString query parameter string to parse\n * @return {AuthResponse} object with query parameters map\n */\nexport function parseQueryString(queryString) {\n if (queryString == null) {\n return {};\n }\n\n const queryParameterPairRE = /([^&;=]+)=?([^&;]*)/g;\n const FIRST_PAIR_ELEMENT = 1;\n const SECOND_PAIR_ELEMENT = 2;\n const urlParams = {};\n\n function decode(s) {\n return decodeURIComponent(s.replace(/\\+/g, ' '));\n }\n\n let matchedQueryPair;\n while ((matchedQueryPair = queryParameterPairRE.exec(queryString)) != null) {\n urlParams[decode(matchedQueryPair[FIRST_PAIR_ELEMENT])] =\n decode(matchedQueryPair[SECOND_PAIR_ELEMENT]);\n }\n\n return urlParams;\n}\n\n/**\n * Takes a URL as input and a params object.\n * Each property in the params is added to the URL as query string parameters\n * @param {string} url URL to add parameters to\n * @param {Object} params parameters to add\n * @returns {string} encoded URL\n */\nexport function encodeURL(url, params) {\n const equalsSign = '=';\n const firstSeparator = (url.indexOf('?') === -1) ? '?' : '&';\n\n let res = url;\n let k;\n let i = 0;\n\n for (k in params) {\n if (params.hasOwnProperty(k) && params[k] != null) {\n res += (i++ === 0 ? firstSeparator : '&') +\n encodeURIComponent(k) + equalsSign + encodeURIComponent(params[k]);\n }\n }\n\n return res;\n}\n\nexport function isDataURI(uri) {\n return uri.indexOf('data:') === 0;\n}\n","/**\n * @name DOM\n */\n\nexport const getStyles = window.getComputedStyle.bind(window);\n\nexport function isMounted(node) {\n if (node === document) {\n return true;\n }\n\n return node instanceof Node && document.documentElement.contains(node.parentNode);\n}\n\nconst rectStub = {top: 0, right: 0, bottom: 0, left: 0, width: 0, height: 0};\n\nexport function getRect(node) {\n if (node instanceof Range || isMounted(node)) {\n const {top, right, bottom, left, width, height} = node.getBoundingClientRect();\n return {top, right, bottom, left, width, height};\n } else {\n return Object.assign({}, rectStub);\n }\n}\n\nexport function getPixelRatio() {\n return 'devicePixelRatio' in window ? window.devicePixelRatio : 1;\n}\n\nexport function getWindowHeight() {\n return window.innerHeight;\n}\n\nexport function getDocumentScrollTop() {\n return (document.documentElement && document.documentElement.scrollTop) ||\n document.body.scrollTop;\n}\n\nexport function getDocumentScrollLeft() {\n return (document.documentElement && document.documentElement.scrollLeft) ||\n document.body.scrollLeft;\n}\n\nexport const applyMethodToClasses = method => (classList, classes = '') => {\n classes.\n split(/\\s+/g).\n filter(className => !!className).\n forEach(className => classList[method](className));\n};\n\nexport const addClasses = applyMethodToClasses('add');\nexport const removeClasses = applyMethodToClasses('remove');\n\nexport function setRootStyleProperties(properties = {}) {\n const rootStyle = document.documentElement.style;\n\n Object.entries(properties).forEach(([key, value]) => {\n rootStyle.setProperty(key, value);\n });\n}\n\nexport function resetRootStyleProperties(properties = {}) {\n const rootStyle = document.documentElement.style;\n\n Object.keys(properties).\n forEach(key => rootStyle.removeProperty(key));\n}\n\nexport class Listeners {\n _all = new Set();\n\n add(el, event, handler, useCapture) {\n el.addEventListener(event, handler, useCapture);\n const dispatchFn = () => el.removeEventListener(event, handler, useCapture);\n this._all.add(dispatchFn);\n return dispatchFn;\n }\n\n remove(fn) {\n fn();\n this._all.delete(fn);\n }\n\n removeAll() {\n this._all.forEach(fn => this.remove(fn));\n }\n}\n\n// Synthetic events from Combokeys#trigger are plain objects\nexport function preventDefault(e) {\n if (e.preventDefault) {\n e.preventDefault();\n }\n}\n","import React, {PureComponent} from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport {encodeURL, isDataURI, parseQueryString} from '../global/url';\nimport {getPixelRatio} from '../global/dom';\n\nimport styles from './avatar.css';\n\n/**\n * @name Avatar\n */\n\nexport const Size = {\n Size18: 18,\n Size20: 20,\n Size24: 24,\n Size32: 32,\n Size40: 40,\n Size48: 48,\n Size56: 56\n};\n\nexport default class Avatar extends PureComponent {\n static propTypes = {\n dpr: PropTypes.number,\n className: PropTypes.string,\n size: PropTypes.number,\n style: PropTypes.object,\n url: PropTypes.string,\n round: PropTypes.bool,\n subavatar: PropTypes.string,\n subavatarSize: PropTypes.number\n };\n\n static defaultProps = {\n dpr: getPixelRatio(),\n size: Size.Size20,\n subavatarSize: Size.Size20 / 2,\n style: {}\n };\n\n state = {\n errorUrl: ''\n };\n\n handleError = () => {\n this.setState({errorUrl: this.props.url});\n };\n\n handleSuccess = () => {\n this.setState({errorUrl: ''});\n };\n\n render() {\n const {size, url, dpr, style, round, subavatar, subavatarSize, ...restProps} = this.props;\n const sizeString = `${size}px`;\n const subavatarSizeString = `${subavatarSize}px`;\n const borderRadius = size <= Size.Size18 ? 'var(--ring-border-radius-small)' : 'var(--ring-border-radius)';\n const styleObj = {\n borderRadius: round ? '50%' : borderRadius,\n height: sizeString,\n width: sizeString,\n ...style\n };\n\n const styleObjGroup = {\n borderRadius: '2px',\n height: subavatarSizeString,\n width: subavatarSizeString,\n ...style\n };\n\n if (!url || this.state.errorUrl === url) {\n return (\n \n );\n }\n\n let src = url;\n if (!isDataURI(url)) {\n const [urlStart, query] = url.split('?');\n const queryParams = {\n ...parseQueryString(query),\n dpr,\n size\n };\n\n src = encodeURL(urlStart, queryParams);\n }\n let subavatarSrc = null;\n if (subavatar && !isDataURI(subavatar)) {\n const [urlStart, query] = subavatar.split('?');\n const queryParams = {\n ...parseQueryString(query),\n dpr,\n subavatarSizeString\n };\n\n subavatarSrc = encodeURL(urlStart, queryParams);\n return (\n
\n \n \n
\n );\n } else {\n return (\n \n );\n }\n }\n}\n","const idCounters = {};\n\nexport default function getUID(name) {\n if (!name) {\n throw Error('Argument \"name\" is required in getUID()');\n }\n\n if (!idCounters[name]) {\n idCounters[name] = 0;\n }\n\n const id = String(idCounters[name]++);\n\n return name + id;\n}\n","export default function scheduleRAF(trailingCall) {\n let scheduledCb;\n let RAF;\n let trailingCallScheduled = false;\n\n function doSchedule() {\n RAF = window.requestAnimationFrame(() => {\n scheduledCb();\n if (trailingCallScheduled) {\n trailingCallScheduled = false;\n doSchedule();\n } else {\n RAF = null;\n scheduledCb = null;\n }\n });\n }\n\n return function schedule(cb) {\n scheduledCb = cb;\n if (!RAF) {\n doSchedule();\n } else if (trailingCall) {\n trailingCallScheduled = true;\n }\n };\n}\n","import 'dom4';\nimport Combokeys from 'combokeys';\n\nimport sniffr from '../global/sniffer';\n\nclass Shortcuts {\n ALLOW_SHORTCUTS_SELECTOR = '.ring-js-shortcuts';\n ROOT_SCOPE = {\n scopeId: 'ROOT',\n options: {}\n };\n\n _scopes = {};\n\n combokeys = new Combokeys(document.documentElement);\n trigger = combo => this.combokeys.trigger(combo);\n\n constructor() {\n this.setFilter();\n this.setScope();\n }\n\n _dispatcher = (e, key) => {\n let currentScope;\n\n for (let i = this._scopeChain.length - 1; i >= 0; i--) {\n const scopeInChain = this._scopeChain[i];\n currentScope = this._scopes[scopeInChain.scopeId];\n\n if (currentScope && currentScope[key]) {\n const ret = currentScope[key](e, key, scopeInChain.scopeId);\n\n // Fall down in chain when returning true\n if (ret !== true) {\n return ret;\n }\n }\n\n if (scopeInChain.options.modal) {\n return true;\n }\n }\n\n return undefined;\n };\n\n /**\n * Binds a handler to a shortcut\n *\n * @param params.key {string | Array.) Keys to bind\n * @param params.handler {Function} Events handle\n * @param params.scope {string} Scope (optional)\n * @param params.type {string} Event type, will be passed to Combokeys (optional)\n */\n bind(params) {\n if (!(params instanceof Object) || typeof params.handler !== 'function') {\n throw new Error('Shortcut handler should exist');\n }\n\n if (!params.scope) {\n params.scope = this.ROOT_SCOPE.scopeId;\n }\n\n if (Array.isArray(params.key)) {\n for (let i = 0; i < params.key.length; i++) {\n this.bind(Object.assign({}, params, {key: params.key[i]}));\n }\n\n return;\n }\n\n if (typeof params.key !== 'string') {\n throw new Error('Shortcut key should exist');\n }\n\n if (!this._scopes[params.scope]) {\n this._scopes[params.scope] = {};\n }\n this._scopes[params.scope][params.key] = params.handler;\n\n this.combokeys.bind(params.key, this._dispatcher, this._getKeyboardEventType(params));\n }\n\n /**\n * Binds a map of shortcuts to handlers with common options\n *\n * @map {Object) Keys to handlers map\n * @options.scope {string} Scope (optional)\n * @options.type {string} Event type, will be passed to Combokeys (optional)\n */\n bindMap(map, options) {\n if (!(map instanceof Object)) {\n throw new Error('Shortcuts map shouldn\\'t be empty');\n }\n\n for (const key in map) {\n if (map.hasOwnProperty(key)) {\n this.bind(Object.assign({}, options || {}, {key, handler: map[key]}));\n }\n }\n }\n\n unbindScope(scope) {\n this._scopes[scope] = null;\n }\n\n getScope() {\n return this._scopeChain.slice(1);\n }\n\n hasScope(scopeId) {\n return this.indexOfScope(scopeId) !== -1;\n }\n\n /**\n * Adds a scope to the chain\n * @param scopeId id of scope to add\n * @param options options for pushing scope\n * @param options.modal whether keys should fall through this scope or not.\n * Useful for modals or overlays\n */\n pushScope(scopeId, options = {}) {\n if (scopeId) {\n const position = this.indexOfScope(scopeId);\n\n if (position !== -1) {\n this._scopeChain.splice(position, 1);\n }\n\n this._scopeChain.push(this.wrapScope(scopeId, options));\n }\n }\n\n popScope(scopeId) {\n if (scopeId) {\n const position = this.indexOfScope(scopeId);\n\n if (position !== -1) {\n return this._scopeChain.splice(position, this._scopeChain.length - 1);\n }\n }\n\n return undefined;\n }\n\n spliceScope(scopeId) {\n if (scopeId) {\n const position = this.indexOfScope(scopeId);\n\n if (position !== -1) {\n this._scopeChain.splice(position, 1);\n }\n }\n }\n\n setScope(scope) {\n if (scope) {\n let scopeChain;\n\n if (typeof scope === 'string' || (!Array.isArray(scope) && typeof scope === 'object' && scope !== null)) {\n scopeChain = [scope];\n } else {\n scopeChain = scope;\n }\n\n if (!Array.isArray(scopeChain)) {\n return;\n }\n\n scopeChain = scopeChain.map(scopeItem => {\n const isScopeId = typeof scopeItem === 'string';\n return isScopeId ? this.wrapScope(scopeItem) : scopeItem;\n });\n\n this._scopeChain = [this.ROOT_SCOPE].concat(scopeChain);\n } else {\n this._scopeChain = [this.ROOT_SCOPE];\n }\n }\n\n wrapScope(scopeId, options = {}) {\n return {scopeId, options};\n }\n\n hasKey(key, scope) {\n return !!(this._scopes[scope] && this._scopes[scope][key]);\n }\n\n _defaultFilter = (e, element/*, key*/) => {\n // if the element or its parents have the class \"ring-js-shortcuts\" then no need to stop\n if (\n element === document ||\n element.matches(this.ALLOW_SHORTCUTS_SELECTOR) ||\n element.closest(this.ALLOW_SHORTCUTS_SELECTOR)\n ) {\n return false;\n }\n\n // stop for input, select, and textarea\n return element.matches('input,select,textarea') || (element.contentEditable && element.contentEditable === 'true');\n };\n\n _getKeyboardEventType(params) {\n if (!params.type && sniffr.os.name === 'windows') {\n const isSystemShortcut = params.key.match(/ctrl/i) && params.key.match(/shift/i) && params.key.match(/[0-9]/);\n /**\n * Windows system shortcuts (ctrl+shift+[0-9] are caught by the OS on 'keydown', so let's use 'keyup'\n */\n if (isSystemShortcut) {\n return 'keyup';\n }\n }\n return params.type;\n }\n\n setFilter(fn) {\n this.combokeys.stopCallback = typeof fn === 'function' ? fn : this._defaultFilter;\n }\n\n indexOfScope(scopeId) {\n return this._scopeChain.findIndex(scope => scope.scopeId === scopeId);\n }\n\n reset() {\n this._scopes = {};\n this.setScope();\n this.combokeys.reset();\n }\n}\n\nexport default new Shortcuts();\n","import {PureComponent} from 'react';\nimport PropTypes from 'prop-types';\n\nimport shortcuts from './core';\n\nexport default class Shortcuts extends PureComponent {\n static propTypes = {\n map: PropTypes.object.isRequired,\n scope: PropTypes.string.isRequired,\n options: PropTypes.object,\n disabled: PropTypes.bool,\n children: PropTypes.node\n };\n\n static defaultProps = {\n options: {}\n };\n\n componentDidMount() {\n if (!this.props.disabled) {\n this.turnShorcutsOn();\n }\n }\n\n componentDidUpdate(prevProps) {\n const {disabled} = this.props;\n if (!prevProps.disabled && disabled) {\n this.turnShorcutsOff();\n }\n if (prevProps.disabled && !disabled) {\n this.turnShorcutsOn();\n }\n }\n\n componentWillUnmount() {\n if (!this.props.disabled) {\n this.turnShorcutsOff();\n }\n }\n\n turnShorcutsOn() {\n const {map, scope, options} = this.props;\n shortcuts.bindMap(map, this.props);\n shortcuts.pushScope(scope, options);\n }\n\n turnShorcutsOff() {\n const {scope} = this.props;\n shortcuts.unbindScope(scope);\n shortcuts.spliceScope(scope);\n }\n\n render() {\n return this.props.children || null;\n }\n}\n","import 'dom4';\nimport {\n getDocumentScrollLeft,\n getDocumentScrollTop,\n getRect,\n getWindowHeight,\n isMounted\n} from '../global/dom';\n\nexport const Directions = {\n BOTTOM_RIGHT: 'BOTTOM_RIGHT',\n BOTTOM_LEFT: 'BOTTOM_LEFT',\n BOTTOM_CENTER: 'BOTTOM_CENTER',\n TOP_LEFT: 'TOP_LEFT',\n TOP_RIGHT: 'TOP_RIGHT',\n TOP_CENTER: 'TOP_CENTER',\n RIGHT_TOP: 'RIGHT_TOP',\n RIGHT_BOTTOM: 'RIGHT_BOTTOM',\n RIGHT_CENTER: 'RIGHT_CENTER',\n LEFT_TOP: 'LEFT_TOP',\n LEFT_BOTTOM: 'LEFT_BOTTOM',\n LEFT_CENTER: 'LEFT_CENTER'\n};\n\n/**\n * When positioning a popup, directions will be tried in the listed order.\n * @type {Array.}\n */\nexport const DEFAULT_DIRECTIONS = [\n Directions.BOTTOM_RIGHT, Directions.BOTTOM_LEFT, Directions.TOP_LEFT, Directions.TOP_RIGHT,\n Directions.RIGHT_TOP, Directions.RIGHT_BOTTOM, Directions.LEFT_TOP, Directions.LEFT_BOTTOM\n];\n\n/**\n * @enum {number}\n */\nexport const Dimension = {\n MARGIN: 16,\n BORDER_WIDTH: 1\n};\n\nexport const MinWidth = {\n TARGET: -1\n};\n\nexport const MaxHeight = {\n SCREEN: -1\n};\n\nexport const Display = {\n HIDDEN: 0,\n SHOWING: 1,\n SHOWN: 2\n};\n\nfunction getScrollingCoordinates(container) {\n if (container !== null) {\n return {\n top: container.scrollTop,\n left: container.scrollLeft\n };\n }\n\n return {\n top: getDocumentScrollTop(),\n left: getDocumentScrollLeft()\n };\n}\n\nfunction getPositionStyles(popup, anchorRect, anchorLeft, anchorTop, offset) {\n const popupWidth = popup.clientWidth;\n const popupHeight = popup.clientHeight;\n\n const anchorBottom = anchorTop + anchorRect.height;\n const anchorRight = anchorLeft + anchorRect.width;\n\n const popupLeft = anchorLeft - popupWidth;\n const popupTop = anchorTop - popupHeight;\n const popupRightToLeft = anchorRight - popupWidth;\n const popupHorizontalCenter = anchorLeft + anchorRect.width / 2 - popupWidth / 2;\n const popupVerticalCenter = anchorTop + anchorRect.height / 2 - popupHeight / 2;\n const popupBottomToTop = anchorBottom - popupHeight;\n\n return {\n [Directions.BOTTOM_RIGHT]: {left: anchorLeft, top: anchorBottom + offset},\n [Directions.BOTTOM_LEFT]: {left: popupRightToLeft, top: anchorBottom + offset},\n [Directions.BOTTOM_CENTER]: {left: popupHorizontalCenter, top: anchorBottom + offset},\n [Directions.TOP_RIGHT]: {left: anchorLeft, top: popupTop - offset},\n [Directions.TOP_LEFT]: {left: popupRightToLeft, top: popupTop - offset},\n [Directions.TOP_CENTER]: {left: popupHorizontalCenter, top: popupTop - offset},\n [Directions.LEFT_BOTTOM]: {left: popupLeft - offset, top: anchorTop},\n [Directions.LEFT_TOP]: {left: popupLeft - offset, top: popupBottomToTop},\n [Directions.LEFT_CENTER]: {left: popupLeft - offset, top: popupVerticalCenter},\n [Directions.RIGHT_BOTTOM]: {left: anchorRight + offset, top: anchorTop},\n [Directions.RIGHT_TOP]: {left: anchorRight + offset, top: popupBottomToTop},\n [Directions.RIGHT_CENTER]: {left: anchorRight + offset, top: popupVerticalCenter}\n };\n}\n\nfunction verticalOverflow(styles, scrollingCoordinates, attrs) {\n const containerHeight = attrs.container !== null\n ? attrs.container.clientHeight\n : getWindowHeight();\n const viewportMinX = scrollingCoordinates.top + attrs.sidePadding;\n const viewportMaxX = scrollingCoordinates.top + containerHeight - attrs.sidePadding;\n\n const topOverflow = Math.max(viewportMinX - styles.top, 0);\n\n const popupHeight = attrs.popup.clientHeight;\n const verticalDiff = styles.top + popupHeight - viewportMaxX;\n const bottomOverflow = Math.max(verticalDiff, 0);\n\n return topOverflow + bottomOverflow;\n}\n\nfunction horizontalOverflow(styles, scrollingCoordinates, attrs) {\n const containerWidth = attrs.container !== null ? attrs.container.clientWidth : window.innerWidth;\n const viewportMinY = scrollingCoordinates.left + attrs.sidePadding;\n const viewportMaxY = scrollingCoordinates.left + containerWidth - attrs.sidePadding;\n\n const leftOverflow = Math.max(viewportMinY - styles.left, 0);\n\n const popupWidth = attrs.popup.clientWidth;\n const horizontalDiff = styles.left + popupWidth - viewportMaxY;\n const rightOverflow = Math.max(horizontalDiff, 0);\n\n return leftOverflow + rightOverflow;\n}\n\nexport const positionPropKeys = [\n 'directions',\n 'autoPositioning',\n 'autoCorrectTopOverflow',\n 'sidePadding',\n 'top',\n 'left',\n 'offset',\n 'maxHeight',\n 'minWidth'\n];\n\nconst defaultcontainerRect = {\n top: 0,\n left: 0\n};\n\nfunction handleTopOffScreen({\n sidePadding, styles, anchorRect, maxHeight, popupScrollHeight, direction\n}) {\n const BORDER_COMPENSATION = 1;\n const {TOP_LEFT, TOP_RIGHT, TOP_CENTER, RIGHT_TOP, LEFT_TOP} = Directions;\n\n const openedToTop = [TOP_LEFT, TOP_RIGHT, TOP_CENTER, RIGHT_TOP, LEFT_TOP].includes(direction);\n\n if (!openedToTop) {\n return styles;\n }\n\n const isAttachedToAnchorTop = [TOP_LEFT, TOP_CENTER, TOP_RIGHT].includes(direction);\n const attachingPointY = (isAttachedToAnchorTop ? anchorRect.top : anchorRect.bottom);\n\n const effectiveHeight = maxHeight ? Math.min(popupScrollHeight, maxHeight) : popupScrollHeight;\n const hypotheticalTop = attachingPointY - effectiveHeight;\n\n if (hypotheticalTop <= sidePadding) {\n styles.top = sidePadding;\n styles.maxHeight = attachingPointY - sidePadding + BORDER_COMPENSATION;\n }\n\n return styles;\n}\n\n\nexport function maxHeightForDirection(direction, anchorNode, containerNode) {\n const container = containerNode || document.documentElement;\n const domRect = anchorNode.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n const topMaxHeight = Math.max(domRect.top - containerRect.top, 0);\n const containerHeight = Math.max(containerRect.height,\n // XXX\n // If container is the document element\n // then we check client height too because we may have situation when\n // \"height\" from \"getBoundingClientRect\" less then \"clientHeight\".\n container === document.documentElement ? container.clientHeight : 0);\n const bottomMaxHeight = Math.max(containerHeight - (topMaxHeight + domRect.height), 0);\n switch (direction) {\n case Directions.TOP_LEFT:\n case Directions.TOP_CENTER:\n case Directions.TOP_RIGHT:\n return topMaxHeight;\n case Directions.BOTTOM_LEFT:\n case Directions.BOTTOM_CENTER:\n case Directions.BOTTOM_RIGHT:\n return bottomMaxHeight;\n case Directions.LEFT_BOTTOM:\n case Directions.RIGHT_BOTTOM:\n return domRect.height + bottomMaxHeight;\n case Directions.LEFT_TOP:\n case Directions.RIGHT_TOP:\n return domRect.height + topMaxHeight;\n case Directions.RIGHT_CENTER:\n case Directions.LEFT_CENTER:\n return (domRect.height / 2) + Math.min(bottomMaxHeight / 2, topMaxHeight / 2);\n default:\n return null;\n }\n}\n\nexport default function position(attrs) {\n const {\n popup,\n anchor,\n container,\n directions,\n autoPositioning,\n sidePadding,\n top,\n left,\n offset,\n maxHeight,\n minWidth,\n autoCorrectTopOverflow = true\n } = attrs;\n\n let styles = {\n top: 0,\n left: 0\n };\n let chosenDirection = null;\n\n const containerRect = container !== null ? getRect(container) : defaultcontainerRect;\n const defaultAnchor = container !== null ? container : document.body;\n const anchorRect = getRect(isMounted(anchor) ? anchor : defaultAnchor);\n const scroll = getScrollingCoordinates(container);\n const anchorLeft = anchorRect.left + scroll.left + left - containerRect.left;\n const anchorTop = anchorRect.top + scroll.top + top - containerRect.top;\n\n if (popup) {\n const directionsMatrix = getPositionStyles(popup, anchorRect, anchorLeft, anchorTop, offset);\n if (!autoPositioning || directions.length === 1) {\n styles = directionsMatrix[directions[0]];\n chosenDirection = directions[0];\n } else {\n const sortedByIncreasingOverflow = directions.\n // Fall back to the first option\n concat(directions[0]).filter(direction => directionsMatrix[direction]).\n map(direction => ({styles: directionsMatrix[direction], direction})).\n sort(({styles: stylesA}, {styles: stylesB}) => {\n const overflowA =\n verticalOverflow(stylesA, scroll, attrs) +\n horizontalOverflow(stylesA, scroll, attrs);\n const overflowB =\n verticalOverflow(stylesB, scroll, attrs) +\n horizontalOverflow(stylesB, scroll, attrs);\n return overflowA - overflowB;\n });\n styles = sortedByIncreasingOverflow[0].styles;\n chosenDirection = sortedByIncreasingOverflow[0].direction;\n }\n\n // because of the anchor negative margin top and left also may become negative\n ['left', 'top'].forEach(key => {\n if (styles[key] < 0) {\n styles[key] = 0;\n }\n });\n }\n\n if (maxHeight === MaxHeight.SCREEN || maxHeight === 'screen') {\n // this feature works properly only when direction is BOTTOM_* or *_BOTTOM\n styles.maxHeight = window.innerHeight + scroll.top - styles.top - Dimension.MARGIN;\n } else if (maxHeight) {\n styles.maxHeight = maxHeight;\n }\n\n if (autoCorrectTopOverflow) {\n styles = handleTopOffScreen({\n sidePadding,\n styles,\n anchorRect,\n maxHeight,\n direction: chosenDirection,\n popupScrollHeight: popup.scrollHeight\n });\n }\n\n if (minWidth === MinWidth.TARGET || minWidth === 'target') {\n styles.minWidth = anchorRect.width;\n } else if (minWidth) {\n styles.minWidth = anchorRect.width < minWidth ? minWidth : anchorRect.width;\n }\n\n return {styles, direction: chosenDirection};\n}\n","/**\n * @name Popup\n */\n\nimport React, {createContext, forwardRef, PureComponent} from 'react';\nimport {createPortal} from 'react-dom';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport 'dom4';\n\nimport getUID from '../global/get-uid';\nimport scheduleRAF from '../global/schedule-raf';\nimport {Listeners, getStyles} from '../global/dom';\nimport Shortcuts from '../shortcuts/shortcuts';\nimport dataTests from '../global/data-tests';\n\nimport position, {\n DEFAULT_DIRECTIONS,\n Dimension,\n Directions,\n Display,\n MaxHeight,\n MinWidth,\n positionPropKeys\n} from './position';\nimport styles from './popup.css';\n\nconst stop = e => e.stopPropagation();\n\nconst PopupTargetContext = createContext();\nexport const PopupTarget = forwardRef(\n function PopupTarget({id, children, ...restProps}, ref) {\n const isFunctionChild = typeof children === 'function';\n const target = (\n \n {!isFunctionChild && children}\n \n );\n return (\n \n {isFunctionChild ? children(target) : target}\n \n );\n }\n);\nPopupTarget.propTypes = {\n id: PropTypes.string.isRequired,\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func])\n};\n\n/**\n * @constructor\n * @name Popup\n * @extends {ReactComponent}\n */\nexport default class Popup extends PureComponent {\n static propTypes = {\n anchorElement: PropTypes.instanceOf(Node),\n target: PropTypes.string,\n className: PropTypes.string,\n style: PropTypes.object,\n hidden: PropTypes.bool.isRequired,\n onOutsideClick: PropTypes.func,\n onEscPress: PropTypes.func,\n // onCloseAttempt is a common callback for ESC pressing and outside clicking.\n // Use it if you don't need different behaviors for this cases.\n onCloseAttempt: PropTypes.func,\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node\n ]),\n dontCloseOnAnchorClick: PropTypes.bool,\n shortcuts: PropTypes.bool,\n keepMounted: PropTypes.bool, // pass this prop to preserve the popup's DOM state while hidden\n 'data-test': PropTypes.string,\n client: PropTypes.bool, // true means that it's never used in SSR\n\n directions: PropTypes.arrayOf(PropTypes.string),\n autoPositioning: PropTypes.bool,\n autoCorrectTopOverflow: PropTypes.bool,\n left: PropTypes.number,\n top: PropTypes.number,\n maxHeight: PropTypes.number,\n minWidth: PropTypes.number,\n sidePadding: PropTypes.number,\n\n attached: PropTypes.bool, // Popup adjacent to an input, without upper border and shadow\n\n onMouseDown: PropTypes.func,\n onMouseUp: PropTypes.func,\n onMouseOver: PropTypes.func,\n onMouseOut: PropTypes.func,\n onContextMenu: PropTypes.func,\n onDirectionChange: PropTypes.func,\n onShow: PropTypes.func\n };\n\n static defaultProps = {\n shortcuts: true,\n hidden: false,\n onOutsideClick() {},\n onEscPress() {},\n onCloseAttempt() {},\n dontCloseOnAnchorClick: false,\n keepMounted: false,\n\n directions: DEFAULT_DIRECTIONS,\n autoPositioning: true,\n autoCorrectTopOverflow: true,\n left: 0,\n top: 0,\n offset: 0,\n sidePadding: 8,\n\n attached: false,\n\n legacy: false\n };\n\n state = {\n display: Display.SHOWING\n };\n\n componentDidMount() {\n if (!this.props.client) {\n // eslint-disable-next-line react/no-did-mount-set-state\n this.setState({client: true});\n }\n if (!this.props.hidden) {\n this._setListenersEnabled(true);\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n const {hidden} = this.props;\n if (this.props !== prevProps) {\n\n if (prevProps.hidden !== hidden) {\n this._setListenersEnabled(!hidden);\n }\n\n this._redraw();\n }\n\n if (\n this.props.onShow &&\n !hidden &&\n this.state.display === Display.SHOWN &&\n (prevProps.hidden || prevState.display !== Display.SHOWN)\n ) {\n this.props.onShow();\n }\n }\n\n componentWillUnmount() {\n this._setListenersEnabled(false);\n this.popup = null;\n }\n\n shouldUseShortcuts() {\n const {shortcuts, hidden} = this.props;\n return shortcuts && !hidden;\n }\n\n listeners = new Listeners();\n redrawScheduler = scheduleRAF(true);\n uid = getUID('popup-');\n calculateDisplay = prevState => ({\n ...prevState,\n display: this.props.hidden\n ? Display.SHOWING\n : Display.SHOWN\n });\n\n static PopupProps = {\n Directions,\n Dimension,\n MinWidth,\n MaxHeight\n };\n\n portalRef = el => {\n this.node = el;\n this.parent = el && el.parentElement;\n if (el && this.getContainer()) {\n this._redraw();\n }\n };\n\n popupRef = el => {\n this.popup = el;\n this._redraw();\n };\n\n containerRef = el => {\n this.container = el;\n };\n\n getContainer() {\n const target = this.props.target || this.ringPopupTarget;\n return target && document.querySelector(`[data-portaltarget=${target}]`);\n }\n\n position() {\n const positionProps = positionPropKeys.reduce((acc, key) => {\n acc[key] = this.props[key];\n return acc;\n }, {});\n const container = this.getContainer();\n\n return position({\n popup: this.popup,\n container: container && getStyles(container).position !== 'static' ? container : null,\n anchor: this._getAnchor(),\n ...positionProps\n });\n }\n\n _updateDirection = newDirection => {\n if (this.state.direction !== newDirection) {\n this.setState({direction: newDirection});\n if (this.props.onDirectionChange) {\n this.props.onDirectionChange(newDirection);\n }\n }\n };\n\n _updatePosition = () => {\n if (this.popup) {\n this.popup.style.position = 'absolute';\n if (this.isVisible()) {\n const {styles: style, direction} = this.position();\n Object.keys(style).forEach(key => {\n const value = style[key];\n if (typeof value === 'number') {\n this.popup.style[key] = `${value}px`;\n } else {\n this.popup.style[key] = value.toString();\n }\n });\n this._updateDirection(direction);\n }\n this.setState(this.calculateDisplay);\n }\n };\n\n _redraw = () => {\n if (this.isVisible()) {\n this.redrawScheduler(this._updatePosition);\n }\n };\n\n _getAnchor() {\n return this.props.anchorElement || this.parent;\n }\n\n /**\n * @param {boolean} enable\n * @private\n */\n _setListenersEnabled(enable) {\n if (enable && !this._listenersEnabled) {\n setTimeout(() => {\n this._listenersEnabled = true;\n this.listeners.add(window, 'resize', this._redraw);\n this.listeners.add(window, 'scroll', this._redraw);\n this.listeners.add(document, 'click', this._onDocumentClick);\n let el = this._getAnchor();\n while (el) {\n this.listeners.add(el, 'scroll', this._redraw);\n el = el.parentElement;\n }\n }, 0);\n\n return;\n }\n\n if (!enable && this._listenersEnabled) {\n this.listeners.removeAll();\n this._listenersEnabled = false;\n }\n }\n\n /**\n * Returns visibility state\n * @return {boolean}\n */\n isVisible() {\n return !this.props.hidden;\n }\n\n _onCloseAttempt(evt, isEsc) {\n this.props.onCloseAttempt(evt, isEsc);\n }\n\n _onEscPress = evt => {\n this.props.onEscPress(evt);\n this._onCloseAttempt(evt, true);\n };\n\n /**\n * @param {jQuery.Event} evt\n * @private\n */\n _onDocumentClick = evt => {\n if (\n this.container && this.container.contains(evt.target) ||\n !this._listenersEnabled ||\n (\n this.props.dontCloseOnAnchorClick &&\n this._getAnchor() &&\n this._getAnchor().contains(evt.target)\n )\n ) {\n return;\n }\n\n this.props.onOutsideClick(evt);\n this._onCloseAttempt(evt, false);\n };\n\n getInternalContent() {\n return this.props.children;\n }\n\n shortcutsScope = this.uid;\n shortcutsMap = {\n esc: this._onEscPress\n };\n\n render() {\n const {\n className, style, hidden, attached, keepMounted, client,\n onMouseDown, onMouseUp, onMouseOver, onMouseOut, onContextMenu, 'data-test': dataTest\n } = this.props;\n const showing = this.state.display === Display.SHOWING;\n\n const classes = classNames(className, styles.popup, {\n [styles.attached]: attached,\n [styles.hidden]: hidden,\n [styles.showing]: showing\n });\n\n const direction = (this.state.direction || '').\n toLowerCase().replace(/[_]/g, '-');\n\n return (\n \n {value => {\n this.ringPopupTarget = value;\n return (\n \n {this.shouldUseShortcuts() &&\n (\n \n )\n }\n\n {(client || this.state.client) && (keepMounted || !hidden) && createPortal(\n \n \n {this.getInternalContent()}\n \n ,\n this.getContainer() || document.body\n )}\n \n );\n }}\n \n );\n }\n}\n","function toVal(mix) {\n\tvar k, y, str='';\n\tif (mix) {\n\t\tif (typeof mix === 'object') {\n\t\t\tif (Array.isArray(mix)) {\n\t\t\t\tfor (k=0; k < mix.length; k++) {\n\t\t\t\t\tif (mix[k] && (y = toVal(mix[k]))) {\n\t\t\t\t\t\tstr && (str += ' ');\n\t\t\t\t\t\tstr += y;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (k in mix) {\n\t\t\t\t\tif (mix[k] && (y = toVal(k))) {\n\t\t\t\t\t\tstr && (str += ' ');\n\t\t\t\t\t\tstr += y;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (typeof mix !== 'boolean' && !mix.call) {\n\t\t\tstr && (str += ' ');\n\t\t\tstr += mix;\n\t\t}\n\t}\n\treturn str;\n}\n\nexport default function () {\n\tvar i=0, x, str='';\n\twhile (i < arguments.length) {\n\t\tif (x = toVal(arguments[i++])) {\n\t\t\tstr && (str += ' ');\n\t\t\tstr += x\n\t\t}\n\t}\n\treturn str;\n}\n","\n\nexport default function calculateSizeAndPositionDataAndUpdateScrollOffset(_ref) {\n var cellCount = _ref.cellCount,\n cellSize = _ref.cellSize,\n computeMetadataCallback = _ref.computeMetadataCallback,\n computeMetadataCallbackProps = _ref.computeMetadataCallbackProps,\n nextCellsCount = _ref.nextCellsCount,\n nextCellSize = _ref.nextCellSize,\n nextScrollToIndex = _ref.nextScrollToIndex,\n scrollToIndex = _ref.scrollToIndex,\n updateScrollOffsetForScrollToIndex = _ref.updateScrollOffsetForScrollToIndex;\n\n // Don't compare cell sizes if they are functions because inline functions would cause infinite loops.\n // In that event users should use the manual recompute methods to inform of changes.\n if (cellCount !== nextCellsCount || (typeof cellSize === 'number' || typeof nextCellSize === 'number') && cellSize !== nextCellSize) {\n computeMetadataCallback(computeMetadataCallbackProps);\n\n // Updated cell metadata may have hidden the previous scrolled-to item.\n // In this case we should also update the scrollTop to ensure it stays visible.\n if (scrollToIndex >= 0 && scrollToIndex === nextScrollToIndex) {\n updateScrollOffsetForScrollToIndex();\n }\n }\n}\n\n/**\n * Helper method that determines when to recalculate row or column metadata.\n */","import _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\n\n/**\n * Just-in-time calculates and caches size and position information for a collection of cells.\n */\n\nvar CellSizeAndPositionManager = function () {\n\n // Used in deferred mode to track which cells have been queued for measurement.\n\n // Cache of size and position data for cells, mapped by cell index.\n // Note that invalid values may exist in this map so only rely on cells up to this._lastMeasuredIndex\n function CellSizeAndPositionManager(_ref) {\n var cellCount = _ref.cellCount,\n cellSizeGetter = _ref.cellSizeGetter,\n estimatedCellSize = _ref.estimatedCellSize;\n\n _classCallCheck(this, CellSizeAndPositionManager);\n\n this._cellSizeAndPositionData = {};\n this._lastMeasuredIndex = -1;\n this._lastBatchedIndex = -1;\n\n this._cellSizeGetter = cellSizeGetter;\n this._cellCount = cellCount;\n this._estimatedCellSize = estimatedCellSize;\n }\n\n // Measurements for cells up to this index can be trusted; cells afterward should be estimated.\n\n\n _createClass(CellSizeAndPositionManager, [{\n key: 'areOffsetsAdjusted',\n value: function areOffsetsAdjusted() {\n return false;\n }\n }, {\n key: 'configure',\n value: function configure(_ref2) {\n var cellCount = _ref2.cellCount,\n estimatedCellSize = _ref2.estimatedCellSize,\n cellSizeGetter = _ref2.cellSizeGetter;\n\n this._cellCount = cellCount;\n this._estimatedCellSize = estimatedCellSize;\n this._cellSizeGetter = cellSizeGetter;\n }\n }, {\n key: 'getCellCount',\n value: function getCellCount() {\n return this._cellCount;\n }\n }, {\n key: 'getEstimatedCellSize',\n value: function getEstimatedCellSize() {\n return this._estimatedCellSize;\n }\n }, {\n key: 'getLastMeasuredIndex',\n value: function getLastMeasuredIndex() {\n return this._lastMeasuredIndex;\n }\n }, {\n key: 'getOffsetAdjustment',\n value: function getOffsetAdjustment() {\n return 0;\n }\n\n /**\n * This method returns the size and position for the cell at the specified index.\n * It just-in-time calculates (or used cached values) for cells leading up to the index.\n */\n\n }, {\n key: 'getSizeAndPositionOfCell',\n value: function getSizeAndPositionOfCell(index) {\n if (index < 0 || index >= this._cellCount) {\n throw Error('Requested index ' + index + ' is outside of range 0..' + this._cellCount);\n }\n\n if (index > this._lastMeasuredIndex) {\n var lastMeasuredCellSizeAndPosition = this.getSizeAndPositionOfLastMeasuredCell();\n var _offset = lastMeasuredCellSizeAndPosition.offset + lastMeasuredCellSizeAndPosition.size;\n\n for (var i = this._lastMeasuredIndex + 1; i <= index; i++) {\n var _size = this._cellSizeGetter({ index: i });\n\n // undefined or NaN probably means a logic error in the size getter.\n // null means we're using CellMeasurer and haven't yet measured a given index.\n if (_size === undefined || isNaN(_size)) {\n throw Error('Invalid size returned for cell ' + i + ' of value ' + _size);\n } else if (_size === null) {\n this._cellSizeAndPositionData[i] = {\n offset: _offset,\n size: 0\n };\n\n this._lastBatchedIndex = index;\n } else {\n this._cellSizeAndPositionData[i] = {\n offset: _offset,\n size: _size\n };\n\n _offset += _size;\n\n this._lastMeasuredIndex = index;\n }\n }\n }\n\n return this._cellSizeAndPositionData[index];\n }\n }, {\n key: 'getSizeAndPositionOfLastMeasuredCell',\n value: function getSizeAndPositionOfLastMeasuredCell() {\n return this._lastMeasuredIndex >= 0 ? this._cellSizeAndPositionData[this._lastMeasuredIndex] : {\n offset: 0,\n size: 0\n };\n }\n\n /**\n * Total size of all cells being measured.\n * This value will be completely estimated initially.\n * As cells are measured, the estimate will be updated.\n */\n\n }, {\n key: 'getTotalSize',\n value: function getTotalSize() {\n var lastMeasuredCellSizeAndPosition = this.getSizeAndPositionOfLastMeasuredCell();\n var totalSizeOfMeasuredCells = lastMeasuredCellSizeAndPosition.offset + lastMeasuredCellSizeAndPosition.size;\n var numUnmeasuredCells = this._cellCount - this._lastMeasuredIndex - 1;\n var totalSizeOfUnmeasuredCells = numUnmeasuredCells * this._estimatedCellSize;\n return totalSizeOfMeasuredCells + totalSizeOfUnmeasuredCells;\n }\n\n /**\n * Determines a new offset that ensures a certain cell is visible, given the current offset.\n * If the cell is already visible then the current offset will be returned.\n * If the current offset is too great or small, it will be adjusted just enough to ensure the specified index is visible.\n *\n * @param align Desired alignment within container; one of \"auto\" (default), \"start\", or \"end\"\n * @param containerSize Size (width or height) of the container viewport\n * @param currentOffset Container's current (x or y) offset\n * @param totalSize Total size (width or height) of all cells\n * @return Offset to use to ensure the specified cell is visible\n */\n\n }, {\n key: 'getUpdatedOffsetForIndex',\n value: function getUpdatedOffsetForIndex(_ref3) {\n var _ref3$align = _ref3.align,\n align = _ref3$align === undefined ? 'auto' : _ref3$align,\n containerSize = _ref3.containerSize,\n currentOffset = _ref3.currentOffset,\n targetIndex = _ref3.targetIndex;\n\n if (containerSize <= 0) {\n return 0;\n }\n\n var datum = this.getSizeAndPositionOfCell(targetIndex);\n var maxOffset = datum.offset;\n var minOffset = maxOffset - containerSize + datum.size;\n\n var idealOffset = void 0;\n\n switch (align) {\n case 'start':\n idealOffset = maxOffset;\n break;\n case 'end':\n idealOffset = minOffset;\n break;\n case 'center':\n idealOffset = maxOffset - (containerSize - datum.size) / 2;\n break;\n default:\n idealOffset = Math.max(minOffset, Math.min(maxOffset, currentOffset));\n break;\n }\n\n var totalSize = this.getTotalSize();\n\n return Math.max(0, Math.min(totalSize - containerSize, idealOffset));\n }\n }, {\n key: 'getVisibleCellRange',\n value: function getVisibleCellRange(params) {\n var containerSize = params.containerSize,\n offset = params.offset;\n\n\n var totalSize = this.getTotalSize();\n\n if (totalSize === 0) {\n return {};\n }\n\n var maxOffset = offset + containerSize;\n var start = this._findNearestCell(offset);\n\n var datum = this.getSizeAndPositionOfCell(start);\n offset = datum.offset + datum.size;\n\n var stop = start;\n\n while (offset < maxOffset && stop < this._cellCount - 1) {\n stop++;\n\n offset += this.getSizeAndPositionOfCell(stop).size;\n }\n\n return {\n start: start,\n stop: stop\n };\n }\n\n /**\n * Clear all cached values for cells after the specified index.\n * This method should be called for any cell that has changed its size.\n * It will not immediately perform any calculations; they'll be performed the next time getSizeAndPositionOfCell() is called.\n */\n\n }, {\n key: 'resetCell',\n value: function resetCell(index) {\n this._lastMeasuredIndex = Math.min(this._lastMeasuredIndex, index - 1);\n }\n }, {\n key: '_binarySearch',\n value: function _binarySearch(high, low, offset) {\n while (low <= high) {\n var middle = low + Math.floor((high - low) / 2);\n var _currentOffset = this.getSizeAndPositionOfCell(middle).offset;\n\n if (_currentOffset === offset) {\n return middle;\n } else if (_currentOffset < offset) {\n low = middle + 1;\n } else if (_currentOffset > offset) {\n high = middle - 1;\n }\n }\n\n if (low > 0) {\n return low - 1;\n } else {\n return 0;\n }\n }\n }, {\n key: '_exponentialSearch',\n value: function _exponentialSearch(index, offset) {\n var interval = 1;\n\n while (index < this._cellCount && this.getSizeAndPositionOfCell(index).offset < offset) {\n index += interval;\n interval *= 2;\n }\n\n return this._binarySearch(Math.min(index, this._cellCount - 1), Math.floor(index / 2), offset);\n }\n\n /**\n * Searches for the cell (index) nearest the specified offset.\n *\n * If no exact match is found the next lowest cell index will be returned.\n * This allows partially visible cells (with offsets just before/above the fold) to be visible.\n */\n\n }, {\n key: '_findNearestCell',\n value: function _findNearestCell(offset) {\n if (isNaN(offset)) {\n throw Error('Invalid offset ' + offset + ' specified');\n }\n\n // Our search algorithms find the nearest match at or below the specified offset.\n // So make sure the offset is at least 0 or no match will be found.\n offset = Math.max(0, offset);\n\n var lastMeasuredCellSizeAndPosition = this.getSizeAndPositionOfLastMeasuredCell();\n var lastMeasuredIndex = Math.max(0, this._lastMeasuredIndex);\n\n if (lastMeasuredCellSizeAndPosition.offset >= offset) {\n // If we've already measured cells within this range just use a binary search as it's faster.\n return this._binarySearch(lastMeasuredIndex, 0, offset);\n } else {\n // If we haven't yet measured this high, fallback to an exponential search with an inner binary search.\n // The exponential search avoids pre-computing sizes for the full set of cells as a binary search would.\n // The overall complexity for this approach is O(log n).\n return this._exponentialSearch(lastMeasuredIndex, offset);\n }\n }\n }]);\n\n return CellSizeAndPositionManager;\n}();\n\nexport default CellSizeAndPositionManager;\nimport { bpfrpt_proptype_Alignment } from '../types';\nimport { bpfrpt_proptype_CellSizeGetter } from '../types';\nimport { bpfrpt_proptype_VisibleCellRange } from '../types';","var DEFAULT_MAX_ELEMENT_SIZE = 1500000;\nvar CHROME_MAX_ELEMENT_SIZE = 1.67771e7;\n\nvar isBrowser = function isBrowser() {\n return typeof window !== 'undefined';\n};\n\nvar isChrome = function isChrome() {\n return !!window.chrome;\n};\n\nexport var getMaxElementSize = function getMaxElementSize() {\n if (isBrowser()) {\n if (isChrome()) {\n return CHROME_MAX_ELEMENT_SIZE;\n }\n }\n return DEFAULT_MAX_ELEMENT_SIZE;\n};","import _objectWithoutProperties from 'babel-runtime/helpers/objectWithoutProperties';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\n\n\nimport CellSizeAndPositionManager from './CellSizeAndPositionManager';\n\nimport { getMaxElementSize } from './maxElementSize.js';\n\n/**\n * Browsers have scroll offset limitations (eg Chrome stops scrolling at ~33.5M pixels where as Edge tops out at ~1.5M pixels).\n * After a certain position, the browser won't allow the user to scroll further (even via JavaScript scroll offset adjustments).\n * This util picks a lower ceiling for max size and artificially adjusts positions within to make it transparent for users.\n */\n\n/**\n * Extends CellSizeAndPositionManager and adds scaling behavior for lists that are too large to fit within a browser's native limits.\n */\nvar ScalingCellSizeAndPositionManager = function () {\n function ScalingCellSizeAndPositionManager(_ref) {\n var _ref$maxScrollSize = _ref.maxScrollSize,\n maxScrollSize = _ref$maxScrollSize === undefined ? getMaxElementSize() : _ref$maxScrollSize,\n params = _objectWithoutProperties(_ref, ['maxScrollSize']);\n\n _classCallCheck(this, ScalingCellSizeAndPositionManager);\n\n // Favor composition over inheritance to simplify IE10 support\n this._cellSizeAndPositionManager = new CellSizeAndPositionManager(params);\n this._maxScrollSize = maxScrollSize;\n }\n\n _createClass(ScalingCellSizeAndPositionManager, [{\n key: 'areOffsetsAdjusted',\n value: function areOffsetsAdjusted() {\n return this._cellSizeAndPositionManager.getTotalSize() > this._maxScrollSize;\n }\n }, {\n key: 'configure',\n value: function configure(params) {\n this._cellSizeAndPositionManager.configure(params);\n }\n }, {\n key: 'getCellCount',\n value: function getCellCount() {\n return this._cellSizeAndPositionManager.getCellCount();\n }\n }, {\n key: 'getEstimatedCellSize',\n value: function getEstimatedCellSize() {\n return this._cellSizeAndPositionManager.getEstimatedCellSize();\n }\n }, {\n key: 'getLastMeasuredIndex',\n value: function getLastMeasuredIndex() {\n return this._cellSizeAndPositionManager.getLastMeasuredIndex();\n }\n\n /**\n * Number of pixels a cell at the given position (offset) should be shifted in order to fit within the scaled container.\n * The offset passed to this function is scaled (safe) as well.\n */\n\n }, {\n key: 'getOffsetAdjustment',\n value: function getOffsetAdjustment(_ref2) {\n var containerSize = _ref2.containerSize,\n offset = _ref2.offset;\n\n var totalSize = this._cellSizeAndPositionManager.getTotalSize();\n var safeTotalSize = this.getTotalSize();\n var offsetPercentage = this._getOffsetPercentage({\n containerSize: containerSize,\n offset: offset,\n totalSize: safeTotalSize\n });\n\n return Math.round(offsetPercentage * (safeTotalSize - totalSize));\n }\n }, {\n key: 'getSizeAndPositionOfCell',\n value: function getSizeAndPositionOfCell(index) {\n return this._cellSizeAndPositionManager.getSizeAndPositionOfCell(index);\n }\n }, {\n key: 'getSizeAndPositionOfLastMeasuredCell',\n value: function getSizeAndPositionOfLastMeasuredCell() {\n return this._cellSizeAndPositionManager.getSizeAndPositionOfLastMeasuredCell();\n }\n\n /** See CellSizeAndPositionManager#getTotalSize */\n\n }, {\n key: 'getTotalSize',\n value: function getTotalSize() {\n return Math.min(this._maxScrollSize, this._cellSizeAndPositionManager.getTotalSize());\n }\n\n /** See CellSizeAndPositionManager#getUpdatedOffsetForIndex */\n\n }, {\n key: 'getUpdatedOffsetForIndex',\n value: function getUpdatedOffsetForIndex(_ref3) {\n var _ref3$align = _ref3.align,\n align = _ref3$align === undefined ? 'auto' : _ref3$align,\n containerSize = _ref3.containerSize,\n currentOffset = _ref3.currentOffset,\n targetIndex = _ref3.targetIndex;\n\n currentOffset = this._safeOffsetToOffset({\n containerSize: containerSize,\n offset: currentOffset\n });\n\n var offset = this._cellSizeAndPositionManager.getUpdatedOffsetForIndex({\n align: align,\n containerSize: containerSize,\n currentOffset: currentOffset,\n targetIndex: targetIndex\n });\n\n return this._offsetToSafeOffset({\n containerSize: containerSize,\n offset: offset\n });\n }\n\n /** See CellSizeAndPositionManager#getVisibleCellRange */\n\n }, {\n key: 'getVisibleCellRange',\n value: function getVisibleCellRange(_ref4) {\n var containerSize = _ref4.containerSize,\n offset = _ref4.offset;\n\n offset = this._safeOffsetToOffset({\n containerSize: containerSize,\n offset: offset\n });\n\n return this._cellSizeAndPositionManager.getVisibleCellRange({\n containerSize: containerSize,\n offset: offset\n });\n }\n }, {\n key: 'resetCell',\n value: function resetCell(index) {\n this._cellSizeAndPositionManager.resetCell(index);\n }\n }, {\n key: '_getOffsetPercentage',\n value: function _getOffsetPercentage(_ref5) {\n var containerSize = _ref5.containerSize,\n offset = _ref5.offset,\n totalSize = _ref5.totalSize;\n\n return totalSize <= containerSize ? 0 : offset / (totalSize - containerSize);\n }\n }, {\n key: '_offsetToSafeOffset',\n value: function _offsetToSafeOffset(_ref6) {\n var containerSize = _ref6.containerSize,\n offset = _ref6.offset;\n\n var totalSize = this._cellSizeAndPositionManager.getTotalSize();\n var safeTotalSize = this.getTotalSize();\n\n if (totalSize === safeTotalSize) {\n return offset;\n } else {\n var offsetPercentage = this._getOffsetPercentage({\n containerSize: containerSize,\n offset: offset,\n totalSize: totalSize\n });\n\n return Math.round(offsetPercentage * (safeTotalSize - containerSize));\n }\n }\n }, {\n key: '_safeOffsetToOffset',\n value: function _safeOffsetToOffset(_ref7) {\n var containerSize = _ref7.containerSize,\n offset = _ref7.offset;\n\n var totalSize = this._cellSizeAndPositionManager.getTotalSize();\n var safeTotalSize = this.getTotalSize();\n\n if (totalSize === safeTotalSize) {\n return offset;\n } else {\n var offsetPercentage = this._getOffsetPercentage({\n containerSize: containerSize,\n offset: offset,\n totalSize: safeTotalSize\n });\n\n return Math.round(offsetPercentage * (totalSize - containerSize));\n }\n }\n }]);\n\n return ScalingCellSizeAndPositionManager;\n}();\n\nexport default ScalingCellSizeAndPositionManager;\nimport { bpfrpt_proptype_Alignment } from '../types';\nimport { bpfrpt_proptype_CellSizeGetter } from '../types';\nimport { bpfrpt_proptype_VisibleCellRange } from '../types';","import _Object$keys from 'babel-runtime/core-js/object/keys';\n/**\n * Helper utility that updates the specified callback whenever any of the specified indices have changed.\n */\nexport default function createCallbackMemoizer() {\n var requireAllKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n var cachedIndices = {};\n\n return function (_ref) {\n var callback = _ref.callback,\n indices = _ref.indices;\n\n var keys = _Object$keys(indices);\n var allInitialized = !requireAllKeys || keys.every(function (key) {\n var value = indices[key];\n return Array.isArray(value) ? value.length > 0 : value >= 0;\n });\n var indexChanged = keys.length !== _Object$keys(cachedIndices).length || keys.some(function (key) {\n var cachedValue = cachedIndices[key];\n var value = indices[key];\n\n return Array.isArray(value) ? cachedValue.join(',') !== value.join(',') : cachedValue !== value;\n });\n\n cachedIndices = indices;\n\n if (allInitialized && indexChanged) {\n callback(indices);\n }\n };\n}","\n\nimport ScalingCellSizeAndPositionManager from './ScalingCellSizeAndPositionManager.js';\n\n/**\n * Helper function that determines when to update scroll offsets to ensure that a scroll-to-index remains visible.\n * This function also ensures that the scroll ofset isn't past the last column/row of cells.\n */\n\nexport default function updateScrollIndexHelper(_ref) {\n var cellSize = _ref.cellSize,\n cellSizeAndPositionManager = _ref.cellSizeAndPositionManager,\n previousCellsCount = _ref.previousCellsCount,\n previousCellSize = _ref.previousCellSize,\n previousScrollToAlignment = _ref.previousScrollToAlignment,\n previousScrollToIndex = _ref.previousScrollToIndex,\n previousSize = _ref.previousSize,\n scrollOffset = _ref.scrollOffset,\n scrollToAlignment = _ref.scrollToAlignment,\n scrollToIndex = _ref.scrollToIndex,\n size = _ref.size,\n sizeJustIncreasedFromZero = _ref.sizeJustIncreasedFromZero,\n updateScrollIndexCallback = _ref.updateScrollIndexCallback;\n\n var cellCount = cellSizeAndPositionManager.getCellCount();\n var hasScrollToIndex = scrollToIndex >= 0 && scrollToIndex < cellCount;\n var sizeHasChanged = size !== previousSize || sizeJustIncreasedFromZero || !previousCellSize || typeof cellSize === 'number' && cellSize !== previousCellSize;\n\n // If we have a new scroll target OR if height/row-height has changed,\n // We should ensure that the scroll target is visible.\n if (hasScrollToIndex && (sizeHasChanged || scrollToAlignment !== previousScrollToAlignment || scrollToIndex !== previousScrollToIndex)) {\n updateScrollIndexCallback(scrollToIndex);\n\n // If we don't have a selected item but list size or number of children have decreased,\n // Make sure we aren't scrolled too far past the current content.\n } else if (!hasScrollToIndex && cellCount > 0 && (size < previousSize || cellCount < previousCellsCount)) {\n // We need to ensure that the current scroll offset is still within the collection's range.\n // To do this, we don't need to measure everything; CellMeasurer would perform poorly.\n // Just check to make sure we're still okay.\n // Only adjust the scroll position if we've scrolled below the last set of rows.\n if (scrollOffset > cellSizeAndPositionManager.getTotalSize() - size) {\n updateScrollIndexCallback(cellCount - 1);\n }\n }\n}\nimport { bpfrpt_proptype_Alignment } from '../types';\nimport { bpfrpt_proptype_CellSize } from '../types';","export default !!(typeof window !== 'undefined' && window.document && window.document.createElement);","import canUseDOM from './canUseDOM';\nvar size;\nexport default function scrollbarSize(recalc) {\n if (!size && size !== 0 || recalc) {\n if (canUseDOM) {\n var scrollDiv = document.createElement('div');\n scrollDiv.style.position = 'absolute';\n scrollDiv.style.top = '-9999px';\n scrollDiv.style.width = '50px';\n scrollDiv.style.height = '50px';\n scrollDiv.style.overflow = 'scroll';\n document.body.appendChild(scrollDiv);\n size = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n document.body.removeChild(scrollDiv);\n }\n }\n\n return size;\n}","\n\n// Properly handle server-side rendering.\nvar win = void 0;\n\nif (typeof window !== 'undefined') {\n win = window;\n} else if (typeof self !== 'undefined') {\n win = self;\n} else {\n win = {};\n}\n\n// requestAnimationFrame() shim by Paul Irish\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\nvar request = win.requestAnimationFrame || win.webkitRequestAnimationFrame || win.mozRequestAnimationFrame || win.oRequestAnimationFrame || win.msRequestAnimationFrame || function (callback) {\n return win.setTimeout(callback, 1000 / 60);\n};\n\nvar cancel = win.cancelAnimationFrame || win.webkitCancelAnimationFrame || win.mozCancelAnimationFrame || win.oCancelAnimationFrame || win.msCancelAnimationFrame || function (id) {\n win.clearTimeout(id);\n};\n\nexport var raf = request;\nexport var caf = cancel;","import _Promise from 'babel-runtime/core-js/promise';\nimport { caf, raf } from './animationFrame';\n\nvar bpfrpt_proptype_AnimationTimeoutId = process.env.NODE_ENV === 'production' ? null : {\n id: PropTypes.number.isRequired\n};\n\n\nexport var cancelAnimationTimeout = function cancelAnimationTimeout(frame) {\n return caf(frame.id);\n};\n\n/**\n * Recursively calls requestAnimationFrame until a specified delay has been met or exceeded.\n * When the delay time has been reached the function you're timing out will be called.\n *\n * Credit: Joe Lambert (https://gist.github.com/joelambert/1002116#file-requesttimeout-js)\n */\nexport var requestAnimationTimeout = function requestAnimationTimeout(callback, delay) {\n var start = void 0;\n // wait for end of processing current event handler, because event handler may be long\n _Promise.resolve().then(function () {\n start = Date.now();\n });\n\n var timeout = function timeout() {\n if (Date.now() - start >= delay) {\n callback.call();\n } else {\n frame.id = raf(timeout);\n }\n };\n\n var frame = {\n id: raf(timeout)\n };\n\n return frame;\n};\nimport PropTypes from 'prop-types';\nexport { bpfrpt_proptype_AnimationTimeoutId };","import _Object$assign from 'babel-runtime/core-js/object/assign';\nimport _extends from 'babel-runtime/helpers/extends';\nimport _Object$getPrototypeOf from 'babel-runtime/core-js/object/get-prototype-of';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport * as React from 'react';\nimport clsx from 'clsx';\nimport calculateSizeAndPositionDataAndUpdateScrollOffset from './utils/calculateSizeAndPositionDataAndUpdateScrollOffset';\nimport ScalingCellSizeAndPositionManager from './utils/ScalingCellSizeAndPositionManager';\nimport createCallbackMemoizer from '../utils/createCallbackMemoizer';\nimport defaultOverscanIndicesGetter, { SCROLL_DIRECTION_BACKWARD, SCROLL_DIRECTION_FORWARD } from './defaultOverscanIndicesGetter';\nimport updateScrollIndexHelper from './utils/updateScrollIndexHelper';\nimport defaultCellRangeRenderer from './defaultCellRangeRenderer';\nimport scrollbarSize from 'dom-helpers/scrollbarSize';\nimport { polyfill } from 'react-lifecycles-compat';\nimport { requestAnimationTimeout, cancelAnimationTimeout } from '../utils/requestAnimationTimeout';\n\n/**\n * Specifies the number of milliseconds during which to disable pointer events while a scroll is in progress.\n * This improves performance and makes scrolling smoother.\n */\nexport var DEFAULT_SCROLLING_RESET_TIME_INTERVAL = 150;\n\n/**\n * Controls whether the Grid updates the DOM element's scrollLeft/scrollTop based on the current state or just observes it.\n * This prevents Grid from interrupting mouse-wheel animations (see issue #2).\n */\nvar SCROLL_POSITION_CHANGE_REASONS = {\n OBSERVED: 'observed',\n REQUESTED: 'requested'\n};\n\nvar renderNull = function renderNull() {\n return null;\n};\n\n/**\n * Renders tabular data with virtualization along the vertical and horizontal axes.\n * Row heights and column widths must be known ahead of time and specified as properties.\n */\nvar Grid = function (_React$PureComponent) {\n _inherits(Grid, _React$PureComponent);\n\n // Invokes onSectionRendered callback only when start/stop row or column indices change\n function Grid(props) {\n _classCallCheck(this, Grid);\n\n var _this = _possibleConstructorReturn(this, (Grid.__proto__ || _Object$getPrototypeOf(Grid)).call(this, props));\n\n _this._onGridRenderedMemoizer = createCallbackMemoizer();\n _this._onScrollMemoizer = createCallbackMemoizer(false);\n _this._deferredInvalidateColumnIndex = null;\n _this._deferredInvalidateRowIndex = null;\n _this._recomputeScrollLeftFlag = false;\n _this._recomputeScrollTopFlag = false;\n _this._horizontalScrollBarSize = 0;\n _this._verticalScrollBarSize = 0;\n _this._scrollbarPresenceChanged = false;\n _this._renderedColumnStartIndex = 0;\n _this._renderedColumnStopIndex = 0;\n _this._renderedRowStartIndex = 0;\n _this._renderedRowStopIndex = 0;\n _this._styleCache = {};\n _this._cellCache = {};\n\n _this._debounceScrollEndedCallback = function () {\n _this._disablePointerEventsTimeoutId = null;\n // isScrolling is used to determine if we reset styleCache\n _this.setState({\n isScrolling: false,\n needToResetStyleCache: false\n });\n };\n\n _this._invokeOnGridRenderedHelper = function () {\n var onSectionRendered = _this.props.onSectionRendered;\n\n\n _this._onGridRenderedMemoizer({\n callback: onSectionRendered,\n indices: {\n columnOverscanStartIndex: _this._columnStartIndex,\n columnOverscanStopIndex: _this._columnStopIndex,\n columnStartIndex: _this._renderedColumnStartIndex,\n columnStopIndex: _this._renderedColumnStopIndex,\n rowOverscanStartIndex: _this._rowStartIndex,\n rowOverscanStopIndex: _this._rowStopIndex,\n rowStartIndex: _this._renderedRowStartIndex,\n rowStopIndex: _this._renderedRowStopIndex\n }\n });\n };\n\n _this._setScrollingContainerRef = function (ref) {\n _this._scrollingContainer = ref;\n };\n\n _this._onScroll = function (event) {\n // In certain edge-cases React dispatches an onScroll event with an invalid target.scrollLeft / target.scrollTop.\n // This invalid event can be detected by comparing event.target to this component's scrollable DOM element.\n // See issue #404 for more information.\n if (event.target === _this._scrollingContainer) {\n _this.handleScrollEvent(event.target);\n }\n };\n\n var columnSizeAndPositionManager = new ScalingCellSizeAndPositionManager({\n cellCount: props.columnCount,\n cellSizeGetter: function cellSizeGetter(params) {\n return Grid._wrapSizeGetter(props.columnWidth)(params);\n },\n estimatedCellSize: Grid._getEstimatedColumnSize(props)\n });\n var rowSizeAndPositionManager = new ScalingCellSizeAndPositionManager({\n cellCount: props.rowCount,\n cellSizeGetter: function cellSizeGetter(params) {\n return Grid._wrapSizeGetter(props.rowHeight)(params);\n },\n estimatedCellSize: Grid._getEstimatedRowSize(props)\n });\n\n _this.state = {\n instanceProps: {\n columnSizeAndPositionManager: columnSizeAndPositionManager,\n rowSizeAndPositionManager: rowSizeAndPositionManager,\n\n prevColumnWidth: props.columnWidth,\n prevRowHeight: props.rowHeight,\n prevColumnCount: props.columnCount,\n prevRowCount: props.rowCount,\n prevIsScrolling: props.isScrolling === true,\n prevScrollToColumn: props.scrollToColumn,\n prevScrollToRow: props.scrollToRow,\n\n scrollbarSize: 0,\n scrollbarSizeMeasured: false\n },\n isScrolling: false,\n scrollDirectionHorizontal: SCROLL_DIRECTION_FORWARD,\n scrollDirectionVertical: SCROLL_DIRECTION_FORWARD,\n scrollLeft: 0,\n scrollTop: 0,\n scrollPositionChangeReason: null,\n\n needToResetStyleCache: false\n };\n\n if (props.scrollToRow > 0) {\n _this._initialScrollTop = _this._getCalculatedScrollTop(props, _this.state);\n }\n if (props.scrollToColumn > 0) {\n _this._initialScrollLeft = _this._getCalculatedScrollLeft(props, _this.state);\n }\n return _this;\n }\n\n /**\n * Gets offsets for a given cell and alignment.\n */\n\n\n _createClass(Grid, [{\n key: 'getOffsetForCell',\n value: function getOffsetForCell() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$alignment = _ref.alignment,\n alignment = _ref$alignment === undefined ? this.props.scrollToAlignment : _ref$alignment,\n _ref$columnIndex = _ref.columnIndex,\n columnIndex = _ref$columnIndex === undefined ? this.props.scrollToColumn : _ref$columnIndex,\n _ref$rowIndex = _ref.rowIndex,\n rowIndex = _ref$rowIndex === undefined ? this.props.scrollToRow : _ref$rowIndex;\n\n var offsetProps = _extends({}, this.props, {\n scrollToAlignment: alignment,\n scrollToColumn: columnIndex,\n scrollToRow: rowIndex\n });\n\n return {\n scrollLeft: this._getCalculatedScrollLeft(offsetProps),\n scrollTop: this._getCalculatedScrollTop(offsetProps)\n };\n }\n\n /**\n * Gets estimated total rows' height.\n */\n\n }, {\n key: 'getTotalRowsHeight',\n value: function getTotalRowsHeight() {\n return this.state.instanceProps.rowSizeAndPositionManager.getTotalSize();\n }\n\n /**\n * Gets estimated total columns' width.\n */\n\n }, {\n key: 'getTotalColumnsWidth',\n value: function getTotalColumnsWidth() {\n return this.state.instanceProps.columnSizeAndPositionManager.getTotalSize();\n }\n\n /**\n * This method handles a scroll event originating from an external scroll control.\n * It's an advanced method and should probably not be used unless you're implementing a custom scroll-bar solution.\n */\n\n }, {\n key: 'handleScrollEvent',\n value: function handleScrollEvent(_ref2) {\n var _ref2$scrollLeft = _ref2.scrollLeft,\n scrollLeftParam = _ref2$scrollLeft === undefined ? 0 : _ref2$scrollLeft,\n _ref2$scrollTop = _ref2.scrollTop,\n scrollTopParam = _ref2$scrollTop === undefined ? 0 : _ref2$scrollTop;\n\n // On iOS, we can arrive at negative offsets by swiping past the start.\n // To prevent flicker here, we make playing in the negative offset zone cause nothing to happen.\n if (scrollTopParam < 0) {\n return;\n }\n\n // Prevent pointer events from interrupting a smooth scroll\n this._debounceScrollEnded();\n\n var _props = this.props,\n autoHeight = _props.autoHeight,\n autoWidth = _props.autoWidth,\n height = _props.height,\n width = _props.width;\n var instanceProps = this.state.instanceProps;\n\n // When this component is shrunk drastically, React dispatches a series of back-to-back scroll events,\n // Gradually converging on a scrollTop that is within the bounds of the new, smaller height.\n // This causes a series of rapid renders that is slow for long lists.\n // We can avoid that by doing some simple bounds checking to ensure that scroll offsets never exceed their bounds.\n\n var scrollbarSize = instanceProps.scrollbarSize;\n var totalRowsHeight = instanceProps.rowSizeAndPositionManager.getTotalSize();\n var totalColumnsWidth = instanceProps.columnSizeAndPositionManager.getTotalSize();\n var scrollLeft = Math.min(Math.max(0, totalColumnsWidth - width + scrollbarSize), scrollLeftParam);\n var scrollTop = Math.min(Math.max(0, totalRowsHeight - height + scrollbarSize), scrollTopParam);\n\n // Certain devices (like Apple touchpad) rapid-fire duplicate events.\n // Don't force a re-render if this is the case.\n // The mouse may move faster then the animation frame does.\n // Use requestAnimationFrame to avoid over-updating.\n if (this.state.scrollLeft !== scrollLeft || this.state.scrollTop !== scrollTop) {\n // Track scrolling direction so we can more efficiently overscan rows to reduce empty space around the edges while scrolling.\n // Don't change direction for an axis unless scroll offset has changed.\n var _scrollDirectionHorizontal = scrollLeft !== this.state.scrollLeft ? scrollLeft > this.state.scrollLeft ? SCROLL_DIRECTION_FORWARD : SCROLL_DIRECTION_BACKWARD : this.state.scrollDirectionHorizontal;\n var _scrollDirectionVertical = scrollTop !== this.state.scrollTop ? scrollTop > this.state.scrollTop ? SCROLL_DIRECTION_FORWARD : SCROLL_DIRECTION_BACKWARD : this.state.scrollDirectionVertical;\n\n var newState = {\n isScrolling: true,\n scrollDirectionHorizontal: _scrollDirectionHorizontal,\n scrollDirectionVertical: _scrollDirectionVertical,\n scrollPositionChangeReason: SCROLL_POSITION_CHANGE_REASONS.OBSERVED\n };\n\n if (!autoHeight) {\n newState.scrollTop = scrollTop;\n }\n\n if (!autoWidth) {\n newState.scrollLeft = scrollLeft;\n }\n\n newState.needToResetStyleCache = false;\n this.setState(newState);\n }\n\n this._invokeOnScrollMemoizer({\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n totalColumnsWidth: totalColumnsWidth,\n totalRowsHeight: totalRowsHeight\n });\n }\n\n /**\n * Invalidate Grid size and recompute visible cells.\n * This is a deferred wrapper for recomputeGridSize().\n * It sets a flag to be evaluated on cDM/cDU to avoid unnecessary renders.\n * This method is intended for advanced use-cases like CellMeasurer.\n */\n // @TODO (bvaughn) Add automated test coverage for this.\n\n }, {\n key: 'invalidateCellSizeAfterRender',\n value: function invalidateCellSizeAfterRender(_ref3) {\n var columnIndex = _ref3.columnIndex,\n rowIndex = _ref3.rowIndex;\n\n this._deferredInvalidateColumnIndex = typeof this._deferredInvalidateColumnIndex === 'number' ? Math.min(this._deferredInvalidateColumnIndex, columnIndex) : columnIndex;\n this._deferredInvalidateRowIndex = typeof this._deferredInvalidateRowIndex === 'number' ? Math.min(this._deferredInvalidateRowIndex, rowIndex) : rowIndex;\n }\n\n /**\n * Pre-measure all columns and rows in a Grid.\n * Typically cells are only measured as needed and estimated sizes are used for cells that have not yet been measured.\n * This method ensures that the next call to getTotalSize() returns an exact size (as opposed to just an estimated one).\n */\n\n }, {\n key: 'measureAllCells',\n value: function measureAllCells() {\n var _props2 = this.props,\n columnCount = _props2.columnCount,\n rowCount = _props2.rowCount;\n var instanceProps = this.state.instanceProps;\n\n instanceProps.columnSizeAndPositionManager.getSizeAndPositionOfCell(columnCount - 1);\n instanceProps.rowSizeAndPositionManager.getSizeAndPositionOfCell(rowCount - 1);\n }\n\n /**\n * Forced recompute of row heights and column widths.\n * This function should be called if dynamic column or row sizes have changed but nothing else has.\n * Since Grid only receives :columnCount and :rowCount it has no way of detecting when the underlying data changes.\n */\n\n }, {\n key: 'recomputeGridSize',\n value: function recomputeGridSize() {\n var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref4$columnIndex = _ref4.columnIndex,\n columnIndex = _ref4$columnIndex === undefined ? 0 : _ref4$columnIndex,\n _ref4$rowIndex = _ref4.rowIndex,\n rowIndex = _ref4$rowIndex === undefined ? 0 : _ref4$rowIndex;\n\n var _props3 = this.props,\n scrollToColumn = _props3.scrollToColumn,\n scrollToRow = _props3.scrollToRow;\n var instanceProps = this.state.instanceProps;\n\n\n instanceProps.columnSizeAndPositionManager.resetCell(columnIndex);\n instanceProps.rowSizeAndPositionManager.resetCell(rowIndex);\n\n // Cell sizes may be determined by a function property.\n // In this case the cDU handler can't know if they changed.\n // Store this flag to let the next cDU pass know it needs to recompute the scroll offset.\n this._recomputeScrollLeftFlag = scrollToColumn >= 0 && (this.state.scrollDirectionHorizontal === SCROLL_DIRECTION_FORWARD ? columnIndex <= scrollToColumn : columnIndex >= scrollToColumn);\n this._recomputeScrollTopFlag = scrollToRow >= 0 && (this.state.scrollDirectionVertical === SCROLL_DIRECTION_FORWARD ? rowIndex <= scrollToRow : rowIndex >= scrollToRow);\n\n // Clear cell cache in case we are scrolling;\n // Invalid row heights likely mean invalid cached content as well.\n this._styleCache = {};\n this._cellCache = {};\n\n this.forceUpdate();\n }\n\n /**\n * Ensure column and row are visible.\n */\n\n }, {\n key: 'scrollToCell',\n value: function scrollToCell(_ref5) {\n var columnIndex = _ref5.columnIndex,\n rowIndex = _ref5.rowIndex;\n var columnCount = this.props.columnCount;\n\n\n var props = this.props;\n\n // Don't adjust scroll offset for single-column grids (eg List, Table).\n // This can cause a funky scroll offset because of the vertical scrollbar width.\n if (columnCount > 1 && columnIndex !== undefined) {\n this._updateScrollLeftForScrollToColumn(_extends({}, props, {\n scrollToColumn: columnIndex\n }));\n }\n\n if (rowIndex !== undefined) {\n this._updateScrollTopForScrollToRow(_extends({}, props, {\n scrollToRow: rowIndex\n }));\n }\n }\n }, {\n key: 'componentDidMount',\n value: function componentDidMount() {\n var _props4 = this.props,\n getScrollbarSize = _props4.getScrollbarSize,\n height = _props4.height,\n scrollLeft = _props4.scrollLeft,\n scrollToColumn = _props4.scrollToColumn,\n scrollTop = _props4.scrollTop,\n scrollToRow = _props4.scrollToRow,\n width = _props4.width;\n var instanceProps = this.state.instanceProps;\n\n // Reset initial offsets to be ignored in browser\n\n this._initialScrollTop = 0;\n this._initialScrollLeft = 0;\n\n // If cell sizes have been invalidated (eg we are using CellMeasurer) then reset cached positions.\n // We must do this at the start of the method as we may calculate and update scroll position below.\n this._handleInvalidatedGridSize();\n\n // If this component was first rendered server-side, scrollbar size will be undefined.\n // In that event we need to remeasure.\n if (!instanceProps.scrollbarSizeMeasured) {\n this.setState(function (prevState) {\n var stateUpdate = _extends({}, prevState, { needToResetStyleCache: false });\n stateUpdate.instanceProps.scrollbarSize = getScrollbarSize();\n stateUpdate.instanceProps.scrollbarSizeMeasured = true;\n return stateUpdate;\n });\n }\n\n if (typeof scrollLeft === 'number' && scrollLeft >= 0 || typeof scrollTop === 'number' && scrollTop >= 0) {\n var stateUpdate = Grid._getScrollToPositionStateUpdate({\n prevState: this.state,\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n });\n if (stateUpdate) {\n stateUpdate.needToResetStyleCache = false;\n this.setState(stateUpdate);\n }\n }\n\n // refs don't work in `react-test-renderer`\n if (this._scrollingContainer) {\n // setting the ref's scrollLeft and scrollTop.\n // Somehow in MultiGrid the main grid doesn't trigger a update on mount.\n if (this._scrollingContainer.scrollLeft !== this.state.scrollLeft) {\n this._scrollingContainer.scrollLeft = this.state.scrollLeft;\n }\n if (this._scrollingContainer.scrollTop !== this.state.scrollTop) {\n this._scrollingContainer.scrollTop = this.state.scrollTop;\n }\n }\n\n // Don't update scroll offset if the size is 0; we don't render any cells in this case.\n // Setting a state may cause us to later thing we've updated the offce when we haven't.\n var sizeIsBiggerThanZero = height > 0 && width > 0;\n if (scrollToColumn >= 0 && sizeIsBiggerThanZero) {\n this._updateScrollLeftForScrollToColumn();\n }\n if (scrollToRow >= 0 && sizeIsBiggerThanZero) {\n this._updateScrollTopForScrollToRow();\n }\n\n // Update onRowsRendered callback\n this._invokeOnGridRenderedHelper();\n\n // Initialize onScroll callback\n this._invokeOnScrollMemoizer({\n scrollLeft: scrollLeft || 0,\n scrollTop: scrollTop || 0,\n totalColumnsWidth: instanceProps.columnSizeAndPositionManager.getTotalSize(),\n totalRowsHeight: instanceProps.rowSizeAndPositionManager.getTotalSize()\n });\n\n this._maybeCallOnScrollbarPresenceChange();\n }\n\n /**\n * @private\n * This method updates scrollLeft/scrollTop in state for the following conditions:\n * 1) New scroll-to-cell props have been set\n */\n\n }, {\n key: 'componentDidUpdate',\n value: function componentDidUpdate(prevProps, prevState) {\n var _this2 = this;\n\n var _props5 = this.props,\n autoHeight = _props5.autoHeight,\n autoWidth = _props5.autoWidth,\n columnCount = _props5.columnCount,\n height = _props5.height,\n rowCount = _props5.rowCount,\n scrollToAlignment = _props5.scrollToAlignment,\n scrollToColumn = _props5.scrollToColumn,\n scrollToRow = _props5.scrollToRow,\n width = _props5.width;\n var _state = this.state,\n scrollLeft = _state.scrollLeft,\n scrollPositionChangeReason = _state.scrollPositionChangeReason,\n scrollTop = _state.scrollTop,\n instanceProps = _state.instanceProps;\n // If cell sizes have been invalidated (eg we are using CellMeasurer) then reset cached positions.\n // We must do this at the start of the method as we may calculate and update scroll position below.\n\n this._handleInvalidatedGridSize();\n\n // Handle edge case where column or row count has only just increased over 0.\n // In this case we may have to restore a previously-specified scroll offset.\n // For more info see bvaughn/react-virtualized/issues/218\n var columnOrRowCountJustIncreasedFromZero = columnCount > 0 && prevProps.columnCount === 0 || rowCount > 0 && prevProps.rowCount === 0;\n\n // Make sure requested changes to :scrollLeft or :scrollTop get applied.\n // Assigning to scrollLeft/scrollTop tells the browser to interrupt any running scroll animations,\n // And to discard any pending async changes to the scroll position that may have happened in the meantime (e.g. on a separate scrolling thread).\n // So we only set these when we require an adjustment of the scroll position.\n // See issue #2 for more information.\n if (scrollPositionChangeReason === SCROLL_POSITION_CHANGE_REASONS.REQUESTED) {\n // @TRICKY :autoHeight and :autoWidth properties instructs Grid to leave :scrollTop and :scrollLeft management to an external HOC (eg WindowScroller).\n // In this case we should avoid checking scrollingContainer.scrollTop and scrollingContainer.scrollLeft since it forces layout/flow.\n if (!autoWidth && scrollLeft >= 0 && (scrollLeft !== this._scrollingContainer.scrollLeft || columnOrRowCountJustIncreasedFromZero)) {\n this._scrollingContainer.scrollLeft = scrollLeft;\n }\n if (!autoHeight && scrollTop >= 0 && (scrollTop !== this._scrollingContainer.scrollTop || columnOrRowCountJustIncreasedFromZero)) {\n this._scrollingContainer.scrollTop = scrollTop;\n }\n }\n\n // Special case where the previous size was 0:\n // In this case we don't show any windowed cells at all.\n // So we should always recalculate offset afterwards.\n var sizeJustIncreasedFromZero = (prevProps.width === 0 || prevProps.height === 0) && height > 0 && width > 0;\n\n // Update scroll offsets if the current :scrollToColumn or :scrollToRow values requires it\n // @TODO Do we also need this check or can the one in componentWillUpdate() suffice?\n if (this._recomputeScrollLeftFlag) {\n this._recomputeScrollLeftFlag = false;\n this._updateScrollLeftForScrollToColumn(this.props);\n } else {\n updateScrollIndexHelper({\n cellSizeAndPositionManager: instanceProps.columnSizeAndPositionManager,\n previousCellsCount: prevProps.columnCount,\n previousCellSize: prevProps.columnWidth,\n previousScrollToAlignment: prevProps.scrollToAlignment,\n previousScrollToIndex: prevProps.scrollToColumn,\n previousSize: prevProps.width,\n scrollOffset: scrollLeft,\n scrollToAlignment: scrollToAlignment,\n scrollToIndex: scrollToColumn,\n size: width,\n sizeJustIncreasedFromZero: sizeJustIncreasedFromZero,\n updateScrollIndexCallback: function updateScrollIndexCallback() {\n return _this2._updateScrollLeftForScrollToColumn(_this2.props);\n }\n });\n }\n\n if (this._recomputeScrollTopFlag) {\n this._recomputeScrollTopFlag = false;\n this._updateScrollTopForScrollToRow(this.props);\n } else {\n updateScrollIndexHelper({\n cellSizeAndPositionManager: instanceProps.rowSizeAndPositionManager,\n previousCellsCount: prevProps.rowCount,\n previousCellSize: prevProps.rowHeight,\n previousScrollToAlignment: prevProps.scrollToAlignment,\n previousScrollToIndex: prevProps.scrollToRow,\n previousSize: prevProps.height,\n scrollOffset: scrollTop,\n scrollToAlignment: scrollToAlignment,\n scrollToIndex: scrollToRow,\n size: height,\n sizeJustIncreasedFromZero: sizeJustIncreasedFromZero,\n updateScrollIndexCallback: function updateScrollIndexCallback() {\n return _this2._updateScrollTopForScrollToRow(_this2.props);\n }\n });\n }\n\n // Update onRowsRendered callback if start/stop indices have changed\n this._invokeOnGridRenderedHelper();\n\n // Changes to :scrollLeft or :scrollTop should also notify :onScroll listeners\n if (scrollLeft !== prevState.scrollLeft || scrollTop !== prevState.scrollTop) {\n var totalRowsHeight = instanceProps.rowSizeAndPositionManager.getTotalSize();\n var totalColumnsWidth = instanceProps.columnSizeAndPositionManager.getTotalSize();\n\n this._invokeOnScrollMemoizer({\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n totalColumnsWidth: totalColumnsWidth,\n totalRowsHeight: totalRowsHeight\n });\n }\n\n this._maybeCallOnScrollbarPresenceChange();\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n if (this._disablePointerEventsTimeoutId) {\n cancelAnimationTimeout(this._disablePointerEventsTimeoutId);\n }\n }\n\n /**\n * This method updates scrollLeft/scrollTop in state for the following conditions:\n * 1) Empty content (0 rows or columns)\n * 2) New scroll props overriding the current state\n * 3) Cells-count or cells-size has changed, making previous scroll offsets invalid\n */\n\n }, {\n key: 'render',\n value: function render() {\n var _props6 = this.props,\n autoContainerWidth = _props6.autoContainerWidth,\n autoHeight = _props6.autoHeight,\n autoWidth = _props6.autoWidth,\n className = _props6.className,\n containerProps = _props6.containerProps,\n containerRole = _props6.containerRole,\n containerStyle = _props6.containerStyle,\n height = _props6.height,\n id = _props6.id,\n noContentRenderer = _props6.noContentRenderer,\n role = _props6.role,\n style = _props6.style,\n tabIndex = _props6.tabIndex,\n width = _props6.width;\n var _state2 = this.state,\n instanceProps = _state2.instanceProps,\n needToResetStyleCache = _state2.needToResetStyleCache;\n\n\n var isScrolling = this._isScrolling();\n\n var gridStyle = {\n boxSizing: 'border-box',\n direction: 'ltr',\n height: autoHeight ? 'auto' : height,\n position: 'relative',\n width: autoWidth ? 'auto' : width,\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform'\n };\n\n if (needToResetStyleCache) {\n this._styleCache = {};\n }\n\n // calculate _styleCache here\n // if state.isScrolling (not from _isScrolling) then reset\n if (!this.state.isScrolling) {\n this._resetStyleCache();\n }\n\n // calculate children to render here\n this._calculateChildrenToRender(this.props, this.state);\n\n var totalColumnsWidth = instanceProps.columnSizeAndPositionManager.getTotalSize();\n var totalRowsHeight = instanceProps.rowSizeAndPositionManager.getTotalSize();\n\n // Force browser to hide scrollbars when we know they aren't necessary.\n // Otherwise once scrollbars appear they may not disappear again.\n // For more info see issue #116\n var verticalScrollBarSize = totalRowsHeight > height ? instanceProps.scrollbarSize : 0;\n var horizontalScrollBarSize = totalColumnsWidth > width ? instanceProps.scrollbarSize : 0;\n\n if (horizontalScrollBarSize !== this._horizontalScrollBarSize || verticalScrollBarSize !== this._verticalScrollBarSize) {\n this._horizontalScrollBarSize = horizontalScrollBarSize;\n this._verticalScrollBarSize = verticalScrollBarSize;\n this._scrollbarPresenceChanged = true;\n }\n\n // Also explicitly init styles to 'auto' if scrollbars are required.\n // This works around an obscure edge case where external CSS styles have not yet been loaded,\n // But an initial scroll index of offset is set as an external prop.\n // Without this style, Grid would render the correct range of cells but would NOT update its internal offset.\n // This was originally reported via clauderic/react-infinite-calendar/issues/23\n gridStyle.overflowX = totalColumnsWidth + verticalScrollBarSize <= width ? 'hidden' : 'auto';\n gridStyle.overflowY = totalRowsHeight + horizontalScrollBarSize <= height ? 'hidden' : 'auto';\n\n var childrenToDisplay = this._childrenToDisplay;\n\n var showNoContentRenderer = childrenToDisplay.length === 0 && height > 0 && width > 0;\n\n return React.createElement(\n 'div',\n _extends({\n ref: this._setScrollingContainerRef\n }, containerProps, {\n 'aria-label': this.props['aria-label'],\n 'aria-readonly': this.props['aria-readonly'],\n className: clsx('ReactVirtualized__Grid', className),\n id: id,\n onScroll: this._onScroll,\n role: role,\n style: _extends({}, gridStyle, style),\n tabIndex: tabIndex }),\n childrenToDisplay.length > 0 && React.createElement(\n 'div',\n {\n className: 'ReactVirtualized__Grid__innerScrollContainer',\n role: containerRole,\n style: _extends({\n width: autoContainerWidth ? 'auto' : totalColumnsWidth,\n height: totalRowsHeight,\n maxWidth: totalColumnsWidth,\n maxHeight: totalRowsHeight,\n overflow: 'hidden',\n pointerEvents: isScrolling ? 'none' : '',\n position: 'relative'\n }, containerStyle) },\n childrenToDisplay\n ),\n showNoContentRenderer && noContentRenderer()\n );\n }\n\n /* ---------------------------- Helper methods ---------------------------- */\n\n }, {\n key: '_calculateChildrenToRender',\n value: function _calculateChildrenToRender() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;\n var state = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.state;\n var cellRenderer = props.cellRenderer,\n cellRangeRenderer = props.cellRangeRenderer,\n columnCount = props.columnCount,\n deferredMeasurementCache = props.deferredMeasurementCache,\n height = props.height,\n overscanColumnCount = props.overscanColumnCount,\n overscanIndicesGetter = props.overscanIndicesGetter,\n overscanRowCount = props.overscanRowCount,\n rowCount = props.rowCount,\n width = props.width,\n isScrollingOptOut = props.isScrollingOptOut;\n var scrollDirectionHorizontal = state.scrollDirectionHorizontal,\n scrollDirectionVertical = state.scrollDirectionVertical,\n instanceProps = state.instanceProps;\n\n\n var scrollTop = this._initialScrollTop > 0 ? this._initialScrollTop : state.scrollTop;\n var scrollLeft = this._initialScrollLeft > 0 ? this._initialScrollLeft : state.scrollLeft;\n\n var isScrolling = this._isScrolling(props, state);\n\n this._childrenToDisplay = [];\n\n // Render only enough columns and rows to cover the visible area of the grid.\n if (height > 0 && width > 0) {\n var visibleColumnIndices = instanceProps.columnSizeAndPositionManager.getVisibleCellRange({\n containerSize: width,\n offset: scrollLeft\n });\n var visibleRowIndices = instanceProps.rowSizeAndPositionManager.getVisibleCellRange({\n containerSize: height,\n offset: scrollTop\n });\n\n var horizontalOffsetAdjustment = instanceProps.columnSizeAndPositionManager.getOffsetAdjustment({\n containerSize: width,\n offset: scrollLeft\n });\n var verticalOffsetAdjustment = instanceProps.rowSizeAndPositionManager.getOffsetAdjustment({\n containerSize: height,\n offset: scrollTop\n });\n\n // Store for _invokeOnGridRenderedHelper()\n this._renderedColumnStartIndex = visibleColumnIndices.start;\n this._renderedColumnStopIndex = visibleColumnIndices.stop;\n this._renderedRowStartIndex = visibleRowIndices.start;\n this._renderedRowStopIndex = visibleRowIndices.stop;\n\n var overscanColumnIndices = overscanIndicesGetter({\n direction: 'horizontal',\n cellCount: columnCount,\n overscanCellsCount: overscanColumnCount,\n scrollDirection: scrollDirectionHorizontal,\n startIndex: typeof visibleColumnIndices.start === 'number' ? visibleColumnIndices.start : 0,\n stopIndex: typeof visibleColumnIndices.stop === 'number' ? visibleColumnIndices.stop : -1\n });\n\n var overscanRowIndices = overscanIndicesGetter({\n direction: 'vertical',\n cellCount: rowCount,\n overscanCellsCount: overscanRowCount,\n scrollDirection: scrollDirectionVertical,\n startIndex: typeof visibleRowIndices.start === 'number' ? visibleRowIndices.start : 0,\n stopIndex: typeof visibleRowIndices.stop === 'number' ? visibleRowIndices.stop : -1\n });\n\n // Store for _invokeOnGridRenderedHelper()\n var columnStartIndex = overscanColumnIndices.overscanStartIndex;\n var columnStopIndex = overscanColumnIndices.overscanStopIndex;\n var rowStartIndex = overscanRowIndices.overscanStartIndex;\n var rowStopIndex = overscanRowIndices.overscanStopIndex;\n\n // Advanced use-cases (eg CellMeasurer) require batched measurements to determine accurate sizes.\n if (deferredMeasurementCache) {\n // If rows have a dynamic height, scan the rows we are about to render.\n // If any have not yet been measured, then we need to render all columns initially,\n // Because the height of the row is equal to the tallest cell within that row,\n // (And so we can't know the height without measuring all column-cells first).\n if (!deferredMeasurementCache.hasFixedHeight()) {\n for (var rowIndex = rowStartIndex; rowIndex <= rowStopIndex; rowIndex++) {\n if (!deferredMeasurementCache.has(rowIndex, 0)) {\n columnStartIndex = 0;\n columnStopIndex = columnCount - 1;\n break;\n }\n }\n }\n\n // If columns have a dynamic width, scan the columns we are about to render.\n // If any have not yet been measured, then we need to render all rows initially,\n // Because the width of the column is equal to the widest cell within that column,\n // (And so we can't know the width without measuring all row-cells first).\n if (!deferredMeasurementCache.hasFixedWidth()) {\n for (var columnIndex = columnStartIndex; columnIndex <= columnStopIndex; columnIndex++) {\n if (!deferredMeasurementCache.has(0, columnIndex)) {\n rowStartIndex = 0;\n rowStopIndex = rowCount - 1;\n break;\n }\n }\n }\n }\n\n this._childrenToDisplay = cellRangeRenderer({\n cellCache: this._cellCache,\n cellRenderer: cellRenderer,\n columnSizeAndPositionManager: instanceProps.columnSizeAndPositionManager,\n columnStartIndex: columnStartIndex,\n columnStopIndex: columnStopIndex,\n deferredMeasurementCache: deferredMeasurementCache,\n horizontalOffsetAdjustment: horizontalOffsetAdjustment,\n isScrolling: isScrolling,\n isScrollingOptOut: isScrollingOptOut,\n parent: this,\n rowSizeAndPositionManager: instanceProps.rowSizeAndPositionManager,\n rowStartIndex: rowStartIndex,\n rowStopIndex: rowStopIndex,\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n styleCache: this._styleCache,\n verticalOffsetAdjustment: verticalOffsetAdjustment,\n visibleColumnIndices: visibleColumnIndices,\n visibleRowIndices: visibleRowIndices\n });\n\n // update the indices\n this._columnStartIndex = columnStartIndex;\n this._columnStopIndex = columnStopIndex;\n this._rowStartIndex = rowStartIndex;\n this._rowStopIndex = rowStopIndex;\n }\n }\n\n /**\n * Sets an :isScrolling flag for a small window of time.\n * This flag is used to disable pointer events on the scrollable portion of the Grid.\n * This prevents jerky/stuttery mouse-wheel scrolling.\n */\n\n }, {\n key: '_debounceScrollEnded',\n value: function _debounceScrollEnded() {\n var scrollingResetTimeInterval = this.props.scrollingResetTimeInterval;\n\n\n if (this._disablePointerEventsTimeoutId) {\n cancelAnimationTimeout(this._disablePointerEventsTimeoutId);\n }\n\n this._disablePointerEventsTimeoutId = requestAnimationTimeout(this._debounceScrollEndedCallback, scrollingResetTimeInterval);\n }\n }, {\n key: '_handleInvalidatedGridSize',\n\n\n /**\n * Check for batched CellMeasurer size invalidations.\n * This will occur the first time one or more previously unmeasured cells are rendered.\n */\n value: function _handleInvalidatedGridSize() {\n if (typeof this._deferredInvalidateColumnIndex === 'number' && typeof this._deferredInvalidateRowIndex === 'number') {\n var columnIndex = this._deferredInvalidateColumnIndex;\n var rowIndex = this._deferredInvalidateRowIndex;\n\n this._deferredInvalidateColumnIndex = null;\n this._deferredInvalidateRowIndex = null;\n\n this.recomputeGridSize({ columnIndex: columnIndex, rowIndex: rowIndex });\n }\n }\n }, {\n key: '_invokeOnScrollMemoizer',\n value: function _invokeOnScrollMemoizer(_ref6) {\n var _this3 = this;\n\n var scrollLeft = _ref6.scrollLeft,\n scrollTop = _ref6.scrollTop,\n totalColumnsWidth = _ref6.totalColumnsWidth,\n totalRowsHeight = _ref6.totalRowsHeight;\n\n this._onScrollMemoizer({\n callback: function callback(_ref7) {\n var scrollLeft = _ref7.scrollLeft,\n scrollTop = _ref7.scrollTop;\n var _props7 = _this3.props,\n height = _props7.height,\n onScroll = _props7.onScroll,\n width = _props7.width;\n\n\n onScroll({\n clientHeight: height,\n clientWidth: width,\n scrollHeight: totalRowsHeight,\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n scrollWidth: totalColumnsWidth\n });\n },\n indices: {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n }\n });\n }\n }, {\n key: '_isScrolling',\n value: function _isScrolling() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;\n var state = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.state;\n\n // If isScrolling is defined in props, use it to override the value in state\n // This is a performance optimization for WindowScroller + Grid\n return Object.hasOwnProperty.call(props, 'isScrolling') ? Boolean(props.isScrolling) : Boolean(state.isScrolling);\n }\n }, {\n key: '_maybeCallOnScrollbarPresenceChange',\n value: function _maybeCallOnScrollbarPresenceChange() {\n if (this._scrollbarPresenceChanged) {\n var _onScrollbarPresenceChange = this.props.onScrollbarPresenceChange;\n\n\n this._scrollbarPresenceChanged = false;\n\n _onScrollbarPresenceChange({\n horizontal: this._horizontalScrollBarSize > 0,\n size: this.state.instanceProps.scrollbarSize,\n vertical: this._verticalScrollBarSize > 0\n });\n }\n }\n }, {\n key: 'scrollToPosition',\n\n\n /**\n * Scroll to the specified offset(s).\n * Useful for animating position changes.\n */\n value: function scrollToPosition(_ref8) {\n var scrollLeft = _ref8.scrollLeft,\n scrollTop = _ref8.scrollTop;\n\n var stateUpdate = Grid._getScrollToPositionStateUpdate({\n prevState: this.state,\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n });\n\n if (stateUpdate) {\n stateUpdate.needToResetStyleCache = false;\n this.setState(stateUpdate);\n }\n }\n }, {\n key: '_getCalculatedScrollLeft',\n value: function _getCalculatedScrollLeft() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;\n var state = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.state;\n\n return Grid._getCalculatedScrollLeft(props, state);\n }\n }, {\n key: '_updateScrollLeftForScrollToColumn',\n value: function _updateScrollLeftForScrollToColumn() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;\n var state = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.state;\n\n var stateUpdate = Grid._getScrollLeftForScrollToColumnStateUpdate(props, state);\n if (stateUpdate) {\n stateUpdate.needToResetStyleCache = false;\n this.setState(stateUpdate);\n }\n }\n }, {\n key: '_getCalculatedScrollTop',\n value: function _getCalculatedScrollTop() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;\n var state = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.state;\n\n return Grid._getCalculatedScrollTop(props, state);\n }\n }, {\n key: '_resetStyleCache',\n value: function _resetStyleCache() {\n var styleCache = this._styleCache;\n var cellCache = this._cellCache;\n var isScrollingOptOut = this.props.isScrollingOptOut;\n\n // Reset cell and style caches once scrolling stops.\n // This makes Grid simpler to use (since cells commonly change).\n // And it keeps the caches from growing too large.\n // Performance is most sensitive when a user is scrolling.\n // Don't clear visible cells from cellCache if isScrollingOptOut is specified.\n // This keeps the cellCache to a resonable size.\n\n this._cellCache = {};\n this._styleCache = {};\n\n // Copy over the visible cell styles so avoid unnecessary re-render.\n for (var rowIndex = this._rowStartIndex; rowIndex <= this._rowStopIndex; rowIndex++) {\n for (var columnIndex = this._columnStartIndex; columnIndex <= this._columnStopIndex; columnIndex++) {\n var key = rowIndex + '-' + columnIndex;\n this._styleCache[key] = styleCache[key];\n\n if (isScrollingOptOut) {\n this._cellCache[key] = cellCache[key];\n }\n }\n }\n }\n }, {\n key: '_updateScrollTopForScrollToRow',\n value: function _updateScrollTopForScrollToRow() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;\n var state = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.state;\n\n var stateUpdate = Grid._getScrollTopForScrollToRowStateUpdate(props, state);\n if (stateUpdate) {\n stateUpdate.needToResetStyleCache = false;\n this.setState(stateUpdate);\n }\n }\n }], [{\n key: 'getDerivedStateFromProps',\n value: function getDerivedStateFromProps(nextProps, prevState) {\n var newState = {};\n\n if (nextProps.columnCount === 0 && prevState.scrollLeft !== 0 || nextProps.rowCount === 0 && prevState.scrollTop !== 0) {\n newState.scrollLeft = 0;\n newState.scrollTop = 0;\n\n // only use scroll{Left,Top} from props if scrollTo{Column,Row} isn't specified\n // scrollTo{Column,Row} should override scroll{Left,Top}\n } else if (nextProps.scrollLeft !== prevState.scrollLeft && nextProps.scrollToColumn < 0 || nextProps.scrollTop !== prevState.scrollTop && nextProps.scrollToRow < 0) {\n _Object$assign(newState, Grid._getScrollToPositionStateUpdate({\n prevState: prevState,\n scrollLeft: nextProps.scrollLeft,\n scrollTop: nextProps.scrollTop\n }));\n }\n\n var instanceProps = prevState.instanceProps;\n\n // Initially we should not clearStyleCache\n\n newState.needToResetStyleCache = false;\n if (nextProps.columnWidth !== instanceProps.prevColumnWidth || nextProps.rowHeight !== instanceProps.prevRowHeight) {\n // Reset cache. set it to {} in render\n newState.needToResetStyleCache = true;\n }\n\n instanceProps.columnSizeAndPositionManager.configure({\n cellCount: nextProps.columnCount,\n estimatedCellSize: Grid._getEstimatedColumnSize(nextProps),\n cellSizeGetter: Grid._wrapSizeGetter(nextProps.columnWidth)\n });\n\n instanceProps.rowSizeAndPositionManager.configure({\n cellCount: nextProps.rowCount,\n estimatedCellSize: Grid._getEstimatedRowSize(nextProps),\n cellSizeGetter: Grid._wrapSizeGetter(nextProps.rowHeight)\n });\n\n if (instanceProps.prevColumnCount === 0 || instanceProps.prevRowCount === 0) {\n instanceProps.prevColumnCount = 0;\n instanceProps.prevRowCount = 0;\n }\n\n // If scrolling is controlled outside this component, clear cache when scrolling stops\n if (nextProps.autoHeight && nextProps.isScrolling === false && instanceProps.prevIsScrolling === true) {\n _Object$assign(newState, {\n isScrolling: false\n });\n }\n\n var maybeStateA = void 0;\n var maybeStateB = void 0;\n\n calculateSizeAndPositionDataAndUpdateScrollOffset({\n cellCount: instanceProps.prevColumnCount,\n cellSize: typeof instanceProps.prevColumnWidth === 'number' ? instanceProps.prevColumnWidth : null,\n computeMetadataCallback: function computeMetadataCallback() {\n return instanceProps.columnSizeAndPositionManager.resetCell(0);\n },\n computeMetadataCallbackProps: nextProps,\n nextCellsCount: nextProps.columnCount,\n nextCellSize: typeof nextProps.columnWidth === 'number' ? nextProps.columnWidth : null,\n nextScrollToIndex: nextProps.scrollToColumn,\n scrollToIndex: instanceProps.prevScrollToColumn,\n updateScrollOffsetForScrollToIndex: function updateScrollOffsetForScrollToIndex() {\n maybeStateA = Grid._getScrollLeftForScrollToColumnStateUpdate(nextProps, prevState);\n }\n });\n calculateSizeAndPositionDataAndUpdateScrollOffset({\n cellCount: instanceProps.prevRowCount,\n cellSize: typeof instanceProps.prevRowHeight === 'number' ? instanceProps.prevRowHeight : null,\n computeMetadataCallback: function computeMetadataCallback() {\n return instanceProps.rowSizeAndPositionManager.resetCell(0);\n },\n computeMetadataCallbackProps: nextProps,\n nextCellsCount: nextProps.rowCount,\n nextCellSize: typeof nextProps.rowHeight === 'number' ? nextProps.rowHeight : null,\n nextScrollToIndex: nextProps.scrollToRow,\n scrollToIndex: instanceProps.prevScrollToRow,\n updateScrollOffsetForScrollToIndex: function updateScrollOffsetForScrollToIndex() {\n maybeStateB = Grid._getScrollTopForScrollToRowStateUpdate(nextProps, prevState);\n }\n });\n\n instanceProps.prevColumnCount = nextProps.columnCount;\n instanceProps.prevColumnWidth = nextProps.columnWidth;\n instanceProps.prevIsScrolling = nextProps.isScrolling === true;\n instanceProps.prevRowCount = nextProps.rowCount;\n instanceProps.prevRowHeight = nextProps.rowHeight;\n instanceProps.prevScrollToColumn = nextProps.scrollToColumn;\n instanceProps.prevScrollToRow = nextProps.scrollToRow;\n\n // getting scrollBarSize (moved from componentWillMount)\n instanceProps.scrollbarSize = nextProps.getScrollbarSize();\n if (instanceProps.scrollbarSize === undefined) {\n instanceProps.scrollbarSizeMeasured = false;\n instanceProps.scrollbarSize = 0;\n } else {\n instanceProps.scrollbarSizeMeasured = true;\n }\n\n newState.instanceProps = instanceProps;\n\n return _extends({}, newState, maybeStateA, maybeStateB);\n }\n }, {\n key: '_getEstimatedColumnSize',\n value: function _getEstimatedColumnSize(props) {\n return typeof props.columnWidth === 'number' ? props.columnWidth : props.estimatedColumnSize;\n }\n }, {\n key: '_getEstimatedRowSize',\n value: function _getEstimatedRowSize(props) {\n return typeof props.rowHeight === 'number' ? props.rowHeight : props.estimatedRowSize;\n }\n }, {\n key: '_getScrollToPositionStateUpdate',\n\n\n /**\n * Get the updated state after scrolling to\n * scrollLeft and scrollTop\n */\n value: function _getScrollToPositionStateUpdate(_ref9) {\n var prevState = _ref9.prevState,\n scrollLeft = _ref9.scrollLeft,\n scrollTop = _ref9.scrollTop;\n\n var newState = {\n scrollPositionChangeReason: SCROLL_POSITION_CHANGE_REASONS.REQUESTED\n };\n\n if (typeof scrollLeft === 'number' && scrollLeft >= 0) {\n newState.scrollDirectionHorizontal = scrollLeft > prevState.scrollLeft ? SCROLL_DIRECTION_FORWARD : SCROLL_DIRECTION_BACKWARD;\n newState.scrollLeft = scrollLeft;\n }\n\n if (typeof scrollTop === 'number' && scrollTop >= 0) {\n newState.scrollDirectionVertical = scrollTop > prevState.scrollTop ? SCROLL_DIRECTION_FORWARD : SCROLL_DIRECTION_BACKWARD;\n newState.scrollTop = scrollTop;\n }\n\n if (typeof scrollLeft === 'number' && scrollLeft >= 0 && scrollLeft !== prevState.scrollLeft || typeof scrollTop === 'number' && scrollTop >= 0 && scrollTop !== prevState.scrollTop) {\n return newState;\n }\n return null;\n }\n }, {\n key: '_wrapSizeGetter',\n value: function _wrapSizeGetter(value) {\n return typeof value === 'function' ? value : function () {\n return value;\n };\n }\n }, {\n key: '_getCalculatedScrollLeft',\n value: function _getCalculatedScrollLeft(nextProps, prevState) {\n var columnCount = nextProps.columnCount,\n height = nextProps.height,\n scrollToAlignment = nextProps.scrollToAlignment,\n scrollToColumn = nextProps.scrollToColumn,\n width = nextProps.width;\n var scrollLeft = prevState.scrollLeft,\n instanceProps = prevState.instanceProps;\n\n\n if (columnCount > 0) {\n var finalColumn = columnCount - 1;\n var targetIndex = scrollToColumn < 0 ? finalColumn : Math.min(finalColumn, scrollToColumn);\n var totalRowsHeight = instanceProps.rowSizeAndPositionManager.getTotalSize();\n var scrollBarSize = instanceProps.scrollbarSizeMeasured && totalRowsHeight > height ? instanceProps.scrollbarSize : 0;\n\n return instanceProps.columnSizeAndPositionManager.getUpdatedOffsetForIndex({\n align: scrollToAlignment,\n containerSize: width - scrollBarSize,\n currentOffset: scrollLeft,\n targetIndex: targetIndex\n });\n }\n return 0;\n }\n }, {\n key: '_getScrollLeftForScrollToColumnStateUpdate',\n value: function _getScrollLeftForScrollToColumnStateUpdate(nextProps, prevState) {\n var scrollLeft = prevState.scrollLeft;\n\n var calculatedScrollLeft = Grid._getCalculatedScrollLeft(nextProps, prevState);\n\n if (typeof calculatedScrollLeft === 'number' && calculatedScrollLeft >= 0 && scrollLeft !== calculatedScrollLeft) {\n return Grid._getScrollToPositionStateUpdate({\n prevState: prevState,\n scrollLeft: calculatedScrollLeft,\n scrollTop: -1\n });\n }\n return null;\n }\n }, {\n key: '_getCalculatedScrollTop',\n value: function _getCalculatedScrollTop(nextProps, prevState) {\n var height = nextProps.height,\n rowCount = nextProps.rowCount,\n scrollToAlignment = nextProps.scrollToAlignment,\n scrollToRow = nextProps.scrollToRow,\n width = nextProps.width;\n var scrollTop = prevState.scrollTop,\n instanceProps = prevState.instanceProps;\n\n\n if (rowCount > 0) {\n var finalRow = rowCount - 1;\n var targetIndex = scrollToRow < 0 ? finalRow : Math.min(finalRow, scrollToRow);\n var totalColumnsWidth = instanceProps.columnSizeAndPositionManager.getTotalSize();\n var scrollBarSize = instanceProps.scrollbarSizeMeasured && totalColumnsWidth > width ? instanceProps.scrollbarSize : 0;\n\n return instanceProps.rowSizeAndPositionManager.getUpdatedOffsetForIndex({\n align: scrollToAlignment,\n containerSize: height - scrollBarSize,\n currentOffset: scrollTop,\n targetIndex: targetIndex\n });\n }\n return 0;\n }\n }, {\n key: '_getScrollTopForScrollToRowStateUpdate',\n value: function _getScrollTopForScrollToRowStateUpdate(nextProps, prevState) {\n var scrollTop = prevState.scrollTop;\n\n var calculatedScrollTop = Grid._getCalculatedScrollTop(nextProps, prevState);\n\n if (typeof calculatedScrollTop === 'number' && calculatedScrollTop >= 0 && scrollTop !== calculatedScrollTop) {\n return Grid._getScrollToPositionStateUpdate({\n prevState: prevState,\n scrollLeft: -1,\n scrollTop: calculatedScrollTop\n });\n }\n return null;\n }\n }]);\n\n return Grid;\n}(React.PureComponent);\n\nGrid.defaultProps = {\n 'aria-label': 'grid',\n 'aria-readonly': true,\n autoContainerWidth: false,\n autoHeight: false,\n autoWidth: false,\n cellRangeRenderer: defaultCellRangeRenderer,\n containerRole: 'rowgroup',\n containerStyle: {},\n estimatedColumnSize: 100,\n estimatedRowSize: 30,\n getScrollbarSize: scrollbarSize,\n noContentRenderer: renderNull,\n onScroll: function onScroll() {},\n onScrollbarPresenceChange: function onScrollbarPresenceChange() {},\n onSectionRendered: function onSectionRendered() {},\n overscanColumnCount: 0,\n overscanIndicesGetter: defaultOverscanIndicesGetter,\n overscanRowCount: 10,\n role: 'grid',\n scrollingResetTimeInterval: DEFAULT_SCROLLING_RESET_TIME_INTERVAL,\n scrollToAlignment: 'auto',\n scrollToColumn: -1,\n scrollToRow: -1,\n style: {},\n tabIndex: 0,\n isScrollingOptOut: false\n};\nGrid.propTypes = process.env.NODE_ENV === 'production' ? null : {\n \"aria-label\": PropTypes.string.isRequired,\n \"aria-readonly\": PropTypes.bool,\n\n\n /**\n * Set the width of the inner scrollable container to 'auto'.\n * This is useful for single-column Grids to ensure that the column doesn't extend below a vertical scrollbar.\n */\n autoContainerWidth: PropTypes.bool.isRequired,\n\n\n /**\n * Removes fixed height from the scrollingContainer so that the total height of rows can stretch the window.\n * Intended for use with WindowScroller\n */\n autoHeight: PropTypes.bool.isRequired,\n\n\n /**\n * Removes fixed width from the scrollingContainer so that the total width of rows can stretch the window.\n * Intended for use with WindowScroller\n */\n autoWidth: PropTypes.bool.isRequired,\n\n\n /** Responsible for rendering a cell given an row and column index. */\n cellRenderer: function cellRenderer() {\n return (typeof bpfrpt_proptype_CellRenderer === 'function' ? bpfrpt_proptype_CellRenderer.isRequired ? bpfrpt_proptype_CellRenderer.isRequired : bpfrpt_proptype_CellRenderer : PropTypes.shape(bpfrpt_proptype_CellRenderer).isRequired).apply(this, arguments);\n },\n\n\n /** Responsible for rendering a group of cells given their index ranges. */\n cellRangeRenderer: function cellRangeRenderer() {\n return (typeof bpfrpt_proptype_CellRangeRenderer === 'function' ? bpfrpt_proptype_CellRangeRenderer.isRequired ? bpfrpt_proptype_CellRangeRenderer.isRequired : bpfrpt_proptype_CellRangeRenderer : PropTypes.shape(bpfrpt_proptype_CellRangeRenderer).isRequired).apply(this, arguments);\n },\n\n\n /** Optional custom CSS class name to attach to root Grid element. */\n className: PropTypes.string,\n\n\n /** Number of columns in grid. */\n columnCount: PropTypes.number.isRequired,\n\n\n /** Either a fixed column width (number) or a function that returns the width of a column given its index. */\n columnWidth: function columnWidth() {\n return (typeof bpfrpt_proptype_CellSize === 'function' ? bpfrpt_proptype_CellSize.isRequired ? bpfrpt_proptype_CellSize.isRequired : bpfrpt_proptype_CellSize : PropTypes.shape(bpfrpt_proptype_CellSize).isRequired).apply(this, arguments);\n },\n\n\n /** Unfiltered props for the Grid container. */\n containerProps: PropTypes.object,\n\n\n /** ARIA role for the cell-container. */\n containerRole: PropTypes.string.isRequired,\n\n\n /** Optional inline style applied to inner cell-container */\n containerStyle: PropTypes.object.isRequired,\n\n\n /**\n * If CellMeasurer is used to measure this Grid's children, this should be a pointer to its CellMeasurerCache.\n * A shared CellMeasurerCache reference enables Grid and CellMeasurer to share measurement data.\n */\n deferredMeasurementCache: PropTypes.object,\n\n\n /**\n * Used to estimate the total width of a Grid before all of its columns have actually been measured.\n * The estimated total width is adjusted as columns are rendered.\n */\n estimatedColumnSize: PropTypes.number.isRequired,\n\n\n /**\n * Used to estimate the total height of a Grid before all of its rows have actually been measured.\n * The estimated total height is adjusted as rows are rendered.\n */\n estimatedRowSize: PropTypes.number.isRequired,\n\n\n /** Exposed for testing purposes only. */\n getScrollbarSize: PropTypes.func.isRequired,\n\n\n /** Height of Grid; this property determines the number of visible (vs virtualized) rows. */\n height: PropTypes.number.isRequired,\n\n\n /** Optional custom id to attach to root Grid element. */\n id: PropTypes.string,\n\n\n /**\n * Override internal is-scrolling state tracking.\n * This property is primarily intended for use with the WindowScroller component.\n */\n isScrolling: PropTypes.bool,\n\n\n /**\n * Opt-out of isScrolling param passed to cellRangeRenderer.\n * To avoid the extra render when scroll stops.\n */\n isScrollingOptOut: PropTypes.bool.isRequired,\n\n\n /** Optional renderer to be used in place of rows when either :rowCount or :columnCount is 0. */\n noContentRenderer: function noContentRenderer() {\n return (typeof bpfrpt_proptype_NoContentRenderer === 'function' ? bpfrpt_proptype_NoContentRenderer.isRequired ? bpfrpt_proptype_NoContentRenderer.isRequired : bpfrpt_proptype_NoContentRenderer : PropTypes.shape(bpfrpt_proptype_NoContentRenderer).isRequired).apply(this, arguments);\n },\n\n\n /**\n * Callback invoked whenever the scroll offset changes within the inner scrollable region.\n * This callback can be used to sync scrolling between lists, tables, or grids.\n */\n onScroll: PropTypes.func.isRequired,\n\n\n /**\n * Called whenever a horizontal or vertical scrollbar is added or removed.\n * This prop is not intended for end-user use;\n * It is used by MultiGrid to support fixed-row/fixed-column scroll syncing.\n */\n onScrollbarPresenceChange: PropTypes.func.isRequired,\n\n\n /** Callback invoked with information about the section of the Grid that was just rendered. */\n onSectionRendered: PropTypes.func.isRequired,\n\n\n /**\n * Number of columns to render before/after the visible section of the grid.\n * These columns can help for smoother scrolling on touch devices or browsers that send scroll events infrequently.\n */\n overscanColumnCount: PropTypes.number.isRequired,\n\n\n /**\n * Calculates the number of cells to overscan before and after a specified range.\n * This function ensures that overscanning doesn't exceed the available cells.\n */\n overscanIndicesGetter: function overscanIndicesGetter() {\n return (typeof bpfrpt_proptype_OverscanIndicesGetter === 'function' ? bpfrpt_proptype_OverscanIndicesGetter.isRequired ? bpfrpt_proptype_OverscanIndicesGetter.isRequired : bpfrpt_proptype_OverscanIndicesGetter : PropTypes.shape(bpfrpt_proptype_OverscanIndicesGetter).isRequired).apply(this, arguments);\n },\n\n\n /**\n * Number of rows to render above/below the visible section of the grid.\n * These rows can help for smoother scrolling on touch devices or browsers that send scroll events infrequently.\n */\n overscanRowCount: PropTypes.number.isRequired,\n\n\n /** ARIA role for the grid element. */\n role: PropTypes.string.isRequired,\n\n\n /**\n * Either a fixed row height (number) or a function that returns the height of a row given its index.\n * Should implement the following interface: ({ index: number }): number\n */\n rowHeight: function rowHeight() {\n return (typeof bpfrpt_proptype_CellSize === 'function' ? bpfrpt_proptype_CellSize.isRequired ? bpfrpt_proptype_CellSize.isRequired : bpfrpt_proptype_CellSize : PropTypes.shape(bpfrpt_proptype_CellSize).isRequired).apply(this, arguments);\n },\n\n\n /** Number of rows in grid. */\n rowCount: PropTypes.number.isRequired,\n\n\n /** Wait this amount of time after the last scroll event before resetting Grid `pointer-events`. */\n scrollingResetTimeInterval: PropTypes.number.isRequired,\n\n\n /** Horizontal offset. */\n scrollLeft: PropTypes.number,\n\n\n /**\n * Controls scroll-to-cell behavior of the Grid.\n * The default (\"auto\") scrolls the least amount possible to ensure that the specified cell is fully visible.\n * Use \"start\" to align cells to the top/left of the Grid and \"end\" to align bottom/right.\n */\n scrollToAlignment: function scrollToAlignment() {\n return (typeof bpfrpt_proptype_Alignment === 'function' ? bpfrpt_proptype_Alignment.isRequired ? bpfrpt_proptype_Alignment.isRequired : bpfrpt_proptype_Alignment : PropTypes.shape(bpfrpt_proptype_Alignment).isRequired).apply(this, arguments);\n },\n\n\n /** Column index to ensure visible (by forcefully scrolling if necessary) */\n scrollToColumn: PropTypes.number.isRequired,\n\n\n /** Vertical offset. */\n scrollTop: PropTypes.number,\n\n\n /** Row index to ensure visible (by forcefully scrolling if necessary) */\n scrollToRow: PropTypes.number.isRequired,\n\n\n /** Optional inline style */\n style: PropTypes.object.isRequired,\n\n\n /** Tab index for focus */\n tabIndex: PropTypes.number,\n\n\n /** Width of Grid; this property determines the number of visible (vs virtualized) columns. */\n width: PropTypes.number.isRequired\n};\n\n\npolyfill(Grid);\nexport default Grid;\nimport { bpfrpt_proptype_CellRenderer } from './types';\nimport { bpfrpt_proptype_CellRangeRenderer } from './types';\nimport { bpfrpt_proptype_CellPosition } from './types';\nimport { bpfrpt_proptype_CellSize } from './types';\nimport { bpfrpt_proptype_CellSizeGetter } from './types';\nimport { bpfrpt_proptype_NoContentRenderer } from './types';\nimport { bpfrpt_proptype_Scroll } from './types';\nimport { bpfrpt_proptype_ScrollbarPresenceChange } from './types';\nimport { bpfrpt_proptype_RenderedSection } from './types';\nimport { bpfrpt_proptype_OverscanIndicesGetter } from './types';\nimport { bpfrpt_proptype_Alignment } from './types';\nimport { bpfrpt_proptype_CellCache } from './types';\nimport { bpfrpt_proptype_StyleCache } from './types';\nimport { bpfrpt_proptype_AnimationTimeoutId } from '../utils/requestAnimationTimeout';\nimport PropTypes from 'prop-types';","\n\nexport var SCROLL_DIRECTION_BACKWARD = -1;\n\nexport var SCROLL_DIRECTION_FORWARD = 1;\n\nexport var SCROLL_DIRECTION_HORIZONTAL = 'horizontal';\nexport var SCROLL_DIRECTION_VERTICAL = 'vertical';\n\n/**\n * Calculates the number of cells to overscan before and after a specified range.\n * This function ensures that overscanning doesn't exceed the available cells.\n */\n\nexport default function defaultOverscanIndicesGetter(_ref) {\n var cellCount = _ref.cellCount,\n overscanCellsCount = _ref.overscanCellsCount,\n scrollDirection = _ref.scrollDirection,\n startIndex = _ref.startIndex,\n stopIndex = _ref.stopIndex;\n\n if (scrollDirection === SCROLL_DIRECTION_FORWARD) {\n return {\n overscanStartIndex: Math.max(0, startIndex),\n overscanStopIndex: Math.min(cellCount - 1, stopIndex + overscanCellsCount)\n };\n } else {\n return {\n overscanStartIndex: Math.max(0, startIndex - overscanCellsCount),\n overscanStopIndex: Math.min(cellCount - 1, stopIndex)\n };\n }\n}\nimport { bpfrpt_proptype_OverscanIndicesGetterParams } from './types';\nimport { bpfrpt_proptype_OverscanIndices } from './types';","\n\n/**\n * Default implementation of cellRangeRenderer used by Grid.\n * This renderer supports cell-caching while the user is scrolling.\n */\n\nexport default function defaultCellRangeRenderer(_ref) {\n var cellCache = _ref.cellCache,\n cellRenderer = _ref.cellRenderer,\n columnSizeAndPositionManager = _ref.columnSizeAndPositionManager,\n columnStartIndex = _ref.columnStartIndex,\n columnStopIndex = _ref.columnStopIndex,\n deferredMeasurementCache = _ref.deferredMeasurementCache,\n horizontalOffsetAdjustment = _ref.horizontalOffsetAdjustment,\n isScrolling = _ref.isScrolling,\n isScrollingOptOut = _ref.isScrollingOptOut,\n parent = _ref.parent,\n rowSizeAndPositionManager = _ref.rowSizeAndPositionManager,\n rowStartIndex = _ref.rowStartIndex,\n rowStopIndex = _ref.rowStopIndex,\n styleCache = _ref.styleCache,\n verticalOffsetAdjustment = _ref.verticalOffsetAdjustment,\n visibleColumnIndices = _ref.visibleColumnIndices,\n visibleRowIndices = _ref.visibleRowIndices;\n\n var renderedCells = [];\n\n // Browsers have native size limits for elements (eg Chrome 33M pixels, IE 1.5M pixes).\n // User cannot scroll beyond these size limitations.\n // In order to work around this, ScalingCellSizeAndPositionManager compresses offsets.\n // We should never cache styles for compressed offsets though as this can lead to bugs.\n // See issue #576 for more.\n var areOffsetsAdjusted = columnSizeAndPositionManager.areOffsetsAdjusted() || rowSizeAndPositionManager.areOffsetsAdjusted();\n\n var canCacheStyle = !isScrolling && !areOffsetsAdjusted;\n\n for (var rowIndex = rowStartIndex; rowIndex <= rowStopIndex; rowIndex++) {\n var rowDatum = rowSizeAndPositionManager.getSizeAndPositionOfCell(rowIndex);\n\n for (var columnIndex = columnStartIndex; columnIndex <= columnStopIndex; columnIndex++) {\n var columnDatum = columnSizeAndPositionManager.getSizeAndPositionOfCell(columnIndex);\n var isVisible = columnIndex >= visibleColumnIndices.start && columnIndex <= visibleColumnIndices.stop && rowIndex >= visibleRowIndices.start && rowIndex <= visibleRowIndices.stop;\n var key = rowIndex + '-' + columnIndex;\n var style = void 0;\n\n // Cache style objects so shallow-compare doesn't re-render unnecessarily.\n if (canCacheStyle && styleCache[key]) {\n style = styleCache[key];\n } else {\n // In deferred mode, cells will be initially rendered before we know their size.\n // Don't interfere with CellMeasurer's measurements by setting an invalid size.\n if (deferredMeasurementCache && !deferredMeasurementCache.has(rowIndex, columnIndex)) {\n // Position not-yet-measured cells at top/left 0,0,\n // And give them width/height of 'auto' so they can grow larger than the parent Grid if necessary.\n // Positioning them further to the right/bottom influences their measured size.\n style = {\n height: 'auto',\n left: 0,\n position: 'absolute',\n top: 0,\n width: 'auto'\n };\n } else {\n style = {\n height: rowDatum.size,\n left: columnDatum.offset + horizontalOffsetAdjustment,\n position: 'absolute',\n top: rowDatum.offset + verticalOffsetAdjustment,\n width: columnDatum.size\n };\n\n styleCache[key] = style;\n }\n }\n\n var cellRendererParams = {\n columnIndex: columnIndex,\n isScrolling: isScrolling,\n isVisible: isVisible,\n key: key,\n parent: parent,\n rowIndex: rowIndex,\n style: style\n };\n\n var renderedCell = void 0;\n\n // Avoid re-creating cells while scrolling.\n // This can lead to the same cell being created many times and can cause performance issues for \"heavy\" cells.\n // If a scroll is in progress- cache and reuse cells.\n // This cache will be thrown away once scrolling completes.\n // However if we are scaling scroll positions and sizes, we should also avoid caching.\n // This is because the offset changes slightly as scroll position changes and caching leads to stale values.\n // For more info refer to issue #395\n //\n // If isScrollingOptOut is specified, we always cache cells.\n // For more info refer to issue #1028\n if ((isScrollingOptOut || isScrolling) && !horizontalOffsetAdjustment && !verticalOffsetAdjustment) {\n if (!cellCache[key]) {\n cellCache[key] = cellRenderer(cellRendererParams);\n }\n\n renderedCell = cellCache[key];\n\n // If the user is no longer scrolling, don't cache cells.\n // This makes dynamic cell content difficult for users and would also lead to a heavier memory footprint.\n } else {\n renderedCell = cellRenderer(cellRendererParams);\n }\n\n if (renderedCell == null || renderedCell === false) {\n continue;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n warnAboutMissingStyle(parent, renderedCell);\n }\n\n renderedCells.push(renderedCell);\n }\n }\n\n return renderedCells;\n}\n\nfunction warnAboutMissingStyle(parent, renderedCell) {\n if (process.env.NODE_ENV !== 'production') {\n if (renderedCell) {\n // If the direct child is a CellMeasurer, then we should check its child\n // See issue #611\n if (renderedCell.type && renderedCell.type.__internalCellMeasurerFlag) {\n renderedCell = renderedCell.props.children;\n }\n\n if (renderedCell && renderedCell.props && renderedCell.props.style === undefined && parent.__warnedAboutMissingStyle !== true) {\n parent.__warnedAboutMissingStyle = true;\n\n console.warn('Rendered cell should include style property for positioning.');\n }\n }\n }\n}\nimport { bpfrpt_proptype_CellRangeRendererParams } from './types';","import * as React from 'react';\n\nvar bpfrpt_proptype_RowRendererParams = process.env.NODE_ENV === 'production' ? null : {\n index: PropTypes.number.isRequired,\n isScrolling: PropTypes.bool.isRequired,\n isVisible: PropTypes.bool.isRequired,\n key: PropTypes.string.isRequired,\n parent: PropTypes.object.isRequired,\n style: PropTypes.object.isRequired\n};\nvar bpfrpt_proptype_RowRenderer = process.env.NODE_ENV === 'production' ? null : PropTypes.func;\nvar bpfrpt_proptype_RenderedRows = process.env.NODE_ENV === 'production' ? null : {\n overscanStartIndex: PropTypes.number.isRequired,\n overscanStopIndex: PropTypes.number.isRequired,\n startIndex: PropTypes.number.isRequired,\n stopIndex: PropTypes.number.isRequired\n};\nvar bpfrpt_proptype_Scroll = process.env.NODE_ENV === 'production' ? null : {\n clientHeight: PropTypes.number.isRequired,\n scrollHeight: PropTypes.number.isRequired,\n scrollTop: PropTypes.number.isRequired\n};\nimport PropTypes from 'prop-types';\nexport { bpfrpt_proptype_RowRendererParams };\nexport { bpfrpt_proptype_RowRenderer };\nexport { bpfrpt_proptype_RenderedRows };\nexport { bpfrpt_proptype_Scroll };","import _extends from 'babel-runtime/helpers/extends';\nimport _Object$getOwnPropertyDescriptor from 'babel-runtime/core-js/object/get-own-property-descriptor';\nimport _Object$getPrototypeOf from 'babel-runtime/core-js/object/get-prototype-of';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport Grid, { accessibilityOverscanIndicesGetter } from '../Grid';\nimport * as React from 'react';\nimport clsx from 'clsx';\n\n/**\n * It is inefficient to create and manage a large list of DOM elements within a scrolling container\n * if only a few of those elements are visible. The primary purpose of this component is to improve\n * performance by only rendering the DOM nodes that a user is able to see based on their current\n * scroll position.\n *\n * This component renders a virtualized list of elements with either fixed or dynamic heights.\n */\n\nvar List = function (_React$PureComponent) {\n _inherits(List, _React$PureComponent);\n\n function List() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, List);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = List.__proto__ || _Object$getPrototypeOf(List)).call.apply(_ref, [this].concat(args))), _this), _this._cellRenderer = function (_ref2) {\n var parent = _ref2.parent,\n rowIndex = _ref2.rowIndex,\n style = _ref2.style,\n isScrolling = _ref2.isScrolling,\n isVisible = _ref2.isVisible,\n key = _ref2.key;\n var rowRenderer = _this.props.rowRenderer;\n\n // TRICKY The style object is sometimes cached by Grid.\n // This prevents new style objects from bypassing shallowCompare().\n // However as of React 16, style props are auto-frozen (at least in dev mode)\n // Check to make sure we can still modify the style before proceeding.\n // https://github.com/facebook/react/commit/977357765b44af8ff0cfea327866861073095c12#commitcomment-20648713\n\n var _Object$getOwnPropert = _Object$getOwnPropertyDescriptor(style, 'width'),\n writable = _Object$getOwnPropert.writable;\n\n if (writable) {\n // By default, List cells should be 100% width.\n // This prevents them from flowing under a scrollbar (if present).\n style.width = '100%';\n }\n\n return rowRenderer({\n index: rowIndex,\n style: style,\n isScrolling: isScrolling,\n isVisible: isVisible,\n key: key,\n parent: parent\n });\n }, _this._setRef = function (ref) {\n _this.Grid = ref;\n }, _this._onScroll = function (_ref3) {\n var clientHeight = _ref3.clientHeight,\n scrollHeight = _ref3.scrollHeight,\n scrollTop = _ref3.scrollTop;\n var onScroll = _this.props.onScroll;\n\n\n onScroll({ clientHeight: clientHeight, scrollHeight: scrollHeight, scrollTop: scrollTop });\n }, _this._onSectionRendered = function (_ref4) {\n var rowOverscanStartIndex = _ref4.rowOverscanStartIndex,\n rowOverscanStopIndex = _ref4.rowOverscanStopIndex,\n rowStartIndex = _ref4.rowStartIndex,\n rowStopIndex = _ref4.rowStopIndex;\n var onRowsRendered = _this.props.onRowsRendered;\n\n\n onRowsRendered({\n overscanStartIndex: rowOverscanStartIndex,\n overscanStopIndex: rowOverscanStopIndex,\n startIndex: rowStartIndex,\n stopIndex: rowStopIndex\n });\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(List, [{\n key: 'forceUpdateGrid',\n value: function forceUpdateGrid() {\n if (this.Grid) {\n this.Grid.forceUpdate();\n }\n }\n\n /** See Grid#getOffsetForCell */\n\n }, {\n key: 'getOffsetForRow',\n value: function getOffsetForRow(_ref5) {\n var alignment = _ref5.alignment,\n index = _ref5.index;\n\n if (this.Grid) {\n var _Grid$getOffsetForCel = this.Grid.getOffsetForCell({\n alignment: alignment,\n rowIndex: index,\n columnIndex: 0\n }),\n _scrollTop = _Grid$getOffsetForCel.scrollTop;\n\n return _scrollTop;\n }\n return 0;\n }\n\n /** CellMeasurer compatibility */\n\n }, {\n key: 'invalidateCellSizeAfterRender',\n value: function invalidateCellSizeAfterRender(_ref6) {\n var columnIndex = _ref6.columnIndex,\n rowIndex = _ref6.rowIndex;\n\n if (this.Grid) {\n this.Grid.invalidateCellSizeAfterRender({\n rowIndex: rowIndex,\n columnIndex: columnIndex\n });\n }\n }\n\n /** See Grid#measureAllCells */\n\n }, {\n key: 'measureAllRows',\n value: function measureAllRows() {\n if (this.Grid) {\n this.Grid.measureAllCells();\n }\n }\n\n /** CellMeasurer compatibility */\n\n }, {\n key: 'recomputeGridSize',\n value: function recomputeGridSize() {\n var _ref7 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref7$columnIndex = _ref7.columnIndex,\n columnIndex = _ref7$columnIndex === undefined ? 0 : _ref7$columnIndex,\n _ref7$rowIndex = _ref7.rowIndex,\n rowIndex = _ref7$rowIndex === undefined ? 0 : _ref7$rowIndex;\n\n if (this.Grid) {\n this.Grid.recomputeGridSize({\n rowIndex: rowIndex,\n columnIndex: columnIndex\n });\n }\n }\n\n /** See Grid#recomputeGridSize */\n\n }, {\n key: 'recomputeRowHeights',\n value: function recomputeRowHeights() {\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n if (this.Grid) {\n this.Grid.recomputeGridSize({\n rowIndex: index,\n columnIndex: 0\n });\n }\n }\n\n /** See Grid#scrollToPosition */\n\n }, {\n key: 'scrollToPosition',\n value: function scrollToPosition() {\n var scrollTop = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n if (this.Grid) {\n this.Grid.scrollToPosition({ scrollTop: scrollTop });\n }\n }\n\n /** See Grid#scrollToCell */\n\n }, {\n key: 'scrollToRow',\n value: function scrollToRow() {\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n if (this.Grid) {\n this.Grid.scrollToCell({\n columnIndex: 0,\n rowIndex: index\n });\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var _props = this.props,\n className = _props.className,\n noRowsRenderer = _props.noRowsRenderer,\n scrollToIndex = _props.scrollToIndex,\n width = _props.width;\n\n\n var classNames = clsx('ReactVirtualized__List', className);\n\n return React.createElement(Grid, _extends({}, this.props, {\n autoContainerWidth: true,\n cellRenderer: this._cellRenderer,\n className: classNames,\n columnWidth: width,\n columnCount: 1,\n noContentRenderer: noRowsRenderer,\n onScroll: this._onScroll,\n onSectionRendered: this._onSectionRendered,\n ref: this._setRef,\n scrollToRow: scrollToIndex\n }));\n }\n }]);\n\n return List;\n}(React.PureComponent);\n\nList.defaultProps = {\n autoHeight: false,\n estimatedRowSize: 30,\n onScroll: function onScroll() {},\n noRowsRenderer: function noRowsRenderer() {\n return null;\n },\n onRowsRendered: function onRowsRendered() {},\n overscanIndicesGetter: accessibilityOverscanIndicesGetter,\n overscanRowCount: 10,\n scrollToAlignment: 'auto',\n scrollToIndex: -1,\n style: {}\n};\nList.propTypes = process.env.NODE_ENV === 'production' ? null : {\n \"aria-label\": PropTypes.string,\n\n\n /**\n * Removes fixed height from the scrollingContainer so that the total height\n * of rows can stretch the window. Intended for use with WindowScroller\n */\n autoHeight: PropTypes.bool.isRequired,\n\n\n /** Optional CSS class name */\n className: PropTypes.string,\n\n\n /**\n * Used to estimate the total height of a List before all of its rows have actually been measured.\n * The estimated total height is adjusted as rows are rendered.\n */\n estimatedRowSize: PropTypes.number.isRequired,\n\n\n /** Height constraint for list (determines how many actual rows are rendered) */\n height: PropTypes.number.isRequired,\n\n\n /** Optional renderer to be used in place of rows when rowCount is 0 */\n noRowsRenderer: function noRowsRenderer() {\n return (typeof bpfrpt_proptype_NoContentRenderer === 'function' ? bpfrpt_proptype_NoContentRenderer.isRequired ? bpfrpt_proptype_NoContentRenderer.isRequired : bpfrpt_proptype_NoContentRenderer : PropTypes.shape(bpfrpt_proptype_NoContentRenderer).isRequired).apply(this, arguments);\n },\n\n\n /** Callback invoked with information about the slice of rows that were just rendered. */\n\n onRowsRendered: PropTypes.func.isRequired,\n\n\n /**\n * Callback invoked whenever the scroll offset changes within the inner scrollable region.\n * This callback can be used to sync scrolling between lists, tables, or grids.\n */\n onScroll: PropTypes.func.isRequired,\n\n\n /** See Grid#overscanIndicesGetter */\n overscanIndicesGetter: function overscanIndicesGetter() {\n return (typeof bpfrpt_proptype_OverscanIndicesGetter === 'function' ? bpfrpt_proptype_OverscanIndicesGetter.isRequired ? bpfrpt_proptype_OverscanIndicesGetter.isRequired : bpfrpt_proptype_OverscanIndicesGetter : PropTypes.shape(bpfrpt_proptype_OverscanIndicesGetter).isRequired).apply(this, arguments);\n },\n\n\n /**\n * Number of rows to render above/below the visible bounds of the list.\n * These rows can help for smoother scrolling on touch devices.\n */\n overscanRowCount: PropTypes.number.isRequired,\n\n\n /** Either a fixed row height (number) or a function that returns the height of a row given its index. */\n rowHeight: function rowHeight() {\n return (typeof bpfrpt_proptype_CellSize === 'function' ? bpfrpt_proptype_CellSize.isRequired ? bpfrpt_proptype_CellSize.isRequired : bpfrpt_proptype_CellSize : PropTypes.shape(bpfrpt_proptype_CellSize).isRequired).apply(this, arguments);\n },\n\n\n /** Responsible for rendering a row given an index; ({ index: number }): node */\n rowRenderer: function rowRenderer() {\n return (typeof bpfrpt_proptype_RowRenderer === 'function' ? bpfrpt_proptype_RowRenderer.isRequired ? bpfrpt_proptype_RowRenderer.isRequired : bpfrpt_proptype_RowRenderer : PropTypes.shape(bpfrpt_proptype_RowRenderer).isRequired).apply(this, arguments);\n },\n\n\n /** Number of rows in list. */\n rowCount: PropTypes.number.isRequired,\n\n\n /** See Grid#scrollToAlignment */\n scrollToAlignment: function scrollToAlignment() {\n return (typeof bpfrpt_proptype_Alignment === 'function' ? bpfrpt_proptype_Alignment.isRequired ? bpfrpt_proptype_Alignment.isRequired : bpfrpt_proptype_Alignment : PropTypes.shape(bpfrpt_proptype_Alignment).isRequired).apply(this, arguments);\n },\n\n\n /** Row index to ensure visible (by forcefully scrolling if necessary) */\n scrollToIndex: PropTypes.number.isRequired,\n\n\n /** Vertical offset. */\n scrollTop: PropTypes.number,\n\n\n /** Optional inline style */\n style: PropTypes.object.isRequired,\n\n\n /** Tab index for focus */\n tabIndex: PropTypes.number,\n\n\n /** Width of list */\n width: PropTypes.number.isRequired\n};\nexport default List;\nimport { bpfrpt_proptype_NoContentRenderer } from '../Grid';\nimport { bpfrpt_proptype_Alignment } from '../Grid';\nimport { bpfrpt_proptype_CellSize } from '../Grid';\nimport { bpfrpt_proptype_CellPosition } from '../Grid';\nimport { bpfrpt_proptype_OverscanIndicesGetter } from '../Grid';\nimport { bpfrpt_proptype_RenderedSection } from '../Grid';\nimport { bpfrpt_proptype_CellRendererParams } from '../Grid';\nimport { bpfrpt_proptype_Scroll as bpfrpt_proptype_GridScroll } from '../Grid';\nimport { bpfrpt_proptype_RowRenderer } from './types';\nimport { bpfrpt_proptype_RenderedRows } from './types';\nimport { bpfrpt_proptype_Scroll } from './types';\nimport PropTypes from 'prop-types';","\n\nexport var SCROLL_DIRECTION_BACKWARD = -1;\n\nexport var SCROLL_DIRECTION_FORWARD = 1;\n\nexport var SCROLL_DIRECTION_HORIZONTAL = 'horizontal';\nexport var SCROLL_DIRECTION_VERTICAL = 'vertical';\n\n/**\n * Calculates the number of cells to overscan before and after a specified range.\n * This function ensures that overscanning doesn't exceed the available cells.\n */\n\nexport default function defaultOverscanIndicesGetter(_ref) {\n var cellCount = _ref.cellCount,\n overscanCellsCount = _ref.overscanCellsCount,\n scrollDirection = _ref.scrollDirection,\n startIndex = _ref.startIndex,\n stopIndex = _ref.stopIndex;\n\n // Make sure we render at least 1 cell extra before and after (except near boundaries)\n // This is necessary in order to support keyboard navigation (TAB/SHIFT+TAB) in some cases\n // For more info see issues #625\n overscanCellsCount = Math.max(1, overscanCellsCount);\n\n if (scrollDirection === SCROLL_DIRECTION_FORWARD) {\n return {\n overscanStartIndex: Math.max(0, startIndex - 1),\n overscanStopIndex: Math.min(cellCount - 1, stopIndex + overscanCellsCount)\n };\n } else {\n return {\n overscanStartIndex: Math.max(0, startIndex - overscanCellsCount),\n overscanStopIndex: Math.min(cellCount - 1, stopIndex + 1)\n };\n }\n}\nimport { bpfrpt_proptype_OverscanIndicesGetterParams } from './types';\nimport { bpfrpt_proptype_OverscanIndices } from './types';","import _extends from 'babel-runtime/helpers/extends';\nimport _Object$getPrototypeOf from 'babel-runtime/core-js/object/get-prototype-of';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport * as React from 'react';\nimport createDetectElementResize from '../vendor/detectElementResize';\n\nvar AutoSizer = function (_React$PureComponent) {\n _inherits(AutoSizer, _React$PureComponent);\n\n function AutoSizer() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, AutoSizer);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = AutoSizer.__proto__ || _Object$getPrototypeOf(AutoSizer)).call.apply(_ref, [this].concat(args))), _this), _this.state = {\n height: _this.props.defaultHeight || 0,\n width: _this.props.defaultWidth || 0\n }, _this._onResize = function () {\n var _this$props = _this.props,\n disableHeight = _this$props.disableHeight,\n disableWidth = _this$props.disableWidth,\n onResize = _this$props.onResize;\n\n\n if (_this._parentNode) {\n // Guard against AutoSizer component being removed from the DOM immediately after being added.\n // This can result in invalid style values which can result in NaN values if we don't handle them.\n // See issue #150 for more context.\n\n var _height = _this._parentNode.offsetHeight || 0;\n var _width = _this._parentNode.offsetWidth || 0;\n\n var win = _this._window || window;\n var _style = win.getComputedStyle(_this._parentNode) || {};\n var paddingLeft = parseInt(_style.paddingLeft, 10) || 0;\n var paddingRight = parseInt(_style.paddingRight, 10) || 0;\n var paddingTop = parseInt(_style.paddingTop, 10) || 0;\n var paddingBottom = parseInt(_style.paddingBottom, 10) || 0;\n\n var newHeight = _height - paddingTop - paddingBottom;\n var newWidth = _width - paddingLeft - paddingRight;\n\n if (!disableHeight && _this.state.height !== newHeight || !disableWidth && _this.state.width !== newWidth) {\n _this.setState({\n height: _height - paddingTop - paddingBottom,\n width: _width - paddingLeft - paddingRight\n });\n\n onResize({ height: _height, width: _width });\n }\n }\n }, _this._setRef = function (autoSizer) {\n _this._autoSizer = autoSizer;\n }, _temp), _possibleConstructorReturn(_this, _ret);\n } // uses any instead of Window because Flow doesn't have window type\n\n\n _createClass(AutoSizer, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n var nonce = this.props.nonce;\n\n if (this._autoSizer && this._autoSizer.parentNode && this._autoSizer.parentNode.ownerDocument && this._autoSizer.parentNode.ownerDocument.defaultView && this._autoSizer.parentNode instanceof this._autoSizer.parentNode.ownerDocument.defaultView.HTMLElement) {\n // Delay access of parentNode until mount.\n // This handles edge-cases where the component has already been unmounted before its ref has been set,\n // As well as libraries like react-lite which have a slightly different lifecycle.\n this._parentNode = this._autoSizer.parentNode;\n this._window = this._autoSizer.parentNode.ownerDocument.defaultView;\n\n // Defer requiring resize handler in order to support server-side rendering.\n // See issue #41\n this._detectElementResize = createDetectElementResize(nonce, this._window);\n this._detectElementResize.addResizeListener(this._parentNode, this._onResize);\n\n this._onResize();\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n if (this._detectElementResize && this._parentNode) {\n this._detectElementResize.removeResizeListener(this._parentNode, this._onResize);\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var _props = this.props,\n children = _props.children,\n className = _props.className,\n disableHeight = _props.disableHeight,\n disableWidth = _props.disableWidth,\n style = _props.style;\n var _state = this.state,\n height = _state.height,\n width = _state.width;\n\n // Outer div should not force width/height since that may prevent containers from shrinking.\n // Inner component should overflow and use calculated width/height.\n // See issue #68 for more information.\n\n var outerStyle = { overflow: 'visible' };\n var childParams = {};\n\n if (!disableHeight) {\n outerStyle.height = 0;\n childParams.height = height;\n }\n\n if (!disableWidth) {\n outerStyle.width = 0;\n childParams.width = width;\n }\n\n /**\n * TODO: Avoid rendering children before the initial measurements have been collected.\n * At best this would just be wasting cycles.\n * Add this check into version 10 though as it could break too many ref callbacks in version 9.\n * Note that if default width/height props were provided this would still work with SSR.\n if (\n height !== 0 &&\n width !== 0\n ) {\n child = children({ height, width })\n }\n */\n\n return React.createElement(\n 'div',\n {\n className: className,\n ref: this._setRef,\n style: _extends({}, outerStyle, style) },\n children(childParams)\n );\n }\n }]);\n\n return AutoSizer;\n}(React.PureComponent);\n\nAutoSizer.defaultProps = {\n onResize: function onResize() {},\n disableHeight: false,\n disableWidth: false,\n style: {}\n};\nAutoSizer.propTypes = process.env.NODE_ENV === 'production' ? null : {\n /** Function responsible for rendering children.*/\n children: PropTypes.func.isRequired,\n\n\n /** Optional custom CSS class name to attach to root AutoSizer element. */\n className: PropTypes.string,\n\n\n /** Default height to use for initial render; useful for SSR */\n defaultHeight: PropTypes.number,\n\n\n /** Default width to use for initial render; useful for SSR */\n defaultWidth: PropTypes.number,\n\n\n /** Disable dynamic :height property */\n disableHeight: PropTypes.bool.isRequired,\n\n\n /** Disable dynamic :width property */\n disableWidth: PropTypes.bool.isRequired,\n\n\n /** Nonce of the inlined stylesheet for Content Security Policy */\n nonce: PropTypes.string,\n\n\n /** Callback to be invoked on-resize */\n onResize: PropTypes.func.isRequired,\n\n\n /** Optional inline style */\n style: PropTypes.object\n};\nexport default AutoSizer;\nimport PropTypes from 'prop-types';","import { requestAnimationTimeout, cancelAnimationTimeout } from '../../utils/requestAnimationTimeout';\n\n\nvar mountedInstances = [];\nvar originalBodyPointerEvents = null;\nvar disablePointerEventsTimeoutId = null;\n\nfunction enablePointerEventsIfDisabled() {\n if (disablePointerEventsTimeoutId) {\n disablePointerEventsTimeoutId = null;\n\n if (document.body && originalBodyPointerEvents != null) {\n document.body.style.pointerEvents = originalBodyPointerEvents;\n }\n\n originalBodyPointerEvents = null;\n }\n}\n\nfunction enablePointerEventsAfterDelayCallback() {\n enablePointerEventsIfDisabled();\n mountedInstances.forEach(function (instance) {\n return instance.__resetIsScrolling();\n });\n}\n\nfunction enablePointerEventsAfterDelay() {\n if (disablePointerEventsTimeoutId) {\n cancelAnimationTimeout(disablePointerEventsTimeoutId);\n }\n\n var maximumTimeout = 0;\n mountedInstances.forEach(function (instance) {\n maximumTimeout = Math.max(maximumTimeout, instance.props.scrollingResetTimeInterval);\n });\n\n disablePointerEventsTimeoutId = requestAnimationTimeout(enablePointerEventsAfterDelayCallback, maximumTimeout);\n}\n\nfunction onScrollWindow(event) {\n if (event.currentTarget === window && originalBodyPointerEvents == null && document.body) {\n originalBodyPointerEvents = document.body.style.pointerEvents;\n\n document.body.style.pointerEvents = 'none';\n }\n enablePointerEventsAfterDelay();\n mountedInstances.forEach(function (instance) {\n if (instance.props.scrollElement === event.currentTarget) {\n instance.__handleWindowScrollEvent();\n }\n });\n}\n\nexport function registerScrollListener(component, element) {\n if (!mountedInstances.some(function (instance) {\n return instance.props.scrollElement === element;\n })) {\n element.addEventListener('scroll', onScrollWindow);\n }\n mountedInstances.push(component);\n}\n\nexport function unregisterScrollListener(component, element) {\n mountedInstances = mountedInstances.filter(function (instance) {\n return instance !== component;\n });\n if (!mountedInstances.length) {\n element.removeEventListener('scroll', onScrollWindow);\n if (disablePointerEventsTimeoutId) {\n cancelAnimationTimeout(disablePointerEventsTimeoutId);\n enablePointerEventsIfDisabled();\n }\n }\n}\nimport { bpfrpt_proptype_WindowScroller } from '../WindowScroller.js';","\n\n/**\n * Gets the dimensions of the element, accounting for API differences between\n * `window` and other DOM elements.\n */\n\nvar isWindow = function isWindow(element) {\n return element === window;\n};\n\n// TODO Move this into WindowScroller and import from there\n\n\nvar getBoundingBox = function getBoundingBox(element) {\n return element.getBoundingClientRect();\n};\n\nexport function getDimensions(scrollElement, props) {\n if (!scrollElement) {\n return {\n height: props.serverHeight,\n width: props.serverWidth\n };\n } else if (isWindow(scrollElement)) {\n var _window = window,\n innerHeight = _window.innerHeight,\n innerWidth = _window.innerWidth;\n\n return {\n height: typeof innerHeight === 'number' ? innerHeight : 0,\n width: typeof innerWidth === 'number' ? innerWidth : 0\n };\n } else {\n return getBoundingBox(scrollElement);\n }\n}\n\n/**\n * Gets the vertical and horizontal position of an element within its scroll container.\n * Elements that have been “scrolled past” return negative values.\n * Handles edge-case where a user is navigating back (history) from an already-scrolled page.\n * In this case the body’s top or left position will be a negative number and this element’s top or left will be increased (by that amount).\n */\nexport function getPositionOffset(element, container) {\n if (isWindow(container) && document.documentElement) {\n var containerElement = document.documentElement;\n var elementRect = getBoundingBox(element);\n var containerRect = getBoundingBox(containerElement);\n return {\n top: elementRect.top - containerRect.top,\n left: elementRect.left - containerRect.left\n };\n } else {\n var scrollOffset = getScrollOffset(container);\n var _elementRect = getBoundingBox(element);\n var _containerRect = getBoundingBox(container);\n return {\n top: _elementRect.top + scrollOffset.top - _containerRect.top,\n left: _elementRect.left + scrollOffset.left - _containerRect.left\n };\n }\n}\n\n/**\n * Gets the vertical and horizontal scroll amount of the element, accounting for IE compatibility\n * and API differences between `window` and other DOM elements.\n */\nexport function getScrollOffset(element) {\n if (isWindow(element) && document.documentElement) {\n return {\n top: 'scrollY' in window ? window.scrollY : document.documentElement.scrollTop,\n left: 'scrollX' in window ? window.scrollX : document.documentElement.scrollLeft\n };\n } else {\n return {\n top: element.scrollTop,\n left: element.scrollLeft\n };\n }\n}","import _extends from 'babel-runtime/helpers/extends';\nimport _Object$getPrototypeOf from 'babel-runtime/core-js/object/get-prototype-of';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { registerScrollListener, unregisterScrollListener } from './utils/onScroll';\nimport { getDimensions, getPositionOffset, getScrollOffset } from './utils/dimensions';\nimport createDetectElementResize from '../vendor/detectElementResize';\n\n/**\n * Specifies the number of miliseconds during which to disable pointer events while a scroll is in progress.\n * This improves performance and makes scrolling smoother.\n */\nexport var IS_SCROLLING_TIMEOUT = 150;\n\nvar getWindow = function getWindow() {\n return typeof window !== 'undefined' ? window : undefined;\n};\n\nvar WindowScroller = function (_React$PureComponent) {\n _inherits(WindowScroller, _React$PureComponent);\n\n function WindowScroller() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, WindowScroller);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = WindowScroller.__proto__ || _Object$getPrototypeOf(WindowScroller)).call.apply(_ref, [this].concat(args))), _this), _this._window = getWindow(), _this._isMounted = false, _this._positionFromTop = 0, _this._positionFromLeft = 0, _this.state = _extends({}, getDimensions(_this.props.scrollElement, _this.props), {\n isScrolling: false,\n scrollLeft: 0,\n scrollTop: 0\n }), _this._registerChild = function (element) {\n if (element && !(element instanceof Element)) {\n console.warn('WindowScroller registerChild expects to be passed Element or null');\n }\n _this._child = element;\n _this.updatePosition();\n }, _this._onChildScroll = function (_ref2) {\n var scrollTop = _ref2.scrollTop;\n\n if (_this.state.scrollTop === scrollTop) {\n return;\n }\n\n var scrollElement = _this.props.scrollElement;\n if (scrollElement) {\n if (typeof scrollElement.scrollTo === 'function') {\n scrollElement.scrollTo(0, scrollTop + _this._positionFromTop);\n } else {\n scrollElement.scrollTop = scrollTop + _this._positionFromTop;\n }\n }\n }, _this._registerResizeListener = function (element) {\n if (element === window) {\n window.addEventListener('resize', _this._onResize, false);\n } else {\n _this._detectElementResize.addResizeListener(element, _this._onResize);\n }\n }, _this._unregisterResizeListener = function (element) {\n if (element === window) {\n window.removeEventListener('resize', _this._onResize, false);\n } else if (element) {\n _this._detectElementResize.removeResizeListener(element, _this._onResize);\n }\n }, _this._onResize = function () {\n _this.updatePosition();\n }, _this.__handleWindowScrollEvent = function () {\n if (!_this._isMounted) {\n return;\n }\n\n var onScroll = _this.props.onScroll;\n\n\n var scrollElement = _this.props.scrollElement;\n if (scrollElement) {\n var scrollOffset = getScrollOffset(scrollElement);\n var _scrollLeft = Math.max(0, scrollOffset.left - _this._positionFromLeft);\n var _scrollTop = Math.max(0, scrollOffset.top - _this._positionFromTop);\n\n _this.setState({\n isScrolling: true,\n scrollLeft: _scrollLeft,\n scrollTop: _scrollTop\n });\n\n onScroll({\n scrollLeft: _scrollLeft,\n scrollTop: _scrollTop\n });\n }\n }, _this.__resetIsScrolling = function () {\n _this.setState({\n isScrolling: false\n });\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(WindowScroller, [{\n key: 'updatePosition',\n value: function updatePosition() {\n var scrollElement = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props.scrollElement;\n var onResize = this.props.onResize;\n var _state = this.state,\n height = _state.height,\n width = _state.width;\n\n\n var thisNode = this._child || ReactDOM.findDOMNode(this);\n if (thisNode instanceof Element && scrollElement) {\n var offset = getPositionOffset(thisNode, scrollElement);\n this._positionFromTop = offset.top;\n this._positionFromLeft = offset.left;\n }\n\n var dimensions = getDimensions(scrollElement, this.props);\n if (height !== dimensions.height || width !== dimensions.width) {\n this.setState({\n height: dimensions.height,\n width: dimensions.width\n });\n onResize({\n height: dimensions.height,\n width: dimensions.width\n });\n }\n }\n }, {\n key: 'componentDidMount',\n value: function componentDidMount() {\n var scrollElement = this.props.scrollElement;\n\n this._detectElementResize = createDetectElementResize();\n\n this.updatePosition(scrollElement);\n\n if (scrollElement) {\n registerScrollListener(this, scrollElement);\n this._registerResizeListener(scrollElement);\n }\n\n this._isMounted = true;\n }\n }, {\n key: 'componentDidUpdate',\n value: function componentDidUpdate(prevProps, prevState) {\n var scrollElement = this.props.scrollElement;\n var prevScrollElement = prevProps.scrollElement;\n\n\n if (prevScrollElement !== scrollElement && prevScrollElement != null && scrollElement != null) {\n this.updatePosition(scrollElement);\n\n unregisterScrollListener(this, prevScrollElement);\n registerScrollListener(this, scrollElement);\n\n this._unregisterResizeListener(prevScrollElement);\n this._registerResizeListener(scrollElement);\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n var scrollElement = this.props.scrollElement;\n if (scrollElement) {\n unregisterScrollListener(this, scrollElement);\n this._unregisterResizeListener(scrollElement);\n }\n\n this._isMounted = false;\n }\n }, {\n key: 'render',\n value: function render() {\n var children = this.props.children;\n var _state2 = this.state,\n isScrolling = _state2.isScrolling,\n scrollTop = _state2.scrollTop,\n scrollLeft = _state2.scrollLeft,\n height = _state2.height,\n width = _state2.width;\n\n\n return children({\n onChildScroll: this._onChildScroll,\n registerChild: this._registerChild,\n height: height,\n isScrolling: isScrolling,\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n width: width\n });\n }\n\n // Referenced by utils/onScroll\n\n\n // Referenced by utils/onScroll\n\n }]);\n\n return WindowScroller;\n}(React.PureComponent);\n\nWindowScroller.defaultProps = {\n onResize: function onResize() {},\n onScroll: function onScroll() {},\n scrollingResetTimeInterval: IS_SCROLLING_TIMEOUT,\n scrollElement: getWindow(),\n serverHeight: 0,\n serverWidth: 0\n};\nWindowScroller.propTypes = process.env.NODE_ENV === 'production' ? null : {\n /**\n * Function responsible for rendering children.\n * This function should implement the following signature:\n * ({ height, isScrolling, scrollLeft, scrollTop, width }) => PropTypes.element\n */\n children: PropTypes.func.isRequired,\n\n\n /** Callback to be invoked on-resize: ({ height, width }) */\n onResize: PropTypes.func.isRequired,\n\n\n /** Callback to be invoked on-scroll: ({ scrollLeft, scrollTop }) */\n onScroll: PropTypes.func.isRequired,\n\n\n /** Element to attach scroll event listeners. Defaults to window. */\n scrollElement: PropTypes.oneOfType([PropTypes.any, function () {\n return (typeof Element === 'function' ? PropTypes.instanceOf(Element) : PropTypes.any).apply(this, arguments);\n }]),\n\n /**\n * Wait this amount of time after the last scroll event before resetting child `pointer-events`.\n */\n scrollingResetTimeInterval: PropTypes.number.isRequired,\n\n\n /** Height used for server-side rendering */\n serverHeight: PropTypes.number.isRequired,\n\n\n /** Width used for server-side rendering */\n serverWidth: PropTypes.number.isRequired\n};\nexport default WindowScroller;\nimport PropTypes from 'prop-types';","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nvar _class, _temp;\n\nimport * as React from 'react';\nimport { findDOMNode } from 'react-dom';\n\n/**\n * Wraps a cell and measures its rendered content.\n * Measurements are stored in a per-cell cache.\n * Cached-content is not be re-measured.\n */\nvar CellMeasurer = (_temp = _class =\n/*#__PURE__*/\nfunction (_React$PureComponent) {\n _inherits(CellMeasurer, _React$PureComponent);\n\n function CellMeasurer() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, CellMeasurer);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(CellMeasurer)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_this), \"_child\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_measure\", function () {\n var _this$props = _this.props,\n cache = _this$props.cache,\n _this$props$columnInd = _this$props.columnIndex,\n columnIndex = _this$props$columnInd === void 0 ? 0 : _this$props$columnInd,\n parent = _this$props.parent,\n _this$props$rowIndex = _this$props.rowIndex,\n rowIndex = _this$props$rowIndex === void 0 ? _this.props.index || 0 : _this$props$rowIndex;\n\n var _this$_getCellMeasure = _this._getCellMeasurements(),\n height = _this$_getCellMeasure.height,\n width = _this$_getCellMeasure.width;\n\n if (height !== cache.getHeight(rowIndex, columnIndex) || width !== cache.getWidth(rowIndex, columnIndex)) {\n cache.set(rowIndex, columnIndex, width, height);\n\n if (parent && typeof parent.recomputeGridSize === 'function') {\n parent.recomputeGridSize({\n columnIndex: columnIndex,\n rowIndex: rowIndex\n });\n }\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_registerChild\", function (element) {\n if (element && !(element instanceof Element)) {\n console.warn('CellMeasurer registerChild expects to be passed Element or null');\n }\n\n _this._child = element;\n\n if (element) {\n _this._maybeMeasureCell();\n }\n });\n\n return _this;\n }\n\n _createClass(CellMeasurer, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this._maybeMeasureCell();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n this._maybeMeasureCell();\n }\n }, {\n key: \"render\",\n value: function render() {\n var children = this.props.children;\n return typeof children === 'function' ? children({\n measure: this._measure,\n registerChild: this._registerChild\n }) : children;\n }\n }, {\n key: \"_getCellMeasurements\",\n value: function _getCellMeasurements() {\n var cache = this.props.cache;\n var node = this._child || findDOMNode(this); // TODO Check for a bad combination of fixedWidth and missing numeric width or vice versa with height\n\n if (node && node.ownerDocument && node.ownerDocument.defaultView && node instanceof node.ownerDocument.defaultView.HTMLElement) {\n var styleWidth = node.style.width;\n var styleHeight = node.style.height; // If we are re-measuring a cell that has already been measured,\n // It will have a hard-coded width/height from the previous measurement.\n // The fact that we are measuring indicates this measurement is probably stale,\n // So explicitly clear it out (eg set to \"auto\") so we can recalculate.\n // See issue #593 for more info.\n // Even if we are measuring initially- if we're inside of a MultiGrid component,\n // Explicitly clear width/height before measuring to avoid being tainted by another Grid.\n // eg top/left Grid renders before bottom/right Grid\n // Since the CellMeasurerCache is shared between them this taints derived cell size values.\n\n if (!cache.hasFixedWidth()) {\n node.style.width = 'auto';\n }\n\n if (!cache.hasFixedHeight()) {\n node.style.height = 'auto';\n }\n\n var height = Math.ceil(node.offsetHeight);\n var width = Math.ceil(node.offsetWidth); // Reset after measuring to avoid breaking styles; see #660\n\n if (styleWidth) {\n node.style.width = styleWidth;\n }\n\n if (styleHeight) {\n node.style.height = styleHeight;\n }\n\n return {\n height: height,\n width: width\n };\n } else {\n return {\n height: 0,\n width: 0\n };\n }\n }\n }, {\n key: \"_maybeMeasureCell\",\n value: function _maybeMeasureCell() {\n var _this$props2 = this.props,\n cache = _this$props2.cache,\n _this$props2$columnIn = _this$props2.columnIndex,\n columnIndex = _this$props2$columnIn === void 0 ? 0 : _this$props2$columnIn,\n parent = _this$props2.parent,\n _this$props2$rowIndex = _this$props2.rowIndex,\n rowIndex = _this$props2$rowIndex === void 0 ? this.props.index || 0 : _this$props2$rowIndex;\n\n if (!cache.has(rowIndex, columnIndex)) {\n var _this$_getCellMeasure2 = this._getCellMeasurements(),\n height = _this$_getCellMeasure2.height,\n width = _this$_getCellMeasure2.width;\n\n cache.set(rowIndex, columnIndex, width, height); // If size has changed, let Grid know to re-render.\n\n if (parent && typeof parent.invalidateCellSizeAfterRender === 'function') {\n parent.invalidateCellSizeAfterRender({\n columnIndex: columnIndex,\n rowIndex: rowIndex\n });\n }\n }\n }\n }]);\n\n return CellMeasurer;\n}(React.PureComponent), _defineProperty(_class, \"propTypes\", process.env.NODE_ENV === 'production' ? null : {\n cache: function cache() {\n return (typeof bpfrpt_proptype_CellMeasureCache === \"function\" ? bpfrpt_proptype_CellMeasureCache.isRequired ? bpfrpt_proptype_CellMeasureCache.isRequired : bpfrpt_proptype_CellMeasureCache : PropTypes.shape(bpfrpt_proptype_CellMeasureCache).isRequired).apply(this, arguments);\n },\n children: PropTypes.oneOfType([PropTypes.func, PropTypes.node]).isRequired,\n columnIndex: PropTypes.number,\n index: PropTypes.number,\n parent: PropTypes.shape({\n invalidateCellSizeAfterRender: PropTypes.func,\n recomputeGridSize: PropTypes.func\n }).isRequired,\n rowIndex: PropTypes.number\n}), _temp); // Used for DEV mode warning check\n\n_defineProperty(CellMeasurer, \"__internalCellMeasurerFlag\", false);\n\nexport { CellMeasurer as default };\n\nif (process.env.NODE_ENV !== 'production') {\n CellMeasurer.__internalCellMeasurerFlag = true;\n}\n\nimport { bpfrpt_proptype_CellMeasureCache } from \"./types\";\nimport PropTypes from \"prop-types\";","import WindowScroller, { IS_SCROLLING_TIMEOUT } from './WindowScroller';\n\nexport default WindowScroller;\nexport { WindowScroller, IS_SCROLLING_TIMEOUT };","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nexport var DEFAULT_HEIGHT = 30;\nexport var DEFAULT_WIDTH = 100; // Enables more intelligent mapping of a given column and row index to an item ID.\n// This prevents a cell cache from being invalidated when its parent collection is modified.\n\n/**\n * Caches measurements for a given cell.\n */\nvar CellMeasurerCache =\n/*#__PURE__*/\nfunction () {\n function CellMeasurerCache() {\n var _this = this;\n\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, CellMeasurerCache);\n\n _defineProperty(this, \"_cellHeightCache\", {});\n\n _defineProperty(this, \"_cellWidthCache\", {});\n\n _defineProperty(this, \"_columnWidthCache\", {});\n\n _defineProperty(this, \"_rowHeightCache\", {});\n\n _defineProperty(this, \"_defaultHeight\", void 0);\n\n _defineProperty(this, \"_defaultWidth\", void 0);\n\n _defineProperty(this, \"_minHeight\", void 0);\n\n _defineProperty(this, \"_minWidth\", void 0);\n\n _defineProperty(this, \"_keyMapper\", void 0);\n\n _defineProperty(this, \"_hasFixedHeight\", void 0);\n\n _defineProperty(this, \"_hasFixedWidth\", void 0);\n\n _defineProperty(this, \"_columnCount\", 0);\n\n _defineProperty(this, \"_rowCount\", 0);\n\n _defineProperty(this, \"columnWidth\", function (_ref) {\n var index = _ref.index;\n\n var key = _this._keyMapper(0, index);\n\n return _this._columnWidthCache[key] !== undefined ? _this._columnWidthCache[key] : _this._defaultWidth;\n });\n\n _defineProperty(this, \"rowHeight\", function (_ref2) {\n var index = _ref2.index;\n\n var key = _this._keyMapper(index, 0);\n\n return _this._rowHeightCache[key] !== undefined ? _this._rowHeightCache[key] : _this._defaultHeight;\n });\n\n var defaultHeight = params.defaultHeight,\n defaultWidth = params.defaultWidth,\n fixedHeight = params.fixedHeight,\n fixedWidth = params.fixedWidth,\n keyMapper = params.keyMapper,\n minHeight = params.minHeight,\n minWidth = params.minWidth;\n this._hasFixedHeight = fixedHeight === true;\n this._hasFixedWidth = fixedWidth === true;\n this._minHeight = minHeight || 0;\n this._minWidth = minWidth || 0;\n this._keyMapper = keyMapper || defaultKeyMapper;\n this._defaultHeight = Math.max(this._minHeight, typeof defaultHeight === 'number' ? defaultHeight : DEFAULT_HEIGHT);\n this._defaultWidth = Math.max(this._minWidth, typeof defaultWidth === 'number' ? defaultWidth : DEFAULT_WIDTH);\n\n if (process.env.NODE_ENV !== 'production') {\n if (this._hasFixedHeight === false && this._hasFixedWidth === false) {\n console.warn(\"CellMeasurerCache should only measure a cell's width or height. \" + 'You have configured CellMeasurerCache to measure both. ' + 'This will result in poor performance.');\n }\n\n if (this._hasFixedHeight === false && this._defaultHeight === 0) {\n console.warn('Fixed height CellMeasurerCache should specify a :defaultHeight greater than 0. ' + 'Failing to do so will lead to unnecessary layout and poor performance.');\n }\n\n if (this._hasFixedWidth === false && this._defaultWidth === 0) {\n console.warn('Fixed width CellMeasurerCache should specify a :defaultWidth greater than 0. ' + 'Failing to do so will lead to unnecessary layout and poor performance.');\n }\n }\n }\n\n _createClass(CellMeasurerCache, [{\n key: \"clear\",\n value: function clear(rowIndex) {\n var columnIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n var key = this._keyMapper(rowIndex, columnIndex);\n\n delete this._cellHeightCache[key];\n delete this._cellWidthCache[key];\n\n this._updateCachedColumnAndRowSizes(rowIndex, columnIndex);\n }\n }, {\n key: \"clearAll\",\n value: function clearAll() {\n this._cellHeightCache = {};\n this._cellWidthCache = {};\n this._columnWidthCache = {};\n this._rowHeightCache = {};\n this._rowCount = 0;\n this._columnCount = 0;\n }\n }, {\n key: \"hasFixedHeight\",\n value: function hasFixedHeight() {\n return this._hasFixedHeight;\n }\n }, {\n key: \"hasFixedWidth\",\n value: function hasFixedWidth() {\n return this._hasFixedWidth;\n }\n }, {\n key: \"getHeight\",\n value: function getHeight(rowIndex) {\n var columnIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n if (this._hasFixedHeight) {\n return this._defaultHeight;\n } else {\n var _key = this._keyMapper(rowIndex, columnIndex);\n\n return this._cellHeightCache[_key] !== undefined ? Math.max(this._minHeight, this._cellHeightCache[_key]) : this._defaultHeight;\n }\n }\n }, {\n key: \"getWidth\",\n value: function getWidth(rowIndex) {\n var columnIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n if (this._hasFixedWidth) {\n return this._defaultWidth;\n } else {\n var _key2 = this._keyMapper(rowIndex, columnIndex);\n\n return this._cellWidthCache[_key2] !== undefined ? Math.max(this._minWidth, this._cellWidthCache[_key2]) : this._defaultWidth;\n }\n }\n }, {\n key: \"has\",\n value: function has(rowIndex) {\n var columnIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n var key = this._keyMapper(rowIndex, columnIndex);\n\n return this._cellHeightCache[key] !== undefined;\n }\n }, {\n key: \"set\",\n value: function set(rowIndex, columnIndex, width, height) {\n var key = this._keyMapper(rowIndex, columnIndex);\n\n if (columnIndex >= this._columnCount) {\n this._columnCount = columnIndex + 1;\n }\n\n if (rowIndex >= this._rowCount) {\n this._rowCount = rowIndex + 1;\n } // Size is cached per cell so we don't have to re-measure if cells are re-ordered.\n\n\n this._cellHeightCache[key] = height;\n this._cellWidthCache[key] = width;\n\n this._updateCachedColumnAndRowSizes(rowIndex, columnIndex);\n }\n }, {\n key: \"_updateCachedColumnAndRowSizes\",\n value: function _updateCachedColumnAndRowSizes(rowIndex, columnIndex) {\n // :columnWidth and :rowHeight are derived based on all cells in a column/row.\n // Pre-cache these derived values for faster lookup later.\n // Reads are expected to occur more frequently than writes in this case.\n // Only update non-fixed dimensions though to avoid doing unnecessary work.\n if (!this._hasFixedWidth) {\n var columnWidth = 0;\n\n for (var i = 0; i < this._rowCount; i++) {\n columnWidth = Math.max(columnWidth, this.getWidth(i, columnIndex));\n }\n\n var columnKey = this._keyMapper(0, columnIndex);\n\n this._columnWidthCache[columnKey] = columnWidth;\n }\n\n if (!this._hasFixedHeight) {\n var rowHeight = 0;\n\n for (var _i = 0; _i < this._columnCount; _i++) {\n rowHeight = Math.max(rowHeight, this.getHeight(rowIndex, _i));\n }\n\n var rowKey = this._keyMapper(rowIndex, 0);\n\n this._rowHeightCache[rowKey] = rowHeight;\n }\n }\n }, {\n key: \"defaultHeight\",\n get: function get() {\n return this._defaultHeight;\n }\n }, {\n key: \"defaultWidth\",\n get: function get() {\n return this._defaultWidth;\n }\n }]);\n\n return CellMeasurerCache;\n}();\n\nexport { CellMeasurerCache as default };\n\nfunction defaultKeyMapper(rowIndex, columnIndex) {\n return \"\".concat(rowIndex, \"-\").concat(columnIndex);\n}\n\nimport { bpfrpt_proptype_CellMeasureCache } from \"./types\";","function areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (var i = 0; i < newInputs.length; i++) {\n if (newInputs[i] !== lastInputs[i]) {\n return false;\n }\n }\n return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n if (isEqual === void 0) { isEqual = areInputsEqual; }\n var lastThis;\n var lastArgs = [];\n var lastResult;\n var calledOnce = false;\n function memoized() {\n var newArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newArgs[_i] = arguments[_i];\n }\n if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {\n return lastResult;\n }\n lastResult = resultFn.apply(this, newArgs);\n calledOnce = true;\n lastThis = this;\n lastArgs = newArgs;\n return lastResult;\n }\n return memoized;\n}\n\nexport default memoizeOne;\n","import React, {PureComponent} from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport checkmarkIcon from '@jetbrains/icons/checkmark.svg';\n\nimport Icon from '../icon/icon';\n\nimport styles from './checkbox.css';\n\n/**\n * @name Checkbox\n */\nexport default class Checkbox extends PureComponent {\n\n static propTypes = {\n name: PropTypes.string,\n label: PropTypes.string,\n className: PropTypes.string,\n defaultChecked: PropTypes.bool,\n checked: PropTypes.bool,\n disabled: PropTypes.bool,\n onChange: PropTypes.func,\n children: PropTypes.node\n };\n\n inputRef = el => {\n this.input = el;\n };\n\n render() {\n const {children, label, ...restProps} = this.props;\n\n const classes = classNames(\n styles.input,\n this.props.className\n );\n\n return (\n \n \n \n \n \n {label || children}\n \n );\n }\n}\n","import React, {PureComponent} from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport dataTests from '../global/data-tests';\nimport Avatar, {Size as AvatarSize} from '../avatar/avatar';\nimport Checkbox from '../checkbox/checkbox';\nimport Icon from '../icon';\n\nimport getUID from '../global/get-uid';\nimport globalStyles from '../global/global.css';\n\nimport styles from './list.css';\n\n/**\n * @constructor\n * @extends {ReactComponent}\n */\n\nconst RING_UNIT = 8;\nconst DEFAULT_PADDING = 16;\nconst CHECKBOX_WIDTH = 28;\n\nexport default class ListItem extends PureComponent {\n static propTypes = {\n scrolling: PropTypes.bool,\n hover: PropTypes.bool,\n details: PropTypes.string,\n disabled: PropTypes.bool,\n className: PropTypes.string,\n tabIndex: PropTypes.number,\n checkbox: PropTypes.bool,\n description: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.element,\n PropTypes.array\n ]),\n avatar: PropTypes.string,\n subavatar: PropTypes.string,\n glyph: PropTypes.oneOfType([PropTypes.string, PropTypes.elementType]),\n icon: PropTypes.string,\n iconSize: PropTypes.number,\n rightNodes: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.element,\n PropTypes.array\n ]),\n leftNodes: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.element,\n PropTypes.array\n ]),\n label: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),\n title: PropTypes.string,\n level: PropTypes.number,\n rgItemType: PropTypes.number,\n rightGlyph: PropTypes.oneOfType([PropTypes.string, PropTypes.elementType]),\n compact: PropTypes.bool,\n onClick: PropTypes.func,\n onCheckboxChange: PropTypes.func,\n onMouseOver: PropTypes.func,\n onMouseUp: PropTypes.func,\n 'data-test': PropTypes.string\n };\n\n id = getUID('list-item-');\n\n stopBubbling = e => e.stopPropagation();\n\n _isString = val => typeof val === 'string' || val instanceof String;\n\n render() {\n const {\n scrolling,\n className,\n disabled,\n checkbox,\n avatar,\n subavatar,\n glyph,\n icon,\n rightGlyph,\n description,\n label,\n title,\n details,\n hover,\n rgItemType,\n level,\n tabIndex,\n compact,\n onClick,\n onCheckboxChange,\n onMouseOver,\n onMouseUp,\n rightNodes,\n leftNodes,\n ...restProps\n } = this.props;\n\n const checkable = checkbox !== undefined;\n const hasLeftNodes = leftNodes || glyph || avatar;\n const showCheckbox = checkable && (checkbox || !hasLeftNodes || (hover && !disabled));\n\n const classes = classNames(styles.item, globalStyles.resetButton, className, {\n [styles.action]: !disabled,\n [styles.hover]: hover && !disabled,\n [styles.compact]: compact,\n [styles.scrolling]: scrolling,\n [styles.disabled]: disabled\n });\n\n const detailsClasses = classNames({\n [styles.details]: details,\n [styles.padded]: icon !== undefined ||\n checkbox !== undefined ||\n glyph !== undefined\n });\n\n const style = {\n paddingLeft: `${(+level || 0) * RING_UNIT + DEFAULT_PADDING + (showCheckbox ? CHECKBOX_WIDTH : 0)}px`\n };\n\n let computedTitle = null;\n if (this._isString(title)) {\n // if title is specified and is a string then use it\n computedTitle = title;\n } else {\n // otherwise use label if it is a string;\n // label can also be an element, use empty string in this case\n computedTitle = this._isString(label) ? label : '';\n }\n\n const dataTest = dataTests({\n 'ring-list-item': (restProps['data-test'] || '').indexOf('ring-list-item') === -1,\n 'ring-list-item-action': !disabled,\n 'ring-list-item-selected': checkbox\n }, restProps['data-test']);\n\n return (\n
\n {showCheckbox && (\n \n \n
\n )}\n \n
\n {!showCheckbox && (\n
\n {leftNodes}\n {glyph && (\n \n )}\n {avatar && (\n \n )}\n
\n )}\n\n {label}\n\n {description && (\n {description}\n )}\n\n
\n {rightGlyph && (\n \n )}\n {icon && (\n \n )}\n {rightNodes}\n
\n
\n\n {details &&
{details}
}\n \n \n );\n }\n}\n","// react-dom getEventKey function extracted\n\nconst 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\nconst 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\nconst ENTER = 13;\nconst SPACE = 32;\n\nfunction getEventCharCode(nativeEvent) {\n let charCode;\n const 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 === ENTER) {\n charCode = ENTER;\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 >= SPACE || charCode === ENTER) {\n return charCode;\n }\n return 0;\n}\n\n\nexport default function 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 const 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 const 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 === SPACE ? '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","import React, {PureComponent} from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport dataTests from '../global/data-tests';\nimport getEventKey from '../global/get-event-key';\n\nimport styles from './list.css';\n\nexport default class ListCustom extends PureComponent {\n static propTypes = {\n scrolling: PropTypes.bool,\n hover: PropTypes.bool,\n className: PropTypes.string,\n disabled: PropTypes.bool,\n rgItemType: PropTypes.number,\n tabIndex: PropTypes.number,\n template: PropTypes.oneOfType([\n PropTypes.func,\n PropTypes.element,\n PropTypes.string\n ]),\n onClick: PropTypes.func,\n onMouseOver: PropTypes.func,\n onMouseUp: PropTypes.func,\n onCheckboxChange: PropTypes.func,\n 'data-test': PropTypes.string\n };\n\n static defaultProps = {\n hover: false\n };\n\n handleKeyPress = event => {\n const key = getEventKey(event);\n if (key === 'Enter' || key === ' ') {\n this.props.onClick(event);\n }\n };\n\n render() {\n const {\n scrolling,\n hover,\n className,\n disabled,\n template,\n rgItemType,\n tabIndex,\n onClick,\n onCheckboxChange,\n onMouseOver,\n onMouseUp,\n ...restProps\n } = this.props;\n const classes = classNames(styles.item, className, {\n [styles.action]: !disabled,\n [styles.hover]: hover && !disabled,\n [styles.scrolling]: scrolling\n });\n\n\n const dataTest = dataTests('ring-list-item-custom', {\n 'ring-list-item-action': !disabled\n }, restProps['data-test']);\n\n const content = (typeof template === 'function') ? template(this.props) : template;\n return (\n \n {content}\n \n );\n }\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport {pure} from 'recompose';\n\nimport memoize from '../global/memoize';\nimport dataTests from '../global/data-tests';\n\nimport ClickableLink from './clickableLink';\nimport styles from './link.css';\n\n/**\n * @name Link\n */\n\nlet isCompatibilityMode = false;\n\nexport function setCompatibilityMode(isEnabled) {\n isCompatibilityMode = isEnabled;\n}\n\nconst makeWrapText = memoize(innerClassName => {\n const WrapText = pure(function WrapText({className, children}) {\n const classes = classNames(styles.inner, className, innerClassName);\n return {children};\n });\n\n WrapText.propTypes = {\n className: PropTypes.string,\n children: PropTypes.node\n };\n\n return WrapText;\n});\n\nexport function linkHOC(ComposedComponent) {\n const isCustom = typeof ComposedComponent !== 'string' && ComposedComponent !== ClickableLink;\n\n return class Link extends Component {\n static propTypes = {\n className: PropTypes.string,\n innerClassName: PropTypes.string,\n active: PropTypes.bool,\n inherit: PropTypes.bool,\n pseudo: PropTypes.bool,\n hover: PropTypes.bool,\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n 'data-test': PropTypes.string,\n href: PropTypes.string,\n onPlainLeftClick: PropTypes.func,\n onClick: PropTypes.func\n };\n\n getChildren() {\n const {children, innerClassName} = this.props;\n\n const WrapText = makeWrapText(innerClassName);\n\n return typeof children === 'function'\n ? children(WrapText)\n : {children};\n }\n\n render() {\n const {\n active,\n inherit,\n pseudo,\n hover,\n className,\n 'data-test': dataTest,\n href,\n innerClassName, children, onPlainLeftClick, onClick,\n ...props\n } = this.props;\n const useButton = pseudo || !isCustom && href == null;\n\n const classes = classNames(styles.link, className, {\n [styles.active]: active,\n [styles.inherit]: inherit,\n [styles.hover]: hover,\n [styles.compatibilityUnderlineMode]: isCompatibilityMode,\n [styles.pseudo]: useButton\n });\n\n if (isCustom && !props.activeClassName) {\n props.activeClassName = styles.active;\n }\n\n if (useButton) {\n return (\n {this.getChildren()}\n );\n }\n\n return (\n \n {this.getChildren()}\n \n );\n }\n };\n}\n\nexport default linkHOC(ClickableLink);\n","import React, {Component, PureComponent} from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport Link, {linkHOC} from '../link/link';\nimport dataTests from '../global/data-tests';\n\nimport styles from './list.css';\n\n/**\n * @constructor\n * @extends {ReactComponent}\n */\nexport default class ListLink extends PureComponent {\n static propTypes = {\n ...Link.propTypes,\n description: PropTypes.string,\n label: PropTypes.oneOfType([\n PropTypes.element,\n PropTypes.string\n ]),\n rgItemType: PropTypes.number,\n scrolling: PropTypes.bool,\n url: PropTypes.string,\n LinkComponent: PropTypes.oneOfType([\n PropTypes.instanceOf(Component),\n PropTypes.func,\n PropTypes.string\n ]),\n onCheckboxChange: PropTypes.func,\n compact: PropTypes.bool\n };\n\n render() {\n const {\n scrolling,\n 'data-test': dataTest,\n className,\n label,\n hover,\n description,\n rgItemType,\n url,\n onCheckboxChange,\n disabled,\n LinkComponent,\n compact,\n hoverClassName,\n ...restProps\n } = this.props;\n const classes = classNames(styles.item, className, {\n [styles.actionLink]: !disabled,\n [styles.compact]: compact,\n [styles.scrolling]: scrolling\n });\n\n const Comp = LinkComponent ? linkHOC(LinkComponent) : Link;\n\n return (\n \n {label}\n \n );\n }\n}\n","import React, {PureComponent} from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nimport styles from './list.css';\n\nexport default class ListTitle extends PureComponent {\n static propTypes = {\n className: PropTypes.string,\n description: PropTypes.oneOfType([\n PropTypes.element,\n PropTypes.string\n ]),\n label: PropTypes.oneOfType([\n PropTypes.element,\n PropTypes.string\n ]),\n isFirst: PropTypes.bool\n };\n\n render() {\n const {className, description, label, isFirst} = this.props;\n\n const classes = classnames(styles.title, className, {\n [styles.title_first]: isFirst\n });\n\n return (\n \n {label}\n {description}\n \n );\n }\n}\n","import React, {PureComponent} from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport styles from './list.css';\n\nexport default class ListSeparator extends PureComponent {\n static propTypes = {\n className: PropTypes.string,\n description: PropTypes.oneOfType([\n PropTypes.element,\n PropTypes.string\n ]),\n isFirst: PropTypes.bool\n };\n\n render() {\n const {description, isFirst, className} = this.props;\n\n const classes = classNames(styles.separator, className, {\n [styles.separator_first]: isFirst\n });\n\n return (\n {description}\n );\n }\n}\n","import React, {PureComponent} from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nimport styles from './list.css';\n\n/**\n * @constructor\n * @extends {ReactComponent}\n */\nexport default class ListHint extends PureComponent {\n static propTypes = {\n label: PropTypes.oneOfType([\n PropTypes.element,\n PropTypes.string\n ])\n };\n\n render() {\n return (\n {this.props.label}\n );\n }\n}\n","/**\n * @name List\n */\n\nimport 'dom4';\nimport React, {Component, cloneElement} from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport VirtualizedList from 'react-virtualized/dist/es/List';\nimport AutoSizer from 'react-virtualized/dist/es/AutoSizer';\nimport WindowScroller from 'react-virtualized/dist/es/WindowScroller';\n// TODO move back when https://github.com/bvaughn/react-virtualized/pull/1477 is merged and released\nimport {CellMeasurer, CellMeasurerCache} from '@hypnosphi/react-virtualized/dist/es/CellMeasurer';\nimport deprecate from 'util-deprecate';\nimport memoizeOne from 'memoize-one';\n\nimport dataTests from '../global/data-tests';\nimport getUID from '../global/get-uid';\nimport scheduleRAF from '../global/schedule-raf';\nimport memoize from '../global/memoize';\nimport {preventDefault} from '../global/dom';\nimport Shortcuts from '../shortcuts/shortcuts';\n\nimport styles from './list.css';\nimport ListItem from './list__item';\nimport ListCustom from './list__custom';\nimport ListLink from './list__link';\nimport ListTitle from './list__title';\nimport ListSeparator from './list__separator';\nimport ListHint from './list__hint';\n\nconst scheduleScrollListener = scheduleRAF();\nconst scheduleHoverListener = scheduleRAF();\n/**\n * @enum {number}\n */\nconst Type = {\n SEPARATOR: 0,\n LINK: 1,\n ITEM: 2,\n HINT: 3,\n CUSTOM: 4,\n TITLE: 5,\n MARGIN: 6\n};\n\nconst Dimension = {\n ITEM_PADDING: 16,\n ITEM_HEIGHT: 32,\n COMPACT_ITEM_HEIGHT: 24,\n SEPARATOR_HEIGHT: 25,\n SEPARATOR_FIRST_HEIGHT: 16,\n SEPARATOR_TEXT_HEIGHT: 18,\n TITLE_HEIGHT: 42,\n INNER_PADDING: 8,\n MARGIN: 8\n};\n\nconst DEFAULT_ITEM_TYPE = Type.ITEM;\n\nfunction noop() {}\n\nconst warnEmptyKey = deprecate(\n () => {},\n 'No key passed for list item with non-string label. It is considered as a bad practice and has been deprecated, please provide a key.'\n);\n\n/**\n * @param {Type} listItemType\n * @param {Object} item list item\n */\nfunction isItemType(listItemType, item) {\n let type = item.rgItemType;\n if (type == null) {\n type = DEFAULT_ITEM_TYPE;\n }\n return type === listItemType;\n}\n\nconst nonActivatableTypes = [\n Type.SEPARATOR,\n Type.TITLE,\n Type.MARGIN\n];\n\nfunction isActivatable(item) {\n return !nonActivatableTypes.includes(item.rgItemType) && !item.disabled;\n}\n\nconst shouldActivateFirstItem = props => props.activateFirstItem ||\n props.activateSingleItem && props.data.length === 1;\n\n/**\n * @name List\n * @constructor\n * @extends {ReactComponent}\n */\nexport default class List extends Component {\n static propTypes = {\n className: PropTypes.string,\n hint: PropTypes.string,\n hintOnSelection: PropTypes.string,\n data: PropTypes.array,\n maxHeight: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number\n ]),\n activeIndex: PropTypes.number,\n restoreActiveIndex: PropTypes.bool,\n activateSingleItem: PropTypes.bool,\n activateFirstItem: PropTypes.bool,\n shortcuts: PropTypes.bool,\n onMouseOut: PropTypes.func,\n onSelect: PropTypes.func,\n onScrollToBottom: PropTypes.func,\n onResize: PropTypes.func,\n useMouseUp: PropTypes.bool,\n visible: PropTypes.bool,\n renderOptimization: PropTypes.bool,\n disableMoveOverflow: PropTypes.bool,\n disableMoveDownOverflow: PropTypes.bool,\n compact: PropTypes.bool,\n disableScrollToActive: PropTypes.bool\n };\n\n static defaultProps = {\n data: [],\n restoreActiveIndex: false, // restore active item using its \"key\" property\n activateSingleItem: false, // if there is only one item, activate it\n activateFirstItem: false, // if there no active items, activate the first one\n onMouseOut: noop,\n onSelect: noop,\n onScrollToBottom: noop,\n onResize: noop,\n shortcuts: false,\n renderOptimization: true,\n disableMoveDownOverflow: false\n };\n\n state = {\n activeIndex: null,\n prevActiveIndex: null,\n prevData: [],\n activeItem: null,\n needScrollToActive: false,\n scrolling: false,\n hasOverflow: false,\n disabledHover: false,\n scrolledToBottom: false\n };\n\n static getDerivedStateFromProps(nextProps, prevState) {\n const {prevActiveIndex, prevData, activeItem} = prevState;\n const {data, activeIndex, restoreActiveIndex} = nextProps;\n const nextState = {prevActiveIndex: activeIndex, prevData: data};\n\n if (data !== prevData) {\n Object.assign(nextState, {\n activeIndex: null,\n activeItem: null\n });\n }\n\n if (activeIndex != null && activeIndex !== prevActiveIndex && data[activeIndex] != null) {\n Object.assign(nextState, {\n activeIndex,\n activeItem: data[activeIndex],\n needScrollToActive: true\n });\n } else if (\n data !== prevData &&\n restoreActiveIndex &&\n activeItem != null &&\n activeItem.key != null\n ) {\n // Restore active index if there is an item with the same \"key\" property\n const index = data.findIndex(item => item.key === activeItem.key);\n if (index >= 0) {\n Object.assign(nextState, {\n activeIndex: index,\n activeItem: data[index]\n });\n }\n }\n\n if (\n activeIndex == null &&\n prevState.activeIndex == null &&\n shouldActivateFirstItem(nextProps)\n ) {\n const firstActivatableIndex = data.findIndex(isActivatable);\n if (firstActivatableIndex >= 0) {\n Object.assign(nextState, {\n activeIndex: firstActivatableIndex,\n activeItem: data[firstActivatableIndex],\n needScrollToActive: true\n });\n }\n }\n\n return nextState;\n }\n\n componentDidMount() {\n document.addEventListener('mousemove', this.onDocumentMouseMove);\n document.addEventListener('keydown', this.onDocumentKeyDown, true);\n }\n\n shouldComponentUpdate(nextProps, nextState) {\n return nextProps !== this.props ||\n Object.keys(nextState).some(key => nextState[key] !== this.state[key]);\n }\n\n componentDidUpdate(prevProps) {\n if (this.virtualizedList && prevProps.data !== this.props.data) {\n this.virtualizedList.recomputeRowHeights();\n }\n\n this.checkOverflow();\n }\n\n componentWillUnmount() {\n this.unmounted = true;\n document.removeEventListener('mousemove', this.onDocumentMouseMove);\n document.removeEventListener('keydown', this.onDocumentKeyDown, true);\n }\n\n static isItemType = isItemType;\n\n static ListHint = ListHint;\n\n static ListProps = {\n Type,\n Dimension\n };\n\n hoverHandler = memoize(index => () =>\n scheduleHoverListener(() => {\n if (this.state.disabledHover) {\n return;\n }\n\n if (this.container) {\n this.setState({\n activeIndex: index,\n activeItem: this.props.data[index],\n needScrollToActive: false\n });\n }\n })\n );\n\n _activatableItems = false;\n\n // eslint-disable-next-line no-magic-numbers\n _bufferSize = 10; // keep X items above and below of the visible area\n // reuse size cache for similar items\n sizeCacheKey = index => {\n if (index === 0 || index === this.props.data.length + 1) {\n return Type.MARGIN;\n }\n\n const item = this.props.data[index - 1];\n const isFirst = index === 1;\n switch (item.rgItemType) {\n case Type.SEPARATOR:\n case Type.TITLE:\n return `${item.rgItemType}${isFirst ? '_first' : ''}${item.description ? '_desc' : ''}`;\n case Type.MARGIN:\n return Type.MARGIN;\n case Type.CUSTOM:\n return `${Type.CUSTOM}_${item.key}`;\n case Type.ITEM:\n case Type.LINK:\n default:\n if (item.details) {\n return `${Type.ITEM}_${item.details}`;\n }\n return Type.ITEM;\n }\n };\n\n _cache = new CellMeasurerCache({\n defaultHeight: this.defaultItemHeight(),\n fixedWidth: true,\n keyMapper: this.sizeCacheKey\n });\n\n _hasActivatableItems = memoizeOne(items => items.some(isActivatable));\n hasActivatableItems() {\n return this._hasActivatableItems(this.props.data);\n }\n\n selectHandler = memoize(index => (event, tryKeepOpen = false) => {\n const item = this.props.data[index];\n if (!this.props.useMouseUp && item.onClick) {\n item.onClick(item, event);\n } else if (this.props.useMouseUp && item.onMouseUp) {\n item.onMouseUp(item, event);\n }\n\n if (this.props.onSelect) {\n this.props.onSelect(item, event, {tryKeepOpen});\n }\n });\n\n upHandler = e => {\n const {data, disableMoveOverflow} = this.props;\n const index = this.state.activeIndex;\n let newIndex;\n\n if (index === null || index === 0) {\n if (!disableMoveOverflow) {\n newIndex = data.length - 1;\n } else {\n return;\n }\n } else {\n newIndex = index - 1;\n }\n\n this.moveHandler(newIndex, this.upHandler, e);\n };\n\n downHandler = e => {\n const {data, disableMoveOverflow, disableMoveDownOverflow} = this.props;\n const index = this.state.activeIndex;\n let newIndex;\n\n if (index === null) {\n newIndex = 0;\n } else if (index + 1 === data.length) {\n if (!disableMoveOverflow && !disableMoveDownOverflow) {\n newIndex = 0;\n } else {\n return;\n }\n } else {\n newIndex = index + 1;\n }\n\n this.moveHandler(newIndex, this.downHandler, e);\n };\n\n homeHandler = e => {\n this.moveHandler(0, this.downHandler, e);\n };\n\n endHandler = e => {\n this.moveHandler(this.props.data.length - 1, this.upHandler, e);\n };\n\n onDocumentMouseMove = () => {\n if (this.state.disabledHover) {\n this.setState({disabledHover: false});\n }\n };\n\n onDocumentKeyDown = e => {\n const metaKeys = [16, 17, 18, 19, 20, 91]; // eslint-disable-line no-magic-numbers\n if (!this.state.disabledHover && !metaKeys.includes(e.keyCode)) {\n this.setState({disabledHover: true});\n }\n };\n\n moveHandler(index, retryCallback, e) {\n let correctedIndex;\n if (this.props.data.length === 0 || !this.hasActivatableItems()) {\n return;\n } else if (this.props.data.length < index) {\n correctedIndex = 0;\n } else {\n correctedIndex = index;\n }\n\n const item = this.props.data[correctedIndex];\n this.setState(\n {\n activeIndex: correctedIndex,\n activeItem: item,\n needScrollToActive: true\n },\n function onSet() {\n if (!isActivatable(item)) {\n retryCallback(e);\n return;\n }\n\n if (e.key !== 'Home' && e.key !== 'End') {\n preventDefault(e);\n }\n }\n );\n }\n\n mouseHandler = () => {\n this.setState({scrolling: false});\n };\n\n scrollHandler = () => {\n this.setState({scrolling: true}, this.scrollEndHandler);\n };\n\n enterHandler = (event, shortcut) => {\n if (this.state.activeIndex !== null) {\n const item = this.props.data[this.state.activeIndex];\n this.selectHandler(this.state.activeIndex)(event);\n\n if (item.href && !event.defaultPrevented) {\n if (['command+enter', 'ctrl+enter'].includes(shortcut)) {\n window.open(item.href, '_blank');\n } else if (shortcut === 'shift+enter') {\n window.open(item.href);\n } else {\n window.location.href = item.href;\n }\n }\n return false; // do not propagate event\n } else {\n return true; // propagate event to the parent component (e.g., QueryAssist)\n }\n };\n\n getFirst() {\n return this.props.data.find(\n item => item.rgItemType === Type.ITEM || item.rgItemType === Type.CUSTOM\n );\n }\n\n getSelected() {\n return this.props.data[this.state.activeIndex];\n }\n\n clearSelected = () => {\n this.setState({\n activeIndex: null,\n needScrollToActive: false\n });\n };\n\n defaultItemHeight() {\n return this.props.compact ? Dimension.COMPACT_ITEM_HEIGHT : Dimension.ITEM_HEIGHT;\n }\n\n scrollEndHandler = () => scheduleScrollListener(() => {\n const innerContainer = this.inner;\n if (innerContainer) {\n const maxScrollingPosition = innerContainer.scrollHeight;\n const sensitivity = this.defaultItemHeight() / 2;\n const currentScrollingPosition =\n innerContainer.scrollTop + innerContainer.clientHeight + sensitivity;\n const scrolledToBottom =\n maxScrollingPosition > 0 && currentScrollingPosition >= maxScrollingPosition;\n if (!this.unmounted) {\n this.setState({scrolledToBottom});\n }\n if (scrolledToBottom) {\n this.props.onScrollToBottom();\n }\n }\n });\n\n checkOverflow = () => {\n if (this.inner) {\n this.setState({\n hasOverflow: this.inner.scrollHeight - this.inner.clientHeight > 1\n });\n }\n };\n\n getVisibleListHeight(props) {\n return props.maxHeight - this.defaultItemHeight() - Dimension.INNER_PADDING;\n }\n\n _deprecatedGenerateKeyFromContent(itemProps) {\n const identificator = itemProps.label || itemProps.description;\n const isString = typeof identificator === 'string' || identificator instanceof String;\n if (identificator && !isString) {\n warnEmptyKey();\n `${itemProps.rgItemType}_${JSON.stringify(identificator)}`;\n }\n return `${itemProps.rgItemType}_${identificator}`;\n }\n\n renderItem = ({index, style, isScrolling, parent, key}) => {\n let itemKey;\n let el;\n\n const realIndex = index - 1;\n\n const item = this.props.data[realIndex];\n\n // top and bottom margins\n if (index === 0 || index === this.props.data.length + 1 || item.rgItemType === Type.MARGIN) {\n itemKey = key || `${Type.MARGIN}_${index}`;\n el =
;\n } else {\n\n // Hack around SelectNG implementation\n const {selectedLabel, originalModel, ...cleanedProps} = item;\n const itemProps = Object.assign({rgItemType: DEFAULT_ITEM_TYPE}, cleanedProps);\n\n if (itemProps.url) {\n itemProps.href = itemProps.url;\n }\n if (itemProps.href) {\n itemProps.rgItemType = Type.LINK;\n }\n\n itemKey = key || itemProps.key || this._deprecatedGenerateKeyFromContent(itemProps);\n\n itemProps.hover = (realIndex === this.state.activeIndex);\n if (itemProps.hoverClassName != null && itemProps.hover) {\n itemProps.className = classNames(itemProps.className, itemProps.hoverClassName);\n }\n itemProps.onMouseOver = this.hoverHandler(realIndex);\n itemProps.tabIndex = -1;\n itemProps.scrolling = isScrolling;\n\n const selectHandler = this.selectHandler(realIndex);\n\n if (this.props.useMouseUp) {\n itemProps.onMouseUp = selectHandler;\n } else {\n itemProps.onClick = selectHandler;\n }\n itemProps.onCheckboxChange = event => selectHandler(event, true);\n\n if (itemProps.compact == null) {\n itemProps.compact = this.props.compact;\n }\n\n let ItemComponent;\n const isFirst = index === 1;\n switch (itemProps.rgItemType) {\n case Type.SEPARATOR:\n ItemComponent = ListSeparator;\n itemProps.isFirst = isFirst;\n break;\n case Type.LINK:\n ItemComponent = ListLink;\n this.addItemDataTestToProp(itemProps);\n break;\n case Type.ITEM:\n ItemComponent = ListItem;\n this.addItemDataTestToProp(itemProps);\n break;\n case Type.CUSTOM:\n ItemComponent = ListCustom;\n this.addItemDataTestToProp(itemProps);\n break;\n case Type.TITLE:\n itemProps.isFirst = isFirst;\n ItemComponent = ListTitle;\n break;\n default:\n throw new Error(`Unknown menu element type: ${itemProps.rgItemType}`);\n }\n\n el = ;\n }\n\n return parent ? (\n \n {({registerChild}) => (\n
\n
\n {el}\n
\n
\n )}\n \n ) : cloneElement(el, {key: itemKey});\n };\n\n addItemDataTestToProp = props => {\n props['data-test'] = dataTests('ring-list-item', props['data-test']);\n return props;\n };\n\n virtualizedListRef = el => {\n this.virtualizedList = el;\n };\n\n containerRef = el => {\n this.container = el;\n };\n\n get inner() {\n if (!this._inner) {\n this._inner = this.container && this.container.query('.ring-list__i');\n }\n return this._inner;\n }\n\n renderVirtualizedInner({\n height,\n maxHeight,\n autoHeight = false,\n rowCount,\n isScrolling,\n onChildScroll = noop,\n scrollTop,\n registerChild\n }) {\n const dirOverride = {direction: 'auto'}; // Virtualized sets \"direction: ltr\" by defaulthttps://github.com/bvaughn/react-virtualized/issues/457\n return (\n \n {({width}) => (\n
\n {\n onChildScroll(e);\n this.scrollEndHandler(e);\n }}\n scrollTop={scrollTop}\n rowCount={rowCount}\n estimatedRowSize={this.defaultItemHeight()}\n rowHeight={this._cache.rowHeight}\n rowRenderer={this.renderItem}\n overscanRowCount={this._bufferSize}\n\n // ensure rerendering\n noop={() => {}}\n\n scrollToIndex={\n !this.props.disableScrollToActive &&\n this.state.needScrollToActive &&\n this.state.activeIndex != null\n ? this.state.activeIndex + 1\n : undefined\n }\n scrollToAlignment=\"center\"\n deferredMeasurementCache={this._cache}\n onRowsRendered={this.checkOverflow}\n />\n
\n )}\n
\n );\n }\n\n renderVirtualized(maxHeight, rowCount) {\n if (maxHeight) {\n return this.renderVirtualizedInner({height: maxHeight, maxHeight, rowCount});\n }\n\n return (\n \n {props => this.renderVirtualizedInner({...props, rowCount, autoHeight: true})}\n \n );\n }\n\n renderSimple(maxHeight, rowCount) {\n const items = [];\n\n for (let index = 0; index < rowCount; index++) {\n items.push(this.renderItem({\n index,\n isScrolling: this.state.scrolling\n }));\n }\n\n return (\n \n \n {items}\n
\n \n );\n }\n\n shortcutsScope = getUID('list-');\n shortcutsMap = {\n up: this.upHandler,\n down: this.downHandler,\n home: this.homeHandler,\n end: this.endHandler,\n enter: this.enterHandler,\n 'meta+enter': this.enterHandler,\n 'ctrl+enter': this.enterHandler,\n 'command+enter': this.enterHandler,\n 'shift+enter': this.enterHandler\n };\n\n /** @override */\n render() {\n const hint = this.getSelected() && this.props.hintOnSelection || this.props.hint;\n const fadeStyles = hint ? {bottom: Dimension.ITEM_HEIGHT} : null;\n\n const rowCount = this.props.data.length + 2;\n\n const maxHeight = this.props.maxHeight && this.getVisibleListHeight(this.props);\n\n const classes = classNames(styles.list, this.props.className);\n\n return (\n \n {this.props.shortcuts &&\n (\n \n )\n }\n {this.props.renderOptimization\n ? this.renderVirtualized(maxHeight, rowCount)\n : this.renderSimple(maxHeight, rowCount)\n }\n {this.state.hasOverflow && !this.state.scrolledToBottom && (\n \n )}\n {hint && (\n \n )}\n \n );\n }\n}\n","import React, {PureComponent} from 'react';\n\nimport sniffr from '../global/sniffer';\n\nfunction noop() {}\n\n/**\n * Workaround: IE11 loses symbols in onChange event\n * See RG-1361 and https://github.com/facebook/react/issues/7027\n */\nconst isIE11 = sniffr.browser.name === 'ie' && sniffr.browser.versionString === '11.0';\n\nexport default function ieCompatibleInputHOC(ComposedComponent) {\n return class IeCompatibleInput extends PureComponent {\n static propTypes = ComposedComponent.propTypes;\n\n render() {\n const {onChange, multiple, ...restProps} = this.props;\n\n const changeListenProps = (isIE11 && !multiple)\n ? {\n onInput: onChange,\n onChange: noop\n }\n : {onChange};\n\n return (\n \n );\n }\n };\n}\n","import React, {PureComponent} from 'react';\nimport {compose} from 'recompose';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport closeIcon from '@jetbrains/icons/close.svg';\n\nimport Theme, {withTheme} from '../global/theme';\nimport Button from '../button/button';\n\nimport getUID from '../global/get-uid';\n\nimport Icon from '../icon/icon';\n\nimport ieCompatibleInputHOC from './ie-compatible-hoc';\nimport styles from './input.css';\n\nfunction noop() {}\n\n/**\n * @name Input\n */\n\nconst Size = {\n AUTO: 'Auto',\n S: 'S',\n M: 'M',\n L: 'L',\n FULL: 'FULL'\n};\n\nexport class Input extends PureComponent {\n static propTypes = {\n value: PropTypes.string,\n theme: PropTypes.string,\n className: PropTypes.string,\n inputClassName: PropTypes.string,\n size: PropTypes.string,\n label: PropTypes.string,\n active: PropTypes.bool,\n error: PropTypes.string,\n multiline: PropTypes.bool,\n borderless: PropTypes.bool,\n compact: PropTypes.bool,\n onChange: PropTypes.func,\n onClear: PropTypes.func,\n inputRef: PropTypes.oneOfType([\n PropTypes.func,\n PropTypes.shape({current: PropTypes.instanceOf(HTMLInputElement)})\n ]),\n children: PropTypes.string,\n enableShortcuts: PropTypes.bool,\n disabled: PropTypes.bool,\n id: PropTypes.string,\n placeholder: PropTypes.string,\n icon: PropTypes.oneOfType([PropTypes.string, PropTypes.elementType])\n };\n\n static defaultProps = {\n size: Size.M,\n onChange: noop,\n inputRef: noop,\n enableShortcuts: false\n };\n\n state = {\n empty: true\n };\n\n componentDidMount() {\n this.adapt();\n }\n\n componentDidUpdate() {\n this.adapt();\n }\n\n id = getUID('ring-input-');\n getId() {\n return this.props.id || this.id;\n }\n\n checkValue() {\n this.setState({\n empty: !this.input.value\n });\n\n if (this.props.multiline && this.input.scrollHeight > this.input.clientHeight) {\n this.stretch(this.input);\n }\n }\n\n stretch(el) {\n if (!el) {\n return;\n }\n el.style.height = `${el.scrollHeight}px`;\n }\n\n adapt() {\n this.checkValue();\n this.stretch(this.error);\n }\n\n errorRef = el => {\n this.error = el;\n };\n\n inputRef = el => {\n const {inputRef} = this.props;\n\n this.input = el;\n if (typeof inputRef === 'function') {\n inputRef(el);\n } else {\n inputRef.current = el;\n }\n };\n\n clear = e => {\n this.props.onClear && this.props.onClear(e);\n };\n\n handleChange = e => {\n this.props.onChange(e);\n this.checkValue(e.target);\n };\n\n render() {\n const {\n // Modifiers\n theme,\n size,\n active,\n multiline,\n borderless,\n compact,\n\n // Props\n label,\n error,\n className,\n inputClassName,\n children,\n value,\n onClear,\n disabled,\n inputRef, onChange,\n enableShortcuts,\n id,\n placeholder,\n icon,\n ...restProps\n } = this.props;\n const minimizeMargins = compact || borderless;\n const {empty} = this.state;\n const clearable = !!onClear;\n const classes = classNames(\n styles.container,\n className,\n styles[theme],\n [styles[`size${size}`]],\n {\n 'ring-js-shortcuts': enableShortcuts,\n [styles.active]: active,\n [styles.error]: error != null,\n [styles.empty]: empty,\n [styles.noLabel]: !this.props.label,\n [styles.withIcon]: icon != null,\n [styles.clearable]: clearable,\n [styles.compact]: minimizeMargins\n }\n );\n\n const inputClasses = classNames(styles.input, inputClassName);\n\n const TagName = multiline ? 'textarea' : 'input';\n\n const text = value != null ? value : children;\n\n return (\n \n {icon && }\n \n {clearable && !disabled && (\n \n )}\n\n {!minimizeMargins && }\n {!borderless &&
}\n {!borderless &&
}\n {!minimizeMargins &&
}\n {!minimizeMargins && (\n {error}
\n )}\n
\n );\n }\n}\n\nexport default compose(\n ieCompatibleInputHOC,\n withTheme(),\n)(Input);\n\nexport {Size, Theme};\n","import memoize from './memoize';\n\nexport default memoize(declaration => {\n const [property, value] = declaration.split(': ');\n const camelCaseProperty = property.replace(/-(\\w)/g, (_, letter) => letter.toUpperCase());\n const div = document.createElement('div');\n if (div.style[camelCaseProperty] === undefined) {\n return false;\n }\n\n if (value) {\n div.style[camelCaseProperty] = value;\n return Boolean(div.style[camelCaseProperty]);\n }\n\n return true;\n});\n","/* global ConicGradient */\nimport 'conic-gradient';\n\nimport memoize from './memoize';\nimport supportsCss from './supports-css';\n\nconst conicGradient = memoize(({stops, size}) => (\n supportsCss('background-image: conic-gradient(white, black)')\n ? `conic-gradient(${stops})`\n : new ConicGradient({stops, size})\n));\n\nexport default stops => conicGradient(stops).toString();\n\nexport const conicGradientWithMask = (mask, stops, size) => {\n const gradient = conicGradient({stops, size});\n\n if (!mask.supports && gradient instanceof ConicGradient) {\n Object.defineProperty(gradient, 'svg', {\n value: gradient.svg.replace(' {\n const styleTag = document.createElement('style');\n styleTag.setAttribute('type', 'text/css');\n styleTag.textContent = styles;\n document.head.appendChild(styleTag);\n return styleTag;\n};\n\nexport const injectRuleSet = (selector, declarations) =>\n injectStyleSheet(`\n${selector} {\n ${Object.entries(declarations).map(([property, value]) => `${property}: ${value};`).join(`\n `)}\n}`);\n","import getUID from './get-uid';\nimport supportsCss from './supports-css';\n\nconst radialGradient = (length, stops) =>\n `radial-gradient(${length}, ${Object.entries(stops).map(entry => entry.join(' ')).join(', ')})`;\n\nexport default (length, stops) => {\n for (const prefix of ['', '-webkit-']) {\n const property = `${prefix}mask-image`;\n const declaration = `${property}: radial-gradient(black, white)`;\n if (supportsCss(declaration)) {\n return {\n supports: true,\n css: {\n [property]: radialGradient(length, stops)\n }\n };\n }\n }\n\n const gradientId = getUID('gradient');\n const maskId = getUID('mask');\n const svgDefs = `\n \n \n \n ${Object.entries(stops).map(([color, offset]) => `\n \n `).join('')}\n \n \n \n \n \n \n `;\n return {\n supports: false,\n css: {},\n maskId,\n svgDefs\n };\n};\n","import {conicGradientWithMask} from '../global/conic-gradient';\nimport {injectRuleSet} from '../global/inject-styles';\nimport memoize from '../global/memoize';\nimport radialGradientMask from '../global/radial-gradient-mask';\nimport Theme from '../global/theme';\n\nimport styles from './loader-inline.css';\n\nconst IMAGE_SIZE = 32;\n\nexport default memoize(() => {\n const mask = radialGradientMask(styles.unit, {\n /* eslint-disable no-magic-numbers */\n transparent: `${23 / 32 * 100}%`,\n white: `${25 / 32 * 100}%`\n /* eslint-enable */\n });\n\n injectRuleSet(\n `.${styles.loader}_${[Theme.LIGHT]}::after, .ring-loader-inline::after`,\n conicGradientWithMask(mask, '#ff00eb,#bd3bff,#008eff, #58ba00,#f48700,#ff00eb', IMAGE_SIZE)\n );\n\n injectRuleSet(\n `.${styles.loader}_${[Theme.DARK]}::after, .ring-loader-inline_dark::after`,\n conicGradientWithMask(mask, '#ff2eef,#d178ff,#289fff,#88d444,#ffe000,#ff2eef', IMAGE_SIZE)\n );\n});\n","import React, {PureComponent} from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\n\nimport Theme, {withTheme} from '../global/theme';\nimport dataTests from '../global/data-tests';\n\nimport styles from './loader-inline.css';\nimport injectStyles from './inject-styles';\n\n/**\n * @name Loader Inline\n */\n\nclass LoaderInline extends PureComponent {\n static propTypes = {\n theme: PropTypes.oneOf(Object.values(Theme)),\n className: PropTypes.string,\n 'data-test': PropTypes.string,\n children: PropTypes.node\n };\n\n componentDidMount() {\n injectStyles();\n }\n\n static Theme = Theme;\n\n render() {\n const {className, theme, 'data-test': dataTest, children, ...restProps} = this.props;\n\n const classes = classNames(\n styles.loader,\n className,\n `${styles.loader}_${theme}`\n );\n\n const loader = (\n \n );\n\n return children ? (\n <>\n {loader}\n {children}\n \n ) : loader;\n }\n}\n\nexport default withTheme()(LoaderInline);\n","import React, {PureComponent} from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport closeIcon from '@jetbrains/icons/close.svg';\n\nimport Icon from '../icon';\nimport Button from '../button/button';\n\nimport styles from './tag.css';\n\n/**\n * @name Tag\n */\n\nexport default class Tag extends PureComponent {\n static propTypes = {\n onRemove: PropTypes.func,\n onClick: PropTypes.func,\n rgTagIcon: PropTypes.oneOfType([PropTypes.string, PropTypes.elementType]),\n icon: PropTypes.string,\n avatar: PropTypes.string,\n rgTagTitle: PropTypes.string,\n readOnly: PropTypes.bool,\n disabled: PropTypes.bool,\n focused: PropTypes.bool,\n angled: PropTypes.bool,\n\n children: PropTypes.node,\n className: PropTypes.string\n };\n\n static defaultProps = {\n onRemove: () => {},\n onClick: () => {},\n readOnly: false,\n disabled: false,\n focused: false\n };\n\n state = {\n focused: false\n };\n\n componentDidUpdate(prevProps) {\n if (this.props.focused !== prevProps.focused) {\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({focused: this.props.focused});\n }\n if (this.state.focused) {\n this.tagNode.focus();\n }\n this.setDocumentClickListener(this.state.focused);\n }\n\n componentWillUnmount() {\n this.setDocumentClickListener(false);\n this.setState({focused: false});\n }\n\n onDocumentClick = event => {\n if (this.tagNode) {\n this.setState({focused: this.tagNode === event.target});\n }\n };\n\n tagRef = el => {\n this.tagNode = el;\n };\n\n setDocumentClickListener(setListener) {\n if (setListener) {\n document.addEventListener('click', this.onDocumentClick);\n } else {\n document.removeEventListener('click', this.onDocumentClick);\n }\n }\n\n renderCustomIcon() {\n if (this.props.rgTagIcon) {\n return (\n \n );\n }\n return null;\n }\n\n _renderImageElement(avatarSrc) {\n const classes = classNames({\n [styles.customIcon]: this.props.icon,\n [styles.avatarIcon]: avatarSrc\n });\n return (\n \n );\n }\n\n renderImage() {\n if (this.props.icon && !this.props.avatar) {\n return this._renderImageElement();\n }\n return null;\n }\n\n renderAvatar() {\n if (this.props.avatar) {\n return (\n \n {this._renderImageElement(this.props.avatar)}\n \n );\n }\n return null;\n }\n\n renderRemoveIcon() {\n if (!this.props.readOnly) {\n return (\n \n );\n }\n return null;\n }\n\n render() {\n const classes = classNames(\n 'ring-js-shortcuts',\n styles.tag,\n {\n [styles.focused]: this.state.focused,\n [styles.disabled]: this.props.disabled,\n [styles.tagAngled]: this.props.angled,\n [styles.withRemove]: !this.props.readOnly\n },\n this.props.className\n );\n\n return (\n \n \n {this.renderAvatar()}\n {this.renderCustomIcon()}\n {this.renderImage()}\n {this.props.children}\n \n {this.renderRemoveIcon()}\n \n );\n }\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport Tag from '../tag/tag';\n\nfunction noop() {}\n\n/**\n * @name Tags List\n */\n\nexport default class TagsList extends Component {\n static propTypes = {\n children: PropTypes.node,\n tags: PropTypes.array,\n customTagComponent: (props, propName, componentName) => {\n if (props[propName] && !props[propName].prototype instanceof Component) {\n return new Error(`Invalid prop ${propName} supplied to ${componentName}. Validation failed.`);\n }\n return null;\n },\n activeIndex: PropTypes.number,\n canNotBeEmpty: PropTypes.bool,\n disabled: PropTypes.bool,\n handleClick: PropTypes.func,\n handleRemove: PropTypes.func,\n className: PropTypes.string,\n tagClassName: PropTypes.string\n };\n\n static defaultProps = {\n customTagComponent: null,\n canNotBeEmpty: false,\n disabled: false,\n handleClick: noop,\n handleRemove: noop\n };\n\n renderTag(tag, focusTag) {\n const TagComponent = this.props.customTagComponent || Tag;\n const readOnly = this.props.disabled || tag.readOnly ||\n (this.props.canNotBeEmpty && this.props.tags.length === 1);\n\n const {tagClassName} = this.props;\n\n return (\n {tag.label}\n );\n }\n\n render() {\n const {\n children,\n className,\n customTagComponent,\n canNotBeEmpty,\n handleClick,\n tagClassName,\n handleRemove,\n tags,\n activeIndex,\n ...props\n } = this.props;\n const classes = classNames(\n 'ring-js-shortcuts',\n className\n );\n\n const tagsList = (this.props.tags || []).map(\n (tag, index) => this.renderTag(tag, this.props.activeIndex === index)\n );\n\n return (\n \n {tagsList}\n {children}\n
\n );\n }\n}\n","import {getRect} from '../global/dom';\n\n/**\n * @name Caret\n */\n\nexport default class Caret {\n /**\n * Line endings RegExp\n * @type {RegExp}\n */\n static returnRE = /\\r/g;\n\n /**\n * Line endings normalizer\n * Borrowed from jQuery\n * @see https://github.com/jquery/jquery/blob/master/src/attributes/val.js\n * @param value {*}\n * @return {*}\n */\n static normalizeNewlines(value) {\n return typeof value === 'string' ? value.replace(this.returnRE, '') : value;\n }\n\n constructor(target) {\n this.target = target;\n }\n\n isContentEditable() {\n return this.target.contentEditable === 'true';\n }\n\n /**\n * Set focus on target if possible\n */\n focus() {\n if (!document.activeElement || document.activeElement !== this.target) {\n this.target.focus();\n }\n }\n\n /**\n * Get caret position index\n * @return {number}\n */\n getPosition() {\n if (this.isContentEditable()) {\n this.focus();\n\n const selection = window.getSelection();\n\n if (!selection.rangeCount) {\n return 0;\n }\n\n const range1 = selection.getRangeAt(0);\n const range2 = range1.cloneRange();\n\n range2.selectNodeContents(this.target);\n range2.setEnd(range1.endContainer, range1.endOffset);\n\n if (range1.startOffset !== range1.endOffset) {\n return {startOffset: range1.startOffset,\n endOffset: range1.endOffset,\n position: range2.toString().length};\n }\n return range2.toString().length;\n }\n\n return this.target.selectionStart;\n }\n\n /**\n * Get relative position of query\n * @param {Node} curNode\n * @param {number} position\n * @return {{_correctedPosition: number, _curNode: Node}}\n */\n getRelativePosition(curNode, position) {\n let curPos = 0;\n let _curNode = curNode;\n const nodeTypeText = 3;\n if (!_curNode) {\n return {_curNode: this.target, _correctedPosition: position};\n }\n if (position === 0) {\n while (_curNode.nodeType !== nodeTypeText) {\n _curNode = _curNode.childNodes[0];\n }\n const _correctedPosition = position;\n return {_curNode, _correctedPosition};\n }\n let i = -1;\n if (_curNode && _curNode.nodeType !== undefined) {\n while (curPos < position && _curNode.nodeType !== nodeTypeText) {\n i++;\n if (_curNode.childNodes[i] !== null && _curNode.childNodes[i]) {\n curPos += _curNode.childNodes[i].textContent.length;\n if (curPos >= position) {\n _curNode = _curNode.childNodes[i];\n curPos -= _curNode.textContent.length;\n i = -1;\n }\n } else {\n break;\n }\n }\n }\n const _correctedPosition = position - curPos;\n return {_curNode, _correctedPosition};\n }\n\n /**\n * Set caret position index\n * @param {number} position\n * @return {number}\n */\n setPosition(position) {\n const isContentEditable = this.isContentEditable();\n let correctedPosition;\n let curNode = this.target && this.target.childNodes[0];\n if (position !== undefined) {\n if (position.startOffset !== undefined) {\n const range = new Range();\n const start = this.getRelativePosition(curNode, position.startOffset);\n range.setStart(start._curNode, start._correctedPosition);\n const end = this.getRelativePosition(curNode, position.endOffset);\n range.setEnd(end._curNode, end._correctedPosition);\n correctedPosition = range;\n } else if (position === -1) {\n const value = isContentEditable\n ? this.target.textContent\n : this.constructor.normalizeNewlines(this.target.value);\n correctedPosition = value.length;\n } else {\n const {_curNode, _correctedPosition} = this.getRelativePosition(curNode, position);\n curNode = _curNode;\n correctedPosition = _correctedPosition;\n }\n }\n\n if (isContentEditable) {\n this.focus();\n\n try {\n if (correctedPosition instanceof Range) {\n window.getSelection().removeAllRanges();\n window.getSelection().addRange(correctedPosition);\n } else {\n window.getSelection().collapse(curNode || this.target, correctedPosition);\n }\n } catch (e) {\n // Do nothing\n }\n\n } else {\n this.target.setSelectionRange(correctedPosition, correctedPosition);\n }\n\n return correctedPosition;\n }\n\n /**\n * Get caret position in pixels\n * @return {number}\n */\n getOffset() {\n let offset = 0;\n let range;\n\n try {\n // Both statements may throw\n range = window.getSelection().getRangeAt(0).cloneRange();\n range.setStart(range.startContainer, range.startOffset - 1);\n } catch (e) {\n return offset;\n }\n\n if (range && range.endOffset !== 0 && range.toString() !== '') {\n offset =\n getRect(range).right -\n getRect(this.target).left -\n (range.startContainer.offsetLeft || 0);\n }\n\n return offset;\n }\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport deprecate from 'util-deprecate';\n\nimport styles from './text.css';\n\n/**\n * @name Text\n */\n\nconst deprecateComment = deprecate(\n () => {},\n ' is deprecated, use instead'\n);\n\n\nexport default class Text extends Component {\n static propTypes = {\n children: PropTypes.node,\n comment: PropTypes.bool,\n info: PropTypes.bool,\n className: PropTypes.string\n };\n\n render() {\n const {children, className, comment, info, ...restProps} = this.props;\n if (comment) {\n deprecateComment();\n }\n const classes = classNames(styles.text, className, {\n [styles.info]: info || comment\n });\n\n return (\n {children}\n );\n }\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport Input from '../input/input';\nimport sniffr from '../global/sniffer';\n\nimport styles from './select-popup.css';\n\nfunction noop() {}\n\nexport default class SelectFilter extends Component {\n static propTypes = {\n placeholder: PropTypes.string,\n className: PropTypes.string,\n inputRef: PropTypes.func\n };\n\n static defaultProps = {\n placeholder: 'Filter items',\n inputRef: noop\n };\n\n componentWillUnmount() {\n this.blur();\n }\n\n focus() {\n const {input} = this;\n if (input && input !== document.activeElement) {\n sniffr.browser.name === 'firefox' ? input.select() : input.focus();\n }\n }\n\n blur() {\n if (this.input && this.input === document.activeElement) {\n this.input.blur();\n }\n }\n\n inputRef = el => {\n this.input = el;\n this.props.inputRef(el);\n };\n\n render() {\n const {className, ...restProps} = this.props;\n const classes = classNames(styles.filter, className);\n\n return (\n \n );\n }\n}\n","/**\n * @description Displays a popup with select's options.\n */\n/* eslint-disable react/prop-types */\n\nimport React, {Component} from 'react';\nimport classNames from 'classnames';\nimport searchIcon from '@jetbrains/icons/search.svg';\nimport memoizeOne from 'memoize-one';\n\nimport Icon from '../icon/icon';\n\nimport Popup from '../popup/popup';\nimport {DEFAULT_DIRECTIONS, maxHeightForDirection} from '../popup/position';\nimport List from '../list/list';\nimport LoaderInline from '../loader-inline/loader-inline';\nimport shortcutsHOC from '../shortcuts/shortcuts-hoc';\nimport getUID from '../global/get-uid';\nimport memoize from '../global/memoize';\nimport TagsList from '../tags-list/tags-list';\nimport Caret from '../caret/caret';\nimport Shortcuts from '../shortcuts/shortcuts';\nimport Button from '../button/button';\nimport Text from '../text/text';\n\nimport SelectFilter from './select__filter';\nimport styles from './select-popup.css';\n\nconst INPUT_MARGIN_COMPENSATION = -14;\nconst FILTER_HEIGHT = 35;\n\nfunction noop() {}\n\nconst FilterWithShortcuts = shortcutsHOC(SelectFilter);\n\nexport default class SelectPopup extends Component {\n static defaultProps = {\n data: [],\n activeIndex: null,\n toolbar: null,\n filter: false, // can be either boolean or an object with \"value\" and \"placeholder\" properties\n multiple: false, // multiple can be an object - see demo for more information\n message: null,\n anchorElement: null,\n maxHeight: 600,\n minWidth: 240,\n loading: false,\n onSelect: noop,\n onCloseAttempt: noop,\n onFilter: noop,\n onClear: noop,\n onLoadMore: noop,\n selected: [],\n tags: null,\n ringPopupTarget: null,\n onSelectAll: noop,\n onEmptyPopupEnter: noop\n };\n\n state = {\n popupFilterShortcutsOptions: {\n modal: true,\n disabled: true\n },\n tagsActiveIndex: null\n };\n\n componentDidMount() {\n window.document.addEventListener('mouseup', this.mouseUpHandler);\n }\n\n componentWillUnmount() {\n window.document.removeEventListener('mouseup', this.mouseUpHandler);\n }\n\n isClickingPopup = false; // This flag is set to true while an item in the popup is being clicked\n focusFilter() {\n setTimeout(() => this.filter.focus());\n }\n\n isEventTargetFilter(event) {\n return event.target && event.target.matches('input,textarea');\n }\n\n handleNavigation(navigateLeft) {\n if (this.isEventTargetFilter(event) && this.caret.getPosition() > 0) {\n return;\n }\n\n let newIndex = null;\n if (navigateLeft) {\n newIndex = this.state.tagsActiveIndex === null\n ? this.props.selected.length - 1\n : this.state.tagsActiveIndex - 1;\n } else if (this.state.tagsActiveIndex !== null) {\n newIndex = this.state.tagsActiveIndex + 1;\n }\n\n if (newIndex !== null && (newIndex >= this.props.selected.length || newIndex < 0)) {\n newIndex = null;\n this.focusFilter();\n }\n\n this.setState({\n tagsActiveIndex: newIndex\n });\n }\n\n removeTag(tag, event) {\n const _tag = tag || this.props.selected.slice(0)[this.props.selected.length - 1];\n if (_tag) {\n this.onListSelect(_tag, event, {tryKeepOpen: true});\n this.setState({\n tagsActiveIndex: null\n });\n this.focusFilter();\n }\n }\n\n removeSelectedTag() {\n if (this.state.tagsActiveIndex != null) {\n this.removeTag(this.props.selected[this.state.tagsActiveIndex]);\n return false;\n }\n return true;\n }\n\n handleBackspace(event) {\n if (!this.props.tags) {\n return true;\n }\n\n if (!this.isEventTargetFilter(event)) {\n this.removeSelectedTag();\n return false;\n }\n if (!event.target.value) {\n this.removeTag();\n return false;\n }\n return true;\n }\n\n onFilterFocus = () => {\n this._togglePopupFilterShortcuts(false);\n this.setState({tagsActiveIndex: null});\n };\n\n popupFilterOnBlur = () => {\n if (this.state.tagsActiveIndex === null) {\n this._togglePopupFilterShortcuts(true);\n }\n };\n\n _togglePopupFilterShortcuts(shortcutsDisabled) {\n this.setState({\n popupFilterShortcutsOptions: {\n modal: true,\n disabled: shortcutsDisabled\n }\n });\n }\n\n mouseDownHandler = () => {\n this.isClickingPopup = true;\n };\n\n mouseUpHandler = () => {\n this.isClickingPopup = false;\n };\n\n isVisible() {\n return this.popup && this.popup.isVisible();\n }\n\n onListSelect = (selected, event, opts) => {\n const getSelectItemEvent = () => {\n let customEvent;\n if (document.createEvent) {\n customEvent = document.createEvent('Event');\n customEvent.initEvent('select', true, false);\n }\n if (event && event.persist) {\n event.persist();\n }\n customEvent.originalEvent = event;\n return customEvent;\n };\n\n this.props.onSelect(selected, getSelectItemEvent(), opts);\n };\n\n tabPress = event => {\n this.props.onCloseAttempt(event, true);\n };\n\n onClickHandler = () => this.filter.focus();\n\n getFilter() {\n if (this.props.filter || this.props.tags) {\n return (\n \n \n \n \n );\n }\n\n return null;\n }\n\n handleRemoveTag = memoize(tag => event => this.removeTag(tag, event));\n\n handleTagClick = memoize(tag => () => {\n this.setState({\n tagsActiveIndex: this.props.selected.indexOf(tag)\n });\n });\n\n getTags() {\n return (\n
\n \n
\n );\n }\n\n getFilterWithTags() {\n if (this.props.tags) {\n const classes = classNames([\n styles.filterWithTags,\n {\n [styles.filterWithTagsFocused]: !this.state.popupFilterShortcutsOptions.disabled\n }\n ]);\n\n return (\n \n {this.getTags()}\n {this.getFilter()}\n \n );\n }\n\n return this.getFilter();\n }\n\n getBottomLine() {\n return (\n
\n {this.props.loading && }\n\n {this.props.message && (\n
{this.props.message}
\n )}\n
\n );\n }\n\n handleListResize = () => {\n this.forceUpdate();\n };\n\n getList() {\n if (this.props.data.length) {\n let {maxHeight} = this.props;\n\n if (this.props.anchorElement) {\n maxHeight = this._adjustListMaxHeight(this.props.hidden, maxHeight);\n }\n\n if (this.props.filter) {\n maxHeight -= FILTER_HEIGHT;\n }\n\n return (\n \n );\n }\n\n return null;\n }\n\n handleSelectAll = () => this.props.onSelectAll(\n this.props.data.filter(item => !item.disabled).length !== this.props.selected.length\n );\n\n getSelectAll = () => (\n
\n \n {this.props.data.filter(item => !item.disabled).length !== this.props.selected.length\n ? 'Select all'\n : 'Deselect all'}\n \n {`${this.props.selected.length} selected`}\n
\n );\n\n\n // Cache the value because this method is called\n // inside `render` function which can be called N times\n // and should be fast as possible.\n // Cache invalidates each time hidden or userDefinedMaxHeight changes\n _adjustListMaxHeight = memoizeOne((hidden, userDefinedMaxHeight) => {\n if (hidden) {\n return userDefinedMaxHeight;\n }\n\n // Calculate list's maximum height that can't\n // get beyond the screen\n // @see RG-1838, JT-48358\n const minMaxHeight = 100;\n const directions = this.props.directions || DEFAULT_DIRECTIONS;\n\n // Note:\n // 1. Create a method which'll be called only when the popup opens and before\n // render the list would be a better way\n // 2. We use this.popup.getContainer because there is the logic about how to extract\n // a link on the container node. It looks awkward using popup in this component\n // maybe we can find a better solution\n const anchorNode = this.props.anchorElement;\n const containerNode = document.documentElement; // A temporary fix for RG-2050. To be made permanent if working\n return Math.min(\n directions.reduce((maxHeight, direction) => (\n Math.max(maxHeight, maxHeightForDirection(direction, anchorNode, containerNode))\n ), minMaxHeight),\n userDefinedMaxHeight\n );\n });\n\n popupRef = el => {\n this.popup = el;\n };\n\n listRef = el => {\n this.list = el;\n };\n\n filterRef = el => {\n this.filter = el;\n this.caret = new Caret(this.filter);\n };\n\n shortcutsScope = getUID('select-popup-');\n shortcutsMap = {\n tab: this.tabPress\n };\n\n popupFilterShortcuts = {\n map: {\n up: event => (this.list && this.list.upHandler(event)),\n down: event => (this.list && this.list.downHandler(event)),\n home: event => (this.list && this.list.homeHandler(event)),\n end: event => (this.list && this.list.endHandler(event)),\n enter: event => (this.list\n ? this.list.enterHandler(event)\n : this.props.onEmptyPopupEnter(event)),\n esc: event => this.props.onCloseAttempt(event, true),\n tab: event => this.tabPress(event),\n backspace: event => this.handleBackspace(event),\n del: () => this.removeSelectedTag(),\n left: () => this.handleNavigation(true),\n right: () => this.handleNavigation()\n }\n };\n\n render() {\n const classes = classNames(styles.popup, this.props.className);\n\n return (\n