From 449c4aac6354fb5d00d471c017262ed0b6add9a4 Mon Sep 17 00:00:00 2001 From: Aleksander Nowakowski Date: Mon, 23 Dec 2024 22:26:45 +0100 Subject: [PATCH 01/11] Dependencies updated --- gradle/libs.versions.toml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e962db9..8034b23 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,10 +10,10 @@ androidxHiltNavigationCompose = "1.2.0" androidxLifecycle = "2.8.7" androidxNavigation = "2.8.5" firebaseBom = "33.7.0" -hilt = "2.53.1" +hilt = "2.54" hiltExt = "1.2.0" kotlin = "2.1.0" -kotlinxCoroutines = "1.9.0" +kotlinxCoroutines = "1.10.1" kotlinxDatetime = "0.6.1" kotlinxSerializationJson = "1.7.3" lint = "31.7.3" @@ -24,7 +24,6 @@ nordic-log = "2.5.0" nordicPlugins = "2.5" dokkaPlugin = "2.0.0" googleServicesPlugins = "4.4.2" -firebaseCrashlyticsPlugins = "3.0.2" [libraries] accompanist-permissions = { group = "com.google.accompanist", name = "accompanist-permissions", version.ref = "accompanist" } From f2bfe348f19c89a6a32615d63524f8ca086e8dbf Mon Sep 17 00:00:00 2001 From: Aleksander Nowakowski Date: Mon, 23 Dec 2024 22:29:09 +0100 Subject: [PATCH 02/11] Empty Proguard files removed --- analytics/module-rules.pro | 17 ----------------- core/module-rules.pro | 17 ----------------- logger/module-rules.pro | 17 ----------------- navigation/module-rules.pro | 17 ----------------- permissions-ble/proguard-rules.pro | 21 --------------------- permissions-internet/proguard-rules.pro | 21 --------------------- permissions-nfc/module-rules.pro | 17 ----------------- permissions-notification/module-rules.pro | 21 --------------------- theme/module-rules.pro | 17 ----------------- ui/module-rules.pro | 17 ----------------- 10 files changed, 182 deletions(-) delete mode 100644 analytics/module-rules.pro delete mode 100644 core/module-rules.pro delete mode 100644 logger/module-rules.pro delete mode 100644 navigation/module-rules.pro delete mode 100644 permissions-ble/proguard-rules.pro delete mode 100644 permissions-internet/proguard-rules.pro delete mode 100644 permissions-nfc/module-rules.pro delete mode 100644 permissions-notification/module-rules.pro delete mode 100644 theme/module-rules.pro delete mode 100644 ui/module-rules.pro diff --git a/analytics/module-rules.pro b/analytics/module-rules.pro deleted file mode 100644 index 7e9d74c..0000000 --- a/analytics/module-rules.pro +++ /dev/null @@ -1,17 +0,0 @@ -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in C:/Users/alno/AppData/Local/Android/sdk/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle.kts. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} \ No newline at end of file diff --git a/core/module-rules.pro b/core/module-rules.pro deleted file mode 100644 index 7e9d74c..0000000 --- a/core/module-rules.pro +++ /dev/null @@ -1,17 +0,0 @@ -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in C:/Users/alno/AppData/Local/Android/sdk/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle.kts. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} \ No newline at end of file diff --git a/logger/module-rules.pro b/logger/module-rules.pro deleted file mode 100644 index 7e9d74c..0000000 --- a/logger/module-rules.pro +++ /dev/null @@ -1,17 +0,0 @@ -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in C:/Users/alno/AppData/Local/Android/sdk/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle.kts. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} \ No newline at end of file diff --git a/navigation/module-rules.pro b/navigation/module-rules.pro deleted file mode 100644 index 7e9d74c..0000000 --- a/navigation/module-rules.pro +++ /dev/null @@ -1,17 +0,0 @@ -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in C:/Users/alno/AppData/Local/Android/sdk/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle.kts. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} \ No newline at end of file diff --git a/permissions-ble/proguard-rules.pro b/permissions-ble/proguard-rules.pro deleted file mode 100644 index 481bb43..0000000 --- a/permissions-ble/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/permissions-internet/proguard-rules.pro b/permissions-internet/proguard-rules.pro deleted file mode 100644 index 481bb43..0000000 --- a/permissions-internet/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/permissions-nfc/module-rules.pro b/permissions-nfc/module-rules.pro deleted file mode 100644 index 7e9d74c..0000000 --- a/permissions-nfc/module-rules.pro +++ /dev/null @@ -1,17 +0,0 @@ -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in C:/Users/alno/AppData/Local/Android/sdk/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle.kts. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} \ No newline at end of file diff --git a/permissions-notification/module-rules.pro b/permissions-notification/module-rules.pro deleted file mode 100644 index 481bb43..0000000 --- a/permissions-notification/module-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/theme/module-rules.pro b/theme/module-rules.pro deleted file mode 100644 index 7e9d74c..0000000 --- a/theme/module-rules.pro +++ /dev/null @@ -1,17 +0,0 @@ -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in C:/Users/alno/AppData/Local/Android/sdk/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle.kts. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} \ No newline at end of file diff --git a/ui/module-rules.pro b/ui/module-rules.pro deleted file mode 100644 index 7e9d74c..0000000 --- a/ui/module-rules.pro +++ /dev/null @@ -1,17 +0,0 @@ -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in C:/Users/alno/AppData/Local/Android/sdk/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle.kts. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} \ No newline at end of file From b0c883f5ea66014675250c8ba8e34dc316791c7d Mon Sep 17 00:00:00 2001 From: Aleksander Nowakowski Date: Mon, 23 Dec 2024 22:29:44 +0100 Subject: [PATCH 03/11] Nordic Plugins migrated to 2.6.1 --- gradle/libs.versions.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8034b23..3dde824 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -21,7 +21,7 @@ publishPlugin = "1.3.0" leakcanary = "2.14" nordic-log = "2.5.0" -nordicPlugins = "2.5" +nordicPlugins = "2.6.1" dokkaPlugin = "2.0.0" googleServicesPlugins = "4.4.2" @@ -68,6 +68,7 @@ nordic-feature = { id = "no.nordicsemi.android.plugin.feature", version.ref = "n nordic-hilt = { id = "no.nordicsemi.android.plugin.hilt", version.ref = "nordicPlugins" } nordic-kotlin-android = { id = "no.nordicsemi.android.plugin.kotlin", version.ref = "nordicPlugins" } nordic-nexus-android = { id = "no.nordicsemi.android.plugin.nexus", version.ref = "nordicPlugins" } +nordic-dokka = { id = "no.nordicsemi.plugin.dokka", version.ref = "nordicPlugins" } android-application = { id = "com.android.application", version.ref = "androidGradlePlugin" } android-library = { id = "com.android.library", version.ref = "androidGradlePlugin" } hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" } @@ -78,4 +79,3 @@ kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } publish = { id = "com.gradle.plugin-publish", version.ref = "publishPlugin" } google-services = { id = "com.google.gms.google-services", version.ref = "googleServicesPlugins" } -firebase-crashlytics = { id = "com.google.firebase.crashlytics", version.ref = "firebaseCrashlyticsPlugins" } From 59d2a0a4e39c09331869e8bbe35071726a5ba3da Mon Sep 17 00:00:00 2001 From: Aleksander Nowakowski Date: Mon, 23 Dec 2024 22:30:10 +0100 Subject: [PATCH 04/11] Java 21 for GitHub actions --- .github/workflows/deploy-to-nexus.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-to-nexus.yml b/.github/workflows/deploy-to-nexus.yml index b99e9aa..755fe00 100644 --- a/.github/workflows/deploy-to-nexus.yml +++ b/.github/workflows/deploy-to-nexus.yml @@ -13,8 +13,8 @@ jobs: fetch-depth: 0 - uses: actions/setup-java@v4 with: - distribution: 'corretto' - java-version: '17' + distribution: 'jetbrains' + java-version: '21' - shell: bash env: # The following env variables are used by gradle/publish-module.gradle From cead81cc6caadeac7e782fd4955032ab2e077909 Mon Sep 17 00:00:00 2001 From: Aleksander Nowakowski Date: Mon, 23 Dec 2024 22:30:49 +0100 Subject: [PATCH 05/11] Enabling Dokka V2 --- build.gradle.kts | 7 ++++++- gradle.properties | 3 +++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index f9a5fc5..7d5a8fe 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -32,7 +32,6 @@ plugins { alias(libs.plugins.android.library) apply false alias(libs.plugins.hilt) apply false alias(libs.plugins.kotlin.parcelize) apply false - alias(libs.plugins.kotlin.dokka) apply false alias(libs.plugins.compose.compiler) apply false // Nordic plugins are defined in https://github.com/NordicSemiconductor/Android-Gradle-Plugins @@ -43,4 +42,10 @@ plugins { alias(libs.plugins.nordic.hilt) apply false alias(libs.plugins.nordic.nexus.android) apply false alias(libs.plugins.nordic.kotlin.android) apply false + + // This plugin is used to generate Dokka documentation. + alias(libs.plugins.kotlin.dokka) apply false + // This applies Nordic look & feel to generated Dokka documentation. + // https://github.com/NordicSemiconductor/Android-Gradle-Plugins/blob/main/plugins/src/main/kotlin/NordicDokkaPlugin.kt + alias(libs.plugins.nordic.dokka) apply true } diff --git a/gradle.properties b/gradle.properties index aa43e2f..62c5829 100644 --- a/gradle.properties +++ b/gradle.properties @@ -72,3 +72,6 @@ android.defaults.buildfeatures.aidl=false android.defaults.buildfeatures.renderscript=false android.defaults.buildfeatures.resvalues=false android.defaults.buildfeatures.shaders=false + +org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled +org.jetbrains.dokka.experimental.gradle.pluginMode.noWarn=true From e04cbb7bd5e8d57a444324786e4e3a36bc04f9f5 Mon Sep 17 00:00:00 2001 From: Aleksander Nowakowski Date: Mon, 23 Dec 2024 22:31:15 +0100 Subject: [PATCH 06/11] Adding link to GitHub repo in the documentation --- build.gradle.kts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/build.gradle.kts b/build.gradle.kts index 7d5a8fe..431d5ce 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -49,3 +49,11 @@ plugins { // https://github.com/NordicSemiconductor/Android-Gradle-Plugins/blob/main/plugins/src/main/kotlin/NordicDokkaPlugin.kt alias(libs.plugins.nordic.dokka) apply true } + +// Configure main Dokka page +dokka { + moduleName.set("Nordic Common Libraries") + pluginsConfiguration.html { + homepageLink.set("https://github.com/NordicPlayground/Android-Common-Libraries") + } +} \ No newline at end of file From 9e1f1493612d1cdd7eac2ad74fd932182b677b53 Mon Sep 17 00:00:00 2001 From: Aleksander Nowakowski Date: Mon, 23 Dec 2024 22:35:22 +0100 Subject: [PATCH 07/11] BREAKING! Some classes and components were made internal or renamed Documentation improvements. --- .../common/analytics/NordicAnalytics.kt | 24 ++ .../view/AnalyticsPermissionRequestDialog.kt | 2 + .../view/AnalyticsPermissionSettingsSwitch.kt | 2 + core/src/main/AndroidManifest.xml | 5 +- .../android/common/core/AppLauncher.kt | 9 + .../android/common/core/ApplicationScope.kt | 7 + .../common/core/BroadcastReceiver+Compose.kt | 8 + .../no/nordicsemi/android/common/core/Ext.kt | 3 + .../common/core/SingleEventSharedFlow.kt | 4 + .../android/common/core/SparseArrayExt.kt | 6 + logger/src/main/AndroidManifest.xml | 1 - .../android/common/logger/LoggerLauncher.kt | 6 + navigation/src/main/AndroidManifest.xml | 5 +- .../android/common/navigation/Navigator.kt | 8 + .../common/navigation/di/NavigationModule.kt | 2 +- .../navigation/internal/NavigationManager.kt | 2 +- .../viewmodel/SimpleNavigationViewModel.kt | 11 + permissions-ble/src/main/AndroidManifest.xml | 1 - .../permissions/ble/RequireBluetooth.kt | 41 ++- .../common/permissions/ble/RequireLocation.kt | 29 +- .../ble/bluetooth/BluetoothStateManager.kt | 4 +- .../ble/location/LocationStateManager.kt | 2 +- .../ble/util/BlePermissionState.kt | 17 +- .../ble/viewmodel/PermissionViewModel.kt | 2 +- .../src/main/AndroidManifest.xml | 2 +- .../permissions/internet/RequireInternet.kt | 20 ++ .../repository/InternetStateManager.kt | 2 +- .../internet/util/InternetPermissionState.kt | 4 +- permissions-nfc/src/main/AndroidManifest.xml | 3 +- .../common/permissions/nfc/RequireNfc.kt | 34 ++- .../nfc/repostory/NfcStateManager.kt | 4 +- .../nfc/utils/NfcPermissionState.kt | 9 +- .../nfc/viewmodel/NfcPermissionViewModel.kt | 4 +- .../src/main/AndroidManifest.xml | 32 +- .../RequestNotificationPermission.kt | 22 ++ permissions-wifi/src/main/AndroidManifest.xml | 1 - ...onForWifi.kt => RequireLocationForWiFi.kt} | 36 ++- .../wifi/{RequireWifi.kt => RequireWiFi.kt} | 55 ++-- .../wifi/location/LocationStateManager.kt | 12 +- .../wifi/state/WifiStateManager.kt | 18 +- ...missionState.kt => WiFiPermissionState.kt} | 17 +- ...ifiDisabledView.kt => WiFiDisabledView.kt} | 4 +- ...ailableView.kt => WiFiNotAvailableView.kt} | 4 +- ...dView.kt => WiFiPermissionRequiredView.kt} | 5 +- .../wifi/viewmodel/PermissionViewModel.kt | 8 +- .../src/main/res/values/strings.xml | 2 +- theme/src/main/AndroidManifest.xml | 5 +- .../android/common/theme/NordicActivity.kt | 6 +- .../android/common/theme/NordicColorScheme.kt | 27 +- .../android/common/theme/NordicTheme.kt | 3 + ui/src/main/AndroidManifest.xml | 5 +- .../android/common/ui/view/AppBarIcon.kt | 2 + .../common/ui/view/NordicSliderDefaults.kt | 2 +- .../android/common/ui/view/PagerView.kt | 34 +++ .../android/common/ui/view/ProgressItem.kt | 54 ++-- .../common/ui/view/RadioButtonGroup.kt | 25 ++ .../android/common/ui/view/RssiIcon.kt | 13 +- .../android/common/ui/view/SectionTitle.kt | 18 ++ .../{VerticalDivider.kt => StatusItem.kt} | 62 +++- .../android/common/ui/view/WarningView.kt | 57 ++++ .../common/ui/view/WizardStepComponent.kt | 277 ++++++++++++++++++ .../common/ui/view/internal/BigIcon.kt | 2 + .../android/common/ui/view/internal/Title.kt | 54 ---- 63 files changed, 913 insertions(+), 232 deletions(-) rename permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/{RequireLocationForWifi.kt => RequireLocationForWiFi.kt} (67%) rename permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/{RequireWifi.kt => RequireWiFi.kt} (65%) rename permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/utils/{WifiPermissionState.kt => WiFiPermissionState.kt} (84%) rename permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/view/{WifiDisabledView.kt => WiFiDisabledView.kt} (98%) rename permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/view/{WifiNotAvailableView.kt => WiFiNotAvailableView.kt} (97%) rename permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/view/{WifiPermissionRequiredView.kt => WiFiPermissionRequiredView.kt} (97%) rename ui/src/main/java/no/nordicsemi/android/common/ui/view/{VerticalDivider.kt => StatusItem.kt} (63%) delete mode 100644 ui/src/main/java/no/nordicsemi/android/common/ui/view/internal/Title.kt diff --git a/analytics/src/main/java/no/nordicsemi/android/common/analytics/NordicAnalytics.kt b/analytics/src/main/java/no/nordicsemi/android/common/analytics/NordicAnalytics.kt index 1412197..4e6eea7 100644 --- a/analytics/src/main/java/no/nordicsemi/android/common/analytics/NordicAnalytics.kt +++ b/analytics/src/main/java/no/nordicsemi/android/common/analytics/NordicAnalytics.kt @@ -29,6 +29,8 @@ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +@file:Suppress("unused") + package no.nordicsemi.android.common.analytics import android.content.Context @@ -45,14 +47,31 @@ import javax.inject.Singleton private const val LOG_TAG = "ANALYTICS" +/** + * This class is responsible for logging events to Firebase Analytics. + * + * Use Hilt injection to get an instance of this class. + */ @Singleton class NordicAnalytics @Inject internal constructor( @ApplicationContext private val context: Context, private val repository: AnalyticsPermissionRepository, ) { + /** + * A flow that emits the current Analytics permission data. + * + * @see AnalyticsPermissionData + */ val permissionData = repository.permissionData + private val firebase by lazy { FirebaseAnalytics.getInstance(context) } + /** + * Logs an event to Firebase Analytics, if the user has granted permission. + * + * @param name The name of the event. Should be between 1 and 40 characters long. + * @param params Optional parameters to be sent with the event. + */ fun logEvent(@Size(min = 1L, max = 40L) name: String, params: Bundle? = null) { runBlocking { repository.permissionData.firstOrNull() @@ -64,6 +83,11 @@ class NordicAnalytics @Inject internal constructor( } } + /** + * Sets whether analytics collection is enabled or disabled. + * + * @param isEnabled True to enable analytics collection, false to disable it. + */ suspend fun setAnalyticsEnabled(isEnabled: Boolean) { if (isEnabled) { repository.onPermissionGranted() diff --git a/analytics/src/main/java/no/nordicsemi/android/common/analytics/view/AnalyticsPermissionRequestDialog.kt b/analytics/src/main/java/no/nordicsemi/android/common/analytics/view/AnalyticsPermissionRequestDialog.kt index 0ecef82..5487da4 100644 --- a/analytics/src/main/java/no/nordicsemi/android/common/analytics/view/AnalyticsPermissionRequestDialog.kt +++ b/analytics/src/main/java/no/nordicsemi/android/common/analytics/view/AnalyticsPermissionRequestDialog.kt @@ -29,6 +29,8 @@ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +@file:Suppress("unused") + package no.nordicsemi.android.common.analytics.view import androidx.compose.foundation.layout.fillMaxHeight diff --git a/analytics/src/main/java/no/nordicsemi/android/common/analytics/view/AnalyticsPermissionSettingsSwitch.kt b/analytics/src/main/java/no/nordicsemi/android/common/analytics/view/AnalyticsPermissionSettingsSwitch.kt index 85f42a7..91ba059 100644 --- a/analytics/src/main/java/no/nordicsemi/android/common/analytics/view/AnalyticsPermissionSettingsSwitch.kt +++ b/analytics/src/main/java/no/nordicsemi/android/common/analytics/view/AnalyticsPermissionSettingsSwitch.kt @@ -29,6 +29,8 @@ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +@file:Suppress("unused") + package no.nordicsemi.android.common.analytics.view import androidx.compose.foundation.clickable diff --git a/core/src/main/AndroidManifest.xml b/core/src/main/AndroidManifest.xml index 30c6871..c3ebdf5 100644 --- a/core/src/main/AndroidManifest.xml +++ b/core/src/main/AndroidManifest.xml @@ -29,7 +29,4 @@ ~ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, ~ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --> - - - - + diff --git a/core/src/main/java/no/nordicsemi/android/common/core/AppLauncher.kt b/core/src/main/java/no/nordicsemi/android/common/core/AppLauncher.kt index 2ae128f..28f7f48 100644 --- a/core/src/main/java/no/nordicsemi/android/common/core/AppLauncher.kt +++ b/core/src/main/java/no/nordicsemi/android/common/core/AppLauncher.kt @@ -39,7 +39,16 @@ import android.content.pm.PackageManager import android.net.Uri import android.os.Build +/** + * Base link to the Google Play Store. + */ const val GOOGLE_PLAY_LINK = "https://play.google.com/store/apps/details?id=" + +/** + * AppLauncher is a utility class that can be used to launch an app with a given package name. + * + * If the activity is not installed, the Google Play Store will be opened. + */ @Suppress("unused") object AppLauncher { /** diff --git a/core/src/main/java/no/nordicsemi/android/common/core/ApplicationScope.kt b/core/src/main/java/no/nordicsemi/android/common/core/ApplicationScope.kt index 6f9dc95..a0d0000 100644 --- a/core/src/main/java/no/nordicsemi/android/common/core/ApplicationScope.kt +++ b/core/src/main/java/no/nordicsemi/android/common/core/ApplicationScope.kt @@ -29,10 +29,17 @@ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +@file:Suppress("unused") + package no.nordicsemi.android.common.core import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob +/** + * Application scope for the application. + * + * Combines [SupervisorJob] with [Dispatchers.Default]. + */ val ApplicationScope = CoroutineScope(SupervisorJob() + Dispatchers.Default) diff --git a/core/src/main/java/no/nordicsemi/android/common/core/BroadcastReceiver+Compose.kt b/core/src/main/java/no/nordicsemi/android/common/core/BroadcastReceiver+Compose.kt index f4de6ec..0484456 100644 --- a/core/src/main/java/no/nordicsemi/android/common/core/BroadcastReceiver+Compose.kt +++ b/core/src/main/java/no/nordicsemi/android/common/core/BroadcastReceiver+Compose.kt @@ -41,6 +41,14 @@ import androidx.compose.runtime.DisposableEffect import androidx.compose.ui.platform.LocalContext import androidx.core.content.ContextCompat +/** + * Registers a [BroadcastReceiver] that will be automatically unregistered when the composable + * is disposed. + * + * @param intentFilter the [IntentFilter] to register the receiver for. + * @param flags additional flags to control the receiver. Default is [ContextCompat.RECEIVER_NOT_EXPORTED]. + * @param onEvent the callback that will be called when a broadcast is received. + */ @SuppressLint("ComposableNaming") @Composable fun registerReceiver( diff --git a/core/src/main/java/no/nordicsemi/android/common/core/Ext.kt b/core/src/main/java/no/nordicsemi/android/common/core/Ext.kt index db8df91..e1d6b0f 100644 --- a/core/src/main/java/no/nordicsemi/android/common/core/Ext.kt +++ b/core/src/main/java/no/nordicsemi/android/common/core/Ext.kt @@ -37,6 +37,9 @@ import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.withStyle +/** + * Parses the string and makes the text between `` and `` bold using [AnnotatedString]. + */ fun String.parseBold(): AnnotatedString { val parts = this.split("", "") return buildAnnotatedString { diff --git a/core/src/main/java/no/nordicsemi/android/common/core/SingleEventSharedFlow.kt b/core/src/main/java/no/nordicsemi/android/common/core/SingleEventSharedFlow.kt index 4c3c4b9..27cc1df 100644 --- a/core/src/main/java/no/nordicsemi/android/common/core/SingleEventSharedFlow.kt +++ b/core/src/main/java/no/nordicsemi/android/common/core/SingleEventSharedFlow.kt @@ -34,6 +34,10 @@ package no.nordicsemi.android.common.core import kotlinx.coroutines.channels.BufferOverflow import kotlinx.coroutines.flow.MutableSharedFlow +/** + * Creates a simple [MutableSharedFlow] with a buffer of 1 element and [BufferOverflow.DROP_OLDEST] + * strategy. + */ fun simpleSharedFlow() = MutableSharedFlow( extraBufferCapacity = 1, onBufferOverflow = BufferOverflow.DROP_OLDEST diff --git a/core/src/main/java/no/nordicsemi/android/common/core/SparseArrayExt.kt b/core/src/main/java/no/nordicsemi/android/common/core/SparseArrayExt.kt index 84c09f8..6f08d29 100644 --- a/core/src/main/java/no/nordicsemi/android/common/core/SparseArrayExt.kt +++ b/core/src/main/java/no/nordicsemi/android/common/core/SparseArrayExt.kt @@ -33,6 +33,12 @@ package no.nordicsemi.android.common.core import android.util.SparseArray +/** + * Maps the SparseArray to a new SparseArray using the provided modifier. + * + * @param modifier the modifier to apply to each element. + * @return a new SparseArray with the modified elements. + */ fun SparseArray.map( modifier: (T) -> R, ): SparseArray { diff --git a/logger/src/main/AndroidManifest.xml b/logger/src/main/AndroidManifest.xml index 1a8359f..01fdb45 100644 --- a/logger/src/main/AndroidManifest.xml +++ b/logger/src/main/AndroidManifest.xml @@ -29,7 +29,6 @@ ~ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, ~ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --> - diff --git a/logger/src/main/java/no/nordicsemi/android/common/logger/LoggerLauncher.kt b/logger/src/main/java/no/nordicsemi/android/common/logger/LoggerLauncher.kt index b7e92a9..65b6018 100644 --- a/logger/src/main/java/no/nordicsemi/android/common/logger/LoggerLauncher.kt +++ b/logger/src/main/java/no/nordicsemi/android/common/logger/LoggerLauncher.kt @@ -37,6 +37,7 @@ import android.content.Context import android.content.Intent import android.net.Uri import no.nordicsemi.android.log.ILogSession +import no.nordicsemi.android.log.Logger private const val LOGGER_PACKAGE_NAME = "no.nordicsemi.android.log" private const val LOGGER_LINK = "https://play.google.com/store/apps/details?id=no.nordicsemi.android.log" @@ -48,6 +49,11 @@ object LoggerLauncher { /** * Opens the log session in nRF Logger app, or opens Google Play if the app is not installed. + * + * Use [Logger.newSession] to create a log session and log data to it. + * + * @param context the context. + * @param logSession the log session to open. */ fun launch(context: Context, logSession: ILogSession?) { val sessionUri = logSession?.sessionUri diff --git a/navigation/src/main/AndroidManifest.xml b/navigation/src/main/AndroidManifest.xml index ecbbfc1..a05a8d6 100644 --- a/navigation/src/main/AndroidManifest.xml +++ b/navigation/src/main/AndroidManifest.xml @@ -29,7 +29,4 @@ ~ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, ~ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --> - - - - \ No newline at end of file + \ No newline at end of file diff --git a/navigation/src/main/java/no/nordicsemi/android/common/navigation/Navigator.kt b/navigation/src/main/java/no/nordicsemi/android/common/navigation/Navigator.kt index a137f31..3f33986 100644 --- a/navigation/src/main/java/no/nordicsemi/android/common/navigation/Navigator.kt +++ b/navigation/src/main/java/no/nordicsemi/android/common/navigation/Navigator.kt @@ -45,7 +45,15 @@ import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.mapNotNull import kotlinx.parcelize.RawValue import no.nordicsemi.android.common.navigation.internal.START_DESTINATION +import no.nordicsemi.android.common.navigation.viewmodel.SimpleNavigationViewModel +/** + * A navigation component that allows navigation between destinations. + * + * Use Hilt injection to get an instance of this interface. + * + * @see SimpleNavigationViewModel + */ interface Navigator { /** diff --git a/navigation/src/main/java/no/nordicsemi/android/common/navigation/di/NavigationModule.kt b/navigation/src/main/java/no/nordicsemi/android/common/navigation/di/NavigationModule.kt index 2c6f62c..7e1a90e 100644 --- a/navigation/src/main/java/no/nordicsemi/android/common/navigation/di/NavigationModule.kt +++ b/navigation/src/main/java/no/nordicsemi/android/common/navigation/di/NavigationModule.kt @@ -42,7 +42,7 @@ import no.nordicsemi.android.common.navigation.internal.NavigationManager @Module @InstallIn(ActivityRetainedComponent::class) -interface NavigationModule { +internal interface NavigationModule { @Binds fun bindNavigator(navigator: NavigationManager): Navigator diff --git a/navigation/src/main/java/no/nordicsemi/android/common/navigation/internal/NavigationManager.kt b/navigation/src/main/java/no/nordicsemi/android/common/navigation/internal/NavigationManager.kt index c1e179b..6873e14 100644 --- a/navigation/src/main/java/no/nordicsemi/android/common/navigation/internal/NavigationManager.kt +++ b/navigation/src/main/java/no/nordicsemi/android/common/navigation/internal/NavigationManager.kt @@ -59,7 +59,7 @@ import javax.inject.Inject * result. */ @ActivityRetainedScoped -class NavigationManager @Inject constructor( +internal class NavigationManager @Inject constructor( @ApplicationContext private val context: Context, ) : Navigator { /** The navigation events class. */ diff --git a/navigation/src/main/java/no/nordicsemi/android/common/navigation/viewmodel/SimpleNavigationViewModel.kt b/navigation/src/main/java/no/nordicsemi/android/common/navigation/viewmodel/SimpleNavigationViewModel.kt index 3aa137c..bd6bcae 100644 --- a/navigation/src/main/java/no/nordicsemi/android/common/navigation/viewmodel/SimpleNavigationViewModel.kt +++ b/navigation/src/main/java/no/nordicsemi/android/common/navigation/viewmodel/SimpleNavigationViewModel.kt @@ -40,6 +40,16 @@ import no.nordicsemi.android.common.navigation.get import no.nordicsemi.android.common.navigation.getOrNull import javax.inject.Inject +/** + * A [ViewModel] that provides methods to get the parameter of the current destination. + * + * This is a helper view model. You may inject the [Navigator] directly into your view model instead. + * + * To get an instance of this view model use: + * ``` + * val vm: SimpleNavigationViewModel = hiltViewModel() + * ``` + */ @Suppress("unused") @HiltViewModel open class SimpleNavigationViewModel @Inject constructor( @@ -50,6 +60,7 @@ open class SimpleNavigationViewModel @Inject constructor( /** * Returns the parameter of the current destination, or null, if hasn't been set. */ + @Suppress("MemberVisibilityCanBePrivate") fun nullableParameterOf(destinationId: DestinationId): A? = savedStateHandle.getOrNull(destinationId) diff --git a/permissions-ble/src/main/AndroidManifest.xml b/permissions-ble/src/main/AndroidManifest.xml index 6611a9f..b1ba01f 100644 --- a/permissions-ble/src/main/AndroidManifest.xml +++ b/permissions-ble/src/main/AndroidManifest.xml @@ -29,7 +29,6 @@ ~ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, ~ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --> - diff --git a/permissions-ble/src/main/java/no/nordicsemi/android/common/permissions/ble/RequireBluetooth.kt b/permissions-ble/src/main/java/no/nordicsemi/android/common/permissions/ble/RequireBluetooth.kt index 4d2d2fa..0a04d24 100644 --- a/permissions-ble/src/main/java/no/nordicsemi/android/common/permissions/ble/RequireBluetooth.kt +++ b/permissions-ble/src/main/java/no/nordicsemi/android/common/permissions/ble/RequireBluetooth.kt @@ -29,6 +29,8 @@ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +@file:Suppress("unused") + package no.nordicsemi.android.common.permissions.ble import android.os.Build @@ -37,13 +39,50 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle -import no.nordicsemi.android.common.permissions.ble.util.BlePermissionNotAvailableReason import no.nordicsemi.android.common.permissions.ble.util.BlePermissionState import no.nordicsemi.android.common.permissions.ble.view.BluetoothDisabledView import no.nordicsemi.android.common.permissions.ble.view.BluetoothNotAvailableView import no.nordicsemi.android.common.permissions.ble.view.BluetoothPermissionRequiredView import no.nordicsemi.android.common.permissions.ble.viewmodel.PermissionViewModel +/** + * The reason why the BLE permission is not available. + */ +enum class BlePermissionNotAvailableReason { + /** Bluetooth Scan permission is required. */ + PERMISSION_REQUIRED, + /** Bluetooth is not available on this device. */ + NOT_AVAILABLE, + /** Bluetooth is disabled. */ + DISABLED, +} + +/** + * A wrapper for composables that require Bluetooth. + * + * This composable will display a view based on the Bluetooth state and permissions. + * + * On Android 12+ it will require `BLUETOOTH_SCAN`, `BLUETOOTH_CONNECT` and `BLUETOOTH_ADVERTISE` + * permission to be granted and will show a view allowing requesting them. + * + * ### Example: + * ```kotlin + * RequireBluetooth( + * onChanged = { onScanningStateChanged(it) } + * ) { + * RequireLocation( + * onChanged = { onScanningStateChanged(it) } + * ) { + * // Bluetooth scanner views + * } + * } + * ``` + * + * @param onChanged A callback that will be called when the state of the Bluetooth changes. + * @param contentWithoutBluetooth A composable that will be displayed when Bluetooth is not available. + * @param content A composable that will be displayed when Bluetooth is available. + * @see BlePermissionNotAvailableReason + */ @Composable fun RequireBluetooth( onChanged: (Boolean) -> Unit = {}, diff --git a/permissions-ble/src/main/java/no/nordicsemi/android/common/permissions/ble/RequireLocation.kt b/permissions-ble/src/main/java/no/nordicsemi/android/common/permissions/ble/RequireLocation.kt index dedcaf0..fd57c5c 100644 --- a/permissions-ble/src/main/java/no/nordicsemi/android/common/permissions/ble/RequireLocation.kt +++ b/permissions-ble/src/main/java/no/nordicsemi/android/common/permissions/ble/RequireLocation.kt @@ -29,6 +29,8 @@ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +@file:Suppress("unused") + package no.nordicsemi.android.common.permissions.ble import androidx.compose.runtime.Composable @@ -36,11 +38,36 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle -import no.nordicsemi.android.common.permissions.ble.util.BlePermissionNotAvailableReason import no.nordicsemi.android.common.permissions.ble.util.BlePermissionState import no.nordicsemi.android.common.permissions.ble.view.LocationPermissionRequiredView import no.nordicsemi.android.common.permissions.ble.viewmodel.PermissionViewModel +/** + * A wrapper for composables that require Location. + * + * Location is required for Bluetooth LE scanning from Android 6 Marshmallow. + * Starting from Android 12 location may not be required if `BLUETOOTH_SCAN` permission was + * requested with `neverForLocation` flag. + * + * This composable will display a view based on the state of the location. + * + * ### Example: + * ```kotlin + * RequireBluetooth( + * onChanged = { onScanningStateChanged(it) } + * ) { + * RequireLocation( + * onChanged = { onScanningStateChanged(it) } + * ) { + * // Bluetooth scanner views + * } + * } + * ``` + * + * @param onChanged A callback that will be called when the state of the location changes. + * @param contentWithoutLocation A composable that will be displayed when location is not available. + * @param content A composable that will be displayed when location is available. + */ @Composable fun RequireLocation( onChanged: (Boolean) -> Unit = {}, diff --git a/permissions-ble/src/main/java/no/nordicsemi/android/common/permissions/ble/bluetooth/BluetoothStateManager.kt b/permissions-ble/src/main/java/no/nordicsemi/android/common/permissions/ble/bluetooth/BluetoothStateManager.kt index 0f1f398..2c13e17 100644 --- a/permissions-ble/src/main/java/no/nordicsemi/android/common/permissions/ble/bluetooth/BluetoothStateManager.kt +++ b/permissions-ble/src/main/java/no/nordicsemi/android/common/permissions/ble/bluetooth/BluetoothStateManager.kt @@ -40,7 +40,7 @@ import androidx.core.content.ContextCompat import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.callbackFlow -import no.nordicsemi.android.common.permissions.ble.util.BlePermissionNotAvailableReason +import no.nordicsemi.android.common.permissions.ble.BlePermissionNotAvailableReason import no.nordicsemi.android.common.permissions.ble.util.BlePermissionState import no.nordicsemi.android.common.permissions.ble.util.LocalDataProvider import no.nordicsemi.android.common.permissions.ble.util.PermissionUtils @@ -50,7 +50,7 @@ import javax.inject.Singleton private const val REFRESH_PERMISSIONS = "no.nordicsemi.android.common.permission.REFRESH_BLUETOOTH_PERMISSIONS" @Singleton -class BluetoothStateManager @Inject constructor( +internal class BluetoothStateManager @Inject constructor( @ApplicationContext private val context: Context, ) { private val dataProvider = LocalDataProvider(context) diff --git a/permissions-ble/src/main/java/no/nordicsemi/android/common/permissions/ble/location/LocationStateManager.kt b/permissions-ble/src/main/java/no/nordicsemi/android/common/permissions/ble/location/LocationStateManager.kt index c00fa1a..905d252 100644 --- a/permissions-ble/src/main/java/no/nordicsemi/android/common/permissions/ble/location/LocationStateManager.kt +++ b/permissions-ble/src/main/java/no/nordicsemi/android/common/permissions/ble/location/LocationStateManager.kt @@ -52,7 +52,7 @@ private const val REFRESH_PERMISSIONS = "no.nordicsemi.android.common.permission.REFRESH_LOCATION_PERMISSIONS" @Singleton -class LocationStateManager @Inject constructor( +internal class LocationStateManager @Inject constructor( @ApplicationContext private val context: Context, ) { private val dataProvider = LocalDataProvider(context) diff --git a/permissions-ble/src/main/java/no/nordicsemi/android/common/permissions/ble/util/BlePermissionState.kt b/permissions-ble/src/main/java/no/nordicsemi/android/common/permissions/ble/util/BlePermissionState.kt index e3aa1eb..054e477 100644 --- a/permissions-ble/src/main/java/no/nordicsemi/android/common/permissions/ble/util/BlePermissionState.kt +++ b/permissions-ble/src/main/java/no/nordicsemi/android/common/permissions/ble/util/BlePermissionState.kt @@ -31,14 +31,19 @@ package no.nordicsemi.android.common.permissions.ble.util -enum class BlePermissionNotAvailableReason { - PERMISSION_REQUIRED, - NOT_AVAILABLE, - DISABLED, -} +import no.nordicsemi.android.common.permissions.ble.BlePermissionNotAvailableReason -sealed class BlePermissionState { +/** + * The state of Bluetooth permission. + */ +internal sealed class BlePermissionState { + /** Bluetooth permission is granted. */ data object Available : BlePermissionState() + /** + * Bluetooth is not available. + * + * @param reason The reason why the BLE permission is not available. + */ data class NotAvailable( val reason: BlePermissionNotAvailableReason, ) : BlePermissionState() diff --git a/permissions-ble/src/main/java/no/nordicsemi/android/common/permissions/ble/viewmodel/PermissionViewModel.kt b/permissions-ble/src/main/java/no/nordicsemi/android/common/permissions/ble/viewmodel/PermissionViewModel.kt index 89afe64..0503a18 100644 --- a/permissions-ble/src/main/java/no/nordicsemi/android/common/permissions/ble/viewmodel/PermissionViewModel.kt +++ b/permissions-ble/src/main/java/no/nordicsemi/android/common/permissions/ble/viewmodel/PermissionViewModel.kt @@ -37,9 +37,9 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.stateIn +import no.nordicsemi.android.common.permissions.ble.BlePermissionNotAvailableReason import no.nordicsemi.android.common.permissions.ble.bluetooth.BluetoothStateManager import no.nordicsemi.android.common.permissions.ble.location.LocationStateManager -import no.nordicsemi.android.common.permissions.ble.util.BlePermissionNotAvailableReason import no.nordicsemi.android.common.permissions.ble.util.BlePermissionState import javax.inject.Inject diff --git a/permissions-internet/src/main/AndroidManifest.xml b/permissions-internet/src/main/AndroidManifest.xml index b0459ad..d32d0b5 100644 --- a/permissions-internet/src/main/AndroidManifest.xml +++ b/permissions-internet/src/main/AndroidManifest.xml @@ -29,9 +29,9 @@ ~ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, ~ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --> - + diff --git a/permissions-internet/src/main/java/no/nordicsemi/android/common/permissions/internet/RequireInternet.kt b/permissions-internet/src/main/java/no/nordicsemi/android/common/permissions/internet/RequireInternet.kt index 9071c58..ff45c5b 100644 --- a/permissions-internet/src/main/java/no/nordicsemi/android/common/permissions/internet/RequireInternet.kt +++ b/permissions-internet/src/main/java/no/nordicsemi/android/common/permissions/internet/RequireInternet.kt @@ -29,6 +29,8 @@ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +@file:Suppress("unused") + package no.nordicsemi.android.common.permissions.internet import androidx.compose.runtime.Composable @@ -40,6 +42,24 @@ import no.nordicsemi.android.common.permissions.internet.util.InternetPermission import no.nordicsemi.android.common.permissions.internet.view.InternetNotAvailableView import no.nordicsemi.android.common.permissions.internet.viewmodel.InternetPermissionViewModel +/** + * A wrapper for composables that require Internet. + * + * ### Example: + * ```kotlin + * RequireBluetooth( + * onChanged = { enabled -> + * // Handle Internet state change + * } + * ) { + * // Your content + * } + * ``` + * + * @param onChanged A callback that will be called when the state of the internet changes. + * @param contentWithoutInternet A composable that will be displayed when internet is not available. + * @param content A composable that will be displayed when internet is available. + */ @Composable fun RequireInternet( onChanged: (Boolean) -> Unit = {}, diff --git a/permissions-internet/src/main/java/no/nordicsemi/android/common/permissions/internet/repository/InternetStateManager.kt b/permissions-internet/src/main/java/no/nordicsemi/android/common/permissions/internet/repository/InternetStateManager.kt index 10f609f..16eadcc 100644 --- a/permissions-internet/src/main/java/no/nordicsemi/android/common/permissions/internet/repository/InternetStateManager.kt +++ b/permissions-internet/src/main/java/no/nordicsemi/android/common/permissions/internet/repository/InternetStateManager.kt @@ -45,7 +45,7 @@ import javax.inject.Inject import javax.inject.Singleton @Singleton -class InternetStateManager @Inject constructor( +internal class InternetStateManager @Inject constructor( @ApplicationContext private val context: Context ) { diff --git a/permissions-internet/src/main/java/no/nordicsemi/android/common/permissions/internet/util/InternetPermissionState.kt b/permissions-internet/src/main/java/no/nordicsemi/android/common/permissions/internet/util/InternetPermissionState.kt index f49c31a..1ceb641 100644 --- a/permissions-internet/src/main/java/no/nordicsemi/android/common/permissions/internet/util/InternetPermissionState.kt +++ b/permissions-internet/src/main/java/no/nordicsemi/android/common/permissions/internet/util/InternetPermissionState.kt @@ -31,12 +31,12 @@ package no.nordicsemi.android.common.permissions.internet.util -enum class InternetPermissionNotAvailableReason { +internal enum class InternetPermissionNotAvailableReason { NOT_AVAILABLE, DISABLED, } -sealed class InternetPermissionState { +internal sealed class InternetPermissionState { data object Available : InternetPermissionState() diff --git a/permissions-nfc/src/main/AndroidManifest.xml b/permissions-nfc/src/main/AndroidManifest.xml index 46ea455..2bbb358 100644 --- a/permissions-nfc/src/main/AndroidManifest.xml +++ b/permissions-nfc/src/main/AndroidManifest.xml @@ -29,8 +29,9 @@ ~ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, ~ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --> - + + \ No newline at end of file diff --git a/permissions-nfc/src/main/java/no/nordicsemi/android/common/permissions/nfc/RequireNfc.kt b/permissions-nfc/src/main/java/no/nordicsemi/android/common/permissions/nfc/RequireNfc.kt index b018553..03a756d 100644 --- a/permissions-nfc/src/main/java/no/nordicsemi/android/common/permissions/nfc/RequireNfc.kt +++ b/permissions-nfc/src/main/java/no/nordicsemi/android/common/permissions/nfc/RequireNfc.kt @@ -29,6 +29,8 @@ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +@file:Suppress("unused") + package no.nordicsemi.android.common.permissions.nfc import androidx.compose.runtime.Composable @@ -36,12 +38,42 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle -import no.nordicsemi.android.common.permissions.nfc.utils.NfcNotAvailableReason import no.nordicsemi.android.common.permissions.nfc.utils.NfcPermissionState import no.nordicsemi.android.common.permissions.nfc.view.NfcDisabledView import no.nordicsemi.android.common.permissions.nfc.view.NfcNotAvailableView import no.nordicsemi.android.common.permissions.nfc.viewmodel.NfcPermissionViewModel +/** + * Reason why NFC is not available. + */ +enum class NfcNotAvailableReason { + /** NFC is not available on this device. */ + NOT_AVAILABLE, + /** NFC is disabled in the system settings. */ + DISABLED, +} + +/** + * A wrapper for composables that require Bluetooth. + * + * ### Example: + * ```kotlin + * RequireNfc( + * onChange = { enabled -> + * //.. + * }, + * contentWithoutNfc = { reason -> + * Text("NFC is not available: $reason") + * }, + * ) { + * Text("NFC is available") + * } + * ``` + * + * @param onChanged A callback that will be called when the state of the NFC changes. + * @param contentWithoutNfc A composable that will be displayed when NFC is not available. + * @param content A composable that will be displayed when NFC is available. + */ @Composable fun RequireNfc( onChanged: (Boolean) -> Unit = {}, diff --git a/permissions-nfc/src/main/java/no/nordicsemi/android/common/permissions/nfc/repostory/NfcStateManager.kt b/permissions-nfc/src/main/java/no/nordicsemi/android/common/permissions/nfc/repostory/NfcStateManager.kt index 36f5c7b..afc5fe1 100644 --- a/permissions-nfc/src/main/java/no/nordicsemi/android/common/permissions/nfc/repostory/NfcStateManager.kt +++ b/permissions-nfc/src/main/java/no/nordicsemi/android/common/permissions/nfc/repostory/NfcStateManager.kt @@ -40,14 +40,14 @@ import androidx.core.content.ContextCompat import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.callbackFlow +import no.nordicsemi.android.common.permissions.nfc.NfcNotAvailableReason import no.nordicsemi.android.common.permissions.nfc.utils.NfcPermissionUtils -import no.nordicsemi.android.common.permissions.nfc.utils.NfcNotAvailableReason import no.nordicsemi.android.common.permissions.nfc.utils.NfcPermissionState import javax.inject.Inject import javax.inject.Singleton @Singleton -class NfcStateManager @Inject constructor( +internal class NfcStateManager @Inject constructor( @ApplicationContext private val context: Context, ) { private val utils = NfcPermissionUtils(context) diff --git a/permissions-nfc/src/main/java/no/nordicsemi/android/common/permissions/nfc/utils/NfcPermissionState.kt b/permissions-nfc/src/main/java/no/nordicsemi/android/common/permissions/nfc/utils/NfcPermissionState.kt index cb3a898..f15f287 100644 --- a/permissions-nfc/src/main/java/no/nordicsemi/android/common/permissions/nfc/utils/NfcPermissionState.kt +++ b/permissions-nfc/src/main/java/no/nordicsemi/android/common/permissions/nfc/utils/NfcPermissionState.kt @@ -31,13 +31,10 @@ package no.nordicsemi.android.common.permissions.nfc.utils -sealed class NfcPermissionState { +import no.nordicsemi.android.common.permissions.nfc.NfcNotAvailableReason + +internal sealed class NfcPermissionState { data object Available : NfcPermissionState() data class NotAvailable(val reason: NfcNotAvailableReason) : NfcPermissionState() -} - -enum class NfcNotAvailableReason { - NOT_AVAILABLE, - DISABLED, } \ No newline at end of file diff --git a/permissions-nfc/src/main/java/no/nordicsemi/android/common/permissions/nfc/viewmodel/NfcPermissionViewModel.kt b/permissions-nfc/src/main/java/no/nordicsemi/android/common/permissions/nfc/viewmodel/NfcPermissionViewModel.kt index a6c9eab..c152b3d 100644 --- a/permissions-nfc/src/main/java/no/nordicsemi/android/common/permissions/nfc/viewmodel/NfcPermissionViewModel.kt +++ b/permissions-nfc/src/main/java/no/nordicsemi/android/common/permissions/nfc/viewmodel/NfcPermissionViewModel.kt @@ -36,8 +36,8 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.stateIn +import no.nordicsemi.android.common.permissions.nfc.NfcNotAvailableReason import no.nordicsemi.android.common.permissions.nfc.repostory.NfcStateManager -import no.nordicsemi.android.common.permissions.nfc.utils.NfcNotAvailableReason import no.nordicsemi.android.common.permissions.nfc.utils.NfcPermissionState import javax.inject.Inject @@ -45,7 +45,7 @@ import javax.inject.Inject * Needed for injecting to @Composable functions. */ @HiltViewModel -class NfcPermissionViewModel @Inject internal constructor( +internal class NfcPermissionViewModel @Inject internal constructor( nfcManager: NfcStateManager, ) : ViewModel() { diff --git a/permissions-notification/src/main/AndroidManifest.xml b/permissions-notification/src/main/AndroidManifest.xml index 48851b5..b4824b8 100644 --- a/permissions-notification/src/main/AndroidManifest.xml +++ b/permissions-notification/src/main/AndroidManifest.xml @@ -1,7 +1,37 @@ + - + \ No newline at end of file diff --git a/permissions-notification/src/main/java/no/nordicsemi/android/common/permissions/notification/RequestNotificationPermission.kt b/permissions-notification/src/main/java/no/nordicsemi/android/common/permissions/notification/RequestNotificationPermission.kt index cb85e7d..f5fef0b 100644 --- a/permissions-notification/src/main/java/no/nordicsemi/android/common/permissions/notification/RequestNotificationPermission.kt +++ b/permissions-notification/src/main/java/no/nordicsemi/android/common/permissions/notification/RequestNotificationPermission.kt @@ -41,6 +41,28 @@ import no.nordicsemi.android.common.permissions.notification.utils.NotificationP import no.nordicsemi.android.common.permissions.notification.view.NotificationPermissionRequestView import no.nordicsemi.android.common.permissions.notification.viewmodel.NotificationPermissionViewModel +/** + * A wrapper for composables that show notifications to the user. + * + * This composable will request the notification permission if needed. + * + * Content is displayed in any case and the state of the permission is given as a parameter. + * + * ### Example: + * ```kotlin + * RequestNotificationPermission( + * onChanged = { granted -> + * // Handle notification state change + * } + * ) { canShowNotifications -> + * // Your content + * } + * ``` + * + * @param onChanged A callback that will be called when the state of the notification changes. + * @param content The content to display. The parameter is `true` if the notification permission + * is granted or not required, `false` otherwise. + */ @Composable fun RequestNotificationPermission( onChanged: (Boolean) -> Unit = {}, diff --git a/permissions-wifi/src/main/AndroidManifest.xml b/permissions-wifi/src/main/AndroidManifest.xml index 28c27ae..4f9bd4b 100644 --- a/permissions-wifi/src/main/AndroidManifest.xml +++ b/permissions-wifi/src/main/AndroidManifest.xml @@ -28,7 +28,6 @@ ~ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, ~ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --> - diff --git a/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/RequireLocationForWifi.kt b/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/RequireLocationForWiFi.kt similarity index 67% rename from permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/RequireLocationForWifi.kt rename to permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/RequireLocationForWiFi.kt index b4fbbb3..d4cb7ed 100644 --- a/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/RequireLocationForWifi.kt +++ b/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/RequireLocationForWiFi.kt @@ -29,6 +29,8 @@ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +@file:Suppress("unused") + package no.nordicsemi.android.common.permissions.wifi import androidx.compose.runtime.Composable @@ -36,33 +38,43 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle -import no.nordicsemi.android.common.permissions.wifi.utils.WifiPermissionNotAvailableReason -import no.nordicsemi.android.common.permissions.wifi.utils.WifiPermissionState +import no.nordicsemi.android.common.permissions.wifi.utils.WiFiPermissionState import no.nordicsemi.android.common.permissions.wifi.view.LocationDisabledView import no.nordicsemi.android.common.permissions.wifi.view.LocationPermissionRequiredView import no.nordicsemi.android.common.permissions.wifi.viewmodel.PermissionViewModel +/** + * A wrapper for composables that require location permission for Wi-Fi scanning. + * + * This composable will request the location permission if needed. + * + * @param onChanged A callback that will be called when the permission state changes. + * @param contentWithoutLocation A composable that will be displayed when the location permission is not available. + * @param content A composable that will be displayed when the location permission is available. + */ @Composable -fun RequireLocationForWifi( +fun RequireLocationForWiFi( onChanged: (Boolean) -> Unit = {}, - contentWithoutLocation: @Composable () -> Unit = { LocationPermissionRequiredView() }, - content: @Composable (isLocationRequiredAndDisabled: Boolean) -> Unit, + contentWithoutLocation: @Composable (WiFiPermissionNotAvailableReason) -> Unit = { reason -> + when (reason) { + WiFiPermissionNotAvailableReason.DISABLED -> LocationDisabledView() + else -> LocationPermissionRequiredView() + } + }, + content: @Composable () -> Unit, ) { val viewModel = hiltViewModel() val state by viewModel.locationPermission.collectAsStateWithLifecycle() LaunchedEffect(state) { onChanged( - state is WifiPermissionState.Available || - (state as WifiPermissionState.NotAvailable).reason == WifiPermissionNotAvailableReason.DISABLED + state is WiFiPermissionState.Available || + (state as WiFiPermissionState.NotAvailable).reason == WiFiPermissionNotAvailableReason.DISABLED ) } when (val s = state) { - WifiPermissionState.Available -> content(false) - is WifiPermissionState.NotAvailable -> when (s.reason) { - WifiPermissionNotAvailableReason.DISABLED -> LocationDisabledView() - else -> contentWithoutLocation() - } + WiFiPermissionState.Available -> content() + is WiFiPermissionState.NotAvailable -> contentWithoutLocation(s.reason) } } \ No newline at end of file diff --git a/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/RequireWifi.kt b/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/RequireWiFi.kt similarity index 65% rename from permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/RequireWifi.kt rename to permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/RequireWiFi.kt index 9c74002..6073638 100644 --- a/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/RequireWifi.kt +++ b/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/RequireWiFi.kt @@ -29,6 +29,8 @@ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +@file:Suppress("unused") + package no.nordicsemi.android.common.permissions.wifi import android.os.Build @@ -37,31 +39,36 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle -import no.nordicsemi.android.common.permissions.wifi.utils.WifiPermissionNotAvailableReason -import no.nordicsemi.android.common.permissions.wifi.utils.WifiPermissionState -import no.nordicsemi.android.common.permissions.wifi.view.WifiDisabledView -import no.nordicsemi.android.common.permissions.wifi.view.WifiNotAvailableView -import no.nordicsemi.android.common.permissions.wifi.view.WifiPermissionRequiredView +import no.nordicsemi.android.common.permissions.wifi.utils.WiFiPermissionState +import no.nordicsemi.android.common.permissions.wifi.view.WiFiDisabledView +import no.nordicsemi.android.common.permissions.wifi.view.WiFiNotAvailableView +import no.nordicsemi.android.common.permissions.wifi.view.WiFiPermissionRequiredView import no.nordicsemi.android.common.permissions.wifi.viewmodel.PermissionViewModel +/** + * Represents the reason for Wi-Fi permission is not available. + */ +enum class WiFiPermissionNotAvailableReason { + PERMISSION_REQUIRED, + NOT_AVAILABLE, + DISABLED, +} /** * Composable that requests Wi-Fi permission. * * @param isNearbyWifiDevicesPermissionRequired If `true`, [contentWithoutWifi] shall request for - * Wi-Fi permission and if set to `false`, - * [contentWithoutWifi] shall request Wi-Fi to be - * enabled. - * @param onChanged Callback that is called when the Wi-Fi state changes. - * @param contentWithoutWifi The content to display when Wi-Fi is not available. - * @param content The content to display when Wi-Fi is available. + * Wi-Fi permission and if set to `false`, [contentWithoutWifi] shall request Wi-Fi to be enabled. + * @param onChanged Callback that is called when the Wi-Fi state changes. + * @param contentWithoutWifi The content to display when Wi-Fi is not available. + * @param content The content to display when Wi-Fi is available. */ @Composable -fun RequireWifi( +fun RequireWiFi( isNearbyWifiDevicesPermissionRequired: Boolean, onChanged: (Boolean) -> Unit = {}, - contentWithoutWifi: @Composable (WifiPermissionNotAvailableReason) -> Unit = { - NoWifiView(reason = it) + contentWithoutWifi: @Composable (WiFiPermissionNotAvailableReason) -> Unit = { + NoWiFiView(reason = it) }, content: @Composable () -> Unit, ) { @@ -69,14 +76,14 @@ fun RequireWifi( val state by viewModel.wifiState.collectAsStateWithLifecycle() LaunchedEffect(state) { - onChanged(state is WifiPermissionState.Available) + onChanged(state is WiFiPermissionState.Available) } when (val s = state) { - WifiPermissionState.Available -> content() + WiFiPermissionState.Available -> content() - is WifiPermissionState.NotAvailable -> { - if (!isNearbyWifiDevicesPermissionRequired && s.reason == WifiPermissionNotAvailableReason.PERMISSION_REQUIRED) { + is WiFiPermissionState.NotAvailable -> { + if (!isNearbyWifiDevicesPermissionRequired && s.reason == WiFiPermissionNotAvailableReason.PERMISSION_REQUIRED) { content() } else { contentWithoutWifi(s.reason) @@ -86,16 +93,16 @@ fun RequireWifi( } @Composable -private fun NoWifiView( - reason: WifiPermissionNotAvailableReason, +private fun NoWiFiView( + reason: WiFiPermissionNotAvailableReason, ) { when (reason) { - WifiPermissionNotAvailableReason.NOT_AVAILABLE -> WifiNotAvailableView() - WifiPermissionNotAvailableReason.PERMISSION_REQUIRED -> + WiFiPermissionNotAvailableReason.NOT_AVAILABLE -> WiFiNotAvailableView() + WiFiPermissionNotAvailableReason.PERMISSION_REQUIRED -> if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - WifiPermissionRequiredView() + WiFiPermissionRequiredView() } - WifiPermissionNotAvailableReason.DISABLED -> WifiDisabledView() + WiFiPermissionNotAvailableReason.DISABLED -> WiFiDisabledView() } } \ No newline at end of file diff --git a/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/location/LocationStateManager.kt b/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/location/LocationStateManager.kt index 9580d24..ca229f5 100644 --- a/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/location/LocationStateManager.kt +++ b/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/location/LocationStateManager.kt @@ -42,10 +42,10 @@ import androidx.core.location.LocationManagerCompat import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.callbackFlow +import no.nordicsemi.android.common.permissions.wifi.WiFiPermissionNotAvailableReason import no.nordicsemi.android.common.permissions.wifi.utils.LocalDataProvider import no.nordicsemi.android.common.permissions.wifi.utils.PermissionUtils -import no.nordicsemi.android.common.permissions.wifi.utils.WifiPermissionNotAvailableReason -import no.nordicsemi.android.common.permissions.wifi.utils.WifiPermissionState +import no.nordicsemi.android.common.permissions.wifi.utils.WiFiPermissionState import javax.inject.Inject import javax.inject.Singleton @@ -96,16 +96,16 @@ internal class LocationStateManager @Inject constructor( return utils.isLocationPermissionDeniedForever(context) } - private fun getLocationState(): WifiPermissionState { + private fun getLocationState(): WiFiPermissionState { val lm = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager return when { !utils.isLocationPermissionGranted -> - WifiPermissionState.NotAvailable(WifiPermissionNotAvailableReason.PERMISSION_REQUIRED) + WiFiPermissionState.NotAvailable(WiFiPermissionNotAvailableReason.PERMISSION_REQUIRED) dataProvider.isLocationPermissionRequired && !LocationManagerCompat.isLocationEnabled(lm) -> - WifiPermissionState.NotAvailable(WifiPermissionNotAvailableReason.DISABLED) + WiFiPermissionState.NotAvailable(WiFiPermissionNotAvailableReason.DISABLED) - else -> WifiPermissionState.Available + else -> WiFiPermissionState.Available } } } \ No newline at end of file diff --git a/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/state/WifiStateManager.kt b/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/state/WifiStateManager.kt index c7baf08..9df13f2 100644 --- a/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/state/WifiStateManager.kt +++ b/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/state/WifiStateManager.kt @@ -42,10 +42,10 @@ import androidx.core.content.ContextCompat.RECEIVER_EXPORTED import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.callbackFlow +import no.nordicsemi.android.common.permissions.wifi.WiFiPermissionNotAvailableReason import no.nordicsemi.android.common.permissions.wifi.utils.LocalDataProvider import no.nordicsemi.android.common.permissions.wifi.utils.PermissionUtils -import no.nordicsemi.android.common.permissions.wifi.utils.WifiPermissionNotAvailableReason -import no.nordicsemi.android.common.permissions.wifi.utils.WifiPermissionState +import no.nordicsemi.android.common.permissions.wifi.utils.WiFiPermissionState import javax.inject.Inject import javax.inject.Singleton @@ -99,18 +99,18 @@ internal class WifiStateManager @Inject constructor( } private fun getWifiPermissionState() = when { - !utils.isWifiAvailable -> WifiPermissionState.NotAvailable( - WifiPermissionNotAvailableReason.NOT_AVAILABLE + !utils.isWifiAvailable -> WiFiPermissionState.NotAvailable( + WiFiPermissionNotAvailableReason.NOT_AVAILABLE ) - !utils.areNecessaryWifiPermissionsGranted -> WifiPermissionState.NotAvailable( - WifiPermissionNotAvailableReason.PERMISSION_REQUIRED + !utils.areNecessaryWifiPermissionsGranted -> WiFiPermissionState.NotAvailable( + WiFiPermissionNotAvailableReason.PERMISSION_REQUIRED ) - !utils.isWifiEnabled -> WifiPermissionState.NotAvailable( - WifiPermissionNotAvailableReason.DISABLED + !utils.isWifiEnabled -> WiFiPermissionState.NotAvailable( + WiFiPermissionNotAvailableReason.DISABLED ) - else -> WifiPermissionState.Available + else -> WiFiPermissionState.Available } } diff --git a/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/utils/WifiPermissionState.kt b/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/utils/WiFiPermissionState.kt similarity index 84% rename from permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/utils/WifiPermissionState.kt rename to permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/utils/WiFiPermissionState.kt index 0cf7fdd..f1453aa 100644 --- a/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/utils/WifiPermissionState.kt +++ b/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/utils/WiFiPermissionState.kt @@ -31,30 +31,23 @@ package no.nordicsemi.android.common.permissions.wifi.utils -/** - * Represents the reason for Wi-Fi permission is not available. - */ -enum class WifiPermissionNotAvailableReason { - PERMISSION_REQUIRED, - NOT_AVAILABLE, - DISABLED, -} +import no.nordicsemi.android.common.permissions.wifi.WiFiPermissionNotAvailableReason /** * Represents the state of Wi-Fi permission. */ -sealed class WifiPermissionState { +internal sealed class WiFiPermissionState { /** * Represents the Wi-Fi permission is available. */ - data object Available : WifiPermissionState() + data object Available : WiFiPermissionState() /** * Represents the Wi-Fi permission is not available. * @param reason The reason for Wi-Fi permission is not available. */ data class NotAvailable( - val reason: WifiPermissionNotAvailableReason, - ) : WifiPermissionState() + val reason: WiFiPermissionNotAvailableReason, + ) : WiFiPermissionState() } diff --git a/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/view/WifiDisabledView.kt b/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/view/WiFiDisabledView.kt similarity index 98% rename from permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/view/WifiDisabledView.kt rename to permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/view/WiFiDisabledView.kt index b2e824b..8a39cb1 100644 --- a/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/view/WifiDisabledView.kt +++ b/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/view/WiFiDisabledView.kt @@ -49,7 +49,7 @@ import no.nordicsemi.android.common.permissions.wifi.R import no.nordicsemi.android.common.ui.view.WarningView @Composable -internal fun WifiDisabledView() { +internal fun WiFiDisabledView() { WarningView( imageVector = Icons.Default.WifiOff, title = stringResource(id = R.string.wifi_disabled), @@ -72,6 +72,6 @@ private fun enableWifi(context: Context) { @Composable private fun WifiDisabledViewPreview() { MaterialTheme { - WifiDisabledView() + WiFiDisabledView() } } \ No newline at end of file diff --git a/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/view/WifiNotAvailableView.kt b/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/view/WiFiNotAvailableView.kt similarity index 97% rename from permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/view/WifiNotAvailableView.kt rename to permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/view/WiFiNotAvailableView.kt index 88a5f6b..7fa5120 100644 --- a/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/view/WifiNotAvailableView.kt +++ b/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/view/WiFiNotAvailableView.kt @@ -43,7 +43,7 @@ import no.nordicsemi.android.common.permissions.wifi.R import no.nordicsemi.android.common.ui.view.WarningView @Composable -internal fun WifiNotAvailableView() { +internal fun WiFiNotAvailableView() { WarningView( imageVector = Icons.Default.WifiOff, title = stringResource(id = R.string.wifi_not_available), @@ -57,6 +57,6 @@ internal fun WifiNotAvailableView() { @Composable private fun WifiNotAvailableView_Preview() { MaterialTheme { - WifiNotAvailableView() + WiFiNotAvailableView() } } diff --git a/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/view/WifiPermissionRequiredView.kt b/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/view/WiFiPermissionRequiredView.kt similarity index 97% rename from permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/view/WifiPermissionRequiredView.kt rename to permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/view/WiFiPermissionRequiredView.kt index 0b708e3..2734527 100644 --- a/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/view/WifiPermissionRequiredView.kt +++ b/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/view/WiFiPermissionRequiredView.kt @@ -39,7 +39,6 @@ import android.os.Build import android.provider.Settings import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts -import androidx.annotation.RequiresApi import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.WifiOff @@ -62,7 +61,7 @@ import no.nordicsemi.android.common.permissions.wifi.viewmodel.PermissionViewMod import no.nordicsemi.android.common.ui.view.WarningView @Composable -internal fun WifiPermissionRequiredView() { +internal fun WiFiPermissionRequiredView() { val viewModel: PermissionViewModel = hiltViewModel() val context = LocalContext.current var permissionDenied by remember { @@ -120,6 +119,6 @@ private fun openPermissionSettings(context: Context) { @Composable private fun WifiPermissionRequiredViewPreview() { MaterialTheme { - WifiPermissionRequiredView() + WiFiPermissionRequiredView() } } \ No newline at end of file diff --git a/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/viewmodel/PermissionViewModel.kt b/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/viewmodel/PermissionViewModel.kt index 6420a06..368a9a0 100644 --- a/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/viewmodel/PermissionViewModel.kt +++ b/permissions-wifi/src/main/java/no/nordicsemi/android/common/permissions/wifi/viewmodel/PermissionViewModel.kt @@ -37,9 +37,9 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.stateIn +import no.nordicsemi.android.common.permissions.wifi.WiFiPermissionNotAvailableReason import no.nordicsemi.android.common.permissions.wifi.location.LocationStateManager -import no.nordicsemi.android.common.permissions.wifi.utils.WifiPermissionNotAvailableReason -import no.nordicsemi.android.common.permissions.wifi.utils.WifiPermissionState +import no.nordicsemi.android.common.permissions.wifi.utils.WiFiPermissionState import no.nordicsemi.android.common.permissions.wifi.state.WifiStateManager import javax.inject.Inject @@ -51,13 +51,13 @@ internal class PermissionViewModel @Inject constructor( val wifiState = wifiStateManager.wifiState() .stateIn( viewModelScope, SharingStarted.Lazily, - WifiPermissionState.NotAvailable(WifiPermissionNotAvailableReason.NOT_AVAILABLE) + WiFiPermissionState.NotAvailable(WiFiPermissionNotAvailableReason.NOT_AVAILABLE) ) val locationPermission = locationManager.locationState() .stateIn( viewModelScope, SharingStarted.Lazily, - WifiPermissionState.NotAvailable(WifiPermissionNotAvailableReason.NOT_AVAILABLE) + WiFiPermissionState.NotAvailable(WiFiPermissionNotAvailableReason.NOT_AVAILABLE) ) fun refreshWifiPermission() { diff --git a/permissions-wifi/src/main/res/values/strings.xml b/permissions-wifi/src/main/res/values/strings.xml index 574f6d2..db570ba 100644 --- a/permissions-wifi/src/main/res/values/strings.xml +++ b/permissions-wifi/src/main/res/values/strings.xml @@ -41,7 +41,7 @@ Wi-Fi is not available on this device. LOCATION DISABLED - Location is disabled. Please enable location to scan for Wi-Fi networks. + Location is disabled.\nEnable location to scan for Wi-Fi networks. Enable Location Grant Permission diff --git a/theme/src/main/AndroidManifest.xml b/theme/src/main/AndroidManifest.xml index 30c6871..c3ebdf5 100644 --- a/theme/src/main/AndroidManifest.xml +++ b/theme/src/main/AndroidManifest.xml @@ -29,7 +29,4 @@ ~ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, ~ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --> - - - - + diff --git a/theme/src/main/java/no/nordicsemi/android/common/theme/NordicActivity.kt b/theme/src/main/java/no/nordicsemi/android/common/theme/NordicActivity.kt index 0a54899..4a2ec58 100644 --- a/theme/src/main/java/no/nordicsemi/android/common/theme/NordicActivity.kt +++ b/theme/src/main/java/no/nordicsemi/android/common/theme/NordicActivity.kt @@ -42,8 +42,10 @@ import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen /** * Base activity that sets the Nordic theme and the Splash Screen. * - * The Activity must be declared using NordicTheme.SplashScreen theme in the manifest. - * The theme will be changed to NordicTheme when the splash screen animation is complete. + * The Activity must be declared using `NordicTheme.SplashScreen` theme in the manifest. + * The theme will be changed to `NordicTheme` when the splash screen animation is complete. + * + * The theme enables edge to edge views on supported devices. */ abstract class NordicActivity : ComponentActivity() { diff --git a/theme/src/main/java/no/nordicsemi/android/common/theme/NordicColorScheme.kt b/theme/src/main/java/no/nordicsemi/android/common/theme/NordicColorScheme.kt index cf0869f..1c53d60 100644 --- a/theme/src/main/java/no/nordicsemi/android/common/theme/NordicColorScheme.kt +++ b/theme/src/main/java/no/nordicsemi/android/common/theme/NordicColorScheme.kt @@ -29,56 +29,57 @@ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +@file:Suppress("unused") + package no.nordicsemi.android.common.theme -import androidx.compose.material3.ColorScheme import androidx.compose.runtime.Composable import androidx.compose.ui.res.colorResource -val ColorScheme.nordicBlue +val nordicBlue @Composable get() = colorResource(id = R.color.nordicBlue) -val ColorScheme.nordicSky +val nordicSky @Composable get() = colorResource(id = R.color.nordicSky) -val ColorScheme.nordicBlueslate +val nordicBlueslate @Composable get() = colorResource(id = R.color.nordicBlueslate) -val ColorScheme.nordicLake +val nordicLake @Composable get() = colorResource(id = R.color.nordicLake) -val ColorScheme.nordicGrass +val nordicGrass @Composable get() = colorResource(id = R.color.nordicGrass) -val ColorScheme.nordicGreen +val nordicGreen @Composable get() = colorResource(id = R.color.nordicGreen) -val ColorScheme.nordicSun +val nordicSun @Composable get() = colorResource(id = R.color.nordicSun) -val ColorScheme.nordicRed +val nordicRed @Composable get() = colorResource(id = R.color.nordicRed) -val ColorScheme.nordicFall +val nordicFall @Composable get() = colorResource(id = R.color.nordicFall) -val ColorScheme.nordicLightGray +val nordicLightGray @Composable get() = colorResource(id = R.color.nordicLightGray) -val ColorScheme.nordicMiddleGray +val nordicMiddleGray @Composable get() = colorResource(id = R.color.nordicMiddleGray) -val ColorScheme.nordicDarkGray +val nordicDarkGray @Composable get() = colorResource(id = R.color.nordicDarkGray) diff --git a/theme/src/main/java/no/nordicsemi/android/common/theme/NordicTheme.kt b/theme/src/main/java/no/nordicsemi/android/common/theme/NordicTheme.kt index 5346af8..18eda60 100644 --- a/theme/src/main/java/no/nordicsemi/android/common/theme/NordicTheme.kt +++ b/theme/src/main/java/no/nordicsemi/android/common/theme/NordicTheme.kt @@ -42,6 +42,9 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.colorResource +/** + * `NordicTheme` is a custom theme for the Nordic Android applications. + */ @Composable fun NordicTheme(content: @Composable () -> Unit) { val darkColorPalette = darkColorScheme( diff --git a/ui/src/main/AndroidManifest.xml b/ui/src/main/AndroidManifest.xml index 30c6871..c3ebdf5 100644 --- a/ui/src/main/AndroidManifest.xml +++ b/ui/src/main/AndroidManifest.xml @@ -29,7 +29,4 @@ ~ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, ~ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --> - - - - + diff --git a/ui/src/main/java/no/nordicsemi/android/common/ui/view/AppBarIcon.kt b/ui/src/main/java/no/nordicsemi/android/common/ui/view/AppBarIcon.kt index 170f395..4876e83 100644 --- a/ui/src/main/java/no/nordicsemi/android/common/ui/view/AppBarIcon.kt +++ b/ui/src/main/java/no/nordicsemi/android/common/ui/view/AppBarIcon.kt @@ -29,6 +29,8 @@ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +@file:Suppress("unused") + package no.nordicsemi.android.common.ui.view import androidx.compose.foundation.layout.size diff --git a/ui/src/main/java/no/nordicsemi/android/common/ui/view/NordicSliderDefaults.kt b/ui/src/main/java/no/nordicsemi/android/common/ui/view/NordicSliderDefaults.kt index 7122368..c13cb57 100644 --- a/ui/src/main/java/no/nordicsemi/android/common/ui/view/NordicSliderDefaults.kt +++ b/ui/src/main/java/no/nordicsemi/android/common/ui/view/NordicSliderDefaults.kt @@ -6,7 +6,7 @@ import androidx.compose.material3.SliderDefaults import androidx.compose.runtime.Composable /** - * Object to hold defaults Nordic colors used by Slider. + * Object to hold defaults Nordic colors used by [Slider][androidx.compose.material3.Slider]. */ object NordicSliderDefaults { diff --git a/ui/src/main/java/no/nordicsemi/android/common/ui/view/PagerView.kt b/ui/src/main/java/no/nordicsemi/android/common/ui/view/PagerView.kt index 1b14ae2..46b484b 100644 --- a/ui/src/main/java/no/nordicsemi/android/common/ui/view/PagerView.kt +++ b/ui/src/main/java/no/nordicsemi/android/common/ui/view/PagerView.kt @@ -59,15 +59,36 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import no.nordicsemi.android.common.ui.R +/** + * Representation of a set of items of pager view. + * + * @param items The pager view items. + */ class PagerViewEntity( val items: List, ) +/** + * Representation of a pager view item. + * + * @param title The title of the pager view item. + * @param drawView The view to be displayed. + */ class PagerViewItem( val title: String, val drawView: @Composable () -> Unit, ) +/** + * A pager view is a component that displays a set of views in a horizontal view pager + * with scrollable tabs. + * + * @param viewEntity The pager view entity. + * @param modifier The modifier to be applied to the layout. + * @param itemSpacing The spacing between items. + * @param contentPadding The padding to be applied to the content. + * @param verticalAlignment The vertical alignment of the content. + */ @Composable fun PagerView( viewEntity: PagerViewEntity, @@ -86,6 +107,19 @@ fun PagerView( ) } +/** + * A pager view is a component that displays a set of views in a horizontal view pager + * with tabs. Tabs are scrollable if [scrollable] is set to true. + * + * @param viewEntity The pager view entity. + * @param modifier The modifier to be applied to the layout. + * @param itemSpacing The spacing between items, by default 0. + * @param scrollable Whether the tabs should be scrollable. + * @param coroutineScope The coroutine scope to be used for scrolling. + * @param pagerState The pager state to be used for scrolling. + * @param contentPadding The padding to be applied to the content. + * @param verticalAlignment The vertical alignment of the content. + */ @Composable fun PagerView( viewEntity: PagerViewEntity, diff --git a/ui/src/main/java/no/nordicsemi/android/common/ui/view/ProgressItem.kt b/ui/src/main/java/no/nordicsemi/android/common/ui/view/ProgressItem.kt index b329dd1..ef36ec4 100644 --- a/ui/src/main/java/no/nordicsemi/android/common/ui/view/ProgressItem.kt +++ b/ui/src/main/java/no/nordicsemi/android/common/ui/view/ProgressItem.kt @@ -60,10 +60,30 @@ import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import no.nordicsemi.android.common.ui.R +/** + * The status of the progress item. + */ enum class ProgressItemStatus { - DISABLED, WORKING, SUCCESS, ERROR + /** The item is disabled (grayed out). */ + DISABLED, + /** The item is in progress. This will be displayed as a horizontal progress bar. */ + WORKING, + /** The item has been completed successfully. */ + SUCCESS, + /** The item has failed. */ + ERROR, } +/** + * A progress item is a component that displays a status of an operation in a + * Wizard component. + * + * @param text The text to be displayed. + * @param status The status of the progress item. + * @param modifier The modifier to be applied to the layout. + * @param verticalAlignment The vertical alignment of the content. + * @param iconRightPadding The padding between the icon and the text. + */ @Composable fun ProgressItem( text: String, @@ -82,6 +102,16 @@ fun ProgressItem( } } +/** + * A progress item is a component that displays a status of an operation in a + * Wizard component. + * + * @param status The status of the progress item. + * @param modifier The modifier to be applied to the layout. + * @param verticalAlignment The vertical alignment of the content. + * @param iconRightPadding The padding between the icon and the text. + * @param content The content to be displayed. + */ @Composable fun ProgressItem( status: ProgressItemStatus, @@ -114,28 +144,6 @@ fun ProgressItem( } } -@Composable -fun StatusItem( - modifier: Modifier = Modifier, - content: @Composable ColumnScope.() -> Unit, -) { - Row( - modifier = Modifier - .height(IntrinsicSize.Min) - .then(modifier), - ) { - VerticalDivider( - modifier = Modifier.padding(start = 10.dp, end = 34.dp) - ) - Column( - modifier = Modifier.padding(vertical = 2.dp), - verticalArrangement = Arrangement.spacedBy(8.dp), - ) { - content() - } - } -} - @Composable private fun ProgressItemStatus.toIconColor(): Color = when (this) { ProgressItemStatus.DISABLED -> MaterialTheme.colorScheme.surfaceVariant diff --git a/ui/src/main/java/no/nordicsemi/android/common/ui/view/RadioButtonGroup.kt b/ui/src/main/java/no/nordicsemi/android/common/ui/view/RadioButtonGroup.kt index 76d5548..69e8300 100644 --- a/ui/src/main/java/no/nordicsemi/android/common/ui/view/RadioButtonGroup.kt +++ b/ui/src/main/java/no/nordicsemi/android/common/ui/view/RadioButtonGroup.kt @@ -43,15 +43,33 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview +/** + * Representation of a set of items of radio button group. + * + * @param items The radio button group items. + */ data class RadioGroupViewEntity( val items: List, ) +/** + * Representation of a radio button item. + * + * @param label The label of the radio button. + * @param isChecked The state of the radio button. + */ data class RadioButtonItem( val label: String, val isChecked: Boolean = false ) +/** + * A radio button group is a component that displays a set of radio buttons + * in a vertical layout. + * + * @param viewEntity The radio button group view entity. + * @param onItemClick The callback to be invoked when a radio button is clicked. + */ @Composable fun RadioButtonGroup( viewEntity: RadioGroupViewEntity, @@ -70,6 +88,13 @@ fun RadioButtonGroup( } } +/** + * A radio button group is a component that displays a set of radio buttons + * in a horizontal layout. + * + * @param viewEntity The radio button group view entity. + * @param onItemClick The callback to be invoked when a radio button is clicked. + */ @Composable fun HorizontalLabelRadioButtonGroup( viewEntity: RadioGroupViewEntity, diff --git a/ui/src/main/java/no/nordicsemi/android/common/ui/view/RssiIcon.kt b/ui/src/main/java/no/nordicsemi/android/common/ui/view/RssiIcon.kt index 5211f32..43d4db9 100644 --- a/ui/src/main/java/no/nordicsemi/android/common/ui/view/RssiIcon.kt +++ b/ui/src/main/java/no/nordicsemi/android/common/ui/view/RssiIcon.kt @@ -54,6 +54,11 @@ import no.nordicsemi.android.common.ui.R private const val MEDIUM_RSSI = -80 private const val MAX_RSSI = -60 +/** + * A component that displays an icon and a text representing the RSSI value. + * + * @param rssi The RSSI value. + */ @Composable fun RssiIcon(rssi: Int) { Column(horizontalAlignment = Alignment.CenterHorizontally) { @@ -77,14 +82,6 @@ private fun getImageRes(rssi: Int): Int { } } -fun getWiFiRes(rssi: Int): ImageVector { - return when { - rssi < MEDIUM_RSSI -> Icons.Default.NetworkWifi1Bar - rssi < MAX_RSSI -> Icons.Default.NetworkWifi3Bar - else -> Icons.Default.NetworkWifi - } -} - @Preview(showBackground = true, widthDp = 500) @Composable private fun RssiIconPreview() { diff --git a/ui/src/main/java/no/nordicsemi/android/common/ui/view/SectionTitle.kt b/ui/src/main/java/no/nordicsemi/android/common/ui/view/SectionTitle.kt index 84b09c1..02fdcf4 100644 --- a/ui/src/main/java/no/nordicsemi/android/common/ui/view/SectionTitle.kt +++ b/ui/src/main/java/no/nordicsemi/android/common/ui/view/SectionTitle.kt @@ -53,6 +53,15 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +/** + * A section title is a component that displays a title with an icon + * and optionally a menu. + * + * @param painter The painter to be displayed. + * @param title The title of the section. + * @param modifier The modifier to be applied to the layout. + * @param menu The menu to be displayed on the right side of the title. + */ @Composable fun SectionTitle( painter: Painter, @@ -80,6 +89,15 @@ fun SectionTitle( } } +/** + * A section title is a component that displays a title with an icon + * and optionally a menu. + * + * @param icon The icon to be displayed. + * @param title The title of the section. + * @param modifier The modifier to be applied to the layout. + * @param menu The menu to be displayed on the right side of the title. + */ @Composable fun SectionTitle( icon: ImageVector, diff --git a/ui/src/main/java/no/nordicsemi/android/common/ui/view/VerticalDivider.kt b/ui/src/main/java/no/nordicsemi/android/common/ui/view/StatusItem.kt similarity index 63% rename from ui/src/main/java/no/nordicsemi/android/common/ui/view/VerticalDivider.kt rename to ui/src/main/java/no/nordicsemi/android/common/ui/view/StatusItem.kt index f720617..8a0aa5f 100644 --- a/ui/src/main/java/no/nordicsemi/android/common/ui/view/VerticalDivider.kt +++ b/ui/src/main/java/no/nordicsemi/android/common/ui/view/StatusItem.kt @@ -32,8 +32,15 @@ package no.nordicsemi.android.common.ui.view import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.IntrinsicSize +import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons @@ -48,8 +55,49 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp +/** + * A component that displays list of items grouped by a vertical line on the left. + * + * This is to be used in a [WizardStepComponent] to display a list of operations + * of a Wizard step. + * + * @param modifier The modifier to be applied to the layout. + * @param content The content to be displayed. + */ +@Composable +fun StatusItem( + modifier: Modifier = Modifier, + content: @Composable ColumnScope.() -> Unit, +) { + Row( + modifier = Modifier + .height(IntrinsicSize.Min) + .then(modifier), + ) { + VerticalDivider( + modifier = Modifier.padding(start = 10.dp, end = 34.dp) + ) + Column( + modifier = Modifier.padding(vertical = 2.dp), + verticalArrangement = Arrangement.spacedBy(8.dp), + ) { + content() + } + } +} + +/** + * A vertical divider is a component that displays a vertical line in a Wizard step. + * + * Don't use directly, instead wrap the content in a [StatusItem]. + * + * @param modifier The modifier to be applied to the divider. + * @param width The width of the divider. + * @param color The color of the divider. + * @see StatusItem + */ @Composable -fun VerticalDivider( +internal fun VerticalDivider( modifier: Modifier = Modifier, width: Dp = 4.dp, color: Color = MaterialTheme.colorScheme.surfaceVariant, @@ -60,7 +108,7 @@ fun VerticalDivider( .width(width) .clip(RoundedCornerShape(10.dp)) .background(color) - ) { } + ) } @Preview(showBackground = true) @@ -76,10 +124,12 @@ private fun VerticalDividerInWizardPreview() { onClick = { } ), ) { - Text(text = "Action 1") - Text(text = "Action 2") - Text(text = "Action 3") - Text(text = "Action 4") + StatusItem { + Text(text = "Action 1") + Text(text = "Action 2") + Text(text = "Action 3") + Text(text = "Action 4") + } } } } \ No newline at end of file diff --git a/ui/src/main/java/no/nordicsemi/android/common/ui/view/WarningView.kt b/ui/src/main/java/no/nordicsemi/android/common/ui/view/WarningView.kt index f673443..fa5c315 100644 --- a/ui/src/main/java/no/nordicsemi/android/common/ui/view/WarningView.kt +++ b/ui/src/main/java/no/nordicsemi/android/common/ui/view/WarningView.kt @@ -53,6 +53,16 @@ import androidx.compose.ui.unit.dp import no.nordicsemi.android.common.ui.view.internal.BigIcon import no.nordicsemi.android.common.ui.view.internal.Hint +/** + * A warning view is a component that displays a warning icon, a title, and a hint. + * + * @param imageVector The vector icon to be displayed. + * @param title The title of the warning. + * @param hint The hint to be displayed. + * @param modifier The modifier to be applied to the layout. + * @param hintTextAlign The text alignment of the hint, defaults to [TextAlign.Center]. + * @param content The content to be displayed below the hint. + */ @Composable fun WarningView( imageVector: ImageVector, @@ -72,6 +82,16 @@ fun WarningView( ) } +/** + * A warning view is a component that displays a warning icon, a title, and a hint. + * + * @param imageVector The vector icon to be displayed. + * @param title The title of the warning. + * @param hint The hint to be displayed, as [AnnotatedString]. + * @param modifier The modifier to be applied to the layout. + * @param hintTextAlign The text alignment of the hint, defaults to [TextAlign.Center]. + * @param content The content to be displayed below the hint. + */ @Composable fun WarningView( imageVector: ImageVector, @@ -91,6 +111,16 @@ fun WarningView( ) } +/** + * A warning view is a component that displays a warning icon, a title, and a hint. + * + * @param painterResource The painter to be displayed. + * @param title The title of the warning. + * @param hint The hint to be displayed, as [AnnotatedString]. + * @param modifier The modifier to be applied to the layout. + * @param hintTextAlign The text alignment of the hint, defaults to [TextAlign.Center]. + * @param content The content to be displayed below the hint. + */ @Composable fun WarningView( painterResource: Painter, @@ -109,6 +139,15 @@ fun WarningView( ) } +/** + * A warning view is a component that displays a warning icon, a title, and a hint. + * + * @param painterResource The painter to be displayed. + * @param title The title of the warning. + * @param hint The hint to be displayed. + * @param modifier The modifier to be applied to the layout. + * @param content The content to be displayed below the hint. + */ @Composable fun WarningView( painterResource: Painter, @@ -127,6 +166,15 @@ fun WarningView( ) } +/** + * A warning view is a component that displays a warning icon, a title, and a hint. + * + * @param imageVector The vector icon to be displayed. + * @param title The title of the warning. + * @param hint The hint to be displayed. + * @param modifier The modifier to be applied to the layout. + * @param content The content to be displayed below the hint. + */ @Composable fun WarningView( imageVector: ImageVector, @@ -144,6 +192,15 @@ fun WarningView( ) } +/** + * A warning view is a component that displays a warning icon, a title, and a hint. + * + * @param painterResource The painter to be displayed. + * @param title The title of the warning. + * @param hint The hint to be displayed. + * @param modifier The modifier to be applied to the layout. + * @param content The content to be displayed below the hint. + */ @Composable fun WarningView( painterResource: Painter, diff --git a/ui/src/main/java/no/nordicsemi/android/common/ui/view/WizardStepComponent.kt b/ui/src/main/java/no/nordicsemi/android/common/ui/view/WizardStepComponent.kt index c9d2242..4ab8bf5 100644 --- a/ui/src/main/java/no/nordicsemi/android/common/ui/view/WizardStepComponent.kt +++ b/ui/src/main/java/no/nordicsemi/android/common/ui/view/WizardStepComponent.kt @@ -82,6 +82,9 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +/** + * A wizard step action to be displayed on the right side of a step. + */ sealed class WizardStepAction { /** * A button to perform an action. @@ -103,6 +106,14 @@ sealed class WizardStepAction { data object ProgressIndicator: WizardStepAction() } +/** + * The state of a wizard step. + * + * A step of a wizard can be in one of the following states: + * - [INACTIVE] - future step, + * - [CURRENT] - current step, + * - [COMPLETED] - completed step. + */ enum class WizardStepState { /** Future step. */ INACTIVE, @@ -115,6 +126,139 @@ enum class WizardStepState { /** * A wizard step component. * + * Wizard is a common pattern for guiding users through a series of linear steps. + * With this component you can create a step with an icon, title, optional action and a content. + * + * ### Example + * ```kotlin + * Box( + * modifier = Modifier.fillMaxSize(), + * contentAlignment = Alignment.TopCenter + * ) { + * OutlinedCard( + * modifier = Modifier + * .verticalScroll(rememberScrollState()) + * .widthIn(max = 600.dp) + * .padding(all = 16.dp), + * ) { + * Column( + * modifier = Modifier + * .fillMaxWidth() + * .padding(16.dp), + * ) { + * WizardStepComponent( + * icon = Icons.Default.Warning, + * title = "Identify", + * state = WizardStepState.COMPLETED, + * decor = WizardStepAction.Action( + * text = "Action", + * onClick = { } + * ), + * ) { + * StatusItem { + * Text(text = "Identified") + * } + * } + * WizardStepComponent( + * icon = Icons.Default.AccountBox, + * title = "Very Long Title That Won't Fit", + * state = WizardStepState.CURRENT, + * decor = WizardStepAction.Action( + * text = "Action", + * onClick = { } + * ), + * ) { + * StatusItem { + * Text(text = "Select color") + * } + * } + * WizardStepComponent( + * icon = Icons.Default.AccountCircle, + * title = "Connect", + * state = WizardStepState.CURRENT, + * decor = WizardStepAction.ProgressIndicator, + * ) { + * ProgressItem( + * text = "Completed", + * status = ProgressItemStatus.SUCCESS, + * ) + * + * val infiniteTransition = + * rememberInfiniteTransition(label = "ProgressTransition") + * val progress by infiniteTransition.animateFloat( + * initialValue = 0.0f, + * targetValue = 1.0f, + * animationSpec = infiniteRepeatable( + * animation = tween(10000, easing = LinearEasing), + * repeatMode = RepeatMode.Restart + * ), + * label = "Progress" + * ) + * + * ProgressItem( + * status = ProgressItemStatus.WORKING, + * ) { + * Column { + * Text(text = "In progress") + * LinearProgressIndicator( + * progress = { progress }, + * modifier = Modifier.fillMaxWidth(), + * trackColor = MaterialTheme.colorScheme.surfaceVariant, + * drawStopIndicator = {} + * ) + * Text( + * text = "%.1f%%".format(progress * 100), + * modifier = Modifier.fillMaxWidth(), + * textAlign = TextAlign.End + * ) + * } + * } + * + * ProgressItem( + * text = "Future", + * status = ProgressItemStatus.DISABLED, + * ) + * + * ProgressItem( + * text = "Error happened", + * status = ProgressItemStatus.ERROR, + * ) + * + * StatusItem { + * Text(text = "Connect to the device") + * } + * } + * WizardStepComponent( + * icon = Icons.Default.Build, + * title = "Destroy", + * state = WizardStepState.INACTIVE, + * decor = WizardStepAction.Action( + * text = "Terminate", + * dangerous = true, + * onClick = { } + * ), + * ) { + * StatusItem { + * Row( + * verticalAlignment = Alignment.CenterVertically, + * ) { + * Text( + * text = "Engage warp 4", + * modifier = Modifier.weight(1f) + * ) + * var checked by rememberSaveable { mutableStateOf(false) } + * Switch( + * checked = checked, + * onCheckedChange = { checked = it }, + * ) + * } + * } + * } + * } + * } + * } + * ``` + * * @param icon The icon will be placed in a circular container. * @param title The title of the step. * @param state Current state of the step. @@ -153,6 +297,139 @@ fun WizardStepComponent( /** * A wizard step component. * + * Wizard is a common pattern for guiding users through a series of linear steps. + * With this component you can create a step with an icon, title, optional action and a content. + * + * ### Example + * ```kotlin + * Box( + * modifier = Modifier.fillMaxSize(), + * contentAlignment = Alignment.TopCenter + * ) { + * OutlinedCard( + * modifier = Modifier + * .verticalScroll(rememberScrollState()) + * .widthIn(max = 600.dp) + * .padding(all = 16.dp), + * ) { + * Column( + * modifier = Modifier + * .fillMaxWidth() + * .padding(16.dp), + * ) { + * WizardStepComponent( + * icon = Icons.Default.Warning, + * title = "Identify", + * state = WizardStepState.COMPLETED, + * decor = WizardStepAction.Action( + * text = "Action", + * onClick = { } + * ), + * ) { + * StatusItem { + * Text(text = "Identified") + * } + * } + * WizardStepComponent( + * icon = Icons.Default.AccountBox, + * title = "Very Long Title That Won't Fit", + * state = WizardStepState.CURRENT, + * decor = WizardStepAction.Action( + * text = "Action", + * onClick = { } + * ), + * ) { + * StatusItem { + * Text(text = "Select color") + * } + * } + * WizardStepComponent( + * icon = Icons.Default.AccountCircle, + * title = "Connect", + * state = WizardStepState.CURRENT, + * decor = WizardStepAction.ProgressIndicator, + * ) { + * ProgressItem( + * text = "Completed", + * status = ProgressItemStatus.SUCCESS, + * ) + * + * val infiniteTransition = + * rememberInfiniteTransition(label = "ProgressTransition") + * val progress by infiniteTransition.animateFloat( + * initialValue = 0.0f, + * targetValue = 1.0f, + * animationSpec = infiniteRepeatable( + * animation = tween(10000, easing = LinearEasing), + * repeatMode = RepeatMode.Restart + * ), + * label = "Progress" + * ) + * + * ProgressItem( + * status = ProgressItemStatus.WORKING, + * ) { + * Column { + * Text(text = "In progress") + * LinearProgressIndicator( + * progress = { progress }, + * modifier = Modifier.fillMaxWidth(), + * trackColor = MaterialTheme.colorScheme.surfaceVariant, + * drawStopIndicator = {} + * ) + * Text( + * text = "%.1f%%".format(progress * 100), + * modifier = Modifier.fillMaxWidth(), + * textAlign = TextAlign.End + * ) + * } + * } + * + * ProgressItem( + * text = "Future", + * status = ProgressItemStatus.DISABLED, + * ) + * + * ProgressItem( + * text = "Error happened", + * status = ProgressItemStatus.ERROR, + * ) + * + * StatusItem { + * Text(text = "Connect to the device") + * } + * } + * WizardStepComponent( + * icon = Icons.Default.Build, + * title = "Destroy", + * state = WizardStepState.INACTIVE, + * decor = WizardStepAction.Action( + * text = "Terminate", + * dangerous = true, + * onClick = { } + * ), + * ) { + * StatusItem { + * Row( + * verticalAlignment = Alignment.CenterVertically, + * ) { + * Text( + * text = "Engage warp 4", + * modifier = Modifier.weight(1f) + * ) + * var checked by rememberSaveable { mutableStateOf(false) } + * Switch( + * checked = checked, + * onCheckedChange = { checked = it }, + * ) + * } + * } + * } + * } + * } + * } + * ``` + * * @param icon The icon will be placed in a circular container. * @param title The title of the step. * @param state Current state of the step. diff --git a/ui/src/main/java/no/nordicsemi/android/common/ui/view/internal/BigIcon.kt b/ui/src/main/java/no/nordicsemi/android/common/ui/view/internal/BigIcon.kt index 83b3b0c..5cc72c6 100644 --- a/ui/src/main/java/no/nordicsemi/android/common/ui/view/internal/BigIcon.kt +++ b/ui/src/main/java/no/nordicsemi/android/common/ui/view/internal/BigIcon.kt @@ -29,6 +29,8 @@ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +@file:Suppress("unused") + package no.nordicsemi.android.common.ui.view.internal import androidx.compose.foundation.Image diff --git a/ui/src/main/java/no/nordicsemi/android/common/ui/view/internal/Title.kt b/ui/src/main/java/no/nordicsemi/android/common/ui/view/internal/Title.kt deleted file mode 100644 index e4acf2e..0000000 --- a/ui/src/main/java/no/nordicsemi/android/common/ui/view/internal/Title.kt +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2023, Nordic Semiconductor - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its contributors may be - * used to endorse or promote products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, - * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -package no.nordicsemi.android.common.ui.view.internal - -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.text.TextStyle - -@Composable -internal fun Title( - text: String, - modifier: Modifier = Modifier, - color: Color = MaterialTheme.colorScheme.secondary, - style: TextStyle = MaterialTheme.typography.titleMedium, -) { - Text( - text = text, - modifier = modifier, - color = color, - style = style, - ) -} \ No newline at end of file From 4198c2bb62a94cd7924999546f5845c05312c01a Mon Sep 17 00:00:00 2001 From: Aleksander Nowakowski Date: Mon, 23 Dec 2024 22:35:45 +0100 Subject: [PATCH 08/11] Package and module documentation --- analytics/Module.md | 29 +++++++++++++++++++++++ analytics/build.gradle.kts | 6 +++++ core/Module.md | 7 ++++++ core/build.gradle.kts | 6 +++++ logger/Module.md | 13 ++++++++++ logger/build.gradle.kts | 14 +++++++---- navigation/Module.md | 22 +++++++++++++++++ navigation/build.gradle.kts | 6 +++++ permissions-ble/Module.md | 7 ++++++ permissions-ble/build.gradle.kts | 6 +++++ permissions-internet/Module.md | 7 ++++++ permissions-internet/build.gradle.kts | 6 +++++ permissions-nfc/Module.md | 7 ++++++ permissions-nfc/build.gradle.kts | 6 +++++ permissions-notification/Module.md | 13 ++++++++++ permissions-notification/build.gradle.kts | 6 +++++ permissions-wifi/Module.md | 8 +++++++ permissions-wifi/build.gradle.kts | 6 +++++ theme/Module.md | 7 ++++++ theme/build.gradle.kts | 6 +++++ ui/Module.md | 7 ++++++ ui/build.gradle.kts | 6 +++++ 22 files changed, 197 insertions(+), 4 deletions(-) create mode 100644 analytics/Module.md create mode 100644 core/Module.md create mode 100644 logger/Module.md create mode 100644 navigation/Module.md create mode 100644 permissions-ble/Module.md create mode 100644 permissions-internet/Module.md create mode 100644 permissions-nfc/Module.md create mode 100644 permissions-notification/Module.md create mode 100644 permissions-wifi/Module.md create mode 100644 theme/Module.md create mode 100644 ui/Module.md diff --git a/analytics/Module.md b/analytics/Module.md new file mode 100644 index 0000000..72ca7eb --- /dev/null +++ b/analytics/Module.md @@ -0,0 +1,29 @@ +# Module analytics + +Set of classes related to Firebase Analytics. + +## Configuration + +Use of this module requires the following plugins to be applied in the app: +```kotlin +if (gradle.startParameter.taskRequests.toString().contains("Release")) { + apply("com.google.gms.google-services") + apply("com.google.firebase.crashlytics") +} +``` +and the _google-services.json_ file to be present in the app module. + +Read [Firebase Setup](https://firebase.google.com/docs/android/setup) for more. + +> **Note:** +> +> This package requires Hilt, as it's using Dependency Injection to provide the +> [NordicAnalytics][no.nordicsemi.android.common.analytics.NordicAnalytics] class. + +# Package no.nordicsemi.android.common.analytics + +Main API for Nordic analytics. Contains set to methods to log events. + +# Package no.nordicsemi.android.common.analytics.view + +Set of common views used for enabling analytics in Nordic apps. diff --git a/analytics/build.gradle.kts b/analytics/build.gradle.kts index 77ae730..16dddca 100644 --- a/analytics/build.gradle.kts +++ b/analytics/build.gradle.kts @@ -51,6 +51,12 @@ android { namespace = "no.nordicsemi.android.common.analytics" } +dokka { + dokkaSourceSets.named("main") { + includes.from("Module.md") + } +} + dependencies { implementation(project(":core")) implementation(project(":ui")) diff --git a/core/Module.md b/core/Module.md new file mode 100644 index 0000000..27f6af8 --- /dev/null +++ b/core/Module.md @@ -0,0 +1,7 @@ +# Module core + +Common classes and interfaces used by other modules. + +# Package no.nordicsemi.android.common.core + +Common classes and interfaces used by other modules. \ No newline at end of file diff --git a/core/build.gradle.kts b/core/build.gradle.kts index ca7e476..1753d80 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -55,6 +55,12 @@ android { } } +dokka { + dokkaSourceSets.named("main") { + includes.from("Module.md") + } +} + dependencies { implementation(libs.androidx.core) } diff --git a/logger/Module.md b/logger/Module.md new file mode 100644 index 0000000..5a6b0f4 --- /dev/null +++ b/logger/Module.md @@ -0,0 +1,13 @@ +# Module logger + +Utility classes for easy integration with [nRF Logger](https://play.google.com/store/apps/details?id=no.nordicsemi.android.log). + +Logging uses [nRF Logger API](https://github.com/NordicSemiconductor/nRF-Logger-API). + +# Package no.nordicsemi.android.common.logger + +A package with utility classes for easy integration with nRF Logger. + +# Package no.nordicsemi.android.common.logger.view + +UI components for nRF Logger integration. \ No newline at end of file diff --git a/logger/build.gradle.kts b/logger/build.gradle.kts index 0126972..57f9bb3 100644 --- a/logger/build.gradle.kts +++ b/logger/build.gradle.kts @@ -36,10 +36,6 @@ plugins { group = "no.nordicsemi.android.common" -android { - namespace = "no.nordicsemi.android.common.logger" -} - nordicNexusPublishing { POM_ARTIFACT_ID = "logger" POM_NAME = "Set of helper classes and UI components for Nordic logger." @@ -51,6 +47,16 @@ nordicNexusPublishing { POM_SCM_DEV_CONNECTION = "scm:git@github.com:NordicPlayground/Android-Common-Libraries.git" } +android { + namespace = "no.nordicsemi.android.common.logger" +} + +dokka { + dokkaSourceSets.named("main") { + includes.from("Module.md") + } +} + dependencies { implementation(project(":ui")) diff --git a/navigation/Module.md b/navigation/Module.md new file mode 100644 index 0000000..a4ca455 --- /dev/null +++ b/navigation/Module.md @@ -0,0 +1,22 @@ +# Module navigation + +Wrapper for the [AndroidX Navigation Compose](https://developer.android.com/develop/ui/compose/navigation) component +allowing passing typed arguments between destinations. + +> **Note:** +> +> This package requires Hilt, as it's using Dependency Injection to provide the +> [Navigator][no.nordicsemi.android.common.navigation.Navigator] class. + +### Deprecation + +This module may get deprecated in favor of the official Navigation Compose library, +which now also supports typed destinations using Serialization. + +# Package no.nordicsemi.android.common.navigation + +Set of classes and Composables to simplify navigation in a Compose application. + +# Package no.nordicsemi.android.common.navigation.viewmodel + +A helper view model that can be used for navigation. \ No newline at end of file diff --git a/navigation/build.gradle.kts b/navigation/build.gradle.kts index f7fbf0f..9933554 100644 --- a/navigation/build.gradle.kts +++ b/navigation/build.gradle.kts @@ -52,6 +52,12 @@ android { namespace = "no.nordicsemi.android.common.navigation" } +dokka { + dokkaSourceSets.named("main") { + includes.from("Module.md") + } +} + dependencies { // NavBackStackEntry is exposed in the API of NavigationView. api(libs.androidx.navigation.compose) diff --git a/permissions-ble/Module.md b/permissions-ble/Module.md new file mode 100644 index 0000000..f688e23 --- /dev/null +++ b/permissions-ble/Module.md @@ -0,0 +1,7 @@ +# Module permissions-ble + +Common views for displaying content that requires Bluetooth scanning or connecting. + +# Package no.nordicsemi.android.common.permissions.ble + +This package contains wrappers for views that require Bluetooth and Location. \ No newline at end of file diff --git a/permissions-ble/build.gradle.kts b/permissions-ble/build.gradle.kts index aa4e3f8..951f907 100644 --- a/permissions-ble/build.gradle.kts +++ b/permissions-ble/build.gradle.kts @@ -51,6 +51,12 @@ android { namespace = "no.nordicsemi.android.common.permissions.ble" } +dokka { + dokkaSourceSets.named("main") { + includes.from("Module.md") + } +} + dependencies { implementation(project(":ui")) diff --git a/permissions-internet/Module.md b/permissions-internet/Module.md new file mode 100644 index 0000000..f48f94a --- /dev/null +++ b/permissions-internet/Module.md @@ -0,0 +1,7 @@ +# Module permissions-internet + +Common views for displaying content that requires Internet. + +# Package no.nordicsemi.android.common.permissions.internet + +This package contains a wrapper for views which require Internet. \ No newline at end of file diff --git a/permissions-internet/build.gradle.kts b/permissions-internet/build.gradle.kts index f4584fb..79fc204 100644 --- a/permissions-internet/build.gradle.kts +++ b/permissions-internet/build.gradle.kts @@ -51,6 +51,12 @@ android { namespace = "no.nordicsemi.android.common.permissions.internet" } +dokka { + dokkaSourceSets.named("main") { + includes.from("Module.md") + } +} + dependencies { implementation(project(":ui")) diff --git a/permissions-nfc/Module.md b/permissions-nfc/Module.md new file mode 100644 index 0000000..d6ac3f9 --- /dev/null +++ b/permissions-nfc/Module.md @@ -0,0 +1,7 @@ +# Module permissions-nfc + +Common views for displaying content that requires NFC. + +# Package no.nordicsemi.android.common.permissions.nfc + +This package contains a wrapper for views which require NFC. \ No newline at end of file diff --git a/permissions-nfc/build.gradle.kts b/permissions-nfc/build.gradle.kts index e14e947..aa65ed6 100644 --- a/permissions-nfc/build.gradle.kts +++ b/permissions-nfc/build.gradle.kts @@ -51,6 +51,12 @@ android { namespace = "no.nordicsemi.android.common.permissions.nfc" } +dokka { + dokkaSourceSets.named("main") { + includes.from("Module.md") + } +} + dependencies { implementation(project(":ui")) } \ No newline at end of file diff --git a/permissions-notification/Module.md b/permissions-notification/Module.md new file mode 100644 index 0000000..fa43cfb --- /dev/null +++ b/permissions-notification/Module.md @@ -0,0 +1,13 @@ +# Module permissions-notification + +Common views for requesting [POST_NOTIFICATIONS][android.Manifest.permission.POST_NOTIFICATIONS] permission. + +On Android 13+ (API 33+) the `NotificationManager` requires a permission to show notifications. +This module provides a wrapper which will automatically request the permission. + +The content is shown in any case. + +# Package no.nordicsemi.android.common.permissions.notification + +This package contains a wrapper for views that automatically request `POST_NOTIFICATIONS` permission +on Android 13+. \ No newline at end of file diff --git a/permissions-notification/build.gradle.kts b/permissions-notification/build.gradle.kts index a006779..b0ac29e 100644 --- a/permissions-notification/build.gradle.kts +++ b/permissions-notification/build.gradle.kts @@ -20,6 +20,12 @@ android { namespace = "no.nordicsemi.android.common.permissions.notification" } +dokka { + dokkaSourceSets.named("main") { + includes.from("Module.md") + } +} + dependencies { implementation(libs.accompanist.permissions) diff --git a/permissions-wifi/Module.md b/permissions-wifi/Module.md new file mode 100644 index 0000000..46a6c43 --- /dev/null +++ b/permissions-wifi/Module.md @@ -0,0 +1,8 @@ +# Module permissions-wifi + +Common views for displaying content that requires Wi-Fi. + +# Package no.nordicsemi.android.common.permissions.wifi + +This package contains a wrapper for views which require Wi-Fi and Location for scanning for Wi-Fi +networks. \ No newline at end of file diff --git a/permissions-wifi/build.gradle.kts b/permissions-wifi/build.gradle.kts index 7fecc8f..6f86c86 100644 --- a/permissions-wifi/build.gradle.kts +++ b/permissions-wifi/build.gradle.kts @@ -19,6 +19,12 @@ android { namespace = "no.nordicsemi.android.common.permissions.wifi" } +dokka { + dokkaSourceSets.named("main") { + includes.from("Module.md") + } +} + dependencies { implementation(project(":ui")) diff --git a/theme/Module.md b/theme/Module.md new file mode 100644 index 0000000..5a8baa0 --- /dev/null +++ b/theme/Module.md @@ -0,0 +1,7 @@ +# Module theme + +Set of classes and resources for Nordic theme. + +# Package no.nordicsemi.android.common.theme + +Set of classes and resources for Nordic theme. \ No newline at end of file diff --git a/theme/build.gradle.kts b/theme/build.gradle.kts index 3ee8ab0..8ad3828 100644 --- a/theme/build.gradle.kts +++ b/theme/build.gradle.kts @@ -51,6 +51,12 @@ android { namespace = "no.nordicsemi.android.common.theme" } +dokka { + dokkaSourceSets.named("main") { + includes.from("Module.md") + } +} + dependencies { implementation(libs.androidx.activity.compose) implementation(libs.androidx.core.splashscreen) diff --git a/ui/Module.md b/ui/Module.md new file mode 100644 index 0000000..46475cb --- /dev/null +++ b/ui/Module.md @@ -0,0 +1,7 @@ +# Module ui + +Common UI components for Nordic apps. + +# Package no.nordicsemi.android.common.ui + +Common UI components for Nordic apps. \ No newline at end of file diff --git a/ui/build.gradle.kts b/ui/build.gradle.kts index 3b360fd..9aa5e1f 100644 --- a/ui/build.gradle.kts +++ b/ui/build.gradle.kts @@ -51,6 +51,12 @@ android { namespace = "no.nordicsemi.android.common.ui" } +dokka { + dokkaSourceSets.named("main") { + includes.from("Module.md") + } +} + dependencies { implementation(libs.androidx.compose.material.iconsExtended) } From 1b03e2bc3e5a338c447114ab42c1c48c533198c0 Mon Sep 17 00:00:00 2001 From: Aleksander Nowakowski Date: Mon, 23 Dec 2024 22:38:43 +0100 Subject: [PATCH 09/11] Documentation generated for version 2.4.0 --- docs/html/analytics/index.html | 156 + docs/html/analytics/navigation.html | 662 ++ .../-analytics-permission-button.html | 114 + .../-analytics-permission-request-dialog.html | 114 + .../-analytics-permission-switch-dialog.html | 114 + .../-analytics-permission-switch.html | 114 + .../index.html | 183 + .../-analytics-permission-data.html | 114 + .../-analytics-permission-data/index.html | 172 + .../is-permission-granted.html | 114 + .../was-info-dialog-shown.html | 114 + .../-nordic-analytics/index.html | 172 + .../-nordic-analytics/log-event.html | 114 + .../-nordic-analytics/permission-data.html | 114 + .../set-analytics-enabled.html | 114 + .../index.html | 153 + docs/html/core/index.html | 136 + docs/html/core/navigation.html | 662 ++ .../-app-launcher/index.html | 138 + .../-app-launcher/lunch.html | 114 + .../-application-scope.html | 114 + .../-g-o-o-g-l-e_-p-l-a-y_-l-i-n-k.html | 114 + .../index.html | 236 + .../map.html | 114 + .../parse-bold.html | 114 + .../register-receiver.html | 114 + .../simple-shared-flow.html | 114 + docs/html/images/anchor-copy-button.svg | 4 + docs/html/images/copy-icon.svg | 3 + docs/html/images/copy-successful-icon.svg | 3 + docs/html/images/footer-go-to-link.svg | 3 + docs/html/images/go-to-top-icon.svg | 4 + docs/html/images/logo-icon.svg | 101 + docs/html/index.html | 245 + docs/html/logger/index.html | 156 + docs/html/logger/navigation.html | 662 ++ .../-logger-app-bar-icon.html | 114 + .../index.html | 138 + .../-logger-launcher/index.html | 138 + .../-logger-launcher/launch.html | 114 + .../index.html | 138 + docs/html/navigation.html | 662 ++ docs/html/navigation/index.html | 156 + docs/html/navigation/navigation.html | 662 ++ .../-simple-navigation-view-model.html | 114 + .../-simple-navigation-view-model/index.html | 307 + .../nullable-parameter-of.html | 114 + .../parameter-of.html | 114 + .../index.html | 138 + .../-destination-id/-destination-id.html | 114 + .../-destination-id/index.html | 172 + .../-destination-id/to-string.html | 114 + .../-navigation-destination/id.html | 114 + .../-navigation-destination/index.html | 157 + .../-navigation-destination/plus.html | 114 + .../-cancelled/-cancelled.html | 114 + .../-navigation-result/-cancelled/index.html | 138 + .../-navigation-result/-success/-success.html | 114 + .../-navigation-result/-success/index.html | 157 + .../-navigation-result/-success/value.html | 114 + .../-navigation-result/index.html | 153 + .../-navigation-view.html | 118 + .../-navigator/current-destination.html | 114 + .../-navigator/index.html | 228 + .../-navigator/is-in-hierarchy.html | 114 + .../-navigator/navigate-to.html | 114 + .../-navigator/navigate-up-with-result.html | 114 + .../-navigator/navigate-up.html | 114 + .../-navigator/open.html | 114 + .../-navigator/result-from.html | 114 + .../create-destination.html | 114 + .../create-simple-destination.html | 114 + ...ine-destination-with-inner-navigation.html | 114 + .../define-destination.html | 114 + .../define-dialog-destination.html | 114 + .../get-or-null.html | 114 + .../get-state-flow.html | 114 + .../get.html | 114 + .../index.html | 386 ++ .../only-success.html | 114 + .../pop-up-to-destination.html | 114 + .../pop-up-to-start-destination.html | 114 + .../with.html | 114 + docs/html/package-list | 28 + docs/html/permissions-ble/index.html | 136 + docs/html/permissions-ble/navigation.html | 662 ++ .../-d-i-s-a-b-l-e-d/index.html | 153 + .../-n-o-t_-a-v-a-i-l-a-b-l-e/index.html | 153 + .../index.html | 153 + .../entries.html | 114 + .../index.html | 251 + .../value-of.html | 114 + .../values.html | 114 + .../-require-bluetooth.html | 116 + .../-require-location.html | 114 + .../index.html | 174 + docs/html/permissions-internet/index.html | 136 + .../html/permissions-internet/navigation.html | 662 ++ .../-require-internet.html | 114 + .../index.html | 138 + docs/html/permissions-nfc/index.html | 136 + docs/html/permissions-nfc/navigation.html | 662 ++ .../-d-i-s-a-b-l-e-d/index.html | 153 + .../-n-o-t_-a-v-a-i-l-a-b-l-e/index.html | 153 + .../-nfc-not-available-reason/entries.html | 114 + .../-nfc-not-available-reason/index.html | 236 + .../-nfc-not-available-reason/value-of.html | 114 + .../-nfc-not-available-reason/values.html | 114 + .../-require-nfc.html | 116 + .../index.html | 159 + docs/html/permissions-notification/index.html | 136 + .../permissions-notification/navigation.html | 662 ++ .../-request-notification-permission.html | 114 + .../index.html | 138 + docs/html/permissions-wifi/index.html | 136 + docs/html/permissions-wifi/navigation.html | 662 ++ .../-require-location-for-wi-fi.html | 119 + .../-require-wi-fi.html | 116 + .../-d-i-s-a-b-l-e-d/index.html | 153 + .../-n-o-t_-a-v-a-i-l-a-b-l-e/index.html | 153 + .../index.html | 153 + .../entries.html | 114 + .../index.html | 251 + .../value-of.html | 114 + .../values.html | 114 + .../index.html | 179 + docs/html/scripts/clipboard.js | 56 + docs/html/scripts/main.js | 53 + docs/html/scripts/navigation-loader.js | 95 + docs/html/scripts/pages.json | 1 + docs/html/scripts/platform-content-handler.js | 371 + docs/html/scripts/prism.js | 22 + docs/html/scripts/sourceset_dependencies.js | 1 + .../symbol-parameters-wrapper_deferred.js | 64 + docs/html/styles/font-jb-sans-auto.css | 40 + docs/html/styles/logo-styles.css | 37 + docs/html/styles/main.css | 203 + docs/html/styles/prism.css | 213 + docs/html/styles/style.css | 937 +++ docs/html/theme/index.html | 136 + docs/html/theme/navigation.html | 662 ++ .../-nordic-activity/-companion/index.html | 118 + .../-nordic-activity/-nordic-activity.html | 114 + .../-nordic-activity/index.html | 6000 +++++++++++++++++ .../-nordic-theme.html | 114 + .../index.html | 356 + .../nordic-blue.html | 114 + .../nordic-blueslate.html | 114 + .../nordic-dark-gray.html | 114 + .../nordic-fall.html | 114 + .../nordic-grass.html | 114 + .../nordic-green.html | 114 + .../nordic-lake.html | 114 + .../nordic-light-gray.html | 114 + .../nordic-middle-gray.html | 114 + .../nordic-red.html | 114 + .../nordic-sky.html | 114 + .../nordic-sun.html | 114 + .../nordic-typography.html | 114 + .../ui-kit/assets/abstract-class-kotlin.svg | 26 + docs/html/ui-kit/assets/abstract-class.svg | 22 + docs/html/ui-kit/assets/annotation-kotlin.svg | 13 + docs/html/ui-kit/assets/annotation.svg | 9 + docs/html/ui-kit/assets/arrow-down.svg | 3 + docs/html/ui-kit/assets/burger.svg | 5 + docs/html/ui-kit/assets/checkbox-off.svg | 3 + docs/html/ui-kit/assets/checkbox-on.svg | 3 + docs/html/ui-kit/assets/class-kotlin.svg | 13 + docs/html/ui-kit/assets/class.svg | 9 + docs/html/ui-kit/assets/cross.svg | 3 + docs/html/ui-kit/assets/enum-kotlin.svg | 13 + docs/html/ui-kit/assets/enum.svg | 9 + docs/html/ui-kit/assets/exception-class.svg | 9 + docs/html/ui-kit/assets/field-value.svg | 10 + docs/html/ui-kit/assets/field-variable.svg | 10 + docs/html/ui-kit/assets/filter.svg | 8 + docs/html/ui-kit/assets/function.svg | 9 + docs/html/ui-kit/assets/homepage.svg | 3 + docs/html/ui-kit/assets/interface-kotlin.svg | 13 + docs/html/ui-kit/assets/interface.svg | 9 + docs/html/ui-kit/assets/object.svg | 13 + docs/html/ui-kit/assets/placeholder.svg | 3 + docs/html/ui-kit/assets/theme-toggle.svg | 3 + docs/html/ui-kit/assets/typealias-kotlin.svg | 13 + docs/html/ui-kit/ui-kit.min.css | 1 + docs/html/ui-kit/ui-kit.min.js | 1 + docs/html/ui/index.html | 134 + docs/html/ui/navigation.html | 662 ++ .../-app-bar-icon.html | 114 + .../-circular-icon.html | 114 + .../-floating-action-menu-item-secondary.html | 114 + .../-floating-action-menu-item.html | 114 + .../-floating-action-menu.html | 114 + .../-horizontal-label-radio-button-group.html | 114 + .../-item-padding.html | 114 + .../index.html | 138 + .../-item-padding.html | 114 + .../index.html | 138 + .../-navigation-drawer-title.html | 114 + .../-nordic-app-bar.html | 117 + .../-nordic-large-app-bar.html | 117 + .../-nordic-logo.html | 114 + .../-nordic-medium-app-bar.html | 117 + .../-nordic-slider-defaults/colors.html | 114 + .../-nordic-slider-defaults/index.html | 138 + .../-pager-view-entity.html | 114 + .../-pager-view-entity/index.html | 157 + .../-pager-view-entity/items.html | 114 + .../-pager-view-item/-pager-view-item.html | 114 + .../-pager-view-item/draw-view.html | 114 + .../-pager-view-item/index.html | 172 + .../-pager-view-item/title.html | 114 + .../-pager-view.html | 114 + .../-d-i-s-a-b-l-e-d/index.html | 153 + .../-e-r-r-o-r/index.html | 153 + .../-s-u-c-c-e-s-s/index.html | 153 + .../-w-o-r-k-i-n-g/index.html | 153 + .../-progress-item-status/entries.html | 114 + .../-progress-item-status/index.html | 266 + .../-progress-item-status/value-of.html | 114 + .../-progress-item-status/values.html | 114 + .../-progress-item.html | 114 + .../-radio-button-group.html | 114 + .../-radio-button-item.html | 114 + .../-radio-button-item/index.html | 172 + .../-radio-button-item/is-checked.html | 114 + .../-radio-button-item/label.html | 114 + .../-radio-group-view-entity.html | 114 + .../-radio-group-view-entity/index.html | 157 + .../-radio-group-view-entity/items.html | 114 + .../-rssi-icon.html | 114 + .../-section-title.html | 114 + .../-status-item.html | 114 + .../-warning-view.html | 114 + .../-wizard-step-action/-action/-action.html | 114 + .../-action/dangerous.html | 114 + .../-wizard-step-action/-action/enabled.html | 114 + .../-wizard-step-action/-action/index.html | 202 + .../-wizard-step-action/-action/on-click.html | 114 + .../-wizard-step-action/-action/text.html | 114 + .../-progress-indicator/index.html | 118 + .../-wizard-step-action/index.html | 153 + .../-wizard-step-component.html | 114 + .../-c-o-m-p-l-e-t-e-d/index.html | 153 + .../-c-u-r-r-e-n-t/index.html | 153 + .../-i-n-a-c-t-i-v-e/index.html | 153 + .../-wizard-step-state/entries.html | 114 + .../-wizard-step-state/index.html | 251 + .../-wizard-step-state/value-of.html | 114 + .../-wizard-step-state/values.html | 114 + .../index.html | 570 ++ 251 files changed, 42495 insertions(+) create mode 100644 docs/html/analytics/index.html create mode 100644 docs/html/analytics/navigation.html create mode 100644 docs/html/analytics/no.nordicsemi.android.common.analytics.view/-analytics-permission-button.html create mode 100644 docs/html/analytics/no.nordicsemi.android.common.analytics.view/-analytics-permission-request-dialog.html create mode 100644 docs/html/analytics/no.nordicsemi.android.common.analytics.view/-analytics-permission-switch-dialog.html create mode 100644 docs/html/analytics/no.nordicsemi.android.common.analytics.view/-analytics-permission-switch.html create mode 100644 docs/html/analytics/no.nordicsemi.android.common.analytics.view/index.html create mode 100644 docs/html/analytics/no.nordicsemi.android.common.analytics/-analytics-permission-data/-analytics-permission-data.html create mode 100644 docs/html/analytics/no.nordicsemi.android.common.analytics/-analytics-permission-data/index.html create mode 100644 docs/html/analytics/no.nordicsemi.android.common.analytics/-analytics-permission-data/is-permission-granted.html create mode 100644 docs/html/analytics/no.nordicsemi.android.common.analytics/-analytics-permission-data/was-info-dialog-shown.html create mode 100644 docs/html/analytics/no.nordicsemi.android.common.analytics/-nordic-analytics/index.html create mode 100644 docs/html/analytics/no.nordicsemi.android.common.analytics/-nordic-analytics/log-event.html create mode 100644 docs/html/analytics/no.nordicsemi.android.common.analytics/-nordic-analytics/permission-data.html create mode 100644 docs/html/analytics/no.nordicsemi.android.common.analytics/-nordic-analytics/set-analytics-enabled.html create mode 100644 docs/html/analytics/no.nordicsemi.android.common.analytics/index.html create mode 100644 docs/html/core/index.html create mode 100644 docs/html/core/navigation.html create mode 100644 docs/html/core/no.nordicsemi.android.common.core/-app-launcher/index.html create mode 100644 docs/html/core/no.nordicsemi.android.common.core/-app-launcher/lunch.html create mode 100644 docs/html/core/no.nordicsemi.android.common.core/-application-scope.html create mode 100644 docs/html/core/no.nordicsemi.android.common.core/-g-o-o-g-l-e_-p-l-a-y_-l-i-n-k.html create mode 100644 docs/html/core/no.nordicsemi.android.common.core/index.html create mode 100644 docs/html/core/no.nordicsemi.android.common.core/map.html create mode 100644 docs/html/core/no.nordicsemi.android.common.core/parse-bold.html create mode 100644 docs/html/core/no.nordicsemi.android.common.core/register-receiver.html create mode 100644 docs/html/core/no.nordicsemi.android.common.core/simple-shared-flow.html create mode 100644 docs/html/images/anchor-copy-button.svg create mode 100644 docs/html/images/copy-icon.svg create mode 100644 docs/html/images/copy-successful-icon.svg create mode 100644 docs/html/images/footer-go-to-link.svg create mode 100644 docs/html/images/go-to-top-icon.svg create mode 100644 docs/html/images/logo-icon.svg create mode 100644 docs/html/index.html create mode 100644 docs/html/logger/index.html create mode 100644 docs/html/logger/navigation.html create mode 100644 docs/html/logger/no.nordicsemi.android.common.logger.view/-logger-app-bar-icon.html create mode 100644 docs/html/logger/no.nordicsemi.android.common.logger.view/index.html create mode 100644 docs/html/logger/no.nordicsemi.android.common.logger/-logger-launcher/index.html create mode 100644 docs/html/logger/no.nordicsemi.android.common.logger/-logger-launcher/launch.html create mode 100644 docs/html/logger/no.nordicsemi.android.common.logger/index.html create mode 100644 docs/html/navigation.html create mode 100644 docs/html/navigation/index.html create mode 100644 docs/html/navigation/navigation.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation.viewmodel/-simple-navigation-view-model/-simple-navigation-view-model.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation.viewmodel/-simple-navigation-view-model/index.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation.viewmodel/-simple-navigation-view-model/nullable-parameter-of.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation.viewmodel/-simple-navigation-view-model/parameter-of.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation.viewmodel/index.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/-destination-id/-destination-id.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/-destination-id/index.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/-destination-id/to-string.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-destination/id.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-destination/index.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-destination/plus.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-result/-cancelled/-cancelled.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-result/-cancelled/index.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-result/-success/-success.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-result/-success/index.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-result/-success/value.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-result/index.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-view.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/-navigator/current-destination.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/-navigator/index.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/-navigator/is-in-hierarchy.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/-navigator/navigate-to.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/-navigator/navigate-up-with-result.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/-navigator/navigate-up.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/-navigator/open.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/-navigator/result-from.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/create-destination.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/create-simple-destination.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/define-destination-with-inner-navigation.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/define-destination.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/define-dialog-destination.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/get-or-null.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/get-state-flow.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/get.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/index.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/only-success.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/pop-up-to-destination.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/pop-up-to-start-destination.html create mode 100644 docs/html/navigation/no.nordicsemi.android.common.navigation/with.html create mode 100644 docs/html/package-list create mode 100644 docs/html/permissions-ble/index.html create mode 100644 docs/html/permissions-ble/navigation.html create mode 100644 docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-ble-permission-not-available-reason/-d-i-s-a-b-l-e-d/index.html create mode 100644 docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-ble-permission-not-available-reason/-n-o-t_-a-v-a-i-l-a-b-l-e/index.html create mode 100644 docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-ble-permission-not-available-reason/-p-e-r-m-i-s-s-i-o-n_-r-e-q-u-i-r-e-d/index.html create mode 100644 docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-ble-permission-not-available-reason/entries.html create mode 100644 docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-ble-permission-not-available-reason/index.html create mode 100644 docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-ble-permission-not-available-reason/value-of.html create mode 100644 docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-ble-permission-not-available-reason/values.html create mode 100644 docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-require-bluetooth.html create mode 100644 docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-require-location.html create mode 100644 docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/index.html create mode 100644 docs/html/permissions-internet/index.html create mode 100644 docs/html/permissions-internet/navigation.html create mode 100644 docs/html/permissions-internet/no.nordicsemi.android.common.permissions.internet/-require-internet.html create mode 100644 docs/html/permissions-internet/no.nordicsemi.android.common.permissions.internet/index.html create mode 100644 docs/html/permissions-nfc/index.html create mode 100644 docs/html/permissions-nfc/navigation.html create mode 100644 docs/html/permissions-nfc/no.nordicsemi.android.common.permissions.nfc/-nfc-not-available-reason/-d-i-s-a-b-l-e-d/index.html create mode 100644 docs/html/permissions-nfc/no.nordicsemi.android.common.permissions.nfc/-nfc-not-available-reason/-n-o-t_-a-v-a-i-l-a-b-l-e/index.html create mode 100644 docs/html/permissions-nfc/no.nordicsemi.android.common.permissions.nfc/-nfc-not-available-reason/entries.html create mode 100644 docs/html/permissions-nfc/no.nordicsemi.android.common.permissions.nfc/-nfc-not-available-reason/index.html create mode 100644 docs/html/permissions-nfc/no.nordicsemi.android.common.permissions.nfc/-nfc-not-available-reason/value-of.html create mode 100644 docs/html/permissions-nfc/no.nordicsemi.android.common.permissions.nfc/-nfc-not-available-reason/values.html create mode 100644 docs/html/permissions-nfc/no.nordicsemi.android.common.permissions.nfc/-require-nfc.html create mode 100644 docs/html/permissions-nfc/no.nordicsemi.android.common.permissions.nfc/index.html create mode 100644 docs/html/permissions-notification/index.html create mode 100644 docs/html/permissions-notification/navigation.html create mode 100644 docs/html/permissions-notification/no.nordicsemi.android.common.permissions.notification/-request-notification-permission.html create mode 100644 docs/html/permissions-notification/no.nordicsemi.android.common.permissions.notification/index.html create mode 100644 docs/html/permissions-wifi/index.html create mode 100644 docs/html/permissions-wifi/navigation.html create mode 100644 docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-require-location-for-wi-fi.html create mode 100644 docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-require-wi-fi.html create mode 100644 docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-wi-fi-permission-not-available-reason/-d-i-s-a-b-l-e-d/index.html create mode 100644 docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-wi-fi-permission-not-available-reason/-n-o-t_-a-v-a-i-l-a-b-l-e/index.html create mode 100644 docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-wi-fi-permission-not-available-reason/-p-e-r-m-i-s-s-i-o-n_-r-e-q-u-i-r-e-d/index.html create mode 100644 docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-wi-fi-permission-not-available-reason/entries.html create mode 100644 docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-wi-fi-permission-not-available-reason/index.html create mode 100644 docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-wi-fi-permission-not-available-reason/value-of.html create mode 100644 docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-wi-fi-permission-not-available-reason/values.html create mode 100644 docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/index.html create mode 100644 docs/html/scripts/clipboard.js create mode 100644 docs/html/scripts/main.js create mode 100644 docs/html/scripts/navigation-loader.js create mode 100644 docs/html/scripts/pages.json create mode 100644 docs/html/scripts/platform-content-handler.js create mode 100644 docs/html/scripts/prism.js create mode 100644 docs/html/scripts/sourceset_dependencies.js create mode 100644 docs/html/scripts/symbol-parameters-wrapper_deferred.js create mode 100644 docs/html/styles/font-jb-sans-auto.css create mode 100644 docs/html/styles/logo-styles.css create mode 100644 docs/html/styles/main.css create mode 100644 docs/html/styles/prism.css create mode 100644 docs/html/styles/style.css create mode 100644 docs/html/theme/index.html create mode 100644 docs/html/theme/navigation.html create mode 100644 docs/html/theme/no.nordicsemi.android.common.theme/-nordic-activity/-companion/index.html create mode 100644 docs/html/theme/no.nordicsemi.android.common.theme/-nordic-activity/-nordic-activity.html create mode 100644 docs/html/theme/no.nordicsemi.android.common.theme/-nordic-activity/index.html create mode 100644 docs/html/theme/no.nordicsemi.android.common.theme/-nordic-theme.html create mode 100644 docs/html/theme/no.nordicsemi.android.common.theme/index.html create mode 100644 docs/html/theme/no.nordicsemi.android.common.theme/nordic-blue.html create mode 100644 docs/html/theme/no.nordicsemi.android.common.theme/nordic-blueslate.html create mode 100644 docs/html/theme/no.nordicsemi.android.common.theme/nordic-dark-gray.html create mode 100644 docs/html/theme/no.nordicsemi.android.common.theme/nordic-fall.html create mode 100644 docs/html/theme/no.nordicsemi.android.common.theme/nordic-grass.html create mode 100644 docs/html/theme/no.nordicsemi.android.common.theme/nordic-green.html create mode 100644 docs/html/theme/no.nordicsemi.android.common.theme/nordic-lake.html create mode 100644 docs/html/theme/no.nordicsemi.android.common.theme/nordic-light-gray.html create mode 100644 docs/html/theme/no.nordicsemi.android.common.theme/nordic-middle-gray.html create mode 100644 docs/html/theme/no.nordicsemi.android.common.theme/nordic-red.html create mode 100644 docs/html/theme/no.nordicsemi.android.common.theme/nordic-sky.html create mode 100644 docs/html/theme/no.nordicsemi.android.common.theme/nordic-sun.html create mode 100644 docs/html/theme/no.nordicsemi.android.common.theme/nordic-typography.html create mode 100644 docs/html/ui-kit/assets/abstract-class-kotlin.svg create mode 100644 docs/html/ui-kit/assets/abstract-class.svg create mode 100644 docs/html/ui-kit/assets/annotation-kotlin.svg create mode 100644 docs/html/ui-kit/assets/annotation.svg create mode 100644 docs/html/ui-kit/assets/arrow-down.svg create mode 100644 docs/html/ui-kit/assets/burger.svg create mode 100644 docs/html/ui-kit/assets/checkbox-off.svg create mode 100644 docs/html/ui-kit/assets/checkbox-on.svg create mode 100644 docs/html/ui-kit/assets/class-kotlin.svg create mode 100644 docs/html/ui-kit/assets/class.svg create mode 100644 docs/html/ui-kit/assets/cross.svg create mode 100644 docs/html/ui-kit/assets/enum-kotlin.svg create mode 100644 docs/html/ui-kit/assets/enum.svg create mode 100644 docs/html/ui-kit/assets/exception-class.svg create mode 100644 docs/html/ui-kit/assets/field-value.svg create mode 100644 docs/html/ui-kit/assets/field-variable.svg create mode 100644 docs/html/ui-kit/assets/filter.svg create mode 100644 docs/html/ui-kit/assets/function.svg create mode 100644 docs/html/ui-kit/assets/homepage.svg create mode 100644 docs/html/ui-kit/assets/interface-kotlin.svg create mode 100644 docs/html/ui-kit/assets/interface.svg create mode 100644 docs/html/ui-kit/assets/object.svg create mode 100644 docs/html/ui-kit/assets/placeholder.svg create mode 100644 docs/html/ui-kit/assets/theme-toggle.svg create mode 100644 docs/html/ui-kit/assets/typealias-kotlin.svg create mode 100644 docs/html/ui-kit/ui-kit.min.css create mode 100644 docs/html/ui-kit/ui-kit.min.js create mode 100644 docs/html/ui/index.html create mode 100644 docs/html/ui/navigation.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-app-bar-icon.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-circular-icon.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-floating-action-menu-item-secondary.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-floating-action-menu-item.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-floating-action-menu.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-horizontal-label-radio-button-group.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-navigation-drawer-divider-defaults/-item-padding.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-navigation-drawer-divider-defaults/index.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-navigation-drawer-title-defaults/-item-padding.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-navigation-drawer-title-defaults/index.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-navigation-drawer-title.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-nordic-app-bar.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-nordic-large-app-bar.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-nordic-logo.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-nordic-medium-app-bar.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-nordic-slider-defaults/colors.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-nordic-slider-defaults/index.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-pager-view-entity/-pager-view-entity.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-pager-view-entity/index.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-pager-view-entity/items.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-pager-view-item/-pager-view-item.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-pager-view-item/draw-view.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-pager-view-item/index.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-pager-view-item/title.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-pager-view.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-progress-item-status/-d-i-s-a-b-l-e-d/index.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-progress-item-status/-e-r-r-o-r/index.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-progress-item-status/-s-u-c-c-e-s-s/index.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-progress-item-status/-w-o-r-k-i-n-g/index.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-progress-item-status/entries.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-progress-item-status/index.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-progress-item-status/value-of.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-progress-item-status/values.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-progress-item.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-radio-button-group.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-radio-button-item/-radio-button-item.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-radio-button-item/index.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-radio-button-item/is-checked.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-radio-button-item/label.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-radio-group-view-entity/-radio-group-view-entity.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-radio-group-view-entity/index.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-radio-group-view-entity/items.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-rssi-icon.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-section-title.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-status-item.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-warning-view.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-wizard-step-action/-action/-action.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-wizard-step-action/-action/dangerous.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-wizard-step-action/-action/enabled.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-wizard-step-action/-action/index.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-wizard-step-action/-action/on-click.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-wizard-step-action/-action/text.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-wizard-step-action/-progress-indicator/index.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-wizard-step-action/index.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-wizard-step-component.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-wizard-step-state/-c-o-m-p-l-e-t-e-d/index.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-wizard-step-state/-c-u-r-r-e-n-t/index.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-wizard-step-state/-i-n-a-c-t-i-v-e/index.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-wizard-step-state/entries.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-wizard-step-state/index.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-wizard-step-state/value-of.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/-wizard-step-state/values.html create mode 100644 docs/html/ui/no.nordicsemi.android.common.ui.view/index.html diff --git a/docs/html/analytics/index.html b/docs/html/analytics/index.html new file mode 100644 index 0000000..b0d0780 --- /dev/null +++ b/docs/html/analytics/index.html @@ -0,0 +1,156 @@ + + + + + analytics + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

analytics

+

Set of classes related to Firebase Analytics.

Configuration

Use of this module requires the following plugins to be applied in the app:

if (gradle.startParameter.taskRequests.toString().contains("Release")) {
apply("com.google.gms.google-services")
apply("com.google.firebase.crashlytics")
}

and the google-services.json file to be present in the app module.

Read Firebase Setup for more.

Note:

This package requires Hilt, as it's using Dependency Injection to provide the NordicAnalytics class.

+
+

Packages

+
+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+

Main API for Nordic analytics. Contains set to methods to log events.

+
+
+
+ +
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+

Set of common views used for enabling analytics in Nordic apps.

+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/analytics/navigation.html b/docs/html/analytics/navigation.html new file mode 100644 index 0000000..61fb8f5 --- /dev/null +++ b/docs/html/analytics/navigation.html @@ -0,0 +1,662 @@ +
+ +
+
+ core +
+
+ +
+ +
+ + +
+
+ map() +
+
+
+ +
+ + +
+
+ + + + + + + +
+
+ theme +
+
+ +
+ +
+
+ Companion +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+
+ nordicRed +
+
+
+
+ nordicSky +
+
+
+
+ nordicSun +
+
+
+ +
+ +
+
+
+
+ ui +
+
+ +
+ +
+
+ +
+ + + + + + + +
+ +
+ +
+ +
+ + +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ DISABLED +
+
+
+
+ WORKING +
+
+
+
+ SUCCESS +
+
+
+
+ ERROR +
+
+
+ +
+ +
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ Action +
+
+ +
+ +
+ +
+
+ INACTIVE +
+
+
+
+ CURRENT +
+
+
+
+ COMPLETED +
+
+
+
+
+
diff --git a/docs/html/analytics/no.nordicsemi.android.common.analytics.view/-analytics-permission-button.html b/docs/html/analytics/no.nordicsemi.android.common.analytics.view/-analytics-permission-button.html new file mode 100644 index 0000000..504b36e --- /dev/null +++ b/docs/html/analytics/no.nordicsemi.android.common.analytics.view/-analytics-permission-button.html @@ -0,0 +1,114 @@ + + + + + AnalyticsPermissionButton + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

AnalyticsPermissionButton

+
+ +
+ +
+
+
+ + diff --git a/docs/html/analytics/no.nordicsemi.android.common.analytics.view/-analytics-permission-request-dialog.html b/docs/html/analytics/no.nordicsemi.android.common.analytics.view/-analytics-permission-request-dialog.html new file mode 100644 index 0000000..8bf1d66 --- /dev/null +++ b/docs/html/analytics/no.nordicsemi.android.common.analytics.view/-analytics-permission-request-dialog.html @@ -0,0 +1,114 @@ + + + + + AnalyticsPermissionRequestDialog + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

AnalyticsPermissionRequestDialog

+
+ +
+ +
+
+
+ + diff --git a/docs/html/analytics/no.nordicsemi.android.common.analytics.view/-analytics-permission-switch-dialog.html b/docs/html/analytics/no.nordicsemi.android.common.analytics.view/-analytics-permission-switch-dialog.html new file mode 100644 index 0000000..8d63f78 --- /dev/null +++ b/docs/html/analytics/no.nordicsemi.android.common.analytics.view/-analytics-permission-switch-dialog.html @@ -0,0 +1,114 @@ + + + + + AnalyticsPermissionSwitchDialog + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

AnalyticsPermissionSwitchDialog

+
+
fun AnalyticsPermissionSwitchDialog(granted: Boolean, onChanged: (Boolean) -> Unit, onDismiss: () -> Unit)
+
+ +
+
+
+ + diff --git a/docs/html/analytics/no.nordicsemi.android.common.analytics.view/-analytics-permission-switch.html b/docs/html/analytics/no.nordicsemi.android.common.analytics.view/-analytics-permission-switch.html new file mode 100644 index 0000000..1c0aea3 --- /dev/null +++ b/docs/html/analytics/no.nordicsemi.android.common.analytics.view/-analytics-permission-switch.html @@ -0,0 +1,114 @@ + + + + + AnalyticsPermissionSwitch + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

AnalyticsPermissionSwitch

+
+ +
+ +
+
+
+ + diff --git a/docs/html/analytics/no.nordicsemi.android.common.analytics.view/index.html b/docs/html/analytics/no.nordicsemi.android.common.analytics.view/index.html new file mode 100644 index 0000000..5a738cf --- /dev/null +++ b/docs/html/analytics/no.nordicsemi.android.common.analytics.view/index.html @@ -0,0 +1,183 @@ + + + + + no.nordicsemi.android.common.analytics.view + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Package-level declarations

+

Set of common views used for enabling analytics in Nordic apps.

+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+ +
+
+ +
+
+
+ + +
Link copied to clipboard
+
+ +
+
+ +
+
+
+ + +
Link copied to clipboard
+
+ +
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
fun AnalyticsPermissionSwitchDialog(granted: Boolean, onChanged: (Boolean) -> Unit, onDismiss: () -> Unit)
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/analytics/no.nordicsemi.android.common.analytics/-analytics-permission-data/-analytics-permission-data.html b/docs/html/analytics/no.nordicsemi.android.common.analytics/-analytics-permission-data/-analytics-permission-data.html new file mode 100644 index 0000000..121bbe3 --- /dev/null +++ b/docs/html/analytics/no.nordicsemi.android.common.analytics/-analytics-permission-data/-analytics-permission-data.html @@ -0,0 +1,114 @@ + + + + + AnalyticsPermissionData + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

AnalyticsPermissionData

+
+
constructor(isPermissionGranted: Boolean = false, wasInfoDialogShown: Boolean = false)
+
+ +
+
+
+ + diff --git a/docs/html/analytics/no.nordicsemi.android.common.analytics/-analytics-permission-data/index.html b/docs/html/analytics/no.nordicsemi.android.common.analytics/-analytics-permission-data/index.html new file mode 100644 index 0000000..c4a63a5 --- /dev/null +++ b/docs/html/analytics/no.nordicsemi.android.common.analytics/-analytics-permission-data/index.html @@ -0,0 +1,172 @@ + + + + + AnalyticsPermissionData + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

AnalyticsPermissionData

+
data class AnalyticsPermissionData(val isPermissionGranted: Boolean = false, val wasInfoDialogShown: Boolean = false)

Analytics configuration, stored in the shared preferences.

+
+
+
+
+
+

Constructors

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
constructor(isPermissionGranted: Boolean = false, wasInfoDialogShown: Boolean = false)
+
+
+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+

Initially, analytics are disabled, user needs to Opt-In to enable.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+

A flag indicating whether the info dialog has been shown.

+
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/analytics/no.nordicsemi.android.common.analytics/-analytics-permission-data/is-permission-granted.html b/docs/html/analytics/no.nordicsemi.android.common.analytics/-analytics-permission-data/is-permission-granted.html new file mode 100644 index 0000000..30f831f --- /dev/null +++ b/docs/html/analytics/no.nordicsemi.android.common.analytics/-analytics-permission-data/is-permission-granted.html @@ -0,0 +1,114 @@ + + + + + isPermissionGranted + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

isPermissionGranted

+
+ +
+ +
+
+
+ + diff --git a/docs/html/analytics/no.nordicsemi.android.common.analytics/-analytics-permission-data/was-info-dialog-shown.html b/docs/html/analytics/no.nordicsemi.android.common.analytics/-analytics-permission-data/was-info-dialog-shown.html new file mode 100644 index 0000000..fb73fdb --- /dev/null +++ b/docs/html/analytics/no.nordicsemi.android.common.analytics/-analytics-permission-data/was-info-dialog-shown.html @@ -0,0 +1,114 @@ + + + + + wasInfoDialogShown + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

wasInfoDialogShown

+
+ +
+ +
+
+
+ + diff --git a/docs/html/analytics/no.nordicsemi.android.common.analytics/-nordic-analytics/index.html b/docs/html/analytics/no.nordicsemi.android.common.analytics/-nordic-analytics/index.html new file mode 100644 index 0000000..7484a2a --- /dev/null +++ b/docs/html/analytics/no.nordicsemi.android.common.analytics/-nordic-analytics/index.html @@ -0,0 +1,172 @@ + + + + + NordicAnalytics + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

NordicAnalytics

+
@Singleton
class NordicAnalytics

This class is responsible for logging events to Firebase Analytics.

Use Hilt injection to get an instance of this class.

+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+

A flow that emits the current Analytics permission data.

+
+
+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
fun logEvent(@Size(min = 1, max = 40) name: String, params: Bundle? = null)

Logs an event to Firebase Analytics, if the user has granted permission.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
suspend fun setAnalyticsEnabled(isEnabled: Boolean)

Sets whether analytics collection is enabled or disabled.

+
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/analytics/no.nordicsemi.android.common.analytics/-nordic-analytics/log-event.html b/docs/html/analytics/no.nordicsemi.android.common.analytics/-nordic-analytics/log-event.html new file mode 100644 index 0000000..fecdcd5 --- /dev/null +++ b/docs/html/analytics/no.nordicsemi.android.common.analytics/-nordic-analytics/log-event.html @@ -0,0 +1,114 @@ + + + + + logEvent + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

logEvent

+
+
fun logEvent(@Size(min = 1, max = 40) name: String, params: Bundle? = null)

Logs an event to Firebase Analytics, if the user has granted permission.

Parameters

name

The name of the event. Should be between 1 and 40 characters long.

params

Optional parameters to be sent with the event.

+
+ +
+
+
+ + diff --git a/docs/html/analytics/no.nordicsemi.android.common.analytics/-nordic-analytics/permission-data.html b/docs/html/analytics/no.nordicsemi.android.common.analytics/-nordic-analytics/permission-data.html new file mode 100644 index 0000000..73d23a1 --- /dev/null +++ b/docs/html/analytics/no.nordicsemi.android.common.analytics/-nordic-analytics/permission-data.html @@ -0,0 +1,114 @@ + + + + + permissionData + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

permissionData

+
+

A flow that emits the current Analytics permission data.

See also

+
+ +
+
+
+ + diff --git a/docs/html/analytics/no.nordicsemi.android.common.analytics/-nordic-analytics/set-analytics-enabled.html b/docs/html/analytics/no.nordicsemi.android.common.analytics/-nordic-analytics/set-analytics-enabled.html new file mode 100644 index 0000000..15e394a --- /dev/null +++ b/docs/html/analytics/no.nordicsemi.android.common.analytics/-nordic-analytics/set-analytics-enabled.html @@ -0,0 +1,114 @@ + + + + + setAnalyticsEnabled + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

setAnalyticsEnabled

+
+
suspend fun setAnalyticsEnabled(isEnabled: Boolean)

Sets whether analytics collection is enabled or disabled.

Parameters

isEnabled

True to enable analytics collection, false to disable it.

+
+ +
+
+
+ + diff --git a/docs/html/analytics/no.nordicsemi.android.common.analytics/index.html b/docs/html/analytics/no.nordicsemi.android.common.analytics/index.html new file mode 100644 index 0000000..f3dad87 --- /dev/null +++ b/docs/html/analytics/no.nordicsemi.android.common.analytics/index.html @@ -0,0 +1,153 @@ + + + + + no.nordicsemi.android.common.analytics + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Package-level declarations

+

Main API for Nordic analytics. Contains set to methods to log events.

+
+
+
+
+
+

Types

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
data class AnalyticsPermissionData(val isPermissionGranted: Boolean = false, val wasInfoDialogShown: Boolean = false)

Analytics configuration, stored in the shared preferences.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
@Singleton
class NordicAnalytics

This class is responsible for logging events to Firebase Analytics.

+
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/core/index.html b/docs/html/core/index.html new file mode 100644 index 0000000..4e325b1 --- /dev/null +++ b/docs/html/core/index.html @@ -0,0 +1,136 @@ + + + + + core + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

core

+

Common classes and interfaces used by other modules.

+
+

Packages

+
+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+

Common classes and interfaces used by other modules.

+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/core/navigation.html b/docs/html/core/navigation.html new file mode 100644 index 0000000..61fb8f5 --- /dev/null +++ b/docs/html/core/navigation.html @@ -0,0 +1,662 @@ +
+ +
+
+ core +
+
+ +
+ +
+ + +
+
+ map() +
+
+
+ +
+ + +
+
+ + + + + + + +
+
+ theme +
+
+ +
+ +
+
+ Companion +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+
+ nordicRed +
+
+
+
+ nordicSky +
+
+
+
+ nordicSun +
+
+
+ +
+ +
+
+
+
+ ui +
+
+ +
+ +
+
+ +
+ + + + + + + +
+ +
+ +
+ +
+ + +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ DISABLED +
+
+
+
+ WORKING +
+
+
+
+ SUCCESS +
+
+
+
+ ERROR +
+
+
+ +
+ +
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ Action +
+
+ +
+ +
+ +
+
+ INACTIVE +
+
+
+
+ CURRENT +
+
+
+
+ COMPLETED +
+
+
+
+
+
diff --git a/docs/html/core/no.nordicsemi.android.common.core/-app-launcher/index.html b/docs/html/core/no.nordicsemi.android.common.core/-app-launcher/index.html new file mode 100644 index 0000000..9b2037f --- /dev/null +++ b/docs/html/core/no.nordicsemi.android.common.core/-app-launcher/index.html @@ -0,0 +1,138 @@ + + + + + AppLauncher + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

AppLauncher

+

AppLauncher is a utility class that can be used to launch an app with a given package name.

If the activity is not installed, the Google Play Store will be opened.

+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
fun lunch(packageManager: PackageManager, packageName: String, context: Context)

Opens the app with supplied package name, or opens Google Play if the app is not installed.

+
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/core/no.nordicsemi.android.common.core/-app-launcher/lunch.html b/docs/html/core/no.nordicsemi.android.common.core/-app-launcher/lunch.html new file mode 100644 index 0000000..a5f0763 --- /dev/null +++ b/docs/html/core/no.nordicsemi.android.common.core/-app-launcher/lunch.html @@ -0,0 +1,114 @@ + + + + + lunch + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

lunch

+
+
fun lunch(packageManager: PackageManager, packageName: String, context: Context)

Opens the app with supplied package name, or opens Google Play if the app is not installed.

+
+ +
+
+
+ + diff --git a/docs/html/core/no.nordicsemi.android.common.core/-application-scope.html b/docs/html/core/no.nordicsemi.android.common.core/-application-scope.html new file mode 100644 index 0000000..3346a78 --- /dev/null +++ b/docs/html/core/no.nordicsemi.android.common.core/-application-scope.html @@ -0,0 +1,114 @@ + + + + + ApplicationScope + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

ApplicationScope

+
+
val ApplicationScope: CoroutineScope

Application scope for the application.

Combines SupervisorJob with Dispatchers.Default.

+
+ +
+
+
+ + diff --git a/docs/html/core/no.nordicsemi.android.common.core/-g-o-o-g-l-e_-p-l-a-y_-l-i-n-k.html b/docs/html/core/no.nordicsemi.android.common.core/-g-o-o-g-l-e_-p-l-a-y_-l-i-n-k.html new file mode 100644 index 0000000..6792c52 --- /dev/null +++ b/docs/html/core/no.nordicsemi.android.common.core/-g-o-o-g-l-e_-p-l-a-y_-l-i-n-k.html @@ -0,0 +1,114 @@ + + + + + GOOGLE_PLAY_LINK + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

GOOGLE_PLAY_LINK

+
+

Base link to the Google Play Store.

+
+ +
+
+
+ + diff --git a/docs/html/core/no.nordicsemi.android.common.core/index.html b/docs/html/core/no.nordicsemi.android.common.core/index.html new file mode 100644 index 0000000..7e4176e --- /dev/null +++ b/docs/html/core/no.nordicsemi.android.common.core/index.html @@ -0,0 +1,236 @@ + + + + + no.nordicsemi.android.common.core + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Package-level declarations

+

Common classes and interfaces used by other modules.

+
+
+
+
+
+

Types

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+

AppLauncher is a utility class that can be used to launch an app with a given package name.

+
+
+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
val ApplicationScope: CoroutineScope

Application scope for the application.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+

Base link to the Google Play Store.

+
+
+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
fun <T, R> SparseArray<T>.map(modifier: (T) -> R): SparseArray<R>

Maps the SparseArray to a new SparseArray using the provided modifier.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+

Parses the string and makes the text between <b> and </b> bold using AnnotatedString.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
fun registerReceiver(intentFilter: IntentFilter, flags: Int = ContextCompat.RECEIVER_NOT_EXPORTED, onEvent: (Intent?) -> Unit)

Registers a BroadcastReceiver that will be automatically unregistered when the composable is disposed.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
fun <T> simpleSharedFlow(): MutableSharedFlow<T>

Creates a simple MutableSharedFlow with a buffer of 1 element and BufferOverflow.DROP_OLDEST strategy.

+
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/core/no.nordicsemi.android.common.core/map.html b/docs/html/core/no.nordicsemi.android.common.core/map.html new file mode 100644 index 0000000..456a137 --- /dev/null +++ b/docs/html/core/no.nordicsemi.android.common.core/map.html @@ -0,0 +1,114 @@ + + + + + map + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

map

+
+
fun <T, R> SparseArray<T>.map(modifier: (T) -> R): SparseArray<R>

Maps the SparseArray to a new SparseArray using the provided modifier.

Return

a new SparseArray with the modified elements.

Parameters

modifier

the modifier to apply to each element.

+
+ +
+
+
+ + diff --git a/docs/html/core/no.nordicsemi.android.common.core/parse-bold.html b/docs/html/core/no.nordicsemi.android.common.core/parse-bold.html new file mode 100644 index 0000000..f3bddcb --- /dev/null +++ b/docs/html/core/no.nordicsemi.android.common.core/parse-bold.html @@ -0,0 +1,114 @@ + + + + + parseBold + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

parseBold

+
+

Parses the string and makes the text between <b> and </b> bold using AnnotatedString.

+
+ +
+
+
+ + diff --git a/docs/html/core/no.nordicsemi.android.common.core/register-receiver.html b/docs/html/core/no.nordicsemi.android.common.core/register-receiver.html new file mode 100644 index 0000000..96c2143 --- /dev/null +++ b/docs/html/core/no.nordicsemi.android.common.core/register-receiver.html @@ -0,0 +1,114 @@ + + + + + registerReceiver + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

registerReceiver

+
+
fun registerReceiver(intentFilter: IntentFilter, flags: Int = ContextCompat.RECEIVER_NOT_EXPORTED, onEvent: (Intent?) -> Unit)

Registers a BroadcastReceiver that will be automatically unregistered when the composable is disposed.

Parameters

intentFilter

the IntentFilter to register the receiver for.

flags

additional flags to control the receiver. Default is ContextCompat.RECEIVER_NOT_EXPORTED.

onEvent

the callback that will be called when a broadcast is received.

+
+ +
+
+
+ + diff --git a/docs/html/core/no.nordicsemi.android.common.core/simple-shared-flow.html b/docs/html/core/no.nordicsemi.android.common.core/simple-shared-flow.html new file mode 100644 index 0000000..689f88c --- /dev/null +++ b/docs/html/core/no.nordicsemi.android.common.core/simple-shared-flow.html @@ -0,0 +1,114 @@ + + + + + simpleSharedFlow + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

simpleSharedFlow

+
+
fun <T> simpleSharedFlow(): MutableSharedFlow<T>

Creates a simple MutableSharedFlow with a buffer of 1 element and BufferOverflow.DROP_OLDEST strategy.

+
+ +
+
+
+ + diff --git a/docs/html/images/anchor-copy-button.svg b/docs/html/images/anchor-copy-button.svg new file mode 100644 index 0000000..34eb5b2 --- /dev/null +++ b/docs/html/images/anchor-copy-button.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs/html/images/copy-icon.svg b/docs/html/images/copy-icon.svg new file mode 100644 index 0000000..abeb27e --- /dev/null +++ b/docs/html/images/copy-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/images/copy-successful-icon.svg b/docs/html/images/copy-successful-icon.svg new file mode 100644 index 0000000..1b0ca52 --- /dev/null +++ b/docs/html/images/copy-successful-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/images/footer-go-to-link.svg b/docs/html/images/footer-go-to-link.svg new file mode 100644 index 0000000..c319953 --- /dev/null +++ b/docs/html/images/footer-go-to-link.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/images/go-to-top-icon.svg b/docs/html/images/go-to-top-icon.svg new file mode 100644 index 0000000..2341ef2 --- /dev/null +++ b/docs/html/images/go-to-top-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs/html/images/logo-icon.svg b/docs/html/images/logo-icon.svg new file mode 100644 index 0000000..ac1c343 --- /dev/null +++ b/docs/html/images/logo-icon.svg @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/index.html b/docs/html/index.html new file mode 100644 index 0000000..6f462ad --- /dev/null +++ b/docs/html/index.html @@ -0,0 +1,245 @@ + + + + + All modules + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

All modules:

+
+
+
+
+ + +
Link copied to clipboard
+
+
+

Set of classes related to Firebase Analytics.

+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+

Common classes and interfaces used by other modules.

+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+

Utility classes for easy integration with nRF Logger.

+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+

Wrapper for the AndroidX Navigation Compose component allowing passing typed arguments between destinations.

+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+

Common views for displaying content that requires Bluetooth scanning or connecting.

+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+

Common views for displaying content that requires Internet.

+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+

Common views for displaying content that requires NFC.

+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+

Common views for requesting android.Manifest.permission.POST_NOTIFICATIONS permission.

+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+

Common views for displaying content that requires Wi-Fi.

+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+

Set of classes and resources for Nordic theme.

+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+

Common UI components for Nordic apps.

+
+
+
+
+
+
+ +
+
+
+ + \ No newline at end of file diff --git a/docs/html/logger/index.html b/docs/html/logger/index.html new file mode 100644 index 0000000..73e8b42 --- /dev/null +++ b/docs/html/logger/index.html @@ -0,0 +1,156 @@ + + + + + logger + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

logger

+

Utility classes for easy integration with nRF Logger.

Logging uses nRF Logger API.

+
+

Packages

+
+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+

A package with utility classes for easy integration with nRF Logger.

+
+
+
+ +
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+

UI components for nRF Logger integration.

+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/logger/navigation.html b/docs/html/logger/navigation.html new file mode 100644 index 0000000..61fb8f5 --- /dev/null +++ b/docs/html/logger/navigation.html @@ -0,0 +1,662 @@ +
+ +
+
+ core +
+
+ +
+ +
+ + +
+
+ map() +
+
+
+ +
+ + +
+
+ + + + + + + +
+
+ theme +
+
+ +
+ +
+
+ Companion +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+
+ nordicRed +
+
+
+
+ nordicSky +
+
+
+
+ nordicSun +
+
+
+ +
+ +
+
+
+
+ ui +
+
+ +
+ +
+
+ +
+ + + + + + + +
+ +
+ +
+ +
+ + +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ DISABLED +
+
+
+
+ WORKING +
+
+
+
+ SUCCESS +
+
+
+
+ ERROR +
+
+
+ +
+ +
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ Action +
+
+ +
+ +
+ +
+
+ INACTIVE +
+
+
+
+ CURRENT +
+
+
+
+ COMPLETED +
+
+
+
+
+
diff --git a/docs/html/logger/no.nordicsemi.android.common.logger.view/-logger-app-bar-icon.html b/docs/html/logger/no.nordicsemi.android.common.logger.view/-logger-app-bar-icon.html new file mode 100644 index 0000000..3ba9839 --- /dev/null +++ b/docs/html/logger/no.nordicsemi.android.common.logger.view/-logger-app-bar-icon.html @@ -0,0 +1,114 @@ + + + + + LoggerAppBarIcon + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

LoggerAppBarIcon

+
+
fun LoggerAppBarIcon(onClick: () -> Unit)
+
+ +
+
+
+ + diff --git a/docs/html/logger/no.nordicsemi.android.common.logger.view/index.html b/docs/html/logger/no.nordicsemi.android.common.logger.view/index.html new file mode 100644 index 0000000..7e028ba --- /dev/null +++ b/docs/html/logger/no.nordicsemi.android.common.logger.view/index.html @@ -0,0 +1,138 @@ + + + + + no.nordicsemi.android.common.logger.view + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Package-level declarations

+

UI components for nRF Logger integration.

+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
fun LoggerAppBarIcon(onClick: () -> Unit)
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/logger/no.nordicsemi.android.common.logger/-logger-launcher/index.html b/docs/html/logger/no.nordicsemi.android.common.logger/-logger-launcher/index.html new file mode 100644 index 0000000..f2f272d --- /dev/null +++ b/docs/html/logger/no.nordicsemi.android.common.logger/-logger-launcher/index.html @@ -0,0 +1,138 @@ + + + + + LoggerLauncher + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

LoggerLauncher

+

Helper object responsible for launching nRF Logger app.

+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
fun launch(context: Context, logSession: ILogSession?)

Opens the log session in nRF Logger app, or opens Google Play if the app is not installed.

+
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/logger/no.nordicsemi.android.common.logger/-logger-launcher/launch.html b/docs/html/logger/no.nordicsemi.android.common.logger/-logger-launcher/launch.html new file mode 100644 index 0000000..d168b2d --- /dev/null +++ b/docs/html/logger/no.nordicsemi.android.common.logger/-logger-launcher/launch.html @@ -0,0 +1,114 @@ + + + + + launch + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

launch

+
+
fun launch(context: Context, logSession: ILogSession?)

Opens the log session in nRF Logger app, or opens Google Play if the app is not installed.

Use Logger.newSession to create a log session and log data to it.

Parameters

context

the context.

logSession

the log session to open.

+
+ +
+
+
+ + diff --git a/docs/html/logger/no.nordicsemi.android.common.logger/index.html b/docs/html/logger/no.nordicsemi.android.common.logger/index.html new file mode 100644 index 0000000..2812600 --- /dev/null +++ b/docs/html/logger/no.nordicsemi.android.common.logger/index.html @@ -0,0 +1,138 @@ + + + + + no.nordicsemi.android.common.logger + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Package-level declarations

+

A package with utility classes for easy integration with nRF Logger.

+
+
+
+
+
+

Types

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+

Helper object responsible for launching nRF Logger app.

+
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/navigation.html b/docs/html/navigation.html new file mode 100644 index 0000000..86b81e0 --- /dev/null +++ b/docs/html/navigation.html @@ -0,0 +1,662 @@ +
+ +
+
+ core +
+
+ +
+ +
+ + +
+
+ map() +
+
+
+ +
+ + +
+
+ + + + + + + +
+
+ theme +
+
+ +
+ +
+
+ Companion +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+
+ nordicRed +
+
+
+
+ nordicSky +
+
+
+
+ nordicSun +
+
+
+ +
+ +
+
+
+
+ ui +
+
+ +
+ +
+
+ +
+ + + + + + + +
+ +
+ +
+ +
+ + +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ DISABLED +
+
+
+
+ WORKING +
+
+
+
+ SUCCESS +
+
+
+
+ ERROR +
+
+
+ +
+ +
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ Action +
+
+ +
+ +
+ +
+
+ INACTIVE +
+
+
+
+ CURRENT +
+
+
+
+ COMPLETED +
+
+
+
+
+
diff --git a/docs/html/navigation/index.html b/docs/html/navigation/index.html new file mode 100644 index 0000000..8e8fc93 --- /dev/null +++ b/docs/html/navigation/index.html @@ -0,0 +1,156 @@ + + + + + navigation + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

navigation

+

Wrapper for the AndroidX Navigation Compose component allowing passing typed arguments between destinations.

Note:

This package requires Hilt, as it's using Dependency Injection to provide the Navigator class.

Deprecation

This module may get deprecated in favor of the official Navigation Compose library, which now also supports typed destinations using Serialization.

+
+

Packages

+
+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+

Set of classes and Composables to simplify navigation in a Compose application.

+
+
+
+ +
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+

A helper view model that can be used for navigation.

+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/navigation/navigation.html b/docs/html/navigation/navigation.html new file mode 100644 index 0000000..61fb8f5 --- /dev/null +++ b/docs/html/navigation/navigation.html @@ -0,0 +1,662 @@ +
+ +
+
+ core +
+
+ +
+ +
+ + +
+
+ map() +
+
+
+ +
+ + +
+
+ + + + + + + +
+
+ theme +
+
+ +
+ +
+
+ Companion +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+
+ nordicRed +
+
+
+
+ nordicSky +
+
+
+
+ nordicSun +
+
+
+ +
+ +
+
+
+
+ ui +
+
+ +
+ +
+
+ +
+ + + + + + + +
+ +
+ +
+ +
+ + +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ DISABLED +
+
+
+
+ WORKING +
+
+
+
+ SUCCESS +
+
+
+
+ ERROR +
+
+
+ +
+ +
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ Action +
+
+ +
+ +
+ +
+
+ INACTIVE +
+
+
+
+ CURRENT +
+
+
+
+ COMPLETED +
+
+
+
+
+
diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation.viewmodel/-simple-navigation-view-model/-simple-navigation-view-model.html b/docs/html/navigation/no.nordicsemi.android.common.navigation.viewmodel/-simple-navigation-view-model/-simple-navigation-view-model.html new file mode 100644 index 0000000..58a4709 --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation.viewmodel/-simple-navigation-view-model/-simple-navigation-view-model.html @@ -0,0 +1,114 @@ + + + + + SimpleNavigationViewModel + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

SimpleNavigationViewModel

+
+
@Inject
constructor(navigator: Navigator, savedStateHandle: SavedStateHandle)
+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation.viewmodel/-simple-navigation-view-model/index.html b/docs/html/navigation/no.nordicsemi.android.common.navigation.viewmodel/-simple-navigation-view-model/index.html new file mode 100644 index 0000000..1464de9 --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation.viewmodel/-simple-navigation-view-model/index.html @@ -0,0 +1,307 @@ + + + + + SimpleNavigationViewModel + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

SimpleNavigationViewModel

+
open class SimpleNavigationViewModel @Inject constructor(navigator: Navigator, savedStateHandle: SavedStateHandle) : ViewModel, Navigator

A ViewModel that provides methods to get the parameter of the current destination.

This is a helper view model. You may inject the Navigator directly into your view model instead.

To get an instance of this view model use:

val vm: SimpleNavigationViewModel = hiltViewModel()
+
+
+
+
+
+

Constructors

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
@Inject
constructor(navigator: Navigator, savedStateHandle: SavedStateHandle)
+
+
+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
open fun addCloseable(closeable: AutoCloseable)
fun addCloseable(key: String, closeable: AutoCloseable)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun currentDestination(): StateFlow<DestinationId<*, *>?>

Current destination as flow.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun isInHierarchy(destination: DestinationId<*, *>): StateFlow<Boolean>

Checks whether the given destination is in the back stack.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun navigateTo(to: DestinationId<Unit, *>, navOptions: NavOptions?)
open override fun navigateTo(to: DestinationId<Unit, *>, builder: NavOptionsBuilder.() -> Unit)

Requests navigation to the given destination which takes no input parameter.

open override fun <A> navigateTo(to: DestinationId<A, *>, args: A, navOptions: NavOptions?)
open override fun <A> navigateTo(to: DestinationId<A, *>, args: A, builder: NavOptionsBuilder.() -> Unit)

Requests navigation to the given destination. An required parameter must be passed.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun navigateUp()

Navigates up to previous destination, or finishes the Activity.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun <R> navigateUpWithResult(from: DestinationId<*, R>, result: R)

Navigates up to previous destination passing the given result, or finishes the Activity.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
fun <A> nullableParameterOf(destinationId: DestinationId<A?, *>): A?

Returns the parameter of the current destination, or null, if hasn't been set.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun open(link: Uri)

Opens the given link in a browser.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
fun <A> parameterOf(destinationId: DestinationId<A & Any, *>): A
fun parameterOf(destinationId: DestinationId<Unit, *>): Nothing

Returns the parameter of the current destination, or null, if hasn't been set.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun <R> resultFrom(from: DestinationId<*, R>): Flow<NavigationResult<R>>

Creates a flow that will emit the results of the navigation from the given destination.

+
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation.viewmodel/-simple-navigation-view-model/nullable-parameter-of.html b/docs/html/navigation/no.nordicsemi.android.common.navigation.viewmodel/-simple-navigation-view-model/nullable-parameter-of.html new file mode 100644 index 0000000..e02d042 --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation.viewmodel/-simple-navigation-view-model/nullable-parameter-of.html @@ -0,0 +1,114 @@ + + + + + nullableParameterOf + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

nullableParameterOf

+
+
fun <A> nullableParameterOf(destinationId: DestinationId<A?, *>): A?

Returns the parameter of the current destination, or null, if hasn't been set.

+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation.viewmodel/-simple-navigation-view-model/parameter-of.html b/docs/html/navigation/no.nordicsemi.android.common.navigation.viewmodel/-simple-navigation-view-model/parameter-of.html new file mode 100644 index 0000000..53e90f4 --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation.viewmodel/-simple-navigation-view-model/parameter-of.html @@ -0,0 +1,114 @@ + + + + + parameterOf + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

parameterOf

+
+
fun <A> parameterOf(destinationId: DestinationId<A & Any, *>): A
fun parameterOf(destinationId: DestinationId<Unit, *>): Nothing

Returns the parameter of the current destination, or null, if hasn't been set.

+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation.viewmodel/index.html b/docs/html/navigation/no.nordicsemi.android.common.navigation.viewmodel/index.html new file mode 100644 index 0000000..72fcc24 --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation.viewmodel/index.html @@ -0,0 +1,138 @@ + + + + + no.nordicsemi.android.common.navigation.viewmodel + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Package-level declarations

+

A helper view model that can be used for navigation.

+
+
+
+
+
+

Types

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
open class SimpleNavigationViewModel @Inject constructor(navigator: Navigator, savedStateHandle: SavedStateHandle) : ViewModel, Navigator

A ViewModel that provides methods to get the parameter of the current destination.

+
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/-destination-id/-destination-id.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/-destination-id/-destination-id.html new file mode 100644 index 0000000..ac8255a --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/-destination-id/-destination-id.html @@ -0,0 +1,114 @@ + + + + + DestinationId + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

DestinationId

+
+
constructor(name: String)

Parameters

A

The Argument type.

R

The Result type.

+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/-destination-id/index.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/-destination-id/index.html new file mode 100644 index 0000000..6c79169 --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/-destination-id/index.html @@ -0,0 +1,172 @@ + + + + + DestinationId + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

DestinationId

+
data class DestinationId<A, R>(name: String)

A destination identifier.

Parameters

A

The Argument type.

R

The Result type.

+
+
+
+
+
+

Constructors

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
constructor(name: String)
+
+
+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun toString(): String
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+

Helper method for creating inner navigation.

+
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/-destination-id/to-string.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/-destination-id/to-string.html new file mode 100644 index 0000000..29f85f7 --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/-destination-id/to-string.html @@ -0,0 +1,114 @@ + + + + + toString + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

toString

+
+
open override fun toString(): String
+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-destination/id.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-destination/id.html new file mode 100644 index 0000000..c9b3bb8 --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-destination/id.html @@ -0,0 +1,114 @@ + + + + + id + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

id

+
+
val id: DestinationId<*, *>
+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-destination/index.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-destination/index.html new file mode 100644 index 0000000..5667632 --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-destination/index.html @@ -0,0 +1,157 @@ + + + + + NavigationDestination + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

NavigationDestination

+

A navigation view allows navigating between different destinations.

+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
val id: DestinationId<*, *>

The destination id.

+
+
+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+ +
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-destination/plus.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-destination/plus.html new file mode 100644 index 0000000..8662b09 --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-destination/plus.html @@ -0,0 +1,114 @@ + + + + + plus + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

plus

+
+ +
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-result/-cancelled/-cancelled.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-result/-cancelled/-cancelled.html new file mode 100644 index 0000000..336cb49 --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-result/-cancelled/-cancelled.html @@ -0,0 +1,114 @@ + + + + + Cancelled + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Cancelled

+
+
constructor()
+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-result/-cancelled/index.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-result/-cancelled/index.html new file mode 100644 index 0000000..51c6a2f --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-result/-cancelled/index.html @@ -0,0 +1,138 @@ + + + + + Cancelled + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Cancelled

+

Navigation was cancelled.

+
+
+
+
+
+

Constructors

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
constructor()
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-result/-success/-success.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-result/-success/-success.html new file mode 100644 index 0000000..3f6c6f7 --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-result/-success/-success.html @@ -0,0 +1,114 @@ + + + + + Success + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Success

+
+
constructor(value: R)
+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-result/-success/index.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-result/-success/index.html new file mode 100644 index 0000000..df85790 --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-result/-success/index.html @@ -0,0 +1,157 @@ + + + + + Success + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Success

+
data class Success<R>(val value: R) : NavigationResult<R>

The navigation has returned a result.

+
+
+
+
+
+

Constructors

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
constructor(value: R)
+
+
+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
val value: R
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-result/-success/value.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-result/-success/value.html new file mode 100644 index 0000000..fff56c1 --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-result/-success/value.html @@ -0,0 +1,114 @@ + + + + + value + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

value

+
+
val value: R
+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-result/index.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-result/index.html new file mode 100644 index 0000000..1e5a2df --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-result/index.html @@ -0,0 +1,153 @@ + + + + + NavigationResult + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

NavigationResult

+
sealed class NavigationResult<R>

The navigation result.

Inheritors

+
+
+
+
+
+

Types

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+

Navigation was cancelled.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
data class Success<R>(val value: R) : NavigationResult<R>

The navigation has returned a result.

+
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-view.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-view.html new file mode 100644 index 0000000..c78b4f0 --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigation-view.html @@ -0,0 +1,118 @@ + + + + + NavigationView + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

NavigationView

+
+
fun NavigationView(destinations: List<NavigationDestination>, modifier: Modifier = Modifier, enterTransition: @JvmSuppressWildcards AnimatedContentTransitionScope<NavBackStackEntry>.() -> EnterTransition = { + fadeIn(animationSpec = tween(700)) + }, exitTransition: @JvmSuppressWildcards AnimatedContentTransitionScope<NavBackStackEntry>.() -> ExitTransition = { + fadeOut(animationSpec = tween(700)) + }, popEnterTransition: @JvmSuppressWildcards AnimatedContentTransitionScope<NavBackStackEntry>.() -> EnterTransition = enterTransition, popExitTransition: @JvmSuppressWildcards AnimatedContentTransitionScope<NavBackStackEntry>.() -> ExitTransition = exitTransition, sizeTransform: @JvmSuppressWildcards AnimatedContentTransitionScope<NavBackStackEntry>.() -> SizeTransform?? = null)

A navigation view allows navigating between different destinations.

Each destination may pass an argument to the next one. The argument is a Bundle.

Parameters

destinations

The list of possible destinations.

modifier

The modifier to be applied to the layout.

enterTransition

Callback to define enter transitions for destination in this host

exitTransition

Callback to define exit transitions for destination in this host

popEnterTransition

Callback to define popEnter transitions for destination in this host

popExitTransition

Callback to define popExit transitions for destination in this host

sizeTransform

Callback to define the size transform for destinations in this host

+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigator/current-destination.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigator/current-destination.html new file mode 100644 index 0000000..7be70c8 --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigator/current-destination.html @@ -0,0 +1,114 @@ + + + + + currentDestination + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

currentDestination

+
+
abstract fun currentDestination(): StateFlow<DestinationId<*, *>?>

Current destination as flow.

+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigator/index.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigator/index.html new file mode 100644 index 0000000..c68e462 --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigator/index.html @@ -0,0 +1,228 @@ + + + + + Navigator + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Navigator

+
interface Navigator

A navigation component that allows navigation between destinations.

Use Hilt injection to get an instance of this interface.

See also

Inheritors

+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
abstract fun currentDestination(): StateFlow<DestinationId<*, *>?>

Current destination as flow.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
abstract fun isInHierarchy(destination: DestinationId<*, *>): StateFlow<Boolean>

Checks whether the given destination is in the back stack.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open fun navigateTo(to: DestinationId<Unit, *>, navOptions: NavOptions? = null)
open fun navigateTo(to: DestinationId<Unit, *>, builder: NavOptionsBuilder.() -> Unit)

Requests navigation to the given destination which takes no input parameter.

abstract fun <A> navigateTo(to: DestinationId<A, *>, args: A, navOptions: NavOptions? = null)
open fun <A> navigateTo(to: DestinationId<A, *>, args: A, builder: NavOptionsBuilder.() -> Unit)

Requests navigation to the given destination. An required parameter must be passed.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
abstract fun navigateUp()

Navigates up to previous destination, or finishes the Activity.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
abstract fun <R> navigateUpWithResult(from: DestinationId<*, R>, result: R)

Navigates up to previous destination passing the given result, or finishes the Activity.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
abstract fun open(link: Uri)

Opens the given link in a browser.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
abstract fun <R> resultFrom(from: DestinationId<*, R>): Flow<NavigationResult<R>>

Creates a flow that will emit the results of the navigation from the given destination.

+
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigator/is-in-hierarchy.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigator/is-in-hierarchy.html new file mode 100644 index 0000000..ebf13f1 --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigator/is-in-hierarchy.html @@ -0,0 +1,114 @@ + + + + + isInHierarchy + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

isInHierarchy

+
+
abstract fun isInHierarchy(destination: DestinationId<*, *>): StateFlow<Boolean>

Checks whether the given destination is in the back stack.

+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigator/navigate-to.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigator/navigate-to.html new file mode 100644 index 0000000..20a3fbb --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigator/navigate-to.html @@ -0,0 +1,114 @@ + + + + + navigateTo + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

navigateTo

+
+
abstract fun <A> navigateTo(to: DestinationId<A, *>, args: A, navOptions: NavOptions? = null)

Requests navigation to the given destination. An required parameter must be passed.

Parameters

to

The destination to navigate to.

args

An optional argument to pass to the destination. The argument will be saved in SavedStateHandle, therefore it must be savable to a Bundle.

navOptions

An optional NavOptions to use for this navigation.


open fun <A> navigateTo(to: DestinationId<A, *>, args: A, builder: NavOptionsBuilder.() -> Unit)

Requests navigation to the given destination. An required parameter must be passed.

Parameters

to

The destination to navigate to.

args

An optional argument to pass to the destination. The argument will be saved in SavedStateHandle, therefore it must be savable to a Bundle.

builder

An optional NavOptions builder to use for this navigation.


open fun navigateTo(to: DestinationId<Unit, *>, navOptions: NavOptions? = null)

Requests navigation to the given destination which takes no input parameter.

Parameters

to

The destination to navigate to.

navOptions

An optional NavOptions to use for this navigation.


open fun navigateTo(to: DestinationId<Unit, *>, builder: NavOptionsBuilder.() -> Unit)

Requests navigation to the given destination which takes no input parameter.

Parameters

to

The destination to navigate to.

builder

An optional NavOptions builder to use for this navigation.

+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigator/navigate-up-with-result.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigator/navigate-up-with-result.html new file mode 100644 index 0000000..f24c6ce --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigator/navigate-up-with-result.html @@ -0,0 +1,114 @@ + + + + + navigateUpWithResult + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

navigateUpWithResult

+
+
abstract fun <R> navigateUpWithResult(from: DestinationId<*, R>, result: R)

Navigates up to previous destination passing the given result, or finishes the Activity.

Parameters

from

The destination from which navigating up.

result

The result, which will be passed to the previous destination. The returned object will be saved in SavedStateHandle, therefore it must be savable to a Bundle.

+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigator/navigate-up.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigator/navigate-up.html new file mode 100644 index 0000000..0b88f9a --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigator/navigate-up.html @@ -0,0 +1,114 @@ + + + + + navigateUp + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

navigateUp

+
+
abstract fun navigateUp()

Navigates up to previous destination, or finishes the Activity.

+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigator/open.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigator/open.html new file mode 100644 index 0000000..756a7ba --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigator/open.html @@ -0,0 +1,114 @@ + + + + + open + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

open

+
+
abstract fun open(link: Uri)

Opens the given link in a browser.

+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigator/result-from.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigator/result-from.html new file mode 100644 index 0000000..ce0a2ec --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/-navigator/result-from.html @@ -0,0 +1,114 @@ + + + + + resultFrom + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

resultFrom

+
+
abstract fun <R> resultFrom(from: DestinationId<*, R>): Flow<NavigationResult<R>>

Creates a flow that will emit the results of the navigation from the given destination.

Parameters

from

The origin destination to listen for results from.

+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/create-destination.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/create-destination.html new file mode 100644 index 0000000..384e2ee --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/create-destination.html @@ -0,0 +1,114 @@ + + + + + createDestination + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

createDestination

+
+

Helper function to create a DestinationId from a string.

Parameters

A

The argument type of the destination.

R

The return type of the destination.

+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/create-simple-destination.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/create-simple-destination.html new file mode 100644 index 0000000..1e865a8 --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/create-simple-destination.html @@ -0,0 +1,114 @@ + + + + + createSimpleDestination + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

createSimpleDestination

+
+

Helper function to create a DestinationId from a string.

The destination does not take any arguments and does not return any result.

+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/define-destination-with-inner-navigation.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/define-destination-with-inner-navigation.html new file mode 100644 index 0000000..8be8bc4 --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/define-destination-with-inner-navigation.html @@ -0,0 +1,114 @@ + + + + + defineDestinationWithInnerNavigation + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

defineDestinationWithInnerNavigation

+
+

Helper method for creating inner navigation.

Parameters

id

The destination identifier.

destinations

The list of inner destinations.

+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/define-destination.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/define-destination.html new file mode 100644 index 0000000..8cc0571 --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/define-destination.html @@ -0,0 +1,114 @@ + + + + + defineDestination + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

defineDestination

+
+

Helper method for creating a composable NavigationDestination.

Parameters

id

The destination identifier.

enterTransition

Callback to determine the destination's enter transition

exitTransition

Callback to determine the destination's exit transition

popEnterTransition

Callback to determine the destination's popEnter transition

popExitTransition

Callback to determine the destination's popExit transition

sizeTransform

Callback to determine the destination's sizeTransform.

content

The composable function that will be used to render the content.

+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/define-dialog-destination.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/define-dialog-destination.html new file mode 100644 index 0000000..7e6a376 --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/define-dialog-destination.html @@ -0,0 +1,114 @@ + + + + + defineDialogDestination + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

defineDialogDestination

+
+
fun defineDialogDestination(id: DestinationId<*, *>, dialogProperties: DialogProperties = DialogProperties(), content: @Composable () -> Unit): NavigationDestination

Helper method for creating a dialog NavigationDestination.

Parameters

id

The destination identifier.

dialogProperties

The dialog properties.

content

The composable function that will be used to render the content.

+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/get-or-null.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/get-or-null.html new file mode 100644 index 0000000..05b409f --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/get-or-null.html @@ -0,0 +1,114 @@ + + + + + getOrNull + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

getOrNull

+
+
fun <A> SavedStateHandle.getOrNull(destination: DestinationId<A?, *>): A?

Returns the argument for the current destination.

Parameters

destination

The current destination.

+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/get-state-flow.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/get-state-flow.html new file mode 100644 index 0000000..c5e2e82 --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/get-state-flow.html @@ -0,0 +1,114 @@ + + + + + getStateFlow + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

getStateFlow

+
+
fun <A> SavedStateHandle.getStateFlow(destination: DestinationId<A, *>, initial: A?): StateFlow<A?>

Returns the argument for the current destination as Flow.

Parameters

destination

The current destination.

+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/get.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/get.html new file mode 100644 index 0000000..e72cde1 --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/get.html @@ -0,0 +1,114 @@ + + + + + get + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

get

+
+
fun <A> SavedStateHandle.get(destination: DestinationId<A & Any, *>): A

Returns the argument for the current destination.

Parameters

destination

The current destination.

+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/index.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/index.html new file mode 100644 index 0000000..613fb63 --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/index.html @@ -0,0 +1,386 @@ + + + + + no.nordicsemi.android.common.navigation + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Package-level declarations

+

Set of classes and Composables to simplify navigation in a Compose application.

+
+
+
+
+
+

Types

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
data class DestinationId<A, R>(name: String)

A destination identifier.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+

A navigation view allows navigating between different destinations.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
sealed class NavigationResult<R>

The navigation result.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
interface Navigator

A navigation component that allows navigation between destinations.

+
+
+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+

Helper function to create a DestinationId from a string.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+

Helper function to create a DestinationId from a string.

+
+
+
+
+ +
+ +
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+

Helper method for creating inner navigation.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
fun defineDialogDestination(id: DestinationId<*, *>, dialogProperties: DialogProperties = DialogProperties(), content: @Composable () -> Unit): NavigationDestination

Helper method for creating a dialog NavigationDestination.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
fun <A> SavedStateHandle.get(destination: DestinationId<A & Any, *>): A

Returns the argument for the current destination.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
fun <A> SavedStateHandle.getOrNull(destination: DestinationId<A?, *>): A?

Returns the argument for the current destination.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
fun <A> SavedStateHandle.getStateFlow(destination: DestinationId<A, *>, initial: A?): StateFlow<A?>

Returns the argument for the current destination as Flow.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
fun NavigationView(destinations: List<NavigationDestination>, modifier: Modifier = Modifier, enterTransition: @JvmSuppressWildcards AnimatedContentTransitionScope<NavBackStackEntry>.() -> EnterTransition = { + fadeIn(animationSpec = tween(700)) + }, exitTransition: @JvmSuppressWildcards AnimatedContentTransitionScope<NavBackStackEntry>.() -> ExitTransition = { + fadeOut(animationSpec = tween(700)) + }, popEnterTransition: @JvmSuppressWildcards AnimatedContentTransitionScope<NavBackStackEntry>.() -> EnterTransition = enterTransition, popExitTransition: @JvmSuppressWildcards AnimatedContentTransitionScope<NavBackStackEntry>.() -> ExitTransition = exitTransition, sizeTransform: @JvmSuppressWildcards AnimatedContentTransitionScope<NavBackStackEntry>.() -> SizeTransform?? = null)

A navigation view allows navigating between different destinations.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+

Returns current emission as NavigationResult.Success if valid.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
fun NavOptionsBuilder.popUpToDestination(destination: DestinationId<*, *>, popUpToBuilder: PopUpToBuilder.() -> Unit = {})

Pop up to a given destination before navigating. This pops all non-matching destination routes from the back stack until the destination with a matching route is found.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+

Pop up to the start destination before navigating. This pops all non-matching destination routes from the back stack until the destination with a matching route is found.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+

Helper method for creating inner navigation.

+
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/only-success.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/only-success.html new file mode 100644 index 0000000..9fc5740 --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/only-success.html @@ -0,0 +1,114 @@ + + + + + onlySuccess + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

onlySuccess

+
+

Returns current emission as NavigationResult.Success if valid.

+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/pop-up-to-destination.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/pop-up-to-destination.html new file mode 100644 index 0000000..855bd2d --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/pop-up-to-destination.html @@ -0,0 +1,114 @@ + + + + + popUpToDestination + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

popUpToDestination

+
+
fun NavOptionsBuilder.popUpToDestination(destination: DestinationId<*, *>, popUpToBuilder: PopUpToBuilder.() -> Unit = {})

Pop up to a given destination before navigating. This pops all non-matching destination routes from the back stack until the destination with a matching route is found.

+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/pop-up-to-start-destination.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/pop-up-to-start-destination.html new file mode 100644 index 0000000..57c74c9 --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/pop-up-to-start-destination.html @@ -0,0 +1,114 @@ + + + + + popUpToStartDestination + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

popUpToStartDestination

+
+

Pop up to the start destination before navigating. This pops all non-matching destination routes from the back stack until the destination with a matching route is found.

+
+ +
+
+
+ + diff --git a/docs/html/navigation/no.nordicsemi.android.common.navigation/with.html b/docs/html/navigation/no.nordicsemi.android.common.navigation/with.html new file mode 100644 index 0000000..46bff96 --- /dev/null +++ b/docs/html/navigation/no.nordicsemi.android.common.navigation/with.html @@ -0,0 +1,114 @@ + + + + + with + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

with

+
+

Helper method for creating inner navigation.

+
+ +
+
+
+ + diff --git a/docs/html/package-list b/docs/html/package-list new file mode 100644 index 0000000..c8792a1 --- /dev/null +++ b/docs/html/package-list @@ -0,0 +1,28 @@ +$dokka.format:html-v1 +$dokka.linkExtension:html + +module:analytics +no.nordicsemi.android.common.analytics +no.nordicsemi.android.common.analytics.view +module:core +no.nordicsemi.android.common.core +module:logger +no.nordicsemi.android.common.logger +no.nordicsemi.android.common.logger.view +module:navigation +no.nordicsemi.android.common.navigation +no.nordicsemi.android.common.navigation.viewmodel +module:permissions-ble +no.nordicsemi.android.common.permissions.ble +module:permissions-internet +no.nordicsemi.android.common.permissions.internet +module:permissions-nfc +no.nordicsemi.android.common.permissions.nfc +module:permissions-notification +no.nordicsemi.android.common.permissions.notification +module:permissions-wifi +no.nordicsemi.android.common.permissions.wifi +module:theme +no.nordicsemi.android.common.theme +module:ui +no.nordicsemi.android.common.ui.view diff --git a/docs/html/permissions-ble/index.html b/docs/html/permissions-ble/index.html new file mode 100644 index 0000000..017c88f --- /dev/null +++ b/docs/html/permissions-ble/index.html @@ -0,0 +1,136 @@ + + + + + permissions-ble + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

permissions-ble

+

Common views for displaying content that requires Bluetooth scanning or connecting.

+
+

Packages

+
+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+

This package contains wrappers for views that require Bluetooth and Location.

+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/permissions-ble/navigation.html b/docs/html/permissions-ble/navigation.html new file mode 100644 index 0000000..61fb8f5 --- /dev/null +++ b/docs/html/permissions-ble/navigation.html @@ -0,0 +1,662 @@ +
+ +
+
+ core +
+
+ +
+ +
+ + +
+
+ map() +
+
+
+ +
+ + +
+
+ + + + + + + +
+
+ theme +
+
+ +
+ +
+
+ Companion +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+
+ nordicRed +
+
+
+
+ nordicSky +
+
+
+
+ nordicSun +
+
+
+ +
+ +
+
+
+
+ ui +
+
+ +
+ +
+
+ +
+ + + + + + + +
+ +
+ +
+ +
+ + +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ DISABLED +
+
+
+
+ WORKING +
+
+
+
+ SUCCESS +
+
+
+
+ ERROR +
+
+
+ +
+ +
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ Action +
+
+ +
+ +
+ +
+
+ INACTIVE +
+
+
+
+ CURRENT +
+
+
+
+ COMPLETED +
+
+
+
+
+
diff --git a/docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-ble-permission-not-available-reason/-d-i-s-a-b-l-e-d/index.html b/docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-ble-permission-not-available-reason/-d-i-s-a-b-l-e-d/index.html new file mode 100644 index 0000000..efe745e --- /dev/null +++ b/docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-ble-permission-not-available-reason/-d-i-s-a-b-l-e-d/index.html @@ -0,0 +1,153 @@ + + + + + DISABLED + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

DISABLED

+

Bluetooth is disabled.

+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-ble-permission-not-available-reason/-n-o-t_-a-v-a-i-l-a-b-l-e/index.html b/docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-ble-permission-not-available-reason/-n-o-t_-a-v-a-i-l-a-b-l-e/index.html new file mode 100644 index 0000000..6402427 --- /dev/null +++ b/docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-ble-permission-not-available-reason/-n-o-t_-a-v-a-i-l-a-b-l-e/index.html @@ -0,0 +1,153 @@ + + + + + NOT_AVAILABLE + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

NOT_AVAILABLE

+

Bluetooth is not available on this device.

+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-ble-permission-not-available-reason/-p-e-r-m-i-s-s-i-o-n_-r-e-q-u-i-r-e-d/index.html b/docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-ble-permission-not-available-reason/-p-e-r-m-i-s-s-i-o-n_-r-e-q-u-i-r-e-d/index.html new file mode 100644 index 0000000..26cf9de --- /dev/null +++ b/docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-ble-permission-not-available-reason/-p-e-r-m-i-s-s-i-o-n_-r-e-q-u-i-r-e-d/index.html @@ -0,0 +1,153 @@ + + + + + PERMISSION_REQUIRED + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

PERMISSION_REQUIRED

+

Bluetooth Scan permission is required.

+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-ble-permission-not-available-reason/entries.html b/docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-ble-permission-not-available-reason/entries.html new file mode 100644 index 0000000..eeb74e8 --- /dev/null +++ b/docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-ble-permission-not-available-reason/entries.html @@ -0,0 +1,114 @@ + + + + + entries + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

entries

+
+

Returns a representation of an immutable list of all enum entries, in the order they're declared.

This method may be used to iterate over the enum entries.

+
+ +
+
+
+ + diff --git a/docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-ble-permission-not-available-reason/index.html b/docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-ble-permission-not-available-reason/index.html new file mode 100644 index 0000000..eb4c082 --- /dev/null +++ b/docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-ble-permission-not-available-reason/index.html @@ -0,0 +1,251 @@ + + + + + BlePermissionNotAvailableReason + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

BlePermissionNotAvailableReason

+

The reason why the BLE permission is not available.

+
+
+
+
+
+

Entries

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+

Bluetooth Scan permission is required.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+

Bluetooth is not available on this device.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+

Bluetooth is disabled.

+
+
+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+

Returns a representation of an immutable list of all enum entries, in the order they're declared.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+

Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+

Returns an array containing the constants of this enum type, in the order they're declared.

+
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-ble-permission-not-available-reason/value-of.html b/docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-ble-permission-not-available-reason/value-of.html new file mode 100644 index 0000000..de898e2 --- /dev/null +++ b/docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-ble-permission-not-available-reason/value-of.html @@ -0,0 +1,114 @@ + + + + + valueOf + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

valueOf

+
+

Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)

Throws

if this enum type has no constant with the specified name

+
+ +
+
+
+ + diff --git a/docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-ble-permission-not-available-reason/values.html b/docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-ble-permission-not-available-reason/values.html new file mode 100644 index 0000000..1e7e7a3 --- /dev/null +++ b/docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-ble-permission-not-available-reason/values.html @@ -0,0 +1,114 @@ + + + + + values + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

values

+
+

Returns an array containing the constants of this enum type, in the order they're declared.

This method may be used to iterate over the constants.

+
+ +
+
+
+ + diff --git a/docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-require-bluetooth.html b/docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-require-bluetooth.html new file mode 100644 index 0000000..0f6920f --- /dev/null +++ b/docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-require-bluetooth.html @@ -0,0 +1,116 @@ + + + + + RequireBluetooth + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

RequireBluetooth

+
+
fun RequireBluetooth(onChanged: (Boolean) -> Unit = {}, contentWithoutBluetooth: @Composable (BlePermissionNotAvailableReason) -> Unit = { + NoBluetoothView(reason = it) + }, content: @Composable () -> Unit)

A wrapper for composables that require Bluetooth.

This composable will display a view based on the Bluetooth state and permissions.

On Android 12+ it will require BLUETOOTH_SCAN, BLUETOOTH_CONNECT and BLUETOOTH_ADVERTISE permission to be granted and will show a view allowing requesting them.

Example:

RequireBluetooth(
onChanged = { onScanningStateChanged(it) }
) {
RequireLocation(
onChanged = { onScanningStateChanged(it) }
) {
// Bluetooth scanner views
}
}

Parameters

onChanged

A callback that will be called when the state of the Bluetooth changes.

contentWithoutBluetooth

A composable that will be displayed when Bluetooth is not available.

content

A composable that will be displayed when Bluetooth is available.

See also

+
+ +
+
+
+ + diff --git a/docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-require-location.html b/docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-require-location.html new file mode 100644 index 0000000..9813ca3 --- /dev/null +++ b/docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/-require-location.html @@ -0,0 +1,114 @@ + + + + + RequireLocation + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

RequireLocation

+
+
fun RequireLocation(onChanged: (Boolean) -> Unit = {}, contentWithoutLocation: @Composable () -> Unit = { LocationPermissionRequiredView() }, content: @Composable (isLocationRequiredAndDisabled: Boolean) -> Unit)

A wrapper for composables that require Location.

Location is required for Bluetooth LE scanning from Android 6 Marshmallow. Starting from Android 12 location may not be required if BLUETOOTH_SCAN permission was requested with neverForLocation flag.

This composable will display a view based on the state of the location.

Example:

RequireBluetooth(
onChanged = { onScanningStateChanged(it) }
) {
RequireLocation(
onChanged = { onScanningStateChanged(it) }
) {
// Bluetooth scanner views
}
}

Parameters

onChanged

A callback that will be called when the state of the location changes.

contentWithoutLocation

A composable that will be displayed when location is not available.

content

A composable that will be displayed when location is available.

+
+ +
+
+
+ + diff --git a/docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/index.html b/docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/index.html new file mode 100644 index 0000000..a595e1e --- /dev/null +++ b/docs/html/permissions-ble/no.nordicsemi.android.common.permissions.ble/index.html @@ -0,0 +1,174 @@ + + + + + no.nordicsemi.android.common.permissions.ble + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Package-level declarations

+

This package contains wrappers for views that require Bluetooth and Location.

+
+
+
+
+
+

Types

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+

The reason why the BLE permission is not available.

+
+
+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
fun RequireBluetooth(onChanged: (Boolean) -> Unit = {}, contentWithoutBluetooth: @Composable (BlePermissionNotAvailableReason) -> Unit = { + NoBluetoothView(reason = it) + }, content: @Composable () -> Unit)

A wrapper for composables that require Bluetooth.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
fun RequireLocation(onChanged: (Boolean) -> Unit = {}, contentWithoutLocation: @Composable () -> Unit = { LocationPermissionRequiredView() }, content: @Composable (isLocationRequiredAndDisabled: Boolean) -> Unit)

A wrapper for composables that require Location.

+
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/permissions-internet/index.html b/docs/html/permissions-internet/index.html new file mode 100644 index 0000000..7e26fef --- /dev/null +++ b/docs/html/permissions-internet/index.html @@ -0,0 +1,136 @@ + + + + + permissions-internet + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

permissions-internet

+

Common views for displaying content that requires Internet.

+
+

Packages

+
+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+

This package contains a wrapper for views which require Internet.

+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/permissions-internet/navigation.html b/docs/html/permissions-internet/navigation.html new file mode 100644 index 0000000..61fb8f5 --- /dev/null +++ b/docs/html/permissions-internet/navigation.html @@ -0,0 +1,662 @@ +
+ +
+
+ core +
+
+ +
+ +
+ + +
+
+ map() +
+
+
+ +
+ + +
+
+ + + + + + + +
+
+ theme +
+
+ +
+ +
+
+ Companion +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+
+ nordicRed +
+
+
+
+ nordicSky +
+
+
+
+ nordicSun +
+
+
+ +
+ +
+
+
+
+ ui +
+
+ +
+ +
+
+ +
+ + + + + + + +
+ +
+ +
+ +
+ + +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ DISABLED +
+
+
+
+ WORKING +
+
+
+
+ SUCCESS +
+
+
+
+ ERROR +
+
+
+ +
+ +
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ Action +
+
+ +
+ +
+ +
+
+ INACTIVE +
+
+
+
+ CURRENT +
+
+
+
+ COMPLETED +
+
+
+
+
+
diff --git a/docs/html/permissions-internet/no.nordicsemi.android.common.permissions.internet/-require-internet.html b/docs/html/permissions-internet/no.nordicsemi.android.common.permissions.internet/-require-internet.html new file mode 100644 index 0000000..a692eba --- /dev/null +++ b/docs/html/permissions-internet/no.nordicsemi.android.common.permissions.internet/-require-internet.html @@ -0,0 +1,114 @@ + + + + + RequireInternet + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

RequireInternet

+
+
fun RequireInternet(onChanged: (Boolean) -> Unit = {}, contentWithoutInternet: @Composable () -> Unit = { InternetNotAvailableView() }, content: @Composable () -> Unit)

A wrapper for composables that require Internet.

Example:

RequireBluetooth(
onChanged = { enabled ->
// Handle Internet state change
}
) {
// Your content
}

Parameters

onChanged

A callback that will be called when the state of the internet changes.

contentWithoutInternet

A composable that will be displayed when internet is not available.

content

A composable that will be displayed when internet is available.

+
+ +
+
+
+ + diff --git a/docs/html/permissions-internet/no.nordicsemi.android.common.permissions.internet/index.html b/docs/html/permissions-internet/no.nordicsemi.android.common.permissions.internet/index.html new file mode 100644 index 0000000..a3266fc --- /dev/null +++ b/docs/html/permissions-internet/no.nordicsemi.android.common.permissions.internet/index.html @@ -0,0 +1,138 @@ + + + + + no.nordicsemi.android.common.permissions.internet + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Package-level declarations

+

This package contains a wrapper for views which require Internet.

+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
fun RequireInternet(onChanged: (Boolean) -> Unit = {}, contentWithoutInternet: @Composable () -> Unit = { InternetNotAvailableView() }, content: @Composable () -> Unit)

A wrapper for composables that require Internet.

+
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/permissions-nfc/index.html b/docs/html/permissions-nfc/index.html new file mode 100644 index 0000000..3e66a25 --- /dev/null +++ b/docs/html/permissions-nfc/index.html @@ -0,0 +1,136 @@ + + + + + permissions-nfc + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

permissions-nfc

+

Common views for displaying content that requires NFC.

+
+

Packages

+
+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+

This package contains a wrapper for views which require NFC.

+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/permissions-nfc/navigation.html b/docs/html/permissions-nfc/navigation.html new file mode 100644 index 0000000..61fb8f5 --- /dev/null +++ b/docs/html/permissions-nfc/navigation.html @@ -0,0 +1,662 @@ +
+ +
+
+ core +
+
+ +
+ +
+ + +
+
+ map() +
+
+
+ +
+ + +
+
+ + + + + + + +
+
+ theme +
+
+ +
+ +
+
+ Companion +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+
+ nordicRed +
+
+
+
+ nordicSky +
+
+
+
+ nordicSun +
+
+
+ +
+ +
+
+
+
+ ui +
+
+ +
+ +
+
+ +
+ + + + + + + +
+ +
+ +
+ +
+ + +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ DISABLED +
+
+
+
+ WORKING +
+
+
+
+ SUCCESS +
+
+
+
+ ERROR +
+
+
+ +
+ +
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ Action +
+
+ +
+ +
+ +
+
+ INACTIVE +
+
+
+
+ CURRENT +
+
+
+
+ COMPLETED +
+
+
+
+
+
diff --git a/docs/html/permissions-nfc/no.nordicsemi.android.common.permissions.nfc/-nfc-not-available-reason/-d-i-s-a-b-l-e-d/index.html b/docs/html/permissions-nfc/no.nordicsemi.android.common.permissions.nfc/-nfc-not-available-reason/-d-i-s-a-b-l-e-d/index.html new file mode 100644 index 0000000..ad1dbb3 --- /dev/null +++ b/docs/html/permissions-nfc/no.nordicsemi.android.common.permissions.nfc/-nfc-not-available-reason/-d-i-s-a-b-l-e-d/index.html @@ -0,0 +1,153 @@ + + + + + DISABLED + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

DISABLED

+

NFC is disabled in the system settings.

+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/permissions-nfc/no.nordicsemi.android.common.permissions.nfc/-nfc-not-available-reason/-n-o-t_-a-v-a-i-l-a-b-l-e/index.html b/docs/html/permissions-nfc/no.nordicsemi.android.common.permissions.nfc/-nfc-not-available-reason/-n-o-t_-a-v-a-i-l-a-b-l-e/index.html new file mode 100644 index 0000000..9a4223d --- /dev/null +++ b/docs/html/permissions-nfc/no.nordicsemi.android.common.permissions.nfc/-nfc-not-available-reason/-n-o-t_-a-v-a-i-l-a-b-l-e/index.html @@ -0,0 +1,153 @@ + + + + + NOT_AVAILABLE + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

NOT_AVAILABLE

+

NFC is not available on this device.

+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/permissions-nfc/no.nordicsemi.android.common.permissions.nfc/-nfc-not-available-reason/entries.html b/docs/html/permissions-nfc/no.nordicsemi.android.common.permissions.nfc/-nfc-not-available-reason/entries.html new file mode 100644 index 0000000..20fb3ec --- /dev/null +++ b/docs/html/permissions-nfc/no.nordicsemi.android.common.permissions.nfc/-nfc-not-available-reason/entries.html @@ -0,0 +1,114 @@ + + + + + entries + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

entries

+
+

Returns a representation of an immutable list of all enum entries, in the order they're declared.

This method may be used to iterate over the enum entries.

+
+ +
+
+
+ + diff --git a/docs/html/permissions-nfc/no.nordicsemi.android.common.permissions.nfc/-nfc-not-available-reason/index.html b/docs/html/permissions-nfc/no.nordicsemi.android.common.permissions.nfc/-nfc-not-available-reason/index.html new file mode 100644 index 0000000..1b2c26a --- /dev/null +++ b/docs/html/permissions-nfc/no.nordicsemi.android.common.permissions.nfc/-nfc-not-available-reason/index.html @@ -0,0 +1,236 @@ + + + + + NfcNotAvailableReason + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

NfcNotAvailableReason

+

Reason why NFC is not available.

+
+
+
+
+
+

Entries

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+

NFC is not available on this device.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+

NFC is disabled in the system settings.

+
+
+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+

Returns a representation of an immutable list of all enum entries, in the order they're declared.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+

Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+

Returns an array containing the constants of this enum type, in the order they're declared.

+
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/permissions-nfc/no.nordicsemi.android.common.permissions.nfc/-nfc-not-available-reason/value-of.html b/docs/html/permissions-nfc/no.nordicsemi.android.common.permissions.nfc/-nfc-not-available-reason/value-of.html new file mode 100644 index 0000000..e26f848 --- /dev/null +++ b/docs/html/permissions-nfc/no.nordicsemi.android.common.permissions.nfc/-nfc-not-available-reason/value-of.html @@ -0,0 +1,114 @@ + + + + + valueOf + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

valueOf

+
+

Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)

Throws

if this enum type has no constant with the specified name

+
+ +
+
+
+ + diff --git a/docs/html/permissions-nfc/no.nordicsemi.android.common.permissions.nfc/-nfc-not-available-reason/values.html b/docs/html/permissions-nfc/no.nordicsemi.android.common.permissions.nfc/-nfc-not-available-reason/values.html new file mode 100644 index 0000000..27f37d8 --- /dev/null +++ b/docs/html/permissions-nfc/no.nordicsemi.android.common.permissions.nfc/-nfc-not-available-reason/values.html @@ -0,0 +1,114 @@ + + + + + values + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

values

+
+

Returns an array containing the constants of this enum type, in the order they're declared.

This method may be used to iterate over the constants.

+
+ +
+
+
+ + diff --git a/docs/html/permissions-nfc/no.nordicsemi.android.common.permissions.nfc/-require-nfc.html b/docs/html/permissions-nfc/no.nordicsemi.android.common.permissions.nfc/-require-nfc.html new file mode 100644 index 0000000..b036577 --- /dev/null +++ b/docs/html/permissions-nfc/no.nordicsemi.android.common.permissions.nfc/-require-nfc.html @@ -0,0 +1,116 @@ + + + + + RequireNfc + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

RequireNfc

+
+
fun RequireNfc(onChanged: (Boolean) -> Unit = {}, contentWithoutNfc: @Composable (NfcNotAvailableReason) -> Unit = { + NoNfcView(reason = it) + }, content: @Composable () -> Unit)

A wrapper for composables that require Bluetooth.

Example:

RequireNfc(
onChange = { enabled ->
//..
},
contentWithoutNfc = { reason ->
Text("NFC is not available: $reason")
},
) {
Text("NFC is available")
}

Parameters

onChanged

A callback that will be called when the state of the NFC changes.

contentWithoutNfc

A composable that will be displayed when NFC is not available.

content

A composable that will be displayed when NFC is available.

+
+ +
+
+
+ + diff --git a/docs/html/permissions-nfc/no.nordicsemi.android.common.permissions.nfc/index.html b/docs/html/permissions-nfc/no.nordicsemi.android.common.permissions.nfc/index.html new file mode 100644 index 0000000..b8706bc --- /dev/null +++ b/docs/html/permissions-nfc/no.nordicsemi.android.common.permissions.nfc/index.html @@ -0,0 +1,159 @@ + + + + + no.nordicsemi.android.common.permissions.nfc + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Package-level declarations

+

This package contains a wrapper for views which require NFC.

+
+
+
+
+
+

Types

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+

Reason why NFC is not available.

+
+
+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
fun RequireNfc(onChanged: (Boolean) -> Unit = {}, contentWithoutNfc: @Composable (NfcNotAvailableReason) -> Unit = { + NoNfcView(reason = it) + }, content: @Composable () -> Unit)

A wrapper for composables that require Bluetooth.

+
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/permissions-notification/index.html b/docs/html/permissions-notification/index.html new file mode 100644 index 0000000..2ff1d00 --- /dev/null +++ b/docs/html/permissions-notification/index.html @@ -0,0 +1,136 @@ + + + + + permissions-notification + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

permissions-notification

+

Common views for requesting POST_NOTIFICATIONS permission.

On Android 13+ (API 33+) the NotificationManager requires a permission to show notifications. This module provides a wrapper which will automatically request the permission.

The content is shown in any case.

+
+

Packages

+
+
+
+
+ +
+
+ +
+
+
+
+

This package contains a wrapper for views that automatically request POST_NOTIFICATIONS permission on Android 13+.

+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/permissions-notification/navigation.html b/docs/html/permissions-notification/navigation.html new file mode 100644 index 0000000..61fb8f5 --- /dev/null +++ b/docs/html/permissions-notification/navigation.html @@ -0,0 +1,662 @@ +
+ +
+
+ core +
+
+ +
+ +
+ + +
+
+ map() +
+
+
+ +
+ + +
+
+ + + + + + + +
+
+ theme +
+
+ +
+ +
+
+ Companion +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+
+ nordicRed +
+
+
+
+ nordicSky +
+
+
+
+ nordicSun +
+
+
+ +
+ +
+
+
+
+ ui +
+
+ +
+ +
+
+ +
+ + + + + + + +
+ +
+ +
+ +
+ + +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ DISABLED +
+
+
+
+ WORKING +
+
+
+
+ SUCCESS +
+
+
+
+ ERROR +
+
+
+ +
+ +
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ Action +
+
+ +
+ +
+ +
+
+ INACTIVE +
+
+
+
+ CURRENT +
+
+
+
+ COMPLETED +
+
+
+
+
+
diff --git a/docs/html/permissions-notification/no.nordicsemi.android.common.permissions.notification/-request-notification-permission.html b/docs/html/permissions-notification/no.nordicsemi.android.common.permissions.notification/-request-notification-permission.html new file mode 100644 index 0000000..57d3080 --- /dev/null +++ b/docs/html/permissions-notification/no.nordicsemi.android.common.permissions.notification/-request-notification-permission.html @@ -0,0 +1,114 @@ + + + + + RequestNotificationPermission + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

RequestNotificationPermission

+
+
fun RequestNotificationPermission(onChanged: (Boolean) -> Unit = {}, content: @Composable (Boolean) -> Unit)

A wrapper for composables that show notifications to the user.

This composable will request the notification permission if needed.

Content is displayed in any case and the state of the permission is given as a parameter.

Example:

RequestNotificationPermission(
onChanged = { granted ->
// Handle notification state change
}
) { canShowNotifications ->
// Your content
}

Parameters

onChanged

A callback that will be called when the state of the notification changes.

content

The content to display. The parameter is true if the notification permission is granted or not required, false otherwise.

+
+ +
+
+
+ + diff --git a/docs/html/permissions-notification/no.nordicsemi.android.common.permissions.notification/index.html b/docs/html/permissions-notification/no.nordicsemi.android.common.permissions.notification/index.html new file mode 100644 index 0000000..1c13f93 --- /dev/null +++ b/docs/html/permissions-notification/no.nordicsemi.android.common.permissions.notification/index.html @@ -0,0 +1,138 @@ + + + + + no.nordicsemi.android.common.permissions.notification + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Package-level declarations

+

This package contains a wrapper for views that automatically request POST_NOTIFICATIONS permission on Android 13+.

+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
fun RequestNotificationPermission(onChanged: (Boolean) -> Unit = {}, content: @Composable (Boolean) -> Unit)

A wrapper for composables that show notifications to the user.

+
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/permissions-wifi/index.html b/docs/html/permissions-wifi/index.html new file mode 100644 index 0000000..db0ece2 --- /dev/null +++ b/docs/html/permissions-wifi/index.html @@ -0,0 +1,136 @@ + + + + + permissions-wifi + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

permissions-wifi

+

Common views for displaying content that requires Wi-Fi.

+
+

Packages

+
+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+

This package contains a wrapper for views which require Wi-Fi and Location for scanning for Wi-Fi networks.

+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/permissions-wifi/navigation.html b/docs/html/permissions-wifi/navigation.html new file mode 100644 index 0000000..61fb8f5 --- /dev/null +++ b/docs/html/permissions-wifi/navigation.html @@ -0,0 +1,662 @@ +
+ +
+
+ core +
+
+ +
+ +
+ + +
+
+ map() +
+
+
+ +
+ + +
+
+ + + + + + + +
+
+ theme +
+
+ +
+ +
+
+ Companion +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+
+ nordicRed +
+
+
+
+ nordicSky +
+
+
+
+ nordicSun +
+
+
+ +
+ +
+
+
+
+ ui +
+
+ +
+ +
+
+ +
+ + + + + + + +
+ +
+ +
+ +
+ + +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ DISABLED +
+
+
+
+ WORKING +
+
+
+
+ SUCCESS +
+
+
+
+ ERROR +
+
+
+ +
+ +
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ Action +
+
+ +
+ +
+ +
+
+ INACTIVE +
+
+
+
+ CURRENT +
+
+
+
+ COMPLETED +
+
+
+
+
+
diff --git a/docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-require-location-for-wi-fi.html b/docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-require-location-for-wi-fi.html new file mode 100644 index 0000000..4c0816f --- /dev/null +++ b/docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-require-location-for-wi-fi.html @@ -0,0 +1,119 @@ + + + + + RequireLocationForWiFi + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

RequireLocationForWiFi

+
+
fun RequireLocationForWiFi(onChanged: (Boolean) -> Unit = {}, contentWithoutLocation: @Composable (WiFiPermissionNotAvailableReason) -> Unit = { reason -> + when (reason) { + WiFiPermissionNotAvailableReason.DISABLED -> LocationDisabledView() + else -> LocationPermissionRequiredView() + } + }, content: @Composable () -> Unit)

A wrapper for composables that require location permission for Wi-Fi scanning.

This composable will request the location permission if needed.

Parameters

onChanged

A callback that will be called when the permission state changes.

contentWithoutLocation

A composable that will be displayed when the location permission is not available.

content

A composable that will be displayed when the location permission is available.

+
+ +
+
+
+ + diff --git a/docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-require-wi-fi.html b/docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-require-wi-fi.html new file mode 100644 index 0000000..a6cc6ac --- /dev/null +++ b/docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-require-wi-fi.html @@ -0,0 +1,116 @@ + + + + + RequireWiFi + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

RequireWiFi

+
+
fun RequireWiFi(isNearbyWifiDevicesPermissionRequired: Boolean, onChanged: (Boolean) -> Unit = {}, contentWithoutWifi: @Composable (WiFiPermissionNotAvailableReason) -> Unit = { + NoWiFiView(reason = it) + }, content: @Composable () -> Unit)

Composable that requests Wi-Fi permission.

Parameters

isNearbyWifiDevicesPermissionRequired

If true, contentWithoutWifi shall request for Wi-Fi permission and if set to false, contentWithoutWifi shall request Wi-Fi to be enabled.

onChanged

Callback that is called when the Wi-Fi state changes.

contentWithoutWifi

The content to display when Wi-Fi is not available.

content

The content to display when Wi-Fi is available.

+
+ +
+
+
+ + diff --git a/docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-wi-fi-permission-not-available-reason/-d-i-s-a-b-l-e-d/index.html b/docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-wi-fi-permission-not-available-reason/-d-i-s-a-b-l-e-d/index.html new file mode 100644 index 0000000..ad7b965 --- /dev/null +++ b/docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-wi-fi-permission-not-available-reason/-d-i-s-a-b-l-e-d/index.html @@ -0,0 +1,153 @@ + + + + + DISABLED + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

DISABLED

+ +
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-wi-fi-permission-not-available-reason/-n-o-t_-a-v-a-i-l-a-b-l-e/index.html b/docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-wi-fi-permission-not-available-reason/-n-o-t_-a-v-a-i-l-a-b-l-e/index.html new file mode 100644 index 0000000..21d135b --- /dev/null +++ b/docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-wi-fi-permission-not-available-reason/-n-o-t_-a-v-a-i-l-a-b-l-e/index.html @@ -0,0 +1,153 @@ + + + + + NOT_AVAILABLE + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

NOT_AVAILABLE

+ +
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-wi-fi-permission-not-available-reason/-p-e-r-m-i-s-s-i-o-n_-r-e-q-u-i-r-e-d/index.html b/docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-wi-fi-permission-not-available-reason/-p-e-r-m-i-s-s-i-o-n_-r-e-q-u-i-r-e-d/index.html new file mode 100644 index 0000000..6a9cb08 --- /dev/null +++ b/docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-wi-fi-permission-not-available-reason/-p-e-r-m-i-s-s-i-o-n_-r-e-q-u-i-r-e-d/index.html @@ -0,0 +1,153 @@ + + + + + PERMISSION_REQUIRED + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

PERMISSION_REQUIRED

+ +
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-wi-fi-permission-not-available-reason/entries.html b/docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-wi-fi-permission-not-available-reason/entries.html new file mode 100644 index 0000000..5187e5d --- /dev/null +++ b/docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-wi-fi-permission-not-available-reason/entries.html @@ -0,0 +1,114 @@ + + + + + entries + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

entries

+
+

Returns a representation of an immutable list of all enum entries, in the order they're declared.

This method may be used to iterate over the enum entries.

+
+ +
+
+
+ + diff --git a/docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-wi-fi-permission-not-available-reason/index.html b/docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-wi-fi-permission-not-available-reason/index.html new file mode 100644 index 0000000..befa498 --- /dev/null +++ b/docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-wi-fi-permission-not-available-reason/index.html @@ -0,0 +1,251 @@ + + + + + WiFiPermissionNotAvailableReason + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

WiFiPermissionNotAvailableReason

+

Represents the reason for Wi-Fi permission is not available.

+
+
+
+
+
+

Entries

+
+
+
+
+ + +
Link copied to clipboard
+
+ +
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+ +
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+

Returns a representation of an immutable list of all enum entries, in the order they're declared.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+

Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+

Returns an array containing the constants of this enum type, in the order they're declared.

+
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-wi-fi-permission-not-available-reason/value-of.html b/docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-wi-fi-permission-not-available-reason/value-of.html new file mode 100644 index 0000000..b5e8078 --- /dev/null +++ b/docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-wi-fi-permission-not-available-reason/value-of.html @@ -0,0 +1,114 @@ + + + + + valueOf + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

valueOf

+
+

Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)

Throws

if this enum type has no constant with the specified name

+
+ +
+
+
+ + diff --git a/docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-wi-fi-permission-not-available-reason/values.html b/docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-wi-fi-permission-not-available-reason/values.html new file mode 100644 index 0000000..5e92dba --- /dev/null +++ b/docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/-wi-fi-permission-not-available-reason/values.html @@ -0,0 +1,114 @@ + + + + + values + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

values

+
+

Returns an array containing the constants of this enum type, in the order they're declared.

This method may be used to iterate over the constants.

+
+ +
+
+
+ + diff --git a/docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/index.html b/docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/index.html new file mode 100644 index 0000000..bc3570d --- /dev/null +++ b/docs/html/permissions-wifi/no.nordicsemi.android.common.permissions.wifi/index.html @@ -0,0 +1,179 @@ + + + + + no.nordicsemi.android.common.permissions.wifi + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Package-level declarations

+

This package contains a wrapper for views which require Wi-Fi and Location for scanning for Wi-Fi networks.

+
+
+
+
+
+

Types

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+

Represents the reason for Wi-Fi permission is not available.

+
+
+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
fun RequireLocationForWiFi(onChanged: (Boolean) -> Unit = {}, contentWithoutLocation: @Composable (WiFiPermissionNotAvailableReason) -> Unit = { reason -> + when (reason) { + WiFiPermissionNotAvailableReason.DISABLED -> LocationDisabledView() + else -> LocationPermissionRequiredView() + } + }, content: @Composable () -> Unit)

A wrapper for composables that require location permission for Wi-Fi scanning.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
fun RequireWiFi(isNearbyWifiDevicesPermissionRequired: Boolean, onChanged: (Boolean) -> Unit = {}, contentWithoutWifi: @Composable (WiFiPermissionNotAvailableReason) -> Unit = { + NoWiFiView(reason = it) + }, content: @Composable () -> Unit)

Composable that requests Wi-Fi permission.

+
+
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/html/scripts/clipboard.js b/docs/html/scripts/clipboard.js new file mode 100644 index 0000000..b6b118e --- /dev/null +++ b/docs/html/scripts/clipboard.js @@ -0,0 +1,56 @@ +/* + * Copyright 2014-2024 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. + */ + +window.addEventListener('load', () => { + document.querySelectorAll('span.copy-icon').forEach(element => { + element.addEventListener('click', (el) => copyElementsContentToClipboard(element)); + }) + + document.querySelectorAll('span.anchor-icon').forEach(element => { + element.addEventListener('click', (el) => { + if(element.hasAttribute('pointing-to')){ + const location = hrefWithoutCurrentlyUsedAnchor() + '#' + element.getAttribute('pointing-to') + copyTextToClipboard(element, location) + } + }); + }) +}) + +const copyElementsContentToClipboard = (element) => { + const selection = window.getSelection(); + const range = document.createRange(); + range.selectNodeContents(element.parentNode.parentNode); + selection.removeAllRanges(); + selection.addRange(range); + + copyAndShowPopup(element, () => selection.removeAllRanges()) +} + +const copyTextToClipboard = (element, text) => { + var textarea = document.createElement("textarea"); + textarea.textContent = text; + textarea.style.position = "fixed"; + document.body.appendChild(textarea); + textarea.select(); + + copyAndShowPopup(element, () => document.body.removeChild(textarea)) +} + +const copyAndShowPopup = (element, after) => { + try { + document.execCommand('copy'); + element.nextElementSibling.classList.add('active-popup'); + setTimeout(() => { + element.nextElementSibling.classList.remove('active-popup'); + }, 1200); + } catch (e) { + console.error('Failed to write to clipboard:', e) + } + finally { + if(after) after() + } +} + +const hrefWithoutCurrentlyUsedAnchor = () => window.location.href.split('#')[0] + diff --git a/docs/html/scripts/main.js b/docs/html/scripts/main.js new file mode 100644 index 0000000..9038284 --- /dev/null +++ b/docs/html/scripts/main.js @@ -0,0 +1,53 @@ +(()=>{var e={1817:e=>{e.exports=''},4811:e=>{e.exports=''},5742:e=>{e.exports=''},7112:e=>{e.exports=''},8420:e=>{e.exports=''},7004:e=>{e.exports=''},7222:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>u});var r=t(1404),o=t.n(r),i=t(7156),a=t.n(i),l=t(5280),c=a()(o());c.i(l.A),c.push([e.id,'.avatar_d716 {\n display: inline-block;\n -o-object-fit: cover;\n object-fit: cover;\n -o-object-position: center;\n object-position: center;\n\n /* This is a "graceful degradation" fallback, while the real value is controlled by JS */\n\n border-radius: var(--ring-border-radius);\n}\n\n.subavatar_b10d {\n position: absolute;\n top: 15px;\n left: 27px;\n\n border: 1px var(--ring-content-background-color) solid;\n}\n\n.empty_a151 {\n display: inline-block;\n\n box-sizing: border-box;\n\n border: 1px solid var(--ring-borders-color);\n}\n',"",{version:3,sources:["webpack://./node_modules/@jetbrains/ring-ui/components/avatar/avatar.css"],names:[],mappings:"AAEA;EACE,qBAAqB;EACrB,oBAAiB;KAAjB,iBAAiB;EACjB,0BAAuB;KAAvB,uBAAuB;;EAEvB,wFAAwF;;EAExF,wCAAwC;AAC1C;;AAEA;EACE,kBAAkB;EAClB,SAAS;EACT,UAAU;;EAEV,sDAAsD;AACxD;;AAEA;EACE,qBAAqB;;EAErB,sBAAsB;;EAEtB,2CAA2C;AAC7C",sourcesContent:['@import "../global/variables.css";\n\n.avatar {\n display: inline-block;\n object-fit: cover;\n object-position: center;\n\n /* This is a "graceful degradation" fallback, while the real value is controlled by JS */\n\n border-radius: var(--ring-border-radius);\n}\n\n.subavatar {\n position: absolute;\n top: 15px;\n left: 27px;\n\n border: 1px var(--ring-content-background-color) solid;\n}\n\n.empty {\n display: inline-block;\n\n box-sizing: border-box;\n\n border: 1px solid var(--ring-borders-color);\n}\n'],sourceRoot:""}]),c.locals={avatar:"avatar_d716",subavatar:"subavatar_b10d",empty:"empty_a151"};const u=c},9892:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>s});var r=t(1404),o=t.n(r),i=t(7156),a=t.n(i),l=t(9106),c=t(5280),u=a()(o());u.i(c.A),u.i(l.default,"",!0),u.push([e.id,'.heightS_b28d {\n --ring-button-height: 24px;\n --ring-button-font-size: var(--ring-font-size-smaller);\n}\n\n.heightM_dfd3 {\n --ring-button-height: 28px;\n --ring-button-font-size: var(--ring-font-size);\n}\n\n.heightL_a4d3 {\n --ring-button-height: 32px;\n --ring-button-font-size: var(--ring-font-size);\n}\n\n.button_aba4 {\n position: relative;\n\n display: inline-block;\n\n box-sizing: border-box;\n height: var(--ring-button-height);\n margin: 0;\n padding: 0 16px;\n\n cursor: pointer;\n transition: color var(--ring-ease), background-color var(--ring-ease), box-shadow var(--ring-ease);\n text-decoration: none;\n\n color: var(--ring-text-color);\n\n border: 0;\n border-radius: var(--ring-border-radius);\n outline: 0;\n background-color: var(--ring-content-background-color);\n box-shadow: inset 0 0 0 1px var(--ring-borders-color);\n\n font-family: var(--ring-font-family);\n font-size: var(--ring-button-font-size);\n\n line-height: var(--ring-button-height);\n}\n\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.button_aba4:hover {\n transition: none;\n\n box-shadow: inset 0 0 0 1px var(--ring-border-hover-color);\n }}\n\n.button_aba4:active {\n transition: none;\n\n background-color: var(--ring-selected-background-color);\n box-shadow: inset 0 0 0 1px var(--ring-border-hover-color);\n }\n\n.button_aba4:focus-visible {\n transition: none;\n\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.button_aba4.active_bbe6 {\n transition: none;\n\n background-color: var(--ring-hover-background-color);\n box-shadow: inset 0 0 0 1px var(--ring-main-color);\n }\n\n.button_aba4.active_bbe6:focus-visible {\n box-shadow: inset 0 0 0 2px var(--ring-main-color), 0 0 0 1px var(--ring-border-hover-color);\n }\n\n.button_aba4[disabled] {\n pointer-events: none;\n\n background-color: var(--ring-disabled-background-color);\n box-shadow: inset 0 0 0 1px var(--ring-border-disabled-color);\n }\n\n.button_aba4.active_bbe6[disabled] {\n background-color: var(--ring-disabled-selected-background-color);\n box-shadow: inset 0 0 0 1px var(--ring-border-selected-disabled-color);\n }\n\n.button_aba4[disabled],\n .button_aba4.withIcon_ef77[disabled] {\n color: var(--ring-disabled-color);\n }\n\n.button_aba4[disabled] .icon_e878 {\n color: var(--ring-icon-disabled-color);\n }\n\n.button_aba4::-moz-focus-inner {\n padding: 0;\n\n border: 0;\n outline: 0;\n }\n\n.withIcon_ef77 {\n color: var(--ring-secondary-color);\n}\n\n.primary_ddae {\n color: var(--ring-white-text-color);\n background-color: var(--ring-main-color);\n box-shadow: none;\n}\n\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.primary_ddae:hover {\n transition: none;\n\n background-color: var(--ring-main-hover-color);\n box-shadow: none;\n }}\n\n.primary_ddae.withIcon_ef77,\n .primary_ddae.withIcon_ef77:active,\n .primary_ddae.withIcon_ef77.active_bbe6 {\n color: var(--ring-action-link-color);\n }\n\n.primary_ddae:focus-visible,\n .primary_ddae:active,\n .primary_ddae.active_bbe6 {\n background-color: var(--ring-button-primary-background-color);\n }\n\n.primary_ddae:active,\n .primary_ddae.active_bbe6 {\n box-shadow: inset 0 0 0 1px var(--ring-button-primary-border-color);\n }\n\n.primary_ddae[disabled] {\n background-color: var(--ring-disabled-background-color);\n box-shadow: inset 0 0 0 1px var(--ring-border-disabled-color);\n }\n\n.primary_ddae.loader_cbfc[disabled] {\n color: var(--ring-white-text-color);\n }\n\n.primary_ddae .loaderBackground_d9f5 {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n\n border-radius: var(--ring-border-radius);\n }\n\n.primary_ddae .loaderBackground_d9f5::before {\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) {.danger_bcea:hover {\n transition: none;\n }}\n\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.danger_bcea:hover {\n box-shadow: inset 0 0 0 1px var(--ring-button-danger-hover-color);\n }}\n\n.danger_bcea,\n .danger_bcea.withIcon_ef77,\n .danger_bcea.withIcon_ef77:active,\n .danger_bcea.withIcon_ef77.active_bbe6,\n .danger_bcea.text_fc2a,\n .danger_bcea.text_fc2a:active,\n .danger_bcea.text_fc2a.active_bbe6 {\n color: var(--ring-error-color);\n }\n\n.danger_bcea:active,\n .danger_bcea.active_bbe6 {\n background-color: var(--ring-button-danger-active-color);\n }\n\n.danger_bcea:active,\n .danger_bcea.active_bbe6,\n .danger_bcea:focus-visible {\n box-shadow: inset 0 0 0 1px var(--ring-button-danger-hover-color);\n }\n\n.danger_bcea:focus-visible {\n transition: none;\n }\n\n.text_fc2a.text_fc2a,\n.withIcon_ef77.withIcon_ef77 {\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_fc2a.text_fc2a:hover, .withIcon_ef77.withIcon_ef77:hover {\n transition: none;\n }}\n\n.text_fc2a.text_fc2a:active,\n .withIcon_ef77.withIcon_ef77:active,\n .text_fc2a.text_fc2a.active_bbe6,\n .withIcon_ef77.withIcon_ef77.active_bbe6 {\n background-color: transparent;\n box-shadow: none;\n }\n\n.text_fc2a.text_fc2a:focus-visible, .withIcon_ef77.withIcon_ef77:focus-visible {\n box-shadow: inset 0 0 0 2px var(--ring-border-hover-color);\n }\n\n.loader_cbfc.text_fc2a > .content_b2b8 {\n animation-name: text-loading_d1b4;\n animation-duration: 1200ms;\n animation-iteration-count: infinite;\n}\n\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.text_fc2a.text_fc2a: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_ef77:hover:not(:focus-visible) {\n background-color: transparent;\n box-shadow: none;\n}}\n\n.text_fc2a {\n color: var(--ring-action-link-color);\n}\n\n.inline_b4a2 {\n display: inline-block;\n\n margin: 0;\n padding: 0;\n\n font-size: var(--ring-font-size);\n}\n\n.withIcon_ef77 {\n padding: 0 8px;\n}\n\n.text_fc2a:active,\n .text_fc2a.active_bbe6 {\n color: var(--ring-link-hover-color);\n }\n\n.withIcon_ef77:active,\n .withIcon_ef77.active_bbe6 {\n color: var(--ring-action-link-color);\n }\n\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.withIcon_ef77:hover {\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_fc2a:hover {\n color: var(--ring-link-hover-color);\n}}\n\n.icon_e878 {\n color: inherit;\n\n line-height: normal;\n}\n\n.icon_e878:not(:last-child) {\n margin-right: 4px;\n }\n\n.withNormalIcon_aaca .icon_e878 {\n transition: color var(--ring-ease);\n\n color: var(--ring-icon-color);\n}\n\n.withNormalIcon_aaca:active,\n.withNormalIcon_aaca.active_bbe6 {\n color: var(--ring-main-color);\n}\n\n.withNormalIcon_aaca:active .icon_e878, .withNormalIcon_aaca.active_bbe6 .icon_e878 {\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) {.withNormalIcon_aaca:hover .icon_e878,\n.withDangerIcon_e3ca:hover .icon_e878 {\n transition: none;\n\n color: inherit;\n}}\n\n.withDangerIcon_e3ca .icon_e878,\n.withDangerIcon_e3ca:active .icon_e878 {\n color: var(--ring-icon-error-color);\n}\n\n.loader_cbfc {\n position: relative;\n z-index: 0;\n\n pointer-events: none;\n\n background-color: transparent;\n}\n\n.loaderBackground_d9f5 {\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: var(--ring-border-radius-small);\n}\n\n.loaderBackground_d9f5::before {\n display: block;\n\n width: calc(100% + 64px);\n height: 100%;\n\n content: "";\n animation: progress_ed8f 1s linear infinite;\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 background-repeat: repeat;\n background-size: 64px;\n }\n\n.delayed_d562 .content_b2b8::after {\n content: "…";\n}\n\n.short_a07a {\n width: 32px;\n padding: 0;\n}\n\n.dropdownIcon_e982 {\n margin-right: -2px;\n\n margin-left: 2px;\n\n transition: color var(--ring-ease);\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_aba4:hover .dropdownIcon_e982 {\n transition: none;\n\n color: var(--ring-main-color);\n}}\n\n@keyframes progress_ed8f {\n from {\n transform: translateX(-64px);\n }\n\n to {\n transform: translateX(0);\n }\n}\n\n@keyframes text-loading_d1b4 {\n 50% {\n opacity: 0.5;\n }\n}\n',"",{version:3,sources:["webpack://./node_modules/@jetbrains/ring-ui/components/button/button.css",""],names:[],mappings:"AAOA;EACE,0BAAoC;EACpC,sDAAsD;AACxD;;AAEA;EACE,0BAAsC;EACtC,8CAA8C;AAChD;;AAEA;EACE,0BAAoC;EACpC,8CAA8C;AAChD;;AAEA;EACE,kBAAkB;;EAElB,qBAAqB;;EAErB,sBAAsB;EACtB,iCAAc;EACd,SAAS;EACT,eAAyB;;EAEzB,eAAe;EACf,kGAAkG;EAClG,qBAAqB;;EAErB,6BAA6B;;EAE7B,SAAS;EACT,wCAAwC;EACxC,UAAU;EACV,sDAAsD;EACtD,qDAAmD;;EAEnD,oCAAoC;EACpC,uCAAuC;;EAEvC,sCAAmB;AA2DrB;;AC1GA,wGAAA;IAAA,iBAAA;;IAAA,2DAAA;GAAA,CAAA;;ADuDE;IACE,gBAAgB;;IAEhB,uDAAuD;IACvD,0DAAwD;EAC1D;;AAEA;IACE,gBAAgB;;IAEhB,oGAAkG;EACpG;;AAEA;IACE,gBAAgB;;IAEhB,oDAAoD;IACpD,kDAAgD;EAClD;;AAEA;IACE,4FAA4F;EAC9F;;AAEA;IACE,oBAAoB;;IAEpB,uDAAuD;IACvD,6DAA2D;EAC7D;;AAEA;IACE,gEAAgE;IAChE,sEAAoE;EACtE;;AAEA;;IAEE,iCAAiC;EACnC;;AAEA;IACE,sCAAsC;EACxC;;AAEA;IACE,UAAU;;IAEV,SAAS;IACT,UAAU;EACZ;;AAGF;EACE,kCAAkC;AACpC;;AAEA;EACE,mCAAmC;EACnC,wCAAwC;EACxC,gBAAgB;AAqDlB;;ACxKA,wGAAA;IAAA,iBAAA;;IAAA,+CAAA;IAAA,iBAAA;GAAA,CAAA;;AD4HE;;;IAGE,oCAAoC;EACtC;;AAEA;;;IAGE,6DAA6D;EAC/D;;AAEA;;IAEE,mEAAiE;EACnE;;AAEA;IACE,uDAAuD;IACvD,6DAA2D;EAC7D;;AAEA;IACE,mCAAmC;EACrC;;AAEA;IACE,MAAM;IACN,QAAQ;IACR,SAAS;IACT,OAAO;;IAEP,wCAAwC;EAW1C;;AATE;MACE;;;;;;SAMG;IACL;;ACtKJ,wGAAA;IAAA,iBAAA;GAAA,CAAA;;AAAA,wGAAA;IAAA,kEAAA;GAAA,CAAA;;AD2KE;;;;;;;IAOE,8BAA8B;EAChC;;AAEA;;IAEE,wDAAwD;EAC1D;;AAEA;;;IAIE,iEAA+D;EACjE;;AAEA;IAEE,gBAAgB;EAClB;;AAGF;;EAEE,6BAA6B;EAC7B,gBAAgB;AAelB;;ACzNA,wGAAA;IAAA,iBAAA;GAAA,CAAA;;ADgNE;;;;IAEE,6BAA6B;IAC7B,gBAAgB;EAClB;;AAEA;IACE,0DAA0D;EAC5D;;AAGF;EACE,iCAA4B;EAC5B,0BAA0B;EAC1B,mCAAmC;AACrC;;AC/NA,wGAAA;EAAA,8BAAA;EAAA,iBAAA;CAAA,CAAA;;AAAA,wGAAA;EAAA,8BAAA;EAAA,iBAAA;CAAA,CAAA;;AD2OA;EACE,oCAAoC;AACtC;;AAEA;EACE,qBAAqB;;EAErB,SAAS;EACT,UAAU;;EAEV,gCAAgC;AAClC;;AAEA;EACE,cAAe;AACjB;;AAGE;;IAEE,mCAAmC;EACrC;;AAIA;;IAEE,oCAAoC;EACtC;;ACvQF,wGAAA;EAAA,oCAAA;CAAA,CAAA;;AAAA,wGAAA;EAAA,oCAAA;CAAA,CAAA;;ADkRA;EACE,cAAc;;EAEd,mBAAmB;AAKrB;;AAHE;IACE,iBAA8B;EAChC;;AAGF;EACE,kCAAkC;;EAElC,6BAA6B;AAC/B;;AAEA;;EAEE,6BAA6B;AAO/B;;AALE;IACE,gBAAgB;;IAEhB,cAAc;EAChB;;AC1SF,wGAAA;;EAAA,iBAAA;;EAAA,eAAA;CAAA,CAAA;;ADoTA;;EAEE,mCAAmC;AACrC;;AAEA;EACE,kBAAkB;EAClB,UAAU;;EAEV,oBAAoB;;EAEpB,6BAA6B;AAC/B;;AAEA;EACE,kBAAkB;EAClB,WAAW;EACX,QAAQ;EACR,UAAU;EACV,WAAW;EACX,SAAS;;EAET,gBAAgB;;EAEhB,8CAA8C;AAsBhD;;AApBE;IACE,cAAc;;IAEd,wBAA+B;IAC/B,YAAY;;IAEZ,WAAW;IACX,2CAAsC;;IAEtC;;;;;;OAMG;;IAEH,yBAAyB;IACzB,qBAA4B;EAC9B;;AAGF;EACE,YAAY;AACd;;AAEA;EACE,WAAqB;EACrB,UAAU;AACZ;;AAEA;EACE,kBAAkB;;EAElB,gBAAgB;;EAEhB,kCAAkC;;EAElC,uCAAuC;;EAEvC,mBAAmB;AACrB;;ACvXA,wGAAA;EAAA,iBAAA;;EAAA,8BAAA;CAAA,CAAA;;AD+XA;EACE;IACE,4BAA4C;EAC9C;;EAEA;IACE,wBAAwB;EAC1B;AACF;;AAEA;EACE;IACE,YAAY;EACd;AACF",sourcesContent:['@import "../global/variables.css";\n\n@value unit from "../global/global.css";\n@value button-shadow: inset 0 0 0 1px;\n@value height: var(--ring-button-height);\n@value loaderWidth: calc(unit * 8);\n\n.heightS {\n --ring-button-height: calc(unit * 3);\n --ring-button-font-size: var(--ring-font-size-smaller);\n}\n\n.heightM {\n --ring-button-height: calc(unit * 3.5);\n --ring-button-font-size: var(--ring-font-size);\n}\n\n.heightL {\n --ring-button-height: calc(unit * 4);\n --ring-button-font-size: var(--ring-font-size);\n}\n\n.button {\n position: relative;\n\n display: inline-block;\n\n box-sizing: border-box;\n height: height;\n margin: 0;\n padding: 0 calc(unit * 2);\n\n cursor: pointer;\n transition: color var(--ring-ease), background-color var(--ring-ease), box-shadow var(--ring-ease);\n text-decoration: none;\n\n color: var(--ring-text-color);\n\n border: 0;\n border-radius: var(--ring-border-radius);\n outline: 0;\n background-color: var(--ring-content-background-color);\n box-shadow: button-shadow var(--ring-borders-color);\n\n font-family: var(--ring-font-family);\n font-size: var(--ring-button-font-size);\n\n line-height: height;\n\n &:hover {\n transition: none;\n\n box-shadow: button-shadow var(--ring-border-hover-color);\n }\n\n &:active {\n transition: none;\n\n background-color: var(--ring-selected-background-color);\n box-shadow: button-shadow var(--ring-border-hover-color);\n }\n\n &:focus-visible {\n transition: none;\n\n box-shadow: button-shadow var(--ring-border-hover-color), 0 0 0 1px var(--ring-border-hover-color);\n }\n\n &.active {\n transition: none;\n\n background-color: var(--ring-hover-background-color);\n box-shadow: button-shadow var(--ring-main-color);\n }\n\n &:focus-visible.active {\n box-shadow: inset 0 0 0 2px var(--ring-main-color), 0 0 0 1px var(--ring-border-hover-color);\n }\n\n &[disabled] {\n pointer-events: none;\n\n background-color: var(--ring-disabled-background-color);\n box-shadow: button-shadow var(--ring-border-disabled-color);\n }\n\n &[disabled].active {\n background-color: var(--ring-disabled-selected-background-color);\n box-shadow: button-shadow var(--ring-border-selected-disabled-color);\n }\n\n &[disabled],\n &[disabled].withIcon {\n color: var(--ring-disabled-color);\n }\n\n &[disabled] .icon {\n color: var(--ring-icon-disabled-color);\n }\n\n &::-moz-focus-inner {\n padding: 0;\n\n border: 0;\n outline: 0;\n }\n}\n\n.withIcon {\n color: var(--ring-secondary-color);\n}\n\n.primary {\n color: var(--ring-white-text-color);\n background-color: var(--ring-main-color);\n box-shadow: none;\n\n &:hover {\n transition: none;\n\n background-color: var(--ring-main-hover-color);\n box-shadow: none;\n }\n\n &.withIcon,\n &.withIcon:active,\n &.withIcon.active {\n color: var(--ring-action-link-color);\n }\n\n &:focus-visible,\n &:active,\n &.active {\n background-color: var(--ring-button-primary-background-color);\n }\n\n &:active,\n &.active {\n box-shadow: button-shadow var(--ring-button-primary-border-color);\n }\n\n &[disabled] {\n background-color: var(--ring-disabled-background-color);\n box-shadow: button-shadow var(--ring-border-disabled-color);\n }\n\n &[disabled].loader {\n color: var(--ring-white-text-color);\n }\n\n & .loaderBackground {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n\n border-radius: var(--ring-border-radius);\n\n &::before {\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}\n\n.danger {\n &,\n &.withIcon,\n &.withIcon:active,\n &.withIcon.active,\n &.text,\n &.text:active,\n &.text.active {\n color: var(--ring-error-color);\n }\n\n &:active,\n &.active {\n background-color: var(--ring-button-danger-active-color);\n }\n\n &:active,\n &.active,\n &:focus-visible,\n &:hover {\n box-shadow: button-shadow var(--ring-button-danger-hover-color);\n }\n\n &:focus-visible,\n &:hover {\n transition: none;\n }\n}\n\n.text.text,\n.withIcon.withIcon {\n background-color: transparent;\n box-shadow: none;\n\n &:hover {\n transition: none;\n }\n\n &:active,\n &.active {\n background-color: transparent;\n box-shadow: none;\n }\n\n &:focus-visible {\n box-shadow: inset 0 0 0 2px var(--ring-border-hover-color);\n }\n}\n\n.loader.text > .content {\n animation-name: text-loading;\n animation-duration: 1200ms;\n animation-iteration-count: infinite;\n}\n\n.text.text:hover {\n background-color: transparent;\n box-shadow: none;\n}\n\n.withIcon:hover:not(:focus-visible) {\n background-color: transparent;\n box-shadow: none;\n}\n\n.text {\n color: var(--ring-action-link-color);\n}\n\n.inline {\n display: inline-block;\n\n margin: 0;\n padding: 0;\n\n font-size: var(--ring-font-size);\n}\n\n.withIcon {\n padding: 0 unit;\n}\n\n.text {\n &:active,\n &.active {\n color: var(--ring-link-hover-color);\n }\n}\n\n.withIcon {\n &:active,\n &.active {\n color: var(--ring-action-link-color);\n }\n}\n\n.withIcon:hover {\n color: var(--ring-link-hover-color);\n}\n\n.text:hover {\n color: var(--ring-link-hover-color);\n}\n\n.icon {\n color: inherit;\n\n line-height: normal;\n\n &:not(:last-child) {\n margin-right: calc(unit * 0.5);\n }\n}\n\n.withNormalIcon .icon {\n transition: color var(--ring-ease);\n\n color: var(--ring-icon-color);\n}\n\n.withNormalIcon:active,\n.withNormalIcon.active {\n color: var(--ring-main-color);\n\n & .icon {\n transition: none;\n\n color: inherit;\n }\n}\n\n.withNormalIcon:hover .icon,\n.withDangerIcon:hover .icon {\n transition: none;\n\n color: inherit;\n}\n\n.withDangerIcon .icon,\n.withDangerIcon:active .icon {\n color: var(--ring-icon-error-color);\n}\n\n.loader {\n position: relative;\n z-index: 0;\n\n pointer-events: none;\n\n background-color: transparent;\n}\n\n.loaderBackground {\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: var(--ring-border-radius-small);\n\n &::before {\n display: block;\n\n width: calc(100% + loaderWidth);\n height: 100%;\n\n content: "";\n animation: progress 1s linear infinite;\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 background-repeat: repeat;\n background-size: loaderWidth;\n }\n}\n\n.delayed .content::after {\n content: "…";\n}\n\n.short {\n width: calc(unit * 4);\n padding: 0;\n}\n\n.dropdownIcon {\n margin-right: -2px;\n\n margin-left: 2px;\n\n transition: color var(--ring-ease);\n\n color: var(--ring-icon-secondary-color);\n\n line-height: normal;\n}\n\n.button:hover .dropdownIcon {\n transition: none;\n\n color: var(--ring-main-color);\n}\n\n@keyframes progress {\n from {\n transform: translateX(calc(0 - loaderWidth));\n }\n\n to {\n transform: translateX(0);\n }\n}\n\n@keyframes text-loading {\n 50% {\n opacity: 0.5;\n }\n}\n',null],sourceRoot:""}]),u.locals={unit:`${l.default.locals.unit}`,"button-shadow":"inset 0 0 0 1px",height:"var(--ring-button-height)",loaderWidth:"64px",heightS:"heightS_b28d",heightM:"heightM_dfd3",heightL:"heightL_a4d3",button:"button_aba4",active:"active_bbe6",withIcon:"withIcon_ef77",icon:"icon_e878",primary:"primary_ddae",loader:"loader_cbfc",loaderBackground:"loaderBackground_d9f5",danger:"danger_bcea",text:"text_fc2a",content:"content_b2b8","text-loading":"text-loading_d1b4",inline:"inline_b4a2",withNormalIcon:"withNormalIcon_aaca",withDangerIcon:"withDangerIcon_e3ca",progress:"progress_ed8f",delayed:"delayed_d562",short:"short_a07a",dropdownIcon:"dropdownIcon_e982"};const s=u},1866:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>s});var r=t(1404),o=t.n(r),i=t(7156),a=t.n(i),l=t(9106),c=t(5280),u=a()(o());u.i(c.A),u.i(l.default,"",!0),u.push([e.id,".checkbox_dccf {\n position: relative;\n\n display: inline-block;\n\n text-align: left;\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_dccf:hover .cell_edda {\n transition: background-color var(--ring-ease);\n\n border-color: var(--ring-border-hover-color);\n }}\n\n.cell_edda {\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 user-select: none;\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 var(--ring-borders-color);\n border-radius: var(--ring-border-radius-small);\n background-color: var(--ring-content-background-color);\n}\n\n.icon_b476.icon_b476 {\n position: absolute;\n\n top: -1px;\n left: -1px;\n\n width: 16px;\n height: 16px;\n\n opacity: 0;\n color: var(--ring-white-text-color);\n}\n\n.icon_b476.icon_b476 svg {\n position: absolute;\n top: 0;\n left: 0;\n }\n\n.check_a219 {\n}\n\n.minus_de65 {\n}\n\n.input_a330 {\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 /* stylelint-disable-next-line selector-max-specificity */\n}\n\n.input_a330:checked + .cell_edda,\n .input_a330:indeterminate + .cell_edda {\n border-color: transparent;\n background-color: var(--ring-main-color);\n }\n\n/* stylelint-disable-next-line selector-max-specificity */\n\n.input_a330:checked + .cell_edda .check_a219 {\n opacity: 1;\n }\n\n.input_a330:focus-visible + .cell_edda,\n .input_a330.focus_eaa3 + .cell_edda {\n transition: background-color var(--ring-ease);\n\n border-color: var(--ring-border-hover-color);\n box-shadow: 0 0 0 1px var(--ring-border-hover-color);\n }\n\n/* stylelint-disable-next-line selector-max-specificity */\n\n.input_a330:indeterminate + .cell_edda .minus_de65 {\n opacity: 1;\n }\n\n.input_a330[disabled] {\n pointer-events: none;\n }\n\n/* stylelint-disable-next-line selector-max-specificity */\n\n.input_a330[disabled][disabled] + .cell_edda {\n border-color: var(--ring-border-disabled-color);\n background-color: var(--ring-disabled-background-color);\n }\n\n/* stylelint-disable-next-line selector-max-specificity */\n\n.input_a330[disabled]:checked + .cell_edda,\n .input_a330[disabled]:indeterminate + .cell_edda {\n border-color: var(--ring-border-selected-disabled-color);\n }\n\n/* stylelint-disable-next-line selector-max-specificity */\n\n.input_a330[disabled]:checked + .cell_edda .check_a219,\n .input_a330[disabled]:indeterminate + .cell_edda .minus_de65 {\n color: var(--ring-icon-disabled-color);\n }\n\n/* stylelint-disable-next-line selector-max-specificity */\n\n.input_a330:indeterminate:indeterminate + .cell_edda .check_a219 {\n transition: none;\n\n opacity: 0;\n }\n\n.input_a330[disabled] ~ .label_dcc7 {\n color: var(--ring-disabled-color);\n }\n\n.label_dcc7 {\n margin-left: 8px;\n\n line-height: normal;\n}\n","",{version:3,sources:["webpack://./node_modules/@jetbrains/ring-ui/components/checkbox/checkbox.css",""],names:[],mappings:"AAKA;EACE,kBAAkB;;EAElB,qBAAqB;;EAErB,gBAAgB;;EAEhB,6BAA6B;EAC7B,aAAa;AAOf;;ACpBA,wGAAA;IAAA,8CAAA;;IAAA,6CAAA;GAAA,CAAA;;ADsBA;EACE,kBAAkB;EAClB,SAAS;;EAET,qBAAqB;;EAErB,sBAAsB;EACtB,WAAmB;EACnB,YAAoB;;EAEpB,yBAAiB;;KAAjB,sBAAiB;;UAAjB,iBAAiB;EACjB,yGAAyG;EACzG,sBAAsB;EACtB,oBAAoB;;EAEpB,2CAA2C;EAC3C,8CAA8C;EAC9C,sDAAsD;AACxD;;AAEA;EACE,kBAAkB;;EAElB,SAAS;EACT,UAAU;;EAEV,WAAqB;EACrB,YAAsB;;EAEtB,UAAU;EACV,mCAAmC;AAOrC;;AALE;IACE,kBAAkB;IAClB,MAAM;IACN,OAAO;EACT;;AAGF;AAEA;;AAEA;AAEA;;AAEA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;;EAEP,WAAW;EACX,YAAY;EACZ,SAAS;;EAET,eAAe;;EAEf,UAAU;;EAEV,yDAAyD;AAyD3D;;AAxDE;;IAEE,yBAAyB;IACzB,wCAAwC;EAC1C;;AAEA,yDAAyD;;AACzD;IACE,UAAU;EACZ;;AAEA;;IAEE,6CAA6C;;IAE7C,4CAA4C;IAC5C,oDAAoD;EACtD;;AAEA,yDAAyD;;AACzD;IACE,UAAU;EACZ;;AAEA;IACE,oBAAoB;EACtB;;AAEA,yDAAyD;;AACzD;IACE,+CAA+C;IAC/C,uDAAuD;EACzD;;AAEA,yDAAyD;;AACzD;;IAEE,wDAAwD;EAC1D;;AAEA,yDAAyD;;AACzD;;IAEE,sCAAsC;EACxC;;AAEA,yDAAyD;;AACzD;IACE,gBAAgB;;IAEhB,UAAU;EACZ;;AAEA;IACE,iCAAiC;EACnC;;AAGF;EACE,gBAAiB;;EAEjB,mBAAmB;AACrB",sourcesContent:['@import "../global/variables.css";\n\n@value unit from "../global/global.css";\n@value checkboxSize: 14px;\n\n.checkbox {\n position: relative;\n\n display: inline-block;\n\n text-align: left;\n\n color: var(--ring-text-color);\n outline: none;\n\n &:hover .cell {\n transition: background-color var(--ring-ease);\n\n border-color: var(--ring-border-hover-color);\n }\n}\n\n.cell {\n position: relative;\n top: -2px;\n\n display: inline-block;\n\n box-sizing: border-box;\n width: checkboxSize;\n height: checkboxSize;\n\n user-select: none;\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 var(--ring-borders-color);\n border-radius: var(--ring-border-radius-small);\n background-color: var(--ring-content-background-color);\n}\n\n.icon.icon {\n position: absolute;\n\n top: -1px;\n left: -1px;\n\n width: calc(unit * 2);\n height: calc(unit * 2);\n\n opacity: 0;\n color: var(--ring-white-text-color);\n\n & svg {\n position: absolute;\n top: 0;\n left: 0;\n }\n}\n\n.check {\n composes: icon;\n}\n\n.minus {\n composes: icon;\n}\n\n.input {\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 /* stylelint-disable-next-line selector-max-specificity */\n &:checked + .cell,\n &:indeterminate + .cell {\n border-color: transparent;\n background-color: var(--ring-main-color);\n }\n\n /* stylelint-disable-next-line selector-max-specificity */\n &:checked + .cell .check {\n opacity: 1;\n }\n\n &:focus-visible + .cell,\n &.focus + .cell {\n transition: background-color var(--ring-ease);\n\n border-color: var(--ring-border-hover-color);\n box-shadow: 0 0 0 1px var(--ring-border-hover-color);\n }\n\n /* stylelint-disable-next-line selector-max-specificity */\n &:indeterminate + .cell .minus {\n opacity: 1;\n }\n\n &[disabled] {\n pointer-events: none;\n }\n\n /* stylelint-disable-next-line selector-max-specificity */\n &[disabled][disabled] + .cell {\n border-color: var(--ring-border-disabled-color);\n background-color: var(--ring-disabled-background-color);\n }\n\n /* stylelint-disable-next-line selector-max-specificity */\n &[disabled]:checked + .cell,\n &[disabled]:indeterminate + .cell {\n border-color: var(--ring-border-selected-disabled-color);\n }\n\n /* stylelint-disable-next-line selector-max-specificity */\n &[disabled]:checked + .cell .check,\n &[disabled]:indeterminate + .cell .minus {\n color: var(--ring-icon-disabled-color);\n }\n\n /* stylelint-disable-next-line selector-max-specificity */\n &:indeterminate:indeterminate + .cell .check {\n transition: none;\n\n opacity: 0;\n }\n\n &[disabled] ~ .label {\n color: var(--ring-disabled-color);\n }\n}\n\n.label {\n margin-left: unit;\n\n line-height: normal;\n}\n',null],sourceRoot:""}]),u.locals={unit:`${l.default.locals.unit}`,checkboxSize:"14px",checkbox:"checkbox_dccf",cell:"cell_edda",icon:"icon_b476",check:"check_a219 icon_b476",minus:"minus_de65 icon_b476",input:"input_a330",focus:"focus_eaa3",label:"label_dcc7"};const s=u},5486:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>l});var r=t(1404),o=t.n(r),i=t(7156),a=t.n(i)()(o());a.push([e.id,".label_bed7 {\n display: block;\n\n margin-bottom: calc(var(--ring-unit)*0.5);\n}\n\n.formLabel_f9ba {\n color: var(--ring-text-color);\n\n font-size: var(--ring-font-size);\n line-height: var(--ring-line-height);\n}\n\n.secondaryLabel_e8a1 {\n color: var(--ring-secondary-color);\n\n font-size: var(--ring-font-size-smaller);\n line-height: var(--ring-line-height-lowest);\n}\n\n.disabledLabel_e4c1 {\n color: var(--ring-disabled-color);\n}\n","",{version:3,sources:["webpack://./node_modules/@jetbrains/ring-ui/components/control-label/control-label.css"],names:[],mappings:"AAAA;EACE,cAAc;;EAEd,yCAA2C;AAC7C;;AAEA;EACE,6BAA6B;;EAE7B,gCAAgC;EAChC,oCAAoC;AACtC;;AAEA;EACE,kCAAkC;;EAElC,wCAAwC;EACxC,2CAA2C;AAC7C;;AAEA;EACE,iCAAiC;AACnC",sourcesContent:[".label {\n display: block;\n\n margin-bottom: calc(var(--ring-unit) * 0.5);\n}\n\n.formLabel {\n color: var(--ring-text-color);\n\n font-size: var(--ring-font-size);\n line-height: var(--ring-line-height);\n}\n\n.secondaryLabel {\n color: var(--ring-secondary-color);\n\n font-size: var(--ring-font-size-smaller);\n line-height: var(--ring-line-height-lowest);\n}\n\n.disabledLabel {\n color: var(--ring-disabled-color);\n}\n"],sourceRoot:""}]),a.locals={label:"label_bed7",formLabel:"formLabel_f9ba",secondaryLabel:"secondaryLabel_e8a1",disabledLabel:"disabledLabel_e4c1"};const l=a},6506:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>u});var r=t(1404),o=t.n(r),i=t(7156),a=t.n(i),l=t(5280),c=a()(o());c.i(l.A),c.push([e.id,".dropdown_a1de {\n display: inline-block;\n}\n\n.anchor_fdbe.anchor_fdbe {\n margin: 0 -3px;\n padding: 0 3px;\n\n font: inherit;\n}\n\n.chevron_ffc6 {\n margin-left: 2px;\n\n line-height: normal;\n}\n","",{version:3,sources:["webpack://./node_modules/@jetbrains/ring-ui/components/dropdown/dropdown.css"],names:[],mappings:"AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,cAAc;EACd,cAAc;;EAEd,aAAa;AACf;;AAEA;EACE,gBAAgB;;EAEhB,mBAAmB;AACrB",sourcesContent:['@import "../global/variables.css";\n\n.dropdown {\n display: inline-block;\n}\n\n.anchor.anchor {\n margin: 0 -3px;\n padding: 0 3px;\n\n font: inherit;\n}\n\n.chevron {\n margin-left: 2px;\n\n line-height: normal;\n}\n'],sourceRoot:""}]),c.locals={dropdown:"dropdown_a1de",anchor:"anchor_fdbe",chevron:"chevron_ffc6"};const u=c},9106:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>l});var r=t(1404),o=t.n(r),i=t(7156),a=t.n(i)()(o());a.push([e.id,'/* https://readymag.com/artemtiunov/RingUILanguage/colours/ */\n\n/*\nUnit shouldn\'t be CSS custom property because it is not intended to change\nAlso it won\'t form in FF47 https://bugzilla.mozilla.org/show_bug.cgi?id=594933\n*/\n\n.clearfix_c694::after {\n display: block;\n clear: both;\n\n content: "";\n }\n\n.font_a1f6 {\n font-family: var(--ring-font-family);\n font-size: var(--ring-font-size);\n line-height: var(--ring-line-height);\n}\n\n.font-lower_c3c9 {\n\n line-height: var(--ring-line-height-lower);\n}\n\n.font-smaller_d963 {\n\n font-size: var(--ring-font-size-smaller);\n}\n\n.font-smaller-lower_ff5f {\n\n line-height: var(--ring-line-height-lowest);\n}\n\n.font-larger-lower_b336 {\n\n font-size: var(--ring-font-size-larger);\n}\n\n.font-larger_f035 {\n\n line-height: var(--ring-line-height-taller);\n}\n\n/* To be used at large sizes */\n/* As close as possible to Helvetica Neue Thin (to replace Gotham) */\n.thin-font_de5b {\n font-family: "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;\n font-size: var(--ring-font-size);\n font-weight: 100; /* Renders Helvetica Neue UltraLight on OS X */\n}\n\n.monospace-font_ac33 {\n font-family: var(--ring-font-family-monospace);\n font-size: var(--ring-font-size-smaller);\n}\n\n.ellipsis_e43b {\n overflow: hidden;\n\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.resetButton_ddd2 {\n overflow: visible;\n\n padding: 0;\n\n text-align: left;\n\n color: inherit;\n border: 0;\n\n background-color: transparent;\n\n font: inherit;\n}\n\n.resetButton_ddd2::-moz-focus-inner {\n padding: 0;\n\n border: 0;\n }\n\n/* Note: footer also has top margin which isn\'t taken into account here */\n\n/* Media breakpoints (minimal values) */\n\n/* Media queries */\n',"",{version:3,sources:["webpack://./node_modules/@jetbrains/ring-ui/components/global/global.css"],names:[],mappings:"AAAA,6DAA6D;;AAE7D;;;CAGC;;AAIC;IACE,cAAc;IACd,WAAW;;IAEX,WAAW;EACb;;AAGF;EACE,oCAAoC;EACpC,gCAAgC;EAChC,oCAAoC;AACtC;;AAEA;;EAGE,0CAA0C;AAC5C;;AAEA;;EAGE,wCAAwC;AAC1C;;AAEA;;EAGE,2CAA2C;AAC7C;;AAEA;;EAGE,uCAAuC;AACzC;;AAEA;;EAGE,2CAA2C;AAC7C;;AAEA,8BAA8B;AAC9B,oEAAoE;AACpE;EACE,uEAAuE;EACvE,gCAAgC;EAChC,gBAAgB,EAAE,+CAA+C;AACnE;;AAEA;EACE,8CAA8C;EAC9C,wCAAwC;AAC1C;;AAEA;EACE,gBAAgB;;EAEhB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,iBAAiB;;EAEjB,UAAU;;EAEV,gBAAgB;;EAEhB,cAAc;EACd,SAAS;;EAET,6BAA6B;;EAE7B,aAAa;AAOf;;AALE;IACE,UAAU;;IAEV,SAAS;EACX;;AAGF,yEAAyE;;AAGzE,uCAAuC;;AAKvC,kBAAkB",sourcesContent:['/* https://readymag.com/artemtiunov/RingUILanguage/colours/ */\n\n/*\nUnit shouldn\'t be CSS custom property because it is not intended to change\nAlso it won\'t form in FF47 https://bugzilla.mozilla.org/show_bug.cgi?id=594933\n*/\n@value unit: 8px;\n\n.clearfix {\n &::after {\n display: block;\n clear: both;\n\n content: "";\n }\n}\n\n.font {\n font-family: var(--ring-font-family);\n font-size: var(--ring-font-size);\n line-height: var(--ring-line-height);\n}\n\n.font-lower {\n composes: font;\n\n line-height: var(--ring-line-height-lower);\n}\n\n.font-smaller {\n composes: font-lower;\n\n font-size: var(--ring-font-size-smaller);\n}\n\n.font-smaller-lower {\n composes: font-smaller;\n\n line-height: var(--ring-line-height-lowest);\n}\n\n.font-larger-lower {\n composes: font-lower;\n\n font-size: var(--ring-font-size-larger);\n}\n\n.font-larger {\n composes: font-larger-lower;\n\n line-height: var(--ring-line-height-taller);\n}\n\n/* To be used at large sizes */\n/* As close as possible to Helvetica Neue Thin (to replace Gotham) */\n.thin-font {\n font-family: "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;\n font-size: var(--ring-font-size);\n font-weight: 100; /* Renders Helvetica Neue UltraLight on OS X */\n}\n\n.monospace-font {\n font-family: var(--ring-font-family-monospace);\n font-size: var(--ring-font-size-smaller);\n}\n\n.ellipsis {\n overflow: hidden;\n\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.resetButton {\n overflow: visible;\n\n padding: 0;\n\n text-align: left;\n\n color: inherit;\n border: 0;\n\n background-color: transparent;\n\n font: inherit;\n\n &::-moz-focus-inner {\n padding: 0;\n\n border: 0;\n }\n}\n\n/* Note: footer also has top margin which isn\'t taken into account here */\n@value footer-height: calc(unit * 8);\n\n/* Media breakpoints (minimal values) */\n@value breakpoint-small: 640px;\n@value breakpoint-middle: 960px;\n@value breakpoint-large: 1200px;\n\n/* Media queries */\n@value extra-small-screen-media: (max-width: calc(breakpoint-small - 1px));\n@value small-screen-media: (min-width: breakpoint-small) and (max-width: calc(breakpoint-middle - 1px));\n@value middle-screen-media: (min-width: breakpoint-middle) and (max-width: calc(breakpoint-large - 1px));\n@value large-screen-media: (min-width: breakpoint-large);\n'],sourceRoot:""}]),a.locals={unit:"8px","footer-height":"64px","breakpoint-small":"640px","breakpoint-middle":"960px","breakpoint-large":"1200px","extra-small-screen-media":"(max-width: 639px)","small-screen-media":"(min-width: 640px) and (max-width: 959px)","middle-screen-media":"(min-width: 960px) and (max-width: 1199px)","large-screen-media":"(min-width: 1200px)",clearfix:"clearfix_c694",font:"font_a1f6","font-lower":"font-lower_c3c9 font_a1f6","font-smaller":"font-smaller_d963 font-lower_c3c9 font_a1f6","font-smaller-lower":"font-smaller-lower_ff5f font-smaller_d963 font-lower_c3c9 font_a1f6","font-larger-lower":"font-larger-lower_b336 font-lower_c3c9 font_a1f6","font-larger":"font-larger_f035 font-larger-lower_b336 font-lower_c3c9 font_a1f6","thin-font":"thin-font_de5b","monospace-font":"monospace-font_ac33",ellipsis:"ellipsis_e43b",resetButton:"resetButton_ddd2"};const l=a},5280:(e,n,t)=>{"use strict";t.d(n,{A:()=>l});var r=t(1404),o=t.n(r),i=t(7156),a=t.n(i)()(o());a.push([e.id,'/* stylelint-disable color-no-hex */\n\n.light_f331,\n:root {\n --ring-unit: 8px;\n\n /* Element */\n --ring-line-components: 223, 229, 235;\n --ring-line-color: rgb(var(--ring-line-components)); /* #dfe5eb */\n --ring-borders-components: 197, 209, 219;\n --ring-borders-color: rgb(var(--ring-borders-components)); /* #c5d1db */\n --ring-icon-components: 184, 209, 229;\n --ring-icon-color: rgb(var(--ring-icon-components)); /* #b8d1e5 */\n --ring-icon-secondary-components: 153, 153, 153;\n --ring-icon-secondary-color: rgb(var(--ring-icon-secondary-components)); /* #999 */\n --ring-border-disabled-components: 232, 232, 232;\n --ring-border-disabled-color: rgb(var(--ring-border-disabled-components)); /* #e8e8e8 */\n --ring-border-selected-disabled-components: 212, 212, 212;\n --ring-border-selected-disabled-color: rgb(var(--ring-border-selected-disabled-components)); /* #d4d4d4 */\n --ring-border-unselected-disabled-components: 232, 232, 232;\n --ring-border-unselected-disabled-color: rgb(var(--ring-border-unselected-disabled-components)); /* #e8e8e8 */ /* TODO remove in 6.0 */\n --ring-icon-disabled-components: 212, 212, 212;\n --ring-icon-disabled-color: rgb(var(--ring-icon-disabled-components)); /* #d4d4d4 */\n --ring-border-hover-components: 128, 198, 255;\n --ring-border-hover-color: rgb(var(--ring-border-hover-components)); /* #80c6ff */\n --ring-icon-hover-components: var(--ring-link-hover-color);\n --ring-icon-hover-color: var(--ring-link-hover-color);\n --ring-main-components: 0, 128, 229;\n --ring-main-color: rgb(var(--ring-main-components)); /* #0080e5 */\n --ring-action-link-components: var(--ring-main-components);\n --ring-action-link-color: rgb(var(--ring-main-components)); /* #0080e5 */\n --ring-main-hover-components: 0, 112, 204;\n --ring-main-hover-color: rgb(var(--ring-main-hover-components)); /* #0070cc */\n --ring-icon-error-components: 219, 88, 96;\n --ring-icon-error-color: rgb(var(--ring-icon-error-components)); /* #db5860 */\n --ring-icon-warning-components: 237, 162, 0;\n --ring-icon-warning-color: rgb(var(--ring-icon-warning-components)); /* #eda200 */\n --ring-icon-success-components: 89, 168, 105;\n --ring-icon-success-color: rgb(var(--ring-icon-success-components)); /* #59a869 */\n --ring-pale-control-components: 207, 219, 229;\n --ring-pale-control-color: rgb(var(--ring-pale-control-components)); /* #cfdbe5 */\n --ring-popup-border-components: 0, 28, 54;\n --ring-popup-border-color: var(--ring-line-color);\n --ring-popup-shadow-components: rgba(var(--ring-popup-border-components), 0.1);\n --ring-popup-shadow-color: rgba(var(--ring-popup-border-components), 0.1);\n --ring-popup-secondary-shadow-color: rgba(var(--ring-popup-border-components), 0.04);\n --ring-message-shadow-color: rgba(var(--ring-popup-border-components), 0.3);\n --ring-pinned-shadow-components: 115, 117, 119;\n --ring-pinned-shadow-color: rgb(var(--ring-pinned-shadow-components)); /* #737577 */\n --ring-button-danger-hover-components: var(--ring-icon-error-color);\n --ring-button-danger-hover-color: var(--ring-icon-error-color);\n --ring-button-primary-border-components: 0, 98, 178;\n --ring-button-primary-border-color: rgb(var(--ring-button-primary-border-components)); /* #0062b2 */\n --ring-popup-shadow: 0 2px 8px var(--ring-popup-shadow-color), 0 1px 2px var(--ring-popup-secondary-shadow-color);\n --ring-dialog-shadow: 0 4px 24px var(--ring-popup-shadow-color), 0 2px 6px var(--ring-popup-secondary-shadow-color);\n\n /* Text */\n --ring-search-components: 102, 158, 204;\n --ring-search-color: rgb(var(--ring-search-components)); /* #669ecc */\n --ring-hint-components: 64, 99, 128;\n --ring-hint-color: rgb(var(--ring-hint-components)); /* #406380 */\n --ring-link-components: 15, 91, 153;\n --ring-link-color: rgb(var(--ring-link-components)); /* #0f5b99 */\n --ring-link-hover-components: 255, 0, 140;\n --ring-link-hover-color: rgb(var(--ring-link-hover-components)); /* #ff008c */\n --ring-error-components: 169, 15, 26;\n --ring-error-color: rgb(var(--ring-error-components)); /* #a90f1a */\n --ring-warning-components: 178, 92, 0;\n --ring-warning-color: rgb(var(--ring-warning-components)); /* #b25c00 */\n --ring-success-components: 12, 117, 35;\n --ring-success-color: rgb(var(--ring-success-components)); /* #0c7523 */\n --ring-text-components: 31, 35, 38;\n --ring-text-color: rgb(var(--ring-text-components)); /* #1f2326 */\n --ring-active-text-color: var(--ring-text-color);\n --ring-white-text-components: 255, 255, 255;\n --ring-white-text-color: rgb(var(--ring-white-text-components)); /* #fff */\n --ring-heading-color: var(--ring-text-color);\n --ring-secondary-components: 115, 117, 119;\n --ring-secondary-color: rgb(var(--ring-secondary-components)); /* #737577 */\n --ring-disabled-components: 153, 153, 153;\n --ring-disabled-color: rgb(var(--ring-disabled-components)); /* #999 */\n\n /* Background */\n --ring-content-background-components: 255, 255, 255;\n --ring-content-background-color: rgb(var(--ring-content-background-components)); /* #fff */\n --ring-popup-background-components: 255, 255, 255;\n --ring-popup-background-color: rgb(var(--ring-popup-background-components)); /* #fff */\n --ring-sidebar-background-components: 247, 249, 250;\n --ring-sidebar-background-color: rgb(var(--ring-sidebar-background-components)); /* #f7f9fa */\n --ring-selected-background-components: 212, 237, 255;\n --ring-selected-background-color: rgb(var(--ring-selected-background-components)); /* #d4edff */\n --ring-hover-background-components: 235, 246, 255;\n --ring-hover-background-color: rgb(var(--ring-hover-background-components)); /* #ebf6ff */\n --ring-navigation-background-components: 255, 255, 255;\n --ring-navigation-background-color: rgb(var(--ring-navigation-background-components)); /* #fff */\n --ring-tag-background-components: 230, 236, 242;\n --ring-tag-background-color: rgb(var(--ring-tag-background-components)); /* #e6ecf2 */\n --ring-tag-hover-background-components: 211, 218, 224;\n --ring-tag-hover-background-color: rgb(var(--ring-tag-hover-background-components)); /* #d3dae0 */\n --ring-removed-background-components: 255, 213, 203;\n --ring-removed-background-color: rgb(var(--ring-removed-background-components)); /* #ffd5cb */\n --ring-warning-background-components: 250, 236, 205;\n --ring-warning-background-color: rgb(var(--ring-warning-background-components)); /* #faeccd */\n --ring-added-background-components: 216, 240, 216;\n --ring-added-background-color: rgb(var(--ring-added-background-components)); /* #d8f0d8 */\n --ring-disabled-background-components: 245, 245, 245;\n --ring-disabled-background-color: rgb(var(--ring-disabled-background-components)); /* #f5f5f5 */\n --ring-disabled-selected-background-components: 232, 232, 232;\n --ring-disabled-selected-background-color: rgb(var(--ring-disabled-selected-background-components)); /* #e8e8e8 */\n --ring-button-danger-active-components: 255, 231, 232;\n --ring-button-danger-active-color: rgb(var(--ring-button-danger-active-components)); /* #ffe7e8 */\n --ring-button-loader-background-components: 51, 163, 255;\n --ring-button-loader-background: rgb(var(--ring-button-loader-background-components)); /* #33a3ff */\n --ring-button-primary-background-components: 26, 152, 255;\n --ring-button-primary-background-color: rgb(var(--ring-button-primary-background-components)); /* #1a98ff */\n --ring-table-loader-background-color: rgba(var(--ring-content-background-components), 0.5); /* #ffffff80 */\n\n /* Code */\n --ring-code-background-color: var(--ring-content-background-color);\n --ring-code-components: 0, 0, 0;\n --ring-code-color: rgb(var(--ring-code-components)); /* #000 */\n --ring-code-comment-components: 112, 112, 112;\n --ring-code-comment-color: rgb(var(--ring-code-comment-components)); /* #707070 */\n --ring-code-meta-components: 112, 112, 112;\n --ring-code-meta-color: rgb(var(--ring-code-meta-components)); /* #707070 */\n --ring-code-keyword-components: 0, 0, 128;\n --ring-code-keyword-color: rgb(var(--ring-code-keyword-components)); /* #000080 */\n --ring-code-tag-background-components: 239, 239, 239;\n --ring-code-tag-background-color: rgb(var(--ring-code-tag-background-components)); /* #efefef */\n --ring-code-tag-color: var(--ring-code-keyword-color);\n --ring-code-tag-font-weight: bold;\n --ring-code-field-components: 102, 14, 122;\n --ring-code-field-color: rgb(var(--ring-code-field-components)); /* #660e7a */\n --ring-code-attribute-components: 0, 0, 255;\n --ring-code-attribute-color: rgb(var(--ring-code-attribute-components)); /* #00f */\n --ring-code-number-color: var(--ring-code-attribute-color);\n --ring-code-string-components: 0, 122, 0;\n --ring-code-string-color: rgb(var(--ring-code-string-components)); /* #007a00 */\n --ring-code-addition-components: 170, 222, 170;\n --ring-code-addition-color: rgb(var(--ring-code-addition-components)); /* #aadeaa */\n --ring-code-deletion-components: 200, 200, 200;\n --ring-code-deletion-color: rgb(var(--ring-code-deletion-components)); /* #c8c8c8 */\n\n /* Metrics */\n --ring-border-radius: 4px;\n --ring-border-radius-small: 2px;\n --ring-font-size-larger: 15px;\n --ring-font-size: 14px;\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, Noto Sans, Ubuntu, Cantarell, Helvetica Neue, Arial, sans-serif;\n --ring-font-family-monospace:\n Menlo,\n "Bitstream Vera Sans Mono",\n "Ubuntu Mono",\n Consolas,\n "Courier New",\n Courier,\n 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',"",{version:3,sources:["webpack://./node_modules/@jetbrains/ring-ui/components/global/variables.css"],names:[],mappings:"AAAA,mCAAmC;;AAEnC;;EAEE,gBAAgB;;EAEhB,YAAY;EACZ,qCAAqC;EACrC,mDAAmD,EAAE,YAAY;EACjE,wCAAwC;EACxC,yDAAyD,EAAE,YAAY;EACvE,qCAAqC;EACrC,mDAAmD,EAAE,YAAY;EACjE,+CAA+C;EAC/C,uEAAuE,EAAE,SAAS;EAClF,gDAAgD;EAChD,yEAAyE,EAAE,YAAY;EACvF,yDAAyD;EACzD,2FAA2F,EAAE,YAAY;EACzG,2DAA2D;EAC3D,+FAA+F,EAAE,YAAY,EAAE,uBAAuB;EACtI,8CAA8C;EAC9C,qEAAqE,EAAE,YAAY;EACnF,6CAA6C;EAC7C,mEAAmE,EAAE,YAAY;EACjF,0DAA0D;EAC1D,qDAAqD;EACrD,mCAAmC;EACnC,mDAAmD,EAAE,YAAY;EACjE,0DAA0D;EAC1D,0DAA0D,EAAE,YAAY;EACxE,yCAAyC;EACzC,+DAA+D,EAAE,YAAY;EAC7E,yCAAyC;EACzC,+DAA+D,EAAE,YAAY;EAC7E,2CAA2C;EAC3C,mEAAmE,EAAE,YAAY;EACjF,4CAA4C;EAC5C,mEAAmE,EAAE,YAAY;EACjF,6CAA6C;EAC7C,mEAAmE,EAAE,YAAY;EACjF,yCAAyC;EACzC,iDAAiD;EACjD,8EAA8E;EAC9E,yEAAyE;EACzE,oFAAoF;EACpF,2EAA2E;EAC3E,8CAA8C;EAC9C,qEAAqE,EAAE,YAAY;EACnF,mEAAmE;EACnE,8DAA8D;EAC9D,mDAAmD;EACnD,qFAAqF,EAAE,YAAY;EACnG,iHAAiH;EACjH,mHAAmH;;EAEnH,SAAS;EACT,uCAAuC;EACvC,uDAAuD,EAAE,YAAY;EACrE,mCAAmC;EACnC,mDAAmD,EAAE,YAAY;EACjE,mCAAmC;EACnC,mDAAmD,EAAE,YAAY;EACjE,yCAAyC;EACzC,+DAA+D,EAAE,YAAY;EAC7E,oCAAoC;EACpC,qDAAqD,EAAE,YAAY;EACnE,qCAAqC;EACrC,yDAAyD,EAAE,YAAY;EACvE,sCAAsC;EACtC,yDAAyD,EAAE,YAAY;EACvE,kCAAkC;EAClC,mDAAmD,EAAE,YAAY;EACjE,gDAAgD;EAChD,2CAA2C;EAC3C,+DAA+D,EAAE,SAAS;EAC1E,4CAA4C;EAC5C,0CAA0C;EAC1C,6DAA6D,EAAE,YAAY;EAC3E,yCAAyC;EACzC,2DAA2D,EAAE,SAAS;;EAEtE,eAAe;EACf,mDAAmD;EACnD,+EAA+E,EAAE,SAAS;EAC1F,iDAAiD;EACjD,2EAA2E,EAAE,SAAS;EACtF,mDAAmD;EACnD,+EAA+E,EAAE,YAAY;EAC7F,oDAAoD;EACpD,iFAAiF,EAAE,YAAY;EAC/F,iDAAiD;EACjD,2EAA2E,EAAE,YAAY;EACzF,sDAAsD;EACtD,qFAAqF,EAAE,SAAS;EAChG,+CAA+C;EAC/C,uEAAuE,EAAE,YAAY;EACrF,qDAAqD;EACrD,mFAAmF,EAAE,YAAY;EACjG,mDAAmD;EACnD,+EAA+E,EAAE,YAAY;EAC7F,mDAAmD;EACnD,+EAA+E,EAAE,YAAY;EAC7F,iDAAiD;EACjD,2EAA2E,EAAE,YAAY;EACzF,oDAAoD;EACpD,iFAAiF,EAAE,YAAY;EAC/F,6DAA6D;EAC7D,mGAAmG,EAAE,YAAY;EACjH,qDAAqD;EACrD,mFAAmF,EAAE,YAAY;EACjG,wDAAwD;EACxD,qFAAqF,EAAE,YAAY;EACnG,yDAAyD;EACzD,6FAA6F,EAAE,YAAY;EAC3G,0FAA0F,EAAE,cAAc;;EAE1G,SAAS;EACT,kEAAkE;EAClE,+BAA+B;EAC/B,mDAAmD,EAAE,SAAS;EAC9D,6CAA6C;EAC7C,mEAAmE,EAAE,YAAY;EACjF,0CAA0C;EAC1C,6DAA6D,EAAE,YAAY;EAC3E,yCAAyC;EACzC,mEAAmE,EAAE,YAAY;EACjF,oDAAoD;EACpD,iFAAiF,EAAE,YAAY;EAC/F,qDAAqD;EACrD,iCAAiC;EACjC,0CAA0C;EAC1C,+DAA+D,EAAE,YAAY;EAC7E,2CAA2C;EAC3C,uEAAuE,EAAE,SAAS;EAClF,0DAA0D;EAC1D,wCAAwC;EACxC,iEAAiE,EAAE,YAAY;EAC/E,8CAA8C;EAC9C,qEAAqE,EAAE,YAAY;EACnF,8CAA8C;EAC9C,qEAAqE,EAAE,YAAY;;EAEnF,YAAY;EACZ,yBAAyB;EACzB,+BAA+B;EAC/B,6BAA6B;EAC7B,sBAAsB;EACtB,8BAA8B;EAC9B,+BAA+B;EAC/B,wBAAwB;EACxB,8BAA8B;EAC9B,+BAA+B;EAC/B,0BAA0B;EAC1B,gCAAgC;EAChC,+HAAgD;EAChD;;;;;;;aAOW;;EAEX,0BAA0B;;EAE1B,gFAAgF;EAChF,mCAAmC;EACnC,oCAAoC;;EAEpC,yCAAyC;EACzC,uBAAuB;;EAEvB,gEAAgE;EAChE,yBAAyB;;EAEzB,8CAA8C;EAC9C,uBAAuB;AACzB",sourcesContent:['/* stylelint-disable color-no-hex */\n\n.light,\n:root {\n --ring-unit: 8px;\n\n /* Element */\n --ring-line-components: 223, 229, 235;\n --ring-line-color: rgb(var(--ring-line-components)); /* #dfe5eb */\n --ring-borders-components: 197, 209, 219;\n --ring-borders-color: rgb(var(--ring-borders-components)); /* #c5d1db */\n --ring-icon-components: 184, 209, 229;\n --ring-icon-color: rgb(var(--ring-icon-components)); /* #b8d1e5 */\n --ring-icon-secondary-components: 153, 153, 153;\n --ring-icon-secondary-color: rgb(var(--ring-icon-secondary-components)); /* #999 */\n --ring-border-disabled-components: 232, 232, 232;\n --ring-border-disabled-color: rgb(var(--ring-border-disabled-components)); /* #e8e8e8 */\n --ring-border-selected-disabled-components: 212, 212, 212;\n --ring-border-selected-disabled-color: rgb(var(--ring-border-selected-disabled-components)); /* #d4d4d4 */\n --ring-border-unselected-disabled-components: 232, 232, 232;\n --ring-border-unselected-disabled-color: rgb(var(--ring-border-unselected-disabled-components)); /* #e8e8e8 */ /* TODO remove in 6.0 */\n --ring-icon-disabled-components: 212, 212, 212;\n --ring-icon-disabled-color: rgb(var(--ring-icon-disabled-components)); /* #d4d4d4 */\n --ring-border-hover-components: 128, 198, 255;\n --ring-border-hover-color: rgb(var(--ring-border-hover-components)); /* #80c6ff */\n --ring-icon-hover-components: var(--ring-link-hover-color);\n --ring-icon-hover-color: var(--ring-link-hover-color);\n --ring-main-components: 0, 128, 229;\n --ring-main-color: rgb(var(--ring-main-components)); /* #0080e5 */\n --ring-action-link-components: var(--ring-main-components);\n --ring-action-link-color: rgb(var(--ring-main-components)); /* #0080e5 */\n --ring-main-hover-components: 0, 112, 204;\n --ring-main-hover-color: rgb(var(--ring-main-hover-components)); /* #0070cc */\n --ring-icon-error-components: 219, 88, 96;\n --ring-icon-error-color: rgb(var(--ring-icon-error-components)); /* #db5860 */\n --ring-icon-warning-components: 237, 162, 0;\n --ring-icon-warning-color: rgb(var(--ring-icon-warning-components)); /* #eda200 */\n --ring-icon-success-components: 89, 168, 105;\n --ring-icon-success-color: rgb(var(--ring-icon-success-components)); /* #59a869 */\n --ring-pale-control-components: 207, 219, 229;\n --ring-pale-control-color: rgb(var(--ring-pale-control-components)); /* #cfdbe5 */\n --ring-popup-border-components: 0, 28, 54;\n --ring-popup-border-color: var(--ring-line-color);\n --ring-popup-shadow-components: rgba(var(--ring-popup-border-components), 0.1);\n --ring-popup-shadow-color: rgba(var(--ring-popup-border-components), 0.1);\n --ring-popup-secondary-shadow-color: rgba(var(--ring-popup-border-components), 0.04);\n --ring-message-shadow-color: rgba(var(--ring-popup-border-components), 0.3);\n --ring-pinned-shadow-components: 115, 117, 119;\n --ring-pinned-shadow-color: rgb(var(--ring-pinned-shadow-components)); /* #737577 */\n --ring-button-danger-hover-components: var(--ring-icon-error-color);\n --ring-button-danger-hover-color: var(--ring-icon-error-color);\n --ring-button-primary-border-components: 0, 98, 178;\n --ring-button-primary-border-color: rgb(var(--ring-button-primary-border-components)); /* #0062b2 */\n --ring-popup-shadow: 0 2px 8px var(--ring-popup-shadow-color), 0 1px 2px var(--ring-popup-secondary-shadow-color);\n --ring-dialog-shadow: 0 4px 24px var(--ring-popup-shadow-color), 0 2px 6px var(--ring-popup-secondary-shadow-color);\n\n /* Text */\n --ring-search-components: 102, 158, 204;\n --ring-search-color: rgb(var(--ring-search-components)); /* #669ecc */\n --ring-hint-components: 64, 99, 128;\n --ring-hint-color: rgb(var(--ring-hint-components)); /* #406380 */\n --ring-link-components: 15, 91, 153;\n --ring-link-color: rgb(var(--ring-link-components)); /* #0f5b99 */\n --ring-link-hover-components: 255, 0, 140;\n --ring-link-hover-color: rgb(var(--ring-link-hover-components)); /* #ff008c */\n --ring-error-components: 169, 15, 26;\n --ring-error-color: rgb(var(--ring-error-components)); /* #a90f1a */\n --ring-warning-components: 178, 92, 0;\n --ring-warning-color: rgb(var(--ring-warning-components)); /* #b25c00 */\n --ring-success-components: 12, 117, 35;\n --ring-success-color: rgb(var(--ring-success-components)); /* #0c7523 */\n --ring-text-components: 31, 35, 38;\n --ring-text-color: rgb(var(--ring-text-components)); /* #1f2326 */\n --ring-active-text-color: var(--ring-text-color);\n --ring-white-text-components: 255, 255, 255;\n --ring-white-text-color: rgb(var(--ring-white-text-components)); /* #fff */\n --ring-heading-color: var(--ring-text-color);\n --ring-secondary-components: 115, 117, 119;\n --ring-secondary-color: rgb(var(--ring-secondary-components)); /* #737577 */\n --ring-disabled-components: 153, 153, 153;\n --ring-disabled-color: rgb(var(--ring-disabled-components)); /* #999 */\n\n /* Background */\n --ring-content-background-components: 255, 255, 255;\n --ring-content-background-color: rgb(var(--ring-content-background-components)); /* #fff */\n --ring-popup-background-components: 255, 255, 255;\n --ring-popup-background-color: rgb(var(--ring-popup-background-components)); /* #fff */\n --ring-sidebar-background-components: 247, 249, 250;\n --ring-sidebar-background-color: rgb(var(--ring-sidebar-background-components)); /* #f7f9fa */\n --ring-selected-background-components: 212, 237, 255;\n --ring-selected-background-color: rgb(var(--ring-selected-background-components)); /* #d4edff */\n --ring-hover-background-components: 235, 246, 255;\n --ring-hover-background-color: rgb(var(--ring-hover-background-components)); /* #ebf6ff */\n --ring-navigation-background-components: 255, 255, 255;\n --ring-navigation-background-color: rgb(var(--ring-navigation-background-components)); /* #fff */\n --ring-tag-background-components: 230, 236, 242;\n --ring-tag-background-color: rgb(var(--ring-tag-background-components)); /* #e6ecf2 */\n --ring-tag-hover-background-components: 211, 218, 224;\n --ring-tag-hover-background-color: rgb(var(--ring-tag-hover-background-components)); /* #d3dae0 */\n --ring-removed-background-components: 255, 213, 203;\n --ring-removed-background-color: rgb(var(--ring-removed-background-components)); /* #ffd5cb */\n --ring-warning-background-components: 250, 236, 205;\n --ring-warning-background-color: rgb(var(--ring-warning-background-components)); /* #faeccd */\n --ring-added-background-components: 216, 240, 216;\n --ring-added-background-color: rgb(var(--ring-added-background-components)); /* #d8f0d8 */\n --ring-disabled-background-components: 245, 245, 245;\n --ring-disabled-background-color: rgb(var(--ring-disabled-background-components)); /* #f5f5f5 */\n --ring-disabled-selected-background-components: 232, 232, 232;\n --ring-disabled-selected-background-color: rgb(var(--ring-disabled-selected-background-components)); /* #e8e8e8 */\n --ring-button-danger-active-components: 255, 231, 232;\n --ring-button-danger-active-color: rgb(var(--ring-button-danger-active-components)); /* #ffe7e8 */\n --ring-button-loader-background-components: 51, 163, 255;\n --ring-button-loader-background: rgb(var(--ring-button-loader-background-components)); /* #33a3ff */\n --ring-button-primary-background-components: 26, 152, 255;\n --ring-button-primary-background-color: rgb(var(--ring-button-primary-background-components)); /* #1a98ff */\n --ring-table-loader-background-color: rgba(var(--ring-content-background-components), 0.5); /* #ffffff80 */\n\n /* Code */\n --ring-code-background-color: var(--ring-content-background-color);\n --ring-code-components: 0, 0, 0;\n --ring-code-color: rgb(var(--ring-code-components)); /* #000 */\n --ring-code-comment-components: 112, 112, 112;\n --ring-code-comment-color: rgb(var(--ring-code-comment-components)); /* #707070 */\n --ring-code-meta-components: 112, 112, 112;\n --ring-code-meta-color: rgb(var(--ring-code-meta-components)); /* #707070 */\n --ring-code-keyword-components: 0, 0, 128;\n --ring-code-keyword-color: rgb(var(--ring-code-keyword-components)); /* #000080 */\n --ring-code-tag-background-components: 239, 239, 239;\n --ring-code-tag-background-color: rgb(var(--ring-code-tag-background-components)); /* #efefef */\n --ring-code-tag-color: var(--ring-code-keyword-color);\n --ring-code-tag-font-weight: bold;\n --ring-code-field-components: 102, 14, 122;\n --ring-code-field-color: rgb(var(--ring-code-field-components)); /* #660e7a */\n --ring-code-attribute-components: 0, 0, 255;\n --ring-code-attribute-color: rgb(var(--ring-code-attribute-components)); /* #00f */\n --ring-code-number-color: var(--ring-code-attribute-color);\n --ring-code-string-components: 0, 122, 0;\n --ring-code-string-color: rgb(var(--ring-code-string-components)); /* #007a00 */\n --ring-code-addition-components: 170, 222, 170;\n --ring-code-addition-color: rgb(var(--ring-code-addition-components)); /* #aadeaa */\n --ring-code-deletion-components: 200, 200, 200;\n --ring-code-deletion-color: rgb(var(--ring-code-deletion-components)); /* #c8c8c8 */\n\n /* Metrics */\n --ring-border-radius: 4px;\n --ring-border-radius-small: 2px;\n --ring-font-size-larger: 15px;\n --ring-font-size: 14px;\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, Arial, sans-serif;\n --ring-font-family-monospace:\n Menlo,\n "Bitstream Vera Sans Mono",\n "Ubuntu Mono",\n Consolas,\n "Courier New",\n Courier,\n 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'],sourceRoot:""}]),a.locals={light:"light_f331"};const l=a},9173:(e,n,t)=>{"use strict";t.d(n,{A:()=>l});var r=t(1404),o=t.n(r),i=t(7156),a=t.n(i)()(o());a.push([e.id,"/* stylelint-disable color-no-hex */\n\n.ring-ui-theme-dark,\n.dark_d4a9,\n:root.dark_d4a9 {\n --ring-line-components: 71, 81, 89;\n --ring-line-color: rgb(var(--ring-line-components)); /* #475159 */\n --ring-borders-components: 64, 99, 128;\n --ring-borders-color: rgb(var(--ring-borders-components)); /* #406380 */\n --ring-icon-components: 128, 146, 157;\n --ring-icon-color: rgb(var(--ring-icon-components)); /* #80929d */\n --ring-icon-secondary-components: 128, 146, 157;\n --ring-icon-secondary-color: rgb(var(--ring-icon-secondary-components)); /* #80929d */\n --ring-border-disabled-components: 54, 54, 54;\n --ring-border-disabled-color: rgb(var(--ring-border-disabled-components)); /* #363636 */\n --ring-border-selected-disabled-components: 54, 54, 54;\n --ring-border-selected-disabled-color: rgb(var(--ring-border-selected-disabled-components)); /* #363636 */\n --ring-border-unselected-disabled-components: 54, 54, 54;\n --ring-border-unselected-disabled-color: rgb(var(--ring-border-unselected-disabled-components)); /* #363636 */ /* TODO remove in 6.0 */\n --ring-icon-disabled-components: 80, 82, 83;\n --ring-icon-disabled-color: rgb(var(--ring-icon-disabled-components)); /* #505253 */\n --ring-border-hover-components: 112, 177, 230;\n --ring-border-hover-color: rgb(var(--ring-border-hover-components)); /* #70b1e6 */\n --ring-main-components: 0, 142, 255;\n --ring-main-color: rgb(var(--ring-main-components)); /* #008eff */\n --ring-action-link-components: var(--ring-main-components);\n --ring-action-link-color: rgb(var(--ring-main-components)); /* #008eff */\n --ring-main-hover-components: 0, 126, 229;\n --ring-main-hover-color: rgb(var(--ring-main-hover-components)); /* #007ee5 */\n --ring-icon-error-components: 219, 88, 96;\n --ring-icon-error-color: rgb(var(--ring-icon-error-components)); /* #db5860 */\n --ring-icon-warning-components: 237, 162, 0;\n --ring-icon-warning-color: rgb(var(--ring-icon-warning-components)); /* #eda200 */\n --ring-icon-success-components: 71, 212, 100;\n --ring-icon-success-color: rgb(var(--ring-icon-success-components)); /* #47d464 */\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 --ring-pinned-shadow-components: 0, 0, 0;\n --ring-pinned-shadow-color: rgb(var(--ring-pinned-shadow-components)); /* #000 */\n --ring-button-danger-hover-color: var(--ring-error-color);\n --ring-button-primary-border-components: 128, 198, 255;\n --ring-button-primary-border-color: rgb(var(--ring-button-primary-border-components)); /* #80c6ff */\n\n /* Text */\n --ring-hint-components: 128, 146, 157;\n --ring-hint-color: rgb(var(--ring-hint-components)); /* #80929d */\n --ring-link-components: 112, 177, 230;\n --ring-link-color: rgb(var(--ring-link-components)); /* #70b1e6 */\n --ring-error-components: 219, 88, 96;\n --ring-error-color: rgb(var(--ring-error-components)); /* #db5860 */\n --ring-warning-components: 237, 162, 0;\n --ring-warning-color: rgb(var(--ring-warning-components)); /* #eda200 */\n --ring-success-components: 71, 212, 100;\n --ring-success-color: rgb(var(--ring-success-components)); /* #47d464 */\n --ring-text-components: 187, 187, 187;\n --ring-text-color: rgb(var(--ring-text-components)); /* #bbb */\n --ring-active-text-components: 255, 255, 255;\n --ring-active-text-color: rgb(var(--ring-active-text-components)); /* #fff */\n --ring-heading-color: var(--ring-text-color);\n --ring-secondary-components: 128, 146, 157;\n --ring-secondary-color: rgb(var(--ring-secondary-components)); /* #80929d */\n --ring-disabled-components: 81, 95, 104;\n --ring-disabled-color: rgb(var(--ring-disabled-components)); /* #515F68 */\n\n /* Background */\n --ring-content-background-components: 35, 39, 43;\n --ring-content-background-color: rgb(var(--ring-content-background-components)); /* #23272b */\n --ring-popup-background-components: 17, 19, 20;\n --ring-popup-background-color: rgb(var(--ring-popup-background-components)); /* #111314 */\n --ring-sidebar-background-components: 40, 52, 61;\n --ring-sidebar-background-color: rgb(var(--ring-sidebar-background-components)); /* #28343d */\n --ring-selected-background-components: 6, 38, 64;\n --ring-selected-background-color: rgb(var(--ring-selected-background-components)); /* #062640 */\n --ring-hover-background-components: 11, 26, 38;\n --ring-hover-background-color: rgb(var(--ring-hover-background-components)); /* #0b1a26 */\n --ring-navigation-background-components: 17, 19, 20;\n --ring-navigation-background-color: rgb(var(--ring-navigation-background-components)); /* #111314 */\n --ring-tag-background-components: 62, 77, 89;\n --ring-tag-background-color: rgb(var(--ring-tag-background-components)); /* #3e4d59 */\n --ring-tag-hover-background-components: 51, 62, 71;\n --ring-tag-hover-background-color: rgb(var(--ring-tag-hover-background-components)); /* #333e47 */\n --ring-removed-background-components: 143, 82, 71;\n --ring-removed-background-color: rgb(var(--ring-removed-background-components)); /* #8f5247 */\n --ring-warning-background-components: 89, 61, 1;\n --ring-warning-background-color: rgb(var(--ring-warning-background-components)); /* #593d01 */\n --ring-added-background-components: 54, 89, 71;\n --ring-added-background-color: rgb(var(--ring-added-background-components)); /* #365947 */\n --ring-disabled-background-components: 44, 47, 51;\n --ring-disabled-background-color: rgb(var(--ring-disabled-background-components)); /* #2C2F33 */\n --ring-disabled-selected-background-components: 44, 47, 51;\n --ring-disabled-selected-background-color: rgb(var(--ring-disabled-selected-background-components)); /* #2C2F33 */\n --ring-button-danger-active-components: 38, 8, 10;\n --ring-button-danger-active-color: rgb(var(--ring-button-danger-active-components)); /* #26080a */\n --ring-button-primary-background-components: 0, 126, 229;\n --ring-button-primary-background-color: rgb(var(--ring-button-primary-background-components)); /* #007ee5 */\n --ring-table-loader-background-color: rgba(var(--ring-content-background-components), 0.5); /* #23272b80 */\n\n /* Code */\n --ring-code-background-components: 43, 43, 43;\n --ring-code-background-color: rgb(var(--ring-code-background-components)); /* #2b2b2b */\n --ring-code-components: 169, 183, 198;\n --ring-code-color: rgb(var(--ring-code-components)); /* #a9b7c6 */\n --ring-code-meta-components: 187, 181, 41;\n --ring-code-meta-color: rgb(var(--ring-code-meta-components)); /* #bbb529 */\n --ring-code-keyword-components: 204, 120, 50;\n --ring-code-keyword-color: rgb(var(--ring-code-keyword-components)); /* #cc7832 */\n --ring-code-tag-background-components: 43, 43, 43;\n --ring-code-tag-background-color: rgb(var(--ring-code-tag-background-components)); /* #2b2b2b */\n --ring-code-tag-components: 232, 191, 106;\n --ring-code-tag-color: rgb(var(--ring-code-tag-components)); /* #e8bf6a */\n --ring-code-tag-font-weight: normal;\n --ring-code-field-components: 152, 118, 170;\n --ring-code-field-color: rgb(var(--ring-code-tag-font-weight)); /* #9876aa */\n --ring-code-attribute-components: 186, 186, 186;\n --ring-code-attribute-color: rgb(var(--ring-code-attribute-components)); /* #bababa */\n --ring-code-number-components: 104, 151, 187;\n --ring-code-number-color: rgb(var(--ring-code-number-components)); /* #6897bb */\n --ring-code-string-components: 106, 135, 89;\n --ring-code-string-color: rgb(var(--ring-code-string-components)); /* #6a8759 */\n --ring-code-addition-components: 68, 113, 82;\n --ring-code-addition-color: rgb(var(--ring-code-addition-components)); /* #447152 */\n --ring-code-deletion-components: 101, 110, 118;\n --ring-code-deletion-color: rgb(var(--ring-code-deletion-components)); /* #656e76 */\n\n color-scheme: dark;\n}\n","",{version:3,sources:["webpack://./node_modules/@jetbrains/ring-ui/components/global/variables_dark.css"],names:[],mappings:"AAAA,mCAAmC;;AAEnC;;;EAGE,kCAAkC;EAClC,mDAAmD,EAAE,YAAY;EACjE,sCAAsC;EACtC,yDAAyD,EAAE,YAAY;EACvE,qCAAqC;EACrC,mDAAmD,EAAE,YAAY;EACjE,+CAA+C;EAC/C,uEAAuE,EAAE,YAAY;EACrF,6CAA6C;EAC7C,yEAAyE,EAAE,YAAY;EACvF,sDAAsD;EACtD,2FAA2F,EAAE,YAAY;EACzG,wDAAwD;EACxD,+FAA+F,EAAE,YAAY,EAAE,uBAAuB;EACtI,2CAA2C;EAC3C,qEAAqE,EAAE,YAAY;EACnF,6CAA6C;EAC7C,mEAAmE,EAAE,YAAY;EACjF,mCAAmC;EACnC,mDAAmD,EAAE,YAAY;EACjE,0DAA0D;EAC1D,0DAA0D,EAAE,YAAY;EACxE,yCAAyC;EACzC,+DAA+D,EAAE,YAAY;EAC7E,yCAAyC;EACzC,+DAA+D,EAAE,YAAY;EAC7E,2CAA2C;EAC3C,mEAAmE,EAAE,YAAY;EACjF,4CAA4C;EAC5C,mEAAmE,EAAE,YAAY;EACjF,yCAAyC;EACzC,yEAAyE;EACzE,0EAA0E;EAC1E,2EAA2E;EAC3E,wCAAwC;EACxC,qEAAqE,EAAE,SAAS;EAChF,yDAAyD;EACzD,sDAAsD;EACtD,qFAAqF,EAAE,YAAY;;EAEnG,SAAS;EACT,qCAAqC;EACrC,mDAAmD,EAAE,YAAY;EACjE,qCAAqC;EACrC,mDAAmD,EAAE,YAAY;EACjE,oCAAoC;EACpC,qDAAqD,EAAE,YAAY;EACnE,sCAAsC;EACtC,yDAAyD,EAAE,YAAY;EACvE,uCAAuC;EACvC,yDAAyD,EAAE,YAAY;EACvE,qCAAqC;EACrC,mDAAmD,EAAE,SAAS;EAC9D,4CAA4C;EAC5C,iEAAiE,EAAE,SAAS;EAC5E,4CAA4C;EAC5C,0CAA0C;EAC1C,6DAA6D,EAAE,YAAY;EAC3E,uCAAuC;EACvC,2DAA2D,EAAE,YAAY;;EAEzE,eAAe;EACf,gDAAgD;EAChD,+EAA+E,EAAE,YAAY;EAC7F,8CAA8C;EAC9C,2EAA2E,EAAE,YAAY;EACzF,gDAAgD;EAChD,+EAA+E,EAAE,YAAY;EAC7F,gDAAgD;EAChD,iFAAiF,EAAE,YAAY;EAC/F,8CAA8C;EAC9C,2EAA2E,EAAE,YAAY;EACzF,mDAAmD;EACnD,qFAAqF,EAAE,YAAY;EACnG,4CAA4C;EAC5C,uEAAuE,EAAE,YAAY;EACrF,kDAAkD;EAClD,mFAAmF,EAAE,YAAY;EACjG,iDAAiD;EACjD,+EAA+E,EAAE,YAAY;EAC7F,+CAA+C;EAC/C,+EAA+E,EAAE,YAAY;EAC7F,8CAA8C;EAC9C,2EAA2E,EAAE,YAAY;EACzF,iDAAiD;EACjD,iFAAiF,EAAE,YAAY;EAC/F,0DAA0D;EAC1D,mGAAmG,EAAE,YAAY;EACjH,iDAAiD;EACjD,mFAAmF,EAAE,YAAY;EACjG,wDAAwD;EACxD,6FAA6F,EAAE,YAAY;EAC3G,0FAA0F,EAAE,cAAc;;EAE1G,SAAS;EACT,6CAA6C;EAC7C,yEAAyE,EAAE,YAAY;EACvF,qCAAqC;EACrC,mDAAmD,EAAE,YAAY;EACjE,yCAAyC;EACzC,6DAA6D,EAAE,YAAY;EAC3E,4CAA4C;EAC5C,mEAAmE,EAAE,YAAY;EACjF,iDAAiD;EACjD,iFAAiF,EAAE,YAAY;EAC/F,yCAAyC;EACzC,2DAA2D,EAAE,YAAY;EACzE,mCAAmC;EACnC,2CAA2C;EAC3C,8DAA8D,EAAE,YAAY;EAC5E,+CAA+C;EAC/C,uEAAuE,EAAE,YAAY;EACrF,4CAA4C;EAC5C,iEAAiE,EAAE,YAAY;EAC/E,2CAA2C;EAC3C,iEAAiE,EAAE,YAAY;EAC/E,4CAA4C;EAC5C,qEAAqE,EAAE,YAAY;EACnF,8CAA8C;EAC9C,qEAAqE,EAAE,YAAY;;EAEnF,kBAAkB;AACpB",sourcesContent:["/* stylelint-disable color-no-hex */\n\n:global(.ring-ui-theme-dark),\n.dark,\n:root.dark {\n --ring-line-components: 71, 81, 89;\n --ring-line-color: rgb(var(--ring-line-components)); /* #475159 */\n --ring-borders-components: 64, 99, 128;\n --ring-borders-color: rgb(var(--ring-borders-components)); /* #406380 */\n --ring-icon-components: 128, 146, 157;\n --ring-icon-color: rgb(var(--ring-icon-components)); /* #80929d */\n --ring-icon-secondary-components: 128, 146, 157;\n --ring-icon-secondary-color: rgb(var(--ring-icon-secondary-components)); /* #80929d */\n --ring-border-disabled-components: 54, 54, 54;\n --ring-border-disabled-color: rgb(var(--ring-border-disabled-components)); /* #363636 */\n --ring-border-selected-disabled-components: 54, 54, 54;\n --ring-border-selected-disabled-color: rgb(var(--ring-border-selected-disabled-components)); /* #363636 */\n --ring-border-unselected-disabled-components: 54, 54, 54;\n --ring-border-unselected-disabled-color: rgb(var(--ring-border-unselected-disabled-components)); /* #363636 */ /* TODO remove in 6.0 */\n --ring-icon-disabled-components: 80, 82, 83;\n --ring-icon-disabled-color: rgb(var(--ring-icon-disabled-components)); /* #505253 */\n --ring-border-hover-components: 112, 177, 230;\n --ring-border-hover-color: rgb(var(--ring-border-hover-components)); /* #70b1e6 */\n --ring-main-components: 0, 142, 255;\n --ring-main-color: rgb(var(--ring-main-components)); /* #008eff */\n --ring-action-link-components: var(--ring-main-components);\n --ring-action-link-color: rgb(var(--ring-main-components)); /* #008eff */\n --ring-main-hover-components: 0, 126, 229;\n --ring-main-hover-color: rgb(var(--ring-main-hover-components)); /* #007ee5 */\n --ring-icon-error-components: 219, 88, 96;\n --ring-icon-error-color: rgb(var(--ring-icon-error-components)); /* #db5860 */\n --ring-icon-warning-components: 237, 162, 0;\n --ring-icon-warning-color: rgb(var(--ring-icon-warning-components)); /* #eda200 */\n --ring-icon-success-components: 71, 212, 100;\n --ring-icon-success-color: rgb(var(--ring-icon-success-components)); /* #47d464 */\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 --ring-pinned-shadow-components: 0, 0, 0;\n --ring-pinned-shadow-color: rgb(var(--ring-pinned-shadow-components)); /* #000 */\n --ring-button-danger-hover-color: var(--ring-error-color);\n --ring-button-primary-border-components: 128, 198, 255;\n --ring-button-primary-border-color: rgb(var(--ring-button-primary-border-components)); /* #80c6ff */\n\n /* Text */\n --ring-hint-components: 128, 146, 157;\n --ring-hint-color: rgb(var(--ring-hint-components)); /* #80929d */\n --ring-link-components: 112, 177, 230;\n --ring-link-color: rgb(var(--ring-link-components)); /* #70b1e6 */\n --ring-error-components: 219, 88, 96;\n --ring-error-color: rgb(var(--ring-error-components)); /* #db5860 */\n --ring-warning-components: 237, 162, 0;\n --ring-warning-color: rgb(var(--ring-warning-components)); /* #eda200 */\n --ring-success-components: 71, 212, 100;\n --ring-success-color: rgb(var(--ring-success-components)); /* #47d464 */\n --ring-text-components: 187, 187, 187;\n --ring-text-color: rgb(var(--ring-text-components)); /* #bbb */\n --ring-active-text-components: 255, 255, 255;\n --ring-active-text-color: rgb(var(--ring-active-text-components)); /* #fff */\n --ring-heading-color: var(--ring-text-color);\n --ring-secondary-components: 128, 146, 157;\n --ring-secondary-color: rgb(var(--ring-secondary-components)); /* #80929d */\n --ring-disabled-components: 81, 95, 104;\n --ring-disabled-color: rgb(var(--ring-disabled-components)); /* #515F68 */\n\n /* Background */\n --ring-content-background-components: 35, 39, 43;\n --ring-content-background-color: rgb(var(--ring-content-background-components)); /* #23272b */\n --ring-popup-background-components: 17, 19, 20;\n --ring-popup-background-color: rgb(var(--ring-popup-background-components)); /* #111314 */\n --ring-sidebar-background-components: 40, 52, 61;\n --ring-sidebar-background-color: rgb(var(--ring-sidebar-background-components)); /* #28343d */\n --ring-selected-background-components: 6, 38, 64;\n --ring-selected-background-color: rgb(var(--ring-selected-background-components)); /* #062640 */\n --ring-hover-background-components: 11, 26, 38;\n --ring-hover-background-color: rgb(var(--ring-hover-background-components)); /* #0b1a26 */\n --ring-navigation-background-components: 17, 19, 20;\n --ring-navigation-background-color: rgb(var(--ring-navigation-background-components)); /* #111314 */\n --ring-tag-background-components: 62, 77, 89;\n --ring-tag-background-color: rgb(var(--ring-tag-background-components)); /* #3e4d59 */\n --ring-tag-hover-background-components: 51, 62, 71;\n --ring-tag-hover-background-color: rgb(var(--ring-tag-hover-background-components)); /* #333e47 */\n --ring-removed-background-components: 143, 82, 71;\n --ring-removed-background-color: rgb(var(--ring-removed-background-components)); /* #8f5247 */\n --ring-warning-background-components: 89, 61, 1;\n --ring-warning-background-color: rgb(var(--ring-warning-background-components)); /* #593d01 */\n --ring-added-background-components: 54, 89, 71;\n --ring-added-background-color: rgb(var(--ring-added-background-components)); /* #365947 */\n --ring-disabled-background-components: 44, 47, 51;\n --ring-disabled-background-color: rgb(var(--ring-disabled-background-components)); /* #2C2F33 */\n --ring-disabled-selected-background-components: 44, 47, 51;\n --ring-disabled-selected-background-color: rgb(var(--ring-disabled-selected-background-components)); /* #2C2F33 */\n --ring-button-danger-active-components: 38, 8, 10;\n --ring-button-danger-active-color: rgb(var(--ring-button-danger-active-components)); /* #26080a */\n --ring-button-primary-background-components: 0, 126, 229;\n --ring-button-primary-background-color: rgb(var(--ring-button-primary-background-components)); /* #007ee5 */\n --ring-table-loader-background-color: rgba(var(--ring-content-background-components), 0.5); /* #23272b80 */\n\n /* Code */\n --ring-code-background-components: 43, 43, 43;\n --ring-code-background-color: rgb(var(--ring-code-background-components)); /* #2b2b2b */\n --ring-code-components: 169, 183, 198;\n --ring-code-color: rgb(var(--ring-code-components)); /* #a9b7c6 */\n --ring-code-meta-components: 187, 181, 41;\n --ring-code-meta-color: rgb(var(--ring-code-meta-components)); /* #bbb529 */\n --ring-code-keyword-components: 204, 120, 50;\n --ring-code-keyword-color: rgb(var(--ring-code-keyword-components)); /* #cc7832 */\n --ring-code-tag-background-components: 43, 43, 43;\n --ring-code-tag-background-color: rgb(var(--ring-code-tag-background-components)); /* #2b2b2b */\n --ring-code-tag-components: 232, 191, 106;\n --ring-code-tag-color: rgb(var(--ring-code-tag-components)); /* #e8bf6a */\n --ring-code-tag-font-weight: normal;\n --ring-code-field-components: 152, 118, 170;\n --ring-code-field-color: rgb(var(--ring-code-tag-font-weight)); /* #9876aa */\n --ring-code-attribute-components: 186, 186, 186;\n --ring-code-attribute-color: rgb(var(--ring-code-attribute-components)); /* #bababa */\n --ring-code-number-components: 104, 151, 187;\n --ring-code-number-color: rgb(var(--ring-code-number-components)); /* #6897bb */\n --ring-code-string-components: 106, 135, 89;\n --ring-code-string-color: rgb(var(--ring-code-string-components)); /* #6a8759 */\n --ring-code-addition-components: 68, 113, 82;\n --ring-code-addition-color: rgb(var(--ring-code-addition-components)); /* #447152 */\n --ring-code-deletion-components: 101, 110, 118;\n --ring-code-deletion-color: rgb(var(--ring-code-deletion-components)); /* #656e76 */\n\n color-scheme: dark;\n}\n"],sourceRoot:""}]),a.locals={dark:"dark_d4a9"};const l=a},5066:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>s});var r=t(1404),o=t.n(r),i=t(7156),a=t.n(i),l=t(9106),c=t(5280),u=a()(o());u.i(c.A),u.i(l.default,"",!0),u.push([e.id,'.icon_aaa7 {\n display: inline-block;\n\n fill: currentColor;\n}\n\n.glyph_f986 {\n display: inline-flex;\n\n margin-right: -1px;\n margin-left: -1px;\n\n pointer-events: none;\n}\n\n.glyph_f986[width="10"] {\n vertical-align: -1px;\n }\n\n.glyph_f986[width="14"] {\n margin-right: -2px;\n margin-left: 0;\n\n vertical-align: -3px;\n }\n\n.glyph_f986[width="16"] {\n vertical-align: -3px;\n }\n\n.glyph_f986[width="20"] {\n vertical-align: -2px;\n }\n\n.glyph_f986.compatibilityMode_d631 {\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/* stylelint-disable-next-line media-feature-name-no-vendor-prefix */\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n .glyph_f986 {\n width: auto; /* Safari size bug workaround, see https://youtrack.jetbrains.com/issue/RG-1983 */\n }\n}\n\n.gray_f6a8 {\n color: var(--ring-icon-secondary-color);\n}\n\n.hover_fc27 {\n color: var(--ring-icon-hover-color);\n}\n\n.green_bfb1 {\n color: var(--ring-icon-success-color);\n}\n\n.magenta_b045 {\n color: var(--ring-link-hover-color);\n}\n\n.red_a7ec {\n color: var(--ring-icon-error-color);\n}\n\n.blue_ec1e {\n color: var(--ring-main-color);\n}\n\n.white_c896 {\n color: var(--ring-white-text-color);\n}\n\n.loading_c5e2 {\n animation-name: icon-loading_fe22;\n animation-duration: 1200ms;\n animation-iteration-count: infinite;\n}\n\n@keyframes icon-loading_fe22 {\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',"",{version:3,sources:["webpack://./node_modules/@jetbrains/ring-ui/components/icon/icon.css"],names:[],mappings:"AAIA;EACE,qBAAqB;;EAErB,kBAAkB;AACpB;;AAEA;EACE,oBAAoB;;EAEpB,kBAAkB;EAClB,iBAAiB;;EAEjB,oBAAoB;AA2BtB;;AAzBE;IACE,oBAAoB;EACtB;;AAEA;IACE,kBAAkB;IAClB,cAAc;;IAEd,oBAAoB;EACtB;;AAEA;IACE,oBAAoB;EACtB;;AAEA;IACE,oBAAoB;EACtB;;AAEA;IACE,WAAqB;IACrB,YAAsB;IACtB,eAAe;IACf,cAAc;EAChB;;AAGF,8EAA8E;AAC9E,oEAAoE;AACpE;EACE;IACE,WAAW,EAAE,iFAAiF;EAChG;AACF;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,6BAA6B;AAC/B;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,iCAA4B;EAC5B,0BAA0B;EAC1B,mCAAmC;AACrC;;AAEA;EACE;IACE,mBAAmB;EACrB;;EAEA;IACE,qBAAqB;;IAErB,YAAY;EACd;;EAEA;IACE,mBAAmB;EACrB;AACF",sourcesContent:['@import "../global/variables.css";\n\n@value unit from "../global/global.css";\n\n.icon {\n display: inline-block;\n\n fill: currentColor;\n}\n\n.glyph {\n display: inline-flex;\n\n margin-right: -1px;\n margin-left: -1px;\n\n pointer-events: none;\n\n &[width="10"] {\n vertical-align: -1px;\n }\n\n &[width="14"] {\n margin-right: -2px;\n margin-left: 0;\n\n vertical-align: -3px;\n }\n\n &[width="16"] {\n vertical-align: -3px;\n }\n\n &[width="20"] {\n vertical-align: -2px;\n }\n\n &.compatibilityMode {\n width: calc(unit * 2);\n height: calc(unit * 2);\n margin-right: 0;\n margin-left: 0;\n }\n}\n\n/* HACK: This media query hack makes styles applied for WebKit browsers only */\n/* stylelint-disable-next-line media-feature-name-no-vendor-prefix */\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n .glyph {\n width: auto; /* Safari size bug workaround, see https://youtrack.jetbrains.com/issue/RG-1983 */\n }\n}\n\n.gray {\n color: var(--ring-icon-secondary-color);\n}\n\n.hover {\n color: var(--ring-icon-hover-color);\n}\n\n.green {\n color: var(--ring-icon-success-color);\n}\n\n.magenta {\n color: var(--ring-link-hover-color);\n}\n\n.red {\n color: var(--ring-icon-error-color);\n}\n\n.blue {\n color: var(--ring-main-color);\n}\n\n.white {\n color: var(--ring-white-text-color);\n}\n\n.loading {\n animation-name: icon-loading;\n animation-duration: 1200ms;\n animation-iteration-count: infinite;\n}\n\n@keyframes icon-loading {\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'],sourceRoot:""}]),u.locals={unit:`${l.default.locals.unit}`,icon:"icon_aaa7",glyph:"glyph_f986",compatibilityMode:"compatibilityMode_d631",gray:"gray_f6a8",hover:"hover_fc27",green:"green_bfb1",magenta:"magenta_b045",red:"red_a7ec",blue:"blue_ec1e",white:"white_c896",loading:"loading_c5e2","icon-loading":"icon-loading_fe22"};const s=u},8976:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>s});var r=t(1404),o=t.n(r),i=t(7156),a=t.n(i),l=t(9106),c=t(5280),u=a()(o());u.i(c.A),u.i(l.default,"",!0),u.push([e.id,":root {\n --ring-input-xs: 96px;\n --ring-input-s: 96px;\n --ring-input-m: 240px;\n --ring-input-l: 400px;\n}\n\n/**\n * @name Input Sizes\n */\n\n/* XS */\n\n.ring-input-size_xs.ring-input-size_xs {\n display: inline-block;\n\n width: 96px;\n\n width: var(--ring-input-xs);\n}\n\n.ring-input-size_xs.ring-input-size_xs ~ .ring-error-bubble {\n left: 98px;\n left: calc(var(--ring-input-xs) + 2px);\n}\n\n/* S */\n\n.ring-input-size_s.ring-input-size_s {\n display: inline-block;\n\n width: 96px;\n\n width: var(--ring-input-s);\n}\n\n.ring-input-size_s.ring-input-size_s ~ .ring-error-bubble {\n left: 98px;\n left: calc(var(--ring-input-s) + 2px);\n}\n\n/* M */\n\n.ring-input-size_m.ring-input-size_m {\n display: inline-block;\n\n width: 240px;\n\n width: var(--ring-input-m);\n}\n\n.ring-input-size_m.ring-input-size_m ~ .ring-error-bubble {\n left: 242px;\n left: calc(var(--ring-input-m) + 2px);\n}\n\n.ring-input-size_md.ring-input-size_md {\n display: inline-block;\n\n width: 240px;\n\n width: var(--ring-input-m);\n}\n\n.ring-input-size_md.ring-input-size_md ~ .ring-error-bubble {\n left: 242px;\n left: calc(var(--ring-input-m) + 2px);\n}\n\n/* L */\n\n.ring-input-size_l.ring-input-size_l {\n display: inline-block;\n\n width: 400px;\n\n width: var(--ring-input-l);\n}\n\n.ring-input-size_l.ring-input-size_l ~ .ring-error-bubble {\n left: 402px;\n left: calc(var(--ring-input-l) + 2px);\n}\n\n.ring-input-height_s.ring-input-height_s {\n --ring-input-padding-block: 1px;\n}\n\n.ring-input-height_m.ring-input-height_m {\n --ring-input-padding-block: 3px;\n}\n\n.ring-input-height_l.ring-input-height_l {\n --ring-input-padding-block: 5px;\n}\n","",{version:3,sources:["webpack://./node_modules/@jetbrains/ring-ui/components/input-size/input-size.css"],names:[],mappings:"AAIA;EACE,qBAAgC;EAChC,oBAA+B;EAC/B,qBAA+B;EAC/B,qBAA+B;AACjC;;AAEA;;EAEE;;AAEF,OAAO;;AAEP;EACE,qBAAqB;;EAErB,WAA2B;;EAA3B,2BAA2B;AAC7B;;AAEA;EACE,UAAsC;EAAtC,sCAAsC;AACxC;;AAEA,MAAM;;AAEN;EACE,qBAAqB;;EAErB,WAA0B;;EAA1B,0BAA0B;AAC5B;;AAEA;EACE,UAAqC;EAArC,qCAAqC;AACvC;;AAEA,MAAM;;AAEN;EACE,qBAAqB;;EAErB,YAA0B;;EAA1B,0BAA0B;AAC5B;;AAEA;EACE,WAAqC;EAArC,qCAAqC;AACvC;;AAEA;EACE,qBAAqB;;EAErB,YAA0B;;EAA1B,0BAA0B;AAC5B;;AAEA;EACE,WAAqC;EAArC,qCAAqC;AACvC;;AAEA,MAAM;;AAEN;EACE,qBAAqB;;EAErB,YAA0B;;EAA1B,0BAA0B;AAC5B;;AAEA;EACE,WAAqC;EAArC,qCAAqC;AACvC;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,+BAA+B;AACjC",sourcesContent:['@import "../global/variables.css";\n\n@value unit from "../global/global.css";\n\n:root {\n --ring-input-xs: calc(unit * 12);\n --ring-input-s: calc(unit * 12);\n --ring-input-m: calc(unit * 30);\n --ring-input-l: calc(unit * 50);\n}\n\n/**\n * @name Input Sizes\n */\n\n/* XS */\n\n:global(.ring-input-size_xs.ring-input-size_xs) {\n display: inline-block;\n\n width: var(--ring-input-xs);\n}\n\n:global(.ring-input-size_xs.ring-input-size_xs ~ .ring-error-bubble) {\n left: calc(var(--ring-input-xs) + 2px);\n}\n\n/* S */\n\n:global(.ring-input-size_s.ring-input-size_s) {\n display: inline-block;\n\n width: var(--ring-input-s);\n}\n\n:global(.ring-input-size_s.ring-input-size_s ~ .ring-error-bubble) {\n left: calc(var(--ring-input-s) + 2px);\n}\n\n/* M */\n\n:global(.ring-input-size_m.ring-input-size_m) {\n display: inline-block;\n\n width: var(--ring-input-m);\n}\n\n:global(.ring-input-size_m.ring-input-size_m ~ .ring-error-bubble) {\n left: calc(var(--ring-input-m) + 2px);\n}\n\n:global(.ring-input-size_md.ring-input-size_md) {\n display: inline-block;\n\n width: var(--ring-input-m);\n}\n\n:global(.ring-input-size_md.ring-input-size_md ~ .ring-error-bubble) {\n left: calc(var(--ring-input-m) + 2px);\n}\n\n/* L */\n\n:global(.ring-input-size_l.ring-input-size_l) {\n display: inline-block;\n\n width: var(--ring-input-l);\n}\n\n:global(.ring-input-size_l.ring-input-size_l ~ .ring-error-bubble) {\n left: calc(var(--ring-input-l) + 2px);\n}\n\n:global(.ring-input-height_s.ring-input-height_s) {\n --ring-input-padding-block: 1px;\n}\n\n:global(.ring-input-height_m.ring-input-height_m) {\n --ring-input-padding-block: 3px;\n}\n\n:global(.ring-input-height_l.ring-input-height_l) {\n --ring-input-padding-block: 5px;\n}\n'],sourceRoot:""}]),u.locals={unit:`${l.default.locals.unit}`};const s=u},8266:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>f});var r=t(1404),o=t.n(r),i=t(7156),a=t.n(i),l=t(9106),c=t(5280),u=t(9892),s=a()(o());s.i(c.A),s.i(u.default),s.i(l.default,"",!0),s.push([e.id,'.outerContainer_cb70 {\n --ring-input-icon-offset: 20px;\n --ring-input-padding-inline: 8px;\n --ring-input-background-color: var(--ring-content-background-color);\n}\n\n.borderless_f79b {\n /* stylelint-disable-next-line length-zero-no-unit */\n --ring-input-padding-inline: 0px;\n}\n\n.container_ee33 {\n position: relative;\n\n box-sizing: border-box;\n\n font-size: var(--ring-font-size);\n line-height: var(--ring-line-height);\n}\n\n.container_ee33 * {\n box-sizing: border-box;\n }\n\n.input_f220 {\n --ring-input-padding-start: var(--ring-input-padding-inline);\n --ring-input-padding-end: var(--ring-input-padding-inline);\n\n width: 100%;\n\n margin: 0;\n padding-top: var(--ring-input-padding-block);\n padding-right: var(--ring-input-padding-end);\n padding-bottom: var(--ring-input-padding-block);\n padding-left: var(--ring-input-padding-start);\n\n transition: border-color var(--ring-ease);\n\n color: var(--ring-text-color);\n border: 1px solid var(--ring-borders-color);\n border-radius: var(--ring-border-radius);\n outline: none;\n background-color: var(--ring-input-background-color);\n\n font: inherit;\n\n caret-color: var(--ring-main-color);\n}\n\n[dir="rtl"] .input_f220 {\n padding-right: var(--ring-input-padding-start);\n padding-left: var(--ring-input-padding-end);\n }\n\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.input_f220:hover {\n transition: none;\n\n border-color: var(--ring-border-hover-color);\n }}\n\n.error_ff90 .input_f220 {\n border-color: var(--ring-icon-error-color);\n }\n\n.input_f220:focus {\n transition: none;\n\n border-color: var(--ring-main-color);\n }\n\n.input_f220[disabled] {\n color: var(--ring-disabled-color);\n border-color: var(--ring-border-disabled-color);\n background-color: var(--ring-disabled-background-color);\n\n -webkit-text-fill-color: var(--ring-disabled-color); /* Required for Safari, see RG-2063 for details */\n }\n\n/*\n Kill yellow/blue webkit autocomplete\n https://css-tricks.com/snippets/css/change-autocomplete-styles-webkit-browsers/\n */\n\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.input_f220:-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.input_f220:-webkit-autofill,\n .input_f220:-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.borderless_f79b .input_f220 {\n border-color: transparent;\n background-color: transparent;\n}\n\n.withIcon_f066 .input_f220 {\n --ring-input-padding-start: calc(var(--ring-input-padding-inline) + var(--ring-input-icon-offset));\n}\n\n.clearable_fd1e .input_f220 {\n --ring-input-padding-end: calc(var(--ring-input-padding-inline) + var(--ring-input-icon-offset));\n}\n\n.icon_e49c {\n position: absolute;\n top: calc(var(--ring-input-padding-block) + 1px);\n left: var(--ring-input-padding-inline);\n\n pointer-events: none;\n\n color: var(--ring-icon-secondary-color);\n}\n\n[dir="rtl"] .icon_e49c {\n right: 8px;\n left: auto;\n }\n\n.clear_ffc3 {\n position: absolute;\n top: calc(var(--ring-input-padding-block) + 2px);\n right: var(--ring-input-padding-inline);\n\n height: auto;\n\n padding-right: 0;\n\n line-height: inherit;\n}\n\n.empty_cc0d .clear_ffc3 {\n display: none;\n }\n\n[dir="rtl"] .clear_ffc3 {\n right: auto;\n left: 8px;\n }\n\ntextarea.input_f220 {\n overflow: hidden;\n\n box-sizing: border-box;\n\n resize: none;\n}\n\n.input_f220::-moz-placeholder {\n color: var(--ring-disabled-color);\n}\n\n.input_f220::placeholder {\n color: var(--ring-disabled-color);\n}\n\n.input_f220::-webkit-search-cancel-button {\n -webkit-appearance: none;\n}\n\n.errorText_e447 {\n margin-top: 4px;\n\n color: var(--ring-error-color);\n\n font-size: var(--ring-font-size-smaller);\n line-height: var(--ring-line-height-lowest);\n}\n\n.sizeS_c560 {\n width: 96px;\n}\n\n.sizeM_aee6 {\n width: 240px;\n}\n\n.sizeL_b0ca {\n width: 400px;\n}\n\n.sizeFULL_f4f9 {\n width: 100%;\n}\n\n.heightS_a68d {\n --ring-input-padding-block: 1px;\n}\n\n.heightM_bc35 {\n --ring-input-padding-block: 3px;\n}\n\n.heightL_f82d {\n --ring-input-padding-block: 5px;\n}\n',"",{version:3,sources:["webpack://./node_modules/@jetbrains/ring-ui/components/input/input.css",""],names:[],mappings:"AAKA;EACE,8BAA0C;EAC1C,gCAAiC;EACjC,mEAAmE;AACrE;;AAEA;EACE,oDAAoD;EACpD,gCAAgC;AAClC;;AAEA;EACE,kBAAkB;;EAElB,sBAAsB;;EAEtB,gCAAgC;EAChC,oCAAoC;AAKtC;;AAHE;IACE,sBAAsB;EACxB;;AAGF;EACE,4DAA4D;EAC5D,0DAA0D;;EAE1D,WAAW;;EAEX,SAAS;EACT,4CAA4C;EAC5C,4CAA4C;EAC5C,+CAA+C;EAC/C,6CAA6C;;EAE7C,yCAAyC;;EAEzC,6BAA6B;EAC7B,2CAA2C;EAC3C,wCAAwC;EACxC,aAAa;EACb,oDAAoD;;EAEpD,aAAa;;EAEb,mCAAmC;AA0CrC;;AAxCE;IACE,8CAA8C;IAC9C,2CAA2C;EAC7C;;ACxDF,wGAAA;IAAA,iBAAA;;IAAA,6CAAA;GAAA,CAAA;;ADgEE;IACE,0CAA0C;EAC5C;;AAEA;IACE,gBAAgB;;IAEhB,oCAAoC;EACtC;;AAEA;IACE,iCAAiC;IACjC,+CAA+C;IAC/C,uDAAuD;;IAEvD,mDAAmD,EAAE,iDAAiD;EACxG;;AAEA;;;GAGC;;ACrFH,wGAAA;MAAA,2DAAA;MAAA,mDAAA;KAAA,CAAA;;ADuFI;;MAGE,0DAAkD;MAAlD,kDAAkD;IACpD;;AAIJ;EACE,yBAAyB;EACzB,6BAA6B;AAC/B;;AAEA;EACE,kGAAkG;AACpG;;AAEA;EACE,gGAAgG;AAClG;;AAEA;EACE,kBAAkB;EAClB,gDAAgD;EAChD,sCAAsC;;EAEtC,oBAAoB;;EAEpB,uCAAuC;AAMzC;;AAJE;IACE,UAAW;IACX,UAAU;EACZ;;AAGF;EACE,kBAAkB;EAClB,gDAAgD;EAChD,uCAAuC;;EAEvC,YAAY;;EAEZ,gBAAgB;;EAEhB,oBAAoB;AAUtB;;AARE;IACE,aAAa;EACf;;AAEA;IACE,WAAW;IACX,SAAU;EACZ;;AAGF;EACE,gBAAgB;;EAEhB,sBAAsB;;EAEtB,YAAY;AACd;;AAEA;EACE,iCAAiC;AACnC;;AAFA;EACE,iCAAiC;AACnC;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,eAA0B;;EAE1B,8BAA8B;;EAE9B,wCAAwC;EACxC,2CAA2C;AAC7C;;AAEA;EACE,WAAsB;AACxB;;AAEA;EACE,YAAsB;AACxB;;AAEA;EACE,YAAsB;AACxB;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,+BAA+B;AACjC",sourcesContent:['@import "../global/variables.css";\n@import "../button/button.css";\n\n@value unit from "../global/global.css";\n\n.outerContainer {\n --ring-input-icon-offset: calc(unit * 2.5);\n --ring-input-padding-inline: unit;\n --ring-input-background-color: var(--ring-content-background-color);\n}\n\n.borderless {\n /* stylelint-disable-next-line length-zero-no-unit */\n --ring-input-padding-inline: 0px;\n}\n\n.container {\n position: relative;\n\n box-sizing: border-box;\n\n font-size: var(--ring-font-size);\n line-height: var(--ring-line-height);\n\n & * {\n box-sizing: border-box;\n }\n}\n\n.input {\n --ring-input-padding-start: var(--ring-input-padding-inline);\n --ring-input-padding-end: var(--ring-input-padding-inline);\n\n width: 100%;\n\n margin: 0;\n padding-top: var(--ring-input-padding-block);\n padding-right: var(--ring-input-padding-end);\n padding-bottom: var(--ring-input-padding-block);\n padding-left: var(--ring-input-padding-start);\n\n transition: border-color var(--ring-ease);\n\n color: var(--ring-text-color);\n border: 1px solid var(--ring-borders-color);\n border-radius: var(--ring-border-radius);\n outline: none;\n background-color: var(--ring-input-background-color);\n\n font: inherit;\n\n caret-color: var(--ring-main-color);\n\n [dir="rtl"] & {\n padding-right: var(--ring-input-padding-start);\n padding-left: var(--ring-input-padding-end);\n }\n\n &:hover {\n transition: none;\n\n border-color: var(--ring-border-hover-color);\n }\n\n .error & {\n border-color: var(--ring-icon-error-color);\n }\n\n &:focus {\n transition: none;\n\n border-color: var(--ring-main-color);\n }\n\n &[disabled] {\n color: var(--ring-disabled-color);\n border-color: var(--ring-border-disabled-color);\n background-color: var(--ring-disabled-background-color);\n\n -webkit-text-fill-color: var(--ring-disabled-color); /* Required for Safari, see RG-2063 for details */\n }\n\n /*\n Kill yellow/blue webkit autocomplete\n https://css-tricks.com/snippets/css/change-autocomplete-styles-webkit-browsers/\n */\n &:-webkit-autofill {\n &,\n &:hover,\n &:focus {\n transition: background-color 50000s ease-in-out 0s;\n }\n }\n}\n\n.borderless .input {\n border-color: transparent;\n background-color: transparent;\n}\n\n.withIcon .input {\n --ring-input-padding-start: calc(var(--ring-input-padding-inline) + var(--ring-input-icon-offset));\n}\n\n.clearable .input {\n --ring-input-padding-end: calc(var(--ring-input-padding-inline) + var(--ring-input-icon-offset));\n}\n\n.icon {\n position: absolute;\n top: calc(var(--ring-input-padding-block) + 1px);\n left: var(--ring-input-padding-inline);\n\n pointer-events: none;\n\n color: var(--ring-icon-secondary-color);\n\n [dir="rtl"] & {\n right: unit;\n left: auto;\n }\n}\n\n.clear {\n position: absolute;\n top: calc(var(--ring-input-padding-block) + 2px);\n right: var(--ring-input-padding-inline);\n\n height: auto;\n\n padding-right: 0;\n\n line-height: inherit;\n\n .empty & {\n display: none;\n }\n\n [dir="rtl"] & {\n right: auto;\n left: unit;\n }\n}\n\ntextarea.input {\n overflow: hidden;\n\n box-sizing: border-box;\n\n resize: none;\n}\n\n.input::placeholder {\n color: var(--ring-disabled-color);\n}\n\n.input::-webkit-search-cancel-button {\n -webkit-appearance: none;\n}\n\n.errorText {\n margin-top: calc(unit / 2);\n\n color: var(--ring-error-color);\n\n font-size: var(--ring-font-size-smaller);\n line-height: var(--ring-line-height-lowest);\n}\n\n.sizeS {\n width: calc(unit * 12);\n}\n\n.sizeM {\n width: calc(unit * 30);\n}\n\n.sizeL {\n width: calc(unit * 50);\n}\n\n.sizeFULL {\n width: 100%;\n}\n\n.heightS {\n --ring-input-padding-block: 1px;\n}\n\n.heightM {\n --ring-input-padding-block: 3px;\n}\n\n.heightL {\n --ring-input-padding-block: 5px;\n}\n',null],sourceRoot:""}]),s.locals={unit:`${l.default.locals.unit}`,outerContainer:"outerContainer_cb70",borderless:"borderless_f79b",container:"container_ee33",input:"input_f220",error:"error_ff90",withIcon:"withIcon_f066",clearable:"clearable_fd1e",icon:"icon_e49c",clear:"clear_ffc3",empty:"empty_cc0d",errorText:"errorText_e447",sizeS:"sizeS_c560",sizeM:"sizeM_aee6",sizeL:"sizeL_b0ca",sizeFULL:"sizeFULL_f4f9",heightS:"heightS_a68d",heightM:"heightM_bc35",heightL:"heightL_f82d"};const f=s},6960:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>u});var r=t(1404),o=t.n(r),i=t(7156),a=t.n(i),l=t(5280),c=a()(o());c.i(l.A),c.push([e.id,".link_e6e5 {\n cursor: pointer;\n transition: color var(--ring-fast-ease);\n\n color: var(--ring-link-color);\n\n outline: none;\n}\n\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.link_e6e5:hover {\n transition: none;\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_e6e5:hover {\n text-decoration: none;\n }}\n\n.link_e6e5 {\n text-decoration: none;\n }\n\n.link_e6e5.hover_bed7 {\n transition: none;\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_e6e5:hover .inner_e3ba {\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_e6e5.active_f804 {\n color: inherit;\n }\n\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.link_e6e5.compatibilityUnderlineMode_e7a0:hover {\n text-decoration: underline;\n\n /* stylelint-disable-next-line selector-max-specificity */\n }\n .link_e6e5.compatibilityUnderlineMode_e7a0:hover .inner_e3ba {\n border: none;\n }}\n\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.link_e6e5.pseudo_d9ae:hover {\n text-decoration: none;\n\n /* stylelint-disable-next-line selector-max-specificity */\n }\n .link_e6e5.pseudo_d9ae:hover .inner_e3ba {\n border: none;\n }}\n\n.link_e6e5:focus-visible {\n box-shadow: 0 0 0 2px var(--ring-border-hover-color);\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_e6e5:hover .inner_e3ba {\n border-bottom-width: 1px;\n }}\n}\n\n.text_e98a {\n border-radius: var(--ring-border-radius);\n}\n\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.inherit_d267:not(:hover) {\n color: inherit;\n}}\n\n.pseudo_d9ae {\n margin: 0;\n padding: 0;\n\n text-align: left;\n\n border: 0;\n\n background: transparent;\n\n font: inherit;\n}\n\n.pseudo_d9ae::-moz-focus-inner {\n padding: 0;\n\n border: 0;\n }\n","",{version:3,sources:["webpack://./node_modules/@jetbrains/ring-ui/components/link/link.css",""],names:[],mappings:"AAEA;EACE,eAAe;EACf,uCAAuC;;EAEvC,6BAA6B;;EA2C7B,aAAa;AAKf;;ACtDA,wGAAA;IAAA,iBAAA;;IAAA,oCAAA;GAAA,CAAA;;AAAA,wGAAA;IAAA,sBAAA;GAAA,CAAA;;ADQE;IAEE,qBAAqB;EACvB;;AAEA;IAEE,gBAAgB;;IAEhB,mCAAmC;EACrC;;AClBF,wGAAA;IAAA,gBAAA;IAAA,yBAAA;IAAA,wEAAA;IAAA,+BAAA;GAAA,CAAA;;AD2BE;IACE,cAAc;EAChB;;AC7BF,wGAAA;IAAA,2BAAA;;IAAA,0DAAA;GAAA;IAAA;MAAA,aAAA;KAAA,CAAA;;AAAA,wGAAA;IAAA,sBAAA;;IAAA,0DAAA;GAAA;IAAA;MAAA,aAAA;KAAA,CAAA;;ADmDE;IACE,oDAAoD;EACtD;;AAGF,qECxDA,wGAAA;IAAA,yBAAA;GAAA,CAAA;AD4DA;;AAEA;EACE,wCAAwC;AAC1C;;AChEA,wGAAA;EAAA,eAAA;CAAA,CAAA;;ADsEA;EACE,SAAS;EACT,UAAU;;EAEV,gBAAgB;;EAEhB,SAAS;;EAET,uBAAuB;;EAEvB,aAAa;AAOf;;AALE;IACE,UAAU;;IAEV,SAAS;EACX",sourcesContent:['@import "../global/variables.css";\n\n.link {\n cursor: pointer;\n transition: color var(--ring-fast-ease);\n\n color: var(--ring-link-color);\n\n &,\n &:hover {\n text-decoration: none;\n }\n\n &:hover,\n &.hover {\n transition: none;\n\n color: var(--ring-link-hover-color);\n }\n\n &:hover .inner {\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 &.active {\n color: inherit;\n }\n\n &.compatibilityUnderlineMode:hover {\n text-decoration: underline;\n\n /* stylelint-disable-next-line selector-max-specificity */\n & .inner {\n border: none;\n }\n }\n\n &.pseudo:hover {\n text-decoration: none;\n\n /* stylelint-disable-next-line selector-max-specificity */\n & .inner {\n border: none;\n }\n }\n\n outline: none;\n\n &:focus-visible {\n box-shadow: 0 0 0 2px var(--ring-border-hover-color);\n }\n}\n\n@media (min-resolution: 2dppx) {\n .link:hover .inner {\n border-bottom-width: 1px;\n }\n}\n\n.text {\n border-radius: var(--ring-border-radius);\n}\n\n.inherit:not(:hover) {\n color: inherit;\n}\n\n.pseudo {\n margin: 0;\n padding: 0;\n\n text-align: left;\n\n border: 0;\n\n background: transparent;\n\n font: inherit;\n\n &::-moz-focus-inner {\n padding: 0;\n\n border: 0;\n }\n}\n',null],sourceRoot:""}]),c.locals={link:"link_e6e5",hover:"hover_bed7",inner:"inner_e3ba",active:"active_f804",compatibilityUnderlineMode:"compatibilityUnderlineMode_e7a0",pseudo:"pseudo_d9ae",text:"text_e98a",inherit:"inherit_d267"};const u=c},480:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>s});var r=t(1404),o=t.n(r),i=t(7156),a=t.n(i),l=t(9106),c=t(5280),u=a()(o());u.i(c.A),u.i(l.default,"",!0),u.push([e.id,'.list_a01c {\n position: relative;\n\n z-index: 1;\n\n border-radius: var(--ring-border-radius);\n\n line-height: normal;\n}\n\n.simpleInner_a4f8 {\n overflow: auto;\n}\n\n.scrolling_a910 {\n pointer-events: none;\n}\n\n.separator_c26e {\n display: block;\n\n min-height: 8px;\n\n margin-top: 8px;\n padding: 0 16px 1px;\n\n text-align: right;\n white-space: nowrap;\n\n color: var(--ring-secondary-color);\n border-top: 1px solid var(--ring-line-color);\n\n font-size: var(--ring-font-size-smaller);\n line-height: var(--ring-line-height-lower);\n}\n\n.separator_first_ec9e {\n margin-top: 0;\n padding-top: 0;\n\n border: none;\n}\n\n.item_eadd {\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: var(--ring-font-size);\n}\n\n.item_eadd.item_eadd {\n padding: 3px 16px 5px;\n\n line-height: 24px;\n}\n\n.itemContainer_f365 {\n position: relative;\n}\n\n.compact_efa8 {\n line-height: 16px;\n}\n\n.error_aa15 {\n cursor: default;\n}\n\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.error_aa15:hover {\n color: var(--ring-error-color);\n }}\n\n/* Override ring-link */\n\n.error_aa15,\n .error_aa15:focus,\n .error_aa15:visited {\n color: var(--ring-error-color);\n }\n\n.add_a8da {\n padding: 8px 16px;\n\n line-height: 32px;\n}\n\n.top_c4d5 {\n display: flex;\n align-items: baseline;\n flex-direction: row;\n}\n\n.left_ea6b {\n align-self: center;\n flex-shrink: 0;\n}\n\n.label_dac9 {\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_dac9 {\n text-align: right;\n direction: ltr;\n }\n\n.description_efcc {\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: var(--ring-secondary-color);\n\n font-size: var(--ring-font-size-smaller);\n font-weight: 400;\n line-height: var(--ring-line-height-lowest);\n}\n\n.right_df77 {\n display: flex;\n align-items: center;\n align-self: center;\n flex-direction: row;\n flex-shrink: 0;\n}\n\n.details_a2b7 {\n margin-bottom: 6px;\n\n white-space: normal;\n\n color: var(--ring-secondary-color);\n\n font-size: var(--ring-font-size-smaller);\n line-height: var(--ring-line-height-lowest);\n}\n\n.padded_a74d {\n margin-left: 20px;\n}\n\n/* Override :last-child */\n.hint_d29d.hint_d29d {\n margin-bottom: 0;\n\n border-top: 1px solid var(--ring-line-color);\n background-color: var(--ring-sidebar-background-color);\n\n font-size: var(--ring-font-size-smaller);\n}\n\n.action_d10e {\n cursor: pointer;\n\n color: var(--ring-text-color);\n}\n\n/* override link */\n.actionLink_a4c7.actionLink_a4c7 {\n transition: none;\n}\n\n.hover_a4cd:not(.error_aa15) {\n background-color: var(--ring-selected-background-color);\n}\n\n.icon_f1f3 {\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_e4dd {\n color: var(--ring-link-hover-color);\n}\n\n.service_a4fc {\n color: var(--ring-secondary-color);\n}\n\n.glyph_dfd5 {\n float: left;\n\n width: 20px;\n\n margin-right: 8px;\n\n color: var(--ring-icon-secondary-color);\n}\n\n.avatar_f258 {\n\n top: 0;\n\n height: 20px;\n\n -o-object-fit: cover;\n\n object-fit: cover;\n -o-object-position: center;\n object-position: center;\n}\n\n.rightGlyph_fb77 {\n\n float: right;\n\n margin-right: 0;\n margin-left: 16px;\n}\n\n.checkboxContainer_c949 {\n position: absolute;\n top: 7px;\n left: 19px;\n\n width: 20px;\n height: 20px;\n margin-right: 8px;\n}\n\n.compact_efa8 .checkboxContainer_c949 {\n top: 0;\n\n width: 16px;\n height: 16px;\n}\n\n.title_e1bf {\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_e1bf {\n text-align: right;\n direction: ltr;\n }\n\n.title_first_ac55 {\n margin-top: 0;\n}\n\n.text_fe0e {\n letter-spacing: 1.5px;\n text-transform: uppercase;\n\n color: var(--ring-secondary-color);\n\n font-size: var(--ring-font-size-smaller);\n}\n\n.fade_d35c {\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), var(--ring-content-background-color));\n}\n\n.disabled_c3d8 {\n pointer-events: none;\n\n color: var(--ring-disabled-color);\n}\n',"",{version:3,sources:["webpack://./node_modules/@jetbrains/ring-ui/components/list/list.css",""],names:[],mappings:"AAKA;EACE,kBAAkB;;EAElB,UAAU;;EAEV,wCAAwC;;EAExC,mBAAmB;AACrB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,oBAAoB;AACtB;;AAEA;EACE,cAAc;;EAEd,eAAuB;;EAEvB,eAAuB;EACvB,mBAA6B;;EAE7B,iBAAiB;EACjB,mBAAmB;;EAEnB,kCAAkC;EAClC,4CAA4C;;EAE5C,wCAAwC;EACxC,0CAA0C;AAC5C;;AAEA;EACE,aAAa;EACb,cAAc;;EAEd,YAAY;AACd;;AAEA;EACE,cAAc;;EAEd,sBAAsB;;EAEtB,WAAW;;EAEX,gBAAgB;EAChB,sBAAsB;EACtB,mBAAmB;EACnB,qBAAqB;;EAErB,aAAa;;EAEb,gCAAgC;AAClC;;AAEA;EACE,qBAA+B;;EAE/B,iBAA2B;AAC7B;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,iBAA2B;AAC7B;;AAEA;EACE,eAAe;AASjB;;ACzFA,wGAAA;IAAA,+BAAA;GAAA,CAAA;;ADkFE,uBAAuB;;AACvB;;;IAIE,8BAA8B;EAChC;;AAGF;EACE,iBAA4B;;EAE5B,iBAA2B;AAC7B;;AAEA;EACE,aAAa;EACb,qBAAqB;EACrB,mBAAmB;AACrB;;AAEA;EACE,kBAAkB;EAClB,cAAc;AAChB;;AAEA;EACE,gBAAgB;EAChB,YAAY;EACZ,cAAc;;EAEd,gBAAgB;EAChB,mBAAmB;EACnB,uBAAuB;AAMzB;;AAJE;IACE,iBAAiB;IACjB,cAAc;EAChB;;AAGF;EACE,gBAAgB;EAChB,gBAAgB;;EAEhB,iBAAkB;;EAElB,iBAAiB;EACjB,mBAAmB;EACnB,uBAAuB;;EAEvB,kCAAkC;;EAElC,wCAAwC;EACxC,gBAAgB;EAChB,2CAA2C;AAC7C;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,kBAAkB;EAClB,mBAAmB;EACnB,cAAc;AAChB;;AAEA;EACE,kBAAkB;;EAElB,mBAAmB;;EAEnB,kCAAkC;;EAElC,wCAAwC;EACxC,2CAA2C;AAC7C;;AAEA;EACE,iBAAiB;AACnB;;AAEA,yBAAyB;AACzB;EACE,gBAAgB;;EAEhB,4CAA4C;EAC5C,sDAAsD;;EAEtD,wCAAwC;AAC1C;;AAEA;EACE,eAAe;;EAEf,6BAA6B;AAC/B;;AAEA,kBAAkB;AAClB;EACE,gBAAgB;AAClB;;AAEA;EACE,uDAAuD;AACzD;;AAEA;EACE,qBAAqB;;EAErB,WAAW;EACX,YAAY;EACZ,iBAA2B;;EAE3B,4BAA4B;EAC5B,2BAA2B;;EAE3B,wBAAwB;AAC1B;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,kCAAkC;AACpC;;AAEA;EACE,WAAW;;EAEX,WAAW;;EAEX,iBAAkB;;EAElB,uCAAuC;AACzC;;AAEA;;EAGE,MAAM;;EAEN,YAAY;;EAEZ,oBAAiB;;KAAjB,iBAAiB;EACjB,0BAAuB;KAAvB,uBAAuB;AACzB;;AAEA;;EAGE,YAAY;;EAEZ,eAAe;EACf,iBAA2B;AAC7B;;AAEA;EACE,kBAAkB;EAClB,QAAQ;EACR,UAAU;;EAEV,WAAW;EACX,YAAY;EACZ,iBAAkB;AACpB;;AAEA;EACE,MAAM;;EAEN,WAAqB;EACrB,YAAsB;AACxB;;AAEA;EACE,cAAc;;EAEd,gBAAgB;EAChB,kBAAkB;EAClB,mBAAqC;;EAErC,gBAAgB;AAMlB;;AAJE;IACE,iBAAiB;IACjB,cAAc;EAChB;;AAGF;EACE,aAAa;AACf;;AAEA;EACE,qBAAqB;EACrB,yBAAyB;;EAEzB,kCAAkC;;EAElC,wCAAwC;AAC1C;;AAEA;EACE,kBAAkB;EAClB,SAAS;;EAET,WAAW;EACX,YAAsB;;EAEtB,oBAAoB;;EAEpB,oGAAoG;AACtG;;AAEA;EACE,oBAAoB;;EAEpB,iCAAiC;AACnC",sourcesContent:['@import "../global/variables.css";\n\n@value unit from "../global/global.css";\n@value listSpacing: unit;\n\n.list {\n position: relative;\n\n z-index: 1;\n\n border-radius: var(--ring-border-radius);\n\n line-height: normal;\n}\n\n.simpleInner {\n overflow: auto;\n}\n\n.scrolling {\n pointer-events: none;\n}\n\n.separator {\n display: block;\n\n min-height: listSpacing;\n\n margin-top: listSpacing;\n padding: 0 calc(unit * 2) 1px;\n\n text-align: right;\n white-space: nowrap;\n\n color: var(--ring-secondary-color);\n border-top: 1px solid var(--ring-line-color);\n\n font-size: var(--ring-font-size-smaller);\n line-height: var(--ring-line-height-lower);\n}\n\n.separator_first {\n margin-top: 0;\n padding-top: 0;\n\n border: none;\n}\n\n.item {\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: var(--ring-font-size);\n}\n\n.item.item {\n padding: 3px calc(unit * 2) 5px;\n\n line-height: calc(unit * 3);\n}\n\n.itemContainer {\n position: relative;\n}\n\n.compact {\n line-height: calc(unit * 2);\n}\n\n.error {\n cursor: default;\n\n /* Override ring-link */\n &,\n &:hover,\n &:focus,\n &:visited {\n color: var(--ring-error-color);\n }\n}\n\n.add {\n padding: unit calc(2 * unit);\n\n line-height: calc(4 * unit);\n}\n\n.top {\n display: flex;\n align-items: baseline;\n flex-direction: row;\n}\n\n.left {\n align-self: center;\n flex-shrink: 0;\n}\n\n.label {\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 [dir="rtl"] & {\n text-align: right;\n direction: ltr;\n }\n}\n\n.description {\n overflow: hidden;\n flex-shrink: 100;\n\n padding-left: unit;\n\n text-align: right;\n white-space: nowrap;\n text-overflow: ellipsis;\n\n color: var(--ring-secondary-color);\n\n font-size: var(--ring-font-size-smaller);\n font-weight: 400;\n line-height: var(--ring-line-height-lowest);\n}\n\n.right {\n display: flex;\n align-items: center;\n align-self: center;\n flex-direction: row;\n flex-shrink: 0;\n}\n\n.details {\n margin-bottom: 6px;\n\n white-space: normal;\n\n color: var(--ring-secondary-color);\n\n font-size: var(--ring-font-size-smaller);\n line-height: var(--ring-line-height-lowest);\n}\n\n.padded {\n margin-left: 20px;\n}\n\n/* Override :last-child */\n.hint.hint {\n margin-bottom: 0;\n\n border-top: 1px solid var(--ring-line-color);\n background-color: var(--ring-sidebar-background-color);\n\n font-size: var(--ring-font-size-smaller);\n}\n\n.action {\n cursor: pointer;\n\n color: var(--ring-text-color);\n}\n\n/* override link */\n.actionLink.actionLink {\n transition: none;\n}\n\n.hover:not(.error) {\n background-color: var(--ring-selected-background-color);\n}\n\n.icon {\n display: inline-block;\n\n width: 20px;\n height: 20px;\n margin-left: calc(unit * 2);\n\n background-repeat: no-repeat;\n background-position: center;\n\n background-size: contain;\n}\n\n.highlight {\n color: var(--ring-link-hover-color);\n}\n\n.service {\n color: var(--ring-secondary-color);\n}\n\n.glyph {\n float: left;\n\n width: 20px;\n\n margin-right: unit;\n\n color: var(--ring-icon-secondary-color);\n}\n\n.avatar {\n composes: glyph;\n\n top: 0;\n\n height: 20px;\n\n object-fit: cover;\n object-position: center;\n}\n\n.rightGlyph {\n composes: glyph;\n\n float: right;\n\n margin-right: 0;\n margin-left: calc(unit * 2);\n}\n\n.checkboxContainer {\n position: absolute;\n top: 7px;\n left: 19px;\n\n width: 20px;\n height: 20px;\n margin-right: unit;\n}\n\n.compact .checkboxContainer {\n top: 0;\n\n width: calc(unit * 2);\n height: calc(unit * 2);\n}\n\n.title {\n display: block;\n\n margin-top: 10px;\n margin-bottom: 6px;\n padding: listSpacing calc(unit * 2) 0;\n\n text-align: left;\n\n [dir="rtl"] & {\n text-align: right;\n direction: ltr;\n }\n}\n\n.title_first {\n margin-top: 0;\n}\n\n.text {\n letter-spacing: 1.5px;\n text-transform: uppercase;\n\n color: var(--ring-secondary-color);\n\n font-size: var(--ring-font-size-smaller);\n}\n\n.fade {\n position: absolute;\n bottom: 0;\n\n width: 100%;\n height: calc(unit * 3);\n\n pointer-events: none;\n\n background: linear-gradient(to bottom, rgba(255, 255, 255, 0), var(--ring-content-background-color));\n}\n\n.disabled {\n pointer-events: none;\n\n color: var(--ring-disabled-color);\n}\n',null],sourceRoot:""}]),u.locals={unit:`${l.default.locals.unit}`,listSpacing:"8px",list:"list_a01c",simpleInner:"simpleInner_a4f8",scrolling:"scrolling_a910",separator:"separator_c26e",separator_first:"separator_first_ec9e",item:"item_eadd",itemContainer:"itemContainer_f365",compact:"compact_efa8",error:"error_aa15",add:"add_a8da",top:"top_c4d5",left:"left_ea6b",label:"label_dac9",description:"description_efcc",right:"right_df77",details:"details_a2b7",padded:"padded_a74d",hint:"hint_d29d",action:"action_d10e",actionLink:"actionLink_a4c7",hover:"hover_a4cd",icon:"icon_f1f3",highlight:"highlight_e4dd",service:"service_a4fc",glyph:"glyph_dfd5",avatar:"avatar_f258 glyph_dfd5",rightGlyph:"rightGlyph_fb77 glyph_dfd5",checkboxContainer:"checkboxContainer_c949",title:"title_e1bf",title_first:"title_first_ac55",text:"text_fe0e",fade:"fade_d35c",disabled:"disabled_c3d8"};const s=u},1586:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>f});var r=t(1404),o=t.n(r),i=t(7156),a=t.n(i),l=t(9173),c=t(9106),u=t(5280),s=a()(o());s.i(u.A),s.i(l.A,"",!0),s.i(c.default,"",!0),s.push([e.id,`:root {\n /* stylelint-disable-next-line color-no-hex */\n --ring-loader-inline-stops: #ff00eb, #bd3bff, #008eff, #58ba00, #f48700, #ff00eb;\n}\n\n.${l.A.locals.dark},\n.ring-ui-theme-dark {\n /* stylelint-disable-next-line color-no-hex */\n --ring-loader-inline-stops: #ff2eef, #d178ff, #289fff, #88d444, #ffe000, #ff2eef;\n}\n\n@keyframes spin_ad60 {\n 0% {\n transform: rotate(0);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n}\n\n@keyframes pulse_c906 {\n 0% {\n transform: scale(1);\n }\n\n 100% {\n transform: scale(1.41667);\n }\n}\n\n.loader_d294,\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 animation: spin_ad60 1s linear infinite;\n vertical-align: -3px;\n\n border-radius: 8px;\n}\n\n.loader_d294,\n .ring-loader-inline,\n .loader_d294::after,\n .ring-loader-inline::after {\n transform-origin: 50% 50%;\n }\n\n.loader_d294::after, .ring-loader-inline::after {\n display: block;\n\n width: 16px;\n height: 16px;\n\n content: "";\n animation: pulse_c906 0.85s cubic-bezier(0.68, 0, 0.74, 0.74) infinite alternate;\n\n background-image: conic-gradient(#ff00eb, #bd3bff, #008eff, #58ba00, #f48700, #ff00eb);\n\n background-image: conic-gradient(var(--ring-loader-inline-stops));\n -webkit-mask-image: radial-gradient(8px, transparent 71.875%, var(--ring-content-background-color) 71.875%);\n mask-image: radial-gradient(8px, transparent 71.875%, var(--ring-content-background-color) 71.875%);\n }\n\n.children_ece6 {\n margin-left: 4px;\n}\n`,"",{version:3,sources:["webpack://./node_modules/@jetbrains/ring-ui/components/loader-inline/loader-inline.css"],names:[],mappings:"AAKA;EACE,6CAA6C;EAC7C,gFAAgF;AAClF;;AAEA;;EAEE,6CAA6C;EAC7C,gFAAgF;AAClF;;AAEA;EACE;IACE,oBAAoB;EACtB;;EAEA;IACE,yBAAyB;EAC3B;AACF;;AAEA;EACE;IACE,mBAAmB;EACrB;;EAEA;IACE,yBAA+B;EACjC;AACF;;AAEA;;EAEE,6CAA6C;;EAE7C,kBAAkB;;EAElB,qBAAqB;;EAErB,gBAAgB;;EAEhB,oBAAoB;EACpB,uCAAkC;EAClC,oBAAoB;;EAEpB,kBAAmB;AAmBrB;;AAjBE;;;;IAEE,yBAAyB;EAC3B;;AAEA;IACE,cAAc;;IAEd,WAAqB;IACrB,YAAsB;;IAEtB,WAAW;IACX,gFAA2E;;IAE3E,sFAAiE;;IAAjE,iEAAiE;IACjE,2GAAoG;YAApG,mGAAoG;EACtG;;AAGF;EACE,gBAA2B;AAC7B",sourcesContent:['@import "../global/variables.css";\n\n@value dark from "../global/variables_dark.css";\n@value unit from "../global/global.css";\n\n:root {\n /* stylelint-disable-next-line color-no-hex */\n --ring-loader-inline-stops: #ff00eb, #bd3bff, #008eff, #58ba00, #f48700, #ff00eb;\n}\n\n.dark,\n:global(.ring-ui-theme-dark) {\n /* stylelint-disable-next-line color-no-hex */\n --ring-loader-inline-stops: #ff2eef, #d178ff, #289fff, #88d444, #ffe000, #ff2eef;\n}\n\n@keyframes spin {\n 0% {\n transform: rotate(0);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n}\n\n@keyframes pulse {\n 0% {\n transform: scale(1);\n }\n\n 100% {\n transform: scale(calc(17 / 12));\n }\n}\n\n.loader,\n:global(.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 animation: spin 1s linear infinite;\n vertical-align: -3px;\n\n border-radius: unit;\n\n &,\n &::after {\n transform-origin: 50% 50%;\n }\n\n &::after {\n display: block;\n\n width: calc(unit * 2);\n height: calc(unit * 2);\n\n content: "";\n animation: pulse 0.85s cubic-bezier(0.68, 0, 0.74, 0.74) infinite alternate;\n\n background-image: conic-gradient(var(--ring-loader-inline-stops));\n mask-image: radial-gradient(unit, transparent 71.875%, var(--ring-content-background-color) 71.875%);\n }\n}\n\n.children {\n margin-left: calc(unit / 2);\n}\n'],sourceRoot:""}]),s.locals={dark:`${l.A.locals.dark}`,unit:`${c.default.locals.unit}`,loader:"loader_d294",spin:"spin_ad60",pulse:"pulse_c906",children:"children_ece6"};const f=s},8890:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>s});var r=t(1404),o=t.n(r),i=t(7156),a=t.n(i),l=t(9106),c=t(5280),u=a()(o());u.i(c.A),u.i(l.default,"",!0),u.push([e.id,".popup_f35e {\n\n position: fixed;\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 var(--ring-popup-border-color);\n border-radius: var(--ring-border-radius);\n\n background-color: var(--ring-popup-background-color);\n box-shadow: var(--ring-popup-shadow);\n}\n\n.hidden_c587 {\n display: none;\n}\n\n.showing_b07a {\n opacity: 0;\n}\n\n.attached_ea95 {\n border-top: 0;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n","",{version:3,sources:["webpack://./node_modules/@jetbrains/ring-ui/components/popup/popup.css"],names:[],mappings:"AAEA;;EAGE,eAAe;EACf,oCAAoC;EACpC,WAAW;EACX,YAAY;;EAEZ,gBAAgB;;EAEhB,sBAAsB;;EAEtB,gDAAgD;EAChD,wCAAwC;;EAExC,oDAAoD;EACpD,oCAAoC;AACtC;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,aAAa;EACb,yBAAyB;EACzB,0BAA0B;AAC5B",sourcesContent:['@import "../global/variables.css";\n\n.popup {\n composes: font from "../global/global.css";\n\n position: fixed;\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 var(--ring-popup-border-color);\n border-radius: var(--ring-border-radius);\n\n background-color: var(--ring-popup-background-color);\n box-shadow: var(--ring-popup-shadow);\n}\n\n.hidden {\n display: none;\n}\n\n.showing {\n opacity: 0;\n}\n\n.attached {\n border-top: 0;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n'],sourceRoot:""}]),u.locals={popup:`popup_f35e ${l.default.locals.font}`,hidden:"hidden_c587",showing:"showing_b07a",attached:"attached_ea95"};const s=u},4481:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>s});var r=t(1404),o=t.n(r),i=t(7156),a=t.n(i),l=t(9106),c=t(5280),u=a()(o());u.i(c.A),u.i(l.default,"",!0),u.push([e.id,'@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.filterWithTagsFocused_ffbf.filterWithTagsFocused_ffbf:hover {\n border-color: var(--ring-main-color);\n}}\n\n.filterWithTags_ff56 {\n overflow: hidden;\n\n margin: 16px 8px 0;\n padding: 3px;\n\n text-align: left;\n\n border: 1px solid var(--ring-borders-color);\n border-radius: var(--ring-border-radius);\n}\n\n.filterWithTags_ff56 .filterWrapper_dd63 {\n padding-right: 0;\n padding-left: 0;\n\n border-bottom: none;\n }\n\n@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.filterWithTags_ff56:hover {\n border-color: var(--ring-border-hover-color);\n }}\n\n.filterWithTagsFocused_ffbf {\n border-color: var(--ring-main-color);\n}\n\n.filterWithTagsInput_ab94 {\n padding: 0;\n\n border: none;\n}\n\n.filter_deda {\n flex-grow: 1;\n\n width: 0;\n}\n\n.popup_f21d {\n overscroll-behavior: contain;\n}\n\n.filterWrapper_dd63 {\n position: relative;\n\n display: flex;\n\n margin: 0;\n padding-right: 8px;\n padding-left: 44px;\n\n border-bottom: 1px solid var(--ring-borders-color);\n}\n\n[dir="rtl"] .filterWrapper_dd63 {\n padding-right: 44px;\n padding-left: 8px;\n }\n\n.filterIcon_b648 {\n position: absolute;\n top: 7px;\n left: 16px;\n\n color: var(--ring-icon-color);\n}\n\n[dir="rtl"] .filterIcon_b648 {\n right: 16px;\n left: auto;\n }\n\n.bottomLine_c880 {\n text-align: center;\n}\n\n.bottomLine_c880.bottomLineOverItem_dfb4 {\n position: relative;\n\n z-index: var(--ring-fixed-z-index);\n\n margin-top: -36px;\n\n background-color: var(--ring-content-background-color);\n }\n\n.message_ccdf {\n display: inline-block;\n\n margin: 8px 0;\n padding: 0 16px;\n}\n\n.selectAll_ff5e {\n display: flex;\n justify-content: space-between;\n\n padding: 8px 16px 0;\n}\n',"",{version:3,sources:["","webpack://./node_modules/@jetbrains/ring-ui/components/select/select-popup.css"],names:[],mappings:"AAAA,wGAAA;EAAA,qCAAA;CAAA,CAAA;;ACIA;EACE,gBAAgB;;EAEhB,kBAA6B;EAC7B,YAAY;;EAEZ,gBAAgB;;EAEhB,2CAA2C;EAC3C,wCAAwC;AAY1C;;AAVE;IACE,gBAAgB;IAChB,eAAe;;IAEf,mBAAmB;EACrB;;ADpBF,wGAAA;IAAA,6CAAA;GAAA,CAAA;;AC2BA;EAEE,oCAAoC;AACtC;;AAEA;EACE,UAAU;;EAEV,YAAY;AACd;;AAEA;EACE,YAAY;;EAEZ,QAAQ;AACV;;AAEA;EACE,4BAA4B;AAC9B;;AAEA;EACE,kBAAkB;;EAElB,aAAa;;EAEb,SAAS;EACT,kBAAmB;EACnB,kBAA8B;;EAE9B,kDAAkD;AAMpD;;AAJE;IACE,mBAA+B;IAC/B,iBAAkB;EACpB;;AAGF;EACE,kBAAkB;EAClB,QAAQ;EACR,UAAoB;;EAEpB,6BAA6B;AAM/B;;AAJE;IACE,WAAqB;IACrB,UAAU;EACZ;;AAGF;EACE,kBAAkB;AAWpB;;AATE;IACE,kBAAkB;;IAElB,kCAAkC;;IAElC,iBAAiB;;IAEjB,sDAAsD;EACxD;;AAGF;EACE,qBAAqB;;EAErB,aAAc;EACd,eAAyB;AAC3B;;AAEA;EACE,aAAa;EACb,8BAA8B;;EAE9B,mBAAmB;AACrB",sourcesContent:[null,'@import "../global/variables.css";\n\n@value unit from "../global/global.css";\n\n.filterWithTags {\n overflow: hidden;\n\n margin: calc(unit * 2) unit 0;\n padding: 3px;\n\n text-align: left;\n\n border: 1px solid var(--ring-borders-color);\n border-radius: var(--ring-border-radius);\n\n & .filterWrapper {\n padding-right: 0;\n padding-left: 0;\n\n border-bottom: none;\n }\n\n &:hover {\n border-color: var(--ring-border-hover-color);\n }\n}\n\n.filterWithTagsFocused,\n.filterWithTagsFocused.filterWithTagsFocused:hover {\n border-color: var(--ring-main-color);\n}\n\n.filterWithTagsInput {\n padding: 0;\n\n border: none;\n}\n\n.filter {\n flex-grow: 1;\n\n width: 0;\n}\n\n.popup {\n overscroll-behavior: contain;\n}\n\n.filterWrapper {\n position: relative;\n\n display: flex;\n\n margin: 0;\n padding-right: unit;\n padding-left: calc(unit * 5.5);\n\n border-bottom: 1px solid var(--ring-borders-color);\n\n [dir="rtl"] & {\n padding-right: calc(unit * 5.5);\n padding-left: unit;\n }\n}\n\n.filterIcon {\n position: absolute;\n top: 7px;\n left: calc(unit * 2);\n\n color: var(--ring-icon-color);\n\n [dir="rtl"] & {\n right: calc(unit * 2);\n left: auto;\n }\n}\n\n.bottomLine {\n text-align: center;\n\n &.bottomLineOverItem {\n position: relative;\n\n z-index: var(--ring-fixed-z-index);\n\n margin-top: -36px;\n\n background-color: var(--ring-content-background-color);\n }\n}\n\n.message {\n display: inline-block;\n\n margin: unit 0;\n padding: 0 calc(2 * unit);\n}\n\n.selectAll {\n display: flex;\n justify-content: space-between;\n\n padding: 8px 16px 0;\n}\n'],sourceRoot:""}]),u.locals={unit:`${l.default.locals.unit}`,filterWithTagsFocused:"filterWithTagsFocused_ffbf",filterWithTags:"filterWithTags_ff56",filterWrapper:"filterWrapper_dd63",filterWithTagsInput:"filterWithTagsInput_ab94",filter:"filter_deda",popup:"popup_f21d",filterIcon:"filterIcon_b648",bottomLine:"bottomLine_c880",bottomLineOverItem:"bottomLineOverItem_dfb4",message:"message_ccdf",selectAll:"selectAll_ff5e"};const s=u},2636:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>f});var r=t(1404),o=t.n(r),i=t(7156),a=t.n(i),l=t(9106),c=t(9892),u=t(5280),s=a()(o());s.i(u.A),s.i(l.default,"",!0),s.i(c.default,"",!0),s.push([e.id,'@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.select_e2a5:hover .value_b3a3,\n.select_e2a5:hover .icons_c4a9 {\n transition: none;\n\n color: var(--ring-main-color);\n}}\n\n.select_e2a5 {\n position: relative;\n\n display: inline-block;\n\n white-space: nowrap;\n\n color: var(--ring-text-color);\n}\n\n.toolbar_d3be {\n border-top: 1px solid var(--ring-line-color);\n}\n\n.button_ef00 {\n width: 100%;\n padding: 0;\n\n text-align: left;\n}\n\n[dir="rtl"] .button_ef00 {\n text-align: right;\n direction: ltr;\n }\n\n.toolbar_d3be .button_ef00 {\n height: 32px;\n margin: 8px 0;\n }\n\n.button_ef00.buttonSpaced_f316 {\n padding: 0 16px;\n }\n\n.icons_c4a9 {\n position: absolute;\n top: 0;\n right: 5px;\n bottom: 0;\n\n transition: color var(--ring-ease);\n\n color: var(--ring-icon-secondary-color);\n\n line-height: normal;\n}\n\n.inputMode_a6f6 .icons_c4a9 {\n font-size: var(--ring-font-size);\n }\n\n.selectedIcon_a62c {\n\n position: relative;\n top: 3px;\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_c750 {\n padding: 0 3px;\n\n vertical-align: -2px;\n}\n\n.sizeS_e8c3 {\n width: 96px;\n}\n\n.sizeM_ed34 {\n width: 240px;\n}\n\n.sizeL_c053 {\n width: 400px;\n}\n\n.sizeFULL_c585 {\n width: 100%;\n}\n\n.sizeAUTO_a07c {\n max-width: 100%;\n}\n\n.buttonMode_dd69 {\n position: relative;\n\n cursor: pointer;\n}\n\n.value_b3a3 {\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 var(--ring-ease), border-color var(--ring-ease);\n text-align: left;\n vertical-align: top;\n\n color: var(--ring-text-color);\n\n border: none;\n border-bottom: 1px solid var(--ring-borders-color);\n outline: none;\n background: transparent;\n}\n\n.value_b3a3:focus {\n border-color: var(--ring-main-color);\n }\n\n.value_b3a3.open_f1b1,\n .value_b3a3:active {\n border-color: transparent;\n }\n\n.value_b3a3::-moz-focus-inner {\n padding: 0;\n\n border: 0;\n outline: 0;\n }\n\n.buttonContainer_b2b9 {\n position: relative;\n\n font-size: var(--ring-font-size);\n}\n\n.buttonValue_b4ad {\n\n display: block;\n\n width: 100%;\n padding-left: 8px;\n\n text-align: left;\n vertical-align: -8px;\n}\n\n.buttonValue_b4ad:focus-visible {\n box-shadow: inset 0 0 0 1px var(--ring-main-color);\n}\n\n.buttonValueOpen_d9d3.buttonValueOpen_d9d3 {\n box-shadow: inset 0 0 0 1px var(--ring-main-color);\n}\n\n.buttonValueEmpty_e6b3.buttonValueEmpty_e6b3 {\n color: var(--ring-disabled-color);\n}\n\n.heightS_b721 .buttonValue_b4ad {\n font-size: var(--ring-font-size);\n}\n\n.label_e56f {\n position: relative;\n\n color: var(--ring-secondary-color);\n}\n\n:focus-visible + .icons_c4a9,\n.value_b3a3:focus,\n.value_b3a3:focus + .icons_c4a9,\n.open_f1b1,\n.open_f1b1 + .icons_c4a9,\n.buttonValueOpen_d9d3 + .icons_c4a9 {\n transition: none;\n\n color: var(--ring-main-color);\n}\n\n.disabled_b89f {\n pointer-events: none;\n\n color: var(--ring-disabled-color);\n}\n\n.disabled_b89f .value_b3a3 {\n color: var(--ring-disabled-color);\n border-bottom-style: dashed;\n }\n\n.avatar_f4dd {\n margin-right: 4px;\n\n vertical-align: -5px;\n}\n\n.popup_acec {\n min-width: 240px;\n max-width: 320px;\n}\n\n.chevron_d51f.chevron_d51f {\n padding: 0 3px;\n\n transition: none;\n vertical-align: -1px;\n\n color: inherit;\n}\n\n.chevronIcon_f6cf.chevronIcon_f6cf {\n transition: none;\n\n color: inherit;\n}\n',"",{version:3,sources:["","webpack://./node_modules/@jetbrains/ring-ui/components/select/select.css"],names:[],mappings:"AAAA,wGAAA;;EAAA,iBAAA;;EAAA,8BAAA;CAAA,CAAA;;ACKA;EACE,kBAAkB;;EAElB,qBAAqB;;EAErB,mBAAmB;;EAEnB,6BAA6B;AAC/B;;AAEA;EACE,4CAA4C;AAC9C;;AAEA;EACE,WAAW;EACX,UAAU;;EAEV,gBAAgB;AAelB;;AAbE;IACE,iBAAiB;IACjB,cAAc;EAChB;;AAEA;IACE,YAAsB;IACtB,aAAc;EAChB;;AAEA;IACE,eAAyB;EAC3B;;AAGF;EACE,kBAAkB;EAClB,MAAM;EACN,UAAU;EACV,SAAS;;EAET,kCAAkC;;EAElC,uCAAuC;;EAEvC,mBAAmB;AAKrB;;AAHE;IACE,gCAAgC;EAClC;;AAGF;;EAGE,kBAAkB;EAClB,QAAQ;;EAER,qBAAqB;;EAErB,WAAqB;EACrB,YAAsB;EACtB,aAAa;;EAEb,4BAA4B;EAC5B,2BAA2B;;EAE3B,wBAAwB;AAC1B;;AAEA;EACE,cAAc;;EAEd,oBAAoB;AACtB;;AAEA;EACE,WAAsB;AACxB;;AAEA;EACE,YAAsB;AACxB;;AAEA;EACE,YAAsB;AACxB;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,kBAAkB;;EAElB,eAAe;AACjB;;AAEA;;EAIE,qBAAqB;;EAErB,sBAAsB;EACtB,WAAW;EACX,YAA4B;EAC5B,gBAAgB;;EAEhB,eAAe;EACf,iEAAiE;EACjE,gBAAgB;EAChB,mBAAmB;;EAEnB,6BAA6B;;EAE7B,YAAY;EACZ,kDAAkD;EAClD,aAAa;EACb,uBAAuB;AAiBzB;;AAfE;IACE,oCAAoC;EACtC;;AAEA;;IAEE,yBAAyB;EAC3B;;AAEA;IACE,UAAU;;IAEV,SAAS;IACT,UAAU;EACZ;;AAGF;EACE,kBAAkB;;EAElB,gCAAgC;AAClC;;AAEA;;EAGE,cAAc;;EAEd,WAAW;EACX,iBAAkB;;EAElB,gBAAgB;EAChB,oBAA8B;AAChC;;AAEA;EACE,kDAAgD;AAClD;;AAEA;EACE,kDAAgD;AAClD;;AAEA;EACE,iCAAiC;AACnC;;AAEA;EACE,gCAAgC;AAClC;;AAEA;EACE,kBAAkB;;EAElB,kCAAkC;AACpC;;AAEA;;;;;;EAQE,gBAAgB;;EAEhB,6BAA6B;AAC/B;;AAEA;EACE,oBAAoB;;EAEpB,iCAAiC;AAMnC;;AAJE;IACE,iCAAiC;IACjC,2BAA2B;EAC7B;;AAGF;EACE,iBAAiB;;EAEjB,oBAAoB;AACtB;;AAEA;EACE,gBAA0B;EAC1B,gBAA0B;AAC5B;;AAEA;EACE,cAAc;;EAEd,gBAAgB;EAChB,oBAAoB;;EAEpB,cAAc;AAChB;;AAEA;EACE,gBAAgB;;EAEhB,cAAc;AAChB",sourcesContent:[null,'@import "../global/variables.css";\n\n@value unit from "../global/global.css";\n@value button-shadow from "../button/button.css";\n\n.select {\n position: relative;\n\n display: inline-block;\n\n white-space: nowrap;\n\n color: var(--ring-text-color);\n}\n\n.toolbar {\n border-top: 1px solid var(--ring-line-color);\n}\n\n.button {\n width: 100%;\n padding: 0;\n\n text-align: left;\n\n [dir="rtl"] & {\n text-align: right;\n direction: ltr;\n }\n\n .toolbar & {\n height: calc(4 * unit);\n margin: unit 0;\n }\n\n &.buttonSpaced {\n padding: 0 calc(2 * unit);\n }\n}\n\n.icons {\n position: absolute;\n top: 0;\n right: 5px;\n bottom: 0;\n\n transition: color var(--ring-ease);\n\n color: var(--ring-icon-secondary-color);\n\n line-height: normal;\n\n .inputMode & {\n font-size: var(--ring-font-size);\n }\n}\n\n.selectedIcon {\n composes: resetButton from "../global/global.css";\n\n position: relative;\n top: 3px;\n\n display: inline-block;\n\n width: calc(2 * unit);\n height: calc(2 * unit);\n margin: 0 4px;\n\n background-repeat: no-repeat;\n background-position: center;\n\n background-size: contain;\n}\n\n.clearIcon {\n padding: 0 3px;\n\n vertical-align: -2px;\n}\n\n.sizeS {\n width: calc(unit * 12);\n}\n\n.sizeM {\n width: calc(unit * 30);\n}\n\n.sizeL {\n width: calc(unit * 50);\n}\n\n.sizeFULL {\n width: 100%;\n}\n\n.sizeAUTO {\n max-width: 100%;\n}\n\n.buttonMode {\n position: relative;\n\n cursor: pointer;\n}\n\n.value {\n composes: ellipsis from "../global/global.css";\n composes: font from "../global/global.css";\n\n display: inline-block;\n\n box-sizing: border-box;\n width: 100%;\n height: calc(unit * 4 + 1px);\n padding: 0 0 3px;\n\n cursor: pointer;\n transition: color var(--ring-ease), border-color var(--ring-ease);\n text-align: left;\n vertical-align: top;\n\n color: var(--ring-text-color);\n\n border: none;\n border-bottom: 1px solid var(--ring-borders-color);\n outline: none;\n background: transparent;\n\n &:focus {\n border-color: var(--ring-main-color);\n }\n\n &.open,\n &:active {\n border-color: transparent;\n }\n\n &::-moz-focus-inner {\n padding: 0;\n\n border: 0;\n outline: 0;\n }\n}\n\n.buttonContainer {\n position: relative;\n\n font-size: var(--ring-font-size);\n}\n\n.buttonValue {\n composes: ellipsis from "../global/global.css";\n\n display: block;\n\n width: 100%;\n padding-left: unit;\n\n text-align: left;\n vertical-align: calc(0 - unit);\n}\n\n.buttonValue:focus-visible {\n box-shadow: button-shadow var(--ring-main-color);\n}\n\n.buttonValueOpen.buttonValueOpen {\n box-shadow: button-shadow var(--ring-main-color);\n}\n\n.buttonValueEmpty.buttonValueEmpty {\n color: var(--ring-disabled-color);\n}\n\n.heightS .buttonValue {\n font-size: var(--ring-font-size);\n}\n\n.label {\n position: relative;\n\n color: var(--ring-secondary-color);\n}\n\n.select:hover .value,\n.select:hover .icons,\n:focus-visible + .icons,\n.value:focus,\n.value:focus + .icons,\n.open,\n.open + .icons,\n.buttonValueOpen + .icons {\n transition: none;\n\n color: var(--ring-main-color);\n}\n\n.disabled {\n pointer-events: none;\n\n color: var(--ring-disabled-color);\n\n & .value {\n color: var(--ring-disabled-color);\n border-bottom-style: dashed;\n }\n}\n\n.avatar {\n margin-right: 4px;\n\n vertical-align: -5px;\n}\n\n.popup {\n min-width: calc(unit * 30);\n max-width: calc(unit * 40);\n}\n\n.chevron.chevron {\n padding: 0 3px;\n\n transition: none;\n vertical-align: -1px;\n\n color: inherit;\n}\n\n.chevronIcon.chevronIcon {\n transition: none;\n\n color: inherit;\n}\n'],sourceRoot:""}]),s.locals={unit:`${l.default.locals.unit}`,"button-shadow":`${c.default.locals["button-shadow"]}`,select:"select_e2a5",value:`value_b3a3 ${l.default.locals.ellipsis} ${l.default.locals.font}`,icons:"icons_c4a9",toolbar:"toolbar_d3be",button:"button_ef00",buttonSpaced:"buttonSpaced_f316",inputMode:"inputMode_a6f6",selectedIcon:`selectedIcon_a62c ${l.default.locals.resetButton}`,clearIcon:"clearIcon_c750",sizeS:"sizeS_e8c3",sizeM:"sizeM_ed34",sizeL:"sizeL_c053",sizeFULL:"sizeFULL_c585",sizeAUTO:"sizeAUTO_a07c",buttonMode:"buttonMode_dd69",open:"open_f1b1",buttonContainer:"buttonContainer_b2b9",buttonValue:`buttonValue_b4ad ${l.default.locals.ellipsis}`,buttonValueOpen:"buttonValueOpen_d9d3",buttonValueEmpty:"buttonValueEmpty_e6b3",heightS:"heightS_b721",label:"label_e56f",disabled:"disabled_b89f",avatar:"avatar_f4dd",popup:"popup_acec",chevron:"chevron_d51f",chevronIcon:"chevronIcon_f6cf"};const f=s},8102:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>u});var r=t(1404),o=t.n(r),i=t(7156),a=t.n(i),l=t(5280),c=a()(o());c.i(l.A),c.push([e.id,".trapButton_c32e {\n position: absolute;\n left: -9999px;\n}\n","",{version:3,sources:["webpack://./node_modules/@jetbrains/ring-ui/components/tab-trap/tab-trap.css"],names:[],mappings:"AAEA;EACE,kBAAkB;EAClB,aAAa;AACf",sourcesContent:['@import "../global/variables.css";\n\n.trapButton {\n position: absolute;\n left: -9999px;\n}\n'],sourceRoot:""}]),c.locals={trapButton:"trapButton_c32e"};const u=c},4561:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>s});var r=t(1404),o=t.n(r),i=t(7156),a=t.n(i),l=t(9106),c=t(5280),u=a()(o());u.i(c.A),u.i(l.default,"",!0),u.push([e.id,'@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {.tag_b7aa:hover,\n.tagAngled_c869:hover::before {\n transition: none;\n\n background-color: var(--ring-tag-hover-background-color);\n}}\n\n.tag_b7aa {\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 padding: 0 8px;\n\n cursor: pointer;\n\n vertical-align: top;\n\n color: var(--ring-text-color);\n\n border: none;\n border-radius: var(--ring-border-radius);\n\n font-size: 12px;\n line-height: var(--ring-line-height);\n}\n\n.tag_b7aa,\n.tagAngled_c869::before {\n transition: background-color var(--ring-ease);\n\n background-color: var(--ring-tag-background-color);\n}\n\n.withRemove_c0a5 {\n padding-right: 22px;\n}\n\n.container_cb34 {\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_fd92,\n.tag_b7aa:focus-visible {\n position: relative;\n\n outline: none;\n box-shadow: 0 0 0 2px var(--ring-border-hover-color);\n}\n\n.focused_fd92,\n.focused_fd92.tagAngled_c869::before,\n.tag_b7aa:focus-visible,\n.tagAngled_c869:focus-visible::before {\n transition: none;\n\n background-color: var(--ring-tag-hover-background-color);\n}\n\n.tagAngled_c869 {\n /* it needs to fix vertical alignment broken by "overflow: hidden". Remove this class, when IE11 will be deprecated */\n\n margin-bottom: -5px !important;\n\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_c869::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\n.tagAngled_c869.focused_fd92,\n .tagAngled_c869:focus {\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_c869:focus::before {\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_a838 {\n}\n\n.disabled_b740.tag_b7aa,\n.disabled_b740.tagAngled_c869::before {\n pointer-events: none;\n\n color: var(--ring-disabled-color);\n background-color: var(--ring-disabled-background-color);\n}\n\n.remove_eff8 {\n position: absolute;\n z-index: 1;\n top: 2px;\n right: 0;\n\n height: auto;\n padding: 0 4px;\n\n line-height: 16px;\n}\n\n.removeIcon_accf.removeIcon_accf {\n color: var(--ring-icon-secondary-color);\n}\n\n.icon_e877 {\n margin-right: 6px;\n\n color: var(--ring-icon-secondary-color);\n}\n\n.icon_e877 svg {\n vertical-align: -3px;\n }\n\n.avatarContainer_ee1b {\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: var(--ring-border-radius);\n border-bottom-left-radius: var(--ring-border-radius);\n}\n\n.customIcon_ac93 {\n max-width: 16px;\n max-height: 16px;\n\n margin-right: 4px;\n\n vertical-align: bottom;\n}\n\n.avatarIcon_a8ff {\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',"",{version:3,sources:["","webpack://./node_modules/@jetbrains/ring-ui/components/tag/tag.css"],names:[],mappings:"AAAA,wGAAA;;EAAA,iBAAA;;EAAA,yDAAA;CAAA,CAAA;;ACKA;;EAGE,kBAAkB;EAClB,UAAU;;EAEV,oBAAoB;;EAEpB,sBAAsB;EACtB,eAAe;EACf,YAAkB;;EAElB,cAAe;;EAEf,eAAe;;EAEf,mBAAmB;;EAEnB,6BAA6B;;EAE7B,YAAY;EACZ,wCAAwC;;EAExC,eAAe;EACf,oCAAoC;AACtC;;AAEA;;EAEE,6CAA6C;;EAE7C,kDAAkD;AACpD;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,kBAAkB;;EAElB,qBAAqB;;EAErB,2BAAgC;;EAEhC,iBAA4B;;EAE5B,mBAAmB;AACrB;;AAEA;;EAEE,kBAAkB;;EAElB,aAAa;EACb,oDAAoD;AACtD;;AAEA;;;;EAME,gBAAgB;;EAEhB,wDAAwD;AAC1D;;AAEA;EACE,qHAAqH;;EAErH,8BAA8B;;EAE9B,gBAAiB;EACjB,iBAA4B;;EAE5B,yBAAyB;EACzB,4BAA4B;AA6B9B;;AA3BE;IACE,kBAAkB;IAClB,WAAW;IACX,MAAM;IACN,OAAO;;IAEP,sBAAsB;IACtB,WAAW;IACX,YAAY;;IAEZ,WAAW;IACX,sCAAsC;IACtC,qBAAqB;;IAErB,YAAY;EACd;;AAEA;;IAEE,oGAAoG;EACtG;;AAEA;IACE;;yDAEqD;EACvD;;AAGF;AAEA;;AAEA;;EAEE,oBAAoB;;EAEpB,iCAAiC;EACjC,uDAAuD;AACzD;;AAEA;EACE,kBAAkB;EAClB,UAAU;EACV,QAAQ;EACR,QAAQ;;EAER,YAAY;EACZ,cAAyB;;EAEzB,iBAA2B;AAC7B;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,iBAAiB;;EAEjB,uCAAuC;AAKzC;;AAHE;IACE,oBAAoB;EACtB;;AAGF;EACE,qBAAqB;EACrB,gBAAgB;;EAEhB,sBAAsB;EACtB,WAAiB;EACjB,YAAkB;EAClB,iBAA4B;EAC5B,iBAA2B;;EAE3B,mBAAmB;;EAEnB,iDAAiD;EACjD,oDAAoD;AACtD;;AAEA;EACE,eAAyB;EACzB,gBAA0B;;EAE1B,iBAA4B;;EAE5B,sBAAsB;AACxB;;AAEA;EACE,WAAiB;;EAEjB,kBAAkB;;EAElB,sBAAmB;;KAAnB,mBAAmB;EACnB,0BAAuB;KAAvB,uBAAuB;AACzB",sourcesContent:[null,'@import "../global/variables.css";\n\n@value unit from "../global/global.css";\n@value max-height: 20px;\n\n.tag {\n composes: resetButton from "../global/global.css";\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: max-height;\n\n padding: 0 unit;\n\n cursor: pointer;\n\n vertical-align: top;\n\n color: var(--ring-text-color);\n\n border: none;\n border-radius: var(--ring-border-radius);\n\n font-size: 12px;\n line-height: var(--ring-line-height);\n}\n\n.tag,\n.tagAngled::before {\n transition: background-color var(--ring-ease);\n\n background-color: var(--ring-tag-background-color);\n}\n\n.withRemove {\n padding-right: 22px;\n}\n\n.container {\n position: relative;\n\n display: inline-block;\n\n max-width: calc(100% - unit / 2);\n\n margin-right: calc(unit / 2);\n\n white-space: nowrap;\n}\n\n.focused,\n.tag:focus-visible {\n position: relative;\n\n outline: none;\n box-shadow: 0 0 0 2px var(--ring-border-hover-color);\n}\n\n.focused,\n.focused.tagAngled::before,\n.tag:focus-visible,\n.tagAngled:focus-visible::before,\n.tag:hover,\n.tagAngled:hover::before {\n transition: none;\n\n background-color: var(--ring-tag-hover-background-color);\n}\n\n.tagAngled {\n /* it needs to fix vertical alignment broken by "overflow: hidden". Remove this class, when IE11 will be deprecated */\n\n margin-bottom: -5px !important;\n\n margin-left: unit;\n padding-left: calc(unit / 2);\n\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n\n &::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\n &.focused,\n &:focus {\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 &:focus::before {\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\n.content {\n composes: ellipsis from "../global/global.css";\n}\n\n.disabled.tag,\n.disabled.tagAngled::before {\n pointer-events: none;\n\n color: var(--ring-disabled-color);\n background-color: var(--ring-disabled-background-color);\n}\n\n.remove {\n position: absolute;\n z-index: 1;\n top: 2px;\n right: 0;\n\n height: auto;\n padding: 0 calc(unit / 2);\n\n line-height: calc(unit * 2);\n}\n\n.removeIcon.removeIcon {\n color: var(--ring-icon-secondary-color);\n}\n\n.icon {\n margin-right: 6px;\n\n color: var(--ring-icon-secondary-color);\n\n & svg {\n vertical-align: -3px;\n }\n}\n\n.avatarContainer {\n display: inline-block;\n overflow: hidden;\n\n box-sizing: border-box;\n width: max-height;\n height: max-height;\n margin-right: calc(unit / 2);\n margin-left: calc(0 - unit);\n\n vertical-align: top;\n\n border-top-left-radius: var(--ring-border-radius);\n border-bottom-left-radius: var(--ring-border-radius);\n}\n\n.customIcon {\n max-width: calc(unit * 2);\n max-height: calc(unit * 2);\n\n margin-right: calc(unit / 2);\n\n vertical-align: bottom;\n}\n\n.avatarIcon {\n width: max-height;\n\n margin-right: -4px;\n\n object-fit: contain;\n object-position: center;\n}\n'],sourceRoot:""}]),u.locals={unit:`${l.default.locals.unit}`,"max-height":"20px",tag:`tag_b7aa ${l.default.locals.resetButton}`,tagAngled:"tagAngled_c869",withRemove:"withRemove_c0a5",container:"container_cb34",focused:"focused_fd92",content:`content_a838 ${l.default.locals.ellipsis}`,disabled:"disabled_b740",remove:"remove_eff8",removeIcon:"removeIcon_accf",icon:"icon_e877",avatarContainer:"avatarContainer_ee1b",customIcon:"customIcon_ac93",avatarIcon:"avatarIcon_a8ff"};const s=u},6162:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>u});var r=t(1404),o=t.n(r),i=t(7156),a=t.n(i),l=t(5280),c=a()(o());c.i(l.A),c.push([e.id,".text_f1dc {\n color: var(--ring-text-color);\n}\n\n.sizeS_b3aa {\n font-size: var(--ring-font-size-smaller);\n}\n\n.sizeM_ae72 {\n font-size: var(--ring-font-size);\n}\n\n.sizeL_f259 {\n font-size: var(--ring-font-size-larger);\n}\n\n.info_c0a4 {\n color: var(--ring-secondary-color);\n}\n","",{version:3,sources:["webpack://./node_modules/@jetbrains/ring-ui/components/text/text.css"],names:[],mappings:"AAEA;EACE,6BAA6B;AAC/B;;AAEA;EACE,wCAAwC;AAC1C;;AAEA;EACE,gCAAgC;AAClC;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,kCAAkC;AACpC",sourcesContent:['@import "../global/variables.css";\n\n.text {\n color: var(--ring-text-color);\n}\n\n.sizeS {\n font-size: var(--ring-font-size-smaller);\n}\n\n.sizeM {\n font-size: var(--ring-font-size);\n}\n\n.sizeL {\n font-size: var(--ring-font-size-larger);\n}\n\n.info {\n color: var(--ring-secondary-color);\n}\n'],sourceRoot:""}]),c.locals={text:"text_f1dc",sizeS:"sizeS_b3aa",sizeM:"sizeM_ae72",sizeL:"sizeL_f259",info:"info_c0a4"};const u=c},938:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>s});var r=t(1404),o=t.n(r),i=t(7156),a=t.n(i),l=t(9106),c=t(5280),u=a()(o());u.i(c.A),u.i(l.default,"",!0),u.push([e.id,".tooltip_fbfb {\n max-width: 400px;\n padding: 8px;\n\n text-align: left;\n\n color: var(--ring-text-color);\n}\n\n.long_b7a5 {\n padding: 8px 12px;\n\n font-size: var(--ring-font-size-smaller);\n line-height: var(--ring-line-height-lowest);\n}\n","",{version:3,sources:["webpack://./node_modules/@jetbrains/ring-ui/components/tooltip/tooltip.css"],names:[],mappings:"AAIA;EACE,gBAA0B;EAC1B,YAAa;;EAEb,gBAAgB;;EAEhB,6BAA6B;AAC/B;;AAEA;EACE,iBAA8B;;EAE9B,wCAAwC;EACxC,2CAA2C;AAC7C",sourcesContent:['@import "../global/variables.css";\n\n@value unit from "../global/global.css";\n\n.tooltip {\n max-width: calc(unit * 50);\n padding: unit;\n\n text-align: left;\n\n color: var(--ring-text-color);\n}\n\n.long {\n padding: unit calc(unit * 1.5);\n\n font-size: var(--ring-font-size-smaller);\n line-height: var(--ring-line-height-lowest);\n}\n'],sourceRoot:""}]),u.locals={unit:`${l.default.locals.unit}`,tooltip:"tooltip_fbfb",long:"long_b7a5"};const s=u},7156:e=>{"use strict";e.exports=function(e){var n=[];return n.toString=function(){return this.map((function(n){var t="",r=void 0!==n[5];return n[4]&&(t+="@supports (".concat(n[4],") {")),n[2]&&(t+="@media ".concat(n[2]," {")),r&&(t+="@layer".concat(n[5].length>0?" ".concat(n[5]):""," {")),t+=e(n),r&&(t+="}"),n[2]&&(t+="}"),n[4]&&(t+="}"),t})).join("")},n.i=function(e,t,r,o,i){"string"==typeof e&&(e=[[null,e,void 0]]);var a={};if(r)for(var l=0;l0?" ".concat(s[5]):""," {").concat(s[1],"}")),s[5]=i),t&&(s[2]?(s[1]="@media ".concat(s[2]," {").concat(s[1],"}"),s[2]=t):s[2]=t),o&&(s[4]?(s[1]="@supports (".concat(s[4],") {").concat(s[1],"}"),s[4]=o):s[4]="".concat(o)),n.push(s))}},n}},1404:e=>{"use strict";e.exports=function(e){var n=e[1],t=e[3];if(!t)return n;if("function"==typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(t)))),o="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(r),i="/*# ".concat(o," */");return[n].concat([i]).join("\n")}return[n].join("\n")}},4504:(e,n,t)=>{var r=t(8298),o=t(5163),i=t(2729),a=t(9986),l=t(9742),c=t(6291),u=t(7222);u=u.__esModule?u.default:u;var s={};s.styleTagTransform=c,s.setAttributes=a,s.insert=i.bind(null,"head"),s.domAPI=o,s.insertStyleElement=l;r(u,s);e.exports=u&&u.locals||{}},9102:(e,n,t)=>{var r=t(8298),o=t(5163),i=t(2729),a=t(9986),l=t(9742),c=t(6291),u=t(9892);u=u.__esModule?u.default:u;var s={};s.styleTagTransform=c,s.setAttributes=a,s.insert=i.bind(null,"head"),s.domAPI=o,s.insertStyleElement=l;r(u,s);e.exports=u&&u.locals||{}},6860:(e,n,t)=>{var r=t(8298),o=t(5163),i=t(2729),a=t(9986),l=t(9742),c=t(6291),u=t(1866);u=u.__esModule?u.default:u;var s={};s.styleTagTransform=c,s.setAttributes=a,s.insert=i.bind(null,"head"),s.domAPI=o,s.insertStyleElement=l;r(u,s);e.exports=u&&u.locals||{}},3912:(e,n,t)=>{var r=t(8298),o=t(5163),i=t(2729),a=t(9986),l=t(9742),c=t(6291),u=t(5486);u=u.__esModule?u.default:u;var s={};s.styleTagTransform=c,s.setAttributes=a,s.insert=i.bind(null,"head"),s.domAPI=o,s.insertStyleElement=l;r(u,s);e.exports=u&&u.locals||{}},8764:(e,n,t)=>{var r=t(8298),o=t(5163),i=t(2729),a=t(9986),l=t(9742),c=t(6291),u=t(6506);u=u.__esModule?u.default:u;var s={};s.styleTagTransform=c,s.setAttributes=a,s.insert=i.bind(null,"head"),s.domAPI=o,s.insertStyleElement=l;r(u,s);e.exports=u&&u.locals||{}},6620:(e,n,t)=>{var r=t(8298),o=t(5163),i=t(2729),a=t(9986),l=t(9742),c=t(6291),u=t(9106);u=u.__esModule?u.default:u;var s={};s.styleTagTransform=c,s.setAttributes=a,s.insert=i.bind(null,"head"),s.domAPI=o,s.insertStyleElement=l;r(u,s);e.exports=u&&u.locals||{}},9468:(e,n,t)=>{var r=t(8298),o=t(5163),i=t(2729),a=t(9986),l=t(9742),c=t(6291),u=t(5066);u=u.__esModule?u.default:u;var s={};s.styleTagTransform=c,s.setAttributes=a,s.insert=i.bind(null,"head"),s.domAPI=o,s.insertStyleElement=l;r(u,s);e.exports=u&&u.locals||{}},274:(e,n,t)=>{var r=t(8298),o=t(5163),i=t(2729),a=t(9986),l=t(9742),c=t(6291),u=t(8976);u=u.__esModule?u.default:u;var s={};s.styleTagTransform=c,s.setAttributes=a,s.insert=i.bind(null,"head"),s.domAPI=o,s.insertStyleElement=l;r(u,s);e.exports=u&&u.locals||{}},5924:(e,n,t)=>{var r=t(8298),o=t(5163),i=t(2729),a=t(9986),l=t(9742),c=t(6291),u=t(8266);u=u.__esModule?u.default:u;var s={};s.styleTagTransform=c,s.setAttributes=a,s.insert=i.bind(null,"head"),s.domAPI=o,s.insertStyleElement=l;r(u,s);e.exports=u&&u.locals||{}},7826:(e,n,t)=>{var r=t(8298),o=t(5163),i=t(2729),a=t(9986),l=t(9742),c=t(6291),u=t(6960);u=u.__esModule?u.default:u;var s={};s.styleTagTransform=c,s.setAttributes=a,s.insert=i.bind(null,"head"),s.domAPI=o,s.insertStyleElement=l;r(u,s);e.exports=u&&u.locals||{}},1914:(e,n,t)=>{var r=t(8298),o=t(5163),i=t(2729),a=t(9986),l=t(9742),c=t(6291),u=t(480);u=u.__esModule?u.default:u;var s={};s.styleTagTransform=c,s.setAttributes=a,s.insert=i.bind(null,"head"),s.domAPI=o,s.insertStyleElement=l;r(u,s);e.exports=u&&u.locals||{}},8130:(e,n,t)=>{var r=t(8298),o=t(5163),i=t(2729),a=t(9986),l=t(9742),c=t(6291),u=t(1586);u=u.__esModule?u.default:u;var s={};s.styleTagTransform=c,s.setAttributes=a,s.insert=i.bind(null,"head"),s.domAPI=o,s.insertStyleElement=l;r(u,s);e.exports=u&&u.locals||{}},1564:(e,n,t)=>{var r=t(8298),o=t(5163),i=t(2729),a=t(9986),l=t(9742),c=t(6291),u=t(8890);u=u.__esModule?u.default:u;var s={};s.styleTagTransform=c,s.setAttributes=a,s.insert=i.bind(null,"head"),s.domAPI=o,s.insertStyleElement=l;r(u,s);e.exports=u&&u.locals||{}},5103:(e,n,t)=>{var r=t(8298),o=t(5163),i=t(2729),a=t(9986),l=t(9742),c=t(6291),u=t(4481);u=u.__esModule?u.default:u;var s={};s.styleTagTransform=c,s.setAttributes=a,s.insert=i.bind(null,"head"),s.domAPI=o,s.insertStyleElement=l;r(u,s);e.exports=u&&u.locals||{}},3006:(e,n,t)=>{var r=t(8298),o=t(5163),i=t(2729),a=t(9986),l=t(9742),c=t(6291),u=t(2636);u=u.__esModule?u.default:u;var s={};s.styleTagTransform=c,s.setAttributes=a,s.insert=i.bind(null,"head"),s.domAPI=o,s.insertStyleElement=l;r(u,s);e.exports=u&&u.locals||{}},9344:(e,n,t)=>{var r=t(8298),o=t(5163),i=t(2729),a=t(9986),l=t(9742),c=t(6291),u=t(8102);u=u.__esModule?u.default:u;var s={};s.styleTagTransform=c,s.setAttributes=a,s.insert=i.bind(null,"head"),s.domAPI=o,s.insertStyleElement=l;r(u,s);e.exports=u&&u.locals||{}},4512:(e,n,t)=>{var r=t(8298),o=t(5163),i=t(2729),a=t(9986),l=t(9742),c=t(6291),u=t(4561);u=u.__esModule?u.default:u;var s={};s.styleTagTransform=c,s.setAttributes=a,s.insert=i.bind(null,"head"),s.domAPI=o,s.insertStyleElement=l;r(u,s);e.exports=u&&u.locals||{}},6932:(e,n,t)=>{var r=t(8298),o=t(5163),i=t(2729),a=t(9986),l=t(9742),c=t(6291),u=t(6162);u=u.__esModule?u.default:u;var s={};s.styleTagTransform=c,s.setAttributes=a,s.insert=i.bind(null,"head"),s.domAPI=o,s.insertStyleElement=l;r(u,s);e.exports=u&&u.locals||{}},8132:(e,n,t)=>{var r=t(8298),o=t(5163),i=t(2729),a=t(9986),l=t(9742),c=t(6291),u=t(938);u=u.__esModule?u.default:u;var s={};s.styleTagTransform=c,s.setAttributes=a,s.insert=i.bind(null,"head"),s.domAPI=o,s.insertStyleElement=l;r(u,s);e.exports=u&&u.locals||{}},8298:e=>{"use strict";var n=[];function t(e){for(var t=-1,r=0;r{"use strict";var n={};e.exports=function(e,t){var r=function(e){if(void 0===n[e]){var t=document.querySelector(e);if(window.HTMLIFrameElement&&t instanceof window.HTMLIFrameElement)try{t=t.contentDocument.head}catch(e){t=null}n[e]=t}return n[e]}(e);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(t)}},9742:e=>{"use strict";e.exports=function(e){var n=document.createElement("style");return e.setAttributes(n,e.attributes),e.insert(n,e.options),n}},9986:(e,n,t)=>{"use strict";e.exports=function(e){var n=t.nc;n&&e.setAttribute("nonce",n)}},5163:e=>{"use strict";e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var n=e.insertStyleElement(e);return{update:function(t){!function(e,n,t){var r="";t.supports&&(r+="@supports (".concat(t.supports,") {")),t.media&&(r+="@media ".concat(t.media," {"));var o=void 0!==t.layer;o&&(r+="@layer".concat(t.layer.length>0?" ".concat(t.layer):""," {")),r+=t.css,o&&(r+="}"),t.media&&(r+="}"),t.supports&&(r+="}");var i=t.sourceMap;i&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),n.styleTagTransform(r,e,n.options)}(n,e,t)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(n)}}}},6291:e=>{"use strict";e.exports=function(e,n){if(n.styleSheet)n.styleSheet.cssText=e;else{for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(document.createTextNode(e))}}},9511:(e,n,t)=>{"use strict";var r=t(8075)("ArrayBuffer.prototype.byteLength",!0),o=t(4670);e.exports=function(e){return o(e)?r?r(e):e.byteLength:NaN}},8075:(e,n,t)=>{"use strict";var r=t(453),o=t(487),i=o(r("String.prototype.indexOf"));e.exports=function(e,n){var t=r(e,!!n);return"function"==typeof t&&i(e,".prototype.")>-1?o(t):t}},487:(e,n,t)=>{"use strict";var r=t(6743),o=t(453),i=t(6897),a=t(9675),l=o("%Function.prototype.apply%"),c=o("%Function.prototype.call%"),u=o("%Reflect.apply%",!0)||r.call(c,l),s=t(3036),f=o("%Math.max%");e.exports=function(e){if("function"!=typeof e)throw new a("a function is required");var n=u(r,c,arguments);return i(n,1+f(0,e.length-(arguments.length-1)),!0)};var p=function(){return u(r,l,arguments)};s?s(e.exports,"apply",{value:p}):e.exports.apply=p},5888:(e,n,t)=>{"use strict";e.exports=function(e,n){var t=this,r=t.constructor;return t.options=Object.assign({storeInstancesGlobally:!0},n||{}),t.callbacks={},t.directMap={},t.sequenceLevels={},t.resetTimer=null,t.ignoreNextKeyup=!1,t.ignoreNextKeypress=!1,t.nextExpectedAction=!1,t.element=e,t.addEvents(),t.options.storeInstancesGlobally&&r.instances.push(t),t},e.exports.prototype.bind=t(1210),e.exports.prototype.bindMultiple=t(4382),e.exports.prototype.unbind=t(3709),e.exports.prototype.trigger=t(3149),e.exports.prototype.reset=t(6726),e.exports.prototype.stopCallback=t(4446),e.exports.prototype.handleKey=t(4320),e.exports.prototype.addEvents=t(6687),e.exports.prototype.bindSingle=t(2214),e.exports.prototype.getKeyInfo=t(4174),e.exports.prototype.pickBestAction=t(6004),e.exports.prototype.getReverseMap=t(5193),e.exports.prototype.getMatches=t(9132),e.exports.prototype.resetSequences=t(3229),e.exports.prototype.fireCallback=t(7922),e.exports.prototype.bindSequence=t(3256),e.exports.prototype.resetSequenceTimer=t(602),e.exports.prototype.detach=t(3502),e.exports.instances=[],e.exports.reset=t(6255),e.exports.REVERSE_MAP=null},6687:(e,n,t)=>{"use strict";e.exports=function(){var e=this,n=t(2904),r=e.element;e.eventHandler=t(8178).bind(e),n(r,"keypress",e.eventHandler),n(r,"keydown",e.eventHandler),n(r,"keyup",e.eventHandler)}},1210:e=>{"use strict";e.exports=function(e,n,t){return e=e instanceof Array?e:[e],this.bindMultiple(e,n,t),this}},4382:e=>{"use strict";e.exports=function(e,n,t){for(var r=0;r{"use strict";e.exports=function(e,n,r,o){var i=this;function a(n){return function(){i.nextExpectedAction=n,++i.sequenceLevels[e],i.resetSequenceTimer()}}function l(n){var a;i.fireCallback(r,n,e),"keyup"!==o&&(a=t(3970),i.ignoreNextKeyup=a(n)),setTimeout((function(){i.resetSequences()}),10)}i.sequenceLevels[e]=0;for(var c=0;c{"use strict";e.exports=function(e,n,t,r,o){var i=this;i.directMap[e+":"+t]=n;var a,l=(e=e.replace(/\s+/g," ")).split(" ");l.length>1?i.bindSequence(e,l,n,t):(a=i.getKeyInfo(e,t),i.callbacks[a.key]=i.callbacks[a.key]||[],i.getMatches(a.key,a.modifiers,{type:a.action},r,e,o),i.callbacks[a.key][r?"unshift":"push"]({callback:n,modifiers:a.modifiers,action:a.action,seq:r,level:o,combo:e}))}},3502:(e,n,t)=>{var r=t(2904).off;e.exports=function(){var e=this,n=e.element;r(n,"keypress",e.eventHandler),r(n,"keydown",e.eventHandler),r(n,"keyup",e.eventHandler)}},2904:e=>{function n(e,n,t,r){return!e.addEventListener&&(n="on"+n),(e.addEventListener||e.attachEvent).call(e,n,t,r),t}e.exports=n,e.exports.on=n,e.exports.off=function(e,n,t,r){return!e.removeEventListener&&(n="on"+n),(e.removeEventListener||e.detachEvent).call(e,n,t,r),t}},7922:(e,n,t)=>{"use strict";e.exports=function(e,n,r,o){this.stopCallback(n,n.target||n.srcElement,r,o)||!1===e(n,r)&&(t(2156)(n),t(1849)(n))}},4174:(e,n,t)=>{"use strict";e.exports=function(e,n){var r,o,i,a,l,c,u=[];for(r=t(7486)(e),a=t(7641),l=t(7984),c=t(5962),i=0;i{"use strict";e.exports=function(e,n,r,o,i,a){var l,c,u,s,f=this,p=[],d=r.type;"keypress"!==d||r.code&&"Arrow"===r.code.slice(0,5)||(f.callbacks["any-character"]||[]).forEach((function(e){p.push(e)}));if(!f.callbacks[e])return p;for(u=t(5962),"keyup"===d&&u(e)&&(n=[e]),l=0;l{"use strict";e.exports=function(){var e,n=this.constructor;if(!n.REVERSE_MAP)for(var r in n.REVERSE_MAP={},e=t(6814))r>95&&r<112||e.hasOwnProperty(r)&&(n.REVERSE_MAP[e[r]]=r);return n.REVERSE_MAP}},4320:(e,n,t)=>{"use strict";e.exports=function(e,n,r){var o,i,a,l,c=this,u={},s=0,f=!1;for(o=c.getMatches(e,n,r),i=0;i{"use strict";e.exports=function(e){var n,r=this;"number"!=typeof e.which&&(e.which=e.keyCode);var o=t(3970)(e);void 0!==o&&("keyup"!==e.type||r.ignoreNextKeyup!==o?(n=t(5273),r.handleKey(o,n(e),e)):r.ignoreNextKeyup=!1)}},7238:e=>{"use strict";e.exports=function(e,n){return e.sort().join(",")===n.sort().join(",")}},6004:e=>{"use strict";e.exports=function(e,n,t){return t||(t=this.getReverseMap()[e]?"keydown":"keypress"),"keypress"===t&&n.length&&(t="keydown"),t}},6726:e=>{"use strict";e.exports=function(){return this.callbacks={},this.directMap={},this}},602:e=>{"use strict";e.exports=function(){var e=this;clearTimeout(e.resetTimer),e.resetTimer=setTimeout((function(){e.resetSequences()}),1e3)}},3229:e=>{"use strict";e.exports=function(e){var n=this;e=e||{};var t,r=!1;for(t in n.sequenceLevels)e[t]?r=!0:n.sequenceLevels[t]=0;r||(n.nextExpectedAction=!1)}},4446:e=>{"use strict";e.exports=function(e,n){if((" "+n.className+" ").indexOf(" combokeys ")>-1)return!1;var t=n.tagName.toLowerCase();return"input"===t||"select"===t||"textarea"===t||n.isContentEditable}},3149:e=>{"use strict";e.exports=function(e,n){return this.directMap[e+":"+n]&&this.directMap[e+":"+n]({},e),this}},3709:e=>{"use strict";e.exports=function(e,n){return this.bind(e,(function(){}),n)}},6255:e=>{"use strict";e.exports=function(){this.instances.forEach((function(e){e.reset()}))}},3970:(e,n,t)=>{"use strict";e.exports=function(e){var n,r;if(n=t(6814),r=t(4082),"keypress"===e.type){var o=String.fromCharCode(e.which);return e.shiftKey||(o=o.toLowerCase()),o}return void 0!==n[e.which]?n[e.which]:void 0!==r[e.which]?r[e.which]:String.fromCharCode(e.which).toLowerCase()}},5273:e=>{"use strict";e.exports=function(e){var n=[];return e.shiftKey&&n.push("shift"),e.altKey&&n.push("alt"),e.ctrlKey&&n.push("ctrl"),e.metaKey&&n.push("meta"),n}},5962:e=>{"use strict";e.exports=function(e){return"shift"===e||"ctrl"===e||"alt"===e||"meta"===e}},7486:e=>{"use strict";e.exports=function(e){return"+"===e?["+"]:e.split("+")}},2156:e=>{"use strict";e.exports=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1}},7984:e=>{"use strict";e.exports={"~":"`","!":"1","@":"2","#":"3",$:"4","%":"5","^":"6","&":"7","*":"8","(":"9",")":"0",_:"-","+":"=",":":";",'"':"'","<":",",">":".","?":"/","|":"\\"}},7641:e=>{"use strict";e.exports={option:"alt",command:"meta",return:"enter",escape:"esc",mod:/Mac|iPod|iPhone|iPad/.test(navigator.platform)?"meta":"ctrl"}},4082:e=>{"use strict";e.exports={106:"*",107:"plus",109:"minus",110:".",111:"/",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"}},6814:e=>{"use strict";e.exports={8:"backspace",9:"tab",13:"enter",16:"shift",17:"ctrl",18:"alt",20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"ins",46:"del",91:"meta",93:"meta",173:"minus",187:"plus",189:"minus",224:"meta"};for(var n=1;n<20;++n)e.exports[111+n]="f"+n;for(n=0;n<=9;++n)e.exports[n+96]=n},1849:e=>{"use strict";e.exports=function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}},4982:(e,n,t)=>{"use strict";var r=t(6525),o=t(8075),i=t(1589),a=t(453),l=t(4552),c=t(920),u=t(7653),s=t(7244),f=t(4634),p=t(4670),d=t(2120),g=t(4035),h=t(7070),v=t(1189),b=t(1539),A=t(593),m=t(5767),y=t(9511),E=o("SharedArrayBuffer.prototype.byteLength",!0),C=o("Date.prototype.getTime"),w=Object.getPrototypeOf,_=o("Object.prototype.toString"),x=a("%Set%",!0),S=o("Map.prototype.has",!0),k=o("Map.prototype.get",!0),O=o("Map.prototype.size",!0),B=o("Set.prototype.add",!0),T=o("Set.prototype.delete",!0),P=o("Set.prototype.has",!0),I=o("Set.prototype.size",!0);function j(e,n,t,r){for(var o,i=l(e);(o=i.next())&&!o.done;)if(N(n,o.value,t,r))return T(e,o.value),!0;return!1}function z(e){return void 0===e?null:"object"!=typeof e?"symbol"!=typeof e&&("string"!=typeof e&&"number"!=typeof e||+e==+e):void 0}function D(e,n,t,o,i,a){var l=z(t);if(null!=l)return l;var c=k(n,l),u=r({},i,{strict:!1});return!(void 0===c&&!S(n,l)||!N(o,c,u,a))&&(!S(e,l)&&N(o,c,u,a))}function R(e,n,t){var r=z(t);return null!=r?r:P(n,r)&&!P(e,r)}function M(e,n,t,r,o,i){for(var a,c,u=l(e);(a=u.next())&&!a.done;)if(N(t,c=a.value,o,i)&&N(r,k(n,c),o,i))return T(e,c),!0;return!1}function N(e,n,t,o){var a=t||{};if(a.strict?u(e,n):e===n)return!0;if(b(e)!==b(n))return!1;if(!e||!n||"object"!=typeof e&&"object"!=typeof n)return a.strict?u(e,n):e==n;var c,T=o.has(e),z=o.has(n);if(T&&z){if(o.get(e)===o.get(n))return!0}else c={};return T||o.set(e,c),z||o.set(n,c),function(e,n,t,o){var a,c;if(typeof e!=typeof n)return!1;if(null==e||null==n)return!1;if(_(e)!==_(n))return!1;if(s(e)!==s(n))return!1;var u=f(e),b=f(n);if(u!==b)return!1;var T=e instanceof Error,z=n instanceof Error;if(T!==z)return!1;if((T||z)&&(e.name!==n.name||e.message!==n.message))return!1;var L=g(e),U=g(n);if(L!==U)return!1;if((L||U)&&(e.source!==n.source||i(e)!==i(n)))return!1;var H=d(e),W=d(n);if(H!==W)return!1;if((H||W)&&C(e)!==C(n))return!1;if(t.strict&&w&&w(e)!==w(n))return!1;var G=m(e),Y=m(n);if(G!==Y)return!1;if(G||Y){if(e.length!==n.length)return!1;for(a=0;a=0;a--)if(Z[a]!=J[a])return!1;for(a=Z.length-1;a>=0;a--)if(!N(e[c=Z[a]],n[c],t,o))return!1;var ee=A(e),ne=A(n);if(ee!==ne)return!1;if("Set"===ee||"Set"===ne)return function(e,n,t,r){if(I(e)!==I(n))return!1;var o,i,a,c=l(e),u=l(n);for(;(o=c.next())&&!o.done;)if(o.value&&"object"==typeof o.value)a||(a=new x),B(a,o.value);else if(!P(n,o.value)){if(t.strict)return!1;if(!R(e,n,o.value))return!1;a||(a=new x),B(a,o.value)}if(a){for(;(i=u.next())&&!i.done;)if(i.value&&"object"==typeof i.value){if(!j(a,i.value,t.strict,r))return!1}else if(!t.strict&&!P(e,i.value)&&!j(a,i.value,t.strict,r))return!1;return 0===I(a)}return!0}(e,n,t,o);if("Map"===ee)return function(e,n,t,o){if(O(e)!==O(n))return!1;var i,a,c,u,s,f,p=l(e),d=l(n);for(;(i=p.next())&&!i.done;)if(u=i.value[0],s=i.value[1],u&&"object"==typeof u)c||(c=new x),B(c,u);else if(void 0===(f=k(n,u))&&!S(n,u)||!N(s,f,t,o)){if(t.strict)return!1;if(!D(e,n,u,s,t,o))return!1;c||(c=new x),B(c,u)}if(c){for(;(a=d.next())&&!a.done;)if(u=a.value[0],f=a.value[1],u&&"object"==typeof u){if(!M(c,e,u,f,t,o))return!1}else if(!(t.strict||e.has(u)&&N(k(e,u),f,t,o)||M(c,e,u,f,r({},t,{strict:!1}),o)))return!1;return 0===I(c)}return!0}(e,n,t,o);return!0}(e,n,a,o)}function F(e){return!(!e||"object"!=typeof e||"number"!=typeof e.length)&&("function"==typeof e.copy&&"function"==typeof e.slice&&(!(e.length>0&&"number"!=typeof e[0])&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))))}e.exports=function(e,n,t){return N(e,n,t,c())}},41:(e,n,t)=>{"use strict";var r=t(3036),o=t(8068),i=t(9675),a=t(5795);e.exports=function(e,n,t){if(!e||"object"!=typeof e&&"function"!=typeof e)throw new i("`obj` must be an object or a function`");if("string"!=typeof n&&"symbol"!=typeof n)throw new i("`property` must be a string or a symbol`");if(arguments.length>3&&"boolean"!=typeof arguments[3]&&null!==arguments[3])throw new i("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&"boolean"!=typeof arguments[4]&&null!==arguments[4])throw new i("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&"boolean"!=typeof arguments[5]&&null!==arguments[5])throw new i("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&"boolean"!=typeof arguments[6])throw new i("`loose`, if provided, must be a boolean");var l=arguments.length>3?arguments[3]:null,c=arguments.length>4?arguments[4]:null,u=arguments.length>5?arguments[5]:null,s=arguments.length>6&&arguments[6],f=!!a&&a(e,n);if(r)r(e,n,{configurable:null===u&&f?f.configurable:!u,enumerable:null===l&&f?f.enumerable:!l,value:t,writable:null===c&&f?f.writable:!c});else{if(!s&&(l||c||u))throw new o("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.");e[n]=t}}},8452:(e,n,t)=>{"use strict";var r=t(1189),o="function"==typeof Symbol&&"symbol"==typeof Symbol("foo"),i=Object.prototype.toString,a=Array.prototype.concat,l=t(41),c=t(592)(),u=function(e,n,t,r){if(n in e)if(!0===r){if(e[n]===t)return}else if("function"!=typeof(o=r)||"[object Function]"!==i.call(o)||!r())return;var o;c?l(e,n,t,!0):l(e,n,t)},s=function(e,n){var t=arguments.length>2?arguments[2]:{},i=r(n);o&&(i=a.call(i,Object.getOwnPropertySymbols(n)));for(var l=0;l{"use strict";var r=t(453)("%Object.defineProperty%",!0)||!1;if(r)try{r({},"a",{value:1})}catch(e){r=!1}e.exports=r},1237:e=>{"use strict";e.exports=EvalError},9383:e=>{"use strict";e.exports=Error},9290:e=>{"use strict";e.exports=RangeError},9538:e=>{"use strict";e.exports=ReferenceError},8068:e=>{"use strict";e.exports=SyntaxError},9675:e=>{"use strict";e.exports=TypeError},5345:e=>{"use strict";e.exports=URIError},2682:(e,n,t)=>{"use strict";var r=t(9600),o=Object.prototype.toString,i=Object.prototype.hasOwnProperty;e.exports=function(e,n,t){if(!r(n))throw new TypeError("iterator must be a function");var a;arguments.length>=3&&(a=t),"[object Array]"===o.call(e)?function(e,n,t){for(var r=0,o=e.length;r{"use strict";var n=Object.prototype.toString,t=Math.max,r=function(e,n){for(var t=[],r=0;r{"use strict";var r=t(9353);e.exports=Function.prototype.bind||r},4462:e=>{"use strict";var n=function(){return"string"==typeof function(){}.name},t=Object.getOwnPropertyDescriptor;if(t)try{t([],"length")}catch(e){t=null}n.functionsHaveConfigurableNames=function(){if(!n()||!t)return!1;var e=t((function(){}),"name");return!!e&&!!e.configurable};var r=Function.prototype.bind;n.boundFunctionsHaveNames=function(){return n()&&"function"==typeof r&&""!==function(){}.bind().name},e.exports=n},453:(e,n,t)=>{"use strict";var r,o=t(9383),i=t(1237),a=t(9290),l=t(9538),c=t(8068),u=t(9675),s=t(5345),f=Function,p=function(e){try{return f('"use strict"; return ('+e+").constructor;")()}catch(e){}},d=Object.getOwnPropertyDescriptor;if(d)try{d({},"")}catch(e){d=null}var g=function(){throw new u},h=d?function(){try{return g}catch(e){try{return d(arguments,"callee").get}catch(e){return g}}}():g,v=t(4039)(),b=t(24)(),A=Object.getPrototypeOf||(b?function(e){return e.__proto__}:null),m={},y="undefined"!=typeof Uint8Array&&A?A(Uint8Array):r,E={__proto__:null,"%AggregateError%":"undefined"==typeof AggregateError?r:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?r:ArrayBuffer,"%ArrayIteratorPrototype%":v&&A?A([][Symbol.iterator]()):r,"%AsyncFromSyncIteratorPrototype%":r,"%AsyncFunction%":m,"%AsyncGenerator%":m,"%AsyncGeneratorFunction%":m,"%AsyncIteratorPrototype%":m,"%Atomics%":"undefined"==typeof Atomics?r:Atomics,"%BigInt%":"undefined"==typeof BigInt?r:BigInt,"%BigInt64Array%":"undefined"==typeof BigInt64Array?r:BigInt64Array,"%BigUint64Array%":"undefined"==typeof BigUint64Array?r:BigUint64Array,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?r:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":o,"%eval%":eval,"%EvalError%":i,"%Float32Array%":"undefined"==typeof Float32Array?r:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?r:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?r:FinalizationRegistry,"%Function%":f,"%GeneratorFunction%":m,"%Int8Array%":"undefined"==typeof Int8Array?r:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?r:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?r:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":v&&A?A(A([][Symbol.iterator]())):r,"%JSON%":"object"==typeof JSON?JSON:r,"%Map%":"undefined"==typeof Map?r:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&v&&A?A((new Map)[Symbol.iterator]()):r,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?r:Promise,"%Proxy%":"undefined"==typeof Proxy?r:Proxy,"%RangeError%":a,"%ReferenceError%":l,"%Reflect%":"undefined"==typeof Reflect?r:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?r:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&v&&A?A((new Set)[Symbol.iterator]()):r,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?r:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":v&&A?A(""[Symbol.iterator]()):r,"%Symbol%":v?Symbol:r,"%SyntaxError%":c,"%ThrowTypeError%":h,"%TypedArray%":y,"%TypeError%":u,"%Uint8Array%":"undefined"==typeof Uint8Array?r:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?r:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?r:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?r:Uint32Array,"%URIError%":s,"%WeakMap%":"undefined"==typeof WeakMap?r:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?r:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?r:WeakSet};if(A)try{null.error}catch(e){var C=A(A(e));E["%Error.prototype%"]=C}var w=function e(n){var t;if("%AsyncFunction%"===n)t=p("async function () {}");else if("%GeneratorFunction%"===n)t=p("function* () {}");else if("%AsyncGeneratorFunction%"===n)t=p("async function* () {}");else if("%AsyncGenerator%"===n){var r=e("%AsyncGeneratorFunction%");r&&(t=r.prototype)}else if("%AsyncIteratorPrototype%"===n){var o=e("%AsyncGenerator%");o&&A&&(t=A(o.prototype))}return E[n]=t,t},_={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},x=t(6743),S=t(9957),k=x.call(Function.call,Array.prototype.concat),O=x.call(Function.apply,Array.prototype.splice),B=x.call(Function.call,String.prototype.replace),T=x.call(Function.call,String.prototype.slice),P=x.call(Function.call,RegExp.prototype.exec),I=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,j=/\\(\\)?/g,z=function(e,n){var t,r=e;if(S(_,r)&&(r="%"+(t=_[r])[0]+"%"),S(E,r)){var o=E[r];if(o===m&&(o=w(r)),void 0===o&&!n)throw new u("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:t,name:r,value:o}}throw new c("intrinsic "+e+" does not exist!")};e.exports=function(e,n){if("string"!=typeof e||0===e.length)throw new u("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof n)throw new u('"allowMissing" argument must be a boolean');if(null===P(/^%?[^%]*%?$/,e))throw new c("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var t=function(e){var n=T(e,0,1),t=T(e,-1);if("%"===n&&"%"!==t)throw new c("invalid intrinsic syntax, expected closing `%`");if("%"===t&&"%"!==n)throw new c("invalid intrinsic syntax, expected opening `%`");var r=[];return B(e,I,(function(e,n,t,o){r[r.length]=t?B(o,j,"$1"):n||e})),r}(e),r=t.length>0?t[0]:"",o=z("%"+r+"%",n),i=o.name,a=o.value,l=!1,s=o.alias;s&&(r=s[0],O(t,k([0,1],s)));for(var f=1,p=!0;f=t.length){var b=d(a,g);a=(p=!!b)&&"get"in b&&!("originalValue"in b.get)?b.get:a[g]}else p=S(a,g),a=a[g];p&&!l&&(E[i]=a)}}return a}},5795:(e,n,t)=>{"use strict";var r=t(453)("%Object.getOwnPropertyDescriptor%",!0);if(r)try{r([],"length")}catch(e){r=null}e.exports=r},9790:e=>{"use strict";var n="undefined"!=typeof BigInt&&BigInt;e.exports=function(){return"function"==typeof n&&"function"==typeof BigInt&&"bigint"==typeof n(42)&&"bigint"==typeof BigInt(42)}},592:(e,n,t)=>{"use strict";var r=t(3036),o=function(){return!!r};o.hasArrayLengthDefineBug=function(){if(!r)return null;try{return 1!==r([],"length",{value:1}).length}catch(e){return!0}},e.exports=o},24:e=>{"use strict";var n={__proto__:null,foo:{}},t=Object;e.exports=function(){return{__proto__:n}.foo===n.foo&&!(n instanceof t)}},4039:(e,n,t)=>{"use strict";var r="undefined"!=typeof Symbol&&Symbol,o=t(1333);e.exports=function(){return"function"==typeof r&&("function"==typeof Symbol&&("symbol"==typeof r("foo")&&("symbol"==typeof Symbol("bar")&&o())))}},1333:e=>{"use strict";e.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},n=Symbol("test"),t=Object(n);if("string"==typeof n)return!1;if("[object Symbol]"!==Object.prototype.toString.call(n))return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;for(n in e[n]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var r=Object.getOwnPropertySymbols(e);if(1!==r.length||r[0]!==n)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,n))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(e,n);if(42!==o.value||!0!==o.enumerable)return!1}return!0}},9092:(e,n,t)=>{"use strict";var r=t(1333);e.exports=function(){return r()&&!!Symbol.toStringTag}},9957:(e,n,t)=>{"use strict";var r=Function.prototype.call,o=Object.prototype.hasOwnProperty,i=t(6743);e.exports=i.call(r,o)},63:(e,n,t)=>{"use strict";var r=t(9957),o=t(920)(),i=t(9675),a={assert:function(e,n){if(!e||"object"!=typeof e&&"function"!=typeof e)throw new i("`O` is not an object");if("string"!=typeof n)throw new i("`slot` must be a string");if(o.assert(e),!a.has(e,n))throw new i("`"+n+"` is not present on `O`")},get:function(e,n){if(!e||"object"!=typeof e&&"function"!=typeof e)throw new i("`O` is not an object");if("string"!=typeof n)throw new i("`slot` must be a string");var t=o.get(e);return t&&t["$"+n]},has:function(e,n){if(!e||"object"!=typeof e&&"function"!=typeof e)throw new i("`O` is not an object");if("string"!=typeof n)throw new i("`slot` must be a string");var t=o.get(e);return!!t&&r(t,"$"+n)},set:function(e,n,t){if(!e||"object"!=typeof e&&"function"!=typeof e)throw new i("`O` is not an object");if("string"!=typeof n)throw new i("`slot` must be a string");var r=o.get(e);r||(r={},o.set(e,r)),r["$"+n]=t}};Object.freeze&&Object.freeze(a),e.exports=a},7244:(e,n,t)=>{"use strict";var r=t(9092)(),o=t(8075)("Object.prototype.toString"),i=function(e){return!(r&&e&&"object"==typeof e&&Symbol.toStringTag in e)&&"[object Arguments]"===o(e)},a=function(e){return!!i(e)||null!==e&&"object"==typeof e&&"number"==typeof e.length&&e.length>=0&&"[object Array]"!==o(e)&&"[object Function]"===o(e.callee)},l=function(){return i(arguments)}();i.isLegacyArguments=a,e.exports=l?i:a},4670:(e,n,t)=>{"use strict";var r=t(487),o=t(8075),i=t(453)("%ArrayBuffer%",!0),a=o("ArrayBuffer.prototype.byteLength",!0),l=o("Object.prototype.toString"),c=!!i&&!a&&new i(0).slice,u=!!c&&r(c);e.exports=a||u?function(e){if(!e||"object"!=typeof e)return!1;try{return a?a(e):u(e,0),!0}catch(e){return!1}}:i?function(e){return"[object ArrayBuffer]"===l(e)}:function(e){return!1}},9803:(e,n,t)=>{"use strict";if(t(9790)()){var r=BigInt.prototype.valueOf;e.exports=function(e){return null!=e&&"boolean"!=typeof e&&"string"!=typeof e&&"number"!=typeof e&&"symbol"!=typeof e&&"function"!=typeof e&&("bigint"==typeof e||function(e){try{return r.call(e),!0}catch(e){}return!1}(e))}}else e.exports=function(e){return!1}},5128:(e,n,t)=>{"use strict";var r=t(8075),o=r("Boolean.prototype.toString"),i=r("Object.prototype.toString"),a=t(9092)();e.exports=function(e){return"boolean"==typeof e||null!==e&&"object"==typeof e&&(a&&Symbol.toStringTag in e?function(e){try{return o(e),!0}catch(e){return!1}}(e):"[object Boolean]"===i(e))}},9600:e=>{"use strict";var n,t,r=Function.prototype.toString,o="object"==typeof Reflect&&null!==Reflect&&Reflect.apply;if("function"==typeof o&&"function"==typeof Object.defineProperty)try{n=Object.defineProperty({},"length",{get:function(){throw t}}),t={},o((function(){throw 42}),null,n)}catch(e){e!==t&&(o=null)}else o=null;var i=/^\s*class\b/,a=function(e){try{var n=r.call(e);return i.test(n)}catch(e){return!1}},l=function(e){try{return!a(e)&&(r.call(e),!0)}catch(e){return!1}},c=Object.prototype.toString,u="function"==typeof Symbol&&!!Symbol.toStringTag,s=!(0 in[,]),f=function(){return!1};if("object"==typeof document){var p=document.all;c.call(p)===c.call(document.all)&&(f=function(e){if((s||!e)&&(void 0===e||"object"==typeof e))try{var n=c.call(e);return("[object HTMLAllCollection]"===n||"[object HTML document.all class]"===n||"[object HTMLCollection]"===n||"[object Object]"===n)&&null==e("")}catch(e){}return!1})}e.exports=o?function(e){if(f(e))return!0;if(!e)return!1;if("function"!=typeof e&&"object"!=typeof e)return!1;try{o(e,null,n)}catch(e){if(e!==t)return!1}return!a(e)&&l(e)}:function(e){if(f(e))return!0;if(!e)return!1;if("function"!=typeof e&&"object"!=typeof e)return!1;if(u)return l(e);if(a(e))return!1;var n=c.call(e);return!("[object Function]"!==n&&"[object GeneratorFunction]"!==n&&!/^\[object HTML/.test(n))&&l(e)}},2120:(e,n,t)=>{"use strict";var r=Date.prototype.getDay,o=Object.prototype.toString,i=t(9092)();e.exports=function(e){return"object"==typeof e&&null!==e&&(i?function(e){try{return r.call(e),!0}catch(e){return!1}}(e):"[object Date]"===o.call(e))}},1421:e=>{"use strict";var n,t="function"==typeof Map&&Map.prototype?Map:null,r="function"==typeof Set&&Set.prototype?Set:null;t||(n=function(e){return!1});var o=t?Map.prototype.has:null,i=r?Set.prototype.has:null;n||o||(n=function(e){return!1}),e.exports=n||function(e){if(!e||"object"!=typeof e)return!1;try{if(o.call(e),i)try{i.call(e)}catch(e){return!0}return e instanceof t}catch(e){}return!1}},1703:(e,n,t)=>{"use strict";var r=Number.prototype.toString,o=Object.prototype.toString,i=t(9092)();e.exports=function(e){return"number"==typeof e||"object"==typeof e&&(i?function(e){try{return r.call(e),!0}catch(e){return!1}}(e):"[object Number]"===o.call(e))}},4035:(e,n,t)=>{"use strict";var r,o,i,a,l=t(8075),c=t(9092)();if(c){r=l("Object.prototype.hasOwnProperty"),o=l("RegExp.prototype.exec"),i={};var u=function(){throw i};a={toString:u,valueOf:u},"symbol"==typeof Symbol.toPrimitive&&(a[Symbol.toPrimitive]=u)}var s=l("Object.prototype.toString"),f=Object.getOwnPropertyDescriptor;e.exports=c?function(e){if(!e||"object"!=typeof e)return!1;var n=f(e,"lastIndex");if(!(n&&r(n,"value")))return!1;try{o(e,a)}catch(e){return e===i}}:function(e){return!(!e||"object"!=typeof e&&"function"!=typeof e)&&"[object RegExp]"===s(e)}},256:e=>{"use strict";var n,t="function"==typeof Map&&Map.prototype?Map:null,r="function"==typeof Set&&Set.prototype?Set:null;r||(n=function(e){return!1});var o=t?Map.prototype.has:null,i=r?Set.prototype.has:null;n||i||(n=function(e){return!1}),e.exports=n||function(e){if(!e||"object"!=typeof e)return!1;try{if(i.call(e),o)try{o.call(e)}catch(e){return!0}return e instanceof r}catch(e){}return!1}},7070:(e,n,t)=>{"use strict";var r=t(8075)("SharedArrayBuffer.prototype.byteLength",!0);e.exports=r?function(e){if(!e||"object"!=typeof e)return!1;try{return r(e),!0}catch(e){return!1}}:function(e){return!1}},4761:(e,n,t)=>{"use strict";var r=String.prototype.valueOf,o=Object.prototype.toString,i=t(9092)();e.exports=function(e){return"string"==typeof e||"object"==typeof e&&(i?function(e){try{return r.call(e),!0}catch(e){return!1}}(e):"[object String]"===o.call(e))}},3612:(e,n,t)=>{"use strict";var r=Object.prototype.toString;if(t(4039)()){var o=Symbol.prototype.toString,i=/^Symbol\(.*\)$/;e.exports=function(e){if("symbol"==typeof e)return!0;if("[object Symbol]"!==r.call(e))return!1;try{return function(e){return"symbol"==typeof e.valueOf()&&i.test(o.call(e))}(e)}catch(e){return!1}}}else e.exports=function(e){return!1}},7842:e=>{"use strict";var n,t="function"==typeof WeakMap&&WeakMap.prototype?WeakMap:null,r="function"==typeof WeakSet&&WeakSet.prototype?WeakSet:null;t||(n=function(e){return!1});var o=t?t.prototype.has:null,i=r?r.prototype.has:null;n||o||(n=function(e){return!1}),e.exports=n||function(e){if(!e||"object"!=typeof e)return!1;try{if(o.call(e,o),i)try{i.call(e,i)}catch(e){return!0}return e instanceof t}catch(e){}return!1}},2648:(e,n,t)=>{"use strict";var r=t(453),o=t(8075),i=r("%WeakSet%",!0),a=o("WeakSet.prototype.has",!0);if(a){var l=o("WeakMap.prototype.has",!0);e.exports=function(e){if(!e||"object"!=typeof e)return!1;try{if(a(e,a),l)try{l(e,l)}catch(e){return!0}return e instanceof i}catch(e){}return!1}}else e.exports=function(e){return!1}},4634:e=>{var n={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==n.call(e)}},2543:function(e,n,t){var r; +/** + * @license + * Lodash + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */e=t.nmd(e),function(){var o,i="Expected a function",a="__lodash_hash_undefined__",l="__lodash_placeholder__",c=16,u=32,s=64,f=128,p=256,d=1/0,g=9007199254740991,h=NaN,v=4294967295,b=[["ary",f],["bind",1],["bindKey",2],["curry",8],["curryRight",c],["flip",512],["partial",u],["partialRight",s],["rearg",p]],A="[object Arguments]",m="[object Array]",y="[object Boolean]",E="[object Date]",C="[object Error]",w="[object Function]",_="[object GeneratorFunction]",x="[object Map]",S="[object Number]",k="[object Object]",O="[object Promise]",B="[object RegExp]",T="[object Set]",P="[object String]",I="[object Symbol]",j="[object WeakMap]",z="[object ArrayBuffer]",D="[object DataView]",R="[object Float32Array]",M="[object Float64Array]",N="[object Int8Array]",F="[object Int16Array]",L="[object Int32Array]",U="[object Uint8Array]",H="[object Uint8ClampedArray]",W="[object Uint16Array]",G="[object Uint32Array]",Y=/\b__p \+= '';/g,q=/\b(__p \+=) '' \+/g,V=/(__e\(.*?\)|\b__t\)) \+\n'';/g,$=/&(?:amp|lt|gt|quot|#39);/g,K=/[&<>"']/g,Q=RegExp($.source),X=RegExp(K.source),Z=/<%-([\s\S]+?)%>/g,J=/<%([\s\S]+?)%>/g,ee=/<%=([\s\S]+?)%>/g,ne=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,te=/^\w*$/,re=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,oe=/[\\^$.*+?()[\]{}|]/g,ie=RegExp(oe.source),ae=/^\s+/,le=/\s/,ce=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,ue=/\{\n\/\* \[wrapped with (.+)\] \*/,se=/,? & /,fe=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,pe=/[()=,{}\[\]\/\s]/,de=/\\(\\)?/g,ge=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,he=/\w*$/,ve=/^[-+]0x[0-9a-f]+$/i,be=/^0b[01]+$/i,Ae=/^\[object .+?Constructor\]$/,me=/^0o[0-7]+$/i,ye=/^(?:0|[1-9]\d*)$/,Ee=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Ce=/($^)/,we=/['\n\r\u2028\u2029\\]/g,_e="\\ud800-\\udfff",xe="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",Se="\\u2700-\\u27bf",ke="a-z\\xdf-\\xf6\\xf8-\\xff",Oe="A-Z\\xc0-\\xd6\\xd8-\\xde",Be="\\ufe0e\\ufe0f",Te="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Pe="['’]",Ie="["+_e+"]",je="["+Te+"]",ze="["+xe+"]",De="\\d+",Re="["+Se+"]",Me="["+ke+"]",Ne="[^"+_e+Te+De+Se+ke+Oe+"]",Fe="\\ud83c[\\udffb-\\udfff]",Le="[^"+_e+"]",Ue="(?:\\ud83c[\\udde6-\\uddff]){2}",He="[\\ud800-\\udbff][\\udc00-\\udfff]",We="["+Oe+"]",Ge="\\u200d",Ye="(?:"+Me+"|"+Ne+")",qe="(?:"+We+"|"+Ne+")",Ve="(?:['’](?:d|ll|m|re|s|t|ve))?",$e="(?:['’](?:D|LL|M|RE|S|T|VE))?",Ke="(?:"+ze+"|"+Fe+")"+"?",Qe="["+Be+"]?",Xe=Qe+Ke+("(?:"+Ge+"(?:"+[Le,Ue,He].join("|")+")"+Qe+Ke+")*"),Ze="(?:"+[Re,Ue,He].join("|")+")"+Xe,Je="(?:"+[Le+ze+"?",ze,Ue,He,Ie].join("|")+")",en=RegExp(Pe,"g"),nn=RegExp(ze,"g"),tn=RegExp(Fe+"(?="+Fe+")|"+Je+Xe,"g"),rn=RegExp([We+"?"+Me+"+"+Ve+"(?="+[je,We,"$"].join("|")+")",qe+"+"+$e+"(?="+[je,We+Ye,"$"].join("|")+")",We+"?"+Ye+"+"+Ve,We+"+"+$e,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",De,Ze].join("|"),"g"),on=RegExp("["+Ge+_e+xe+Be+"]"),an=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,ln=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],cn=-1,un={};un[R]=un[M]=un[N]=un[F]=un[L]=un[U]=un[H]=un[W]=un[G]=!0,un[A]=un[m]=un[z]=un[y]=un[D]=un[E]=un[C]=un[w]=un[x]=un[S]=un[k]=un[B]=un[T]=un[P]=un[j]=!1;var sn={};sn[A]=sn[m]=sn[z]=sn[D]=sn[y]=sn[E]=sn[R]=sn[M]=sn[N]=sn[F]=sn[L]=sn[x]=sn[S]=sn[k]=sn[B]=sn[T]=sn[P]=sn[I]=sn[U]=sn[H]=sn[W]=sn[G]=!0,sn[C]=sn[w]=sn[j]=!1;var fn={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},pn=parseFloat,dn=parseInt,gn="object"==typeof t.g&&t.g&&t.g.Object===Object&&t.g,hn="object"==typeof self&&self&&self.Object===Object&&self,vn=gn||hn||Function("return this")(),bn=n&&!n.nodeType&&n,An=bn&&e&&!e.nodeType&&e,mn=An&&An.exports===bn,yn=mn&&gn.process,En=function(){try{var e=An&&An.require&&An.require("util").types;return e||yn&&yn.binding&&yn.binding("util")}catch(e){}}(),Cn=En&&En.isArrayBuffer,wn=En&&En.isDate,_n=En&&En.isMap,xn=En&&En.isRegExp,Sn=En&&En.isSet,kn=En&&En.isTypedArray;function On(e,n,t){switch(t.length){case 0:return e.call(n);case 1:return e.call(n,t[0]);case 2:return e.call(n,t[0],t[1]);case 3:return e.call(n,t[0],t[1],t[2])}return e.apply(n,t)}function Bn(e,n,t,r){for(var o=-1,i=null==e?0:e.length;++o-1}function Dn(e,n,t){for(var r=-1,o=null==e?0:e.length;++r-1;);return t}function ot(e,n){for(var t=e.length;t--&&Gn(n,e[t],0)>-1;);return t}var it=Kn({À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"}),at=Kn({"&":"&","<":"<",">":">",'"':""","'":"'"});function lt(e){return"\\"+fn[e]}function ct(e){return on.test(e)}function ut(e){var n=-1,t=Array(e.size);return e.forEach((function(e,r){t[++n]=[r,e]})),t}function st(e,n){return function(t){return e(n(t))}}function ft(e,n){for(var t=-1,r=e.length,o=0,i=[];++t",""":'"',"'":"'"});var At=function e(n){var t,r=(n=null==n?vn:At.defaults(vn.Object(),n,At.pick(vn,ln))).Array,le=n.Date,_e=n.Error,xe=n.Function,Se=n.Math,ke=n.Object,Oe=n.RegExp,Be=n.String,Te=n.TypeError,Pe=r.prototype,Ie=xe.prototype,je=ke.prototype,ze=n["__core-js_shared__"],De=Ie.toString,Re=je.hasOwnProperty,Me=0,Ne=(t=/[^.]+$/.exec(ze&&ze.keys&&ze.keys.IE_PROTO||""))?"Symbol(src)_1."+t:"",Fe=je.toString,Le=De.call(ke),Ue=vn._,He=Oe("^"+De.call(Re).replace(oe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),We=mn?n.Buffer:o,Ge=n.Symbol,Ye=n.Uint8Array,qe=We?We.allocUnsafe:o,Ve=st(ke.getPrototypeOf,ke),$e=ke.create,Ke=je.propertyIsEnumerable,Qe=Pe.splice,Xe=Ge?Ge.isConcatSpreadable:o,Ze=Ge?Ge.iterator:o,Je=Ge?Ge.toStringTag:o,tn=function(){try{var e=di(ke,"defineProperty");return e({},"",{}),e}catch(e){}}(),on=n.clearTimeout!==vn.clearTimeout&&n.clearTimeout,fn=le&&le.now!==vn.Date.now&&le.now,gn=n.setTimeout!==vn.setTimeout&&n.setTimeout,hn=Se.ceil,bn=Se.floor,An=ke.getOwnPropertySymbols,yn=We?We.isBuffer:o,En=n.isFinite,Un=Pe.join,Kn=st(ke.keys,ke),mt=Se.max,yt=Se.min,Et=le.now,Ct=n.parseInt,wt=Se.random,_t=Pe.reverse,xt=di(n,"DataView"),St=di(n,"Map"),kt=di(n,"Promise"),Ot=di(n,"Set"),Bt=di(n,"WeakMap"),Tt=di(ke,"create"),Pt=Bt&&new Bt,It={},jt=Fi(xt),zt=Fi(St),Dt=Fi(kt),Rt=Fi(Ot),Mt=Fi(Bt),Nt=Ge?Ge.prototype:o,Ft=Nt?Nt.valueOf:o,Lt=Nt?Nt.toString:o;function Ut(e){if(tl(e)&&!Ya(e)&&!(e instanceof Yt)){if(e instanceof Gt)return e;if(Re.call(e,"__wrapped__"))return Li(e)}return new Gt(e)}var Ht=function(){function e(){}return function(n){if(!nl(n))return{};if($e)return $e(n);e.prototype=n;var t=new e;return e.prototype=o,t}}();function Wt(){}function Gt(e,n){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!n,this.__index__=0,this.__values__=o}function Yt(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=v,this.__views__=[]}function qt(e){var n=-1,t=null==e?0:e.length;for(this.clear();++n=n?e:n)),e}function ur(e,n,t,r,i,a){var l,c=1&n,u=2&n,s=4&n;if(t&&(l=i?t(e,r,i,a):t(e)),l!==o)return l;if(!nl(e))return e;var f=Ya(e);if(f){if(l=function(e){var n=e.length,t=new e.constructor(n);n&&"string"==typeof e[0]&&Re.call(e,"index")&&(t.index=e.index,t.input=e.input);return t}(e),!c)return Po(e,l)}else{var p=vi(e),d=p==w||p==_;if(Ka(e))return xo(e,c);if(p==k||p==A||d&&!i){if(l=u||d?{}:Ai(e),!c)return u?function(e,n){return Io(e,hi(e),n)}(e,function(e,n){return e&&Io(n,jl(n),e)}(l,e)):function(e,n){return Io(e,gi(e),n)}(e,ir(l,e))}else{if(!sn[p])return i?e:{};l=function(e,n,t){var r=e.constructor;switch(n){case z:return So(e);case y:case E:return new r(+e);case D:return function(e,n){var t=n?So(e.buffer):e.buffer;return new e.constructor(t,e.byteOffset,e.byteLength)}(e,t);case R:case M:case N:case F:case L:case U:case H:case W:case G:return ko(e,t);case x:return new r;case S:case P:return new r(e);case B:return function(e){var n=new e.constructor(e.source,he.exec(e));return n.lastIndex=e.lastIndex,n}(e);case T:return new r;case I:return o=e,Ft?ke(Ft.call(o)):{}}var o}(e,p,c)}}a||(a=new Qt);var g=a.get(e);if(g)return g;a.set(e,l),ll(e)?e.forEach((function(r){l.add(ur(r,n,t,r,e,a))})):rl(e)&&e.forEach((function(r,o){l.set(o,ur(r,n,t,o,e,a))}));var h=f?o:(s?u?ai:ii:u?jl:Il)(e);return Tn(h||e,(function(r,o){h&&(r=e[o=r]),tr(l,o,ur(r,n,t,o,e,a))})),l}function sr(e,n,t){var r=t.length;if(null==e)return!r;for(e=ke(e);r--;){var i=t[r],a=n[i],l=e[i];if(l===o&&!(i in e)||!a(l))return!1}return!0}function fr(e,n,t){if("function"!=typeof e)throw new Te(i);return Ii((function(){e.apply(o,t)}),n)}function pr(e,n,t,r){var o=-1,i=zn,a=!0,l=e.length,c=[],u=n.length;if(!l)return c;t&&(n=Rn(n,et(t))),r?(i=Dn,a=!1):n.length>=200&&(i=tt,a=!1,n=new Kt(n));e:for(;++o-1},Vt.prototype.set=function(e,n){var t=this.__data__,r=rr(t,e);return r<0?(++this.size,t.push([e,n])):t[r][1]=n,this},$t.prototype.clear=function(){this.size=0,this.__data__={hash:new qt,map:new(St||Vt),string:new qt}},$t.prototype.delete=function(e){var n=fi(this,e).delete(e);return this.size-=n?1:0,n},$t.prototype.get=function(e){return fi(this,e).get(e)},$t.prototype.has=function(e){return fi(this,e).has(e)},$t.prototype.set=function(e,n){var t=fi(this,e),r=t.size;return t.set(e,n),this.size+=t.size==r?0:1,this},Kt.prototype.add=Kt.prototype.push=function(e){return this.__data__.set(e,a),this},Kt.prototype.has=function(e){return this.__data__.has(e)},Qt.prototype.clear=function(){this.__data__=new Vt,this.size=0},Qt.prototype.delete=function(e){var n=this.__data__,t=n.delete(e);return this.size=n.size,t},Qt.prototype.get=function(e){return this.__data__.get(e)},Qt.prototype.has=function(e){return this.__data__.has(e)},Qt.prototype.set=function(e,n){var t=this.__data__;if(t instanceof Vt){var r=t.__data__;if(!St||r.length<199)return r.push([e,n]),this.size=++t.size,this;t=this.__data__=new $t(r)}return t.set(e,n),this.size=t.size,this};var dr=Do(Er),gr=Do(Cr,!0);function hr(e,n){var t=!0;return dr(e,(function(e,r,o){return t=!!n(e,r,o)})),t}function vr(e,n,t){for(var r=-1,i=e.length;++r0&&t(l)?n>1?Ar(l,n-1,t,r,o):Mn(o,l):r||(o[o.length]=l)}return o}var mr=Ro(),yr=Ro(!0);function Er(e,n){return e&&mr(e,n,Il)}function Cr(e,n){return e&&yr(e,n,Il)}function wr(e,n){return jn(n,(function(n){return Za(e[n])}))}function _r(e,n){for(var t=0,r=(n=Eo(n,e)).length;null!=e&&tn}function Or(e,n){return null!=e&&Re.call(e,n)}function Br(e,n){return null!=e&&n in ke(e)}function Tr(e,n,t){for(var i=t?Dn:zn,a=e[0].length,l=e.length,c=l,u=r(l),s=1/0,f=[];c--;){var p=e[c];c&&n&&(p=Rn(p,et(n))),s=yt(p.length,s),u[c]=!t&&(n||a>=120&&p.length>=120)?new Kt(c&&p):o}p=e[0];var d=-1,g=u[0];e:for(;++d=l?c:c*("desc"==t[r]?-1:1)}return e.index-n.index}(e,n,t)}))}function qr(e,n,t){for(var r=-1,o=n.length,i={};++r-1;)l!==e&&Qe.call(l,c,1),Qe.call(e,c,1);return e}function $r(e,n){for(var t=e?n.length:0,r=t-1;t--;){var o=n[t];if(t==r||o!==i){var i=o;yi(o)?Qe.call(e,o,1):po(e,o)}}return e}function Kr(e,n){return e+bn(wt()*(n-e+1))}function Qr(e,n){var t="";if(!e||n<1||n>g)return t;do{n%2&&(t+=e),(n=bn(n/2))&&(e+=e)}while(n);return t}function Xr(e,n){return ji(Oi(e,n,oc),e+"")}function Zr(e){return Zt(Ul(e))}function Jr(e,n){var t=Ul(e);return Ri(t,cr(n,0,t.length))}function eo(e,n,t,r){if(!nl(e))return e;for(var i=-1,a=(n=Eo(n,e)).length,l=a-1,c=e;null!=c&&++ii?0:i+n),(t=t>i?i:t)<0&&(t+=i),i=n>t?0:t-n>>>0,n>>>=0;for(var a=r(i);++o>>1,a=e[i];null!==a&&!ul(a)&&(t?a<=n:a=200){var u=n?null:Xo(e);if(u)return pt(u);a=!1,o=tt,c=new Kt}else c=n?[]:l;e:for(;++r=r?e:oo(e,n,t)}var _o=on||function(e){return vn.clearTimeout(e)};function xo(e,n){if(n)return e.slice();var t=e.length,r=qe?qe(t):new e.constructor(t);return e.copy(r),r}function So(e){var n=new e.constructor(e.byteLength);return new Ye(n).set(new Ye(e)),n}function ko(e,n){var t=n?So(e.buffer):e.buffer;return new e.constructor(t,e.byteOffset,e.length)}function Oo(e,n){if(e!==n){var t=e!==o,r=null===e,i=e==e,a=ul(e),l=n!==o,c=null===n,u=n==n,s=ul(n);if(!c&&!s&&!a&&e>n||a&&l&&u&&!c&&!s||r&&l&&u||!t&&u||!i)return 1;if(!r&&!a&&!s&&e1?t[i-1]:o,l=i>2?t[2]:o;for(a=e.length>3&&"function"==typeof a?(i--,a):o,l&&Ei(t[0],t[1],l)&&(a=i<3?o:a,i=1),n=ke(n);++r-1?i[a?n[l]:l]:o}}function Uo(e){return oi((function(n){var t=n.length,r=t,a=Gt.prototype.thru;for(e&&n.reverse();r--;){var l=n[r];if("function"!=typeof l)throw new Te(i);if(a&&!c&&"wrapper"==ci(l))var c=new Gt([],!0)}for(r=c?r:t;++r1&&y.reverse(),d&&sc))return!1;var s=a.get(e),f=a.get(n);if(s&&f)return s==n&&f==e;var p=-1,d=!0,g=2&t?new Kt:o;for(a.set(e,n),a.set(n,e);++p-1&&e%1==0&&e1?"& ":"")+n[r],n=n.join(t>2?", ":" "),e.replace(ce,"{\n/* [wrapped with "+n+"] */\n")}(r,function(e,n){return Tn(b,(function(t){var r="_."+t[0];n&t[1]&&!zn(e,r)&&e.push(r)})),e.sort()}(function(e){var n=e.match(ue);return n?n[1].split(se):[]}(r),t)))}function Di(e){var n=0,t=0;return function(){var r=Et(),i=16-(r-t);if(t=r,i>0){if(++n>=800)return arguments[0]}else n=0;return e.apply(o,arguments)}}function Ri(e,n){var t=-1,r=e.length,i=r-1;for(n=n===o?r:n;++t1?e[n-1]:o;return t="function"==typeof t?(e.pop(),t):o,aa(e,t)}));function da(e){var n=Ut(e);return n.__chain__=!0,n}function ga(e,n){return n(e)}var ha=oi((function(e){var n=e.length,t=n?e[0]:0,r=this.__wrapped__,i=function(n){return lr(n,e)};return!(n>1||this.__actions__.length)&&r instanceof Yt&&yi(t)?((r=r.slice(t,+t+(n?1:0))).__actions__.push({func:ga,args:[i],thisArg:o}),new Gt(r,this.__chain__).thru((function(e){return n&&!e.length&&e.push(o),e}))):this.thru(i)}));var va=jo((function(e,n,t){Re.call(e,t)?++e[t]:ar(e,t,1)}));var ba=Lo(Gi),Aa=Lo(Yi);function ma(e,n){return(Ya(e)?Tn:dr)(e,si(n,3))}function ya(e,n){return(Ya(e)?Pn:gr)(e,si(n,3))}var Ea=jo((function(e,n,t){Re.call(e,t)?e[t].push(n):ar(e,t,[n])}));var Ca=Xr((function(e,n,t){var o=-1,i="function"==typeof n,a=Va(e)?r(e.length):[];return dr(e,(function(e){a[++o]=i?On(n,e,t):Pr(e,n,t)})),a})),wa=jo((function(e,n,t){ar(e,t,n)}));function _a(e,n){return(Ya(e)?Rn:Lr)(e,si(n,3))}var xa=jo((function(e,n,t){e[t?0:1].push(n)}),(function(){return[[],[]]}));var Sa=Xr((function(e,n){if(null==e)return[];var t=n.length;return t>1&&Ei(e,n[0],n[1])?n=[]:t>2&&Ei(n[0],n[1],n[2])&&(n=[n[0]]),Yr(e,Ar(n,1),[])})),ka=fn||function(){return vn.Date.now()};function Oa(e,n,t){return n=t?o:n,n=e&&null==n?e.length:n,Jo(e,f,o,o,o,o,n)}function Ba(e,n){var t;if("function"!=typeof n)throw new Te(i);return e=hl(e),function(){return--e>0&&(t=n.apply(this,arguments)),e<=1&&(n=o),t}}var Ta=Xr((function(e,n,t){var r=1;if(t.length){var o=ft(t,ui(Ta));r|=u}return Jo(e,r,n,t,o)})),Pa=Xr((function(e,n,t){var r=3;if(t.length){var o=ft(t,ui(Pa));r|=u}return Jo(n,r,e,t,o)}));function Ia(e,n,t){var r,a,l,c,u,s,f=0,p=!1,d=!1,g=!0;if("function"!=typeof e)throw new Te(i);function h(n){var t=r,i=a;return r=a=o,f=n,c=e.apply(i,t)}function v(e){var t=e-s;return s===o||t>=n||t<0||d&&e-f>=l}function b(){var e=ka();if(v(e))return A(e);u=Ii(b,function(e){var t=n-(e-s);return d?yt(t,l-(e-f)):t}(e))}function A(e){return u=o,g&&r?h(e):(r=a=o,c)}function m(){var e=ka(),t=v(e);if(r=arguments,a=this,s=e,t){if(u===o)return function(e){return f=e,u=Ii(b,n),p?h(e):c}(s);if(d)return _o(u),u=Ii(b,n),h(s)}return u===o&&(u=Ii(b,n)),c}return n=bl(n)||0,nl(t)&&(p=!!t.leading,l=(d="maxWait"in t)?mt(bl(t.maxWait)||0,n):l,g="trailing"in t?!!t.trailing:g),m.cancel=function(){u!==o&&_o(u),f=0,r=s=a=u=o},m.flush=function(){return u===o?c:A(ka())},m}var ja=Xr((function(e,n){return fr(e,1,n)})),za=Xr((function(e,n,t){return fr(e,bl(n)||0,t)}));function Da(e,n){if("function"!=typeof e||null!=n&&"function"!=typeof n)throw new Te(i);var t=function(){var r=arguments,o=n?n.apply(this,r):r[0],i=t.cache;if(i.has(o))return i.get(o);var a=e.apply(this,r);return t.cache=i.set(o,a)||i,a};return t.cache=new(Da.Cache||$t),t}function Ra(e){if("function"!=typeof e)throw new Te(i);return function(){var n=arguments;switch(n.length){case 0:return!e.call(this);case 1:return!e.call(this,n[0]);case 2:return!e.call(this,n[0],n[1]);case 3:return!e.call(this,n[0],n[1],n[2])}return!e.apply(this,n)}}Da.Cache=$t;var Ma=Co((function(e,n){var t=(n=1==n.length&&Ya(n[0])?Rn(n[0],et(si())):Rn(Ar(n,1),et(si()))).length;return Xr((function(r){for(var o=-1,i=yt(r.length,t);++o=n})),Ga=Ir(function(){return arguments}())?Ir:function(e){return tl(e)&&Re.call(e,"callee")&&!Ke.call(e,"callee")},Ya=r.isArray,qa=Cn?et(Cn):function(e){return tl(e)&&Sr(e)==z};function Va(e){return null!=e&&el(e.length)&&!Za(e)}function $a(e){return tl(e)&&Va(e)}var Ka=yn||bc,Qa=wn?et(wn):function(e){return tl(e)&&Sr(e)==E};function Xa(e){if(!tl(e))return!1;var n=Sr(e);return n==C||"[object DOMException]"==n||"string"==typeof e.message&&"string"==typeof e.name&&!il(e)}function Za(e){if(!nl(e))return!1;var n=Sr(e);return n==w||n==_||"[object AsyncFunction]"==n||"[object Proxy]"==n}function Ja(e){return"number"==typeof e&&e==hl(e)}function el(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=g}function nl(e){var n=typeof e;return null!=e&&("object"==n||"function"==n)}function tl(e){return null!=e&&"object"==typeof e}var rl=_n?et(_n):function(e){return tl(e)&&vi(e)==x};function ol(e){return"number"==typeof e||tl(e)&&Sr(e)==S}function il(e){if(!tl(e)||Sr(e)!=k)return!1;var n=Ve(e);if(null===n)return!0;var t=Re.call(n,"constructor")&&n.constructor;return"function"==typeof t&&t instanceof t&&De.call(t)==Le}var al=xn?et(xn):function(e){return tl(e)&&Sr(e)==B};var ll=Sn?et(Sn):function(e){return tl(e)&&vi(e)==T};function cl(e){return"string"==typeof e||!Ya(e)&&tl(e)&&Sr(e)==P}function ul(e){return"symbol"==typeof e||tl(e)&&Sr(e)==I}var sl=kn?et(kn):function(e){return tl(e)&&el(e.length)&&!!un[Sr(e)]};var fl=$o(Fr),pl=$o((function(e,n){return e<=n}));function dl(e){if(!e)return[];if(Va(e))return cl(e)?ht(e):Po(e);if(Ze&&e[Ze])return function(e){for(var n,t=[];!(n=e.next()).done;)t.push(n.value);return t}(e[Ze]());var n=vi(e);return(n==x?ut:n==T?pt:Ul)(e)}function gl(e){return e?(e=bl(e))===d||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function hl(e){var n=gl(e),t=n%1;return n==n?t?n-t:n:0}function vl(e){return e?cr(hl(e),0,v):0}function bl(e){if("number"==typeof e)return e;if(ul(e))return h;if(nl(e)){var n="function"==typeof e.valueOf?e.valueOf():e;e=nl(n)?n+"":n}if("string"!=typeof e)return 0===e?e:+e;e=Jn(e);var t=be.test(e);return t||me.test(e)?dn(e.slice(2),t?2:8):ve.test(e)?h:+e}function Al(e){return Io(e,jl(e))}function ml(e){return null==e?"":so(e)}var yl=zo((function(e,n){if(xi(n)||Va(n))Io(n,Il(n),e);else for(var t in n)Re.call(n,t)&&tr(e,t,n[t])})),El=zo((function(e,n){Io(n,jl(n),e)})),Cl=zo((function(e,n,t,r){Io(n,jl(n),e,r)})),wl=zo((function(e,n,t,r){Io(n,Il(n),e,r)})),_l=oi(lr);var xl=Xr((function(e,n){e=ke(e);var t=-1,r=n.length,i=r>2?n[2]:o;for(i&&Ei(n[0],n[1],i)&&(r=1);++t1),n})),Io(e,ai(e),t),r&&(t=ur(t,7,ti));for(var o=n.length;o--;)po(t,n[o]);return t}));var Ml=oi((function(e,n){return null==e?{}:function(e,n){return qr(e,n,(function(n,t){return Ol(e,t)}))}(e,n)}));function Nl(e,n){if(null==e)return{};var t=Rn(ai(e),(function(e){return[e]}));return n=si(n),qr(e,t,(function(e,t){return n(e,t[0])}))}var Fl=Zo(Il),Ll=Zo(jl);function Ul(e){return null==e?[]:nt(e,Il(e))}var Hl=No((function(e,n,t){return n=n.toLowerCase(),e+(t?Wl(n):n)}));function Wl(e){return Xl(ml(e).toLowerCase())}function Gl(e){return(e=ml(e))&&e.replace(Ee,it).replace(nn,"")}var Yl=No((function(e,n,t){return e+(t?"-":"")+n.toLowerCase()})),ql=No((function(e,n,t){return e+(t?" ":"")+n.toLowerCase()})),Vl=Mo("toLowerCase");var $l=No((function(e,n,t){return e+(t?"_":"")+n.toLowerCase()}));var Kl=No((function(e,n,t){return e+(t?" ":"")+Xl(n)}));var Ql=No((function(e,n,t){return e+(t?" ":"")+n.toUpperCase()})),Xl=Mo("toUpperCase");function Zl(e,n,t){return e=ml(e),(n=t?o:n)===o?function(e){return an.test(e)}(e)?function(e){return e.match(rn)||[]}(e):function(e){return e.match(fe)||[]}(e):e.match(n)||[]}var Jl=Xr((function(e,n){try{return On(e,o,n)}catch(e){return Xa(e)?e:new _e(e)}})),ec=oi((function(e,n){return Tn(n,(function(n){n=Ni(n),ar(e,n,Ta(e[n],e))})),e}));function nc(e){return function(){return e}}var tc=Uo(),rc=Uo(!0);function oc(e){return e}function ic(e){return Rr("function"==typeof e?e:ur(e,1))}var ac=Xr((function(e,n){return function(t){return Pr(t,e,n)}})),lc=Xr((function(e,n){return function(t){return Pr(e,t,n)}}));function cc(e,n,t){var r=Il(n),o=wr(n,r);null!=t||nl(n)&&(o.length||!r.length)||(t=n,n=e,e=this,o=wr(n,Il(n)));var i=!(nl(t)&&"chain"in t&&!t.chain),a=Za(e);return Tn(o,(function(t){var r=n[t];e[t]=r,a&&(e.prototype[t]=function(){var n=this.__chain__;if(i||n){var t=e(this.__wrapped__);return(t.__actions__=Po(this.__actions__)).push({func:r,args:arguments,thisArg:e}),t.__chain__=n,t}return r.apply(e,Mn([this.value()],arguments))})})),e}function uc(){}var sc=Yo(Rn),fc=Yo(In),pc=Yo(Ln);function dc(e){return Ci(e)?$n(Ni(e)):function(e){return function(n){return _r(n,e)}}(e)}var gc=Vo(),hc=Vo(!0);function vc(){return[]}function bc(){return!1}var Ac=Go((function(e,n){return e+n}),0),mc=Qo("ceil"),yc=Go((function(e,n){return e/n}),1),Ec=Qo("floor");var Cc,wc=Go((function(e,n){return e*n}),1),_c=Qo("round"),xc=Go((function(e,n){return e-n}),0);return Ut.after=function(e,n){if("function"!=typeof n)throw new Te(i);return e=hl(e),function(){if(--e<1)return n.apply(this,arguments)}},Ut.ary=Oa,Ut.assign=yl,Ut.assignIn=El,Ut.assignInWith=Cl,Ut.assignWith=wl,Ut.at=_l,Ut.before=Ba,Ut.bind=Ta,Ut.bindAll=ec,Ut.bindKey=Pa,Ut.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return Ya(e)?e:[e]},Ut.chain=da,Ut.chunk=function(e,n,t){n=(t?Ei(e,n,t):n===o)?1:mt(hl(n),0);var i=null==e?0:e.length;if(!i||n<1)return[];for(var a=0,l=0,c=r(hn(i/n));ai?0:i+t),(r=r===o||r>i?i:hl(r))<0&&(r+=i),r=t>r?0:vl(r);t>>0)?(e=ml(e))&&("string"==typeof n||null!=n&&!al(n))&&!(n=so(n))&&ct(e)?wo(ht(e),0,t):e.split(n,t):[]},Ut.spread=function(e,n){if("function"!=typeof e)throw new Te(i);return n=null==n?0:mt(hl(n),0),Xr((function(t){var r=t[n],o=wo(t,0,n);return r&&Mn(o,r),On(e,this,o)}))},Ut.tail=function(e){var n=null==e?0:e.length;return n?oo(e,1,n):[]},Ut.take=function(e,n,t){return e&&e.length?oo(e,0,(n=t||n===o?1:hl(n))<0?0:n):[]},Ut.takeRight=function(e,n,t){var r=null==e?0:e.length;return r?oo(e,(n=r-(n=t||n===o?1:hl(n)))<0?0:n,r):[]},Ut.takeRightWhile=function(e,n){return e&&e.length?ho(e,si(n,3),!1,!0):[]},Ut.takeWhile=function(e,n){return e&&e.length?ho(e,si(n,3)):[]},Ut.tap=function(e,n){return n(e),e},Ut.throttle=function(e,n,t){var r=!0,o=!0;if("function"!=typeof e)throw new Te(i);return nl(t)&&(r="leading"in t?!!t.leading:r,o="trailing"in t?!!t.trailing:o),Ia(e,n,{leading:r,maxWait:n,trailing:o})},Ut.thru=ga,Ut.toArray=dl,Ut.toPairs=Fl,Ut.toPairsIn=Ll,Ut.toPath=function(e){return Ya(e)?Rn(e,Ni):ul(e)?[e]:Po(Mi(ml(e)))},Ut.toPlainObject=Al,Ut.transform=function(e,n,t){var r=Ya(e),o=r||Ka(e)||sl(e);if(n=si(n,4),null==t){var i=e&&e.constructor;t=o?r?new i:[]:nl(e)&&Za(i)?Ht(Ve(e)):{}}return(o?Tn:Er)(e,(function(e,r,o){return n(t,e,r,o)})),t},Ut.unary=function(e){return Oa(e,1)},Ut.union=ta,Ut.unionBy=ra,Ut.unionWith=oa,Ut.uniq=function(e){return e&&e.length?fo(e):[]},Ut.uniqBy=function(e,n){return e&&e.length?fo(e,si(n,2)):[]},Ut.uniqWith=function(e,n){return n="function"==typeof n?n:o,e&&e.length?fo(e,o,n):[]},Ut.unset=function(e,n){return null==e||po(e,n)},Ut.unzip=ia,Ut.unzipWith=aa,Ut.update=function(e,n,t){return null==e?e:go(e,n,yo(t))},Ut.updateWith=function(e,n,t,r){return r="function"==typeof r?r:o,null==e?e:go(e,n,yo(t),r)},Ut.values=Ul,Ut.valuesIn=function(e){return null==e?[]:nt(e,jl(e))},Ut.without=la,Ut.words=Zl,Ut.wrap=function(e,n){return Na(yo(n),e)},Ut.xor=ca,Ut.xorBy=ua,Ut.xorWith=sa,Ut.zip=fa,Ut.zipObject=function(e,n){return Ao(e||[],n||[],tr)},Ut.zipObjectDeep=function(e,n){return Ao(e||[],n||[],eo)},Ut.zipWith=pa,Ut.entries=Fl,Ut.entriesIn=Ll,Ut.extend=El,Ut.extendWith=Cl,cc(Ut,Ut),Ut.add=Ac,Ut.attempt=Jl,Ut.camelCase=Hl,Ut.capitalize=Wl,Ut.ceil=mc,Ut.clamp=function(e,n,t){return t===o&&(t=n,n=o),t!==o&&(t=(t=bl(t))==t?t:0),n!==o&&(n=(n=bl(n))==n?n:0),cr(bl(e),n,t)},Ut.clone=function(e){return ur(e,4)},Ut.cloneDeep=function(e){return ur(e,5)},Ut.cloneDeepWith=function(e,n){return ur(e,5,n="function"==typeof n?n:o)},Ut.cloneWith=function(e,n){return ur(e,4,n="function"==typeof n?n:o)},Ut.conformsTo=function(e,n){return null==n||sr(e,n,Il(n))},Ut.deburr=Gl,Ut.defaultTo=function(e,n){return null==e||e!=e?n:e},Ut.divide=yc,Ut.endsWith=function(e,n,t){e=ml(e),n=so(n);var r=e.length,i=t=t===o?r:cr(hl(t),0,r);return(t-=n.length)>=0&&e.slice(t,i)==n},Ut.eq=Ua,Ut.escape=function(e){return(e=ml(e))&&X.test(e)?e.replace(K,at):e},Ut.escapeRegExp=function(e){return(e=ml(e))&&ie.test(e)?e.replace(oe,"\\$&"):e},Ut.every=function(e,n,t){var r=Ya(e)?In:hr;return t&&Ei(e,n,t)&&(n=o),r(e,si(n,3))},Ut.find=ba,Ut.findIndex=Gi,Ut.findKey=function(e,n){return Hn(e,si(n,3),Er)},Ut.findLast=Aa,Ut.findLastIndex=Yi,Ut.findLastKey=function(e,n){return Hn(e,si(n,3),Cr)},Ut.floor=Ec,Ut.forEach=ma,Ut.forEachRight=ya,Ut.forIn=function(e,n){return null==e?e:mr(e,si(n,3),jl)},Ut.forInRight=function(e,n){return null==e?e:yr(e,si(n,3),jl)},Ut.forOwn=function(e,n){return e&&Er(e,si(n,3))},Ut.forOwnRight=function(e,n){return e&&Cr(e,si(n,3))},Ut.get=kl,Ut.gt=Ha,Ut.gte=Wa,Ut.has=function(e,n){return null!=e&&bi(e,n,Or)},Ut.hasIn=Ol,Ut.head=Vi,Ut.identity=oc,Ut.includes=function(e,n,t,r){e=Va(e)?e:Ul(e),t=t&&!r?hl(t):0;var o=e.length;return t<0&&(t=mt(o+t,0)),cl(e)?t<=o&&e.indexOf(n,t)>-1:!!o&&Gn(e,n,t)>-1},Ut.indexOf=function(e,n,t){var r=null==e?0:e.length;if(!r)return-1;var o=null==t?0:hl(t);return o<0&&(o=mt(r+o,0)),Gn(e,n,o)},Ut.inRange=function(e,n,t){return n=gl(n),t===o?(t=n,n=0):t=gl(t),function(e,n,t){return e>=yt(n,t)&&e=-9007199254740991&&e<=g},Ut.isSet=ll,Ut.isString=cl,Ut.isSymbol=ul,Ut.isTypedArray=sl,Ut.isUndefined=function(e){return e===o},Ut.isWeakMap=function(e){return tl(e)&&vi(e)==j},Ut.isWeakSet=function(e){return tl(e)&&"[object WeakSet]"==Sr(e)},Ut.join=function(e,n){return null==e?"":Un.call(e,n)},Ut.kebabCase=Yl,Ut.last=Xi,Ut.lastIndexOf=function(e,n,t){var r=null==e?0:e.length;if(!r)return-1;var i=r;return t!==o&&(i=(i=hl(t))<0?mt(r+i,0):yt(i,r-1)),n==n?function(e,n,t){for(var r=t+1;r--;)if(e[r]===n)return r;return r}(e,n,i):Wn(e,qn,i,!0)},Ut.lowerCase=ql,Ut.lowerFirst=Vl,Ut.lt=fl,Ut.lte=pl,Ut.max=function(e){return e&&e.length?vr(e,oc,kr):o},Ut.maxBy=function(e,n){return e&&e.length?vr(e,si(n,2),kr):o},Ut.mean=function(e){return Vn(e,oc)},Ut.meanBy=function(e,n){return Vn(e,si(n,2))},Ut.min=function(e){return e&&e.length?vr(e,oc,Fr):o},Ut.minBy=function(e,n){return e&&e.length?vr(e,si(n,2),Fr):o},Ut.stubArray=vc,Ut.stubFalse=bc,Ut.stubObject=function(){return{}},Ut.stubString=function(){return""},Ut.stubTrue=function(){return!0},Ut.multiply=wc,Ut.nth=function(e,n){return e&&e.length?Gr(e,hl(n)):o},Ut.noConflict=function(){return vn._===this&&(vn._=Ue),this},Ut.noop=uc,Ut.now=ka,Ut.pad=function(e,n,t){e=ml(e);var r=(n=hl(n))?gt(e):0;if(!n||r>=n)return e;var o=(n-r)/2;return qo(bn(o),t)+e+qo(hn(o),t)},Ut.padEnd=function(e,n,t){e=ml(e);var r=(n=hl(n))?gt(e):0;return n&&rn){var r=e;e=n,n=r}if(t||e%1||n%1){var i=wt();return yt(e+i*(n-e+pn("1e-"+((i+"").length-1))),n)}return Kr(e,n)},Ut.reduce=function(e,n,t){var r=Ya(e)?Nn:Qn,o=arguments.length<3;return r(e,si(n,4),t,o,dr)},Ut.reduceRight=function(e,n,t){var r=Ya(e)?Fn:Qn,o=arguments.length<3;return r(e,si(n,4),t,o,gr)},Ut.repeat=function(e,n,t){return n=(t?Ei(e,n,t):n===o)?1:hl(n),Qr(ml(e),n)},Ut.replace=function(){var e=arguments,n=ml(e[0]);return e.length<3?n:n.replace(e[1],e[2])},Ut.result=function(e,n,t){var r=-1,i=(n=Eo(n,e)).length;for(i||(i=1,e=o);++rg)return[];var t=v,r=yt(e,v);n=si(n),e-=v;for(var o=Zn(r,n);++t=a)return e;var c=t-gt(r);if(c<1)return r;var u=l?wo(l,0,c).join(""):e.slice(0,c);if(i===o)return u+r;if(l&&(c+=u.length-c),al(i)){if(e.slice(c).search(i)){var s,f=u;for(i.global||(i=Oe(i.source,ml(he.exec(i))+"g")),i.lastIndex=0;s=i.exec(f);)var p=s.index;u=u.slice(0,p===o?c:p)}}else if(e.indexOf(so(i),c)!=c){var d=u.lastIndexOf(i);d>-1&&(u=u.slice(0,d))}return u+r},Ut.unescape=function(e){return(e=ml(e))&&Q.test(e)?e.replace($,bt):e},Ut.uniqueId=function(e){var n=++Me;return ml(e)+n},Ut.upperCase=Ql,Ut.upperFirst=Xl,Ut.each=ma,Ut.eachRight=ya,Ut.first=Vi,cc(Ut,(Cc={},Er(Ut,(function(e,n){Re.call(Ut.prototype,n)||(Cc[n]=e)})),Cc),{chain:!1}),Ut.VERSION="4.17.21",Tn(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(e){Ut[e].placeholder=Ut})),Tn(["drop","take"],(function(e,n){Yt.prototype[e]=function(t){t=t===o?1:mt(hl(t),0);var r=this.__filtered__&&!n?new Yt(this):this.clone();return r.__filtered__?r.__takeCount__=yt(t,r.__takeCount__):r.__views__.push({size:yt(t,v),type:e+(r.__dir__<0?"Right":"")}),r},Yt.prototype[e+"Right"]=function(n){return this.reverse()[e](n).reverse()}})),Tn(["filter","map","takeWhile"],(function(e,n){var t=n+1,r=1==t||3==t;Yt.prototype[e]=function(e){var n=this.clone();return n.__iteratees__.push({iteratee:si(e,3),type:t}),n.__filtered__=n.__filtered__||r,n}})),Tn(["head","last"],(function(e,n){var t="take"+(n?"Right":"");Yt.prototype[e]=function(){return this[t](1).value()[0]}})),Tn(["initial","tail"],(function(e,n){var t="drop"+(n?"":"Right");Yt.prototype[e]=function(){return this.__filtered__?new Yt(this):this[t](1)}})),Yt.prototype.compact=function(){return this.filter(oc)},Yt.prototype.find=function(e){return this.filter(e).head()},Yt.prototype.findLast=function(e){return this.reverse().find(e)},Yt.prototype.invokeMap=Xr((function(e,n){return"function"==typeof e?new Yt(this):this.map((function(t){return Pr(t,e,n)}))})),Yt.prototype.reject=function(e){return this.filter(Ra(si(e)))},Yt.prototype.slice=function(e,n){e=hl(e);var t=this;return t.__filtered__&&(e>0||n<0)?new Yt(t):(e<0?t=t.takeRight(-e):e&&(t=t.drop(e)),n!==o&&(t=(n=hl(n))<0?t.dropRight(-n):t.take(n-e)),t)},Yt.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},Yt.prototype.toArray=function(){return this.take(v)},Er(Yt.prototype,(function(e,n){var t=/^(?:filter|find|map|reject)|While$/.test(n),r=/^(?:head|last)$/.test(n),i=Ut[r?"take"+("last"==n?"Right":""):n],a=r||/^find/.test(n);i&&(Ut.prototype[n]=function(){var n=this.__wrapped__,l=r?[1]:arguments,c=n instanceof Yt,u=l[0],s=c||Ya(n),f=function(e){var n=i.apply(Ut,Mn([e],l));return r&&p?n[0]:n};s&&t&&"function"==typeof u&&1!=u.length&&(c=s=!1);var p=this.__chain__,d=!!this.__actions__.length,g=a&&!p,h=c&&!d;if(!a&&s){n=h?n:new Yt(this);var v=e.apply(n,l);return v.__actions__.push({func:ga,args:[f],thisArg:o}),new Gt(v,p)}return g&&h?e.apply(this,l):(v=this.thru(f),g?r?v.value()[0]:v.value():v)})})),Tn(["pop","push","shift","sort","splice","unshift"],(function(e){var n=Pe[e],t=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",r=/^(?:pop|shift)$/.test(e);Ut.prototype[e]=function(){var e=arguments;if(r&&!this.__chain__){var o=this.value();return n.apply(Ya(o)?o:[],e)}return this[t]((function(t){return n.apply(Ya(t)?t:[],e)}))}})),Er(Yt.prototype,(function(e,n){var t=Ut[n];if(t){var r=t.name+"";Re.call(It,r)||(It[r]=[]),It[r].push({name:n,func:t})}})),It[Ho(o,2).name]=[{name:"wrapper",func:o}],Yt.prototype.clone=function(){var e=new Yt(this.__wrapped__);return e.__actions__=Po(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=Po(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=Po(this.__views__),e},Yt.prototype.reverse=function(){if(this.__filtered__){var e=new Yt(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},Yt.prototype.value=function(){var e=this.__wrapped__.value(),n=this.__dir__,t=Ya(e),r=n<0,o=t?e.length:0,i=function(e,n,t){var r=-1,o=t.length;for(;++r=this.__values__.length;return{done:e,value:e?o:this.__values__[this.__index__++]}},Ut.prototype.plant=function(e){for(var n,t=this;t instanceof Wt;){var r=Li(t);r.__index__=0,r.__values__=o,n?i.__wrapped__=r:n=r;var i=r;t=t.__wrapped__}return i.__wrapped__=e,n},Ut.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof Yt){var n=e;return this.__actions__.length&&(n=new Yt(this)),(n=n.reverse()).__actions__.push({func:ga,args:[na],thisArg:o}),new Gt(n,this.__chain__)}return this.thru(na)},Ut.prototype.toJSON=Ut.prototype.valueOf=Ut.prototype.value=function(){return vo(this.__wrapped__,this.__actions__)},Ut.prototype.first=Ut.prototype.head,Ze&&(Ut.prototype[Ze]=function(){return this}),Ut}();vn._=At,(r=function(){return At}.call(n,t,n,e))===o||(e.exports=r)}.call(this)},5228:e=>{"use strict"; +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/var n=Object.getOwnPropertySymbols,t=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var n={},t=0;t<10;t++)n["_"+String.fromCharCode(t)]=t;if("0123456789"!==Object.getOwnPropertyNames(n).map((function(e){return n[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,o){for(var i,a,l=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),c=1;c{var r="function"==typeof Map&&Map.prototype,o=Object.getOwnPropertyDescriptor&&r?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,i=r&&o&&"function"==typeof o.get?o.get:null,a=r&&Map.prototype.forEach,l="function"==typeof Set&&Set.prototype,c=Object.getOwnPropertyDescriptor&&l?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,u=l&&c&&"function"==typeof c.get?c.get:null,s=l&&Set.prototype.forEach,f="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,p="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,d="function"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,g=Boolean.prototype.valueOf,h=Object.prototype.toString,v=Function.prototype.toString,b=String.prototype.match,A=String.prototype.slice,m=String.prototype.replace,y=String.prototype.toUpperCase,E=String.prototype.toLowerCase,C=RegExp.prototype.test,w=Array.prototype.concat,_=Array.prototype.join,x=Array.prototype.slice,S=Math.floor,k="function"==typeof BigInt?BigInt.prototype.valueOf:null,O=Object.getOwnPropertySymbols,B="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol.prototype.toString:null,T="function"==typeof Symbol&&"object"==typeof Symbol.iterator,P="function"==typeof Symbol&&Symbol.toStringTag&&(typeof Symbol.toStringTag===T||"symbol")?Symbol.toStringTag:null,I=Object.prototype.propertyIsEnumerable,j=("function"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(e){return e.__proto__}:null);function z(e,n){if(e===1/0||e===-1/0||e!=e||e&&e>-1e3&&e<1e3||C.call(/e/,n))return n;var t=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"==typeof e){var r=e<0?-S(-e):S(e);if(r!==e){var o=String(r),i=A.call(n,o.length+1);return m.call(o,t,"$&_")+"."+m.call(m.call(i,/([0-9]{3})/g,"$&_"),/_$/,"")}}return m.call(n,t,"$&_")}var D=t(2634),R=D.custom,M=H(R)?R:null;function N(e,n,t){var r="double"===(t.quoteStyle||n)?'"':"'";return r+e+r}function F(e){return m.call(String(e),/"/g,""")}function L(e){return!("[object Array]"!==Y(e)||P&&"object"==typeof e&&P in e)}function U(e){return!("[object RegExp]"!==Y(e)||P&&"object"==typeof e&&P in e)}function H(e){if(T)return e&&"object"==typeof e&&e instanceof Symbol;if("symbol"==typeof e)return!0;if(!e||"object"!=typeof e||!B)return!1;try{return B.call(e),!0}catch(e){}return!1}e.exports=function e(n,r,o,l){var c=r||{};if(G(c,"quoteStyle")&&"single"!==c.quoteStyle&&"double"!==c.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(G(c,"maxStringLength")&&("number"==typeof c.maxStringLength?c.maxStringLength<0&&c.maxStringLength!==1/0:null!==c.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var h=!G(c,"customInspect")||c.customInspect;if("boolean"!=typeof h&&"symbol"!==h)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(G(c,"indent")&&null!==c.indent&&"\t"!==c.indent&&!(parseInt(c.indent,10)===c.indent&&c.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(G(c,"numericSeparator")&&"boolean"!=typeof c.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var y=c.numericSeparator;if(void 0===n)return"undefined";if(null===n)return"null";if("boolean"==typeof n)return n?"true":"false";if("string"==typeof n)return V(n,c);if("number"==typeof n){if(0===n)return 1/0/n>0?"0":"-0";var C=String(n);return y?z(n,C):C}if("bigint"==typeof n){var S=String(n)+"n";return y?z(n,S):S}var O=void 0===c.depth?5:c.depth;if(void 0===o&&(o=0),o>=O&&O>0&&"object"==typeof n)return L(n)?"[Array]":"[Object]";var R=function(e,n){var t;if("\t"===e.indent)t="\t";else{if(!("number"==typeof e.indent&&e.indent>0))return null;t=_.call(Array(e.indent+1)," ")}return{base:t,prev:_.call(Array(n+1),t)}}(c,o);if(void 0===l)l=[];else if(q(l,n)>=0)return"[Circular]";function W(n,t,r){if(t&&(l=x.call(l)).push(t),r){var i={depth:c.depth};return G(c,"quoteStyle")&&(i.quoteStyle=c.quoteStyle),e(n,i,o+1,l)}return e(n,c,o+1,l)}if("function"==typeof n&&!U(n)){var $=function(e){if(e.name)return e.name;var n=b.call(v.call(e),/^function\s*([\w$]+)/);if(n)return n[1];return null}(n),ee=J(n,W);return"[Function"+($?": "+$:" (anonymous)")+"]"+(ee.length>0?" { "+_.call(ee,", ")+" }":"")}if(H(n)){var ne=T?m.call(String(n),/^(Symbol\(.*\))_[^)]*$/,"$1"):B.call(n);return"object"!=typeof n||T?ne:K(ne)}if(function(e){if(!e||"object"!=typeof e)return!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement)return!0;return"string"==typeof e.nodeName&&"function"==typeof e.getAttribute}(n)){for(var te="<"+E.call(String(n.nodeName)),re=n.attributes||[],oe=0;oe"}if(L(n)){if(0===n.length)return"[]";var ie=J(n,W);return R&&!function(e){for(var n=0;n=0)return!1;return!0}(ie)?"["+Z(ie,R)+"]":"[ "+_.call(ie,", ")+" ]"}if(function(e){return!("[object Error]"!==Y(e)||P&&"object"==typeof e&&P in e)}(n)){var ae=J(n,W);return"cause"in Error.prototype||!("cause"in n)||I.call(n,"cause")?0===ae.length?"["+String(n)+"]":"{ ["+String(n)+"] "+_.call(ae,", ")+" }":"{ ["+String(n)+"] "+_.call(w.call("[cause]: "+W(n.cause),ae),", ")+" }"}if("object"==typeof n&&h){if(M&&"function"==typeof n[M]&&D)return D(n,{depth:O-o});if("symbol"!==h&&"function"==typeof n.inspect)return n.inspect()}if(function(e){if(!i||!e||"object"!=typeof e)return!1;try{i.call(e);try{u.call(e)}catch(e){return!0}return e instanceof Map}catch(e){}return!1}(n)){var le=[];return a&&a.call(n,(function(e,t){le.push(W(t,n,!0)+" => "+W(e,n))})),X("Map",i.call(n),le,R)}if(function(e){if(!u||!e||"object"!=typeof e)return!1;try{u.call(e);try{i.call(e)}catch(e){return!0}return e instanceof Set}catch(e){}return!1}(n)){var ce=[];return s&&s.call(n,(function(e){ce.push(W(e,n))})),X("Set",u.call(n),ce,R)}if(function(e){if(!f||!e||"object"!=typeof e)return!1;try{f.call(e,f);try{p.call(e,p)}catch(e){return!0}return e instanceof WeakMap}catch(e){}return!1}(n))return Q("WeakMap");if(function(e){if(!p||!e||"object"!=typeof e)return!1;try{p.call(e,p);try{f.call(e,f)}catch(e){return!0}return e instanceof WeakSet}catch(e){}return!1}(n))return Q("WeakSet");if(function(e){if(!d||!e||"object"!=typeof e)return!1;try{return d.call(e),!0}catch(e){}return!1}(n))return Q("WeakRef");if(function(e){return!("[object Number]"!==Y(e)||P&&"object"==typeof e&&P in e)}(n))return K(W(Number(n)));if(function(e){if(!e||"object"!=typeof e||!k)return!1;try{return k.call(e),!0}catch(e){}return!1}(n))return K(W(k.call(n)));if(function(e){return!("[object Boolean]"!==Y(e)||P&&"object"==typeof e&&P in e)}(n))return K(g.call(n));if(function(e){return!("[object String]"!==Y(e)||P&&"object"==typeof e&&P in e)}(n))return K(W(String(n)));if("undefined"!=typeof window&&n===window)return"{ [object Window] }";if("undefined"!=typeof globalThis&&n===globalThis||void 0!==t.g&&n===t.g)return"{ [object globalThis] }";if(!function(e){return!("[object Date]"!==Y(e)||P&&"object"==typeof e&&P in e)}(n)&&!U(n)){var ue=J(n,W),se=j?j(n)===Object.prototype:n instanceof Object||n.constructor===Object,fe=n instanceof Object?"":"null prototype",pe=!se&&P&&Object(n)===n&&P in n?A.call(Y(n),8,-1):fe?"Object":"",de=(se||"function"!=typeof n.constructor?"":n.constructor.name?n.constructor.name+" ":"")+(pe||fe?"["+_.call(w.call([],pe||[],fe||[]),": ")+"] ":"");return 0===ue.length?de+"{}":R?de+"{"+Z(ue,R)+"}":de+"{ "+_.call(ue,", ")+" }"}return String(n)};var W=Object.prototype.hasOwnProperty||function(e){return e in this};function G(e,n){return W.call(e,n)}function Y(e){return h.call(e)}function q(e,n){if(e.indexOf)return e.indexOf(n);for(var t=0,r=e.length;tn.maxStringLength){var t=e.length-n.maxStringLength,r="... "+t+" more character"+(t>1?"s":"");return V(A.call(e,0,n.maxStringLength),n)+r}return N(m.call(m.call(e,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,$),"single",n)}function $(e){var n=e.charCodeAt(0),t={8:"b",9:"t",10:"n",12:"f",13:"r"}[n];return t?"\\"+t:"\\x"+(n<16?"0":"")+y.call(n.toString(16))}function K(e){return"Object("+e+")"}function Q(e){return e+" { ? }"}function X(e,n,t,r){return e+" ("+n+") {"+(r?Z(t,r):_.call(t,", "))+"}"}function Z(e,n){if(0===e.length)return"";var t="\n"+n.prev+n.base;return t+_.call(e,","+t)+"\n"+n.prev}function J(e,n){var t=L(e),r=[];if(t){r.length=e.length;for(var o=0;o{"use strict";var n=function(e){return e!=e};e.exports=function(e,t){return 0===e&&0===t?1/e==1/t:e===t||!(!n(e)||!n(t))}},7653:(e,n,t)=>{"use strict";var r=t(8452),o=t(487),i=t(9211),a=t(9394),l=t(6576),c=o(a(),Object);r(c,{getPolyfill:a,implementation:i,shim:l}),e.exports=c},9394:(e,n,t)=>{"use strict";var r=t(9211);e.exports=function(){return"function"==typeof Object.is?Object.is:r}},6576:(e,n,t)=>{"use strict";var r=t(9394),o=t(8452);e.exports=function(){var e=r();return o(Object,{is:e},{is:function(){return Object.is!==e}}),e}},8875:(e,n,t)=>{"use strict";var r;if(!Object.keys){var o=Object.prototype.hasOwnProperty,i=Object.prototype.toString,a=t(1093),l=Object.prototype.propertyIsEnumerable,c=!l.call({toString:null},"toString"),u=l.call((function(){}),"prototype"),s=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],f=function(e){var n=e.constructor;return n&&n.prototype===e},p={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},d=function(){if("undefined"==typeof window)return!1;for(var e in window)try{if(!p["$"+e]&&o.call(window,e)&&null!==window[e]&&"object"==typeof window[e])try{f(window[e])}catch(e){return!0}}catch(e){return!0}return!1}();r=function(e){var n=null!==e&&"object"==typeof e,t="[object Function]"===i.call(e),r=a(e),l=n&&"[object String]"===i.call(e),p=[];if(!n&&!t&&!r)throw new TypeError("Object.keys called on a non-object");var g=u&&t;if(l&&e.length>0&&!o.call(e,0))for(var h=0;h0)for(var v=0;v{"use strict";var r=Array.prototype.slice,o=t(1093),i=Object.keys,a=i?function(e){return i(e)}:t(8875),l=Object.keys;a.shim=function(){if(Object.keys){var e=function(){var e=Object.keys(arguments);return e&&e.length===arguments.length}(1,2);e||(Object.keys=function(e){return o(e)?l(r.call(e)):l(e)})}else Object.keys=a;return Object.keys||a},e.exports=a},1093:e=>{"use strict";var n=Object.prototype.toString;e.exports=function(e){var t=n.call(e),r="[object Arguments]"===t;return r||(r="[object Array]"!==t&&null!==e&&"object"==typeof e&&"number"==typeof e.length&&e.length>=0&&"[object Function]"===n.call(e.callee)),r}},8403:(e,n,t)=>{"use strict";var r=t(1189),o=t(1333)(),i=t(8075),a=Object,l=i("Array.prototype.push"),c=i("Object.prototype.propertyIsEnumerable"),u=o?Object.getOwnPropertySymbols:null;e.exports=function(e,n){if(null==e)throw new TypeError("target must be an object");var t=a(e);if(1===arguments.length)return t;for(var i=1;i{"use strict";var r=t(8452),o=t(487),i=t(8403),a=t(1514),l=t(984),c=o.apply(a()),u=function(e,n){return c(Object,arguments)};r(u,{getPolyfill:a,implementation:i,shim:l}),e.exports=u},1514:(e,n,t)=>{"use strict";var r=t(8403);e.exports=function(){return Object.assign?function(){if(!Object.assign)return!1;for(var e="abcdefghijklmnopqrst",n=e.split(""),t={},r=0;r{"use strict";var r=t(8452),o=t(1514);e.exports=function(){var e=o();return r(Object,{assign:e},{assign:function(){return Object.assign!==e}}),e}},6578:e=>{"use strict";e.exports=["Float32Array","Float64Array","Int8Array","Int16Array","Int32Array","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array"]},2694:(e,n,t)=>{"use strict";var r=t(6925);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,n,t,o,i,a){if(a!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function n(){return e}e.isRequired=e;var t={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:n,element:e,elementType:e,instanceOf:n,node:e,objectOf:n,oneOf:n,oneOfType:n,shape:n,exact:n,checkPropTypes:i,resetWarningCache:o};return t.PropTypes=t,t}},5556:(e,n,t)=>{e.exports=t(2694)()},6925:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},2551:(e,n,t)=>{"use strict";var r=t(6540),o=t(5228),i=t(9982); +/** @license React v17.0.2 + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */function a(e){for(var n="https://reactjs.org/docs/error-decoder.html?invariant="+e,t=1;t