diff --git "a/.github/ISSUE_TEMPLATE/bug-\345\217\215\351\246\210.md" "b/.github/ISSUE_TEMPLATE/bug-\345\217\215\351\246\210.md" new file mode 100644 index 0000000..1078808 --- /dev/null +++ "b/.github/ISSUE_TEMPLATE/bug-\345\217\215\351\246\210.md" @@ -0,0 +1,23 @@ +--- +name: bug-反馈 +about: 描述你所遇到的bug +title: 问题反馈 +labels: bug +assignees: yaoxieyoulei + +--- + +### 问题描述 +请提供一个清晰而简明的问题描述。 + +### 复现步骤 +请提供复现该问题所需的具体步骤。 + +### 预期行为 +请描述你期望的正确行为或结果。 + +### 系统信息 +请提供关于您的环境的详细信息,包括操作系统、浏览器版本等。 + +### 相关截图或日志 +如果有的话,请提供相关的截图、错误日志或其他有助于解决问题的信息。 diff --git "a/.github/ISSUE_TEMPLATE/\345\212\237\350\203\275\350\257\267\346\261\202.md" "b/.github/ISSUE_TEMPLATE/\345\212\237\350\203\275\350\257\267\346\261\202.md" new file mode 100644 index 0000000..96905c5 --- /dev/null +++ "b/.github/ISSUE_TEMPLATE/\345\212\237\350\203\275\350\257\267\346\261\202.md" @@ -0,0 +1,20 @@ +--- +name: 功能请求 +about: 对于功能的一些建议 +title: '' +labels: enhancement +assignees: yaoxieyoulei + +--- + +### 功能描述 +请提供对所请求功能的清晰描述。 + +### 目标 +请描述你希望通过这个功能实现的目标。 + +### 解决方案 +如果你有任何关于如何实现这个功能的想法或建议,请在这里提供。 + +### 其他 +请提供已实现该功能或类似功能的应用 diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml new file mode 100644 index 0000000..8b09373 --- /dev/null +++ b/.github/workflows/android.yml @@ -0,0 +1,41 @@ +name: Android CI + +on: + push: + branches: [ "master" ] + pull_request: + branches: [ "master" ] + +permissions: + contents: write + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + cache: gradle + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + - name: Build with Gradle + # run: ./gradlew build + run: ./gradlew assembleDebug + + - name: Set current date as env variable + run: | + echo "date=$(date +'%Y-%m-%d')" >> $GITHUB_ENV + + - name: Upload Release + uses: softprops/action-gh-release@v1 + with: + tag_name: nightly-tag-${{ env.date }} + name: release-${{ env.date }} + files: ./app/build/outputs/apk/debug/app-debug.apk + # files: ./app/build/outputs/apk/release/app-release-unsigned.apk + draft: false diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..293344a --- /dev/null +++ b/.gitignore @@ -0,0 +1,25 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +/.idea/deploymentTargetDropDown.xml +/.idea/git_toolbox_prj.xml +/.idea/deploymentTargetSelector.xml +/.idea/GrepConsole.xml +/.idea/material_theme_project_new.xml +/.idea/other.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties +key.properties +.kotlin/* +app/debug/* +*.apk \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..907f736 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,5 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +./deploymentTargetSelector.xml +/git_toolbox_blame.xml \ No newline at end of file diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..d0fb625 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +My TV \ No newline at end of file diff --git a/.idea/appInsightsSettings.xml b/.idea/appInsightsSettings.xml new file mode 100644 index 0000000..b35cab9 --- /dev/null +++ b/.idea/appInsightsSettings.xml @@ -0,0 +1,40 @@ + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..57eb39a --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,131 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..79ee123 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..b589d56 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..97626ba --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..0897082 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..0e2c636 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,70 @@ + + + + \ No newline at end of file diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml new file mode 100644 index 0000000..6d0ee1c --- /dev/null +++ b/.idea/kotlinc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/migrations.xml b/.idea/migrations.xml new file mode 100644 index 0000000..f8051a6 --- /dev/null +++ b/.idea/migrations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..8978d23 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations/app.xml b/.idea/runConfigurations/app.xml new file mode 100644 index 0000000..b029852 --- /dev/null +++ b/.idea/runConfigurations/app.xml @@ -0,0 +1,68 @@ + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..73c9ecb --- /dev/null +++ b/LICENSE @@ -0,0 +1,5 @@ +# LICENSE + +This project is licensed under GPLv3 with additional constraints. For more details, please refer to the [LICENSE](https://github.com/song940/.github/blob/main/LICENSE.md). + +This project is based on [@yaoxieyoulei/mytv-android](https://github.com/yaoxieyoulei/mytv-android), which is licensed under the [MIT LICENSE](https://github.com/yaoxieyoulei/mytv-android/blob/main/LICENSE). Special thanks to [@yaoxieyoulei](https://github.com/yaoxieyoulei) for their work. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..821676f --- /dev/null +++ b/README.md @@ -0,0 +1,14 @@ +

+ DuckTV Icon +
DuckTV
+

+ +

:tv: Simple IPTV App for Android TV

+ +

+ + Get it on Google Play + +

+ +---- diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..8583565 --- /dev/null +++ b/app/.gitignore @@ -0,0 +1,3 @@ +/build +keystore.jks +/release diff --git a/app/build.gradle.kts b/app/build.gradle.kts new file mode 100644 index 0000000..1f734fa --- /dev/null +++ b/app/build.gradle.kts @@ -0,0 +1,123 @@ +import java.io.FileInputStream +import java.util.Properties + +plugins { + alias(libs.plugins.android.application) + alias(libs.plugins.jetbrains.kotlin.android) + alias(libs.plugins.compose.compiler) + alias(libs.plugins.kotlin.serialization) +} + +val keystorePropertiesFile = rootProject.file("key.properties") +val keystoreProperties = Properties() +if (keystorePropertiesFile.exists()) { + keystoreProperties.load(FileInputStream(keystorePropertiesFile)) +} + +android { + namespace = "me.lsong.mytv" + compileSdk = 34 + + defaultConfig { + applicationId = "me.lsong.mytv" + minSdk = 21 + targetSdk = 34 + versionCode = 1 + versionName = "1.4.4" + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + vectorDrawables { + useSupportLibrary = true + } + + ndk { + abiFilters.addAll(listOf("armeabi-v7a", "arm64-v8a", "x86_64")) + } + } + + buildTypes { + release { + isMinifyEnabled = true + isShrinkResources = true + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = "1.8" + } + buildFeatures { + compose = true + } + packaging { + resources { + excludes += "/META-INF/{AL2.0,LGPL2.1}" + } + } + signingConfigs { + create("release") { + storeFile = + file(System.getenv("KEYSTORE") ?: keystoreProperties["storeFile"] ?: "keystore.jks") + storePassword = System.getenv("KEYSTORE_PASSWORD") + ?: keystoreProperties.getProperty("storePassword") + keyAlias = System.getenv("KEY_ALIAS") ?: keystoreProperties.getProperty("keyAlias") + keyPassword = + System.getenv("KEY_PASSWORD") ?: keystoreProperties.getProperty("keyPassword") + } + } + buildTypes { + getByName("release") { + signingConfig = signingConfigs.getByName("release") + } + } +} + +dependencies { + + implementation(libs.androidx.core.ktx) + implementation(libs.androidx.lifecycle.runtime.ktx) + implementation(libs.androidx.lifecycle.viewmodel.compose) + implementation(libs.androidx.activity.compose) + implementation(platform(libs.androidx.compose.bom)) + implementation(libs.androidx.ui) + implementation(libs.androidx.ui.graphics) + implementation(libs.androidx.ui.tooling.preview) + implementation(libs.androidx.material3) + implementation(libs.kotlinx.collections.immutable) + implementation(libs.androidx.material.icons.extended) + + // TV Compose + implementation(libs.androidx.tv.foundation) + implementation(libs.androidx.tv.material) + + // 播放器 + implementation(libs.androidx.media3.exoplayer) + implementation(libs.androidx.media3.exoplayer.hls) + implementation(libs.androidx.media3.exoplayer.rtsp) + + // 序列化 + implementation(libs.kotlinx.serialization) + + // 网络请求 + implementation(libs.okhttp) + implementation(libs.androidasync) + + // 二维码 + implementation(libs.qrose) + implementation(libs.coil.compose) + implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.aar")))) + + testImplementation(libs.junit) + androidTestImplementation(libs.androidx.junit) + androidTestImplementation(libs.androidx.espresso.core) + androidTestImplementation(platform(libs.androidx.compose.bom)) + androidTestImplementation(libs.androidx.ui.test.junit4) + debugImplementation(libs.androidx.ui.tooling) + debugImplementation(libs.androidx.ui.test.manifest) +} \ No newline at end of file diff --git a/app/libs/lib-decoder-ffmpeg-release.aar b/app/libs/lib-decoder-ffmpeg-release.aar new file mode 100644 index 0000000..dcb9828 Binary files /dev/null and b/app/libs/lib-decoder-ffmpeg-release.aar differ diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# 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/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..b69d34e --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/AppGlobal.kt b/app/src/main/java/me/lsong/mytv/AppGlobal.kt new file mode 100644 index 0000000..7449e08 --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/AppGlobal.kt @@ -0,0 +1,13 @@ +package me.lsong.mytv + +import java.io.File + +/** + * 应用全局变量 + */ +object AppGlobal { + /** + * 缓存目录 + */ + lateinit var cacheDir: File +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/BootReceiver.kt b/app/src/main/java/me/lsong/mytv/BootReceiver.kt new file mode 100644 index 0000000..1c9722e --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/BootReceiver.kt @@ -0,0 +1,18 @@ +package me.lsong.mytv + +/** + * 开机自启动监听 + */ +// class BootReceiver : BroadcastReceiver() { +// override fun onReceive(context: Context, intent: Intent) { +// if (Intent.ACTION_BOOT_COMPLETED == intent.action) { +// // val sp: SharedPreferences = SP.getInstance(context) +// // val bootLaunch = sp.getBoolean(SP.KEY.APP_BOOT_LAUNCH.name, false) +// // if (bootLaunch) { +// context.startActivity(Intent(context, MainActivity::class.java).apply { +// addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) +// }) +// // } +// } +// } +// } diff --git a/app/src/main/java/me/lsong/mytv/MainActivity.kt b/app/src/main/java/me/lsong/mytv/MainActivity.kt new file mode 100644 index 0000000..30dc0f1 --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/MainActivity.kt @@ -0,0 +1,165 @@ +package me.lsong.mytv + +import android.app.PictureInPictureParams +import android.os.Build +import android.os.Bundle +import android.util.Rational +import android.view.WindowManager +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.activity.enableEdgeToEdge +import androidx.annotation.IntRange +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.calculateEndPadding +import androidx.compose.foundation.layout.calculateStartPadding +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalLayoutDirection +import androidx.compose.ui.unit.LayoutDirection +import androidx.compose.ui.unit.dp +import androidx.core.view.WindowCompat +import androidx.core.view.WindowInsetsCompat +import androidx.core.view.WindowInsetsControllerCompat +import kotlinx.coroutines.FlowPreview +import kotlinx.coroutines.channels.Channel +import kotlinx.coroutines.flow.consumeAsFlow +import kotlinx.coroutines.flow.debounce +import me.lsong.mytv.ui.components.LeanbackPadding +import me.lsong.mytv.ui.LoadingScreen +import me.lsong.mytv.ui.theme.LeanbackTheme +import me.lsong.mytv.ui.toast.LeanbackToastScreen +import me.lsong.mytv.ui.toast.LeanbackToastState +import me.lsong.mytv.ui.utils.HttpServer +import me.lsong.mytv.utils.SP +import kotlin.system.exitProcess + +class LeanbackActivity : ComponentActivity() { + override fun onUserLeaveHint() { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) return + if (!SP.uiPipMode) return + + enterPictureInPictureMode( + PictureInPictureParams.Builder() + .setAspectRatio(Rational(16, 9)) + .build() + ) + super.onUserLeaveHint() + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + setContent { + // 隐藏状态栏、导航栏 + WindowCompat.setDecorFitsSystemWindows(window, false) + WindowCompat.getInsetsController(window, window.decorView).let { insetsController -> + insetsController.hide(WindowInsetsCompat.Type.statusBars()) + insetsController.hide(WindowInsetsCompat.Type.navigationBars()) + insetsController.systemBarsBehavior = + WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE + } + + // 屏幕常亮 + window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + + LeanbackTheme { + Box( + modifier = Modifier + .fillMaxSize() + .background(MaterialTheme.colorScheme.background), + ) { + LeanbackApp( + onBackPressed = { + finish() + exitProcess(0) + }, + ) + } + } + } + + HttpServer.start(applicationContext, showToast = { + LeanbackToastState.I.showToast(it, id = "httpServer") + }) + } +} + + +@Composable +fun LeanbackApp( + modifier: Modifier = Modifier, + onBackPressed: () -> Unit = {}, +) { + val context = LocalContext.current + val doubleBackPressedExitState = rememberLeanbackDoubleBackPressedExitState() + + LeanbackToastScreen() + LoadingScreen( + modifier = modifier, + onBackPressed = { + if (doubleBackPressedExitState.allowExit) { + onBackPressed() + } else { + doubleBackPressedExitState.backPress() + LeanbackToastState.I.showToast("再按一次退出") + } + }, + ) +} + + +/** + * 退出应用二次确认 + */ +class LeanbackDoubleBackPressedExitState internal constructor( + @IntRange(from = 0) + private val resetSeconds: Int, +) { + private var _allowExit by mutableStateOf(false) + val allowExit get() = _allowExit + + fun backPress() { + _allowExit = true + channel.trySend(resetSeconds) + } + + private val channel = Channel(Channel.CONFLATED) + + @OptIn(FlowPreview::class) + suspend fun observe() { + channel.consumeAsFlow() + .debounce { it.toLong() * 1000 } + .collect { _allowExit = false } + } +} + +/** + * 退出应用二次确认状态 + */ +@Composable +fun rememberLeanbackDoubleBackPressedExitState(@IntRange(from = 0) resetSeconds: Int = 2) = + remember { LeanbackDoubleBackPressedExitState(resetSeconds = resetSeconds) } + .also { LaunchedEffect(it) { it.observe() } } + +val LeanbackParentPadding = PaddingValues(vertical = 12.dp, horizontal = 24.dp) + +@Composable +fun rememberLeanbackChildPadding(direction: LayoutDirection = LocalLayoutDirection.current) = + remember { + LeanbackPadding( + start = LeanbackParentPadding.calculateStartPadding(direction) + 8.dp, + top = LeanbackParentPadding.calculateTopPadding(), + end = LeanbackParentPadding.calculateEndPadding(direction) + 8.dp, + bottom = LeanbackParentPadding.calculateBottomPadding() + ) + } diff --git a/app/src/main/java/me/lsong/mytv/MyTVApplication.kt b/app/src/main/java/me/lsong/mytv/MyTVApplication.kt new file mode 100644 index 0000000..62e2afd --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/MyTVApplication.kt @@ -0,0 +1,14 @@ +package me.lsong.mytv + +import android.app.Application +import me.lsong.mytv.utils.SP + +class MyTVApplication : Application() { + override fun onCreate() { + super.onCreate() + + UnsafeTrustManager.enableUnsafeTrustManager() + AppGlobal.cacheDir = applicationContext.cacheDir + SP.init(applicationContext) + } +} diff --git a/app/src/main/java/me/lsong/mytv/UnsafeTrustManager.kt b/app/src/main/java/me/lsong/mytv/UnsafeTrustManager.kt new file mode 100644 index 0000000..b35feb5 --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/UnsafeTrustManager.kt @@ -0,0 +1,45 @@ +package me.lsong.mytv + +import android.annotation.SuppressLint +import java.security.KeyManagementException +import java.security.NoSuchAlgorithmException +import java.security.SecureRandom +import java.security.cert.X509Certificate +import javax.net.ssl.HttpsURLConnection +import javax.net.ssl.SSLContext +import javax.net.ssl.TrustManager +import javax.net.ssl.X509TrustManager + +// 防止部分直播源链接证书不被信任 +@SuppressLint("CustomX509TrustManager") +class UnsafeTrustManager : X509TrustManager { + @SuppressLint("TrustAllX509TrustManager") + override fun checkClientTrusted(chain: Array, authType: String) { + // Do nothing and trust all certificates + } + + @SuppressLint("TrustAllX509TrustManager") + override fun checkServerTrusted(chain: Array, authType: String) { + // Do nothing and trust all certificates + } + + override fun getAcceptedIssuers(): Array { + return emptyArray() + } + + companion object { + fun enableUnsafeTrustManager() { + try { + val trustAllCerts = arrayOf(UnsafeTrustManager()) + val sslContext = SSLContext.getInstance("TLS") + sslContext.init(null, trustAllCerts, SecureRandom()) + HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.socketFactory) + HttpsURLConnection.setDefaultHostnameVerifier { _, _ -> true } + } catch (e: NoSuchAlgorithmException) { + e.printStackTrace() + } catch (e: KeyManagementException) { + e.printStackTrace() + } + } + } +} diff --git a/app/src/main/java/me/lsong/mytv/epg/Epg.kt b/app/src/main/java/me/lsong/mytv/epg/Epg.kt new file mode 100644 index 0000000..5eff953 --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/epg/Epg.kt @@ -0,0 +1,126 @@ +package me.lsong.mytv.epg + +import androidx.compose.runtime.Immutable +import kotlinx.serialization.Serializable +import me.lsong.mytv.iptv.TVChannel +import me.lsong.mytv.epg.EpgChannel.Companion.currentProgrammes +import me.lsong.mytv.epg.EpgProgramme.Companion.isLive + +/** + * 频道节目单 + */ +@Serializable +data class EpgChannel( + + val id: String = "", + /** + * 频道名称 + */ + val title: String = "", + /** + * 节目列表 + */ + val programmes: List = emptyList(), +) { + companion object { + /** + * 获取本频道的当前节目和下一个节目 + */ + fun EpgChannel.currentProgrammes(): EpgProgrammeCurrent? { + val currentProgramme = programmes.firstOrNull { it.isLive() } ?: return null + return EpgProgrammeCurrent( + now = currentProgramme, + next = programmes.indexOf(currentProgramme).let { index -> + if (index + 1 < programmes.size) programmes[index + 1] + else null + }, + ) + } + } +} + +@Immutable +data class EpgList( + val value: List = emptyList(), +) : List by value { + companion object { + fun EpgList.getEpgChannel(channel: TVChannel): EpgChannel? { + return ( + firstOrNull{ it.id == channel.name } ?: + firstOrNull{ it.title == channel.title } ?: + firstOrNull{ it.title == channel.name } + ) + } + /** + * 获取指定频道的当前节目和下一个节目 + */ + fun EpgList.currentProgrammes(channel: TVChannel): EpgProgrammeCurrent? { + return getEpgChannel(channel)?.currentProgrammes() + } + } +} + + + +/** + * 频道节目 + */ +@Serializable +data class EpgProgramme( + val channelId: String = "", + /** + * 开始时间(时间戳) + */ + val startAt: Long = 0, + + /** + * 结束时间(时间戳) + */ + val endAt: Long = 0, + + /** + * 节目名称 + */ + val title: String = "", +) { + companion object { + /** + * 是否正在直播 + */ + fun EpgProgramme.isLive() = System.currentTimeMillis() in startAt..() + var eventType = parser.eventType + while (eventType != XmlPullParser.END_DOCUMENT) { + when (eventType) { + XmlPullParser.START_TAG -> { + if (parser.name == "channel") { + val channelId = parser.getAttributeValue(null, "id") + parser.nextTag() + val channelDisplayName = parser.nextText() + val channel = EpgChannel( + id = channelId, + title = channelDisplayName, + ) + // Log.d("epg", "${channel.id}, ${channel.title}") + epgMap[channelId] = channel + } else if (parser.name == "programme") { + val channelId = parser.getAttributeValue(null, "channel") + val startTime = parser.getAttributeValue(null, "start") + val stopTime = parser.getAttributeValue(null, "stop") + parser.nextTag() + val title = parser.nextText() + fun parseTime(time: String): Long { + if (time.length < 14) return 0 + return SimpleDateFormat("yyyyMMddHHmmss Z", TIME_ZONE).parse(time)?.time ?: 0 + } + val programme = EpgProgramme( + channelId = channelId, + startAt = parseTime(startTime), + endAt = parseTime(stopTime), + title = title, + ) + if (epgMap.containsKey(channelId)) { + // Log.d("epg", "${programme.channelId}, ${programme.title}") + epgMap[channelId] = epgMap[channelId]!!.copy( + programmes = epgMap[channelId]!!.programmes + listOf(programme) + ) + } + } + } + } + eventType = parser.next() + } + + Log.i("epg","解析节目单完成,共${epgMap.size}个频道") + return EpgList(epgMap.values.toList()) + } + + private suspend fun fetchXml(url: String): String = withContext(Dispatchers.IO) { + Log.d("epg", "获取远程节目单xml: $url") + + val client = OkHttpClient() + val request = Request.Builder().url(url).build() + + try { + with(client.newCall(request).execute()) { + if (!isSuccessful) { + throw Exception("获取远程节目单xml失败: $code") + } + + val fetcher = EpgFetcher.instances.first { it.isSupport(url) } + + return@with fetcher.fetch(this) + } + } catch (ex: Exception) { + throw Exception("获取远程节目单xml失败,请检查网络连接", ex) + } + } + + suspend fun getEpgList(xmlUrl: String): EpgList = withContext(Dispatchers.Default) { + try { + val xmlString = fetchXml(xmlUrl) + return@withContext parseFromXml(xmlString) + } catch (ex: Exception) { + Log.e("epg", "获取节目单失败", ex) + throw Exception(ex) + } + } +} diff --git a/app/src/main/java/me/lsong/mytv/epg/fetcher/DefaultEpgFetcher.kt b/app/src/main/java/me/lsong/mytv/epg/fetcher/DefaultEpgFetcher.kt new file mode 100644 index 0000000..8bedbba --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/epg/fetcher/DefaultEpgFetcher.kt @@ -0,0 +1,13 @@ +package me.lsong.mytv.epg.fetcher + +import okhttp3.Response + +class DefaultEpgFetcher : EpgFetcher { + override fun isSupport(url: String): Boolean { + return true + } + + override fun fetch(response: Response): String { + return "" + } +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/epg/fetcher/EpgFetcher.kt b/app/src/main/java/me/lsong/mytv/epg/fetcher/EpgFetcher.kt new file mode 100644 index 0000000..06465b5 --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/epg/fetcher/EpgFetcher.kt @@ -0,0 +1,26 @@ +package me.lsong.mytv.epg.fetcher + +import okhttp3.Response + +/** + * 节目单获取接口 + */ +interface EpgFetcher { + /** + * 是否支持该格式 + */ + fun isSupport(url: String): Boolean + + /** + * 获取节目单 + */ + fun fetch(response: Response): String + + companion object { + val instances = listOf( + XmlEpgFetcher(), + XmlGzEpgFetcher(), + DefaultEpgFetcher(), + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/epg/fetcher/XmlEpgFetcher.kt b/app/src/main/java/me/lsong/mytv/epg/fetcher/XmlEpgFetcher.kt new file mode 100644 index 0000000..02517f6 --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/epg/fetcher/XmlEpgFetcher.kt @@ -0,0 +1,13 @@ +package me.lsong.mytv.epg.fetcher + +import okhttp3.Response + +class XmlEpgFetcher : EpgFetcher { + override fun isSupport(url: String): Boolean { + return url.endsWith(".xml") + } + + override fun fetch(response: Response): String { + return response.body!!.string() + } +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/epg/fetcher/XmlGzEpgFetcher.kt b/app/src/main/java/me/lsong/mytv/epg/fetcher/XmlGzEpgFetcher.kt new file mode 100644 index 0000000..66a3bbd --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/epg/fetcher/XmlGzEpgFetcher.kt @@ -0,0 +1,27 @@ +package me.lsong.mytv.epg.fetcher + +import okhttp3.Response +import java.io.BufferedReader +import java.io.ByteArrayInputStream +import java.io.InputStreamReader +import java.util.zip.GZIPInputStream + +class XmlGzEpgFetcher : EpgFetcher { + override fun isSupport(url: String): Boolean { + return url.endsWith(".gz") + } + + override fun fetch(response: Response): String { + val gzData = response.body!!.bytes() + val stringBuilder = StringBuilder() + GZIPInputStream(ByteArrayInputStream(gzData)).use { gzipInputStream -> + BufferedReader(InputStreamReader(gzipInputStream)).use { reader -> + var line: String? + while (reader.readLine().also { line = it } != null) { + stringBuilder.append(line).append("\n") + } + } + } + return stringBuilder.toString() + } +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/iptv/IptvRepository.kt b/app/src/main/java/me/lsong/mytv/iptv/IptvRepository.kt new file mode 100644 index 0000000..71fe0aa --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/iptv/IptvRepository.kt @@ -0,0 +1,43 @@ +package me.lsong.mytv.iptv + +import android.util.Log +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import okhttp3.OkHttpClient +import okhttp3.Request +import me.lsong.mytv.iptv.parser.IptvParser +import me.lsong.mytv.iptv.parser.M3uData + +/** + * 直播源获取 + */ +class IptvRepository { + /** + * 获取远程直播源数据 + */ + private suspend fun fetchSource(sourceUrl: String) = withContext(Dispatchers.IO) { + val client = OkHttpClient() + val request = Request.Builder().url(sourceUrl).build() + try { + with(client.newCall(request).execute()) { + if (!isSuccessful) { + throw Exception("fetchSource failed: $code") + } + return@with body!!.string().trim() + } + } catch (ex: Exception) { + throw Exception("获取远程直播源失败,请检查网络连接", ex) + } + } + + /** + * 获取直播源列表 + */ + suspend fun getChannelSourceList(sourceUrl: String): M3uData { + val sourceData = fetchSource(sourceUrl) + val parser = IptvParser.instances.first { it.isSupport(sourceUrl, sourceData) } + val m3u = parser.parse(sourceData) + Log.i("iptv","解析直播源完成:${m3u.sources.size}个资源, $sourceUrl") + return m3u + } +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/iptv/TVChannel.kt b/app/src/main/java/me/lsong/mytv/iptv/TVChannel.kt new file mode 100644 index 0000000..120fcd8 --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/iptv/TVChannel.kt @@ -0,0 +1,84 @@ +package me.lsong.mytv.iptv + +import androidx.compose.runtime.Immutable +import androidx.compose.ui.graphics.vector.ImageVector + +data class TVSource( + val tvgId: String?, + val tvgLogo: String?, + val tvgName: String?, + val groupTitle: String?, + val title: String, + val url: String, +) { + val name: String + get() = (tvgName ?: tvgId ?: title).toString() + + companion object { + val EXAMPLE = TVSource( + tvgId = "cctv1", + tvgName = "cctv1", + tvgLogo = "https://live.fanmingming.com/tv/CCTV1.png", + title = "CCTV-1", + groupTitle = "央视", + url = "https://pi.0472.org/chc/ym.m3u8" + ) + } +} + +/** + * 直播源 + */ +@Immutable +data class TVChannel( + val no: String = "", + val icon: ImageVector? = null, + /** + * 直播源名称 + */ + val name: String = "", + /** + * 频道名称 + */ + val title: String = "", + val sources: List = emptyList(), +) { + + // val name: String + // get() = sources.first().name + + // val title: String + // get() = sources.first().title + + val logo: String? + get() = sources.firstNotNullOfOrNull { it.tvgLogo } + + val groupTitle: String? + get() = sources.firstNotNullOfOrNull { it.groupTitle } + /** + * 播放地址列表 + */ + val urls: List + get() = sources.map { it.url } + + companion object { + val EXAMPLE = TVChannel( + title = "测试频道", + sources = listOf( + TVSource.EXAMPLE + ) + ) + } +} + +/** + * 直播源列表 + */ +@Immutable +data class TVChannelList( + val value: List = emptyList(), +) : List by value { + companion object { + val EXAMPLE = TVChannelList(List(10) { i -> TVChannel.EXAMPLE.copy() }) + } +} diff --git a/app/src/main/java/me/lsong/mytv/iptv/TVGroup.kt b/app/src/main/java/me/lsong/mytv/iptv/TVGroup.kt new file mode 100644 index 0000000..6da13fd --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/iptv/TVGroup.kt @@ -0,0 +1,55 @@ +package me.lsong.mytv.iptv + +import androidx.compose.runtime.Immutable + +/** + * 直播源分组 + */ +data class TVGroup( + /** + * 分组名称 + */ + val title: String = "", + /** + * 直播源列表 + */ + val channels: TVChannelList = TVChannelList(), +) { + // val title: String + // get() = name ?: channels.first().groupTitle ?: "其他" + + companion object { + val EXAMPLE = TVGroup( + title = "测试分组", + channels = TVChannelList( + List(10) { idx -> + TVChannel.EXAMPLE + }, + ) + ) + } +} + + +/** + * 直播源分组列表 + */ +@Immutable +data class TVGroupList( + val value: List = emptyList(), +) : List by value { + companion object { + val EXAMPLE = TVGroupList(List(5) { groupIdx -> + TVGroup.EXAMPLE + }) + + fun TVGroupList.findGroupIndex(iptv: TVChannel) = + this.indexOfFirst { group -> group.channels.any { it == iptv } } + + fun TVGroupList.findChannelIndex(iptv: TVChannel) = + this.flatMap { it.channels }.indexOfFirst { it == iptv } + + val TVGroupList.channels: List + get() = this.flatMap { it.channels } + } +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/iptv/parser/IptvParser.kt b/app/src/main/java/me/lsong/mytv/iptv/parser/IptvParser.kt new file mode 100644 index 0000000..22fb95d --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/iptv/parser/IptvParser.kt @@ -0,0 +1,30 @@ +package me.lsong.mytv.iptv.parser + +import me.lsong.mytv.iptv.TVSource + +data class M3uData( + var epgUrl: String?, + val sources: List, +) + +/** + * 直播源数据解析接口 + */ +interface IptvParser { + /** + * 是否支持该直播源格式 + */ + fun isSupport(url: String, data: String): Boolean + + /** + * 解析直播源数据 + */ + suspend fun parse(data: String): M3uData + + companion object { + val instances = listOf( + M3uIptvParser(), + ) + } +} + diff --git a/app/src/main/java/me/lsong/mytv/iptv/parser/M3uIptvParser.kt b/app/src/main/java/me/lsong/mytv/iptv/parser/M3uIptvParser.kt new file mode 100644 index 0000000..44c497d --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/iptv/parser/M3uIptvParser.kt @@ -0,0 +1,55 @@ +package me.lsong.mytv.iptv.parser + +import me.lsong.mytv.iptv.TVSource + + + +class M3uIptvParser : IptvParser { + override fun isSupport(url: String, data: String): Boolean { + return data.startsWith("#EXTM3U") + } + override suspend fun parse(data: String): M3uData { + val lines = data.split("\r\n", "\n").filter { it.isNotBlank() } + val channels = mutableListOf() + var xTvgUrl: String? = null + for (i in lines.indices) { + val line = lines[i] + when { + line.startsWith("#EXTM3U") -> { + xTvgUrl = Regex("x-tvg-url=\"(.+?)\"").find(line)?.groupValues?.get(1)?.trim() + } + line.startsWith("#EXTINF") -> { + if (i + 1 >= lines.size) break // Ensure there's a next line for the URL + + val title = line.split(",").lastOrNull()?.trim() ?: continue + val attributes = parseTvgAttributes(line) + val url = lines[i + 1].trim() + + if (url.isEmpty() || url.startsWith("#")) continue // Skip if URL is empty or another #EXTINF line + + channels.add( + TVSource( + tvgId = attributes["tvg-id"], + tvgName = attributes["tvg-name"], + tvgLogo = attributes["tvg-logo"], + groupTitle = attributes["group-title"], + title = title, + url = url, + ) + ) + } + } + } + return M3uData(epgUrl = xTvgUrl, channels.toList()) + } + + private fun parseTvgAttributes(line: String): Map { + val attributes = mutableMapOf() + val regex = Regex("""(\S+?)="(.+?)"""") + regex.findAll(line).forEach { matchResult -> + val (key, value) = matchResult.destructured + attributes[key] = value.trim() + } + return attributes + } +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/ui/LoadingScreen.kt b/app/src/main/java/me/lsong/mytv/ui/LoadingScreen.kt new file mode 100644 index 0000000..c67f125 --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/LoadingScreen.kt @@ -0,0 +1,237 @@ +package me.lsong.mytv.ui + +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.focusable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.sizeIn +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.widthIn +import androidx.compose.material3.LinearProgressIndicator +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.lifecycle.viewmodel.compose.viewModel +import io.github.alexzhirkevich.qrose.options.QrBallShape +import io.github.alexzhirkevich.qrose.options.QrFrameShape +import io.github.alexzhirkevich.qrose.options.QrPixelShape +import io.github.alexzhirkevich.qrose.options.QrShapes +import io.github.alexzhirkevich.qrose.options.circle +import io.github.alexzhirkevich.qrose.options.roundCorners +import io.github.alexzhirkevich.qrose.rememberQrCodePainter +import me.lsong.mytv.R +import me.lsong.mytv.rememberLeanbackChildPadding +import me.lsong.mytv.ui.components.LeanbackVisible +import me.lsong.mytv.ui.settings.LeanbackSettingsScreen +import me.lsong.mytv.ui.theme.LeanbackTheme +import me.lsong.mytv.ui.utils.HttpServer +import me.lsong.mytv.utils.Constants + +@Composable +fun LoadingScreen( + modifier: Modifier = Modifier, + onBackPressed: () -> Unit = {}, + mainViewModel: MainViewModel = viewModel(), +) { + val uiState by mainViewModel.uiState.collectAsState() + + when (val s = uiState) { + is LeanbackMainUiState.Ready -> LeanbackMainContent( + modifier = modifier, + groupList = s.tvGroupList, + epgList = s.epgList, + onBackPressed = onBackPressed, + ) + + is LeanbackMainUiState.Loading -> LeanbackMainSettingsHandle(onBackPressed = onBackPressed) { + LeanbackMainScreenLoading { s.message } + } + + is LeanbackMainUiState.Error -> LeanbackMainSettingsHandle(onBackPressed = onBackPressed) { + LeanbackMainScreenError({ s.message }) + } + + else -> {} + } +} + +@Composable +private fun LeanbackMainScreenLoading(messageProvider: () -> String?) { + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.Center + ) { + Column( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(10.dp) + ) { + Image( + painter = painterResource(id = R.mipmap.ic_launcher), + contentDescription = "DuckTV", + modifier = Modifier.size(96.dp) + ) + Text( + text = Constants.APP_NAME, + style = MaterialTheme.typography.headlineSmall, + color = MaterialTheme.colorScheme.onBackground, + ) + + LinearProgressIndicator( + modifier = Modifier + .widthIn(300.dp, 800.dp) + .height(8.dp) + ) + + val message = messageProvider() + if (message != null) { + Text( + text = message, + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onBackground.copy(alpha = 0.8f), + modifier = Modifier.sizeIn(maxWidth = 500.dp), + ) + } + } + } +} + +@Preview(device = "id:Android TV (720p)") +@Composable +private fun LeanbackMainScreenLoadingPreview() { + LeanbackTheme { + LeanbackMainScreenLoading { "获取远程直播源(2/10)..." } + } +} + +@Composable +private fun LeanbackMainScreenError( + messageProvider: () -> String?, + serverUrl: String = HttpServer.serverUrl, +) { + val childPadding = rememberLeanbackChildPadding() + + Box(modifier = Modifier.fillMaxSize()) { + Column( + modifier = Modifier + .align(Alignment.BottomStart) + .padding(start = childPadding.start, bottom = childPadding.bottom), + ) { + Text( + text = "加载失败", + style = MaterialTheme.typography.headlineSmall, + color = MaterialTheme.colorScheme.error, + ) + + val message = messageProvider() + if (message != null) { + Text( + text = message, + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.error.copy(alpha = 0.8f), + modifier = Modifier.sizeIn(maxWidth = 500.dp), + ) + } + } + + Box( + modifier = Modifier + .align(Alignment.BottomEnd) + .padding(end = childPadding.end, bottom = childPadding.bottom) + .width(100.dp) + .height(100.dp) + .background( + color = MaterialTheme.colorScheme.onBackground, + shape = MaterialTheme.shapes.medium, + ), + ) { + Image( + modifier = Modifier + .fillMaxSize() + .padding(6.dp), + painter = rememberQrCodePainter( + data = serverUrl, + shapes = QrShapes( + ball = QrBallShape.circle(), + darkPixel = QrPixelShape.roundCorners(), + frame = QrFrameShape.roundCorners(.25f), + ), + ), + contentDescription = serverUrl, + ) + } + } +} + +@Preview(device = "id:Android TV (720p)") +@Composable +private fun LeanbackMainScreenErrorPreview() { + LeanbackTheme { + LeanbackMainScreenError( + { "获取远程直播源失败,请检查网络连接" }, + "http://244.178.44.111:8080", + ) + } +} + +@Preview(device = "id:Android TV (720p)") +@Composable +private fun LeanbackMainScreenErrorLongPreview() { + LeanbackTheme { + LeanbackMainScreenError( + { "Caused by: androidx.media3.datasource.HttpDataSource\$HttpDataSourceException:" + " java.io.IOException: unexpected end of stream on com.android.okhttp.Address@2f10c24d" }, + "http://244.178.44.111:8080", + ) + } +} + +@Composable +private fun LeanbackMainSettingsHandle( + modifier: Modifier = Modifier, + onBackPressed: () -> Unit = {}, + content: @Composable () -> Unit, +) { + val focusRequester = remember { FocusRequester() } + var showSettings by remember { mutableStateOf(false) } + + LaunchedEffect(Unit) { + focusRequester.requestFocus() + } + + LeanbackBackPressHandledArea(onBackPressed = { + if (showSettings) { + showSettings = false + } else { + showSettings = true + } + }) { + Box( + modifier = modifier + .focusRequester(focusRequester) + .focusable() + ) { + content() + LeanbackVisible({ showSettings }) { + LeanbackSettingsScreen() + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/ui/MainContent.kt b/app/src/main/java/me/lsong/mytv/ui/MainContent.kt new file mode 100644 index 0000000..b2eaaff --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/MainContent.kt @@ -0,0 +1,176 @@ +package me.lsong.mytv.ui + +import androidx.compose.foundation.focusable +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxScope +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.input.key.Key +import androidx.compose.ui.input.key.KeyEventType +import androidx.compose.ui.input.key.key +import androidx.compose.ui.input.key.onPreviewKeyEvent +import androidx.compose.ui.input.key.type +import androidx.compose.ui.platform.LocalConfiguration +import androidx.lifecycle.viewmodel.compose.viewModel +import kotlinx.coroutines.delay +import me.lsong.mytv.epg.EpgList +import me.lsong.mytv.iptv.TVGroupList +import me.lsong.mytv.ui.components.LeanbackVisible +import me.lsong.mytv.ui.components.LeanbackMonitorScreen +import me.lsong.mytv.ui.player.MyTvVideoScreen +import me.lsong.mytv.ui.settings.LeanbackSettingsViewModel +import me.lsong.mytv.ui.player.rememberLeanbackVideoPlayerState +import me.lsong.mytv.ui.widgets.MyTvMenu +import me.lsong.mytv.ui.widgets.MyTvNowPlaying +import me.lsong.mytv.utils.SP +import me.lsong.mytv.utils.handleLeanbackDragGestures +import me.lsong.mytv.utils.handleLeanbackKeyEvents + +@Composable +fun LeanbackMainContent( + modifier: Modifier = Modifier, + onBackPressed: () -> Unit = {}, + epgList: EpgList = EpgList(), + groupList: TVGroupList = TVGroupList(), + settingsViewModel: LeanbackSettingsViewModel = viewModel(), +) { + val configuration = LocalConfiguration.current + val videoPlayerState = rememberLeanbackVideoPlayerState( + defaultAspectRatioProvider = { + when (settingsViewModel.videoPlayerAspectRatio) { + SP.VideoPlayerAspectRatio.ORIGINAL -> null + SP.VideoPlayerAspectRatio.SIXTEEN_NINE -> 16f / 9f + SP.VideoPlayerAspectRatio.FOUR_THREE -> 4f / 3f + SP.VideoPlayerAspectRatio.AUTO -> { + configuration.screenHeightDp.toFloat() / configuration.screenWidthDp.toFloat() + } + } + } + ) + val mainContentState = rememberMainContentState( + videoPlayerState = videoPlayerState, + tvGroupList = groupList, + ) + + val focusRequester = remember { FocusRequester() } + LaunchedEffect(Unit) { + // 防止切换到其他界面时焦点丢失 + // TODO 换一个更好的解决方案 + while (true) { + if (!mainContentState.isChannelInfoVisible && !mainContentState.isMenuVisible + ) { + focusRequester.requestFocus() + } + delay(100) + } + } + + LeanbackBackPressHandledArea( + modifier = modifier, + onBackPressed = { + if (mainContentState.isChannelInfoVisible) { + mainContentState.isMenuVisible = false + mainContentState.isChannelInfoVisible = false + } + else if (mainContentState.isMenuVisible) { + mainContentState.isMenuVisible = false + mainContentState.isChannelInfoVisible = false + } else onBackPressed() + }, + ) { + MyTvVideoScreen( + state = videoPlayerState, + showMetadataProvider = { settingsViewModel.debugShowVideoPlayerMetadata }, + modifier = Modifier + .focusRequester(focusRequester) + .focusable() + .handleLeanbackKeyEvents( + onUp = { + if (settingsViewModel.iptvChannelChangeFlip) mainContentState.changeCurrentChannelToNext() + else mainContentState.changeCurrentChannelToPrev() + }, + onDown = { + if (settingsViewModel.iptvChannelChangeFlip) mainContentState.changeCurrentChannelToPrev() + else mainContentState.changeCurrentChannelToNext() + }, + onLeft = { mainContentState.changeToPrevSource() }, + onRight = { mainContentState.changeToNextSource() }, + onSelect = { mainContentState.showChannelInfo() }, + onLongDown = { mainContentState.showMenu() }, + onLongSelect = { mainContentState.showMenu() }, + onSettings = { mainContentState.showMenu() }, + onNumber = { + // if (settingsViewModel.iptvChannelNoSelectEnable) { + // panelChannelNoSelectState.input(it) + // } + }, + ) + .handleLeanbackDragGestures( + onSwipeDown = { + if (settingsViewModel.iptvChannelChangeFlip) mainContentState.changeCurrentChannelToNext() + else mainContentState.changeCurrentChannelToPrev() + }, + onSwipeUp = { + if (settingsViewModel.iptvChannelChangeFlip) mainContentState.changeCurrentChannelToPrev() + else mainContentState.changeCurrentChannelToNext() + }, + onSwipeLeft = { + mainContentState.changeToPrevSource() + }, + onSwipeRight = { + mainContentState.changeToNextSource() + }, + ), + ) + + LeanbackVisible({ mainContentState.isMenuVisible && !mainContentState.isChannelInfoVisible }) { + MyTvMenu( + epgListProvider = { epgList }, + groupListProvider = { groupList }, + channelProvider = { mainContentState.currentChannel }, + onClose = { mainContentState.isMenuVisible = false }, + onSelected = { channel -> mainContentState.changeCurrentChannel(channel) } + ) + } + + LeanbackVisible({ mainContentState.isChannelInfoVisible }) { + MyTvNowPlaying( + modifier = modifier, + epgListProvider = { epgList }, + channelProvider = { mainContentState.currentChannel }, + channelIndexProvider = { mainContentState.currentChannelIndex }, + sourceIndexProvider = { mainContentState.currentSourceIndex }, + videoPlayerMetadataProvider = { videoPlayerState.metadata }, + onClose = { mainContentState.isChannelInfoVisible = false }, + ) + } + + LeanbackVisible({ settingsViewModel.debugShowFps }) { + LeanbackMonitorScreen() + } + + } +} + +@Composable +fun LeanbackBackPressHandledArea( + onBackPressed: () -> Unit, + modifier: Modifier = Modifier, + content: @Composable BoxScope.() -> Unit, +) = Box( + modifier = Modifier + .onPreviewKeyEvent { + if (it.key == Key.Back && it.type == KeyEventType.KeyUp) { + onBackPressed() + true + } else { + false + } + } + .then(modifier), + content = content, +) \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/ui/MainContentState.kt b/app/src/main/java/me/lsong/mytv/ui/MainContentState.kt new file mode 100644 index 0000000..b74fa4d --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/MainContentState.kt @@ -0,0 +1,177 @@ +package me.lsong.mytv.ui + +import android.util.Log +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Stable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import me.lsong.mytv.iptv.TVChannel +import me.lsong.mytv.iptv.TVGroupList +import me.lsong.mytv.iptv.TVGroupList.Companion.channels +import me.lsong.mytv.iptv.TVGroupList.Companion.findChannelIndex +import me.lsong.mytv.utils.Constants +import me.lsong.mytv.ui.player.LeanbackVideoPlayerState +import me.lsong.mytv.ui.player.rememberLeanbackVideoPlayerState +import me.lsong.mytv.utils.SP +import kotlin.math.max + +@Stable +class MainContentState( + coroutineScope: CoroutineScope, + private val videoPlayerState: LeanbackVideoPlayerState, + private val tvGroupList: TVGroupList, +) { + private var _currentChannel by mutableStateOf(TVChannel()) + val currentChannel get() = _currentChannel + + private var _currentIptvUrlIdx by mutableIntStateOf(0) + val currentSourceIndex get() = _currentIptvUrlIdx + + private var _isChannelInfoVisible by mutableStateOf(false) + var isChannelInfoVisible + get() = _isChannelInfoVisible + set(value) { + _isChannelInfoVisible = value + } + + private var _isMenuVisible by mutableStateOf(false) + var isMenuVisible + get() = _isMenuVisible + set(value) { + _isMenuVisible = value + } + + val currentChannelIndex + get() = tvGroupList.findChannelIndex(_currentChannel) + + init { + changeCurrentChannel(tvGroupList.channels.getOrElse(SP.iptvLastIptvIdx) { + tvGroupList.firstOrNull()?.channels?.firstOrNull() ?: TVChannel() + }) + + videoPlayerState.onReady { + coroutineScope.launch { + val name = _currentChannel.name + val urlIdx = _currentIptvUrlIdx + delay(Constants.UI_TEMP_PANEL_SCREEN_SHOW_DURATION) + if (name == _currentChannel.name && urlIdx == _currentIptvUrlIdx) { + // _isTempPanelVisible = false + } + } + + // 记忆可播放的域名 + SP.iptvPlayableHostList += getUrlHost(_currentChannel.urls[_currentIptvUrlIdx]) + } + + videoPlayerState.onError { + if (_currentIptvUrlIdx < _currentChannel.urls.size - 1) { + changeCurrentChannel(_currentChannel, _currentIptvUrlIdx + 1) + } + + // 从记忆中删除不可播放的域名 + SP.iptvPlayableHostList -= getUrlHost(_currentChannel.urls[_currentIptvUrlIdx]) + } + + videoPlayerState.onCutoff { + changeCurrentChannel(_currentChannel, _currentIptvUrlIdx) + } + } + + private fun getPrevChannel(): TVChannel { + val currentIndex = tvGroupList.findChannelIndex(_currentChannel) + return tvGroupList.channels.getOrElse(currentIndex - 1) { + tvGroupList.lastOrNull()?.channels?.lastOrNull() ?: TVChannel() + } + } + + private fun getNextChannel(): TVChannel { + val currentIndex = tvGroupList.findChannelIndex(_currentChannel) + return tvGroupList.channels.getOrElse(currentIndex + 1) { + tvGroupList.firstOrNull()?.channels?.firstOrNull() ?: TVChannel() + } + } + + fun changeCurrentChannel(channel: TVChannel, urlIdx: Int? = null) { + // isChannelInfoVisible = false + if (channel == _currentChannel && urlIdx == null) return + if (channel == _currentChannel && urlIdx != _currentIptvUrlIdx) { + SP.iptvPlayableHostList -= getUrlHost(_currentChannel.urls[_currentIptvUrlIdx]) + } + // _isTempPanelVisible = true + + _currentChannel = channel + SP.iptvLastIptvIdx = currentChannelIndex + + _currentIptvUrlIdx = if (urlIdx == null) { + // 优先从记忆中选择可播放的域名 + max(0, _currentChannel.urls.indexOfFirst { + SP.iptvPlayableHostList.contains(getUrlHost(it)) + }) + } else { + (urlIdx + _currentChannel.urls.size) % _currentChannel.urls.size + } + val url = channel.urls[_currentIptvUrlIdx] + Log.d("Player", "播放${channel.name}(${_currentIptvUrlIdx + 1}/${_currentChannel.urls.size}): $url") + videoPlayerState.prepare(url) + } + + fun changeCurrentChannelToPrev() { + changeCurrentChannel(getPrevChannel()) + } + + fun changeCurrentChannelToNext() { + changeCurrentChannel(getNextChannel()) + } + + + fun changeToPrevSource(){ + if (currentChannel.urls.size > 1) { + changeCurrentChannel( + channel =currentChannel, + urlIdx = currentSourceIndex - 1, + ) + } + } + fun changeToNextSource(){ + if (currentChannel.urls.size > 1) { + changeCurrentChannel( + channel = currentChannel, + urlIdx = currentSourceIndex + 1, + ) + } + } + + fun showChannelInfo() { + isMenuVisible = false + isChannelInfoVisible = true + } + + fun showMenu() { + isMenuVisible = true + isChannelInfoVisible = false + } +} + +@Composable +fun rememberMainContentState( + coroutineScope: CoroutineScope = rememberCoroutineScope(), + videoPlayerState: LeanbackVideoPlayerState = rememberLeanbackVideoPlayerState(), + tvGroupList: TVGroupList = TVGroupList(), +) = remember { + MainContentState( + coroutineScope = coroutineScope, + videoPlayerState = videoPlayerState, + tvGroupList = tvGroupList, + ) +} + +private fun getUrlHost(url: String): String { + return url.split("://").getOrElse(1) { "" }.split("/").firstOrNull() ?: url +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/ui/MainViewModel.kt b/app/src/main/java/me/lsong/mytv/ui/MainViewModel.kt new file mode 100644 index 0000000..ee786ce --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/MainViewModel.kt @@ -0,0 +1,136 @@ +package me.lsong.mytv.ui + +import android.util.Log +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.catch +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.launch +import me.lsong.mytv.epg.EpgChannel +import me.lsong.mytv.epg.EpgList +import me.lsong.mytv.iptv.TVChannel +import me.lsong.mytv.iptv.TVChannelList +import me.lsong.mytv.iptv.TVGroup +import me.lsong.mytv.iptv.TVGroupList +import me.lsong.mytv.iptv.TVSource +import me.lsong.mytv.epg.EpgRepository +import me.lsong.mytv.iptv.IptvRepository +import me.lsong.mytv.utils.Constants +import me.lsong.mytv.utils.SP + +class MainViewModel : ViewModel() { + private val iptvRepository = IptvRepository() + private val epgRepository = EpgRepository() + + private val _uiState = MutableStateFlow(LeanbackMainUiState.Loading()) + val uiState: StateFlow = _uiState.asStateFlow() + + init { + viewModelScope.launch { + refreshData() + } + } + + private suspend fun refreshData() { + var epgUrls = emptyArray() + var iptvUrls = emptyArray() + + // SP.iptvSourceUrls = setOf( + // "https://raw.githubusercontent.com/YueChan/Live/main/IPTV.m3u", + // "https://raw.githubusercontent.com/fanmingming/live/main/tv/m3u/ipv6.m3u", + // "https://raw.githubusercontent.com/fanmingming/live/main/tv/m3u/itv.m3u", + // "https://raw.githubusercontent.com/fanmingming/live/main/tv/m3u/index.m3u", + // ) + + if (SP.iptvSourceUrls.isNotEmpty()) { + iptvUrls += SP.iptvSourceUrls + } + if (iptvUrls.isEmpty()) { + iptvUrls += Constants.IPTV_SOURCE_URL + } + flow { + val allSources = mutableListOf() + iptvUrls.forEachIndexed { index, url -> + emit(LoadingState(index + 1, iptvUrls.size, url, "IPTV")) + val m3u = fetchDataWithRetry { iptvRepository.getChannelSourceList(sourceUrl = url) } + allSources.addAll(m3u.sources) + if (m3u.epgUrl != null) + epgUrls += (m3u.epgUrl).toString() + } + if (epgUrls.isEmpty()) { + epgUrls += Constants.EPG_XML_URL + } + val epgChannels = mutableListOf() + epgUrls.distinct().toTypedArray().forEachIndexed { index, url -> + emit(LoadingState(index + 1, epgUrls.size, url, "EPG")) + val epg = fetchDataWithRetry { epgRepository.getEpgList(url) } + epgChannels.addAll(epg.value) + } + val groupList = processChannelSources(allSources) + emit(DataResult(groupList, EpgList(epgChannels.distinctBy{ it.id }))) + } + .catch { error -> + _uiState.value = LeanbackMainUiState.Error(error.message) + SP.iptvSourceUrlHistoryList -= iptvUrls.toList() + } + .collect { result -> + when (result) { + is LoadingState -> { + _uiState.value = + LeanbackMainUiState.Loading("获取${result.type}数据(${result.currentSource}/${result.totalSources})...") + } + is DataResult -> { + Log.d("epg","合并节目单完成:${result.epgList.size}") + _uiState.value = LeanbackMainUiState.Ready( + tvGroupList = result.groupList, + epgList = result.epgList + ) + SP.iptvSourceUrlHistoryList += iptvUrls.toList() + } + } + } + } + + private suspend fun fetchDataWithRetry(fetch: suspend () -> T): T { + var attempt = 0 + while (attempt < Constants.HTTP_RETRY_COUNT) { + try { + return fetch() + } catch (e: Exception) { + attempt++ + if (attempt >= Constants.HTTP_RETRY_COUNT) throw e + delay(Constants.HTTP_RETRY_INTERVAL) + } + } + throw IllegalStateException("Failed to fetch data after $attempt attempts") + } + + private fun processChannelSources(sources: List): TVGroupList { + val sourceList = TVChannelList(sources.groupBy { it.name }.map { channelEntry -> + TVChannel( + name = channelEntry.key, + title = channelEntry.value.first().title, + sources = channelEntry.value) + }) + val groupList = TVGroupList(sourceList.groupBy { it.groupTitle ?: "其他" }.map { groupEntry -> + TVGroup(title = groupEntry.key, channels = TVChannelList(groupEntry.value)) + }) + return groupList + } + + private data class LoadingState(val currentSource: Int, val totalSources: Int, val currentUrl: String, val type: String) + private data class DataResult(val groupList: TVGroupList, val epgList: EpgList) +} + +sealed interface LeanbackMainUiState { + data class Loading(val message: String? = null) : LeanbackMainUiState + data class Error(val message: String? = null) : LeanbackMainUiState + data class Ready( + val tvGroupList: TVGroupList = TVGroupList(), + val epgList: EpgList = EpgList(), + ) : LeanbackMainUiState +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/ui/components/ChannelInfo.kt b/app/src/main/java/me/lsong/mytv/ui/components/ChannelInfo.kt new file mode 100644 index 0000000..082901d --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/components/ChannelInfo.kt @@ -0,0 +1,97 @@ +package me.lsong.mytv.ui.components + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.LocalTextStyle +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import me.lsong.mytv.iptv.TVChannel +import me.lsong.mytv.ui.theme.LeanbackTheme +import me.lsong.mytv.utils.isIPv6 + +@Composable +fun MyTvChannelInfo( + modifier: Modifier = Modifier, + channelProvider: () -> TVChannel = { TVChannel() }, + channelIndexProvider: () -> Int = { 0 }, + channelSourceIndexProvider: () -> Int = { 0 }, +) { + val channel = channelProvider() + val channelIndex = channelIndexProvider(); + val sourceIndex = channelSourceIndexProvider() + val channelNo = (channelIndex+1).toString(); + Column(modifier = modifier) { + Row(verticalAlignment = Alignment.CenterVertically) { + Text( + text = channelNo.padStart(2, '0'), + style = MaterialTheme.typography.headlineLarge, + modifier = Modifier.alignByBaseline(), + maxLines = 1, + ) + + Spacer(modifier = Modifier.width(6.dp)) + + Text( + text = channel.title, + style = MaterialTheme.typography.headlineLarge, + modifier = Modifier.alignByBaseline(), + maxLines = 1, + ) + + Spacer(modifier = Modifier.width(6.dp)) + + Row( + horizontalArrangement = Arrangement.spacedBy(4.dp), + ) { + CompositionLocalProvider( + LocalTextStyle provides MaterialTheme.typography.labelMedium, + LocalContentColor provides LocalContentColor.current.copy(alpha = 0.8f), + ) { + val textModifier = Modifier + .background( + LocalContentColor.current.copy(alpha = 0.3f), + MaterialTheme.shapes.extraSmall, + ) + .padding(vertical = 2.dp, horizontal = 4.dp) + + // 多线路标识 + if (channel.urls.size > 1) { + Text( + text = "${sourceIndex + 1}/${channel.urls.size}", + modifier = textModifier, + ) + } + + // ipv4、iptv6标识 + Text( + text = if (channel.urls[sourceIndex].isIPv6()) "IPV6" else "IPV4", + modifier = textModifier, + ) + } + } + } + } +} + +@Preview +@Composable +private fun MyTvChannelInfoPreview() { + LeanbackTheme { + MyTvChannelInfo( + channelProvider = { TVChannel.EXAMPLE }, + channelSourceIndexProvider = { 1 }, + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/ui/components/ChannelItem.kt b/app/src/main/java/me/lsong/mytv/ui/components/ChannelItem.kt new file mode 100644 index 0000000..4f5b2d1 --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/components/ChannelItem.kt @@ -0,0 +1,157 @@ +package me.lsong.mytv.ui.components + +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.padding +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.focus.onFocusChanged +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import me.lsong.mytv.epg.EpgProgramme +import me.lsong.mytv.iptv.TVChannel +import me.lsong.mytv.ui.theme.LeanbackTheme +import me.lsong.mytv.utils.handleLeanbackKeyEvents + +import androidx.compose.foundation.layout.* +import androidx.compose.material3.LocalContentColor +import androidx.compose.runtime.* +import androidx.compose.ui.draw.clip +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.text.style.TextAlign +import androidx.tv.material3.ListItemDefaults +import coil.compose.AsyncImage + +@Composable +fun MyTvChannelItem( + modifier: Modifier = Modifier, + channelProvider: () -> TVChannel = { TVChannel() }, + epgProgrammeProvider: () -> EpgProgramme? = { null }, + focusRequesterProvider: () -> FocusRequester = { FocusRequester() }, + isSelectedProvider: () -> Boolean = { false }, + isFocusedProvider: () -> Boolean = { false }, + onSelected: () -> Unit = {}, + onFocused: () -> Unit = {}, + onFavoriteToggle: () -> Unit = {}, +) { + val iptv = channelProvider() + val focusRequester = focusRequesterProvider() + val currentProgramme = epgProgrammeProvider() + var isFocused by remember { mutableStateOf(false) } + + LaunchedEffect(Unit) { + if (isFocusedProvider()) { + // onInitialFocused() + // focusRequester.requestFocus() + } + } + + CompositionLocalProvider( + LocalContentColor provides if (isFocused) MaterialTheme.colorScheme.background + else MaterialTheme.colorScheme.onBackground + ) { + Box( + modifier = Modifier.clip(ListItemDefaults.shape().shape), + ) { + androidx.tv.material3.ListItem( + modifier = modifier + .focusRequester(focusRequester) + .onFocusChanged { + isFocused = it.isFocused || it.hasFocus + if (isFocused) { + onFocused() + } + } + .handleLeanbackKeyEvents( + key = iptv.hashCode(), + onSelect = { + if (isFocused) onSelected() + else focusRequester.requestFocus() + }, + onLongSelect = { + if (isFocused) onFavoriteToggle() + else focusRequester.requestFocus() + }, + ), + colors = ListItemDefaults.colors( + // containerColor = MaterialTheme.colorScheme.surfaceColorAtElevation(4.dp), + focusedContainerColor = MaterialTheme.colorScheme.onBackground, + selectedContainerColor = MaterialTheme.colorScheme.surfaceVariant.copy( + alpha = 0.5f + ), + ), + selected = isSelectedProvider(), + onClick = { }, + leadingContent = { + if (iptv.icon != null) { + androidx.tv.material3.Icon(iptv.icon, iptv.title) + }else if (iptv.logo.isNullOrEmpty()) { + Text( + modifier = modifier + .size(40.dp) + .background(color = MaterialTheme.colorScheme.primary) + .wrapContentHeight(align = Alignment.CenterVertically), + textAlign = TextAlign.Center, + text = iptv.title.take(2).uppercase(), + style = MaterialTheme.typography.titleMedium, + color = MaterialTheme.colorScheme.onPrimary, + ) + } else { + AsyncImage( + model = iptv.logo, + contentDescription = iptv.title, + modifier = Modifier.size(40.dp), + contentScale = ContentScale.Fit, + ) + } + }, + headlineContent = { + Text(text = iptv.title, maxLines = 2) + }, + supportingContent = { + if (currentProgramme?.title != null) { + Text( + text = currentProgramme.title, + style = MaterialTheme.typography.labelMedium, + maxLines = 1, + modifier = Modifier.alpha(0.8f), + ) + } + }, + ) + } + } +} + +@Preview +@Composable +private fun MyTvChannelItemPreview() { + LeanbackTheme { + Column( + modifier = Modifier.padding(20.dp), + verticalArrangement = Arrangement.spacedBy(20.dp), + ) { + MyTvChannelItem( + channelProvider = { TVChannel.EXAMPLE }, + ) + + MyTvChannelItem( + isFocusedProvider = { true }, + channelProvider = { TVChannel.EXAMPLE }, + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/ui/components/ChannelList.kt b/app/src/main/java/me/lsong/mytv/ui/components/ChannelList.kt new file mode 100644 index 0000000..5a43c41 --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/components/ChannelList.kt @@ -0,0 +1,102 @@ +package me.lsong.mytv.ui.components + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.snapshotFlow +import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.tv.foundation.lazy.list.TvLazyColumn +import androidx.tv.foundation.lazy.list.TvLazyListState +import androidx.tv.foundation.lazy.list.itemsIndexed +import kotlinx.coroutines.flow.distinctUntilChanged +import me.lsong.mytv.epg.EpgList +import me.lsong.mytv.epg.EpgList.Companion.currentProgrammes +import me.lsong.mytv.iptv.TVChannel +import me.lsong.mytv.iptv.TVChannelList +import me.lsong.mytv.ui.theme.LeanbackTheme +import kotlin.math.max + +@Composable +fun MyTvChannelList( + modifier: Modifier = Modifier, + epgListProvider: () -> EpgList = { EpgList() }, + channelsProvider: () -> TVChannelList = { TVChannelList() }, + focusedProvider: () -> TVChannel = { TVChannel() }, + onUserAction: () -> Unit = {}, + onSelected: (TVChannel) -> Unit = {}, + onFocused: (TVChannel) -> Unit = {}, + onFavoriteToggle: (TVChannel) -> Unit = {}, +) { + val channelList = channelsProvider() + val focusedChannel = focusedProvider() + + val hasFocused by rememberSaveable { mutableStateOf(!channelList.contains(focusedChannel)) } + val itemFocusRequesterList = remember(channelList) { + List(channelList.size) { FocusRequester() } + } + val focusedIptv by remember(channelList) { mutableStateOf(focusedChannel) } + val listState = remember(channelsProvider()) { + TvLazyListState( + if (hasFocused) 0 + else max(0, channelList.indexOf(focusedChannel) - 2) + ) + } + + LaunchedEffect(listState) { + snapshotFlow { listState.isScrollInProgress } + .distinctUntilChanged() + .collect { _ -> onUserAction() } + } + + TvLazyColumn( + state = listState, + contentPadding = PaddingValues(8.dp), + verticalArrangement = Arrangement.spacedBy(8.dp), + modifier = modifier + .fillMaxHeight() + .width(250.dp) + .background(MaterialTheme.colorScheme.background.copy(0.8f)), + ) { + itemsIndexed(channelList, key = { _, iptv -> iptv.hashCode() }) { index, iptv -> + val isSelected by remember { derivedStateOf { iptv == focusedIptv } } + val initialFocused by remember { + derivedStateOf { !hasFocused && iptv == focusedChannel } + } + MyTvChannelItem( + channelProvider = { iptv }, + epgProgrammeProvider = { epgListProvider().currentProgrammes(iptv)?.now }, + focusRequesterProvider = { itemFocusRequesterList[index] }, + isSelectedProvider = { isSelected }, + isFocusedProvider = { initialFocused }, + onSelected = { onSelected(iptv) }, + onFocused = { onFocused(iptv) }, + onFavoriteToggle = { onFavoriteToggle(iptv) }, + ) + } + } +} + +@Preview +@Composable +private fun MyTvChannelListPreview() { + LeanbackTheme { + MyTvChannelList( + modifier = Modifier.padding(20.dp), + channelsProvider = { TVChannelList.EXAMPLE }, + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/ui/components/DateTime.kt b/app/src/main/java/me/lsong/mytv/ui/components/DateTime.kt new file mode 100644 index 0000000..4c3fd18 --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/components/DateTime.kt @@ -0,0 +1,65 @@ +package me.lsong.mytv.ui.components + +import androidx.compose.foundation.layout.Column +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableLongStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview +import kotlinx.coroutines.delay +import me.lsong.mytv.ui.theme.LeanbackTheme +import java.text.SimpleDateFormat +import java.util.Locale + +@Composable +fun LeanbackPanelDateTime( + modifier: Modifier = Modifier, + timestamp: Long = rememberTimestamp(), +) { + val timeFormat = SimpleDateFormat("HH:mm:ss", Locale.getDefault()) + val dateFormat = SimpleDateFormat("MM/dd EEE", Locale.getDefault()) + + Column( + modifier = modifier, + horizontalAlignment = Alignment.CenterHorizontally, + ) { + Text( + text = dateFormat.format(timestamp), + style = MaterialTheme.typography.labelSmall, + color = MaterialTheme.colorScheme.onBackground, + ) + Text( + text = timeFormat.format(timestamp), + style = MaterialTheme.typography.titleLarge, + color = MaterialTheme.colorScheme.onBackground, + ) + } +} + +@Preview +@Composable +private fun LeanbackPanelDateTimePreview() { + LeanbackTheme { + LeanbackPanelDateTime() + } +} + +@Composable +private fun rememberTimestamp(): Long { + var timestamp by remember { mutableLongStateOf(System.currentTimeMillis()) } + + LaunchedEffect(Unit) { + while (true) { + delay(1000) + timestamp = System.currentTimeMillis() + } + } + + return timestamp +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/ui/components/EpgList.kt b/app/src/main/java/me/lsong/mytv/ui/components/EpgList.kt new file mode 100644 index 0000000..622bc3e --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/components/EpgList.kt @@ -0,0 +1,354 @@ +package me.lsong.mytv.ui.components + +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.PlayArrow +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.runtime.snapshotFlow +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.focus.onFocusChanged +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.tv.foundation.lazy.list.TvLazyRow +import androidx.tv.foundation.lazy.list.items +import androidx.tv.foundation.lazy.list.rememberTvLazyListState +import androidx.tv.material3.Border +import androidx.tv.material3.CardDefaults +import kotlinx.coroutines.flow.distinctUntilChanged +import me.lsong.mytv.rememberLeanbackChildPadding +import me.lsong.mytv.epg.EpgChannel +import me.lsong.mytv.epg.EpgChannel.Companion.currentProgrammes +import me.lsong.mytv.epg.EpgProgramme +import me.lsong.mytv.epg.EpgProgramme.Companion.isLive +import me.lsong.mytv.ui.theme.LeanbackTheme +import me.lsong.mytv.utils.Constants.TIME_ZONE +import me.lsong.mytv.utils.handleLeanbackKeyEvents +import java.text.SimpleDateFormat + +@Composable +private fun MyTvEpgDayItem( + modifier: Modifier = Modifier, + dayProvider: () -> String = { "" }, + currentDayProvider: () -> String = { "" }, + onChangeCurrentDay: () -> Unit = {}, + onFocused: () -> Unit = {}, +) { + val day = dayProvider() + val dateFormat = SimpleDateFormat("E MM-dd", TIME_ZONE) + val today = dateFormat.format(System.currentTimeMillis()) + val tomorrow = dateFormat.format(System.currentTimeMillis() + 24 * 3600 * 1000) + val dayAfterTomorrow = dateFormat.format(System.currentTimeMillis() + 48 * 3600 * 1000) + + val currentDay = currentDayProvider() + val focusRequester = remember { FocusRequester() } + var isFocused by remember { mutableStateOf(false) } + val isSelected = remember(currentDay) { currentDay == day } + + LaunchedEffect(Unit) { + if (day == today) { + focusRequester.requestFocus() + onChangeCurrentDay() + } + } + + androidx.tv.material3.Card( + onClick = { onChangeCurrentDay() }, + modifier = modifier + .width(130.dp) + .height(50.dp) + .focusRequester(focusRequester) + .onFocusChanged { + isFocused = it.isFocused || it.hasFocus + if (isFocused) onFocused() + } + .handleLeanbackKeyEvents( + onSelect = { + onChangeCurrentDay() + true + }, + ), + colors = CardDefaults.colors( + containerColor = when { + isSelected -> MaterialTheme.colorScheme.onBackground + isFocused -> MaterialTheme.colorScheme.onBackground + else -> Color.Transparent + }, + ), + border = CardDefaults.border( + focusedBorder = Border( + border = BorderStroke(width = 2.dp, color = MaterialTheme.colorScheme.onBackground), + ), + border = Border( + border = BorderStroke( + width = if (isSelected) 2.dp else 1.dp, + color = MaterialTheme.colorScheme.onBackground + ) + ) + ), + ){ + Column( + modifier = Modifier.fillMaxSize(), + verticalArrangement = Arrangement.SpaceAround, + ) { + val key = day.split(" ") + Text( + text = when (day) { + today -> "今天" + tomorrow -> "明天" + dayAfterTomorrow -> "后天" + else -> key[0] + }, + modifier = Modifier.fillMaxWidth(), + textAlign = TextAlign.Center, + color = if (isSelected || isFocused) MaterialTheme.colorScheme.background + else MaterialTheme.colorScheme.onBackground, + ) + + Text( + text = key[1], + modifier = Modifier.fillMaxWidth(), + textAlign = TextAlign.Center, + style = MaterialTheme.typography.labelMedium, + color = if (isSelected || isFocused) MaterialTheme.colorScheme.background + else MaterialTheme.colorScheme.onBackground, + ) + } + } +} + +@Composable +fun MyTvEpgView( + modifier: Modifier = Modifier, + epgProvider: () -> EpgChannel? = { EpgChannel() }, + onUserAction: () -> Unit = {}, +) { + val dateFormat = SimpleDateFormat("E MM-dd", TIME_ZONE) + val today = dateFormat.format(System.currentTimeMillis()) + val epg = epgProvider() + if (epg != null && epg.programmes.isNotEmpty()) { + val programmesGroup = remember(epg) { + epg.programmes.groupBy { dateFormat.format(it.startAt) } + } + var currentDay by remember { mutableStateOf(today) } + val programmes = remember(currentDay, programmesGroup) { + programmesGroup.getOrElse(currentDay) { emptyList() } + } + + val programmesListState = rememberTvLazyListState() + val daysListState = rememberTvLazyListState() + val childPadding = rememberLeanbackChildPadding() + + // Find the index of the live programme + val liveIndex = remember(programmes) { + programmes.indexOfFirst { it.isLive() } + } + + // Scroll to the live programme + LaunchedEffect(liveIndex) { + if (liveIndex != -1) { + programmesListState.scrollToItem(liveIndex) + } + } + + LaunchedEffect(programmesListState) { + snapshotFlow { programmesListState.isScrollInProgress } + .distinctUntilChanged() + .collect { _ -> onUserAction() } + } + LaunchedEffect(daysListState) { + snapshotFlow { daysListState.isScrollInProgress } + .distinctUntilChanged() + .collect { _ -> onUserAction() } + } + + Column { + Column ( + modifier = modifier.padding(start = childPadding.start) + ){ + Text( + text = "正在播放:${epg.currentProgrammes()?.now?.title ?: "无节目"}", + maxLines = 1, + ) + Text( + text = "稍后播放:${epg.currentProgrammes()?.next?.title ?: "无节目"}", + maxLines = 1, + ) + } + Spacer(modifier = Modifier.padding(6.dp)) + TvLazyRow( + modifier = modifier, + state = daysListState, + horizontalArrangement = Arrangement.spacedBy(14.dp), + contentPadding = PaddingValues( + start = childPadding.start, + end = childPadding.end, + ), + ) { + items(programmesGroup.keys.toList()) { + MyTvEpgDayItem( + dayProvider = { it }, + currentDayProvider = { currentDay }, + onChangeCurrentDay = { currentDay = it }, + ) + } + } + Spacer(modifier = Modifier.padding(6.dp)) + + TvLazyRow( + modifier = modifier, + state = programmesListState, + horizontalArrangement = Arrangement.spacedBy(14.dp), + contentPadding = PaddingValues( + start = childPadding.start, + end = childPadding.end, + ), + ) { + items(programmes) { programme -> + MyTvEpgItem( + currentProgrammeProvider = { programme }, + ) + } + } + } + } +} + +@Composable +fun MyTvEpgItem( + modifier: Modifier = Modifier, + currentProgrammeProvider: () -> EpgProgramme, + onFocused: () -> Unit = {}, + onClick: () -> Unit = {}, +) { + var isFocused by remember { mutableStateOf(false) } + val focusRequester = remember { FocusRequester() } + val programme = currentProgrammeProvider() + val timeFormat = SimpleDateFormat("HH:mm", TIME_ZONE) + val isLive = programme.isLive() + + LaunchedEffect(isLive) { + if (isLive) { + focusRequester.requestFocus() + } + } + + androidx.tv.material3.Card( + onClick = onClick, + modifier = modifier + .width(130.dp) + .height(54.dp) + .focusRequester(focusRequester) + .onFocusChanged { + isFocused = it.isFocused || it.hasFocus + if (isFocused) onFocused() + } + .handleLeanbackKeyEvents( + onSelect = { + onClick() + true + }, + ), + colors = CardDefaults.colors( + containerColor = when { + isLive -> MaterialTheme.colorScheme.onBackground + isFocused -> MaterialTheme.colorScheme.onSurface + else -> Color.Transparent + }, + ), + border = CardDefaults.border( + focusedBorder = Border( + border = BorderStroke(width = 2.dp, color = MaterialTheme.colorScheme.onBackground), + ), + border = Border( + border = BorderStroke( + width = if (isLive) 2.dp else 1.dp, + color = if (isLive) MaterialTheme.colorScheme.onBackground + else MaterialTheme.colorScheme.onBackground + ) + ) + ), + ) { + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier + .fillMaxSize() + .padding(horizontal = 8.dp, vertical = 4.dp), + ) { + Column( + modifier = Modifier + .weight(1f) + .fillMaxHeight(), + verticalArrangement = Arrangement.SpaceAround, + ) { + val start = timeFormat.format(programme.startAt) + val end = timeFormat.format(programme.endAt) + Text( + text = "$start ~ $end", + style = MaterialTheme.typography.labelMedium, + color = if (isLive || isFocused) MaterialTheme.colorScheme.background + else MaterialTheme.colorScheme.onBackground, + ) + + Text( + text = programme.title, + style = MaterialTheme.typography.labelSmall, + maxLines = 1, + color = if (isLive || isFocused) MaterialTheme.colorScheme.background + else MaterialTheme.colorScheme.onBackground, + ) + } + if (isLive) { + Icon( + Icons.Default.PlayArrow, + contentDescription = "playing", + tint = MaterialTheme.colorScheme.background, + ) + } + } + } +} + +@Preview +@Composable +private fun EpgListPreview() { + LeanbackTheme { + MyTvEpgView( + epgProvider = { + EpgChannel( + id = "CCTV1", + programmes = List(200) { index -> + EpgProgramme( + title = "节目$index", + startAt = System.currentTimeMillis() - 3600 * 1000 * 24 * 5 + index * 3600 * 1000, + endAt = System.currentTimeMillis() - 3600 * 1000 * 24 * 5 + index * 3600 * 1000 + 3600 * 1000 + ) + } + ) + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/ui/components/GroupList.kt b/app/src/main/java/me/lsong/mytv/ui/components/GroupList.kt new file mode 100644 index 0000000..3fb2e39 --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/components/GroupList.kt @@ -0,0 +1,170 @@ +package me.lsong.mytv.ui.components + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue +import androidx.compose.runtime.snapshotFlow +import androidx.compose.ui.ExperimentalComposeUiApi +import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusProperties +import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.focus.onFocusChanged +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.tv.foundation.lazy.list.TvLazyColumn +import androidx.tv.foundation.lazy.list.items +import androidx.tv.foundation.lazy.list.rememberTvLazyListState +import androidx.tv.material3.ListItemDefaults +import kotlinx.coroutines.flow.distinctUntilChanged +import me.lsong.mytv.iptv.TVGroup +import me.lsong.mytv.iptv.TVGroupList +import me.lsong.mytv.ui.theme.LeanbackTheme +import me.lsong.mytv.utils.handleLeanbackKeyEvents +import kotlin.math.max + +@OptIn(ExperimentalComposeUiApi::class) +@Composable +fun MyTvGroupList( + modifier: Modifier = Modifier, + groupListProvider: () -> TVGroupList = { TVGroupList() }, + focusedGroupProvider: () -> TVGroup = { TVGroup() }, + exitFocusRequesterProvider: () -> FocusRequester = { FocusRequester.Default }, + onGroupFocused: (TVGroup) -> Unit = {}, + onUserAction: () -> Unit = {}, +) { + val iptvGroupList = groupListProvider() + val initialIptvGroup = focusedGroupProvider() + val focusRequester = remember { FocusRequester() } + var focusedIptvGroup by remember { mutableStateOf(initialIptvGroup) } + + val listState = rememberTvLazyListState(max(0, iptvGroupList.indexOf(initialIptvGroup) - 2)) + + LaunchedEffect(listState) { + snapshotFlow { listState.isScrollInProgress } + .distinctUntilChanged() + .collect { _ -> onUserAction() } + } + + TvLazyColumn( + state = listState, + contentPadding = PaddingValues(8.dp), + verticalArrangement = Arrangement.spacedBy(8.dp), + modifier = modifier + .width(190.dp) + .fillMaxHeight() + .background(MaterialTheme.colorScheme.background.copy(0.9f)) + .focusRequester(focusRequester) + .focusProperties { + exit = { + focusRequester.saveFocusedChild() + exitFocusRequesterProvider() + } + enter = { + if (focusRequester.restoreFocusedChild()) FocusRequester.Cancel + else FocusRequester.Default + } + }, + ) { + items(iptvGroupList) { iptvGroup -> + val isSelected by remember { derivedStateOf { iptvGroup == focusedIptvGroup } } + MyTvGroupItem( + groupProvider = { iptvGroup }, + isSelectedProvider = { isSelected }, + isFocusedProvider = { iptvGroup == initialIptvGroup }, + onFocused = { + focusedIptvGroup = it + onGroupFocused(it) + }, + ) + } + + } +} + +@Composable +private fun MyTvGroupItem( + modifier: Modifier = Modifier, + groupProvider: () -> TVGroup = { TVGroup() }, + isSelectedProvider: () -> Boolean = { false }, + isFocusedProvider: () -> Boolean = { false }, + onFocused: (TVGroup) -> Unit = {}, +) { + val iptvGroup = groupProvider() + val focusRequester = remember { FocusRequester() } + var hasFocused by rememberSaveable { mutableStateOf(false) } + var isFocused by remember { mutableStateOf(false) } + + LaunchedEffect(Unit) { + if (!hasFocused && isFocusedProvider()) { + focusRequester.requestFocus() + } + hasFocused = true + } + + CompositionLocalProvider( + LocalContentColor provides if (isFocused) MaterialTheme.colorScheme.background + else MaterialTheme.colorScheme.onBackground + ) { + androidx.tv.material3.ListItem( + modifier = modifier + .focusRequester(focusRequester) + .onFocusChanged { + isFocused = it.isFocused || it.hasFocus + + if (isFocused) { + onFocused(iptvGroup) + } + } + .handleLeanbackKeyEvents( + onSelect = { + focusRequester.requestFocus() + }, + ), + colors = ListItemDefaults.colors( + focusedContainerColor = MaterialTheme.colorScheme.onBackground, + selectedContainerColor = MaterialTheme.colorScheme.surfaceVariant.copy( + alpha = 0.5f + ), + ), + selected = isSelectedProvider(), + onClick = { }, + headlineContent = { + Text( + text = iptvGroup.title, + textAlign = TextAlign.Center, + maxLines = 1, + modifier = Modifier.fillMaxWidth(), + ) + }, + ) + } +} + +@Preview +@Composable +private fun MyTvGroupListPreview() { + LeanbackTheme { + MyTvGroupList( + modifier = Modifier.padding(20.dp), + groupListProvider = { TVGroupList.EXAMPLE }, + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/ui/components/Monitor.kt b/app/src/main/java/me/lsong/mytv/ui/components/Monitor.kt new file mode 100644 index 0000000..d367abf --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/components/Monitor.kt @@ -0,0 +1,175 @@ +package me.lsong.mytv.ui.components + +import androidx.compose.foundation.Canvas +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.mutableLongStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.runtime.withFrameMillis +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.geometry.Rect +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import kotlinx.collections.immutable.ImmutableList +import kotlinx.collections.immutable.persistentListOf +import kotlinx.collections.immutable.toImmutableList +import me.lsong.mytv.rememberLeanbackChildPadding +import me.lsong.mytv.ui.theme.LeanbackTheme + +@Composable +fun LeanbackMonitorScreen( + modifier: Modifier = Modifier, +) { + val childPadding = rememberLeanbackChildPadding() + val fpsState = rememberFpsState() + + Box( + modifier = modifier + .fillMaxSize() + .padding(start = childPadding.end, top = childPadding.top), + ) { + Column( + modifier = Modifier + .align(Alignment.TopEnd) + .padding(end = childPadding.end) + .padding(horizontal = 8.dp, vertical = 4.dp) + .background( + color = androidx.tv.material3.MaterialTheme.colorScheme.background.copy(alpha = 0.8f), + shape = androidx.tv.material3.MaterialTheme.shapes.extraSmall, + ) + ) { + LeanbackMonitorFps(fpsProvider = { fpsState.current }) + Spacer(modifier = Modifier.height(4.dp)) + LeanbackMonitorFpsBar(fpsListProvider = { fpsState.history }) + } + } +} + +data class FpsState( + val current: Int = 0, + val history: ImmutableList = persistentListOf(), +) + +@Composable +private fun rememberFpsState(): FpsState { + var state by remember { mutableStateOf(FpsState()) } + + var fpsCount by remember { mutableIntStateOf(0) } + var lastUpdate by remember { mutableLongStateOf(0L) } + + LaunchedEffect(Unit) { + while (true) { + withFrameMillis { ms -> + fpsCount++ + if (fpsCount == 5) { + val fps = (5_000 / (ms - lastUpdate)).toInt() + state = state.copy( + current = fps, + history = (state.history.takeLast(30) + fps).toImmutableList(), + ) + lastUpdate = ms + fpsCount = 0 + } + } + } + } + + return state +} + +@Composable +private fun LeanbackMonitorFps( + modifier: Modifier = Modifier, + fpsProvider: () -> Int = { 0 }, +) { + val fps = fpsProvider() + + Text( + modifier = modifier, + text = "FPS: $fps", + style = MaterialTheme.typography.bodyLarge, + ) +} + +@Preview +@Composable +private fun LeanbackMonitorFpsPreview() { + LeanbackTheme { + LeanbackMonitorFps( + fpsProvider = { 60 } + ) + } +} + +@Composable +private fun LeanbackMonitorFpsBar( + modifier: Modifier = Modifier, + fpsListProvider: () -> ImmutableList = { persistentListOf() }, +) { + val fpsList = fpsListProvider() + + Canvas( + modifier = modifier + .width(140.dp) + .height(40.dp), + ) { + val barWidth = size.width / 60 // 每个柱状条的宽度 + val barSpacing = 2.dp.toPx() // 柱状条之间的间距 + val maxBarHeight = size.height // 柱状图的最大高度 + + for (i in fpsList.indices) { + val fps = fpsList[i] + + val barHeight = + (fps.coerceAtMost(60) * maxBarHeight / 60) // 柱状条的高度,最大为最大高度的一半 + + val x = i * (barWidth + barSpacing) + val y = size.height - barHeight + val rect = Rect(x, y, x + barWidth, size.height) + + val color = when (fps) { + in 0..30 -> Color(0xfff44336) + in 31..45 -> Color(0xffffeb3b) + else -> Color(0xff00a2ff) + } + + drawRect(color, topLeft = rect.topLeft, size = rect.size) + } + } +} + +@Preview +@Composable +private fun LeanbackMonitorFpsBarPreview() { + LeanbackTheme { + LeanbackMonitorFpsBar( + fpsListProvider = { + List(30) { it * 2 }.toImmutableList() + } + ) + } +} + +@Preview +@Composable +private fun LeanbackMonitorScreenPreview() { + LeanbackTheme { + LeanbackMonitorScreen() + } +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/ui/components/Padding.kt b/app/src/main/java/me/lsong/mytv/ui/components/Padding.kt new file mode 100644 index 0000000..2758468 --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/components/Padding.kt @@ -0,0 +1,12 @@ +package me.lsong.mytv.ui.components + +import androidx.compose.runtime.Immutable +import androidx.compose.ui.unit.Dp + +@Immutable +data class LeanbackPadding( + val start: Dp, + val top: Dp, + val end: Dp, + val bottom: Dp, +) \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/ui/components/PlayerInfo.kt b/app/src/main/java/me/lsong/mytv/ui/components/PlayerInfo.kt new file mode 100644 index 0000000..64e04db --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/components/PlayerInfo.kt @@ -0,0 +1,121 @@ +package me.lsong.mytv.ui.components + +import android.net.TrafficStats +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.LocalTextStyle +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableLongStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import kotlinx.coroutines.delay +import me.lsong.mytv.ui.player.LeanbackVideoPlayer +import me.lsong.mytv.ui.theme.LeanbackTheme +import java.text.DecimalFormat + +@Composable +fun MyTvPlayerInfo( + modifier: Modifier = Modifier, + metadataProvider: () -> LeanbackVideoPlayer.Metadata = { LeanbackVideoPlayer.Metadata() }, +) { + CompositionLocalProvider( + LocalTextStyle provides MaterialTheme.typography.bodyLarge, + LocalContentColor provides MaterialTheme.colorScheme.onBackground + ) { + Row(modifier = modifier, horizontalArrangement = Arrangement.spacedBy(16.dp)) { + PlayerInfoResolution( + resolutionProvider = { + val metadata = metadataProvider() + metadata.videoWidth to metadata.videoHeight + } + ) + + PanelPlayerInfoNetSpeed() + } + } +} + +@Composable +private fun PlayerInfoResolution( + modifier: Modifier = Modifier, + resolutionProvider: () -> Pair = { 0 to 0 }, +) { + val resolution = resolutionProvider() + + Text( + text = "分辨率:${resolution.first}×${resolution.second}", + modifier = modifier, + ) +} + +@Composable +private fun PanelPlayerInfoNetSpeed( + modifier: Modifier = Modifier, + netSpeed: Long = rememberNetSpeed(), +) { + Text( + text = if (netSpeed < 1024 * 999) "网速:${netSpeed / 1024}KB/s" + else "网速:${DecimalFormat("#.#").format(netSpeed / 1024 / 1024f)}MB/s", + modifier = modifier, + ) +} + +@Composable +private fun rememberNetSpeed(): Long { + var netSpeed by remember { mutableLongStateOf(0) } + + LaunchedEffect(Unit) { + var lastTotalRxBytes = TrafficStats.getTotalRxBytes() + var lastTimeStamp = System.currentTimeMillis() + + while (true) { + delay(1000) + val nowTotalRxBytes = TrafficStats.getTotalRxBytes() + val nowTimeStamp = System.currentTimeMillis() + val speed = (nowTotalRxBytes - lastTotalRxBytes) / (nowTimeStamp - lastTimeStamp) * 1000 + lastTimeStamp = nowTimeStamp + lastTotalRxBytes = nowTotalRxBytes + + netSpeed = speed + } + } + + return netSpeed +} + +@Preview +@Composable +private fun LeanbackPanelPlayerInfoPreview() { + LeanbackTheme { + MyTvPlayerInfo( + metadataProvider = { + LeanbackVideoPlayer.Metadata( + videoWidth = 1920, + videoHeight = 1080, + ) + }, + ) + } +} + +@Preview +@Composable +private fun LeanbackPanelPlayerInfoNetSpeedPreview() { + LeanbackTheme { + Column(verticalArrangement = Arrangement.spacedBy(4.dp)) { + PanelPlayerInfoNetSpeed() + PanelPlayerInfoNetSpeed(netSpeed = 54321) + PanelPlayerInfoNetSpeed(netSpeed = 1222 * 1222) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/ui/components/Qrcode.kt b/app/src/main/java/me/lsong/mytv/ui/components/Qrcode.kt new file mode 100644 index 0000000..c84557f --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/components/Qrcode.kt @@ -0,0 +1,80 @@ +package me.lsong.mytv.ui.components + +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.material3.AlertDialog +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import androidx.compose.ui.window.DialogProperties +import io.github.alexzhirkevich.qrose.options.QrBallShape +import io.github.alexzhirkevich.qrose.options.QrFrameShape +import io.github.alexzhirkevich.qrose.options.QrPixelShape +import io.github.alexzhirkevich.qrose.options.QrShapes +import io.github.alexzhirkevich.qrose.options.circle +import io.github.alexzhirkevich.qrose.options.roundCorners +import io.github.alexzhirkevich.qrose.rememberQrCodePainter + +@Composable +fun LeanbackQrcode( + modifier: Modifier = Modifier, + text: String, +) { + Box( + modifier = modifier + .background( + color = MaterialTheme.colorScheme.onBackground, + shape = MaterialTheme.shapes.medium, + ) + ) { + Image( + modifier = Modifier + .fillMaxSize() + .align(Alignment.Center) + .padding(10.dp), + painter = rememberQrCodePainter( + data = text, + shapes = QrShapes( + ball = QrBallShape.circle(), + darkPixel = QrPixelShape.roundCorners(), + frame = QrFrameShape.roundCorners(.25f), + ), + ), + contentDescription = text, + ) + } +} + +@Composable +fun LeanbackQrcodeDialog( + modifier: Modifier = Modifier, + text: String, + description: String? = null, + showDialogProvider: () -> Boolean = { false }, + onDismissRequest: () -> Unit = {}, +) { + if (showDialogProvider()) { + AlertDialog( + modifier = modifier, + properties = DialogProperties(usePlatformDefaultWidth = false), + onDismissRequest = onDismissRequest, + confirmButton = { description?.let { Text(text = description) } }, + text = { + LeanbackQrcode( + text = text, + modifier = Modifier + .width(240.dp) + .height(240.dp), + ) + }, + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/ui/components/VideoPlayerMetadata.kt b/app/src/main/java/me/lsong/mytv/ui/components/VideoPlayerMetadata.kt new file mode 100644 index 0000000..80cf01c --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/components/VideoPlayerMetadata.kt @@ -0,0 +1,83 @@ +package me.lsong.mytv.ui.components + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.LocalTextStyle +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import me.lsong.mytv.ui.player.LeanbackVideoPlayer +import me.lsong.mytv.ui.theme.LeanbackTheme + +@Composable +fun LeanbackVideoPlayerMetadata( + modifier: Modifier = Modifier, + metadata: LeanbackVideoPlayer.Metadata, +) { + CompositionLocalProvider( + LocalTextStyle provides MaterialTheme.typography.labelMedium, + LocalContentColor provides MaterialTheme.colorScheme.onBackground + ) { + Column( + modifier = modifier + .background( + MaterialTheme.colorScheme.background.copy(alpha = 0.5f), + MaterialTheme.shapes.extraSmall, + ) + .padding(horizontal = 8.dp, vertical = 4.dp), + verticalArrangement = Arrangement.spacedBy(4.dp) + ) { + Column { + Text("视频", style = MaterialTheme.typography.bodyMedium) + Column(modifier = Modifier.padding(start = 10.dp)) { + Text("编码: ${metadata.videoMimeType}") + Text("解码器: ${metadata.videoDecoder}") + Text("分辨率: ${metadata.videoWidth}x${metadata.videoHeight}") + Text("色彩: ${metadata.videoColor}") + Text("帧率: ${metadata.videoFrameRate}") + Text("比特率: ${metadata.videoBitrate / 1024} kbps") + } + } + + Column { + Text("音频", style = MaterialTheme.typography.bodyMedium) + Column(modifier = Modifier.padding(start = 10.dp)) { + Text("编码: ${metadata.audioMimeType}") + Text("解码器: ${metadata.audioDecoder}") + Text("声道数: ${metadata.audioChannels}") + Text("采样率: ${metadata.audioSampleRate} Hz") + } + } + } + } +} + +@Preview +@Composable +private fun LeanbackVideoMetadataPreview() { + LeanbackTheme { + LeanbackVideoPlayerMetadata( + metadata = LeanbackVideoPlayer.Metadata( + videoWidth = 1920, + videoHeight = 1080, + videoMimeType = "video/hevc", + videoColor = "BT2020/Limited range/HLG/8/8", + videoFrameRate = 25.0f, + videoBitrate = 10605096, + videoDecoder = "c2.goldfish.h264.decoder", + + audioMimeType = "audio/mp4a-latm", + audioChannels = 2, + audioSampleRate = 32000, + audioDecoder = "c2.android.aac.decoder", + ) + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/ui/components/Visible.kt b/app/src/main/java/me/lsong/mytv/ui/components/Visible.kt new file mode 100644 index 0000000..d5c7149 --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/components/Visible.kt @@ -0,0 +1,13 @@ +package me.lsong.mytv.ui.components + +import androidx.compose.runtime.Composable + +@Composable +fun LeanbackVisible( + visibleProvider: () -> Boolean = { false }, + content: @Composable () -> Unit +) { + if (visibleProvider()) { + content() + } +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/ui/player/Media3VideoPlayer.kt b/app/src/main/java/me/lsong/mytv/ui/player/Media3VideoPlayer.kt new file mode 100644 index 0000000..4eb2c1e --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/player/Media3VideoPlayer.kt @@ -0,0 +1,234 @@ +package me.lsong.mytv.ui.player + +import android.content.Context +import android.net.Uri +import android.view.SurfaceView +import androidx.annotation.OptIn +import androidx.media3.common.C +import androidx.media3.common.Format +import androidx.media3.common.MediaItem +import androidx.media3.common.Player +import androidx.media3.common.VideoSize +import androidx.media3.common.util.UnstableApi +import androidx.media3.common.util.Util +import androidx.media3.datasource.DefaultDataSource +import androidx.media3.datasource.DefaultHttpDataSource +import androidx.media3.exoplayer.DecoderReuseEvaluation +import androidx.media3.exoplayer.DefaultRenderersFactory +import androidx.media3.exoplayer.DefaultRenderersFactory.EXTENSION_RENDERER_MODE_ON +import androidx.media3.exoplayer.ExoPlayer +import androidx.media3.exoplayer.analytics.AnalyticsListener +import androidx.media3.exoplayer.hls.HlsMediaSource +import androidx.media3.exoplayer.rtsp.RtspMediaSource +import androidx.media3.exoplayer.source.ProgressiveMediaSource +import androidx.media3.exoplayer.util.EventLogger +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Job +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import me.lsong.mytv.utils.SP +import androidx.media3.common.PlaybackException as Media3PlaybackException + +@OptIn(UnstableApi::class) +class LeanbackMedia3VideoPlayer( + private val context: Context, + private val coroutineScope: CoroutineScope, +) : LeanbackVideoPlayer(coroutineScope) { + private val videoPlayer = ExoPlayer.Builder( + context, + DefaultRenderersFactory(context).setExtensionRendererMode(EXTENSION_RENDERER_MODE_ON) + ).build().apply { + playWhenReady = true + } + + private val contentTypeAttempts = mutableMapOf() + private var updatePositionJob: Job? = null + + @OptIn(UnstableApi::class) + private fun prepare(uri: Uri, contentType: Int? = null) { + val dataSourceFactory = + DefaultDataSource.Factory(context, DefaultHttpDataSource.Factory().apply { + setUserAgent(SP.videoPlayerUserAgent) + setConnectTimeoutMs(SP.videoPlayerLoadTimeout.toInt()) + setReadTimeoutMs(SP.videoPlayerLoadTimeout.toInt()) + setKeepPostFor302Redirects(true) + setAllowCrossProtocolRedirects(true) + }) + + val mediaItem = MediaItem.fromUri(uri) + + val mediaSource = when (val type = contentType ?: Util.inferContentType(uri)) { + C.CONTENT_TYPE_HLS -> { + HlsMediaSource.Factory(dataSourceFactory).createMediaSource(mediaItem) + } + + C.CONTENT_TYPE_RTSP -> { + RtspMediaSource.Factory().createMediaSource(mediaItem) + } + + C.CONTENT_TYPE_OTHER -> { + ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(mediaItem) + } + + else -> { + triggerError( + PlaybackException.UNSUPPORTED_TYPE.copy( + errorCodeName = "${PlaybackException.UNSUPPORTED_TYPE.message}_$type" + ) + ) + null + } + } + + if (mediaSource != null) { + contentTypeAttempts[contentType ?: Util.inferContentType(uri)] = true + videoPlayer.setMediaSource(mediaSource) + videoPlayer.prepare() + triggerPrepared() + } + updatePositionJob?.cancel() + updatePositionJob = null + } + + private val playerListener = object : Player.Listener { + override fun onVideoSizeChanged(videoSize: VideoSize) { + triggerResolution(videoSize.width, videoSize.height) + } + + override fun onPlayerError(ex: Media3PlaybackException) { + // 如果是直播加载位置错误,尝试重新播放 + if (ex.errorCode == Media3PlaybackException.ERROR_CODE_BEHIND_LIVE_WINDOW) { + videoPlayer.seekToDefaultPosition() + videoPlayer.prepare() + } + // 当解析容器不支持时,尝试使用其他解析容器 + else if (ex.errorCode == Media3PlaybackException.ERROR_CODE_PARSING_CONTAINER_UNSUPPORTED) { + val uri = videoPlayer.currentMediaItem?.localConfiguration?.uri + if (uri != null) { + if (contentTypeAttempts[C.CONTENT_TYPE_HLS] != true) { + prepare(uri, C.CONTENT_TYPE_HLS) + } else if (contentTypeAttempts[C.CONTENT_TYPE_OTHER] != true) { + prepare(uri, C.CONTENT_TYPE_OTHER) + } else if (contentTypeAttempts[C.CONTENT_TYPE_OTHER] != true) { + prepare(uri, C.CONTENT_TYPE_OTHER) + } else { + triggerError(PlaybackException.UNSUPPORTED_TYPE) + } + } + } else { + triggerError( + PlaybackException(ex.errorCodeName, ex.errorCode) + ) + } + } + + override fun onPlaybackStateChanged(playbackState: Int) { + if (playbackState == Player.STATE_BUFFERING) { + triggerError(null) + triggerBuffering(true) + } else if (playbackState == Player.STATE_READY) { + triggerReady() + + updatePositionJob?.cancel() + updatePositionJob = coroutineScope.launch { + triggerCurrentPosition(-1) + while (true) { + triggerCurrentPosition(videoPlayer.currentPosition) + delay(1000) + } + } + } + + if (playbackState != Player.STATE_BUFFERING) { + triggerBuffering(false) + } + } + } + + private val metadataListener = @UnstableApi object : AnalyticsListener { + override fun onVideoInputFormatChanged( + eventTime: AnalyticsListener.EventTime, + format: Format, + decoderReuseEvaluation: DecoderReuseEvaluation?, + ) { + metadata = metadata.copy( + videoMimeType = format.sampleMimeType ?: "", + videoWidth = format.width, + videoHeight = format.height, + videoColor = format.colorInfo?.toLogString() ?: "", + // TODO 帧率、比特率目前是从tag中获取,有的返回空,后续需要实时计算 + videoFrameRate = format.frameRate, + videoBitrate = format.bitrate, + ) + triggerMetadata(metadata) + } + + override fun onVideoDecoderInitialized( + eventTime: AnalyticsListener.EventTime, + decoderName: String, + initializedTimestampMs: Long, + initializationDurationMs: Long, + ) { + metadata = metadata.copy(videoDecoder = decoderName) + triggerMetadata(metadata) + } + + override fun onAudioInputFormatChanged( + eventTime: AnalyticsListener.EventTime, + format: Format, + decoderReuseEvaluation: DecoderReuseEvaluation?, + ) { + metadata = metadata.copy( + audioMimeType = format.sampleMimeType ?: "", + audioChannels = format.channelCount, + audioSampleRate = format.sampleRate, + ) + triggerMetadata(metadata) + } + + override fun onAudioDecoderInitialized( + eventTime: AnalyticsListener.EventTime, + decoderName: String, + initializedTimestampMs: Long, + initializationDurationMs: Long, + ) { + metadata = metadata.copy(audioDecoder = decoderName) + triggerMetadata(metadata) + } + } + + private val eventLogger = EventLogger() + + override fun initialize() { + super.initialize() + videoPlayer.addListener(playerListener) + videoPlayer.addAnalyticsListener(metadataListener) + videoPlayer.addAnalyticsListener(eventLogger) + } + + override fun release() { + videoPlayer.removeListener(playerListener) + videoPlayer.removeAnalyticsListener(metadataListener) + videoPlayer.removeAnalyticsListener(eventLogger) + videoPlayer.release() + super.release() + } + + @UnstableApi + override fun prepare(url: String) { + contentTypeAttempts.clear() + prepare(Uri.parse(url)) + } + + override fun play() { + videoPlayer.play() + } + + override fun pause() { + videoPlayer.pause() + } + + override fun setVideoSurfaceView(surfaceView: SurfaceView) { + videoPlayer.setVideoSurfaceView(surfaceView) + } +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/ui/player/VideoPlayer.kt b/app/src/main/java/me/lsong/mytv/ui/player/VideoPlayer.kt new file mode 100644 index 0000000..f3149c3 --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/player/VideoPlayer.kt @@ -0,0 +1,166 @@ +package me.lsong.mytv.ui.player + +import android.view.SurfaceView +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Job +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import me.lsong.mytv.utils.SP + +abstract class LeanbackVideoPlayer( + private val coroutineScope: CoroutineScope, +) { + private var loadTimeoutJob: Job? = null + private var cutoffTimeoutJob: Job? = null + private var currentPosition = -1L + + protected var metadata = Metadata() + + open fun initialize() { + clearAllListeners() + } + + open fun release() { + clearAllListeners() + } + + abstract fun prepare(url: String) + + abstract fun play() + + abstract fun pause() + + abstract fun setVideoSurfaceView(surfaceView: SurfaceView) + + private val onResolutionListeners = mutableListOf<(width: Int, height: Int) -> Unit>() + private val onErrorListeners = mutableListOf<(error: PlaybackException?) -> Unit>() + private val onReadyListeners = mutableListOf<() -> Unit>() + private val onBufferingListeners = mutableListOf<(buffering: Boolean) -> Unit>() + private val onPreparedListeners = mutableListOf<() -> Unit>() + private val onMetadataListeners = mutableListOf<(metadata: Metadata) -> Unit>() + private val onCutoffListeners = mutableListOf<() -> Unit>() + + private fun clearAllListeners() { + onResolutionListeners.clear() + onErrorListeners.clear() + onReadyListeners.clear() + onBufferingListeners.clear() + onPreparedListeners.clear() + onMetadataListeners.clear() + onCutoffListeners.clear() + } + + protected fun triggerResolution(width: Int, height: Int) { + onResolutionListeners.forEach { it(width, height) } + } + + protected fun triggerError(error: PlaybackException?) { + onErrorListeners.forEach { it(error) } + if(error != PlaybackException.LOAD_TIMEOUT) { + loadTimeoutJob?.cancel() + loadTimeoutJob = null + } + } + + protected fun triggerReady() { + onReadyListeners.forEach { it() } + loadTimeoutJob?.cancel() + } + + protected fun triggerBuffering(buffering: Boolean) { + onBufferingListeners.forEach { it(buffering) } + } + + protected fun triggerPrepared() { + onPreparedListeners.forEach { it() } + loadTimeoutJob?.cancel() + loadTimeoutJob = coroutineScope.launch { + delay(SP.videoPlayerLoadTimeout) + triggerError(PlaybackException.LOAD_TIMEOUT) + } + cutoffTimeoutJob?.cancel() + cutoffTimeoutJob = null + } + + protected fun triggerMetadata(metadata: Metadata) { + onMetadataListeners.forEach { it(metadata) } + } + + protected fun triggerCurrentPosition(newPosition: Long) { + if (currentPosition != newPosition) { + cutoffTimeoutJob?.cancel() + cutoffTimeoutJob = coroutineScope.launch { + delay(SP.videoPlayerLoadTimeout) + onCutoffListeners.forEach { it() } + } + } + currentPosition = newPosition + } + + fun onResolution(listener: (width: Int, height: Int) -> Unit) { + onResolutionListeners.add(listener) + } + + fun onError(listener: (error: PlaybackException?) -> Unit) { + onErrorListeners.add(listener) + } + + fun onReady(listener: () -> Unit) { + onReadyListeners.add(listener) + } + + fun onBuffering(listener: (buffering: Boolean) -> Unit) { + onBufferingListeners.add(listener) + } + + fun onPrepared(listener: () -> Unit) { + onPreparedListeners.add(listener) + } + + fun onMetadata(listener: (metadata: Metadata) -> Unit) { + onMetadataListeners.add(listener) + } + + fun onCutoff(listener: () -> Unit) { + onCutoffListeners.add(listener) + } + + data class PlaybackException( + val errorCodeName: String, + val errorCode: Int, + ) : Exception(errorCodeName) { + companion object { + val UNSUPPORTED_TYPE = + PlaybackException("UNSUPPORTED_TYPE", 10002) + val LOAD_TIMEOUT = + PlaybackException("LOAD_TIMEOUT", 10003) + } + } + + /** 元数据 */ + data class Metadata( + /** 视频编码 */ + val videoMimeType: String = "", + /** 视频宽度 */ + val videoWidth: Int = 0, + /** 视频高度 */ + val videoHeight: Int = 0, + /** 视频颜色 */ + val videoColor: String = "", + /** 视频帧率 */ + val videoFrameRate: Float = 0f, + /** 视频比特率 */ + val videoBitrate: Int = 0, + /** 视频解码器 */ + val videoDecoder: String = "", + + /** 音频编码 */ + val audioMimeType: String = "", + /** 音频通道 */ + val audioChannels: Int = 0, + /** 音频采样率 */ + val audioSampleRate: Int = 0, + /** 音频解码器 */ + val audioDecoder: String = "", + ) +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/ui/player/VideoPlayerErrorScreen.kt b/app/src/main/java/me/lsong/mytv/ui/player/VideoPlayerErrorScreen.kt new file mode 100644 index 0000000..45e7998 --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/player/VideoPlayerErrorScreen.kt @@ -0,0 +1,60 @@ +package me.lsong.mytv.ui.player + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import me.lsong.mytv.ui.theme.LeanbackTheme + +@Composable +fun LeanbackVideoPlayerErrorScreen( + modifier: Modifier = Modifier, + errorProvider: () -> String? = { null }, +) { + Box(modifier = modifier.fillMaxSize()) { + val error = errorProvider() + if (error != null) { + Column( + modifier = Modifier + .align(Alignment.Center) + .background( + color = MaterialTheme.colorScheme.background.copy(alpha = 0.8f), + shape = MaterialTheme.shapes.medium, + ) + .padding(horizontal = 20.dp, vertical = 10.dp), + horizontalAlignment = Alignment.CenterHorizontally, + ) { + Text( + text = "播放失败", + style = MaterialTheme.typography.headlineSmall, + color = MaterialTheme.colorScheme.error, + ) + + Text( + text = error, + style = MaterialTheme.typography.bodySmall, + color = LocalContentColor.current.copy(alpha = 0.8f), + ) + } + } + } +} + +@Preview(device = "id:Android TV (720p)") +@Composable +private fun LeanbackVideoPlayerErrorScreenPreview() { + LeanbackTheme { + LeanbackVideoPlayerErrorScreen( + errorProvider = { "ERROR_CODE_BEHIND_LIVE_WINDOW" } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/ui/player/VideoPlayerState.kt b/app/src/main/java/me/lsong/mytv/ui/player/VideoPlayerState.kt new file mode 100644 index 0000000..75faad8 --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/player/VideoPlayerState.kt @@ -0,0 +1,139 @@ +package me.lsong.mytv.ui.player + +import android.view.SurfaceView +import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.Stable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableFloatStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalLifecycleOwner +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.LifecycleEventObserver + +/** + * 播放器状态 + */ +@Stable +class LeanbackVideoPlayerState( + private val instance: LeanbackVideoPlayer, + private val defaultAspectRatioProvider: () -> Float? = { null }, +) { + /** 视频宽高比 */ + var aspectRatio by mutableFloatStateOf(16f / 9f) + + /** 错误 */ + var error by mutableStateOf(null) + + /** 元数据 */ + var metadata by mutableStateOf(LeanbackVideoPlayer.Metadata()) + + fun prepare(url: String) { + error = null + instance.prepare(url) + } + + fun play() { + instance.play() + } + + fun pause() { + instance.pause() + } + + fun setVideoSurfaceView(surfaceView: SurfaceView) { + instance.setVideoSurfaceView(surfaceView) + } + + private val onReadyListeners = mutableListOf<() -> Unit>() + private val onErrorListeners = mutableListOf<() -> Unit>() + private val onCutoffListeners = mutableListOf<() -> Unit>() + + fun onReady(listener: () -> Unit) { + onReadyListeners.add(listener) + } + + fun onError(listener: () -> Unit) { + onErrorListeners.add(listener) + } + + fun onCutoff(listener: () -> Unit) { + onCutoffListeners.add(listener) + } + + fun initialize() { + instance.initialize() + instance.onResolution { width, height -> + val defaultAspectRatio = defaultAspectRatioProvider() + + if (defaultAspectRatio == null) { + if (width > 0 && height > 0) aspectRatio = width.toFloat() / height + } else { + aspectRatio = defaultAspectRatio + } + } + instance.onError { ex -> + error = if (ex != null) "${ex.errorCodeName}(${ex.errorCode})" + else null + + if (error != null) onErrorListeners.forEach { it.invoke() } + + } + instance.onReady { onReadyListeners.forEach { it.invoke() } } + instance.onBuffering { if (it) error = null } + instance.onPrepared { } + instance.onMetadata { metadata = it } + instance.onCutoff { onCutoffListeners.forEach { it.invoke() } } + } + + fun release() { + onReadyListeners.clear() + onErrorListeners.clear() + instance.release() + } +} + +@Composable +fun rememberLeanbackVideoPlayerState( + defaultAspectRatioProvider: () -> Float? = { null }, +): LeanbackVideoPlayerState { + val context = LocalContext.current + val lifecycleOwner = LocalLifecycleOwner.current + val coroutineScope = rememberCoroutineScope() + val state = remember { + LeanbackVideoPlayerState( + LeanbackMedia3VideoPlayer(context, coroutineScope), + defaultAspectRatioProvider = defaultAspectRatioProvider, + ) + } + + DisposableEffect(Unit) { + state.initialize() + + onDispose { + state.release() + } + } + + DisposableEffect(lifecycleOwner) { + val observer = LifecycleEventObserver { _, event -> + if (event == Lifecycle.Event.ON_RESUME) { + state.play() + } else if (event == Lifecycle.Event.ON_STOP) { + state.pause() + } + } + + lifecycleOwner.lifecycle.addObserver(observer) + + onDispose { + lifecycleOwner.lifecycle.removeObserver(observer) + } + } + + return state +} diff --git a/app/src/main/java/me/lsong/mytv/ui/player/VideoScreen.kt b/app/src/main/java/me/lsong/mytv/ui/player/VideoScreen.kt new file mode 100644 index 0000000..de9d29b --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/player/VideoScreen.kt @@ -0,0 +1,50 @@ +package me.lsong.mytv.ui.player + +import android.view.SurfaceView +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.aspectRatio +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.viewinterop.AndroidView +import me.lsong.mytv.rememberLeanbackChildPadding +import me.lsong.mytv.ui.components.LeanbackVideoPlayerMetadata + +@Composable +fun MyTvVideoScreen( + modifier: Modifier = Modifier, + state: LeanbackVideoPlayerState = rememberLeanbackVideoPlayerState(), + showMetadataProvider: () -> Boolean = { false }, +) { + val context = LocalContext.current + val childPadding = rememberLeanbackChildPadding() + + Box(modifier = modifier.fillMaxSize()) { + AndroidView( + modifier = Modifier + .align(Alignment.Center) + .aspectRatio(state.aspectRatio), + factory = { + // PlayerView 切换视频时黑屏闪烁,使用 SurfaceView 代替 + SurfaceView(context) + }, + update = { surfaceView -> + state.setVideoSurfaceView(surfaceView) + }, + ) + + LeanbackVideoPlayerErrorScreen( + errorProvider = { state.error }, + ) + + if (showMetadataProvider()) { + LeanbackVideoPlayerMetadata( + modifier = Modifier.padding(start = childPadding.start, top = childPadding.top), + metadata = state.metadata, + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/ui/settings/SettingsCategories.kt b/app/src/main/java/me/lsong/mytv/ui/settings/SettingsCategories.kt new file mode 100644 index 0000000..2007d4f --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/settings/SettingsCategories.kt @@ -0,0 +1,26 @@ +package me.lsong.mytv.ui.settings + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.BugReport +import androidx.compose.material.icons.filled.DisplaySettings +import androidx.compose.material.icons.filled.FormatListNumbered +import androidx.compose.material.icons.filled.Http +import androidx.compose.material.icons.filled.Info +import androidx.compose.material.icons.filled.LiveTv +import androidx.compose.material.icons.filled.Menu +import androidx.compose.material.icons.filled.MoreHoriz +import androidx.compose.material.icons.filled.Settings +import androidx.compose.material.icons.filled.SmartDisplay +import androidx.compose.material.icons.filled.Star +import androidx.compose.material.icons.filled.Update +import androidx.compose.ui.graphics.vector.ImageVector + +enum class LeanbackSettingsCategories( + val icon: ImageVector, + val title: String +) { + APP(Icons.Default.Settings, "应用"), + IPTV(Icons.Default.LiveTv, "直播源"), + EPG(Icons.Default.Menu, "节目单"), + ABOUT(Icons.Default.Info, "关于"), +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/ui/settings/SettingsScreen.kt b/app/src/main/java/me/lsong/mytv/ui/settings/SettingsScreen.kt new file mode 100644 index 0000000..e9febca --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/settings/SettingsScreen.kt @@ -0,0 +1,74 @@ +package me.lsong.mytv.ui.settings + +import androidx.compose.foundation.background +import androidx.compose.foundation.gestures.detectTapGestures +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.input.pointer.pointerInput +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import me.lsong.mytv.rememberLeanbackChildPadding +import me.lsong.mytv.ui.settings.components.LeanbackSettingsCategoryContent +import me.lsong.mytv.ui.settings.components.LeanbackSettingsCategoryList +import me.lsong.mytv.ui.theme.LeanbackTheme + +@Composable +fun LeanbackSettingsScreen( + modifier: Modifier = Modifier, +) { + val childPadding = rememberLeanbackChildPadding() + val focusRequester = remember { FocusRequester() } + LaunchedEffect(Unit) { + focusRequester.requestFocus() + } + + var focusedCategory by remember { mutableStateOf(LeanbackSettingsCategories.entries.first()) } + + Box( + modifier = modifier + .fillMaxSize() + .focusRequester(focusRequester) + .padding( + top = childPadding.top + 20.dp, + bottom = childPadding.bottom, + start = childPadding.start, + end = childPadding.end, + ) + .pointerInput(Unit) { detectTapGestures(onTap = { }) }, + ) { + Row( + horizontalArrangement = Arrangement.spacedBy(40.dp), + ) { + LeanbackSettingsCategoryList( + modifier = Modifier.width(200.dp), + focusedCategoryProvider = { focusedCategory }, + onFocused = { focusedCategory = it }, + ) + LeanbackSettingsCategoryContent( + focusedCategoryProvider = { focusedCategory }, + ) + } + } +} + +@Preview(device = "id:Android TV (720p)") +@Composable +private fun LeanbackSettingsScreenPreview() { + LeanbackTheme { + LeanbackSettingsScreen() + } +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/ui/settings/SettingsViewModel.kt b/app/src/main/java/me/lsong/mytv/ui/settings/SettingsViewModel.kt new file mode 100644 index 0000000..cda4f8e --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/settings/SettingsViewModel.kt @@ -0,0 +1,172 @@ +package me.lsong.mytv.ui.settings + +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableFloatStateOf +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.mutableLongStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import androidx.lifecycle.ViewModel +import me.lsong.mytv.utils.SP + +class LeanbackSettingsViewModel : ViewModel() { + private var _appBootLaunch by mutableStateOf(SP.appBootLaunch) + var appBootLaunch: Boolean + get() = _appBootLaunch + set(value) { + _appBootLaunch = value + SP.appBootLaunch = value + } + + private var _appDeviceDisplayType by mutableStateOf(SP.appDeviceDisplayType) + var appDeviceDisplayType: SP.AppDeviceDisplayType + get() = _appDeviceDisplayType + set(value) { + _appDeviceDisplayType = value + SP.appDeviceDisplayType = value + } + + private var _debugShowFps by mutableStateOf(SP.debugShowFps) + var debugShowFps: Boolean + get() = _debugShowFps + set(value) { + _debugShowFps = value + SP.debugShowFps = value + } + + private var _debugShowVideoPlayerMetadata by mutableStateOf(SP.debugShowVideoPlayerMetadata) + var debugShowVideoPlayerMetadata: Boolean + get() = _debugShowVideoPlayerMetadata + set(value) { + _debugShowVideoPlayerMetadata = value + SP.debugShowVideoPlayerMetadata = value + } + + private var _iptvLastIptvIdx by mutableIntStateOf(SP.iptvLastIptvIdx) + var iptvLastIptvIdx: Int + get() = _iptvLastIptvIdx + set(value) { + _iptvLastIptvIdx = value + SP.iptvLastIptvIdx = value + } + + private var _iptvChannelChangeFlip by mutableStateOf(SP.iptvChannelChangeFlip) + var iptvChannelChangeFlip: Boolean + get() = _iptvChannelChangeFlip + set(value) { + _iptvChannelChangeFlip = value + SP.iptvChannelChangeFlip = value + } + + private var _iptvSourceCacheTime by mutableLongStateOf(SP.iptvSourceCacheTime) + var iptvSourceCacheTime: Long + get() = _iptvSourceCacheTime + set(value) { + _iptvSourceCacheTime = value + SP.iptvSourceCacheTime = value + } + + private var _iptvSourceUrls by mutableStateOf(SP.iptvSourceUrls) + var iptvSourceUrls: Set + get() = _iptvSourceUrls + set(value) { + _iptvSourceUrls = value + SP.iptvSourceUrls = value + } + + private var _iptvPlayableHostList by mutableStateOf(SP.iptvPlayableHostList) + var iptvPlayableHostList: Set + get() = _iptvPlayableHostList + set(value) { + _iptvPlayableHostList = value + SP.iptvPlayableHostList = value + } + + // private var _iptvSourceUrlHistoryList by mutableStateOf(SP.iptvSourceUrlHistoryList) + // var iptvSourceUrlHistoryList: Set + // get() = _iptvSourceUrlHistoryList + // set(value) { + // _iptvSourceUrlHistoryList = value + // SP.iptvSourceUrlHistoryList = value + // } + + private var _iptvChannelFavoriteList by mutableStateOf(SP.iptvChannelFavoriteList) + var iptvChannelFavoriteList: Set + get() = _iptvChannelFavoriteList + set(value) { + _iptvChannelFavoriteList = value + SP.iptvChannelFavoriteList = value + } + + private var _epgRefreshTimeThreshold by mutableIntStateOf(SP.epgRefreshTimeThreshold) + var epgRefreshTimeThreshold: Int + get() = _epgRefreshTimeThreshold + set(value) { + _epgRefreshTimeThreshold = value + SP.epgRefreshTimeThreshold = value + } + + private var _epgXmlUrlHistoryList by mutableStateOf(SP.epgUrls) + var epgUrls: Set + get() = _epgXmlUrlHistoryList + set(value) { + _epgXmlUrlHistoryList = value + SP.epgUrls = value + } + + private var _uiDensityScaleRatio by mutableFloatStateOf(SP.uiDensityScaleRatio) + var uiDensityScaleRatio: Float + get() = _uiDensityScaleRatio + set(value) { + _uiDensityScaleRatio = value + SP.uiDensityScaleRatio = value + } + + private var _uiFontScaleRatio by mutableFloatStateOf(SP.uiFontScaleRatio) + var uiFontScaleRatio: Float + get() = _uiFontScaleRatio + set(value) { + _uiFontScaleRatio = value + SP.uiFontScaleRatio = value + } + + private var _uiTimeShowMode by mutableStateOf(SP.uiTimeShowMode) + var uiTimeShowMode: SP.UiTimeShowMode + get() = _uiTimeShowMode + set(value) { + _uiTimeShowMode = value + SP.uiTimeShowMode = value + } + + private var _uiPipMode by mutableStateOf(SP.uiPipMode) + var uiPipMode: Boolean + get() = _uiPipMode + set(value) { + _uiPipMode = value + SP.uiPipMode = value + } + + private var _videoPlayerUserAgent by mutableStateOf(SP.videoPlayerUserAgent) + var videoPlayerUserAgent: String + get() = _videoPlayerUserAgent + set(value) { + _videoPlayerUserAgent = value + SP.videoPlayerUserAgent = value + } + + private var _videoPlayerLoadTimeout by mutableLongStateOf(SP.videoPlayerLoadTimeout) + var videoPlayerLoadTimeout: Long + get() = _videoPlayerLoadTimeout + set(value) { + _videoPlayerLoadTimeout = value + SP.videoPlayerLoadTimeout = value + } + + private var _videoPlayerAspectRatio by mutableStateOf(SP.videoPlayerAspectRatio) + var videoPlayerAspectRatio: SP.VideoPlayerAspectRatio + get() = _videoPlayerAspectRatio + set(value) { + _videoPlayerAspectRatio = value + SP.videoPlayerAspectRatio = value + } +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/ui/settings/components/SettingsCategoryAbout.kt b/app/src/main/java/me/lsong/mytv/ui/settings/components/SettingsCategoryAbout.kt new file mode 100644 index 0000000..fe1c109 --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/settings/components/SettingsCategoryAbout.kt @@ -0,0 +1,102 @@ +package me.lsong.mytv.ui.settings.components + +import android.content.Context +import android.content.pm.PackageInfo +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.filled.OpenInNew +import androidx.compose.material3.Switch +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.lifecycle.viewmodel.compose.viewModel +import androidx.tv.foundation.lazy.list.TvLazyColumn +import androidx.tv.material3.Icon +import androidx.tv.material3.Text +import me.lsong.mytv.utils.Constants +import me.lsong.mytv.ui.components.LeanbackQrcodeDialog +import me.lsong.mytv.ui.settings.LeanbackSettingsViewModel +import me.lsong.mytv.ui.theme.LeanbackTheme + +@Composable +fun LeanbackSettingsCategoryAbout( + modifier: Modifier = Modifier, + packageInfo: PackageInfo = rememberPackageInfo(), + settingsViewModel: LeanbackSettingsViewModel = viewModel(), +) { + Column ( + modifier = modifier.padding(5.dp), + verticalArrangement = Arrangement.spacedBy(10.dp), + ) { + + TvLazyColumn( + modifier = modifier, + verticalArrangement = Arrangement.spacedBy(10.dp), + ) { + item { + LeanbackSettingsCategoryListItem( + headlineContent = "应用名称", + trailingContent = "${Constants.APP_NAME} ${packageInfo.versionName}", + ) + } + + item { + LeanbackSettingsCategoryListItem( + headlineContent = "显示FPS", + supportingContent = "在屏幕左上角显示fps和柱状图", + trailingContent = { + Switch(checked = settingsViewModel.debugShowFps, onCheckedChange = null) + }, + onSelected = { + settingsViewModel.debugShowFps = !settingsViewModel.debugShowFps + }, + ) + } + + item { + LeanbackSettingsCategoryListItem( + headlineContent = "显示播放器信息", + supportingContent = "显示播放器详细信息(编码、解码器、采样率等)", + trailingContent = { + Switch( + checked = settingsViewModel.debugShowVideoPlayerMetadata, + onCheckedChange = null + ) + }, + onSelected = { + settingsViewModel.debugShowVideoPlayerMetadata = + !settingsViewModel.debugShowVideoPlayerMetadata + }, + ) + } + } + } +} + +@Composable +private fun rememberPackageInfo(context: Context = LocalContext.current): PackageInfo = + context.packageManager.getPackageInfo(context.packageName, 0) + +@Preview +@Composable +private fun SettingsAboutPreview() { + LeanbackTheme { + LeanbackSettingsCategoryAbout( + packageInfo = PackageInfo().apply { + versionName = "1.0.0" + } + ) + } +} diff --git a/app/src/main/java/me/lsong/mytv/ui/settings/components/SettingsCategoryApp.kt b/app/src/main/java/me/lsong/mytv/ui/settings/components/SettingsCategoryApp.kt new file mode 100644 index 0000000..fe39b29 --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/settings/components/SettingsCategoryApp.kt @@ -0,0 +1,174 @@ +package me.lsong.mytv.ui.settings.components + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Switch +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.lifecycle.viewmodel.compose.viewModel +import androidx.tv.foundation.lazy.list.TvLazyColumn +import me.lsong.mytv.ui.settings.LeanbackSettingsViewModel +import me.lsong.mytv.ui.theme.LeanbackTheme +import me.lsong.mytv.utils.Constants +import me.lsong.mytv.utils.SP +import me.lsong.mytv.utils.humanizeMs +import java.text.DecimalFormat +import kotlin.math.max + +@Composable +fun LeanbackSettingsCategoryApp( + modifier: Modifier = Modifier, + settingsViewModel: LeanbackSettingsViewModel = viewModel(), + ) { + Column ( + modifier = modifier.padding(5.dp), + verticalArrangement = Arrangement.spacedBy(10.dp), + ) { + TvLazyColumn( + modifier = modifier, + verticalArrangement = Arrangement.spacedBy(10.dp), + ) { + + item { + LeanbackSettingsCategoryListItem( + headlineContent = "开机自启", + supportingContent = "请确保当前设备支持该功能", + trailingContent = { + Switch(checked = settingsViewModel.appBootLaunch, onCheckedChange = null) + }, + onSelected = { + settingsViewModel.appBootLaunch = !settingsViewModel.appBootLaunch + }, + ) + } + + item { + val defaultScale = 1f + val minScale = 1f + val maxScale = 2f + val stepScale = 0.1f + + LeanbackSettingsCategoryListItem( + headlineContent = "界面整体缩放比例", + supportingContent = "短按切换缩放比例,长按恢复默认;部分界面受影响", + trailingContent = "×${DecimalFormat("#.#").format(settingsViewModel.uiDensityScaleRatio)}", + onSelected = { + if (settingsViewModel.uiDensityScaleRatio >= maxScale) { + settingsViewModel.uiDensityScaleRatio = minScale + } else { + settingsViewModel.uiDensityScaleRatio = + (settingsViewModel.uiDensityScaleRatio + stepScale).coerceIn( + minScale, maxScale + ) + } + }, + onLongSelected = { + settingsViewModel.uiDensityScaleRatio = defaultScale + }, + ) + } + + item { + val defaultScale = 1f + val minScale = 1f + val maxScale = 2f + val stepScale = 0.1f + + LeanbackSettingsCategoryListItem( + headlineContent = "界面字体缩放比例", + supportingContent = "短按切换缩放比例,长按恢复默认;部分界面受影响", + trailingContent = "×${DecimalFormat("#.#").format(settingsViewModel.uiFontScaleRatio)}", + onSelected = { + if (settingsViewModel.uiFontScaleRatio >= maxScale) { + settingsViewModel.uiFontScaleRatio = minScale + } else { + settingsViewModel.uiFontScaleRatio = + (settingsViewModel.uiFontScaleRatio + stepScale).coerceIn( + minScale, maxScale + ) + } + }, + onLongSelected = { + settingsViewModel.uiFontScaleRatio = defaultScale + }, + ) + } + + item { + LeanbackSettingsCategoryListItem( + headlineContent = "HTTP请求重试次数", + supportingContent = "影响直播源、节目单数据获取", + trailingContent = Constants.HTTP_RETRY_COUNT.toString(), + ) + } + + item { + LeanbackSettingsCategoryListItem( + headlineContent = "HTTP请求重试间隔时间", + supportingContent = "影响直播源、节目单数据获取", + trailingContent = Constants.HTTP_RETRY_INTERVAL.humanizeMs(), + ) + } + + item { + LeanbackSettingsCategoryListItem( + headlineContent = "全局画面比例", + trailingContent = when (settingsViewModel.videoPlayerAspectRatio) { + SP.VideoPlayerAspectRatio.ORIGINAL -> "原始" + SP.VideoPlayerAspectRatio.SIXTEEN_NINE -> "16:9" + SP.VideoPlayerAspectRatio.FOUR_THREE -> "4:3" + SP.VideoPlayerAspectRatio.AUTO -> "自动拉伸" + }, + onSelected = { + settingsViewModel.videoPlayerAspectRatio = + SP.VideoPlayerAspectRatio.entries.let { + it[(it.indexOf(settingsViewModel.videoPlayerAspectRatio) + 1) % it.size] + } + }, + ) + } + + + item { + val min = 1000 * 5L + val max = 1000 * 30L + val step = 1000 * 5L + + LeanbackSettingsCategoryListItem( + headlineContent = "播放器加载超时", + supportingContent = "影响超时换源、断线重连", + trailingContent = settingsViewModel.videoPlayerLoadTimeout.humanizeMs(), + onSelected = { + settingsViewModel.videoPlayerLoadTimeout = + max(min, (settingsViewModel.videoPlayerLoadTimeout + step) % (max + step)) + }, + ) + } + + item { + LeanbackSettingsCategoryListItem( + headlineContent = "播放器自定义UA", + supportingContent = settingsViewModel.videoPlayerUserAgent, + ) + } + + } + } +} + +@Preview +@Composable +private fun LeanbackSettingsCategoryAppPreview() { + SP.init(LocalContext.current) + LeanbackTheme { + LeanbackSettingsCategoryApp( + modifier = Modifier.padding(20.dp), + settingsViewModel = LeanbackSettingsViewModel(), + ) + } +} diff --git a/app/src/main/java/me/lsong/mytv/ui/settings/components/SettingsCategoryContent.kt b/app/src/main/java/me/lsong/mytv/ui/settings/components/SettingsCategoryContent.kt new file mode 100644 index 0000000..43f2230 --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/settings/components/SettingsCategoryContent.kt @@ -0,0 +1,42 @@ +package me.lsong.mytv.ui.settings.components + +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.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import me.lsong.mytv.ui.settings.LeanbackSettingsCategories + +@Composable +fun LeanbackSettingsCategoryContent( + modifier: Modifier = Modifier, + focusedCategoryProvider: () -> LeanbackSettingsCategories = { LeanbackSettingsCategories.entries.first() }, +) { + val focusedCategory = focusedCategoryProvider() + + Box( + modifier = modifier + .fillMaxSize() + .background(MaterialTheme.colorScheme.background.copy(alpha = 0.9f)), + ) { + Column ( + modifier = Modifier.padding(20.dp), + verticalArrangement = Arrangement.spacedBy(16.dp), + ){ + Text(text = focusedCategory.title, style = MaterialTheme.typography.headlineSmall) + + when (focusedCategory) { + LeanbackSettingsCategories.ABOUT -> LeanbackSettingsCategoryAbout() + LeanbackSettingsCategories.APP -> LeanbackSettingsCategoryApp() + LeanbackSettingsCategories.IPTV -> LeanbackSettingsCategoryIptv() + LeanbackSettingsCategories.EPG -> LeanbackSettingsCategoryEpg() + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/ui/settings/components/SettingsCategoryEpg.kt b/app/src/main/java/me/lsong/mytv/ui/settings/components/SettingsCategoryEpg.kt new file mode 100644 index 0000000..7db5961 --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/settings/components/SettingsCategoryEpg.kt @@ -0,0 +1,79 @@ +package me.lsong.mytv.ui.settings.components + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.lifecycle.viewmodel.compose.viewModel +import androidx.tv.foundation.lazy.list.TvLazyColumn +import me.lsong.mytv.ui.settings.LeanbackSettingsViewModel +import me.lsong.mytv.ui.theme.LeanbackTheme +import me.lsong.mytv.utils.Constants.APP_NAME +import me.lsong.mytv.utils.SP + +@Composable +fun LeanbackSettingsCategoryEpg( + modifier: Modifier = Modifier, + settingsViewModel: LeanbackSettingsViewModel = viewModel(), +) { + TvLazyColumn ( + modifier = modifier.padding(5.dp), + verticalArrangement = Arrangement.spacedBy(10.dp), + ) { + item { + LeanbackSettingsCategoryListItem( + headlineContent = "节目单刷新时间阈值", + supportingContent = "短按增加1小时,长按设为0小时;时间不到${settingsViewModel.epgRefreshTimeThreshold}:00节目单将不会刷新", + trailingContent = "${settingsViewModel.epgRefreshTimeThreshold}小时", + onSelected = { + settingsViewModel.epgRefreshTimeThreshold = + (settingsViewModel.epgRefreshTimeThreshold + 1) % 12 + }, + onLongSelected = { + settingsViewModel.epgRefreshTimeThreshold = 0 + }, + ) + } + item{ + Column { + Text(text = "自定义节目单", style = MaterialTheme.typography.titleMedium) + var epgUrls by remember { mutableStateOf(settingsViewModel.epgUrls) } + URLListEditor( + urls = epgUrls, + onUrlsChange = { newUrls -> + epgUrls = newUrls + settingsViewModel.epgUrls = newUrls + } + ) + Text( + style = MaterialTheme.typography.bodySmall, + text = "「${APP_NAME}」支持从直播源中获取 EPG 节目单 (x-tvg-url),您也可以在这里添加自定义节目单,如果没有提供,将使用默认的节目单提供商。" + ) + } + } + } + +} + +@Preview +@Composable +private fun LeanbackSettingsCategoryEpgPreview() { + SP.init(LocalContext.current) + LeanbackTheme { + LeanbackSettingsCategoryEpg( + modifier = Modifier.padding(20.dp), + settingsViewModel = LeanbackSettingsViewModel().apply { + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/ui/settings/components/SettingsCategoryIptv.kt b/app/src/main/java/me/lsong/mytv/ui/settings/components/SettingsCategoryIptv.kt new file mode 100644 index 0000000..620d289 --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/settings/components/SettingsCategoryIptv.kt @@ -0,0 +1,213 @@ +package me.lsong.mytv.ui.settings.components + +import android.widget.Toast +import androidx.compose.foundation.border +import androidx.compose.foundation.focusable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.widthIn +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.lazy.itemsIndexed +import androidx.compose.foundation.selection.selectable +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Add +import androidx.compose.material.icons.filled.Delete +import androidx.compose.material3.* +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.text.style.TextIndent +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.lifecycle.viewmodel.compose.viewModel +import androidx.tv.foundation.lazy.list.TvLazyColumn +import androidx.tv.foundation.lazy.list.items +import androidx.tv.material3.Icon +import androidx.tv.material3.ListItemColors +import androidx.tv.material3.ListItemDefaults +import androidx.tv.material3.MaterialTheme +import kotlinx.coroutines.launch +import me.lsong.mytv.iptv.IptvRepository +import me.lsong.mytv.ui.settings.LeanbackSettingsViewModel +import me.lsong.mytv.ui.theme.LeanbackTheme +import me.lsong.mytv.ui.toast.LeanbackToastState +import me.lsong.mytv.utils.Constants.APP_NAME +import me.lsong.mytv.utils.SP + +@Composable +fun URLListEditor( + urls: Set, + onUrlsChange: (Set) -> Unit +) { + var selectedItems by remember { mutableStateOf(setOf()) } + var showDialog by remember { mutableStateOf(false) } + var inputSource by remember { mutableStateOf("") } + + Column( + modifier = Modifier.fillMaxSize(), + verticalArrangement = Arrangement.spacedBy(10.dp) + ) { + // List of URLs + LazyColumn( + modifier = Modifier + .height(200.dp) + .fillMaxWidth() + .border(1.dp, color = MaterialTheme.colorScheme.border), + verticalArrangement = Arrangement.spacedBy(10.dp), + contentPadding = PaddingValues(20.dp, 10.dp), + ) { + itemsIndexed(urls.toList()) { _, url -> + androidx.tv.material3.ListItem( + colors = ListItemDefaults.colors( + containerColor = MaterialTheme.colorScheme.surface, + focusedContainerColor = MaterialTheme.colorScheme.onPrimary, + ), + selected = selectedItems.contains(url), + onClick = { + selectedItems = if (selectedItems.contains(url)) { + selectedItems - url + } else { + selectedItems + url + } + }, + headlineContent = { + Row { + Checkbox(checked = selectedItems.contains(url), onCheckedChange = null) + Spacer(modifier = Modifier.width(10.dp)) + Text(text = url, maxLines = 1) + } + } + ) + } + } + + if (showDialog) { + AlertDialog( + modifier = Modifier.fillMaxWidth(), + shape = androidx.compose.material3.MaterialTheme.shapes.extraSmall, + title = { Text("Input URL") }, + onDismissRequest = { showDialog = false }, + text = { + TextField( + value = inputSource, + modifier = Modifier.fillMaxWidth(), + onValueChange = { inputSource = it } + ) + }, + confirmButton = { + Button(onClick = { + onUrlsChange(urls + inputSource) + showDialog = false + inputSource = "" + }) { + Text("Confirm") + } + }, + dismissButton = { + Button(onClick = { showDialog = false }) { + Text("Cancel") + } + } + ) + } + + Row { + IconButton(onClick = { + showDialog = true + }) { + Icon(Icons.Default.Add, contentDescription = "Add") + } + IconButton(onClick = { + onUrlsChange(urls - selectedItems) + selectedItems = emptySet() + }) { + Icon(Icons.Default.Delete, contentDescription = "Delete") + } + } + } +} + + +@Composable +fun LeanbackSettingsCategoryIptv( + modifier: Modifier = Modifier, + settingsViewModel: LeanbackSettingsViewModel = viewModel(), +) { + TvLazyColumn ( + modifier = modifier.padding(5.dp), + verticalArrangement = Arrangement.spacedBy(10.dp), + ) { + // Existing items + item { + LeanbackSettingsCategoryListItem( + headlineContent = "换台反转", + supportingContent = if (settingsViewModel.iptvChannelChangeFlip) "方向键上:下一个频道;方向键下:上一个频道" + else "方向键上:上一个频道;方向键下:下一个频道", + trailingContent = { + Switch( + checked = settingsViewModel.iptvChannelChangeFlip, + onCheckedChange = null + ) + }, + onSelected = { + settingsViewModel.iptvChannelChangeFlip = + !settingsViewModel.iptvChannelChangeFlip + }, + ) + } + + item { + Column { + Text(text = "IPTV 源管理", style = MaterialTheme.typography.titleMedium) + var iptvSourceUrls by remember { mutableStateOf(settingsViewModel.iptvSourceUrls) } + URLListEditor( + urls = iptvSourceUrls, + onUrlsChange = { newUrls -> + iptvSourceUrls = newUrls + settingsViewModel.iptvSourceUrls = newUrls + } + ) + Text( + style = androidx.compose.material3.MaterialTheme.typography.bodySmall, + text = "「${APP_NAME}」支持从多个直播源中获取频道播放地址,您也可以在这里添加自定义直播源,如果没有提供,将使用默认的直播源提供商。" + ) + } + } + + } + + +} + +@Preview +@Composable +private fun MyTvSettingsPreview() { + SP.init(LocalContext.current) + LeanbackTheme { + LeanbackSettingsCategoryIptv( + modifier = Modifier.padding(20.dp), + settingsViewModel = LeanbackSettingsViewModel().apply { + iptvSourceCacheTime = 3_600_000 + iptvSourceUrls = setOf( + "https://iptv-org.github.io/iptv/iptv.m3u", + "https://iptv-org.github.io/iptv/iptv2.m3u", + "https://iptv-org.github.io/iptv/iptv3.m3u", + ) + }, + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/ui/settings/components/SettingsCategoryList.kt b/app/src/main/java/me/lsong/mytv/ui/settings/components/SettingsCategoryList.kt new file mode 100644 index 0000000..0c2e660 --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/settings/components/SettingsCategoryList.kt @@ -0,0 +1,127 @@ +package me.lsong.mytv.ui.settings.components + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue +import androidx.compose.ui.ExperimentalComposeUiApi +import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusDirection +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.focus.focusRestorer +import androidx.compose.ui.focus.onFocusChanged +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.platform.LocalFocusManager +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.tv.foundation.lazy.list.TvLazyColumn +import androidx.tv.foundation.lazy.list.itemsIndexed +import me.lsong.mytv.ui.settings.LeanbackSettingsCategories +import me.lsong.mytv.ui.theme.LeanbackTheme +import me.lsong.mytv.utils.handleLeanbackKeyEvents + +@OptIn(ExperimentalComposeUiApi::class) +@Composable +fun LeanbackSettingsCategoryList( + modifier: Modifier = Modifier, + focusedCategoryProvider: () -> LeanbackSettingsCategories = { LeanbackSettingsCategories.entries.first() }, + onFocused: (LeanbackSettingsCategories) -> Unit = {}, +) { + var hasFocused = rememberSaveable { false } + + TvLazyColumn( + contentPadding = PaddingValues(vertical = 4.dp), + verticalArrangement = Arrangement.spacedBy(10.dp), + modifier = modifier.focusRestorer() + ) { + itemsIndexed(LeanbackSettingsCategories.entries) { index, category -> + val isSelected by remember { derivedStateOf { focusedCategoryProvider() == category } } + val focusRequester = remember { FocusRequester() } + LaunchedEffect(Unit) { + if (index == 0 && !hasFocused) { + focusRequester.requestFocus() + hasFocused = true + } + } + + LeanbackSettingsCategoryItem( + modifier = Modifier.focusRequester(focusRequester), + icon = category.icon, + title = category.title, + isSelectedProvider = { isSelected }, + onFocused = { onFocused(category) }, + ) + } + } +} + +@Composable +private fun LeanbackSettingsCategoryItem( + modifier: Modifier = Modifier, + icon: ImageVector, + title: String, + isSelectedProvider: () -> Boolean = { false }, + onFocused: () -> Unit = {}, +) { + val focusManager = LocalFocusManager.current + val focusRequester = remember { FocusRequester() } + var isFocused by remember { mutableStateOf(false) } + + androidx.tv.material3.ListItem( + selected = isSelectedProvider(), + onClick = { }, + leadingContent = { androidx.tv.material3.Icon(icon, title) }, + headlineContent = { androidx.tv.material3.Text(text = title) }, + modifier = modifier + .focusRequester(focusRequester) + .onFocusChanged { + isFocused = it.isFocused || it.hasFocus + if (isFocused) { + onFocused() + } + } + .handleLeanbackKeyEvents( + onSelect = { + if (isFocused) focusManager.moveFocus(FocusDirection.Right) + else focusRequester.requestFocus() + } + ), + ) +} + +@Preview +@Composable +private fun LeanbackSettingsCategoryItemPreview() { + LeanbackTheme { + Column( + verticalArrangement = Arrangement.spacedBy(10.dp) + ) { + LeanbackSettingsCategoryItem( + icon = LeanbackSettingsCategories.ABOUT.icon, + title = LeanbackSettingsCategories.ABOUT.title, + ) + + LeanbackSettingsCategoryItem( + icon = LeanbackSettingsCategories.ABOUT.icon, + title = LeanbackSettingsCategories.ABOUT.title, + isSelectedProvider = { true }, + ) + } + } +} + +@Preview +@Composable +private fun LeanbackSettingsCategoryListPreview() { + LeanbackTheme { + LeanbackSettingsCategoryList() + } +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/ui/settings/components/SettingsCategoryListItem.kt b/app/src/main/java/me/lsong/mytv/ui/settings/components/SettingsCategoryListItem.kt new file mode 100644 index 0000000..5fda794 --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/settings/components/SettingsCategoryListItem.kt @@ -0,0 +1,85 @@ +package me.lsong.mytv.ui.settings.components + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.surfaceColorAtElevation +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.focus.onFocusChanged +import androidx.compose.ui.unit.dp +import androidx.tv.material3.ListItemDefaults +import androidx.tv.material3.Text +import me.lsong.mytv.utils.handleLeanbackKeyEvents + +@Composable +fun LeanbackSettingsCategoryListItem( + modifier: Modifier = Modifier, + headlineContent: String, + supportingContent: String? = null, + trailingContent: @Composable () -> Unit = {}, + onSelected: (() -> Unit)? = null, + onLongSelected: () -> Unit = {}, +) { + val focusRequester = remember { FocusRequester() } + var isFocused by remember { mutableStateOf(false) } + + androidx.tv.material3.ListItem( + selected = false, + onClick = { }, + colors = ListItemDefaults.colors( + containerColor = MaterialTheme.colorScheme.surfaceColorAtElevation(4.dp), + ), + headlineContent = { + Text(text = headlineContent) + }, + trailingContent = { + Row( + horizontalArrangement = Arrangement.spacedBy(4.dp), + verticalAlignment = androidx.compose.ui.Alignment.CenterVertically, + ) { + trailingContent() + } + }, + supportingContent = { supportingContent?.let { Text(it) } }, + modifier = modifier + .focusRequester(focusRequester) + .onFocusChanged { isFocused = it.isFocused || it.hasFocus } + .handleLeanbackKeyEvents( + onSelect = { + if (isFocused) { + if (onSelected != null) onSelected() + } else focusRequester.requestFocus() + }, + onLongSelect = { + if (isFocused) onLongSelected() + else focusRequester.requestFocus() + }, + ), + ) +} + +@Composable +fun LeanbackSettingsCategoryListItem( + modifier: Modifier = Modifier, + headlineContent: String, + supportingContent: String? = null, + trailingContent: String, + onSelected: () -> Unit = {}, + onLongSelected: () -> Unit = {}, +) { + LeanbackSettingsCategoryListItem( + modifier = modifier, + headlineContent = headlineContent, + supportingContent = supportingContent, + trailingContent = { Text(trailingContent) }, + onSelected = onSelected, + onLongSelected = onLongSelected, + ) +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/ui/theme/LeanbackTheme.kt b/app/src/main/java/me/lsong/mytv/ui/theme/LeanbackTheme.kt new file mode 100644 index 0000000..3e27012 --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/theme/LeanbackTheme.kt @@ -0,0 +1,77 @@ +package me.lsong.mytv.ui.theme + +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.darkColorScheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.ui.graphics.Color + +private val darkColorScheme + @Composable get() = darkColorScheme( + primary = Color(0xFFA8C8FF), + onPrimary = Color(0xFF003062), + primaryContainer = Color(0xFF00468A), + onPrimaryContainer = Color(0xFFD6E3FF), + secondary = Color(0xFFBDC7DC), + onSecondary = Color(0xFF273141), + secondaryContainer = Color(0xFF3E4758), + onSecondaryContainer = Color(0xFFD9E3F8), + tertiary = Color(0xFFDCBCE1), + onTertiary = Color(0xFF3E2845), + tertiaryContainer = Color(0xFF563E5C), + onTertiaryContainer = Color(0xFFF9D8FE), + background = Color(0xFF000000), + onBackground = Color(0xFFFFFFFF), + surface = Color(0xFF1A1C1E), + onSurface = Color(0xFFE3E2E6), + surfaceVariant = Color(0xFF43474E), + onSurfaceVariant = Color(0xFFC4C6CF), + error = Color(0xFFFFB4AB), + onError = Color(0xFF690005), + errorContainer = Color(0xFF93000A), + onErrorContainer = Color(0xFFFFB4AB), + ) + +@Composable +fun LeanbackTheme( + content: @Composable () -> Unit, +) { + MaterialTheme( + colorScheme = darkColorScheme, + ) { + androidx.tv.material3.MaterialTheme( + androidx.tv.material3.darkColorScheme( + primary = MaterialTheme.colorScheme.primary, + onPrimary = MaterialTheme.colorScheme.onPrimary, + primaryContainer = MaterialTheme.colorScheme.primaryContainer, + onPrimaryContainer = MaterialTheme.colorScheme.onPrimaryContainer, + secondary = MaterialTheme.colorScheme.secondary, + onSecondary = MaterialTheme.colorScheme.onSecondary, + secondaryContainer = MaterialTheme.colorScheme.secondaryContainer, + onSecondaryContainer = MaterialTheme.colorScheme.onSecondaryContainer, + tertiary = MaterialTheme.colorScheme.tertiary, + onTertiary = MaterialTheme.colorScheme.onTertiary, + tertiaryContainer = MaterialTheme.colorScheme.tertiaryContainer, + onTertiaryContainer = MaterialTheme.colorScheme.onTertiaryContainer, + background = MaterialTheme.colorScheme.background, + onBackground = MaterialTheme.colorScheme.onBackground, + surface = MaterialTheme.colorScheme.surface, + onSurface = MaterialTheme.colorScheme.onSurface, + surfaceVariant = MaterialTheme.colorScheme.surfaceVariant, + onSurfaceVariant = MaterialTheme.colorScheme.onSurfaceVariant, + error = MaterialTheme.colorScheme.error, + onError = MaterialTheme.colorScheme.onError, + errorContainer = MaterialTheme.colorScheme.errorContainer, + onErrorContainer = MaterialTheme.colorScheme.onErrorContainer, + ), + ) { + CompositionLocalProvider( + LocalContentColor provides MaterialTheme.colorScheme.onBackground, + androidx.tv.material3.LocalContentColor provides androidx.tv.material3.MaterialTheme.colorScheme.onBackground, + ) { + content() + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/ui/toast/ToastScreen.kt b/app/src/main/java/me/lsong/mytv/ui/toast/ToastScreen.kt new file mode 100644 index 0000000..ca7a5c9 --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/toast/ToastScreen.kt @@ -0,0 +1,136 @@ +package me.lsong.mytv.ui.toast + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.scaleIn +import androidx.compose.animation.scaleOut +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.sizeIn +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Info +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.IntOffset +import androidx.compose.ui.unit.dp +import androidx.compose.ui.window.Popup +import androidx.tv.material3.Icon +import androidx.tv.material3.MaterialTheme +import kotlinx.coroutines.delay +import me.lsong.mytv.ui.theme.LeanbackTheme + +@Composable +fun LeanbackToastScreen( + modifier: Modifier = Modifier, + state: LeanbackToastState = rememberLeanbackToastState(), +) { + Popup( + alignment = Alignment.BottomCenter, + offset = IntOffset(0, with(LocalDensity.current) { -28.dp.toPx().toInt() }), + ) { + AnimatedVisibility( + visible = state.visible, + enter = fadeIn() + scaleIn(), + exit = fadeOut() + scaleOut(), + modifier = modifier, + ) { + LeanbackToastItem(property = state.current) + } + } +} + +@Composable +fun LeanbackToastItem( + modifier: Modifier = Modifier, + property: LeanbackToastProperty = LeanbackToastProperty(), +) { + Box( + modifier = modifier + .sizeIn(maxWidth = 556.dp) + .background(MaterialTheme.colorScheme.inverseSurface, MaterialTheme.shapes.medium) + .padding(horizontal = 16.dp, vertical = 12.dp), + ) { + Row( + horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + LeanbackToastContentIcon( + showIcon = true, + icon = Icons.Outlined.Info, + iconColor = MaterialTheme.colorScheme.inverseOnSurface, + iconContainerColors = MaterialTheme.colorScheme.onSurfaceVariant, + ) + + androidx.tv.material3.Text( + property.message, + color = MaterialTheme.colorScheme.inverseOnSurface + ) + } + } +} + +@Composable +private fun LeanbackToastContentIcon( + modifier: Modifier = Modifier, + showIcon: Boolean, + icon: ImageVector, + iconColor: Color, + iconContainerColors: Color, +) { + if (showIcon) { + Box( + modifier = modifier + .background(iconContainerColors, CircleShape) + .padding(8.dp), + ) { + Icon( + imageVector = icon, + contentDescription = null, + modifier = Modifier.size(16.dp), + tint = iconColor, + ) + } + } +} + +@Preview(device = "id:Android TV (720p)", showBackground = true) +@Composable +private fun LeanbackToastScreenAnimationPreview() { + LeanbackTheme { + val state = rememberLeanbackToastState() + + LaunchedEffect(Unit) { + while (true) { + state.showToast("新版本: v1.2.2") + delay(1000) + state.showToast("新版本: v9.9.9") + delay(5000) + } + } + + LeanbackToastScreen(state = state) + } +} + +@Preview(showBackground = true) +@Composable +private fun LeanbackToastScreenPreview() { + LeanbackTheme { + LeanbackToastItem( + modifier = Modifier.padding(16.dp), + property = LeanbackToastProperty(message = "新版本: v1.2.2"), + ) + } +} diff --git a/app/src/main/java/me/lsong/mytv/ui/toast/ToastState.kt b/app/src/main/java/me/lsong/mytv/ui/toast/ToastState.kt new file mode 100644 index 0000000..76e177b --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/toast/ToastState.kt @@ -0,0 +1,91 @@ +package me.lsong.mytv.ui.toast + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.Stable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.FlowPreview +import kotlinx.coroutines.channels.Channel +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.consumeAsFlow +import kotlinx.coroutines.flow.debounce +import kotlinx.coroutines.launch +import me.lsong.mytv.ui.toast.LeanbackToastProperty.Companion.toMs +import java.util.UUID + +@Stable +class LeanbackToastState(private val coroutineScope: CoroutineScope) { + private var _visible by mutableStateOf(false) + val visible get() = _visible + + private var _current by mutableStateOf(LeanbackToastProperty()) + val current get() = _current + + private fun showToast(toast: LeanbackToastProperty) { + coroutineScope.launch { + if (_visible && _current.id != toast.id) { + _visible = false + delay(300) + } + + _current = toast + _visible = true + channel.trySend(toast.duration.toMs()) + } + } + + fun showToast( + message: String, + duration: LeanbackToastProperty.Duration = LeanbackToastProperty.Duration.Default, + id: String = UUID.randomUUID().toString(), + ) { + showToast(LeanbackToastProperty(message = message, duration = duration, id = id)) + } + + private val channel = Channel(Channel.CONFLATED) + + @OptIn(FlowPreview::class) + suspend fun observe() { + channel.consumeAsFlow().debounce { it.toLong() }.collect { _visible = false } + } + + companion object { + // TODO 这种方法可能违反了 Compose 的规则 + lateinit var I: LeanbackToastState + } +} + +@Composable +fun rememberLeanbackToastState(): LeanbackToastState { + val coroutineScope = rememberCoroutineScope() + + return remember { + LeanbackToastState(coroutineScope) + }.also { + LeanbackToastState.I = it + LaunchedEffect(it) { it.observe() } + } +} + +data class LeanbackToastProperty( + val message: String = "", + val duration: Duration = Duration.Default, + val id: String = UUID.randomUUID().toString(), +) { + sealed interface Duration { + data object Default : Duration + data class Custom(val duration: Int) : Duration + } + + companion object { + fun Duration.toMs(): Int = when (val it = this) { + is Duration.Default -> 2300 + is Duration.Custom -> it.duration + } + } +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/ui/widgets/Menu.kt b/app/src/main/java/me/lsong/mytv/ui/widgets/Menu.kt new file mode 100644 index 0000000..7e622e4 --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/widgets/Menu.kt @@ -0,0 +1,165 @@ +package me.lsong.mytv.ui.widgets + +import androidx.compose.foundation.layout.Row +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.DisplaySettings +import androidx.compose.material.icons.filled.Info +import androidx.compose.material.icons.filled.LiveTv +import androidx.compose.material.icons.filled.Menu +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.ExperimentalComposeUiApi +import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusDirection +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusProperties +import androidx.compose.ui.tooling.preview.Preview +import me.lsong.mytv.epg.EpgChannel +import me.lsong.mytv.epg.EpgList +import me.lsong.mytv.epg.EpgProgramme +import me.lsong.mytv.iptv.TVChannel +import me.lsong.mytv.iptv.TVChannelList +import me.lsong.mytv.iptv.TVGroup +import me.lsong.mytv.iptv.TVGroupList +import me.lsong.mytv.iptv.TVGroupList.Companion.channels +import me.lsong.mytv.iptv.TVGroupList.Companion.findGroupIndex +import me.lsong.mytv.ui.components.MyTvChannelList +import me.lsong.mytv.ui.components.MyTvGroupList +import me.lsong.mytv.ui.settings.LeanbackSettingsCategories +import me.lsong.mytv.ui.settings.components.LeanbackSettingsCategoryContent +import me.lsong.mytv.ui.theme.LeanbackTheme +import me.lsong.mytv.ui.toast.LeanbackToastState +import me.lsong.mytv.utils.SP +import me.lsong.mytv.utils.handleLeanbackKeyEvents +import kotlin.math.max + +@OptIn(ExperimentalComposeUiApi::class) +@Composable +fun MyTvMenu( + modifier: Modifier = Modifier, + groupListProvider: () -> TVGroupList = { TVGroupList() }, + epgListProvider: () -> EpgList = { EpgList() }, + channelProvider: () -> TVChannel = { TVChannel() }, + onSelected: (TVChannel) -> Unit = {}, + onUserAction: () -> Unit = {}, + onClose: () -> Unit = {}, +) { + val groupList = groupListProvider() + val currentChannel = channelProvider() + var focusedIptvGroup by remember { + mutableStateOf( + groupList[max(0, groupList.findGroupIndex(currentChannel))] + ) + } + val focusedIptvFocusRequester by remember { mutableStateOf(FocusRequester.Default) } + var isSettingsVisible by remember { mutableStateOf(false) } + var selectedCategoryProvider by remember { mutableStateOf(LeanbackSettingsCategories.entries.first()) } + val favoriteChannels by remember { mutableStateOf(SP.iptvChannelFavoriteList) } + val favoriteGroup = TVGroup( + title = "我的收藏", + channels = TVChannelList(groupList.channels.filter { favoriteChannels.contains(it.name) }) + ) + + val settingsGroup = TVGroup( + title = "设置", + channels = TVChannelList( + listOf( + TVChannel(title = "通用", icon = Icons.Default.DisplaySettings), + TVChannel(title = "直播源", icon = Icons.Default.LiveTv), + TVChannel(title = "节目单", icon = Icons.Default.Menu), + TVChannel(title = "关于", icon = Icons.Default.Info), + ) + ) + ) + + Row(modifier = modifier) { + if (!isSettingsVisible) { + MyTvGroupList( + groupListProvider = { TVGroupList(listOf(favoriteGroup) + groupList + listOf(settingsGroup)) }, + focusedGroupProvider = { focusedIptvGroup }, + onGroupFocused = { focusedIptvGroup = it }, + exitFocusRequesterProvider = { focusedIptvFocusRequester }, + onUserAction = onUserAction, + ) + } + MyTvChannelList( + modifier = Modifier + .handleLeanbackKeyEvents( + onLeft = { + if (isSettingsVisible) { + isSettingsVisible = false + } + }, + ) + .focusProperties { + exit = { + if (isSettingsVisible && it == FocusDirection.Left) { + isSettingsVisible = false + FocusRequester.Cancel + } else { + FocusRequester.Default + } + } + }, + epgListProvider = epgListProvider, + channelsProvider = { focusedIptvGroup.channels }, + focusedProvider = channelProvider, + onUserAction = onUserAction, + onSelected = { + if (focusedIptvGroup.title == "设置") { + isSettingsVisible = true + when(it.title) { + LeanbackSettingsCategories.APP.title -> selectedCategoryProvider = LeanbackSettingsCategories.APP + LeanbackSettingsCategories.IPTV.title -> selectedCategoryProvider = LeanbackSettingsCategories.IPTV + LeanbackSettingsCategories.EPG.title -> selectedCategoryProvider = LeanbackSettingsCategories.EPG + LeanbackSettingsCategories.ABOUT.title -> selectedCategoryProvider = LeanbackSettingsCategories.ABOUT + } + } else { + onSelected(it) + } + }, + onFavoriteToggle = { + if (favoriteChannels.contains(it.name)) { + SP.iptvChannelFavoriteList -= it.name + LeanbackToastState.I.showToast("取消收藏: ${it.title}") + } else { + SP.iptvChannelFavoriteList += it.name + LeanbackToastState.I.showToast("收藏: ${it.title}") + } + } + ) + if (isSettingsVisible) { + LeanbackSettingsCategoryContent( + focusedCategoryProvider = {selectedCategoryProvider} + ) + } + } +} + +@Preview(device = "id:Android TV (720p)") +@Composable +private fun MyTvMenuPreview() { + LeanbackTheme { + MyTvMenu( + groupListProvider = { TVGroupList.EXAMPLE }, + epgListProvider = { + EpgList(TVGroupList.EXAMPLE.channels.map { + EpgChannel( + id = it.name, + programmes = List(5) { idx -> + EpgProgramme( + startAt = System.currentTimeMillis() + idx * 60 * 60 * 1000L, + endAt = System.currentTimeMillis() + (idx + 1) * 60 * 60 * 1000L, + title = "${it.title}节目${idx + 1}", + ) + } + ) + }) + }, + ) + } +} + diff --git a/app/src/main/java/me/lsong/mytv/ui/widgets/NowPlaying.kt b/app/src/main/java/me/lsong/mytv/ui/widgets/NowPlaying.kt new file mode 100644 index 0000000..65a82c4 --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/ui/widgets/NowPlaying.kt @@ -0,0 +1,94 @@ +package me.lsong.mytv.ui.widgets + +import androidx.compose.foundation.background +import androidx.compose.foundation.gestures.detectTapGestures +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.input.pointer.pointerInput +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import me.lsong.mytv.rememberLeanbackChildPadding +import me.lsong.mytv.epg.EpgList +import me.lsong.mytv.epg.EpgList.Companion.getEpgChannel +import me.lsong.mytv.iptv.TVChannel +import me.lsong.mytv.ui.components.LeanbackPanelDateTime +import me.lsong.mytv.ui.components.MyTvChannelInfo +import me.lsong.mytv.ui.components.MyTvEpgView +import me.lsong.mytv.ui.components.MyTvPlayerInfo +import me.lsong.mytv.ui.player.LeanbackVideoPlayer +import me.lsong.mytv.ui.theme.LeanbackTheme + +@Composable +fun MyTvNowPlaying( + modifier: Modifier = Modifier, + epgListProvider: () -> EpgList = { EpgList() }, + channelProvider: () -> TVChannel = { TVChannel() }, + channelIndexProvider: () -> Int = { 0 }, + sourceIndexProvider: () -> Int = { 0 }, + videoPlayerMetadataProvider: () -> LeanbackVideoPlayer.Metadata = { LeanbackVideoPlayer.Metadata() }, + onClose: () -> Unit = {}, +) { + val childPadding = rememberLeanbackChildPadding() + + Box( + modifier = modifier + .fillMaxSize() + .background(MaterialTheme.colorScheme.background.copy(alpha = 0.5f)) + .pointerInput(Unit) { detectTapGestures(onTap = { onClose() }) }, + ) { + Column( + modifier = Modifier + .align(Alignment.BottomStart) + .padding(bottom = childPadding.bottom), + verticalArrangement = Arrangement.spacedBy(20.dp), + ) { + MyTvChannelInfo( + modifier = modifier + .padding( + start = childPadding.start, + end = childPadding.end + ), + channelProvider = channelProvider, + channelIndexProvider = channelIndexProvider, + channelSourceIndexProvider = sourceIndexProvider, + ) + + val epg = epgListProvider().getEpgChannel(channelProvider()) + if (epg != null) { + MyTvEpgView( + modifier = modifier, + epgProvider = { epg }, + ) + } + MyTvPlayerInfo( + modifier = modifier.padding(start = childPadding.start, bottom = childPadding.bottom), + metadataProvider = videoPlayerMetadataProvider + ) + } + Column ( + modifier = Modifier + .align(Alignment.TopEnd) + .padding(top = childPadding.top, end = childPadding.end) + ) { + LeanbackPanelDateTime() + } + } +} + +@Preview(device = "id:Android TV (720p)") +@Composable +private fun MyTvNowPlayingPreview() { + LeanbackTheme { + MyTvNowPlaying( + channelProvider = { TVChannel.EXAMPLE }, + sourceIndexProvider = { 0 }, + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/utils/ApkInstaller.kt b/app/src/main/java/me/lsong/mytv/utils/ApkInstaller.kt new file mode 100644 index 0000000..cd0ea87 --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/utils/ApkInstaller.kt @@ -0,0 +1,37 @@ +package me.lsong.mytv.utils + +import android.annotation.SuppressLint +import android.content.Context +import android.content.Intent +import android.net.Uri +import android.os.Build +import androidx.core.content.FileProvider +import java.io.File + +object ApkInstaller { + @SuppressLint("SetWorldReadable") + fun installApk(context: Context, filePath: String) { + val file = File(filePath) + if (file.exists()) { + val cacheDir = context.cacheDir + val cachedApkFile = File(cacheDir, file.name).apply { + writeBytes(file.readBytes()) + // 解决Android6 无法解析安装包 + setReadable(true, false) + } + + val uri = + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) FileProvider.getUriForFile( + context, context.packageName + ".FileProvider", cachedApkFile + ) + else Uri.fromFile(cachedApkFile) + + val installIntent = Intent(Intent.ACTION_VIEW).apply { + flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_GRANT_READ_URI_PERMISSION + setDataAndType(uri, "application/vnd.android.package-archive") + } + + context.startActivity(installIntent) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/utils/Constants.kt b/app/src/main/java/me/lsong/mytv/utils/Constants.kt new file mode 100644 index 0000000..784cb85 --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/utils/Constants.kt @@ -0,0 +1,83 @@ +package me.lsong.mytv.utils + +import androidx.compose.ui.text.intl.Locale + +/** + * 常量 + */ +object Constants { + /** + * 应用 标题 + */ + const val APP_NAME = "DuckTV" + + val TIME_ZONE = java.util.Locale.CHINA + + /** + * IPTV源地址 + * + */ + const val IPTV_SOURCE_URL = "https://raw.githubusercontent.com/YueChan/Live/main/IPTV.m3u" + // https://raw.githubusercontent.com/fanmingming/live/main/tv/m3u/ipv6.m3u + + /** + * IPTV源缓存时间(毫秒) + */ + const val IPTV_SOURCE_CACHE_TIME = 1000 * 60 * 60 * 24L // 24小时 + + /** + * 节目单XML地址 + */ + const val EPG_XML_URL = "http://epg.51zmt.top:8000/e.xml.gz" + // const val EPG_XML_URL = "https://live.fanmingming.com/e.xml" + // + /** + * 节目单刷新时间阈值(小时) + */ + const val EPG_REFRESH_TIME_THRESHOLD = 2 // 不到2点不刷新 + + /** + * GitHub加速代理地址 + */ + const val GITHUB_PROXY = "https://mirror.ghproxy.com/" + + /** + * HTTP请求重试次数 + */ + const val HTTP_RETRY_COUNT = 10L + + /** + * HTTP请求重试间隔时间(毫秒) + */ + const val HTTP_RETRY_INTERVAL = 3000L + + /** + * 播放器 userAgent + */ + const val VIDEO_PLAYER_USER_AGENT = "ExoPlayer" + + /** + * 日志历史最大保留条数 + */ + const val LOG_HISTORY_MAX_SIZE = 50 + + /** + * 播放器加载超时 + */ + const val VIDEO_PLAYER_LOAD_TIMEOUT = 1000L * 15 // 15秒 + + /** + * 界面 超时未操作自动关闭界面 + */ + const val UI_SCREEN_AUTO_CLOSE_DELAY = 1000L * 15 // 15秒 + + /** + * 界面 时间显示前后范围 + */ + const val UI_TIME_SHOW_RANGE = 1000L * 30 // 前后30秒 + + /** + * 界面 临时面板界面显示时间 + */ + const val UI_TEMP_PANEL_SCREEN_SHOW_DURATION = 1500L // 1.5秒 +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/utils/ExtensionUtils.kt b/app/src/main/java/me/lsong/mytv/utils/ExtensionUtils.kt new file mode 100644 index 0000000..2b710cc --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/utils/ExtensionUtils.kt @@ -0,0 +1,50 @@ +package me.lsong.mytv.utils + +import java.util.regex.Pattern + +fun Long.humanizeMs(): String { + return when (this) { + in 0..<60_000 -> "${this / 1000}秒" + in 60_000..<3_600_000 -> "${this / 60_000}分钟" + else -> "${this / 3_600_000}小时" + } +} + +fun String.isIPv6(): Boolean { + val urlPattern = Pattern.compile( + "^((http|https)://)?(\\[[0-9a-fA-F:]+])(:[0-9]+)?(/.*)?$" + ) + return urlPattern.matcher(this).matches() +} + +fun String.compareVersion(version2: String): Int { + fun parseVersion(version: String): Pair, String?> { + val mainParts = version.split("-", limit = 2) + val versionNumbers = mainParts[0].split(".").map { it.toInt() } + val preReleaseLabel = if (mainParts.size > 1) mainParts[1] else null + return versionNumbers to preReleaseLabel + } + + fun comparePreRelease(label1: String?, label2: String?): Int { + if (label1 == null && label2 == null) return 0 + if (label1 == null) return 1 // Non-pre-release version is greater + if (label2 == null) return -1 // Non-pre-release version is greater + + // Compare pre-release labels lexicographically + return label1.compareTo(label2) + } + + val (v1, preRelease1) = parseVersion(this) + val (v2, preRelease2) = parseVersion(version2) + val maxLength = maxOf(v1.size, v2.size) + + for (i in 0 until maxLength) { + val part1 = v1.getOrElse(i) { 0 } + val part2 = v2.getOrElse(i) { 0 } + if (part1 > part2) return 1 + if (part1 < part2) return -1 + } + + // If main version parts are equal, compare pre-release labels + return comparePreRelease(preRelease1, preRelease2) +} \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/utils/HttpServer.kt b/app/src/main/java/me/lsong/mytv/utils/HttpServer.kt new file mode 100644 index 0000000..9c3a0a4 --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/utils/HttpServer.kt @@ -0,0 +1,168 @@ +package me.lsong.mytv.ui.utils + +import android.content.Context +import android.util.Log +import android.widget.Toast +import com.koushikdutta.async.AsyncServer +import com.koushikdutta.async.http.body.JSONObjectBody +import com.koushikdutta.async.http.body.MultipartFormDataBody +import com.koushikdutta.async.http.server.AsyncHttpServer +import com.koushikdutta.async.http.server.AsyncHttpServerRequest +import com.koushikdutta.async.http.server.AsyncHttpServerResponse +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.serialization.Serializable +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json +import me.lsong.mytv.AppGlobal +import me.lsong.mytv.R +import me.lsong.mytv.epg.EpgRepository +import me.lsong.mytv.iptv.IptvRepository +import me.lsong.mytv.utils.Constants +import me.lsong.mytv.utils.ApkInstaller +import me.lsong.mytv.utils.SP +import java.io.File +import java.net.Inet4Address +import java.net.NetworkInterface +import java.net.SocketException + +object HttpServer { + private const val SERVER_PORT = 10481 + private var showToast: (String) -> Unit = { } + val serverUrl: String by lazy { + "http://${getLocalIpAddress()}:${SERVER_PORT}" + } + + fun start(context: Context, showToast: (String) -> Unit) { + CoroutineScope(Dispatchers.IO).launch { + try { + val server = AsyncHttpServer() + server.listen(AsyncServer.getDefault(), SERVER_PORT) + + server.get("/") { _, response -> + handleRawResource(response, context, "text/html", R.raw.index) + } + server.get("/index_css.css") { _, response -> + handleRawResource(response, context, "text/css", R.raw.index_css) + } + server.get("/index_js.js") { _, response -> + handleRawResource(response, context, "text/javascript", R.raw.index_js) + } + + server.get("/api/settings") { _, response -> + handleGetSettings(response) + } + + server.post("/api/settings") { request, response -> + handleSetSettings(request, response) + } + + server.post("/api/upload/apk") { request, response -> + // handleUploadApk(request, response, context) + } + + HttpServer.showToast = showToast + Log.i("server", "服务已启动: 0.0.0.0:${SERVER_PORT}") + } catch (ex: Exception) { + Log.e("server", "服务启动失败: ${ex.message}", ex) + launch(Dispatchers.Main) { + Toast.makeText(context, "设置服务启动失败", Toast.LENGTH_SHORT).show() + } + } + } + } + + private fun wrapResponse(response: AsyncHttpServerResponse) = response.apply { + headers.set( + "Access-Control-Allow-Methods", "POST, GET, DELETE, PUT, OPTIONS" + ) + headers.set("Access-Control-Allow-Origin", "*") + headers.set( + "Access-Control-Allow-Headers", "Origin, Content-Type, X-Auth-Token" + ) + } + + private fun handleRawResource( + response: AsyncHttpServerResponse, + context: Context, + contentType: String, + id: Int, + ) { + wrapResponse(response).apply { + setContentType(contentType) + send(context.resources.openRawResource(id).readBytes().decodeToString()) + } + } + + private fun handleGetSettings(response: AsyncHttpServerResponse) { + wrapResponse(response).apply { + setContentType("application/json") + send( + Json.encodeToString( + AllSettings( + appTitle = Constants.APP_NAME, + // epgUrls = SP.epgUrls, + // iptvSourceUrls = SP.iptvSourceUrls, + epgUrls = emptySet(), + iptvSourceUrls = emptySet(), + videoPlayerUserAgent = SP.videoPlayerUserAgent, + ) + ) + ) + } + } + + private fun handleSetSettings( + request: AsyncHttpServerRequest, + response: AsyncHttpServerResponse, + ) { + val body = request.getBody().get() + val iptvSourceUrl = body.get("iptvSourceUrl").toString() + val epgXmlUrl = body.get("epgXmlUrl").toString() + val videoPlayerUserAgent = body.get("videoPlayerUserAgent").toString() + + // if (SP.iptvSourceUrls != iptvSourceUrl) { + // SP.iptvSourceUrl = iptvSourceUrl + // IptvRepository().clearCache() + // } + // + // if (SP.epgXmlUrl != epgXmlUrl) { + // SP.epgXmlUrl = epgXmlUrl + // EpgRepository().clearCache() + // } + // + // SP.videoPlayerUserAgent = videoPlayerUserAgent + + wrapResponse(response).send("success") + } + private fun getLocalIpAddress(): String { + val defaultIp = "0.0.0.0" + + try { + val en = NetworkInterface.getNetworkInterfaces() + while (en.hasMoreElements()) { + val intf = en.nextElement() + val enumIpAddr = intf.inetAddresses + while (enumIpAddr.hasMoreElements()) { + val inetAddress = enumIpAddr.nextElement() + if (!inetAddress.isLoopbackAddress && inetAddress is Inet4Address) { + return inetAddress.hostAddress ?: defaultIp + } + } + } + return defaultIp + } catch (ex: SocketException) { + Log.e("server", "IP Address: ${ex.message}", ex) + return defaultIp + } + } +} + +@Serializable +private data class AllSettings( + val appTitle: String, + val epgUrls: Set, + val iptvSourceUrls: Set, + val videoPlayerUserAgent: String, +) \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/utils/ModifierUtils.kt b/app/src/main/java/me/lsong/mytv/utils/ModifierUtils.kt new file mode 100644 index 0000000..2e6a7df --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/utils/ModifierUtils.kt @@ -0,0 +1,175 @@ +package me.lsong.mytv.utils + +import android.os.Build +import android.view.KeyEvent +import androidx.compose.foundation.gestures.detectDragGestures +import androidx.compose.foundation.gestures.detectHorizontalDragGestures +import androidx.compose.foundation.gestures.detectTapGestures +import androidx.compose.foundation.gestures.detectVerticalDragGestures +import androidx.compose.ui.Modifier +import androidx.compose.ui.input.key.onPreviewKeyEvent +import androidx.compose.ui.input.pointer.pointerInput +import androidx.compose.ui.input.pointer.util.VelocityTracker +import androidx.compose.ui.unit.dp +import kotlin.math.absoluteValue + +fun Modifier.handleLeanbackKeyEvents( + onKeyTap: Map Unit> = emptyMap(), + onKeyLongTap: Map Unit> = emptyMap(), +): Modifier { + val keyDownMap = mutableMapOf() + + return onPreviewKeyEvent { + when (it.nativeKeyEvent.action) { + KeyEvent.ACTION_DOWN -> { + if (it.nativeKeyEvent.repeatCount == 0) { + keyDownMap[it.nativeKeyEvent.keyCode] = true + } else if (it.nativeKeyEvent.repeatCount == 1) { + keyDownMap.remove(it.nativeKeyEvent.keyCode) + onKeyLongTap[it.nativeKeyEvent.keyCode]?.invoke() + } + } + + KeyEvent.ACTION_UP -> { + if (keyDownMap[it.nativeKeyEvent.keyCode] == true) { + keyDownMap.remove(it.nativeKeyEvent.keyCode) + onKeyTap[it.nativeKeyEvent.keyCode]?.invoke() + } + } + } + + false + } +} + +fun Modifier.handleLeanbackDragGestures( + onSwipeUp: () -> Unit = {}, + onSwipeDown: () -> Unit = {}, + onSwipeLeft: () -> Unit = {}, + onSwipeRight: () -> Unit = {}, +): Modifier { + val speedThreshold = 100.dp + val distanceThreshold = 10.dp + + val verticalTracker = VelocityTracker() + var verticalDragOffset = 0f + val horizontalTracker = VelocityTracker() + var horizontalDragOffset = 0f + + + return this then pointerInput(Unit) { + detectVerticalDragGestures( + onDragEnd = { + if (verticalDragOffset.absoluteValue > distanceThreshold.toPx()) { + if (verticalTracker.calculateVelocity().y > speedThreshold.toPx()) { + onSwipeDown() + } else if (verticalTracker.calculateVelocity().y < -speedThreshold.toPx()) { + onSwipeUp() + } + } + }, + ) { change, dragAmount -> + verticalDragOffset += dragAmount + verticalTracker.addPosition(change.uptimeMillis, change.position) + } + }.pointerInput(Unit) { + detectHorizontalDragGestures( + onDragEnd = { + if (horizontalDragOffset.absoluteValue > distanceThreshold.toPx()) { + if (horizontalTracker.calculateVelocity().x > speedThreshold.toPx()) { + onSwipeRight() + } else if (horizontalTracker.calculateVelocity().x < -speedThreshold.toPx()) { + onSwipeLeft() + } + } + }, + ) { change, dragAmount -> + horizontalDragOffset += dragAmount + horizontalTracker.addPosition(change.uptimeMillis, change.position) + } + } +} + +fun Modifier.handleLeanbackKeyEvents( + key: Any = Unit, + onLeft: () -> Unit = {}, + onLongLeft: () -> Unit = {}, + onRight: () -> Unit = {}, + onLongRight: () -> Unit = {}, + onUp: () -> Unit = {}, + onLongUp: () -> Unit = {}, + onDown: () -> Unit = {}, + onLongDown: () -> Unit = {}, + onSelect: () -> Unit = {}, + onLongSelect: () -> Unit = {}, + onSettings: () -> Unit = {}, + onNumber: (Int) -> Unit = {}, +) = this then handleLeanbackKeyEvents( + onKeyTap = mapOf( + KeyEvent.KEYCODE_DPAD_LEFT to onLeft, + KeyEvent.KEYCODE_DPAD_RIGHT to onRight, + KeyEvent.KEYCODE_DPAD_UP to onUp, + KeyEvent.KEYCODE_CHANNEL_UP to onUp, + KeyEvent.KEYCODE_DPAD_DOWN to onDown, + KeyEvent.KEYCODE_CHANNEL_DOWN to onDown, + + KeyEvent.KEYCODE_DPAD_CENTER to onSelect, + KeyEvent.KEYCODE_ENTER to onSelect, + KeyEvent.KEYCODE_NUMPAD_ENTER to onSelect, + + KeyEvent.KEYCODE_MENU to onSettings, + KeyEvent.KEYCODE_SETTINGS to onSettings, + KeyEvent.KEYCODE_HELP to onSettings, + KeyEvent.KEYCODE_H to onSettings, + + KeyEvent.KEYCODE_L to onLongSelect, + + KeyEvent.KEYCODE_0 to { onNumber(0) }, + KeyEvent.KEYCODE_1 to { onNumber(1) }, + KeyEvent.KEYCODE_2 to { onNumber(2) }, + KeyEvent.KEYCODE_3 to { onNumber(3) }, + KeyEvent.KEYCODE_4 to { onNumber(4) }, + KeyEvent.KEYCODE_5 to { onNumber(5) }, + KeyEvent.KEYCODE_6 to { onNumber(6) }, + KeyEvent.KEYCODE_7 to { onNumber(7) }, + KeyEvent.KEYCODE_8 to { onNumber(8) }, + KeyEvent.KEYCODE_9 to { onNumber(9) }, + ).apply { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) { + KeyEvent.KEYCODE_SYSTEM_NAVIGATION_LEFT to onLeft + KeyEvent.KEYCODE_SYSTEM_NAVIGATION_RIGHT to onRight + KeyEvent.KEYCODE_SYSTEM_NAVIGATION_UP to onUp + KeyEvent.KEYCODE_SYSTEM_NAVIGATION_DOWN to onDown + } + }, + onKeyLongTap = mapOf( + KeyEvent.KEYCODE_DPAD_LEFT to onLongLeft, + KeyEvent.KEYCODE_DPAD_RIGHT to onLongRight, + KeyEvent.KEYCODE_DPAD_UP to onLongUp, + KeyEvent.KEYCODE_CHANNEL_UP to onLongUp, + KeyEvent.KEYCODE_DPAD_DOWN to onLongDown, + KeyEvent.KEYCODE_CHANNEL_DOWN to onLongDown, + + KeyEvent.KEYCODE_ENTER to onLongSelect, + KeyEvent.KEYCODE_NUMPAD_ENTER to onLongSelect, + KeyEvent.KEYCODE_DPAD_CENTER to onLongSelect, + ), +).pointerInput(key) { + detectTapGestures( + onTap = { onSelect() }, + onLongPress = { onLongSelect() }, + onDoubleTap = { onSettings() }, + ) +} + +fun Modifier.handleLeanbackUserAction(onHandle: () -> Unit) = + onPreviewKeyEvent { onHandle(); false } + .pointerInput(Unit) { detectDragGestures { _, _ -> onHandle() } } + .pointerInput(Unit) { + detectTapGestures( + onTap = { onHandle() }, + onDoubleTap = { onHandle() }, + onLongPress = { onHandle() }, + onPress = { onHandle() }, + ) + } \ No newline at end of file diff --git a/app/src/main/java/me/lsong/mytv/utils/SP.kt b/app/src/main/java/me/lsong/mytv/utils/SP.kt new file mode 100644 index 0000000..af2dec1 --- /dev/null +++ b/app/src/main/java/me/lsong/mytv/utils/SP.kt @@ -0,0 +1,257 @@ +package me.lsong.mytv.utils + +import android.content.Context +import android.content.SharedPreferences + +/** + * 应用配置存储 + */ +object SP { + private const val SP_NAME = "mytv" + private const val SP_MODE = Context.MODE_PRIVATE + private lateinit var sp: SharedPreferences + + fun getInstance(context: Context): SharedPreferences = + context.getSharedPreferences(SP_NAME, SP_MODE) + + fun init(context: Context) { + sp = getInstance(context) + } + + enum class KEY { + /** ==================== 应用 ==================== */ + /** 开机自启 */ + APP_BOOT_LAUNCH, + + /** 设备显示类型 */ + APP_DEVICE_DISPLAY_TYPE, + + /** ==================== 调式 ==================== */ + /** 显示fps */ + DEBUG_SHOW_FPS, + + /** 播放器详细信息 */ + DEBUG_SHOW_VIDEO_PLAYER_METADATA, + + /** ==================== 直播源 ==================== */ + /** 上一次直播源序号 */ + IPTV_LAST_IPTV_IDX, + + /** 换台反转 */ + IPTV_CHANNEL_CHANGE_FLIP, + + /** 直播源url */ + IPTV_SOURCE_URL_LIST, + + /** 直播源缓存时间(毫秒) */ + IPTV_SOURCE_CACHE_TIME, + + /** 直播源可播放host列表 */ + IPTV_PLAYABLE_HOST_LIST, + + /** 直播源历史列表 */ + IPTV_SOURCE_URL_HISTORY_LIST, + + /** 直播源频道收藏列表 */ + IPTV_CHANNEL_FAVORITE_LIST, + + /** ==================== 节目单 ==================== */ + + /** 节目单刷新时间阈值(小时) */ + EPG_REFRESH_TIME_THRESHOLD, + + /** 节目单历史列表 */ + EPG_URL_LIST, + + /** ==================== 界面 ==================== */ + /** 界面密度缩放比例 */ + UI_DENSITY_SCALE_RATIO, + + /** 界面字体缩放比例 */ + UI_FONT_SCALE_RATIO, + + /** 时间显示模式 */ + UI_TIME_SHOW_MODE, + + /** 画中画模式 */ + UI_PIP_MODE, + + /** ==================== 播放器 ==================== */ + /** 播放器 自定义ua */ + VIDEO_PLAYER_USER_AGENT, + + /** 播放器 加载超时 */ + VIDEO_PLAYER_LOAD_TIMEOUT, + + /** 播放器 画面比例 */ + VIDEO_PLAYER_ASPECT_RATIO, + } + + /** ==================== 应用 ==================== */ + /** 开机自启 */ + var appBootLaunch: Boolean + get() = sp.getBoolean(KEY.APP_BOOT_LAUNCH.name, false) + set(value) = sp.edit().putBoolean(KEY.APP_BOOT_LAUNCH.name, value).apply() + + /** 设备显示类型 */ + var appDeviceDisplayType: AppDeviceDisplayType + get() = AppDeviceDisplayType.fromValue(sp.getInt(KEY.APP_DEVICE_DISPLAY_TYPE.name, 0)) + set(value) = sp.edit().putInt(KEY.APP_DEVICE_DISPLAY_TYPE.name, value.value).apply() + + /** ==================== 调式 ==================== */ + /** 显示fps */ + var debugShowFps: Boolean + get() = sp.getBoolean(KEY.DEBUG_SHOW_FPS.name, false) + set(value) = sp.edit().putBoolean(KEY.DEBUG_SHOW_FPS.name, value).apply() + + /** 播放器详细信息 */ + var debugShowVideoPlayerMetadata: Boolean + get() = sp.getBoolean(KEY.DEBUG_SHOW_VIDEO_PLAYER_METADATA.name, false) + set(value) = sp.edit().putBoolean(KEY.DEBUG_SHOW_VIDEO_PLAYER_METADATA.name, value).apply() + + /** ==================== 直播源 ==================== */ + /** 上一次直播源序号 */ + var iptvLastIptvIdx: Int + get() = sp.getInt(KEY.IPTV_LAST_IPTV_IDX.name, 0) + set(value) = sp.edit().putInt(KEY.IPTV_LAST_IPTV_IDX.name, value).apply() + + /** 换台反转 */ + var iptvChannelChangeFlip: Boolean + get() = sp.getBoolean(KEY.IPTV_CHANNEL_CHANGE_FLIP.name, false) + set(value) = sp.edit().putBoolean(KEY.IPTV_CHANNEL_CHANGE_FLIP.name, value).apply() + + /** 直播源缓存时间(毫秒) */ + var iptvSourceCacheTime: Long + get() = sp.getLong(KEY.IPTV_SOURCE_CACHE_TIME.name, Constants.IPTV_SOURCE_CACHE_TIME) + set(value) = sp.edit().putLong(KEY.IPTV_SOURCE_CACHE_TIME.name, value).apply() + + /** 直播源可播放host列表 */ + var iptvPlayableHostList: Set + get() = sp.getStringSet(KEY.IPTV_PLAYABLE_HOST_LIST.name, emptySet()) ?: emptySet() + set(value) = sp.edit().putStringSet(KEY.IPTV_PLAYABLE_HOST_LIST.name, value).apply() + + /** 直播源 url */ + var iptvSourceUrls: Set + get() = sp.getStringSet(KEY.IPTV_SOURCE_URL_LIST.name, emptySet()) ?: emptySet() + set(value) = sp.edit().putStringSet(KEY.IPTV_SOURCE_URL_LIST.name, value).apply() + + /** 直播源历史列表 */ + var iptvSourceUrlHistoryList: Set + get() = sp.getStringSet(KEY.IPTV_SOURCE_URL_HISTORY_LIST.name, emptySet()) ?: emptySet() + set(value) = sp.edit().putStringSet(KEY.IPTV_SOURCE_URL_HISTORY_LIST.name, value).apply() + + /** 直播源频道收藏列表 */ + var iptvChannelFavoriteList: Set + get() = sp.getStringSet(KEY.IPTV_CHANNEL_FAVORITE_LIST.name, emptySet()) ?: emptySet() + set(value) = sp.edit().putStringSet(KEY.IPTV_CHANNEL_FAVORITE_LIST.name, value).apply() + + /** ==================== 节目单 ==================== */ + + /** 节目单刷新时间阈值(小时) */ + var epgRefreshTimeThreshold: Int + get() = sp.getInt(KEY.EPG_REFRESH_TIME_THRESHOLD.name, Constants.EPG_REFRESH_TIME_THRESHOLD) + set(value) = sp.edit().putInt(KEY.EPG_REFRESH_TIME_THRESHOLD.name, value).apply() + + /** 节目单历史列表 */ + var epgUrls: Set + get() = sp.getStringSet(KEY.EPG_URL_LIST.name, emptySet()) ?: emptySet() + set(value) = sp.edit().putStringSet(KEY.EPG_URL_LIST.name, value).apply() + + /** ==================== 界面 ==================== */ + /** 界面密度缩放比例 */ + var uiDensityScaleRatio: Float + get() = sp.getFloat(KEY.UI_DENSITY_SCALE_RATIO.name, 1f) + set(value) = sp.edit().putFloat(KEY.UI_DENSITY_SCALE_RATIO.name, value).apply() + + /** 界面字体缩放比例 */ + var uiFontScaleRatio: Float + get() = sp.getFloat(KEY.UI_FONT_SCALE_RATIO.name, 1f) + set(value) = sp.edit().putFloat(KEY.UI_FONT_SCALE_RATIO.name, value).apply() + + /** 时间显示模式 */ + var uiTimeShowMode: UiTimeShowMode + get() = UiTimeShowMode.fromValue(sp.getInt(KEY.UI_TIME_SHOW_MODE.name, 0)) + set(value) = sp.edit().putInt(KEY.UI_TIME_SHOW_MODE.name, value.value).apply() + + /** 画中画模式 */ + var uiPipMode: Boolean + get() = sp.getBoolean(KEY.UI_PIP_MODE.name, false) + set(value) = sp.edit().putBoolean(KEY.UI_PIP_MODE.name, value).apply() + + /** ==================== 播放器 ==================== */ + /** 播放器 自定义ua */ + var videoPlayerUserAgent: String + get() = (sp.getString(KEY.VIDEO_PLAYER_USER_AGENT.name, "") ?: "").ifBlank { + Constants.VIDEO_PLAYER_USER_AGENT + } + set(value) = sp.edit().putString(KEY.VIDEO_PLAYER_USER_AGENT.name, value).apply() + + /** 播放器 加载超时 */ + var videoPlayerLoadTimeout: Long + get() = sp.getLong(KEY.VIDEO_PLAYER_LOAD_TIMEOUT.name, Constants.VIDEO_PLAYER_LOAD_TIMEOUT) + set(value) = sp.edit().putLong(KEY.VIDEO_PLAYER_LOAD_TIMEOUT.name, value).apply() + + /** 播放器 画面比例 */ + var videoPlayerAspectRatio: VideoPlayerAspectRatio + get() = VideoPlayerAspectRatio.fromValue( + sp.getInt(KEY.VIDEO_PLAYER_ASPECT_RATIO.name, VideoPlayerAspectRatio.ORIGINAL.value) + ) + set(value) = sp.edit().putInt(KEY.VIDEO_PLAYER_ASPECT_RATIO.name, value.value).apply() + + enum class UiTimeShowMode(val value: Int) { + /** 隐藏 */ + HIDDEN(0), + + /** 常显 */ + ALWAYS(1), + + /** 整点 */ + EVERY_HOUR(2), + + /** 半点 */ + HALF_HOUR(3); + + companion object { + fun fromValue(value: Int): UiTimeShowMode { + return entries.firstOrNull { it.value == value } ?: ALWAYS + } + } + } + + enum class AppDeviceDisplayType(val value: Int) { + /** tv端 */ + LEANBACK(0), + + /** 手机端 */ + MOBILE(1), + + /** 平板端 */ + PAD(2); + + companion object { + fun fromValue(value: Int): AppDeviceDisplayType { + return entries.firstOrNull { it.value == value } ?: LEANBACK + } + } + } + + enum class VideoPlayerAspectRatio(val value: Int) { + /** 原始 */ + ORIGINAL(0), + + /** 16:9 */ + SIXTEEN_NINE(1), + + /** 4:3 */ + FOUR_THREE(2), + + /** 自动拉伸 */ + AUTO(3); + + companion object { + fun fromValue(value: Int): VideoPlayerAspectRatio { + return entries.firstOrNull { it.value == value } ?: ORIGINAL + } + } + } +} \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000..63c174a Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000..6e89596 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000..73b49e1 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000..2165eaf Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000..fea349f Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/app/src/main/res/raw/index.html b/app/src/main/res/raw/index.html new file mode 100644 index 0000000..e4529b0 --- /dev/null +++ b/app/src/main/res/raw/index.html @@ -0,0 +1,214 @@ + + + + + + + 我的电视 + + + + + + + +
+ + + + + +
+ + + + + diff --git a/app/src/main/res/raw/index_css.css b/app/src/main/res/raw/index_css.css new file mode 100644 index 0000000..baec829 --- /dev/null +++ b/app/src/main/res/raw/index_css.css @@ -0,0 +1,11 @@ +/** + * Minified by jsDelivr using clean-css v5.3.2. + * Original file: /npm/@unocss/reset@0.62.1/tailwind.css + * + * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files + */ +*,::after,::before{box-sizing:border-box;border-width:0;border-style:solid;border-color:var(--un-default-border-color,#e5e7eb)}::after,::before{--un-content:''}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none} +/*# sourceMappingURL=/sm/d1bbcf2d0f47c9fcafcfe64a47645b6afcbfb6752100e8d5db5f4b8da6ddbd49.map */ + +:root,:host{--van-black: #000;--van-white: #fff;--van-gray-1: #f7f8fa;--van-gray-2: #f2f3f5;--van-gray-3: #ebedf0;--van-gray-4: #dcdee0;--van-gray-5: #c8c9cc;--van-gray-6: #969799;--van-gray-7: #646566;--van-gray-8: #323233;--van-red: #ee0a24;--van-blue: #1989fa;--van-orange: #ff976a;--van-orange-dark: #ed6a0c;--van-orange-light: #fffbe8;--van-green: #07c160;--van-gradient-red: linear-gradient(to right, #ff6034, #ee0a24);--van-gradient-orange: linear-gradient(to right, #ffd01e, #ff8917);--van-primary-color: var(--van-blue);--van-success-color: var(--van-green);--van-danger-color: var(--van-red);--van-warning-color: var(--van-orange);--van-text-color: var(--van-gray-8);--van-text-color-2: var(--van-gray-6);--van-text-color-3: var(--van-gray-5);--van-active-color: var(--van-gray-2);--van-active-opacity: .6;--van-disabled-opacity: .5;--van-background: var(--van-gray-1);--van-background-2: var(--van-white);--van-background-3: var(--van-white);--van-padding-base: 4px;--van-padding-xs: 8px;--van-padding-sm: 12px;--van-padding-md: 16px;--van-padding-lg: 24px;--van-padding-xl: 32px;--van-font-bold: 600;--van-font-size-xs: 10px;--van-font-size-sm: 12px;--van-font-size-md: 14px;--van-font-size-lg: 16px;--van-line-height-xs: 14px;--van-line-height-sm: 18px;--van-line-height-md: 20px;--van-line-height-lg: 22px;--van-base-font: -apple-system, BlinkMacSystemFont, "Helvetica Neue", Helvetica, Segoe UI, Arial, Roboto, "PingFang SC", "miui", "Hiragino Sans GB", "Microsoft Yahei", sans-serif;--van-price-font: avenir-heavy, "PingFang SC", helvetica neue, arial, sans-serif;--van-duration-base: .3s;--van-duration-fast: .2s;--van-ease-out: ease-out;--van-ease-in: ease-in;--van-border-color: var(--van-gray-3);--van-border-width: 1px;--van-radius-sm: 2px;--van-radius-md: 4px;--van-radius-lg: 8px;--van-radius-max: 999px}.van-theme-dark{--van-text-color: #f5f5f5;--van-text-color-2: #707070;--van-text-color-3: #4d4d4d;--van-border-color: #3a3a3c;--van-active-color: #3a3a3c;--van-background: #000;--van-background-2: #1c1c1e;--van-background-3: #37363b}html{-webkit-tap-highlight-color:transparent}body{margin:0;font-family:var(--van-base-font)}a{text-decoration:none}input,button,textarea{color:inherit;font:inherit}a:focus,input:focus,button:focus,textarea:focus,[class*=van-]:focus{outline:none}ol,ul{margin:0;padding:0;list-style:none}@keyframes van-slide-up-enter{0%{transform:translate3d(0,100%,0)}}@keyframes van-slide-up-leave{to{transform:translate3d(0,100%,0)}}@keyframes van-slide-down-enter{0%{transform:translate3d(0,-100%,0)}}@keyframes van-slide-down-leave{to{transform:translate3d(0,-100%,0)}}@keyframes van-slide-left-enter{0%{transform:translate3d(-100%,0,0)}}@keyframes van-slide-left-leave{to{transform:translate3d(-100%,0,0)}}@keyframes van-slide-right-enter{0%{transform:translate3d(100%,0,0)}}@keyframes van-slide-right-leave{to{transform:translate3d(100%,0,0)}}@keyframes van-fade-in{0%{opacity:0}to{opacity:1}}@keyframes van-fade-out{0%{opacity:1}to{opacity:0}}@keyframes van-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.van-fade-enter-active{animation:var(--van-duration-base) van-fade-in both var(--van-ease-out)}.van-fade-leave-active{animation:var(--van-duration-base) van-fade-out both var(--van-ease-in)}.van-slide-up-enter-active{animation:van-slide-up-enter var(--van-duration-base) both var(--van-ease-out)}.van-slide-up-leave-active{animation:van-slide-up-leave var(--van-duration-base) both var(--van-ease-in)}.van-slide-down-enter-active{animation:van-slide-down-enter var(--van-duration-base) both var(--van-ease-out)}.van-slide-down-leave-active{animation:van-slide-down-leave var(--van-duration-base) both var(--van-ease-in)}.van-slide-left-enter-active{animation:van-slide-left-enter var(--van-duration-base) both var(--van-ease-out)}.van-slide-left-leave-active{animation:van-slide-left-leave var(--van-duration-base) both var(--van-ease-in)}.van-slide-right-enter-active{animation:van-slide-right-enter var(--van-duration-base) both var(--van-ease-out)}.van-slide-right-leave-active{animation:van-slide-right-leave var(--van-duration-base) both var(--van-ease-in)}.van-clearfix:after{display:table;clear:both;content:""}.van-ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.van-multi-ellipsis--l2{display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;line-break:anywhere;-webkit-box-orient:vertical}.van-multi-ellipsis--l3{display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:3;line-break:anywhere;-webkit-box-orient:vertical}.van-safe-area-top{padding-top:constant(safe-area-inset-top);padding-top:env(safe-area-inset-top)}.van-safe-area-bottom{padding-bottom:constant(safe-area-inset-bottom);padding-bottom:env(safe-area-inset-bottom)}.van-haptics-feedback{cursor:pointer}.van-haptics-feedback:active{opacity:var(--van-active-opacity)}[class*=van-hairline]:after{position:absolute;box-sizing:border-box;content:" ";pointer-events:none;top:-50%;right:-50%;bottom:-50%;left:-50%;border:0 solid var(--van-border-color);transform:scale(.5)}.van-hairline,.van-hairline--top,.van-hairline--left,.van-hairline--right,.van-hairline--bottom,.van-hairline--surround,.van-hairline--top-bottom{position:relative}.van-hairline--top:after{border-top-width:var(--van-border-width)}.van-hairline--left:after{border-left-width:var(--van-border-width)}.van-hairline--right:after{border-right-width:var(--van-border-width)}.van-hairline--bottom:after{border-bottom-width:var(--van-border-width)}.van-hairline--top-bottom:after,.van-hairline-unset--top-bottom:after{border-width:var(--van-border-width) 0}.van-hairline--surround:after{border-width:var(--van-border-width)}:root,:host{--van-action-bar-background: var(--van-background-2);--van-action-bar-height: 50px}.van-action-bar{position:fixed;right:0;bottom:0;left:0;display:flex;align-items:center;box-sizing:content-box;height:var(--van-action-bar-height);background:var(--van-action-bar-background)}:root,:host{--van-badge-size: 16px;--van-badge-color: var(--van-white);--van-badge-padding: 0 3px;--van-badge-font-size: var(--van-font-size-sm);--van-badge-font-weight: var(--van-font-bold);--van-badge-border-width: var(--van-border-width);--van-badge-background: var(--van-danger-color);--van-badge-dot-color: var(--van-danger-color);--van-badge-dot-size: 8px;--van-badge-font: -apple-system-font, helvetica neue, arial, sans-serif}.van-badge{display:inline-block;box-sizing:border-box;min-width:var(--van-badge-size);padding:var(--van-badge-padding);color:var(--van-badge-color);font-weight:var(--van-badge-font-weight);font-size:var(--van-badge-font-size);font-family:var(--van-badge-font);line-height:1.2;text-align:center;background:var(--van-badge-background);border:var(--van-badge-border-width) solid var(--van-background-2);border-radius:var(--van-radius-max)}.van-badge--fixed{position:absolute;transform-origin:100%}.van-badge--top-left{top:0;left:0;transform:translate(-50%,-50%)}.van-badge--top-right{top:0;right:0;transform:translate(50%,-50%)}.van-badge--bottom-left{bottom:0;left:0;transform:translate(-50%,50%)}.van-badge--bottom-right{bottom:0;right:0;transform:translate(50%,50%)}.van-badge--dot{width:var(--van-badge-dot-size);min-width:0;height:var(--van-badge-dot-size);background:var(--van-badge-dot-color);border-radius:100%;border:none;padding:0}.van-badge__wrapper{position:relative;display:inline-block}.van-icon{position:relative;display:inline-block;font: 14px/1 vant-icon;font:normal normal normal 14px/1 var(--van-icon-font-family, "vant-icon");font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased}.van-icon:before{display:inline-block}.van-icon-arrow-double-left:before{content:"\e653"}.van-icon-arrow-double-right:before{content:"\e654"}.van-icon-contact:before{content:"\e753"}.van-icon-notes:before{content:"\e63c"}.van-icon-records:before{content:"\e63d"}.van-icon-cash-back-record:before{content:"\e63e"}.van-icon-newspaper:before{content:"\e63f"}.van-icon-discount:before{content:"\e640"}.van-icon-completed:before{content:"\e641"}.van-icon-user:before{content:"\e642"}.van-icon-description:before{content:"\e643"}.van-icon-list-switch:before{content:"\e6ad"}.van-icon-list-switching:before{content:"\e65a"}.van-icon-link-o:before{content:"\e751"}.van-icon-miniprogram-o:before{content:"\e752"}.van-icon-qq:before{content:"\e74e"}.van-icon-wechat-moments:before{content:"\e74f"}.van-icon-weibo:before{content:"\e750"}.van-icon-cash-o:before{content:"\e74d"}.van-icon-guide-o:before{content:"\e74c"}.van-icon-invitation:before{content:"\e6d6"}.van-icon-shield-o:before{content:"\e74b"}.van-icon-exchange:before{content:"\e6af"}.van-icon-eye:before{content:"\e6b0"}.van-icon-enlarge:before{content:"\e6b1"}.van-icon-expand-o:before{content:"\e6b2"}.van-icon-eye-o:before{content:"\e6b3"}.van-icon-expand:before{content:"\e6b4"}.van-icon-filter-o:before{content:"\e6b5"}.van-icon-fire:before{content:"\e6b6"}.van-icon-fail:before{content:"\e6b7"}.van-icon-failure:before{content:"\e6b8"}.van-icon-fire-o:before{content:"\e6b9"}.van-icon-flag-o:before{content:"\e6ba"}.van-icon-font:before{content:"\e6bb"}.van-icon-font-o:before{content:"\e6bc"}.van-icon-gem-o:before{content:"\e6bd"}.van-icon-flower-o:before{content:"\e6be"}.van-icon-gem:before{content:"\e6bf"}.van-icon-gift-card:before{content:"\e6c0"}.van-icon-friends:before{content:"\e6c1"}.van-icon-friends-o:before{content:"\e6c2"}.van-icon-gold-coin:before{content:"\e6c3"}.van-icon-gold-coin-o:before{content:"\e6c4"}.van-icon-good-job-o:before{content:"\e6c5"}.van-icon-gift:before{content:"\e6c6"}.van-icon-gift-o:before{content:"\e6c7"}.van-icon-gift-card-o:before{content:"\e6c8"}.van-icon-good-job:before{content:"\e6c9"}.van-icon-home-o:before{content:"\e6ca"}.van-icon-goods-collect:before{content:"\e6cb"}.van-icon-graphic:before{content:"\e6cc"}.van-icon-goods-collect-o:before{content:"\e6cd"}.van-icon-hot-o:before{content:"\e6ce"}.van-icon-info:before{content:"\e6cf"}.van-icon-hotel-o:before{content:"\e6d0"}.van-icon-info-o:before{content:"\e6d1"}.van-icon-hot-sale-o:before{content:"\e6d2"}.van-icon-hot:before{content:"\e6d3"}.van-icon-like:before{content:"\e6d4"}.van-icon-idcard:before{content:"\e6d5"}.van-icon-like-o:before{content:"\e6d7"}.van-icon-hot-sale:before{content:"\e6d8"}.van-icon-location-o:before{content:"\e6d9"}.van-icon-location:before{content:"\e6da"}.van-icon-label:before{content:"\e6db"}.van-icon-lock:before{content:"\e6dc"}.van-icon-label-o:before{content:"\e6dd"}.van-icon-map-marked:before{content:"\e6de"}.van-icon-logistics:before{content:"\e6df"}.van-icon-manager:before{content:"\e6e0"}.van-icon-more:before{content:"\e6e1"}.van-icon-live:before{content:"\e6e2"}.van-icon-manager-o:before{content:"\e6e3"}.van-icon-medal:before{content:"\e6e4"}.van-icon-more-o:before{content:"\e6e5"}.van-icon-music-o:before{content:"\e6e6"}.van-icon-music:before{content:"\e6e7"}.van-icon-new-arrival-o:before{content:"\e6e8"}.van-icon-medal-o:before{content:"\e6e9"}.van-icon-new-o:before{content:"\e6ea"}.van-icon-free-postage:before{content:"\e6eb"}.van-icon-newspaper-o:before{content:"\e6ec"}.van-icon-new-arrival:before{content:"\e6ed"}.van-icon-minus:before{content:"\e6ee"}.van-icon-orders-o:before{content:"\e6ef"}.van-icon-new:before{content:"\e6f0"}.van-icon-paid:before{content:"\e6f1"}.van-icon-notes-o:before{content:"\e6f2"}.van-icon-other-pay:before{content:"\e6f3"}.van-icon-pause-circle:before{content:"\e6f4"}.van-icon-pause:before{content:"\e6f5"}.van-icon-pause-circle-o:before{content:"\e6f6"}.van-icon-peer-pay:before{content:"\e6f7"}.van-icon-pending-payment:before{content:"\e6f8"}.van-icon-passed:before{content:"\e6f9"}.van-icon-plus:before{content:"\e6fa"}.van-icon-phone-circle-o:before{content:"\e6fb"}.van-icon-phone-o:before{content:"\e6fc"}.van-icon-printer:before{content:"\e6fd"}.van-icon-photo-fail:before{content:"\e6fe"}.van-icon-phone:before{content:"\e6ff"}.van-icon-photo-o:before{content:"\e700"}.van-icon-play-circle:before{content:"\e701"}.van-icon-play:before{content:"\e702"}.van-icon-phone-circle:before{content:"\e703"}.van-icon-point-gift-o:before{content:"\e704"}.van-icon-point-gift:before{content:"\e705"}.van-icon-play-circle-o:before{content:"\e706"}.van-icon-shrink:before{content:"\e707"}.van-icon-photo:before{content:"\e708"}.van-icon-qr:before{content:"\e709"}.van-icon-qr-invalid:before{content:"\e70a"}.van-icon-question-o:before{content:"\e70b"}.van-icon-revoke:before{content:"\e70c"}.van-icon-replay:before{content:"\e70d"}.van-icon-service:before{content:"\e70e"}.van-icon-question:before{content:"\e70f"}.van-icon-search:before{content:"\e710"}.van-icon-refund-o:before{content:"\e711"}.van-icon-service-o:before{content:"\e712"}.van-icon-scan:before{content:"\e713"}.van-icon-share:before{content:"\e714"}.van-icon-send-gift-o:before{content:"\e715"}.van-icon-share-o:before{content:"\e716"}.van-icon-setting:before{content:"\e717"}.van-icon-points:before{content:"\e718"}.van-icon-photograph:before{content:"\e719"}.van-icon-shop:before{content:"\e71a"}.van-icon-shop-o:before{content:"\e71b"}.van-icon-shop-collect-o:before{content:"\e71c"}.van-icon-shop-collect:before{content:"\e71d"}.van-icon-smile:before{content:"\e71e"}.van-icon-shopping-cart-o:before{content:"\e71f"}.van-icon-sign:before{content:"\e720"}.van-icon-sort:before{content:"\e721"}.van-icon-star-o:before{content:"\e722"}.van-icon-smile-comment-o:before{content:"\e723"}.van-icon-stop:before{content:"\e724"}.van-icon-stop-circle-o:before{content:"\e725"}.van-icon-smile-o:before{content:"\e726"}.van-icon-star:before{content:"\e727"}.van-icon-success:before{content:"\e728"}.van-icon-stop-circle:before{content:"\e729"}.van-icon-records-o:before{content:"\e72a"}.van-icon-shopping-cart:before{content:"\e72b"}.van-icon-tosend:before{content:"\e72c"}.van-icon-todo-list:before{content:"\e72d"}.van-icon-thumb-circle-o:before{content:"\e72e"}.van-icon-thumb-circle:before{content:"\e72f"}.van-icon-umbrella-circle:before{content:"\e730"}.van-icon-underway:before{content:"\e731"}.van-icon-upgrade:before{content:"\e732"}.van-icon-todo-list-o:before{content:"\e733"}.van-icon-tv-o:before{content:"\e734"}.van-icon-underway-o:before{content:"\e735"}.van-icon-user-o:before{content:"\e736"}.van-icon-vip-card-o:before{content:"\e737"}.van-icon-vip-card:before{content:"\e738"}.van-icon-send-gift:before{content:"\e739"}.van-icon-wap-home:before{content:"\e73a"}.van-icon-wap-nav:before{content:"\e73b"}.van-icon-volume-o:before{content:"\e73c"}.van-icon-video:before{content:"\e73d"}.van-icon-wap-home-o:before{content:"\e73e"}.van-icon-volume:before{content:"\e73f"}.van-icon-warning:before{content:"\e740"}.van-icon-weapp-nav:before{content:"\e741"}.van-icon-wechat-pay:before{content:"\e742"}.van-icon-warning-o:before{content:"\e743"}.van-icon-wechat:before{content:"\e744"}.van-icon-setting-o:before{content:"\e745"}.van-icon-youzan-shield:before{content:"\e746"}.van-icon-warn-o:before{content:"\e747"}.van-icon-smile-comment:before{content:"\e748"}.van-icon-user-circle-o:before{content:"\e749"}.van-icon-video-o:before{content:"\e74a"}.van-icon-add-square:before{content:"\e65c"}.van-icon-add:before{content:"\e65d"}.van-icon-arrow-down:before{content:"\e65e"}.van-icon-arrow-up:before{content:"\e65f"}.van-icon-arrow:before{content:"\e660"}.van-icon-after-sale:before{content:"\e661"}.van-icon-add-o:before{content:"\e662"}.van-icon-alipay:before{content:"\e663"}.van-icon-ascending:before{content:"\e664"}.van-icon-apps-o:before{content:"\e665"}.van-icon-aim:before{content:"\e666"}.van-icon-award:before{content:"\e667"}.van-icon-arrow-left:before{content:"\e668"}.van-icon-award-o:before{content:"\e669"}.van-icon-audio:before{content:"\e66a"}.van-icon-bag-o:before{content:"\e66b"}.van-icon-balance-list:before{content:"\e66c"}.van-icon-back-top:before{content:"\e66d"}.van-icon-bag:before{content:"\e66e"}.van-icon-balance-pay:before{content:"\e66f"}.van-icon-balance-o:before{content:"\e670"}.van-icon-bar-chart-o:before{content:"\e671"}.van-icon-bars:before{content:"\e672"}.van-icon-balance-list-o:before{content:"\e673"}.van-icon-birthday-cake-o:before{content:"\e674"}.van-icon-bookmark:before{content:"\e675"}.van-icon-bill:before{content:"\e676"}.van-icon-bell:before{content:"\e677"}.van-icon-browsing-history-o:before{content:"\e678"}.van-icon-browsing-history:before{content:"\e679"}.van-icon-bookmark-o:before{content:"\e67a"}.van-icon-bulb-o:before{content:"\e67b"}.van-icon-bullhorn-o:before{content:"\e67c"}.van-icon-bill-o:before{content:"\e67d"}.van-icon-calendar-o:before{content:"\e67e"}.van-icon-brush-o:before{content:"\e67f"}.van-icon-card:before{content:"\e680"}.van-icon-cart-o:before{content:"\e681"}.van-icon-cart-circle:before{content:"\e682"}.van-icon-cart-circle-o:before{content:"\e683"}.van-icon-cart:before{content:"\e684"}.van-icon-cash-on-deliver:before{content:"\e685"}.van-icon-cash-back-record-o:before{content:"\e686"}.van-icon-cashier-o:before{content:"\e687"}.van-icon-chart-trending-o:before{content:"\e688"}.van-icon-certificate:before{content:"\e689"}.van-icon-chat:before{content:"\e68a"}.van-icon-clear:before{content:"\e68b"}.van-icon-chat-o:before{content:"\e68c"}.van-icon-checked:before{content:"\e68d"}.van-icon-clock:before{content:"\e68e"}.van-icon-clock-o:before{content:"\e68f"}.van-icon-close:before{content:"\e690"}.van-icon-closed-eye:before{content:"\e691"}.van-icon-circle:before{content:"\e692"}.van-icon-cluster-o:before{content:"\e693"}.van-icon-column:before{content:"\e694"}.van-icon-comment-circle-o:before{content:"\e695"}.van-icon-cluster:before{content:"\e696"}.van-icon-comment:before{content:"\e697"}.van-icon-comment-o:before{content:"\e698"}.van-icon-comment-circle:before{content:"\e699"}.van-icon-completed-o:before{content:"\e69a"}.van-icon-credit-pay:before{content:"\e69b"}.van-icon-coupon:before{content:"\e69c"}.van-icon-debit-pay:before{content:"\e69d"}.van-icon-coupon-o:before{content:"\e69e"}.van-icon-contact-o:before{content:"\e69f"}.van-icon-descending:before{content:"\e6a0"}.van-icon-desktop-o:before{content:"\e6a1"}.van-icon-diamond-o:before{content:"\e6a2"}.van-icon-description-o:before{content:"\e6a3"}.van-icon-delete:before{content:"\e6a4"}.van-icon-diamond:before{content:"\e6a5"}.van-icon-delete-o:before{content:"\e6a6"}.van-icon-cross:before{content:"\e6a7"}.van-icon-edit:before{content:"\e6a8"}.van-icon-ellipsis:before{content:"\e6a9"}.van-icon-down:before{content:"\e6aa"}.van-icon-discount-o:before{content:"\e6ab"}.van-icon-ecard-pay:before{content:"\e6ac"}.van-icon-envelop-o:before{content:"\e6ae"}@font-face{font-weight:400;font-family:vant-icon;font-style:normal;font-display:auto;src:url(data:font/woff2;charset=utf-8;base64,d09GMgABAAAAAGNAAA0AAAAA6ngAAGLlAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP0ZGVE0cGh4GYACCWhEICoOqHILKFAuEDgABNgIkA4QUBCAFhQ4HllAbe7dFB2rYOIAxOG/nKOrEpKWbGbVlVHRZ9v816Tis0RbhPC4JZQk1ws72WlBGJJIsL3bc5Y/x5HdtBrzwoZQX/Ls/uAhsXMZIVk73Ds/ntvd3cezvhO1/2HExro3B2ID/4d7GxjXObZwqxy0gG8pQPDBFMAW980hTNIuhpqZleVwJlHSKR6WkDM3KECuz083Qu+8BCnabd+4tsemRGtBnHBAHxuTmuLWNUbd7fuSZA88fOBlzekCqfDPnV1BArpTKjp/r0AfE0+Lc97SXNa3ugaSqW2AfIo5Ghr2YAos8H+krfQ3L8DwA+F1V4Mecr9JV2ljSM/wUzQWAITlxoJSfEmfsi321rwHH2TjhEuUPgNJu+Hcty5uF3l0Cy0kEaR28qmxd8hKkAt5Trc38Jr9PItjeThzVmTUBj5z82tS8UPpag3jw7WchyoaNGucZYxmcV1Jb6vJBqnCMkPdKndPjulEbt2VSBNS4ZVtIZLN6T9OnLc4cOBve6vc6m1plHO0oxsXKP/eW/2ZnuXyddAuKQbgYR1EK4cAhrOf/N9XeX86QVOD/DqRT/CFXTqcPKVVuujv3vcG8eW/eYDAguOCA5CJIaxCg/iJIaxCgdgkCwgnk0qC01BF/yHEArvaQ3ASR0kYHOuVQ5djFTsfVlluULl2UrlNo3fUuSpcu3ZQuqpCWpVYrmWKnTAyidINbXlvu8bu//dIWc5DsbS7GIKHEPJFYjquWVH/3b/fH9Hv+26O9ju21WlGpogESSNAeY5MiykWEExSVOOK47UMhvaS1xPVqDWvyXAAAoBcwRQlvI/bwC/dtkISEsc4loVoTIbIVCZ0AIJHYfDMgr9cTJpanTeQN9AuIhrzvf00mgr8/5Nen14LLjxN/LCL2eHpgQbwHVi9DEjNBPAZfTAsKwnMSwP7qC7wBARAe6x9bHpf9WOTxAPA48XFR7j2u+DZ/LOBswPsBp1TOAERZQSgIVpzf/feAvzvI47F6AFF6BLhHCukZF45LVMtBJKlnIvAGFHtJAGRAaHoLQiKLSNqKGJ/iSh1q4tXURKt6IBdS5ApVMI26ClYVZuVQVnhVZgY4CYyzCpOoqw1rsgcEu7Q3GuxKXG3aJn0qjxMHVImq1jrHlwJ5PVtvHrX3Ko2IEfgjlbcFnyYathK4PgKjqatOPbBMVV8xGuwT1DE0AxC6x+5SJJyBz+Fn2AkJxZ4glrASujSdxsleq/PHWbE0RywisaeK8VEJZLLrdigkOat2y1CZLYwZ1YnRRpTdTk64eN4CfgfsjqnucvDALVR3A2vlb2hX0wNceye5Hmm5fEBzdP+Qyb085kH1PuANU75Jzsv7ZS/lLnC4ZoKnV+dJLf4NlekCzHB3ZLelfqmuL45JnZvrXJsJkHk15+TdfdqgwG+izf3JCXOj2RyinXv/VMefCSdPVMiY8jjXOo2MAP4mI/AtycatkqmIALn6l0Uq0lI87BIJ04zYwdq+uVjZCxY2jV+rwhDAwgMpoizZa05SYFIIR3JHR+IKxpnh40BpkzSirZGEOCAuOR/KRAje55CKZod135qzlfbXOMuOPHx1h7YxinH5Uij/5Dwy73HhX1B5ZKvVwRDanqFUFff3wOnQyxyWdERob6qK7Gi12nOhCPvVtZnIYtm2NwfM3k5EXA3H+6YC2B5AN2ejHZQofD50sdRcRWiq+zbZmwWxUU4+e26XKyCyQz1nkYmVlZIqmHnHyniMwALg7W0ge9iTxu3Hui5LzZirrSnxcNzQbrVOEohrbh4R6ilExdRG3ok7V4wlzRGOHiwv0cB50pZ+3m+urqJjt0nyn1mdwTS7GeBAZd7buqpOLOJOzjswwyHGHZYUl6VSbXyOF+71XRUd3IVOwPN4SxT9WirnGy624oNiyc5Or9oH0Xk7cnuxO8pCwYb5hEzNIdfsbrKorNqB2QzwQQmn/Qwb5NRYcbDz1o26MSF3dPfSrJMiL/dAGlRNHMtCEVt3nDSsVrHaufOEusODmTKY8DriHN07hL0EzqFkNyJpnLfFzsVNmR74ahkk6gGTe9J/GHlIpI2GNPlqZ3r+IevE+3Wt703n+Go4OwVuvCrAuzjuoMxtExVKOPdlyui9uI5AoqdxF83KGIUjIoIfDD06nOXu3SMUijv0qc4/wnkmI17W2EBApdJANX4zFNC4sVrhfKJCiHMfHYMLKqu4E37QzW/mhSNfGcYXYxwzR0nViMWyCzAiTOQcKTKZLcduJ+FwJUGuGFwrbmOUnyKEOuXZiVUugONRFLS+hbbikD6NOwjMNHWdlyhkKG64GPuGgnEYa5WqB2KiSgX1MmfwEBm02vhE1dZl9lyNSCFhrsrfe5XGiqVa1cMkU+UwTlQxTOPv1XioWX5gB/GSKMyxDWafvs/FDTk6t+XgVh5hDrEDKqVCJBGTkSYUgljvEqQ6bX8in0iutaWULcSirLCQch+B+4LqWLZVu96F3YTcUWEbTfUuWMYGlYLcl1zdCTpEBDfs014M6OiYmvsMCIXwx0V7JAxjfRyKkVFaGEVsCBnZ25CPrHY1H0ZHSGEcL6cw3ZXrV4fh+8ttExFKOPXlVTmZ2h8sy2L73Q/KF6h0AEjYCuELIVkkL9Te8+OtKEF97Uunyl4YSaJUkKmMocCOWwjY/HhRk2M1YpKE80TkVkpOzRPxXfcYpfowYEOo+JbRI/lBpFv1iKhXtfDc3p6PK2K0rKQKrqiZNpZgQt4pHxotxzgGi2ldPdBYX+3MY5kvdDts5F6XPARl0YNNJv/GGJwwcMCqrFLH4Hlo3S0sxzaAicMhZyfeEeBtitFEcscUDkUNDGtqmrzADU1kYnLOclO4yba+dwmSK4ix+qyrNPM4i4z0tinwCAEBby+PPZy2pdmiVmTTU1m5QdV+2iSEcV+/IBX2r2DuL70bzb87V+D5jl0Umt1rny6hpufLPsTPEId2fxKswvnv8E6ZhgNiOVn6k+0tbffCvHzl79fW1VuTnkhTCFspS+uZnEzLnFmqwL9L5Sbf3gU+GCOMx+CJ9dvlIg5qhJYgltBMHcEKQ4w9AaVHebnXT+0RfSf4PPoy/OoM4wYkiIrbKCNXEIxL+tQTblS7fmRe/YU/n1rXfl0mNuSennYFZFBXD5oDpfYN7L4vLvR+Bozp5fDL6PPgi1Xan1fW9Tt/vTQvXkZUCP7RupSEs5w2dNvUliTerBVUUrCDsklwAFASjm+7blXNTKldPwLkM82lNMQM/wz7zPq/rM4kotIv/rrZFXy8faP/saE+AtzdyiqQy9kx1tjznWamFvA2los64ONCg9erx80RGjYCGbtXyFkPgiDd4q1FlacgoO6+RUeq0gkpFfbePZwXQxywYtBsBtQ1oevUhlV7zrEfjrZ1zOFOM3Jr52OqVOdwkMLTmZ7pVvcLFSqvDqpc1jsevuMIs41Hvh8jEdIr5VCz+3chcDxe09IS0nwVYDY2RXOtnk+jSw77g7lrBevvyePfhIwOlkRq4YW9M5UfHGSWZnUapsXprah2Ah4zUBUo3Lj/atA+pp1wWnJvH6JUpYLz/X3ZuyLn+80YzbnZG3/LKazt3IV2fhn2a8pkxgG8IioDL1po8B0XdsiUsrG/0L4ThA+9MWbSMS+d2etmuer1MaWcTjfqNhhSD+ExEvtSBVUoyL1RTUc9/KS9/HR06btoPDwqJnCQCGZ1rCMOuDf0blRD7srP9tMJBGxeLFiZwhGGzvtbXFxVCJ725SqgK3vLu7a739PuJgS2BcjZJS5OFSioEzAvPJM/tL9gp8piaShTHVs15xBNvfp89jDgaRny92xKf2vlmcAOZDOQDMu31tdet7tWnw2dULFC1V4SLdnacGtQk4dwIppwVgKOpxj0asPoZ9yo9uby077lS0Ygm3Zgb6y7wbvXnouWRKodKpYTOpvrbw7oN441mbSu/5ayYmjNXjn+bfaibsPvbWzZkkO6g9xUZOfJVEGKS20pbtyxM8CnVZvRxvUpgAEI9Fn3Ld55Q47pDgIbgRd0zWKTPYw6vRQeo+ibZ8+jKA3hDI1f3wlTjZkUlbufOvwRnFxJi0dJ28Vd8BdwkESik4R+H5twr1NRMTkwunZCeXB2RcZvcyW1EzL7pzX0qJgCx6YVMBr68LiU6U6n4q/RuIPCB8/4AdGKWXTn/44H+8IBV9xDRjJfVOi8rFnd+P925llwS9uWPMDgSGiu4yIoCfgRhtASRPw1ioQFAwW6T2CSbOIBjbiv2n1cRSZxjcWpd1kyFo4vNJGTxiw/csJ5FvYN5+afU6z17j2/i1PPbVAwWidc8TmTixlzxpi5Oy+bNHof4lsmlAl18vJnpveUtAanFOhNzqQ03DMO/2iEqjWvgppPYvXH97bCOrMb99th2os6SXnLO96NncC2FHqpJdiNOgor3xR1GQP6mP2SHkKIph5NcS9/DGTWqmOAwh9fRIQh5/TDXqfseVDBWDQ4PLaITdXtH35rVMHaVwu/NcENIkjEzuwN2ndLrV8HdTcae0buLY+efoi1k+ZyHQMOjWOFe/3s4iS9VqGOEI4pFYApALYqwvXeo9LiKWI5HhHmFi1n3lap534+/k2F2Psr6pWrc0qRI4BEZH2ABOcb3hqQbOIBqjN7/Mr6s0IL/IS12cOqgeqr4TWJKvtBfK1u7nKL2pHB+pQ+5KZtGISD1PFNxjyqw+WH93CKwpYk9PU9FcrErSApKIgq7+Q0IdBAmxxiCqMUcwEHEUuzAGU/FNIuGbkpqCWg4ByAWpss999fG8z5IvwKxZ9VQhnlhzGoMEI8qKhPz1ObEmMMMMBXtfWXuShxre7Dy3X7dz2qTBHWFywLPojO6jBKCzWuRbenfZSgRgwflw5HbCOuCx9Re05YhmRdKkGNUAxkZT6zBF2myWSf77yw15mMtqIrLeZb0PRvKIqw2xGUW7uMMQDX6WH8621RNpZHqird7JJ91mlSQ8hJrTOMBK8JCP9SR/ffPcruAyvYooRhSUrCLos4Q7jISeC/L1PyiQcjLjlC5Wd47wBm52StDg9Eg1xHy9cM2yUZSBXipSGPeuLlMUaAE96phx+r3qXUYhV2KSu5+AFUevGMNM3Y0s+8nJsKxBdvKYoVWc7Wer0SBrY6r1VIc0WLoK5VkW5tDbizVeaHWtrlyyMHKLxSHSOc+nBnTjz0KJtWNwxOe/1eU7p1JeUCZjwW7rg4QIrBFQWQaPNdQqX08GRqWijgOaR0lUfmB6JwbH3fjvhiml11Ty1Xr6wx9YO++nDQKoHaWBDNRgy42MK4tv3Ph0zX9RXbHetwhoa9iD2PgmwcbMSGsXeErvNLAKACtGipFpaHVsyoDESzRhzIaR4BZKgDR5p6TehGgcGaxaEWuomsCqakdBfLejJ4BNwUqZBC/8mJJuHtd7AJ1XEL+1TRoEZuWwk00WQjhUpbvVa0nvEo80+pxDASFbCrIM7ouwdEAHfKPbgEzWmj9tyocroYW6BSJJviEBu+oPlzcys7A3j9tM5IhFuiEg3hWBYNurPnxtvNbhxu+e7SQBPosQvbtBcMlCBGNE3rPtikG/uo2oxZueowVQjWeWH15EiVm3sl+vl5RFQgONfWcSMOlBnzKXKu2MoXTUuV922QzKIl0ax5X3ltqhJfNQvIvwoGorKiFsXu8/DMZ7pZNjYrts4M8ShRUAfDtDraG/y0vz/jvpiQsZM1DtywV1x2Cofq98JgpY+mrVGEfTSm4cVcvyQVhtw4pApXvDeUFSw6dNGgDTw1ioWGf/xJFBo7el4iCBo/EBEWevRgppx/4IIpLuDk9aZoEiseOjuutwUBMmchPE2Oa1Br53tR1mpRwM1YpaGwchsnNNoX5eVfwFBE4IZ877vUcNsykCZmbfe7FSWN8IFq3ZL+SI6pQ8VG+naSvfXqeO6ZYf9e/MKQrzlfnc4nNQlxaSE8zCQB/10NKYoRZaI0RdHG/no3YD/X5Hhgt2H6/i+K7JllF2r3fMn3qr/8ytxDUejMLr/Yd0zTkWF73VQ7ND/5t/U1rgeIGJMx50YP7o27zym2BtbhUwIYTYkJCX2L5kAS3m6jXC3L4iL5DEkiUjvuKU+q7UXYl0SYYHRIErPa8E0AVrS9GHx1TADOPuC3+heQ5wKWL/S6y0/ng2ZbkigaLy/N6jDp3avdWTYTLJ3euv38bkds05t9+3Wl5bPhirkd5ZcOGKwZkw0tDbG5ta0YLc1SK4xvxmYLtRa+IUrzIxbFGKXw6lXtPd1M3m+NEODjkFIBv8+GcmWFw4zu6IGtDmbGCxdIFCJV2FZmdozcAXZFKT0YKpZKQWr0rfWl0zNTq1DHjStpUwr9Y0s7opcOIuUVSyeIubKKqBE0fNSiQfHTAcp07vfCjY/B4ODHH0aFSOS9Pvn44EefECzd0uMXCwpK2D5tfdw2o5vPilPTmu3n+cPo9hSgFDNl/UTPef1uiyE2lpl5ZSdJZmO07saDZQlwB3g2kK+4bnNnHnp9AeOYYKNG6IqUptBn9WVPOkiU//fQPnf0G5VHjQnYduZmuH1zzriJu7JWp8mxm4KJvmL2rvZ1EUF/0D64ZWZk5RlnU6Cr78OEdW0rq8+6m0MRGlebzjeMsVSdc2yJGXAip7UXlyD3SUZmmBIKZ6UhEeFLOZ4ScYpi5oRIfG7ROdFcYBvz7NwMW/CACmnJ8MLhRJa+pq5l2pF51rWi4SrtlggNkcQMsemlRvtlgvSMqUM5Sp+4qpQ7ddg63uRwB+ZWXAro24JdAjap6YHXlc+6U7Fokd9MlVezEOM7EXRQKNO/E+KD0DZ7Od3snxDmV/QXMG/DAovxfiIRITkTYzBEB4XYS2Al24go0Q71V+3qqZltVzXnR2XWojTCygjsVuW2a+f/PnFCEloBwRn+Y8z/6OMvnpCR0eqCmuPUjLx2Kn5nnUR5OPZE32cnP83hs5nVH3MMiPvsc8pNO4BMF0IQXIGCWPnK/3vgGY114TxjzmIkY4idbGPt4LvD0WXmj884QLtSoF7SjBsNNgSnMQPslbUo6V8PeeViX4poMW6IAdFGTmEJNcLzOsLOsx9cLu8wZVl6liE8cdlbtUaUaI0GRBLaKcJf1iUzNHaaKrbsSVziLfaodIk34nFJRpgycTwCjnUZu3xvlJpEwDX+bwX3Aii0E4WoGSukTjnGXVxK6w5sRnck9mRmxBuh6Dc2nrhQlsEa62jLlZzvqd0Kzs2RNvx/6ga/MGDApGco41YM8QLdZy0BD+a1wrrEHdgkH2o6uQ0PQWwmHaHkKC3Ege7q1bODT5dENDYBBpxtCz7+6HPt9sQ/lE584qGpmbWfcrW+pnKlRoKCq7TaiSeXD5eFSKiLm2U09ruFjsHBJf1Bit2sbrLLeBli/PRW3+LtYyZ0jktEsN/yxIgOp/3D2m4Rd2R/EqyZy7Fs2o5/m87BLcpHT7TBMZHFE+BbdhcbXRJ2BYD9MoPQWaoc4rxOQChxJo1t4BKfjTGM8MFEmaY3KjYRB7ZdWikTV/oUt74AKNrSvLn7eW70G8cAnISYVAC+gK4abPStRgQoEgBHYnPolBwiRAujX/qNh6JVmtTaHkYXEKATmBFnroXQnnmSRDG6K+7sAUhEuOElr4dekBfHt6DpJJosO79tmYXCMGwsh7YE1Le2LgekWXM6r8nUIVvs0xQFURSUZwqmCsx0DgMjAyHj1ndNIHdhci9tGWgk7W16E56rg3NPscCJjMtbAxRbrXYiiJAXCiarouxGq3e0ijF/esUKmfcD/AYxEC7lLLNL6N005ZSfvNREpcCJzkdOFatMf7rRnpiSLRgyDuiyG52tN7vW5fYsIrHIF5o7VjbVchMJWGDuOnNo5klbfYO/WLGzy9bN9T1N01Z75M3UtYbLFfOOxycU9Q9e3tvJOG7j28cYImdEelZ4qDawW0PxcXY+ER1NNxJFwdf7JHoMOUI3ODHGx+70zOJXZF1XktcDXI7GzUzizy7jhK14IQzEVg57zOPOwUHrWOk1LQcF6cQCvIBiYKi4qmByqcihCJU73lZj6ifygmBuC2wBxyB5S8qqRHEJjhUuYdR7oiQBpKFWkKcu2hAqy6nA0XKm1gcXNR9+XErFelk7en+pKLXowwmtobl/9trN9a2OzQJf5rttWfWNzo6bXRKH9CuopBWK9tU+MTkffHGKuzDasVkUfm3RCrV1xu6wco9D7KmJ5/6MFdlLM82tmI+dZlhsFzr2fA6cjXUd6PxmVI8eQy/YOaXduQnGRcYdXAT4JHgM8LC4MnAHef+W8j8oImHAHjr0/7lNH87nTRgfPSnfniRyUwv/NYjO97Gl/7tvEW19cCG4OJzEn40vh5dGc28JyiRsUVwZrseSUgwdDgA64zjC0+/IETD5bIMgPKQAxiQ63mJQ5SobrLWBNJkk+tJcSr6crEDEq+FyyhzTkEkIn+Xwr+8FbThXRksOmiEjsIM5vJXTO+2109o+Z0rLL8YXq2KTsGbetn5UDKETwMK3BDktSyskAufu0kkHErprx4h/GfKK4JonEWisQOOGpeeOFDAgwdok+JQAsY+hcZUszyIj0WVLroNq2br6BexLTnCEo3ryd5JyGeqnqETTkNFD4DDdC8xoLEWh0PIqJEmSwAcdwNInxEs/S5NklJehqasPryC+eF3+3K8UECx2dMJDAwC0gXx5bfS25BaTKidgGB+3W1ISRx5iXZqnch7nKVV+Bdrluq7qYGjrz4/6be562uw8dkW415iY+HxPjFS+QSW6ZWdnmgzGgQVCrXsNHsw6nJ/1gNhiytxBtW75ccb1VcJiQ/ucB/6GG0BSLhLd26eWdjPjdY2WgrVMS7wEXs0n+vsFbtk9j8Wfe1xsEgDDaV0FAszZFsDQAwyjWfhtsl8hqI+gwe2YDMbifpvLhsZYJOdDvUxvwtnBlMxGjy66MlQViPOSC+hmFUC1db/CzfzyZeWtQ5hv1JmLZ4S4Cs6qEsbJuyUpH6h1whZs2RX2l5YbxIg/IaxjJG3HPC2/Vmt0Qk347qUJLHIB707wCtpKqUhxeQK38LL6ZlvOrNe5ak6iECtcm1o2FURLJKOQ1VQY1eJrta86ixjC/N6+WvZAfSOWNUEmqgdE3atvSJMG9XoLsxhtu8RcKh5y/36qW3FT2oWz8dDu/LnFaqMpt1gVzdpoAqn+Y5ijo7EDvwc3odUJ+LV96qk2qCld4hUDAgVZU98LozOatOpOniMv8k0hLCtguJEPqTNV0ijTSeqnyhYlVing2A9rA2LwTEoQ9oXO08S3bhHA/XwOyJRKn6LOiNkGgsGiPyivtpOvKomkKQ0uOlXprY2yJ4JJ0wdlc3/d3O2aGtRjuqL+q1Rte7qsI2ikExd0uqKFbmRP6Ecgm8nyOLk/+ZlZ655Sf1v1skJ7ZjJ6udqpmQSRqoZ2hurrDnJ3cYbkCR1klWvGYd47jPCUVY8DtYRvw74ggIxqQpHS1KsyuDJHKyc3a6TTB54WGXiuoFEzd+LWrCBqZzj4DCXI3R0UjqQRPaBj7A8m5+ZInB6FJd1MnPBfnRT1Eq1sT+Rd8bgptZqjFi+C2xZ/IZvIWYgJwRe2QCHYdJwveiDwiaDPi12b7q8XWPriw0NyFl4YDNrA+baj3qQ1aT5x2Jec0vdRQ0Pa8j2lHJNbtj7dXjqmaHLzOJ5mucPlg8DaJudyicBFHskzd/ODA4VMk+DKM8bXNYfbQEFYKuuDQuyUUB2FrX3OuMZP1kx+9Fz3UFViJ2u6AFWIwVxFnLmnfdd9IgsVztf4KttS7aNr6z4lHpX1ptuhsc7exbEQ8DWPGUmIGQTntNFuRPdeV6roYlowsWJui+QBNWU/zudEgYQgkvZLIw0Mi5DmC9ngGcWxjmMPUcggJ4WmZ0ZREqJCQzr+MTcbalaX4mqafKqegxq2JrhW2Dtc2SNrjxp7nJ683gAlma+GkJsmU0nAfmqGXMODYa2xaJ1PXxgUjnoXrz9qCBoLBPnScIlsdm8x/NIR/SPs660vBektKHCsZi9eROj7yDusw3bwTyjgTUkSNyZnzx87n6EOCemQeKygt4GOffPsFYv3OMqFRbmSc+QrwmuffvXTY2gnI0zuiH67HalK5ALdZ16AHHxatYa1KKn3wftKpe1GhxVnkcnNL3TcbabC+tIgvbf8Rnby9Nn1mLRfT5jhuiWFpE2jzMomh7kEg9CphlTa+vGOMi7LD6Y1Cs1qVUiQLOs1Z3I/pZHop8dNuQ1FykthtjL5cVaTw5fnwloSL3PvNRXtrSGvoTANoAOyedPPjeIdXW6XmsKhKsOYxnQpqZ/hBWy6fDpv5mSapFmi1AjZLt9fSp+3NwHYXI/7CC8XBz5idux2eeUl0ifzHzH88VjkC7vmJ6zmHOqlDn5pEO3MYi0G4Adc9NxWzx3kLP4wD0mIg0OFIFGwzXI/nU1HNB6JBPEj2GQ53hGioicAXCm0/2rc75C5e3EcrRxuglT9mV3kFjupNwe5DYzL8cD/umNOLs8VMrtBKgCV611j5koR2yv4QRaOXgf4bnNJqlqV1kOnhfHEjE+RM4SfmAryOBRrsFPgoXZuDU5u10oV90a1OWLOI9ZCLdsRN7oBvFJTVEVt4sG7aWDO3vFi4By4CSSIGD9kv8sFC3u65CUI2vwgZfE9yIgOKw3qSbDAG0lsU1Nak/0qOtMSNyKVdbwCw4KWzJdING4VFDi1SRReAFE4ZERlo7IPP43pVWsKYW81YT6MlOrtYgxy3HG9Yt3yrQqhF99gq5Pzz61Y2nHJJ3Zq9hWC7tbom9mkLE5RpmcosearYTw+p3kD2w8bUsO5xXQBDDlFUYTb69RKtfb5jSsLjK0SOehPXf0lkJjYvX701z4UGBzYt1/ywHI6FJ279qs3tZhz6/TAOdEM7N/j74Vd5IHNtbRv3+o/0Fz27pk9u4IKZArkOXwuJAl9ZP1zlGDfMuiPqx67IcFEOBPUJ8nIqHd2n/jm23EqIB7yVuoofKc4rQcyNMugZe1gF3r5qmpHdO7cPgubEhSaczo9xRYdSzXB+g2bZfPx08U+xl2c0HjiAAyH//GDUBgAW0d9zzxdWlmAlctMhqd44Pnz/a0H28E72jQNEKW14IxkT5ZprFa3xlStl7cltMLFH8PnEnNlFoAvFTey9Z8b8otPyMnk/N3S/4ATxdZNS6mNposW2XwdVunoPLGQpZdlaDoLItv3J/Clt1d8R42CzoQr+tov7sB1mn1H9ks+J6SwPrPNTb2nPwMoSEVq1+/4rlxls4GqV2dL8JLLf86KROKD3bxlQyQfqL3Y2sRT/IhMWInfl3jZ1+YUath8VVFkGcoqjIVxobf0mqAwOM9wzGH/800Rk7srNTFYnauMIQzVMHcJ64+1mOiCAt7AnCuFzC74rBBCAWnf74yMnKiG+4ZE+ARnS7cHckKDcIIrMz9Rm7W0NoB1ka3YxPyai3TZ/Cwt3OV6Ph3ykeglFnSMciD2YJTekQJKpx4jb7KIwKEewih5hf4xs0bVIo/aS2Yql17C5eyJHl2/X+PppsQ8m5VfkF+9j+WeOYaGY9ltZfaw2shCxBmIca2GXl1Nj3DeicY0uWtCBOYc+yOsN0PxsTxxutJ8WfV2JJ7PI1OCBY5oFMXo8tYFra/ocMkBlc7NtxVrRyad7OUyT2I7RGgojeHtKzTGRoqvIEq5A4Vgtv3BpsD2EtpgcjFUVWiUeVzbolpolzQeDZLVyQuxphVDc9CbU8TCUlxBfu/dFmIBaydLZJl5DNsJZp4RmBe4RR4X8I+ScHSBXWX5GinwbEe0ax4UmtYXAUhLQqwjmM0Y9l3zn8IT6F9Wx7XjN+tQadAO6fbjtHmxagilhxAtWr6A5tV1chqC03gykxjT48PwsUK29o/DWCXbFzDLEIHrR/bW5GqOVqiNdLOlYRE+k5h3c/vwQO96qHIgt854Se5htoDBwbbkBaBlsJ6vK1BMnrRZAqmQiHlCXgK2N0DoCCJ7VyQ1gBjCeOTzcCyQ9/aHXRXS7fINInEYVK8JYoo7V/yHOdSqfNbBZrlyioCabnqbzxwd2837JYvlZFtXqsDKghJDTpkNbNxAU26drPs/1WIDnSd7Nzok75RxUdMZiWkV7kbgLwzF54RdAex9mHy6swPa2A1mIVLyp2wY9hRH53D8ruGNtw/tzKWccCiyyZWxxYW7Jg7KXHERhldfRPcTZhyNiJxzoi01RApuh2w+YWqzjEpdHfqI4TlGKDjZHGFqF2btd0uFw1vm/Tktf9rcZd8EOLtl13lbMDEpDKaUxsDB9TEywuB58QIM8pX6DwfrIV5DjaCA4jJv6UnjBWfXls/zUOEvo/D2TWXp7lt0+mS5XBLe3RXAZYokNBOjWVb30xehf+WSXtxJmybtT/d8Ou0fjy9esmNBZuWPS1mUkOgWfwxlbCK7fi+fDOet/nmlHCmVvU4Vz0vz5KrWFV4tcyTYrkt/ztVOLT2PYwy7bpq918Lp4EpPxxznmVEd3gCvDaFaAqPmCqSkUNF6IW2PNBlFUxVJCdWYEK+QprWff1mzdo3LcFA9Hz+313Ts7k0Fv54VtpeqyD7Cu8qC+8iPkwOEa+7Cfg2H4Zz8fhgVK7rWI94+WkbSMfNHEc+3Pt1oyd3be7wYGU8SIXrNz7YnyF6ryO902KmV8zs5I3sxvXjqEs/QLspQBbJXcHRBOuH6x0M5sSl5YNIAsOQBbHNGtgbE6X7vuJzCtNiQ/exV9ZwZlDj5EO/60bdO+9KhFKZ+zhz0mMD60LjLRzswIRnL6i/NSbFPxxT8D2QGNUP73FGJR0mL93djpw8/p1aPyV8qxcT+ylAva+DrYJ2AkXTQtupZgOvv8KS/Xqm3Umi4pKHJ/i6PVGlYgJ8HPuoMFeDun9+6om9I6PHL9GrZ8uNx29Uca4u3obR6Ft/lS74gijV/cs3kfHvNXXDInxMZJ0ckwXckroXMuGQcwcPgn1fBKTY82dyDGNiPv+t0RWm5SMSvp583pO2NPGIK5uaHsrx4LzgA/H0Nv164B+xn3ILaqsmosvGCY+8sEzCXKSjja025saLcagdnZUjY4vOHKEjlLfQE4g00qpstnrmmO3YwIzsBYzxlNjLjK+fTBfdCTt0xFW1VpedWdERL7mxQ3pDVBoW/p0qw3U509y09d61yY5k5DfrTstXNrnLQzYbLd8yMsoVQKw6C4e2xR0gtqdeb7SNXavdSCUYWDUy7UlU6t3rWCQ1XEaZlYIs20B7AcZd79MtuZpjNxVfawjLCtZ62+JWe7qgK2TxSzqSMxZFeD7iwrx6Csh/LT6kjynYoYCWVxbYKl+7petCEFDWbLKKv0vg8PQ3O78nna0dHmfpSIjgnaVCxLJkej4M8qjVWLA2/CKcj4d6R5LFD8aZ0hHY5GBkMDI3W8PZYVSdP9Ou/OrSwcl/wX/SGZUcBepQu8jbtApiBemCBbUMPyoBd7kEYIADerqLaW3PcI1SAMqgjVz9nAFCtibGyrTdsLNuDHzQFBRwi0ffLME4hWR92dvTIESuX35pEphOjWgX29CNvv8u9z/XlkDIbDsRkBazG8W3nmtMKHO62YSdPveHnCnb57fKpbhuyRJRE1rVUxJRqtaUxFXc1TJCg3LSl1hZhUba9xUzbUVea0safKkrrEqxlqoLkIWMOzKGMOdzoHDpXLWDJZ7qUWUUNAJgOwJ69az2QXlMN1JcVuAvvd4dxPIgj5zAGRhwjA9gIFcBuGFBH4DmfmqNaBwcEWzSHekLsDu8MO6jtfVuoBbGrpMRql9nnRy2wT90+X+M+sNpcIMwNMuYTcnII+cYgfpNCrwAhQgUbGMAw1MRvZhVNvCBT94fGFMTrb+5CfE4WJxfJys5CzEU35GcK5LTI933j5bkh8d1B4PsmF/9SfycKUDdJjHw6dfZfiv1F5qNpabEC6z//aHyjrTJq9E8XpFRJSXz0Fo1iPQxglx1gfRiAV5Oc1NiQuHwGF+zeT1hL7evxStrhD4sfU5nXHRi/zqQ+bsoP04Dde9s2rmu0Af71o3NXr3jQMhS87YIZKAPmnw/z2mHQSgF42O5G4ar8wbklvH6r9VxQv2wibu0dOyHrDzpntTqtL30UIkU2cF45PyhLgpiDneDhGzIWy6pRbSUlwPd9OkCYKN2HhQAUOg50AQCGMWAH3gHfndnoAi4AEA6visc5YZIhj4wM24H9EumnMhHIob4+wL13nMpAGdRxNzKHzlUzDwcbdmVcFozWjIwkLUzEHdWM7zfTy5uS6hMS6pOa/tIwQYKy/V/77uDvzaf6LNYJWb/sRtxKHJNrtTrTAVzeBSD+wYr4hVvMfuw7TkWXn0g/RJuC2M3TsVUZ+f8WqhaUgzyl6zX/7QWgPCJPVXh4PqdE7DSygBq3YEFshXZhK7jUFrtAW7EQtLZd+hZtBm0w02OZP7BKfALuGsS9j020H1JQBgqSOe/ngfBN/Sm9KTum/EBoeAcoFgPRZcC9dwyeg8HRHf10cpZRPwVjVA/yLC5Y4E7hHi477e9ya1+IhePLVtTvdOnBQOn+g7+/ES/eZUA/CstA5+/DLosvz8/1iWWTCq+Kr8YeFOMzd4v5v+TSfvmxNfvLAz55QabadbhRF5Qq06Y1RH9pI0sDD0qFSriwuSO69/wPHjVKx1T52gjPF5u31XzfZwTqqyE6/Y14+/X3bXAfNHiKAjhske1nVzPshGxXsdwtdVoNQtQ3mJyUHgxPDx9KHwpMDzwYqilSq4vq1BY+UmdRszoEeP5eYgAAD/ZRiSDTguoJIK/AaLdE4U8yEBNNXruwN/AB2IN64IEqSkF0vlqdH11AqbqFAAU00IEu7JwwILsiBwVRtT9wLT4CA5iS1qIqKZH9HSrB5ZQj+cGnS+/Ny1XlKCNyIvI+YuAgQdn+4326wi1KdqtEUnKS21cClTPA6rRYb5QfFst1tHk/8EyadcEvFsh1e+Rp8tQ/MtuzsD8CvGCJ6ha8yGM52EgPYY7I/TgiVzMA2gxAOWFGt4Eu2JWwO353wq5x2cFAY8CQcSjAGHhwe7U9UvUcWutYi1VYsRELFm5MVPdaLLz8h0vigyjAvqolZSMt/Jfa8+1GAYLPe2JwnhijlPYKl2Jq7fPXsFBwU4SrlOZDVg7gtlRVMywMeQXDNFfOtDHl8yt/h+hmBHAbVeaICPM8BAzO219I/SgK0CULEpIbExMbk6PDivMWlrrcVD8r2yqNNuzcdC2uAJ8J1oRPOD+czEV9brBu+KAK72rSW8FHTqDrWueqDa/XWJ3d3QJLkLBOc2Gdm2wGVp/oDwhwogzE+fPPXrCLMmAvyZzgoM5erD90uYzAz9PAUmOYEvG6VczB+gnm9im+dWLETRAlo/v+HCYfRDj3OTCpH3x6wn4bWG/uq2PVFRTmlUZZ77mAq35fV+32i602a7/s4k/UvoaGPgQg/fe5xWhEwVdwhJASZTBCgTbj3u9HAFBXRnSnCeU0ufF/yU4vQgZ908zNSxL6hJPbnKLcwaKOT0pgeFrs6+RGCkoOeRl+/ihSjyADNGusXpuWK772eo32Ty4H5XL/1HYsu2YWx6TF6OlW7oCv7qhLv9hAMywu2nM+2Dn/iXPvO1Efc9Z3+iV8n6NDLFwQrqkbzvcaajgyh3quKgCuUZfd1Y4tHSnZUoPxHXw75kCYKB9lIo6Byn9T+5hjLIFCyNiGO2ZTJQgERmsQZqRSQGxttfsTaNB9L56bnDtZfKHz+tnTatRlUQDh9UsCup6+kJgA1DlKAcw19oltjenyCCVr+GkonuQf614Ag93N9T30ve8/5eu3u97/V/96iLWL72b7zvq38A1Cg1jAcZZz3zdA/thjy9Grn2ZZCzX/oCA5Kaj5eTxwGfku/jDmWvDohPUfF447xrBxBHISQxDdkgv90w57YAcJFG8cVo6k8lMj8/h5gngQIg68XwoszyMjzLkRFRqciJyzR0Xu5NV1i+btbnuGN/x4CED9f5k8+l/of2Y74czDS/48FABwFkDAmYSjfZ9zFMa7LFAEKiPs/zmsG9UAoFE7jrCQGToZbl808rGFm74s9AMWmoxlZMksHlhtKLRRBueFZobllPBtQRG212vUxi9poQf9P0NsFCHsAR7aau+77bFgf+mjPfLJA96bJ2Nef5R5HLSB45mPXo+Z3Ox9YFK+51HpflBSm6NfgqCLs/Wf6fhiFFlSjtdgXwj4dXTiz3m38/AFgYFBJJ+oJzmbw7t57K+CJ+aR48VhwcpewWAGXJC8r4iqSK9SQRsGCl9wxN0bFGm0rCteZ3GbBfUOrL04djE6qTJi/tL5Ea5guofKgPGJi+dPhzNxO+pLr5Ras22lJ0rrtnV2Ic5+JzqHdDn7ENNSmAGDOakvgBlNz7bXlV7OtCVA6clSW/vCPqTPeTE0h0ofBKivPkr/6DfbbyaNffoZCt6+Y9hJNwohNgRC3ekzLfvG6RaBHyFOOhy7b2xcJdpv3FmbT47z/1sT+evIJoC66fgMPozZU+lj2d0YNj1hR5ldk+kPgaLohkR9t/oPcUqBa6/dZR+ww5tlC9gHuHub2TnVkdFWdAsUWw9d8PVlRHXLRIHRpctyll0NSA2I7BGwowKiOFjAxoA4TuSrUj/qwl2eYZx/tTPICyRG/voC1NdMOD7o909MM82atfoejbgqyYuvddo+r//c5tTyvZJWEWn3VmdZm2kx//gN4njcNPb5zdor3J0/4qvUSXyq0RJx6hMxd9EZkcVI5SepV+E/7uReqb3pxBwYwOaoc/AIFSAR52FPxOAYgByFTWPYILbRB7CE48y/94v2/yT66S3RW3+P0eWBn27DT1dDwxf70nxf+P4XkGgNv3mQshJb5d3OXV/FNja/FL0Q+4pjbvr+T83XI8vHu07kYLwDC+wPYQCT/GJcoT/7ujAXn3npS8mXl+xMQYPwR3jgNUCYFSAsRBDoYSfddQQKPJf5LoSFvPOhox2/SwqHZvh3f0Fu2XscFRVu5U6kddcyXqXLflw1uAsvHq8dTwktbD3BrGWeaA1GnzzNgw/N+4+faGycX9JaOQksAOzVKmzs8WIP6zGppXAwD/YJg1GqNUIrtW7evsNaZlwG60Rp3Qvyk6yvrcwK7JOAD+yYnSOiksvUiN0RSFj88GIG3fhGfX+zvm/Cn0iFFQIFVgsUpGuCM9F343r6wZMZqgfxUNtgD9z2r7TI+SG7jd0a2yZDCJv0xUxYbE9bz0DhKj0qF7O80NjZttm4zGdzhbgM/OmTwV3zVaN8nWDmSIzXm9sth9J38N8d0lK+WVcNsJNnwngtPfmqLeUFwa+li3PnYf8atDyJBL8HVT6DziFzl9sT13vJECLpdO204ZuilRbdA00u3fLA4DQwrPX1TrQfiIn05U0x9dqE0qSKuxocJChvwXLDKsmiLaptWC8e3Z0ib0toOTrebXFRof8Qg2TLPYEuG+UYc6NYfUjfho2r50TBC0jWB6No10Z8PK5z42HAvvaaF8kqavBlrRWqUqXGHJN7NiZXwBtK+7sPL7yK2qQiLOG8ou3/atQG3QM44+fjwuM/C/9EXXSsHNkv2k+ydR46ngVqoyS+RXLTy2Qn+aUGUBOVl0qiktj3BrHmK32EW0NTO0y6K9ovDLB+45pOzpItxBXRaiSxYBoGivpYoCfHjBsGEPeYoVyz3tx7Z8NGwKD6RnPHLlG6hlDyKO4qOoHjS75N8PnJfz4/fnrbra3RO8L75csX3YPfuvfzy9iWdiWrPWFxhWOdoqOqU14VviiVnUoAfX6zU359f1wTq5ZWyZdUqZb5OxmmBa/bKpYtzar5AHgozWXaEo2mRFs2qS3TlJRoyvaTH9belKLW7Oik3WEPT1S7vogk2Y+oQAECzU7ZguWTC1/oeYnm963jps9f9Jo+i7QZ22wgQAGNT6KoYGBhqdcoNjpBgAkRnzUmHEokOsm2wh54hkKAPZPx+7DkOcRT+cYGRQGNoaZXG+vOc+wYpklpRXQJLZyBrT3Tt5DBo0noRdvrPIINSuVDQxrACy9uTBtVjSOId+PaCNonggga28a7NcdRlYbaFuf2Afa9uurS3sS711w7PqR3WsYsfseAaxLiOw4MPMWFyxMAHySs3vufj8XHxgbffSCqa7AhrThVPn1ZP++Qx1jYd2YtxgiPlkg1c5FcCtTX6Lh1ag7F8eunMh/T/89kQVYAMWXemn/+qe+haBYtiiZBZNmbmi3RJfESqvSnC5KedB7uwjFqGoueKuFhzBXEMrGC/hwG2PQtWiz5i0L1ZRd/jI/9CA7SwsuROYA9Dy9pwNFOtN0S2J+aXRv1l1B67LgTdXb1oQxb4OxHhry7WAJcJQCyzEveh4E4+7rmAmyU/iYde0CfQGCcHkHcN2vj3oribj7pp8FVvTrDgvGr1El1bdjK5gj8oknsAb608EOfvsATbj8TyzYYVYakuKA4Q2JkukF6Jm4RVrVXWWxWIwpxkFjJjbaZ9yqqRqMoMS96Nv6tvpucxKBZEYhifqvXJwhQQH3dLZbXr6E6hhzGBmaDjkHHrtRXTGPY2LB9Bp+x2sdd48Q1VlT68FA7LrCpLjm+gEba5ZExxI+MCtwU0qDzQf9Jtfnyj9ETt9cHNPdPlGbCUjizNHwLmwPW7772hfKLQ2HmTRIsWfEwH8MnEh4hXWOdamniv/lA1Hb+B1phd6VAnHRfzL6RIA6VotoANhon4CAcj4tbcPCjfeeFwuCNQDaG1gyjntjcN9MTY3ql1qvZt6oMJlCXVXeGK3996ssREIC0EBOKw63YzNW9BHEoO0CLStE4Qbuw2Q25k0CrEGZS3wgkC++ByxVoturjuNL9klaSyDeC+oPOk0krSfcwMrik81McJimSh+wPFDcpXV1O1Flbe+AAQaig6rvy8vqc5iLETN2dpeb+jtPS9otOKhUksmh/2nOY5ldT40eDwdlJjvZhCesT+uuk2olaYX+tBbQ1fbHXsyfv3j0XNQEmgs6hAYw5gKIxuks80fll+SR7N3jgMz396+AWT1rVbq6/J+DJlEo19STA48/dXZXm2TL465krmFl6RRM/gfgRYQriFanuBsdzzVOHmVxOFmX3uwgla/9HJz4kVx7POMm2z9PMb5fZF0TNt/+zdat+OxKZdkG3xKdNLazLFZcDzzzqSbydytOeThsbHu6HXNA7wyHDfwX1ayzUI+gm0ktiIS4BPA4KXh77XoyPqS/jfOV2x8lV9mFL/Jf0YsperCqxCmgffMD56rGKbXatzNnbu1uwu6+PKUk6kxo5N4KxarvfHNrVu/Y29CEMtA94Jm25Qn3ACcprf9pENIbt8daXl8pEnvB43sD/0sutj20Mmsj252uUEyWcOqV12g7lR3hkLBPLSBVgL43dz9r3JrTMOYsC9CNW/92N9dHKlI3ZPgzPes41vXmJ6QLr7AGx7yUOXJOulTKQC395V+wjcRFJunuMD+AlJiO1jvf6d84mw3Vi6U9Do1ceHxD9mvdfGcIc0WENrq+/3h0oO+8N+RHaborNabhJmCXaCgCQ9sAsvtlG8INoY3DuZH5OYBrysXY/VqwJquls+sLw2cvMwM24o5efGb5o6qwJ0hRj+7UfpyE5gXkDmnJyK4Bm9F/LXXEtBdRXblUrVv/aamW81a/Vq4vVXAdbKrdaRvKctPdx+jXNq/bYMf3XR5C9XQMt6ab77farpX/4c+1xaMmu4TrA7zBVFb5AuucdXPxOwsprjxWR779x7nPi4/8l/vsineOeqNMRPQG1W8rnFRUJWm1yYU5my4G1/MrxDR8quIYUE61UoIvIjFoUnl5ofj11z/ru0k5nxWEw+orS5WXxcnpRA7z6KYmUfi/lRyiIBFEgEhCMhSzZ8+HCXW7MjRy2CB+Y7UdZaP+sx4k6WdTOs73q4jpi8T+h4sSz1ekLKna/f/iNxTcVoac2LUo4JF4ckmeE9kkeTofwralleCaW0RSZ1uRfyyrIMHwm521Y2LUM8j/5UlA0Ql94dNa+daxpTcqr+6vzW5eMpfQNBVBfBTUqU0k1tv83NqOf3fiQlspd2NbdSPHAtNV7NbaK0sqVWdKGViw9RnrsKz+h2USbf5O0gbzpuVCWlgs+e/VB+PXD3uM7T6QRs1AT9OrlpX0/pfzz4Qcfbc/i9Px2IZ2QuHznncTkH0FNpyUwNZuQzm6KqUj8y+fKBzl+OeyFmx/M4+wy5ph/+ufkbQ+IKaLP5uA8N/PjifvDFrLLATO4/wWQHSOwB/liy2XRYcy1hgcwIOEjjLzCoDz33xWAtobu/VNI7atgkXXE3WDvcz1KjwyufhXyk88YxtxYvrD86MoC34K35LkZuUfMox+D0Y34KP290fOm0Wsg9FJsaKoupGoog2jXh4bpEC8nA3A+rOv9M/zKmzn0Oj1Uf77pQMjEu113TmWU00AGhAO7rjQGK9b73XxUXfcN89mp9NZ5tzoe8PYtTW/eYLz2w5uHQko4Ib4n5VhZWWz1rh8LeAWJeQ+Ztc6lTacbWHFdmiXBBdaaJTUwQBmoB52rZMBzyBxKn4krzwTXRXfFybRGHxjA9A1Lm5y1zIeJebwCEPoLdw4m+wNprbVGnkwVGW4b6J1c92jTo4y6bYu2DXRurtyMYZmel6EH9No89JizBwJ1Hoh/qgFrRdbOW7e0r5SizR9iH7wlUs5qHz3amZUZdLj+sG17k5aBMZq0223LyZRvQvHX9zu/zoZNhNyr5xPEQ/NJliExgV9/L2QiDIRo6LHlWm15bEJyZQjIYHcsEOvF6bkQBDOoHVRApUA5EoM4rWN+BguEJi9IiI0pL9MeS6N//XpGdGhp3ryQzne86pp9P/chM+LaK3Mvgm2afHWEIjtbCXQ38TcW6GIbEyGCr9gOypGliZYWmn6BDjBQBvzlNsrw4DS5PM0sT00L5gVU5KlylMocVd483BysW/Bim28mZ0M9ObmHDj7vA33Yg/3xXTEyjRvb5p04gq8kvCxRFIWkyuWpuRpewdwPPRtjy2O0ZS3a8nJtS00BWFnzKAOPMUyZOs2z8mh6alQ4AE46tnTOzSsqKGBgQl01q+hiwE46OrkL89UtKuTuMjAtGXz9tDzf9cHzBRSng21EV6LdGYP1ocq9RD/Ceogd2hniHRmpbsOkRShAB1GADif3D/vyA7EonpQWBzVK435gCa1oCTNNVUS9hhSGtnYGfzRgH7SDqb3rL8ZdXJ+wxZyikR2Ljz8m05hTtpSgABlBAWo1Nro4OIK4nQdzvtTqAJfDBdy0g21LrjUZr108RyErOoe67Q7c4bK4rK6B3w+BuUfco64Npnn8i+sPrr/o4b2rC3s8gn+dGSPi1mcGZe189Eg7qxS9tQJbuVmkfKW9dWvn+ZVTw+IDzSMZHlULDWguMm1/42sH9rNd3L666P/D/zeJPu5De9bC5vbmc5uxzbynlqeBUfynv4b/ilNRgZur+mkPND23pAQ5iWr255ikP3WeBtG+0eCvd8UzYD6NLCdIWb8ePf9rmif02eGZw8/UA+D758GCAy9f34kCVCIi07kaJ8MkDyOGZwZFpTrTuXSOX5Iu7IIo+E+5LoRC6YMgCAw/Sy9qH3iMMhHcGxiGaRyfC9gLqQKYAQ+MZnr4Hx6wE0AaIOwI/BBOIhEIMovvYwoNOYvQKCJCG6dxvshzdruM1z58WS0uEEZOismsKu5CNgAAQJsVDMPavGjJWcGHEGBFp2zXQ8qBHNDhRxZPRiafPPgX97nRCCl/C/AieONQXOnjCanjo09rJDcel8wLoUAQiRDwm3ZAGbSz7rM4vGEilP7dFZmvYv5RuPjPRWmL/hRjUar8BrnZ+OLFhw/Tou9yAVZTMxc1x/hAG4CbYkQx1vUc+9WdmFfKeHV8xJEIvVqvPFgY2mJaGCog/a6eCz4f8EIww0de8F+04/1hqhXKFarnbkosNbgC4LhLu7xROmkGUQFwPR9zjVFJCclYJKKtnMKoAMapAIlbY1Q3dSGQ/ehyOwwc28I/Z/q64aTkcXdGXVaXBbMWoi8uoiRU2CPoM8LxJyYADAUdBZxTvFUKVo2AskCl70FGRwQZX/yHmmPY+OD4x94YXdkiXar9rSR5//t5RSyVhTlWv1ya+/Xf3tnQYyyZj/l2IpWSSm4XYr/ivW35c0k3t1pSjaQ6MoCPJIxd9wWle3L9ryE3//uE/kkzoX9taMG+BuqzrSG9T0P/Dks3xlWHkpMYx5QbS3zEFxrzZFJCS6o0ifWUcHvndfenP/IS1F4ymSysAIQEy4JDw6RhKplEvJrlDwvO9gztUCtlyhDQ8XVfKUFfHYnWx+mj7d7Hx8WvKRTYouI0QYLQc/nnkQC5UI7w/cWcVQvDNCuiV2jCQFfGnySCuC9oXU1Nr1TFWbt3s+AH2FppbY1snaiPWLyQ8eB53Dc2Ohzqkbd7aRngY3wwYPLNBud69VuBxFsC8qLS/lkR70PiN8RpNHENfKvji+4d3B3mmP/G29txe1dE7LiwN+TqExxYNL/O0tQY0Mxvys1tDGwIrGdJ6i1Ex5y7gcHLLs7O2b2btVbaq+Dq+bW1qNXd/8iBL0gxfjL2GMr2/vvrXOny+jELU1XEynt/f3LJb9ql0hYlnXtcilRLqrndkufLt3lfsSNd3EpJZXW5V5jEB2TYCOsnuymX/K58Qv/kv7f9KfsKQtfeR572hmz1YsnCZDKZlzqB9+On7us7bxOespKkqS0EqSyv8YLYp2Sj8hgjiRxaHWdMXxwSFKKUKdU7hnrOCmB/1mqxRKYKk4aFBsuCgZiYMS8vIkehzFbllP+n1ADwYE6p/bdclaPMzlHkRZRj5jR5alD2yuwZXhBf9ig7Z+UfaXLzaHAaytAyfFhw5MF4QwRFmkBoD8rS/xmfV773mKE41ZPW/Gs4tnez1fg/hmlkyysflY9ni2qLxx95tQUMhCf0EOgMqQ5H185Wj+IIE8UZBx6z+s/wzrD7bx9g4CHVpWcdSQxbNMlhOnDYDhpm2bgjzJ3lO4LlaViod1owUF/m/I39zRvgHTIj82+K084QVquZzM+3V9DKzreneatqqfDTFfxHo2/s3uW+OpD4LVuBApQ1sNPdvZFRdWrF+CkAwKnxFafSp/Fx3D2dXI1dxCxNSRuzjYx3dIyP2MbSUpbGqHhJ0kAcfgOhNfSwaaf88hoFx8xWspgbKodilA81Tzjf47yBkoWV+neHxYUKisFxw/LjMr+fMjU6irCCmVZBXZps4iiGQB1yW5R7M/lmbtJ3WYAVF+Bgy09o6iUSUdZFZ6phBtXx9AwdVAb2O6jZGP/BcgfcgJkzhVt27ICAk/2trRfLfrJ6+svOtUSV/OlFOcFiNyLrOso7uXPwR76X7euA64Prrusf2BK/lK396Vl+C5wd57q3UrOPMvDUYDZL196bi5rLz/dEGp7XANgs0qNmIkzUceOYzqfT0Wm8YzccQNNF43U6Xd2jDsmLyCH4uyHHXCb/+2H3/E2cibDPL364WFfrTfR96gNKlgeaBPDl+MtUgUlAvSygQMuyFTWM0dhSG2+sabdrIQU7Futqi/eu1OJswEbAvdecJn+xIFi3R2faTG6ewdxxI+MjSY1JiQ3LNbg9frH004JVMmGqKF4QXyGUsFurvGBfS6IgUaQTBlWt/Hhtvbj3TO6/x4vimkTi99W5h8kIpemNn0HZ27963rtHxEphifcI9ohZOv85/VB7/bTlQE2H8uvG4cGL1sCUnJR92bocHfxv19WuA8LV8au/b7AnpgjfFCZVdIPx+Yf53MIr7+EX4vDMtsrxyvn7Kcx0AX+PkJSqkhnlmUWBsmcrCsoMSveYWgbYldXHj7FK9kDjXrCkt+BHyA8p1Pm25v7y1GhG/s41pz/9dqo5Lz9vPVlIFy9CCfG2ALrelBvwLS6yifBvA3LbMVdfWITeHKKyqQwEn7BtQ7IRYWI1VCNKBUm10M00Wc1I7jdZmiBOkB01Ic0yuSvYzwEhDgHigJAFl0zWuYgch3ty9wx1lpqUJHpXOCIYFh0WfSQYEZ4VaZOos4k2QaOgyHfWV5U35sxS/XHvPV5qrz3e5y5/WXxO0MUPPGlMJe/y1vaYc3OTvHaRe85qvd+gxBkXGZLSc+Mob1BxQu3Tw6PbRx0jDp77xYYjc8IuqylAlYwOuz0Es0abhYpIgJrs2HfYNctiYWPlv8srZcI0XqIo0ewDk1evZD+//lgxEcZLFkrmVW5Nkz4YgIzju3QEqyhoOGhYJG7QRJ8/7li9XcZMYMre2ta7XcpMYQY1VjoLrxQdzPUeO7riu/qwaGOC8TtjilH77vXF12VF2hXacqWhuTxBtE+U3AHkpbuZdeI65uPvJFDfNKGiNELJB3wlhGIYLsA9bhVWjHx38F2WbyisYSwVNYYeTkxRD8v49Q1iwhFZHZRUK3CpGmhv9YMqm5QmRzNIO4hxyoA9fIw/Zh+W5yQu7av8Y4DbZcf5PjnGj2ORZnssOC+Stsr1he+7LhgFjP3LQ02teI62XEdoPR8+0kTs1L9rS74AnDc/yCRjMGn7y8dATL7CbncbSZtjCZq1YcMkNbwydMGqtiY3oWxpqlrKcY+E/UKjcS6wDHmPnGcnjYBccu7YGQYGnYTgttNFb8sFludBrCAMhemic6nsYh04FD5ey9gc7i5mzKryimPTijH+mPqyHXrIdNxf7+mqwufk5TlRZ15+X/a6Xq3nnbqsFZkY5hiOS4wsyDXhANZ0iPHsIf/XF6AmBHcaYIMO6+Q4N/YZYO2X2q919szor6KVT/VfUeO2bQN5qZlpE9uYZnN+aTV3XDwa5D+0xhO2fDiRrgeApH/90g80Xkoj5GI2pvBo///7rpYEgNYy0c0iQ+kV2cGaY8TfT7mhJEVK1Hcax+HrFogcMe2y4SGpJYU4nMylD3zuYRz+xU8wVLtG67N7sx4zhgv8LmbNee7dpXPdl7fJS1JDtoGISQBBYgvka16pMnv57mcBy90D7TnKO2afOQMbaOrOv/3racUdKMiqbl8UZVOb6qcyz++qup0zT22QGfH5rKuxelmqupSUSa6YlX7zlZjQutvju8gQ4Q0LvzXUN+j3zZ0cVKW3UVNSd99WQ3CEph/E5Ne6XC4cBWheRFOYNjk6PIxd0e6yo2DZQH6Zzndh7mtfMDgZ6juYmfHsIGyw8cYVSz/obzXI/Y9DxrlfFlIEHNifEu9QQb4Acx0lZBQ//01kmEN7D6KjdjThaYThkBMNGv8mCLSV/1oMa/c2dkPz/IQVVdOXJp7u18p92m/apPCi1COHU9suy2xJpmZTnl608x/urcDTZ9a+G4XG3xW5QswVruHemiO9XPAYVwQGb8jJni3bpq3x8uVnZG0qTWfve/SaL2179gaAPYcZKEDnUA/Vrtr7pmmIMcTnkoxMRiTDlAzy157ml9nt08vFYv82J+Zlcdi/EWLhtkeeYLG6QtZ9824dF8D5vl9VrwNqSe1A8s7qr3xXwAzukvRkWRfcxa6Tv57TR7nJMF5YEpKK21x121JDSuTbLru59Lv3PHPkRT9BuBHTb97to11TOyTw++Uww/P5wF0A9OkTH7LIALJcP+zQfBeVokiC3Kd+Jx7TBGdXpENkVveERQsASfvuv//TeI0pTBeU0sij/XDpdT1QbaPOkadcdXtRCHGAnQutpdDcAQi9bP14igwq77v6L0DHd7t+rfxjD7CCOMvXQ3hwB95u95sBnqG3Sq07/gqH/EiJbacvD9E0bhqCwv/aYS31CnPzdaB3jbQ7hN9+WsMKf7LWahrs6LeobsPQJpOWDKML+0/3wIh7EDAkd6329oDB/ML+8+f7J+7nz3UxizKZb6EAiUfm2vERpbfO8UAp29IP8j8HI03fvLuu+ivffBhw69ifkpAu1rGlZUI9rtVJCq++hk5RAXXEzhWrX7rUJXmNjs0beAbAarjxvfpHtb/Af6U1m6ybUAjZNOY53ju19xUbxoocYCXPx5F2AIDdeT6BejDZ6nazGxYVG30lY0yDSdpCurWO4v3K6npeeP/EHBnFVtu9rKVFKun7p6z/xHv9T5rrwjCEiT7pf+9E/9aIv+pFLr01OvAiMnf+Ibl42pibZ4Do0bxoOhRODlRI08UoeaT9l01slAxoGh4kVChM7fTTG1aosEydqdX//Pchu0OGQ/pB70QnyaSpT1sSffRoLNebRPH3k7pGnKiHmKFZuvRJZUFEnlJljso9qzIrs3MiclUVhHgqA/liS2pEgUGukwenhqbtCk7Nfc1sJvwBgm5qh+1jwvFhe6/uB2pDBmW9OlofYBRaGMUMa6wOMwwnFjMsdF1cOiaw7M4iEok5G3afzc47EVRXqM/X1bGb2J9lGgp1eax6v6agOmHRrxNDCTZyPHVKB9xnEYDOIADBUYAI+AIEoDgCkBkUINZReA5uLM6vyJnUjq86qaGmNsKgzpK+S7dE/RmByQ0RRpc481Pt9Pm0pncp2PvAuMSgX7JBjyzRb2CGqBiyhljc48kF3Tyv/gY5bjWFGcMwbnKFZaAmhsNc2PPqkGGNC6oDsm30PHzUvNwIc4QSTw2uxXxuIKw7haviiF/fjtkV+7sV3Ok/Jds7S9W1jiKeOf7toU8+jNbYOhqDVTWNx8ICVmHtWea0s7D89VI12pKYMqhZllH94RXKXGV2doRZVQbgUmCOyFIqsyoPlJFHfrxHyBzqsGZK4eVRfAZvd38Jfym4jeEQe8Bu9O5YgyYQHxwewlZ7Zc6G+56cMdyjYIvNEPOoGQmdfP8/AyD3GZt7IzvphnQiJ/Ucwnq3ONtX77NVfMTwaW+o+3CbOZzCyy37dGb+Oyk7Mi5mCvPFlTSgkT6qPZsaWrjiALOWeaA1tLAdBYgLYaLt9xpGrMNprjSrC3O549wEe3h7OAh2k3MM5wg3ckw3KOyRt7uCK0V/3un5VA2FzXKrVflJzVWGzsIjyFE2RbUuGf2jegenwVitj2+f3bEt/ydSIJqKeiU+fQKC9dkmxooMsg/9ZesDjmErx/Cg9SXdh7wiw8QA3+en5n8PRq3/rqYYT+Lj2bv4mqb7uONYtzOfLKPHHMd9OrBam3+hX02aSQNCah2/z/8y9rVtX3CDmMXur7A3C0KZN2u+02cq8WPLr0U/0d/65cfw8CQjPtax7XNEtoASGcr4pOaGLuOcsUSAsyabQMg2OmNjd3yJi5gbIPEyV+vXvZHRNZ3ckJTUsFwTgIw2oGm178jZo3Uf+f+okw7OGqcOG2HXqPHwVPUpkA3qfvTbX1ruyXxWXv5MztEG4AFaf7ln5Ef/DdgGT3vO2xMzg7a/jQa++WlgaJ8XFAV59eX3hUJq/9JCAz99MxB9OyJl0X/OUYH6Cl2UNCMiMasIwaUyAADYrBDq1tilrHcE7wAAOcAhQ6TyzRywmE0WTSaJJFdO8o753dFJN9yXhoWmG0LDgp5lZf2Q8UNZ1g9B/jH+GipAGNQ0Vh87ecdE+n3pBt0dP90MCmm1rEiWlzfkhUNxJY+fqh3f/WKP/uxFaUUIiYKy+UeTg7YeRkKdeZ0UQiSB0pnbGUKIOu/pDEUOK3CqB5mjquZbtbEfAhRc9hHM3PlzZ0zbyhpDNSh5/H5zQlZ9xkr9ycxKaG44ksDOMFcrWqsUmWZ2wpGNV/zPhZ4POx96LiS5E8B7DV3iK47ZgwLEh2sRp74NeNFq31fUoGzJC5JQxbHUUuSVNPGv/uOpj4u2t9pxxj/AJSVGGXZMck6JT9PTcXz9PXxp+jmYQoVaK5WPkp5Rg9Hvve7uWPWfP0WyerVnC2yZDbysdbs9J/jHeBx4wIO9NnsQ1nsKDdPTQEmVj1sKviIMX/w7tueeAgsxEfDq5wa8DWGe9sPFWcEUHvejr7oofQY7M37j89K6HTUxDlL61PuB3PQu7FyQ78OD3tVg3t6XuAu3a63EAbsDL3L7XD1OWCBVRG5ORHl2HK4HqOC69KYqUfANnUCdK8bV+4lRdiju5rmD8pwMlpP16YFBmidUzsBXbCbfXZbz1FJfD6vGqi6IiipQW0c1OEhQth+9961OXFwdXxkXVxlf/USDgwRl+yf3u2GiUbTRisCW0cDrLYEV1xfCUf5Ms4Owc+bTCc3OIwnsTHOVorVakcFddgPnfZsAT7yn/XBJZrAXj7O/71Ude69TvHtzqA8PtP+sYml9g39xZrFuyckltVF1N7uX5NeNOEmdf/75seScyXWSp5bUPA8YSK7Rkziz3F+4sxwf7hRXHFvnATd2UJanPxbR8/xrmtp3+85RjG7qzm0n6szPd1INfRcvtD3OMa+8RxC0eAMEpcbklkcf6xo/n/wYWzZK7iSzryzNiQ7Dt6WdxpFfyfVZvLzT2KMtzPcAGMCZCKgn+z8bMmGgd5xI4d8lyY+i5Jm8rnFbuD4EIiGZl03w9yYF+tCz5UQiwX9Ip4hiH/F7hx78tZF2asOh5UWScNPN1N9cfzw96D+00Q2iIVhm3TTly+87/J2MVE8kevuQ5MH+FBIpkJRF4NC4xHAfHkogayuzvSW72OQi6hRakQsaUmJ+/Z/giFy/pd40hUuKlh/acMpI+zqY/o7fEbYiSjfkTyAS5dl0n0CStz8hm5dMIBJ8uC3cayavTzuH/A8e/+nEFJVcxN4lyfau1JIJKM8nnMilcQhZpEASieIfLCf5eBOJ9aTvZIf7+L5Tm6wyGIoG/6/6j0aEvVLTW9r0aRSRwsVEAQpooJOCibPueHoKdQrBcQ7+xIxgPM/u/gtPl8t7mCKxQIVVt+QgOKnmWEsglzJsN5ta6nJSz2J2e2rBsBIdhHeRvhM4hEtj2VZmsjXktQ+cPz0DBp0HDN92OMF0CPdHMBdwTXhdXrC9Pkvu/rkDA5hSeLly+5IsUwr9RL1y2nuYEsg91lKT1HqrCiqUWCjDYMB4Qq1UBucDmzv1CXL6+696SJe8+1I/Rj/njT0K3SikSxW236MO/B76R6i/ZXWlO0uT5oeGfF0Yz3tN+RoPJDpqB2eM2MeS+Nj5Kut5WOi0bOLj/BFJoflJH+vKNJfHA2y6tvb0wzCbkbIjdX0Eh0PZ1B2UdaGCzeILNU9a5ItLy39e1Ufbg0CXC1jIiH0EairIrvbQnPaHlL766P/DwaG9ZzkTYROcb8f/JZeft4187v/X8EQ4XuSA8LM/7Ptsvo0fDZ7Fxti9zNPMXvbYtAv1YlKYXqjm6aykQFb0sQZXMutsEBiFmUMAkNuQn98Z3rAYHqzT+UxWWDH9zM+B6Bz3bWqkmh/Cnlp+mkEtx8nibhqCPOiCV9LDw3g7rh0HtuzDfkKKvtaRkdm5/fKCQgrMgK9Q5Fn128PzjjKvRZmIK3yAu34xgg7C9E385kpu1AFov9/9knWW9eVdd98dxt7TMvjvZY49bupDnAZDxntXNThympf4RMpeF/pOONFF7V1I/zmVfaUW54pkXBM8rx4eLZo+tATpd+VSVoOkXtIpccJnEkhWslcX0UoKJ9EL6t1FtgLPZOj+qgXYdUtC2xcfWMF+/qrPN2VXv/TE4tvvG+2XHUPX47PKwisUzYtrNAuiMSte0liqyAvLydayF3ntvL4sLyY7sLBjsFJ29/mQXjRzDlwkW0kJlCJ7d5F268syUbSaVS9pkDglneAMMK1MNtSnaObOBbOQvOLI1QOibM9URvOqjOYpz+xc7uvx8+p/gOg5019lLE6XbgE0ZM3DF37tcaIF3/8Rkpr95b5tGYmtDIMwXWgVWoYSJpL5BvaP7F1Bu9X4ri8vNgNPjvd4GZRd6IaKDWiXEn169MnFvK5/jf92vQDqHHzNYivMXqIX1z9ijVZi9EU/cr+ExAW7wyq2TS00aoqSVqt71Bbi19+FU4dywnbrKh1N9rlbjheXrgZtz0e+bV5tGXsa/PWfMIlMJgaXUb3FjNAsTmIY2Rsh6WJYuT4957wpJej/HVGrp7yTCle6vmPZwH97C1rfFq8vbDs8kfUB420UoPSWgrb3P8++o/uBpCGGkzQkMkzUE4VEDZFTEeSO4v3U9hrVHcGOMiqB/o0gUXWz1i0GVBAZYc4+BtRluapol8xuM6X4dcBz9qhf6zfYVUKVNvauY1PnRN9Lf+8z1ZOPqn6faa9LC1PXtc/8XvVosvqMt//LvhtOliprl+WUBneq46zTc/klKxBJbG6R0qYaR0BI3+YSRPH7d9+hxoCM3OW86SzP7UH/p5+Kzr+iA0Pf9noxOUP6/Zvoh0NRQw+jv/mdNDP5wuvt0MDov2zURyPDLtw1EVCvvRnlCsyAwr8zM8PIsWMO1zSOtyvgCibs97cNSPSpcTXGrdw3dZmZb1TGTeoF2znb9LxvKmP6M19/NL7J2WqMrYlNhkBcTQF5X5Tz17yINLlRUCQ3KrNVR5+H7CMXxGuoHhhs3QHPcT3wDrCd+ozroe7YBnu4c/C2bTAD1H0cvSP9/VMRWVkRyrL68qQb2WtLT4enk1Kwp/7Z136NI+3/WO7OUKxbn76Tr+uIX+BL++Tr/L7u+P1+lmEtFbGlGk1pbEVLs6Y8utgWkzZvJHSASn7aunxWyRW1fElKy05UU1rGK2PJ299uKoupCFMAIlY7NVGPHdaJa7pk/Od0mLaiNHadbkdNo8y4NH1p8zoQl19+WYj8CCLmd5wOb/E7UHqKYCQ8lMkeGgmEU6WbiS3hpzvmR3grvjb15Evkugpky6O+YjdhIb9IWPKVXvuJTvNAWMy3EFpehlY/8KrQySVglaSZ5gU06eAqI+6/PuEg5fQxGHpxgu9hfwktD77JilR8NSd5yhxzjI1XngYi/bq+3nVRVqBkaK82/uwXZQNKRuzlLv5OH/jr76avwoA1je/4mNel/d/Hwet41r7TeWuJdeDqoc7fsSsvXwBrPyme2sP+7wl4EUlCoyje7pi49Yspq39jrbfJBuVybcxvi7fEHZo9N2VSpYbZ/Ar9cshFlFS/goD/d3gV0CBN+QRpa+gKly1r+mIRX1z3QS7IyFgWtI3SrTEV1mTkd4dvofw/kVEW0W/UA+g+KZ2y0iTtufzGxt3zaQw/dcbVJ5uuxG3xu12Vdkx+a809ZXbMw3/Ey59/llp4r+J6Tgo3K7BcUKPeUklimCVVhB+PiidXf9tpZ57OB0ObAcPAgL85BSBI4idsz/Eiet/zn/KFJCI+vfAn3yn/+75zYvYa/vw9XwDht8wS8XxyYcTospAFjmUg/qSe+HJde8fn/gWc/HO5nDz2vTRdf887/Wh/StqrXKEtT+Tp4y8KWNTU1jy8iNcmKCgQVP+mp9SxZCpfomBPF0bcbg7JcywDCZf1xJed9o7P/Qr888/lcXLZT3W6/gAW2lUV7b0h6aSf/hNQ++DRRkZr0dk9FfppKUUjvlCTaiKPogau4ebO2ibQGLcT3H3r+AGoV9w/WJS/rOtU6aUtSMETf7Ogz2/zmOYvEhcwEl94U0ngf+LMB54eEiD2CNMb9BnI/7FpVUzYSnqm3TYpoQ2Pow4wAkqoCGDsI/AxG8XBGpWAVKAiAopBPDUCRQBAjo6BY+KQOMALvMZKjFS4Vfl4Fg4lon1bVUsMrrPVVDjkBabGxFC8z8VOApUYSFq78cwOAofGhC287dwPAh2kgWfM5le4RvAVZ1BRtB4ZIx2FnKmBFVJZH4HK+QMA9dSFNajUmPWklpWWrM40LJvirQbyvhYEiENhDWp47KEdRAMHpKE1yi5X5597K0sn27KN/qvUSQoA8LoXFEmtQlr4S9B/33lxEdAASHlEX2UAeAA4ssEU2vuBUGoQ8AH5RgBeoJnEUXsdSdA+bGRABaOkQPux+QIFlPGaCvygNwFR9kk++2AAKoMAGyQaAdBBGYnYdpAE7c1GBlxwnBRof2O+wAbmfqOCYGgx0AMHqANVYLF9WAvEoBosXfPtN4EasAi0gXoYbtwECO2RlBVJXrMAdIKq72BEUmhZVZdHxPYGoBDUgQawBLSAqvmiX4nzCaQ4oZgJG6irzI6f+HW8GKiBCkQBQPL8KKlVUalVk2jLYdH2mh1Sow0gGqRZzwKZDkmztRHGHDCh2VKbi36K9nCzmTNrROtUAJDgF3Z0NkQvXlyP/4wXPYQUvoHLw48B0Jj/TDuIB5F1u/qcharGSqtOZyzrpRFvdgEn6zJ8v8IQJeSfmAkQASJCJIgMUQ6C0nTDtGzH9bCw+fHHwYVABQjEwycgJCImISUTRC5YiFBhwikoRVCJFEUtmoZWjFhxMLh4CRIlSZYiFQAEgSFQGByBRKExWByeQCSRKVQanREAYrLYHC6PLxCKxBKpTK5QqtQarU5vMJrMFqvN7nC63B6vDwyBwuAIJAqNweLwBCKJTKHS6Awmi83h8vh5BgiEIrFEKpMrlKH7KkCt0er0BqPJbLHa7A6nyx2pC16fH4RgBMVwgqRohuV4fIFQJJZIZXKFUqXWaHV6g9FktlhtdofT5fZ4fX5AmFDGhVTaWEc6nywp93pjEF+esQ5zxc211BcU3l3bQP0GBbiXA9hus8PXPfpPvt/1UsJdwi78Tl+EZZdHSF5LWXfn9UtrpVXKz2s+r7YVnrwW8xpbb/wSFqSXK3Awx+QOKc7r3/lPJEr2Xmii9t5G2ae8M5IO04xIJQS/w45A+N84Fmmz9Li+XGsjTIsTub6fYtt9Yd4B26Qg/FWuYgAVVm1RGrZ2ghFOaM1HqG2ggDkAC3MgM7ZetybkcL+0Cv0LF9pmXtvKwDhNZU2FU60zdQ9z4TAbDQU4ge+Rw8WPrfMcmIbDVGsmnKbfXJLmYNMEB/eEiSOLwk23fQ05jLl4WY8Qray1Y/ntYG3ghSDGJtwJ78gyzMmCp2SCaIGUy4JVGKArttX27ahK8aupMlJooOHQIghimWEaG5WV/Co50Ja/kzCKBd2c1FxDSZBx6Bj1ELT4kDQUniGjmaczG2uPwk5g/khBQNZ+6cjQ92gO0xsqhbAEye+WcWLzFHc3KJPD1LXtYoG+KxgXLLjZTXwYOHp+h8XYhvQ4/cStuUeokLUtnMaiTazAWuS0DBUycA78yWCYoGR4ZZP2KIREy1oXHgicFMhx7Jgt3Hu9f73MZ5sLnTPXKknmT5aiwwTjEU7Vx6394kwYKFZZo99aJA6SnBTIQZcJgG2iOYEsA/LgjmzKES2ZorolhWDN4CQuJuRsFswnDcUAAZi2TRY7JPXJAYgZ+rwVJO3T4yAk0pyCAGwjaFvwZo0PWAJpnAVMR/IKkLFD3rrE4CXkkh7ZdmWq3JjRmQOLM4eFIcU3V4kDVT6REKckYXPGANSPBMWlNOQYjkIawhCXnuM5prZCQwfdXgqfZidhGfJpYOqTA/Y0500ZB4LQReO8YZ6mjq2e6QIdzdGLzR8ziEWSLVQd2NoiYGkRGaMXLCt0oq7fOWoCTc11KgkMttjj0jFJ6zIc7BafifCk0pZOhSbraAopcEpG4/kOwyNmF39Mt5ppTW7jRoB8WgPkOc51rC8oKZl62iKAamlu4DmuBkvCcCtjwcMLAlVzR32t10CwTyM6AbagGllb48gU5ACDzUmBCyJqxlxs8U4XAyTcTtjWMNGdH9GuwTBmjyI3YJFEgrovcQDR5kFZ0NMkmgTDZclc183uTcoBDNAaimIE2Cwu9OXklBGRkNvItMU7zXTlX5Zz/V8YIO2iK//xMnpu22WBNXRyG9vGQuJ0mGsc26/Aag5YQelZZs5Bi2ubsxHV/DzGXRt3P3KTOvQ4HG8aKpm9OyoHnIgzG/GkIEerHqEBaYCQ8UJPWbg8/vNFDyFvqkhIe6O6l0WordG9pHAAyyTWbhCGHCtBD7vDjzljqRT4+8E2POgLpACHDw+E5jqrtyanHw0AAA==) format("woff2"),url(//at.alicdn.com/t/c/font_2553510_ciljc7axaw7.woff?t=1705587463221) format("woff")}.van-icon__image{display:block;width:1em;height:1em;object-fit:contain}:root,:host{--van-skeleton-image-size: 96px;--van-skeleton-image-radius: 24px}.van-skeleton-image{display:flex;width:var(--van-skeleton-image-size);height:var(--van-skeleton-image-size);align-items:center;justify-content:center;background:var(--van-active-color)}.van-skeleton-image--round{border-radius:var(--van-skeleton-image-radius)}.van-skeleton-image__icon{width:calc(var(--van-skeleton-image-size) / 2);height:calc(var(--van-skeleton-image-size) / 2);font-size:calc(var(--van-skeleton-image-size) / 2);color:var(--van-gray-5)}:root,:host{--van-rate-icon-size: 20px;--van-rate-icon-gutter: var(--van-padding-base);--van-rate-icon-void-color: var(--van-gray-5);--van-rate-icon-full-color: var(--van-danger-color);--van-rate-icon-disabled-color: var(--van-gray-5)}.van-rate{display:inline-flex;cursor:pointer;-webkit-user-select:none;user-select:none;flex-wrap:wrap}.van-rate__item{position:relative}.van-rate__item:not(:last-child){padding-right:var(--van-rate-icon-gutter)}.van-rate__icon{display:block;width:1em;color:var(--van-rate-icon-void-color);font-size:var(--van-rate-icon-size)}.van-rate__icon--half{position:absolute;top:0;left:0;overflow:hidden;pointer-events:none}.van-rate__icon--full{color:var(--van-rate-icon-full-color)}.van-rate__icon--disabled{color:var(--van-rate-icon-disabled-color)}.van-rate--disabled{cursor:not-allowed}.van-rate--readonly{cursor:default}:root,:host{--van-notice-bar-height: 40px;--van-notice-bar-padding: 0 var(--van-padding-md);--van-notice-bar-wrapable-padding: var(--van-padding-xs) var(--van-padding-md);--van-notice-bar-text-color: var(--van-orange-dark);--van-notice-bar-font-size: var(--van-font-size-md);--van-notice-bar-line-height: 24px;--van-notice-bar-background: var(--van-orange-light);--van-notice-bar-icon-size: 16px;--van-notice-bar-icon-min-width: 24px}.van-notice-bar{position:relative;display:flex;align-items:center;height:var(--van-notice-bar-height);padding:var(--van-notice-bar-padding);color:var(--van-notice-bar-text-color);font-size:var(--van-notice-bar-font-size);line-height:var(--van-notice-bar-line-height);background:var(--van-notice-bar-background)}.van-notice-bar__left-icon,.van-notice-bar__right-icon{min-width:var(--van-notice-bar-icon-min-width);font-size:var(--van-notice-bar-icon-size)}.van-notice-bar__right-icon{text-align:right;cursor:pointer}.van-notice-bar__wrap{position:relative;display:flex;flex:1;align-items:center;height:100%;overflow:hidden}.van-notice-bar__content{position:absolute;white-space:nowrap;transition-timing-function:linear}.van-notice-bar__content.van-ellipsis{max-width:100%}.van-notice-bar--wrapable{height:auto;padding:var(--van-notice-bar-wrapable-padding)}.van-notice-bar--wrapable .van-notice-bar__wrap{height:auto}.van-notice-bar--wrapable .van-notice-bar__content{position:relative;white-space:normal;word-wrap:break-word}:root,:host{--van-nav-bar-height: 46px;--van-nav-bar-background: var(--van-background-2);--van-nav-bar-arrow-size: 16px;--van-nav-bar-icon-color: var(--van-primary-color);--van-nav-bar-text-color: var(--van-primary-color);--van-nav-bar-title-font-size: var(--van-font-size-lg);--van-nav-bar-title-text-color: var(--van-text-color);--van-nav-bar-z-index: 1;--van-nav-bar-disabled-opacity: var(--van-disabled-opacity)}.van-nav-bar{position:relative;z-index:var(--van-nav-bar-z-index);line-height:var(--van-line-height-lg);text-align:center;background:var(--van-nav-bar-background);-webkit-user-select:none;user-select:none}.van-nav-bar--fixed{position:fixed;top:0;left:0;width:100%}.van-nav-bar--safe-area-inset-top{padding-top:constant(safe-area-inset-top);padding-top:env(safe-area-inset-top)}.van-nav-bar .van-icon{color:var(--van-nav-bar-icon-color)}.van-nav-bar__content{position:relative;display:flex;align-items:center;height:var(--van-nav-bar-height)}.van-nav-bar__arrow{margin-right:var(--van-padding-base);font-size:var(--van-nav-bar-arrow-size)}.van-nav-bar__title{max-width:60%;margin:0 auto;color:var(--van-nav-bar-title-text-color);font-weight:var(--van-font-bold);font-size:var(--van-nav-bar-title-font-size)}.van-nav-bar__left,.van-nav-bar__right{position:absolute;top:0;bottom:0;display:flex;align-items:center;padding:0 var(--van-padding-md);font-size:var(--van-font-size-md)}.van-nav-bar__left--disabled,.van-nav-bar__right--disabled{cursor:not-allowed;opacity:var(--van-nav-bar-disabled-opacity)}.van-nav-bar__left{left:0}.van-nav-bar__right{right:0}.van-nav-bar__text{color:var(--van-nav-bar-text-color)}:root,:host{--van-floating-bubble-size: 48px;--van-floating-bubble-initial-gap: 24px;--van-floating-bubble-icon-size: 28px;--van-floating-bubble-background: var(--van-primary-color);--van-floating-bubble-color: var(--van-background-2);--van-floating-bubble-z-index: 999;--van-floating-bubble-border-radius: var(--van-radius-max)}.van-floating-bubble{position:fixed;left:0;top:0;right:var(--van-floating-bubble-initial-gap);bottom:var(--van-floating-bubble-initial-gap);width:var(--van-floating-bubble-size);height:var(--van-floating-bubble-size);box-sizing:border-box;display:flex;justify-content:center;align-items:center;overflow:hidden;cursor:pointer;-webkit-user-select:none;user-select:none;touch-action:none;background:var(--van-floating-bubble-background);color:var(--van-floating-bubble-color);border-radius:var(--van-floating-bubble-border-radius);z-index:var(--van-floating-bubble-z-index);transition:transform var(--van-duration-base)}.van-floating-bubble:active{opacity:.8}.van-floating-bubble__icon{font-size:var(--van-floating-bubble-icon-size)}:root,:host{--van-image-placeholder-text-color: var(--van-text-color-2);--van-image-placeholder-font-size: var(--van-font-size-md);--van-image-placeholder-background: var(--van-background);--van-image-loading-icon-size: 32px;--van-image-loading-icon-color: var(--van-gray-4);--van-image-error-icon-size: 32px;--van-image-error-icon-color: var(--van-gray-4)}.van-image{position:relative;display:inline-block}.van-image--round{overflow:hidden;border-radius:var(--van-radius-max)}.van-image--round .van-image__img{border-radius:inherit}.van-image--block{display:block}.van-image__img,.van-image__error,.van-image__loading{display:block;width:100%;height:100%}.van-image__error,.van-image__loading{position:absolute;top:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--van-image-placeholder-text-color);font-size:var(--van-image-placeholder-font-size);background:var(--van-image-placeholder-background)}.van-image__loading-icon{color:var(--van-image-loading-icon-color);font-size:var(--van-image-loading-icon-size)}.van-image__error-icon{color:var(--van-image-error-icon-color);font-size:var(--van-image-error-icon-size)}:root,:host{--van-back-top-size: 40px;--van-back-top-right: 30px;--van-back-top-bottom: 40px;--van-back-top-z-index: 100;--van-back-top-icon-size: 20px;--van-back-top-text-color: #fff;--van-back-top-background: var(--van-blue)}.van-back-top{position:fixed;display:flex;align-items:center;justify-content:center;width:var(--van-back-top-size);height:var(--van-back-top-size);right:var(--van-back-top-right);bottom:var(--van-back-top-bottom);z-index:var(--van-back-top-z-index);cursor:pointer;color:var(--van-back-top-text-color);border-radius:var(--van-radius-max);box-shadow:0 2px 8px rgba(0,0,0,.12);transform:scale(0);transition:var(--van-duration-base) cubic-bezier(.25,.8,.5,1);background-color:var(--van-back-top-background)}.van-back-top:active{opacity:var(--van-active-opacity)}.van-back-top__placeholder{display:none}.van-back-top--active{transform:scale(1)}.van-back-top__icon{font-size:var(--van-back-top-icon-size);font-weight:var(--van-font-bold)}:root,:host{--van-tag-padding: 0 var(--van-padding-base);--van-tag-text-color: var(--van-white);--van-tag-font-size: var(--van-font-size-sm);--van-tag-radius: 2px;--van-tag-line-height: 16px;--van-tag-medium-padding: 2px 6px;--van-tag-large-padding: var(--van-padding-base) var(--van-padding-xs);--van-tag-large-radius: var(--van-radius-md);--van-tag-large-font-size: var(--van-font-size-md);--van-tag-round-radius: var(--van-radius-max);--van-tag-danger-color: var(--van-danger-color);--van-tag-primary-color: var(--van-primary-color);--van-tag-success-color: var(--van-success-color);--van-tag-warning-color: var(--van-warning-color);--van-tag-default-color: var(--van-gray-6);--van-tag-plain-background: var(--van-background-2)}.van-tag{position:relative;display:inline-flex;align-items:center;padding:var(--van-tag-padding);color:var(--van-tag-text-color);font-size:var(--van-tag-font-size);line-height:var(--van-tag-line-height);border-radius:var(--van-tag-radius)}.van-tag--default{background:var(--van-tag-default-color)}.van-tag--default.van-tag--plain{color:var(--van-tag-default-color)}.van-tag--danger{background:var(--van-tag-danger-color)}.van-tag--danger.van-tag--plain{color:var(--van-tag-danger-color)}.van-tag--primary{background:var(--van-tag-primary-color)}.van-tag--primary.van-tag--plain{color:var(--van-tag-primary-color)}.van-tag--success{background:var(--van-tag-success-color)}.van-tag--success.van-tag--plain{color:var(--van-tag-success-color)}.van-tag--warning{background:var(--van-tag-warning-color)}.van-tag--warning.van-tag--plain{color:var(--van-tag-warning-color)}.van-tag--plain{background:var(--van-tag-plain-background);border-color:currentColor}.van-tag--plain:before{position:absolute;top:0;right:0;bottom:0;left:0;border:1px solid;border-color:inherit;border-radius:inherit;content:"";pointer-events:none}.van-tag--medium{padding:var(--van-tag-medium-padding)}.van-tag--large{padding:var(--van-tag-large-padding);font-size:var(--van-tag-large-font-size);border-radius:var(--van-tag-large-radius)}.van-tag--mark{border-radius:0 var(--van-tag-round-radius) var(--van-tag-round-radius) 0}.van-tag--mark:after{display:block;width:2px;content:""}.van-tag--round{border-radius:var(--van-tag-round-radius)}.van-tag__close{margin-left:2px}:root,:host{--van-card-padding: var(--van-padding-xs) var(--van-padding-md);--van-card-font-size: var(--van-font-size-sm);--van-card-text-color: var(--van-text-color);--van-card-background: var(--van-background);--van-card-thumb-size: 88px;--van-card-thumb-radius: var(--van-radius-lg);--van-card-title-line-height: 16px;--van-card-desc-color: var(--van-text-color-2);--van-card-desc-line-height: var(--van-line-height-md);--van-card-price-color: var(--van-text-color);--van-card-origin-price-color: var(--van-text-color-2);--van-card-num-color: var(--van-text-color-2);--van-card-origin-price-font-size: var(--van-font-size-xs);--van-card-price-font-size: var(--van-font-size-sm);--van-card-price-integer-font-size: var(--van-font-size-lg);--van-card-price-font: var(--van-price-font)}.van-card{position:relative;box-sizing:border-box;padding:var(--van-card-padding);color:var(--van-card-text-color);font-size:var(--van-card-font-size);background:var(--van-card-background)}.van-card:not(:first-child){margin-top:var(--van-padding-xs)}.van-card__header{display:flex}.van-card__thumb{position:relative;flex:none;width:var(--van-card-thumb-size);height:var(--van-card-thumb-size);margin-right:var(--van-padding-xs)}.van-card__thumb img{border-radius:var(--van-card-thumb-radius)}.van-card__content{position:relative;display:flex;flex:1;flex-direction:column;justify-content:space-between;min-width:0;min-height:var(--van-card-thumb-size)}.van-card__content--centered{justify-content:center}.van-card__title,.van-card__desc{word-wrap:break-word}.van-card__title{max-height:32px;font-weight:var(--van-font-bold);line-height:var(--van-card-title-line-height)}.van-card__desc{max-height:var(--van-card-desc-line-height);color:var(--van-card-desc-color);line-height:var(--van-card-desc-line-height)}.van-card__bottom{line-height:var(--van-line-height-md)}.van-card__price{display:inline-block;color:var(--van-card-price-color);font-weight:var(--van-font-bold);font-size:var(--van-card-price-font-size)}.van-card__price-integer{font-size:var(--van-card-price-integer-font-size);font-family:var(--van-card-price-font)}.van-card__price-decimal{font-family:var(--van-card-price-font)}.van-card__origin-price{display:inline-block;margin-left:5px;color:var(--van-card-origin-price-color);font-size:var(--van-card-origin-price-font-size);text-decoration:line-through}.van-card__num{float:right;color:var(--van-card-num-color)}.van-card__tag{position:absolute;top:2px;left:0}.van-card__footer{flex:none;text-align:right}.van-card__footer .van-button{margin-left:5px}:root,:host{--van-cell-font-size: var(--van-font-size-md);--van-cell-line-height: 24px;--van-cell-vertical-padding: 10px;--van-cell-horizontal-padding: var(--van-padding-md);--van-cell-text-color: var(--van-text-color);--van-cell-background: var(--van-background-2);--van-cell-border-color: var(--van-border-color);--van-cell-active-color: var(--van-active-color);--van-cell-required-color: var(--van-danger-color);--van-cell-label-color: var(--van-text-color-2);--van-cell-label-font-size: var(--van-font-size-sm);--van-cell-label-line-height: var(--van-line-height-sm);--van-cell-label-margin-top: var(--van-padding-base);--van-cell-value-color: var(--van-text-color-2);--van-cell-value-font-size: inherit;--van-cell-icon-size: 16px;--van-cell-right-icon-color: var(--van-gray-6);--van-cell-large-vertical-padding: var(--van-padding-sm);--van-cell-large-title-font-size: var(--van-font-size-lg);--van-cell-large-label-font-size: var(--van-font-size-md);--van-cell-large-value-font-size: inherit}.van-cell{position:relative;display:flex;box-sizing:border-box;width:100%;padding:var(--van-cell-vertical-padding) var(--van-cell-horizontal-padding);overflow:hidden;color:var(--van-cell-text-color);font-size:var(--van-cell-font-size);line-height:var(--van-cell-line-height);background:var(--van-cell-background)}.van-cell:after{position:absolute;box-sizing:border-box;content:" ";pointer-events:none;right:var(--van-padding-md);bottom:0;left:var(--van-padding-md);border-bottom:1px solid var(--van-cell-border-color);transform:scaleY(.5)}.van-cell:last-child:after,.van-cell--borderless:after{display:none}.van-cell__label{margin-top:var(--van-cell-label-margin-top);color:var(--van-cell-label-color);font-size:var(--van-cell-label-font-size);line-height:var(--van-cell-label-line-height)}.van-cell__title,.van-cell__value{flex:1}.van-cell__value{position:relative;overflow:hidden;color:var(--van-cell-value-color);font-size:var(--van-cell-value-font-size);text-align:right;vertical-align:middle;word-wrap:break-word}.van-cell__left-icon,.van-cell__right-icon{height:var(--van-cell-line-height);font-size:var(--van-cell-icon-size);line-height:var(--van-cell-line-height)}.van-cell__left-icon{margin-right:var(--van-padding-base)}.van-cell__right-icon{margin-left:var(--van-padding-base);color:var(--van-cell-right-icon-color)}.van-cell--clickable{cursor:pointer}.van-cell--clickable:active{background-color:var(--van-cell-active-color)}.van-cell--required{overflow:visible}.van-cell--required:before{position:absolute;left:var(--van-padding-xs);color:var(--van-cell-required-color);font-size:var(--van-cell-font-size);content:"*"}.van-cell--center{align-items:center}.van-cell--large{padding-top:var(--van-cell-large-vertical-padding);padding-bottom:var(--van-cell-large-vertical-padding)}.van-cell--large .van-cell__title{font-size:var(--van-cell-large-title-font-size)}.van-cell--large .van-cell__label{font-size:var(--van-cell-large-label-font-size)}.van-cell--large .van-cell__value{font-size:var(--van-cell-large-value-font-size)}:root,:host{--van-coupon-cell-selected-text-color: var(--van-text-color)}.van-coupon-cell__value--selected{color:var(--van-coupon-cell-selected-text-color)}:root,:host{--van-contact-card-padding: var(--van-padding-md);--van-contact-card-add-icon-size: 40px;--van-contact-card-add-icon-color: var(--van-primary-color);--van-contact-card-title-line-height: var(--van-line-height-md)}.van-contact-card{padding:var(--van-contact-card-padding)}.van-contact-card__title{margin-left:5px;line-height:var(--van-contact-card-title-line-height)}.van-contact-card--add .van-contact-card__value{line-height:var(--van-contact-card-add-icon-size)}.van-contact-card--add .van-cell__left-icon{color:var(--van-contact-card-add-icon-color);font-size:var(--van-contact-card-add-icon-size)}.van-contact-card:before{position:absolute;right:0;bottom:0;left:0;height:2px;background:repeating-linear-gradient(-45deg,var(--van-warning-color) 0,var(--van-warning-color) 20%,transparent 0,transparent 25%,var(--van-primary-color) 0,var(--van-primary-color) 45%,transparent 0,transparent 50%);background-size:80px;content:""}:root,:host{--van-collapse-item-duration: var(--van-duration-base);--van-collapse-item-content-padding: var(--van-padding-sm) var(--van-padding-md);--van-collapse-item-content-font-size: var(--van-font-size-md);--van-collapse-item-content-line-height: 1.5;--van-collapse-item-content-text-color: var(--van-text-color-2);--van-collapse-item-content-background: var(--van-background-2);--van-collapse-item-title-disabled-color: var(--van-text-color-3)}.van-collapse-item{position:relative}.van-collapse-item--border:after{position:absolute;box-sizing:border-box;content:" ";pointer-events:none;top:0;right:var(--van-padding-md);left:var(--van-padding-md);border-top:1px solid var(--van-border-color);transform:scaleY(.5)}.van-collapse-item__title .van-cell__right-icon:before{transform:rotate(90deg) translateZ(0);transition:transform var(--van-collapse-item-duration)}.van-collapse-item__title:after{right:var(--van-padding-md);display:none}.van-collapse-item__title--expanded .van-cell__right-icon:before{transform:rotate(-90deg)}.van-collapse-item__title--expanded:after{display:block}.van-collapse-item__title--borderless:after{display:none}.van-collapse-item__title--disabled{cursor:not-allowed}.van-collapse-item__title--disabled,.van-collapse-item__title--disabled .van-cell__right-icon{color:var(--van-collapse-item-title-disabled-color)}.van-collapse-item__wrapper{overflow:hidden;transition:height var(--van-collapse-item-duration) ease-in-out;will-change:height}.van-collapse-item__content{padding:var(--van-collapse-item-content-padding);color:var(--van-collapse-item-content-text-color);font-size:var(--van-collapse-item-content-font-size);line-height:var(--van-collapse-item-content-line-height);background:var(--van-collapse-item-content-background)}:root,:host{--van-field-label-width: 6.2em;--van-field-label-color: var(--van-text-color);--van-field-label-margin-right: var(--van-padding-sm);--van-field-input-text-color: var(--van-text-color);--van-field-input-error-text-color: var(--van-danger-color);--van-field-input-disabled-text-color: var(--van-text-color-3);--van-field-placeholder-text-color: var(--van-text-color-3);--van-field-icon-size: 18px;--van-field-clear-icon-size: 18px;--van-field-clear-icon-color: var(--van-gray-5);--van-field-right-icon-color: var(--van-gray-6);--van-field-error-message-color: var(--van-danger-color);--van-field-error-message-font-size: 12px;--van-field-text-area-min-height: 60px;--van-field-word-limit-color: var(--van-gray-7);--van-field-word-limit-font-size: var(--van-font-size-sm);--van-field-word-limit-line-height: 16px;--van-field-disabled-text-color: var(--van-text-color-3);--van-field-required-mark-color: var(--van-red)}.van-field{flex-wrap:wrap}.van-field__label{flex:none;box-sizing:border-box;width:var(--van-field-label-width);margin-right:var(--van-field-label-margin-right);color:var(--van-field-label-color);text-align:left;word-wrap:break-word}.van-field__label--center{text-align:center}.van-field__label--right{text-align:right}.van-field__label--top{display:flex;width:100%;text-align:left;margin-bottom:var(--van-padding-base);overflow-wrap:break-word}.van-field__label--required:before{margin-right:2px;color:var(--van-field-required-mark-color);content:"*"}.van-field--disabled .van-field__label{color:var(--van-field-disabled-text-color)}.van-field__value{overflow:visible}.van-field__body{display:flex;align-items:center}.van-field__control{display:block;box-sizing:border-box;width:100%;min-width:0;margin:0;padding:0;color:var(--van-field-input-text-color);line-height:inherit;text-align:left;background-color:transparent;border:0;resize:none;-webkit-user-select:auto;user-select:auto}.van-field__control::-webkit-input-placeholder{color:var(--van-field-placeholder-text-color)}.van-field__control::placeholder{color:var(--van-field-placeholder-text-color)}.van-field__control:read-only{cursor:default}.van-field__control:disabled{color:var(--van-field-input-disabled-text-color);cursor:not-allowed;opacity:1;-webkit-text-fill-color:var(--van-field-input-disabled-text-color)}.van-field__control--center{justify-content:center;text-align:center}.van-field__control--right{justify-content:flex-end;text-align:right}.van-field__control--custom{display:flex;align-items:center;min-height:var(--van-cell-line-height)}.van-field__control--error::-webkit-input-placeholder{color:var(--van-field-input-error-text-color);-webkit-text-fill-color:currentColor}.van-field__control--error,.van-field__control--error::placeholder{color:var(--van-field-input-error-text-color);-webkit-text-fill-color:currentColor}.van-field__control--min-height{min-height:var(--van-field-text-area-min-height)}.van-field__control[type=date],.van-field__control[type=time],.van-field__control[type=datetime-local]{min-height:var(--van-cell-line-height)}.van-field__control[type=search]{-webkit-appearance:none}.van-field__clear,.van-field__icon,.van-field__button,.van-field__right-icon{flex-shrink:0}.van-field__clear,.van-field__right-icon{margin-right:calc(var(--van-padding-xs) * -1);padding:0 var(--van-padding-xs);line-height:inherit}.van-field__clear{color:var(--van-field-clear-icon-color);font-size:var(--van-field-clear-icon-size);cursor:pointer}.van-field__left-icon .van-icon,.van-field__right-icon .van-icon{display:block;font-size:var(--van-field-icon-size);line-height:inherit}.van-field__left-icon{margin-right:var(--van-padding-base)}.van-field__right-icon{color:var(--van-field-right-icon-color)}.van-field__button{padding-left:var(--van-padding-xs)}.van-field__error-message{color:var(--van-field-error-message-color);font-size:var(--van-field-error-message-font-size);text-align:left}.van-field__error-message--center{text-align:center}.van-field__error-message--right{text-align:right}.van-field__word-limit{margin-top:var(--van-padding-base);color:var(--van-field-word-limit-color);font-size:var(--van-field-word-limit-font-size);line-height:var(--van-field-word-limit-line-height);text-align:right}:root,:host{--van-search-padding: 10px var(--van-padding-sm);--van-search-background: var(--van-background-2);--van-search-content-background: var(--van-background);--van-search-input-height: 34px;--van-search-label-padding: 0 5px;--van-search-label-color: var(--van-text-color);--van-search-label-font-size: var(--van-font-size-md);--van-search-left-icon-color: var(--van-gray-6);--van-search-action-padding: 0 var(--van-padding-xs);--van-search-action-text-color: var(--van-text-color);--van-search-action-font-size: var(--van-font-size-md)}.van-search{display:flex;align-items:center;box-sizing:border-box;padding:var(--van-search-padding);background:var(--van-search-background)}.van-search__content{display:flex;flex:1;padding-left:var(--van-padding-sm);background:var(--van-search-content-background);border-radius:var(--van-radius-sm)}.van-search__content--round{border-radius:var(--van-radius-max)}.van-search__label{padding:var(--van-search-label-padding);color:var(--van-search-label-color);font-size:var(--van-search-label-font-size);line-height:var(--van-search-input-height)}.van-search__field{flex:1;align-items:center;padding:0 var(--van-padding-xs) 0 0;height:var(--van-search-input-height);background-color:transparent}.van-search__field .van-field__left-icon{color:var(--van-search-left-icon-color)}.van-search__field--with-message{height:auto;align-items:flex-start;padding-top:5px;padding-bottom:5px}.van-search--show-action{padding-right:0}.van-search input::-webkit-search-decoration,.van-search input::-webkit-search-cancel-button,.van-search input::-webkit-search-results-button,.van-search input::-webkit-search-results-decoration{display:none}.van-search__action{padding:var(--van-search-action-padding);color:var(--van-search-action-text-color);font-size:var(--van-search-action-font-size);line-height:var(--van-search-input-height);cursor:pointer;-webkit-user-select:none;user-select:none}.van-search__action:active{background-color:var(--van-active-color)}:root,:host{--van-action-bar-icon-width: 48px;--van-action-bar-icon-height: 100%;--van-action-bar-icon-color: var(--van-text-color);--van-action-bar-icon-size: 18px;--van-action-bar-icon-font-size: var(--van-font-size-xs);--van-action-bar-icon-active-color: var(--van-active-color);--van-action-bar-icon-text-color: var(--van-text-color);--van-action-bar-icon-background: var(--van-background-2)}.van-action-bar-icon{display:flex;flex-direction:column;justify-content:center;min-width:var(--van-action-bar-icon-width);height:var(--van-action-bar-icon-height);color:var(--van-action-bar-icon-text-color);font-size:var(--van-action-bar-icon-font-size);line-height:1;text-align:center;background:var(--van-action-bar-icon-background);cursor:pointer}.van-action-bar-icon:active{background-color:var(--van-action-bar-icon-active-color)}.van-action-bar-icon__icon{margin:0 auto var(--van-padding-base);color:var(--van-action-bar-icon-color);font-size:var(--van-action-bar-icon-size)}:root,:host{--van-loading-text-color: var(--van-text-color-2);--van-loading-text-font-size: var(--van-font-size-md);--van-loading-spinner-color: var(--van-gray-5);--van-loading-spinner-size: 30px;--van-loading-spinner-duration: .8s}.van-loading{position:relative;color:var(--van-loading-spinner-color);font-size:0;vertical-align:middle}.van-loading__spinner{position:relative;display:inline-block;width:var(--van-loading-spinner-size);max-width:100%;height:var(--van-loading-spinner-size);max-height:100%;vertical-align:middle;animation:van-rotate var(--van-loading-spinner-duration) linear infinite}.van-loading__spinner--spinner{animation-timing-function:steps(12)}.van-loading__spinner--circular{animation-duration:2s}.van-loading__line{position:absolute;top:0;left:0;width:100%;height:100%}.van-loading__line:before{display:block;width:2px;height:25%;margin:0 auto;background-color:currentColor;border-radius:40%;content:" "}.van-loading__circular{display:block;width:100%;height:100%}.van-loading__circular circle{animation:van-circular 1.5s ease-in-out infinite;stroke:currentColor;stroke-width:3;stroke-linecap:round}.van-loading__text{display:inline-block;margin-left:var(--van-padding-xs);color:var(--van-loading-text-color);font-size:var(--van-loading-text-font-size);vertical-align:middle}.van-loading--vertical{display:flex;flex-direction:column;align-items:center}.van-loading--vertical .van-loading__text{margin:var(--van-padding-xs) 0 0}@keyframes van-circular{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40}to{stroke-dasharray:90,150;stroke-dashoffset:-120}}.van-loading__line--1{transform:rotate(30deg);opacity:1}.van-loading__line--2{transform:rotate(60deg);opacity:.9375}.van-loading__line--3{transform:rotate(90deg);opacity:.875}.van-loading__line--4{transform:rotate(120deg);opacity:.8125}.van-loading__line--5{transform:rotate(150deg);opacity:.75}.van-loading__line--6{transform:rotate(180deg);opacity:.6875}.van-loading__line--7{transform:rotate(210deg);opacity:.625}.van-loading__line--8{transform:rotate(240deg);opacity:.5625}.van-loading__line--9{transform:rotate(270deg);opacity:.5}.van-loading__line--10{transform:rotate(300deg);opacity:.4375}.van-loading__line--11{transform:rotate(330deg);opacity:.375}.van-loading__line--12{transform:rotate(360deg);opacity:.3125}:root,:host{--van-pull-refresh-head-height: 50px;--van-pull-refresh-head-font-size: var(--van-font-size-md);--van-pull-refresh-head-text-color: var(--van-text-color-2);--van-pull-refresh-loading-icon-size: 16px}.van-pull-refresh{overflow:hidden}.van-pull-refresh__track{position:relative;height:100%;transition-property:transform}.van-pull-refresh__head{position:absolute;left:0;width:100%;height:var(--van-pull-refresh-head-height);overflow:hidden;color:var(--van-pull-refresh-head-text-color);font-size:var(--van-pull-refresh-head-font-size);line-height:var(--van-pull-refresh-head-height);text-align:center;transform:translateY(-100%)}.van-pull-refresh__loading .van-loading__spinner{width:var(--van-pull-refresh-loading-icon-size);height:var(--van-pull-refresh-loading-icon-size)}:root,:host{--van-number-keyboard-background: var(--van-gray-2);--van-number-keyboard-key-height: 48px;--van-number-keyboard-key-font-size: 28px;--van-number-keyboard-key-active-color: var(--van-gray-3);--van-number-keyboard-key-background: var(--van-background-2);--van-number-keyboard-delete-font-size: var(--van-font-size-lg);--van-number-keyboard-title-color: var(--van-gray-7);--van-number-keyboard-title-height: 34px;--van-number-keyboard-title-font-size: var(--van-font-size-lg);--van-number-keyboard-close-padding: 0 var(--van-padding-md);--van-number-keyboard-close-color: var(--van-primary-color);--van-number-keyboard-close-font-size: var(--van-font-size-md);--van-number-keyboard-button-text-color: var(--van-white);--van-number-keyboard-button-background: var(--van-primary-color);--van-number-keyboard-z-index: 100}.van-theme-dark{--van-number-keyboard-background: var(--van-gray-8);--van-number-keyboard-key-background: var(--van-gray-7);--van-number-keyboard-key-active-color: var(--van-gray-6)}.van-number-keyboard{position:fixed;bottom:0;left:0;z-index:var(--van-number-keyboard-z-index);width:100%;padding-bottom:22px;background:var(--van-number-keyboard-background);-webkit-user-select:none;user-select:none}.van-number-keyboard--with-title{border-radius:20px 20px 0 0}.van-number-keyboard__header{position:relative;display:flex;align-items:center;justify-content:center;box-sizing:content-box;height:var(--van-number-keyboard-title-height);padding-top:6px;color:var(--van-number-keyboard-title-color);font-size:var(--van-number-keyboard-title-font-size)}.van-number-keyboard__title{display:inline-block;font-weight:400}.van-number-keyboard__title-left{position:absolute;left:0}.van-number-keyboard__body{display:flex;padding:6px 0 0 6px}.van-number-keyboard__keys{display:flex;flex:3;flex-wrap:wrap}.van-number-keyboard__close{position:absolute;right:0;height:100%;padding:var(--van-number-keyboard-close-padding);color:var(--van-number-keyboard-close-color);font-size:var(--van-number-keyboard-close-font-size);background-color:transparent;border:none}.van-number-keyboard__sidebar{display:flex;flex:1;flex-direction:column}.van-number-keyboard--unfit{padding-bottom:0}.van-key{display:flex;align-items:center;justify-content:center;height:var(--van-number-keyboard-key-height);font-size:var(--van-number-keyboard-key-font-size);line-height:1.5;background:var(--van-number-keyboard-key-background);border-radius:var(--van-radius-lg);cursor:pointer}.van-key--large{position:absolute;top:0;right:6px;bottom:6px;left:0;height:auto}.van-key--blue,.van-key--delete{font-size:var(--van-number-keyboard-delete-font-size)}.van-key--active{background-color:var(--van-number-keyboard-key-active-color)}.van-key--blue{color:var(--van-number-keyboard-button-text-color);background:var(--van-number-keyboard-button-background)}.van-key--blue.van-key--active{opacity:var(--van-active-opacity)}.van-key__wrapper{position:relative;flex:1;flex-basis:33%;box-sizing:border-box;padding:0 6px 6px 0}.van-key__wrapper--wider{flex-basis:66%}.van-key__delete-icon{width:32px;height:22px}.van-key__collapse-icon{width:30px;height:24px}.van-key__loading-icon{color:var(--van-number-keyboard-button-text-color)}:root,:host{--van-list-text-color: var(--van-text-color-2);--van-list-text-font-size: var(--van-font-size-md);--van-list-text-line-height: 50px;--van-list-loading-icon-size: 16px}.van-list__loading,.van-list__finished-text,.van-list__error-text{color:var(--van-list-text-color);font-size:var(--van-list-text-font-size);line-height:var(--van-list-text-line-height);text-align:center}.van-list__placeholder{height:0;pointer-events:none}.van-list__loading-icon .van-loading__spinner{width:var(--van-list-loading-icon-size);height:var(--van-list-loading-icon-size)}:root,:host{--van-switch-size: 26px;--van-switch-width: calc(1.8em + 4px) ;--van-switch-height: calc(1em + 4px) ;--van-switch-node-size: 1em;--van-switch-node-background: var(--van-white);--van-switch-node-shadow: 0 3px 1px 0 rgba(0, 0, 0, .05);--van-switch-background: rgba(120, 120, 128, .16);--van-switch-on-background: var(--van-primary-color);--van-switch-duration: var(--van-duration-base);--van-switch-disabled-opacity: var(--van-disabled-opacity)}.van-theme-dark{--van-switch-background: rgba(120, 120, 128, .32)}.van-switch{position:relative;display:inline-block;box-sizing:content-box;width:var(--van-switch-width);height:var(--van-switch-height);font-size:var(--van-switch-size);background:var(--van-switch-background);border-radius:var(--van-switch-node-size);cursor:pointer;transition:background-color var(--van-switch-duration)}.van-switch__node{position:absolute;top:2px;left:2px;width:var(--van-switch-node-size);height:var(--van-switch-node-size);font-size:inherit;background:var(--van-switch-node-background);border-radius:100%;box-shadow:var(--van-switch-node-shadow);transition:transform var(--van-switch-duration) cubic-bezier(.3,1.05,.4,1.05)}.van-switch__loading{top:25%;left:25%;width:50%;height:50%;line-height:1}.van-switch--on{background:var(--van-switch-on-background)}.van-switch--on .van-switch__node{transform:translate(calc(var(--van-switch-width) - var(--van-switch-node-size) - 4px))}.van-switch--on .van-switch__loading{color:var(--van-switch-on-background)}.van-switch--disabled{cursor:not-allowed;opacity:var(--van-switch-disabled-opacity)}.van-switch--loading{cursor:default}:root,:host{--van-button-mini-height: 24px;--van-button-mini-padding: 0 var(--van-padding-base);--van-button-mini-font-size: var(--van-font-size-xs);--van-button-small-height: 32px;--van-button-small-padding: 0 var(--van-padding-xs);--van-button-small-font-size: var(--van-font-size-sm);--van-button-normal-padding: 0 15px;--van-button-normal-font-size: var(--van-font-size-md);--van-button-large-height: 50px;--van-button-default-height: 44px;--van-button-default-line-height: 1.2;--van-button-default-font-size: var(--van-font-size-lg);--van-button-default-color: var(--van-text-color);--van-button-default-background: var(--van-background-2);--van-button-default-border-color: var(--van-gray-4);--van-button-primary-color: var(--van-white);--van-button-primary-background: var(--van-primary-color);--van-button-primary-border-color: var(--van-primary-color);--van-button-success-color: var(--van-white);--van-button-success-background: var(--van-success-color);--van-button-success-border-color: var(--van-success-color);--van-button-danger-color: var(--van-white);--van-button-danger-background: var(--van-danger-color);--van-button-danger-border-color: var(--van-danger-color);--van-button-warning-color: var(--van-white);--van-button-warning-background: var(--van-warning-color);--van-button-warning-border-color: var(--van-warning-color);--van-button-border-width: var(--van-border-width);--van-button-radius: var(--van-radius-md);--van-button-round-radius: var(--van-radius-max);--van-button-plain-background: var(--van-white);--van-button-disabled-opacity: var(--van-disabled-opacity);--van-button-icon-size: 1.2em;--van-button-loading-icon-size: 20px}.van-theme-dark{--van-button-plain-background: transparent}.van-button{position:relative;display:inline-block;box-sizing:border-box;height:var(--van-button-default-height);margin:0;padding:0;font-size:var(--van-button-default-font-size);line-height:var(--van-button-default-line-height);text-align:center;border-radius:var(--van-button-radius);cursor:pointer;transition:opacity var(--van-duration-fast);-webkit-appearance:none;-webkit-font-smoothing:auto}.van-button:before{position:absolute;top:50%;left:50%;width:100%;height:100%;background:var(--van-black);border:inherit;border-color:var(--van-black);border-radius:inherit;transform:translate(-50%,-50%);opacity:0;content:" "}.van-button:active:before{opacity:.1}.van-button--loading:before,.van-button--disabled:before{display:none}.van-button--default{color:var(--van-button-default-color);background:var(--van-button-default-background);border:var(--van-button-border-width) solid var(--van-button-default-border-color)}.van-button--primary{color:var(--van-button-primary-color);background:var(--van-button-primary-background);border:var(--van-button-border-width) solid var(--van-button-primary-border-color)}.van-button--success{color:var(--van-button-success-color);background:var(--van-button-success-background);border:var(--van-button-border-width) solid var(--van-button-success-border-color)}.van-button--danger{color:var(--van-button-danger-color);background:var(--van-button-danger-background);border:var(--van-button-border-width) solid var(--van-button-danger-border-color)}.van-button--warning{color:var(--van-button-warning-color);background:var(--van-button-warning-background);border:var(--van-button-border-width) solid var(--van-button-warning-border-color)}.van-button--plain{background:var(--van-button-plain-background)}.van-button--plain.van-button--primary{color:var(--van-button-primary-background)}.van-button--plain.van-button--success{color:var(--van-button-success-background)}.van-button--plain.van-button--danger{color:var(--van-button-danger-background)}.van-button--plain.van-button--warning{color:var(--van-button-warning-background)}.van-button--large{width:100%;height:var(--van-button-large-height)}.van-button--normal{padding:var(--van-button-normal-padding);font-size:var(--van-button-normal-font-size)}.van-button--small{height:var(--van-button-small-height);padding:var(--van-button-small-padding);font-size:var(--van-button-small-font-size)}.van-button__loading{color:inherit;font-size:inherit}.van-button__loading .van-loading__spinner{color:currentColor;width:var(--van-button-loading-icon-size);height:var(--van-button-loading-icon-size)}.van-button--mini{height:var(--van-button-mini-height);padding:var(--van-button-mini-padding);font-size:var(--van-button-mini-font-size)}.van-button--mini+.van-button--mini{margin-left:var(--van-padding-base)}.van-button--block{display:block;width:100%}.van-button--disabled{cursor:not-allowed;opacity:var(--van-button-disabled-opacity)}.van-button--loading{cursor:default}.van-button--round{border-radius:var(--van-button-round-radius)}.van-button--square{border-radius:0}.van-button__content{display:flex;align-items:center;justify-content:center;height:100%}.van-button__content:before{content:" "}.van-button__icon{font-size:var(--van-button-icon-size);line-height:inherit}.van-button__icon+.van-button__text,.van-button__loading+.van-button__text,.van-button__text+.van-button__icon,.van-button__text+.van-button__loading{margin-left:var(--van-padding-base)}.van-button--hairline{border-width:0}.van-button--hairline:after{border-color:inherit;border-radius:calc(var(--van-button-radius) * 2)}.van-button--hairline.van-button--round:after{border-radius:var(--van-button-round-radius)}.van-button--hairline.van-button--square:after{border-radius:0}:root,:host{--van-submit-bar-height: 50px;--van-submit-bar-z-index: 100;--van-submit-bar-background: var(--van-background-2);--van-submit-bar-button-width: 110px;--van-submit-bar-price-color: var(--van-danger-color);--van-submit-bar-price-font-size: var(--van-font-size-sm);--van-submit-bar-price-integer-font-size: 20px;--van-submit-bar-price-font: var(--van-price-font);--van-submit-bar-text-color: var(--van-text-color);--van-submit-bar-text-font-size: var(--van-font-size-md);--van-submit-bar-tip-padding: var(--van-padding-xs) var(--van-padding-sm);--van-submit-bar-tip-font-size: var(--van-font-size-sm);--van-submit-bar-tip-line-height: 1.5;--van-submit-bar-tip-color: var(--van-orange-dark);--van-submit-bar-tip-background: var(--van-orange-light);--van-submit-bar-tip-icon-size: 12px;--van-submit-bar-button-height: 40px;--van-submit-bar-padding: 0 var(--van-padding-md)}.van-submit-bar{position:fixed;bottom:0;left:0;z-index:var(--van-submit-bar-z-index);width:100%;background:var(--van-submit-bar-background);-webkit-user-select:none;user-select:none}.van-submit-bar__tip{padding:var(--van-submit-bar-tip-padding);color:var(--van-submit-bar-tip-color);font-size:var(--van-submit-bar-tip-font-size);line-height:var(--van-submit-bar-tip-line-height);background:var(--van-submit-bar-tip-background)}.van-submit-bar__tip-icon{margin-right:var(--van-padding-base);font-size:var(--van-submit-bar-tip-icon-size);vertical-align:middle}.van-submit-bar__tip-text{vertical-align:middle}.van-submit-bar__bar{display:flex;align-items:center;justify-content:flex-end;height:var(--van-submit-bar-height);padding:var(--van-submit-bar-padding);font-size:var(--van-submit-bar-text-font-size)}.van-submit-bar__text{flex:1;padding-right:var(--van-padding-sm);color:var(--van-submit-bar-text-color);text-align:right}.van-submit-bar__text span{display:inline-block}.van-submit-bar__suffix-label{margin-left:var(--van-padding-base);font-weight:var(--van-font-bold)}.van-submit-bar__price{color:var(--van-submit-bar-price-color);font-weight:var(--van-font-bold);font-size:var(--van-submit-bar-price-font-size);margin-left:var(--van-padding-base)}.van-submit-bar__price-integer{font-size:var(--van-submit-bar-price-integer-font-size);font-family:var(--van-submit-bar-price-font)}.van-submit-bar__button{width:var(--van-submit-bar-button-width);height:var(--van-submit-bar-button-height);font-weight:var(--van-font-bold);border:none}.van-submit-bar__button--danger{background:var(--van-gradient-red)}:root,:host{--van-signature-padding: var(--van-padding-xs);--van-signature-content-height: 200px;--van-signature-content-background: var(--van-background-2);--van-signature-content-border: 1px dotted #dadada}.van-signature{padding:var(--van-signature-padding)}.van-signature__content{display:flex;justify-content:center;align-items:center;height:var(--van-signature-content-height);background-color:var(--van-signature-content-background);border:var(--van-signature-content-border);border-radius:var(--van-radius-lg);overflow:hidden}.van-signature__content canvas{width:100%;height:100%}.van-signature__footer{display:flex;justify-content:flex-end}.van-signature__footer .van-button{padding:0 var(--van-padding-md);margin-top:var(--van-padding-xs);margin-left:var(--van-padding-xs)}:root,:host{--van-contact-edit-padding: var(--van-padding-md);--van-contact-edit-fields-radius: var(--van-radius-md);--van-contact-edit-buttons-padding: var(--van-padding-xl) 0;--van-contact-edit-button-margin-bottom: var(--van-padding-sm);--van-contact-edit-button-font-size: var(--van-font-size-lg);--van-contact-edit-field-label-width: 4.1em}.van-contact-edit{padding:var(--van-contact-edit-padding)}.van-contact-edit__fields{overflow:hidden;border-radius:var(--van-contact-edit-fields-radius)}.van-contact-edit__fields .van-field__label{width:var(--van-contact-edit-field-label-width)}.van-contact-edit__switch-cell{margin-top:10px;padding-top:9px;padding-bottom:9px;border-radius:var(--van-contact-edit-fields-radius)}.van-contact-edit__buttons{padding:var(--van-contact-edit-buttons-padding)}.van-contact-edit__button{margin-bottom:var(--van-contact-edit-button-margin-bottom);font-size:var(--van-contact-edit-button-font-size)}:root,:host{--van-action-bar-button-height: 40px;--van-action-bar-button-warning-color: var(--van-gradient-orange);--van-action-bar-button-danger-color: var(--van-gradient-red)}.van-action-bar-button{flex:1;height:var(--van-action-bar-button-height);font-weight:var(--van-font-bold);font-size:var(--van-font-size-md);border:none;border-radius:0}.van-action-bar-button--first{margin-left:5px;border-top-left-radius:var(--van-radius-max);border-bottom-left-radius:var(--van-radius-max)}.van-action-bar-button--last{margin-right:5px;border-top-right-radius:var(--van-radius-max);border-bottom-right-radius:var(--van-radius-max)}.van-action-bar-button--warning{background:var(--van-action-bar-button-warning-color)}.van-action-bar-button--danger{background:var(--van-action-bar-button-danger-color)}@media (max-width: 321px){.van-action-bar-button{font-size:13px}}:root,:host{--van-overlay-z-index: 1;--van-overlay-background: rgba(0, 0, 0, .7)}.van-overlay{position:fixed;top:0;left:0;z-index:var(--van-overlay-z-index);width:100%;height:100%;background:var(--van-overlay-background)}:root,:host{--van-popup-background: var(--van-background-2);--van-popup-transition: transform var(--van-duration-base);--van-popup-round-radius: 16px;--van-popup-close-icon-size: 22px;--van-popup-close-icon-color: var(--van-gray-5);--van-popup-close-icon-margin: 16px;--van-popup-close-icon-z-index: 1}.van-overflow-hidden{overflow:hidden!important}.van-popup{position:fixed;max-height:100%;overflow-y:auto;box-sizing:border-box;background:var(--van-popup-background);transition:var(--van-popup-transition);-webkit-overflow-scrolling:touch}.van-popup--center{top:50%;left:0;right:0;width:-webkit-fit-content;width:fit-content;max-width:calc(100vw - var(--van-padding-md) * 2);margin:0 auto;transform:translateY(-50%)}.van-popup--center.van-popup--round{border-radius:var(--van-popup-round-radius)}.van-popup--top{top:0;left:0;width:100%}.van-popup--top.van-popup--round{border-radius:0 0 var(--van-popup-round-radius) var(--van-popup-round-radius)}.van-popup--right{top:50%;right:0;transform:translate3d(0,-50%,0)}.van-popup--right.van-popup--round{border-radius:var(--van-popup-round-radius) 0 0 var(--van-popup-round-radius)}.van-popup--bottom{bottom:0;left:0;width:100%}.van-popup--bottom.van-popup--round{border-radius:var(--van-popup-round-radius) var(--van-popup-round-radius) 0 0}.van-popup--left{top:50%;left:0;transform:translate3d(0,-50%,0)}.van-popup--left.van-popup--round{border-radius:0 var(--van-popup-round-radius) var(--van-popup-round-radius) 0}.van-popup-slide-top-enter-active,.van-popup-slide-left-enter-active,.van-popup-slide-right-enter-active,.van-popup-slide-bottom-enter-active{transition-timing-function:var(--van-ease-out)}.van-popup-slide-top-leave-active,.van-popup-slide-left-leave-active,.van-popup-slide-right-leave-active,.van-popup-slide-bottom-leave-active{transition-timing-function:var(--van-ease-in)}.van-popup-slide-top-enter-from,.van-popup-slide-top-leave-active{transform:translate3d(0,-100%,0)}.van-popup-slide-right-enter-from,.van-popup-slide-right-leave-active{transform:translate3d(100%,-50%,0)}.van-popup-slide-bottom-enter-from,.van-popup-slide-bottom-leave-active{transform:translate3d(0,100%,0)}.van-popup-slide-left-enter-from,.van-popup-slide-left-leave-active{transform:translate3d(-100%,-50%,0)}.van-popup__close-icon{position:absolute;z-index:var(--van-popup-close-icon-z-index);color:var(--van-popup-close-icon-color);font-size:var(--van-popup-close-icon-size)}.van-popup__close-icon--top-left{top:var(--van-popup-close-icon-margin);left:var(--van-popup-close-icon-margin)}.van-popup__close-icon--top-right{top:var(--van-popup-close-icon-margin);right:var(--van-popup-close-icon-margin)}.van-popup__close-icon--bottom-left{bottom:var(--van-popup-close-icon-margin);left:var(--van-popup-close-icon-margin)}.van-popup__close-icon--bottom-right{right:var(--van-popup-close-icon-margin);bottom:var(--van-popup-close-icon-margin)}:root,:host{--van-share-sheet-header-padding: var(--van-padding-sm) var(--van-padding-md);--van-share-sheet-title-color: var(--van-text-color);--van-share-sheet-title-font-size: var(--van-font-size-md);--van-share-sheet-title-line-height: var(--van-line-height-md);--van-share-sheet-description-color: var(--van-text-color-2);--van-share-sheet-description-font-size: var(--van-font-size-sm);--van-share-sheet-description-line-height: 16px;--van-share-sheet-icon-size: 48px;--van-share-sheet-option-name-color: var(--van-gray-7);--van-share-sheet-option-name-font-size: var(--van-font-size-sm);--van-share-sheet-option-description-color: var(--van-text-color-3);--van-share-sheet-option-description-font-size: var(--van-font-size-sm);--van-share-sheet-cancel-button-font-size: var(--van-font-size-lg);--van-share-sheet-cancel-button-height: 48px;--van-share-sheet-cancel-button-background: var(--van-background-2)}.van-share-sheet__header{padding:var(--van-share-sheet-header-padding);text-align:center}.van-share-sheet__title{margin-top:var(--van-padding-xs);color:var(--van-share-sheet-title-color);font-weight:400;font-size:var(--van-share-sheet-title-font-size);line-height:var(--van-share-sheet-title-line-height)}.van-share-sheet__description{display:block;margin-top:var(--van-padding-xs);color:var(--van-share-sheet-description-color);font-size:var(--van-share-sheet-description-font-size);line-height:var(--van-share-sheet-description-line-height)}.van-share-sheet__options{position:relative;display:flex;padding:var(--van-padding-md) 0 var(--van-padding-md) var(--van-padding-xs);overflow-x:auto;overflow-y:visible;-webkit-overflow-scrolling:touch}.van-share-sheet__options--border:before{position:absolute;box-sizing:border-box;content:" ";pointer-events:none;top:0;right:0;left:var(--van-padding-md);border-top:1px solid var(--van-border-color);transform:scaleY(.5)}.van-share-sheet__options::-webkit-scrollbar{height:0}.van-share-sheet__option{display:flex;flex-direction:column;align-items:center;-webkit-user-select:none;user-select:none}.van-share-sheet__icon,.van-share-sheet__image-icon{width:var(--van-share-sheet-icon-size);height:var(--van-share-sheet-icon-size);margin:0 var(--van-padding-md)}.van-share-sheet__icon{display:flex;align-items:center;justify-content:center;color:var(--van-gray-7);border-radius:100%;background-color:var(--van-gray-2)}.van-share-sheet__icon--link,.van-share-sheet__icon--poster,.van-share-sheet__icon--qrcode{font-size:26px}.van-share-sheet__icon--weapp-qrcode{font-size:28px}.van-share-sheet__icon--qq,.van-share-sheet__icon--weibo,.van-share-sheet__icon--wechat,.van-share-sheet__icon--wechat-moments{font-size:30px;color:var(--van-white)}.van-share-sheet__icon--qq{background-color:#38b9fa}.van-share-sheet__icon--wechat{background-color:#0bc15f}.van-share-sheet__icon--weibo{background-color:#ee575e}.van-share-sheet__icon--wechat-moments{background-color:#7bc845}.van-share-sheet__name{margin-top:var(--van-padding-xs);padding:0 var(--van-padding-base);color:var(--van-share-sheet-option-name-color);font-size:var(--van-share-sheet-option-name-font-size)}.van-share-sheet__option-description{padding:0 var(--van-padding-base);color:var(--van-share-sheet-option-description-color);font-size:var(--van-share-sheet-option-description-font-size)}.van-share-sheet__cancel{display:block;width:100%;padding:0;font-size:var(--van-share-sheet-cancel-button-font-size);line-height:var(--van-share-sheet-cancel-button-height);text-align:center;background:var(--van-share-sheet-cancel-button-background);border:none;cursor:pointer}.van-share-sheet__cancel:before{display:block;height:var(--van-padding-xs);background-color:var(--van-background);content:" "}.van-share-sheet__cancel:active{background-color:var(--van-active-color)}:root,:host{--van-popover-arrow-size: 6px;--van-popover-radius: var(--van-radius-lg);--van-popover-action-width: 128px;--van-popover-action-height: 44px;--van-popover-action-font-size: var(--van-font-size-md);--van-popover-action-line-height: var(--van-line-height-md);--van-popover-action-icon-size: 20px;--van-popover-horizontal-action-height: 34px;--van-popover-horizontal-action-icon-size: 16px;--van-popover-light-text-color: var(--van-text-color);--van-popover-light-background: var(--van-background-2);--van-popover-light-action-disabled-text-color: var(--van-text-color-3);--van-popover-dark-text-color: var(--van-white);--van-popover-dark-background: #4a4a4a;--van-popover-dark-action-disabled-text-color: var(--van-text-color-2)}.van-popover{position:absolute;overflow:visible;background-color:transparent;transition:opacity .15s,transform .15s}.van-popover__wrapper{display:inline-block}.van-popover__arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid;border-width:var(--van-popover-arrow-size)}.van-popover__content{overflow:hidden;border-radius:var(--van-popover-radius)}.van-popover__content--horizontal{display:flex;width:-webkit-max-content;width:max-content}.van-popover__content--horizontal .van-popover__action{flex:none;width:auto;height:var(--van-popover-horizontal-action-height);padding:0 var(--van-padding-sm)}.van-popover__content--horizontal .van-popover__action:last-child:after{display:none}.van-popover__content--horizontal .van-popover__action-icon{margin-right:var(--van-padding-base);font-size:var(--van-popover-horizontal-action-icon-size)}.van-popover__action{position:relative;display:flex;align-items:center;box-sizing:border-box;width:var(--van-popover-action-width);height:var(--van-popover-action-height);padding:0 var(--van-padding-md);font-size:var(--van-popover-action-font-size);line-height:var(--van-line-height-md);cursor:pointer}.van-popover__action:last-child .van-popover__action-text:after{display:none}.van-popover__action-text{display:flex;flex:1;align-items:center;justify-content:center;height:100%}.van-popover__action-icon{margin-right:var(--van-padding-xs);font-size:var(--van-popover-action-icon-size)}.van-popover__action--with-icon .van-popover__action-text{justify-content:flex-start}.van-popover[data-popper-placement^=top] .van-popover__arrow{bottom:0;border-top-color:currentColor;border-bottom-width:0;margin-bottom:calc(var(--van-popover-arrow-size) * -1)}.van-popover[data-popper-placement=top]{transform-origin:50% 100%}.van-popover[data-popper-placement=top] .van-popover__arrow{left:50%;transform:translate(-50%)}.van-popover[data-popper-placement=top-start]{transform-origin:0 100%}.van-popover[data-popper-placement=top-start] .van-popover__arrow{left:var(--van-padding-md)}.van-popover[data-popper-placement=top-end]{transform-origin:100% 100%}.van-popover[data-popper-placement=top-end] .van-popover__arrow{right:var(--van-padding-md)}.van-popover[data-popper-placement^=left] .van-popover__arrow{right:0;border-right-width:0;border-left-color:currentColor;margin-right:calc(var(--van-popover-arrow-size) * -1)}.van-popover[data-popper-placement=left]{transform-origin:100% 50%}.van-popover[data-popper-placement=left] .van-popover__arrow{top:50%;transform:translateY(-50%)}.van-popover[data-popper-placement=left-start]{transform-origin:100% 0}.van-popover[data-popper-placement=left-start] .van-popover__arrow{top:var(--van-padding-md)}.van-popover[data-popper-placement=left-end]{transform-origin:100% 100%}.van-popover[data-popper-placement=left-end] .van-popover__arrow{bottom:var(--van-padding-md)}.van-popover[data-popper-placement^=right] .van-popover__arrow{left:0;border-right-color:currentColor;border-left-width:0;margin-left:calc(var(--van-popover-arrow-size) * -1)}.van-popover[data-popper-placement=right]{transform-origin:0 50%}.van-popover[data-popper-placement=right] .van-popover__arrow{top:50%;transform:translateY(-50%)}.van-popover[data-popper-placement=right-start]{transform-origin:0 0}.van-popover[data-popper-placement=right-start] .van-popover__arrow{top:var(--van-padding-md)}.van-popover[data-popper-placement=right-end]{transform-origin:0 100%}.van-popover[data-popper-placement=right-end] .van-popover__arrow{bottom:var(--van-padding-md)}.van-popover[data-popper-placement^=bottom] .van-popover__arrow{top:0;border-top-width:0;border-bottom-color:currentColor;margin-top:calc(var(--van-popover-arrow-size) * -1)}.van-popover[data-popper-placement=bottom]{transform-origin:50% 0}.van-popover[data-popper-placement=bottom] .van-popover__arrow{left:50%;transform:translate(-50%)}.van-popover[data-popper-placement=bottom-start]{transform-origin:0 0}.van-popover[data-popper-placement=bottom-start] .van-popover__arrow{left:var(--van-padding-md)}.van-popover[data-popper-placement=bottom-end]{transform-origin:100% 0}.van-popover[data-popper-placement=bottom-end] .van-popover__arrow{right:var(--van-padding-md)}.van-popover--light{color:var(--van-popover-light-text-color)}.van-popover--light .van-popover__content{background:var(--van-popover-light-background);box-shadow:0 2px 12px rgba(50,50,51,.12)}.van-popover--light .van-popover__arrow{color:var(--van-popover-light-background)}.van-popover--light .van-popover__action:active{background-color:var(--van-active-color)}.van-popover--light .van-popover__action--disabled{color:var(--van-popover-light-action-disabled-text-color);cursor:not-allowed}.van-popover--light .van-popover__action--disabled:active{background-color:transparent}.van-popover--dark{color:var(--van-popover-dark-text-color)}.van-popover--dark .van-popover__content{background:var(--van-popover-dark-background)}.van-popover--dark .van-popover__arrow{color:var(--van-popover-dark-background)}.van-popover--dark .van-popover__action:active{background-color:rgba(0,0,0,.2)}.van-popover--dark .van-popover__action--disabled{color:var(--van-popover-dark-action-disabled-text-color)}.van-popover--dark .van-popover__action--disabled:active{background-color:transparent}.van-popover--dark .van-popover__action-text:after{border-color:var(--van-gray-7)}.van-popover-zoom-enter-from,.van-popover-zoom-leave-active{transform:scale(.8);opacity:0}.van-popover-zoom-enter-active{transition-timing-function:var(--van-ease-out)}.van-popover-zoom-leave-active{transition-timing-function:var(--van-ease-in)}:root,:host{--van-notify-text-color: var(--van-white);--van-notify-padding: var(--van-padding-xs) var(--van-padding-md);--van-notify-font-size: var(--van-font-size-md);--van-notify-line-height: var(--van-line-height-md);--van-notify-primary-background: var(--van-primary-color);--van-notify-success-background: var(--van-success-color);--van-notify-danger-background: var(--van-danger-color);--van-notify-warning-background: var(--van-warning-color)}.van-notify{display:flex;align-items:center;justify-content:center;box-sizing:border-box;padding:var(--van-notify-padding);color:var(--van-notify-text-color);font-size:var(--van-notify-font-size);line-height:var(--van-notify-line-height);white-space:pre-wrap;text-align:center;word-wrap:break-word}.van-notify--primary{background:var(--van-notify-primary-background)}.van-notify--success{background:var(--van-notify-success-background)}.van-notify--danger{background:var(--van-notify-danger-background)}.van-notify--warning{background:var(--van-notify-warning-background)}:root,:host{--van-dialog-width: 320px;--van-dialog-small-screen-width: 90%;--van-dialog-font-size: var(--van-font-size-lg);--van-dialog-transition: var(--van-duration-base);--van-dialog-radius: 16px;--van-dialog-background: var(--van-background-2);--van-dialog-header-font-weight: var(--van-font-bold);--van-dialog-header-line-height: 24px;--van-dialog-header-padding-top: 26px;--van-dialog-header-isolated-padding: var(--van-padding-lg) 0;--van-dialog-message-padding: var(--van-padding-lg);--van-dialog-message-font-size: var(--van-font-size-md);--van-dialog-message-line-height: var(--van-line-height-md);--van-dialog-message-max-height: 60vh;--van-dialog-has-title-message-text-color: var(--van-gray-7);--van-dialog-has-title-message-padding-top: var(--van-padding-xs);--van-dialog-button-height: 48px;--van-dialog-round-button-height: 36px;--van-dialog-confirm-button-text-color: var(--van-primary-color)}.van-dialog{top:45%;width:var(--van-dialog-width);overflow:hidden;font-size:var(--van-dialog-font-size);background:var(--van-dialog-background);border-radius:var(--van-dialog-radius);-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:var(--van-dialog-transition);transition-property:transform,opacity}@media (max-width: 321px){.van-dialog{width:var(--van-dialog-small-screen-width)}}.van-dialog__header{color:var(--van-text-color);padding-top:var(--van-dialog-header-padding-top);font-weight:var(--van-dialog-header-font-weight);line-height:var(--van-dialog-header-line-height);text-align:center}.van-dialog__header--isolated{padding:var(--van-dialog-header-isolated-padding)}.van-dialog__content--isolated{display:flex;align-items:center;min-height:104px}.van-dialog__message{color:var(--van-text-color);flex:1;max-height:var(--van-dialog-message-max-height);padding:26px var(--van-dialog-message-padding);overflow-y:auto;font-size:var(--van-dialog-message-font-size);line-height:var(--van-dialog-message-line-height);white-space:pre-wrap;text-align:center;word-wrap:break-word;-webkit-overflow-scrolling:touch}.van-dialog__message--has-title{padding-top:var(--van-dialog-has-title-message-padding-top);color:var(--van-dialog-has-title-message-text-color)}.van-dialog__message--left{text-align:left}.van-dialog__message--right{text-align:right}.van-dialog__message--justify{text-align:justify}.van-dialog__footer{display:flex;overflow:hidden;-webkit-user-select:none;user-select:none}.van-dialog__confirm,.van-dialog__cancel{flex:1;height:var(--van-dialog-button-height);margin:0;border:0;border-radius:0}.van-dialog__confirm,.van-dialog__confirm:active{color:var(--van-dialog-confirm-button-text-color)}.van-dialog--round-button .van-dialog__footer{position:relative;height:auto;padding:var(--van-padding-xs) var(--van-padding-lg) var(--van-padding-md)}.van-dialog--round-button .van-dialog__message{padding-bottom:var(--van-padding-md);color:var(--van-text-color)}.van-dialog--round-button .van-dialog__confirm,.van-dialog--round-button .van-dialog__cancel{height:var(--van-dialog-round-button-height)}.van-dialog--round-button .van-dialog__confirm{color:var(--van-white)}.van-dialog--round-button .van-action-bar-button--first{border-top-left-radius:var(--van-radius-max);border-bottom-left-radius:var(--van-radius-max)}.van-dialog--round-button .van-action-bar-button--last{border-top-right-radius:var(--van-radius-max);border-bottom-right-radius:var(--van-radius-max)}.van-dialog-bounce-enter-from{transform:translate3d(0,-50%,0) scale(.7);opacity:0}.van-dialog-bounce-leave-active{transform:translate3d(0,-50%,0) scale(.9);opacity:0}:root,:host{--van-toast-max-width: 70%;--van-toast-font-size: var(--van-font-size-md);--van-toast-text-color: var(--van-white);--van-toast-loading-icon-color: var(--van-white);--van-toast-line-height: var(--van-line-height-md);--van-toast-radius: var(--van-radius-lg);--van-toast-background: rgba(0, 0, 0, .7);--van-toast-icon-size: 36px;--van-toast-text-min-width: 96px;--van-toast-text-padding: var(--van-padding-xs) var(--van-padding-sm);--van-toast-default-padding: var(--van-padding-md);--van-toast-default-width: 88px;--van-toast-default-min-height: 88px;--van-toast-position-top-distance: 20%;--van-toast-position-bottom-distance: 20%}.van-toast{display:flex;flex-direction:column;align-items:center;justify-content:center;box-sizing:content-box;transition:all var(--van-duration-fast);width:var(--van-toast-default-width);max-width:var(--van-toast-max-width);min-height:var(--van-toast-default-min-height);padding:var(--van-toast-default-padding);color:var(--van-toast-text-color);font-size:var(--van-toast-font-size);line-height:var(--van-toast-line-height);white-space:pre-wrap;word-break:break-all;text-align:center;background:var(--van-toast-background);border-radius:var(--van-toast-radius)}.van-toast--break-normal{word-break:normal;word-wrap:normal}.van-toast--break-word{word-break:normal;word-wrap:break-word}.van-toast--unclickable{overflow:hidden;cursor:not-allowed}.van-toast--unclickable *{pointer-events:none}.van-toast--text,.van-toast--html{width:-webkit-fit-content;width:fit-content;min-width:var(--van-toast-text-min-width);min-height:0;padding:var(--van-toast-text-padding)}.van-toast--text .van-toast__text,.van-toast--html .van-toast__text{margin-top:0}.van-toast--top{top:var(--van-toast-position-top-distance)}.van-toast--bottom{top:auto;bottom:var(--van-toast-position-bottom-distance)}.van-toast__icon{font-size:var(--van-toast-icon-size)}.van-toast__loading{padding:var(--van-padding-base);color:var(--van-toast-loading-icon-color)}.van-toast__text{margin-top:var(--van-padding-xs)}:root,:host{--van-action-sheet-max-height: 80%;--van-action-sheet-header-height: 48px;--van-action-sheet-header-font-size: var(--van-font-size-lg);--van-action-sheet-description-color: var(--van-text-color-2);--van-action-sheet-description-font-size: var(--van-font-size-md);--van-action-sheet-description-line-height: var(--van-line-height-md);--van-action-sheet-item-background: var(--van-background-2);--van-action-sheet-item-font-size: var(--van-font-size-lg);--van-action-sheet-item-line-height: var(--van-line-height-lg);--van-action-sheet-item-text-color: var(--van-text-color);--van-action-sheet-item-disabled-text-color: var(--van-text-color-3);--van-action-sheet-item-icon-size: 18px;--van-action-sheet-item-icon-margin-right: var(--van-padding-xs);--van-action-sheet-subname-color: var(--van-text-color-2);--van-action-sheet-subname-font-size: var(--van-font-size-sm);--van-action-sheet-subname-line-height: var(--van-line-height-sm);--van-action-sheet-close-icon-size: 22px;--van-action-sheet-close-icon-color: var(--van-gray-5);--van-action-sheet-close-icon-padding: 0 var(--van-padding-md);--van-action-sheet-cancel-text-color: var(--van-gray-7);--van-action-sheet-cancel-padding-top: var(--van-padding-xs);--van-action-sheet-cancel-padding-color: var(--van-background);--van-action-sheet-loading-icon-size: 22px}.van-action-sheet{display:flex;flex-direction:column;max-height:var(--van-action-sheet-max-height);overflow:hidden;color:var(--van-action-sheet-item-text-color)}.van-action-sheet__content{flex:1 auto;overflow-y:auto;-webkit-overflow-scrolling:touch}.van-action-sheet__item,.van-action-sheet__cancel{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;width:100%;padding:14px var(--van-padding-md);font-size:var(--van-action-sheet-item-font-size);background:var(--van-action-sheet-item-background);border:none;cursor:pointer}.van-action-sheet__item:active,.van-action-sheet__cancel:active{background-color:var(--van-active-color)}.van-action-sheet__item{line-height:var(--van-action-sheet-item-line-height)}.van-action-sheet__item--loading,.van-action-sheet__item--disabled{color:var(--van-action-sheet-item-disabled-text-color)}.van-action-sheet__item--loading:active,.van-action-sheet__item--disabled:active{background-color:var(--van-action-sheet-item-background)}.van-action-sheet__item--disabled{cursor:not-allowed}.van-action-sheet__item--loading{cursor:default}.van-action-sheet__item-icon{font-size:var(--van-action-sheet-item-icon-size);margin-right:var(--van-action-sheet-item-icon-margin-right)}.van-action-sheet__cancel{flex-shrink:0;box-sizing:border-box;color:var(--van-action-sheet-cancel-text-color)}.van-action-sheet__subname{width:100%;margin-top:var(--van-padding-xs);color:var(--van-action-sheet-subname-color);font-size:var(--van-action-sheet-subname-font-size);line-height:var(--van-action-sheet-subname-line-height);overflow-wrap:break-word}.van-action-sheet__gap{display:block;height:var(--van-action-sheet-cancel-padding-top);background:var(--van-action-sheet-cancel-padding-color)}.van-action-sheet__header{flex-shrink:0;font-weight:var(--van-font-bold);font-size:var(--van-action-sheet-header-font-size);line-height:var(--van-action-sheet-header-height);text-align:center}.van-action-sheet__description{position:relative;flex-shrink:0;padding:20px var(--van-padding-md);color:var(--van-action-sheet-description-color);font-size:var(--van-action-sheet-description-font-size);line-height:var(--van-action-sheet-description-line-height);text-align:center}.van-action-sheet__description:after{position:absolute;box-sizing:border-box;content:" ";pointer-events:none;right:var(--van-padding-md);bottom:0;left:var(--van-padding-md);border-bottom:1px solid var(--van-border-color);transform:scaleY(.5)}.van-action-sheet__loading-icon .van-loading__spinner{width:var(--van-action-sheet-loading-icon-size);height:var(--van-action-sheet-loading-icon-size)}.van-action-sheet__close{position:absolute;top:0;right:0;z-index:1;padding:var(--van-action-sheet-close-icon-padding);color:var(--van-action-sheet-close-icon-color);font-size:var(--van-action-sheet-close-icon-size);line-height:inherit}:root,:host{--van-sticky-z-index: 99}.van-sticky--fixed{position:fixed;z-index:var(--van-sticky-z-index)}:root,:host{--van-swipe-indicator-size: 6px;--van-swipe-indicator-margin: var(--van-padding-sm);--van-swipe-indicator-active-opacity: 1;--van-swipe-indicator-inactive-opacity: .3;--van-swipe-indicator-active-background: var(--van-primary-color);--van-swipe-indicator-inactive-background: var(--van-border-color)}.van-swipe{position:relative;overflow:hidden;transform:translateZ(0);cursor:-webkit-grab;cursor:grab;-webkit-user-select:none;user-select:none}.van-swipe__track{display:flex;height:100%;transition-property:transform}.van-swipe__track--vertical{flex-direction:column}.van-swipe__indicators{position:absolute;bottom:var(--van-swipe-indicator-margin);left:50%;display:flex;transform:translate(-50%)}.van-swipe__indicators--vertical{top:50%;bottom:auto;left:var(--van-swipe-indicator-margin);flex-direction:column;transform:translateY(-50%)}.van-swipe__indicators--vertical .van-swipe__indicator:not(:last-child){margin-bottom:var(--van-swipe-indicator-size)}.van-swipe__indicator{width:var(--van-swipe-indicator-size);height:var(--van-swipe-indicator-size);background-color:var(--van-swipe-indicator-inactive-background);border-radius:100%;opacity:var(--van-swipe-indicator-inactive-opacity);transition:opacity var(--van-duration-fast),background-color var(--van-duration-fast)}.van-swipe__indicator:not(:last-child){margin-right:var(--van-swipe-indicator-size)}.van-swipe__indicator--active{background-color:var(--van-swipe-indicator-active-background);opacity:var(--van-swipe-indicator-active-opacity)}.van-swipe-item{position:relative;flex-shrink:0;width:100%;height:100%}:root,:host{--van-image-preview-index-text-color: var(--van-white);--van-image-preview-index-font-size: var(--van-font-size-md);--van-image-preview-index-line-height: var(--van-line-height-md);--van-image-preview-index-text-shadow: 0 1px 1px var(--van-gray-8);--van-image-preview-overlay-background: rgba(0, 0, 0, .9);--van-image-preview-close-icon-size: 22px;--van-image-preview-close-icon-color: var(--van-gray-5);--van-image-preview-close-icon-margin: var(--van-padding-md);--van-image-preview-close-icon-z-index: 1}.van-image-preview{position:fixed;top:0;left:0;width:100%;height:100%;max-width:none;background-color:transparent;transform:none}.van-image-preview__swipe{height:100%}.van-image-preview__swipe-item{display:flex;align-items:center;justify-content:center;overflow:hidden}.van-image-preview__cover{position:absolute;top:0;left:0}.van-image-preview__image,.van-image-preview__image-wrap{width:100%;transition-property:transform}.van-image-preview__image--vertical,.van-image-preview__image-wrap--vertical{width:auto;height:100%}.van-image-preview__image img,.van-image-preview__image-wrap img,.van-image-preview__image video,.van-image-preview__image-wrap video{-webkit-user-drag:none}.van-image-preview__image .van-image__error,.van-image-preview__image-wrap .van-image__error{top:30%;height:40%}.van-image-preview__image .van-image__error-icon,.van-image-preview__image-wrap .van-image__error-icon{font-size:36px}.van-image-preview__image .van-image__loading,.van-image-preview__image-wrap .van-image__loading{background-color:transparent}.van-image-preview__index{position:absolute;top:var(--van-padding-md);left:50%;color:var(--van-image-preview-index-text-color);font-size:var(--van-image-preview-index-font-size);line-height:var(--van-image-preview-index-line-height);text-shadow:var(--van-image-preview-index-text-shadow);transform:translate(-50%)}.van-image-preview__overlay{background:var(--van-image-preview-overlay-background)}.van-image-preview__close-icon{position:absolute;z-index:var(--van-image-preview-close-icon-z-index);color:var(--van-image-preview-close-icon-color);font-size:var(--van-image-preview-close-icon-size)}.van-image-preview__close-icon--top-left{top:var(--van-image-preview-close-icon-margin);left:var(--van-image-preview-close-icon-margin)}.van-image-preview__close-icon--top-right{top:var(--van-image-preview-close-icon-margin);right:var(--van-image-preview-close-icon-margin)}.van-image-preview__close-icon--bottom-left{bottom:var(--van-image-preview-close-icon-margin);left:var(--van-image-preview-close-icon-margin)}.van-image-preview__close-icon--bottom-right{right:var(--van-image-preview-close-icon-margin);bottom:var(--van-image-preview-close-icon-margin)}:root,:host{--van-uploader-size: 80px;--van-uploader-icon-size: 24px;--van-uploader-icon-color: var(--van-gray-4);--van-uploader-text-color: var(--van-text-color-2);--van-uploader-text-font-size: var(--van-font-size-sm);--van-uploader-upload-background: var(--van-gray-1);--van-uploader-upload-active-color: var(--van-active-color);--van-uploader-delete-color: var(--van-white);--van-uploader-delete-icon-size: 14px;--van-uploader-delete-background: rgba(0, 0, 0, .7);--van-uploader-file-background: var(--van-background);--van-uploader-file-icon-size: 20px;--van-uploader-file-icon-color: var(--van-gray-7);--van-uploader-file-name-padding: 0 var(--van-padding-base);--van-uploader-file-name-margin-top: var(--van-padding-xs);--van-uploader-file-name-font-size: var(--van-font-size-sm);--van-uploader-file-name-text-color: var(--van-gray-7);--van-uploader-mask-text-color: var(--van-white);--van-uploader-mask-background: rgba(50, 50, 51, .88);--van-uploader-mask-icon-size: 22px;--van-uploader-mask-message-font-size: var(--van-font-size-sm);--van-uploader-mask-message-line-height: var(--van-line-height-xs);--van-uploader-loading-icon-size: 22px;--van-uploader-loading-icon-color: var(--van-white);--van-uploader-disabled-opacity: var(--van-disabled-opacity);--van-uploader-border-radius: 0px}.van-uploader{position:relative;display:inline-block}.van-uploader__wrapper{display:flex;flex-wrap:wrap}.van-uploader__wrapper--disabled{opacity:var(--van-uploader-disabled-opacity)}.van-uploader__input{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;cursor:pointer;opacity:0}.van-uploader__input-wrapper{position:relative}.van-uploader__input:disabled{cursor:not-allowed}.van-uploader__upload{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;box-sizing:border-box;width:var(--van-uploader-size);height:var(--van-uploader-size);margin:0 var(--van-padding-xs) var(--van-padding-xs) 0;background:var(--van-uploader-upload-background);border-radius:var(--van-uploader-border-radius)}.van-uploader__upload:active{background-color:var(--van-uploader-upload-active-color)}.van-uploader__upload--readonly:active{background-color:var(--van-uploader-upload-background)}.van-uploader__upload-icon{color:var(--van-uploader-icon-color);font-size:var(--van-uploader-icon-size)}.van-uploader__upload-text{margin-top:var(--van-padding-xs);color:var(--van-uploader-text-color);font-size:var(--van-uploader-text-font-size)}.van-uploader__preview{position:relative;margin:0 var(--van-padding-xs) var(--van-padding-xs) 0;cursor:pointer}.van-uploader__preview-image{display:block;width:var(--van-uploader-size);height:var(--van-uploader-size);overflow:hidden;border-radius:var(--van-uploader-border-radius)}.van-uploader__preview-delete{position:absolute;top:0;right:0}.van-uploader__preview-delete--shadow{width:var(--van-uploader-delete-icon-size);height:var(--van-uploader-delete-icon-size);background:var(--van-uploader-delete-background);border-radius:0 0 0 12px}.van-uploader__preview-delete-icon{position:absolute;top:0;right:0;color:var(--van-uploader-delete-color);font-size:var(--van-uploader-delete-icon-size);transform:scale(.7) translate(10%,-10%)}.van-uploader__preview-cover{position:absolute;top:0;right:0;bottom:0;left:0}.van-uploader__mask{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--van-uploader-mask-text-color);background:var(--van-uploader-mask-background);border-radius:var(--van-uploader-border-radius)}.van-uploader__mask-icon{font-size:var(--van-uploader-mask-icon-size)}.van-uploader__mask-message{margin-top:6px;padding:0 var(--van-padding-base);font-size:var(--van-uploader-mask-message-font-size);line-height:var(--van-uploader-mask-message-line-height)}.van-uploader__loading{width:var(--van-uploader-loading-icon-size);height:var(--van-uploader-loading-icon-size);color:var(--van-uploader-loading-icon-color)}.van-uploader__file{display:flex;flex-direction:column;align-items:center;justify-content:center;width:var(--van-uploader-size);height:var(--van-uploader-size);background:var(--van-uploader-file-background)}.van-uploader__file-icon{color:var(--van-uploader-file-icon-color);font-size:var(--van-uploader-file-icon-size)}.van-uploader__file-name{box-sizing:border-box;width:100%;margin-top:var(--van-uploader-file-name-margin-top);padding:var(--van-uploader-file-name-padding);color:var(--van-uploader-file-name-text-color);font-size:var(--van-uploader-file-name-font-size);text-align:center}:root,:host{--van-tab-text-color: var(--van-gray-7);--van-tab-active-text-color: var(--van-text-color);--van-tab-disabled-text-color: var(--van-text-color-3);--van-tab-font-size: var(--van-font-size-md);--van-tab-line-height: var(--van-line-height-md);--van-tabs-default-color: var(--van-primary-color);--van-tabs-line-height: 44px;--van-tabs-card-height: 30px;--van-tabs-nav-background: var(--van-background-2);--van-tabs-bottom-bar-width: 40px;--van-tabs-bottom-bar-height: 3px;--van-tabs-bottom-bar-color: var(--van-primary-color)}.van-tab{position:relative;display:flex;flex:1;align-items:center;justify-content:center;box-sizing:border-box;padding:0 var(--van-padding-base);color:var(--van-tab-text-color);font-size:var(--van-tab-font-size);line-height:var(--van-tab-line-height);cursor:pointer}.van-tab--active{color:var(--van-tab-active-text-color);font-weight:var(--van-font-bold)}.van-tab--disabled{color:var(--van-tab-disabled-text-color);cursor:not-allowed}.van-tab--grow{flex:1 0 auto;padding:0 var(--van-padding-sm)}.van-tab--shrink{flex:none;padding:0 var(--van-padding-xs)}.van-tab--card{color:var(--van-tabs-default-color);border-right:var(--van-border-width) solid var(--van-tabs-default-color)}.van-tab--card:last-child{border-right:none}.van-tab--card.van-tab--active{color:var(--van-white);background-color:var(--van-tabs-default-color)}.van-tab--card.van-tab--disabled{color:var(--van-tab-disabled-text-color)}.van-tab__text--ellipsis{display:-webkit-box;overflow:hidden;-webkit-line-clamp:1;-webkit-box-orient:vertical}.van-tabs{position:relative}.van-tabs__wrap{overflow:hidden}.van-tabs__wrap--page-top{position:fixed}.van-tabs__wrap--content-bottom{top:auto;bottom:0}.van-tabs__nav{position:relative;display:flex;background:var(--van-tabs-nav-background);-webkit-user-select:none;user-select:none}.van-tabs__nav--complete{overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch}.van-tabs__nav--complete::-webkit-scrollbar{display:none}.van-tabs__nav--line{box-sizing:content-box;height:100%;padding-bottom:15px}.van-tabs__nav--line.van-tabs__nav--shrink,.van-tabs__nav--line.van-tabs__nav--complete{padding-right:var(--van-padding-xs);padding-left:var(--van-padding-xs)}.van-tabs__nav--card{box-sizing:border-box;height:var(--van-tabs-card-height);margin:0 var(--van-padding-md);border:var(--van-border-width) solid var(--van-tabs-default-color);border-radius:var(--van-radius-sm)}.van-tabs__nav--card.van-tabs__nav--shrink{display:inline-flex}.van-tabs__line{position:absolute;bottom:15px;left:0;z-index:1;width:var(--van-tabs-bottom-bar-width);height:var(--van-tabs-bottom-bar-height);background:var(--van-tabs-bottom-bar-color);border-radius:var(--van-tabs-bottom-bar-height)}.van-tabs__track{position:relative;display:flex;width:100%;height:100%;will-change:left}.van-tabs__content--animated{overflow:hidden}.van-tabs--line .van-tabs__wrap{height:var(--van-tabs-line-height)}.van-tabs--card>.van-tabs__wrap{height:var(--van-tabs-card-height)}.van-tab__panel,.van-tab__panel-wrapper{flex-shrink:0;box-sizing:border-box;width:100%}.van-tab__panel-wrapper--inactive{height:0;overflow:visible}:root,:host{--van-cascader-header-height: 48px;--van-cascader-header-padding: 0 var(--van-padding-md);--van-cascader-title-font-size: var(--van-font-size-lg);--van-cascader-title-line-height: 20px;--van-cascader-close-icon-size: 22px;--van-cascader-close-icon-color: var(--van-gray-5);--van-cascader-selected-icon-size: 18px;--van-cascader-tabs-height: 48px;--van-cascader-active-color: var(--van-primary-color);--van-cascader-options-height: 384px;--van-cascader-option-disabled-color: var(--van-text-color-3);--van-cascader-tab-color: var(--van-text-color);--van-cascader-unselected-tab-color: var(--van-text-color-2)}.van-cascader__header{display:flex;align-items:center;justify-content:space-between;height:var(--van-cascader-header-height);padding:var(--van-cascader-header-padding)}.van-cascader__title{font-weight:var(--van-font-bold);font-size:var(--van-cascader-title-font-size);line-height:var(--van-cascader-title-line-height)}.van-cascader__close-icon{color:var(--van-cascader-close-icon-color);font-size:var(--van-cascader-close-icon-size)}.van-cascader__tabs.van-tabs--line .van-tabs__wrap{height:var(--van-cascader-tabs-height)}.van-cascader__tab{color:var(--van-cascader-tab-color);font-weight:var(--van-font-bold)}.van-cascader__tab--unselected{color:var(--van-cascader-unselected-tab-color);font-weight:400}.van-cascader__option{display:flex;align-items:center;justify-content:space-between;padding:10px var(--van-padding-md);font-size:var(--van-font-size-md);line-height:var(--van-line-height-md);cursor:pointer}.van-cascader__option:active{background-color:var(--van-active-color)}.van-cascader__option--selected{color:var(--van-cascader-active-color);font-weight:var(--van-font-bold)}.van-cascader__option--disabled{color:var(--van-cascader-option-disabled-color);cursor:not-allowed}.van-cascader__option--disabled:active{background-color:transparent}.van-cascader__selected-icon{font-size:var(--van-cascader-selected-icon-size)}.van-cascader__options{box-sizing:border-box;height:var(--van-cascader-options-height);padding-top:6px;overflow-y:auto;-webkit-overflow-scrolling:touch}:root,:host{--van-picker-background: var(--van-background-2);--van-picker-toolbar-height: 44px;--van-picker-title-font-size: var(--van-font-size-lg);--van-picker-title-line-height: var(--van-line-height-md);--van-picker-action-padding: 0 var(--van-padding-md);--van-picker-action-font-size: var(--van-font-size-md);--van-picker-confirm-action-color: var(--van-primary-color);--van-picker-cancel-action-color: var(--van-text-color-2);--van-picker-option-font-size: var(--van-font-size-lg);--van-picker-option-padding: 0 var(--van-padding-base);--van-picker-option-text-color: var(--van-text-color);--van-picker-option-disabled-opacity: .3;--van-picker-loading-icon-color: var(--van-primary-color);--van-picker-loading-mask-color: rgba(255, 255, 255, .9);--van-picker-mask-color: linear-gradient(180deg, rgba(255, 255, 255, .9), rgba(255, 255, 255, .4)), linear-gradient(0deg, rgba(255, 255, 255, .9), rgba(255, 255, 255, .4))}.van-theme-dark{--van-picker-loading-mask-color: rgba(0, 0, 0, .6);--van-picker-mask-color: linear-gradient(180deg, rgba(0, 0, 0, .6), rgba(0, 0, 0, .1)), linear-gradient(0deg, rgba(0, 0, 0, .6), rgba(0, 0, 0, .1))}.van-picker{position:relative;background:var(--van-picker-background);-webkit-user-select:none;user-select:none}.van-picker__toolbar{position:relative;display:flex;align-items:center;justify-content:space-between;height:var(--van-picker-toolbar-height)}.van-picker__cancel,.van-picker__confirm{height:100%;padding:var(--van-picker-action-padding);font-size:var(--van-picker-action-font-size);background-color:transparent;border:none}.van-picker__confirm{color:var(--van-picker-confirm-action-color)}.van-picker__cancel{color:var(--van-picker-cancel-action-color)}.van-picker__title{position:absolute;left:50%;color:var(--van-text-color);max-width:50%;font-weight:var(--van-font-bold);font-size:var(--van-picker-title-font-size);line-height:var(--van-picker-title-line-height);text-align:center;transform:translate(-50%)}.van-picker__columns{position:relative;display:flex;cursor:-webkit-grab;cursor:grab}.van-picker__loading{position:absolute;top:0;right:0;bottom:0;left:0;z-index:3;display:flex;align-items:center;justify-content:center;color:var(--van-picker-loading-icon-color);background:var(--van-picker-loading-mask-color)}.van-picker__frame{position:absolute;top:50%;right:var(--van-padding-md);left:var(--van-padding-md);z-index:2;transform:translateY(-50%);pointer-events:none}.van-picker__mask{position:absolute;top:0;left:0;z-index:1;width:100%;height:100%;background-image:var(--van-picker-mask-color);background-repeat:no-repeat;background-position:top,bottom;transform:translateZ(0);pointer-events:none}.van-picker-column{flex:1;overflow:hidden;font-size:var(--van-picker-option-font-size)}.van-picker-column__wrapper{transition-timing-function:cubic-bezier(.23,1,.68,1)}.van-picker-column__item{display:flex;align-items:center;justify-content:center;padding:var(--van-picker-option-padding);color:var(--van-picker-option-text-color)}.van-picker-column__item--disabled{cursor:not-allowed;opacity:var(--van-picker-option-disabled-opacity)}:root,:host{--van-picker-group-background: var(--van-background-2)}.van-picker-group{background:var(--van-picker-group-background)}.van-picker-group__tabs{margin-top:var(--van-padding-base)}.van-picker-group__tab-title{margin-right:16px}:root,:host{--van-calendar-background: var(--van-background-2);--van-calendar-popup-height: 80%;--van-calendar-header-shadow: 0 2px 10px rgba(125, 126, 128, .16);--van-calendar-header-title-height: 44px;--van-calendar-header-title-font-size: var(--van-font-size-lg);--van-calendar-header-subtitle-font-size: var(--van-font-size-md);--van-calendar-header-action-width: 28px;--van-calendar-header-action-color: var(--van-text-color);--van-calendar-header-action-disabled-color: var(--van-text-color-3);--van-calendar-weekdays-height: 30px;--van-calendar-weekdays-font-size: var(--van-font-size-sm);--van-calendar-month-title-font-size: var(--van-font-size-md);--van-calendar-month-mark-color: rgba(242, 243, 245, .8);--van-calendar-month-mark-font-size: 160px;--van-calendar-day-height: 64px;--van-calendar-day-font-size: var(--van-font-size-lg);--van-calendar-day-margin-bottom: 4px;--van-calendar-range-edge-color: var(--van-white);--van-calendar-range-edge-background: var(--van-primary-color);--van-calendar-range-middle-color: var(--van-primary-color);--van-calendar-range-middle-background-opacity: .1;--van-calendar-selected-day-size: 54px;--van-calendar-selected-day-color: var(--van-white);--van-calendar-info-font-size: var(--van-font-size-xs);--van-calendar-info-line-height: var(--van-line-height-xs);--van-calendar-selected-day-background: var(--van-primary-color);--van-calendar-day-disabled-color: var(--van-text-color-3);--van-calendar-confirm-button-height: 36px;--van-calendar-confirm-button-margin: 7px 0}.van-theme-dark{--van-calendar-month-mark-color: rgba(100, 101, 102, .2);--van-calendar-day-disabled-color: var(--van-gray-7)}.van-calendar{display:flex;flex-direction:column;height:100%;background:var(--van-calendar-background)}.van-calendar__popup.van-popup--top,.van-calendar__popup.van-popup--bottom{height:var(--van-calendar-popup-height)}.van-calendar__popup.van-popup--left,.van-calendar__popup.van-popup--right{height:100%}.van-calendar__popup .van-popup__close-icon{top:11px}.van-calendar__header{flex-shrink:0;box-shadow:var(--van-calendar-header-shadow)}.van-calendar__month-title,.van-calendar__header-title,.van-calendar__header-subtitle{color:var(--van-text-color);height:var(--van-calendar-header-title-height);font-weight:var(--van-font-bold);line-height:var(--van-calendar-header-title-height);text-align:center}.van-calendar__header-title{font-size:var(--van-calendar-header-title-font-size)}.van-calendar__header-subtitle{font-size:var(--van-calendar-header-subtitle-font-size)}.van-calendar__header-subtitle--with-swicth{display:flex;align-items:center;padding:0 var(--van-padding-base)}.van-calendar__header-subtitle-text{flex:1}.van-calendar__header-action{display:flex;align-items:center;justify-content:center;min-width:var(--van-calendar-header-action-width);height:100%;color:var(--van-calendar-header-action-color);cursor:pointer}.van-calendar__header-action--disabled{color:var(--van-calendar-header-action-disabled-color);cursor:not-allowed}.van-calendar__month-title{font-size:var(--van-calendar-month-title-font-size)}.van-calendar__weekdays{display:flex}.van-calendar__weekday{flex:1;font-size:var(--van-calendar-weekdays-font-size);line-height:var(--van-calendar-weekdays-height);text-align:center}.van-calendar__body{flex:1;overflow:auto;-webkit-overflow-scrolling:touch}.van-calendar__days{position:relative;display:flex;flex-wrap:wrap;-webkit-user-select:none;user-select:none}.van-calendar__month-mark{position:absolute;top:50%;left:50%;z-index:0;color:var(--van-calendar-month-mark-color);font-size:var(--van-calendar-month-mark-font-size);transform:translate(-50%,-50%);pointer-events:none}.van-calendar__day,.van-calendar__selected-day{display:flex;align-items:center;justify-content:center;text-align:center}.van-calendar__day{position:relative;width:14.285%;height:var(--van-calendar-day-height);font-size:var(--van-calendar-day-font-size);margin-bottom:var(--van-calendar-day-margin-bottom);cursor:pointer}.van-calendar__day--end,.van-calendar__day--start,.van-calendar__day--start-end,.van-calendar__day--multiple-middle,.van-calendar__day--multiple-selected{color:var(--van-calendar-range-edge-color);background:var(--van-calendar-range-edge-background)}.van-calendar__day--start{border-radius:var(--van-radius-md) 0 0 var(--van-radius-md)}.van-calendar__day--end{border-radius:0 var(--van-radius-md) var(--van-radius-md) 0}.van-calendar__day--start-end,.van-calendar__day--multiple-selected{border-radius:var(--van-radius-md)}.van-calendar__day--middle{color:var(--van-calendar-range-middle-color)}.van-calendar__day--middle:after{position:absolute;top:0;right:0;bottom:0;left:0;background-color:currentColor;opacity:var(--van-calendar-range-middle-background-opacity);content:""}.van-calendar__day--disabled{color:var(--van-calendar-day-disabled-color);cursor:default}.van-calendar__top-info,.van-calendar__bottom-info{position:absolute;right:0;left:0;font-size:var(--van-calendar-info-font-size);line-height:var(--van-calendar-info-line-height)}@media (max-width: 350px){.van-calendar__top-info,.van-calendar__bottom-info{font-size:9px}}.van-calendar__top-info{top:6px}.van-calendar__bottom-info{bottom:6px}.van-calendar__selected-day{width:var(--van-calendar-selected-day-size);height:var(--van-calendar-selected-day-size);color:var(--van-calendar-selected-day-color);background:var(--van-calendar-selected-day-background);border-radius:var(--van-radius-md)}.van-calendar__footer{flex-shrink:0;padding-left:var(--van-padding-md);padding-right:var(--van-padding-md)}.van-calendar__confirm{height:var(--van-calendar-confirm-button-height);margin:var(--van-calendar-confirm-button-margin)}:root,:host{--van-address-edit-padding: var(--van-padding-sm);--van-address-edit-buttons-padding: var(--van-padding-xl) var(--van-padding-base);--van-address-edit-button-margin-bottom: var(--van-padding-sm);--van-address-edit-button-font-size: var(--van-font-size-lg)}.van-address-edit{padding:var(--van-address-edit-padding)}.van-address-edit__fields{overflow:hidden;border-radius:var(--van-padding-xs)}.van-address-edit__fields .van-field__label{width:4.1em}.van-address-edit__default{margin-top:var(--van-padding-sm);overflow:hidden;border-radius:var(--van-padding-xs)}.van-address-edit__buttons{padding:var(--van-address-edit-buttons-padding)}.van-address-edit__button{margin-bottom:var(--van-address-edit-button-margin-bottom);font-size:var(--van-address-edit-button-font-size)}.van-address-edit-detail__search-item{background:var(--van-gray-2)}.van-radio-group--horizontal,.van-checkbox-group--horizontal{display:flex;flex-wrap:wrap}:root,:host{--van-checkbox-size: 20px;--van-checkbox-border-color: var(--van-gray-5);--van-checkbox-duration: var(--van-duration-fast);--van-checkbox-label-margin: var(--van-padding-xs);--van-checkbox-label-color: var(--van-text-color);--van-checkbox-checked-icon-color: var(--van-primary-color);--van-checkbox-disabled-icon-color: var(--van-gray-5);--van-checkbox-disabled-label-color: var(--van-text-color-3);--van-checkbox-disabled-background: var(--van-border-color)}.van-checkbox{display:flex;align-items:center;overflow:hidden;cursor:pointer;-webkit-user-select:none;user-select:none}.van-checkbox--disabled{cursor:not-allowed}.van-checkbox--label-disabled{cursor:default}.van-checkbox--horizontal{margin-right:var(--van-padding-sm)}.van-checkbox__icon{flex:none;height:1em;font-size:var(--van-checkbox-size);line-height:1em;cursor:pointer}.van-checkbox__icon .van-icon{display:block;box-sizing:border-box;width:1.25em;height:1.25em;color:transparent;font-size:.8em;line-height:1.25;text-align:center;border:1px solid var(--van-checkbox-border-color);transition-duration:var(--van-checkbox-duration);transition-property:color,border-color,background-color}.van-checkbox__icon--round .van-icon{border-radius:100%}.van-checkbox__icon--indeterminate .van-icon{display:flex;align-items:center;justify-content:center;color:var(--van-white);border-color:var(--van-checkbox-checked-icon-color);background-color:var(--van-checkbox-checked-icon-color)}.van-checkbox__icon--checked .van-icon{color:var(--van-white);background-color:var(--van-checkbox-checked-icon-color);border-color:var(--van-checkbox-checked-icon-color)}.van-checkbox__icon--disabled{cursor:not-allowed}.van-checkbox__icon--disabled .van-icon{background-color:var(--van-checkbox-disabled-background);border-color:var(--van-checkbox-disabled-icon-color)}.van-checkbox__icon--disabled.van-checkbox__icon--checked .van-icon{color:var(--van-checkbox-disabled-icon-color)}.van-checkbox__label{margin-left:var(--van-checkbox-label-margin);color:var(--van-checkbox-label-color);line-height:var(--van-checkbox-size)}.van-checkbox__label--left{margin:0 var(--van-checkbox-label-margin) 0 0}.van-checkbox__label--disabled{color:var(--van-checkbox-disabled-label-color)}:root,:host{--van-coupon-margin: 0 var(--van-padding-sm) var(--van-padding-sm);--van-coupon-content-height: 84px;--van-coupon-content-padding: 14px 0;--van-coupon-content-text-color: var(--van-text-color);--van-coupon-background: var(--van-background-2);--van-coupon-active-background: var(--van-active-color);--van-coupon-radius: var(--van-radius-lg);--van-coupon-shadow: 0 0 4px rgba(0, 0, 0, .1);--van-coupon-head-width: 96px;--van-coupon-amount-color: var(--van-primary-color);--van-coupon-amount-font-size: 30px;--van-coupon-currency-font-size: 40%;--van-coupon-name-font-size: var(--van-font-size-md);--van-coupon-disabled-text-color: var(--van-text-color-2);--van-coupon-description-padding: var(--van-padding-xs) var(--van-padding-md);--van-coupon-description-border-color: var(--van-border-color);--van-coupon-checkbox-color: var(--van-primary-color)}.van-coupon{margin:var(--van-coupon-margin);overflow:hidden;background:var(--van-coupon-background);border-radius:var(--van-coupon-radius);box-shadow:var(--van-coupon-shadow)}.van-coupon:active{background-color:var(--van-coupon-active-background)}.van-coupon__content{display:flex;align-items:center;box-sizing:border-box;min-height:var(--van-coupon-content-height);padding:var(--van-coupon-content-padding);color:var(--van-coupon-content-text-color)}.van-coupon__head{position:relative;min-width:var(--van-coupon-head-width);padding:0 var(--van-padding-xs);color:var(--van-coupon-amount-color);text-align:center}.van-coupon__amount,.van-coupon__condition,.van-coupon__name,.van-coupon__valid{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.van-coupon__amount{margin-bottom:6px;font-weight:var(--van-font-bold);font-size:var(--van-coupon-amount-font-size);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.van-coupon__amount span{font-size:var(--van-coupon-currency-font-size)}.van-coupon__amount span:not(:empty){margin-left:2px}.van-coupon__condition{font-size:var(--van-font-size-sm);line-height:16px;white-space:pre-wrap}.van-coupon__body{position:relative;flex:1}.van-coupon__name{margin-bottom:10px;font-weight:var(--van-font-bold);font-size:var(--van-coupon-name-font-size);line-height:var(--van-line-height-md)}.van-coupon__valid{font-size:var(--van-font-size-sm)}.van-coupon__corner{position:absolute;top:0;right:var(--van-padding-md);bottom:0}.van-coupon__corner .van-checkbox__icon--checked .van-icon{background-color:var(--van-coupon-checkbox-color);border-color:var(--van-coupon-checkbox-color)}.van-coupon__description{padding:var(--van-coupon-description-padding);font-size:var(--van-font-size-sm);border-top:1px dashed var(--van-coupon-description-border-color)}.van-coupon--disabled:active{background-color:var(--van-coupon-background)}.van-coupon--disabled .van-coupon-item__content{height:calc(var(--van-coupon-content-height) - 10px)}.van-coupon--disabled .van-coupon__head{color:inherit}:root,:host{--van-radio-size: 20px;--van-radio-dot-size: 8px;--van-radio-border-color: var(--van-gray-5);--van-radio-duration: var(--van-duration-fast);--van-radio-label-margin: var(--van-padding-xs);--van-radio-label-color: var(--van-text-color);--van-radio-checked-icon-color: var(--van-primary-color);--van-radio-disabled-icon-color: var(--van-gray-5);--van-radio-disabled-label-color: var(--van-text-color-3);--van-radio-disabled-background: var(--van-border-color)}.van-radio{display:flex;align-items:center;overflow:hidden;cursor:pointer;-webkit-user-select:none;user-select:none}.van-radio--disabled{cursor:not-allowed}.van-radio--label-disabled{cursor:default}.van-radio--horizontal{margin-right:var(--van-padding-sm)}.van-radio__icon{flex:none;height:1em;font-size:var(--van-radio-size);line-height:1em;cursor:pointer}.van-radio__icon .van-icon{display:block;box-sizing:border-box;width:1.25em;height:1.25em;color:transparent;font-size:.8em;line-height:1.25;text-align:center;border:1px solid var(--van-radio-border-color);transition-duration:var(--van-radio-duration);transition-property:color,border-color,background-color}.van-radio__icon--round .van-icon{border-radius:100%}.van-radio__icon--dot{position:relative;border-radius:100%;box-sizing:border-box;width:var(--van-radio-size);height:var(--van-radio-size);border:1px solid var(--van-radio-border-color);transition-duration:var(--van-radio-duration);transition-property:border-color}.van-radio__icon--dot__icon{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);border-radius:100%;height:calc(100% - var(--van-radio-dot-size));width:calc(100% - var(--van-radio-dot-size));transition-duration:var(--van-radio-duration);transition-property:background-color}.van-radio__icon--checked .van-icon{color:var(--van-white);background-color:var(--van-radio-checked-icon-color);border-color:var(--van-radio-checked-icon-color)}.van-radio__icon--checked.van-radio__icon--dot{border-color:var(--van-radio-checked-icon-color)}.van-radio__icon--checked.van-radio__icon--dot .van-radio__icon--dot__icon{background:var(--van-radio-checked-icon-color)}.van-radio__icon--disabled{cursor:not-allowed}.van-radio__icon--disabled .van-icon{background-color:var(--van-radio-disabled-background);border-color:var(--van-radio-disabled-icon-color)}.van-radio__icon--disabled.van-radio__icon--checked .van-icon{color:var(--van-radio-disabled-icon-color)}.van-radio__label{margin-left:var(--van-radio-label-margin);color:var(--van-radio-label-color);line-height:var(--van-radio-size)}.van-radio__label--left{margin:0 var(--van-radio-label-margin) 0 0}.van-radio__label--disabled{color:var(--van-radio-disabled-label-color)}:root,:host{--van-contact-list-padding: var(--van-padding-sm) var(--van-padding-sm) 80px;--van-contact-list-edit-icon-size: 16px;--van-contact-list-add-button-z-index: 999;--van-contact-list-radio-color: var(--van-primary-color);--van-contact-list-item-padding: var(--van-padding-md)}.van-contact-list{box-sizing:border-box;height:100%;padding:var(--van-contact-list-padding)}.van-contact-list__item{padding:var(--van-contact-list-item-padding)}.van-contact-list__item-title{display:flex;align-items:center;padding-right:var(--van-padding-xl);padding-left:var(--van-padding-xs)}.van-contact-list__item-tag{flex:none;margin-left:var(--van-padding-xs);padding-top:0;padding-bottom:0;line-height:1.4em}.van-contact-list__group{box-sizing:border-box;height:100%;overflow-y:scroll;-webkit-overflow-scrolling:touch;border-radius:var(--van-radius-lg)}.van-contact-list__edit{font-size:var(--van-contact-list-edit-icon-size)}.van-contact-list__radio .van-radio__icon--checked .van-icon{background-color:var(--van-contact-list-radio-color);border-color:var(--van-contact-list-radio-color)}.van-contact-list__bottom{position:fixed;right:0;bottom:0;left:0;z-index:var(--van-contact-list-add-button-z-index);padding-left:var(--van-padding-md);padding-right:var(--van-padding-md);background-color:var(--van-background-2)}.van-contact-list__add{height:40px;margin:5px 0}:root,:host{--van-address-list-padding: var(--van-padding-sm) var(--van-padding-sm) 80px;--van-address-list-disabled-text-color: var(--van-text-color-2);--van-address-list-disabled-text-padding: calc(var(--van-padding-base) * 5) 0;--van-address-list-disabled-text-font-size: var(--van-font-size-md);--van-address-list-disabled-text-line-height: var(--van-line-height-md);--van-address-list-add-button-z-index: 999;--van-address-list-item-padding: var(--van-padding-sm);--van-address-list-item-text-color: var(--van-text-color);--van-address-list-item-disabled-text-color: var(--van-text-color-3);--van-address-list-item-font-size: 13px;--van-address-list-item-line-height: var(--van-line-height-sm);--van-address-list-radio-color: var(--van-primary-color);--van-address-list-edit-icon-size: 20px}.van-address-list{box-sizing:border-box;height:100%;padding:var(--van-address-list-padding)}.van-address-list__bottom{position:fixed;bottom:0;left:0;z-index:var(--van-address-list-add-button-z-index);box-sizing:border-box;width:100%;padding-left:var(--van-padding-md);padding-right:var(--van-padding-md);background-color:var(--van-background-2)}.van-address-list__add{height:40px;margin:5px 0}.van-address-list__disabled-text{padding:var(--van-address-list-disabled-text-padding);color:var(--van-address-list-disabled-text-color);font-size:var(--van-address-list-disabled-text-font-size);line-height:var(--van-address-list-disabled-text-line-height)}.van-address-item{padding:var(--van-address-list-item-padding);background-color:var(--van-background-2);border-radius:var(--van-radius-lg)}.van-address-item:not(:last-child){margin-bottom:var(--van-padding-sm)}.van-address-item__title{padding-right:44px}.van-address-item__name{display:flex;align-items:center;margin-bottom:var(--van-padding-xs);font-size:var(--van-font-size-lg);line-height:var(--van-line-height-lg)}.van-address-item__tag{flex:none;margin-left:var(--van-padding-xs);padding-top:0;padding-bottom:0;line-height:1.4em}.van-address-item__address{color:var(--van-address-list-item-text-color);font-size:var(--van-address-list-item-font-size);line-height:var(--van-address-list-item-line-height)}.van-address-item--disabled .van-address-item__name,.van-address-item--disabled .van-address-item__address{color:var(--van-address-list-item-disabled-text-color)}.van-address-item__edit{position:absolute;top:50%;right:var(--van-padding-md);color:var(--van-gray-6);font-size:var(--van-address-list-edit-icon-size);transform:translateY(-50%)}.van-address-item .van-cell{padding:0}.van-address-item .van-radio__label{margin-left:var(--van-padding-sm)}.van-address-item .van-radio__icon--checked .van-icon{background-color:var(--van-address-list-radio-color);border-color:var(--van-address-list-radio-color)}:root,:host{--van-barrage-font-size: 16px;--van-barrage-space: 10px;--van-barrage-font: inherit;--van-barrage-color: var(--van-white)}.van-barrage{position:relative;overflow:hidden}.van-barrage__item{position:absolute;top:0;right:0;z-index:99;padding-bottom:var(--van-barrage-space);opacity:.75;line-height:1;font-size:var(--van-barrage-font-size);font-family:var(--van-barrage-font);font-weight:700;white-space:nowrap;color:var(--van-barrage-color);text-shadow:1px 0 1px #000000,0 1px 1px #000000,0 -1px 1px #000000,-1px 0 1px #000000;-webkit-user-select:none;user-select:none;will-change:transform;transform:translate(110%)}@keyframes van-barrage{0%{transform:translate(110%)}to{transform:translate(var(--move-distance))}}:root,:host{--van-cell-group-background: var(--van-background-2);--van-cell-group-title-color: var(--van-text-color-2);--van-cell-group-title-padding: var(--van-padding-md) var(--van-padding-md);--van-cell-group-title-font-size: var(--van-font-size-md);--van-cell-group-title-line-height: 16px;--van-cell-group-inset-padding: 0 var(--van-padding-md);--van-cell-group-inset-radius: var(--van-radius-lg);--van-cell-group-inset-title-padding: var(--van-padding-md) var(--van-padding-md)}.van-cell-group{background:var(--van-cell-group-background)}.van-cell-group--inset{margin:var(--van-cell-group-inset-padding);border-radius:var(--van-cell-group-inset-radius);overflow:hidden}.van-cell-group__title{padding:var(--van-cell-group-title-padding);color:var(--van-cell-group-title-color);font-size:var(--van-cell-group-title-font-size);line-height:var(--van-cell-group-title-line-height)}.van-cell-group__title--inset{padding:var(--van-cell-group-inset-title-padding)}:root,:host{--van-circle-size: 100px;--van-circle-color: var(--van-primary-color);--van-circle-layer-color: var(--van-white);--van-circle-text-color: var(--van-text-color);--van-circle-text-font-weight: var(--van-font-bold);--van-circle-text-font-size: var(--van-font-size-md);--van-circle-text-line-height: var(--van-line-height-md)}.van-circle{position:relative;display:inline-block;width:var(--van-circle-size);height:var(--van-circle-size);text-align:center}.van-circle svg{position:absolute;top:0;left:0;width:100%;height:100%}.van-circle__layer{stroke:var(--van-circle-layer-color)}.van-circle__hover{fill:none;stroke:var(--van-circle-color);stroke-linecap:round}.van-circle__text{position:absolute;top:50%;left:0;box-sizing:border-box;width:100%;padding:0 var(--van-padding-base);color:var(--van-circle-text-color);font-weight:var(--van-circle-text-font-weight);font-size:var(--van-circle-text-font-size);line-height:var(--van-circle-text-line-height);transform:translateY(-50%)}.van-row{display:flex;flex-wrap:wrap}.van-row--nowrap{flex-wrap:nowrap}.van-row--justify-center{justify-content:center}.van-row--justify-end{justify-content:flex-end}.van-row--justify-space-between{justify-content:space-between}.van-row--justify-space-around{justify-content:space-around}.van-row--align-center{align-items:center}.van-row--align-bottom{align-items:flex-end}.van-col{display:block;box-sizing:border-box;min-height:1px}.van-col--1{flex:0 0 4.16666667%;max-width:4.16666667%}.van-col--offset-1{margin-left:4.16666667%}.van-col--2{flex:0 0 8.33333333%;max-width:8.33333333%}.van-col--offset-2{margin-left:8.33333333%}.van-col--3{flex:0 0 12.5%;max-width:12.5%}.van-col--offset-3{margin-left:12.5%}.van-col--4{flex:0 0 16.66666667%;max-width:16.66666667%}.van-col--offset-4{margin-left:16.66666667%}.van-col--5{flex:0 0 20.83333333%;max-width:20.83333333%}.van-col--offset-5{margin-left:20.83333333%}.van-col--6{flex:0 0 25%;max-width:25%}.van-col--offset-6{margin-left:25%}.van-col--7{flex:0 0 29.16666667%;max-width:29.16666667%}.van-col--offset-7{margin-left:29.16666667%}.van-col--8{flex:0 0 33.33333333%;max-width:33.33333333%}.van-col--offset-8{margin-left:33.33333333%}.van-col--9{flex:0 0 37.5%;max-width:37.5%}.van-col--offset-9{margin-left:37.5%}.van-col--10{flex:0 0 41.66666667%;max-width:41.66666667%}.van-col--offset-10{margin-left:41.66666667%}.van-col--11{flex:0 0 45.83333333%;max-width:45.83333333%}.van-col--offset-11{margin-left:45.83333333%}.van-col--12{flex:0 0 50%;max-width:50%}.van-col--offset-12{margin-left:50%}.van-col--13{flex:0 0 54.16666667%;max-width:54.16666667%}.van-col--offset-13{margin-left:54.16666667%}.van-col--14{flex:0 0 58.33333333%;max-width:58.33333333%}.van-col--offset-14{margin-left:58.33333333%}.van-col--15{flex:0 0 62.5%;max-width:62.5%}.van-col--offset-15{margin-left:62.5%}.van-col--16{flex:0 0 66.66666667%;max-width:66.66666667%}.van-col--offset-16{margin-left:66.66666667%}.van-col--17{flex:0 0 70.83333333%;max-width:70.83333333%}.van-col--offset-17{margin-left:70.83333333%}.van-col--18{flex:0 0 75%;max-width:75%}.van-col--offset-18{margin-left:75%}.van-col--19{flex:0 0 79.16666667%;max-width:79.16666667%}.van-col--offset-19{margin-left:79.16666667%}.van-col--20{flex:0 0 83.33333333%;max-width:83.33333333%}.van-col--offset-20{margin-left:83.33333333%}.van-col--21{flex:0 0 87.5%;max-width:87.5%}.van-col--offset-21{margin-left:87.5%}.van-col--22{flex:0 0 91.66666667%;max-width:91.66666667%}.van-col--offset-22{margin-left:91.66666667%}.van-col--23{flex:0 0 95.83333333%;max-width:95.83333333%}.van-col--offset-23{margin-left:95.83333333%}.van-col--24{flex:0 0 100%;max-width:100%}.van-col--offset-24{margin-left:100%}:root,:host{--van-count-down-text-color: var(--van-text-color);--van-count-down-font-size: var(--van-font-size-md);--van-count-down-line-height: var(--van-line-height-md)}.van-count-down{color:var(--van-count-down-text-color);font-size:var(--van-count-down-font-size);line-height:var(--van-count-down-line-height)}:root,:host{--van-empty-padding: var(--van-padding-xl) 0;--van-empty-image-size: 160px;--van-empty-description-margin-top: var(--van-padding-md);--van-empty-description-padding: 0 60px;--van-empty-description-color: var(--van-text-color-2);--van-empty-description-font-size: var(--van-font-size-md);--van-empty-description-line-height: var(--van-line-height-md);--van-empty-bottom-margin-top: 24px}.van-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;box-sizing:border-box;padding:var(--van-empty-padding)}.van-empty__image{width:var(--van-empty-image-size);height:var(--van-empty-image-size)}.van-empty__image img{width:100%;height:100%}.van-empty__description{margin-top:var(--van-empty-description-margin-top);padding:var(--van-empty-description-padding);color:var(--van-empty-description-color);font-size:var(--van-empty-description-font-size);line-height:var(--van-empty-description-line-height)}.van-empty__bottom{margin-top:var(--van-empty-bottom-margin-top)}.van-theme-dark .van-empty{opacity:.5}:root,:host{--van-coupon-list-background: var(--van-background);--van-coupon-list-field-padding: 5px 0 5px var(--van-padding-md);--van-coupon-list-exchange-button-height: 32px;--van-coupon-list-close-button-height: 40px;--van-coupon-list-empty-tip-color: var(--van-text-color-2);--van-coupon-list-empty-tip-font-size: var(--van-font-size-md);--van-coupon-list-empty-tip-line-height: var(--van-line-height-md)}.van-coupon-list{position:relative;height:100%;background:var(--van-coupon-list-background)}.van-coupon-list__field{padding:var(--van-coupon-list-field-padding)}.van-coupon-list__field .van-field__body{height:34px;padding-left:var(--van-padding-sm);line-height:34px;background:var(--van-background);border-radius:var(--van-radius-max)}.van-coupon-list__field .van-field__body::-webkit-input-placeholder{color:var(--van-text-color-3)}.van-coupon-list__field .van-field__body::placeholder{color:var(--van-text-color-3)}.van-coupon-list__field .van-field__clear{margin-right:0}.van-coupon-list__exchange-bar{display:flex;align-items:center;background-color:var(--van-background-2)}.van-coupon-list__exchange{flex:none;height:var(--van-coupon-list-exchange-button-height);font-size:var(--van-font-size-lg);line-height:calc(var(--van-coupon-list-exchange-button-height) - 2px);border:0}.van-coupon-list .van-tabs__wrap{box-shadow:0 6px 12px -12px var(--van-gray-6)}.van-coupon-list__list{box-sizing:border-box;padding:var(--van-padding-md) 0 var(--van-padding-lg);overflow-y:auto;-webkit-overflow-scrolling:touch}.van-coupon-list__list--with-bottom{padding-bottom:50px}.van-coupon-list__bottom{position:absolute;bottom:0;left:0;z-index:999;box-sizing:border-box;width:100%;padding:5px var(--van-padding-md);font-weight:var(--van-font-bold);background-color:var(--van-background-2)}.van-coupon-list__close{height:var(--van-coupon-list-close-button-height)}.van-coupon-list__empty-tip{color:var(--van-coupon-list-empty-tip-color);font-size:var(--van-coupon-list-empty-tip-font-size);line-height:var(--van-coupon-list-empty-tip-line-height)}:root,:host{--van-divider-margin: var(--van-padding-md) 0;--van-divider-vertical-margin: 0 var(--van-padding-xs);--van-divider-text-color: var(--van-text-color-2);--van-divider-font-size: var(--van-font-size-md);--van-divider-line-height: 24px;--van-divider-border-color: var(--van-border-color);--van-divider-content-padding: var(--van-padding-md);--van-divider-content-left-width: 10%;--van-divider-content-right-width: 10%}.van-divider{display:flex;align-items:center;margin:var(--van-divider-margin);color:var(--van-divider-text-color);font-size:var(--van-divider-font-size);line-height:var(--van-divider-line-height);border-color:var(--van-divider-border-color);border-style:solid;border-width:0}.van-divider:before,.van-divider:after{display:block;flex:1;box-sizing:border-box;height:1px;border-color:inherit;border-style:inherit;border-width:var(--van-border-width) 0 0}.van-divider:before{content:""}.van-divider--hairline:before,.van-divider--hairline:after{transform:scaleY(.5)}.van-divider--dashed{border-style:dashed}.van-divider--content-center:before,.van-divider--content-left:before,.van-divider--content-right:before{margin-right:var(--van-divider-content-padding)}.van-divider--content-center:after,.van-divider--content-left:after,.van-divider--content-right:after{margin-left:var(--van-divider-content-padding);content:""}.van-divider--content-left:before{max-width:var(--van-divider-content-left-width)}.van-divider--content-right:after{max-width:var(--van-divider-content-right-width)}.van-divider--vertical{display:inline-block;width:var(--van-border-width);height:1em;margin:var(--van-divider-vertical-margin);vertical-align:middle}.van-divider--vertical:before{height:100%;border-width:0 0 0 var(--van-border-width)}.van-divider--vertical:after{display:none}.van-divider--vertical.van-divider--hairline:before{transform:scaleX(.5)}:root,:host{--van-dropdown-menu-height: 48px;--van-dropdown-menu-background: var(--van-background-2);--van-dropdown-menu-shadow: 0 2px 12px rgba(100, 101, 102, .12);--van-dropdown-menu-title-font-size: 15px;--van-dropdown-menu-title-text-color: var(--van-text-color);--van-dropdown-menu-title-active-text-color: var(--van-primary-color);--van-dropdown-menu-title-disabled-text-color: var(--van-text-color-2);--van-dropdown-menu-title-padding: 0 var(--van-padding-xs);--van-dropdown-menu-title-line-height: var(--van-line-height-lg);--van-dropdown-menu-option-active-color: var(--van-primary-color);--van-dropdown-menu-option-disabled-color: var(--van-text-color-3);--van-dropdown-menu-content-max-height: 80%}.van-dropdown-menu{-webkit-user-select:none;user-select:none}.van-dropdown-menu__bar{position:relative;display:flex;height:var(--van-dropdown-menu-height);background:var(--van-dropdown-menu-background);box-shadow:var(--van-dropdown-menu-shadow)}.van-dropdown-menu__bar--opened{z-index:calc(var(--van-dropdown-item-z-index) + 1)}.van-dropdown-menu__bar--scrollable{padding-left:var(--van-padding-base);padding-right:var(--van-padding-xs);overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch}.van-dropdown-menu__bar--scrollable::-webkit-scrollbar{display:none}.van-dropdown-menu__item{display:flex;flex:1;align-items:center;justify-content:center;min-width:0}.van-dropdown-menu__item--disabled .van-dropdown-menu__title{color:var(--van-dropdown-menu-title-disabled-text-color)}.van-dropdown-menu__item--grow{flex:1 0 auto;padding-left:var(--van-padding-base);padding-right:var(--van-padding-sm)}.van-dropdown-menu__title{position:relative;box-sizing:border-box;max-width:100%;padding:var(--van-dropdown-menu-title-padding);color:var(--van-dropdown-menu-title-text-color);font-size:var(--van-dropdown-menu-title-font-size);line-height:var(--van-dropdown-menu-title-line-height)}.van-dropdown-menu__title:after{position:absolute;top:50%;right:-4px;margin-top:-5px;border:3px solid;border-color:transparent transparent var(--van-gray-4) var(--van-gray-4);transform:rotate(-45deg);opacity:.8;content:""}.van-dropdown-menu__title--active{color:var(--van-dropdown-menu-title-active-text-color)}.van-dropdown-menu__title--active:after{border-color:transparent transparent currentColor currentColor}.van-dropdown-menu__title--down:after{margin-top:-1px;transform:rotate(135deg)}:root,:host{--van-dropdown-item-z-index: 10}.van-dropdown-item{position:fixed;right:0;left:0;z-index:var(--van-dropdown-item-z-index);overflow:hidden}.van-dropdown-item__icon{display:block;line-height:inherit}.van-dropdown-item__option{text-align:left}.van-dropdown-item__option--active,.van-dropdown-item__option--active .van-dropdown-item__icon{color:var(--van-dropdown-menu-option-active-color)}.van-dropdown-item__option--disabled,.van-dropdown-item__option--disabled .van-dropdown-item__icon{color:var(--van-dropdown-menu-option-disabled-color)}.van-dropdown-item--up{top:0}.van-dropdown-item--down{bottom:0}.van-dropdown-item__content{position:absolute;max-height:var(--van-dropdown-menu-content-max-height)}:root,:host{--van-floating-panel-border-radius: 16px;--van-floating-panel-header-height: 30px;--van-floating-panel-z-index: 999;--van-floating-panel-background: var(--van-background-2);--van-floating-panel-bar-width: 20px;--van-floating-panel-bar-height: 3px;--van-floating-panel-bar-color: var(--van-gray-5)}.van-floating-panel{position:fixed;left:0;bottom:0;width:100vw;z-index:var(--van-floating-panel-z-index);display:flex;flex-direction:column;touch-action:none;border-top-left-radius:var(--van-floating-panel-border-radius);border-top-right-radius:var(--van-floating-panel-border-radius);background:var(--van-floating-panel-background);will-change:transform}.van-floating-panel:after{content:"";display:block;position:absolute;bottom:-100vh;height:100vh;width:100vw;background-color:inherit}.van-floating-panel__header{height:var(--van-floating-panel-header-height);display:flex;justify-content:center;align-items:center;cursor:-webkit-grab;cursor:grab;-webkit-user-select:none;user-select:none}.van-floating-panel__header-bar{height:var(--van-floating-panel-bar-height);width:var(--van-floating-panel-bar-width);border-radius:var(--van-radius-md);background:var(--van-floating-panel-bar-color)}.van-floating-panel__content{flex:1;overflow-y:auto;background-color:var(--van-floating-panel-background)}.van-grid{display:flex;flex-wrap:wrap}:root,:host{--van-grid-item-content-padding: var(--van-padding-md) var(--van-padding-xs);--van-grid-item-content-background: var(--van-background-2);--van-grid-item-content-active-color: var(--van-active-color);--van-grid-item-icon-size: 28px;--van-grid-item-text-color: var(--van-text-color);--van-grid-item-text-font-size: var(--van-font-size-sm)}.van-grid-item{position:relative;box-sizing:border-box}.van-grid-item--square{height:0}.van-grid-item__icon{font-size:var(--van-grid-item-icon-size)}.van-grid-item__text{color:var(--van-grid-item-text-color);font-size:var(--van-grid-item-text-font-size);line-height:1.5;word-break:break-all}.van-grid-item__icon+.van-grid-item__text{margin-top:var(--van-padding-xs)}.van-grid-item__content{display:flex;flex-direction:column;box-sizing:border-box;height:100%;padding:var(--van-grid-item-content-padding);background:var(--van-grid-item-content-background)}.van-grid-item__content:after{z-index:1;border-width:0 var(--van-border-width) var(--van-border-width) 0}.van-grid-item__content--square{position:absolute;top:0;right:0;left:0}.van-grid-item__content--center{align-items:center;justify-content:center}.van-grid-item__content--horizontal{flex-direction:row}.van-grid-item__content--horizontal .van-grid-item__text{margin:0 0 0 var(--van-padding-xs)}.van-grid-item__content--reverse{flex-direction:column-reverse}.van-grid-item__content--reverse .van-grid-item__text{margin:0 0 var(--van-padding-xs)}.van-grid-item__content--horizontal.van-grid-item__content--reverse{flex-direction:row-reverse}.van-grid-item__content--horizontal.van-grid-item__content--reverse .van-grid-item__text{margin:0 var(--van-padding-xs) 0 0}.van-grid-item__content--surround:after{border-width:var(--van-border-width)}.van-grid-item__content--clickable{cursor:pointer}.van-grid-item__content--clickable:active{background-color:var(--van-grid-item-content-active-color)}:root,:host{--van-highlight-tag-color: var(--van-primary-color)}.van-highlight__tag{color:var(--van-highlight-tag-color)}:root,:host{--van-index-bar-sidebar-z-index: 2;--van-index-bar-index-font-size: var(--van-font-size-xs);--van-index-bar-index-line-height: var(--van-line-height-xs);--van-index-bar-index-active-color: var(--van-primary-color)}.van-index-bar__sidebar{position:fixed;top:50%;right:0;z-index:var(--van-index-bar-sidebar-z-index);display:flex;flex-direction:column;text-align:center;transform:translateY(-50%);cursor:pointer;-webkit-user-select:none;user-select:none}.van-index-bar__index{padding:0 var(--van-padding-xs) 0 var(--van-padding-md);font-weight:var(--van-font-bold);font-size:var(--van-index-bar-index-font-size);line-height:var(--van-index-bar-index-line-height)}.van-index-bar__index--active{color:var(--van-index-bar-index-active-color);font-weight:700}:root,:host{--van-index-anchor-z-index: 1;--van-index-anchor-padding: 0 var(--van-padding-md);--van-index-anchor-text-color: var(--van-text-color);--van-index-anchor-font-weight: var(--van-font-bold);--van-index-anchor-font-size: var(--van-font-size-md);--van-index-anchor-line-height: 32px;--van-index-anchor-background: transparent;--van-index-anchor-sticky-text-color: var(--van-primary-color);--van-index-anchor-sticky-background: var(--van-background-2)}.van-index-anchor{z-index:var(--van-index-anchor-z-index);box-sizing:border-box;padding:var(--van-index-anchor-padding);color:var(--van-index-anchor-text-color);font-weight:var(--van-index-anchor-font-weight);font-size:var(--van-index-anchor-font-size);line-height:var(--van-index-anchor-line-height);background:var(--van-index-anchor-background)}.van-index-anchor--sticky{position:fixed;top:0;right:0;left:0;color:var(--van-index-anchor-sticky-text-color);background:var(--van-index-anchor-sticky-background)}:root,:host{--van-pagination-height: 40px;--van-pagination-font-size: var(--van-font-size-md);--van-pagination-item-width: 36px;--van-pagination-item-default-color: var(--van-primary-color);--van-pagination-item-disabled-color: var(--van-gray-7);--van-pagination-item-disabled-background: var(--van-background);--van-pagination-background: var(--van-background-2);--van-pagination-desc-color: var(--van-gray-7);--van-pagination-disabled-opacity: var(--van-disabled-opacity)}.van-pagination{font-size:var(--van-pagination-font-size)}.van-pagination__items{display:flex}.van-pagination__item,.van-pagination__page-desc{display:flex;align-items:center;justify-content:center}.van-pagination__item{flex:1;box-sizing:border-box;min-width:var(--van-pagination-item-width);height:var(--van-pagination-height);color:var(--van-pagination-item-default-color);background:var(--van-pagination-background);cursor:pointer;-webkit-user-select:none;user-select:none}.van-pagination__item button{flex:1;height:100%;border:none;padding:0;background:transparent}.van-pagination__item button[disabled]{cursor:not-allowed}.van-pagination__item:active{color:var(--van-white);background-color:var(--van-pagination-item-default-color)}.van-pagination__item:not(:last-child):after{border-right-width:0}.van-pagination__item--active{color:var(--van-white);background-color:var(--van-pagination-item-default-color)}.van-pagination__item--page{flex-grow:0}.van-pagination__item--prev,.van-pagination__item--next{padding:0 var(--van-padding-base);cursor:pointer}.van-pagination__item--border:first-child:after{border-right-width:var(--van-border-width)}.van-pagination__item--disabled,.van-pagination__item--disabled:active{color:var(--van-pagination-item-disabled-color);background-color:var(--van-pagination-item-disabled-background);opacity:var(--van-pagination-disabled-opacity)}.van-pagination__page-desc{flex:1;height:var(--van-pagination-height);color:var(--van-pagination-desc-color)}:root,:host{--van-password-input-height: 50px;--van-password-input-margin: 0 var(--van-padding-md);--van-password-input-font-size: 20px;--van-password-input-radius: 6px;--van-password-input-background: var(--van-background-2);--van-password-input-info-color: var(--van-text-color-2);--van-password-input-info-font-size: var(--van-font-size-md);--van-password-input-error-info-color: var(--van-danger-color);--van-password-input-dot-size: 10px;--van-password-input-dot-color: var(--van-text-color);--van-password-input-text-color: var(--van-text-color);--van-password-input-cursor-color: var(--van-text-color);--van-password-input-cursor-width: 1px;--van-password-input-cursor-height: 40%;--van-password-input-cursor-duration: 1s}.van-password-input{position:relative;margin:var(--van-password-input-margin);-webkit-user-select:none;user-select:none}.van-password-input__info,.van-password-input__error-info{margin-top:var(--van-padding-md);font-size:var(--van-password-input-info-font-size);text-align:center}.van-password-input__info{color:var(--van-password-input-info-color)}.van-password-input__error-info{color:var(--van-password-input-error-info-color)}.van-password-input__security{display:flex;width:100%;height:var(--van-password-input-height);cursor:pointer}.van-password-input__security:after{border-radius:var(--van-password-input-radius)}.van-password-input__security li{position:relative;display:flex;flex:1;align-items:center;justify-content:center;height:100%;color:var(--van-password-input-text-color);font-size:var(--van-password-input-font-size);line-height:1.2;background:var(--van-password-input-background)}.van-password-input__security i{position:absolute;top:50%;left:50%;width:var(--van-password-input-dot-size);height:var(--van-password-input-dot-size);background:var(--van-password-input-dot-color);border-radius:100%;transform:translate(-50%,-50%);visibility:hidden}.van-password-input__cursor{position:absolute;top:50%;left:50%;width:var(--van-password-input-cursor-width);height:var(--van-password-input-cursor-height);background:var(--van-password-input-cursor-color);transform:translate(-50%,-50%);animation:var(--van-password-input-cursor-duration) van-cursor-flicker infinite}@keyframes van-cursor-flicker{0%{opacity:0}50%{opacity:1}to{opacity:0}}:root,:host{--van-progress-height: 4px;--van-progress-color: var(--van-primary-color);--van-progress-inactive-color: var(--van-gray-5);--van-progress-background: var(--van-gray-3);--van-progress-pivot-padding: 0 5px;--van-progress-pivot-text-color: var(--van-white);--van-progress-pivot-font-size: var(--van-font-size-xs);--van-progress-pivot-line-height: 1.6;--van-progress-pivot-background: var(--van-primary-color)}.van-progress{position:relative;height:var(--van-progress-height);background:var(--van-progress-background);border-radius:var(--van-progress-height)}.van-progress__portion{position:absolute;left:0;width:100%;height:100%;background:var(--van-progress-color);border-radius:inherit;transform-origin:0;transition:all var(--van-duration-base) var(--van-ease-out)}.van-progress__portion--inactive{background:var(--van-progress-inactive-color)}.van-progress__pivot{position:absolute;top:50%;box-sizing:border-box;min-width:3.6em;padding:var(--van-progress-pivot-padding);color:var(--van-progress-pivot-text-color);font-size:var(--van-progress-pivot-font-size);line-height:var(--van-progress-pivot-line-height);text-align:center;word-break:keep-all;background:var(--van-progress-pivot-background);border-radius:1em;transition:all var(--van-duration-base) var(--van-ease-out)}.van-progress__pivot--inactive{background:var(--van-progress-inactive-color)}:root,:host{--van-rolling-text-background: inherit;--van-rolling-text-color: var(--van-text-color);--van-rolling-text-font-size: var(--van-font-size-md);--van-rolling-text-gap: 0px;--van-rolling-text-item-width: 15px;--van-rolling-text-item-border-radius: 0px}.van-rolling-text{display:inline-flex;justify-content:center;align-items:center;font-size:var(--van-rolling-text-font-size);color:var(--van-rolling-text-color)}.van-rolling-text-item{margin-right:var(--van-rolling-text-gap);width:var(--van-rolling-text-item-width);border-radius:var(--van-rolling-text-item-border-radius);background:var(--van-rolling-text-background);overflow:hidden}.van-rolling-text-item:last-child{margin-right:0}.van-rolling-text-item__box{overflow:hidden}.van-rolling-text-item__box--animate{animation:van-up var(--van-duration) ease-in-out var(--van-delay);animation-iteration-count:1;animation-fill-mode:both}.van-rolling-text-item__item{text-align:center}.van-rolling-text-item--down .van-rolling-text-item__box{transform:translateY(var(--van-translate))}.van-rolling-text-item--down .van-rolling-text-item__box--animate{animation-name:van-down}@keyframes van-down{0%{transform:translateY(var(--van-translate))}to{transform:translateY(0)}}@keyframes van-up{0%{transform:translateY(0)}to{transform:translateY(var(--van-translate))}}:root,:host{--van-sidebar-width: 80px}.van-sidebar{width:var(--van-sidebar-width);overflow-y:auto;-webkit-overflow-scrolling:touch}:root,:host{--van-sidebar-font-size: var(--van-font-size-md);--van-sidebar-line-height: var(--van-line-height-md);--van-sidebar-text-color: var(--van-text-color);--van-sidebar-disabled-text-color: var(--van-text-color-3);--van-sidebar-padding: 20px var(--van-padding-sm);--van-sidebar-active-color: var(--van-active-color);--van-sidebar-background: var(--van-background);--van-sidebar-selected-font-weight: var(--van-font-bold);--van-sidebar-selected-text-color: var(--van-text-color);--van-sidebar-selected-border-width: 4px;--van-sidebar-selected-border-height: 16px;--van-sidebar-selected-border-color: var(--van-primary-color);--van-sidebar-selected-background: var(--van-background-2)}.van-sidebar-item{position:relative;display:block;box-sizing:border-box;padding:var(--van-sidebar-padding);overflow:hidden;color:var(--van-sidebar-text-color);font-size:var(--van-sidebar-font-size);line-height:var(--van-sidebar-line-height);background:var(--van-sidebar-background);cursor:pointer;-webkit-user-select:none;user-select:none}.van-sidebar-item:active{background-color:var(--van-sidebar-active-color)}.van-sidebar-item:not(:last-child):after{border-bottom-width:1px}.van-sidebar-item__text{word-break:break-all}.van-sidebar-item--select{color:var(--van-sidebar-selected-text-color);font-weight:var(--van-sidebar-selected-font-weight)}.van-sidebar-item--select,.van-sidebar-item--select:active{background-color:var(--van-sidebar-selected-background)}.van-sidebar-item--select:before{position:absolute;top:50%;left:0;width:var(--van-sidebar-selected-border-width);height:var(--van-sidebar-selected-border-height);background-color:var(--van-sidebar-selected-border-color);transform:translateY(-50%);content:""}.van-sidebar-item--disabled{color:var(--van-sidebar-disabled-text-color);cursor:not-allowed}.van-sidebar-item--disabled:active{background-color:var(--van-sidebar-background)}:root,:host{--van-tree-select-font-size: var(--van-font-size-md);--van-tree-select-nav-background: var(--van-background);--van-tree-select-content-background: var(--van-background-2);--van-tree-select-nav-item-padding: 14px var(--van-padding-sm);--van-tree-select-item-height: 48px;--van-tree-select-item-active-color: var(--van-primary-color);--van-tree-select-item-disabled-color: var(--van-gray-5);--van-tree-select-item-selected-size: 16px}.van-tree-select{position:relative;display:flex;font-size:var(--van-tree-select-font-size)}.van-tree-select__nav{flex:1;overflow-y:auto;background:var(--van-tree-select-nav-background);-webkit-overflow-scrolling:touch}.van-tree-select__nav-item{padding:var(--van-tree-select-nav-item-padding)}.van-tree-select__content{flex:2;overflow-y:auto;background:var(--van-tree-select-content-background);-webkit-overflow-scrolling:touch}.van-tree-select__item{position:relative;padding:0 32px 0 var(--van-padding-md);font-weight:var(--van-font-bold);line-height:var(--van-tree-select-item-height);-webkit-user-select:none;user-select:none;cursor:pointer}.van-tree-select__item--active{color:var(--van-tree-select-item-active-color)}.van-tree-select__item:active{background-color:var(--van-active-color)}.van-tree-select__item--disabled{color:var(--van-tree-select-item-disabled-color);cursor:not-allowed}.van-tree-select__item--disabled:active{background-color:transparent}.van-tree-select__selected{position:absolute;top:50%;right:var(--van-padding-md);margin-top:calc(var(--van-padding-xs) * -1);font-size:var(--van-tree-select-item-selected-size)}:root,:host{--van-skeleton-title-width: 40%}.van-skeleton-title{height:var(--van-skeleton-paragraph-height);background:var(--van-skeleton-paragraph-background)}.van-skeleton-title--round{border-radius:var(--van-radius-max)}.van-skeleton-title{width:var(--van-skeleton-title-width);margin:0}.van-skeleton-title+.van-skeleton-paragraph{margin-top:20px}:root,:host{--van-skeleton-avatar-size: 32px;--van-skeleton-avatar-background: var(--van-active-color)}.van-skeleton-avatar{flex-shrink:0;width:var(--van-skeleton-avatar-size);height:var(--van-skeleton-avatar-size);margin-right:var(--van-padding-md);background:var(--van-skeleton-avatar-background)}.van-skeleton-avatar--round{border-radius:var(--van-radius-max)}.van-skeleton-avatar+.van-skeleton__content{padding-top:var(--van-padding-xs)}:root,:host{--van-skeleton-paragraph-height: 16px;--van-skeleton-paragraph-background: var(--van-active-color);--van-skeleton-paragraph-margin-top: var(--van-padding-sm)}.van-skeleton-paragraph{height:var(--van-skeleton-paragraph-height);background:var(--van-skeleton-paragraph-background)}.van-skeleton-paragraph--round{border-radius:var(--van-radius-max)}.van-skeleton-paragraph:not(:first-child){margin-top:var(--van-skeleton-paragraph-margin-top)}:root,:host{--van-skeleton-duration: 1.2s}.van-skeleton{display:flex;padding:0 var(--van-padding-md)}.van-skeleton__content{width:100%}.van-skeleton--animate{animation:van-skeleton-blink var(--van-skeleton-duration) ease-in-out infinite}@keyframes van-skeleton-blink{50%{opacity:.6}}:root,:host{--van-slider-active-background: var(--van-primary-color);--van-slider-inactive-background: var(--van-gray-3);--van-slider-disabled-opacity: var(--van-disabled-opacity);--van-slider-bar-height: 2px;--van-slider-button-width: 24px;--van-slider-button-height: 24px;--van-slider-button-radius: 50%;--van-slider-button-background: var(--van-white);--van-slider-button-shadow: 0 1px 2px rgba(0, 0, 0, .5)}.van-theme-dark{--van-slider-inactive-background: var(--van-background-3)}.van-slider{position:relative;width:100%;height:var(--van-slider-bar-height);background:var(--van-slider-inactive-background);border-radius:var(--van-radius-max);cursor:pointer}.van-slider:before{position:absolute;top:calc(var(--van-padding-xs) * -1);right:0;bottom:calc(var(--van-padding-xs) * -1);left:0;content:""}.van-slider__bar{position:absolute;width:100%;height:100%;background:var(--van-slider-active-background);border-radius:inherit;transition:all var(--van-duration-fast)}.van-slider__button{width:var(--van-slider-button-width);height:var(--van-slider-button-height);background:var(--van-slider-button-background);border-radius:var(--van-slider-button-radius);box-shadow:var(--van-slider-button-shadow)}.van-slider__button-wrapper{position:absolute;cursor:-webkit-grab;cursor:grab;top:50%}.van-slider__button-wrapper--right{right:0;transform:translate3d(50%,-50%,0)}.van-slider__button-wrapper--left{left:0;transform:translate3d(-50%,-50%,0)}.van-slider--disabled{cursor:not-allowed;opacity:var(--van-slider-disabled-opacity)}.van-slider--disabled .van-slider__button-wrapper{cursor:not-allowed}.van-slider--vertical{display:inline-block;width:var(--van-slider-bar-height);height:100%}.van-slider--vertical .van-slider__button-wrapper--right{top:auto;right:50%;bottom:0;transform:translate3d(50%,50%,0)}.van-slider--vertical .van-slider__button-wrapper--left{top:0;right:50%;left:auto;transform:translate3d(50%,-50%,0)}.van-slider--vertical:before{top:0;right:calc(var(--van-padding-xs) * -1);bottom:0;left:calc(var(--van-padding-xs) * -1)}.van-space{display:inline-flex}.van-space--horizontal .van-space-item{display:flex;align-items:center}.van-space--vertical{flex-direction:column}.van-space--align-baseline{align-items:baseline}.van-space--align-start{align-items:flex-start}.van-space--align-end{align-items:flex-end}.van-space--align-center{align-items:center}.van-space--wrap{flex-wrap:wrap}.van-space--fill{display:flex}:root,:host{--van-steps-background: var(--van-background-2)}.van-steps{overflow:hidden;background-color:var(--van-steps-background)}.van-steps--horizontal{padding:10px 10px 0}.van-steps--horizontal .van-steps__items{position:relative;display:flex;margin:0 0 10px;padding-bottom:22px}.van-steps--vertical{padding:0 0 0 var(--van-padding-xl)}:root,:host{--van-step-text-color: var(--van-text-color-2);--van-step-active-color: var(--van-primary-color);--van-step-process-text-color: var(--van-text-color);--van-step-font-size: var(--van-font-size-md);--van-step-line-color: var(--van-border-color);--van-step-finish-line-color: var(--van-primary-color);--van-step-finish-text-color: var(--van-text-color);--van-step-icon-size: 12px;--van-step-circle-size: 5px;--van-step-circle-color: var(--van-gray-6);--van-step-horizontal-title-font-size: var(--van-font-size-sm)}.van-step{position:relative;flex:1;color:var(--van-step-text-color);font-size:var(--van-step-font-size)}.van-step__circle{display:block;width:var(--van-step-circle-size);height:var(--van-step-circle-size);background-color:var(--van-step-circle-color);border-radius:50%}.van-step__line{position:absolute;background-color:var(--van-step-line-color);transition:background-color var(--van-duration-base)}.van-step--horizontal{float:left}.van-step--horizontal:first-child .van-step__title{margin-left:0;transform:none}.van-step--horizontal:last-child:not(:first-child){position:absolute;right:1px;width:auto}.van-step--horizontal:last-child:not(:first-child) .van-step__title{margin-left:0;transform:none}.van-step--horizontal:last-child:not(:first-child) .van-step__circle-container{right:-9px;left:auto}.van-step--horizontal .van-step__circle-container{position:absolute;top:30px;left:calc(var(--van-padding-xs) * -1);z-index:1;padding:0 var(--van-padding-xs);background-color:var(--van-background-2);transform:translateY(-50%)}.van-step--horizontal .van-step__title{display:inline-block;margin-left:3px;font-size:var(--van-step-horizontal-title-font-size);transform:translate(-50%)}.van-step--horizontal .van-step__line{top:30px;left:0;width:100%;height:1px}.van-step--horizontal .van-step__icon{display:block;font-size:var(--van-step-icon-size)}.van-step--horizontal .van-step--process{color:var(--van-step-process-text-color)}.van-step--vertical{display:block;float:none;padding:10px 10px 10px 0;line-height:var(--van-line-height-sm)}.van-step--vertical:not(:last-child):after{border-bottom-width:1px}.van-step--vertical .van-step__circle-container{position:absolute;top:19px;left:-15px;z-index:1;font-size:var(--van-step-icon-size);line-height:1;transform:translate(-50%,-50%)}.van-step--vertical .van-step__line{top:16px;left:-15px;width:1px;height:100%}.van-step:last-child .van-step__line{width:0}.van-step--finish{color:var(--van-step-finish-text-color)}.van-step--finish .van-step__circle,.van-step--finish .van-step__line{background-color:var(--van-step-finish-line-color)}.van-step__icon,.van-step__title{transition:color var(--van-duration-base)}.van-step__icon--active,.van-step__title--active,.van-step__icon--finish,.van-step__title--finish{color:var(--van-step-active-color)}:root,:host{--van-stepper-background: var(--van-active-color);--van-stepper-button-icon-color: var(--van-text-color);--van-stepper-button-disabled-color: var(--van-background);--van-stepper-button-disabled-icon-color: var(--van-gray-5);--van-stepper-button-round-theme-color: var(--van-primary-color);--van-stepper-input-width: 32px;--van-stepper-input-height: 28px;--van-stepper-input-font-size: var(--van-font-size-md);--van-stepper-input-line-height: normal;--van-stepper-input-text-color: var(--van-text-color);--van-stepper-input-disabled-text-color: var(--van-text-color-3);--van-stepper-input-disabled-background: var(--van-active-color);--van-stepper-radius: var(--van-radius-md)}.van-stepper{display:inline-block;-webkit-user-select:none;user-select:none}.van-stepper__minus,.van-stepper__plus{position:relative;box-sizing:border-box;width:var(--van-stepper-input-height);height:var(--van-stepper-input-height);margin:0;padding:0;color:var(--van-stepper-button-icon-color);vertical-align:middle;background:var(--van-stepper-background);border:0}.van-stepper__minus:before,.van-stepper__plus:before{width:50%;height:1px}.van-stepper__minus:after,.van-stepper__plus:after{width:1px;height:50%}.van-stepper__minus:before,.van-stepper__plus:before,.van-stepper__minus:after,.van-stepper__plus:after{position:absolute;top:50%;left:50%;background-color:currentColor;transform:translate(-50%,-50%);content:""}.van-stepper__minus--disabled,.van-stepper__plus--disabled{color:var(--van-stepper-button-disabled-icon-color);background-color:var(--van-stepper-button-disabled-color);cursor:not-allowed}.van-stepper__minus{border-radius:var(--van-stepper-radius) 0 0 var(--van-stepper-radius)}.van-stepper__minus:after{display:none}.van-stepper__plus{border-radius:0 var(--van-stepper-radius) var(--van-stepper-radius) 0}.van-stepper__input{box-sizing:border-box;width:var(--van-stepper-input-width);height:var(--van-stepper-input-height);margin:0 2px;padding:0;color:var(--van-stepper-input-text-color);font-size:var(--van-stepper-input-font-size);line-height:var(--van-stepper-input-line-height);text-align:center;vertical-align:middle;background:var(--van-stepper-background);border:0;border-width:1px 0;border-radius:0;-webkit-appearance:none}.van-stepper__input:disabled{color:var(--van-stepper-input-disabled-text-color);background-color:var(--van-stepper-input-disabled-background);-webkit-text-fill-color:var(--van-stepper-input-disabled-text-color);opacity:1}.van-stepper__input:read-only{cursor:default}.van-stepper--round .van-stepper__input{background-color:transparent}.van-stepper--round .van-stepper__plus,.van-stepper--round .van-stepper__minus{border-radius:100%}.van-stepper--round .van-stepper__plus--disabled,.van-stepper--round .van-stepper__minus--disabled{opacity:.3;cursor:not-allowed}.van-stepper--round .van-stepper__plus{color:var(--van-white);background:var(--van-stepper-button-round-theme-color)}.van-stepper--round .van-stepper__minus{color:var(--van-stepper-button-round-theme-color);background-color:var(--van-background-2);border:1px solid var(--van-stepper-button-round-theme-color)}.van-swipe-cell{position:relative;overflow:hidden;cursor:-webkit-grab;cursor:grab}.van-swipe-cell__wrapper{transition-timing-function:cubic-bezier(.18,.89,.32,1);transition-property:transform}.van-swipe-cell__left,.van-swipe-cell__right{position:absolute;top:0;height:100%}.van-swipe-cell__left{left:0;transform:translate3d(-100%,0,0)}.van-swipe-cell__right{right:0;transform:translate3d(100%,0,0)}:root,:host{--van-tabbar-height: 50px;--van-tabbar-z-index: 1;--van-tabbar-background: var(--van-background-2)}.van-tabbar{z-index:var(--van-tabbar-z-index);display:flex;box-sizing:content-box;width:100%;height:var(--van-tabbar-height);background:var(--van-tabbar-background)}.van-tabbar--fixed{position:fixed;bottom:0;left:0}:root,:host{--van-tabbar-item-font-size: var(--van-font-size-sm);--van-tabbar-item-text-color: var(--van-text-color);--van-tabbar-item-active-color: var(--van-primary-color);--van-tabbar-item-active-background: var(--van-background-2);--van-tabbar-item-line-height: 1;--van-tabbar-item-icon-size: 22px;--van-tabbar-item-icon-margin-bottom: var(--van-padding-base)}.van-tabbar-item{display:flex;flex:1;flex-direction:column;align-items:center;justify-content:center;color:var(--van-tabbar-item-text-color);font-size:var(--van-tabbar-item-font-size);line-height:var(--van-tabbar-item-line-height);cursor:pointer}.van-tabbar-item__icon{margin-bottom:var(--van-tabbar-item-icon-margin-bottom);font-size:var(--van-tabbar-item-icon-size)}.van-tabbar-item__icon .van-icon{display:block}.van-tabbar-item__icon .van-badge{margin-top:var(--van-padding-base)}.van-tabbar-item__icon img{display:block;height:20px}.van-tabbar-item--active{color:var(--van-tabbar-item-active-color);background-color:var(--van-tabbar-item-active-background)}:root,:host{--van-text-ellipsis-line-height: 1.6;--van-text-ellipsis-action-color: var(--van-blue)}.van-text-ellipsis{line-height:var(--van-text-ellipsis-line-height);white-space:pre-wrap;overflow-wrap:break-word}.van-text-ellipsis__action{cursor:pointer;color:var(--van-text-ellipsis-action-color)}.van-text-ellipsis__action:active{opacity:var(--van-active-opacity)}:root,:host{--van-watermark-z-index: 100}.van-watermark{position:absolute;height:100%;width:100%;left:0;top:0;z-index:var(--van-watermark-z-index);background-repeat:repeat;pointer-events:none}.van-watermark__wrapper{display:none}.van-watermark--full{position:fixed} + diff --git a/app/src/main/res/raw/index_js.js b/app/src/main/res/raw/index_js.js new file mode 100644 index 0000000..d8dbcfb --- /dev/null +++ b/app/src/main/res/raw/index_js.js @@ -0,0 +1,43 @@ +/** +* vue v3.4.23 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/ +var Vue=function(e){"use strict"; +/*! #__NO_SIDE_EFFECTS__ */function t(e,t){const n=new Set(e.split(","));return t?e=>n.has(e.toLowerCase()):e=>n.has(e)}const n={},s=[],o=()=>{},r=()=>!1,i=e=>111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),l=e=>e.startsWith("onUpdate:"),c=Object.assign,a=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},u=Object.prototype.hasOwnProperty,d=(e,t)=>u.call(e,t),p=Array.isArray,h=e=>"[object Map]"===x(e),f=e=>"[object Set]"===x(e),m=e=>"[object Date]"===x(e),g=e=>"function"==typeof e,v=e=>"string"==typeof e,y=e=>"symbol"==typeof e,b=e=>null!==e&&"object"==typeof e,_=e=>(b(e)||g(e))&&g(e.then)&&g(e.catch),S=Object.prototype.toString,x=e=>S.call(e),C=e=>x(e).slice(8,-1),k=e=>"[object Object]"===x(e),T=e=>v(e)&&"NaN"!==e&&"-"!==e[0]&&""+parseInt(e,10)===e,w=t(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),A=t("bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo"),E=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},N=/-(\w)/g,I=E((e=>e.replace(N,((e,t)=>t?t.toUpperCase():"")))),R=/\B([A-Z])/g,O=E((e=>e.replace(R,"-$1").toLowerCase())),L=E((e=>e.charAt(0).toUpperCase()+e.slice(1))),F=E((e=>e?`on${L(e)}`:"")),M=(e,t)=>!Object.is(e,t),P=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},B=e=>{const t=parseFloat(e);return isNaN(t)?e:t},V=e=>{const t=v(e)?Number(e):NaN;return isNaN(t)?e:t};let D;const U=()=>D||(D="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{}),j=t("Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error");function H(e){if(p(e)){const t={};for(let n=0;n{if(e){const n=e.split(W);n.length>1&&(t[n[0].trim()]=n[1].trim())}})),t}function G(e){let t="";if(v(e))t=e;else if(p(e))for(let n=0;nte(e,t)))}const se=(e,t)=>t&&t.__v_isRef?se(e,t.value):h(t)?{[`Map(${t.size})`]:[...t.entries()].reduce(((e,[t,n],s)=>(e[oe(t,s)+" =>"]=n,e)),{})}:f(t)?{[`Set(${t.size})`]:[...t.values()].map((e=>oe(e)))}:y(t)?oe(t):!b(t)||p(t)||k(t)?t:String(t),oe=(e,t="")=>{var n;return y(e)?`Symbol(${null!=(n=e.description)?n:t})`:e};let re,ie;class le{constructor(e=!1){this.detached=e,this._active=!0,this.effects=[],this.cleanups=[],this.parent=re,!e&&re&&(this.index=(re.scopes||(re.scopes=[])).push(this)-1)}get active(){return this._active}run(e){if(this._active){const t=re;try{return re=this,e()}finally{re=t}}}on(){re=this}off(){re=this.parent}stop(e){if(this._active){let t,n;for(t=0,n=this.effects.length;t=4))break}1===this._dirtyLevel&&(this._dirtyLevel=0),be()}return this._dirtyLevel>=4}set dirty(e){this._dirtyLevel=e?4:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let e=me,t=ie;try{return me=!0,ie=this,this._runnings++,pe(this),this.fn()}finally{he(this),this._runnings--,ie=t,me=e}}stop(){var e;this.active&&(pe(this),he(this),null==(e=this.onStop)||e.call(this),this.active=!1)}}function de(e){return e.value}function pe(e){e._trackId++,e._depsLength=0}function he(e){if(e.deps.length>e._depsLength){for(let t=e._depsLength;t{const n=new Map;return n.cleanup=e,n.computed=t,n},we=new WeakMap,Ae=Symbol(""),Ee=Symbol("");function Ne(e,t,n){if(me&&ie){let t=we.get(e);t||we.set(e,t=new Map);let s=t.get(n);s||t.set(n,s=Te((()=>t.delete(n)))),xe(ie,s)}}function Ie(e,t,n,s,o,r){const i=we.get(e);if(!i)return;let l=[];if("clear"===t)l=[...i.values()];else if("length"===n&&p(e)){const e=Number(s);i.forEach(((t,n)=>{("length"===n||!y(n)&&n>=e)&&l.push(t)}))}else switch(void 0!==n&&l.push(i.get(n)),t){case"add":p(e)?T(n)&&l.push(i.get("length")):(l.push(i.get(Ae)),h(e)&&l.push(i.get(Ee)));break;case"delete":p(e)||(l.push(i.get(Ae)),h(e)&&l.push(i.get(Ee)));break;case"set":h(e)&&l.push(i.get(Ae))}_e();for(const c of l)c&&ke(c,4);Se()}const Re=t("__proto__,__v_isRef,__isVue"),Oe=new Set(Object.getOwnPropertyNames(Symbol).filter((e=>"arguments"!==e&&"caller"!==e)).map((e=>Symbol[e])).filter(y)),Le=Fe();function Fe(){const e={};return["includes","indexOf","lastIndexOf"].forEach((t=>{e[t]=function(...e){const n=Ct(this);for(let t=0,o=this.length;t{e[t]=function(...e){ye(),_e();const n=Ct(this)[t].apply(this,e);return Se(),be(),n}})),e}function Me(e){y(e)||(e=String(e));const t=Ct(this);return Ne(t,0,e),t.hasOwnProperty(e)}class Pe{constructor(e=!1,t=!1){this._isReadonly=e,this._isShallow=t}get(e,t,n){const s=this._isReadonly,o=this._isShallow;if("__v_isReactive"===t)return!s;if("__v_isReadonly"===t)return s;if("__v_isShallow"===t)return o;if("__v_raw"===t)return n===(s?o?ft:ht:o?pt:dt).get(e)||Object.getPrototypeOf(e)===Object.getPrototypeOf(n)?e:void 0;const r=p(e);if(!s){if(r&&d(Le,t))return Reflect.get(Le,t,n);if("hasOwnProperty"===t)return Me}const i=Reflect.get(e,t,n);return(y(t)?Oe.has(t):Re(t))?i:(s||Ne(e,0,t),o?i:It(i)?r&&T(t)?i:i.value:b(i)?s?vt(i):mt(i):i)}}class $e extends Pe{constructor(e=!1){super(!1,e)}set(e,t,n,s){let o=e[t];if(!this._isShallow){const t=_t(o);if(St(n)||_t(n)||(o=Ct(o),n=Ct(n)),!p(e)&&It(o)&&!It(n))return!t&&(o.value=n,!0)}const r=p(e)&&T(t)?Number(t)e,qe=e=>Reflect.getPrototypeOf(e);function We(e,t,n=!1,s=!1){const o=Ct(e=e.__v_raw),r=Ct(t);n||(M(t,r)&&Ne(o,0,t),Ne(o,0,r));const{has:i}=qe(o),l=s?He:n?wt:Tt;return i.call(o,t)?l(e.get(t)):i.call(o,r)?l(e.get(r)):void(e!==o&&e.get(t))}function Ke(e,t=!1){const n=this.__v_raw,s=Ct(n),o=Ct(e);return t||(M(e,o)&&Ne(s,0,e),Ne(s,0,o)),e===o?n.has(e):n.has(e)||n.has(o)}function ze(e,t=!1){return e=e.__v_raw,!t&&Ne(Ct(e),0,Ae),Reflect.get(e,"size",e)}function Ge(e){e=Ct(e);const t=Ct(this);return qe(t).has.call(t,e)||(t.add(e),Ie(t,"add",e,e)),this}function Je(e,t){t=Ct(t);const n=Ct(this),{has:s,get:o}=qe(n);let r=s.call(n,e);r||(e=Ct(e),r=s.call(n,e));const i=o.call(n,e);return n.set(e,t),r?M(t,i)&&Ie(n,"set",e,t):Ie(n,"add",e,t),this}function Xe(e){const t=Ct(this),{has:n,get:s}=qe(t);let o=n.call(t,e);o||(e=Ct(e),o=n.call(t,e)),s&&s.call(t,e);const r=t.delete(e);return o&&Ie(t,"delete",e,void 0),r}function Qe(){const e=Ct(this),t=0!==e.size,n=e.clear();return t&&Ie(e,"clear",void 0,void 0),n}function Ze(e,t){return function(n,s){const o=this,r=o.__v_raw,i=Ct(r),l=t?He:e?wt:Tt;return!e&&Ne(i,0,Ae),r.forEach(((e,t)=>n.call(s,l(e),l(t),o)))}}function Ye(e,t,n){return function(...s){const o=this.__v_raw,r=Ct(o),i=h(r),l="entries"===e||e===Symbol.iterator&&i,c="keys"===e&&i,a=o[e](...s),u=n?He:t?wt:Tt;return!t&&Ne(r,0,c?Ee:Ae),{next(){const{value:e,done:t}=a.next();return t?{value:e,done:t}:{value:l?[u(e[0]),u(e[1])]:u(e),done:t}},[Symbol.iterator](){return this}}}}function et(e){return function(...t){return"delete"!==e&&("clear"===e?void 0:this)}}function tt(){const e={get(e){return We(this,e)},get size(){return ze(this)},has:Ke,add:Ge,set:Je,delete:Xe,clear:Qe,forEach:Ze(!1,!1)},t={get(e){return We(this,e,!1,!0)},get size(){return ze(this)},has:Ke,add:Ge,set:Je,delete:Xe,clear:Qe,forEach:Ze(!1,!0)},n={get(e){return We(this,e,!0)},get size(){return ze(this,!0)},has(e){return Ke.call(this,e,!0)},add:et("add"),set:et("set"),delete:et("delete"),clear:et("clear"),forEach:Ze(!0,!1)},s={get(e){return We(this,e,!0,!0)},get size(){return ze(this,!0)},has(e){return Ke.call(this,e,!0)},add:et("add"),set:et("set"),delete:et("delete"),clear:et("clear"),forEach:Ze(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach((o=>{e[o]=Ye(o,!1,!1),n[o]=Ye(o,!0,!1),t[o]=Ye(o,!1,!0),s[o]=Ye(o,!0,!0)})),[e,n,t,s]}const[nt,st,ot,rt]=tt();function it(e,t){const n=t?e?rt:ot:e?st:nt;return(t,s,o)=>"__v_isReactive"===s?!e:"__v_isReadonly"===s?e:"__v_raw"===s?t:Reflect.get(d(n,s)&&s in t?n:t,s,o)}const lt={get:it(!1,!1)},ct={get:it(!1,!0)},at={get:it(!0,!1)},ut={get:it(!0,!0)},dt=new WeakMap,pt=new WeakMap,ht=new WeakMap,ft=new WeakMap;function mt(e){return _t(e)?e:yt(e,!1,Ve,lt,dt)}function gt(e){return yt(e,!1,Ue,ct,pt)}function vt(e){return yt(e,!0,De,at,ht)}function yt(e,t,n,s,o){if(!b(e))return e;if(e.__v_raw&&(!t||!e.__v_isReactive))return e;const r=o.get(e);if(r)return r;const i=(l=e).__v_skip||!Object.isExtensible(l)?0:function(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}(C(l));var l;if(0===i)return e;const c=new Proxy(e,2===i?s:n);return o.set(e,c),c}function bt(e){return _t(e)?bt(e.__v_raw):!(!e||!e.__v_isReactive)}function _t(e){return!(!e||!e.__v_isReadonly)}function St(e){return!(!e||!e.__v_isShallow)}function xt(e){return!!e&&!!e.__v_raw}function Ct(e){const t=e&&e.__v_raw;return t?Ct(t):e}function kt(e){return Object.isExtensible(e)&&$(e,"__v_skip",!0),e}const Tt=e=>b(e)?mt(e):e,wt=e=>b(e)?vt(e):e;class At{constructor(e,t,n,s){this.getter=e,this._setter=t,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new ue((()=>e(this._value)),(()=>Nt(this,2===this.effect._dirtyLevel?2:3))),this.effect.computed=this,this.effect.active=this._cacheable=!s,this.__v_isReadonly=n}get value(){const e=Ct(this);return e._cacheable&&!e.effect.dirty||!M(e._value,e._value=e.effect.run())||Nt(e,4),Et(e),e.effect._dirtyLevel>=2&&Nt(e,2),e._value}set value(e){this._setter(e)}get _dirty(){return this.effect.dirty}set _dirty(e){this.effect.dirty=e}}function Et(e){var t;me&&ie&&(e=Ct(e),xe(ie,null!=(t=e.dep)?t:e.dep=Te((()=>e.dep=void 0),e instanceof At?e:void 0)))}function Nt(e,t=4,n){const s=(e=Ct(e)).dep;s&&ke(s,t)}function It(e){return!(!e||!0!==e.__v_isRef)}function Rt(e){return Ot(e,!1)}function Ot(e,t){return It(e)?e:new Lt(e,t)}class Lt{constructor(e,t){this.__v_isShallow=t,this.dep=void 0,this.__v_isRef=!0,this._rawValue=t?e:Ct(e),this._value=t?e:Tt(e)}get value(){return Et(this),this._value}set value(e){const t=this.__v_isShallow||St(e)||_t(e);e=t?e:Ct(e),M(e,this._rawValue)&&(this._rawValue=e,this._value=t?e:Tt(e),Nt(this,4))}}function Ft(e){return It(e)?e.value:e}const Mt={get:(e,t,n)=>Ft(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const o=e[t];return It(o)&&!It(n)?(o.value=n,!0):Reflect.set(e,t,n,s)}};function Pt(e){return bt(e)?e:new Proxy(e,Mt)}class $t{constructor(e){this.dep=void 0,this.__v_isRef=!0;const{get:t,set:n}=e((()=>Et(this)),(()=>Nt(this)));this._get=t,this._set=n}get value(){return this._get()}set value(e){this._set(e)}}function Bt(e){return new $t(e)}class Vt{constructor(e,t,n){this._object=e,this._key=t,this._defaultValue=n,this.__v_isRef=!0}get value(){const e=this._object[this._key];return void 0===e?this._defaultValue:e}set value(e){this._object[this._key]=e}get dep(){return e=Ct(this._object),t=this._key,null==(n=we.get(e))?void 0:n.get(t);var e,t,n}}class Dt{constructor(e){this._getter=e,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function Ut(e,t,n){const s=e[t];return It(s)?s:new Vt(e,t,n)}function jt(e,t,n,s){try{return s?e(...s):e()}catch(o){qt(o,t,n)}}function Ht(e,t,n,s){if(g(e)){const o=jt(e,t,n,s);return o&&_(o)&&o.catch((e=>{qt(e,t,n)})),o}if(p(e)){const o=[];for(let r=0;r>>1,o=zt[s],r=ln(o);rln(e)-ln(t)));if(Jt.length=0,Xt)return void Xt.push(...e);for(Xt=e,Qt=0;Qtnull==e.id?1/0:e.id,cn=(e,t)=>{const n=ln(e)-ln(t);if(0===n){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function an(e){Kt=!1,Wt=!0,zt.sort(cn);try{for(Gt=0;Gtv(e)?e.trim():e))),t&&(r=s.map(B))}let c,a=o[c=F(t)]||o[c=F(I(t))];!a&&i&&(a=o[c=F(O(t))]),a&&Ht(a,e,6,r);const u=o[c+"Once"];if(u){if(e.emitted){if(e.emitted[c])return}else e.emitted={};e.emitted[c]=!0,Ht(u,e,6,r)}}function dn(e,t,n=!1){const s=t.emitsCache,o=s.get(e);if(void 0!==o)return o;const r=e.emits;let i={},l=!1;if(!g(e)){const s=e=>{const n=dn(e,t,!0);n&&(l=!0,c(i,n))};!n&&t.mixins.length&&t.mixins.forEach(s),e.extends&&s(e.extends),e.mixins&&e.mixins.forEach(s)}return r||l?(p(r)?r.forEach((e=>i[e]=null)):c(i,r),b(e)&&s.set(e,i),i):(b(e)&&s.set(e,null),null)}function pn(e,t){return!(!e||!i(t))&&(t=t.slice(2).replace(/Once$/,""),d(e,t[0].toLowerCase()+t.slice(1))||d(e,O(t))||d(e,t))}let hn=null,fn=null;function mn(e){const t=hn;return hn=e,fn=e&&e.type.__scopeId||null,t}function gn(e,t=hn,n){if(!t)return e;if(e._n)return e;const s=(...n)=>{s._d&&Ko(-1);const o=mn(t);let r;try{r=e(...n)}finally{mn(o),s._d&&Ko(1)}return r};return s._n=!0,s._c=!0,s._d=!0,s}function vn(e){const{type:t,vnode:n,proxy:s,withProxy:o,props:r,propsOptions:[i],slots:c,attrs:a,emit:u,render:d,renderCache:p,data:h,setupState:f,ctx:m,inheritAttrs:g}=e;let v,y;const b=mn(e);try{if(4&n.shapeFlag){const e=o||s;v=or(d.call(e,e,p,r,f,h,m)),y=a}else{const e=t;0,v=or(e(r,e.length>1?{attrs:a,slots:c,emit:u}:null)),y=t.props?a:yn(a)}}catch(S){Uo.length=0,qt(S,e,1),v=er(Vo)}let _=v;if(y&&!1!==g){const e=Object.keys(y),{shapeFlag:t}=_;e.length&&7&t&&(i&&e.some(l)&&(y=bn(y,i)),_=nr(_,y))}return n.dirs&&(_=nr(_),_.dirs=_.dirs?_.dirs.concat(n.dirs):n.dirs),n.transition&&(_.transition=n.transition),v=_,mn(b),v}const yn=e=>{let t;for(const n in e)("class"===n||"style"===n||i(n))&&((t||(t={}))[n]=e[n]);return t},bn=(e,t)=>{const n={};for(const s in e)l(s)&&s.slice(9)in t||(n[s]=e[s]);return n};function _n(e,t,n){const s=Object.keys(t);if(s.length!==Object.keys(e).length)return!0;for(let o=0;oe.__isSuspense;let An=0;const En={name:"Suspense",__isSuspense:!0,process(e,t,n,s,o,r,i,l,c,a){if(null==e)!function(e,t,n,s,o,r,i,l,c){const{p:a,o:{createElement:u}}=c,d=u("div"),p=e.suspense=In(e,o,s,t,d,n,r,i,l,c);a(null,p.pendingBranch=e.ssContent,d,null,s,p,r,i),p.deps>0?(Nn(e,"onPending"),Nn(e,"onFallback"),a(null,e.ssFallback,t,n,s,null,r,i),Ln(p,e.ssFallback)):p.resolve(!1,!0)}(t,n,s,o,r,i,l,c,a);else{if(r&&r.deps>0&&!e.suspense.isInFallback)return t.suspense=e.suspense,t.suspense.vnode=t,void(t.el=e.el);!function(e,t,n,s,o,r,i,l,{p:c,um:a,o:{createElement:u}}){const d=t.suspense=e.suspense;d.vnode=t,t.el=e.el;const p=t.ssContent,h=t.ssFallback,{activeBranch:f,pendingBranch:m,isInFallback:g,isHydrating:v}=d;if(m)d.pendingBranch=p,Xo(p,m)?(c(m,p,d.hiddenContainer,null,o,d,r,i,l),d.deps<=0?d.resolve():g&&(v||(c(f,h,n,s,o,null,r,i,l),Ln(d,h)))):(d.pendingId=An++,v?(d.isHydrating=!1,d.activeBranch=m):a(m,o,d),d.deps=0,d.effects.length=0,d.hiddenContainer=u("div"),g?(c(null,p,d.hiddenContainer,null,o,d,r,i,l),d.deps<=0?d.resolve():(c(f,h,n,s,o,null,r,i,l),Ln(d,h))):f&&Xo(p,f)?(c(f,p,n,s,o,d,r,i,l),d.resolve(!0)):(c(null,p,d.hiddenContainer,null,o,d,r,i,l),d.deps<=0&&d.resolve()));else if(f&&Xo(p,f))c(f,p,n,s,o,d,r,i,l),Ln(d,p);else if(Nn(t,"onPending"),d.pendingBranch=p,d.pendingId=512&p.shapeFlag?p.component.suspenseId:An++,c(null,p,d.hiddenContainer,null,o,d,r,i,l),d.deps<=0)d.resolve();else{const{timeout:e,pendingId:t}=d;e>0?setTimeout((()=>{d.pendingId===t&&d.fallback(h)}),e):0===e&&d.fallback(h)}}(e,t,n,s,o,i,l,c,a)}},hydrate:function(e,t,n,s,o,r,i,l,c){const a=t.suspense=In(t,s,n,e.parentNode,document.createElement("div"),null,o,r,i,l,!0),u=c(e,a.pendingBranch=t.ssContent,n,a,r,i);0===a.deps&&a.resolve(!1,!0);return u},create:In,normalize:function(e){const{shapeFlag:t,children:n}=e,s=32&t;e.ssContent=Rn(s?n.default:n),e.ssFallback=s?Rn(n.fallback):er(Vo)}};function Nn(e,t){const n=e.props&&e.props[t];g(n)&&n()}function In(e,t,n,s,o,r,i,l,c,a,u=!1){const{p:d,m:p,um:h,n:f,o:{parentNode:m,remove:g}}=a;let v;const y=function(e){var t;return null!=(null==(t=e.props)?void 0:t.suspensible)&&!1!==e.props.suspensible}(e);y&&(null==t?void 0:t.pendingBranch)&&(v=t.pendingId,t.deps++);const b=e.props?V(e.props.timeout):void 0,_=r,S={vnode:e,parent:t,parentComponent:n,namespace:i,container:s,hiddenContainer:o,deps:0,pendingId:An++,timeout:"number"==typeof b?b:-1,activeBranch:null,pendingBranch:null,isInFallback:!u,isHydrating:u,isUnmounted:!1,effects:[],resolve(e=!1,n=!1){const{vnode:s,activeBranch:o,pendingBranch:i,pendingId:l,effects:c,parentComponent:a,container:u}=S;let d=!1;S.isHydrating?S.isHydrating=!1:e||(d=o&&i.transition&&"out-in"===i.transition.mode,d&&(o.transition.afterLeave=()=>{l===S.pendingId&&(p(i,u,r===_?f(o):r,0),sn(c))}),o&&(m(o.el)!==S.hiddenContainer&&(r=f(o)),h(o,a,S,!0)),d||p(i,u,r,0)),Ln(S,i),S.pendingBranch=null,S.isInFallback=!1;let g=S.parent,b=!1;for(;g;){if(g.pendingBranch){g.effects.push(...c),b=!0;break}g=g.parent}b||d||sn(c),S.effects=[],y&&t&&t.pendingBranch&&v===t.pendingId&&(t.deps--,0!==t.deps||n||t.resolve()),Nn(s,"onResolve")},fallback(e){if(!S.pendingBranch)return;const{vnode:t,activeBranch:n,parentComponent:s,container:o,namespace:r}=S;Nn(t,"onFallback");const i=f(n),a=()=>{S.isInFallback&&(d(null,e,o,i,s,null,r,l,c),Ln(S,e))},u=e.transition&&"out-in"===e.transition.mode;u&&(n.transition.afterLeave=a),S.isInFallback=!0,h(n,s,null,!0),u||a()},move(e,t,n){S.activeBranch&&p(S.activeBranch,e,t,n),S.container=e},next:()=>S.activeBranch&&f(S.activeBranch),registerDep(e,t){const n=!!S.pendingBranch;n&&S.deps++;const s=e.vnode.el;e.asyncDep.catch((t=>{qt(t,e,0)})).then((o=>{if(e.isUnmounted||S.isUnmounted||S.pendingId!==e.suspenseId)return;e.asyncResolved=!0;const{vnode:r}=e;Sr(e,o,!1),s&&(r.el=s);const l=!s&&e.subTree.el;t(e,r,m(s||e.subTree.el),s?null:f(e.subTree),S,i,c),l&&g(l),Sn(e,r.el),n&&0==--S.deps&&S.resolve()}))},unmount(e,t){S.isUnmounted=!0,S.activeBranch&&h(S.activeBranch,n,e,t),S.pendingBranch&&h(S.pendingBranch,n,e,t)}};return S}function Rn(e){let t;if(g(e)){const n=Wo&&e._c;n&&(e._d=!1,Ho()),e=e(),n&&(e._d=!0,t=jo,qo())}if(p(e)){const t=function(e,t=!0){let n;for(let s=0;st!==e))),e}function On(e,t){t&&t.pendingBranch?p(e)?t.effects.push(...e):t.effects.push(e):sn(e)}function Ln(e,t){e.activeBranch=t;const{vnode:n,parentComponent:s}=e;let o=t.el;for(;!o&&t.component;)o=(t=t.component.subTree).el;n.el=o,s&&s.subTree===n&&(s.vnode.el=o,Sn(s,o))}const Fn=Symbol.for("v-scx");function Mn(e,t){return Vn(e,null,{flush:"post"})}function Pn(e,t){return Vn(e,null,{flush:"sync"})}const $n={};function Bn(e,t,n){return Vn(e,t,n)}function Vn(e,t,{immediate:s,deep:r,flush:i,once:l}=n){if(t&&l){const e=t;t=(...t)=>{e(...t),C()}}const c=dr,u=e=>!0===r?e:jn(e,!1===r?1:void 0);let d,h,f=!1,m=!1;if(It(e)?(d=()=>e.value,f=St(e)):bt(e)?(d=()=>u(e),f=!0):p(e)?(m=!0,f=e.some((e=>bt(e)||St(e))),d=()=>e.map((e=>It(e)?e.value:bt(e)?u(e):g(e)?jt(e,c,2):void 0))):d=g(e)?t?()=>jt(e,c,2):()=>(h&&h(),Ht(e,c,3,[v])):o,t&&r){const e=d;d=()=>jn(e())}let v=e=>{h=S.onStop=()=>{jt(e,c,4),h=S.onStop=void 0}},y=m?new Array(e.length).fill($n):$n;const b=()=>{if(S.active&&S.dirty)if(t){const e=S.run();(r||f||(m?e.some(((e,t)=>M(e,y[t]))):M(e,y)))&&(h&&h(),Ht(t,c,3,[e,y===$n?void 0:m&&y[0]===$n?[]:y,v]),y=e)}else S.run()};let _;b.allowRecurse=!!t,"sync"===i?_=b:"post"===i?_=()=>So(b,c&&c.suspense):(b.pre=!0,c&&(b.id=c.uid),_=()=>tn(b));const S=new ue(d,o,_),x=ae(),C=()=>{S.stop(),x&&a(x.effects,S)};return t?s?b():y=S.run():"post"===i?So(S.run.bind(S),c&&c.suspense):S.run(),C}function Dn(e,t,n){const s=this.proxy,o=v(e)?e.includes(".")?Un(s,e):()=>s[e]:e.bind(s,s);let r;g(t)?r=t:(r=t.handler,n=t);const i=mr(this),l=Vn(o,r.bind(s),n);return i(),l}function Un(e,t){const n=t.split(".");return()=>{let t=e;for(let e=0;e0){if(n>=t)return e;n++}if((s=s||new Set).has(e))return e;if(s.add(e),It(e))jn(e.value,t,n,s);else if(p(e))for(let o=0;o{jn(e,t,n,s)}));else if(k(e))for(const o in e)jn(e[o],t,n,s);return e}function Hn(e,t,n,s){const o=e.dirs,r=t&&t.dirs;for(let i=0;i{e.isMounted=!0})),_s((()=>{e.isUnmounting=!0})),e}const zn=[Function,Array],Gn={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:zn,onEnter:zn,onAfterEnter:zn,onEnterCancelled:zn,onBeforeLeave:zn,onLeave:zn,onAfterLeave:zn,onLeaveCancelled:zn,onBeforeAppear:zn,onAppear:zn,onAfterAppear:zn,onAppearCancelled:zn},Jn={name:"BaseTransition",props:Gn,setup(e,{slots:t}){const n=pr(),s=Kn();return()=>{const o=t.default&&ts(t.default(),!0);if(!o||!o.length)return;let r=o[0];if(o.length>1)for(const e of o)if(e.type!==Vo){r=e;break}const i=Ct(e),{mode:l}=i;if(s.isLeaving)return Zn(r);const c=Yn(r);if(!c)return Zn(r);const a=Qn(c,i,s,n);es(c,a);const u=n.subTree,d=u&&Yn(u);if(d&&d.type!==Vo&&!Xo(c,d)){const e=Qn(d,i,s,n);if(es(d,e),"out-in"===l)return s.isLeaving=!0,e.afterLeave=()=>{s.isLeaving=!1,!1!==n.update.active&&(n.effect.dirty=!0,n.update())},Zn(r);"in-out"===l&&c.type!==Vo&&(e.delayLeave=(e,t,n)=>{Xn(s,d)[String(d.key)]=d,e[qn]=()=>{t(),e[qn]=void 0,delete a.delayedLeave},a.delayedLeave=n})}return r}}};function Xn(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function Qn(e,t,n,s){const{appear:o,mode:r,persisted:i=!1,onBeforeEnter:l,onEnter:c,onAfterEnter:a,onEnterCancelled:u,onBeforeLeave:d,onLeave:h,onAfterLeave:f,onLeaveCancelled:m,onBeforeAppear:g,onAppear:v,onAfterAppear:y,onAppearCancelled:b}=t,_=String(e.key),S=Xn(n,e),x=(e,t)=>{e&&Ht(e,s,9,t)},C=(e,t)=>{const n=t[1];x(e,t),p(e)?e.every((e=>e.length<=1))&&n():e.length<=1&&n()},k={mode:r,persisted:i,beforeEnter(t){let s=l;if(!n.isMounted){if(!o)return;s=g||l}t[qn]&&t[qn](!0);const r=S[_];r&&Xo(e,r)&&r.el[qn]&&r.el[qn](),x(s,[t])},enter(e){let t=c,s=a,r=u;if(!n.isMounted){if(!o)return;t=v||c,s=y||a,r=b||u}let i=!1;const l=e[Wn]=t=>{i||(i=!0,x(t?r:s,[e]),k.delayedLeave&&k.delayedLeave(),e[Wn]=void 0)};t?C(t,[e,l]):l()},leave(t,s){const o=String(e.key);if(t[Wn]&&t[Wn](!0),n.isUnmounting)return s();x(d,[t]);let r=!1;const i=t[qn]=n=>{r||(r=!0,s(),x(n?m:f,[t]),t[qn]=void 0,S[o]===e&&delete S[o])};S[o]=e,h?C(h,[t,i]):i()},clone:e=>Qn(e,t,n,s)};return k}function Zn(e){if(rs(e))return(e=nr(e)).children=null,e}function Yn(e){return rs(e)?e.children?e.children[0]:void 0:e}function es(e,t){6&e.shapeFlag&&e.component?es(e.component.subTree,t):128&e.shapeFlag?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function ts(e,t=!1,n){let s=[],o=0;for(let r=0;r1)for(let r=0;rc({name:e.name},t,{setup:e}))():e}const ss=e=>!!e.type.__asyncLoader +/*! #__NO_SIDE_EFFECTS__ */;function os(e,t){const{ref:n,props:s,children:o,ce:r}=t.vnode,i=er(e,s,o);return i.ref=n,i.ce=r,delete t.vnode.ce,i}const rs=e=>e.type.__isKeepAlive,is={name:"KeepAlive",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){const n=pr(),s=n.ctx,o=new Map,r=new Set;let i=null;const l=n.suspense,{renderer:{p:c,m:a,um:u,o:{createElement:d}}}=s,p=d("div");function h(e){ps(e),u(e,n,l,!0)}function f(e){o.forEach(((t,n)=>{const s=Ar(t.type);!s||e&&e(s)||m(n)}))}function m(e){const t=o.get(e);i&&Xo(t,i)?i&&ps(i):h(t),o.delete(e),r.delete(e)}s.activate=(e,t,n,s,o)=>{const r=e.component;a(e,t,n,0,l),c(r.vnode,e,t,n,r,l,s,e.slotScopeIds,o),So((()=>{r.isDeactivated=!1,r.a&&P(r.a);const t=e.props&&e.props.onVnodeMounted;t&&cr(t,r.parent,e)}),l)},s.deactivate=e=>{const t=e.component;a(e,p,null,1,l),So((()=>{t.da&&P(t.da);const n=e.props&&e.props.onVnodeUnmounted;n&&cr(n,t.parent,e),t.isDeactivated=!0}),l)},Bn((()=>[e.include,e.exclude]),(([e,t])=>{e&&f((t=>ls(e,t))),t&&f((e=>!ls(t,e)))}),{flush:"post",deep:!0});let g=null;const v=()=>{null!=g&&o.set(g,hs(n.subTree))};return vs(v),bs(v),_s((()=>{o.forEach((e=>{const{subTree:t,suspense:s}=n,o=hs(t);if(e.type!==o.type||e.key!==o.key)h(e);else{ps(o);const e=o.component.da;e&&So(e,s)}}))})),()=>{if(g=null,!t.default)return i=null;const n=t.default(),s=n[0];if(n.length>1)return i=null,n;if(!(Jo(s)&&(4&s.shapeFlag||128&s.shapeFlag)))return i=null,s;let l=hs(s);const c=l.type,a=Ar(ss(l)?l.type.__asyncResolved||{}:c),{include:u,exclude:d,max:p}=e;if(u&&(!a||!ls(u,a))||d&&a&&ls(d,a))return i=l,s;const h=null==l.key?c:l.key,f=o.get(h);return l.el&&(l=nr(l),128&s.shapeFlag&&(s.ssContent=l)),g=h,f?(l.el=f.el,l.component=f.component,l.transition&&es(l,l.transition),l.shapeFlag|=512,r.delete(h),r.add(h)):(r.add(h),p&&r.size>parseInt(p,10)&&m(r.values().next().value)),l.shapeFlag|=256,i=l,wn(s.type)?s:l}}};function ls(e,t){return p(e)?e.some((e=>ls(e,t))):v(e)?e.split(",").includes(t):"[object RegExp]"===x(e)&&e.test(t)}function cs(e,t){us(e,"a",t)}function as(e,t){us(e,"da",t)}function us(e,t,n=dr){const s=e.__wdc||(e.__wdc=()=>{let t=n;for(;t;){if(t.isDeactivated)return;t=t.parent}return e()});if(fs(t,s,n),n){let e=n.parent;for(;e&&e.parent;)rs(e.parent.vnode)&&ds(s,t,n,e),e=e.parent}}function ds(e,t,n,s){const o=fs(t,e,s,!0);Ss((()=>{a(s[t],o)}),n)}function ps(e){e.shapeFlag&=-257,e.shapeFlag&=-513}function hs(e){return 128&e.shapeFlag?e.ssContent:e}function fs(e,t,n=dr,s=!1){if(n){const o=n[e]||(n[e]=[]),r=t.__weh||(t.__weh=(...s)=>{if(n.isUnmounted)return;ye();const o=mr(n),r=Ht(t,n,e,s);return o(),be(),r});return s?o.unshift(r):o.push(r),r}}const ms=e=>(t,n=dr)=>(!_r||"sp"===e)&&fs(e,((...e)=>t(...e)),n),gs=ms("bm"),vs=ms("m"),ys=ms("bu"),bs=ms("u"),_s=ms("bum"),Ss=ms("um"),xs=ms("sp"),Cs=ms("rtg"),ks=ms("rtc");function Ts(e,t=dr){fs("ec",e,t)}function ws(e){return e.some((e=>!Jo(e)||e.type!==Vo&&!(e.type===$o&&!ws(e.children))))?e:null}const As=e=>e?vr(e)?wr(e)||e.proxy:As(e.parent):null,Es=c(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>As(e.parent),$root:e=>As(e.root),$emit:e=>e.emit,$options:e=>Bs(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,tn(e.update)}),$nextTick:e=>e.n||(e.n=en.bind(e.proxy)),$watch:e=>Dn.bind(e)}),Ns=(e,t)=>e!==n&&!e.__isScriptSetup&&d(e,t),Is={get({_:e},t){if("__v_skip"===t)return!0;const{ctx:s,setupState:o,data:r,props:i,accessCache:l,type:c,appContext:a}=e;let u;if("$"!==t[0]){const c=l[t];if(void 0!==c)switch(c){case 1:return o[t];case 2:return r[t];case 4:return s[t];case 3:return i[t]}else{if(Ns(o,t))return l[t]=1,o[t];if(r!==n&&d(r,t))return l[t]=2,r[t];if((u=e.propsOptions[0])&&d(u,t))return l[t]=3,i[t];if(s!==n&&d(s,t))return l[t]=4,s[t];Fs&&(l[t]=0)}}const p=Es[t];let h,f;return p?("$attrs"===t&&Ne(e.attrs,0,""),p(e)):(h=c.__cssModules)&&(h=h[t])?h:s!==n&&d(s,t)?(l[t]=4,s[t]):(f=a.config.globalProperties,d(f,t)?f[t]:void 0)},set({_:e},t,s){const{data:o,setupState:r,ctx:i}=e;return Ns(r,t)?(r[t]=s,!0):o!==n&&d(o,t)?(o[t]=s,!0):!d(e.props,t)&&(("$"!==t[0]||!(t.slice(1)in e))&&(i[t]=s,!0))},has({_:{data:e,setupState:t,accessCache:s,ctx:o,appContext:r,propsOptions:i}},l){let c;return!!s[l]||e!==n&&d(e,l)||Ns(t,l)||(c=i[0])&&d(c,l)||d(o,l)||d(Es,l)||d(r.config.globalProperties,l)},defineProperty(e,t,n){return null!=n.get?e._.accessCache[t]=0:d(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}},Rs=c({},Is,{get(e,t){if(t!==Symbol.unscopables)return Is.get(e,t,e)},has:(e,t)=>"_"!==t[0]&&!j(t)});function Os(){const e=pr();return e.setupContext||(e.setupContext=Tr(e))}function Ls(e){return p(e)?e.reduce(((e,t)=>(e[t]=null,e)),{}):e}let Fs=!0;function Ms(e){const t=Bs(e),n=e.proxy,s=e.ctx;Fs=!1,t.beforeCreate&&Ps(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:l,watch:c,provide:a,inject:u,created:d,beforeMount:h,mounted:f,beforeUpdate:m,updated:v,activated:y,deactivated:_,beforeUnmount:S,unmounted:x,render:C,renderTracked:k,renderTriggered:T,errorCaptured:w,serverPrefetch:A,expose:E,inheritAttrs:N,components:I,directives:R}=t;if(u&&function(e,t,n=o){p(e)&&(e=js(e));for(const s in e){const n=e[s];let o;o=b(n)?"default"in n?Qs(n.from||s,n.default,!0):Qs(n.from||s):Qs(n),It(o)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>o.value,set:e=>o.value=e}):t[s]=o}}(u,s,null),l)for(const o in l){const e=l[o];g(e)&&(s[o]=e.bind(n))}if(r){const t=r.call(n,n);b(t)&&(e.data=mt(t))}if(Fs=!0,i)for(const p in i){const e=i[p],t=g(e)?e.bind(n,n):g(e.get)?e.get.bind(n,n):o,r=!g(e)&&g(e.set)?e.set.bind(n):o,l=Er({get:t,set:r});Object.defineProperty(s,p,{enumerable:!0,configurable:!0,get:()=>l.value,set:e=>l.value=e})}if(c)for(const o in c)$s(c[o],s,n,o);if(a){const e=g(a)?a.call(n):a;Reflect.ownKeys(e).forEach((t=>{Xs(t,e[t])}))}function O(e,t){p(t)?t.forEach((t=>e(t.bind(n)))):t&&e(t.bind(n))}if(d&&Ps(d,e,"c"),O(gs,h),O(vs,f),O(ys,m),O(bs,v),O(cs,y),O(as,_),O(Ts,w),O(ks,k),O(Cs,T),O(_s,S),O(Ss,x),O(xs,A),p(E))if(E.length){const t=e.exposed||(e.exposed={});E.forEach((e=>{Object.defineProperty(t,e,{get:()=>n[e],set:t=>n[e]=t})}))}else e.exposed||(e.exposed={});C&&e.render===o&&(e.render=C),null!=N&&(e.inheritAttrs=N),I&&(e.components=I),R&&(e.directives=R)}function Ps(e,t,n){Ht(p(e)?e.map((e=>e.bind(t.proxy))):e.bind(t.proxy),t,n)}function $s(e,t,n,s){const o=s.includes(".")?Un(n,s):()=>n[s];if(v(e)){const n=t[e];g(n)&&Bn(o,n)}else if(g(e))Bn(o,e.bind(n));else if(b(e))if(p(e))e.forEach((e=>$s(e,t,n,s)));else{const s=g(e.handler)?e.handler.bind(n):t[e.handler];g(s)&&Bn(o,s,e)}}function Bs(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:o,optionsCache:r,config:{optionMergeStrategies:i}}=e.appContext,l=r.get(t);let c;return l?c=l:o.length||n||s?(c={},o.length&&o.forEach((e=>Vs(c,e,i,!0))),Vs(c,t,i)):c=t,b(t)&&r.set(t,c),c}function Vs(e,t,n,s=!1){const{mixins:o,extends:r}=t;r&&Vs(e,r,n,!0),o&&o.forEach((t=>Vs(e,t,n,!0)));for(const i in t)if(s&&"expose"===i);else{const s=Ds[i]||n&&n[i];e[i]=s?s(e[i],t[i]):t[i]}return e}const Ds={data:Us,props:Ws,emits:Ws,methods:qs,computed:qs,beforeCreate:Hs,created:Hs,beforeMount:Hs,mounted:Hs,beforeUpdate:Hs,updated:Hs,beforeDestroy:Hs,beforeUnmount:Hs,destroyed:Hs,unmounted:Hs,activated:Hs,deactivated:Hs,errorCaptured:Hs,serverPrefetch:Hs,components:qs,directives:qs,watch:function(e,t){if(!e)return t;if(!t)return e;const n=c(Object.create(null),e);for(const s in t)n[s]=Hs(e[s],t[s]);return n},provide:Us,inject:function(e,t){return qs(js(e),js(t))}};function Us(e,t){return t?e?function(){return c(g(e)?e.call(this,this):e,g(t)?t.call(this,this):t)}:t:e}function js(e){if(p(e)){const t={};for(let n=0;n(r.has(e)||(e&&g(e.install)?(r.add(e),e.install(l,...t)):g(e)&&(r.add(e),e(l,...t))),l),mixin:e=>(o.mixins.includes(e)||o.mixins.push(e),l),component:(e,t)=>t?(o.components[e]=t,l):o.components[e],directive:(e,t)=>t?(o.directives[e]=t,l):o.directives[e],mount(r,c,a){if(!i){const u=er(n,s);return u.appContext=o,!0===a?a="svg":!1===a&&(a=void 0),c&&t?t(u,r):e(u,r,a),i=!0,l._container=r,r.__vue_app__=l,wr(u.component)||u.component.proxy}},unmount(){i&&(e(null,l._container),delete l._container.__vue_app__)},provide:(e,t)=>(o.provides[e]=t,l),runWithContext(e){const t=Js;Js=l;try{return e()}finally{Js=t}}};return l}}let Js=null;function Xs(e,t){if(dr){let n=dr.provides;const s=dr.parent&&dr.parent.provides;s===n&&(n=dr.provides=Object.create(s)),n[e]=t}else;}function Qs(e,t,n=!1){const s=dr||hn;if(s||Js){const o=s?null==s.parent?s.vnode.appContext&&s.vnode.appContext.provides:s.parent.provides:Js._context.provides;if(o&&e in o)return o[e];if(arguments.length>1)return n&&g(t)?t.call(s&&s.proxy):t}}const Zs=Object.create(null),Ys=()=>Object.create(Zs),eo=e=>Object.getPrototypeOf(e)===Zs;function to(e,t,s,o){const[r,i]=e.propsOptions;let l,c=!1;if(t)for(let n in t){if(w(n))continue;const a=t[n];let u;r&&d(r,u=I(n))?i&&i.includes(u)?(l||(l={}))[u]=a:s[u]=a:pn(e.emitsOptions,n)||n in o&&a===o[n]||(o[n]=a,c=!0)}if(i){const t=Ct(s),o=l||n;for(let n=0;n{h=!0;const[n,s]=so(e,t,!0);c(a,n),s&&u.push(...s)};!o&&t.mixins.length&&t.mixins.forEach(n),e.extends&&n(e.extends),e.mixins&&e.mixins.forEach(n)}if(!l&&!h)return b(e)&&r.set(e,s),s;if(p(l))for(let s=0;s-1,s[1]=n<0||t-1||d(s,"default"))&&u.push(e)}}}const f=[a,u];return b(e)&&r.set(e,f),f}function oo(e){return"$"!==e[0]&&!w(e)}function ro(e){if(null===e)return"null";if("function"==typeof e)return e.name||"";if("object"==typeof e){return e.constructor&&e.constructor.name||""}return""}function io(e,t){return ro(e)===ro(t)}function lo(e,t){return p(t)?t.findIndex((t=>io(t,e))):g(t)&&io(t,e)?0:-1}const co=e=>"_"===e[0]||"$stable"===e,ao=e=>p(e)?e.map(or):[or(e)],uo=(e,t,n)=>{if(t._n)return t;const s=gn(((...e)=>ao(t(...e))),n);return s._c=!1,s},po=(e,t,n)=>{const s=e._ctx;for(const o in e){if(co(o))continue;const n=e[o];if(g(n))t[o]=uo(0,n,s);else if(null!=n){const e=ao(n);t[o]=()=>e}}},ho=(e,t)=>{const n=ao(t);e.slots.default=()=>n},fo=(e,t)=>{if(32&e.vnode.shapeFlag){const n=t._;n?(e.slots=Ct(t),$(e.slots,"_",n)):po(t,e.slots=Ys())}else e.slots=Ys(),t&&ho(e,t)},mo=(e,t,s)=>{const{vnode:o,slots:r}=e;let i=!0,l=n;if(32&o.shapeFlag){const e=t._;e?s&&1===e?i=!1:(c(r,t),s||1!==e||delete r._):(i=!t.$stable,po(t,r)),l=t}else t&&(ho(e,t),l={default:1});if(i)for(const n in r)co(n)||null!=l[n]||delete r[n]};function go(e,t,s,o,r=!1){if(p(e))return void e.forEach(((e,n)=>go(e,t&&(p(t)?t[n]:t),s,o,r)));if(ss(o)&&!r)return;const i=4&o.shapeFlag?wr(o.component)||o.component.proxy:o.el,l=r?null:i,{i:c,r:u}=e,h=t&&t.r,f=c.refs===n?c.refs={}:c.refs,m=c.setupState;if(null!=h&&h!==u&&(v(h)?(f[h]=null,d(m,h)&&(m[h]=null)):It(h)&&(h.value=null)),g(u))jt(u,c,12,[l,f]);else{const t=v(u),n=It(u);if(t||n){const o=()=>{if(e.f){const n=t?d(m,u)?m[u]:f[u]:u.value;r?p(n)&&a(n,i):p(n)?n.includes(i)||n.push(i):t?(f[u]=[i],d(m,u)&&(m[u]=f[u])):(u.value=[i],e.k&&(f[e.k]=u.value))}else t?(f[u]=l,d(m,u)&&(m[u]=l)):n&&(u.value=l,e.k&&(f[e.k]=l))};l?(o.id=-1,So(o,s)):o()}}}let vo=!1;const yo=e=>(e=>e.namespaceURI.includes("svg")&&"foreignObject"!==e.tagName)(e)?"svg":(e=>e.namespaceURI.includes("MathML"))(e)?"mathml":void 0,bo=e=>8===e.nodeType;function _o(e){const{mt:t,p:n,o:{patchProp:s,createText:o,nextSibling:r,parentNode:l,remove:c,insert:a,createComment:u}}=e,d=(n,s,i,c,u,b=!1)=>{b=b||!!s.dynamicChildren;const _=bo(n)&&"["===n.data,S=()=>m(n,s,i,c,u,_),{type:x,ref:C,shapeFlag:k,patchFlag:T}=s;let w=n.nodeType;s.el=n,-2===T&&(b=!1,s.dynamicChildren=null);let A=null;switch(x){case Bo:3!==w?""===s.children?(a(s.el=o(""),l(n),n),A=n):A=S():(n.data!==s.children&&(vo=!0,n.data=s.children),A=r(n));break;case Vo:y(n)?(A=r(n),v(s.el=n.content.firstChild,n,i)):A=8!==w||_?S():r(n);break;case Do:if(_&&(w=(n=r(n)).nodeType),1===w||3===w){A=n;const e=!s.children.length;for(let t=0;t{l=l||!!t.dynamicChildren;const{type:a,props:u,patchFlag:d,shapeFlag:p,dirs:f,transition:m}=t,g="input"===a||"option"===a;if(g||-1!==d){f&&Hn(t,null,n,"created");let a,b=!1;if(y(e)){b=Ao(o,m)&&n&&n.vnode.props&&n.vnode.props.appear;const s=e.content.firstChild;b&&m.beforeEnter(s),v(s,e,n),t.el=e=s}if(16&p&&(!u||!u.innerHTML&&!u.textContent)){let s=h(e.firstChild,t,e,n,o,r,l);for(;s;){vo=!0;const e=s;s=s.nextSibling,c(e)}}else 8&p&&e.textContent!==t.children&&(vo=!0,e.textContent=t.children);if(u)if(g||!l||48&d)for(const t in u)(g&&(t.endsWith("value")||"indeterminate"===t)||i(t)&&!w(t)||"."===t[0])&&s(e,t,null,u[t],void 0,void 0,n);else u.onClick&&s(e,"onClick",null,u.onClick,void 0,void 0,n);(a=u&&u.onVnodeBeforeMount)&&cr(a,n,t),f&&Hn(t,null,n,"beforeMount"),((a=u&&u.onVnodeMounted)||f||b)&&On((()=>{a&&cr(a,n,t),b&&m.enter(e),f&&Hn(t,null,n,"mounted")}),o)}return e.nextSibling},h=(e,t,s,o,r,i,l)=>{l=l||!!t.dynamicChildren;const c=t.children,a=c.length;for(let u=0;u{const{slotScopeIds:c}=t;c&&(o=o?o.concat(c):c);const d=l(e),p=h(r(e),t,d,n,s,o,i);return p&&bo(p)&&"]"===p.data?r(t.anchor=p):(vo=!0,a(t.anchor=u("]"),d,p),p)},m=(e,t,s,o,i,a)=>{if(vo=!0,t.el=null,a){const t=g(e);for(;;){const n=r(e);if(!n||n===t)break;c(n)}}const u=r(e),d=l(e);return c(e),n(null,t,d,u,s,o,yo(d),i),u},g=(e,t="[",n="]")=>{let s=0;for(;e;)if((e=r(e))&&bo(e)&&(e.data===t&&s++,e.data===n)){if(0===s)return r(e);s--}return e},v=(e,t,n)=>{const s=t.parentNode;s&&s.replaceChild(e,t);let o=n;for(;o;)o.vnode.el===t&&(o.vnode.el=o.subTree.el=e),o=o.parent},y=e=>1===e.nodeType&&"template"===e.tagName.toLowerCase();return[(e,t)=>{if(!t.hasChildNodes())return n(null,e,t),rn(),void(t._vnode=e);vo=!1,d(t.firstChild,e,null,null,null),rn(),t._vnode=e,vo&&console.error("Hydration completed but contains mismatches.")},d]}const So=On;function xo(e){return ko(e)}function Co(e){return ko(e,_o)}function ko(e,t){U().__VUE__=!0;const{insert:r,remove:i,patchProp:l,createElement:c,createText:a,createComment:u,setText:p,setElementText:h,parentNode:f,nextSibling:m,setScopeId:g=o,insertStaticContent:v}=e,y=(e,t,n,s=null,o=null,r=null,i=void 0,l=null,c=!!t.dynamicChildren)=>{if(e===t)return;e&&!Xo(e,t)&&(s=X(e),W(e,o,r,!0),e=null),-2===t.patchFlag&&(c=!1,t.dynamicChildren=null);const{type:a,ref:u,shapeFlag:d}=t;switch(a){case Bo:b(e,t,n,s);break;case Vo:S(e,t,n,s);break;case Do:null==e&&x(t,n,s,i);break;case $o:L(e,t,n,s,o,r,i,l,c);break;default:1&d?C(e,t,n,s,o,r,i,l,c):6&d?F(e,t,n,s,o,r,i,l,c):(64&d||128&d)&&a.process(e,t,n,s,o,r,i,l,c,Y)}null!=u&&o&&go(u,e&&e.ref,r,t||e,!t)},b=(e,t,n,s)=>{if(null==e)r(t.el=a(t.children),n,s);else{const n=t.el=e.el;t.children!==e.children&&p(n,t.children)}},S=(e,t,n,s)=>{null==e?r(t.el=u(t.children||""),n,s):t.el=e.el},x=(e,t,n,s)=>{[e.el,e.anchor]=v(e.children,t,n,s,e.el,e.anchor)},C=(e,t,n,s,o,r,i,l,c)=>{"svg"===t.type?i="svg":"math"===t.type&&(i="mathml"),null==e?k(t,n,s,o,r,i,l,c):E(e,t,o,r,i,l,c)},k=(e,t,n,s,o,i,a,u)=>{let d,p;const{props:f,shapeFlag:m,transition:g,dirs:v}=e;if(d=e.el=c(e.type,i,f&&f.is,f),8&m?h(d,e.children):16&m&&A(e.children,d,null,s,o,To(e,i),a,u),v&&Hn(e,null,s,"created"),T(d,e,e.scopeId,a,s),f){for(const t in f)"value"===t||w(t)||l(d,t,null,f[t],i,e.children,s,o,J);"value"in f&&l(d,"value",null,f.value,i),(p=f.onVnodeBeforeMount)&&cr(p,s,e)}v&&Hn(e,null,s,"beforeMount");const y=Ao(o,g);y&&g.beforeEnter(d),r(d,t,n),((p=f&&f.onVnodeMounted)||y||v)&&So((()=>{p&&cr(p,s,e),y&&g.enter(d),v&&Hn(e,null,s,"mounted")}),o)},T=(e,t,n,s,o)=>{if(n&&g(e,n),s)for(let r=0;r{for(let a=c;a{const a=t.el=e.el;let{patchFlag:u,dynamicChildren:d,dirs:p}=t;u|=16&e.patchFlag;const f=e.props||n,m=t.props||n;let g;if(s&&wo(s,!1),(g=m.onVnodeBeforeUpdate)&&cr(g,s,t,e),p&&Hn(t,e,s,"beforeUpdate"),s&&wo(s,!0),d?N(e.dynamicChildren,d,a,s,o,To(t,r),i):c||D(e,t,a,null,s,o,To(t,r),i,!1),u>0){if(16&u)R(a,t,f,m,s,o,r);else if(2&u&&f.class!==m.class&&l(a,"class",null,m.class,r),4&u&&l(a,"style",f.style,m.style,r),8&u){const n=t.dynamicProps;for(let t=0;t{g&&cr(g,s,t,e),p&&Hn(t,e,s,"updated")}),o)},N=(e,t,n,s,o,r,i)=>{for(let l=0;l{if(s!==o){if(s!==n)for(const n in s)w(n)||n in o||l(e,n,s[n],null,c,t.children,r,i,J);for(const n in o){if(w(n))continue;const a=o[n],u=s[n];a!==u&&"value"!==n&&l(e,n,u,a,c,t.children,r,i,J)}"value"in o&&l(e,"value",s.value,o.value,c)}},L=(e,t,n,s,o,i,l,c,u)=>{const d=t.el=e?e.el:a(""),p=t.anchor=e?e.anchor:a("");let{patchFlag:h,dynamicChildren:f,slotScopeIds:m}=t;m&&(c=c?c.concat(m):m),null==e?(r(d,n,s),r(p,n,s),A(t.children||[],n,p,o,i,l,c,u)):h>0&&64&h&&f&&e.dynamicChildren?(N(e.dynamicChildren,f,n,o,i,l,c),(null!=t.key||o&&t===o.subTree)&&Eo(e,t,!0)):D(e,t,n,p,o,i,l,c,u)},F=(e,t,n,s,o,r,i,l,c)=>{t.slotScopeIds=l,null==e?512&t.shapeFlag?o.ctx.activate(t,n,s,i,c):M(t,n,s,o,r,i,c):$(e,t,c)},M=(e,t,s,o,r,i,l)=>{const c=e.component=function(e,t,s){const o=e.type,r=(t?t.appContext:e.appContext)||ar,i={uid:ur++,vnode:e,type:o,parent:t,appContext:r,root:null,next:null,subTree:null,effect:null,update:null,scope:new le(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:t?t.provides:Object.create(r.provides),accessCache:null,renderCache:[],components:null,directives:null,propsOptions:so(o,r),emitsOptions:dn(o,r),emit:null,emitted:null,propsDefaults:n,inheritAttrs:o.inheritAttrs,ctx:n,data:n,props:n,attrs:n,slots:n,refs:n,setupState:n,setupContext:null,attrsProxy:null,slotsProxy:null,suspense:s,suspenseId:s?s.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};i.ctx={_:i},i.root=t?t.root:i,i.emit=un.bind(null,i),e.ce&&e.ce(i);return i}(e,o,r);if(rs(e)&&(c.ctx.renderer=Y),function(e,t=!1){t&&fr(t);const{props:n,children:s}=e.vnode,o=vr(e);(function(e,t,n,s=!1){const o={},r=Ys();e.propsDefaults=Object.create(null),to(e,t,o,r);for(const i in e.propsOptions[0])i in o||(o[i]=void 0);e.props=n?s?o:gt(o):e.type.props?o:r,e.attrs=r})(e,n,o,t),fo(e,s);const r=o?function(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Is);const{setup:s}=n;if(s){const n=e.setupContext=s.length>1?Tr(e):null,o=mr(e);ye();const r=jt(s,e,0,[e.props,n]);if(be(),o(),_(r)){if(r.then(gr,gr),t)return r.then((n=>{Sr(e,n,t)})).catch((t=>{qt(t,e,0)}));e.asyncDep=r}else Sr(e,r,t)}else Cr(e,t)}(e,t):void 0;t&&fr(!1)}(c),c.asyncDep){if(r&&r.registerDep(c,B),!e.el){const e=c.subTree=er(Vo);S(null,e,t,s)}}else B(c,e,t,s,r,i,l)},$=(e,t,n)=>{const s=t.component=e.component;if(function(e,t,n){const{props:s,children:o,component:r}=e,{props:i,children:l,patchFlag:c}=t,a=r.emitsOptions;if(t.dirs||t.transition)return!0;if(!(n&&c>=0))return!(!o&&!l||l&&l.$stable)||s!==i&&(s?!i||_n(s,i,a):!!i);if(1024&c)return!0;if(16&c)return s?_n(s,i,a):!!i;if(8&c){const e=t.dynamicProps;for(let t=0;tGt&&zt.splice(t,1)}(s.update),s.effect.dirty=!0,s.update()}else t.el=e.el,s.vnode=t},B=(e,t,n,s,r,i,l)=>{const c=()=>{if(e.isMounted){let{next:t,bu:n,u:s,parent:o,vnode:a}=e;{const n=No(e);if(n)return t&&(t.el=a.el,V(e,t,l)),void n.asyncDep.then((()=>{e.isUnmounted||c()}))}let u,d=t;wo(e,!1),t?(t.el=a.el,V(e,t,l)):t=a,n&&P(n),(u=t.props&&t.props.onVnodeBeforeUpdate)&&cr(u,o,t,a),wo(e,!0);const p=vn(e),h=e.subTree;e.subTree=p,y(h,p,f(h.el),X(h),e,r,i),t.el=p.el,null===d&&Sn(e,p.el),s&&So(s,r),(u=t.props&&t.props.onVnodeUpdated)&&So((()=>cr(u,o,t,a)),r)}else{let o;const{el:l,props:c}=t,{bm:a,m:u,parent:d}=e,p=ss(t);if(wo(e,!1),a&&P(a),!p&&(o=c&&c.onVnodeBeforeMount)&&cr(o,d,t),wo(e,!0),l&&te){const n=()=>{e.subTree=vn(e),te(l,e.subTree,e,r,null)};p?t.type.__asyncLoader().then((()=>!e.isUnmounted&&n())):n()}else{const o=e.subTree=vn(e);y(null,o,n,s,e,r,i),t.el=o.el}if(u&&So(u,r),!p&&(o=c&&c.onVnodeMounted)){const e=t;So((()=>cr(o,d,e)),r)}(256&t.shapeFlag||d&&ss(d.vnode)&&256&d.vnode.shapeFlag)&&e.a&&So(e.a,r),e.isMounted=!0,t=n=s=null}},a=e.effect=new ue(c,o,(()=>tn(u)),e.scope),u=e.update=()=>{a.dirty&&a.run()};u.id=e.uid,wo(e,!0),u()},V=(e,t,n)=>{t.component=e;const s=e.vnode.props;e.vnode=t,e.next=null,function(e,t,n,s){const{props:o,attrs:r,vnode:{patchFlag:i}}=e,l=Ct(o),[c]=e.propsOptions;let a=!1;if(!(s||i>0)||16&i){let s;to(e,t,o,r)&&(a=!0);for(const r in l)t&&(d(t,r)||(s=O(r))!==r&&d(t,s))||(c?!n||void 0===n[r]&&void 0===n[s]||(o[r]=no(c,l,r,void 0,e,!0)):delete o[r]);if(r!==l)for(const e in r)t&&d(t,e)||(delete r[e],a=!0)}else if(8&i){const n=e.vnode.dynamicProps;for(let s=0;s{const a=e&&e.children,u=e?e.shapeFlag:0,d=t.children,{patchFlag:p,shapeFlag:f}=t;if(p>0){if(128&p)return void H(a,d,n,s,o,r,i,l,c);if(256&p)return void j(a,d,n,s,o,r,i,l,c)}8&f?(16&u&&J(a,o,r),d!==a&&h(n,d)):16&u?16&f?H(a,d,n,s,o,r,i,l,c):J(a,o,r,!0):(8&u&&h(n,""),16&f&&A(d,n,s,o,r,i,l,c))},j=(e,t,n,o,r,i,l,c,a)=>{const u=(e=e||s).length,d=(t=t||s).length,p=Math.min(u,d);let h;for(h=0;hd?J(e,r,i,!0,!1,p):A(t,n,o,r,i,l,c,a,p)},H=(e,t,n,o,r,i,l,c,a)=>{let u=0;const d=t.length;let p=e.length-1,h=d-1;for(;u<=p&&u<=h;){const s=e[u],o=t[u]=a?rr(t[u]):or(t[u]);if(!Xo(s,o))break;y(s,o,n,null,r,i,l,c,a),u++}for(;u<=p&&u<=h;){const s=e[p],o=t[h]=a?rr(t[h]):or(t[h]);if(!Xo(s,o))break;y(s,o,n,null,r,i,l,c,a),p--,h--}if(u>p){if(u<=h){const e=h+1,s=eh)for(;u<=p;)W(e[u],r,i,!0),u++;else{const f=u,m=u,g=new Map;for(u=m;u<=h;u++){const e=t[u]=a?rr(t[u]):or(t[u]);null!=e.key&&g.set(e.key,u)}let v,b=0;const _=h-m+1;let S=!1,x=0;const C=new Array(_);for(u=0;u<_;u++)C[u]=0;for(u=f;u<=p;u++){const s=e[u];if(b>=_){W(s,r,i,!0);continue}let o;if(null!=s.key)o=g.get(s.key);else for(v=m;v<=h;v++)if(0===C[v-m]&&Xo(s,t[v])){o=v;break}void 0===o?W(s,r,i,!0):(C[o-m]=u+1,o>=x?x=o:S=!0,y(s,t[o],n,null,r,i,l,c,a),b++)}const k=S?function(e){const t=e.slice(),n=[0];let s,o,r,i,l;const c=e.length;for(s=0;s>1,e[n[l]]0&&(t[s]=n[r-1]),n[r]=s)}}r=n.length,i=n[r-1];for(;r-- >0;)n[r]=i,i=t[i];return n}(C):s;for(v=k.length-1,u=_-1;u>=0;u--){const e=m+u,s=t[e],p=e+1{const{el:i,type:l,transition:c,children:a,shapeFlag:u}=e;if(6&u)return void q(e.component.subTree,t,n,s);if(128&u)return void e.suspense.move(t,n,s);if(64&u)return void l.move(e,t,n,Y);if(l===$o){r(i,t,n);for(let e=0;e{let o;for(;e&&e!==t;)o=m(e),r(e,n,s),e=o;r(t,n,s)})(e,t,n);if(2!==s&&1&u&&c)if(0===s)c.beforeEnter(i),r(i,t,n),So((()=>c.enter(i)),o);else{const{leave:e,delayLeave:s,afterLeave:o}=c,l=()=>r(i,t,n),a=()=>{e(i,(()=>{l(),o&&o()}))};s?s(i,l,a):a()}else r(i,t,n)},W=(e,t,n,s=!1,o=!1)=>{const{type:r,props:i,ref:l,children:c,dynamicChildren:a,shapeFlag:u,patchFlag:d,dirs:p}=e;if(null!=l&&go(l,null,n,e,!0),256&u)return void t.ctx.deactivate(e);const h=1&u&&p,f=!ss(e);let m;if(f&&(m=i&&i.onVnodeBeforeUnmount)&&cr(m,t,e),6&u)G(e.component,n,s);else{if(128&u)return void e.suspense.unmount(n,s);h&&Hn(e,null,t,"beforeUnmount"),64&u?e.type.remove(e,t,n,o,Y,s):a&&(r!==$o||d>0&&64&d)?J(a,t,n,!1,!0):(r===$o&&384&d||!o&&16&u)&&J(c,t,n),s&&K(e)}(f&&(m=i&&i.onVnodeUnmounted)||h)&&So((()=>{m&&cr(m,t,e),h&&Hn(e,null,t,"unmounted")}),n)},K=e=>{const{type:t,el:n,anchor:s,transition:o}=e;if(t===$o)return void z(n,s);if(t===Do)return void(({el:e,anchor:t})=>{let n;for(;e&&e!==t;)n=m(e),i(e),e=n;i(t)})(e);const r=()=>{i(n),o&&!o.persisted&&o.afterLeave&&o.afterLeave()};if(1&e.shapeFlag&&o&&!o.persisted){const{leave:t,delayLeave:s}=o,i=()=>t(n,r);s?s(e.el,r,i):i()}else r()},z=(e,t)=>{let n;for(;e!==t;)n=m(e),i(e),e=n;i(t)},G=(e,t,n)=>{const{bum:s,scope:o,update:r,subTree:i,um:l}=e;s&&P(s),o.stop(),r&&(r.active=!1,W(i,e,t,n)),l&&So(l,t),So((()=>{e.isUnmounted=!0}),t),t&&t.pendingBranch&&!t.isUnmounted&&e.asyncDep&&!e.asyncResolved&&e.suspenseId===t.pendingId&&(t.deps--,0===t.deps&&t.resolve())},J=(e,t,n,s=!1,o=!1,r=0)=>{for(let i=r;i6&e.shapeFlag?X(e.component.subTree):128&e.shapeFlag?e.suspense.next():m(e.anchor||e.el);let Q=!1;const Z=(e,t,n)=>{null==e?t._vnode&&W(t._vnode,null,null,!0):y(t._vnode||null,e,t,null,null,null,n),Q||(Q=!0,on(),rn(),Q=!1),t._vnode=e},Y={p:y,um:W,m:q,r:K,mt:M,mc:A,pc:D,pbc:N,n:X,o:e};let ee,te;return t&&([ee,te]=t(Y)),{render:Z,hydrate:ee,createApp:Gs(Z,ee)}}function To({type:e,props:t},n){return"svg"===n&&"foreignObject"===e||"mathml"===n&&"annotation-xml"===e&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function wo({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Ao(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Eo(e,t,n=!1){const s=e.children,o=t.children;if(p(s)&&p(o))for(let r=0;re&&(e.disabled||""===e.disabled),Ro=e=>"undefined"!=typeof SVGElement&&e instanceof SVGElement,Oo=e=>"function"==typeof MathMLElement&&e instanceof MathMLElement,Lo=(e,t)=>{const n=e&&e.to;if(v(n)){if(t){return t(n)}return null}return n};function Fo(e,t,n,{o:{insert:s},m:o},r=2){0===r&&s(e.targetAnchor,t,n);const{el:i,anchor:l,shapeFlag:c,children:a,props:u}=e,d=2===r;if(d&&s(i,t,n),(!d||Io(u))&&16&c)for(let p=0;p{16&v&&u(y,e,t,o,r,i,l,c)};g?b(n,a):d&&b(d,p)}else{t.el=e.el;const s=t.anchor=e.anchor,u=t.target=e.target,h=t.targetAnchor=e.targetAnchor,m=Io(e.props),v=m?n:u,y=m?s:h;if("svg"===i||Ro(u)?i="svg":("mathml"===i||Oo(u))&&(i="mathml"),b?(p(e.dynamicChildren,b,v,o,r,i,l),Eo(e,t,!0)):c||d(e,t,v,y,o,r,i,l,!1),g)m?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):Fo(t,n,s,a,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const e=t.target=Lo(t.props,f);e&&Fo(t,e,null,a,0)}else m&&Fo(t,u,h,a,1)}Po(t)},remove(e,t,n,s,{um:o,o:{remove:r}},i){const{shapeFlag:l,children:c,anchor:a,targetAnchor:u,target:d,props:p}=e;if(d&&r(u),i&&r(a),16&l){const e=i||!Io(p);for(let s=0;s0?jo||s:null,qo(),Wo>0&&jo&&jo.push(e),e}function Go(e,t,n,s,o){return zo(er(e,t,n,s,o,!0))}function Jo(e){return!!e&&!0===e.__v_isVNode}function Xo(e,t){return e.type===t.type&&e.key===t.key}const Qo=({key:e})=>null!=e?e:null,Zo=({ref:e,ref_key:t,ref_for:n})=>("number"==typeof e&&(e=""+e),null!=e?v(e)||It(e)||g(e)?{i:hn,r:e,k:t,f:!!n}:e:null);function Yo(e,t=null,n=null,s=0,o=null,r=(e===$o?0:1),i=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Qo(t),ref:t&&Zo(t),scopeId:fn,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:r,patchFlag:s,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:hn};return l?(ir(c,n),128&r&&e.normalize(c)):n&&(c.shapeFlag|=v(n)?8:16),Wo>0&&!i&&jo&&(c.patchFlag>0||6&r)&&32!==c.patchFlag&&jo.push(c),c}const er=function(e,t=null,n=null,s=0,o=null,r=!1){e&&e!==Cn||(e=Vo);if(Jo(e)){const s=nr(e,t,!0);return n&&ir(s,n),Wo>0&&!r&&jo&&(6&s.shapeFlag?jo[jo.indexOf(e)]=s:jo.push(s)),s.patchFlag|=-2,s}i=e,g(i)&&"__vccOpts"in i&&(e=e.__vccOpts);var i;if(t){t=tr(t);let{class:e,style:n}=t;e&&!v(e)&&(t.class=G(e)),b(n)&&(xt(n)&&!p(n)&&(n=c({},n)),t.style=H(n))}const l=v(e)?1:wn(e)?128:(e=>e.__isTeleport)(e)?64:b(e)?4:g(e)?2:0;return Yo(e,t,n,s,o,l,r,!0)};function tr(e){return e?xt(e)||eo(e)?c({},e):e:null}function nr(e,t,n=!1){const{props:s,ref:o,patchFlag:r,children:i}=e,l=t?lr(s||{},t):s;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&Qo(l),ref:t&&t.ref?n&&o?p(o)?o.concat(Zo(t)):[o,Zo(t)]:Zo(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==$o?-1===r?16:16|r:r,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&nr(e.ssContent),ssFallback:e.ssFallback&&nr(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function sr(e=" ",t=0){return er(Bo,null,e,t)}function or(e){return null==e||"boolean"==typeof e?er(Vo):p(e)?er($o,null,e.slice()):"object"==typeof e?rr(e):er(Bo,null,String(e))}function rr(e){return null===e.el&&-1!==e.patchFlag||e.memo?e:nr(e)}function ir(e,t){let n=0;const{shapeFlag:s}=e;if(null==t)t=null;else if(p(t))n=16;else if("object"==typeof t){if(65&s){const n=t.default;return void(n&&(n._c&&(n._d=!1),ir(e,n()),n._c&&(n._d=!0)))}{n=32;const s=t._;s||eo(t)?3===s&&hn&&(1===hn.slots._?t._=1:(t._=2,e.patchFlag|=1024)):t._ctx=hn}}else g(t)?(t={default:t,_ctx:hn},n=32):(t=String(t),64&s?(n=16,t=[sr(t)]):n=8);e.children=t,e.shapeFlag|=n}function lr(...e){const t={};for(let n=0;ndr||hn;let hr,fr;hr=e=>{dr=e},fr=e=>{_r=e};const mr=e=>{const t=dr;return hr(e),e.scope.on(),()=>{e.scope.off(),hr(t)}},gr=()=>{dr&&dr.scope.off(),hr(null)};function vr(e){return 4&e.vnode.shapeFlag}let yr,br,_r=!1;function Sr(e,t,n){g(t)?e.render=t:b(t)&&(e.setupState=Pt(t)),Cr(e,n)}function xr(e){yr=e,br=e=>{e.render._rc&&(e.withProxy=new Proxy(e.ctx,Rs))}}function Cr(e,t,n){const s=e.type;if(!e.render){if(!t&&yr&&!s.render){const t=s.template||Bs(e).template;if(t){const{isCustomElement:n,compilerOptions:o}=e.appContext.config,{delimiters:r,compilerOptions:i}=s,l=c(c({isCustomElement:n,delimiters:r},o),i);s.render=yr(t,l)}}e.render=s.render||o,br&&br(e)}{const t=mr(e);ye();try{Ms(e)}finally{be(),t()}}}const kr={get:(e,t)=>(Ne(e,0,""),e[t])};function Tr(e){const t=t=>{e.exposed=t||{}};return{attrs:new Proxy(e.attrs,kr),slots:e.slots,emit:e.emit,expose:t}}function wr(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Pt(kt(e.exposed)),{get:(t,n)=>n in t?t[n]:n in Es?Es[n](e):void 0,has:(e,t)=>t in e||t in Es}))}function Ar(e,t=!0){return g(e)?e.displayName||e.name:e.name||t&&e.__name}const Er=(e,t)=>{const n=function(e,t,n=!1){let s,r;const i=g(e);return i?(s=e,r=o):(s=e.get,r=e.set),new At(s,r,i||!r,n)}(e,0,_r);return n};function Nr(e,t,n){const s=arguments.length;return 2===s?b(t)&&!p(t)?Jo(t)?er(e,null,[t]):er(e,t):er(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):3===s&&Jo(n)&&(n=[n]),er(e,t,n))}function Ir(e,t){const n=e.memo;if(n.length!=t.length)return!1;for(let s=0;s0&&jo&&jo.push(e),!0}const Rr="3.4.23",Or=o,Lr=o,Fr="undefined"!=typeof document?document:null,Mr=Fr&&Fr.createElement("template"),Pr={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const o="svg"===t?Fr.createElementNS("http://www.w3.org/2000/svg",e):"mathml"===t?Fr.createElementNS("http://www.w3.org/1998/Math/MathML",e):Fr.createElement(e,n?{is:n}:void 0);return"select"===e&&s&&null!=s.multiple&&o.setAttribute("multiple",s.multiple),o},createText:e=>Fr.createTextNode(e),createComment:e=>Fr.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Fr.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,o,r){const i=n?n.previousSibling:t.lastChild;if(o&&(o===r||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),o!==r&&(o=o.nextSibling););else{Mr.innerHTML="svg"===s?`${e}`:"mathml"===s?`${e}`:e;const o=Mr.content;if("svg"===s||"mathml"===s){const e=o.firstChild;for(;e.firstChild;)o.appendChild(e.firstChild);o.removeChild(e)}t.insertBefore(o,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},$r="transition",Br="animation",Vr=Symbol("_vtc"),Dr=(e,{slots:t})=>Nr(Jn,Wr(e),t);Dr.displayName="Transition";const Ur={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},jr=Dr.props=c({},Gn,Ur),Hr=(e,t=[])=>{p(e)?e.forEach((e=>e(...t))):e&&e(...t)},qr=e=>!!e&&(p(e)?e.some((e=>e.length>1)):e.length>1);function Wr(e){const t={};for(const c in e)c in Ur||(t[c]=e[c]);if(!1===e.css)return t;const{name:n="v",type:s,duration:o,enterFromClass:r=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:a=r,appearActiveClass:u=i,appearToClass:d=l,leaveFromClass:p=`${n}-leave-from`,leaveActiveClass:h=`${n}-leave-active`,leaveToClass:f=`${n}-leave-to`}=e,m=function(e){if(null==e)return null;if(b(e))return[Kr(e.enter),Kr(e.leave)];{const t=Kr(e);return[t,t]}}(o),g=m&&m[0],v=m&&m[1],{onBeforeEnter:y,onEnter:_,onEnterCancelled:S,onLeave:x,onLeaveCancelled:C,onBeforeAppear:k=y,onAppear:T=_,onAppearCancelled:w=S}=t,A=(e,t,n)=>{Gr(e,t?d:l),Gr(e,t?u:i),n&&n()},E=(e,t)=>{e._isLeaving=!1,Gr(e,p),Gr(e,f),Gr(e,h),t&&t()},N=e=>(t,n)=>{const o=e?T:_,i=()=>A(t,e,n);Hr(o,[t,i]),Jr((()=>{Gr(t,e?a:r),zr(t,e?d:l),qr(o)||Qr(t,s,g,i)}))};return c(t,{onBeforeEnter(e){Hr(y,[e]),zr(e,r),zr(e,i)},onBeforeAppear(e){Hr(k,[e]),zr(e,a),zr(e,u)},onEnter:N(!1),onAppear:N(!0),onLeave(e,t){e._isLeaving=!0;const n=()=>E(e,t);zr(e,p),ti(),zr(e,h),Jr((()=>{e._isLeaving&&(Gr(e,p),zr(e,f),qr(x)||Qr(e,s,v,n))})),Hr(x,[e,n])},onEnterCancelled(e){A(e,!1),Hr(S,[e])},onAppearCancelled(e){A(e,!0),Hr(w,[e])},onLeaveCancelled(e){E(e),Hr(C,[e])}})}function Kr(e){return V(e)}function zr(e,t){t.split(/\s+/).forEach((t=>t&&e.classList.add(t))),(e[Vr]||(e[Vr]=new Set)).add(t)}function Gr(e,t){t.split(/\s+/).forEach((t=>t&&e.classList.remove(t)));const n=e[Vr];n&&(n.delete(t),n.size||(e[Vr]=void 0))}function Jr(e){requestAnimationFrame((()=>{requestAnimationFrame(e)}))}let Xr=0;function Qr(e,t,n,s){const o=e._endId=++Xr,r=()=>{o===e._endId&&s()};if(n)return setTimeout(r,n);const{type:i,timeout:l,propCount:c}=Zr(e,t);if(!i)return s();const a=i+"end";let u=0;const d=()=>{e.removeEventListener(a,p),r()},p=t=>{t.target===e&&++u>=c&&d()};setTimeout((()=>{u(n[e]||"").split(", "),o=s(`${$r}Delay`),r=s(`${$r}Duration`),i=Yr(o,r),l=s(`${Br}Delay`),c=s(`${Br}Duration`),a=Yr(l,c);let u=null,d=0,p=0;t===$r?i>0&&(u=$r,d=i,p=r.length):t===Br?a>0&&(u=Br,d=a,p=c.length):(d=Math.max(i,a),u=d>0?i>a?$r:Br:null,p=u?u===$r?r.length:c.length:0);return{type:u,timeout:d,propCount:p,hasTransform:u===$r&&/\b(transform|all)(,|$)/.test(s(`${$r}Property`).toString())}}function Yr(e,t){for(;e.lengthei(t)+ei(e[n]))))}function ei(e){return"auto"===e?0:1e3*Number(e.slice(0,-1).replace(",","."))}function ti(){return document.body.offsetHeight}const ni=Symbol("_vod"),si=Symbol("_vsh"),oi={beforeMount(e,{value:t},{transition:n}){e[ni]="none"===e.style.display?"":e.style.display,n&&t?n.beforeEnter(e):ri(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:s}){!t!=!n&&(s?t?(s.beforeEnter(e),ri(e,!0),s.enter(e)):s.leave(e,(()=>{ri(e,!1)})):ri(e,t))},beforeUnmount(e,{value:t}){ri(e,t)}};function ri(e,t){e.style.display=t?e[ni]:"none",e[si]=!t}const ii=Symbol("");function li(e,t){if(128&e.shapeFlag){const n=e.suspense;e=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push((()=>{li(n.activeBranch,t)}))}for(;e.component;)e=e.component.subTree;if(1&e.shapeFlag&&e.el)ci(e.el,t);else if(e.type===$o)e.children.forEach((e=>li(e,t)));else if(e.type===Do){let{el:n,anchor:s}=e;for(;n&&(ci(n,t),n!==s);)n=n.nextSibling}}function ci(e,t){if(1===e.nodeType){const n=e.style;let s="";for(const e in t)n.setProperty(`--${e}`,t[e]),s+=`--${e}: ${t[e]};`;n[ii]=s}}const ai=/(^|;)\s*display\s*:/;const ui=/\s*!important$/;function di(e,t,n){if(p(n))n.forEach((n=>di(e,t,n)));else if(null==n&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=function(e,t){const n=hi[t];if(n)return n;let s=I(t);if("filter"!==s&&s in e)return hi[t]=s;s=L(s);for(let o=0;o{if(e._vts){if(e._vts<=n.attached)return}else e._vts=Date.now();Ht(function(e,t){if(p(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map((e=>t=>!t._stopped&&e&&e(t)))}return t}(e,n.value),t,5,[e])};return n.value=e,n.attached=Si(),n}(s,o);mi(e,n,i,l)}else i&&(!function(e,t,n,s){e.removeEventListener(t,n,s)}(e,n,i,l),r[t]=void 0)}}const yi=/(?:Once|Passive|Capture)$/;let bi=0;const _i=Promise.resolve(),Si=()=>bi||(_i.then((()=>bi=0)),bi=Date.now());const xi=e=>111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123; +/*! #__NO_SIDE_EFFECTS__ */ +function Ci(e,t){const n=ns(e);class s extends Ti{constructor(e){super(n,e,t)}}return s.def=n,s} +/*! #__NO_SIDE_EFFECTS__ */const ki="undefined"!=typeof HTMLElement?HTMLElement:class{};class Ti extends ki{constructor(e,t={},n){super(),this._def=e,this._props=t,this._instance=null,this._connected=!1,this._resolved=!1,this._numberProps=null,this._ob=null,this.shadowRoot&&n?n(this._createVNode(),this.shadowRoot):(this.attachShadow({mode:"open"}),this._def.__asyncLoader||this._resolveProps(this._def))}connectedCallback(){this._connected=!0,this._instance||(this._resolved?this._update():this._resolveDef())}disconnectedCallback(){this._connected=!1,this._ob&&(this._ob.disconnect(),this._ob=null),en((()=>{this._connected||(sl(null,this.shadowRoot),this._instance=null)}))}_resolveDef(){this._resolved=!0;for(let n=0;n{for(const t of e)this._setAttr(t.attributeName)})),this._ob.observe(this,{attributes:!0});const e=(e,t=!1)=>{const{props:n,styles:s}=e;let o;if(n&&!p(n))for(const r in n){const e=n[r];(e===Number||e&&e.type===Number)&&(r in this._props&&(this._props[r]=V(this._props[r])),(o||(o=Object.create(null)))[I(r)]=!0)}this._numberProps=o,t&&this._resolveProps(e),this._applyStyles(s),this._update()},t=this._def.__asyncLoader;t?t().then((t=>e(t,!0))):e(this._def)}_resolveProps(e){const{props:t}=e,n=p(t)?t:Object.keys(t||{});for(const s of Object.keys(this))"_"!==s[0]&&n.includes(s)&&this._setProp(s,this[s],!0,!1);for(const s of n.map(I))Object.defineProperty(this,s,{get(){return this._getProp(s)},set(e){this._setProp(s,e)}})}_setAttr(e){let t=this.hasAttribute(e)?this.getAttribute(e):void 0;const n=I(e);this._numberProps&&this._numberProps[n]&&(t=V(t)),this._setProp(n,t,!1)}_getProp(e){return this._props[e]}_setProp(e,t,n=!0,s=!0){t!==this._props[e]&&(this._props[e]=t,s&&this._instance&&this._update(),n&&(!0===t?this.setAttribute(O(e),""):"string"==typeof t||"number"==typeof t?this.setAttribute(O(e),t+""):t||this.removeAttribute(O(e))))}_update(){sl(this._createVNode(),this.shadowRoot)}_createVNode(){const e=er(this._def,c({},this._props));return this._instance||(e.ce=e=>{this._instance=e,e.isCE=!0;const t=(e,t)=>{this.dispatchEvent(new CustomEvent(e,{detail:t}))};e.emit=(e,...n)=>{t(e,n),O(e)!==e&&t(O(e),n)};let n=this;for(;n=n&&(n.parentNode||n.host);)if(n instanceof Ti){e.parent=n._instance,e.provides=n._instance.provides;break}}),e}_applyStyles(e){e&&e.forEach((e=>{const t=document.createElement("style");t.textContent=e,this.shadowRoot.appendChild(t)}))}}const wi=new WeakMap,Ai=new WeakMap,Ei=Symbol("_moveCb"),Ni=Symbol("_enterCb"),Ii={name:"TransitionGroup",props:c({},jr,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=pr(),s=Kn();let o,r;return bs((()=>{if(!o.length)return;const t=e.moveClass||`${e.name||"v"}-move`;if(!function(e,t,n){const s=e.cloneNode(),o=e[Vr];o&&o.forEach((e=>{e.split(/\s+/).forEach((e=>e&&s.classList.remove(e)))}));n.split(/\s+/).forEach((e=>e&&s.classList.add(e))),s.style.display="none";const r=1===t.nodeType?t:t.parentNode;r.appendChild(s);const{hasTransform:i}=Zr(s);return r.removeChild(s),i}(o[0].el,n.vnode.el,t))return;o.forEach(Oi),o.forEach(Li);const s=o.filter(Fi);ti(),s.forEach((e=>{const n=e.el,s=n.style;zr(n,t),s.transform=s.webkitTransform=s.transitionDuration="";const o=n[Ei]=e=>{e&&e.target!==n||e&&!/transform$/.test(e.propertyName)||(n.removeEventListener("transitionend",o),n[Ei]=null,Gr(n,t))};n.addEventListener("transitionend",o)}))})),()=>{const i=Ct(e),l=Wr(i);let c=i.tag||$o;if(o=[],r)for(let e=0;e{const t=e.props["onUpdate:modelValue"]||!1;return p(t)?e=>P(t,e):t};function Pi(e){e.target.composing=!0}function $i(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Bi=Symbol("_assign"),Vi={created(e,{modifiers:{lazy:t,trim:n,number:s}},o){e[Bi]=Mi(o);const r=s||o.props&&"number"===o.props.type;mi(e,t?"change":"input",(t=>{if(t.target.composing)return;let s=e.value;n&&(s=s.trim()),r&&(s=B(s)),e[Bi](s)})),n&&mi(e,"change",(()=>{e.value=e.value.trim()})),t||(mi(e,"compositionstart",Pi),mi(e,"compositionend",$i),mi(e,"change",$i))},mounted(e,{value:t}){e.value=null==t?"":t},beforeUpdate(e,{value:t,modifiers:{lazy:n,trim:s,number:o}},r){if(e[Bi]=Mi(r),e.composing)return;const i=null==t?"":t;if((!o&&"number"!==e.type||/^0\d/.test(e.value)?e.value:B(e.value))!==i){if(document.activeElement===e&&"range"!==e.type){if(n)return;if(s&&e.value.trim()===i)return}e.value=i}}},Di={deep:!0,created(e,t,n){e[Bi]=Mi(n),mi(e,"change",(()=>{const t=e._modelValue,n=Wi(e),s=e.checked,o=e[Bi];if(p(t)){const e=ne(t,n),r=-1!==e;if(s&&!r)o(t.concat(n));else if(!s&&r){const n=[...t];n.splice(e,1),o(n)}}else if(f(t)){const e=new Set(t);s?e.add(n):e.delete(n),o(e)}else o(Ki(e,s))}))},mounted:Ui,beforeUpdate(e,t,n){e[Bi]=Mi(n),Ui(e,t,n)}};function Ui(e,{value:t,oldValue:n},s){e._modelValue=t,p(t)?e.checked=ne(t,s.props.value)>-1:f(t)?e.checked=t.has(s.props.value):t!==n&&(e.checked=te(t,Ki(e,!0)))}const ji={created(e,{value:t},n){e.checked=te(t,n.props.value),e[Bi]=Mi(n),mi(e,"change",(()=>{e[Bi](Wi(e))}))},beforeUpdate(e,{value:t,oldValue:n},s){e[Bi]=Mi(s),t!==n&&(e.checked=te(t,s.props.value))}},Hi={deep:!0,created(e,{value:t,modifiers:{number:n}},s){const o=f(t);mi(e,"change",(()=>{const t=Array.prototype.filter.call(e.options,(e=>e.selected)).map((e=>n?B(Wi(e)):Wi(e)));e[Bi](e.multiple?o?new Set(t):t:t[0]),e._assigning=!0,en((()=>{e._assigning=!1}))})),e[Bi]=Mi(s)},mounted(e,{value:t,modifiers:{}}){qi(e,t)},beforeUpdate(e,t,n){e[Bi]=Mi(n)},updated(e,{value:t,modifiers:{}}){e._assigning||qi(e,t)}};function qi(e,t,n){const s=e.multiple,o=p(t);if(!s||o||f(t)){for(let n=0,r=e.options.length;nString(e)===String(i))):ne(t,i)>-1}else r.selected=t.has(i);else if(te(Wi(r),t))return void(e.selectedIndex!==n&&(e.selectedIndex=n))}s||-1===e.selectedIndex||(e.selectedIndex=-1)}}function Wi(e){return"_value"in e?e._value:e.value}function Ki(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const zi={created(e,t,n){Gi(e,t,n,null,"created")},mounted(e,t,n){Gi(e,t,n,null,"mounted")},beforeUpdate(e,t,n,s){Gi(e,t,n,s,"beforeUpdate")},updated(e,t,n,s){Gi(e,t,n,s,"updated")}};function Gi(e,t,n,s,o){const r=function(e,t){switch(e){case"SELECT":return Hi;case"TEXTAREA":return Vi;default:switch(t){case"checkbox":return Di;case"radio":return ji;default:return Vi}}}(e.tagName,n.props&&n.props.type)[o];r&&r(e,t,n,s)}const Ji=["ctrl","shift","alt","meta"],Xi={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&0!==e.button,middle:e=>"button"in e&&1!==e.button,right:e=>"button"in e&&2!==e.button,exact:(e,t)=>Ji.some((n=>e[`${n}Key`]&&!t.includes(n)))},Qi={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},Zi=c({patchProp:(e,t,n,s,o,r,c,a,u)=>{const d="svg"===o;"class"===t?function(e,t,n){const s=e[Vr];s&&(t=(t?[t,...s]:[...s]).join(" ")),null==t?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}(e,s,d):"style"===t?function(e,t,n){const s=e.style,o=v(n);let r=!1;if(n&&!o){if(t)if(v(t))for(const e of t.split(";")){const t=e.slice(0,e.indexOf(":")).trim();null==n[t]&&di(s,t,"")}else for(const e in t)null==n[e]&&di(s,e,"");for(const e in n)"display"===e&&(r=!0),di(s,e,n[e])}else if(o){if(t!==n){const e=s[ii];e&&(n+=";"+e),s.cssText=n,r=ai.test(n)}}else t&&e.removeAttribute("style");ni in e&&(e[ni]=r?s.display:"",e[si]&&(s.display="none"))}(e,n,s):i(t)?l(t)||vi(e,t,0,s,c):("."===t[0]?(t=t.slice(1),1):"^"===t[0]?(t=t.slice(1),0):function(e,t,n,s){if(s)return"innerHTML"===t||"textContent"===t||!!(t in e&&xi(t)&&g(n));if("spellcheck"===t||"draggable"===t||"translate"===t)return!1;if("form"===t)return!1;if("list"===t&&"INPUT"===e.tagName)return!1;if("type"===t&&"TEXTAREA"===e.tagName)return!1;if("width"===t||"height"===t){const t=e.tagName;if("IMG"===t||"VIDEO"===t||"CANVAS"===t||"SOURCE"===t)return!1}if(xi(t)&&v(n))return!1;return t in e}(e,t,s,d))?function(e,t,n,s,o,r,i){if("innerHTML"===t||"textContent"===t)return s&&i(s,o,r),void(e[t]=null==n?"":n);const l=e.tagName;if("value"===t&&"PROGRESS"!==l&&!l.includes("-")){const s=null==n?"":n;return("OPTION"===l?e.getAttribute("value")||"":e.value)===s&&"_value"in e||(e.value=s),null==n&&e.removeAttribute(t),void(e._value=n)}let c=!1;if(""===n||null==n){const s=typeof e[t];"boolean"===s?n=ee(n):null==n&&"string"===s?(n="",c=!0):"number"===s&&(n=0,c=!0)}try{e[t]=n}catch(a){}c&&e.removeAttribute(t)}(e,t,s,r,c,a,u):("true-value"===t?e._trueValue=s:"false-value"===t&&(e._falseValue=s),function(e,t,n,s,o){if(s&&t.startsWith("xlink:"))null==n?e.removeAttributeNS(fi,t.slice(6,t.length)):e.setAttributeNS(fi,t,n);else{const s=Y(t);null==n||s&&!ee(n)?e.removeAttribute(t):e.setAttribute(t,s?"":n)}}(e,t,s,d))}},Pr);let Yi,el=!1;function tl(){return Yi||(Yi=xo(Zi))}function nl(){return Yi=el?Yi:Co(Zi),el=!0,Yi}const sl=(...e)=>{tl().render(...e)},ol=(...e)=>{nl().hydrate(...e)};function rl(e){return e instanceof SVGElement?"svg":"function"==typeof MathMLElement&&e instanceof MathMLElement?"mathml":void 0}function il(e){if(v(e)){return document.querySelector(e)}return e}const ll=o,cl=Symbol(""),al=Symbol(""),ul=Symbol(""),dl=Symbol(""),pl=Symbol(""),hl=Symbol(""),fl=Symbol(""),ml=Symbol(""),gl=Symbol(""),vl=Symbol(""),yl=Symbol(""),bl=Symbol(""),_l=Symbol(""),Sl=Symbol(""),xl=Symbol(""),Cl=Symbol(""),kl=Symbol(""),Tl=Symbol(""),wl=Symbol(""),Al=Symbol(""),El=Symbol(""),Nl=Symbol(""),Il=Symbol(""),Rl=Symbol(""),Ol=Symbol(""),Ll=Symbol(""),Fl=Symbol(""),Ml=Symbol(""),Pl=Symbol(""),$l=Symbol(""),Bl=Symbol(""),Vl=Symbol(""),Dl=Symbol(""),Ul=Symbol(""),jl=Symbol(""),Hl=Symbol(""),ql=Symbol(""),Wl=Symbol(""),Kl=Symbol(""),zl={[cl]:"Fragment",[al]:"Teleport",[ul]:"Suspense",[dl]:"KeepAlive",[pl]:"BaseTransition",[hl]:"openBlock",[fl]:"createBlock",[ml]:"createElementBlock",[gl]:"createVNode",[vl]:"createElementVNode",[yl]:"createCommentVNode",[bl]:"createTextVNode",[_l]:"createStaticVNode",[Sl]:"resolveComponent",[xl]:"resolveDynamicComponent",[Cl]:"resolveDirective",[kl]:"resolveFilter",[Tl]:"withDirectives",[wl]:"renderList",[Al]:"renderSlot",[El]:"createSlots",[Nl]:"toDisplayString",[Il]:"mergeProps",[Rl]:"normalizeClass",[Ol]:"normalizeStyle",[Ll]:"normalizeProps",[Fl]:"guardReactiveProps",[Ml]:"toHandlers",[Pl]:"camelize",[$l]:"capitalize",[Bl]:"toHandlerKey",[Vl]:"setBlockTracking",[Dl]:"pushScopeId",[Ul]:"popScopeId",[jl]:"withCtx",[Hl]:"unref",[ql]:"isRef",[Wl]:"withMemo",[Kl]:"isMemoSame"};const Gl={start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0},source:""};function Jl(e,t,n,s,o,r,i,l=!1,c=!1,a=!1,u=Gl){return e&&(l?(e.helper(hl),e.helper(rc(e.inSSR,a))):e.helper(oc(e.inSSR,a)),i&&e.helper(Tl)),{type:13,tag:t,props:n,children:s,patchFlag:o,dynamicProps:r,directives:i,isBlock:l,disableTracking:c,isComponent:a,loc:u}}function Xl(e,t=Gl){return{type:17,loc:t,elements:e}}function Ql(e,t=Gl){return{type:15,loc:t,properties:e}}function Zl(e,t){return{type:16,loc:Gl,key:v(e)?Yl(e,!0):e,value:t}}function Yl(e,t=!1,n=Gl,s=0){return{type:4,loc:n,content:e,isStatic:t,constType:t?3:s}}function ec(e,t=Gl){return{type:8,loc:t,children:e}}function tc(e,t=[],n=Gl){return{type:14,loc:n,callee:e,arguments:t}}function nc(e,t=void 0,n=!1,s=!1,o=Gl){return{type:18,params:e,returns:t,newline:n,isSlot:s,loc:o}}function sc(e,t,n,s=!0){return{type:19,test:e,consequent:t,alternate:n,newline:s,loc:Gl}}function oc(e,t){return e||t?gl:vl}function rc(e,t){return e||t?fl:ml}function ic(e,{helper:t,removeHelper:n,inSSR:s}){e.isBlock||(e.isBlock=!0,n(oc(s,e.isComponent)),t(hl),t(rc(s,e.isComponent)))}const lc=new Uint8Array([123,123]),cc=new Uint8Array([125,125]);function ac(e){return e>=97&&e<=122||e>=65&&e<=90}function uc(e){return 32===e||10===e||9===e||12===e||13===e}function dc(e){return 47===e||62===e||uc(e)}function pc(e){const t=new Uint8Array(e.length);for(let n=0;n4===e.type&&e.isStatic;function yc(e){switch(e){case"Teleport":case"teleport":return al;case"Suspense":case"suspense":return ul;case"KeepAlive":case"keep-alive":return dl;case"BaseTransition":case"base-transition":return pl}}const bc=/^\d|[^\$\w]/,_c=e=>!bc.test(e),Sc=/[A-Za-z_$\xA0-\uFFFF]/,xc=/[\.\?\w$\xA0-\uFFFF]/,Cc=/\s+[.[]\s*|\s*[.[]\s+/g,kc=e=>{e=e.trim().replace(Cc,(e=>e.trim()));let t=0,n=[],s=0,o=0,r=null;for(let i=0;i4===e.key.type&&e.key.content===s))}return n}function Pc(e,t){return`_${t}_${e.replace(/[^\w]/g,((t,n)=>"-"===t?"_":e.charCodeAt(n).toString()))}`}const $c=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,Bc={parseMode:"base",ns:0,delimiters:["{{","}}"],getNamespace:()=>0,isVoidTag:r,isPreTag:r,isCustomElement:r,onError:fc,onWarn:mc,comments:!1,prefixIdentifiers:!1};let Vc=Bc,Dc=null,Uc="",jc=null,Hc=null,qc="",Wc=-1,Kc=-1,zc=0,Gc=!1,Jc=null;const Xc=[],Qc=new class{constructor(e,t){this.stack=e,this.cbs=t,this.state=1,this.buffer="",this.sectionStart=0,this.index=0,this.entityStart=0,this.baseState=1,this.inRCDATA=!1,this.inXML=!1,this.inVPre=!1,this.newlines=[],this.mode=0,this.delimiterOpen=lc,this.delimiterClose=cc,this.delimiterIndex=-1,this.currentSequence=void 0,this.sequenceIndex=0}get inSFCRoot(){return 2===this.mode&&0===this.stack.length}reset(){this.state=1,this.mode=0,this.buffer="",this.sectionStart=0,this.index=0,this.baseState=1,this.inRCDATA=!1,this.currentSequence=void 0,this.newlines.length=0,this.delimiterOpen=lc,this.delimiterClose=cc}getPos(e){let t=1,n=e+1;for(let s=this.newlines.length-1;s>=0;s--){const o=this.newlines[s];if(e>o){t=s+2,n=e-o;break}}return{column:n,line:t,offset:e}}peek(){return this.buffer.charCodeAt(this.index+1)}stateText(e){60===e?(this.index>this.sectionStart&&this.cbs.ontext(this.sectionStart,this.index),this.state=5,this.sectionStart=this.index):this.inVPre||e!==this.delimiterOpen[0]||(this.state=2,this.delimiterIndex=0,this.stateInterpolationOpen(e))}stateInterpolationOpen(e){if(e===this.delimiterOpen[this.delimiterIndex])if(this.delimiterIndex===this.delimiterOpen.length-1){const e=this.index+1-this.delimiterOpen.length;e>this.sectionStart&&this.cbs.ontext(this.sectionStart,e),this.state=3,this.sectionStart=e}else this.delimiterIndex++;else this.inRCDATA?(this.state=32,this.stateInRCDATA(e)):(this.state=1,this.stateText(e))}stateInterpolation(e){e===this.delimiterClose[0]&&(this.state=4,this.delimiterIndex=0,this.stateInterpolationClose(e))}stateInterpolationClose(e){e===this.delimiterClose[this.delimiterIndex]?this.delimiterIndex===this.delimiterClose.length-1?(this.cbs.oninterpolation(this.sectionStart,this.index+1),this.state=this.inRCDATA?32:1,this.sectionStart=this.index+1):this.delimiterIndex++:(this.state=3,this.stateInterpolation(e))}stateSpecialStartSequence(e){const t=this.sequenceIndex===this.currentSequence.length;if(t?dc(e):(32|e)===this.currentSequence[this.sequenceIndex]){if(!t)return void this.sequenceIndex++}else this.inRCDATA=!1;this.sequenceIndex=0,this.state=6,this.stateInTagName(e)}stateInRCDATA(e){if(this.sequenceIndex===this.currentSequence.length){if(62===e||uc(e)){const t=this.index-this.currentSequence.length;if(this.sectionStart=e||(28===this.state?this.currentSequence===hc.CdataEnd?this.cbs.oncdata(this.sectionStart,e):this.cbs.oncomment(this.sectionStart,e):6===this.state||11===this.state||18===this.state||17===this.state||12===this.state||13===this.state||14===this.state||15===this.state||16===this.state||20===this.state||19===this.state||21===this.state||9===this.state||this.cbs.ontext(this.sectionStart,e))}emitCodePoint(e,t){}}(Xc,{onerr:ga,ontext(e,t){na(ea(e,t),e,t)},ontextentity(e,t,n){na(e,t,n)},oninterpolation(e,t){if(Gc)return na(ea(e,t),e,t);let n=e+Qc.delimiterOpen.length,s=t-Qc.delimiterClose.length;for(;uc(Uc.charCodeAt(n));)n++;for(;uc(Uc.charCodeAt(s-1));)s--;let o=ea(n,s);o.includes("&")&&(o=Vc.decodeEntities(o,!1)),da({type:5,content:ma(o,!1,pa(n,s)),loc:pa(e,t)})},onopentagname(e,t){const n=ea(e,t);jc={type:1,tag:n,ns:Vc.getNamespace(n,Xc[0],Vc.ns),tagType:0,props:[],children:[],loc:pa(e-1,t),codegenNode:void 0}},onopentagend(e){ta(e)},onclosetag(e,t){const n=ea(e,t);if(!Vc.isVoidTag(n)){let s=!1;for(let e=0;e(7===e.type?e.rawName:e.name)===t))},onattribend(e,t){if(jc&&Hc){if(ha(Hc.loc,t),0!==e)if(qc.includes("&")&&(qc=Vc.decodeEntities(qc,!0)),6===Hc.type)"class"===Hc.name&&(qc=ua(qc).trim()),Hc.value={type:2,content:qc,loc:1===e?pa(Wc,Kc):pa(Wc-1,Kc+1)},Qc.inSFCRoot&&"template"===jc.tag&&"lang"===Hc.name&&qc&&"html"!==qc&&Qc.enterRCDATA(pc("{const o=t.start.offset+n;return ma(e,!1,pa(o,o+e.length),0,s?1:0)},l={source:i(r.trim(),n.indexOf(r,o.length)),value:void 0,key:void 0,index:void 0,finalized:!1};let c=o.trim().replace(Yc,"").trim();const a=o.indexOf(c),u=c.match(Zc);if(u){c=c.replace(Zc,"").trim();const e=u[1].trim();let t;if(e&&(t=n.indexOf(e,a+c.length),l.key=i(e,t,!0)),u[2]){const s=u[2].trim();s&&(l.index=i(s,n.indexOf(s,l.key?t+e.length:a+c.length),!0))}}c&&(l.value=i(c,a,!0));return l}(Hc.exp))}7===Hc.type&&"pre"===Hc.name||jc.props.push(Hc)}qc="",Wc=Kc=-1},oncomment(e,t){Vc.comments&&da({type:3,content:ea(e,t),loc:pa(e-4,t+3)})},onend(){const e=Uc.length;for(let t=0;t64&&s<91)||yc(e)||(null==(n=Vc.isBuiltInComponent)?void 0:n.call(Vc,e))||Vc.isNativeTag&&!Vc.isNativeTag(e))return!0;var s;for(let o=0;o=0;)n--;return n}const ra=new Set(["if","else","else-if","for","slot"]);const ia=/\r\n/g;function la(e,t){var n,s;const o="preserve"!==Vc.whitespace;let r=!1;for(let i=0;i0){if(s>=2){e.codegenNode.patchFlag="-1",e.codegenNode=t.hoist(e.codegenNode),r++;continue}}else{const n=e.codegenNode;if(13===n.type){const s=wa(n);if((!s||512===s||1===s)&&ka(e,t)>=2){const s=Ta(e);s&&(n.props=t.hoist(s))}n.dynamicProps&&(n.dynamicProps=t.hoist(n.dynamicProps))}}}if(1===e.type){const n=1===e.tagType;n&&t.scopes.vSlot++,_a(e,t),n&&t.scopes.vSlot--}else if(11===e.type)_a(e,t,1===e.children.length);else if(9===e.type)for(let n=0;n1)for(let o=0;o`_${zl[A.helper(e)]}`,replaceNode(e){A.parent.children[A.childIndex]=A.currentNode=e},removeNode(e){const t=e?A.parent.children.indexOf(e):A.currentNode?A.childIndex:-1;e&&e!==A.currentNode?A.childIndex>t&&(A.childIndex--,A.onNodeRemoved()):(A.currentNode=null,A.onNodeRemoved()),A.parent.children.splice(t,1)},onNodeRemoved:o,addIdentifiers(e){},removeIdentifiers(e){},hoist(e){v(e)&&(e=Yl(e)),A.hoists.push(e);const t=Yl(`_hoisted_${A.hoists.length}`,!1,e.loc,2);return t.hoisted=e,t},cache:(e,t=!1)=>function(e,t,n=!1){return{type:20,index:e,value:t,isVNode:n,loc:Gl}}(A.cached++,e,t)};return A}function Ea(e,t){const n=Aa(e,t);Na(e,n),t.hoistStatic&&ya(e,n),t.ssr||function(e,t){const{helper:n}=t,{children:s}=e;if(1===s.length){const n=s[0];if(ba(e,n)&&n.codegenNode){const s=n.codegenNode;13===s.type&&ic(s,t),e.codegenNode=s}else e.codegenNode=n}else if(s.length>1){let s=64;e.codegenNode=Jl(t,n(cl),void 0,e.children,s+"",void 0,void 0,!0,void 0,!1)}}(e,n),e.helpers=new Set([...n.helpers.keys()]),e.components=[...n.components],e.directives=[...n.directives],e.imports=n.imports,e.hoists=n.hoists,e.temps=n.temps,e.cached=n.cached,e.transformed=!0}function Na(e,t){t.currentNode=e;const{nodeTransforms:n}=t,s=[];for(let r=0;r{n--};for(;nt===e:t=>e.test(t);return(e,s)=>{if(1===e.type){const{props:o}=e;if(3===e.tagType&&o.some(Nc))return;const r=[];for(let i=0;i`${zl[e]}: _${zl[e]}`;function La(e,t={}){const n=function(e,{mode:t="function",prefixIdentifiers:n="module"===t,sourceMap:s=!1,filename:o="template.vue.html",scopeId:r=null,optimizeImports:i=!1,runtimeGlobalName:l="Vue",runtimeModuleName:c="vue",ssrRuntimeModuleName:a="vue/server-renderer",ssr:u=!1,isTS:d=!1,inSSR:p=!1}){const h={mode:t,prefixIdentifiers:n,sourceMap:s,filename:o,scopeId:r,optimizeImports:i,runtimeGlobalName:l,runtimeModuleName:c,ssrRuntimeModuleName:a,ssr:u,isTS:d,inSSR:p,source:e.source,code:"",column:1,line:1,offset:0,indentLevel:0,pure:!1,map:void 0,helper:e=>`_${zl[e]}`,push(e,t=-2,n){h.code+=e},indent(){f(++h.indentLevel)},deindent(e=!1){e?--h.indentLevel:f(--h.indentLevel)},newline(){f(h.indentLevel)}};function f(e){h.push("\n"+" ".repeat(e),0)}return h}(e,t);t.onContextCreated&&t.onContextCreated(n);const{mode:s,push:o,prefixIdentifiers:r,indent:i,deindent:l,newline:c,ssr:a}=n,u=Array.from(e.helpers),d=u.length>0,p=!r&&"module"!==s;!function(e,t){const{push:n,newline:s,runtimeGlobalName:o}=t,r=o,i=Array.from(e.helpers);if(i.length>0&&(n(`const _Vue = ${r}\n`,-1),e.hoists.length)){n(`const { ${[gl,vl,yl,bl,_l].filter((e=>i.includes(e))).map(Oa).join(", ")} } = _Vue\n`,-1)}(function(e,t){if(!e.length)return;t.pure=!0;const{push:n,newline:s}=t;s();for(let o=0;o0)&&c()),e.directives.length&&(Fa(e.directives,"directive",n),e.temps>0&&c()),e.temps>0){o("let ");for(let t=0;t0?", ":""}_temp${t}`)}return(e.components.length||e.directives.length||e.temps)&&(o("\n",0),c()),a||o("return "),e.codegenNode?$a(e.codegenNode,n):o("null"),p&&(l(),o("}")),l(),o("}"),{ast:e,code:n.code,preamble:"",map:n.map?n.map.toJSON():void 0}}function Fa(e,t,{helper:n,push:s,newline:o,isTS:r}){const i=n("component"===t?Sl:Cl);for(let l=0;l3||!1;t.push("["),n&&t.indent(),Pa(e,t,n),n&&t.deindent(),t.push("]")}function Pa(e,t,n=!1,s=!0){const{push:o,newline:r}=t;for(let i=0;ie||"null"))}([r,i,l,c,a]),t),n(")"),d&&n(")");u&&(n(", "),$a(u,t),n(")"))}(e,t);break;case 14:!function(e,t){const{push:n,helper:s,pure:o}=t,r=v(e.callee)?e.callee:s(e.callee);o&&n(Ra);n(r+"(",-2,e),Pa(e.arguments,t),n(")")}(e,t);break;case 15:!function(e,t){const{push:n,indent:s,deindent:o,newline:r}=t,{properties:i}=e;if(!i.length)return void n("{}",-2,e);const l=i.length>1||!1;n(l?"{":"{ "),l&&s();for(let c=0;c "),(c||l)&&(n("{"),s());i?(c&&n("return "),p(i)?Ma(i,t):$a(i,t)):l&&$a(l,t);(c||l)&&(o(),n("}"));a&&n(")")}(e,t);break;case 19:!function(e,t){const{test:n,consequent:s,alternate:o,newline:r}=e,{push:i,indent:l,deindent:c,newline:a}=t;if(4===n.type){const e=!_c(n.content);e&&i("("),Ba(n,t),e&&i(")")}else i("("),$a(n,t),i(")");r&&l(),t.indentLevel++,r||i(" "),i("? "),$a(s,t),t.indentLevel--,r&&a(),r||i(" "),i(": ");const u=19===o.type;u||t.indentLevel++;$a(o,t),u||t.indentLevel--;r&&c(!0)}(e,t);break;case 20:!function(e,t){const{push:n,helper:s,indent:o,deindent:r,newline:i}=t;n(`_cache[${e.index}] || (`),e.isVNode&&(o(),n(`${s(Vl)}(-1),`),i());n(`_cache[${e.index}] = `),$a(e.value,t),e.isVNode&&(n(","),i(),n(`${s(Vl)}(1),`),i(),n(`_cache[${e.index}]`),r());n(")")}(e,t);break;case 21:Pa(e.body,t,!0,!1)}}function Ba(e,t){const{content:n,isStatic:s}=e;t.push(s?JSON.stringify(n):n,-3,e)}function Va(e,t){for(let n=0;nfunction(e,t,n,s){if(!("else"===t.name||t.exp&&t.exp.content.trim())){const s=t.exp?t.exp.loc:e.loc;n.onError(gc(28,t.loc)),t.exp=Yl("true",!1,s)}if("if"===t.name){const o=ja(e,t),r={type:9,loc:e.loc,branches:[o]};if(n.replaceNode(r),s)return s(r,o,!0)}else{const o=n.parent.children;let r=o.indexOf(e);for(;r-- >=-1;){const i=o[r];if(i&&3===i.type)n.removeNode(i);else{if(!i||2!==i.type||i.content.trim().length){if(i&&9===i.type){"else-if"===t.name&&void 0===i.branches[i.branches.length-1].condition&&n.onError(gc(30,e.loc)),n.removeNode();const o=ja(e,t);i.branches.push(o);const r=s&&s(i,o,!1);Na(o,n),r&&r(),n.currentNode=null}else n.onError(gc(30,e.loc));break}n.removeNode(i)}}}}(e,t,n,((e,t,s)=>{const o=n.parent.children;let r=o.indexOf(e),i=0;for(;r-- >=0;){const e=o[r];e&&9===e.type&&(i+=e.branches.length)}return()=>{if(s)e.codegenNode=Ha(t,i,n);else{const s=function(e){for(;;)if(19===e.type){if(19!==e.alternate.type)return e;e=e.alternate}else 20===e.type&&(e=e.value)}(e.codegenNode);s.alternate=Ha(t,i+e.branches.length-1,n)}}}))));function ja(e,t){const n=3===e.tagType;return{type:10,loc:e.loc,condition:"else"===t.name?void 0:t.exp,children:n&&!Tc(e,"for")?e.children:[e],userKey:wc(e,"key"),isTemplateIf:n}}function Ha(e,t,n){return e.condition?sc(e.condition,qa(e,t,n),tc(n.helper(yl),['""',"true"])):qa(e,t,n)}function qa(e,t,n){const{helper:s}=n,o=Zl("key",Yl(`${t}`,!1,Gl,2)),{children:r}=e,i=r[0];if(1!==r.length||1!==i.type){if(1===r.length&&11===i.type){const e=i.codegenNode;return Fc(e,o,n),e}{let t=64;return Jl(n,s(cl),Ql([o]),r,t+"",void 0,void 0,!0,!1,!1,e.loc)}}{const e=i.codegenNode,t=14===(l=e).type&&l.callee===Wl?l.arguments[1].returns:l;return 13===t.type&&ic(t,n),Fc(t,o,n),e}var l}const Wa=Ia("for",((e,t,n)=>{const{helper:s,removeHelper:o}=n;return function(e,t,n,s){if(!t.exp)return void n.onError(gc(31,t.loc));const o=t.forParseResult;if(!o)return void n.onError(gc(32,t.loc));Ka(o);const{scopes:r}=n,{source:i,value:l,key:c,index:a}=o,u={type:11,loc:t.loc,source:i,valueAlias:l,keyAlias:c,objectIndexAlias:a,parseResult:o,children:Ic(e)?e.children:[e]};n.replaceNode(u),r.vFor++;const d=s&&s(u);return()=>{r.vFor--,d&&d()}}(e,t,n,(t=>{const r=tc(s(wl),[t.source]),i=Ic(e),l=Tc(e,"memo"),c=wc(e,"key"),a=c&&(6===c.type?Yl(c.value.content,!0):c.exp),u=c?Zl("key",a):null,d=4===t.source.type&&t.source.constType>0,p=d?64:c?128:256;return t.codegenNode=Jl(n,s(cl),void 0,r,p+"",void 0,void 0,!0,!d,!1,e.loc),()=>{let c;const{children:p}=t,h=1!==p.length||1!==p[0].type,f=Rc(e)?e:i&&1===e.children.length&&Rc(e.children[0])?e.children[0]:null;if(f?(c=f.codegenNode,i&&u&&Fc(c,u,n)):h?c=Jl(n,s(cl),u?Ql([u]):void 0,e.children,"64",void 0,void 0,!0,void 0,!1):(c=p[0].codegenNode,i&&u&&Fc(c,u,n),c.isBlock!==!d&&(c.isBlock?(o(hl),o(rc(n.inSSR,c.isComponent))):o(oc(n.inSSR,c.isComponent))),c.isBlock=!d,c.isBlock?(s(hl),s(rc(n.inSSR,c.isComponent))):s(oc(n.inSSR,c.isComponent))),l){const e=nc(za(t.parseResult,[Yl("_cached")]));e.body={type:21,body:[ec(["const _memo = (",l.exp,")"]),ec(["if (_cached",...a?[" && _cached.key === ",a]:[],` && ${n.helperString(Kl)}(_cached, _memo)) return _cached`]),ec(["const _item = ",c]),Yl("_item.memo = _memo"),Yl("return _item")],loc:Gl},r.arguments.push(e,Yl("_cache"),Yl(String(n.cached++)))}else r.arguments.push(nc(za(t.parseResult),c,!0))}}))}));function Ka(e,t){e.finalized||(e.finalized=!0)}function za({value:e,key:t,index:n},s=[]){return function(e){let t=e.length;for(;t--&&!e[t];);return e.slice(0,t+1).map(((e,t)=>e||Yl("_".repeat(t+1),!1)))}([e,t,n,...s])}const Ga=Yl("undefined",!1),Ja=(e,t)=>{if(1===e.type&&(1===e.tagType||3===e.tagType)){const n=Tc(e,"slot");if(n)return t.scopes.vSlot++,()=>{t.scopes.vSlot--}}},Xa=(e,t,n,s)=>nc(e,n,!1,!0,n.length?n[0].loc:s);function Qa(e,t,n=Xa){t.helper(jl);const{children:s,loc:o}=e,r=[],i=[];let l=t.scopes.vSlot>0||t.scopes.vFor>0;const c=Tc(e,"slot",!0);if(c){const{arg:e,exp:t}=c;e&&!vc(e)&&(l=!0),r.push(Zl(e||Yl("default",!0),n(t,void 0,s,o)))}let a=!1,u=!1;const d=[],p=new Set;let h=0;for(let g=0;gZl("default",n(e,void 0,t,o));a?d.length&&d.some((e=>eu(e)))&&(u?t.onError(gc(39,d[0].loc)):r.push(e(void 0,d))):r.push(e(void 0,s))}const f=l?2:Ya(e.children)?3:1;let m=Ql(r.concat(Zl("_",Yl(f+"",!1))),o);return i.length&&(m=tc(t.helper(El),[m,Xl(i)])),{slots:m,hasDynamicSlots:l}}function Za(e,t,n){const s=[Zl("name",e),Zl("fn",t)];return null!=n&&s.push(Zl("key",Yl(String(n),!0))),Ql(s)}function Ya(e){for(let t=0;tfunction(){if(1!==(e=t.currentNode).type||0!==e.tagType&&1!==e.tagType)return;const{tag:n,props:s}=e,o=1===e.tagType;let r=o?function(e,t,n=!1){let{tag:s}=e;const o=iu(s),r=wc(e,"is",!1,!0);if(r)if(o){let e;if(6===r.type?e=r.value&&Yl(r.value.content,!0):(e=r.exp,e||(e=Yl("is",!1,r.loc))),e)return tc(t.helper(xl),[e])}else 6===r.type&&r.value.content.startsWith("vue:")&&(s=r.value.content.slice(4));const i=yc(s)||t.isBuiltInComponent(s);if(i)return n||t.helper(i),i;return t.helper(Sl),t.components.add(s),Pc(s,"component")}(e,t):`"${n}"`;const i=b(r)&&r.callee===xl;let l,c,a,u,d,p,h=0,f=i||r===al||r===ul||!o&&("svg"===n||"foreignObject"===n);if(s.length>0){const n=su(e,t,void 0,o,i);l=n.props,h=n.patchFlag,d=n.dynamicPropNames;const s=n.directives;p=s&&s.length?Xl(s.map((e=>function(e,t){const n=[],s=tu.get(e);s?n.push(t.helperString(s)):(t.helper(Cl),t.directives.add(e.name),n.push(Pc(e.name,"directive")));const{loc:o}=e;e.exp&&n.push(e.exp);e.arg&&(e.exp||n.push("void 0"),n.push(e.arg));if(Object.keys(e.modifiers).length){e.arg||(e.exp||n.push("void 0"),n.push("void 0"));const t=Yl("true",!1,o);n.push(Ql(e.modifiers.map((e=>Zl(e,t))),o))}return Xl(n,e.loc)}(e,t)))):void 0,n.shouldUseBlock&&(f=!0)}if(e.children.length>0){r===dl&&(f=!0,h|=1024);if(o&&r!==al&&r!==dl){const{slots:n,hasDynamicSlots:s}=Qa(e,t);c=n,s&&(h|=1024)}else if(1===e.children.length&&r!==al){const n=e.children[0],s=n.type,o=5===s||8===s;o&&0===Sa(n,t)&&(h|=1),c=o||2===s?n:e.children}else c=e.children}0!==h&&(a=String(h),d&&d.length&&(u=function(e){let t="[";for(let n=0,s=e.length;n0;let f=!1,m=0,g=!1,v=!1,b=!1,_=!1,S=!1,x=!1;const C=[],k=e=>{u.length&&(d.push(Ql(ou(u),c)),u=[]),e&&d.push(e)},T=({key:e,value:n})=>{if(vc(e)){const r=e.content,l=i(r);if(!l||s&&!o||"onclick"===r.toLowerCase()||"onUpdate:modelValue"===r||w(r)||(_=!0),l&&w(r)&&(x=!0),l&&14===n.type&&(n=n.arguments[0]),20===n.type||(4===n.type||8===n.type)&&Sa(n,t)>0)return;"ref"===r?g=!0:"class"===r?v=!0:"style"===r?b=!0:"key"===r||C.includes(r)||C.push(r),!s||"class"!==r&&"style"!==r||C.includes(r)||C.push(r)}else S=!0};for(let i=0;i0&&u.push(Zl(Yl("ref_for",!0),Yl("true")))),"is"===n&&(iu(l)||r&&r.content.startsWith("vue:")))continue;u.push(Zl(Yl(n,!0,s),Yl(r?r.content:"",i,r?r.loc:e)))}else{const{name:n,arg:i,exp:a,loc:g,modifiers:v}=o,b="bind"===n,_="on"===n;if("slot"===n){s||t.onError(gc(40,g));continue}if("once"===n||"memo"===n)continue;if("is"===n||b&&Ac(i,"is")&&iu(l))continue;if(_&&r)continue;if((b&&Ac(i,"key")||_&&h&&Ac(i,"vue:before-update"))&&(f=!0),b&&Ac(i,"ref")&&t.scopes.vFor>0&&u.push(Zl(Yl("ref_for",!0),Yl("true"))),!i&&(b||_)){S=!0,a?b?(k(),d.push(a)):k({type:14,loc:g,callee:t.helper(Ml),arguments:s?[a]:[a,"true"]}):t.onError(gc(b?34:35,g));continue}b&&v.includes("prop")&&(m|=32);const x=t.directiveTransforms[n];if(x){const{props:n,needRuntime:s}=x(o,e,t);!r&&n.forEach(T),_&&i&&!vc(i)?k(Ql(n,c)):u.push(...n),s&&(p.push(o),y(s)&&tu.set(o,s))}else A(n)||(p.push(o),h&&(f=!0))}}let E;if(d.length?(k(),E=d.length>1?tc(t.helper(Il),d,c):d[0]):u.length&&(E=Ql(ou(u),c)),S?m|=16:(v&&!s&&(m|=2),b&&!s&&(m|=4),C.length&&(m|=8),_&&(m|=32)),f||0!==m&&32!==m||!(g||x||p.length>0)||(m|=512),!t.inSSR&&E)switch(E.type){case 15:let e=-1,n=-1,s=!1;for(let t=0;t{if(Rc(e)){const{children:n,loc:s}=e,{slotName:o,slotProps:r}=function(e,t){let n,s='"default"';const o=[];for(let r=0;r0){const{props:s,directives:r}=su(e,t,o,!1,!1);n=s,r.length&&t.onError(gc(36,r[0].loc))}return{slotName:s,slotProps:n}}(e,t),i=[t.prefixIdentifiers?"_ctx.$slots":"$slots",o,"{}","undefined","true"];let l=2;r&&(i[2]=r,l=3),n.length&&(i[3]=nc([],n,!1,!1,s),l=4),t.scopeId&&!t.slotted&&(l=5),i.splice(l),e.codegenNode=tc(t.helper(Al),i,s)}};const cu=/^\s*([\w$_]+|(async\s*)?\([^)]*?\))\s*(:[^=]+)?=>|^\s*(async\s+)?function(?:\s+[\w$]+)?\s*\(/,au=(e,t,n,s)=>{const{loc:o,modifiers:r,arg:i}=e;let l;if(4===i.type)if(i.isStatic){let e=i.content;e.startsWith("vue:")&&(e=`vnode-${e.slice(4)}`);l=Yl(0!==t.tagType||e.startsWith("vnode")||!/[A-Z]/.test(e)?F(I(e)):`on:${e}`,!0,i.loc)}else l=ec([`${n.helperString(Bl)}(`,i,")"]);else l=i,l.children.unshift(`${n.helperString(Bl)}(`),l.children.push(")");let c=e.exp;c&&!c.content.trim()&&(c=void 0);let a=n.cacheHandlers&&!c&&!n.inVOnce;if(c){const e=kc(c.content),t=!(e||cu.test(c.content)),n=c.content.includes(";");(t||a&&e)&&(c=ec([`${t?"$event":"(...args)"} => ${n?"{":"("}`,c,n?"}":")"]))}let u={props:[Zl(l,c||Yl("() => {}",!1,o))]};return s&&(u=s(u)),a&&(u.props[0].value=n.cache(u.props[0].value)),u.props.forEach((e=>e.key.isHandlerKey=!0)),u},uu=(e,t,n)=>{const{modifiers:s,loc:o}=e,r=e.arg;let{exp:i}=e;if(i&&4===i.type&&!i.content.trim()&&(i=void 0),!i){if(4!==r.type||!r.isStatic)return n.onError(gc(52,r.loc)),{props:[Zl(r,Yl("",!0,o))]};const t=I(r.content);i=e.exp=Yl(t,!1,r.loc)}return 4!==r.type?(r.children.unshift("("),r.children.push(') || ""')):r.isStatic||(r.content=`${r.content} || ""`),s.includes("camel")&&(4===r.type?r.content=r.isStatic?I(r.content):`${n.helperString(Pl)}(${r.content})`:(r.children.unshift(`${n.helperString(Pl)}(`),r.children.push(")"))),n.inSSR||(s.includes("prop")&&du(r,"."),s.includes("attr")&&du(r,"^")),{props:[Zl(r,i)]}},du=(e,t)=>{4===e.type?e.content=e.isStatic?t+e.content:`\`${t}\${${e.content}}\``:(e.children.unshift(`'${t}' + (`),e.children.push(")"))},pu=(e,t)=>{if(0===e.type||1===e.type||11===e.type||10===e.type)return()=>{const n=e.children;let s,o=!1;for(let e=0;e7===e.type&&!t.directiveTransforms[e.name])))))for(let e=0;e{if(1===e.type&&Tc(e,"once",!0)){if(hu.has(e)||t.inVOnce||t.inSSR)return;return hu.add(e),t.inVOnce=!0,t.helper(Vl),()=>{t.inVOnce=!1;const e=t.currentNode;e.codegenNode&&(e.codegenNode=t.cache(e.codegenNode,!0))}}},mu=(e,t,n)=>{const{exp:s,arg:o}=e;if(!s)return n.onError(gc(41,e.loc)),gu();const r=s.loc.source,i=4===s.type?s.content:r,l=n.bindingMetadata[r];if("props"===l||"props-aliased"===l)return gu();if(!i.trim()||!kc(i))return n.onError(gc(42,s.loc)),gu();const c=o||Yl("modelValue",!0),a=o?vc(o)?`onUpdate:${I(o.content)}`:ec(['"onUpdate:" + ',o]):"onUpdate:modelValue";let u;u=ec([`${n.isTS?"($event: any)":"$event"} => ((`,s,") = $event)"]);const d=[Zl(c,e.exp),Zl(a,u)];if(e.modifiers.length&&1===t.tagType){const t=e.modifiers.map((e=>(_c(e)?e:JSON.stringify(e))+": true")).join(", "),n=o?vc(o)?`${o.content}Modifiers`:ec([o,' + "Modifiers"']):"modelModifiers";d.push(Zl(n,Yl(`{ ${t} }`,!1,e.loc,2)))}return gu(d)};function gu(e=[]){return{props:e}}const vu=new WeakSet,yu=(e,t)=>{if(1===e.type){const n=Tc(e,"memo");if(!n||vu.has(e))return;return vu.add(e),()=>{const s=e.codegenNode||t.currentNode.codegenNode;s&&13===s.type&&(1!==e.tagType&&ic(s,t),e.codegenNode=tc(t.helper(Wl),[n.exp,nc(void 0,s),"_cache",String(t.cached++)]))}}};function bu(e,t={}){const n=t.onError||fc,s="module"===t.mode;!0===t.prefixIdentifiers?n(gc(47)):s&&n(gc(48));t.cacheHandlers&&n(gc(49)),t.scopeId&&!s&&n(gc(50));const o=c({},t,{prefixIdentifiers:!1}),r=v(e)?va(e,o):e,[i,l]=[[fu,Ua,yu,Wa,lu,nu,Ja,pu],{on:au,bind:uu,model:mu}];return Ea(r,c({},o,{nodeTransforms:[...i,...t.nodeTransforms||[]],directiveTransforms:c({},l,t.directiveTransforms||{})})),La(r,o)}const _u=Symbol(""),Su=Symbol(""),xu=Symbol(""),Cu=Symbol(""),ku=Symbol(""),Tu=Symbol(""),wu=Symbol(""),Au=Symbol(""),Eu=Symbol(""),Nu=Symbol("");var Iu;let Ru;Iu={[_u]:"vModelRadio",[Su]:"vModelCheckbox",[xu]:"vModelText",[Cu]:"vModelSelect",[ku]:"vModelDynamic",[Tu]:"withModifiers",[wu]:"withKeys",[Au]:"vShow",[Eu]:"Transition",[Nu]:"TransitionGroup"},Object.getOwnPropertySymbols(Iu).forEach((e=>{zl[e]=Iu[e]}));const Ou={parseMode:"html",isVoidTag:Z,isNativeTag:e=>J(e)||X(e)||Q(e),isPreTag:e=>"pre"===e,decodeEntities:function(e,t=!1){return Ru||(Ru=document.createElement("div")),t?(Ru.innerHTML=`
`,Ru.children[0].getAttribute("foo")):(Ru.innerHTML=e,Ru.textContent)},isBuiltInComponent:e=>"Transition"===e||"transition"===e?Eu:"TransitionGroup"===e||"transition-group"===e?Nu:void 0,getNamespace(e,t,n){let s=t?t.ns:n;if(t&&2===s)if("annotation-xml"===t.tag){if("svg"===e)return 1;t.props.some((e=>6===e.type&&"encoding"===e.name&&null!=e.value&&("text/html"===e.value.content||"application/xhtml+xml"===e.value.content)))&&(s=0)}else/^m(?:[ions]|text)$/.test(t.tag)&&"mglyph"!==e&&"malignmark"!==e&&(s=0);else t&&1===s&&("foreignObject"!==t.tag&&"desc"!==t.tag&&"title"!==t.tag||(s=0));if(0===s){if("svg"===e)return 1;if("math"===e)return 2}return s}},Lu=(e,t)=>{const n=z(e);return Yl(JSON.stringify(n),!1,t,3)};function Fu(e,t){return gc(e,t)}const Mu=t("passive,once,capture"),Pu=t("stop,prevent,self,ctrl,shift,alt,meta,exact,middle"),$u=t("left,right"),Bu=t("onkeyup,onkeydown,onkeypress",!0),Vu=(e,t)=>vc(e)&&"onclick"===e.content.toLowerCase()?Yl(t,!0):4!==e.type?ec(["(",e,`) === "onClick" ? "${t}" : (`,e,")"]):e,Du=(e,t)=>{1!==e.type||0!==e.tagType||"script"!==e.tag&&"style"!==e.tag||t.removeNode()},Uu=[e=>{1===e.type&&e.props.forEach(((t,n)=>{6===t.type&&"style"===t.name&&t.value&&(e.props[n]={type:7,name:"bind",arg:Yl("style",!0,t.loc),exp:Lu(t.value.content,t.loc),modifiers:[],loc:t.loc})}))}],ju={cloak:()=>({props:[]}),html:(e,t,n)=>{const{exp:s,loc:o}=e;return s||n.onError(Fu(53,o)),t.children.length&&(n.onError(Fu(54,o)),t.children.length=0),{props:[Zl(Yl("innerHTML",!0,o),s||Yl("",!0))]}},text:(e,t,n)=>{const{exp:s,loc:o}=e;return s||n.onError(Fu(55,o)),t.children.length&&(n.onError(Fu(56,o)),t.children.length=0),{props:[Zl(Yl("textContent",!0),s?Sa(s,n)>0?s:tc(n.helperString(Nl),[s],o):Yl("",!0))]}},model:(e,t,n)=>{const s=mu(e,t,n);if(!s.props.length||1===t.tagType)return s;e.arg&&n.onError(Fu(58,e.arg.loc));const{tag:o}=t,r=n.isCustomElement(o);if("input"===o||"textarea"===o||"select"===o||r){let i=xu,l=!1;if("input"===o||r){const s=wc(t,"type");if(s){if(7===s.type)i=ku;else if(s.value)switch(s.value.content){case"radio":i=_u;break;case"checkbox":i=Su;break;case"file":l=!0,n.onError(Fu(59,e.loc))}}else(function(e){return e.props.some((e=>!(7!==e.type||"bind"!==e.name||e.arg&&4===e.arg.type&&e.arg.isStatic)))})(t)&&(i=ku)}else"select"===o&&(i=Cu);l||(s.needRuntime=n.helper(i))}else n.onError(Fu(57,e.loc));return s.props=s.props.filter((e=>!(4===e.key.type&&"modelValue"===e.key.content))),s},on:(e,t,n)=>au(e,t,n,(t=>{const{modifiers:s}=e;if(!s.length)return t;let{key:o,value:r}=t.props[0];const{keyModifiers:i,nonKeyModifiers:l,eventOptionModifiers:c}=((e,t,n,s)=>{const o=[],r=[],i=[];for(let l=0;l{const{exp:s,loc:o}=e;return s||n.onError(Fu(61,o)),{props:[],needRuntime:n.helper(Au)}}};const Hu=new WeakMap;function qu(e,t){if(!v(e)){if(!e.nodeType)return o;e=e.innerHTML}const s=e,r=function(e){let t=Hu.get(null!=e?e:n);return t||(t=Object.create(null),Hu.set(null!=e?e:n,t)),t}(t),i=r[s];if(i)return i;if("#"===e[0]){const t=document.querySelector(e);e=t?t.innerHTML:""}const l=c({hoistStatic:!0,onError:void 0,onWarn:o},t);l.isCustomElement||"undefined"==typeof customElements||(l.isCustomElement=e=>!!customElements.get(e));const{code:a}=function(e,t={}){return bu(e,c({},Ou,t,{nodeTransforms:[Du,...Uu,...t.nodeTransforms||[]],directiveTransforms:c({},ju,t.directiveTransforms||{}),transformHoist:null}))}(e,l),u=new Function(a)();return u._rc=!0,r[s]=u}return xr(qu),e.BaseTransition=Jn,e.BaseTransitionPropsValidators=Gn,e.Comment=Vo,e.DeprecationTypes=null,e.EffectScope=le,e.ErrorCodes={SETUP_FUNCTION:0,0:"SETUP_FUNCTION",RENDER_FUNCTION:1,1:"RENDER_FUNCTION",WATCH_GETTER:2,2:"WATCH_GETTER",WATCH_CALLBACK:3,3:"WATCH_CALLBACK",WATCH_CLEANUP:4,4:"WATCH_CLEANUP",NATIVE_EVENT_HANDLER:5,5:"NATIVE_EVENT_HANDLER",COMPONENT_EVENT_HANDLER:6,6:"COMPONENT_EVENT_HANDLER",VNODE_HOOK:7,7:"VNODE_HOOK",DIRECTIVE_HOOK:8,8:"DIRECTIVE_HOOK",TRANSITION_HOOK:9,9:"TRANSITION_HOOK",APP_ERROR_HANDLER:10,10:"APP_ERROR_HANDLER",APP_WARN_HANDLER:11,11:"APP_WARN_HANDLER",FUNCTION_REF:12,12:"FUNCTION_REF",ASYNC_COMPONENT_LOADER:13,13:"ASYNC_COMPONENT_LOADER",SCHEDULER:14,14:"SCHEDULER"},e.ErrorTypeStrings=null,e.Fragment=$o,e.KeepAlive=is,e.ReactiveEffect=ue,e.Static=Do,e.Suspense=En,e.Teleport=Mo,e.Text=Bo,e.TrackOpTypes={GET:"get",HAS:"has",ITERATE:"iterate"},e.Transition=Dr,e.TransitionGroup=Ri,e.TriggerOpTypes={SET:"set",ADD:"add",DELETE:"delete",CLEAR:"clear"},e.VueElement=Ti,e.assertNumber=function(e,t){},e.callWithAsyncErrorHandling=Ht,e.callWithErrorHandling=jt,e.camelize=I,e.capitalize=L,e.cloneVNode=nr,e.compatUtils=null,e.compile=qu,e.computed=Er,e.createApp=(...e)=>{const t=tl().createApp(...e),{mount:n}=t;return t.mount=e=>{const s=il(e);if(!s)return;const o=t._component;g(o)||o.render||o.template||(o.template=s.innerHTML),s.innerHTML="";const r=n(s,!1,rl(s));return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),r},t},e.createBlock=Go,e.createCommentVNode=function(e="",t=!1){return t?(Ho(),Go(Vo,null,e)):er(Vo,null,e)},e.createElementBlock=function(e,t,n,s,o,r){return zo(Yo(e,t,n,s,o,r,!0))},e.createElementVNode=Yo,e.createHydrationRenderer=Co,e.createPropsRestProxy=function(e,t){const n={};for(const s in e)t.includes(s)||Object.defineProperty(n,s,{enumerable:!0,get:()=>e[s]});return n},e.createRenderer=xo,e.createSSRApp=(...e)=>{const t=nl().createApp(...e),{mount:n}=t;return t.mount=e=>{const t=il(e);if(t)return n(t,!0,rl(t))},t},e.createSlots=function(e,t){for(let n=0;n{const t=s.fn(...e);return t&&(t.key=s.key),t}:s.fn)}return e},e.createStaticVNode=function(e,t){const n=er(Do,null,e);return n.staticCount=t,n},e.createTextVNode=sr,e.createVNode=er,e.customRef=Bt,e.defineAsyncComponent=function(e){g(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:s,delay:o=200,timeout:r,suspensible:i=!0,onError:l}=e;let c,a=null,u=0;const d=()=>{let e;return a||(e=a=t().catch((e=>{if(e=e instanceof Error?e:new Error(String(e)),l)return new Promise(((t,n)=>{l(e,(()=>t((u++,a=null,d()))),(()=>n(e)),u+1)}));throw e})).then((t=>e!==a&&a?a:(t&&(t.__esModule||"Module"===t[Symbol.toStringTag])&&(t=t.default),c=t,t))))};return ns({name:"AsyncComponentWrapper",__asyncLoader:d,get __asyncResolved(){return c},setup(){const e=dr;if(c)return()=>os(c,e);const t=t=>{a=null,qt(t,e,13,!s)};if(i&&e.suspense)return d().then((t=>()=>os(t,e))).catch((e=>(t(e),()=>s?er(s,{error:e}):null)));const l=Rt(!1),u=Rt(),p=Rt(!!o);return o&&setTimeout((()=>{p.value=!1}),o),null!=r&&setTimeout((()=>{if(!l.value&&!u.value){const e=new Error(`Async component timed out after ${r}ms.`);t(e),u.value=e}}),r),d().then((()=>{l.value=!0,e.parent&&rs(e.parent.vnode)&&(e.parent.effect.dirty=!0,tn(e.parent.update))})).catch((e=>{t(e),u.value=e})),()=>l.value&&c?os(c,e):u.value&&s?er(s,{error:u.value}):n&&!p.value?er(n):void 0}})},e.defineComponent=ns,e.defineCustomElement=Ci,e.defineEmits=function(){return null},e.defineExpose=function(e){},e.defineModel=function(){},e.defineOptions=function(e){},e.defineProps=function(){return null},e.defineSSRCustomElement=e=>Ci(e,ol),e.defineSlots=function(){return null},e.devtools=void 0,e.effect=function(e,t){e.effect instanceof ue&&(e=e.effect.fn);const n=new ue(e,o,(()=>{n.dirty&&n.run()}));t&&(c(n,t),t.scope&&ce(n,t.scope)),t&&t.lazy||n.run();const s=n.run.bind(n);return s.effect=n,s},e.effectScope=function(e){return new le(e)},e.getCurrentInstance=pr,e.getCurrentScope=ae,e.getTransitionRawChildren=ts,e.guardReactiveProps=tr,e.h=Nr,e.handleError=qt,e.hasInjectionContext=function(){return!!(dr||hn||Js)},e.hydrate=ol,e.initCustomFormatter=function(){},e.initDirectivesForSSR=ll,e.inject=Qs,e.isMemoSame=Ir,e.isProxy=xt,e.isReactive=bt,e.isReadonly=_t,e.isRef=It,e.isRuntimeOnly=()=>!yr,e.isShallow=St,e.isVNode=Jo,e.markRaw=kt,e.mergeDefaults=function(e,t){const n=Ls(e);for(const s in t){if(s.startsWith("__skip"))continue;let e=n[s];e?p(e)||g(e)?e=n[s]={type:e,default:t[s]}:e.default=t[s]:null===e&&(e=n[s]={default:t[s]}),e&&t[`__skip_${s}`]&&(e.skipFactory=!0)}return n},e.mergeModels=function(e,t){return e&&t?p(e)&&p(t)?e.concat(t):c({},Ls(e),Ls(t)):e||t},e.mergeProps=lr,e.nextTick=en,e.normalizeClass=G,e.normalizeProps=function(e){if(!e)return null;let{class:t,style:n}=e;return t&&!v(t)&&(e.class=G(t)),n&&(e.style=H(n)),e},e.normalizeStyle=H,e.onActivated=cs,e.onBeforeMount=gs,e.onBeforeUnmount=_s,e.onBeforeUpdate=ys,e.onDeactivated=as,e.onErrorCaptured=Ts,e.onMounted=vs,e.onRenderTracked=ks,e.onRenderTriggered=Cs,e.onScopeDispose=function(e){re&&re.cleanups.push(e)},e.onServerPrefetch=xs,e.onUnmounted=Ss,e.onUpdated=bs,e.openBlock=Ho,e.popScopeId=function(){fn=null},e.provide=Xs,e.proxyRefs=Pt,e.pushScopeId=function(e){fn=e},e.queuePostFlushCb=sn,e.reactive=mt,e.readonly=vt,e.ref=Rt,e.registerRuntimeCompiler=xr,e.render=sl,e.renderList=function(e,t,n,s){let o;const r=n&&n[s];if(p(e)||v(e)){o=new Array(e.length);for(let n=0,s=e.length;nt(e,n,void 0,r&&r[n])));else{const n=Object.keys(e);o=new Array(n.length);for(let s=0,i=n.length;sv(e)?e:null==e?"":p(e)||b(e)&&(e.toString===S||!g(e.toString))?JSON.stringify(e,se,2):String(e),e.toHandlerKey=F,e.toHandlers=function(e,t){const n={};for(const s in e)n[t&&/[A-Z]/.test(s)?`on:${s}`:F(s)]=e[s];return n},e.toRaw=Ct,e.toRef=function(e,t,n){return It(e)?e:g(e)?new Dt(e):b(e)&&arguments.length>1?Ut(e,t,n):Rt(e)},e.toRefs=function(e){const t=p(e)?new Array(e.length):{};for(const n in e)t[n]=Ut(e,n);return t},e.toValue=function(e){return g(e)?e():Ft(e)},e.transformVNodeArgs=function(e){},e.triggerRef=function(e){Nt(e,4)},e.unref=Ft,e.useAttrs=function(){return Os().attrs},e.useCssModule=function(e="$style"){return n},e.useCssVars=function(e){const t=pr();if(!t)return;const n=t.ut=(n=e(t.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${t.uid}"]`)).forEach((e=>ci(e,n)))},s=()=>{const s=e(t.proxy);li(t.subTree,s),n(s)};vs((()=>{Mn(s);const e=new MutationObserver(s);e.observe(t.subTree.el.parentNode,{childList:!0}),Ss((()=>e.disconnect()))}))},e.useModel=function(e,t,s=n){const o=pr(),r=I(t),i=O(t),l=Bt(((n,l)=>{let c;return Pn((()=>{const n=e[t];M(c,n)&&(c=n,l())})),{get:()=>(n(),s.get?s.get(c):c),set(e){const n=o.vnode.props;n&&(t in n||r in n||i in n)&&(`onUpdate:${t}`in n||`onUpdate:${r}`in n||`onUpdate:${i}`in n)||!M(e,c)||(c=e,l()),o.emit(`update:${t}`,s.set?s.set(e):e)}}})),c="modelValue"===t?"modelModifiers":`${t}Modifiers`;return l[Symbol.iterator]=()=>{let t=0;return{next:()=>t<2?{value:t++?e[c]||{}:l,done:!1}:{done:!0}}},l},e.useSSRContext=()=>{},e.useSlots=function(){return Os().slots},e.useTransitionState=Kn,e.vModelCheckbox=Di,e.vModelDynamic=zi,e.vModelRadio=ji,e.vModelSelect=Hi,e.vModelText=Vi,e.vShow=oi,e.version=Rr,e.warn=Or,e.watch=Bn,e.watchEffect=function(e,t){return Vn(e,null,t)},e.watchPostEffect=Mn,e.watchSyncEffect=Pn,e.withAsyncContext=function(e){const t=pr();let n=e();return gr(),_(n)&&(n=n.catch((e=>{throw mr(t),e}))),[n,()=>mr(t)]},e.withCtx=gn,e.withDefaults=function(e,t){return null},e.withDirectives=function(e,t){if(null===hn)return e;const s=wr(hn)||hn.proxy,o=e.dirs||(e.dirs=[]);for(let r=0;r{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=n=>{if(!("key"in n))return;const s=O(n.key);return t.some((e=>e===s||Qi[e]===s))?e(n):void 0})},e.withMemo=function(e,t,n,s){const o=n[s];if(o&&Ir(o,e))return o;const r=t();return r.memo=e.slice(),n[s]=r},e.withModifiers=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(n,...s)=>{for(let e=0;egn,e}({}); + +/** + * Skipped minification because the original files appears to be already minified. + * Original file: /npm/@unocss/runtime@0.62.1/uno.global.js + * + * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files + */ +"use strict";(()=>{var Va=Object.defineProperty;var Aa=(e,t)=>{for(var r in t)Va(e,r,{get:t[r],enumerable:!0})};function se(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function ee(e){let t=e.length,r=-1,n,o="",i=e.charCodeAt(0);for(;++r=1&&n<=31||n===127||r===0&&n>=48&&n<=57||r===1&&n>=48&&n<=57&&i===45){o+=`\\${n.toString(16)} `;continue}if(r===0&&t===1&&n===45){o+=`\\${e.charAt(r)}`;continue}if(n>=128||n===45||n===95||n>=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122){o+=e.charAt(r);continue}o+=`\\${e.charAt(r)}`}return o}var et=ee;function O(e=[]){return Array.isArray(e)?e:[e]}function X(e){return Array.from(new Set(e))}function Cn(e,t){return e.reduce((r,n)=>(r.findIndex(i=>t(n,i))===-1&&r.push(n),r),[])}function V(e){return typeof e=="string"}function xe(e){return V(e)?e:(Array.isArray(e)?e:Object.entries(e)).filter(t=>t[1]!=null)}function Rn(e){return Array.isArray(e)?e.find(t=>!Array.isArray(t)||Array.isArray(t[0]))?e.map(t=>xe(t)):[e]:[xe(e)]}function Ma(e){return e.filter(([t,r],n)=>{if(t.startsWith("$$"))return!1;for(let o=n-1;o>=0;o--)if(e[o][0]===t&&e[o][1]===r)return!1;return!0})}function ye(e){return e==null?"":Ma(e).map(([t,r])=>r!=null?`${t}:${r};`:void 0).filter(Boolean).join("")}function tt(e){return e&&typeof e=="object"&&!Array.isArray(e)}function Pr(e,t,r=!1){let n=e,o=t;if(Array.isArray(o))return r&&Array.isArray(o)?[...n,...o]:[...o];let i={...n};return tt(n)&&tt(o)&&Object.keys(o).forEach(s=>{tt(n[s])&&tt(o[s])||Array.isArray(n[s])&&Array.isArray(o[s])?i[s]=Pr(n[s],o[s],r):Object.assign(i,{[s]:o[s]})}),i}function Ve(e){let t,r,n;if(Array.isArray(e)){for(r=Array(t=e.length);t--;)r[t]=(n=e[t])&&typeof n=="object"?Ve(n):n;return r}if(Object.prototype.toString.call(e)==="[object Object]"){r={};for(t in e)t==="__proto__"?Object.defineProperty(r,t,{value:Ve(e[t]),configurable:!0,enumerable:!0,writable:!0}):r[t]=(n=e[t])&&typeof n=="object"?Ve(n):n;return r}return e}function Tn(e){return V(e[0])}function En(e){return V(e[0])}var Pa=/[\w\u00A0-\uFFFF%-?]/;function jn(e=""){return Pa.test(e)}function zn(e){return typeof e=="function"?{match:e}:e}function _r(e){return e.length===3}function Fr(e){return e!=null}function On(){}var rt=class{_map=new Map;get(t,r){let n=this._map.get(t);if(n)return n.get(r)}getFallback(t,r,n){let o=this._map.get(t);return o||(o=new Map,this._map.set(t,o)),o.has(r)||o.set(r,n),o.get(r)}set(t,r,n){let o=this._map.get(t);return o||(o=new Map,this._map.set(t,o)),o.set(r,n),this}has(t,r){return this._map.get(t)?.has(r)}delete(t,r){return this._map.get(t)?.delete(r)||!1}deleteTop(t){return this._map.delete(t)}map(t){return Array.from(this._map.entries()).flatMap(([r,n])=>Array.from(n.entries()).map(([o,i])=>t(i,r,o)))}},nt=class extends Map{getFallback(t,r){let n=this.get(t);return n===void 0?(this.set(t,r),r):n}map(t){let r=[];return this.forEach((n,o)=>{r.push(t(n,o))}),r}flatMap(t){let r=[];return this.forEach((n,o)=>{r.push(...t(n,o))}),r}};var Ae=class extends Set{_map;constructor(t){super(t),this._map??=new Map}add(t){return this._map??=new Map,this._map.set(t,(this._map.get(t)??0)+1),super.add(t)}delete(t){return this._map.delete(t),super.delete(t)}clear(){this._map.clear(),super.clear()}getCount(t){return this._map.get(t)??0}setCount(t,r){return this._map.set(t,r),super.add(t)}};function ot(e){return e instanceof Ae}var it={};function _a(e=["-",":"]){let t=e.join("|");return it[t]||(it[t]=new RegExp(`((?:[!@<~\\w+:_/-]|\\[&?>?:?\\S*\\])+?)(${t})\\(((?:[~!<>\\w\\s:/\\\\,%#.$?-]|\\[.*?\\])+?)\\)(?!\\s*?=>)`,"gm")),it[t].lastIndex=0,it[t]}function Fa(e,t=["-",":"],r=5){let n=_a(t),o,i=e.toString(),s=new Set,a=new Map;do o=!1,i=i.replace(n,(f,u,p,d,m)=>{if(!t.includes(p))return f;o=!0,s.add(u+p);let g=m+u.length+p.length+1,x={length:f.length,items:[]};a.set(m,x);for(let w of[...d.matchAll(/\S+/g)]){let z=g+w.index,b=a.get(z)?.items;b?a.delete(z):b=[{offset:z,length:w[0].length,className:w[0]}];for(let $ of b)$.className=$.className==="~"?u:$.className.replace(/^(!?)(.*)/,`$1${u}${p}$2`),x.items.push($)}return"$".repeat(f.length)}),r-=1;while(o&&r);let l;if(typeof e=="string"){l="";let f=0;for(let[u,p]of a)l+=e.slice(f,u),l+=p.items.map(d=>d.className).join(" "),f=u+p.length;l+=e.slice(f)}else{l=e;for(let[f,u]of a)l.overwrite(f,f+u.length,u.items.map(p=>p.className).join(" "))}return{prefixes:Array.from(s),hasChanged:o,groupsByOffset:a,get expanded(){return l.toString()}}}function Vn(e,t=["-",":"],r=5){let n=Fa(e,t,r);return typeof e=="string"?n.expanded:e}var An=new Set;function ae(e){An.has(e)||(console.warn("[unocss]",e),An.add(e))}var st=/[\\:]?[\s'"`;{}]+/g;function La(e){return e.split(st)}var at={name:"@unocss/core/extractor-split",order:0,extract({code:e}){return La(e)}};function Mn(){return{events:{},emit(e,...t){(this.events[e]||[]).forEach(r=>r(...t))},on(e,t){return(this.events[e]=this.events[e]||[]).push(t),()=>this.events[e]=(this.events[e]||[]).filter(r=>r!==t)}}}var Me="default",lt="preflights",Ua="shortcuts",Wa="imports",Pn={[Wa]:-200,[lt]:-100,[Ua]:-10,[Me]:0};function Ln(e){return O(e).flatMap(t=>Array.isArray(t)?[t]:Object.entries(t))}var _n="_uno_resolved";function Na(e){let t=typeof e=="function"?e():e;if(_n in t)return t;t={...t},Object.defineProperty(t,_n,{value:!0,enumerable:!1});let r=t.shortcuts?Ln(t.shortcuts):void 0;if(t.shortcuts=r,t.prefix||t.layer){let n=o=>{o[2]||(o[2]={});let i=o[2];i.prefix==null&&t.prefix&&(i.prefix=O(t.prefix)),i.layer==null&&t.layer&&(i.layer=t.layer)};r?.forEach(n),t.rules?.forEach(n)}return t}function Un(e){let t=Na(e);if(!t.presets)return[t];let r=(t.presets||[]).flatMap(O).flatMap(Un);return[t,...r]}function Da(e){if(e.length===0)return{};let t=[],r=[],n=!1;for(let o of e)o.pipeline===!1?n=!0:(t.push(o.pipeline?.include??[]),r.push(o.pipeline?.exclude??[]));return{filesystem:X(e.flatMap(o=>o.filesystem??[])),inline:X(e.flatMap(o=>o.inline??[])),plain:X(e.flatMap(o=>o.plain??[])),pipeline:n?!1:{include:X(Fn(...t)),exclude:X(Fn(...r))}}}function Lr(e={},t={}){let r=Object.assign({},t,e),n=Cn((r.presets||[]).flatMap(O).flatMap(Un),(h,R)=>h.name===R.name),o=[...n.filter(h=>h.enforce==="pre"),...n.filter(h=>!h.enforce),...n.filter(h=>h.enforce==="post")],i=[...o,r],s=[...i].reverse(),a=Object.assign({},Pn,...i.map(h=>h.layers));function l(h){return X(i.flatMap(R=>O(R[h]||[])))}let f=l("extractors"),u=s.find(h=>h.extractorDefault!==void 0)?.extractorDefault;u===void 0&&(u=at),u&&!f.includes(u)&&f.unshift(u),f.sort((h,R)=>(h.order||0)-(R.order||0));let p=l("rules"),d={},m=p.length,g=p.map((h,R)=>{if(Tn(h)){O(h[2]?.prefix||"").forEach(K=>{d[K+h[0]]=[R,h[1],h[2],h]});return}return[R,...h]}).filter(Boolean).reverse(),x=Ba(i.map(h=>h.theme)),w=l("extendTheme");for(let h of w)x=h(x)||x;let z={templates:X(i.flatMap(h=>O(h.autocomplete?.templates))),extractors:i.flatMap(h=>O(h.autocomplete?.extractors)).sort((h,R)=>(h.order||0)-(R.order||0)),shorthands:Ia(i.map(h=>h.autocomplete?.shorthands||{}))},b=l("separators");b.length||(b=[":","-"]);let $=l("content"),A=Da($),C={mergeSelectors:!0,warn:!0,sortLayers:h=>h,...r,blocklist:l("blocklist"),presets:o,envMode:r.envMode||"build",shortcutsLayer:r.shortcutsLayer||"shortcuts",layers:a,theme:x,rulesSize:m,rulesDynamic:g,rulesStaticMap:d,preprocess:l("preprocess"),postprocess:l("postprocess"),preflights:l("preflights"),autocomplete:z,variants:l("variants").map(zn).sort((h,R)=>(h.order||0)-(R.order||0)),shortcuts:Ln(l("shortcuts")).reverse(),extractors:f,safelist:l("safelist"),separators:b,details:r.details??r.envMode==="dev",content:A};for(let h of i)h?.configResolved?.(C);return C}function Ba(e){return e.map(t=>t?Ve(t):{}).reduce((t,r)=>Pr(t,r),{})}function Ia(e){return e.reduce((t,r)=>{let n={};for(let o in r){let i=r[o];Array.isArray(i)?n[o]=`(${i.join("|")})`:n[o]=i}return{...t,...n}},{})}function Fn(...e){return e.flatMap(Ka)}function Ka(e){return Array.isArray(e)?e:e?[e]:[]}var Wn="0.62.1";var ve={shortcutsNoMerge:"$$symbol-shortcut-no-merge",variants:"$$symbol-variants",parent:"$$symbol-parent",selector:"$$symbol-selector"},Ur=class{constructor(t={},r={}){this.userConfig=t;this.defaults=r;this.config=Lr(t,r),this.events.emit("config",this.config)}version=Wn;_cache=new Map;config;blocked=new Set;parentOrders=new Map;events=Mn();setConfig(t,r){t&&(r&&(this.defaults=r),this.userConfig=t,this.blocked.clear(),this.parentOrders.clear(),this._cache.clear(),this.config=Lr(t,this.defaults),this.events.emit("config",this.config))}async applyExtractors(t,r,n=new Set){let o={original:t,code:t,id:r,extracted:n,envMode:this.config.envMode};for(let i of this.config.extractors){let s=await i.extract?.(o);if(s)if(ot(s)&&ot(n))for(let a of s)n.setCount(a,n.getCount(a)+s.getCount(a));else for(let a of s)n.add(a)}return n}makeContext(t,r){let n={rawSelector:t,currentSelector:r[1],theme:this.config.theme,generator:this,symbols:ve,variantHandlers:r[2],constructCSS:(...o)=>this.constructCustomCSS(n,...o),variantMatch:r};return n}async parseToken(t,r){if(this.blocked.has(t))return;let n=`${t}${r?` ${r}`:""}`;if(this._cache.has(n))return this._cache.get(n);let o=t;for(let f of this.config.preprocess)o=f(t);if(this.isBlocked(o)){this.blocked.add(t),this._cache.set(n,null);return}let i=await this.matchVariants(t,o);if(!i||this.isBlocked(i[1])){this.blocked.add(t),this._cache.set(n,null);return}let s=this.makeContext(t,[r||i[0],i[1],i[2],i[3]]);this.config.details&&(s.variants=[...i[3]]);let a=await this.expandShortcut(s.currentSelector,s),l=a?await this.stringifyShortcuts(s.variantMatch,s,a[0],a[1]):(await this.parseUtil(s.variantMatch,s))?.map(f=>this.stringifyUtil(f,s)).filter(Fr);if(l?.length)return this._cache.set(n,l),l;this._cache.set(n,null)}async generate(t,r={}){let{id:n,scope:o,preflights:i=!0,safelist:s=!0,minify:a=!1,extendedInfo:l=!1}=r,f=this.config.outputToCssLayers,u=V(t)?await this.applyExtractors(t,n,l?new Ae:new Set):Array.isArray(t)?new Set(t):t;if(s){let C={generator:this,theme:this.config.theme};this.config.safelist.flatMap(h=>typeof h=="function"?h(C):h).forEach(h=>{u.has(h)||u.add(h)})}let p=a?"":` +`,d=new Set([Me]),m=l?new Map:new Set,g=new Map,x={},w=Array.from(u).map(async C=>{if(m.has(C))return;let h=await this.parseToken(C);if(h!=null){m instanceof Map?m.set(C,{data:h,count:ot(u)?u.getCount(C):-1}):m.add(C);for(let R of h){let F=R[3]||"",K=R[4]?.layer;g.has(F)||g.set(F,[]),g.get(F).push(R),K&&d.add(K)}}});await Promise.all(w),await(async()=>{if(!i)return;let C={generator:this,theme:this.config.theme},h=new Set([]);this.config.preflights.forEach(({layer:R=lt})=>{d.add(R),h.add(R)}),x=Object.fromEntries(await Promise.all(Array.from(h).map(async R=>{let K=(await Promise.all(this.config.preflights.filter(ne=>(ne.layer||lt)===R).map(async ne=>await ne.getCSS(C)))).filter(Boolean).join(p);return[R,K]})))})();let z=this.config.sortLayers(Array.from(d).sort((C,h)=>(this.config.layers[C]??0)-(this.config.layers[h]??0)||C.localeCompare(h))),b={},$=(C=Me)=>{if(b[C])return b[C];let h=Array.from(g).sort((F,K)=>(this.parentOrders.get(F[0])??0)-(this.parentOrders.get(K[0])??0)||F[0]?.localeCompare(K[0]||"")||0).map(([F,K])=>{let ne=K.length,be=K.filter(v=>(v[4]?.layer||Me)===C).sort((v,T)=>v[0]-T[0]||(v[4]?.sort||0)-(T[4]?.sort||0)||v[5]?.currentSelector?.localeCompare(T[5]?.currentSelector??"")||v[1]?.localeCompare(T[1]||"")||v[2]?.localeCompare(T[2]||"")||0).map(([,v,T,,P,,N])=>[[[(v&&qa(v,o))??"",P?.sort??0]],T,!!(N??P?.noMerge)]);if(!be.length)return;let Qe=be.reverse().map(([v,T,P],N)=>{if(!P&&this.config.mergeSelectors)for(let ie=N+1;ieie[1]-J[1]||ie[0]?.localeCompare(J[0]||"")||0).map(ie=>ie[0]).filter(Boolean)):[];return oe.length?`${oe.join(`,${p}`)}{${T}}`:T}).filter(Boolean).reverse().join(p);if(!F)return Qe;let k=F.split(" $$ ");return`${k.join("{")}{${p}${Qe}${p}${"}".repeat(k.length)}`}).filter(Boolean).join(p);if(i&&(h=[x[C],h].filter(Boolean).join(p)),f&&h){let F=typeof f=="object"?f.cssLayerName?.(C):void 0;F!==null&&(F||(F=C),h=`@layer ${F}{${p}${h}${p}}`)}let R=a?"":`/* layer: ${C} */${p}`;return b[C]=h?R+h:""},A=(C=z,h)=>C.filter(R=>!h?.includes(R)).map(R=>$(R)||"").filter(Boolean).join(p);return{get css(){return A()},layers:z,matched:m,getLayers:A,getLayer:$}}async matchVariants(t,r){let n=new Set,o=[],i=r||t,s=!0,a={rawSelector:t,theme:this.config.theme,generator:this};for(;s;){s=!1;for(let l of this.config.variants){if(!l.multiPass&&n.has(l))continue;let f=await l.match(i,a);if(f){if(V(f)){if(f===i)continue;f={matcher:f}}i=f.matcher??i,o.unshift(f),n.add(l),s=!0;break}}if(!s)break;if(o.length>500)throw new Error(`Too many variants applied to "${t}"`)}return[t,i,o,n]}applyVariants(t,r=t[4],n=t[1]){let i=r.slice().sort((f,u)=>(f.order||0)-(u.order||0)).reduceRight((f,u)=>p=>{let d=u.body?.(p.entries)||p.entries,m=Array.isArray(u.parent)?u.parent:[u.parent,void 0];return(u.handle??Xa)({...p,entries:d,selector:u.selector?.(p.selector,d)||p.selector,parent:m[0]||p.parent,parentOrder:m[1]||p.parentOrder,layer:u.layer||p.layer,sort:u.sort||p.sort},f)},f=>f)({prefix:"",selector:Ya(n),pseudo:"",entries:t[2]}),{parent:s,parentOrder:a}=i;s!=null&&a!=null&&this.parentOrders.set(s,a);let l={selector:[i.prefix,i.selector,i.pseudo].join(""),entries:i.entries,parent:s,layer:i.layer,sort:i.sort,noMerge:i.noMerge};for(let f of this.config.postprocess)f(l);return l}constructCustomCSS(t,r,n){let o=xe(r);if(V(o))return o;let{selector:i,entries:s,parent:a}=this.applyVariants([0,n||t.rawSelector,o,void 0,t.variantHandlers]),l=`${i}{${ye(s)}}`;return a?`${a}{${l}}`:l}async parseUtil(t,r,n=!1,o){let[i,s,a]=V(t)?await this.matchVariants(t):t;this.config.details&&(r.rules=r.rules??[]);let l=this.config.rulesStaticMap[s];if(l&&l[1]&&(n||!l[2]?.internal)){this.config.details&&r.rules.push(l[3]);let u=l[0],p=xe(l[1]),d=l[2];return V(p)?[[u,p,d]]:[[u,i,p,d,a]]}r.variantHandlers=a;let{rulesDynamic:f}=this.config;for(let[u,p,d,m]of f){if(m?.internal&&!n)continue;let g=s;if(m?.prefix){let b=O(m.prefix);if(o){let $=O(o);if(!b.some(A=>$.includes(A)))continue}else{let $=b.find(A=>s.startsWith(A));if($==null)continue;g=s.slice($.length)}}let x=g.match(p);if(!x)continue;let w=await d(x,r);if(!w)continue;if(this.config.details&&r.rules.push([p,d,m]),typeof w!="string")if(Symbol.asyncIterator in w){let b=[];for await(let $ of w)$&&b.push($);w=b}else Symbol.iterator in w&&!Array.isArray(w)&&(w=Array.from(w).filter(Fr));let z=Rn(w).filter(b=>b.length);if(z.length)return z.map(b=>{if(V(b))return[u,b,m];let $=a;for(let A of b)A[0]===ve.variants?$=[...O(A[1]),...$]:A[0]===ve.parent?$=[{parent:A[1]},...$]:A[0]===ve.selector&&($=[{selector:A[1]},...$]);return[u,i,b,m,$]})}}stringifyUtil(t,r){if(!t)return;if(_r(t))return[t[0],void 0,t[1],void 0,t[2],this.config.details?r:void 0,void 0];let{selector:n,entries:o,parent:i,layer:s,sort:a,noMerge:l}=this.applyVariants(t),f=ye(o);if(!f)return;let{layer:u,sort:p,...d}=t[3]??{},m={...d,layer:s??u,sort:a??p};return[t[0],n,f,i,m,this.config.details?r:void 0,l]}async expandShortcut(t,r,n=5){if(n===0)return;let o=this.config.details?a=>{r.shortcuts=r.shortcuts??[],r.shortcuts.push(a)}:On,i,s;for(let a of this.config.shortcuts){let l=t;if(a[2]?.prefix){let u=O(a[2].prefix).find(p=>t.startsWith(p));if(u==null)continue;l=t.slice(u.length)}if(En(a)){if(a[0]===l){i=i||a[2],s=a[1],o(a);break}}else{let f=l.match(a[0]);if(f&&(s=a[1](f,r)),s){i=i||a[2],o(a);break}}}if(s&&(s=O(s).map(a=>V(a)?Vn(a.trim()).split(/\s+/g):a).flat()),!s){let[a,l]=V(t)?await this.matchVariants(t):t;if(a!==l){let f=await this.expandShortcut(l,r,n-1);f&&(s=f[0].map(u=>V(u)?a.replace(l,u):u))}}if(s)return[(await Promise.all(s.map(async a=>(V(a)?(await this.expandShortcut(a,r,n-1))?.[0]:void 0)||[a]))).flat(1).filter(Boolean),i]}async stringifyShortcuts(t,r,n,o={layer:this.config.shortcutsLayer}){let i=new nt,s=(await Promise.all(X(n).map(async u=>{let p=V(u)?await this.parseUtil(u,r,!0,o.prefix):[[Number.POSITIVE_INFINITY,"{inline}",xe(u),void 0,[]]];return!p&&this.config.warn&&ae(`unmatched utility "${u}" in shortcut "${t[1]}"`),p||[]}))).flat(1).filter(Boolean).sort((u,p)=>u[0]-p[0]),[a,,l]=t,f=[];for(let u of s){if(_r(u)){f.push([u[0],void 0,u[1],void 0,u[2],r,void 0]);continue}let{selector:p,entries:d,parent:m,sort:g,noMerge:x,layer:w}=this.applyVariants(u,[...u[4],...l],a);i.getFallback(w??o.layer,new rt).getFallback(p,m,[[],u[0]])[0].push([d,!!(x??u[3]?.noMerge),g??0])}return f.concat(i.flatMap((u,p)=>u.map(([d,m],g,x)=>{let w=(b,$,A)=>{let C=Math.max(...A.map(R=>R[1])),h=A.map(R=>R[0]);return(b?[h.flat(1)]:h).map(R=>{let F=ye(R);if(F)return[m,g,F,x,{...o,noMerge:$,sort:C,layer:p},r,void 0]})};return[[d.filter(([,b])=>b).map(([b,,$])=>[b,$]),!0],[d.filter(([,b])=>!b).map(([b,,$])=>[b,$]),!1]].map(([b,$])=>[...w(!1,$,b.filter(([A])=>A.some(C=>C[0]===ve.shortcutsNoMerge))),...w(!0,$,b.filter(([A])=>A.every(C=>C[0]!==ve.shortcutsNoMerge)))])}).flat(2).filter(Boolean)))}isBlocked(t){return!t||this.config.blocklist.map(r=>Array.isArray(r)?r[0]:r).some(r=>typeof r=="function"?r(t):V(r)?r===t:r.test(t))}getBlocked(t){let r=this.config.blocklist.find(n=>{let o=Array.isArray(n)?n[0]:n;return typeof o=="function"?o(t):V(o)?o===t:o.test(t)});return r?Array.isArray(r)?r:[r,void 0]:void 0}};function Dn(e,t){return new Ur(e,t)}var Bn=/\s\$\$\s+/g;function Ha(e){return Bn.test(e)}function qa(e,t){return Ha(e)?e.replace(Bn,t?` ${t} `:" "):t?`${t} ${e}`:e}var Nn=/^\[(.+?)(~?=)"(.*)"\]$/;function Ya(e){return Nn.test(e)?e.replace(Nn,(t,r,n,o)=>`[${et(r)}${n}"${et(o)}"]`):`.${et(e)}`}function Xa(e,t){return t(e)}function Za(e){let t,r,n=2166136261;for(t=0,r=e.length;t>>0).toString(36)}`.slice(-6)}function In(e,t,r,n){for(let o of Array.from(e.matchAll(r)))if(o!=null){let i=o[0],s=`${n}${Za(i)}`;t.set(s,i),e=e.replace(i,s)}return e}function Kn(e,t){for(let[r,n]of t.entries())e=e.replaceAll(r,n);return e}var Ja=/\/\/#\s*sourceMappingURL=.*\n?/g;function Gn(e){return e.includes("sourceMappingURL=")?e.replace(Ja,""):e}var Qa=/(?:[\w&:[\]-]|\[\S{1,64}=\S{1,64}\]){1,64}\[\\?['"]?\S{1,64}?['"]\]\]?[\w:-]{0,64}/g,el=/\[(\\\W|[\w-]){1,64}:[^\s:]{0,64}?("\S{1,64}?"|'\S{1,64}?'|`\S{1,64}?`|[^\s:]{1,64}?)[^\s:]{0,64}?\)?\]/g,tl=/^\[(?:\\\W|[\w-]){1,64}:['"]?\S{1,64}?['"]?\]$/;function rl(e){let t=[];for(let o of e.matchAll(el))o.index!==0&&!/^[\s'"`]/.test(e[o.index-1]??"")||t.push(o[0]);for(let o of e.matchAll(Qa))t.push(o[0]);let r=new Map,n="@unocss-skip-arbitrary-brackets";return e=In(e,r,/-\[[^\]]*\]/g,n),e&&e.split(st).forEach(o=>{o.includes(n)&&(o=Kn(o,r)),jn(o)&&!tl.test(o)&&t.push(o)}),t}var Hn={name:"@unocss/extractor-arbitrary-variants",order:0,extract({code:e}){return rl(Gn(e))}};var qn=[{layer:"preflights",getCSS(e){if(e.theme.preflightBase){let t=ye(Object.entries(e.theme.preflightBase));return O(e.theme.preflightRoot??["*,::before,::after","::backdrop"]).map(n=>`${n}{${t}}`).join("")}}}];var W={l:["-left"],r:["-right"],t:["-top"],b:["-bottom"],s:["-inline-start"],e:["-inline-end"],x:["-left","-right"],y:["-top","-bottom"],"":[""],bs:["-block-start"],be:["-block-end"],is:["-inline-start"],ie:["-inline-end"],block:["-block-start","-block-end"],inline:["-inline-start","-inline-end"]},Wr={...W,s:["-inset-inline-start"],start:["-inset-inline-start"],e:["-inset-inline-end"],end:["-inset-inline-end"],bs:["-inset-block-start"],be:["-inset-block-end"],is:["-inset-inline-start"],ie:["-inset-inline-end"],block:["-inset-block-start","-inset-block-end"],inline:["-inset-inline-start","-inset-inline-end"]},Nr={l:["-top-left","-bottom-left"],r:["-top-right","-bottom-right"],t:["-top-left","-top-right"],b:["-bottom-left","-bottom-right"],tl:["-top-left"],lt:["-top-left"],tr:["-top-right"],rt:["-top-right"],bl:["-bottom-left"],lb:["-bottom-left"],br:["-bottom-right"],rb:["-bottom-right"],"":[""],bs:["-start-start","-start-end"],be:["-end-start","-end-end"],s:["-end-start","-start-start"],is:["-end-start","-start-start"],e:["-start-end","-end-end"],ie:["-start-end","-end-end"],ss:["-start-start"],"bs-is":["-start-start"],"is-bs":["-start-start"],se:["-start-end"],"bs-ie":["-start-end"],"ie-bs":["-start-end"],es:["-end-start"],"be-is":["-end-start"],"is-be":["-end-start"],ee:["-end-end"],"be-ie":["-end-end"],"ie-be":["-end-end"]},Xn={x:["-x"],y:["-y"],z:["-z"],"":["-x","-y"]},Zn=["x","y","z"],Yn=["top","top center","top left","top right","bottom","bottom center","bottom left","bottom right","left","left center","left top","left bottom","right","right center","right top","right bottom","center","center top","center bottom","center left","center right","center center"],U=Object.assign({},...Yn.map(e=>({[e.replace(/ /,"-")]:e})),...Yn.map(e=>({[e.replace(/\b(\w)\w+/g,"$1").replace(/ /,"")]:e}))),S=["inherit","initial","revert","revert-layer","unset"],Pe=/^(calc|clamp|min|max)\s*\((.+)\)(.*)/,ct=/^(var)\s*\((.+)\)(.*)/;function we(e,t,r){if(e==="")return;let n=e.length,o=0,i=!1,s=0;for(let a=0;ar)return;let i=le(e,"(",")",t);if(!i)return;let[s,a]=i;n.push(s),e=a}if(n.length>0)return n}var Dr=["hsl","hsla","hwb","lab","lch","oklab","oklch","rgb","rgba"],Jn=["%alpha",""],nl=new RegExp(Jn.map(e=>se(e)).join("|"));function G(e=""){let t=ol(e);if(t==null||t===!1)return;let{type:r,components:n,alpha:o}=t,i=r.toLowerCase();if(n.length!==0&&!(Dr.includes(i)&&![1,3].includes(n.length)))return{type:i,components:n.map(s=>typeof s=="string"?s.trim():s),alpha:typeof o=="string"?o.trim():o}}function te(e){let t=e.alpha??1;return typeof t=="string"&&Jn.includes(t)?1:t}function M(e,t){if(typeof e=="string")return e.replace(nl,`${t??1}`);let{components:r}=e,{alpha:n,type:o}=e;return n=t??n,o=o.toLowerCase(),["hsla","rgba"].includes(o)?`${o}(${r.join(", ")}${n==null?"":`, ${n}`})`:(n=n==null?"":` / ${n}`,Dr.includes(o)?`${o}(${r.join(" ")}${n})`:`color(${o} ${r.join(" ")}${n})`)}function ol(e){if(!e)return;let t=il(e);if(t!=null||(t=sl(e),t!=null)||(t=al(e),t!=null)||(t=cl(e),t!=null)||(t=fl(e),t!=null))return t}function il(e){let[,t]=e.match(/^#([\da-f]+)$/i)||[];if(t)switch(t.length){case 3:case 4:let r=Array.from(t,o=>Number.parseInt(o,16)).map(o=>o<<4|o);return{type:"rgb",components:r.slice(0,3),alpha:t.length===3?void 0:Math.round(r[3]/255*100)/100};case 6:case 8:let n=Number.parseInt(t,16);return{type:"rgb",components:t.length===6?[n>>16&255,n>>8&255,n&255]:[n>>24&255,n>>16&255,n>>8&255],alpha:t.length===6?void 0:Math.round((n&255)/255*100)/100}}}function sl(e){let t={rebeccapurple:[102,51,153,1]}[e];if(t!=null)return{type:"rgb",components:t.slice(0,3),alpha:t[3]}}function al(e){let t=e.match(/^(rgb|rgba|hsl|hsla)\((.+)\)$/i);if(!t)return;let[,r,n]=t,o=pe(n,",",5);if(o){if([3,4].includes(o.length))return{type:r,components:o.slice(0,3),alpha:o[3]};if(o.length!==1)return!1}}var ll=new RegExp(`^(${Dr.join("|")})\\((.+)\\)$`,"i");function cl(e){let t=e.match(ll);if(!t)return;let[,r,n]=t,o=Qn(`${r} ${n}`);if(o){let{alpha:i,components:[s,...a]}=o;return{type:s,components:a,alpha:i}}}function fl(e){let t=e.match(/^color\((.+)\)$/);if(!t)return;let r=Qn(t[1]);if(r){let{alpha:n,components:[o,...i]}=r;return{type:o,components:i,alpha:n}}}function Qn(e){let t=pe(e," ");if(!t)return;let r=t.length;if(t[r-2]==="/")return{components:t.slice(0,r-2),alpha:t[r-1]};if(t[r-2]!=null&&(t[r-2].endsWith("/")||t[r-1].startsWith("/"))){let i=t.splice(r-2);t.push(i.join(" ")),--r}let n=pe(t[r-1],"/",2);if(!n)return;if(n.length===1||n[n.length-1]==="")return{components:t};let o=n.pop();return t[r-1]=n.join("/"),{components:t,alpha:o}}function ft(e){let t=function(n){let o=this.__options?.sequence||[];this.__options.sequence=[];for(let i of o){let s=e[i](n);if(s!=null)return s}};function r(n,o){return n.__options||(n.__options={sequence:[]}),n.__options.sequence.push(o),n}for(let n of Object.keys(e))Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get(){return r(this,n)}});return t}function B(e,t){let r;return{name:e,match(n,o){r||(r=new RegExp(`^${se(e)}(?:${o.generator.config.separators.join("|")})`));let i=n.match(r);if(i)return{matcher:n.slice(i[0].length),handle:(s,a)=>a({...s,...t(s)})}},autocomplete:`${e}:`}}function I(e,t){let r;return{name:e,match(n,o){r||(r=new RegExp(`^${se(e)}(?:${o.generator.config.separators.join("|")})`));let i=n.match(r);if(i)return{matcher:n.slice(i[0].length),handle:(s,a)=>a({...s,parent:`${s.parent?`${s.parent} $$ `:""}${t}`})}},autocomplete:`${e}:`}}function ce(e,t,r){if(t.startsWith(`${e}[`)){let[n,o]=we(t.slice(e.length),"[","]")??[];if(n&&o){for(let i of r)if(o.startsWith(i))return[n,o.slice(i.length),i];return[n,o,""]}}}function D(e,t,r){if(t.startsWith(e)){let n=ce(e,t,r);if(n){let[o="",i=n[1]]=D("/",n[1],r)??[];return[n[0],i,o]}for(let o of r.filter(i=>i!=="/")){let i=t.indexOf(o,e.length);if(i!==-1){let s=t.indexOf("/",e.length),a=s===-1||i<=s;return[t.slice(e.length,a?i:s),t.slice(i+o.length),a?"":t.slice(s+1,i)]}}}}var eo="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",no=new Uint8Array(64),ul=new Uint8Array(128);for(let e=0;e>>=5,n>0&&(o|=32),e.write(no[o])}while(n>0);return t}var to=1024*16,ro=typeof TextDecoder<"u"?new TextDecoder:typeof Buffer<"u"?{decode(e){return Buffer.from(e.buffer,e.byteOffset,e.byteLength).toString()}}:{decode(e){let t="";for(let r=0;r0?r+ro.decode(t.subarray(0,n)):r}};function oo(e){let t=new Br,r=0,n=0,o=0,i=0;for(let s=0;s0&&t.write(59),a.length===0)continue;let l=0;for(let f=0;f0&&t.write(44),l=_e(t,u[0],l),u.length!==1&&(r=_e(t,u[1],r),n=_e(t,u[2],n),o=_e(t,u[3],o),u.length!==4&&(i=_e(t,u[4],i)))}}return t.flush()}var ut=class e{constructor(t){this.bits=t instanceof e?t.bits.slice():[]}add(t){this.bits[t>>5]|=1<<(t&31)}has(t){return!!(this.bits[t>>5]&1<<(t&31))}},pt=class e{constructor(t,r,n){this.start=t,this.end=r,this.original=n,this.intro="",this.outro="",this.content=n,this.storeName=!1,this.edited=!1,this.previous=null,this.next=null}appendLeft(t){this.outro+=t}appendRight(t){this.intro=this.intro+t}clone(){let t=new e(this.start,this.end,this.original);return t.intro=this.intro,t.outro=this.outro,t.content=this.content,t.storeName=this.storeName,t.edited=this.edited,t}contains(t){return this.startglobalThis.btoa(unescape(encodeURIComponent(e))):typeof Buffer=="function"?e=>Buffer.from(e,"utf-8").toString("base64"):()=>{throw new Error("Unsupported environment: `window.btoa` or `Buffer` should be supported.")}}var dl=pl(),Ir=class{constructor(t){this.version=3,this.file=t.file,this.sources=t.sources,this.sourcesContent=t.sourcesContent,this.names=t.names,this.mappings=oo(t.mappings),typeof t.x_google_ignoreList<"u"&&(this.x_google_ignoreList=t.x_google_ignoreList)}toString(){return JSON.stringify(this)}toUrl(){return"data:application/json;charset=utf-8;base64,"+dl(this.toString())}};function ml(e){let t=e.split(` +`),r=t.filter(i=>/^\t+/.test(i)),n=t.filter(i=>/^ {2,}/.test(i));if(r.length===0&&n.length===0)return null;if(r.length>=n.length)return" ";let o=n.reduce((i,s)=>{let a=/^ +/.exec(s)[0].length;return Math.min(a,i)},1/0);return new Array(o+1).join(" ")}function hl(e,t){let r=e.split(/[/\\]/),n=t.split(/[/\\]/);for(r.pop();r[0]===n[0];)r.shift(),n.shift();if(r.length){let o=r.length;for(;o--;)r[o]=".."}return r.concat(n).join("/")}var gl=Object.prototype.toString;function bl(e){return gl.call(e)==="[object Object]"}function io(e){let t=e.split(` +`),r=[];for(let n=0,o=0;n>1;o=0&&i>s;){let f=[this.generatedCodeColumn,t,n.line,n.column];o>=0&&f.push(o),this.rawSegments.push(f),this.generatedCodeLine+=1,this.raw[this.generatedCodeLine]=this.rawSegments=[],this.generatedCodeColumn=0,a=s,s=r.indexOf(` +`,s+1)}let l=[this.generatedCodeColumn,t,n.line,n.column];o>=0&&l.push(o),this.rawSegments.push(l),this.advance(r.slice(a+1))}else this.pending&&(this.rawSegments.push(this.pending),this.advance(r));this.pending=null}addUneditedChunk(t,r,n,o,i){let s=r.start,a=!0,l=!1;for(;s1){for(let n=0;n{let a=i(s.start);s.intro.length&&o.advance(s.intro),s.edited?o.addEdit(r,s.content,a,s.storeName?n.indexOf(s.original):-1):o.addUneditedChunk(r,s,this.original,a,this.sourcemapLocations),s.outro.length&&o.advance(s.outro)}),{file:t.file?t.file.split(/[/\\]/).pop():void 0,sources:[t.source?hl(t.file||"",t.source):t.file||""],sourcesContent:t.includeContent?[this.original]:void 0,names:n,mappings:o.raw,x_google_ignoreList:this.ignoreList?[r]:void 0}}generateMap(t){return new Ir(this.generateDecodedMap(t))}_ensureindentStr(){this.indentStr===void 0&&(this.indentStr=ml(this.original))}_getRawIndentString(){return this._ensureindentStr(),this.indentStr}getIndentString(){return this._ensureindentStr(),this.indentStr===null?" ":this.indentStr}indent(t,r){let n=/^[^\r\n]/gm;if(bl(t)&&(r=t,t=void 0),t===void 0&&(this._ensureindentStr(),t=this.indentStr||" "),t==="")return this;r=r||{};let o={};r.exclude&&(typeof r.exclude[0]=="number"?[r.exclude]:r.exclude).forEach(u=>{for(let p=u[0];pi?`${t}${f}`:(i=!0,f);this.intro=this.intro.replace(n,s);let a=0,l=this.firstChunk;for(;l;){let f=l.end;if(l.edited)o[a]||(l.content=l.content.replace(n,s),l.content.length&&(i=l.content[l.content.length-1]===` +`));else for(a=l.start;a=t&&n<=r)throw new Error("Cannot move a selection inside itself");this._split(t),this._split(r),this._split(n);let o=this.byStart[t],i=this.byEnd[r],s=o.previous,a=i.next,l=this.byStart[n];if(!l&&i===this.lastChunk)return this;let f=l?l.previous:this.lastChunk;return s&&(s.next=a),a&&(a.previous=s),f&&(f.next=o),l&&(l.previous=i),o.previous||(this.firstChunk=i.next),i.next||(this.lastChunk=o.previous,this.lastChunk.next=null),o.previous=f,i.next=l||null,f||(this.firstChunk=o),l||(this.lastChunk=i),this}overwrite(t,r,n,o){return o=o||{},this.update(t,r,n,{...o,overwrite:!o.contentOnly})}update(t,r,n,o){if(typeof n!="string")throw new TypeError("replacement content must be a string");if(this.original.length!==0){for(;t<0;)t+=this.original.length;for(;r<0;)r+=this.original.length}if(r>this.original.length)throw new Error("end is out of bounds");if(t===r)throw new Error("Cannot overwrite a zero-length range \u2013 use appendLeft or prependRight instead");this._split(t),this._split(r),o===!0&&($e.storeName||(console.warn("The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string"),$e.storeName=!0),o={storeName:!0});let i=o!==void 0?o.storeName:!1,s=o!==void 0?o.overwrite:!1;if(i){let f=this.original.slice(t,r);Object.defineProperty(this.storedNames,f,{writable:!0,value:!0,enumerable:!0})}let a=this.byStart[t],l=this.byEnd[r];if(a){let f=a;for(;f!==l;){if(f.next!==this.byStart[f.end])throw new Error("Cannot overwrite across a split point");f=f.next,f.edit("",!1)}a.edit(n,i,!s)}else{let f=new pt(t,r,"").edit(n,i);l.next=f,f.previous=l}return this}prepend(t){if(typeof t!="string")throw new TypeError("outro content must be a string");return this.intro=t+this.intro,this}prependLeft(t,r){if(typeof r!="string")throw new TypeError("inserted content must be a string");this._split(t);let n=this.byEnd[t];return n?n.prependLeft(r):this.intro=r+this.intro,this}prependRight(t,r){if(typeof r!="string")throw new TypeError("inserted content must be a string");this._split(t);let n=this.byStart[t];return n?n.prependRight(r):this.outro=r+this.outro,this}remove(t,r){if(this.original.length!==0){for(;t<0;)t+=this.original.length;for(;r<0;)r+=this.original.length}if(t===r)return this;if(t<0||r>this.original.length)throw new Error("Character is out of bounds");if(t>r)throw new Error("end must be greater than start");this._split(t),this._split(r);let n=this.byStart[t];for(;n;)n.intro="",n.outro="",n.edit(""),n=r>n.end?this.byStart[n.end]:null;return this}reset(t,r){if(this.original.length!==0){for(;t<0;)t+=this.original.length;for(;r<0;)r+=this.original.length}if(t===r)return this;if(t<0||r>this.original.length)throw new Error("Character is out of bounds");if(t>r)throw new Error("end must be greater than start");this._split(t),this._split(r);let n=this.byStart[t];for(;n;)n.reset(),n=r>n.end?this.byStart[n.end]:null;return this}lastChar(){if(this.outro.length)return this.outro[this.outro.length-1];let t=this.lastChunk;do{if(t.outro.length)return t.outro[t.outro.length-1];if(t.content.length)return t.content[t.content.length-1];if(t.intro.length)return t.intro[t.intro.length-1]}while(t=t.previous);return this.intro.length?this.intro[this.intro.length-1]:""}lastLine(){let t=this.outro.lastIndexOf(Fe);if(t!==-1)return this.outro.substr(t+1);let r=this.outro,n=this.lastChunk;do{if(n.outro.length>0){if(t=n.outro.lastIndexOf(Fe),t!==-1)return n.outro.substr(t+1)+r;r=n.outro+r}if(n.content.length>0){if(t=n.content.lastIndexOf(Fe),t!==-1)return n.content.substr(t+1)+r;r=n.content+r}if(n.intro.length>0){if(t=n.intro.lastIndexOf(Fe),t!==-1)return n.intro.substr(t+1)+r;r=n.intro+r}}while(n=n.previous);return t=this.intro.lastIndexOf(Fe),t!==-1?this.intro.substr(t+1)+r:this.intro+r}slice(t=0,r=this.original.length){if(this.original.length!==0){for(;t<0;)t+=this.original.length;for(;r<0;)r+=this.original.length}let n="",o=this.firstChunk;for(;o&&(o.start>t||o.end<=t);){if(o.start=r)return n;o=o.next}if(o&&o.edited&&o.start!==t)throw new Error(`Cannot use replaced character ${t} as slice start anchor.`);let i=o;for(;o;){o.intro&&(i!==o||o.start===t)&&(n+=o.intro);let s=o.start=r;if(s&&o.edited&&o.end!==r)throw new Error(`Cannot use replaced character ${r} as slice end anchor.`);let a=i===o?t-o.start:0,l=s?o.content.length+r-o.end:o.content.length;if(n+=o.content.slice(a,l),o.outro&&(!s||o.end===r)&&(n+=o.outro),s)break;o=o.next}return n}snip(t,r){let n=this.clone();return n.remove(0,t),n.remove(r,n.original.length),n}_split(t){if(this.byStart[t]||this.byEnd[t])return;let r=this.lastSearchedChunk,n=t>r.end;for(;r;){if(r.contains(t))return this._splitChunk(r,t);r=n?this.byStart[r.end]:this.byEnd[r.start]}}_splitChunk(t,r){if(t.edited&&t.content.length){let o=io(this.original)(r);throw new Error(`Cannot split a chunk that has already been edited (${o.line}:${o.column} \u2013 "${t.original}")`)}let n=t.split(r);return this.byEnd[r]=t,this.byStart[r]=n,this.byEnd[n.end]=n,t===this.lastChunk&&(this.lastChunk=n),this.lastSearchedChunk=t,!0}toString(){let t=this.intro,r=this.firstChunk;for(;r;)t+=r.toString(),r=r.next;return t+this.outro}isEmpty(){let t=this.firstChunk;do if(t.intro.length&&t.intro.trim()||t.content.length&&t.content.trim()||t.outro.length&&t.outro.trim())return!1;while(t=t.next);return!0}length(){let t=this.firstChunk,r=0;do r+=t.intro.length+t.content.length+t.outro.length;while(t=t.next);return r}trimLines(){return this.trim("[\\r\\n]")}trim(t){return this.trimStart(t).trimEnd(t)}trimEndAborted(t){let r=new RegExp((t||"\\s")+"+$");if(this.outro=this.outro.replace(r,""),this.outro.length)return!0;let n=this.lastChunk;do{let o=n.end,i=n.trimEnd(r);if(n.end!==o&&(this.lastChunk===n&&(this.lastChunk=n.next),this.byEnd[n.end]=n,this.byStart[n.next.start]=n.next,this.byEnd[n.next.end]=n.next),i)return!0;n=n.previous}while(n);return!1}trimEnd(t){return this.trimEndAborted(t),this}trimStartAborted(t){let r=new RegExp("^"+(t||"\\s")+"+");if(this.intro=this.intro.replace(r,""),this.intro.length)return!0;let n=this.firstChunk;do{let o=n.end,i=n.trimStart(r);if(n.end!==o&&(n===this.lastChunk&&(this.lastChunk=n.next),this.byEnd[n.end]=n,this.byStart[n.next.start]=n.next,this.byEnd[n.next.end]=n.next),i)return!0;n=n.next}while(n);return!1}trimStart(t){return this.trimStartAborted(t),this}hasChanged(){return this.original!==this.toString()}_replaceRegexp(t,r){function n(i,s){return typeof r=="string"?r.replace(/\$(\$|&|\d+)/g,(a,l)=>l==="$"?"$":l==="&"?i[0]:+l{if(s.index!=null){let a=n(s,this.original);a!==s[0]&&this.overwrite(s.index,s.index+s[0].length,a)}});else{let i=this.original.match(t);if(i&&i.index!=null){let s=n(i,this.original);s!==i[0]&&this.overwrite(i.index,i.index+i[0].length,s)}}return this}_replaceString(t,r){let{original:n}=this,o=n.indexOf(t);return o!==-1&&this.overwrite(o,o+t.length,r),this}replace(t,r){return typeof t=="string"?this._replaceString(t,r):this._replaceRegexp(t,r)}_replaceAllString(t,r){let{original:n}=this,o=t.length;for(let i=n.indexOf(t);i!==-1;i=n.indexOf(t,i+o))n.slice(i,i+o)!==r&&this.overwrite(i,i+o,r);return this}replaceAll(t,r){if(typeof t=="string")return this._replaceAllString(t,r);if(!t.global)throw new TypeError("MagicString.prototype.replaceAll called with a non-global RegExp argument");return this._replaceRegexp(t,r)}};var yl=/theme\(\s*(['"])?(.*?)\1?\s*\)/g;function so(e){return e.includes("theme(")&&e.includes(")")}function ao(e,t,r=!0){let n=Array.from(e.toString().matchAll(yl));if(!n.length)return e;let o=new dt(e);for(let i of n){let s=i[2];if(!s)throw new Error("theme() expect exact one argument, but got 0");let a=vl(s,t,r);a&&o.overwrite(i.index,i.index+i[0].length,a)}return o.toString()}function vl(e,t,r=!0){let[n,o]=e.split("/"),s=n.trim().split(".").reduce((a,l)=>a?.[l],t);if(typeof s=="string"){if(o){let a=G(s);a&&(s=M(a,o))}return s}else if(r)throw new Error(`theme of "${e}" did not found`)}var Yr={};Aa(Yr,{auto:()=>kl,bracket:()=>jl,bracketOfColor:()=>zl,bracketOfLength:()=>Ol,bracketOfPosition:()=>Vl,cssvar:()=>Al,degree:()=>Pl,fraction:()=>El,global:()=>_l,number:()=>Rl,numberWithUnit:()=>$l,percent:()=>Tl,position:()=>Ll,properties:()=>Fl,px:()=>Cl,rem:()=>Sl,time:()=>Ml});var ke=/^(-?\d*(?:\.\d+)?)(px|pt|pc|%|r?(?:em|ex|lh|cap|ch|ic)|(?:[sld]?v|cq)(?:[whib]|min|max)|in|cm|mm|rpx)?$/i,Gr=/^(-?\d*(?:\.\d+)?)$/,Hr=/^(px|[sld]?v[wh])$/i,qr={px:1,vw:100,vh:100,svw:100,svh:100,dvw:100,dvh:100,lvh:100,lvw:100},mt=/^\[(color|length|size|position|quoted|string):/i,lo=/,(?![^()]*\))/g;var wl=["color","border-color","background-color","outline-color","text-decoration-color","flex-grow","flex","flex-shrink","caret-color","font","gap","opacity","visibility","z-index","font-weight","zoom","text-shadow","transform","box-shadow","border","background-position","left","right","top","bottom","object-position","max-height","min-height","max-width","min-width","height","width","border-width","margin","padding","outline-width","outline-offset","font-size","line-height","text-indent","vertical-align","border-spacing","letter-spacing","word-spacing","stroke","filter","backdrop-filter","fill","mask","mask-size","mask-border","clip-path","clip","border-radius"];function H(e){return+e.toFixed(10)}function $l(e){let t=e.match(ke);if(!t)return;let[,r,n]=t,o=Number.parseFloat(r);if(n&&!Number.isNaN(o))return`${H(o)}${n}`}function kl(e){if(e==="auto"||e==="a")return"auto"}function Sl(e){if(!e)return;if(Hr.test(e))return`${qr[e]}${e}`;let t=e.match(ke);if(!t)return;let[,r,n]=t,o=Number.parseFloat(r);if(!Number.isNaN(o))return o===0?"0":n?`${H(o)}${n}`:`${H(o/4)}rem`}function Cl(e){if(Hr.test(e))return`${qr[e]}${e}`;let t=e.match(ke);if(!t)return;let[,r,n]=t,o=Number.parseFloat(r);if(!Number.isNaN(o))return n?`${H(o)}${n}`:`${H(o)}px`}function Rl(e){if(!Gr.test(e))return;let t=Number.parseFloat(e);if(!Number.isNaN(t))return H(t)}function Tl(e){if(e.endsWith("%")&&(e=e.slice(0,-1)),!Gr.test(e))return;let t=Number.parseFloat(e);if(!Number.isNaN(t))return`${H(t/100)}`}function El(e){if(!e)return;if(e==="full")return"100%";let[t,r]=e.split("/"),n=Number.parseFloat(t)/Number.parseFloat(r);if(!Number.isNaN(n))return n===0?"0":`${H(n*100)}%`}function ht(e,t){if(e&&e.startsWith("[")&&e.endsWith("]")){let r,n,o=e.match(mt);if(o?(t||(n=o[1]),r=e.slice(o[0].length,-1)):r=e.slice(1,-1),!r||r==='=""')return;r.startsWith("--")&&(r=`var(${r})`);let i=0;for(let s of r)if(s==="[")i+=1;else if(s==="]"&&(i-=1,i<0))return;if(i)return;switch(n){case"string":return r.replace(/(^|[^\\])_/g,"$1 ").replace(/\\_/g,"_");case"quoted":return r.replace(/(^|[^\\])_/g,"$1 ").replace(/\\_/g,"_").replace(/(["\\])/g,"\\$1").replace(/^(.+)$/,'"$1"')}return r.replace(/(url\(.*?\))/g,s=>s.replace(/_/g,"\\_")).replace(/(^|[^\\])_/g,"$1 ").replace(/\\_/g,"_").replace(/(?:calc|clamp|max|min)\((.*)/g,s=>{let a=[];return s.replace(/var\((--.+?)[,)]/g,(l,f)=>(a.push(f),l.replace(f,"--un-calc"))).replace(/(-?\d*\.?\d(?!-\d.+[,)](?![^+\-/*])\D)(?:%|[a-z]+)?|\))([+\-/*])/g,"$1 $2 ").replace(/--un-calc/g,()=>a.shift())})}}function jl(e){return ht(e)}function zl(e){return ht(e,"color")}function Ol(e){return ht(e,"length")}function Vl(e){return ht(e,"position")}function Al(e){if(/^\$[^\s'"`;{}]/.test(e)){let[t,r]=e.slice(1).split(",");return`var(--${ee(t)}${r?`, ${r}`:""})`}}function Ml(e){let t=e.match(/^(-?[0-9.]+)(s|ms)?$/i);if(!t)return;let[,r,n]=t,o=Number.parseFloat(r);if(!Number.isNaN(o))return o===0&&!n?"0s":n?`${H(o)}${n}`:`${H(o)}ms`}function Pl(e){let t=e.match(/^(-?[0-9.]+)(deg|rad|grad|turn)?$/i);if(!t)return;let[,r,n]=t,o=Number.parseFloat(r);if(!Number.isNaN(o))return o===0?"0":n?`${H(o)}${n}`:`${H(o)}deg`}function _l(e){if(S.includes(e))return e}function Fl(e){if(e.split(",").every(t=>wl.includes(t)))return e}function Ll(e){if(["top","left","right","bottom","center"].includes(e))return e}var Ul=ft(Yr),c=Ul;var co={mid:"middle",base:"baseline",btm:"bottom",baseline:"baseline",top:"top",start:"top",middle:"middle",bottom:"bottom",end:"bottom","text-top":"text-top","text-bottom":"text-bottom",sub:"sub",super:"super",...Object.fromEntries(S.map(e=>[e,e]))},gt=[[/^(?:vertical|align|v)-([-\w]+%?)$/,([,e])=>({"vertical-align":co[e]??c.numberWithUnit(e)}),{autocomplete:[`(vertical|align|v)-(${Object.keys(co).join("|")})`,"(vertical|align|v)-"]}]],fo=["center","left","right","justify","start","end"],bt=[...fo.map(e=>[`text-${e}`,{"text-align":e}]),...[...S,...fo].map(e=>[`text-align-${e}`,{"text-align":e}])];var mo="$$mini-no-negative";function _(e){return([t,r,n],{theme:o})=>{let i=o.spacing?.[n||"DEFAULT"]??c.bracket.cssvar.global.auto.fraction.rem(n);if(i!=null)return W[r].map(s=>[`${e}${s}`,i]);if(n?.startsWith("-")){let s=o.spacing?.[n.slice(1)];if(s!=null)return W[r].map(a=>[`${e}${a}`,`calc(${s} * -1)`])}}}function uo(e,t,r="colors"){let n=e[r],o=-1;for(let i of t){if(o+=1,n&&typeof n!="string"){let s=t.slice(o).join("-").replace(/(-[a-z])/g,a=>a.slice(1).toUpperCase());if(n[s])return n[s];if(n[i]){n=n[i];continue}}return}return n}function xt(e,t,r){return uo(e,t,r)||uo(e,t,"colors")}function Zr(e,t){let[r,n]=le(e,"[","]",["/",":"])??[];if(r!=null){let o=(r.match(mt)??[])[1];if(o==null||o===t)return[r,n]}}function Se(e,t,r){let n=Zr(e,"color");if(!n)return;let[o,i]=n,s=o.replace(/([a-z])(\d)/g,"$1-$2").split(/-/g),[a]=s;if(!a)return;let l,f=c.bracketOfColor(o),u=f||o;if(c.numberWithUnit(u))return;if(/^#[\da-f]+$/i.test(u)?l=u:/^hex-[\da-fA-F]+$/.test(u)?l=`#${u.slice(4)}`:o.startsWith("$")&&(l=c.cssvar(o)),l=l||f,!l){let d=xt(t,[o],r);typeof d=="string"&&(l=d)}let p="DEFAULT";if(!l){let d,[m]=s.slice(-1);/^\d+$/.test(m)?(p=m,d=xt(t,s.slice(0,-1),r),!d||typeof d=="string"?l=void 0:l=d[p]):(d=xt(t,s,r),!d&&s.length<=2&&([,p=p]=s,d=xt(t,[a],r)),typeof d=="string"?l=d:p&&d&&(l=d[p]))}return{opacity:i,name:a,no:p,color:l,cssColor:G(l),alpha:c.bracket.cssvar.percent(i??"")}}function j(e,t,r,n){return([,o],{theme:i,generator:s})=>{let a=Se(o,i,r);if(!a)return;let{alpha:l,color:f,cssColor:u}=a,d=s.config.envMode==="dev"&&f?` /* ${f} */`:"",m={};if(u)if(l!=null)m[e]=M(u,l)+d;else{let g=`--un-${t}-opacity`,x=M(u,`var(${g})`);x.includes(g)&&(m[g]=te(u)),m[e]=x+d}else if(f)if(l!=null)m[e]=M(f,l)+d;else{let g=`--un-${t}-opacity`,x=M(f,`var(${g})`);x.includes(g)&&(m[g]=1),m[e]=x+d}if(n?.(m)!==!1)return m}}function Ce(e,t){let r=[];e=O(e);for(let n=0;nNumber.parseInt(i[1].replace(po,""))-Number.parseInt(s[1].replace(po,""))).map(([i,s])=>({point:i,size:s}));return Xr.set(e,o),o}function y(e,t){return S.map(r=>[`${e}-${r}`,{[t??e]:r}])}function q(e){return e!=null&&Pe.test(e)}function ho(e){return e[0]==="["&&e.slice(-1)==="]"&&(e=e.slice(1,-1)),Pe.test(e)||ke.test(e)}function yt(e,t,r){let n=t.split(lo);return e||!e&&n.length===1?Xn[e].map(o=>[`--un-${r}${o}`,t]):n.map((o,i)=>[`--un-${r}-${Zn[i]}`,o])}var vt=[[/^outline-(?:width-|size-)?(.+)$/,go,{autocomplete:"outline-(width|size)-"}],[/^outline-(?:color-)?(.+)$/,Wl,{autocomplete:"outline-$colors"}],[/^outline-offset-(.+)$/,([,e],{theme:t})=>({"outline-offset":t.lineWidth?.[e]??c.bracket.cssvar.global.px(e)}),{autocomplete:"outline-(offset)-"}],["outline",{"outline-style":"solid"}],...["auto","dashed","dotted","double","hidden","solid","groove","ridge","inset","outset",...S].map(e=>[`outline-${e}`,{"outline-style":e}]),["outline-none",{outline:"2px solid transparent","outline-offset":"2px"}]];function go([,e],{theme:t}){return{"outline-width":t.lineWidth?.[e]??c.bracket.cssvar.global.px(e)}}function Wl(e,t){return q(c.bracket(e[1]))?go(e,t):j("outline-color","outline-color","borderColor")(e,t)}var wt=[["appearance-auto",{"-webkit-appearance":"auto",appearance:"auto"}],["appearance-none",{"-webkit-appearance":"none",appearance:"none"}]];function Nl(e){return c.properties.auto.global(e)??{contents:"contents",scroll:"scroll-position"}[e]}var $t=[[/^will-change-(.+)/,([,e])=>({"will-change":Nl(e)})]];var me=["solid","dashed","dotted","double","hidden","none","groove","ridge","inset","outset",...S],kt=[[/^(?:border|b)()(?:-(.+))?$/,Z,{autocomplete:"(border|b)-"}],[/^(?:border|b)-([xy])(?:-(.+))?$/,Z],[/^(?:border|b)-([rltbse])(?:-(.+))?$/,Z],[/^(?:border|b)-(block|inline)(?:-(.+))?$/,Z],[/^(?:border|b)-([bi][se])(?:-(.+))?$/,Z],[/^(?:border|b)-()(?:width|size)-(.+)$/,Z,{autocomplete:["(border|b)-","(border|b)--"]}],[/^(?:border|b)-([xy])-(?:width|size)-(.+)$/,Z],[/^(?:border|b)-([rltbse])-(?:width|size)-(.+)$/,Z],[/^(?:border|b)-(block|inline)-(?:width|size)-(.+)$/,Z],[/^(?:border|b)-([bi][se])-(?:width|size)-(.+)$/,Z],[/^(?:border|b)-()(?:color-)?(.+)$/,Le,{autocomplete:["(border|b)-$colors","(border|b)--$colors"]}],[/^(?:border|b)-([xy])-(?:color-)?(.+)$/,Le],[/^(?:border|b)-([rltbse])-(?:color-)?(.+)$/,Le],[/^(?:border|b)-(block|inline)-(?:color-)?(.+)$/,Le],[/^(?:border|b)-([bi][se])-(?:color-)?(.+)$/,Le],[/^(?:border|b)-()op(?:acity)?-?(.+)$/,Ue,{autocomplete:"(border|b)-(op|opacity)-"}],[/^(?:border|b)-([xy])-op(?:acity)?-?(.+)$/,Ue],[/^(?:border|b)-([rltbse])-op(?:acity)?-?(.+)$/,Ue],[/^(?:border|b)-(block|inline)-op(?:acity)?-?(.+)$/,Ue],[/^(?:border|b)-([bi][se])-op(?:acity)?-?(.+)$/,Ue],[/^(?:border-|b-)?(?:rounded|rd)()(?:-(.+))?$/,We,{autocomplete:["(border|b)-(rounded|rd)","(border|b)-(rounded|rd)-$borderRadius","(rounded|rd)","(rounded|rd)-$borderRadius"]}],[/^(?:border-|b-)?(?:rounded|rd)-([rltbse])(?:-(.+))?$/,We],[/^(?:border-|b-)?(?:rounded|rd)-([rltb]{2})(?:-(.+))?$/,We],[/^(?:border-|b-)?(?:rounded|rd)-([bise][se])(?:-(.+))?$/,We],[/^(?:border-|b-)?(?:rounded|rd)-([bi][se]-[bi][se])(?:-(.+))?$/,We],[/^(?:border|b)-(?:style-)?()(.+)$/,Ne,{autocomplete:["(border|b)-style",`(border|b)-(${me.join("|")})`,"(border|b)--style",`(border|b)--(${me.join("|")})`,`(border|b)--style-(${me.join("|")})`,`(border|b)-style-(${me.join("|")})`]}],[/^(?:border|b)-([xy])-(?:style-)?(.+)$/,Ne],[/^(?:border|b)-([rltbse])-(?:style-)?(.+)$/,Ne],[/^(?:border|b)-(block|inline)-(?:style-)?(.+)$/,Ne],[/^(?:border|b)-([bi][se])-(?:style-)?(.+)$/,Ne]];function bo(e,t,r){if(t!=null)return{[`border${r}-color`]:M(e,t)};if(r===""){let n={},o="--un-border-opacity",i=M(e,`var(${o})`);return i.includes(o)&&(n[o]=typeof e=="string"?1:te(e)),n["border-color"]=i,n}else{let n={},o="--un-border-opacity",i=`--un-border${r}-opacity`,s=M(e,`var(${i})`);return s.includes(i)&&(n[o]=typeof e=="string"?1:te(e),n[i]=`var(${o})`),n[`border${r}-color`]=s,n}}function Dl(e){return([,t],r)=>{let n=Se(t,r,"borderColor");if(!n)return;let{alpha:o,color:i,cssColor:s}=n;if(s)return bo(s,o,e);if(i)return bo(i,o,e)}}function Z([,e="",t],{theme:r}){let n=r.lineWidth?.[t||"DEFAULT"]??c.bracket.cssvar.global.px(t||"1");if(e in W&&n!=null)return W[e].map(o=>[`border${o}-width`,n])}function Le([,e="",t],r){if(e in W){if(q(c.bracket(t)))return Z(["",e,t],r);if(Re(t,r.theme,"borderColor"))return Object.assign({},...W[e].map(n=>Dl(n)(["",t],r.theme)))}}function Ue([,e="",t]){let r=c.bracket.percent.cssvar(t);if(e in W&&r!=null)return W[e].map(n=>[`--un-border${n}-opacity`,r])}function We([,e="",t],{theme:r}){let n=r.borderRadius?.[t||"DEFAULT"]||c.bracket.cssvar.global.fraction.rem(t||"1");if(e in Nr&&n!=null)return Nr[e].map(o=>[`border${o}-radius`,n])}function Ne([,e="",t]){if(me.includes(t)&&e in W)return W[e].map(r=>[`border${r}-style`,t])}var St=[[/^op(?:acity)?-?(.+)$/,([,e])=>({opacity:c.bracket.percent.cssvar(e)})]],Bl=/^\[url\(.+\)\]$/,Il=/^\[(?:length|size):.+\]$/,Kl=/^\[position:.+\]$/,Gl=/^\[(?:linear|conic|radial)-gradient\(.+\)\]$/,Ct=[[/^bg-(.+)$/,(...e)=>{let t=e[0][1];return Bl.test(t)?{"--un-url":c.bracket(t),"background-image":"var(--un-url)"}:Il.test(t)&&c.bracketOfLength(t)!=null?{"background-size":c.bracketOfLength(t).split(" ").map(r=>c.fraction.auto.px.cssvar(r)??r).join(" ")}:(ho(t)||Kl.test(t))&&c.bracketOfPosition(t)!=null?{"background-position":c.bracketOfPosition(t).split(" ").map(r=>c.position.fraction.auto.px.cssvar(r)??r).join(" ")}:Gl.test(t)?{"background-image":c.bracket(t)}:j("background-color","bg","backgroundColor")(...e)},{autocomplete:"bg-$colors"}],[/^bg-op(?:acity)?-?(.+)$/,([,e])=>({"--un-bg-opacity":c.bracket.percent.cssvar(e)}),{autocomplete:"bg-(op|opacity)-"}]],Rt=[[/^color-scheme-(\w+)$/,([,e])=>({"color-scheme":e})]];var Tt=[[/^@container(?:\/(\w+))?(?:-(normal))?$/,([,e,t])=>(ae("The container query rule is experimental and may not follow semver."),{"container-type":t??"inline-size","container-name":e})]];var xo=["solid","double","dotted","dashed","wavy",...S],Et=[[/^(?:decoration-)?(underline|overline|line-through)$/,([,e])=>({"text-decoration-line":e}),{autocomplete:"decoration-(underline|overline|line-through)"}],[/^(?:underline|decoration)-(?:size-)?(.+)$/,yo,{autocomplete:"(underline|decoration)-"}],[/^(?:underline|decoration)-(auto|from-font)$/,([,e])=>({"text-decoration-thickness":e}),{autocomplete:"(underline|decoration)-(auto|from-font)"}],[/^(?:underline|decoration)-(.+)$/,Hl,{autocomplete:"(underline|decoration)-$colors"}],[/^(?:underline|decoration)-op(?:acity)?-?(.+)$/,([,e])=>({"--un-line-opacity":c.bracket.percent.cssvar(e)}),{autocomplete:"(underline|decoration)-(op|opacity)-"}],[/^(?:underline|decoration)-offset-(.+)$/,([,e],{theme:t})=>({"text-underline-offset":t.lineWidth?.[e]??c.auto.bracket.cssvar.global.px(e)}),{autocomplete:"(underline|decoration)-(offset)-"}],...xo.map(e=>[`underline-${e}`,{"text-decoration-style":e}]),...xo.map(e=>[`decoration-${e}`,{"text-decoration-style":e}]),["no-underline",{"text-decoration":"none"}],["decoration-none",{"text-decoration":"none"}]];function yo([,e],{theme:t}){return{"text-decoration-thickness":t.lineWidth?.[e]??c.bracket.cssvar.global.px(e)}}function Hl(e,t){if(q(c.bracket(e[1])))return yo(e,t);let r=j("text-decoration-color","line","borderColor")(e,t);if(r)return{"-webkit-text-decoration-color":r["text-decoration-color"],...r}}function vo(e,t){let r;if(c.cssvar(e)!=null)r=c.cssvar(e);else{e.startsWith("[")&&e.endsWith("]")&&(e=e.slice(1,-1));let n=e.split(",").map(o=>t.transitionProperty?.[o]??c.properties(o));n.every(Boolean)&&(r=n.join(","))}return r}var jt=[[/^transition(?:-(\D+?))?(?:-(\d+))?$/,([,e,t],{theme:r})=>{if(!e&&!t)return{"transition-property":r.transitionProperty?.DEFAULT,"transition-timing-function":r.easing?.DEFAULT,"transition-duration":r.duration?.DEFAULT??c.time("150")};if(e!=null){let n=vo(e,r),o=r.duration?.[t||"DEFAULT"]??c.time(t||"150");if(n)return{"transition-property":n,"transition-timing-function":r.easing?.DEFAULT,"transition-duration":o}}else if(t!=null)return{"transition-property":r.transitionProperty?.DEFAULT,"transition-timing-function":r.easing?.DEFAULT,"transition-duration":r.duration?.[t]??c.time(t)}},{autocomplete:"transition-$transitionProperty-$duration"}],[/^(?:transition-)?duration-(.+)$/,([,e],{theme:t})=>({"transition-duration":t.duration?.[e||"DEFAULT"]??c.bracket.cssvar.time(e)}),{autocomplete:["transition-duration-$duration","duration-$duration"]}],[/^(?:transition-)?delay-(.+)$/,([,e],{theme:t})=>({"transition-delay":t.duration?.[e||"DEFAULT"]??c.bracket.cssvar.time(e)}),{autocomplete:["transition-delay-$duration","delay-$duration"]}],[/^(?:transition-)?ease(?:-(.+))?$/,([,e],{theme:t})=>({"transition-timing-function":t.easing?.[e||"DEFAULT"]??c.bracket.cssvar(e)}),{autocomplete:["transition-ease-(linear|in|out|in-out|DEFAULT)","ease-(linear|in|out|in-out|DEFAULT)"]}],[/^(?:transition-)?property-(.+)$/,([,e],{theme:t})=>{let r=c.global(e)||vo(e,t);if(r)return{"transition-property":r}},{autocomplete:[`transition-property-(${[...S].join("|")})`,"transition-property-$transitionProperty","property-$transitionProperty"]}],["transition-none",{transition:"none"}],...y("transition"),["transition-discrete",{"transition-behavior":"allow-discrete"}],["transition-normal",{"transition-behavior":"normal"}]];var zt=[["flex",{display:"flex"}],["inline-flex",{display:"inline-flex"}],["flex-inline",{display:"inline-flex"}],[/^flex-(.*)$/,([,e])=>({flex:c.bracket(e)!=null?c.bracket(e).split(" ").map(t=>c.cssvar.fraction(t)??t).join(" "):c.cssvar.fraction(e)})],["flex-1",{flex:"1 1 0%"}],["flex-auto",{flex:"1 1 auto"}],["flex-initial",{flex:"0 1 auto"}],["flex-none",{flex:"none"}],[/^(?:flex-)?shrink(?:-(.*))?$/,([,e=""])=>({"flex-shrink":c.bracket.cssvar.number(e)??1}),{autocomplete:["flex-shrink-","shrink-"]}],[/^(?:flex-)?grow(?:-(.*))?$/,([,e=""])=>({"flex-grow":c.bracket.cssvar.number(e)??1}),{autocomplete:["flex-grow-","grow-"]}],[/^(?:flex-)?basis-(.+)$/,([,e],{theme:t})=>({"flex-basis":t.spacing?.[e]??c.bracket.cssvar.auto.fraction.rem(e)}),{autocomplete:["flex-basis-$spacing","basis-$spacing"]}],["flex-row",{"flex-direction":"row"}],["flex-row-reverse",{"flex-direction":"row-reverse"}],["flex-col",{"flex-direction":"column"}],["flex-col-reverse",{"flex-direction":"column-reverse"}],["flex-wrap",{"flex-wrap":"wrap"}],["flex-wrap-reverse",{"flex-wrap":"wrap-reverse"}],["flex-nowrap",{"flex-wrap":"nowrap"}]];var Ot=[[/^text-(.+)$/,Yl,{autocomplete:"text-$fontSize"}],[/^(?:text|font)-size-(.+)$/,wo,{autocomplete:"text-size-$fontSize"}],[/^text-(?:color-)?(.+)$/,ql,{autocomplete:"text-$colors"}],[/^(?:color|c)-(.+)$/,j("color","text","textColor"),{autocomplete:"(color|c)-$colors"}],[/^(?:text|color|c)-(.+)$/,([,e])=>S.includes(e)?{color:e}:void 0,{autocomplete:`(text|color|c)-(${S.join("|")})`}],[/^(?:text|color|c)-op(?:acity)?-?(.+)$/,([,e])=>({"--un-text-opacity":c.bracket.percent.cssvar(e)}),{autocomplete:"(text|color|c)-(op|opacity)-"}],[/^(?:font|fw)-?([^-]+)$/,([,e],{theme:t})=>({"font-weight":t.fontWeight?.[e]||c.bracket.global.number(e)}),{autocomplete:["(font|fw)-(100|200|300|400|500|600|700|800|900)","(font|fw)-$fontWeight"]}],[/^(?:font-)?(?:leading|lh|line-height)-(.+)$/,([,e],{theme:t})=>({"line-height":Jr(e,t,"lineHeight")}),{autocomplete:"(leading|lh|line-height)-$lineHeight"}],["font-synthesis-weight",{"font-synthesis":"weight"}],["font-synthesis-style",{"font-synthesis":"style"}],["font-synthesis-small-caps",{"font-synthesis":"small-caps"}],["font-synthesis-none",{"font-synthesis":"none"}],[/^font-synthesis-(.+)$/,([,e])=>({"font-synthesis":c.bracket.cssvar.global(e)})],[/^(?:font-)?tracking-(.+)$/,([,e],{theme:t})=>({"letter-spacing":t.letterSpacing?.[e]||c.bracket.cssvar.global.rem(e)}),{autocomplete:"tracking-$letterSpacing"}],[/^(?:font-)?word-spacing-(.+)$/,([,e],{theme:t})=>({"word-spacing":t.wordSpacing?.[e]||c.bracket.cssvar.global.rem(e)}),{autocomplete:"word-spacing-$wordSpacing"}],["font-stretch-normal",{"font-stretch":"normal"}],["font-stretch-ultra-condensed",{"font-stretch":"ultra-condensed"}],["font-stretch-extra-condensed",{"font-stretch":"extra-condensed"}],["font-stretch-condensed",{"font-stretch":"condensed"}],["font-stretch-semi-condensed",{"font-stretch":"semi-condensed"}],["font-stretch-semi-expanded",{"font-stretch":"semi-expanded"}],["font-stretch-expanded",{"font-stretch":"expanded"}],["font-stretch-extra-expanded",{"font-stretch":"extra-expanded"}],["font-stretch-ultra-expanded",{"font-stretch":"ultra-expanded"}],[/^font-stretch-(.+)$/,([,e])=>({"font-stretch":c.bracket.cssvar.fraction.global(e)}),{autocomplete:"font-stretch-"}],[/^font-(.+)$/,([,e],{theme:t})=>({"font-family":t.fontFamily?.[e]||c.bracket.cssvar.global(e)}),{autocomplete:"font-$fontFamily"}]],Vt=[[/^tab(?:-(.+))?$/,([,e])=>{let t=c.bracket.cssvar.global.number(e||"4");if(t!=null)return{"-moz-tab-size":t,"-o-tab-size":t,"tab-size":t}}]],At=[[/^indent(?:-(.+))?$/,([,e],{theme:t})=>({"text-indent":t.textIndent?.[e||"DEFAULT"]||c.bracket.cssvar.global.fraction.rem(e)}),{autocomplete:"indent-$textIndent"}]],Mt=[[/^text-stroke(?:-(.+))?$/,([,e],{theme:t})=>({"-webkit-text-stroke-width":t.textStrokeWidth?.[e||"DEFAULT"]||c.bracket.cssvar.px(e)}),{autocomplete:"text-stroke-$textStrokeWidth"}],[/^text-stroke-(.+)$/,j("-webkit-text-stroke-color","text-stroke","borderColor"),{autocomplete:"text-stroke-$colors"}],[/^text-stroke-op(?:acity)?-?(.+)$/,([,e])=>({"--un-text-stroke-opacity":c.bracket.percent.cssvar(e)}),{autocomplete:"text-stroke-(op|opacity)-"}]],Pt=[[/^text-shadow(?:-(.+))?$/,([,e],{theme:t})=>{let r=t.textShadow?.[e||"DEFAULT"];return r!=null?{"--un-text-shadow":Ce(r,"--un-text-shadow-color").join(","),"text-shadow":"var(--un-text-shadow)"}:{"text-shadow":c.bracket.cssvar.global(e)}},{autocomplete:"text-shadow-$textShadow"}],[/^text-shadow-color-(.+)$/,j("--un-text-shadow-color","text-shadow","shadowColor"),{autocomplete:"text-shadow-color-$colors"}],[/^text-shadow-color-op(?:acity)?-?(.+)$/,([,e])=>({"--un-text-shadow-opacity":c.bracket.percent.cssvar(e)}),{autocomplete:"text-shadow-color-(op|opacity)-"}]];function Jr(e,t,r){return t[r]?.[e]||c.bracket.cssvar.global.rem(e)}function wo([,e],{theme:t}){let n=O(t.fontSize?.[e])?.[0]??c.bracket.cssvar.global.rem(e);if(n!=null)return{"font-size":n}}function ql(e,t){return q(c.bracket(e[1]))?wo(e,t):j("color","text","textColor")(e,t)}function Yl([,e="base"],{theme:t}){let r=Zr(e,"length");if(!r)return;let[n,o]=r,i=O(t.fontSize?.[n]),s=o?Jr(o,t,"lineHeight"):void 0;if(i?.[0]){let[l,f,u]=i;return typeof f=="object"?{"font-size":l,...f}:{"font-size":l,"line-height":s??f??"1","letter-spacing":u?Jr(u,t,"letterSpacing"):void 0}}let a=c.bracketOfLength.rem(n);return s&&a?{"font-size":a,"line-height":s}:{"font-size":c.bracketOfLength.rem(e)}}var Xl={"":"",x:"column-",y:"row-",col:"column-",row:"row-"};function Qr([,e="",t],{theme:r}){let n=r.spacing?.[t]??c.bracket.cssvar.global.rem(t);if(n!=null)return{[`${Xl[e]}gap`]:n}}var _t=[[/^(?:flex-|grid-)?gap-?()(.+)$/,Qr,{autocomplete:["gap-$spacing","gap-"]}],[/^(?:flex-|grid-)?gap-([xy])-?(.+)$/,Qr,{autocomplete:["gap-(x|y)-$spacing","gap-(x|y)-"]}],[/^(?:flex-|grid-)?gap-(col|row)-?(.+)$/,Qr,{autocomplete:["gap-(col|row)-$spacing","gap-(col|row)-"]}]];function Q(e){return e.replace("col","column")}function en(e){return e[0]==="r"?"Row":"Column"}function Zl(e,t,r){let n=t[`gridAuto${en(e)}`]?.[r];if(n!=null)return n;switch(r){case"min":return"min-content";case"max":return"max-content";case"fr":return"minmax(0,1fr)"}return c.bracket.cssvar.auto.rem(r)}var Ft=[["grid",{display:"grid"}],["inline-grid",{display:"inline-grid"}],[/^(?:grid-)?(row|col)-(.+)$/,([,e,t],{theme:r})=>({[`grid-${Q(e)}`]:r[`grid${en(e)}`]?.[t]??c.bracket.cssvar.auto(t)})],[/^(?:grid-)?(row|col)-span-(.+)$/,([,e,t])=>{if(t==="full")return{[`grid-${Q(e)}`]:"1/-1"};let r=c.bracket.number(t);if(r!=null)return{[`grid-${Q(e)}`]:`span ${r}/span ${r}`}},{autocomplete:"(grid-row|grid-col|row|col)-span-"}],[/^(?:grid-)?(row|col)-start-(.+)$/,([,e,t])=>({[`grid-${Q(e)}-start`]:c.bracket.cssvar(t)??t})],[/^(?:grid-)?(row|col)-end-(.+)$/,([,e,t])=>({[`grid-${Q(e)}-end`]:c.bracket.cssvar(t)??t}),{autocomplete:"(grid-row|grid-col|row|col)-(start|end)-"}],[/^(?:grid-)?auto-(rows|cols)-(.+)$/,([,e,t],{theme:r})=>({[`grid-auto-${Q(e)}`]:Zl(e,r,t)}),{autocomplete:"(grid-auto|auto)-(rows|cols)-"}],[/^(?:grid-auto-flow|auto-flow|grid-flow)-(.+)$/,([,e])=>({"grid-auto-flow":c.bracket.cssvar(e)})],[/^(?:grid-auto-flow|auto-flow|grid-flow)-(row|col|dense|row-dense|col-dense)$/,([,e])=>({"grid-auto-flow":Q(e).replace("-"," ")}),{autocomplete:["(grid-auto-flow|auto-flow|grid-flow)-(row|col|dense|row-dense|col-dense)"]}],[/^(?:grid-)?(rows|cols)-(.+)$/,([,e,t],{theme:r})=>({[`grid-template-${Q(e)}`]:r[`gridTemplate${en(e)}`]?.[t]??c.bracket.cssvar(t)})],[/^(?:grid-)?(rows|cols)-minmax-([\w.-]+)$/,([,e,t])=>({[`grid-template-${Q(e)}`]:`repeat(auto-fill,minmax(${t},1fr))`})],[/^(?:grid-)?(rows|cols)-(\d+)$/,([,e,t])=>({[`grid-template-${Q(e)}`]:`repeat(${t},minmax(0,1fr))`}),{autocomplete:"(grid-rows|grid-cols|rows|cols)-"}],[/^grid-area(s)?-(.+)$/,([,e,t])=>e!=null?{"grid-template-areas":c.cssvar(t)??t.split("-").map(r=>`"${c.bracket(r)}"`).join(" ")}:{"grid-area":c.bracket.cssvar(t)}],["grid-rows-none",{"grid-template-rows":"none"}],["grid-cols-none",{"grid-template-columns":"none"}],["grid-rows-subgrid",{"grid-template-rows":"subgrid"}],["grid-cols-subgrid",{"grid-template-columns":"subgrid"}]];var Lt=["auto","hidden","clip","visible","scroll","overlay",...S],Ut=[[/^(?:overflow|of)-(.+)$/,([,e])=>Lt.includes(e)?{overflow:e}:void 0,{autocomplete:[`(overflow|of)-(${Lt.join("|")})`,`(overflow|of)-(x|y)-(${Lt.join("|")})`]}],[/^(?:overflow|of)-([xy])-(.+)$/,([,e,t])=>Lt.includes(t)?{[`overflow-${e}`]:t}:void 0]];var Wt=[[/^(?:position-|pos-)?(relative|absolute|fixed|sticky)$/,([,e])=>({position:e}),{autocomplete:["(position|pos)-","(position|pos)-",""]}],[/^(?:position-|pos-)([-\w]+)$/,([,e])=>S.includes(e)?{position:e}:void 0],[/^(?:position-|pos-)?(static)$/,([,e])=>({position:e})]],Be=[["justify-start",{"justify-content":"flex-start"}],["justify-end",{"justify-content":"flex-end"}],["justify-center",{"justify-content":"center"}],["justify-between",{"justify-content":"space-between"}],["justify-around",{"justify-content":"space-around"}],["justify-evenly",{"justify-content":"space-evenly"}],["justify-stretch",{"justify-content":"stretch"}],["justify-left",{"justify-content":"left"}],["justify-right",{"justify-content":"right"}],...y("justify","justify-content"),["justify-items-start",{"justify-items":"start"}],["justify-items-end",{"justify-items":"end"}],["justify-items-center",{"justify-items":"center"}],["justify-items-stretch",{"justify-items":"stretch"}],...y("justify-items"),["justify-self-auto",{"justify-self":"auto"}],["justify-self-start",{"justify-self":"start"}],["justify-self-end",{"justify-self":"end"}],["justify-self-center",{"justify-self":"center"}],["justify-self-stretch",{"justify-self":"stretch"}],...y("justify-self")],Nt=[[/^order-(.+)$/,([,e])=>({order:c.bracket.cssvar.number(e)})],["order-first",{order:"-9999"}],["order-last",{order:"9999"}],["order-none",{order:"0"}]],Ie=[["content-center",{"align-content":"center"}],["content-start",{"align-content":"flex-start"}],["content-end",{"align-content":"flex-end"}],["content-between",{"align-content":"space-between"}],["content-around",{"align-content":"space-around"}],["content-evenly",{"align-content":"space-evenly"}],...y("content","align-content"),["items-start",{"align-items":"flex-start"}],["items-end",{"align-items":"flex-end"}],["items-center",{"align-items":"center"}],["items-baseline",{"align-items":"baseline"}],["items-stretch",{"align-items":"stretch"}],...y("items","align-items"),["self-auto",{"align-self":"auto"}],["self-start",{"align-self":"flex-start"}],["self-end",{"align-self":"flex-end"}],["self-center",{"align-self":"center"}],["self-stretch",{"align-self":"stretch"}],["self-baseline",{"align-self":"baseline"}],...y("self","align-self")],Ke=[["place-content-center",{"place-content":"center"}],["place-content-start",{"place-content":"start"}],["place-content-end",{"place-content":"end"}],["place-content-between",{"place-content":"space-between"}],["place-content-around",{"place-content":"space-around"}],["place-content-evenly",{"place-content":"space-evenly"}],["place-content-stretch",{"place-content":"stretch"}],...y("place-content"),["place-items-start",{"place-items":"start"}],["place-items-end",{"place-items":"end"}],["place-items-center",{"place-items":"center"}],["place-items-stretch",{"place-items":"stretch"}],...y("place-items"),["place-self-auto",{"place-self":"auto"}],["place-self-start",{"place-self":"start"}],["place-self-end",{"place-self":"end"}],["place-self-center",{"place-self":"center"}],["place-self-stretch",{"place-self":"stretch"}],...y("place-self")],Dt=[...Be,...Ie,...Ke].flatMap(([e,t])=>[[`flex-${e}`,t],[`grid-${e}`,t]]);function tn(e,{theme:t}){return t.spacing?.[e]??c.bracket.cssvar.global.auto.fraction.rem(e)}function De([,e,t],r){let n=tn(t,r);if(n!=null&&e in Wr)return Wr[e].map(o=>[o.slice(1),n])}var Bt=[[/^(?:position-|pos-)?inset-(.+)$/,([,e],t)=>({inset:tn(e,t)}),{autocomplete:["(position|pos)-inset--$spacing","(position|pos)-inset-(block|inline)-$spacing","(position|pos)-inset-(bs|be|is|ie)-$spacing","(position|pos)-(top|left|right|bottom)-$spacing"]}],[/^(?:position-|pos-)?(start|end)-(.+)$/,De],[/^(?:position-|pos-)?inset-([xy])-(.+)$/,De],[/^(?:position-|pos-)?inset-([rltbse])-(.+)$/,De],[/^(?:position-|pos-)?inset-(block|inline)-(.+)$/,De],[/^(?:position-|pos-)?inset-([bi][se])-(.+)$/,De],[/^(?:position-|pos-)?(top|left|right|bottom)-(.+)$/,([,e,t],r)=>({[e]:tn(t,r)})]],It=[["float-left",{float:"left"}],["float-right",{float:"right"}],["float-start",{float:"inline-start"}],["float-end",{float:"inline-end"}],["float-none",{float:"none"}],...y("float"),["clear-left",{clear:"left"}],["clear-right",{clear:"right"}],["clear-both",{clear:"both"}],["clear-start",{clear:"inline-start"}],["clear-end",{clear:"inline-end"}],["clear-none",{clear:"none"}],...y("clear")],Kt=[[/^(?:position-|pos-)?z([\d.]+)$/,([,e])=>({"z-index":c.number(e)})],[/^(?:position-|pos-)?z-(.+)$/,([,e],{theme:t})=>({"z-index":t.zIndex?.[e]??c.bracket.cssvar.global.auto.number(e)}),{autocomplete:"z-"}]],Gt=[["box-border",{"box-sizing":"border-box"}],["box-content",{"box-sizing":"content-box"}],...y("box","box-sizing")];var Jl=["auto","default","none","context-menu","help","pointer","progress","wait","cell","crosshair","text","vertical-text","alias","copy","move","no-drop","not-allowed","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out"],Ql=["none","strict","content","size","inline-size","layout","style","paint"],E=" ",Ht=[["inline",{display:"inline"}],["block",{display:"block"}],["inline-block",{display:"inline-block"}],["contents",{display:"contents"}],["flow-root",{display:"flow-root"}],["list-item",{display:"list-item"}],["hidden",{display:"none"}],[/^display-(.+)$/,([,e])=>({display:c.bracket.cssvar.global(e)})]],qt=[["visible",{visibility:"visible"}],["invisible",{visibility:"hidden"}],["backface-visible",{"backface-visibility":"visible"}],["backface-hidden",{"backface-visibility":"hidden"}],...y("backface","backface-visibility")],Yt=[[/^cursor-(.+)$/,([,e])=>({cursor:c.bracket.cssvar.global(e)})],...Jl.map(e=>[`cursor-${e}`,{cursor:e}])],Xt=[[/^contain-(.*)$/,([,e])=>c.bracket(e)!=null?{contain:c.bracket(e).split(" ").map(t=>c.cssvar.fraction(t)??t).join(" ")}:Ql.includes(e)?{contain:e}:void 0]],Zt=[["pointer-events-auto",{"pointer-events":"auto"}],["pointer-events-none",{"pointer-events":"none"}],...y("pointer-events")],Jt=[["resize-x",{resize:"horizontal"}],["resize-y",{resize:"vertical"}],["resize",{resize:"both"}],["resize-none",{resize:"none"}],...y("resize")],Qt=[["select-auto",{"-webkit-user-select":"auto","user-select":"auto"}],["select-all",{"-webkit-user-select":"all","user-select":"all"}],["select-text",{"-webkit-user-select":"text","user-select":"text"}],["select-none",{"-webkit-user-select":"none","user-select":"none"}],...y("select","user-select")],er=[[/^(?:whitespace-|ws-)([-\w]+)$/,([,e])=>["normal","nowrap","pre","pre-line","pre-wrap","break-spaces",...S].includes(e)?{"white-space":e}:void 0,{autocomplete:"(whitespace|ws)-(normal|nowrap|pre|pre-line|pre-wrap|break-spaces)"}]],tr=[[/^intrinsic-size-(.+)$/,([,e])=>({"contain-intrinsic-size":c.bracket.cssvar.global.fraction.rem(e)}),{autocomplete:"intrinsic-size-"}],["content-visibility-visible",{"content-visibility":"visible"}],["content-visibility-hidden",{"content-visibility":"hidden"}],["content-visibility-auto",{"content-visibility":"auto"}],...y("content-visibility")],rr=[[/^content-(.+)$/,([,e])=>({content:c.bracket.cssvar(e)})],["content-empty",{content:'""'}],["content-none",{content:"none"}]],nr=[["break-normal",{"overflow-wrap":"normal","word-break":"normal"}],["break-words",{"overflow-wrap":"break-word"}],["break-all",{"word-break":"break-all"}],["break-keep",{"word-break":"keep-all"}],["break-anywhere",{"overflow-wrap":"anywhere"}]],or=[["text-wrap",{"text-wrap":"wrap"}],["text-nowrap",{"text-wrap":"nowrap"}],["text-balance",{"text-wrap":"balance"}],["text-pretty",{"text-wrap":"pretty"}]],ir=[["truncate",{overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}],["text-truncate",{overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}],["text-ellipsis",{"text-overflow":"ellipsis"}],["text-clip",{"text-overflow":"clip"}]],sr=[["case-upper",{"text-transform":"uppercase"}],["case-lower",{"text-transform":"lowercase"}],["case-capital",{"text-transform":"capitalize"}],["case-normal",{"text-transform":"none"}],...y("case","text-transform")],ar=[["italic",{"font-style":"italic"}],["not-italic",{"font-style":"normal"}],["font-italic",{"font-style":"italic"}],["font-not-italic",{"font-style":"normal"}],["oblique",{"font-style":"oblique"}],["not-oblique",{"font-style":"normal"}],["font-oblique",{"font-style":"oblique"}],["font-not-oblique",{"font-style":"normal"}]],lr=[["antialiased",{"-webkit-font-smoothing":"antialiased","-moz-osx-font-smoothing":"grayscale"}],["subpixel-antialiased",{"-webkit-font-smoothing":"auto","-moz-osx-font-smoothing":"auto"}]];var cr={"--un-ring-inset":E,"--un-ring-offset-width":"0px","--un-ring-offset-color":"#fff","--un-ring-width":"0px","--un-ring-color":"rgb(147 197 253 / 0.5)","--un-shadow":"0 0 rgb(0 0 0 / 0)"},fr=[[/^ring(?:-(.+))?$/,([,e],{theme:t})=>{let r=t.ringWidth?.[e||"DEFAULT"]??c.px(e||"1");if(r)return{"--un-ring-width":r,"--un-ring-offset-shadow":"var(--un-ring-inset) 0 0 0 var(--un-ring-offset-width) var(--un-ring-offset-color)","--un-ring-shadow":"var(--un-ring-inset) 0 0 0 calc(var(--un-ring-width) + var(--un-ring-offset-width)) var(--un-ring-color)","box-shadow":"var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow)"}},{autocomplete:"ring-$ringWidth"}],[/^ring-(?:width-|size-)(.+)$/,$o,{autocomplete:"ring-(width|size)-$lineWidth"}],["ring-offset",{"--un-ring-offset-width":"1px"}],[/^ring-offset-(?:width-|size-)?(.+)$/,([,e],{theme:t})=>({"--un-ring-offset-width":t.lineWidth?.[e]??c.bracket.cssvar.px(e)}),{autocomplete:"ring-offset-(width|size)-$lineWidth"}],[/^ring-(.+)$/,ec,{autocomplete:"ring-$colors"}],[/^ring-op(?:acity)?-?(.+)$/,([,e])=>({"--un-ring-opacity":c.bracket.percent.cssvar(e)}),{autocomplete:"ring-(op|opacity)-"}],[/^ring-offset-(.+)$/,j("--un-ring-offset-color","ring-offset","borderColor"),{autocomplete:"ring-offset-$colors"}],[/^ring-offset-op(?:acity)?-?(.+)$/,([,e])=>({"--un-ring-offset-opacity":c.bracket.percent.cssvar(e)}),{autocomplete:"ring-offset-(op|opacity)-"}],["ring-inset",{"--un-ring-inset":"inset"}]];function $o([,e],{theme:t}){return{"--un-ring-width":t.ringWidth?.[e]??c.bracket.cssvar.px(e)}}function ec(e,t){return q(c.bracket(e[1]))?$o(e,t):j("--un-ring-color","ring","borderColor")(e,t)}var ur={"--un-ring-offset-shadow":"0 0 rgb(0 0 0 / 0)","--un-ring-shadow":"0 0 rgb(0 0 0 / 0)","--un-shadow-inset":E,"--un-shadow":"0 0 rgb(0 0 0 / 0)"},pr=[[/^shadow(?:-(.+))?$/,(e,t)=>{let[,r]=e,{theme:n}=t,o=n.boxShadow?.[r||"DEFAULT"],i=r?c.bracket.cssvar(r):void 0;return(o!=null||i!=null)&&!Re(i,n,"shadowColor")?{"--un-shadow":Ce(o||i,"--un-shadow-color").join(","),"box-shadow":"var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow)"}:j("--un-shadow-color","shadow","shadowColor")(e,t)},{autocomplete:["shadow-$colors","shadow-$boxShadow"]}],[/^shadow-op(?:acity)?-?(.+)$/,([,e])=>({"--un-shadow-opacity":c.bracket.percent.cssvar(e)}),{autocomplete:"shadow-(op|opacity)-"}],["shadow-inset",{"--un-shadow-inset":"inset"}]];var tc={h:"height",w:"width",inline:"inline-size",block:"block-size"};function he(e,t){return`${e||""}${tc[t]}`}function dr(e,t,r,n){let o=he(e,t).replace(/-(\w)/g,(s,a)=>a.toUpperCase()),i=r[o]?.[n];if(i!=null)return i;switch(n){case"fit":case"max":case"min":return`${n}-content`}return c.bracket.cssvar.global.auto.fraction.rem(n)}var mr=[[/^size-(min-|max-)?(.+)$/,([,e,t],{theme:r})=>({[he(e,"w")]:dr(e,"w",r,t),[he(e,"h")]:dr(e,"h",r,t)})],[/^(?:size-)?(min-|max-)?([wh])-?(.+)$/,([,e,t,r],{theme:n})=>({[he(e,t)]:dr(e,t,n,r)})],[/^(?:size-)?(min-|max-)?(block|inline)-(.+)$/,([,e,t,r],{theme:n})=>({[he(e,t)]:dr(e,t,n,r)}),{autocomplete:["(w|h)-$width|height|maxWidth|maxHeight|minWidth|minHeight|inlineSize|blockSize|maxInlineSize|maxBlockSize|minInlineSize|minBlockSize","(block|inline)-$width|height|maxWidth|maxHeight|minWidth|minHeight|inlineSize|blockSize|maxInlineSize|maxBlockSize|minInlineSize|minBlockSize","(max|min)-(w|h|block|inline)","(max|min)-(w|h|block|inline)-$width|height|maxWidth|maxHeight|minWidth|minHeight|inlineSize|blockSize|maxInlineSize|maxBlockSize|minInlineSize|minBlockSize","(w|h)-full","(max|min)-(w|h)-full"]}],[/^(?:size-)?(min-|max-)?(h)-screen-(.+)$/,([,e,t,r],n)=>({[he(e,t)]:ko(n,r,"verticalBreakpoints")})],[/^(?:size-)?(min-|max-)?(w)-screen-(.+)$/,([,e,t,r],n)=>({[he(e,t)]:ko(n,r)}),{autocomplete:["(w|h)-screen","(min|max)-(w|h)-screen","h-screen-$verticalBreakpoints","(min|max)-h-screen-$verticalBreakpoints","w-screen-$breakpoints","(min|max)-w-screen-$breakpoints"]}]];function ko(e,t,r="breakpoints"){let n=de(e,r);if(n)return n.find(o=>o.point===t)?.size}function rc(e){if(/^\d+\/\d+$/.test(e))return e;switch(e){case"square":return"1/1";case"video":return"16/9"}return c.bracket.cssvar.global.auto.number(e)}var hr=[[/^(?:size-)?aspect-(?:ratio-)?(.+)$/,([,e])=>({"aspect-ratio":rc(e)}),{autocomplete:["aspect-(square|video|ratio)","aspect-ratio-(square|video)"]}]];var gr=[[/^pa?()-?(.+)$/,_("padding"),{autocomplete:["(m|p)","(m|p)-"]}],[/^p-?xy()()$/,_("padding"),{autocomplete:"(m|p)-(xy)"}],[/^p-?([xy])(?:-?(.+))?$/,_("padding")],[/^p-?([rltbse])(?:-?(.+))?$/,_("padding"),{autocomplete:"(m|p)-"}],[/^p-(block|inline)(?:-(.+))?$/,_("padding"),{autocomplete:"(m|p)-(block|inline)-"}],[/^p-?([bi][se])(?:-?(.+))?$/,_("padding"),{autocomplete:"(m|p)-(bs|be|is|ie)-"}]],br=[[/^ma?()-?(.+)$/,_("margin")],[/^m-?xy()()$/,_("margin")],[/^m-?([xy])(?:-?(.+))?$/,_("margin")],[/^m-?([rltbse])(?:-?(.+))?$/,_("margin")],[/^m-(block|inline)(?:-(.+))?$/,_("margin")],[/^m-?([bi][se])(?:-?(.+))?$/,_("margin")]];var xr=["translate","rotate","scale"],nc=["translateX(var(--un-translate-x))","translateY(var(--un-translate-y))","rotate(var(--un-rotate))","rotateZ(var(--un-rotate-z))","skewX(var(--un-skew-x))","skewY(var(--un-skew-y))","scaleX(var(--un-scale-x))","scaleY(var(--un-scale-y))"].join(" "),Te=["translateX(var(--un-translate-x))","translateY(var(--un-translate-y))","translateZ(var(--un-translate-z))","rotate(var(--un-rotate))","rotateX(var(--un-rotate-x))","rotateY(var(--un-rotate-y))","rotateZ(var(--un-rotate-z))","skewX(var(--un-skew-x))","skewY(var(--un-skew-y))","scaleX(var(--un-scale-x))","scaleY(var(--un-scale-y))","scaleZ(var(--un-scale-z))"].join(" "),oc=["translate3d(var(--un-translate-x), var(--un-translate-y), var(--un-translate-z))","rotate(var(--un-rotate))","rotateX(var(--un-rotate-x))","rotateY(var(--un-rotate-y))","rotateZ(var(--un-rotate-z))","skewX(var(--un-skew-x))","skewY(var(--un-skew-y))","scaleX(var(--un-scale-x))","scaleY(var(--un-scale-y))","scaleZ(var(--un-scale-z))"].join(" "),yr={"--un-rotate":0,"--un-rotate-x":0,"--un-rotate-y":0,"--un-rotate-z":0,"--un-scale-x":1,"--un-scale-y":1,"--un-scale-z":1,"--un-skew-x":0,"--un-skew-y":0,"--un-translate-x":0,"--un-translate-y":0,"--un-translate-z":0},vr=[[/^(?:transform-)?origin-(.+)$/,([,e])=>({"transform-origin":U[e]??c.bracket.cssvar(e)}),{autocomplete:[`transform-origin-(${Object.keys(U).join("|")})`,`origin-(${Object.keys(U).join("|")})`]}],[/^(?:transform-)?perspect(?:ive)?-(.+)$/,([,e])=>{let t=c.bracket.cssvar.px.numberWithUnit(e);if(t!=null)return{"-webkit-perspective":t,perspective:t}}],[/^(?:transform-)?perspect(?:ive)?-origin-(.+)$/,([,e])=>{let t=c.bracket.cssvar(e)??(e.length>=3?U[e]:void 0);if(t!=null)return{"-webkit-perspective-origin":t,"perspective-origin":t}}],[/^(?:transform-)?translate-()(.+)$/,So],[/^(?:transform-)?translate-([xyz])-(.+)$/,So],[/^(?:transform-)?rotate-()(.+)$/,Ro],[/^(?:transform-)?rotate-([xyz])-(.+)$/,Ro],[/^(?:transform-)?skew-()(.+)$/,To],[/^(?:transform-)?skew-([xy])-(.+)$/,To,{autocomplete:["transform-skew-(x|y)-","skew-(x|y)-"]}],[/^(?:transform-)?scale-()(.+)$/,Co],[/^(?:transform-)?scale-([xyz])-(.+)$/,Co,{autocomplete:[`transform-(${xr.join("|")})-`,`transform-(${xr.join("|")})-(x|y|z)-`,`(${xr.join("|")})-`,`(${xr.join("|")})-(x|y|z)-`]}],[/^(?:transform-)?preserve-3d$/,()=>({"transform-style":"preserve-3d"})],[/^(?:transform-)?preserve-flat$/,()=>({"transform-style":"flat"})],["transform",{transform:Te}],["transform-cpu",{transform:nc}],["transform-gpu",{transform:oc}],["transform-none",{transform:"none"}],...y("transform")];function So([,e,t],{theme:r}){let n=r.spacing?.[t]??c.bracket.cssvar.fraction.rem(t);if(n!=null)return[...yt(e,n,"translate"),["transform",Te]]}function Co([,e,t]){let r=c.bracket.cssvar.fraction.percent(t);if(r!=null)return[...yt(e,r,"scale"),["transform",Te]]}function Ro([,e="",t]){let r=c.bracket.cssvar.degree(t);if(r!=null)return e?{"--un-rotate":0,[`--un-rotate-${e}`]:r,transform:Te}:{"--un-rotate-x":0,"--un-rotate-y":0,"--un-rotate-z":0,"--un-rotate":r,transform:Te}}function To([,e,t]){let r=c.bracket.cssvar.degree(t);if(r!=null)return[...yt(e,r,"skew"),["transform",Te]]}var ic={backface:"backface-visibility",break:"word-break",case:"text-transform",content:"align-content",fw:"font-weight",items:"align-items",justify:"justify-content",select:"user-select",self:"align-self",vertical:"vertical-align",visible:"visibility",whitespace:"white-space",ws:"white-space"},wr=[[/^(.+?)-(\$.+)$/,([,e,t])=>{let r=ic[e];if(r)return{[r]:c.cssvar(t)}}]],$r=[[/^\[(.*)\]$/,([e,t])=>{if(!t.includes(":"))return;let[r,...n]=t.split(":"),o=n.join(":");if(!ac(t)&&/^[a-z-]+$/.test(r)&&sc(o)){let i=c.bracket(`[${o}]`);if(i)return{[r]:i}}}]];function sc(e){let t=0;function r(n){for(;t{if(r.userConfig.envMode==="dev")return`@keyframes __un_qm{0%{box-shadow:inset 4px 4px #ff1e90, inset -4px -4px #ff1e90}100%{box-shadow:inset 8px 8px #3399ff, inset -8px -8px #3399ff}} ${t({animation:"__un_qm 0.5s ease-in-out alternate infinite"})}`}]];var Sr=[[/^fill-(.+)$/,j("fill","fill","backgroundColor"),{autocomplete:"fill-$colors"}],[/^fill-op(?:acity)?-?(.+)$/,([,e])=>({"--un-fill-opacity":c.bracket.percent.cssvar(e)}),{autocomplete:"fill-(op|opacity)-"}],["fill-none",{fill:"none"}],[/^stroke-(?:width-|size-)?(.+)$/,Eo,{autocomplete:["stroke-width-$lineWidth","stroke-size-$lineWidth"]}],[/^stroke-dash-(.+)$/,([,e])=>({"stroke-dasharray":c.bracket.cssvar.number(e)}),{autocomplete:"stroke-dash-"}],[/^stroke-offset-(.+)$/,([,e],{theme:t})=>({"stroke-dashoffset":t.lineWidth?.[e]??c.bracket.cssvar.px.numberWithUnit(e)}),{autocomplete:"stroke-offset-$lineWidth"}],[/^stroke-(.+)$/,lc,{autocomplete:"stroke-$colors"}],[/^stroke-op(?:acity)?-?(.+)$/,([,e])=>({"--un-stroke-opacity":c.bracket.percent.cssvar(e)}),{autocomplete:"stroke-(op|opacity)-"}],["stroke-cap-square",{"stroke-linecap":"square"}],["stroke-cap-round",{"stroke-linecap":"round"}],["stroke-cap-auto",{"stroke-linecap":"butt"}],["stroke-join-arcs",{"stroke-linejoin":"arcs"}],["stroke-join-bevel",{"stroke-linejoin":"bevel"}],["stroke-join-clip",{"stroke-linejoin":"miter-clip"}],["stroke-join-round",{"stroke-linejoin":"round"}],["stroke-join-auto",{"stroke-linejoin":"miter"}],["stroke-none",{stroke:"none"}]];function Eo([,e],{theme:t}){return{"stroke-width":t.lineWidth?.[e]??c.bracket.cssvar.fraction.px.number(e)}}function lc(e,t){return q(c.bracket(e[1]))?Eo(e,t):j("stroke","stroke","borderColor")(e,t)}var jo=[wr,$r,Xt,Zt,qt,Wt,Bt,Kt,Nt,Ft,It,br,Gt,Ht,hr,mr,zt,vr,Yt,Qt,Jt,wt,Ke,Ie,Be,_t,Dt,Ut,ir,er,nr,kt,Ct,Rt,Sr,gr,bt,At,or,gt,Ot,sr,ar,Et,lr,Vt,Mt,Pt,St,pr,vt,fr,jt,$t,tr,rr,Tt,kr].flat(1);var rn={inherit:"inherit",current:"currentColor",transparent:"transparent",black:"#000",white:"#fff",rose:{50:"#fff1f2",100:"#ffe4e6",200:"#fecdd3",300:"#fda4af",400:"#fb7185",500:"#f43f5e",600:"#e11d48",700:"#be123c",800:"#9f1239",900:"#881337",950:"#4c0519"},pink:{50:"#fdf2f8",100:"#fce7f3",200:"#fbcfe8",300:"#f9a8d4",400:"#f472b6",500:"#ec4899",600:"#db2777",700:"#be185d",800:"#9d174d",900:"#831843",950:"#500724"},fuchsia:{50:"#fdf4ff",100:"#fae8ff",200:"#f5d0fe",300:"#f0abfc",400:"#e879f9",500:"#d946ef",600:"#c026d3",700:"#a21caf",800:"#86198f",900:"#701a75",950:"#4a044e"},purple:{50:"#faf5ff",100:"#f3e8ff",200:"#e9d5ff",300:"#d8b4fe",400:"#c084fc",500:"#a855f7",600:"#9333ea",700:"#7e22ce",800:"#6b21a8",900:"#581c87",950:"#3b0764"},violet:{50:"#f5f3ff",100:"#ede9fe",200:"#ddd6fe",300:"#c4b5fd",400:"#a78bfa",500:"#8b5cf6",600:"#7c3aed",700:"#6d28d9",800:"#5b21b6",900:"#4c1d95",950:"#2e1065"},indigo:{50:"#eef2ff",100:"#e0e7ff",200:"#c7d2fe",300:"#a5b4fc",400:"#818cf8",500:"#6366f1",600:"#4f46e5",700:"#4338ca",800:"#3730a3",900:"#312e81",950:"#1e1b4b"},blue:{50:"#eff6ff",100:"#dbeafe",200:"#bfdbfe",300:"#93c5fd",400:"#60a5fa",500:"#3b82f6",600:"#2563eb",700:"#1d4ed8",800:"#1e40af",900:"#1e3a8a",950:"#172554"},sky:{50:"#f0f9ff",100:"#e0f2fe",200:"#bae6fd",300:"#7dd3fc",400:"#38bdf8",500:"#0ea5e9",600:"#0284c7",700:"#0369a1",800:"#075985",900:"#0c4a6e",950:"#082f49"},cyan:{50:"#ecfeff",100:"#cffafe",200:"#a5f3fc",300:"#67e8f9",400:"#22d3ee",500:"#06b6d4",600:"#0891b2",700:"#0e7490",800:"#155e75",900:"#164e63",950:"#083344"},teal:{50:"#f0fdfa",100:"#ccfbf1",200:"#99f6e4",300:"#5eead4",400:"#2dd4bf",500:"#14b8a6",600:"#0d9488",700:"#0f766e",800:"#115e59",900:"#134e4a",950:"#042f2e"},emerald:{50:"#ecfdf5",100:"#d1fae5",200:"#a7f3d0",300:"#6ee7b7",400:"#34d399",500:"#10b981",600:"#059669",700:"#047857",800:"#065f46",900:"#064e3b",950:"#022c22"},green:{50:"#f0fdf4",100:"#dcfce7",200:"#bbf7d0",300:"#86efac",400:"#4ade80",500:"#22c55e",600:"#16a34a",700:"#15803d",800:"#166534",900:"#14532d",950:"#052e16"},lime:{50:"#f7fee7",100:"#ecfccb",200:"#d9f99d",300:"#bef264",400:"#a3e635",500:"#84cc16",600:"#65a30d",700:"#4d7c0f",800:"#3f6212",900:"#365314",950:"#1a2e05"},yellow:{50:"#fefce8",100:"#fef9c3",200:"#fef08a",300:"#fde047",400:"#facc15",500:"#eab308",600:"#ca8a04",700:"#a16207",800:"#854d0e",900:"#713f12",950:"#422006"},amber:{50:"#fffbeb",100:"#fef3c7",200:"#fde68a",300:"#fcd34d",400:"#fbbf24",500:"#f59e0b",600:"#d97706",700:"#b45309",800:"#92400e",900:"#78350f",950:"#451a03"},orange:{50:"#fff7ed",100:"#ffedd5",200:"#fed7aa",300:"#fdba74",400:"#fb923c",500:"#f97316",600:"#ea580c",700:"#c2410c",800:"#9a3412",900:"#7c2d12",950:"#431407"},red:{50:"#fef2f2",100:"#fee2e2",200:"#fecaca",300:"#fca5a5",400:"#f87171",500:"#ef4444",600:"#dc2626",700:"#b91c1c",800:"#991b1b",900:"#7f1d1d",950:"#450a0a"},gray:{50:"#f9fafb",100:"#f3f4f6",200:"#e5e7eb",300:"#d1d5db",400:"#9ca3af",500:"#6b7280",600:"#4b5563",700:"#374151",800:"#1f2937",900:"#111827",950:"#030712"},slate:{50:"#f8fafc",100:"#f1f5f9",200:"#e2e8f0",300:"#cbd5e1",400:"#94a3b8",500:"#64748b",600:"#475569",700:"#334155",800:"#1e293b",900:"#0f172a",950:"#020617"},zinc:{50:"#fafafa",100:"#f4f4f5",200:"#e4e4e7",300:"#d4d4d8",400:"#a1a1aa",500:"#71717a",600:"#52525b",700:"#3f3f46",800:"#27272a",900:"#18181b",950:"#09090b"},neutral:{50:"#fafafa",100:"#f5f5f5",200:"#e5e5e5",300:"#d4d4d4",400:"#a3a3a3",500:"#737373",600:"#525252",700:"#404040",800:"#262626",900:"#171717",950:"#0a0a0a"},stone:{50:"#fafaf9",100:"#f5f5f4",200:"#e7e5e4",300:"#d6d3d1",400:"#a8a29e",500:"#78716c",600:"#57534e",700:"#44403c",800:"#292524",900:"#1c1917",950:"#0c0a09"},light:{50:"#fdfdfd",100:"#fcfcfc",200:"#fafafa",300:"#f8f9fa",400:"#f6f6f6",500:"#f2f2f2",600:"#f1f3f5",700:"#e9ecef",800:"#dee2e6",900:"#dde1e3",950:"#d8dcdf"},dark:{50:"#4a4a4a",100:"#3c3c3c",200:"#323232",300:"#2d2d2d",400:"#222222",500:"#1f1f1f",600:"#1c1c1e",700:"#1b1b1b",800:"#181818",900:"#0f0f0f",950:"#080808"},get lightblue(){return this.sky},get lightBlue(){return this.sky},get warmgray(){return this.stone},get warmGray(){return this.stone},get truegray(){return this.neutral},get trueGray(){return this.neutral},get coolgray(){return this.gray},get coolGray(){return this.gray},get bluegray(){return this.slate},get blueGray(){return this.slate}};Object.values(rn).forEach(e=>{typeof e!="string"&&e!==void 0&&(e.DEFAULT=e.DEFAULT||e[400],Object.keys(e).forEach(t=>{let r=+t/100;r===Math.round(r)&&(e[r]=e[t])}))});var zo={sans:["ui-sans-serif","system-ui","-apple-system","BlinkMacSystemFont",'"Segoe UI"',"Roboto",'"Helvetica Neue"',"Arial",'"Noto Sans"',"sans-serif",'"Apple Color Emoji"','"Segoe UI Emoji"','"Segoe UI Symbol"','"Noto Color Emoji"'].join(","),serif:["ui-serif","Georgia","Cambria",'"Times New Roman"',"Times","serif"].join(","),mono:["ui-monospace","SFMono-Regular","Menlo","Monaco","Consolas",'"Liberation Mono"','"Courier New"',"monospace"].join(",")},Oo={xs:["0.75rem","1rem"],sm:["0.875rem","1.25rem"],base:["1rem","1.5rem"],lg:["1.125rem","1.75rem"],xl:["1.25rem","1.75rem"],"2xl":["1.5rem","2rem"],"3xl":["1.875rem","2.25rem"],"4xl":["2.25rem","2.5rem"],"5xl":["3rem","1"],"6xl":["3.75rem","1"],"7xl":["4.5rem","1"],"8xl":["6rem","1"],"9xl":["8rem","1"]},Vo={DEFAULT:"1.5rem",xs:"0.5rem",sm:"1rem",md:"1.5rem",lg:"2rem",xl:"2.5rem","2xl":"3rem","3xl":"4rem"},Ao={DEFAULT:"1.5rem",none:"0",sm:"thin",md:"medium",lg:"thick"},Mo={DEFAULT:["0 0 1px rgb(0 0 0 / 0.2)","0 0 1px rgb(1 0 5 / 0.1)"],none:"0 0 rgb(0 0 0 / 0)",sm:"1px 1px 3px rgb(36 37 47 / 0.25)",md:["0 1px 2px rgb(30 29 39 / 0.19)","1px 2px 4px rgb(54 64 147 / 0.18)"],lg:["3px 3px 6px rgb(0 0 0 / 0.26)","0 0 5px rgb(15 3 86 / 0.22)"],xl:["1px 1px 3px rgb(0 0 0 / 0.29)","2px 4px 7px rgb(73 64 125 / 0.35)"]},Po={none:"1",tight:"1.25",snug:"1.375",normal:"1.5",relaxed:"1.625",loose:"2"},nn={tighter:"-0.05em",tight:"-0.025em",normal:"0em",wide:"0.025em",wider:"0.05em",widest:"0.1em"},_o={thin:"100",extralight:"200",light:"300",normal:"400",medium:"500",semibold:"600",bold:"700",extrabold:"800",black:"900"},Fo=nn;var on={sm:"640px",md:"768px",lg:"1024px",xl:"1280px","2xl":"1536px"},Lo={...on},Uo={DEFAULT:"1px",none:"0"},Wo={DEFAULT:"1rem",none:"0",xs:"0.75rem",sm:"0.875rem",lg:"1.125rem",xl:"1.25rem","2xl":"1.5rem","3xl":"1.875rem","4xl":"2.25rem","5xl":"3rem","6xl":"3.75rem","7xl":"4.5rem","8xl":"6rem","9xl":"8rem"},No={DEFAULT:"150ms",none:"0s",75:"75ms",100:"100ms",150:"150ms",200:"200ms",300:"300ms",500:"500ms",700:"700ms",1e3:"1000ms"},Do={DEFAULT:"0.25rem",none:"0",sm:"0.125rem",md:"0.375rem",lg:"0.5rem",xl:"0.75rem","2xl":"1rem","3xl":"1.5rem",full:"9999px"},Bo={DEFAULT:["var(--un-shadow-inset) 0 1px 3px 0 rgb(0 0 0 / 0.1)","var(--un-shadow-inset) 0 1px 2px -1px rgb(0 0 0 / 0.1)"],none:"0 0 rgb(0 0 0 / 0)",sm:"var(--un-shadow-inset) 0 1px 2px 0 rgb(0 0 0 / 0.05)",md:["var(--un-shadow-inset) 0 4px 6px -1px rgb(0 0 0 / 0.1)","var(--un-shadow-inset) 0 2px 4px -2px rgb(0 0 0 / 0.1)"],lg:["var(--un-shadow-inset) 0 10px 15px -3px rgb(0 0 0 / 0.1)","var(--un-shadow-inset) 0 4px 6px -4px rgb(0 0 0 / 0.1)"],xl:["var(--un-shadow-inset) 0 20px 25px -5px rgb(0 0 0 / 0.1)","var(--un-shadow-inset) 0 8px 10px -6px rgb(0 0 0 / 0.1)"],"2xl":"var(--un-shadow-inset) 0 25px 50px -12px rgb(0 0 0 / 0.25)",inner:"inset 0 2px 4px 0 rgb(0 0 0 / 0.05)"},Io={DEFAULT:"3px",none:"0"},Ko={auto:"auto"},Go={mouse:"(hover) and (pointer: fine)"};var Ho={DEFAULT:"8px",0:"0",sm:"4px",md:"12px",lg:"16px",xl:"24px","2xl":"40px","3xl":"64px"},qo={DEFAULT:["0 1px 2px rgb(0 0 0 / 0.1)","0 1px 1px rgb(0 0 0 / 0.06)"],sm:"0 1px 1px rgb(0 0 0 / 0.05)",md:["0 4px 3px rgb(0 0 0 / 0.07)","0 2px 2px rgb(0 0 0 / 0.06)"],lg:["0 10px 8px rgb(0 0 0 / 0.04)","0 4px 3px rgb(0 0 0 / 0.1)"],xl:["0 20px 13px rgb(0 0 0 / 0.03)","0 8px 5px rgb(0 0 0 / 0.08)"],"2xl":"0 25px 25px rgb(0 0 0 / 0.15)",none:"0 0 rgb(0 0 0 / 0)"};var Ge={xs:"20rem",sm:"24rem",md:"28rem",lg:"32rem",xl:"36rem","2xl":"42rem","3xl":"48rem","4xl":"56rem","5xl":"64rem","6xl":"72rem","7xl":"80rem",prose:"65ch"},sn={auto:"auto",...Ge,screen:"100vw"},He={none:"none",...Ge,screen:"100vw"},an={auto:"auto",...Ge,screen:"100vh"},qe={none:"none",...Ge,screen:"100vh"},Yo=Object.fromEntries(Object.entries(Ge).map(([e,t])=>[e,`(min-width: ${t})`]));var Xo={...yr,...ur,...cr};var Zo={DEFAULT:"cubic-bezier(0.4, 0, 0.2, 1)",linear:"linear",in:"cubic-bezier(0.4, 0, 1, 1)",out:"cubic-bezier(0, 0, 0.2, 1)","in-out":"cubic-bezier(0.4, 0, 0.2, 1)"},Jo={none:"none",all:"all",colors:["color","background-color","border-color","outline-color","text-decoration-color","fill","stroke"].join(","),opacity:"opacity",shadow:"box-shadow",transform:"transform",get DEFAULT(){return[this.colors,"opacity","box-shadow","transform","filter","backdrop-filter"].join(",")}};var Qo={width:sn,height:an,maxWidth:He,maxHeight:qe,minWidth:He,minHeight:qe,inlineSize:sn,blockSize:an,maxInlineSize:He,maxBlockSize:qe,minInlineSize:He,minBlockSize:qe,colors:rn,fontFamily:zo,fontSize:Oo,fontWeight:_o,breakpoints:on,verticalBreakpoints:Lo,borderRadius:Do,lineHeight:Po,letterSpacing:nn,wordSpacing:Fo,boxShadow:Bo,textIndent:Vo,textShadow:Mo,textStrokeWidth:Ao,blur:Ho,dropShadow:qo,easing:Zo,transitionProperty:Jo,lineWidth:Uo,spacing:Wo,duration:No,ringWidth:Io,preflightBase:Xo,containers:Yo,zIndex:Ko,media:Go};var ei={name:"aria",match(e,t){let r=D("aria-",e,t.generator.config.separators);if(r){let[n,o]=r,i=c.bracket(n)??t.theme.aria?.[n]??"";if(i)return{matcher:o,selector:s=>`${s}[aria-${i}]`}}}};function Cr(e){return{name:`${e}-aria`,match(t,r){let n=D(`${e}-aria-`,t,r.generator.config.separators);if(n){let[o,i]=n,s=c.bracket(o)??r.theme.aria?.[o]??"";if(s)return{matcher:`${e}-[[aria-${s}]]:${i}`}}}}}var ti=[Cr("group"),Cr("peer"),Cr("parent"),Cr("previous")];function ri(e){let t=e.match(/^-?\d+\.?\d*/)?.[0]||"",r=e.slice(t.length);if(r==="px"){let n=Number.parseFloat(t)-.1;return Number.isNaN(n)?e:`${n}${r}`}return`calc(${e} - 0.1px)`}var ni=/(max|min)-\[([^\]]*)\]:/;function oi(){let e={};return{name:"breakpoints",match(t,r){if(ni.test(t)){let o=t.match(ni);return{matcher:t.replace(o[0],""),handle:(s,a)=>a({...s,parent:`${s.parent?`${s.parent} $$ `:""}@media (${o[1]}-width: ${o[2]})`})}}let n=(de(r)??[]).map(({point:o,size:i},s)=>[o,i,s]);for(let[o,i,s]of n){e[o]||(e[o]=new RegExp(`^((?:([al]t-|[<~]|max-))?${o}(?:${r.generator.config.separators.join("|")}))`));let a=t.match(e[o]);if(!a)continue;let[,l]=a,f=t.slice(l.length);if(f==="container")continue;let u=l.startsWith("lt-")||l.startsWith("<")||l.startsWith("max-"),p=l.startsWith("at-")||l.startsWith("~"),d=3e3;return u?(d-=s+1,{matcher:f,handle:(m,g)=>g({...m,parent:`${m.parent?`${m.parent} $$ `:""}@media (max-width: ${ri(i)})`,parentOrder:d})}):(d+=s+1,p&&sg({...m,parent:`${m.parent?`${m.parent} $$ `:""}@media (min-width: ${i}) and (max-width: ${ri(n[s+1][1])})`,parentOrder:d})}:{matcher:f,handle:(m,g)=>g({...m,parent:`${m.parent?`${m.parent} $$ `:""}@media (min-width: ${i})`,parentOrder:d})})}},multiPass:!0,autocomplete:"(at-|lt-|max-|)$breakpoints:"}}var ii=[B("*",e=>({selector:`${e.selector} > *`}))];function Ye(e,t){return{name:`combinator:${e}`,match(r,n){if(!r.startsWith(e))return;let o=n.generator.config.separators,i=ce(`${e}-`,r,o);if(!i){for(let a of o)if(r.startsWith(`${e}${a}`)){i=["",r.slice(e.length+a.length)];break}if(!i)return}let s=c.bracket(i[0])??"";return s===""&&(s="*"),{matcher:i[1],selector:a=>`${a}${t}${s}`}},multiPass:!0}}var si=[Ye("all"," "),Ye("children",">"),Ye("next","+"),Ye("sibling","+"),Ye("siblings","~")];var ai={name:"@",match(e,t){if(e.startsWith("@container"))return;let r=D("@",e,t.generator.config.separators);if(r){let[n,o,i]=r,s=c.bracket(n),a;if(s){let l=c.numberWithUnit(s);l&&(a=`(min-width: ${l})`)}else a=t.theme.containers?.[n]??"";if(a){ae("The container query variant is experimental and may not follow semver.");let l=1e3+Object.keys(t.theme.containers??{}).indexOf(n);return i&&(l+=1e3),{matcher:o,handle:(f,u)=>u({...f,parent:`${f.parent?`${f.parent} $$ `:""}@container${i?` ${i} `:" "}${a}`,parentOrder:l})}}}},multiPass:!0};function li(e={}){if(e?.dark==="class"||typeof e.dark=="object"){let{dark:t=".dark",light:r=".light"}=typeof e.dark=="string"?{}:e.dark;return[B("dark",n=>({prefix:`${t} $$ ${n.prefix}`})),B("light",n=>({prefix:`${r} $$ ${n.prefix}`}))]}return[I("dark","@media (prefers-color-scheme: dark)"),I("light","@media (prefers-color-scheme: light)")]}var ci={name:"data",match(e,t){let r=D("data-",e,t.generator.config.separators);if(r){let[n,o]=r,i=c.bracket(n)??t.theme.data?.[n]??"";if(i)return{matcher:o,selector:s=>`${s}[data-${i}]`}}}};function Rr(e){return{name:`${e}-data`,match(t,r){let n=D(`${e}-data-`,t,r.generator.config.separators);if(n){let[o,i]=n,s=c.bracket(o)??r.theme.data?.[o]??"";if(s)return{matcher:`${e}-[[data-${s}]]:${i}`}}}}}var fi=[Rr("group"),Rr("peer"),Rr("parent"),Rr("previous")];var ui=[B("rtl",e=>({prefix:`[dir="rtl"] $$ ${e.prefix}`})),B("ltr",e=>({prefix:`[dir="ltr"] $$ ${e.prefix}`}))];var pi={name:"selector",match(e,t){let r=ce("selector-",e,t.generator.config.separators);if(r){let[n,o]=r,i=c.bracket(n);if(i)return{matcher:o,selector:()=>i}}}},di={name:"layer",match(e,t){let r=D("layer-",e,t.generator.config.separators);if(r){let[n,o]=r,i=c.bracket(n)??n;if(i)return{matcher:o,handle:(s,a)=>a({...s,parent:`${s.parent?`${s.parent} $$ `:""}@layer ${i}`})}}}},mi={name:"uno-layer",match(e,t){let r=D("uno-layer-",e,t.generator.config.separators);if(r){let[n,o]=r,i=c.bracket(n)??n;if(i)return{matcher:o,layer:i}}}},hi={name:"scope",match(e,t){let r=ce("scope-",e,t.generator.config.separators);if(r){let[n,o]=r,i=c.bracket(n);if(i)return{matcher:o,selector:s=>`${i} $$ ${s}`}}}},gi={name:"variables",match(e,t){if(!e.startsWith("["))return;let[r,n]=we(e,"[","]")??[];if(!(r&&n))return;let o;for(let a of t.generator.config.separators)if(n.startsWith(a)){o=n.slice(a.length);break}if(o==null)return;let i=c.bracket(r)??"",s=i.startsWith("@");if(s||i.includes("&"))return{matcher:o,handle(a,l){let f=s?{parent:`${a.parent?`${a.parent} $$ `:""}${i}`}:{selector:i.replace(/&/g,a.selector)};return l({...a,...f})}}},multiPass:!0},bi={name:"theme-variables",match(e,t){if(so(e))return{matcher:e,handle(r,n){return n({...r,entries:JSON.parse(ao(JSON.stringify(r.entries),t.theme))})}}}};var xi=/^-?[0-9.]+(?:[a-z]+|%)?$/,yi=/-?[0-9.]+(?:[a-z]+|%)?/,cc=[/\b(opacity|color|flex|backdrop-filter|^filter|transform)\b/];function fc(e){let t=e.match(Pe)||e.match(ct);if(t){let[r,n]=le(`(${t[2]})${t[3]}`,"(",")"," ")??[];if(r)return`calc(${t[1]}${r} * -1)${n?` ${n}`:""}`}}var uc=/\b(hue-rotate)\s*(\(.*)/;function pc(e){let t=e.match(uc);if(t){let[r,n]=le(t[2],"(",")"," ")??[];if(r){let o=xi.test(r.slice(1,-1))?r.replace(yi,i=>i.startsWith("-")?i.slice(1):`-${i}`):`(calc(${r} * -1))`;return`${t[1]}${o}${n?` ${n}`:""}`}}}var vi={name:"negative",match(e){if(e.startsWith("-"))return{matcher:e.slice(1),body:t=>{if(t.find(n=>n[0]===mo))return;let r=!1;return t.forEach(n=>{let o=n[1]?.toString();if(!o||o==="0"||cc.some(a=>a.test(n[0])))return;let i=fc(o);if(i){n[1]=i,r=!0;return}let s=pc(o);if(s){n[1]=s,r=!0;return}xi.test(o)&&(n[1]=o.replace(yi,a=>a.startsWith("-")?a.slice(1):`-${a}`),r=!0)}),r?t:[]}}}};function wi(){let e;return{name:"important",match(t,r){e||(e=new RegExp(`^(important(?:${r.generator.config.separators.join("|")})|!)`));let n,o=t.match(e);if(o?n=t.slice(o[0].length):t.endsWith("!")&&(n=t.slice(0,-1)),n)return{matcher:n,body:i=>(i.forEach(s=>{s[1]!=null&&(s[1]+=" !important")}),i)}}}}var $i=I("print","@media print"),ki={name:"media",match(e,t){let r=D("media-",e,t.generator.config.separators);if(r){let[n,o]=r,i=c.bracket(n)??"";if(i===""&&(i=t.theme.media?.[n]??""),i)return{matcher:o,handle:(s,a)=>a({...s,parent:`${s.parent?`${s.parent} $$ `:""}@media ${i}`})}}},multiPass:!0};var Si={name:"supports",match(e,t){let r=D("supports-",e,t.generator.config.separators);if(r){let[n,o]=r,i=c.bracket(n)??"";if(i===""&&(i=t.theme.supports?.[n]??""),i)return{matcher:o,handle:(s,a)=>a({...s,parent:`${s.parent?`${s.parent} $$ `:""}@supports ${i}`})}}},multiPass:!0};var Ee=Object.fromEntries([["first-letter","::first-letter"],["first-line","::first-line"],"any-link","link","visited","target",["open","[open]"],"default","checked","indeterminate","placeholder-shown","autofill","optional","required","valid","invalid","user-valid","user-invalid","in-range","out-of-range","read-only","read-write","empty","focus-within","hover","focus","focus-visible","active","enabled","disabled","popover-open","root","empty",["even-of-type",":nth-of-type(even)"],["even",":nth-child(even)"],["odd-of-type",":nth-of-type(odd)"],["odd",":nth-child(odd)"],"first-of-type",["first",":first-child"],"last-of-type",["last",":last-child"],"only-child","only-of-type",["backdrop-element","::backdrop"],["placeholder","::placeholder"],["before","::before"],["after","::after"],["selection"," ::selection"],["marker"," ::marker"],["file","::file-selector-button"]].map(e=>Array.isArray(e)?e:[e,`:${e}`])),Ti=Object.keys(Ee),je=Object.fromEntries([["backdrop","::backdrop"]].map(e=>Array.isArray(e)?e:[e,`:${e}`])),Ei=Object.keys(je),dc=["not","is","where","has"],ln=Object.entries(Ee).filter(([,e])=>!e.startsWith("::")).map(([e])=>e).sort((e,t)=>t.length-e.length).join("|"),cn=Object.entries(je).filter(([,e])=>!e.startsWith("::")).map(([e])=>e).sort((e,t)=>t.length-e.length).join("|"),ge=dc.join("|");function mc(e,t,r){let n=new RegExp(`^(${se(t)}:)(\\S+)${se(r)}\\1`),o,i,s,a,l=p=>{let d=ce(`${e}-`,p,[]);if(!d)return;let[m,g]=d,x=c.bracket(m);if(x==null)return;let w=g.split(o,1)?.[0]??"",z=`${t}${ee(w)}`;return[w,p.slice(p.length-(g.length-w.length-1)),x.includes("&")?x.replace(/&/g,z):`${z}${x}`]},f=p=>{let d=p.match(i)||p.match(s);if(!d)return;let[m,g,x]=d,w=d[3]??"",z=Ee[x]||je[x]||`:${x}`;return g&&(z=`:${g}(${z})`),[w,p.slice(m.length),`${t}${ee(w)}${z}`,x]},u=p=>{let d=p.match(a);if(!d)return;let[m,g,x]=d,w=d[3]??"",z=`:${g}(${x})`;return[w,p.slice(m.length),`${t}${ee(w)}${z}`]};return{name:`pseudo:${e}`,match(p,d){if(o&&i&&s||(o=new RegExp(`(?:${d.generator.config.separators.join("|")})`),i=new RegExp(`^${e}-(?:(?:(${ge})-)?(${ln}))(?:(/\\w+))?(?:${d.generator.config.separators.join("|")})`),s=new RegExp(`^${e}-(?:(?:(${ge})-)?(${cn}))(?:(/\\w+))?(?:${d.generator.config.separators.filter(b=>b!=="-").join("|")})`),a=new RegExp(`^${e}-(?:(${ge})-)?\\[(.+)\\](?:(/\\w+))?(?:${d.generator.config.separators.filter(b=>b!=="-").join("|")})`)),!p.startsWith(e))return;let m=l(p)||f(p)||u(p);if(!m)return;let[g,x,w,z=""]=m;return g!==""&&ae("The labeled variant is experimental and may not follow semver."),{matcher:x,handle:(b,$)=>$({...b,prefix:`${w}${r}${b.prefix}`.replace(n,"$1$2:"),sort:Ti.indexOf(z)??Ei.indexOf(z)})}},multiPass:!0}}var hc=["::-webkit-resizer","::-webkit-scrollbar","::-webkit-scrollbar-button","::-webkit-scrollbar-corner","::-webkit-scrollbar-thumb","::-webkit-scrollbar-track","::-webkit-scrollbar-track-piece","::file-selector-button"],Ci=Object.entries(Ee).map(([e])=>e).sort((e,t)=>t.length-e.length).join("|"),Ri=Object.entries(je).map(([e])=>e).sort((e,t)=>t.length-e.length).join("|");function ji(){let e,t;return{name:"pseudo",match(r,n){e&&e||(e=new RegExp(`^(${Ci})(?:${n.generator.config.separators.join("|")})`),t=new RegExp(`^(${Ri})(?:${n.generator.config.separators.filter(i=>i!=="-").join("|")})`));let o=r.match(e)||r.match(t);if(o){let i=Ee[o[1]]||je[o[1]]||`:${o[1]}`,s=Ti.indexOf(o[1]);return s===-1&&(s=Ei.indexOf(o[1])),s===-1&&(s=void 0),{matcher:r.slice(o[0].length),handle:(a,l)=>{let f=i.startsWith("::")&&!hc.includes(i)?{pseudo:`${a.pseudo}${i}`}:{selector:`${a.selector}${i}`};return l({...a,...f,sort:s,noMerge:!0})}}}},multiPass:!0,autocomplete:`(${Ci}|${Ri}):`}}function zi(){let e,t,r;return{match(n,o){e&&t||(e=new RegExp(`^(${ge})-(${ln})(?:${o.generator.config.separators.join("|")})`),t=new RegExp(`^(${ge})-(${cn})(?:${o.generator.config.separators.filter(s=>s!=="-").join("|")})`),r=new RegExp(`^(${ge})-(\\[.+\\])(?:${o.generator.config.separators.filter(s=>s!=="-").join("|")})`));let i=n.match(e)||n.match(t)||n.match(r);if(i){let s=i[1],l=we(i[2],"[","]")?c.bracket(i[2]):Ee[i[2]]||je[i[2]]||`:${i[2]}`;return{matcher:n.slice(i[0].length),selector:f=>`${f}:${s}(${l})`}}},multiPass:!0,autocomplete:`(${ge})-(${ln}|${cn}):`}}function Oi(e={}){let t=!!e?.attributifyPseudo,r=e?.prefix??"";r=(Array.isArray(r)?r:[r]).filter(Boolean)[0]??"";let n=(o,i)=>mc(o,t?`[${r}${o}=""]`:`.${r}${o}`,i);return[n("group"," "),n("peer","~"),n("parent",">"),n("previous","+"),n("group-aria"," "),n("peer-aria","~"),n("parent-aria",">"),n("previous-aria","+")]}var gc=/(part-\[(.+)\]:)(.+)/,Vi={match(e){let t=e.match(gc);if(t){let r=`part(${t[2]})`;return{matcher:e.slice(t[1].length),selector:n=>`${n}::${r}`}}},multiPass:!0};var Ai={name:"starting",match(e){if(e.startsWith("starting:"))return{matcher:e.slice(9),handle:(t,r)=>r({...t,parent:"@starting-style"})}}};function Tr(e){return[ei,ci,di,pi,mi,vi,Ai,wi(),Si,$i,ki,oi(),...si,ji(),zi(),...Oi(e),Vi,...li(e),...ui,hi,...ii,ai,gi,...fi,...ti,bi]}var Mi={position:["relative","absolute","fixed","sticky","static"],globalKeyword:S};var fn=(e={})=>(e.dark=e.dark??"class",e.attributifyPseudo=e.attributifyPseudo??!1,e.preflight=e.preflight??!0,e.variablePrefix=e.variablePrefix??"un-",{name:"@unocss/preset-mini",theme:Qo,rules:jo,variants:Tr(e),options:e,prefix:e.prefix,postprocess:bc(e.variablePrefix),preflights:e.preflight?xc(qn,e.variablePrefix):[],extractorDefault:e.arbitraryVariants===!1?void 0:Hn,autocomplete:{shorthands:Mi}}),Pi=fn;function bc(e){if(e!=="un-")return t=>{t.entries.forEach(r=>{r[0]=r[0].replace(/^--un-/,`--${e}`),typeof r[1]=="string"&&(r[1]=r[1].replace(/var\(--un-/g,`var(--${e}`))})}}function xc(e,t){return t!=="un-"?e.map(r=>({...r,getCSS:async n=>{let o=await r.getCSS(n);if(o)return o.replace(/--un-/g,`--${t}`)}})):e}var _i=[[/^(?:animate-)?keyframes-(.+)$/,([,e],{theme:t})=>{let r=t.animation?.keyframes?.[e];if(r)return[`@keyframes ${e}${r}`,{animation:e}]},{autocomplete:["animate-keyframes-$animation.keyframes","keyframes-$animation.keyframes"]}],[/^animate-(.+)$/,([,e],{theme:t})=>{let r=t.animation?.keyframes?.[e];if(r){let n=t.animation?.durations?.[e]??"1s",o=t.animation?.timingFns?.[e]??"linear",i=t.animation?.counts?.[e]??1,s=t.animation?.properties?.[e];return[`@keyframes ${e}${r}`,{animation:`${e} ${n} ${o} ${i}`,...s}]}return{animation:c.bracket.cssvar(e)}},{autocomplete:"animate-$animation.keyframes"}],[/^animate-name-(.+)/,([,e])=>({"animation-name":c.bracket.cssvar(e)??e})],[/^animate-duration-(.+)$/,([,e],{theme:t})=>({"animation-duration":t.duration?.[e||"DEFAULT"]??c.bracket.cssvar.time(e)}),{autocomplete:["animate-duration","animate-duration-$duration"]}],[/^animate-delay-(.+)$/,([,e],{theme:t})=>({"animation-delay":t.duration?.[e||"DEFAULT"]??c.bracket.cssvar.time(e)}),{autocomplete:["animate-delay","animate-delay-$duration"]}],[/^animate-ease(?:-(.+))?$/,([,e],{theme:t})=>({"animation-timing-function":t.easing?.[e||"DEFAULT"]??c.bracket.cssvar(e)}),{autocomplete:["animate-ease","animate-ease-$easing"]}],[/^animate-(fill-mode-|fill-|mode-)?(.+)$/,([,e,t])=>["none","forwards","backwards","both",e?S:[]].includes(t)?{"animation-fill-mode":t}:void 0,{autocomplete:["animate-(fill|mode|fill-mode)","animate-(fill|mode|fill-mode)-(none|forwards|backwards|both|inherit|initial|revert|revert-layer|unset)","animate-(none|forwards|backwards|both|inherit|initial|revert|revert-layer|unset)"]}],[/^animate-(direction-)?(.+)$/,([,e,t])=>["normal","reverse","alternate","alternate-reverse",e?S:[]].includes(t)?{"animation-direction":t}:void 0,{autocomplete:["animate-direction","animate-direction-(normal|reverse|alternate|alternate-reverse|inherit|initial|revert|revert-layer|unset)","animate-(normal|reverse|alternate|alternate-reverse|inherit|initial|revert|revert-layer|unset)"]}],[/^animate-(?:iteration-count-|iteration-|count-)(.+)$/,([,e])=>({"animation-iteration-count":c.bracket.cssvar(e)??e.replace(/-/g,",")}),{autocomplete:["animate-(iteration|count|iteration-count)","animate-(iteration|count|iteration-count)-"]}],[/^animate-(play-state-|play-|state-)?(.+)$/,([,e,t])=>["paused","running",e?S:[]].includes(t)?{"animation-play-state":t}:void 0,{autocomplete:["animate-(play|state|play-state)","animate-(play|state|play-state)-(paused|running|inherit|initial|revert|revert-layer|unset)","animate-(paused|running|inherit|initial|revert|revert-layer|unset)"]}],["animate-none",{animation:"none"}],...y("animate","animation")];function Fi(e){return e?M(e,0):"rgb(255 255 255 / 0)"}function yc(e,t,r,n){return t?n!=null?M(t,n):M(t,`var(--un-${e}-opacity, ${te(t)})`):M(r,n)}function un(){return([,e,t],{theme:r})=>{let n=Se(t,r,"backgroundColor");if(!n)return;let{alpha:o,color:i,cssColor:s}=n;if(!i)return;let a=yc(e,s,i,o);switch(e){case"from":return{"--un-gradient-from-position":"0%","--un-gradient-from":`${a} var(--un-gradient-from-position)`,"--un-gradient-to-position":"100%","--un-gradient-to":`${Fi(s)} var(--un-gradient-to-position)`,"--un-gradient-stops":"var(--un-gradient-from), var(--un-gradient-to)"};case"via":return{"--un-gradient-via-position":"50%","--un-gradient-to":Fi(s),"--un-gradient-stops":`var(--un-gradient-from), ${a} var(--un-gradient-via-position), var(--un-gradient-to)`};case"to":return{"--un-gradient-to-position":"100%","--un-gradient-to":`${a} var(--un-gradient-to-position)`}}}}function vc(){return([,e,t])=>({[`--un-gradient-${e}-position`]:`${Number(c.bracket.cssvar.percent(t))*100}%`})}var Li=[[/^bg-gradient-(.+)$/,([,e])=>({"--un-gradient":c.bracket(e)}),{autocomplete:["bg-gradient","bg-gradient-(from|to|via)","bg-gradient-(from|to|via)-$colors","bg-gradient-(from|to|via)-(op|opacity)","bg-gradient-(from|to|via)-(op|opacity)-"]}],[/^(?:bg-gradient-)?stops-(\[.+\])$/,([,e])=>({"--un-gradient-stops":c.bracket(e)})],[/^(?:bg-gradient-)?(from)-(.+)$/,un()],[/^(?:bg-gradient-)?(via)-(.+)$/,un()],[/^(?:bg-gradient-)?(to)-(.+)$/,un()],[/^(?:bg-gradient-)?(from|via|to)-op(?:acity)?-?(.+)$/,([,e,t])=>({[`--un-${e}-opacity`]:c.bracket.percent(t)})],[/^(from|via|to)-([\d.]+)%$/,vc()],[/^bg-gradient-((?:repeating-)?(?:linear|radial|conic))$/,([,e])=>({"background-image":`${e}-gradient(var(--un-gradient, var(--un-gradient-stops, rgb(255 255 255 / 0))))`}),{autocomplete:["bg-gradient-repeating","bg-gradient-(linear|radial|conic)","bg-gradient-repeating-(linear|radial|conic)"]}],[/^bg-gradient-to-([rltb]{1,2})$/,([,e])=>{if(e in U)return{"--un-gradient-shape":`to ${U[e]}`,"--un-gradient":"var(--un-gradient-shape), var(--un-gradient-stops)","background-image":"linear-gradient(var(--un-gradient))"}},{autocomplete:`bg-gradient-to-(${Object.keys(U).filter(e=>e.length<=2&&Array.from(e).every(t=>"rltb".includes(t))).join("|")})`}],[/^(?:bg-gradient-)?shape-(.+)$/,([,e])=>{let t=e in U?`to ${U[e]}`:c.bracket(e);if(t!=null)return{"--un-gradient-shape":t,"--un-gradient":"var(--un-gradient-shape), var(--un-gradient-stops)"}},{autocomplete:["bg-gradient-shape",`bg-gradient-shape-(${Object.keys(U).join("|")})`,`shape-(${Object.keys(U).join("|")})`]}],["bg-none",{"background-image":"none"}],["box-decoration-slice",{"box-decoration-break":"slice"}],["box-decoration-clone",{"box-decoration-break":"clone"}],...y("box-decoration","box-decoration-break"),["bg-auto",{"background-size":"auto"}],["bg-cover",{"background-size":"cover"}],["bg-contain",{"background-size":"contain"}],["bg-fixed",{"background-attachment":"fixed"}],["bg-local",{"background-attachment":"local"}],["bg-scroll",{"background-attachment":"scroll"}],["bg-clip-border",{"-webkit-background-clip":"border-box","background-clip":"border-box"}],["bg-clip-content",{"-webkit-background-clip":"content-box","background-clip":"content-box"}],["bg-clip-padding",{"-webkit-background-clip":"padding-box","background-clip":"padding-box"}],["bg-clip-text",{"-webkit-background-clip":"text","background-clip":"text"}],...S.map(e=>[`bg-clip-${e}`,{"-webkit-background-clip":e,"background-clip":e}]),[/^bg-([-\w]{3,})$/,([,e])=>({"background-position":U[e]})],["bg-repeat",{"background-repeat":"repeat"}],["bg-no-repeat",{"background-repeat":"no-repeat"}],["bg-repeat-x",{"background-repeat":"repeat-x"}],["bg-repeat-y",{"background-repeat":"repeat-y"}],["bg-repeat-round",{"background-repeat":"round"}],["bg-repeat-space",{"background-repeat":"space"}],...y("bg-repeat","background-repeat"),["bg-origin-border",{"background-origin":"border-box"}],["bg-origin-padding",{"background-origin":"padding-box"}],["bg-origin-content",{"background-origin":"content-box"}],...y("bg-origin","background-origin")];var pn={disc:"disc",circle:"circle",square:"square",decimal:"decimal","zero-decimal":"decimal-leading-zero",greek:"lower-greek",roman:"lower-roman","upper-roman":"upper-roman",alpha:"lower-alpha","upper-alpha":"upper-alpha",latin:"lower-latin","upper-latin":"upper-latin"},Ui=[[/^list-(.+?)(?:-(outside|inside))?$/,([,e,t])=>{let r=pn[e];if(r)return t?{"list-style-position":t,"list-style-type":r}:{"list-style-type":r}},{autocomplete:[`list-(${Object.keys(pn).join("|")})`,`list-(${Object.keys(pn).join("|")})-(outside|inside)`]}],["list-outside",{"list-style-position":"outside"}],["list-inside",{"list-style-position":"inside"}],["list-none",{"list-style-type":"none"}],[/^list-image-(.+)$/,([,e])=>{if(/^\[url\(.+\)\]$/.test(e))return{"list-style-image":c.bracket(e)}}],["list-image-none",{"list-style-image":"none"}],...y("list","list-style-type")],Wi=[[/^accent-(.+)$/,j("accent-color","accent","accentColor"),{autocomplete:"accent-$colors"}],[/^accent-op(?:acity)?-?(.+)$/,([,e])=>({"--un-accent-opacity":c.bracket.percent(e)}),{autocomplete:["accent-(op|opacity)","accent-(op|opacity)-"]}]],Ni=[[/^caret-(.+)$/,j("caret-color","caret","textColor"),{autocomplete:"caret-$colors"}],[/^caret-op(?:acity)?-?(.+)$/,([,e])=>({"--un-caret-opacity":c.bracket.percent(e)}),{autocomplete:["caret-(op|opacity)","caret-(op|opacity)-"]}]],Di=[["image-render-auto",{"image-rendering":"auto"}],["image-render-edge",{"image-rendering":"crisp-edges"}],["image-render-pixel",[["-ms-interpolation-mode","nearest-neighbor"],["image-rendering","-webkit-optimize-contrast"],["image-rendering","-moz-crisp-edges"],["image-rendering","-o-pixelated"],["image-rendering","pixelated"]]]],Bi=[["overscroll-auto",{"overscroll-behavior":"auto"}],["overscroll-contain",{"overscroll-behavior":"contain"}],["overscroll-none",{"overscroll-behavior":"none"}],...y("overscroll","overscroll-behavior"),["overscroll-x-auto",{"overscroll-behavior-x":"auto"}],["overscroll-x-contain",{"overscroll-behavior-x":"contain"}],["overscroll-x-none",{"overscroll-behavior-x":"none"}],...y("overscroll-x","overscroll-behavior-x"),["overscroll-y-auto",{"overscroll-behavior-y":"auto"}],["overscroll-y-contain",{"overscroll-behavior-y":"contain"}],["overscroll-y-none",{"overscroll-behavior-y":"none"}],...y("overscroll-y","overscroll-behavior-y")],Ii=[["scroll-auto",{"scroll-behavior":"auto"}],["scroll-smooth",{"scroll-behavior":"smooth"}],...y("scroll","scroll-behavior")];var Ki=[[/^columns-(.+)$/,([,e])=>({columns:c.bracket.global.number.auto.numberWithUnit(e)}),{autocomplete:"columns-"}],["break-before-auto",{"break-before":"auto"}],["break-before-avoid",{"break-before":"avoid"}],["break-before-all",{"break-before":"all"}],["break-before-avoid-page",{"break-before":"avoid-page"}],["break-before-page",{"break-before":"page"}],["break-before-left",{"break-before":"left"}],["break-before-right",{"break-before":"right"}],["break-before-column",{"break-before":"column"}],...y("break-before"),["break-inside-auto",{"break-inside":"auto"}],["break-inside-avoid",{"break-inside":"avoid"}],["break-inside-avoid-page",{"break-inside":"avoid-page"}],["break-inside-avoid-column",{"break-inside":"avoid-column"}],...y("break-inside"),["break-after-auto",{"break-after":"auto"}],["break-after-avoid",{"break-after":"avoid"}],["break-after-all",{"break-after":"all"}],["break-after-avoid-page",{"break-after":"avoid-page"}],["break-after-page",{"break-after":"page"}],["break-after-left",{"break-after":"left"}],["break-after-right",{"break-after":"right"}],["break-after-column",{"break-after":"column"}],...y("break-after")];var wc=/@media \(min-width: (.+)\)/,Gi=[[/^__container$/,(e,t)=>{let{theme:r,variantHandlers:n}=t,o=r.container?.padding,i;V(o)?i=o:i=o?.DEFAULT;let s=r.container?.maxWidth,a;for(let f of n){let u=f.handle?.({},p=>p)?.parent;if(V(u)){let p=u.match(wc)?.[1];if(p){let m=(de(t)??[]).find(g=>g.size===p)?.point;s?m&&(a=s?.[m]):a=p,m&&!V(o)&&(i=o?.[m]??i)}}}let l={"max-width":a};return n.length||(l.width="100%"),r.container?.center&&(l["margin-left"]="auto",l["margin-right"]="auto"),o&&(l["padding-left"]=i,l["padding-right"]=i),l},{internal:!0}]],Hi=[[/^(?:(\w+)[:-])?container$/,([,e],t)=>{let r=(de(t)??[]).map(o=>o.point);if(e){if(!r.includes(e))return;r=r.slice(r.indexOf(e))}let n=r.map(o=>`${o}:__container`);return e||n.unshift("__container"),n}]];var qi={"--un-blur":E,"--un-brightness":E,"--un-contrast":E,"--un-drop-shadow":E,"--un-grayscale":E,"--un-hue-rotate":E,"--un-invert":E,"--un-saturate":E,"--un-sepia":E},Er="var(--un-blur) var(--un-brightness) var(--un-contrast) var(--un-drop-shadow) var(--un-grayscale) var(--un-hue-rotate) var(--un-invert) var(--un-saturate) var(--un-sepia)",Yi={"--un-backdrop-blur":E,"--un-backdrop-brightness":E,"--un-backdrop-contrast":E,"--un-backdrop-grayscale":E,"--un-backdrop-hue-rotate":E,"--un-backdrop-invert":E,"--un-backdrop-opacity":E,"--un-backdrop-saturate":E,"--un-backdrop-sepia":E},jr="var(--un-backdrop-blur) var(--un-backdrop-brightness) var(--un-backdrop-contrast) var(--un-backdrop-grayscale) var(--un-backdrop-hue-rotate) var(--un-backdrop-invert) var(--un-backdrop-opacity) var(--un-backdrop-saturate) var(--un-backdrop-sepia)";function dn(e){let t=c.bracket.cssvar(e||"");if(t!=null||(t=e?c.percent(e):"1",t!=null&&Number.parseFloat(t)<=1))return t}function re(e,t){return([,r,n],{theme:o})=>{let i=t(n,o)??(n==="none"?"0":"");if(i!=="")return r?{[`--un-${r}${e}`]:`${e}(${i})`,"-webkit-backdrop-filter":jr,"backdrop-filter":jr}:{[`--un-${e}`]:`${e}(${i})`,filter:Er}}}function $c([,e],{theme:t}){let r=t.dropShadow?.[e||"DEFAULT"];if(r!=null)return{"--un-drop-shadow":`drop-shadow(${Ce(r,"--un-drop-shadow-color").join(") drop-shadow(")})`,filter:Er};if(r=c.bracket.cssvar(e),r!=null)return{"--un-drop-shadow":`drop-shadow(${r})`,filter:Er}}var Xi=[[/^(?:(backdrop-)|filter-)?blur(?:-(.+))?$/,re("blur",(e,t)=>t.blur?.[e||"DEFAULT"]||c.bracket.cssvar.px(e)),{autocomplete:["(backdrop|filter)-blur-$blur","blur-$blur","filter-blur"]}],[/^(?:(backdrop-)|filter-)?brightness-(.+)$/,re("brightness",e=>c.bracket.cssvar.percent(e)),{autocomplete:["(backdrop|filter)-brightness-","brightness-"]}],[/^(?:(backdrop-)|filter-)?contrast-(.+)$/,re("contrast",e=>c.bracket.cssvar.percent(e)),{autocomplete:["(backdrop|filter)-contrast-","contrast-"]}],[/^(?:filter-)?drop-shadow(?:-(.+))?$/,$c,{autocomplete:["filter-drop","filter-drop-shadow","filter-drop-shadow-color","drop-shadow","drop-shadow-color","filter-drop-shadow-$dropShadow","drop-shadow-$dropShadow","filter-drop-shadow-color-$colors","drop-shadow-color-$colors","filter-drop-shadow-color-(op|opacity)","drop-shadow-color-(op|opacity)","filter-drop-shadow-color-(op|opacity)-","drop-shadow-color-(op|opacity)-"]}],[/^(?:filter-)?drop-shadow-color-(.+)$/,j("--un-drop-shadow-color","drop-shadow","shadowColor")],[/^(?:filter-)?drop-shadow-color-op(?:acity)?-?(.+)$/,([,e])=>({"--un-drop-shadow-opacity":c.bracket.percent(e)})],[/^(?:(backdrop-)|filter-)?grayscale(?:-(.+))?$/,re("grayscale",dn),{autocomplete:["(backdrop|filter)-grayscale","(backdrop|filter)-grayscale-","grayscale-"]}],[/^(?:(backdrop-)|filter-)?hue-rotate-(.+)$/,re("hue-rotate",e=>c.bracket.cssvar.degree(e))],[/^(?:(backdrop-)|filter-)?invert(?:-(.+))?$/,re("invert",dn),{autocomplete:["(backdrop|filter)-invert","(backdrop|filter)-invert-","invert-"]}],[/^(backdrop-)op(?:acity)?-(.+)$/,re("opacity",e=>c.bracket.cssvar.percent(e)),{autocomplete:["backdrop-(op|opacity)","backdrop-(op|opacity)-"]}],[/^(?:(backdrop-)|filter-)?saturate-(.+)$/,re("saturate",e=>c.bracket.cssvar.percent(e)),{autocomplete:["(backdrop|filter)-saturate","(backdrop|filter)-saturate-","saturate-"]}],[/^(?:(backdrop-)|filter-)?sepia(?:-(.+))?$/,re("sepia",dn),{autocomplete:["(backdrop|filter)-sepia","(backdrop|filter)-sepia-","sepia-"]}],["filter",{filter:Er}],["backdrop-filter",{"-webkit-backdrop-filter":jr,"backdrop-filter":jr}],["filter-none",{filter:"none"}],["backdrop-filter-none",{"-webkit-backdrop-filter":"none","backdrop-filter":"none"}],...S.map(e=>[`filter-${e}`,{filter:e}]),...S.map(e=>[`backdrop-filter-${e}`,{"-webkit-backdrop-filter":e,"backdrop-filter":e}])];var Ji=[[/^space-([xy])-(.+)$/,Zi,{autocomplete:["space-(x|y|block|inline)","space-(x|y|block|inline)-reverse","space-(x|y|block|inline)-$spacing"]}],[/^space-([xy])-reverse$/,([,e])=>({[`--un-space-${e}-reverse`]:1})],[/^space-(block|inline)-(.+)$/,Zi],[/^space-(block|inline)-reverse$/,([,e])=>({[`--un-space-${e}-reverse`]:1})]];function Zi([,e,t],{theme:r}){let n=r.spacing?.[t||"DEFAULT"]??c.bracket.cssvar.auto.fraction.rem(t||"1");if(n!=null){n==="0"&&(n="0px");let o=W[e].map(i=>{let s=`margin${i}`,a=i.endsWith("right")||i.endsWith("bottom")?`calc(${n} * var(--un-space-${e}-reverse))`:`calc(${n} * calc(1 - var(--un-space-${e}-reverse)))`;return[s,a]});if(o)return[[`--un-space-${e}-reverse`,0],...o]}}var Qi=[["uppercase",{"text-transform":"uppercase"}],["lowercase",{"text-transform":"lowercase"}],["capitalize",{"text-transform":"capitalize"}],["normal-case",{"text-transform":"none"}]],es=[...["manual","auto","none",...S].map(e=>[`hyphens-${e}`,{"-webkit-hyphens":e,"-ms-hyphens":e,hyphens:e}])],ts=[["write-vertical-right",{"writing-mode":"vertical-rl"}],["write-vertical-left",{"writing-mode":"vertical-lr"}],["write-normal",{"writing-mode":"horizontal-tb"}],...y("write","writing-mode")],rs=[["write-orient-mixed",{"text-orientation":"mixed"}],["write-orient-sideways",{"text-orientation":"sideways"}],["write-orient-upright",{"text-orientation":"upright"}],...y("write-orient","text-orientation")],ns=[["sr-only",{position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0,0,0,0)","white-space":"nowrap","border-width":0}],["not-sr-only",{position:"static",width:"auto",height:"auto",padding:"0",margin:"0",overflow:"visible",clip:"auto","white-space":"normal"}]],os=[["isolate",{isolation:"isolate"}],["isolate-auto",{isolation:"auto"}],["isolation-auto",{isolation:"auto"}]],is=[["object-cover",{"object-fit":"cover"}],["object-contain",{"object-fit":"contain"}],["object-fill",{"object-fit":"fill"}],["object-scale-down",{"object-fit":"scale-down"}],["object-none",{"object-fit":"none"}],[/^object-(.+)$/,([,e])=>{if(U[e])return{"object-position":U[e]};if(c.bracketOfPosition(e)!=null)return{"object-position":c.bracketOfPosition(e).split(" ").map(t=>c.position.fraction.auto.px.cssvar(t)??t).join(" ")}},{autocomplete:`object-(${Object.keys(U).join("|")})`}]],ss=[["bg-blend-multiply",{"background-blend-mode":"multiply"}],["bg-blend-screen",{"background-blend-mode":"screen"}],["bg-blend-overlay",{"background-blend-mode":"overlay"}],["bg-blend-darken",{"background-blend-mode":"darken"}],["bg-blend-lighten",{"background-blend-mode":"lighten"}],["bg-blend-color-dodge",{"background-blend-mode":"color-dodge"}],["bg-blend-color-burn",{"background-blend-mode":"color-burn"}],["bg-blend-hard-light",{"background-blend-mode":"hard-light"}],["bg-blend-soft-light",{"background-blend-mode":"soft-light"}],["bg-blend-difference",{"background-blend-mode":"difference"}],["bg-blend-exclusion",{"background-blend-mode":"exclusion"}],["bg-blend-hue",{"background-blend-mode":"hue"}],["bg-blend-saturation",{"background-blend-mode":"saturation"}],["bg-blend-color",{"background-blend-mode":"color"}],["bg-blend-luminosity",{"background-blend-mode":"luminosity"}],["bg-blend-normal",{"background-blend-mode":"normal"}],...y("bg-blend","background-blend")],as=[["mix-blend-multiply",{"mix-blend-mode":"multiply"}],["mix-blend-screen",{"mix-blend-mode":"screen"}],["mix-blend-overlay",{"mix-blend-mode":"overlay"}],["mix-blend-darken",{"mix-blend-mode":"darken"}],["mix-blend-lighten",{"mix-blend-mode":"lighten"}],["mix-blend-color-dodge",{"mix-blend-mode":"color-dodge"}],["mix-blend-color-burn",{"mix-blend-mode":"color-burn"}],["mix-blend-hard-light",{"mix-blend-mode":"hard-light"}],["mix-blend-soft-light",{"mix-blend-mode":"soft-light"}],["mix-blend-difference",{"mix-blend-mode":"difference"}],["mix-blend-exclusion",{"mix-blend-mode":"exclusion"}],["mix-blend-hue",{"mix-blend-mode":"hue"}],["mix-blend-saturation",{"mix-blend-mode":"saturation"}],["mix-blend-color",{"mix-blend-mode":"color"}],["mix-blend-luminosity",{"mix-blend-mode":"luminosity"}],["mix-blend-plus-lighter",{"mix-blend-mode":"plus-lighter"}],["mix-blend-normal",{"mix-blend-mode":"normal"}],...y("mix-blend")],ls=[["min-h-dvh",{"min-height":"100dvh"}],["min-h-svh",{"min-height":"100svh"}],["min-h-lvh",{"min-height":"100lvh"}],["h-dvh",{height:"100dvh"}],["h-svh",{height:"100svh"}],["h-lvh",{height:"100lvh"}],["max-h-dvh",{"max-height":"100dvh"}],["max-h-svh",{"max-height":"100svh"}],["max-h-lvh",{"max-height":"100lvh"}]];var fs={"--un-border-spacing-x":0,"--un-border-spacing-y":0},cs="var(--un-border-spacing-x) var(--un-border-spacing-y)",us=[["inline-table",{display:"inline-table"}],["table",{display:"table"}],["table-caption",{display:"table-caption"}],["table-cell",{display:"table-cell"}],["table-column",{display:"table-column"}],["table-column-group",{display:"table-column-group"}],["table-footer-group",{display:"table-footer-group"}],["table-header-group",{display:"table-header-group"}],["table-row",{display:"table-row"}],["table-row-group",{display:"table-row-group"}],["border-collapse",{"border-collapse":"collapse"}],["border-separate",{"border-collapse":"separate"}],[/^border-spacing-(.+)$/,([,e],{theme:t})=>{let r=t.spacing?.[e]??c.bracket.cssvar.global.auto.fraction.rem(e);if(r!=null)return{"--un-border-spacing-x":r,"--un-border-spacing-y":r,"border-spacing":cs}},{autocomplete:["border-spacing","border-spacing-$spacing"]}],[/^border-spacing-([xy])-(.+)$/,([,e,t],{theme:r})=>{let n=r.spacing?.[t]??c.bracket.cssvar.global.auto.fraction.rem(t);if(n!=null)return{[`--un-border-spacing-${e}`]:n,"border-spacing":cs}},{autocomplete:["border-spacing-(x|y)","border-spacing-(x|y)-$spacing"]}],["caption-top",{"caption-side":"top"}],["caption-bottom",{"caption-side":"bottom"}],["table-auto",{"table-layout":"auto"}],["table-fixed",{"table-layout":"fixed"}],["table-empty-cells-visible",{"empty-cells":"show"}],["table-empty-cells-hidden",{"empty-cells":"hide"}]];var kc={"bg-blend":"background-blend-mode","bg-clip":"-webkit-background-clip","bg-gradient":"linear-gradient","bg-image":"background-image","bg-origin":"background-origin","bg-position":"background-position","bg-repeat":"background-repeat","bg-size":"background-size","mix-blend":"mix-blend-mode",object:"object-fit","object-position":"object-position",write:"writing-mode","write-orient":"text-orientation"},ps=[[/^(.+?)-(\$.+)$/,([,e,t])=>{let r=kc[e];if(r)return{[r]:c.cssvar(t)}}]];var ds=[[/^divide-?([xy])$/,zr,{autocomplete:["divide-(x|y|block|inline)","divide-(x|y|block|inline)-reverse","divide-(x|y|block|inline)-$lineWidth"]}],[/^divide-?([xy])-?(.+)$/,zr],[/^divide-?([xy])-reverse$/,([,e])=>({[`--un-divide-${e}-reverse`]:1})],[/^divide-(block|inline)$/,zr],[/^divide-(block|inline)-(.+)$/,zr],[/^divide-(block|inline)-reverse$/,([,e])=>({[`--un-divide-${e}-reverse`]:1})],[/^divide-(.+)$/,j("border-color","divide","borderColor"),{autocomplete:"divide-$colors"}],[/^divide-op(?:acity)?-?(.+)$/,([,e])=>({"--un-divide-opacity":c.bracket.percent(e)}),{autocomplete:["divide-(op|opacity)","divide-(op|opacity)-"]}],...me.map(e=>[`divide-${e}`,{"border-style":e}])];function zr([,e,t],{theme:r}){let n=r.lineWidth?.[t||"DEFAULT"]??c.bracket.cssvar.px(t||"1");if(n!=null){n==="0"&&(n="0px");let o=W[e].map(i=>{let s=`border${i}-width`,a=i.endsWith("right")||i.endsWith("bottom")?`calc(${n} * var(--un-divide-${e}-reverse))`:`calc(${n} * calc(1 - var(--un-divide-${e}-reverse)))`;return[s,a]});if(o)return[[`--un-divide-${e}-reverse`,0],...o]}}var ms=[[/^line-clamp-(\d+)$/,([,e])=>({overflow:"hidden",display:"-webkit-box","-webkit-box-orient":"vertical","-webkit-line-clamp":e,"line-clamp":e}),{autocomplete:["line-clamp","line-clamp-"]}],...["none",...S].map(e=>[`line-clamp-${e}`,{overflow:"visible",display:"block","-webkit-box-orient":"horizontal","-webkit-line-clamp":e,"line-clamp":e}])];var hs={"--un-ordinal":E,"--un-slashed-zero":E,"--un-numeric-figure":E,"--un-numeric-spacing":E,"--un-numeric-fraction":E};function fe(e){return{...e,"font-variant-numeric":"var(--un-ordinal) var(--un-slashed-zero) var(--un-numeric-figure) var(--un-numeric-spacing) var(--un-numeric-fraction)"}}var gs=[[/^ordinal$/,()=>fe({"--un-ordinal":"ordinal"}),{autocomplete:"ordinal"}],[/^slashed-zero$/,()=>fe({"--un-slashed-zero":"slashed-zero"}),{autocomplete:"slashed-zero"}],[/^lining-nums$/,()=>fe({"--un-numeric-figure":"lining-nums"}),{autocomplete:"lining-nums"}],[/^oldstyle-nums$/,()=>fe({"--un-numeric-figure":"oldstyle-nums"}),{autocomplete:"oldstyle-nums"}],[/^proportional-nums$/,()=>fe({"--un-numeric-spacing":"proportional-nums"}),{autocomplete:"proportional-nums"}],[/^tabular-nums$/,()=>fe({"--un-numeric-spacing":"tabular-nums"}),{autocomplete:"tabular-nums"}],[/^diagonal-fractions$/,()=>fe({"--un-numeric-fraction":"diagonal-fractions"}),{autocomplete:"diagonal-fractions"}],[/^stacked-fractions$/,()=>fe({"--un-numeric-fraction":"stacked-fractions"}),{autocomplete:"stacked-fractions"}],["normal-nums",{"font-variant-numeric":"normal"}]];var bs={"--un-pan-x":E,"--un-pan-y":E,"--un-pinch-zoom":E},mn="var(--un-pan-x) var(--un-pan-y) var(--un-pinch-zoom)",xs=[[/^touch-pan-(x|left|right)$/,([,e])=>({"--un-pan-x":`pan-${e}`,"touch-action":mn}),{autocomplete:["touch-pan","touch-pan-(x|left|right|y|up|down)"]}],[/^touch-pan-(y|up|down)$/,([,e])=>({"--un-pan-y":`pan-${e}`,"touch-action":mn})],["touch-pinch-zoom",{"--un-pinch-zoom":"pinch-zoom","touch-action":mn}],["touch-auto",{"touch-action":"auto"}],["touch-manipulation",{"touch-action":"manipulation"}],["touch-none",{"touch-action":"none"}],...y("touch","touch-action")];var ys={"--un-scroll-snap-strictness":"proximity"},vs=[[/^snap-(x|y)$/,([,e])=>({"scroll-snap-type":`${e} var(--un-scroll-snap-strictness)`}),{autocomplete:"snap-(x|y|both)"}],[/^snap-both$/,()=>({"scroll-snap-type":"both var(--un-scroll-snap-strictness)"})],["snap-mandatory",{"--un-scroll-snap-strictness":"mandatory"}],["snap-proximity",{"--un-scroll-snap-strictness":"proximity"}],["snap-none",{"scroll-snap-type":"none"}],["snap-start",{"scroll-snap-align":"start"}],["snap-end",{"scroll-snap-align":"end"}],["snap-center",{"scroll-snap-align":"center"}],["snap-align-none",{"scroll-snap-align":"none"}],["snap-normal",{"scroll-snap-stop":"normal"}],["snap-always",{"scroll-snap-stop":"always"}],[/^scroll-ma?()-?(.+)$/,_("scroll-margin"),{autocomplete:["scroll-(m|p|ma|pa|block|inline)","scroll-(m|p|ma|pa|block|inline)-$spacing","scroll-(m|p|ma|pa|block|inline)-(x|y|r|l|t|b|bs|be|is|ie)","scroll-(m|p|ma|pa|block|inline)-(x|y|r|l|t|b|bs|be|is|ie)-$spacing"]}],[/^scroll-m-?([xy])-?(.+)$/,_("scroll-margin")],[/^scroll-m-?([rltb])-?(.+)$/,_("scroll-margin")],[/^scroll-m-(block|inline)-(.+)$/,_("scroll-margin")],[/^scroll-m-?([bi][se])-?(.+)$/,_("scroll-margin")],[/^scroll-pa?()-?(.+)$/,_("scroll-padding")],[/^scroll-p-?([xy])-?(.+)$/,_("scroll-padding")],[/^scroll-p-?([rltb])-?(.+)$/,_("scroll-padding")],[/^scroll-p-(block|inline)-(.+)$/,_("scroll-padding")],[/^scroll-p-?([bi][se])-?(.+)$/,_("scroll-padding")]];var ws=[[/^\$ placeholder-(.+)$/,j("color","placeholder","accentColor"),{autocomplete:"placeholder-$colors"}],[/^\$ placeholder-op(?:acity)?-?(.+)$/,([,e])=>({"--un-placeholder-opacity":c.bracket.percent(e)}),{autocomplete:["placeholder-(op|opacity)","placeholder-(op|opacity)-"]}]];var $s=[[/^view-transition-([\w-]+)$/,([,e])=>({"view-transition-name":e})]];var ks=[wr,ps,$r,Gi,Xt,ns,Zt,qt,Wt,Bt,ms,os,Kt,Nt,Ft,It,br,Gt,Ht,hr,mr,zt,us,vr,_i,Yt,xs,Qt,Jt,vs,Ui,wt,Ki,Ke,Ie,Be,_t,Dt,Ji,ds,Ut,Bi,Ii,ir,er,nr,kt,Ct,Li,Rt,Sr,is,gr,bt,At,or,gt,Ot,sr,Qi,ar,gs,Et,lr,Vt,Mt,Pt,es,ts,rs,Ni,Wi,St,ss,as,pr,vt,fr,Di,Xi,jt,$t,tr,rr,ws,Tt,$s,ls,kr].flat(1);var Ss=[...Hi];var hn={inherit:"inherit",current:"currentColor",transparent:"transparent",black:"#000",white:"#fff",rose:{50:"#fff1f2",100:"#ffe4e6",200:"#fecdd3",300:"#fda4af",400:"#fb7185",500:"#f43f5e",600:"#e11d48",700:"#be123c",800:"#9f1239",900:"#881337",950:"#4c0519"},pink:{50:"#fdf2f8",100:"#fce7f3",200:"#fbcfe8",300:"#f9a8d4",400:"#f472b6",500:"#ec4899",600:"#db2777",700:"#be185d",800:"#9d174d",900:"#831843",950:"#500724"},fuchsia:{50:"#fdf4ff",100:"#fae8ff",200:"#f5d0fe",300:"#f0abfc",400:"#e879f9",500:"#d946ef",600:"#c026d3",700:"#a21caf",800:"#86198f",900:"#701a75",950:"#4a044e"},purple:{50:"#faf5ff",100:"#f3e8ff",200:"#e9d5ff",300:"#d8b4fe",400:"#c084fc",500:"#a855f7",600:"#9333ea",700:"#7e22ce",800:"#6b21a8",900:"#581c87",950:"#3b0764"},violet:{50:"#f5f3ff",100:"#ede9fe",200:"#ddd6fe",300:"#c4b5fd",400:"#a78bfa",500:"#8b5cf6",600:"#7c3aed",700:"#6d28d9",800:"#5b21b6",900:"#4c1d95",950:"#2e1065"},indigo:{50:"#eef2ff",100:"#e0e7ff",200:"#c7d2fe",300:"#a5b4fc",400:"#818cf8",500:"#6366f1",600:"#4f46e5",700:"#4338ca",800:"#3730a3",900:"#312e81",950:"#1e1b4b"},blue:{50:"#eff6ff",100:"#dbeafe",200:"#bfdbfe",300:"#93c5fd",400:"#60a5fa",500:"#3b82f6",600:"#2563eb",700:"#1d4ed8",800:"#1e40af",900:"#1e3a8a",950:"#172554"},sky:{50:"#f0f9ff",100:"#e0f2fe",200:"#bae6fd",300:"#7dd3fc",400:"#38bdf8",500:"#0ea5e9",600:"#0284c7",700:"#0369a1",800:"#075985",900:"#0c4a6e",950:"#082f49"},cyan:{50:"#ecfeff",100:"#cffafe",200:"#a5f3fc",300:"#67e8f9",400:"#22d3ee",500:"#06b6d4",600:"#0891b2",700:"#0e7490",800:"#155e75",900:"#164e63",950:"#083344"},teal:{50:"#f0fdfa",100:"#ccfbf1",200:"#99f6e4",300:"#5eead4",400:"#2dd4bf",500:"#14b8a6",600:"#0d9488",700:"#0f766e",800:"#115e59",900:"#134e4a",950:"#042f2e"},emerald:{50:"#ecfdf5",100:"#d1fae5",200:"#a7f3d0",300:"#6ee7b7",400:"#34d399",500:"#10b981",600:"#059669",700:"#047857",800:"#065f46",900:"#064e3b",950:"#022c22"},green:{50:"#f0fdf4",100:"#dcfce7",200:"#bbf7d0",300:"#86efac",400:"#4ade80",500:"#22c55e",600:"#16a34a",700:"#15803d",800:"#166534",900:"#14532d",950:"#052e16"},lime:{50:"#f7fee7",100:"#ecfccb",200:"#d9f99d",300:"#bef264",400:"#a3e635",500:"#84cc16",600:"#65a30d",700:"#4d7c0f",800:"#3f6212",900:"#365314",950:"#1a2e05"},yellow:{50:"#fefce8",100:"#fef9c3",200:"#fef08a",300:"#fde047",400:"#facc15",500:"#eab308",600:"#ca8a04",700:"#a16207",800:"#854d0e",900:"#713f12",950:"#422006"},amber:{50:"#fffbeb",100:"#fef3c7",200:"#fde68a",300:"#fcd34d",400:"#fbbf24",500:"#f59e0b",600:"#d97706",700:"#b45309",800:"#92400e",900:"#78350f",950:"#451a03"},orange:{50:"#fff7ed",100:"#ffedd5",200:"#fed7aa",300:"#fdba74",400:"#fb923c",500:"#f97316",600:"#ea580c",700:"#c2410c",800:"#9a3412",900:"#7c2d12",950:"#431407"},red:{50:"#fef2f2",100:"#fee2e2",200:"#fecaca",300:"#fca5a5",400:"#f87171",500:"#ef4444",600:"#dc2626",700:"#b91c1c",800:"#991b1b",900:"#7f1d1d",950:"#450a0a"},gray:{50:"#f9fafb",100:"#f3f4f6",200:"#e5e7eb",300:"#d1d5db",400:"#9ca3af",500:"#6b7280",600:"#4b5563",700:"#374151",800:"#1f2937",900:"#111827",950:"#030712"},slate:{50:"#f8fafc",100:"#f1f5f9",200:"#e2e8f0",300:"#cbd5e1",400:"#94a3b8",500:"#64748b",600:"#475569",700:"#334155",800:"#1e293b",900:"#0f172a",950:"#020617"},zinc:{50:"#fafafa",100:"#f4f4f5",200:"#e4e4e7",300:"#d4d4d8",400:"#a1a1aa",500:"#71717a",600:"#52525b",700:"#3f3f46",800:"#27272a",900:"#18181b",950:"#09090b"},neutral:{50:"#fafafa",100:"#f5f5f5",200:"#e5e5e5",300:"#d4d4d4",400:"#a3a3a3",500:"#737373",600:"#525252",700:"#404040",800:"#262626",900:"#171717",950:"#0a0a0a"},stone:{50:"#fafaf9",100:"#f5f5f4",200:"#e7e5e4",300:"#d6d3d1",400:"#a8a29e",500:"#78716c",600:"#57534e",700:"#44403c",800:"#292524",900:"#1c1917",950:"#0c0a09"},light:{50:"#fdfdfd",100:"#fcfcfc",200:"#fafafa",300:"#f8f9fa",400:"#f6f6f6",500:"#f2f2f2",600:"#f1f3f5",700:"#e9ecef",800:"#dee2e6",900:"#dde1e3",950:"#d8dcdf"},dark:{50:"#4a4a4a",100:"#3c3c3c",200:"#323232",300:"#2d2d2d",400:"#222222",500:"#1f1f1f",600:"#1c1c1e",700:"#1b1b1b",800:"#181818",900:"#0f0f0f",950:"#080808"},get lightblue(){return this.sky},get lightBlue(){return this.sky},get warmgray(){return this.stone},get warmGray(){return this.stone},get truegray(){return this.neutral},get trueGray(){return this.neutral},get coolgray(){return this.gray},get coolGray(){return this.gray},get bluegray(){return this.slate},get blueGray(){return this.slate}};Object.values(hn).forEach(e=>{typeof e!="string"&&e!==void 0&&(e.DEFAULT=e.DEFAULT||e[400],Object.keys(e).forEach(t=>{let r=+t/100;r===Math.round(r)&&(e[r]=e[t])}))});var Sc={l:["-left"],r:["-right"],t:["-top"],b:["-bottom"],s:["-inline-start"],e:["-inline-end"],x:["-left","-right"],y:["-top","-bottom"],"":[""],bs:["-block-start"],be:["-block-end"],is:["-inline-start"],ie:["-inline-end"],block:["-block-start","-block-end"],inline:["-inline-start","-inline-end"]},l0={...Sc,s:["-inset-inline-start"],start:["-inset-inline-start"],e:["-inset-inline-end"],end:["-inset-inline-end"],bs:["-inset-block-start"],be:["-inset-block-end"],is:["-inset-inline-start"],ie:["-inset-inline-end"],block:["-inset-block-start","-inset-block-end"],inline:["-inset-inline-start","-inset-inline-end"]};var Cc={x:["-x"],y:["-y"],z:["-z"],"":["-x","-y"]},Rc=["x","y","z"],Cs=["top","top center","top left","top right","bottom","bottom center","bottom left","bottom right","left","left center","left top","left bottom","right","right center","right top","right bottom","center","center top","center bottom","center left","center right","center center"],Xe=Object.assign({},...Cs.map(e=>({[e.replace(/ /,"-")]:e})),...Cs.map(e=>({[e.replace(/\b(\w)\w+/g,"$1").replace(/ /,"")]:e}))),gn=["inherit","initial","revert","revert-layer","unset"],Tc=/^(calc|clamp|min|max)\s*\((.+)\)(.*)/;var bn=/^(-?\d*(?:\.\d+)?)(px|pt|pc|%|r?(?:em|ex|lh|cap|ch|ic)|(?:[sld]?v|cq)(?:[whib]|min|max)|in|cm|mm|rpx)?$/i,Ts=/^(-?\d*(?:\.\d+)?)$/,Es=/^(px|[sld]?v[wh])$/i,js={px:1,vw:100,vh:100,svw:100,svh:100,dvw:100,dvh:100,lvh:100,lvw:100},zs=/^\[(color|length|size|position|quoted|string):/i,Ec=/,(?![^()]*\))/g,jc=["color","border-color","background-color","outline-color","text-decoration-color","flex-grow","flex","flex-shrink","caret-color","font","gap","opacity","visibility","z-index","font-weight","zoom","text-shadow","transform","box-shadow","border","background-position","left","right","top","bottom","object-position","max-height","min-height","max-width","min-width","height","width","border-width","margin","padding","outline-width","outline-offset","font-size","line-height","text-indent","vertical-align","border-spacing","letter-spacing","word-spacing","stroke","filter","backdrop-filter","fill","mask","mask-size","mask-border","clip-path","clip","border-radius"];function Y(e){return+e.toFixed(10)}function zc(e){let t=e.match(bn);if(!t)return;let[,r,n]=t,o=Number.parseFloat(r);if(n&&!Number.isNaN(o))return`${Y(o)}${n}`}function Oc(e){if(e==="auto"||e==="a")return"auto"}function Vc(e){if(!e)return;if(Es.test(e))return`${js[e]}${e}`;let t=e.match(bn);if(!t)return;let[,r,n]=t,o=Number.parseFloat(r);if(!Number.isNaN(o))return o===0?"0":n?`${Y(o)}${n}`:`${Y(o/4)}rem`}function Ac(e){if(Es.test(e))return`${js[e]}${e}`;let t=e.match(bn);if(!t)return;let[,r,n]=t,o=Number.parseFloat(r);if(!Number.isNaN(o))return n?`${Y(o)}${n}`:`${Y(o)}px`}function Mc(e){if(!Ts.test(e))return;let t=Number.parseFloat(e);if(!Number.isNaN(t))return Y(t)}function Pc(e){if(e.endsWith("%")&&(e=e.slice(0,-1)),!Ts.test(e))return;let t=Number.parseFloat(e);if(!Number.isNaN(t))return`${Y(t/100)}`}function _c(e){if(!e)return;if(e==="full")return"100%";let[t,r]=e.split("/"),n=Number.parseFloat(t)/Number.parseFloat(r);if(!Number.isNaN(n))return n===0?"0":`${Y(n*100)}%`}function Vr(e,t){if(e&&e.startsWith("[")&&e.endsWith("]")){let r,n,o=e.match(zs);if(o?(t||(n=o[1]),r=e.slice(o[0].length,-1)):r=e.slice(1,-1),!r||r==='=""')return;r.startsWith("--")&&(r=`var(${r})`);let i=0;for(let s of r)if(s==="[")i+=1;else if(s==="]"&&(i-=1,i<0))return;if(i)return;switch(n){case"string":return r.replace(/(^|[^\\])_/g,"$1 ").replace(/\\_/g,"_");case"quoted":return r.replace(/(^|[^\\])_/g,"$1 ").replace(/\\_/g,"_").replace(/(["\\])/g,"\\$1").replace(/^(.+)$/,'"$1"')}return r.replace(/(url\(.*?\))/g,s=>s.replace(/_/g,"\\_")).replace(/(^|[^\\])_/g,"$1 ").replace(/\\_/g,"_").replace(/(?:calc|clamp|max|min)\((.*)/g,s=>{let a=[];return s.replace(/var\((--.+?)[,)]/g,(l,f)=>(a.push(f),l.replace(f,"--un-calc"))).replace(/(-?\d*\.?\d(?!-\d.+[,)](?![^+\-/*])\D)(?:%|[a-z]+)?|\))([+\-/*])/g,"$1 $2 ").replace(/--un-calc/g,()=>a.shift())})}}function Fc(e){return Vr(e)}function Lc(e){return Vr(e,"color")}function Uc(e){return Vr(e,"length")}function Wc(e){return Vr(e,"position")}function Nc(e){if(/^\$[^\s'"`;{}]/.test(e)){let[t,r]=e.slice(1).split(",");return`var(--${ee(t)}${r?`, ${r}`:""})`}}function Dc(e){let t=e.match(/^(-?[0-9.]+)(s|ms)?$/i);if(!t)return;let[,r,n]=t,o=Number.parseFloat(r);if(!Number.isNaN(o))return o===0&&!n?"0s":n?`${Y(o)}${n}`:`${Y(o)}ms`}function Bc(e){let t=e.match(/^(-?[0-9.]+)(deg|rad|grad|turn)?$/i);if(!t)return;let[,r,n]=t,o=Number.parseFloat(r);if(!Number.isNaN(o))return o===0?"0":n?`${Y(o)}${n}`:`${Y(o)}deg`}function Ic(e){if(gn.includes(e))return e}function Kc(e){if(e.split(",").every(t=>jc.includes(t)))return e}function Gc(e){if(["top","left","right","bottom","center"].includes(e))return e}var Hc={__proto__:null,auto:Oc,bracket:Fc,bracketOfColor:Lc,bracketOfLength:Uc,bracketOfPosition:Wc,cssvar:Nc,degree:Bc,fraction:_c,global:Ic,number:Mc,numberWithUnit:zc,percent:Pc,position:Gc,properties:Kc,px:Ac,rem:Vc,time:Dc},qc=ft(Hc),L=qc;function Rs(e,t,r="colors"){let n=e[r],o=-1;for(let i of t){if(o+=1,n&&typeof n!="string"){let s=t.slice(o).join("-").replace(/(-[a-z])/g,a=>a.slice(1).toUpperCase());if(n[s])return n[s];if(n[i]){n=n[i];continue}}return}return n}function Or(e,t,r){return Rs(e,t,r)||Rs(e,t,"colors")}function Yc(e,t){let[r,n]=le(e,"[","]",["/",":"])??[];if(r!=null){let o=(r.match(zs)??[])[1];if(o==null||o===t)return[r,n]}}function Xc(e,t,r){let n=Yc(e,"color");if(!n)return;let[o,i]=n,s=o.replace(/([a-z])(\d)/g,"$1-$2").split(/-/g),[a]=s;if(!a)return;let l,f=L.bracketOfColor(o),u=f||o;if(L.numberWithUnit(u))return;if(/^#[\da-f]+$/i.test(u)?l=u:/^hex-[\da-fA-F]+$/.test(u)?l=`#${u.slice(4)}`:o.startsWith("$")&&(l=L.cssvar(o)),l=l||f,!l){let d=Or(t,[o],r);typeof d=="string"&&(l=d)}let p="DEFAULT";if(!l){let d,[m]=s.slice(-1);/^\d+$/.test(m)?(p=m,d=Or(t,s.slice(0,-1),r),!d||typeof d=="string"?l=void 0:l=d[p]):(d=Or(t,s,r),!d&&s.length<=2&&([,p=p]=s,d=Or(t,[a],r)),typeof d=="string"?l=d:p&&d&&(l=d[p]))}return{opacity:i,name:a,no:p,color:l,cssColor:G(l),alpha:L.bracket.cssvar.percent(i??"")}}function xn(e,t,r,n){return([,o],{theme:i,generator:s})=>{let a=Xc(o,i,r);if(!a)return;let{alpha:l,color:f,cssColor:u}=a,d=s.config.envMode==="dev"&&f?` /* ${f} */`:"",m={};if(u)if(l!=null)m[e]=M(u,l)+d;else{let g=`--un-${t}-opacity`,x=M(u,`var(${g})`);x.includes(g)&&(m[g]=te(u)),m[e]=x+d}else if(f)if(l!=null)m[e]=M(f,l)+d;else{let g=`--un-${t}-opacity`,x=M(f,`var(${g})`);x.includes(g)&&(m[g]=1),m[e]=x+d}if(n?.(m)!==!1)return m}}function ue(e,t){return gn.map(r=>[`${e}-${r}`,{[t??e]:r}])}function Os(e){return e!=null&&Tc.test(e)}function Ar(e,t,r){let n=t.split(Ec);return e||!e&&n.length===1?Cc[e].map(o=>[`--un-${r}${o}`,t]):n.map((o,i)=>[`--un-${r}-${Rc[i]}`,o])}var Zc=["auto","default","none","context-menu","help","pointer","progress","wait","cell","crosshair","text","vertical-text","alias","copy","move","no-drop","not-allowed","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out"];var _s=" ";var d0=[["visible",{visibility:"visible"}],["invisible",{visibility:"hidden"}],["backface-visible",{"backface-visibility":"visible"}],["backface-hidden",{"backface-visibility":"hidden"}],...ue("backface","backface-visibility")],m0=[[/^cursor-(.+)$/,([,e])=>({cursor:L.bracket.cssvar.global(e)})],...Zc.map(e=>[`cursor-${e}`,{cursor:e}])];var h0=[["pointer-events-auto",{"pointer-events":"auto"}],["pointer-events-none",{"pointer-events":"none"}],...ue("pointer-events")],g0=[["resize-x",{resize:"horizontal"}],["resize-y",{resize:"vertical"}],["resize",{resize:"both"}],["resize-none",{resize:"none"}],...ue("resize")],b0=[["select-auto",{"-webkit-user-select":"auto","user-select":"auto"}],["select-all",{"-webkit-user-select":"all","user-select":"all"}],["select-text",{"-webkit-user-select":"text","user-select":"text"}],["select-none",{"-webkit-user-select":"none","user-select":"none"}],...ue("select","user-select")];var x0=[[/^intrinsic-size-(.+)$/,([,e])=>({"contain-intrinsic-size":L.bracket.cssvar.global.fraction.rem(e)}),{autocomplete:"intrinsic-size-"}],["content-visibility-visible",{"content-visibility":"visible"}],["content-visibility-hidden",{"content-visibility":"hidden"}],["content-visibility-auto",{"content-visibility":"auto"}],...ue("content-visibility")];var y0=[["case-upper",{"text-transform":"uppercase"}],["case-lower",{"text-transform":"lowercase"}],["case-capital",{"text-transform":"capitalize"}],["case-normal",{"text-transform":"none"}],...ue("case","text-transform")];var Fs={"--un-ring-inset":_s,"--un-ring-offset-width":"0px","--un-ring-offset-color":"#fff","--un-ring-width":"0px","--un-ring-color":"rgb(147 197 253 / 0.5)","--un-shadow":"0 0 rgb(0 0 0 / 0)"},v0=[[/^ring(?:-(.+))?$/,([,e],{theme:t})=>{let r=t.ringWidth?.[e||"DEFAULT"]??L.px(e||"1");if(r)return{"--un-ring-width":r,"--un-ring-offset-shadow":"var(--un-ring-inset) 0 0 0 var(--un-ring-offset-width) var(--un-ring-offset-color)","--un-ring-shadow":"var(--un-ring-inset) 0 0 0 calc(var(--un-ring-width) + var(--un-ring-offset-width)) var(--un-ring-color)","box-shadow":"var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow)"}},{autocomplete:"ring-$ringWidth"}],[/^ring-(?:width-|size-)(.+)$/,Ls,{autocomplete:"ring-(width|size)-$lineWidth"}],["ring-offset",{"--un-ring-offset-width":"1px"}],[/^ring-offset-(?:width-|size-)?(.+)$/,([,e],{theme:t})=>({"--un-ring-offset-width":t.lineWidth?.[e]??L.bracket.cssvar.px(e)}),{autocomplete:"ring-offset-(width|size)-$lineWidth"}],[/^ring-(.+)$/,Jc,{autocomplete:"ring-$colors"}],[/^ring-op(?:acity)?-?(.+)$/,([,e])=>({"--un-ring-opacity":L.bracket.percent.cssvar(e)}),{autocomplete:"ring-(op|opacity)-"}],[/^ring-offset-(.+)$/,xn("--un-ring-offset-color","ring-offset","borderColor"),{autocomplete:"ring-offset-$colors"}],[/^ring-offset-op(?:acity)?-?(.+)$/,([,e])=>({"--un-ring-offset-opacity":L.bracket.percent.cssvar(e)}),{autocomplete:"ring-offset-(op|opacity)-"}],["ring-inset",{"--un-ring-inset":"inset"}]];function Ls([,e],{theme:t}){return{"--un-ring-width":t.ringWidth?.[e]??L.bracket.cssvar.px(e)}}function Jc(e,t){return Os(L.bracket(e[1]))?Ls(e,t):xn("--un-ring-color","ring","borderColor")(e,t)}var Us={"--un-ring-offset-shadow":"0 0 rgb(0 0 0 / 0)","--un-ring-shadow":"0 0 rgb(0 0 0 / 0)","--un-shadow-inset":_s,"--un-shadow":"0 0 rgb(0 0 0 / 0)"};var Mr=["translate","rotate","scale"],Qc=["translateX(var(--un-translate-x))","translateY(var(--un-translate-y))","rotate(var(--un-rotate))","rotateZ(var(--un-rotate-z))","skewX(var(--un-skew-x))","skewY(var(--un-skew-y))","scaleX(var(--un-scale-x))","scaleY(var(--un-scale-y))"].join(" "),ze=["translateX(var(--un-translate-x))","translateY(var(--un-translate-y))","translateZ(var(--un-translate-z))","rotate(var(--un-rotate))","rotateX(var(--un-rotate-x))","rotateY(var(--un-rotate-y))","rotateZ(var(--un-rotate-z))","skewX(var(--un-skew-x))","skewY(var(--un-skew-y))","scaleX(var(--un-scale-x))","scaleY(var(--un-scale-y))","scaleZ(var(--un-scale-z))"].join(" "),ef=["translate3d(var(--un-translate-x), var(--un-translate-y), var(--un-translate-z))","rotate(var(--un-rotate))","rotateX(var(--un-rotate-x))","rotateY(var(--un-rotate-y))","rotateZ(var(--un-rotate-z))","skewX(var(--un-skew-x))","skewY(var(--un-skew-y))","scaleX(var(--un-scale-x))","scaleY(var(--un-scale-y))","scaleZ(var(--un-scale-z))"].join(" "),Ws={"--un-rotate":0,"--un-rotate-x":0,"--un-rotate-y":0,"--un-rotate-z":0,"--un-scale-x":1,"--un-scale-y":1,"--un-scale-z":1,"--un-skew-x":0,"--un-skew-y":0,"--un-translate-x":0,"--un-translate-y":0,"--un-translate-z":0},w0=[[/^(?:transform-)?origin-(.+)$/,([,e])=>({"transform-origin":Xe[e]??L.bracket.cssvar(e)}),{autocomplete:[`transform-origin-(${Object.keys(Xe).join("|")})`,`origin-(${Object.keys(Xe).join("|")})`]}],[/^(?:transform-)?perspect(?:ive)?-(.+)$/,([,e])=>{let t=L.bracket.cssvar.px.numberWithUnit(e);if(t!=null)return{"-webkit-perspective":t,perspective:t}}],[/^(?:transform-)?perspect(?:ive)?-origin-(.+)$/,([,e])=>{let t=L.bracket.cssvar(e)??(e.length>=3?Xe[e]:void 0);if(t!=null)return{"-webkit-perspective-origin":t,"perspective-origin":t}}],[/^(?:transform-)?translate-()(.+)$/,Vs],[/^(?:transform-)?translate-([xyz])-(.+)$/,Vs],[/^(?:transform-)?rotate-()(.+)$/,Ms],[/^(?:transform-)?rotate-([xyz])-(.+)$/,Ms],[/^(?:transform-)?skew-()(.+)$/,Ps],[/^(?:transform-)?skew-([xy])-(.+)$/,Ps,{autocomplete:["transform-skew-(x|y)-","skew-(x|y)-"]}],[/^(?:transform-)?scale-()(.+)$/,As],[/^(?:transform-)?scale-([xyz])-(.+)$/,As,{autocomplete:[`transform-(${Mr.join("|")})-`,`transform-(${Mr.join("|")})-(x|y|z)-`,`(${Mr.join("|")})-`,`(${Mr.join("|")})-(x|y|z)-`]}],[/^(?:transform-)?preserve-3d$/,()=>({"transform-style":"preserve-3d"})],[/^(?:transform-)?preserve-flat$/,()=>({"transform-style":"flat"})],["transform",{transform:ze}],["transform-cpu",{transform:Qc}],["transform-gpu",{transform:ef}],["transform-none",{transform:"none"}],...ue("transform")];function Vs([,e,t],{theme:r}){let n=r.spacing?.[t]??L.bracket.cssvar.fraction.rem(t);if(n!=null)return[...Ar(e,n,"translate"),["transform",ze]]}function As([,e,t]){let r=L.bracket.cssvar.fraction.percent(t);if(r!=null)return[...Ar(e,r,"scale"),["transform",ze]]}function Ms([,e="",t]){let r=L.bracket.cssvar.degree(t);if(r!=null)return e?{"--un-rotate":0,[`--un-rotate-${e}`]:r,transform:ze}:{"--un-rotate-x":0,"--un-rotate-y":0,"--un-rotate-z":0,"--un-rotate":r,transform:ze}}function Ps([,e,t]){let r=L.bracket.cssvar.degree(t);if(r!=null)return[...Ar(e,r,"skew"),["transform",ze]]}var Ns={sans:["ui-sans-serif","system-ui","-apple-system","BlinkMacSystemFont",'"Segoe UI"',"Roboto",'"Helvetica Neue"',"Arial",'"Noto Sans"',"sans-serif",'"Apple Color Emoji"','"Segoe UI Emoji"','"Segoe UI Symbol"','"Noto Color Emoji"'].join(","),serif:["ui-serif","Georgia","Cambria",'"Times New Roman"',"Times","serif"].join(","),mono:["ui-monospace","SFMono-Regular","Menlo","Monaco","Consolas",'"Liberation Mono"','"Courier New"',"monospace"].join(",")},Ds={xs:["0.75rem","1rem"],sm:["0.875rem","1.25rem"],base:["1rem","1.5rem"],lg:["1.125rem","1.75rem"],xl:["1.25rem","1.75rem"],"2xl":["1.5rem","2rem"],"3xl":["1.875rem","2.25rem"],"4xl":["2.25rem","2.5rem"],"5xl":["3rem","1"],"6xl":["3.75rem","1"],"7xl":["4.5rem","1"],"8xl":["6rem","1"],"9xl":["8rem","1"]},Bs={DEFAULT:"1.5rem",xs:"0.5rem",sm:"1rem",md:"1.5rem",lg:"2rem",xl:"2.5rem","2xl":"3rem","3xl":"4rem"},Is={DEFAULT:"1.5rem",none:"0",sm:"thin",md:"medium",lg:"thick"},Ks={DEFAULT:["0 0 1px rgb(0 0 0 / 0.2)","0 0 1px rgb(1 0 5 / 0.1)"],none:"0 0 rgb(0 0 0 / 0)",sm:"1px 1px 3px rgb(36 37 47 / 0.25)",md:["0 1px 2px rgb(30 29 39 / 0.19)","1px 2px 4px rgb(54 64 147 / 0.18)"],lg:["3px 3px 6px rgb(0 0 0 / 0.26)","0 0 5px rgb(15 3 86 / 0.22)"],xl:["1px 1px 3px rgb(0 0 0 / 0.29)","2px 4px 7px rgb(73 64 125 / 0.35)"]},Gs={none:"1",tight:"1.25",snug:"1.375",normal:"1.5",relaxed:"1.625",loose:"2"},wn={tighter:"-0.05em",tight:"-0.025em",normal:"0em",wide:"0.025em",wider:"0.05em",widest:"0.1em"},Hs={thin:"100",extralight:"200",light:"300",normal:"400",medium:"500",semibold:"600",bold:"700",extrabold:"800",black:"900"},qs=wn,$n={sm:"640px",md:"768px",lg:"1024px",xl:"1280px","2xl":"1536px"},Ys={...$n},Xs={DEFAULT:"1px",none:"0"},Zs={DEFAULT:"1rem",none:"0",xs:"0.75rem",sm:"0.875rem",lg:"1.125rem",xl:"1.25rem","2xl":"1.5rem","3xl":"1.875rem","4xl":"2.25rem","5xl":"3rem","6xl":"3.75rem","7xl":"4.5rem","8xl":"6rem","9xl":"8rem"},Js={DEFAULT:"150ms",none:"0s",75:"75ms",100:"100ms",150:"150ms",200:"200ms",300:"300ms",500:"500ms",700:"700ms",1e3:"1000ms"},Qs={DEFAULT:"0.25rem",none:"0",sm:"0.125rem",md:"0.375rem",lg:"0.5rem",xl:"0.75rem","2xl":"1rem","3xl":"1.5rem",full:"9999px"},ea={DEFAULT:["var(--un-shadow-inset) 0 1px 3px 0 rgb(0 0 0 / 0.1)","var(--un-shadow-inset) 0 1px 2px -1px rgb(0 0 0 / 0.1)"],none:"0 0 rgb(0 0 0 / 0)",sm:"var(--un-shadow-inset) 0 1px 2px 0 rgb(0 0 0 / 0.05)",md:["var(--un-shadow-inset) 0 4px 6px -1px rgb(0 0 0 / 0.1)","var(--un-shadow-inset) 0 2px 4px -2px rgb(0 0 0 / 0.1)"],lg:["var(--un-shadow-inset) 0 10px 15px -3px rgb(0 0 0 / 0.1)","var(--un-shadow-inset) 0 4px 6px -4px rgb(0 0 0 / 0.1)"],xl:["var(--un-shadow-inset) 0 20px 25px -5px rgb(0 0 0 / 0.1)","var(--un-shadow-inset) 0 8px 10px -6px rgb(0 0 0 / 0.1)"],"2xl":"var(--un-shadow-inset) 0 25px 50px -12px rgb(0 0 0 / 0.25)",inner:"inset 0 2px 4px 0 rgb(0 0 0 / 0.05)"},ta={DEFAULT:"3px",none:"0"},ra={auto:"auto"},na={mouse:"(hover) and (pointer: fine)"},oa={DEFAULT:"8px",0:"0",sm:"4px",md:"12px",lg:"16px",xl:"24px","2xl":"40px","3xl":"64px"},ia={DEFAULT:["0 1px 2px rgb(0 0 0 / 0.1)","0 1px 1px rgb(0 0 0 / 0.06)"],sm:"0 1px 1px rgb(0 0 0 / 0.05)",md:["0 4px 3px rgb(0 0 0 / 0.07)","0 2px 2px rgb(0 0 0 / 0.06)"],lg:["0 10px 8px rgb(0 0 0 / 0.04)","0 4px 3px rgb(0 0 0 / 0.1)"],xl:["0 20px 13px rgb(0 0 0 / 0.03)","0 8px 5px rgb(0 0 0 / 0.08)"],"2xl":"0 25px 25px rgb(0 0 0 / 0.15)",none:"0 0 rgb(0 0 0 / 0)"},Oe={xs:"20rem",sm:"24rem",md:"28rem",lg:"32rem",xl:"36rem","2xl":"42rem","3xl":"48rem","4xl":"56rem","5xl":"64rem","6xl":"72rem","7xl":"80rem",prose:"65ch"},yn={auto:"auto",...Oe,screen:"100vw"},Ze={none:"none",...Oe,screen:"100vw"},vn={auto:"auto",...Oe,screen:"100vh"},Je={none:"none",...Oe,screen:"100vh"},sa=Object.fromEntries(Object.entries(Oe).map(([e,t])=>[e,`(min-width: ${t})`])),aa={...Ws,...Us,...Fs},tf={DEFAULT:"cubic-bezier(0.4, 0, 0.2, 1)",linear:"linear",in:"cubic-bezier(0.4, 0, 1, 1)",out:"cubic-bezier(0, 0, 0.2, 1)","in-out":"cubic-bezier(0.4, 0, 0.2, 1)"},rf={none:"none",all:"all",colors:["color","background-color","border-color","outline-color","text-decoration-color","fill","stroke"].join(","),opacity:"opacity",shadow:"box-shadow",transform:"transform",get DEFAULT(){return[this.colors,"opacity","box-shadow","transform","filter","backdrop-filter"].join(",")}},kn={width:yn,height:vn,maxWidth:Ze,maxHeight:Je,minWidth:Ze,minHeight:Je,inlineSize:yn,blockSize:vn,maxInlineSize:Ze,maxBlockSize:Je,minInlineSize:Ze,minBlockSize:Je,colors:hn,fontFamily:Ns,fontSize:Ds,fontWeight:Hs,breakpoints:$n,verticalBreakpoints:Ys,borderRadius:Qs,lineHeight:Gs,letterSpacing:wn,wordSpacing:qs,boxShadow:ea,textIndent:Bs,textShadow:Ks,textStrokeWidth:Is,blur:oa,dropShadow:ia,easing:tf,transitionProperty:rf,lineWidth:Xs,spacing:Zs,duration:Js,ringWidth:ta,preflightBase:aa,containers:sa,zIndex:ra,media:na};var la={...kn,aria:{busy:'busy="true"',checked:'checked="true"',disabled:'disabled="true"',expanded:'expanded="true"',hidden:'hidden="true"',pressed:'pressed="true"',readonly:'readonly="true"',required:'required="true"',selected:'selected="true"'},animation:{keyframes:{pulse:"{0%, 100% {opacity:1} 50% {opacity:.5}}",bounce:"{0%, 100% {transform:translateY(-25%);animation-timing-function:cubic-bezier(0.8,0,1,1)} 50% {transform:translateY(0);animation-timing-function:cubic-bezier(0,0,0.2,1)}}",spin:"{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}",ping:"{0%{transform:scale(1);opacity:1}75%,100%{transform:scale(2);opacity:0}}","bounce-alt":"{from,20%,53%,80%,to{animation-timing-function:cubic-bezier(0.215,0.61,0.355,1);transform:translate3d(0,0,0)}40%,43%{animation-timing-function:cubic-bezier(0.755,0.05,0.855,0.06);transform:translate3d(0,-30px,0)}70%{animation-timing-function:cubic-bezier(0.755,0.05,0.855,0.06);transform:translate3d(0,-15px,0)}90%{transform:translate3d(0,-4px,0)}}",flash:"{from,50%,to{opacity:1}25%,75%{opacity:0}}","pulse-alt":"{from{transform:scale3d(1,1,1)}50%{transform:scale3d(1.05,1.05,1.05)}to{transform:scale3d(1,1,1)}}","rubber-band":"{from{transform:scale3d(1,1,1)}30%{transform:scale3d(1.25,0.75,1)}40%{transform:scale3d(0.75,1.25,1)}50%{transform:scale3d(1.15,0.85,1)}65%{transform:scale3d(0.95,1.05,1)}75%{transform:scale3d(1.05,0.95,1)}to{transform:scale3d(1,1,1)}}","shake-x":"{from,to{transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{transform:translate3d(-10px,0,0)}20%,40%,60%,80%{transform:translate3d(10px,0,0)}}","shake-y":"{from,to{transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{transform:translate3d(0,-10px,0)}20%,40%,60%,80%{transform:translate3d(0,10px,0)}}","head-shake":"{0%{transform:translateX(0)}6.5%{transform:translateX(-6px) rotateY(-9deg)}18.5%{transform:translateX(5px) rotateY(7deg)}31.5%{transform:translateX(-3px) rotateY(-5deg)}43.5%{transform:translateX(2px) rotateY(3deg)}50%{transform:translateX(0)}}",swing:"{20%{transform:rotate3d(0,0,1,15deg)}40%{transform:rotate3d(0,0,1,-10deg)}60%{transform:rotate3d(0,0,1,5deg)}80%{transform:rotate3d(0,0,1,-5deg)}to{transform:rotate3d(0,0,1,0deg)}}",tada:"{from{transform:scale3d(1,1,1)}10%,20%{transform:scale3d(0.9,0.9,0.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}to{transform:scale3d(1,1,1)}}",wobble:"{from{transform:translate3d(0,0,0)}15%{transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}to{transform:translate3d(0,0,0)}}",jello:"{from,11.1%,to{transform:translate3d(0,0,0)}22.2%{transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{transform:skewX(6.25deg) skewY(6.25deg)}44.4%{transform:skewX(-3.125deg)skewY(-3.125deg)}55.5%{transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{transform:skewX(-0.78125deg) skewY(-0.78125deg)}77.7%{transform:skewX(0.390625deg) skewY(0.390625deg)}88.8%{transform:skewX(-0.1953125deg) skewY(-0.1953125deg)}}","heart-beat":"{0%{transform:scale(1)}14%{transform:scale(1.3)}28%{transform:scale(1)}42%{transform:scale(1.3)}70%{transform:scale(1)}}",hinge:"{0%{transform-origin:top left;animation-timing-function:ease-in-out}20%,60%{transform:rotate3d(0,0,1,80deg);transform-origin:top left;animation-timing-function:ease-in-out}40%,80%{transform:rotate3d(0,0,1,60deg);transform-origin:top left;animation-timing-function:ease-in-out}to{transform:translate3d(0,700px,0);opacity:0}}","jack-in-the-box":"{from{opacity:0;transform-origin:center bottom;transform:scale(0.1) rotate(30deg)}50%{transform:rotate(-10deg)}70%{transform:rotate(3deg)}to{transform:scale(1)}}","light-speed-in-left":"{from{opacity:0;transform:translate3d(-100%,0,0) skewX(-30deg)}60%{opacity:1;transform:skewX(20deg)}80%{transform:skewX(-5deg)}to{transform:translate3d(0,0,0)}}","light-speed-in-right":"{from{opacity:0;transform:translate3d(100%,0,0) skewX(-30deg)}60%{opacity:1;transform:skewX(20deg)}80%{transform:skewX(-5deg)}to{transform:translate3d(0,0,0)}}","light-speed-out-left":"{from{opacity:1}to{opacity:0;transform:translate3d(-100%,0,0) skewX(30deg)}}","light-speed-out-right":"{from{opacity:1}to{opacity:0;transform:translate3d(100%,0,0) skewX(30deg)}}",flip:"{from{transform:perspective(400px) scale3d(1,1,1) translate3d(0,0,0) rotate3d(0,1,0,-360deg);animation-timing-function:ease-out}40%{transform:perspective(400px) scale3d(1,1,1) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);animation-timing-function:ease-out}50%{transform:perspective(400px) scale3d(1,1,1) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);animation-timing-function:ease-in}80%{transform:perspective(400px) scale3d(0.95,0.95,0.95) translate3d(0,0,0) rotate3d(0,1,0,0deg);animation-timing-function:ease-in}to{transform:perspective(400px) scale3d(1,1,1) translate3d(0,0,0) rotate3d(0,1,0,0deg);animation-timing-function:ease-in}}","flip-in-x":"{from{transform:perspective(400px) rotate3d(1,0,0,90deg);animation-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotate3d(1,0,0,-20deg);animation-timing-function:ease-in}60%{transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{transform:perspective(400px) rotate3d(1,0,0,-5deg)}to{transform:perspective(400px)}}","flip-in-y":"{from{transform:perspective(400px) rotate3d(0,1,0,90deg);animation-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotate3d(0,1,0,-20deg);animation-timing-function:ease-in}60%{transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{transform:perspective(400px) rotate3d(0,1,0,-5deg)}to{transform:perspective(400px)}}","flip-out-x":"{from{transform:perspective(400px)}30%{transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}to{transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}","flip-out-y":"{from{transform:perspective(400px)}30%{transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}to{transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}","rotate-in":"{from{transform-origin:center;transform:rotate3d(0,0,1,-200deg);opacity:0}to{transform-origin:center;transform:translate3d(0,0,0);opacity:1}}","rotate-in-down-left":"{from{transform-origin:left bottom;transform:rotate3d(0,0,1,-45deg);opacity:0}to{transform-origin:left bottom;transform:translate3d(0,0,0);opacity:1}}","rotate-in-down-right":"{from{transform-origin:right bottom;transform:rotate3d(0,0,1,45deg);opacity:0}to{transform-origin:right bottom;transform:translate3d(0,0,0);opacity:1}}","rotate-in-up-left":"{from{transform-origin:left top;transform:rotate3d(0,0,1,45deg);opacity:0}to{transform-origin:left top;transform:translate3d(0,0,0);opacity:1}}","rotate-in-up-right":"{from{transform-origin:right bottom;transform:rotate3d(0,0,1,-90deg);opacity:0}to{transform-origin:right bottom;transform:translate3d(0,0,0);opacity:1}}","rotate-out":"{from{transform-origin:center;opacity:1}to{transform-origin:center;transform:rotate3d(0,0,1,200deg);opacity:0}}","rotate-out-down-left":"{from{transform-origin:left bottom;opacity:1}to{transform-origin:left bottom;transform:rotate3d(0,0,1,45deg);opacity:0}}","rotate-out-down-right":"{from{transform-origin:right bottom;opacity:1}to{transform-origin:right bottom;transform:rotate3d(0,0,1,-45deg);opacity:0}}","rotate-out-up-left":"{from{transform-origin:left bottom;opacity:1}to{transform-origin:left bottom;transform:rotate3d(0,0,1,-45deg);opacity:0}}","rotate-out-up-right":"{from{transform-origin:right bottom;opacity:1}to{transform-origin:left bottom;transform:rotate3d(0,0,1,90deg);opacity:0}}","roll-in":"{from{opacity:0;transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}to{opacity:1;transform:translate3d(0,0,0)}}","roll-out":"{from{opacity:1}to{opacity:0;transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}","zoom-in":"{from{opacity:0;transform:scale3d(0.3,0.3,0.3)}50%{opacity:1}}","zoom-in-down":"{from{opacity:0;transform:scale3d(0.1,0.1,0.1) translate3d(0,-1000px,0);animation-timing-function:cubic-bezier(0.55,0.055,0.675,0.19)}60%{opacity:1;transform:scale3d(0.475,0.475,0.475) translate3d(0,60px,0);animation-timing-function:cubic-bezier(0.175,0.885,0.32,1)}}","zoom-in-left":"{from{opacity:0;transform:scale3d(0.1,0.1,0.1) translate3d(-1000px,0,0);animation-timing-function:cubic-bezier(0.55,0.055,0.675,0.19)}60%{opacity:1;transform:scale3d(0.475,0.475,0.475) translate3d(10px,0,0);animation-timing-function:cubic-bezier(0.175,0.885,0.32,1)}}","zoom-in-right":"{from{opacity:0;transform:scale3d(0.1,0.1,0.1) translate3d(1000px,0,0);animation-timing-function:cubic-bezier(0.55,0.055,0.675,0.19)}60%{opacity:1;transform:scale3d(0.475,0.475,0.475) translate3d(-10px,0,0);animation-timing-function:cubic-bezier(0.175,0.885,0.32,1)}}","zoom-in-up":"{from{opacity:0;transform:scale3d(0.1,0.1,0.1) translate3d(0,1000px,0);animation-timing-function:cubic-bezier(0.55,0.055,0.675,0.19)}60%{opacity:1;transform:scale3d(0.475,0.475,0.475) translate3d(0,-60px,0);animation-timing-function:cubic-bezier(0.175,0.885,0.32,1)}}","zoom-out":"{from{opacity:1}50%{opacity:0;transform:scale3d(0.3,0.3,0.3)}to{opacity:0}}","zoom-out-down":"{40%{opacity:1;transform:scale3d(0.475,0.475,0.475) translate3d(0,-60px,0);animation-timing-function:cubic-bezier(0.55,0.055,0.675,0.19)}to{opacity:0;transform:scale3d(0.1,0.1,0.1) translate3d(0,2000px,0);transform-origin:center bottom;animation-timing-function:cubic-bezier(0.175,0.885,0.32,1)}}","zoom-out-left":"{40%{opacity:1;transform:scale3d(0.475,0.475,0.475) translate3d(42px,0,0)}to{opacity:0;transform:scale(0.1) translate3d(-2000px,0,0);transform-origin:left center}}","zoom-out-right":"{40%{opacity:1;transform:scale3d(0.475,0.475,0.475) translate3d(-42px,0,0)}to{opacity:0;transform:scale(0.1) translate3d(2000px,0,0);transform-origin:right center}}","zoom-out-up":"{40%{opacity:1;transform:scale3d(0.475,0.475,0.475) translate3d(0,60px,0);animation-timing-function:cubic-bezier(0.55,0.055,0.675,0.19)}to{opacity:0;transform:scale3d(0.1,0.1,0.1) translate3d(0,-2000px,0);transform-origin:center bottom;animation-timing-function:cubic-bezier(0.175,0.885,0.32,1)}}","bounce-in":"{from,20%,40%,60%,80%,to{animation-timing-function:ease-in-out}0%{opacity:0;transform:scale3d(0.3,0.3,0.3)}20%{transform:scale3d(1.1,1.1,1.1)}40%{transform:scale3d(0.9,0.9,0.9)}60%{transform:scale3d(1.03,1.03,1.03);opacity:1}80%{transform:scale3d(0.97,0.97,0.97)}to{opacity:1;transform:scale3d(1,1,1)}}","bounce-in-down":"{from,60%,75%,90%,to{animation-timing-function:cubic-bezier(0.215,0.61,0.355,1)}0%{opacity:0;transform:translate3d(0,-3000px,0)}60%{opacity:1;transform:translate3d(0,25px,0)}75%{transform:translate3d(0,-10px,0)}90%{transform:translate3d(0,5px,0)}to{transform:translate3d(0,0,0)}}","bounce-in-left":"{from,60%,75%,90%,to{animation-timing-function:cubic-bezier(0.215,0.61,0.355,1)}0%{opacity:0;transform:translate3d(-3000px,0,0)}60%{opacity:1;transform:translate3d(25px,0,0)}75%{transform:translate3d(-10px,0,0)}90%{transform:translate3d(5px,0,0)}to{transform:translate3d(0,0,0)}}","bounce-in-right":"{from,60%,75%,90%,to{animation-timing-function:cubic-bezier(0.215,0.61,0.355,1)}0%{opacity:0;transform:translate3d(3000px,0,0)}60%{opacity:1;transform:translate3d(-25px,0,0)}75%{transform:translate3d(10px,0,0)}90%{transform:translate3d(-5px,0,0)}to{transform:translate3d(0,0,0)}}","bounce-in-up":"{from,60%,75%,90%,to{animation-timing-function:cubic-bezier(0.215,0.61,0.355,1)}0%{opacity:0;transform:translate3d(0,3000px,0)}60%{opacity:1;transform:translate3d(0,-20px,0)}75%{transform:translate3d(0,10px,0)}90%{transform:translate3d(0,-5px,0)}to{transform:translate3d(0,0,0)}}","bounce-out":"{20%{transform:scale3d(0.9,0.9,0.9)}50%,55%{opacity:1;transform:scale3d(1.1,1.1,1.1)}to{opacity:0;transform:scale3d(0.3,0.3,0.3)}}","bounce-out-down":"{20%{transform:translate3d(0,10px,0)}40%,45%{opacity:1;transform:translate3d(0,-20px,0)}to{opacity:0;transform:translate3d(0,2000px,0)}}","bounce-out-left":"{20%{opacity:1;transform:translate3d(20px,0,0)}to{opacity:0;transform:translate3d(-2000px,0,0)}}","bounce-out-right":"{20%{opacity:1;transform:translate3d(-20px,0,0)}to{opacity:0;transform:translate3d(2000px,0,0)}}","bounce-out-up":"{20%{transform:translate3d(0,-10px,0)}40%,45%{opacity:1;transform:translate3d(0,20px,0)}to{opacity:0;transform:translate3d(0,-2000px,0)}}","slide-in-down":"{from{transform:translate3d(0,-100%,0);visibility:visible}to{transform:translate3d(0,0,0)}}","slide-in-left":"{from{transform:translate3d(-100%,0,0);visibility:visible}to{transform:translate3d(0,0,0)}}","slide-in-right":"{from{transform:translate3d(100%,0,0);visibility:visible}to{transform:translate3d(0,0,0)}}","slide-in-up":"{from{transform:translate3d(0,100%,0);visibility:visible}to{transform:translate3d(0,0,0)}}","slide-out-down":"{from{transform:translate3d(0,0,0)}to{visibility:hidden;transform:translate3d(0,100%,0)}}","slide-out-left":"{from{transform:translate3d(0,0,0)}to{visibility:hidden;transform:translate3d(-100%,0,0)}}","slide-out-right":"{from{transform:translate3d(0,0,0)}to{visibility:hidden;transform:translate3d(100%,0,0)}}","slide-out-up":"{from{transform:translate3d(0,0,0)}to{visibility:hidden;transform:translate3d(0,-100%,0)}}","fade-in":"{from{opacity:0}to{opacity:1}}","fade-in-down":"{from{opacity:0;transform:translate3d(0,-100%,0)}to{opacity:1;transform:translate3d(0,0,0)}}","fade-in-down-big":"{from{opacity:0;transform:translate3d(0,-2000px,0)}to{opacity:1;transform:translate3d(0,0,0)}}","fade-in-left":"{from{opacity:0;transform:translate3d(-100%,0,0)}to{opacity:1;transform:translate3d(0,0,0)}}","fade-in-left-big":"{from{opacity:0;transform:translate3d(-2000px,0,0)}to{opacity:1;transform:translate3d(0,0,0)}}","fade-in-right":"{from{opacity:0;transform:translate3d(100%,0,0)}to{opacity:1;transform:translate3d(0,0,0)}}","fade-in-right-big":"{from{opacity:0;transform:translate3d(2000px,0,0)}to{opacity:1;transform:translate3d(0,0,0)}}","fade-in-up":"{from{opacity:0;transform:translate3d(0,100%,0)}to{opacity:1;transform:translate3d(0,0,0)}}","fade-in-up-big":"{from{opacity:0;transform:translate3d(0,2000px,0)}to{opacity:1;transform:translate3d(0,0,0)}}","fade-in-top-left":"{from{opacity:0;transform:translate3d(-100%,-100%,0)}to{opacity:1;transform:translate3d(0,0,0)}}","fade-in-top-right":"{from{opacity:0;transform:translate3d(100%,-100%,0)}to{opacity:1;transform:translate3d(0,0,0)}}","fade-in-bottom-left":"{from{opacity:0;transform:translate3d(-100%,100%,0)}to{opacity:1;transform:translate3d(0,0,0)}}","fade-in-bottom-right":"{from{opacity:0;transform:translate3d(100%,100%,0)}to{opacity:1;transform:translate3d(0,0,0)}}","fade-out":"{from{opacity:1}to{opacity:0}}","fade-out-down":"{from{opacity:1}to{opacity:0;transform:translate3d(0,100%,0)}}","fade-out-down-big":"{from{opacity:1}to{opacity:0;transform:translate3d(0,2000px,0)}}","fade-out-left":"{from{opacity:1}to{opacity:0;transform:translate3d(-100%,0,0)}}","fade-out-left-big":"{from{opacity:1}to{opacity:0;transform:translate3d(-2000px,0,0)}}","fade-out-right":"{from{opacity:1}to{opacity:0;transform:translate3d(100%,0,0)}}","fade-out-right-big":"{from{opacity:1}to{opacity:0;transform:translate3d(2000px,0,0)}}","fade-out-up":"{from{opacity:1}to{opacity:0;transform:translate3d(0,-100%,0)}}","fade-out-up-big":"{from{opacity:1}to{opacity:0;transform:translate3d(0,-2000px,0)}}","fade-out-top-left":"{from{opacity:1;transform:translate3d(0,0,0)}to{opacity:0;transform:translate3d(-100%,-100%,0)}}","fade-out-top-right":"{from{opacity:1;transform:translate3d(0,0,0)}to{opacity:0;transform:translate3d(100%,-100%,0)}}","fade-out-bottom-left":"{from{opacity:1;transform:translate3d(0,0,0)}to{opacity:0;transform:translate3d(-100%,100%,0)}}","fade-out-bottom-right":"{from{opacity:1;transform:translate3d(0,0,0)}to{opacity:0;transform:translate3d(100%,100%,0)}}","back-in-up":"{0%{opacity:0.7;transform:translateY(1200px) scale(0.7)}80%{opacity:0.7;transform:translateY(0px) scale(0.7)}100%{opacity:1;transform:scale(1)}}","back-in-down":"{0%{opacity:0.7;transform:translateY(-1200px) scale(0.7)}80%{opacity:0.7;transform:translateY(0px) scale(0.7)}100%{opacity:1;transform:scale(1)}}","back-in-right":"{0%{opacity:0.7;transform:translateX(2000px) scale(0.7)}80%{opacity:0.7;transform:translateY(0px) scale(0.7)}100%{opacity:1;transform:scale(1)}}","back-in-left":"{0%{opacity:0.7;transform:translateX(-2000px) scale(0.7)}80%{opacity:0.7;transform:translateX(0px) scale(0.7)}100%{opacity:1;transform:scale(1)}}","back-out-up":"{0%{opacity:1;transform:scale(1)}80%{opacity:0.7;transform:translateY(0px) scale(0.7)}100%{opacity:0.7;transform:translateY(-700px) scale(0.7)}}","back-out-down":"{0%{opacity:1;transform:scale(1)}80%{opacity:0.7;transform:translateY(0px) scale(0.7)}100%{opacity:0.7;transform:translateY(700px) scale(0.7)}}","back-out-right":"{0%{opacity:1;transform:scale(1)}80%{opacity:0.7;transform:translateY(0px) scale(0.7)}100%{opacity:0.7;transform:translateX(2000px) scale(0.7)}}","back-out-left":"{0%{opacity:1;transform:scale(1)}80%{opacity:0.7;transform:translateX(-2000px) scale(0.7)}100%{opacity:0.7;transform:translateY(-700px) scale(0.7)}}"},durations:{pulse:"2s","heart-beat":"1.3s","bounce-in":"0.75s","bounce-out":"0.75s","flip-out-x":"0.75s","flip-out-y":"0.75s",hinge:"2s"},timingFns:{pulse:"cubic-bezier(0.4,0,.6,1)",ping:"cubic-bezier(0,0,.2,1)","head-shake":"ease-in-out","heart-beat":"ease-in-out","pulse-alt":"ease-in-out","light-speed-in-left":"ease-out","light-speed-in-right":"ease-out","light-speed-out-left":"ease-in","light-speed-out-right":"ease-in"},properties:{"bounce-alt":{"transform-origin":"center bottom"},jello:{"transform-origin":"center"},swing:{"transform-origin":"top center"},flip:{"backface-visibility":"visible"},"flip-in-x":{"backface-visibility":"visible !important"},"flip-in-y":{"backface-visibility":"visible !important"},"flip-out-x":{"backface-visibility":"visible !important"},"flip-out-y":{"backface-visibility":"visible !important"},"rotate-in":{"transform-origin":"center"},"rotate-in-down-left":{"transform-origin":"left bottom"},"rotate-in-down-right":{"transform-origin":"right bottom"},"rotate-in-up-left":{"transform-origin":"left bottom"},"rotate-in-up-right":{"transform-origin":"right bottom"},"rotate-out":{"transform-origin":"center"},"rotate-out-down-left":{"transform-origin":"left bottom"},"rotate-out-down-right":{"transform-origin":"right bottom"},"rotate-out-up-left":{"transform-origin":"left bottom"},"rotate-out-up-right":{"transform-origin":"right bottom"},hinge:{"transform-origin":"top left"},"zoom-out-down":{"transform-origin":"center bottom"},"zoom-out-left":{"transform-origin":"left center"},"zoom-out-right":{"transform-origin":"right center"},"zoom-out-up":{"transform-origin":"center bottom"}},counts:{spin:"infinite",ping:"infinite",pulse:"infinite","pulse-alt":"infinite",bounce:"infinite","bounce-alt":"infinite"}},media:{portrait:"(orientation: portrait)",landscape:"(orientation: landscape)",os_dark:"(prefers-color-scheme: dark)",os_light:"(prefers-color-scheme: light)",motion_ok:"(prefers-reduced-motion: no-preference)",motion_not_ok:"(prefers-reduced-motion: reduce)",high_contrast:"(prefers-contrast: high)",low_contrast:"(prefers-contrast: low)",opacity_ok:"(prefers-reduced-transparency: no-preference)",opacity_not_ok:"(prefers-reduced-transparency: reduce)",use_data_ok:"(prefers-reduced-data: no-preference)",use_data_not_ok:"(prefers-reduced-data: reduce)",touch:"(hover: none) and (pointer: coarse)",stylus:"(hover: none) and (pointer: fine)",pointer:"(hover) and (pointer: coarse)",mouse:"(hover) and (pointer: fine)",hd_color:"(dynamic-range: high)"},supports:{grid:"(display: grid)"},preflightBase:{...yr,...bs,...ys,...hs,...fs,...ur,...cr,...qi,...Yi}};var ca=[B("svg",e=>({selector:`${e.selector} svg`}))];var fa=[B(".dark",e=>({prefix:`.dark $$ ${e.prefix}`})),B(".light",e=>({prefix:`.light $$ ${e.prefix}`})),I("@dark","@media (prefers-color-scheme: dark)"),I("@light","@media (prefers-color-scheme: light)")];var ua=[I("contrast-more","@media (prefers-contrast: more)"),I("contrast-less","@media (prefers-contrast: less)")],pa=[I("motion-reduce","@media (prefers-reduced-motion: reduce)"),I("motion-safe","@media (prefers-reduced-motion: no-preference)")],da=[I("landscape","@media (orientation: landscape)"),I("portrait","@media (orientation: portrait)")];var ma=e=>{if(!e.startsWith("_")&&(/space-[xy]-.+$/.test(e)||/divide-/.test(e)))return{matcher:e,selector:t=>{let r=">:not([hidden])~:not([hidden])";return t.includes(r)?t:`${t}${r}`}}},ha=[B("@hover",e=>({parent:`${e.parent?`${e.parent} $$ `:""}@media (hover: hover) and (pointer: fine)`,selector:`${e.selector||""}:hover`}))];var ga=(e,{theme:t})=>{let r=e.match(/^(.*)\b(placeholder-)(.+)$/);if(r){let[,n="",o,i]=r;if(Re(i,t,"accentColor")||nf(i))return{matcher:`${n}placeholder-$ ${o}${i}`}}};function nf(e){let t=e.match(/^op(?:acity)?-?(.+)$/);return t&&t[1]!=null?c.bracket.percent(t[1])!=null:!1}function ba(e){return[ga,ma,...Tr(e),...ua,...da,...pa,...ca,...fa,...ha]}function xa(e){if(e==null||e===!1)return[];let t=r=>r.startsWith(":is(")&&r.endsWith(")")?r:r.includes("::")?r.replace(/(.*?)(\s*::.*)/,":is($1)$2"):`:is(${r})`;return[e===!0?r=>{r.entries.forEach(n=>{n[1]!=null&&!String(n[1]).endsWith("!important")&&(n[1]+=" !important")})}:r=>{r.selector.startsWith(e)||(r.selector=`${e} ${t(r.selector)}`)}]}function ya(e){return[...O(Pi(e).postprocess),...xa(e.important)]}var va=(e={})=>(e.important=e.important??!1,{...fn(e),name:"@unocss/preset-wind",theme:la,rules:ks,shortcuts:Ss,variants:ba(e),postprocess:ya(e)});function wa(e,t,r){return`calc(${t} + (${e} - ${t}) * ${r} / 100)`}function $a(e,t,r){let n=[e,t],o=[];for(let s=0;s<2;s++){let a=typeof n[s]=="string"?G(n[s]):n[s];if(!a||!["rgb","rgba"].includes(a.type))return;o.push(a)}let i=[];for(let s=0;s<3;s++)i.push(wa(o[0].components[s],o[1].components[s],r));return{type:"rgb",components:i,alpha:wa(o[0].alpha??1,o[1].alpha??1,r)}}function ka(e,t){return $a("#fff",e,t)}function Sa(e,t){return $a("#000",e,t)}function of(e,t){let r=Number.parseFloat(`${t}`);if(!Number.isNaN(r))return r>0?Sa(e,t):ka(e,-r)}var sf={tint:ka,shade:Sa,shift:of};function Ca(){let e;return{name:"mix",match(t,r){e||(e=new RegExp(`^mix-(tint|shade|shift)-(-?\\d{1,3})(?:${r.generator.config.separators.join("|")})`));let n=t.match(e);if(n)return{matcher:t.slice(n[0].length),body:o=>(o.forEach(i=>{if(i[1]){let s=G(`${i[1]}`);if(s){let a=sf[n[1]](s,n[2]);a&&(i[1]=M(a))}}}),o)}}}}var af=(e={})=>{let t=va(e);return{...t,name:"@unocss/preset-uno",variants:[...t.variants,Ca()]}},Ra=af;function lf(e){return e.replace(/-(\w)/g,(t,r)=>r?r.toUpperCase():"")}function Ta(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Ea(e){return e.replace(/(?:^|\B)([A-Z])/g,"-$1").toLowerCase()}var ja=["Webkit","Moz","ms"];function za(e){let t={};function r(n){let o=t[n];if(o)return o;let i=lf(n);if(i!=="filter"&&i in e)return t[n]=Ea(i);i=Ta(i);for(let s=0;sn.forEach(o=>{o[0].startsWith("--")||(o[0]=r(o[0]))})}function Oa(e){return e.replace(/&/g,"&").replace(/>/g,">").replace(/</g,"<")}function Sn(e={}){if(typeof window>"u"){console.warn("@unocss/runtime been used in non-browser environment, skipped.");return}let t=window,r=window.document,n=()=>r.documentElement,o=t.__unocss||{},i=Object.assign({},e,o.runtime),s=i.defaults||{},a=i.cloakAttribute??"un-cloak";i.autoPrefix&&(s.postprocess=O(s.postprocess)).unshift(za(r.createElement("div").style)),i.configResolved?.(o,s);let l=Dn(o,s),f=k=>i.inject?i.inject(k):n().prepend(k),u=()=>i.rootElement?i.rootElement():r.body,p=new Map,d=!0,m=new Set,g,x,w=[],z=()=>new Promise(k=>{w.push(k),x!=null&&clearTimeout(x),x=setTimeout(()=>A().then(()=>{let v=w;w=[],v.forEach(T=>T())}),0)});function b(k,v=!1){if(k.nodeType!==1)return;let T=k;T.hasAttribute(a)&&T.removeAttribute(a),v&&T.querySelectorAll(`[${a}]`).forEach(P=>{P.removeAttribute(a)})}function $(k,v){let T=p.get(k);if(!T)if(T=r.createElement("style"),T.setAttribute("data-unocss-runtime-layer",k),p.set(k,T),v==null)f(T);else{let P=$(v),N=P.parentNode;N?N.insertBefore(T,P.nextSibling):f(T)}return T}async function A(){let k=[...m],v=await l.generate(k);return v.layers.reduce((P,N)=>($(N,P).innerHTML=v.getLayer(N)??"",N),void 0),k.filter(P=>!v.matched.has(P)).forEach(P=>m.delete(P)),{...v,getStyleElement:P=>p.get(P),getStyleElements:()=>p}}async function C(k){let v=m.size;await l.applyExtractors(k,void 0,m),v!==m.size&&await z()}async function h(k=u()){let v=k&&k.outerHTML;v&&(await C(`${v} ${Oa(v)}`),b(n()),b(k,!0))}let R=new MutationObserver(k=>{d||k.forEach(async v=>{if(v.target.nodeType!==1)return;let T=v.target;for(let P of p)if(T===P[1])return;if(v.type==="childList")v.addedNodes.forEach(async P=>{if(P.nodeType!==1)return;let N=P;g&&!g(N)||(await C(N.outerHTML),b(N))});else{if(g&&!g(T))return;if(v.attributeName!==a){let P=Array.from(T.attributes).map(oe=>oe.value?`${oe.name}="${oe.value}"`:oe.name).join(" "),N=`<${T.tagName.toLowerCase()} ${P}>`;await C(N)}b(T)}})}),F=!1;function K(){if(F)return;let k=i.observer?.target?i.observer.target():u();k&&(R.observe(k,{childList:!0,subtree:!0,attributes:!0,attributeFilter:i.observer?.attributeFilter}),F=!0)}function ne(){i.bypassDefined&&cf(l.blocked),h(),K()}function be(){r.readyState==="loading"?t.addEventListener("DOMContentLoaded",ne):ne()}let Qe=t.__unocss_runtime=t.__unocss_runtime={version:l.version,uno:l,async extract(k){V(k)||(k.forEach(v=>m.add(v)),k=""),await C(k)},extractAll:h,inspect(k){g=k},toggleObserver(k){k===void 0?d=!d:d=!!k,!F&&!d&&be()},update:A,presets:t.__unocss_runtime?.presets??{}};i.ready?.(Qe)!==!1&&(d=!1,be())}function cf(e=new Set){for(let t=0;to.selectorText?.split(/,/g)||[]).forEach(o=>{o&&(o=o.trim(),o.startsWith(".")&&(o=o.slice(1)),e.add(o))})}catch{continue}}return e}Sn({defaults:{presets:[Ra()]}});})(); + +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){"use strict";var t=1e3,e=6e4,n=36e5,r="millisecond",i="second",s="minute",u="hour",a="day",o="week",c="month",f="quarter",h="year",d="date",l="Invalid Date",$=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,y=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],n=t%100;return"["+t+(e[(n-20)%10]||e[n]||e[0])+"]"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?"+":"-")+m(r,2,"0")+":"+m(i,2,"0")},m:function t(e,n){if(e.date()1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)0,p<=y.r||!y.r){p<=1&&c>0&&(y=h[c-1]);var v=l[y.l];u&&(p=u(""+p)),a="string"==typeof v?v.replace("%d",p):v(p,n,y.l,s);break}}if(n)return a;var M=s?l.future:l.past;return"function"==typeof M?M(a):M.replace("%s",a)},n.to=function(r,e){return i(r,e,this,!0)},n.from=function(r,e){return i(r,e,this)};var d=function(r){return r.$u?t.utc():t()};n.toNow=function(r){return this.to(d(this),r)},n.fromNow=function(r){return this.from(d(this),r)}}})); + +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("vue")):"function"==typeof define&&define.amd?define(["exports","vue"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).vant={},e.Vue)}(this,(function(e,t){"use strict";function o(){}const a=Object.assign,n="undefined"!=typeof window,r=e=>null!==e&&"object"==typeof e,l=e=>null!=e,i=e=>"function"==typeof e,s=e=>r(e)&&i(e.then)&&i(e.catch),c=e=>"[object Date]"===Object.prototype.toString.call(e)&&!Number.isNaN(e.getTime());function d(e){return e=e.replace(/[^-|\d]/g,""),/^((\+86)|(86))?(1)\d{10}$/.test(e)||/^0[0-9-]{10,13}$/.test(e)}const u=e=>"number"==typeof e||/^\d+(\.\d+)?$/.test(e);function p(e,t){const o=t.split(".");let a=e;return o.forEach((e=>{var t;a=r(a)&&null!=(t=a[e])?t:""})),a}function v(e,t,o){return t.reduce(((t,a)=>(o&&void 0===e[a]||(t[a]=e[a]),t)),{})}const m=(e,t)=>JSON.stringify(e)===JSON.stringify(t),f=e=>Array.isArray(e)?e:[e],h=null,g=[Number,String],b={type:Boolean,default:!0},y=e=>({type:e,required:!0}),w=()=>({type:Array,default:()=>[]}),x=e=>({type:Number,default:e}),V=e=>({type:g,default:e}),N=e=>({type:String,default:e});var C="undefined"!=typeof window;function k(e){return C?requestAnimationFrame(e):-1}function S(e){C&&cancelAnimationFrame(e)}function T(e){k((()=>k(e)))}var B=(e,t)=>({top:0,left:0,right:e,bottom:t,width:e,height:t}),P=e=>{const o=t.unref(e);if(o===window){const e=o.innerWidth,t=o.innerHeight;return B(e,t)}return(null==o?void 0:o.getBoundingClientRect)?o.getBoundingClientRect():B(0,0)};function D(e){const o=t.inject(e,null);if(o){const e=t.getCurrentInstance(),{link:a,unlink:n,internalChildren:r}=o;a(e),t.onUnmounted((()=>n(e)));return{parent:o,index:t.computed((()=>r.indexOf(e)))}}return{parent:null,index:t.ref(-1)}}var A=(e,t)=>{const o=e.indexOf(t);return-1===o?e.findIndex((e=>void 0!==t.key&&null!==t.key&&e.type===t.type&&e.key===t.key)):o};function O(e,o,a){const n=function(e){const o=[],a=e=>{Array.isArray(e)&&e.forEach((e=>{var n;t.isVNode(e)&&(o.push(e),(null==(n=e.component)?void 0:n.subTree)&&(o.push(e.component.subTree),a(e.component.subTree.children)),e.children&&a(e.children))}))};return a(e),o}(e.subTree.children);a.sort(((e,t)=>A(n,e.vnode)-A(n,t.vnode)));const r=a.map((e=>e.proxy));o.sort(((e,t)=>r.indexOf(e)-r.indexOf(t)))}function I(e){const o=t.reactive([]),a=t.reactive([]),n=t.getCurrentInstance();return{children:o,linkChildren:r=>{t.provide(e,Object.assign({link:e=>{e.proxy&&(a.push(e),o.push(e.proxy),O(n,o,a))},unlink:e=>{const t=a.indexOf(e);o.splice(t,1),a.splice(t,1)},children:o,internalChildren:a},r))}}}var z,E,L=1e3,$=60*L,M=60*$,F=24*M;function R(e){let o,a,n,r;const l=t.ref(e.time),i=t.computed((()=>{return{total:e=l.value,days:Math.floor(e/F),hours:Math.floor(e%F/M),minutes:Math.floor(e%M/$),seconds:Math.floor(e%$/L),milliseconds:Math.floor(e%L)};var e})),s=()=>{n=!1,S(o)},c=()=>Math.max(a-Date.now(),0),d=t=>{var o,a;l.value=t,null==(o=e.onChange)||o.call(e,i.value),0===t&&(s(),null==(a=e.onFinish)||a.call(e))},u=()=>{o=k((()=>{n&&(d(c()),l.value>0&&u())}))},p=()=>{o=k((()=>{if(n){const o=c();e=o,t=l.value,(Math.floor(e/1e3)!==Math.floor(t/1e3)||0===o)&&d(o),l.value>0&&p()}var e,t}))},v=()=>{C&&(e.millisecond?u():p())};return t.onBeforeUnmount(s),t.onActivated((()=>{r&&(n=!0,r=!1,v())})),t.onDeactivated((()=>{n&&(s(),r=!0)})),{start:()=>{n||(a=Date.now()+l.value,n=!0,v())},pause:s,reset:(t=e.time)=>{s(),l.value=t},current:i}}function H(e){let o;t.onMounted((()=>{e(),t.nextTick((()=>{o=!0}))})),t.onActivated((()=>{o&&e()}))}function j(e,o,a={}){if(!C)return;const{target:n=window,passive:r=!1,capture:l=!1}=a;let i,s=!1;const c=a=>{if(s)return;const n=t.unref(a);n&&!i&&(n.addEventListener(e,o,{capture:l,passive:r}),i=!0)},d=a=>{if(s)return;const n=t.unref(a);n&&i&&(n.removeEventListener(e,o,l),i=!1)};let u;return t.onUnmounted((()=>d(n))),t.onDeactivated((()=>d(n))),H((()=>c(n))),t.isRef(n)&&(u=t.watch(n,((e,t)=>{d(t),c(e)}))),()=>{null==u||u(),d(n),s=!0}}function W(e,o,a={}){if(!C)return;const{eventName:n="click"}=a;j(n,(a=>{(Array.isArray(e)?e:[e]).every((e=>{const o=t.unref(e);return o&&!o.contains(a.target)}))&&o(a)}),{target:document})}var U,Y=/scroll|auto|overlay/i,X=C?window:void 0;function q(e){return"HTML"!==e.tagName&&"BODY"!==e.tagName&&1===e.nodeType}function G(e,t=X){let o=e;for(;o&&o!==t&&q(o);){const{overflowY:e}=window.getComputedStyle(o);if(Y.test(e))return o;o=o.parentNode}return t}function Z(e,o=X){const a=t.ref();return t.onMounted((()=>{e.value&&(a.value=G(e.value,o))})),a}var K=Symbol("van-field");function _(e){const o=t.inject(K,null);o&&!o.customValue.value&&(o.customValue.value=e,t.watch(e,(()=>{o.resetValidation(),o.validateWithTrigger("onChange")})))}function J(e){const t="scrollTop"in e?e.scrollTop:e.pageYOffset;return Math.max(t,0)}function Q(e,t){"scrollTop"in e?e.scrollTop=t:e.scrollTo(e.scrollX,t)}function ee(){return window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0}function te(e){Q(window,e),Q(document.body,e)}function oe(e,t){if(e===window)return 0;const o=t?J(t):ee();return P(e).top+o}const ae=!!n&&/ios|iphone|ipad|ipod/.test(navigator.userAgent.toLowerCase());function ne(){ae&&te(ee())}const re=e=>e.stopPropagation();function le(e,t){("boolean"!=typeof e.cancelable||e.cancelable)&&e.preventDefault(),t&&re(e)}function ie(e){const o=t.unref(e);if(!o)return!1;const a=window.getComputedStyle(o),n="none"===a.display,r=null===o.offsetParent&&"fixed"!==a.position;return n||r}const{width:se,height:ce}=function(){if(!z&&(z=t.ref(0),E=t.ref(0),C)){const e=()=>{z.value=window.innerWidth,E.value=window.innerHeight};e(),window.addEventListener("resize",e,{passive:!0}),window.addEventListener("orientationchange",e,{passive:!0})}return{width:z,height:E}}();function de(e){const t=window.getComputedStyle(e);return"none"!==t.transform||"none"!==t.perspective||["transform","perspective","filter"].some((e=>(t.willChange||"").includes(e)))}function ue(e){if(l(e))return u(e)?`${e}px`:String(e)}function pe(e){if(l(e)){if(Array.isArray(e))return{width:ue(e[0]),height:ue(e[1])};const t=ue(e);return{width:t,height:t}}}function ve(e){const t={};return void 0!==e&&(t.zIndex=+e),t}let me;function fe(e){return+(e=e.replace(/rem/g,""))*function(){if(!me){const e=document.documentElement,t=e.style.fontSize||window.getComputedStyle(e).fontSize;me=parseFloat(t)}return me}()}function he(e){if("number"==typeof e)return e;if(n){if(e.includes("rem"))return fe(e);if(e.includes("vw"))return function(e){return+(e=e.replace(/vw/g,""))*se.value/100}(e);if(e.includes("vh"))return function(e){return+(e=e.replace(/vh/g,""))*ce.value/100}(e)}return parseFloat(e)}const ge=/-(\w)/g,be=e=>e.replace(ge,((e,t)=>t.toUpperCase()));function ye(e,t=2){let o=e+"";for(;o.lengthMath.min(Math.max(e,t),o);function xe(e,t,o){const a=e.indexOf(t);return-1===a?e:"-"===t&&0!==a?e.slice(0,a):e.slice(0,a+1)+e.slice(a).replace(o,"")}function Ve(e,t=!0,o=!0){e=t?xe(e,".",/\./g):e.split(".")[0];const a=t?/[^-0-9.]/g:/[^-0-9]/g;return(e=o?xe(e,"-",/-/g):e.replace(/-/,"")).replace(a,"")}function Ne(e,t){const o=10**10;return Math.round((e+t)*o)/o}const{hasOwnProperty:Ce}=Object.prototype;function ke(e,t){return Object.keys(t).forEach((o=>{!function(e,t,o){const a=t[o];l(a)&&(Ce.call(e,o)&&r(a)?e[o]=ke(Object(e[o]),a):e[o]=a)}(e,t,o)})),e}const Se=t.ref("zh-CN"),Te=t.reactive({"zh-CN":{name:"",tel:"绰",save:"",clear:"",cancel:"ȡ",confirm:"ȷ",delete:"ɾ",loading:"...",noCoupon:"Żȯ",nameEmpty:"д",addContact:"ϵ",telInvalid:"дȷĵ绰",vanCalendar:{end:"",start:"ʼ",title:"ѡ",weekdays:["","һ","","","","",""],monthTitle:(e,t)=>`${e}${t}`,rangePrompt:e=>`ѡ ${e} `},vanCascader:{select:"ѡ"},vanPagination:{prev:"һҳ",next:"һҳ"},vanPullRefresh:{pulling:"ˢ...",loosing:"ͷżˢ..."},vanSubmitBar:{label:"ϼ:"},vanCoupon:{unlimited:"ż",discount:e=>`${e}`,condition:e=>`${e}Ԫ`},vanCouponCell:{title:"Żȯ",count:e=>`${e}ſ`},vanCouponList:{exchange:"һ",close:"ʹ",enable:"",disabled:"",placeholder:"Ż"},vanAddressEdit:{area:"",areaEmpty:"ѡ",addressEmpty:"дϸַ",addressDetail:"ϸַ",defaultAddress:"ΪĬջַ"},vanAddressList:{add:"ַ"}}}),Be={messages:()=>Te[Se.value],use(e,t){Se.value=e,this.add({[e]:t})},add(e={}){ke(Te,e)}};var Pe=Be;function De(e){const t=be(e)+".";return(e,...o)=>{const a=Pe.messages(),n=p(a,t+e)||p(a,e);return i(n)?n(...o):n}}function Ae(e,t){return t?"string"==typeof t?` ${e}--${t}`:Array.isArray(t)?t.reduce(((t,o)=>t+Ae(e,o)),""):Object.keys(t).reduce(((o,a)=>o+(t[a]?Ae(e,a):"")),""):""}function Oe(e){return(t,o)=>(t&&"string"!=typeof t&&(o=t,t=""),`${t=t?`${e}__${t}`:e}${Ae(t,o)}`)}function Ie(e){const t=`van-${e}`;return[t,Oe(t),De(t)]}const ze="van-hairline",Ee=`${ze}--top`,Le=`${ze}--left`,$e=`${ze}--right`,Me=`${ze}--bottom`,Fe=`${ze}--surround`,Re=`${ze}--top-bottom`,He=`${ze}-unset--top-bottom`,je="van-haptics-feedback",We=Symbol("van-form"),Ue=5;function Ye(e,{args:t=[],done:a,canceled:n,error:r}){if(e){const l=e.apply(null,t);s(l)?l.then((e=>{e?a():n&&n()})).catch(r||o):l?a():n&&n()}else a()}function Xe(e){return e.install=t=>{const{name:o}=e;o&&(t.component(o,e),t.component(be(`-${o}`),e))},e}function qe(e,t){return e.reduce(((e,o)=>Math.abs(e-t){t&&e()}))}const Ke=(e,o)=>{const a=t.ref(),n=()=>{a.value=P(e).height};return t.onMounted((()=>{if(t.nextTick(n),o)for(let e=1;e<=3;e++)setTimeout(n,100*e)})),Ze((()=>t.nextTick(n))),t.watch([se,ce],n),a};function _e(e,o){const a=Ke(e,!0);return e=>t.createVNode("div",{class:o("placeholder"),style:{height:a.value?`${a.value}px`:void 0}},[e()])}const[Je,Qe]=Ie("action-bar"),et=Symbol(Je),tt={placeholder:Boolean,safeAreaInsetBottom:b};const ot=Xe(t.defineComponent({name:Je,props:tt,setup(e,{slots:o}){const a=t.ref(),n=_e(a,Qe),{linkChildren:r}=I(et);r();const l=()=>{var n;return t.createVNode("div",{ref:a,class:[Qe(),{"van-safe-area-bottom":e.safeAreaInsetBottom}]},[null==(n=o.default)?void 0:n.call(o)])};return()=>e.placeholder?n(l):l()}}));function at(e){const o=t.getCurrentInstance();o&&a(o.proxy,e)}const nt={to:[String,Object],url:String,replace:Boolean};function rt({to:e,url:t,replace:o,$router:a}){e&&a?a[o?"replace":"push"](e):t&&(o?location.replace(t):location.href=t)}function lt(){const e=t.getCurrentInstance().proxy;return()=>rt(e)}const[it,st]=Ie("badge"),ct={dot:Boolean,max:g,tag:N("div"),color:String,offset:Array,content:g,showZero:b,position:N("top-right")};const dt=Xe(t.defineComponent({name:it,props:ct,setup(e,{slots:o}){const a=()=>{if(o.content)return!0;const{content:t,showZero:a}=e;return l(t)&&""!==t&&(a||0!==t&&"0"!==t)},n=()=>{const{dot:t,max:n,content:r}=e;if(!t&&a())return o.content?o.content():l(n)&&u(r)&&+r>+n?`${n}+`:r},r=e=>e.startsWith("-")?e.replace("-",""):`-${e}`,i=t.computed((()=>{const t={background:e.color};if(e.offset){const[a,n]=e.offset,{position:l}=e,[i,s]=l.split("-");o.default?(t[i]="number"==typeof n?ue("top"===i?n:-n):"top"===i?ue(n):r(n),t[s]="number"==typeof a?ue("left"===s?a:-a):"left"===s?ue(a):r(a)):(t.marginTop=ue(n),t.marginLeft=ue(a))}return t})),s=()=>{if(a()||e.dot)return t.createVNode("div",{class:st([e.position,{dot:e.dot,fixed:!!o.default}]),style:i.value},[n()])};return()=>{if(o.default){const{tag:a}=e;return t.createVNode(a,{class:st("wrapper")},{default:()=>[o.default(),s()]})}return s()}}}));let ut=2e3;const[pt,vt]=Ie("config-provider"),mt=Symbol(pt),ft={tag:N("div"),theme:N("light"),zIndex:Number,themeVars:Object,themeVarsDark:Object,themeVarsLight:Object,themeVarsScope:N("local"),iconPrefix:String};function ht(e={},t={}){Object.keys(e).forEach((o=>{e[o]!==t[o]&&document.documentElement.style.setProperty(o,e[o])})),Object.keys(t).forEach((t=>{e[t]||document.documentElement.style.removeProperty(t)}))}var gt=t.defineComponent({name:pt,props:ft,setup(e,{slots:o}){const r=t.computed((()=>function(e){const t={};return Object.keys(e).forEach((o=>{const a=o.replace(/([A-Z])/g,"-$1").toLowerCase().replace(/^-/,"").replace(/([a-zA-Z])(\d)/g,"$1-$2");t[`--van-${a}`]=e[o]})),t}(a({},e.themeVars,"dark"===e.theme?e.themeVarsDark:e.themeVarsLight))));if(n){const o=()=>{document.documentElement.classList.add(`van-theme-${e.theme}`)},a=(t=e.theme)=>{document.documentElement.classList.remove(`van-theme-${t}`)};t.watch((()=>e.theme),((e,t)=>{t&&a(t),o()}),{immediate:!0}),t.onActivated(o),t.onDeactivated(a),t.onBeforeUnmount(a),t.watch(r,((t,o)=>{"global"===e.themeVarsScope&&ht(t,o)})),t.watch((()=>e.themeVarsScope),((e,t)=>{"global"===t&&ht({},r.value),"global"===e&&ht(r.value,{})})),"global"===e.themeVarsScope&&ht(r.value,{})}return t.provide(mt,e),t.watchEffect((()=>{var t;void 0!==e.zIndex&&(t=e.zIndex,ut=t)})),()=>t.createVNode(e.tag,{class:vt(),style:"local"===e.themeVarsScope?r.value:void 0},{default:()=>{var e;return[null==(e=o.default)?void 0:e.call(o)]}})}});const[bt,yt]=Ie("icon"),wt={dot:Boolean,tag:N("i"),name:String,size:g,badge:g,color:String,badgeProps:Object,classPrefix:String};const xt=Xe(t.defineComponent({name:bt,props:wt,setup(e,{slots:o}){const a=t.inject(mt,null),n=t.computed((()=>e.classPrefix||(null==a?void 0:a.iconPrefix)||yt()));return()=>{const{tag:a,dot:r,name:l,size:i,badge:s,color:c}=e,d=(e=>null==e?void 0:e.includes("/"))(l);return t.createVNode(dt,t.mergeProps({dot:r,tag:a,class:[n.value,d?"":`${n.value}-${l}`],style:{color:c,fontSize:ue(i)},content:s},e.badgeProps),{default:()=>{var e;return[null==(e=o.default)?void 0:e.call(o),d&&t.createVNode("img",{class:yt("image"),src:l},null)]}})}}}));var Vt=xt;const[Nt,Ct]=Ie("loading"),kt=Array(12).fill(null).map(((e,o)=>t.createVNode("i",{class:Ct("line",String(o+1))},null))),St=t.createVNode("svg",{class:Ct("circular"),viewBox:"25 25 50 50"},[t.createVNode("circle",{cx:"50",cy:"50",r:"20",fill:"none"},null)]),Tt={size:g,type:N("circular"),color:String,vertical:Boolean,textSize:g,textColor:String};const Bt=Xe(t.defineComponent({name:Nt,props:Tt,setup(e,{slots:o}){const n=t.computed((()=>a({color:e.color},pe(e.size)))),r=()=>{const a="spinner"===e.type?kt:St;return t.createVNode("span",{class:Ct("spinner",e.type),style:n.value},[o.icon?o.icon():a])},l=()=>{var a;if(o.default)return t.createVNode("span",{class:Ct("text"),style:{fontSize:ue(e.textSize),color:null!=(a=e.textColor)?a:e.color}},[o.default()])};return()=>{const{type:o,vertical:a}=e;return t.createVNode("div",{class:Ct([o,{vertical:a}]),"aria-live":"polite","aria-busy":!0},[r(),l()])}}})),[Pt,Dt]=Ie("button"),At=a({},nt,{tag:N("button"),text:String,icon:String,type:N("default"),size:N("normal"),color:String,block:Boolean,plain:Boolean,round:Boolean,square:Boolean,loading:Boolean,hairline:Boolean,disabled:Boolean,iconPrefix:String,nativeType:N("button"),loadingSize:g,loadingText:String,loadingType:String,iconPosition:N("left")});const Ot=Xe(t.defineComponent({name:Pt,props:At,emits:["click"],setup(e,{emit:o,slots:a}){const n=lt(),r=()=>e.loading?a.loading?a.loading():t.createVNode(Bt,{size:e.loadingSize,type:e.loadingType,class:Dt("loading")},null):a.icon?t.createVNode("div",{class:Dt("icon")},[a.icon()]):e.icon?t.createVNode(xt,{name:e.icon,class:Dt("icon"),classPrefix:e.iconPrefix},null):void 0,l=()=>{let o;if(o=e.loading?e.loadingText:a.default?a.default():e.text,o)return t.createVNode("span",{class:Dt("text")},[o])},i=()=>{const{color:t,plain:o}=e;if(t){const e={color:o?t:"white"};return o||(e.background=t),t.includes("gradient")?e.border=0:e.borderColor=t,e}},s=t=>{e.loading?le(t):e.disabled||(o("click",t),n())};return()=>{const{tag:o,type:a,size:n,block:c,round:d,plain:u,square:p,loading:v,disabled:m,hairline:f,nativeType:h,iconPosition:g}=e,b=[Dt([a,n,{plain:u,block:c,round:d,square:p,loading:v,disabled:m,hairline:f}]),{[Fe]:f}];return t.createVNode(o,{type:h,class:b,style:i(),disabled:m,onClick:s},{default:()=>[t.createVNode("div",{class:Dt("content")},["left"===g&&r(),l(),"right"===g&&r()])]})}}})),[It,zt]=Ie("action-bar-button"),Et=a({},nt,{type:String,text:String,icon:String,color:String,loading:Boolean,disabled:Boolean});const Lt=Xe(t.defineComponent({name:It,props:Et,setup(e,{slots:o}){const a=lt(),{parent:n,index:r}=D(et),l=t.computed((()=>{if(n){const e=n.children[r.value-1];return!(e&&"isButton"in e)}})),i=t.computed((()=>{if(n){const e=n.children[r.value+1];return!(e&&"isButton"in e)}}));return at({isButton:!0}),()=>{const{type:n,icon:r,text:s,color:c,loading:d,disabled:u}=e;return t.createVNode(Ot,{class:zt([n,{last:i.value,first:l.value}]),size:"large",type:n,icon:r,color:c,loading:d,disabled:u,onClick:a},{default:()=>[o.default?o.default():s]})}}})),[$t,Mt]=Ie("action-bar-icon"),Ft=a({},nt,{dot:Boolean,text:String,icon:String,color:String,badge:g,iconClass:h,badgeProps:Object,iconPrefix:String});const Rt=Xe(t.defineComponent({name:$t,props:Ft,setup(e,{slots:o}){const a=lt();D(et);const n=()=>{const{dot:a,badge:n,icon:r,color:l,iconClass:i,badgeProps:s,iconPrefix:c}=e;return o.icon?t.createVNode(dt,t.mergeProps({dot:a,class:Mt("icon"),content:n},s),{default:o.icon}):t.createVNode(xt,{tag:"div",dot:a,name:r,badge:n,color:l,class:[Mt("icon"),i],badgeProps:s,classPrefix:c},null)};return()=>t.createVNode("div",{role:"button",class:Mt(),tabindex:0,onClick:a},[n(),o.default?o.default():e.text])}})),Ht={show:Boolean,zIndex:g,overlay:b,duration:g,teleport:[String,Object],lockScroll:b,lazyRender:b,beforeClose:Function,overlayStyle:Object,overlayClass:h,transitionAppear:Boolean,closeOnClickOverlay:b},jt=Object.keys(Ht);function Wt(){const e=t.ref(0),o=t.ref(0),a=t.ref(0),n=t.ref(0),r=t.ref(0),l=t.ref(0),i=t.ref(""),s=t.ref(!0),c=()=>{a.value=0,n.value=0,r.value=0,l.value=0,i.value="",s.value=!0};return{move:t=>{const c=t.touches[0];a.value=(c.clientX<0?0:c.clientX)-e.value,n.value=c.clientY-o.value,r.value=Math.abs(a.value),l.value=Math.abs(n.value);var d,u;(!i.value||r.value<10&&l.value<10)&&(i.value=(d=r.value,u=l.value,d>u?"horizontal":u>d?"vertical":"")),s.value&&(r.value>Ue||l.value>Ue)&&(s.value=!1)},start:t=>{c(),e.value=t.touches[0].clientX,o.value=t.touches[0].clientY},reset:c,startX:e,startY:o,deltaX:a,deltaY:n,offsetX:r,offsetY:l,direction:i,isVertical:()=>"vertical"===i.value,isHorizontal:()=>"horizontal"===i.value,isTap:s}}let Ut=0;const Yt="van-overflow-hidden";function Xt(e,o){const a=Wt(),n=t=>{a.move(t);const o=a.deltaY.value>0?"10":"01",n=G(t.target,e.value),{scrollHeight:r,offsetHeight:l,scrollTop:i}=n;let s="11";0===i?s=l>=r?"00":"01":i+l>=r&&(s="10"),"11"===s||!a.isVertical()||parseInt(s,2)&parseInt(o,2)||le(t,!0)},r=()=>{document.addEventListener("touchstart",a.start),document.addEventListener("touchmove",n,{passive:!1}),Ut||document.body.classList.add(Yt),Ut++},l=()=>{Ut&&(document.removeEventListener("touchstart",a.start),document.removeEventListener("touchmove",n),Ut--,Ut||document.body.classList.remove(Yt))},i=()=>o()&&l();H((()=>o()&&r())),t.onDeactivated(i),t.onBeforeUnmount(i),t.watch(o,(e=>{e?r():l()}))}function qt(e){const o=t.ref(!1);return t.watch(e,(e=>{e&&(o.value=e)}),{immediate:!0}),e=>()=>o.value?e():null}const Gt=()=>{var e;const{scopeId:o}=(null==(e=t.getCurrentInstance())?void 0:e.vnode)||{};return o?{[o]:""}:null},[Zt,Kt]=Ie("overlay"),_t={show:Boolean,zIndex:g,duration:g,className:h,lockScroll:b,lazyRender:b,customStyle:Object};const Jt=Xe(t.defineComponent({name:Zt,props:_t,setup(e,{slots:o}){const n=t.ref(),r=qt((()=>e.show||!e.lazyRender))((()=>{var r;const i=a(ve(e.zIndex),e.customStyle);return l(e.duration)&&(i.animationDuration=`${e.duration}s`),t.withDirectives(t.createVNode("div",{ref:n,style:i,class:[Kt(),e.className]},[null==(r=o.default)?void 0:r.call(o)]),[[t.vShow,e.show]])}));return j("touchmove",(t=>{e.lockScroll&&le(t,!0)}),{target:n}),()=>t.createVNode(t.Transition,{name:"van-fade",appear:!0},{default:r})}})),Qt=a({},Ht,{round:Boolean,position:N("center"),closeIcon:N("cross"),closeable:Boolean,transition:String,iconPrefix:String,closeOnPopstate:Boolean,closeIconPosition:N("top-right"),safeAreaInsetTop:Boolean,safeAreaInsetBottom:Boolean}),[eo,to]=Ie("popup");const oo=Xe(t.defineComponent({name:eo,inheritAttrs:!1,props:Qt,emits:["open","close","opened","closed","keydown","update:show","clickOverlay","clickCloseIcon"],setup(e,{emit:o,attrs:a,slots:n}){let r,i;const s=t.ref(),c=t.ref(),d=qt((()=>e.show||!e.lazyRender)),u=t.computed((()=>{const t={zIndex:s.value};if(l(e.duration)){t["center"===e.position?"animationDuration":"transitionDuration"]=`${e.duration}s`}return t})),p=()=>{r||(r=!0,s.value=void 0!==e.zIndex?+e.zIndex:++ut,o("open"))},v=()=>{r&&Ye(e.beforeClose,{done(){r=!1,o("close"),o("update:show",!1)}})},m=t=>{o("clickOverlay",t),e.closeOnClickOverlay&&v()},f=()=>{if(e.overlay)return t.createVNode(Jt,t.mergeProps({show:e.show,class:e.overlayClass,zIndex:s.value,duration:e.duration,customStyle:e.overlayStyle,role:e.closeOnClickOverlay?"button":void 0,tabindex:e.closeOnClickOverlay?0:void 0},Gt(),{onClick:m}),{default:n["overlay-content"]})},h=e=>{o("clickCloseIcon",e),v()},g=()=>{if(e.closeable)return t.createVNode(xt,{role:"button",tabindex:0,name:e.closeIcon,class:[to("close-icon",e.closeIconPosition),je],classPrefix:e.iconPrefix,onClick:h},null)};let b;const y=()=>{b&&clearTimeout(b),b=setTimeout((()=>{o("opened")}))},w=()=>o("closed"),x=e=>o("keydown",e),V=d((()=>{var o;const{round:r,position:l,safeAreaInsetTop:i,safeAreaInsetBottom:s}=e;return t.withDirectives(t.createVNode("div",t.mergeProps({ref:c,style:u.value,role:"dialog",tabindex:0,class:[to({round:r,[l]:l}),{"van-safe-area-top":i,"van-safe-area-bottom":s}],onKeydown:x},a,Gt()),[null==(o=n.default)?void 0:o.call(n),g()]),[[t.vShow,e.show]])})),N=()=>{const{position:o,transition:a,transitionAppear:n}=e,r="center"===o?"van-fade":`van-popup-slide-${o}`;return t.createVNode(t.Transition,{name:a||r,appear:n,onAfterEnter:y,onAfterLeave:w},{default:V})};return t.watch((()=>e.show),(e=>{e&&!r&&(p(),0===a.tabindex&&t.nextTick((()=>{var e;null==(e=c.value)||e.focus()}))),!e&&r&&(r=!1,o("close"))})),at({popupRef:c}),Xt(c,(()=>e.show&&e.lockScroll)),j("popstate",(()=>{e.closeOnPopstate&&(v(),i=!1)})),t.onMounted((()=>{e.show&&p()})),t.onActivated((()=>{i&&(o("update:show",!0),i=!1)})),t.onDeactivated((()=>{e.show&&e.teleport&&(v(),i=!0)})),t.provide(Ge,(()=>e.show)),()=>e.teleport?t.createVNode(t.Teleport,{to:e.teleport},{default:()=>[f(),N()]}):t.createVNode(t.Fragment,null,[f(),N()])}})),[ao,no]=Ie("action-sheet"),ro=a({},Ht,{title:String,round:b,actions:w(),closeIcon:N("cross"),closeable:b,cancelText:String,description:String,closeOnPopstate:b,closeOnClickAction:Boolean,safeAreaInsetBottom:b}),lo=[...jt,"round","closeOnPopstate","safeAreaInsetBottom"];const io=Xe(t.defineComponent({name:ao,props:ro,emits:["select","cancel","update:show"],setup(e,{slots:o,emit:a}){const n=e=>a("update:show",e),r=()=>{n(!1),a("cancel")},l=()=>{if(e.title)return t.createVNode("div",{class:no("header")},[e.title,e.closeable&&t.createVNode(xt,{name:e.closeIcon,class:[no("close"),je],onClick:r},null)])},i=()=>{if(o.cancel||e.cancelText)return[t.createVNode("div",{class:no("gap")},null),t.createVNode("button",{type:"button",class:no("cancel"),onClick:r},[o.cancel?o.cancel():e.cancelText])]},s=e=>{if(e.icon)return t.createVNode(xt,{class:no("item-icon"),name:e.icon},null)},c=(e,a)=>e.loading?t.createVNode(Bt,{class:no("loading-icon")},null):o.action?o.action({action:e,index:a}):[t.createVNode("span",{class:no("name")},[e.name]),e.subname&&t.createVNode("div",{class:no("subname")},[e.subname])],d=(o,r)=>{const{color:l,loading:i,callback:d,disabled:u,className:p}=o;return t.createVNode("button",{type:"button",style:{color:l},class:[no("item",{loading:i,disabled:u}),p],onClick:()=>{u||i||(d&&d(o),e.closeOnClickAction&&n(!1),t.nextTick((()=>a("select",o,r))))}},[s(o),c(o,r)])},u=()=>{if(e.description||o.description){const a=o.description?o.description():e.description;return t.createVNode("div",{class:no("description")},[a])}};return()=>t.createVNode(oo,t.mergeProps({class:no(),position:"bottom","onUpdate:show":n},v(e,lo)),{default:()=>{var a;return[l(),u(),t.createVNode("div",{class:no("content")},[e.actions.map(d),null==(a=o.default)?void 0:a.call(o)]),i()]}})}})),[so,co,uo]=Ie("picker"),po=e=>e.find((e=>!e.disabled))||e[0];function vo(e,t){for(let o=t=we(t,0,e.length);o=0;o--)if(!e[o].disabled)return o;return 0}const mo=(e,t,o)=>void 0!==t&&!!e.find((e=>e[o.value]===t));function fo(e,t,o){const a=e.findIndex((e=>e[o.value]===t));return e[vo(e,a)]}const[ho,go]=Ie("picker-column"),bo=Symbol(ho);var yo=t.defineComponent({name:ho,props:{value:g,fields:y(Object),options:w(),readonly:Boolean,allowHtml:Boolean,optionHeight:y(Number),swipeDuration:y(g),visibleOptionNum:y(g)},emits:["change","clickOption","scrollInto"],setup(e,{emit:o,slots:a}){let n,r,l,i,s;const c=t.ref(),d=t.ref(),u=t.ref(0),p=t.ref(0),v=Wt(),m=()=>e.options.length,f=()=>e.optionHeight*(+e.visibleOptionNum-1)/2,h=t=>{let a=vo(e.options,t);const r=-a*e.optionHeight,l=()=>{a>m()-1&&(a=vo(e.options,t));const n=e.options[a][e.fields.value];n!==e.value&&o("change",n)};n&&r!==u.value?s=l:l(),u.value=r},g=()=>e.readonly||!e.options.length,b=t=>we(Math.round(-t/e.optionHeight),0,m()-1),y=t.computed((()=>b(u.value))),w=()=>{n=!1,p.value=0,s&&(s(),s=null)},x=e=>{if(!g()){if(v.start(e),n){const e=function(e){const{transform:t}=window.getComputedStyle(e),o=t.slice(7,t.length-1).split(", ")[5];return Number(o)}(d.value);u.value=Math.min(0,e-f())}p.value=0,r=u.value,l=Date.now(),i=r,s=null}},V=()=>{if(g())return;const t=u.value-i,o=Date.now()-l;if(o<300&&Math.abs(t)>15)return void((t,o)=>{const a=Math.abs(t/o);t=u.value+a/.003*(t<0?-1:1);const n=b(t);p.value=+e.swipeDuration,h(n)})(t,o);const a=b(u.value);p.value=200,h(a),setTimeout((()=>{n=!1}),0)},N=()=>{const r={height:`${e.optionHeight}px`};return e.options.map(((l,i)=>{const c=l[e.fields.text],{disabled:d}=l,u=l[e.fields.value],v={role:"button",style:r,tabindex:d?-1:0,class:[go("item",{disabled:d,selected:u===e.value}),l.className],onClick:()=>(t=>{n||g()||(s=null,p.value=200,h(t),o("clickOption",e.options[t]))})(i)},m={class:"van-ellipsis",[e.allowHtml?"innerHTML":"textContent"]:c};return t.createVNode("li",v,[a.option?a.option(l,i):t.createVNode("div",m,null)])}))};return D(bo),at({stopMomentum:w}),t.watchEffect((()=>{const t=n?Math.floor(-u.value/e.optionHeight):e.options.findIndex((t=>t[e.fields.value]===e.value)),o=vo(e.options,t),a=-o*e.optionHeight;n&&o{if(g())return;v.move(t),v.isVertical()&&(n=!0,le(t,!0));const a=we(r+v.deltaY.value,-m()*e.optionHeight,e.optionHeight),s=b(a);s!==y.value&&o("scrollInto",e.options[s]),u.value=a;const c=Date.now();c-l>300&&(l=c,i=a)}),{target:c}),()=>t.createVNode("div",{ref:c,class:go(),onTouchstartPassive:x,onTouchend:V,onTouchcancel:V},[t.createVNode("ul",{ref:d,style:{transform:`translate3d(0, ${u.value+f()}px, 0)`,transitionDuration:`${p.value}ms`,transitionProperty:p.value?"all":"none"},class:go("wrapper"),onTransitionend:w},[N()])])}});const[wo]=Ie("picker-toolbar"),xo={title:String,cancelButtonText:String,confirmButtonText:String},Vo=["cancel","confirm","title","toolbar"],No=Object.keys(xo);var Co=t.defineComponent({name:wo,props:xo,emits:["confirm","cancel"],setup(e,{emit:o,slots:a}){const n=()=>o("cancel"),r=()=>o("confirm"),l=()=>{var o;const r=null!=(o=e.cancelButtonText)?o:uo("cancel");if(a.cancel||r)return t.createVNode("button",{type:"button",class:[co("cancel"),je],onClick:n},[a.cancel?a.cancel():r])},i=()=>{var o;const n=null!=(o=e.confirmButtonText)?o:uo("confirm");if(a.confirm||n)return t.createVNode("button",{type:"button",class:[co("confirm"),je],onClick:r},[a.confirm?a.confirm():n])};return()=>t.createVNode("div",{class:co("toolbar")},[a.toolbar?a.toolbar():[l(),a.title?a.title():e.title?t.createVNode("div",{class:[co("title"),"van-ellipsis"]},[e.title]):void 0,i()]])}});const ko=(e,o)=>{const a=t.ref(e());return t.watch(e,(e=>{e!==a.value&&(a.value=e)})),t.watch(a,(t=>{t!==e()&&o(t)})),a},So=Array.isArray,To=e=>"string"==typeof e,Bo=e=>null!==e&&"object"==typeof e,Po=/\B([A-Z])/g,Do=(e=>{const t=Object.create(null);return o=>t[o]||(t[o]=e(o))})((e=>e.replace(Po,"-$1").toLowerCase())); +/** + * @vue/shared v3.4.33 + * (c) 2018-present Yuxi (Evan) You and Vue contributors + * @license MIT + **/function Ao(e){if(So(e)){const t={};for(let o=0;o{if(e){const o=e.split(Io);o.length>1&&(t[o[0].trim()]=o[1].trim())}})),t}function Lo(e){let t="";if(To(e))t=e;else if(So(e))for(let o=0;o{e.value=[]}));return[e,t=>(o[t]||(o[t]=o=>{e.value[t]=o}),o[t])]}function Ro(e,o){if(!n||!window.IntersectionObserver)return;const a=new IntersectionObserver((e=>{o(e[0].intersectionRatio>0)}),{root:document.body}),r=()=>{e.value&&a.unobserve(e.value)};t.onDeactivated(r),t.onBeforeUnmount(r),H((()=>{e.value&&a.observe(e.value)}))}const[Ho,jo]=Ie("sticky"),Wo={zIndex:g,position:N("top"),container:Object,offsetTop:V(0),offsetBottom:V(0)};const Uo=Xe(t.defineComponent({name:Ho,props:Wo,emits:["scroll","change"],setup(e,{emit:o,slots:n}){const r=t.ref(),l=Z(r),i=t.reactive({fixed:!1,width:0,height:0,transform:0}),s=t.ref(!1),c=t.computed((()=>he("top"===e.position?e.offsetTop:e.offsetBottom))),d=t.computed((()=>{if(s.value)return;const{fixed:e,height:t,width:o}=i;return e?{width:`${o}px`,height:`${t}px`}:void 0})),u=t.computed((()=>{if(!i.fixed||s.value)return;const t=a(ve(e.zIndex),{width:`${i.width}px`,height:`${i.height}px`,[e.position]:`${c.value}px`});return i.transform&&(t.transform=`translate3d(0, ${i.transform}px, 0)`),t})),p=()=>{if(!r.value||ie(r))return;const{container:t,position:a}=e,n=P(r),l=J(window);if(i.width=n.width,i.height=n.height,"top"===a)if(t){const e=P(t),o=e.bottom-c.value-i.height;i.fixed=c.value>n.top&&e.bottom>0,i.transform=o<0?o:0}else i.fixed=c.value>n.top;else{const{clientHeight:e}=document.documentElement;if(t){const o=P(t),a=e-o.top-c.value-i.height;i.fixed=e-c.valueo.top,i.transform=a<0?-a:0}else i.fixed=e-c.value{o("scroll",{scrollTop:e,isFixed:i.fixed})})(l)};return t.watch((()=>i.fixed),(e=>o("change",e))),j("scroll",p,{target:l,passive:!0}),Ro(r,p),t.watch([se,ce],(()=>{r.value&&!ie(r)&&i.fixed&&(s.value=!0,t.nextTick((()=>{const e=P(r);i.width=e.width,i.height=e.height,s.value=!1})))})),()=>{var e;return t.createVNode("div",{ref:r,style:d.value},[t.createVNode("div",{class:jo({fixed:i.fixed&&!s.value}),style:u.value},[null==(e=n.default)?void 0:e.call(n)])])}}})),[Yo,Xo]=Ie("swipe"),qo={loop:b,width:g,height:g,vertical:Boolean,autoplay:V(0),duration:V(500),touchable:b,lazyRender:Boolean,initialSwipe:V(0),indicatorColor:String,showIndicators:b,stopPropagation:b},Go=Symbol(Yo);const Zo=Xe(t.defineComponent({name:Yo,props:qo,emits:["change","dragStart","dragEnd"],setup(e,{emit:o,slots:a}){const n=t.ref(),r=t.ref(),l=t.reactive({rect:null,width:0,height:0,offset:0,active:0,swiping:!1});let i=!1;const s=Wt(),{children:c,linkChildren:d}=I(Go),u=t.computed((()=>c.length)),p=t.computed((()=>l[e.vertical?"height":"width"])),v=t.computed((()=>e.vertical?s.deltaY.value:s.deltaX.value)),m=t.computed((()=>{if(l.rect){return(e.vertical?l.rect.height:l.rect.width)-p.value*u.value}return 0})),f=t.computed((()=>p.value?Math.ceil(Math.abs(m.value)/p.value):u.value)),h=t.computed((()=>u.value*p.value)),g=t.computed((()=>(l.active+u.value)%u.value)),b=t.computed((()=>{const t=e.vertical?"vertical":"horizontal";return s.direction.value===t})),y=t.computed((()=>{const t={transitionDuration:`${l.swiping?0:e.duration}ms`,transform:`translate${e.vertical?"Y":"X"}(${+l.offset.toFixed(2)}px)`};if(p.value){const o=e.vertical?"height":"width",a=e.vertical?"width":"height";t[o]=`${h.value}px`,t[a]=e[a]?`${e[a]}px`:""}return t})),w=(t,o=0)=>{let a=t*p.value;e.loop||(a=Math.min(a,-m.value));let n=o-a;return e.loop||(n=we(n,m.value,0)),n},x=({pace:t=0,offset:a=0,emitChange:n})=>{if(u.value<=1)return;const{active:r}=l,i=(t=>{const{active:o}=l;return t?e.loop?we(o+t,-1,u.value):we(o+t,0,f.value):o})(t),s=w(i,a);if(e.loop){if(c[0]&&s!==m.value){const e=s0;c[u.value-1].setOffset(e?-h.value:0)}}l.active=i,l.offset=s,n&&i!==r&&o("change",g.value)},V=()=>{l.swiping=!0,l.active<=-1?x({pace:u.value}):l.active>=u.value&&x({pace:-u.value})},N=()=>{V(),s.reset(),T((()=>{l.swiping=!1,x({pace:1,emitChange:!0})}))};let k;const S=()=>clearTimeout(k),B=()=>{S(),+e.autoplay>0&&u.value>1&&(k=setTimeout((()=>{N(),B()}),+e.autoplay))},P=(o=+e.initialSwipe)=>{if(!n.value)return;const a=()=>{var t,a;if(!ie(n)){const o={width:n.value.offsetWidth,height:n.value.offsetHeight};l.rect=o,l.width=+(null!=(t=e.width)?t:o.width),l.height=+(null!=(a=e.height)?a:o.height)}u.value&&-1===(o=Math.min(u.value-1,o))&&(o=u.value-1),l.active=o,l.swiping=!0,l.offset=w(o),c.forEach((e=>{e.setOffset(0)})),B()};ie(n)?t.nextTick().then(a):a()},D=()=>P(l.active);let A;const O=t=>{!e.touchable||t.touches.length>1||(s.start(t),i=!1,A=Date.now(),S(),V())},z=()=>{if(!e.touchable||!l.swiping)return;const t=Date.now()-A,a=v.value/t;if((Math.abs(a)>.25||Math.abs(v.value)>p.value/2)&&b.value){const t=e.vertical?s.offsetY.value:s.offsetX.value;let o=0;o=e.loop?t>0?v.value>0?-1:1:0:-Math[v.value>0?"ceil":"floor"](v.value/p.value),x({pace:o,emitChange:!0})}else v.value&&x({pace:0});i=!1,l.swiping=!1,o("dragEnd",{index:g.value}),B()},E=(o,a)=>{const n=a===g.value,r=n?{backgroundColor:e.indicatorColor}:void 0;return t.createVNode("i",{style:r,class:Xo("indicator",{active:n})},null)};return at({prev:()=>{V(),s.reset(),T((()=>{l.swiping=!1,x({pace:-1,emitChange:!0})}))},next:N,state:l,resize:D,swipeTo:(t,o={})=>{V(),s.reset(),T((()=>{let a;a=e.loop&&t===u.value?0===l.active?0:t:t%u.value,o.immediate?T((()=>{l.swiping=!1})):l.swiping=!1,x({pace:a-l.active,emitChange:!0})}))}}),d({size:p,props:e,count:u,activeIndicator:g}),t.watch((()=>e.initialSwipe),(e=>P(+e))),t.watch(u,(()=>P(l.active))),t.watch((()=>e.autoplay),B),t.watch([se,ce,()=>e.width,()=>e.height],D),t.watch(function(){if(!U&&(U=t.ref("visible"),C)){const e=()=>{U.value=document.hidden?"hidden":"visible"};e(),window.addEventListener("visibilitychange",e)}return U}(),(e=>{"visible"===e?B():S()})),t.onMounted(P),t.onActivated((()=>P(l.active))),Ze((()=>P(l.active))),t.onDeactivated(S),t.onBeforeUnmount(S),j("touchmove",(t=>{if(e.touchable&&l.swiping&&(s.move(t),b.value)){!e.loop&&(0===l.active&&v.value>0||l.active===u.value-1&&v.value<0)||(le(t,e.stopPropagation),x({offset:v.value}),i||(o("dragStart",{index:g.value}),i=!0))}}),{target:r}),()=>{var o;return t.createVNode("div",{ref:n,class:Xo()},[t.createVNode("div",{ref:r,style:y.value,class:Xo("track",{vertical:e.vertical}),onTouchstartPassive:O,onTouchend:z,onTouchcancel:z},[null==(o=a.default)?void 0:o.call(a)]),a.indicator?a.indicator({active:g.value,total:u.value}):e.showIndicators&&u.value>1?t.createVNode("div",{class:Xo("indicators",{vertical:e.vertical})},[Array(u.value).fill("").map(E)]):void 0])}}})),[Ko,_o]=Ie("tabs");var Jo=t.defineComponent({name:Ko,props:{count:y(Number),inited:Boolean,animated:Boolean,duration:y(g),swipeable:Boolean,lazyRender:Boolean,currentIndex:y(Number)},emits:["change"],setup(e,{emit:o,slots:a}){const n=t.ref(),r=e=>o("change",e),l=()=>{var o;const l=null==(o=a.default)?void 0:o.call(a);return e.animated||e.swipeable?t.createVNode(Zo,{ref:n,loop:!1,class:_o("track"),duration:1e3*+e.duration,touchable:e.swipeable,lazyRender:e.lazyRender,showIndicators:!1,onChange:r},{default:()=>[l]}):l},i=t=>{const o=n.value;o&&o.state.active!==t&&o.swipeTo(t,{immediate:!e.inited})};return t.watch((()=>e.currentIndex),i),t.onMounted((()=>{i(e.currentIndex)})),at({swipeRef:n}),()=>t.createVNode("div",{class:_o("content",{animated:e.animated||e.swipeable})},[l()])}});const[Qo,ea]=Ie("tabs"),ta={type:N("line"),color:String,border:Boolean,sticky:Boolean,shrink:Boolean,active:V(0),duration:V(.3),animated:Boolean,ellipsis:b,swipeable:Boolean,scrollspy:Boolean,offsetTop:V(0),background:String,lazyRender:b,showHeader:b,lineWidth:g,lineHeight:g,beforeChange:Function,swipeThreshold:V(5),titleActiveColor:String,titleInactiveColor:String},oa=Symbol(Qo);var aa=t.defineComponent({name:Qo,props:ta,emits:["change","scroll","rendered","clickTab","update:active"],setup(e,{emit:o,slots:a}){let n,r,i,s,c;const d=t.ref(),u=t.ref(),p=t.ref(),v=t.ref(),m=Mo(),f=Z(d),[h,g]=Fo(),{children:b,linkChildren:y}=I(oa),w=t.reactive({inited:!1,position:"",lineStyle:{},currentIndex:-1}),x=t.computed((()=>b.length>+e.swipeThreshold||!e.ellipsis||e.shrink)),V=t.computed((()=>({borderColor:e.color,background:e.background}))),N=(e,t)=>{var o;return null!=(o=e.name)?o:t},C=t.computed((()=>{const e=b[w.currentIndex];if(e)return N(e,w.currentIndex)})),T=t.computed((()=>he(e.offsetTop))),B=t.computed((()=>e.sticky?T.value+n:0)),D=t=>{const o=u.value,a=h.value;if(!(x.value&&o&&a&&a[w.currentIndex]))return;const n=a[w.currentIndex].$el,r=n.offsetLeft-(o.offsetWidth-n.offsetWidth)/2;s&&s(),s=function(e,t,o){let a,n=0;const r=e.scrollLeft,l=0===o?1:Math.round(1e3*o/16);let i=r;return function o(){i+=(t-r)/l,e.scrollLeft=i,++n{const o=w.inited;t.nextTick((()=>{const t=h.value;if(!t||!t[w.currentIndex]||"line"!==e.type||ie(d.value))return;const a=t[w.currentIndex].$el,{lineWidth:n,lineHeight:r}=e,i=a.offsetLeft+a.offsetWidth/2,s={width:ue(n),backgroundColor:e.color,transform:`translateX(${i}px) translateX(-50%)`};if(o&&(s.transitionDuration=`${e.duration}s`),l(r)){const e=ue(r);s.height=e,s.borderRadius=e}w.lineStyle=s}))},O=(t,a)=>{const n=(e=>{const t=e=0&&e{const o=b.find(((t,o)=>N(t,o)===e)),a=o?b.indexOf(o):0;O(a,t)},E=(t=!1)=>{if(e.scrollspy){const o=b[w.currentIndex].$el;if(o&&f.value){const a=oe(o,f.value)-B.value;r=!0,c&&c(),c=function(e,t,o,a){let n,r=J(e);const l=rt||!l&&rt?n=k(o):a&&(n=k(a))}(),function(){S(n)}}(f.value,a,t?0:+e.duration,(()=>{r=!1}))}}},L=(t,a,n)=>{const{title:r,disabled:l}=b[a],i=N(b[a],a);l||(Ye(e.beforeChange,{args:[i],done:()=>{O(a),E()}}),rt(t)),o("clickTab",{name:i,title:r,event:n,disabled:l})},$=e=>{i=e.isFixed,o("scroll",e)},M=()=>{if("line"===e.type&&b.length)return t.createVNode("div",{class:ea("line"),style:w.lineStyle},null)},F=()=>{var o,n,r;const{type:l,border:i,sticky:s}=e,c=[t.createVNode("div",{ref:s?void 0:p,class:[ea("wrap"),{[Re]:"line"===l&&i}]},[t.createVNode("div",{ref:u,role:"tablist",class:ea("nav",[l,{shrink:e.shrink,complete:x.value}]),style:V.value,"aria-orientation":"horizontal"},[null==(o=a["nav-left"])?void 0:o.call(a),b.map((e=>e.renderTitle(L))),M(),null==(n=a["nav-right"])?void 0:n.call(a)])]),null==(r=a["nav-bottom"])?void 0:r.call(a)];return s?t.createVNode("div",{ref:p},[c]):c},R=()=>{A(),t.nextTick((()=>{var e,t;D(!0),null==(t=null==(e=v.value)?void 0:e.swipeRef.value)||t.resize()}))};t.watch((()=>[e.color,e.duration,e.lineWidth,e.lineHeight]),A),t.watch(se,R),t.watch((()=>e.active),(e=>{e!==C.value&&z(e)})),t.watch((()=>b.length),(()=>{w.inited&&(z(e.active),A(),t.nextTick((()=>{D(!0)})))}));return at({resize:R,scrollTo:e=>{t.nextTick((()=>{z(e),E(!0)}))}}),t.onActivated(A),Ze(A),H((()=>{z(e.active,!0),t.nextTick((()=>{w.inited=!0,p.value&&(n=P(p.value).height),D(!0)}))})),Ro(d,A),j("scroll",(()=>{if(e.scrollspy&&!r){const e=(()=>{for(let e=0;eB.value)return 0===e?0:e-1}return b.length-1})();O(e)}}),{target:f,passive:!0}),y({id:m,props:e,setLine:A,scrollable:x,onRendered:(e,t)=>o("rendered",e,t),currentName:C,setTitleRefs:g,scrollIntoView:D}),()=>t.createVNode("div",{ref:d,class:ea([e.type])},[e.showHeader?e.sticky?t.createVNode(Uo,{container:d.value,offsetTop:T.value,onScroll:$},{default:()=>[F()]}):F():null,t.createVNode(Jo,{ref:v,count:b.length,inited:w.inited,animated:e.animated,duration:e.duration,swipeable:e.swipeable,lazyRender:e.lazyRender,currentIndex:w.currentIndex,onChange:O},{default:()=>{var e;return[null==(e=a.default)?void 0:e.call(a)]}})])}});const na=Symbol(),[ra,la]=Ie("tab"),ia=t.defineComponent({name:ra,props:{id:String,dot:Boolean,type:String,color:String,title:String,badge:g,shrink:Boolean,isActive:Boolean,disabled:Boolean,controls:String,scrollable:Boolean,activeColor:String,inactiveColor:String,showZeroBadge:b},setup(e,{slots:o}){const a=t.computed((()=>{const t={},{type:o,color:a,disabled:n,isActive:r,activeColor:l,inactiveColor:i}=e;a&&"card"===o&&(t.borderColor=a,n||(r?t.backgroundColor=a:t.color=a));const s=r?l:i;return s&&(t.color=s),t})),n=()=>{const a=t.createVNode("span",{class:la("text",{ellipsis:!e.scrollable})},[o.title?o.title():e.title]);return e.dot||l(e.badge)&&""!==e.badge?t.createVNode(dt,{dot:e.dot,content:e.badge,showZero:e.showZeroBadge},{default:()=>[a]}):a};return()=>t.createVNode("div",{id:e.id,role:"tab",class:[la([e.type,{grow:e.scrollable&&!e.shrink,shrink:e.shrink,active:e.isActive,disabled:e.disabled}])],style:a.value,tabindex:e.disabled?void 0:e.isActive?0:-1,"aria-selected":e.isActive,"aria-disabled":e.disabled||void 0,"aria-controls":e.controls},[n()])}}),[sa,ca]=Ie("swipe-item");const da=Xe(t.defineComponent({name:sa,setup(e,{slots:o}){let a;const n=t.reactive({offset:0,inited:!1,mounted:!1}),{parent:r,index:l}=D(Go);if(!r)return;const i=t.computed((()=>{const e={},{vertical:t}=r.props;return r.size.value&&(e[t?"height":"width"]=`${r.size.value}px`),n.offset&&(e.transform=`translate${t?"Y":"X"}(${n.offset}px)`),e})),s=t.computed((()=>{const{loop:e,lazyRender:t}=r.props;if(!t||a)return!0;if(!n.mounted)return!1;const o=r.activeIndicator.value,i=r.count.value-1,s=0===o&&e?i:o-1,c=o===i&&e?0:o+1;return a=l.value===o||l.value===s||l.value===c,a}));return t.onMounted((()=>{t.nextTick((()=>{n.mounted=!0}))})),at({setOffset:e=>{n.offset=e}}),()=>{var e;return t.createVNode("div",{class:ca(),style:i.value},[s.value?null==(e=o.default)?void 0:e.call(o):null])}}})),[ua,pa]=Ie("tab"),va=a({},nt,{dot:Boolean,name:g,badge:g,title:String,disabled:Boolean,titleClass:h,titleStyle:[String,Object],showZeroBadge:b});const ma=Xe(t.defineComponent({name:ua,props:va,setup(e,{slots:o}){const a=Mo(),n=t.ref(!1),r=t.getCurrentInstance(),{parent:l,index:i}=D(oa);if(!l)return;const s=()=>{var t;return null!=(t=e.name)?t:i.value},c=t.computed((()=>{const o=s()===l.currentName.value;return o&&!n.value&&(n.value=!0,l.props.lazyRender&&t.nextTick((()=>{l.onRendered(s(),e.title)}))),o})),d=t.ref(""),u=t.ref("");t.watchEffect((()=>{const{titleClass:t,titleStyle:o}=e;d.value=t?Lo(t):"",u.value=o&&"string"!=typeof o?function(e){let t="";if(!e||To(e))return t;for(const o in e){const a=e[o];(To(a)||"number"==typeof a)&&(t+=`${o.startsWith("--")?o:Do(o)}:${a};`)}return t}(Ao(o)):o}));const p=t.ref(!c.value);return t.watch(c,(e=>{e?p.value=!1:T((()=>{p.value=!0}))})),t.watch((()=>e.title),(()=>{l.setLine(),l.scrollIntoView()})),t.provide(na,c),at({id:a,renderTitle:n=>t.createVNode(ia,t.mergeProps({key:a,id:`${l.id}-${i.value}`,ref:l.setTitleRefs(i.value),style:u.value,class:d.value,isActive:c.value,controls:a,scrollable:l.scrollable.value,activeColor:l.props.titleActiveColor,inactiveColor:l.props.titleInactiveColor,onClick:e=>n(r.proxy,i.value,e)},v(l.props,["type","color","shrink"]),v(e,["dot","badge","title","disabled","showZeroBadge"])),{title:o.title})}),()=>{var e;const r=`${l.id}-${i.value}`,{animated:s,swipeable:d,scrollspy:u,lazyRender:v}=l.props;if(!o.default&&!s)return;const m=u||c.value;if(s||d)return t.createVNode(da,{id:a,role:"tabpanel",class:pa("panel-wrapper",{inactive:p.value}),tabindex:c.value?0:-1,"aria-hidden":!c.value,"aria-labelledby":r},{default:()=>{var e;return[t.createVNode("div",{class:pa("panel")},[null==(e=o.default)?void 0:e.call(o)])]}});const f=n.value||u||!v?null==(e=o.default)?void 0:e.call(o):null;return t.withDirectives(t.createVNode("div",{id:a,role:"tabpanel",class:pa("panel"),tabindex:m?0:-1,"aria-labelledby":r},[f]),[[t.vShow,m]])}}})),fa=Xe(aa),[ha,ga]=Ie("picker-group"),ba=Symbol(ha),ya=a({tabs:w(),activeTab:V(0),nextStepText:String,showToolbar:b},xo);var wa=t.defineComponent({name:ha,props:ya,emits:["confirm","cancel","update:activeTab"],setup(e,{emit:o,slots:a}){const n=ko((()=>e.activeTab),(e=>o("update:activeTab",e))),{children:r,linkChildren:l}=I(ba);l();const i=()=>+n.value{i()?n.value=+n.value+1:o("confirm",r.map((e=>e.confirm())))},c=()=>o("cancel");return()=>{var o,r;let l=null==(r=null==(o=a.default)?void 0:o.call(a))?void 0:r.filter((e=>e.type!==t.Comment)).map((e=>e.type===t.Fragment?e.children:e));l&&(l=l.reduce(((e,t)=>e.concat(t)),[]));const d=i()?e.nextStepText:e.confirmButtonText;return t.createVNode("div",{class:ga()},[e.showToolbar?t.createVNode(Co,{title:e.title,cancelButtonText:e.cancelButtonText,confirmButtonText:d,onConfirm:s,onCancel:c},v(a,Vo)):null,t.createVNode(fa,{active:n.value,"onUpdate:active":e=>n.value=e,class:ga("tabs"),shrink:!0,animated:!0,lazyRender:!1},{default:()=>[e.tabs.map(((e,o)=>t.createVNode(ma,{title:e,titleClass:ga("tab-title")},{default:()=>[null==l?void 0:l[o]]})))]})])}}});const xa=a({loading:Boolean,readonly:Boolean,allowHtml:Boolean,optionHeight:V(44),showToolbar:b,swipeDuration:V(1e3),visibleOptionNum:V(6)},xo),Va=a({},xa,{columns:w(),modelValue:w(),toolbarPosition:N("top"),columnsFieldNames:Object});var Na=t.defineComponent({name:so,props:Va,emits:["confirm","cancel","change","scrollInto","clickOption","update:modelValue"],setup(e,{emit:o,slots:n}){const r=t.ref(),i=t.ref(e.modelValue.slice(0)),{parent:s}=D(ba),{children:c,linkChildren:d}=I(bo);d();const u=t.computed((()=>function(e){return a({text:"text",value:"value",children:"children"},e)}(e.columnsFieldNames))),p=t.computed((()=>he(e.optionHeight))),f=t.computed((()=>function(e,t){const o=e[0];if(o){if(Array.isArray(o))return"multiple";if(t.children in o)return"cascade"}return"default"}(e.columns,u.value))),h=t.computed((()=>{const{columns:t}=e;switch(f.value){case"multiple":return t;case"cascade":return function(e,t,o){const a=[];let n={[t.children]:e},r=0;for(;n&&n[t.children];){const e=n[t.children],i=o.value[r];n=l(i)?fo(e,i,t):void 0,!n&&e.length&&(n=fo(e,po(e)[t.value],t)),r++,a.push(e)}return a}(t,u.value,i);default:return[t]}})),g=t.computed((()=>h.value.some((e=>e.length)))),b=t.computed((()=>h.value.map(((e,t)=>fo(e,i.value[t],u.value))))),y=t.computed((()=>h.value.map(((e,t)=>e.findIndex((e=>e[u.value.value]===i.value[t])))))),w=(e,t)=>{if(i.value[e]!==t){const o=i.value.slice(0);o[e]=t,i.value=o}},x=()=>({selectedValues:i.value.slice(0),selectedOptions:b.value,selectedIndexes:y.value}),V=()=>{c.forEach((e=>e.stopMomentum()));const e=x();return t.nextTick((()=>{o("confirm",e)})),e},N=()=>o("cancel",x()),C=()=>h.value.map(((r,l)=>t.createVNode(yo,{value:i.value[l],fields:u.value,options:r,readonly:e.readonly,allowHtml:e.allowHtml,optionHeight:p.value,swipeDuration:e.swipeDuration,visibleOptionNum:e.visibleOptionNum,onChange:e=>((e,n)=>{w(n,e),"cascade"===f.value&&i.value.forEach(((e,t)=>{const o=h.value[t];mo(o,e,u.value)||w(t,o.length?o[0][u.value.value]:void 0)})),t.nextTick((()=>{o("change",a({columnIndex:n},x()))}))})(e,l),onClickOption:e=>((e,t)=>{const n={columnIndex:t,currentOption:e};o("clickOption",a(x(),n)),o("scrollInto",n)})(e,l),onScrollInto:e=>{o("scrollInto",{currentOption:e,columnIndex:l})}},{option:n.option}))),k=e=>{if(g.value){const o={height:`${p.value}px`},a={backgroundSize:`100% ${(e-p.value)/2}px`};return[t.createVNode("div",{class:co("mask"),style:a},null),t.createVNode("div",{class:[He,co("frame")],style:o},null)]}},S=()=>{const o=p.value*+e.visibleOptionNum,a={height:`${o}px`};return t.createVNode("div",{ref:r,class:co("columns"),style:a},[C(),k(o)])},T=()=>{if(e.showToolbar&&!s)return t.createVNode(Co,t.mergeProps(v(e,No),{onConfirm:V,onCancel:N}),v(n,Vo))};let B;t.watch(h,(e=>{e.forEach(((e,t)=>{e.length&&!mo(e,i.value[t],u.value)&&w(t,po(e)[u.value.value])}))}),{immediate:!0}),t.watch((()=>e.modelValue),(e=>{m(e,i.value)||m(e,B)||(i.value=e.slice(0),B=e.slice(0))}),{deep:!0}),t.watch(i,(t=>{m(t,e.modelValue)||(B=t.slice(0),o("update:modelValue",B))}),{immediate:!0}),j("touchmove",le,{target:r});return at({confirm:V,getSelectedOptions:()=>b.value}),()=>{var o,a;return t.createVNode("div",{class:co()},["top"===e.toolbarPosition?T():null,e.loading?t.createVNode(Bt,{class:co("loading")},null):null,null==(o=n["columns-top"])?void 0:o.call(n),S(),null==(a=n["columns-bottom"])?void 0:a.call(n),"bottom"===e.toolbarPosition?T():null])}}});const Ca="000000",ka=["title","cancel","confirm","toolbar","columns-top","columns-bottom"],Sa=["title","loading","readonly","optionHeight","swipeDuration","visibleOptionNum","cancelButtonText","confirmButtonText"],Ta=(e="",t=Ca,o=void 0)=>({text:e,value:t,children:o});function Ba({areaList:e,columnsNum:t,columnsPlaceholder:o}){const{city_list:a={},county_list:n={},province_list:r={}}=e,l=+t>1,i=+t>2,s=new Map;Object.keys(r).forEach((e=>{s.set(e.slice(0,2),Ta(r[e],e,(()=>{if(l)return o.length>1?[Ta(o[1],Ca,i?[]:void 0)]:[]})()))}));const c=new Map;if(l){const e=()=>{if(i)return o.length>2?[Ta(o[2])]:[]};Object.keys(a).forEach((t=>{const o=Ta(a[t],t,e());c.set(t.slice(0,4),o);const n=s.get(t.slice(0,2));n&&n.children.push(o)}))}i&&Object.keys(n).forEach((e=>{const t=c.get(e.slice(0,4));t&&t.children.push(Ta(n[e],e))}));const d=Array.from(s.values());if(o.length){const e=i?[Ta(o[2])]:void 0,t=l?[Ta(o[1],Ca,e)]:void 0;d.unshift(Ta(o[0],Ca,t))}return d}const Pa=Xe(Na),[Da,Aa]=Ie("area"),Oa=a({},v(xa,Sa),{modelValue:String,columnsNum:V(3),columnsPlaceholder:w(),areaList:{type:Object,default:()=>({})}});const Ia=Xe(t.defineComponent({name:Da,props:Oa,emits:["change","confirm","cancel","update:modelValue"],setup(e,{emit:o,slots:a}){const n=t.ref([]),r=t.ref(),l=t.computed((()=>Ba(e))),i=(...e)=>o("change",...e),s=(...e)=>o("cancel",...e),c=(...e)=>o("confirm",...e);return t.watch(n,(t=>{const a=t.length?t[t.length-1]:"";a&&a!==e.modelValue&&o("update:modelValue",a)}),{deep:!0}),t.watch((()=>e.modelValue),(t=>{if(t){t!==(n.value.length?n.value[n.value.length-1]:"")&&(n.value=[`${t.slice(0,2)}0000`,`${t.slice(0,4)}00`,t].slice(0,+e.columnsNum))}else n.value=[]}),{immediate:!0}),at({confirm:()=>{var e;return null==(e=r.value)?void 0:e.confirm()},getSelectedOptions:()=>{var e;return(null==(e=r.value)?void 0:e.getSelectedOptions())||[]}}),()=>t.createVNode(Pa,t.mergeProps({ref:r,modelValue:n.value,"onUpdate:modelValue":e=>n.value=e,class:Aa(),columns:l.value,onChange:i,onCancel:s,onConfirm:c},v(e,Sa)),v(a,ka))}})),[za,Ea]=Ie("cell"),La={tag:N("div"),icon:String,size:String,title:g,value:g,label:g,center:Boolean,isLink:Boolean,border:b,iconPrefix:String,valueClass:h,labelClass:h,titleClass:h,titleStyle:null,arrowDirection:String,required:{type:[Boolean,String],default:null},clickable:{type:Boolean,default:null}},$a=a({},La,nt);const Ma=Xe(t.defineComponent({name:za,props:$a,setup(e,{slots:o}){const a=lt(),n=()=>{if(o.label||l(e.label))return t.createVNode("div",{class:[Ea("label"),e.labelClass]},[o.label?o.label():e.label])},r=()=>{var a;if(o.title||l(e.title)){const r=null==(a=o.title)?void 0:a.call(o);if(Array.isArray(r)&&0===r.length)return;return t.createVNode("div",{class:[Ea("title"),e.titleClass],style:e.titleStyle},[r||t.createVNode("span",null,[e.title]),n()])}},i=()=>{const a=o.value||o.default;if(a||l(e.value))return t.createVNode("div",{class:[Ea("value"),e.valueClass]},[a?a():t.createVNode("span",null,[e.value])])},s=()=>{if(o["right-icon"])return o["right-icon"]();if(e.isLink){const o=e.arrowDirection&&"right"!==e.arrowDirection?`arrow-${e.arrowDirection}`:"arrow";return t.createVNode(xt,{name:o,class:Ea("right-icon")},null)}};return()=>{var n;const{tag:l,size:c,center:d,border:u,isLink:p,required:v}=e,m=null!=(n=e.clickable)?n:p,f={center:d,required:!!v,clickable:m,borderless:!u};return c&&(f[c]=!!c),t.createVNode(l,{class:Ea(f),role:m?"button":void 0,tabindex:m?0:void 0,onClick:a},{default:()=>{var a;return[o.icon?o.icon():e.icon?t.createVNode(xt,{name:e.icon,class:Ea("left-icon"),classPrefix:e.iconPrefix},null):void 0,r(),i(),s(),null==(a=o.extra)?void 0:a.call(o)]}})}}})),[Fa,Ra]=Ie("form"),Ha={colon:Boolean,disabled:Boolean,readonly:Boolean,required:[Boolean,String],showError:Boolean,labelWidth:g,labelAlign:String,inputAlign:String,scrollToError:Boolean,scrollToErrorPosition:String,validateFirst:Boolean,submitOnEnter:b,showErrorMessage:b,errorMessageAlign:String,validateTrigger:{type:[String,Array],default:"onBlur"}};const ja=Xe(t.defineComponent({name:Fa,props:Ha,emits:["submit","failed"],setup(e,{emit:o,slots:a}){const{children:n,linkChildren:r}=I(We),l=e=>e?n.filter((t=>e.includes(t.name))):n,i=t=>{return"string"==typeof t?(e=>{const t=n.find((t=>t.name===e));return t?new Promise(((e,o)=>{t.validate().then((t=>{t?o(t):e()}))})):Promise.reject()})(t):e.validateFirst?(o=t,new Promise(((e,t)=>{const a=[];l(o).reduce(((e,t)=>e.then((()=>{if(!a.length)return t.validate().then((e=>{e&&a.push(e)}))}))),Promise.resolve()).then((()=>{a.length?t(a):e()}))}))):(e=>new Promise(((t,o)=>{const a=l(e);Promise.all(a.map((e=>e.validate()))).then((e=>{(e=e.filter(Boolean)).length?o(e):t()}))})))(t);var o},s=(e,t)=>{n.some((o=>o.name===e&&(o.$el.scrollIntoView(t),!0)))},c=()=>n.reduce(((e,t)=>(void 0!==t.name&&(e[t.name]=t.formValue.value),e)),{}),d=()=>{const t=c();i().then((()=>o("submit",t))).catch((a=>{o("failed",{values:t,errors:a});const{scrollToError:n,scrollToErrorPosition:r}=e;n&&a[0].name&&s(a[0].name,r?{block:r}:void 0)}))},u=e=>{le(e),d()};return r({props:e}),at({submit:d,validate:i,getValues:c,scrollToField:s,resetValidation:e=>{"string"==typeof e&&(e=[e]);l(e).forEach((e=>{e.resetValidation()}))},getValidationStatus:()=>n.reduce(((e,t)=>(e[t.name]=t.getValidationStatus(),e)),{})}),()=>{var e;return t.createVNode("form",{class:Ra(),onSubmit:u},[null==(e=a.default)?void 0:e.call(a)])}}}));function Wa(e){return Array.isArray(e)?!e.length:0!==e&&!e}function Ua(e,t){const{message:o}=t;return i(o)?o(e,t):o||""}function Ya({target:e}){e.composing=!0}function Xa({target:e}){e.composing&&(e.composing=!1,e.dispatchEvent(new Event("input")))}function qa(e){return[...e].length}function Ga(e,t){return[...e].slice(0,t).join("")}const[Za,Ka]=Ie("field"),_a={id:String,name:String,leftIcon:String,rightIcon:String,autofocus:Boolean,clearable:Boolean,maxlength:g,formatter:Function,clearIcon:N("clear"),modelValue:V(""),inputAlign:String,placeholder:String,autocomplete:String,autocapitalize:String,autocorrect:String,errorMessage:String,enterkeyhint:String,clearTrigger:N("focus"),formatTrigger:N("onChange"),spellcheck:{type:Boolean,default:null},error:{type:Boolean,default:null},disabled:{type:Boolean,default:null},readonly:{type:Boolean,default:null}},Ja=a({},La,_a,{rows:g,type:N("text"),rules:Array,autosize:[Boolean,Object],labelWidth:g,labelClass:h,labelAlign:String,showWordLimit:Boolean,errorMessageAlign:String,colon:{type:Boolean,default:null}});const Qa=Xe(t.defineComponent({name:Za,props:Ja,emits:["blur","focus","clear","keypress","clickInput","endValidate","startValidate","clickLeftIcon","clickRightIcon","update:modelValue"],setup(e,{emit:o,slots:a}){const n=Mo(),i=t.reactive({status:"unvalidated",focused:!1,validateMessage:""}),c=t.ref(),d=t.ref(),u=t.ref(),{parent:p}=D(We),v=()=>{var t;return String(null!=(t=e.modelValue)?t:"")},m=t=>l(e[t])?e[t]:p&&l(p.props[t])?p.props[t]:void 0,h=t.computed((()=>{const t=m("readonly");if(e.clearable&&!t){const t=""!==v(),o="always"===e.clearTrigger||"focus"===e.clearTrigger&&i.focused;return t&&o}return!1})),g=t.computed((()=>u.value&&a.input?u.value():e.modelValue)),b=t.computed((()=>{var t;const o=m("required");return"auto"===o?null==(t=e.rules)?void 0:t.some((e=>e.required)):o})),y=e=>e.reduce(((e,t)=>e.then((()=>{if("failed"===i.status)return;let{value:e}=g;if(t.formatter&&(e=t.formatter(e,t)),!function(e,t){if(Wa(e)){if(t.required)return!1;if(!1===t.validateEmpty)return!0}return!(t.pattern&&!t.pattern.test(String(e)))}(e,t))return i.status="failed",void(i.validateMessage=Ua(e,t));if(t.validator){if(Wa(e)&&!1===t.validateEmpty)return;return function(e,t){return new Promise((o=>{const a=t.validator(e,t);s(a)?a.then(o):o(a)}))}(e,t).then((o=>{o&&"string"==typeof o?(i.status="failed",i.validateMessage=o):!1===o&&(i.status="failed",i.validateMessage=Ua(e,t))}))}}))),Promise.resolve()),w=()=>{i.status="unvalidated",i.validateMessage=""},x=()=>o("endValidate",{status:i.status,message:i.validateMessage}),V=(t=e.rules)=>new Promise((a=>{w(),t?(o("startValidate"),y(t).then((()=>{"failed"===i.status?(a({name:e.name,message:i.validateMessage}),x()):(i.status="passed",a(),x())}))):a()})),N=t=>{if(p&&e.rules){const{validateTrigger:o}=p.props,a=f(o).includes(t),n=e.rules.filter((e=>e.trigger?f(e.trigger).includes(t):a));n.length&&V(n)}},C=(t,a="onChange")=>{const n=t;t=(t=>{var o;const{maxlength:a}=e;if(l(a)&&qa(t)>+a){const e=v();if(e&&qa(e)===+a)return e;const n=null==(o=c.value)?void 0:o.selectionEnd;if(i.focused&&n){const e=[...t],o=e.length-+a;return e.splice(n-o,o),e.join("")}return Ga(t,+a)}return t})(t);const r=qa(n)-qa(t);if("number"===e.type||"digit"===e.type){const o="number"===e.type;t=Ve(t,o,o)}let s=0;if(e.formatter&&a===e.formatTrigger){const{formatter:o,maxlength:a}=e;if(t=o(t),l(a)&&qa(t)>+a&&(t=Ga(t,+a)),c.value&&i.focused){const{selectionEnd:e}=c.value,t=Ga(n,e);s=qa(o(t))-qa(t)}}if(c.value&&c.value.value!==t)if(i.focused){let{selectionStart:e,selectionEnd:o}=c.value;if(c.value.value=t,l(e)&&l(o)){const a=qa(t);r?(e-=r,o-=r):s&&(e+=s,o+=s),c.value.setSelectionRange(Math.min(e,a),Math.min(o,a))}}else c.value.value=t;t!==e.modelValue&&o("update:modelValue",t)},k=e=>{e.target.composing||C(e.target.value)},S=()=>{var e;return null==(e=c.value)?void 0:e.blur()},T=()=>{var e;return null==(e=c.value)?void 0:e.focus()},B=()=>{const t=c.value;"textarea"===e.type&&e.autosize&&t&&function(e,t){const o=ee();e.style.height="auto";let a=e.scrollHeight;if(r(t)){const{maxHeight:e,minHeight:o}=t;void 0!==e&&(a=Math.min(a,e)),void 0!==o&&(a=Math.max(a,o))}a&&(e.style.height=`${a}px`,te(o))}(t,e.autosize)},P=e=>{i.focused=!0,o("focus",e),t.nextTick(B),m("readonly")&&S()},A=e=>{i.focused=!1,C(v(),"onBlur"),o("blur",e),m("readonly")||(N("onBlur"),t.nextTick(B),ne())},O=e=>o("clickInput",e),I=e=>o("clickLeftIcon",e),z=e=>o("clickRightIcon",e),E=t.computed((()=>"boolean"==typeof e.error?e.error:!(!p||!p.props.showError||"failed"!==i.status)||void 0)),L=t.computed((()=>{const e=m("labelWidth"),t=m("labelAlign");if(e&&"top"!==t)return{width:ue(e)}})),$=t=>{if(13===t.keyCode){p&&p.props.submitOnEnter||"textarea"===e.type||le(t),"search"===e.type&&S()}o("keypress",t)},M=()=>e.id||`${n}-input`,F=()=>{const o=Ka("control",[m("inputAlign"),{error:E.value,custom:!!a.input,"min-height":"textarea"===e.type&&!e.autosize}]);if(a.input)return t.createVNode("div",{class:o,onClick:O},[a.input()]);const r={id:M(),ref:c,name:e.name,rows:void 0!==e.rows?+e.rows:void 0,class:o,disabled:m("disabled"),readonly:m("readonly"),autofocus:e.autofocus,placeholder:e.placeholder,autocomplete:e.autocomplete,autocapitalize:e.autocapitalize,autocorrect:e.autocorrect,enterkeyhint:e.enterkeyhint,spellcheck:e.spellcheck,"aria-labelledby":e.label?`${n}-label`:void 0,onBlur:A,onFocus:P,onInput:k,onClick:O,onChange:Xa,onKeypress:$,onCompositionend:Xa,onCompositionstart:Ya};return"textarea"===e.type?t.createVNode("textarea",r,null):t.createVNode("input",t.mergeProps("number"===(l=e.type)?{type:"text",inputmode:"decimal"}:"digit"===l?{type:"tel",inputmode:"numeric"}:{type:l},r),null);var l},R=()=>{const o=a["right-icon"];if(e.rightIcon||o)return t.createVNode("div",{class:Ka("right-icon"),onClick:z},[o?o():t.createVNode(xt,{name:e.rightIcon,classPrefix:e.iconPrefix},null)])},H=()=>{if(e.showWordLimit&&e.maxlength){const o=qa(v());return t.createVNode("div",{class:Ka("word-limit")},[t.createVNode("span",{class:Ka("word-num")},[o]),t.createTextVNode("/"),e.maxlength])}},W=()=>{if(p&&!1===p.props.showErrorMessage)return;const o=e.errorMessage||i.validateMessage;if(o){const e=a["error-message"],n=m("errorMessageAlign");return t.createVNode("div",{class:Ka("error-message",n)},[e?e({message:o}):o])}},U=()=>[t.createVNode("div",{class:Ka("body")},[F(),h.value&&t.createVNode(xt,{ref:d,name:e.clearIcon,class:Ka("clear")},null),R(),a.button&&t.createVNode("div",{class:Ka("button")},[a.button()])]),H(),W()];return at({blur:S,focus:T,validate:V,formValue:g,resetValidation:w,getValidationStatus:()=>i.status}),t.provide(K,{customValue:u,resetValidation:w,validateWithTrigger:N}),t.watch((()=>e.modelValue),(()=>{C(v()),w(),N("onChange"),t.nextTick(B)})),t.onMounted((()=>{C(v(),e.formatTrigger),t.nextTick(B)})),j("touchstart",(e=>{le(e),o("update:modelValue",""),o("clear",e)}),{target:t.computed((()=>{var e;return null==(e=d.value)?void 0:e.$el}))}),()=>{const o=m("disabled"),r=m("labelAlign"),l=(()=>{const o=a["left-icon"];if(e.leftIcon||o)return t.createVNode("div",{class:Ka("left-icon"),onClick:I},[o?o():t.createVNode(xt,{name:e.leftIcon,classPrefix:e.iconPrefix},null)])})();return t.createVNode(Ma,{size:e.size,class:Ka({error:E.value,disabled:o,[`label-${r}`]:r}),center:e.center,border:e.border,isLink:e.isLink,clickable:e.clickable,titleStyle:L.value,valueClass:Ka("value"),titleClass:[Ka("label",[r,{required:b.value}]),e.labelClass],arrowDirection:e.arrowDirection},{icon:l&&"top"!==r?()=>l:null,title:()=>{const o=(()=>{const o=m("labelWidth"),r=m("labelAlign"),l=m("colon")?":":"";return a.label?[a.label(),l]:e.label?t.createVNode("label",{id:`${n}-label`,for:a.input?void 0:M(),onClick:e=>{le(e),T()},style:"top"===r&&o?{width:ue(o)}:void 0},[e.label+l]):void 0})();return"top"===r?[l,o].filter(Boolean):o||[]},value:U,extra:a.extra})}}}));let en=0;const[tn,on]=Ie("toast"),an=["show","overlay","teleport","transition","overlayClass","overlayStyle","closeOnClickOverlay","zIndex"],nn={icon:String,show:Boolean,type:N("text"),overlay:Boolean,message:g,iconSize:g,duration:x(2e3),position:N("middle"),teleport:[String,Object],wordBreak:String,className:h,iconPrefix:String,transition:N("van-fade"),loadingType:String,forbidClick:Boolean,overlayClass:h,overlayStyle:Object,closeOnClick:Boolean,closeOnClickOverlay:Boolean,zIndex:g};var rn=t.defineComponent({name:tn,props:nn,emits:["update:show"],setup(e,{emit:o,slots:a}){let n,r=!1;const i=()=>{const t=e.show&&e.forbidClick;r!==t&&(r=t,r?(en||document.body.classList.add("van-toast--unclickable"),en++):en&&(en--,en||document.body.classList.remove("van-toast--unclickable")))},s=e=>o("update:show",e),c=()=>{e.closeOnClick&&s(!1)},d=()=>clearTimeout(n),u=()=>{const{icon:o,type:a,iconSize:n,iconPrefix:r,loadingType:l}=e;return o||"success"===a||"fail"===a?t.createVNode(xt,{name:o||a,size:n,class:on("icon"),classPrefix:r},null):"loading"===a?t.createVNode(Bt,{class:on("loading"),size:n,type:l},null):void 0},p=()=>{const{type:o,message:n}=e;return a.message?t.createVNode("div",{class:on("text")},[a.message()]):l(n)&&""!==n?"html"===o?t.createVNode("div",{key:0,class:on("text"),innerHTML:String(n)},null):t.createVNode("div",{class:on("text")},[n]):void 0};return t.watch((()=>[e.show,e.forbidClick]),i),t.watch((()=>[e.show,e.type,e.message,e.duration]),(()=>{d(),e.show&&e.duration>0&&(n=setTimeout((()=>{s(!1)}),e.duration))})),t.onMounted(i),t.onUnmounted(i),()=>t.createVNode(oo,t.mergeProps({class:[on([e.position,"normal"===e.wordBreak?"break-normal":e.wordBreak,{[e.type]:!e.icon}]),e.className],lockScroll:!1,onClick:c,onClosed:d,"onUpdate:show":s},v(e,an)),{default:()=>[u(),p()]})}});function ln(){const e=t.reactive({show:!1}),o=t=>{e.show=t},n=t=>{a(e,t,{transitionAppear:!0}),o(!0)},r=()=>o(!1);return at({open:n,close:r,toggle:o}),{open:n,close:r,state:e,toggle:o}}function sn(e){const o=t.createApp(e),a=document.createElement("div");return document.body.appendChild(a),{instance:o.mount(a),unmount(){o.unmount(),document.body.removeChild(a)}}}const cn={icon:"",type:"text",message:"",className:"",overlay:!1,onClose:void 0,onOpened:void 0,duration:2e3,teleport:"body",iconSize:void 0,iconPrefix:void 0,position:"middle",transition:"van-fade",forbidClick:!1,loadingType:void 0,overlayClass:"",overlayStyle:void 0,closeOnClick:!1,closeOnClickOverlay:!1};let dn=[],un=!1,pn=a({},cn);const vn=new Map;function mn(e){return r(e)?e:{message:e}}function fn(){if(!dn.length||un){const e=function(){const{instance:e,unmount:o}=sn({setup(){const a=t.ref(""),{open:n,state:r,close:l,toggle:i}=ln(),s=()=>{un&&(dn=dn.filter((t=>t!==e)),o())};return t.watch(a,(e=>{r.message=e})),t.getCurrentInstance().render=()=>{const e={onClosed:s,"onUpdate:show":i};return t.createVNode(rn,t.mergeProps(r,e),null)},{open:n,close:l,message:a}}});return e}();dn.push(e)}return dn[dn.length-1]}function hn(e={}){if(!n)return{};const t=fn(),o=mn(e);return t.open(a({},pn,vn.get(o.type||pn.type),o)),t}const gn=e=>t=>hn(a({type:e},mn(t))),bn=gn("loading"),yn=gn("success"),wn=gn("fail");const xn=Xe(rn),[Vn,Nn]=Ie("switch"),Cn={size:g,loading:Boolean,disabled:Boolean,modelValue:h,activeColor:String,inactiveColor:String,activeValue:{type:h,default:!0},inactiveValue:{type:h,default:!1}};const kn=Xe(t.defineComponent({name:Vn,props:Cn,emits:["change","update:modelValue"],setup(e,{emit:o,slots:a}){const n=()=>e.modelValue===e.activeValue,r=()=>{if(!e.disabled&&!e.loading){const t=n()?e.inactiveValue:e.activeValue;o("update:modelValue",t),o("change",t)}},l=()=>{if(e.loading){const o=n()?e.activeColor:e.inactiveColor;return t.createVNode(Bt,{class:Nn("loading"),color:o},null)}if(a.node)return a.node()};return _((()=>e.modelValue)),()=>{var o;const{size:i,loading:s,disabled:c,activeColor:d,inactiveColor:u}=e,p=n(),v={fontSize:ue(i),backgroundColor:p?d:u};return t.createVNode("div",{role:"switch",class:Nn({on:p,loading:s,disabled:c}),style:v,tabindex:c?void 0:0,"aria-checked":p,onClick:r},[t.createVNode("div",{class:Nn("node")},[l()]),null==(o=a.background)?void 0:o.call(a)])}}})),[Sn,Tn]=Ie("address-edit-detail"),Bn=Ie("address-edit")[2];var Pn=t.defineComponent({name:Sn,props:{show:Boolean,rows:g,value:String,rules:Array,focused:Boolean,maxlength:g,searchResult:Array,showSearchResult:Boolean},emits:["blur","focus","input","selectSearch"],setup(e,{emit:o}){const a=t.ref(),n=()=>e.focused&&e.searchResult&&e.showSearchResult,r=()=>{if(!n())return;const{searchResult:a}=e;return a.map((e=>t.createVNode(Ma,{clickable:!0,key:(e.name||"")+(e.address||""),icon:"location-o",title:e.name,label:e.address,class:Tn("search-item"),border:!1,onClick:()=>(e=>{o("selectSearch",e),o("input",`${e.address||""} ${e.name||""}`.trim())})(e)},null)))},l=e=>o("blur",e),i=e=>o("focus",e),s=e=>o("input",e);return()=>{if(e.show)return t.createVNode(t.Fragment,null,[t.createVNode(Qa,{autosize:!0,clearable:!0,ref:a,class:Tn(),rows:e.rows,type:"textarea",rules:e.rules,label:Bn("addressDetail"),border:!n(),maxlength:e.maxlength,modelValue:e.value,placeholder:Bn("addressDetail"),onBlur:l,onFocus:i,"onUpdate:modelValue":s},null),r()])}}});const[Dn,An,On]=Ie("address-edit"),In={name:"",tel:"",city:"",county:"",country:"",province:"",areaCode:"",isDefault:!1,addressDetail:""},zn={areaList:Object,isSaving:Boolean,isDeleting:Boolean,validator:Function,showArea:b,showDetail:b,showDelete:Boolean,disableArea:Boolean,searchResult:Array,telMaxlength:g,showSetDefault:Boolean,saveButtonText:String,areaPlaceholder:String,deleteButtonText:String,showSearchResult:Boolean,detailRows:V(1),detailMaxlength:V(200),areaColumnsPlaceholder:w(),addressInfo:{type:Object,default:()=>a({},In)},telValidator:{type:Function,default:d}};const En=Xe(t.defineComponent({name:Dn,props:zn,emits:["save","focus","change","delete","clickArea","changeArea","changeDetail","selectSearch","changeDefault"],setup(e,{emit:o,slots:n}){const l=t.ref(),i=t.reactive({}),s=t.ref(!1),c=t.ref(!1),d=t.computed((()=>r(e.areaList)&&Object.keys(e.areaList).length)),u=t.computed((()=>{const{province:e,city:t,county:o,areaCode:a}=i;if(a){const a=[e,t,o];return e&&e===t&&a.splice(1,1),a.filter(Boolean).join("/")}return""})),p=t.computed((()=>{var t;return(null==(t=e.searchResult)?void 0:t.length)&&c.value})),v=e=>{c.value="addressDetail"===e,o("focus",e)},m=(e,t)=>{o("change",{key:e,value:t})},f=t.computed((()=>{const{validator:t,telValidator:o}=e,a=(e,o)=>({validator:a=>{if(t){const o=t(e,a);if(o)return o}return!!a||o}});return{name:[a("name",On("nameEmpty"))],tel:[a("tel",On("telInvalid")),{validator:o,message:On("telInvalid")}],areaCode:[a("areaCode",On("areaEmpty"))],addressDetail:[a("addressDetail",On("addressEmpty"))]}})),h=()=>o("save",i),g=e=>{i.addressDetail=e,o("changeDetail",e)},b=e=>{i.province=e[0].text,i.city=e[1].text,i.county=e[2].text},y=({selectedValues:e,selectedOptions:t})=>{e.some((e=>e===Ca))?hn(On("areaEmpty")):(s.value=!1,b(t),o("changeArea",t))},w=()=>o("delete",i),x=()=>{setTimeout((()=>{c.value=!1}))},V=()=>{if(e.showSetDefault){const e={"right-icon":()=>t.createVNode(kn,{modelValue:i.isDefault,"onUpdate:modelValue":e=>i.isDefault=e,onChange:e=>o("changeDefault",e)},null)};return t.withDirectives(t.createVNode(Ma,{center:!0,border:!1,title:On("defaultAddress"),class:An("default")},e),[[t.vShow,!p.value]])}};return at({setAreaCode:e=>{i.areaCode=e||""},setAddressDetail:e=>{i.addressDetail=e}}),t.watch((()=>e.addressInfo),(e=>{a(i,In,e),t.nextTick((()=>{var e;const t=null==(e=l.value)?void 0:e.getSelectedOptions();t&&t.every((e=>e&&e.value!==Ca))&&b(t)}))}),{deep:!0,immediate:!0}),()=>{const{disableArea:a}=e;return t.createVNode(ja,{class:An(),onSubmit:h},{default:()=>{var r;return[t.createVNode("div",{class:An("fields")},[t.createVNode(Qa,{modelValue:i.name,"onUpdate:modelValue":[e=>i.name=e,e=>m("name",e)],clearable:!0,label:On("name"),rules:f.value.name,placeholder:On("name"),onFocus:()=>v("name")},null),t.createVNode(Qa,{modelValue:i.tel,"onUpdate:modelValue":[e=>i.tel=e,e=>m("tel",e)],clearable:!0,type:"tel",label:On("tel"),rules:f.value.tel,maxlength:e.telMaxlength,placeholder:On("tel"),onFocus:()=>v("tel")},null),t.withDirectives(t.createVNode(Qa,{readonly:!0,label:On("area"),"is-link":!a,modelValue:u.value,rules:e.showArea?f.value.areaCode:void 0,placeholder:e.areaPlaceholder||On("area"),onFocus:()=>v("areaCode"),onClick:()=>{o("clickArea"),s.value=!a}},null),[[t.vShow,e.showArea]]),t.createVNode(Pn,{show:e.showDetail,rows:e.detailRows,rules:f.value.addressDetail,value:i.addressDetail,focused:c.value,maxlength:e.detailMaxlength,searchResult:e.searchResult,showSearchResult:e.showSearchResult,onBlur:x,onFocus:()=>v("addressDetail"),onInput:g,onSelectSearch:e=>o("selectSearch",e)},null),null==(r=n.default)?void 0:r.call(n)]),V(),t.withDirectives(t.createVNode("div",{class:An("buttons")},[t.createVNode(Ot,{block:!0,round:!0,type:"primary",text:e.saveButtonText||On("save"),class:An("button"),loading:e.isSaving,nativeType:"submit"},null),e.showDelete&&t.createVNode(Ot,{block:!0,round:!0,class:An("button"),loading:e.isDeleting,text:e.deleteButtonText||On("delete"),onClick:w},null)]),[[t.vShow,!p.value]]),t.createVNode(oo,{show:s.value,"onUpdate:show":e=>s.value=e,round:!0,teleport:"body",position:"bottom",lazyRender:!1},{default:()=>[t.createVNode(Ia,{modelValue:i.areaCode,"onUpdate:modelValue":e=>i.areaCode=e,ref:l,loading:!d.value,areaList:e.areaList,columnsPlaceholder:e.areaColumnsPlaceholder,onConfirm:y,onCancel:()=>{s.value=!1}},null)]})]}})}}})),[Ln,$n]=Ie("radio-group"),Mn={shape:String,disabled:Boolean,iconSize:g,direction:String,modelValue:h,checkedColor:String},Fn=Symbol(Ln);const Rn=Xe(t.defineComponent({name:Ln,props:Mn,emits:["change","update:modelValue"],setup(e,{emit:o,slots:a}){const{linkChildren:n}=I(Fn);return t.watch((()=>e.modelValue),(e=>o("change",e))),n({props:e,updateValue:e=>o("update:modelValue",e)}),_((()=>e.modelValue)),()=>{var o;return t.createVNode("div",{class:$n([e.direction]),role:"radiogroup"},[null==(o=a.default)?void 0:o.call(a)])}}})),[Hn,jn]=Ie("checkbox-group"),Wn={max:g,shape:N("round"),disabled:Boolean,iconSize:g,direction:String,modelValue:w(),checkedColor:String},Un=Symbol(Hn);const Yn=Xe(t.defineComponent({name:Hn,props:Wn,emits:["change","update:modelValue"],setup(e,{emit:o,slots:a}){const{children:n,linkChildren:r}=I(Un),l=e=>o("update:modelValue",e);return t.watch((()=>e.modelValue),(e=>o("change",e))),at({toggleAll:(e={})=>{"boolean"==typeof e&&(e={checked:e});const{checked:t,skipDisabled:o}=e,a=n.filter((e=>!!e.props.bindGroup&&(e.props.disabled&&o?e.checked.value:null!=t?t:!e.checked.value))).map((e=>e.name));l(a)}}),_((()=>e.modelValue)),r({props:e,updateValue:l}),()=>{var o;return t.createVNode("div",{class:jn([e.direction])},[null==(o=a.default)?void 0:o.call(a)])}}})),[Xn,qn]=Ie("tag"),Gn={size:String,mark:Boolean,show:b,type:N("default"),color:String,plain:Boolean,round:Boolean,textColor:String,closeable:Boolean};const Zn=Xe(t.defineComponent({name:Xn,props:Gn,emits:["close"],setup(e,{slots:o,emit:a}){const n=e=>{e.stopPropagation(),a("close",e)},r=()=>{var a;const{type:r,mark:l,plain:i,round:s,size:c,closeable:d}=e,u={mark:l,plain:i,round:s};c&&(u[c]=c);const p=d&&t.createVNode(xt,{name:"cross",class:[qn("close"),je],onClick:n},null);return t.createVNode("span",{style:e.plain?{color:e.textColor||e.color,borderColor:e.color}:{color:e.textColor,background:e.color},class:qn([u,r])},[null==(a=o.default)?void 0:a.call(o),p])};return()=>t.createVNode(t.Transition,{name:e.closeable?"van-fade":void 0},{default:()=>[e.show?r():null]})}})),Kn={name:h,disabled:Boolean,iconSize:g,modelValue:h,checkedColor:String,labelPosition:String,labelDisabled:Boolean};var _n=t.defineComponent({props:a({},Kn,{bem:y(Function),role:String,shape:String,parent:Object,checked:Boolean,bindGroup:b,indeterminate:{type:Boolean,default:null}}),emits:["click","toggle"],setup(e,{emit:o,slots:a}){const n=t.ref(),r=t=>{if(e.parent&&e.bindGroup)return e.parent.props[t]},l=t.computed((()=>{if(e.parent&&e.bindGroup){const t=r("disabled")||e.disabled;if("checkbox"===e.role){const o=r("modelValue").length,a=r("max");return t||a&&o>=+a&&!e.checked}return t}return e.disabled})),i=t.computed((()=>r("direction"))),s=t.computed((()=>{const t=e.checkedColor||r("checkedColor");if(t&&e.checked&&!l.value)return{borderColor:t,backgroundColor:t}})),c=t.computed((()=>e.shape||r("shape")||"round")),d=t=>{const{target:a}=t,r=n.value,i=r===a||(null==r?void 0:r.contains(a));l.value||!i&&e.labelDisabled||o("toggle"),o("click",t)},u=()=>{var o,i;const{bem:d,checked:u,indeterminate:p}=e,v=e.iconSize||r("iconSize");return t.createVNode("div",{ref:n,class:d("icon",[c.value,{disabled:l.value,checked:u,indeterminate:p}]),style:"dot"!==c.value?{fontSize:ue(v)}:{width:ue(v),height:ue(v),borderColor:null==(o=s.value)?void 0:o.borderColor}},[a.icon?a.icon({checked:u,disabled:l.value}):"dot"!==c.value?t.createVNode(xt,{name:p?"minus":"success",style:s.value},null):t.createVNode("div",{class:d("icon--dot__icon"),style:{backgroundColor:null==(i=s.value)?void 0:i.backgroundColor}},null)])},p=()=>{const{checked:o}=e;if(a.default)return t.createVNode("span",{class:e.bem("label",[e.labelPosition,{disabled:l.value}])},[a.default({checked:o,disabled:l.value})])};return()=>{const o="left"===e.labelPosition?[p(),u()]:[u(),p()];return t.createVNode("div",{role:e.role,class:e.bem([{disabled:l.value,"label-disabled":e.labelDisabled},i.value]),tabindex:l.value?void 0:0,"aria-checked":e.checked,onClick:d},[o])}}});const Jn=a({},Kn,{shape:String}),[Qn,er]=Ie("radio");const tr=Xe(t.defineComponent({name:Qn,props:Jn,emits:["update:modelValue"],setup(e,{emit:o,slots:a}){const{parent:n}=D(Fn),r=()=>{n?n.updateValue(e.name):o("update:modelValue",e.name)};return()=>t.createVNode(_n,t.mergeProps({bem:er,role:"radio",parent:n,checked:(n?n.props.modelValue:e.modelValue)===e.name,onToggle:r},e),v(a,["default","icon"]))}})),[or,ar]=Ie("checkbox"),nr=a({},Kn,{shape:String,bindGroup:b,indeterminate:{type:Boolean,default:null}});const rr=Xe(t.defineComponent({name:or,props:nr,emits:["change","update:modelValue"],setup(e,{emit:o,slots:a}){const{parent:n}=D(Un),r=t.computed((()=>n&&e.bindGroup?-1!==n.props.modelValue.indexOf(e.name):!!e.modelValue)),l=(t=!r.value)=>{n&&e.bindGroup?(t=>{const{name:o}=e,{max:a,modelValue:r}=n.props,l=r.slice();if(t)a&&l.length>=+a||l.includes(o)||(l.push(o),e.bindGroup&&n.updateValue(l));else{const t=l.indexOf(o);-1!==t&&(l.splice(t,1),e.bindGroup&&n.updateValue(l))}})(t):o("update:modelValue",t),null!==e.indeterminate&&o("change",t)};return t.watch((()=>e.modelValue),(t=>{null===e.indeterminate&&o("change",t)})),at({toggle:l,props:e,checked:r}),_((()=>e.modelValue)),()=>t.createVNode(_n,t.mergeProps({bem:ar,role:"checkbox",parent:n,checked:r.value,onToggle:l},e),v(a,["default","icon"]))}})),[lr,ir]=Ie("address-item");var sr=t.defineComponent({name:lr,props:{address:y(Object),disabled:Boolean,switchable:Boolean,singleChoice:Boolean,defaultTagText:String,rightIcon:N("edit")},emits:["edit","click","select"],setup(e,{slots:o,emit:n}){const r=t=>{e.switchable&&n("select"),n("click",t)},l=()=>t.createVNode(xt,{name:e.rightIcon,class:ir("edit"),onClick:e=>{e.stopPropagation(),n("edit"),n("click",e)}},null),i=()=>{const{address:a,disabled:n,switchable:r,singleChoice:l}=e,i=[t.createVNode("div",{class:ir("name")},[`${a.name} ${a.tel}`,o.tag?o.tag(e.address):e.address.isDefault&&e.defaultTagText?t.createVNode(Zn,{type:"primary",round:!0,class:ir("tag")},{default:()=>[e.defaultTagText]}):void 0]),t.createVNode("div",{class:ir("address")},[a.address])];return r&&!n?l?t.createVNode(tr,{name:a.id,iconSize:18},{default:()=>[i]}):t.createVNode(rr,{name:a.id,iconSize:18},{default:()=>[i]}):i};return()=>{var n;const{disabled:s}=e;return t.createVNode("div",{class:ir({disabled:s}),onClick:r},[t.createVNode(Ma,{border:!1,titleClass:ir("title")},{title:i,"right-icon":l}),null==(n=o.bottom)?void 0:n.call(o,a({},e.address,{disabled:s}))])}}});const[cr,dr,ur]=Ie("address-list"),pr={list:w(),modelValue:[...g,Array],switchable:b,disabledText:String,disabledList:w(),showAddButton:b,addButtonText:String,defaultTagText:String,rightIcon:N("edit")};const vr=Xe(t.defineComponent({name:cr,props:pr,emits:["add","edit","select","clickItem","editDisabled","selectDisabled","update:modelValue"],setup(e,{slots:o,emit:a}){const n=t.computed((()=>!Array.isArray(e.modelValue))),r=(r,l)=>{if(r)return r.map(((r,i)=>((r,l,i)=>t.createVNode(sr,{key:r.id,address:r,disabled:i,switchable:e.switchable,singleChoice:n.value,defaultTagText:e.defaultTagText,rightIcon:e.rightIcon,onEdit:()=>a(i?"editDisabled":"edit",r,l),onClick:e=>a("clickItem",r,l,{event:e}),onSelect:()=>{if(a(i?"selectDisabled":"select",r,l),!i)if(n.value)a("update:modelValue",r.id);else{const t=e.modelValue;t.includes(r.id)?a("update:modelValue",t.filter((e=>e!==r.id))):a("update:modelValue",[...t,r.id])}}},{bottom:o["item-bottom"],tag:o.tag}))(r,i,l)))};return()=>{var l,i;const s=r(e.list),c=r(e.disabledList,!0),d=e.disabledText&&t.createVNode("div",{class:dr("disabled-text")},[e.disabledText]);return t.createVNode("div",{class:dr()},[null==(l=o.top)?void 0:l.call(o),!n.value&&Array.isArray(e.modelValue)?t.createVNode(Yn,{modelValue:e.modelValue},{default:()=>[s]}):t.createVNode(Rn,{modelValue:e.modelValue},{default:()=>[s]}),d,c,null==(i=o.default)?void 0:i.call(o),e.showAddButton?t.createVNode("div",{class:[dr("bottom"),"van-safe-area-bottom"]},[t.createVNode(Ot,{round:!0,block:!0,type:"primary",text:e.addButtonText||ur("add"),class:dr("add"),onClick:()=>a("add")},null)]):void 0])}}})),mr=C&&"IntersectionObserver"in window&&"IntersectionObserverEntry"in window&&"intersectionRatio"in window.IntersectionObserverEntry.prototype,fr="event",hr="observer";function gr(e,t){if(!e.length)return;const o=e.indexOf(t);return o>-1?e.splice(o,1):void 0}function br(e,t){if("IMG"!==e.tagName||!e.getAttribute("data-srcset"))return;let o=e.getAttribute("data-srcset");const a=e.parentNode.offsetWidth*t;let n,r,l;o=o.trim().split(",");const i=o.map((e=>(e=e.trim(),n=e.lastIndexOf(" "),-1===n?(r=e,l=999998):(r=e.substr(0,n),l=parseInt(e.substr(n+1,e.length-n-2),10)),[l,r])));i.sort(((e,t)=>{if(e[0]t[0])return-1;if(e[0]===t[0]){if(-1!==t[1].indexOf(".webp",t[1].length-5))return 1;if(-1!==e[1].indexOf(".webp",e[1].length-5))return-1}return 0}));let s,c="";for(let d=0;dC&&window.devicePixelRatio||e;function wr(){if(!C)return!1;let e=!0;try{const t=document.createElement("canvas");t.getContext&&t.getContext("2d")&&(e=0===t.toDataURL("image/webp").indexOf("data:image/webp"))}catch(t){e=!1}return e}function xr(e,t){let o=null,a=0;return function(...n){if(o)return;const r=()=>{a=Date.now(),o=!1,e.apply(this,n)};Date.now()-a>=t?r():o=setTimeout(r,t)}}function Vr(e,t,o){e.addEventListener(t,o,{capture:!1,passive:!0})}function Nr(e,t,o){e.removeEventListener(t,o,!1)}const Cr=(e,t,o)=>{const a=new Image;if(!e||!e.src)return o(new Error("image src is required"));a.src=e.src,e.cors&&(a.crossOrigin=e.cors),a.onload=()=>t({naturalHeight:a.naturalHeight,naturalWidth:a.naturalWidth,src:a.src}),a.onerror=e=>o(e)};class kr{constructor({max:e}){this.options={max:e||100},this.caches=[]}has(e){return this.caches.indexOf(e)>-1}add(e){this.has(e)||(this.caches.push(e),this.caches.length>this.options.max&&this.free())}free(){this.caches.shift()}}const[Sr,Tr]=Ie("back-top"),Br={right:g,bottom:g,zIndex:g,target:[String,Object],offset:V(200),immediate:Boolean,teleport:{type:[String,Object],default:"body"}};const Pr=Xe(t.defineComponent({name:Sr,inheritAttrs:!1,props:Br,emits:["click"],setup(e,{emit:o,slots:r,attrs:l}){let i=!1;const s=t.ref(!1),c=t.ref(),d=t.ref(),u=t.computed((()=>a(ve(e.zIndex),{right:ue(e.right),bottom:ue(e.bottom)}))),p=t=>{var a;o("click",t),null==(a=d.value)||a.scrollTo({top:0,behavior:e.immediate?"auto":"smooth"})},v=()=>{s.value=!!d.value&&J(d.value)>=+e.offset},m=()=>{n&&t.nextTick((()=>{d.value=e.target?(()=>{const{target:t}=e;if("string"!=typeof t)return t;{const e=document.querySelector(t);if(e)return e}})():G(c.value),v()}))};return j("scroll",xr(v,100),{target:d}),t.onMounted(m),t.onActivated((()=>{i&&(s.value=!0,i=!1)})),t.onDeactivated((()=>{s.value&&e.teleport&&(s.value=!1,i=!0)})),t.watch((()=>e.target),m),()=>{const o=t.createVNode("div",t.mergeProps({ref:e.teleport?void 0:c,class:Tr({active:s.value}),style:u.value,onClick:p},l),[r.default?r.default():t.createVNode(xt,{name:"back-top",class:Tr("icon")},null)]);return e.teleport?[t.createVNode("div",{ref:c,class:Tr("placeholder")},null),t.createVNode(t.Teleport,{to:e.teleport},{default:()=>[o]})]:o}}}));const Dr={top:V(10),rows:V(4),duration:V(4e3),autoPlay:b,delay:x(300),modelValue:w()},[Ar,Or]=Ie("barrage");const Ir=Xe(t.defineComponent({name:Ar,props:Dr,emits:["update:modelValue"],setup(e,{emit:o,slots:a}){const n=t.ref(),r=Or("item"),l=t.ref(0),i=[],s=t.ref(!0),c=t.ref(e.autoPlay),d=({id:t,text:a},d)=>{var u;const p=((t,o=e.delay)=>{const a=document.createElement("span");return a.className=r,a.innerText=String(t),a.style.animationDuration=`${e.duration}ms`,a.style.animationDelay=`${o}ms`,a.style.animationName="van-barrage",a.style.animationTimingFunction="linear",a})(a,s.value?d*e.delay:void 0);e.autoPlay||!1!==c.value||(p.style.animationPlayState="paused"),null==(u=n.value)||u.append(p),l.value++;const v=(l.value-1)%+e.rows*p.offsetHeight+ +e.top;p.style.top=`${v}px`,p.dataset.id=String(t),i.push(p),p.addEventListener("animationend",(()=>{o("update:modelValue",[...e.modelValue].filter((e=>String(e.id)!==p.dataset.id)))}))},u=(e,t)=>{const o=new Map(t.map((e=>[e.id,e])));e.forEach(((e,t)=>{o.has(e.id)?o.delete(e.id):d(e,t)})),o.forEach((e=>{const t=i.findIndex((t=>t.dataset.id===String(e.id)));t>-1&&(i[t].remove(),i.splice(t,1))})),s.value=!1};t.watch((()=>e.modelValue.slice()),((e,t)=>u(null!=e?e:[],null!=t?t:[])),{deep:!0});const p=t.ref({});t.onMounted((()=>{return o=this,a=null,r=function*(){var o;p.value["--move-distance"]=`-${null==(o=n.value)?void 0:o.offsetWidth}px`,yield t.nextTick(),u(e.modelValue,[])},new Promise(((e,t)=>{var n=e=>{try{i(r.next(e))}catch(o){t(o)}},l=e=>{try{i(r.throw(e))}catch(o){t(o)}},i=t=>t.done?e(t.value):Promise.resolve(t.value).then(n,l);i((r=r.apply(o,a)).next())}));var o,a,r}));return at({play:()=>{c.value=!0,i.forEach((e=>{e.style.animationPlayState="running"}))},pause:()=>{c.value=!1,i.forEach((e=>{e.style.animationPlayState="paused"}))}}),()=>{var e;return t.createVNode("div",{class:Or(),ref:n,style:p.value},[null==(e=a.default)?void 0:e.call(a)])}}})),[zr,Er,Lr]=Ie("calendar");function $r(e,t){const o=e.getFullYear(),a=t.getFullYear();if(o===a){const o=e.getMonth(),a=t.getMonth();return o===a?0:o>a?1:-1}return o>a?1:-1}function Mr(e,t){const o=$r(e,t);if(0===o){const o=e.getDate(),a=t.getDate();return o===a?0:o>a?1:-1}return o}const Fr=e=>new Date(e),Rr=e=>Array.isArray(e)?e.map(Fr):Fr(e);function Hr(e,t){const o=Fr(e);return o.setDate(o.getDate()+t),o}function jr(e,t){const o=Fr(e);return o.setMonth(o.getMonth()+t),o.getDate()!==e.getDate()&&o.setDate(0),o}function Wr(e,t){const o=Fr(e);return o.setFullYear(o.getFullYear()+t),o.getDate()!==e.getDate()&&o.setDate(0),o}const Ur=e=>Hr(e,-1),Yr=e=>Hr(e,1),Xr=e=>jr(e,-1),qr=e=>jr(e,1),Gr=e=>Wr(e,-1),Zr=e=>Wr(e,1),Kr=()=>{const e=new Date;return e.setHours(0,0,0,0),e};const _r=a({},xa,{modelValue:w(),filter:Function,formatter:{type:Function,default:(e,t)=>t}}),Jr=Object.keys(xa);const Qr=(e,t)=>32-new Date(e,t-1,32).getDate(),el=(e,t,o,a,n,r)=>{const l=function(e,t){if(e<0)return[];const o=Array(e);let a=-1;for(;++a{const n=ye(e+t);return a(o,{text:n,value:n})}));return n?n(o,l,r):l},tl=(e,t)=>e.map(((e,o)=>{const a=t[o];if(a.length){const t=+a[0].value,o=+a[a.length-1].value;return ye(we(+e,t,o))}return e})),[ol]=Ie("calendar-day");var al=t.defineComponent({name:ol,props:{item:y(Object),color:String,index:Number,offset:x(0),rowHeight:String},emits:["click","clickDisabledDate"],setup(e,{emit:o,slots:a}){const n=t.computed((()=>{var t;const{item:o,index:a,color:n,offset:r,rowHeight:l}=e,i={height:l};if("placeholder"===o.type)return i.width="100%",i;if(0===a&&(i.marginLeft=100*r/7+"%"),n)switch(o.type){case"end":case"start":case"start-end":case"multiple-middle":case"multiple-selected":i.background=n;break;case"middle":i.color=n}return r+((null==(t=o.date)?void 0:t.getDate())||1)>28&&(i.marginBottom=0),i})),r=()=>{"disabled"!==e.item.type?o("click",e.item):o("clickDisabledDate",e.item)},l=()=>{const{topInfo:o}=e.item;if(o||a["top-info"])return t.createVNode("div",{class:Er("top-info")},[a["top-info"]?a["top-info"](e.item):o])},i=()=>{const{bottomInfo:o}=e.item;if(o||a["bottom-info"])return t.createVNode("div",{class:Er("bottom-info")},[a["bottom-info"]?a["bottom-info"](e.item):o])},s=()=>{const{item:o,color:a,rowHeight:n}=e,{type:r,text:s}=o,c=[l(),s,i()];return"selected"===r?t.createVNode("div",{class:Er("selected-day"),style:{width:n,height:n,background:a}},[c]):c};return()=>{const{type:o,className:a}=e.item;return"placeholder"===o?t.createVNode("div",{class:Er("day"),style:n.value},null):t.createVNode("div",{role:"gridcell",style:n.value,class:[Er("day",o),a],tabindex:"disabled"===o?void 0:-1,onClick:r},[s()])}}});const[nl]=Ie("calendar-month"),rl={date:y(Date),type:String,color:String,minDate:Date,maxDate:Date,showMark:Boolean,rowHeight:g,formatter:Function,lazyRender:Boolean,currentDate:[Date,Array],allowSameDay:Boolean,showSubtitle:Boolean,showMonthTitle:Boolean,firstDayOfWeek:Number};var ll=t.defineComponent({name:nl,props:rl,emits:["click","clickDisabledDate"],setup(e,{emit:o,slots:a}){const[n,r]=function(e=!1){const o=t.ref(e);return[o,(e=!o.value)=>{o.value=e}]}(),l=t.ref(),i=t.ref(),s=Ke(i),c=t.computed((()=>{return t=e.date,Lr("monthTitle",t.getFullYear(),t.getMonth()+1);var t})),d=t.computed((()=>ue(e.rowHeight))),u=t.computed((()=>{const t=e.date.getDate(),o=(e.date.getDay()-t%7+8)%7;return e.firstDayOfWeek?(o+7-e.firstDayOfWeek)%7:o})),p=t.computed((()=>Qr(e.date.getFullYear(),e.date.getMonth()+1))),m=t.computed((()=>n.value||!e.lazyRender)),f=t=>{const{type:o,minDate:a,maxDate:n,currentDate:r}=e;if(a&&Mr(t,a)<0||n&&Mr(t,n)>0)return"disabled";if(null===r)return"";if(Array.isArray(r)){if("multiple"===o)return(t=>{const o=t=>e.currentDate.some((e=>0===Mr(e,t)));if(o(t)){const e=Ur(t),a=Yr(t),n=o(e),r=o(a);return n&&r?"multiple-middle":n?"end":r?"start":"multiple-selected"}return""})(t);if("range"===o)return(t=>{const[o,a]=e.currentDate;if(!o)return"";const n=Mr(t,o);if(!a)return 0===n?"start":"";const r=Mr(t,a);return e.allowSameDay&&0===n&&0===r?"start-end":0===n?"start":0===r?"end":n>0&&r<0?"middle":""})(t)}else if("single"===o)return 0===Mr(t,r)?"selected":"";return""},h=t=>{if("range"===e.type){if("start"===t||"end"===t)return Lr(t);if("start-end"===t)return`${Lr("start")}/${Lr("end")}`}},g=()=>{if(e.showMonthTitle)return t.createVNode("div",{class:Er("month-title")},[a["month-title"]?a["month-title"]({date:e.date,text:c.value}):c.value])},b=()=>{if(e.showMark&&m.value)return t.createVNode("div",{class:Er("month-mark")},[e.date.getMonth()+1])},y=t.computed((()=>{const e=Math.ceil((p.value+u.value)/7);return Array(e).fill({type:"placeholder"})})),w=t.computed((()=>{const t=[],o=e.date.getFullYear(),a=e.date.getMonth();for(let n=1;n<=p.value;n++){const r=new Date(o,a,n),l=f(r);let i={date:r,type:l,text:n,bottomInfo:h(l)};e.formatter&&(i=e.formatter(i)),t.push(i)}return t})),x=t.computed((()=>w.value.filter((e=>"disabled"===e.type)))),V=(n,r)=>t.createVNode(al,{item:n,index:r,color:e.color,offset:u.value,rowHeight:d.value,onClick:e=>o("click",e),onClickDisabledDate:e=>o("clickDisabledDate",e)},v(a,["top-info","bottom-info"]));return at({getTitle:()=>c.value,getHeight:()=>s.value,setVisible:r,scrollToDate:(e,t)=>{if(l.value){const o=P(l.value),a=y.value.length,n=(Math.ceil((t.getDate()+u.value)/7)-1)*o.height/a;Q(e,o.top+n+e.scrollTop-P(e).top)}},disabledDays:x}),()=>t.createVNode("div",{class:Er("month"),ref:i},[g(),t.createVNode("div",{ref:l,role:"grid",class:Er("days")},[b(),(m.value?w:y).value.map(V)])])}});const[il]=Ie("calendar-header");var sl=t.defineComponent({name:il,props:{date:Date,minDate:Date,maxDate:Date,title:String,subtitle:String,showTitle:Boolean,showSubtitle:Boolean,firstDayOfWeek:Number,switchMode:N("none")},emits:["clickSubtitle","panelChange"],setup(e,{slots:o,emit:a}){const n=t.computed((()=>e.date&&e.minDate&&$r(Xr(e.date),e.minDate)<0)),r=t.computed((()=>e.date&&e.minDate&&$r(Gr(e.date),e.minDate)<0)),l=t.computed((()=>e.date&&e.maxDate&&$r(qr(e.date),e.maxDate)>0)),i=t.computed((()=>e.date&&e.maxDate&&$r(Zr(e.date),e.maxDate)>0)),s=()=>{if(e.showTitle){const a=e.title||Lr("title"),n=o.title?o.title():a;return t.createVNode("div",{class:Er("header-title")},[n])}},c=e=>a("clickSubtitle",e),d=e=>a("panelChange",e),u=a=>{const s="year-month"===e.switchMode,c=o[a?"next-month":"prev-month"],u=o[a?"next-year":"prev-year"],p=a?l.value:n.value,v=a?i.value:r.value,m=a?"arrow":"arrow-left",f=a?"arrow-double-right":"arrow-double-left",h=t.createVNode("view",{class:Er("header-action",{disabled:p}),onClick:p?void 0:()=>d((a?qr:Xr)(e.date))},[c?c({disabled:p}):t.createVNode(xt,{class:{[je]:!p},name:m},null)]),g=s&&t.createVNode("view",{class:Er("header-action",{disabled:v}),onClick:v?void 0:()=>d((a?Zr:Gr)(e.date))},[u?u({disabled:v}):t.createVNode(xt,{class:{[je]:!v},name:f},null)]);return a?[h,g]:[g,h]},p=()=>{if(e.showSubtitle){const a=o.subtitle?o.subtitle({date:e.date,text:e.subtitle}):e.subtitle,n="none"!==e.switchMode;return t.createVNode("div",{class:Er("header-subtitle",{"with-swicth":n}),onClick:c},[n?[u(),t.createVNode("div",{class:Er("header-subtitle-text")},[a]),u(!0)]:a])}},v=()=>{const{firstDayOfWeek:o}=e,a=Lr("weekdays"),n=[...a.slice(o,7),...a.slice(0,o)];return t.createVNode("div",{class:Er("weekdays")},[n.map((e=>t.createVNode("span",{class:Er("weekday")},[e])))])};return()=>t.createVNode("div",{class:Er("header")},[s(),p(),v()])}});const cl={show:Boolean,type:N("single"),switchMode:N("none"),title:String,color:String,round:b,readonly:Boolean,poppable:b,maxRange:V(null),position:N("bottom"),teleport:[String,Object],showMark:b,showTitle:b,formatter:Function,rowHeight:g,confirmText:String,rangePrompt:String,lazyRender:b,showConfirm:b,defaultDate:[Date,Array],allowSameDay:Boolean,showSubtitle:b,closeOnPopstate:b,showRangePrompt:b,confirmDisabledText:String,closeOnClickOverlay:b,safeAreaInsetTop:Boolean,safeAreaInsetBottom:b,minDate:{type:Date,validator:c},maxDate:{type:Date,validator:c},firstDayOfWeek:{type:g,default:0,validator:e=>e>=0&&e<=6}};const dl=Xe(t.defineComponent({name:zr,props:cl,emits:["select","confirm","unselect","monthShow","overRange","update:show","clickSubtitle","clickDisabledDate","panelChange"],setup(e,{emit:o,slots:a}){const n=t.computed((()=>"none"!==e.switchMode)),r=t.computed((()=>e.minDate||n.value?e.minDate:Kr())),l=t.computed((()=>e.maxDate||n.value?e.maxDate:jr(Kr(),6))),i=(e,t=r.value,o=l.value)=>t&&-1===Mr(e,t)?t:o&&1===Mr(e,o)?o:e,s=(t=e.defaultDate)=>{const{type:o,allowSameDay:a}=e;if(null===t)return t;const n=Kr();if("range"===o){Array.isArray(t)||(t=[]);const e=r.value,o=l.value;return[i(t[0]||n,e,o?a?o:Ur(o):void 0),i(t[1]||(a?n:Yr(n)),e?a?e:Yr(e):void 0)]}return"multiple"===o?Array.isArray(t)?t.map((e=>i(e))):[i(n)]:(t&&!Array.isArray(t)||(t=n),i(t))};let d;const u=t.ref(),p=t.ref(s()),m=t.ref((()=>{const e=Array.isArray(p.value)?p.value[0]:p.value;return e||i(Kr())})()),f=t.ref(),[h,g]=Fo(),b=t.computed((()=>e.firstDayOfWeek?+e.firstDayOfWeek%7:0)),y=t.computed((()=>{const e=[];if(!r.value||!l.value)return e;const t=new Date(r.value);t.setDate(1);do{e.push(new Date(t)),t.setMonth(t.getMonth()+1)}while(1!==$r(t,l.value));return e})),w=t.computed((()=>{if(p.value){if("range"===e.type)return!p.value[0]||!p.value[1];if("multiple"===e.type)return!p.value.length}return!p.value})),x=()=>{const e=J(u.value),t=e+d,a=y.value.map(((e,t)=>h.value[t].getHeight()));if(t>a.reduce(((e,t)=>e+t),0)&&e>0)return;let n,r=0;const l=[-1,-1];for(let i=0;i=e&&(l[1]=i,n||(n=s,l[0]=i),h.value[i].showed||(h.value[i].showed=!0,o("monthShow",{date:s.date,title:s.getTitle()}))),r+=a[i]}y.value.forEach(((e,t)=>{const o=t>=l[0]-1&&t<=l[1]+1;h.value[t].setVisible(o)})),n&&(f.value=n)},V=e=>{n.value?m.value=e:k((()=>{y.value.some(((t,o)=>0===$r(t,e)&&(u.value&&h.value[o].scrollToDate(u.value,e),!0))),x()}))},N=()=>{if(!e.poppable||e.show)if(p.value){const t="single"===e.type?p.value:p.value[0];c(t)&&V(t)}else n.value||k(x)},C=()=>{e.poppable&&!e.show||(n.value||k((()=>{d=Math.floor(P(u).height)})),N())},S=(e=s())=>{p.value=e,N()},T=e=>{m.value=e,o("panelChange",{date:e})},B=()=>{var e;return o("confirm",null!=(e=p.value)?e:Rr(p.value))},D=(t,a)=>{const n=e=>{p.value=e,o("select",Rr(e))};if(a&&"range"===e.type){const a=(t=>{const{maxRange:a,rangePrompt:n,showRangePrompt:r}=e;return!(a&&function(e){const t=e[0].getTime();return(e[1].getTime()-t)/864e5+1}(t)>+a&&(r&&hn(n||Lr("rangePrompt",a)),o("overRange"),1))})(t);if(!a)return void n([t[0],Hr(t[0],+e.maxRange-1)])}n(t),a&&!e.showConfirm&&B()},A=t.computed((()=>h.value.reduce(((e,t)=>{var o,a;return e.push(...null!=(a=null==(o=t.disabledDays)?void 0:o.value)?a:[]),e}),[]))),O=t=>{if(e.readonly||!t.date)return;const{date:a}=t,{type:n}=e;if("range"===n){if(!p.value)return void D([a]);const[t,o]=p.value;if(t&&!o){const o=Mr(a,t);if(1===o){const e=((e,t,o)=>{var a;return null==(a=e.find((e=>-1===Mr(t,e.date)&&-1===Mr(e.date,o))))?void 0:a.date})(A.value,t,a);if(e){const o=Ur(e);-1===Mr(t,o)?D([t,o]):D([a])}else D([t,a],!0)}else-1===o?D([a]):e.allowSameDay&&D([a,a],!0)}else D([a])}else if("multiple"===n){if(!p.value)return void D([a]);const t=p.value,n=t.findIndex((e=>0===Mr(e,a)));if(-1!==n){const[e]=t.splice(n,1);o("unselect",Fr(e))}else e.maxRange&&t.length>=+e.maxRange?hn(e.rangePrompt||Lr("rangePrompt",e.maxRange)):D([...t,a])}else D(a,!0)},I=e=>o("update:show",e),z=(i,s)=>{const c=0!==s||!e.showSubtitle;return t.createVNode(ll,t.mergeProps({ref:n.value?f:g(s),date:i,currentDate:p.value,showMonthTitle:c,firstDayOfWeek:b.value,lazyRender:!n.value&&e.lazyRender,maxDate:l.value,minDate:r.value},v(e,["type","color","showMark","formatter","rowHeight","showSubtitle","allowSameDay"]),{onClick:O,onClickDisabledDate:e=>o("clickDisabledDate",e)}),v(a,["top-info","bottom-info","month-title"]))},E=()=>{if(a.footer)return a.footer();if(e.showConfirm){const o=a["confirm-text"],n=w.value,r=n?e.confirmDisabledText:e.confirmText;return t.createVNode(Ot,{round:!0,block:!0,type:"primary",color:e.color,class:Er("confirm"),disabled:n,nativeType:"button",onClick:B},{default:()=>[o?o({disabled:n}):r||Lr("confirm")]})}},L=()=>{var i,s;return t.createVNode("div",{class:Er()},[t.createVNode(sl,{date:null==(i=f.value)?void 0:i.date,maxDate:l.value,minDate:r.value,title:e.title,subtitle:null==(s=f.value)?void 0:s.getTitle(),showTitle:e.showTitle,showSubtitle:e.showSubtitle,switchMode:e.switchMode,firstDayOfWeek:b.value,onClickSubtitle:e=>o("clickSubtitle",e),onPanelChange:T},v(a,["title","subtitle","prev-month","prev-year","next-month","next-year"])),t.createVNode("div",{ref:u,class:Er("body"),onScroll:n.value?void 0:x},[n.value?z(m.value,0):y.value.map(z)]),t.createVNode("div",{class:[Er("footer"),{"van-safe-area-bottom":e.safeAreaInsetBottom}]},[E()])])};return t.watch((()=>e.show),C),t.watch((()=>[e.type,e.minDate,e.maxDate,e.switchMode]),(()=>S(s(p.value)))),t.watch((()=>e.defaultDate),((e=null)=>{p.value=e,N()})),at({reset:S,scrollToDate:V,getSelectedDate:()=>p.value}),H(C),()=>e.poppable?t.createVNode(oo,{show:e.show,class:Er("popup"),round:e.round,position:e.position,closeable:e.showTitle||e.showSubtitle,teleport:e.teleport,closeOnPopstate:e.closeOnPopstate,safeAreaInsetTop:e.safeAreaInsetTop,closeOnClickOverlay:e.closeOnClickOverlay,"onUpdate:show":I},{default:L}):L()}})),[ul,pl]=Ie("image"),vl={src:String,alt:String,fit:String,position:String,round:Boolean,block:Boolean,width:g,height:g,radius:g,lazyLoad:Boolean,iconSize:g,showError:b,errorIcon:N("photo-fail"),iconPrefix:String,showLoading:b,loadingIcon:N("photo"),crossorigin:String,referrerpolicy:String};const ml=Xe(t.defineComponent({name:ul,props:vl,emits:["load","error"],setup(e,{emit:o,slots:a}){const r=t.ref(!1),i=t.ref(!0),s=t.ref(),{$Lazyload:c}=t.getCurrentInstance().proxy,d=t.computed((()=>{const t={width:ue(e.width),height:ue(e.height)};return l(e.radius)&&(t.overflow="hidden",t.borderRadius=ue(e.radius)),t}));t.watch((()=>e.src),(()=>{r.value=!1,i.value=!0}));const u=e=>{i.value&&(i.value=!1,o("load",e))},p=()=>{const e=new Event("load");Object.defineProperty(e,"target",{value:s.value,enumerable:!0}),u(e)},v=e=>{r.value=!0,i.value=!1,o("error",e)},m=(o,a,n)=>n?n():t.createVNode(xt,{name:o,size:e.iconSize,class:a,classPrefix:e.iconPrefix},null),f=()=>{if(r.value||!e.src)return;const o={alt:e.alt,class:pl("img"),style:{objectFit:e.fit,objectPosition:e.position},crossorigin:e.crossorigin,referrerpolicy:e.referrerpolicy};return e.lazyLoad?t.withDirectives(t.createVNode("img",t.mergeProps({ref:s},o),null),[[t.resolveDirective("lazy"),e.src]]):t.createVNode("img",t.mergeProps({ref:s,src:e.src,onLoad:u,onError:v},o),null)},h=({el:e})=>{const o=()=>{e===s.value&&i.value&&p()};s.value?o():t.nextTick(o)},g=({el:e})=>{e!==s.value||r.value||v()};return c&&n&&(c.$on("loaded",h),c.$on("error",g),t.onBeforeUnmount((()=>{c.$off("loaded",h),c.$off("error",g)}))),t.onMounted((()=>{t.nextTick((()=>{var t;(null==(t=s.value)?void 0:t.complete)&&!e.lazyLoad&&p()}))})),()=>{var o;return t.createVNode("div",{class:pl({round:e.round,block:e.block}),style:d.value},[f(),i.value&&e.showLoading?t.createVNode("div",{class:pl("loading")},[m(e.loadingIcon,pl("loading-icon"),a.loading)]):r.value&&e.showError?t.createVNode("div",{class:pl("error")},[m(e.errorIcon,pl("error-icon"),a.error)]):void 0,null==(o=a.default)?void 0:o.call(a)])}}})),[fl,hl]=Ie("card"),gl={tag:String,num:g,desc:String,thumb:String,title:String,price:g,centered:Boolean,lazyLoad:Boolean,currency:N(""),thumbLink:String,originPrice:g};const bl=Xe(t.defineComponent({name:fl,props:gl,emits:["clickThumb"],setup(e,{slots:o,emit:a}){const n=()=>{if(o.tag||e.tag)return t.createVNode("div",{class:hl("tag")},[o.tag?o.tag():t.createVNode(Zn,{mark:!0,type:"primary"},{default:()=>[e.tag]})])},r=()=>{if(o.thumb||e.thumb)return t.createVNode("a",{href:e.thumbLink,class:hl("thumb"),onClick:e=>a("clickThumb",e)},[o.thumb?o.thumb():t.createVNode(ml,{src:e.thumb,fit:"cover",width:"100%",height:"100%",lazyLoad:e.lazyLoad},null),n()])},i=()=>{const o=e.price.toString().split(".");return t.createVNode("div",null,[t.createVNode("span",{class:hl("price-currency")},[e.currency]),t.createVNode("span",{class:hl("price-integer")},[o[0]]),o.length>1&&t.createVNode(t.Fragment,null,[t.createTextVNode("."),t.createVNode("span",{class:hl("price-decimal")},[o[1]])])])};return()=>{var a,n,s;const c=o.num||l(e.num),d=o.price||l(e.price),u=o["origin-price"]||l(e.originPrice),p=c||d||u||o.bottom,v=d&&t.createVNode("div",{class:hl("price")},[o.price?o.price():i()]),m=u&&t.createVNode("div",{class:hl("origin-price")},[o["origin-price"]?o["origin-price"]():`${e.currency} ${e.originPrice}`]),f=c&&t.createVNode("div",{class:hl("num")},[o.num?o.num():`x${e.num}`]),h=o.footer&&t.createVNode("div",{class:hl("footer")},[o.footer()]),g=p&&t.createVNode("div",{class:hl("bottom")},[null==(a=o["price-top"])?void 0:a.call(o),v,m,f,null==(n=o.bottom)?void 0:n.call(o)]);return t.createVNode("div",{class:hl()},[t.createVNode("div",{class:hl("header")},[r(),t.createVNode("div",{class:hl("content",{centered:e.centered})},[t.createVNode("div",null,[o.title?o.title():e.title?t.createVNode("div",{class:[hl("title"),"van-multi-ellipsis--l2"]},[e.title]):void 0,o.desc?o.desc():e.desc?t.createVNode("div",{class:[hl("desc"),"van-ellipsis"]},[e.desc]):void 0,null==(s=o.tags)?void 0:s.call(o)]),g])]),h])}}})),[yl,wl,xl]=Ie("cascader"),Vl={title:String,options:w(),closeable:b,swipeable:b,closeIcon:N("cross"),showHeader:b,modelValue:g,fieldNames:Object,placeholder:String,activeColor:String};const Nl=Xe(t.defineComponent({name:yl,props:Vl,emits:["close","change","finish","clickTab","update:modelValue"],setup(e,{slots:o,emit:n}){const r=t.ref([]),l=t.ref(0),[i,s]=Fo(),{text:c,value:d,children:u}=a({text:"text",value:"value",children:"children"},e.fieldNames),p=(e,t)=>{for(const o of e){if(o[d]===t)return[o];if(o[u]){const e=p(o[u],t);if(e)return[o,...e]}}},v=()=>{const{options:o,modelValue:a}=e;if(void 0!==a){const e=p(o,a);if(e){let a=o;return r.value=e.map((e=>{const t={options:a,selected:e},o=a.find((t=>t[d]===e[d]));return o&&(a=o[u]),t})),a&&r.value.push({options:a,selected:null}),void t.nextTick((()=>{l.value=r.value.length-1}))}}r.value=[{options:o,selected:null}]},m=()=>n("close"),f=({name:e,title:t})=>n("clickTab",e,t),h=(a,i,p)=>{const{disabled:v}=a,m=!(!i||a[d]!==i[d]),f=a.color||(m?e.activeColor:void 0),h=o.option?o.option({option:a,selected:m}):t.createVNode("span",null,[a[c]]);return t.createVNode("li",{ref:m?s(p):void 0,role:"menuitemradio",class:[wl("option",{selected:m,disabled:v}),a.className],style:{color:f},tabindex:v?void 0:m?0:-1,"aria-checked":m,"aria-disabled":v||void 0,onClick:()=>((e,o)=>{if(e.disabled)return;if(r.value[o].selected=e,r.value.length>o+1&&(r.value=r.value.slice(0,o+1)),e[u]){const a={options:e[u],selected:null};r.value[o+1]?r.value[o+1]=a:r.value.push(a),t.nextTick((()=>{l.value++}))}const a=r.value.map((e=>e.selected)).filter(Boolean);n("update:modelValue",e[d]);const i={value:e[d],tabIndex:o,selectedOptions:a};n("change",i),e[u]||n("finish",i)})(a,p)},[h,m?t.createVNode(xt,{name:"success",class:wl("selected-icon")},null):null])},g=(e,o,a)=>t.createVNode("ul",{role:"menu",class:wl("options")},[e.map((e=>h(e,o,a)))]),b=(a,n)=>{const{options:r,selected:l}=a,i=e.placeholder||xl("select"),s=l?l[c]:i;return t.createVNode(ma,{title:s,titleClass:wl("tab",{unselected:!l})},{default:()=>{var e,t;return[null==(e=o["options-top"])?void 0:e.call(o,{tabIndex:n}),g(r,l,n),null==(t=o["options-bottom"])?void 0:t.call(o,{tabIndex:n})]}})};return v(),t.watch(l,(e=>{const t=i.value[e];t&&(e=>{const t=e.parentElement;t&&(t.scrollTop=e.offsetTop-(t.offsetHeight-e.offsetHeight)/2)})(t)})),t.watch((()=>e.options),v,{deep:!0}),t.watch((()=>e.modelValue),(e=>{if(void 0!==e){if(r.value.map((e=>{var t;return null==(t=e.selected)?void 0:t[d]})).includes(e))return}v()})),()=>t.createVNode("div",{class:wl()},[e.showHeader?t.createVNode("div",{class:wl("header")},[t.createVNode("h2",{class:wl("title")},[o.title?o.title():e.title]),e.closeable?t.createVNode(xt,{name:e.closeIcon,class:[wl("close-icon"),je],onClick:m},null):null]):null,t.createVNode(fa,{active:l.value,"onUpdate:active":e=>l.value=e,shrink:!0,animated:!0,class:wl("tabs"),color:e.activeColor,swipeable:e.swipeable,onClickTab:f},{default:()=>[r.value.map(b)]})])}})),[Cl,kl]=Ie("cell-group"),Sl={title:String,inset:Boolean,border:b};const Tl=Xe(t.defineComponent({name:Cl,inheritAttrs:!1,props:Sl,setup(e,{slots:o,attrs:a}){const n=()=>{var n;return t.createVNode("div",t.mergeProps({class:[kl({inset:e.inset}),{[Re]:e.border&&!e.inset}]},a,Gt()),[null==(n=o.default)?void 0:n.call(o)])};return()=>e.title||o.title?t.createVNode(t.Fragment,null,[t.createVNode("div",{class:kl("title",{inset:e.inset})},[o.title?o.title():e.title]),n()]):n()}})),[Bl,Pl]=Ie("circle");let Dl=0;const Al=e=>Math.min(Math.max(+e,0),100);const Ol={text:String,size:g,fill:N("none"),rate:V(100),speed:V(0),color:[String,Object],clockwise:b,layerColor:String,currentRate:x(0),strokeWidth:V(40),strokeLinecap:String,startPosition:N("top")};const Il=Xe(t.defineComponent({name:Bl,props:Ol,emits:["update:currentRate"],setup(e,{emit:o,slots:a}){const n="van-circle-"+Dl++,l=t.computed((()=>+e.strokeWidth+1e3)),i=t.computed((()=>function(e,t){const o=e?1:0;return`M ${t/2} ${t/2} m 0, -500 a 500, 500 0 1, ${o} 0, 1000 a 500, 500 0 1, ${o} 0, -1000`}(e.clockwise,l.value))),s=t.computed((()=>{const t={top:0,right:90,bottom:180,left:270}[e.startPosition];if(t)return{transform:`rotate(${t}deg)`}}));t.watch((()=>e.rate),(t=>{let a;const n=Date.now(),r=e.currentRate,l=Al(t),i=Math.abs(1e3*(r-l)/+e.speed),s=()=>{const e=Date.now(),t=Math.min((e-n)/i,1)*(l-r)+r;o("update:currentRate",Al(parseFloat(t.toFixed(1)))),(l>r?tl)&&(a=k(s))};e.speed?(a&&S(a),a=k(s)):o("update:currentRate",l)}),{immediate:!0});const c=()=>{const{strokeWidth:o,currentRate:a,strokeLinecap:l}=e,s=3140*a/100,c=r(e.color)?`url(#${n})`:e.color,d={stroke:c,strokeWidth:+o+1+"px",strokeLinecap:l,strokeDasharray:`${s}px 3140px`};return t.createVNode("path",{d:i.value,style:d,class:Pl("hover"),stroke:c},null)},d=()=>{const o={fill:e.fill,stroke:e.layerColor,strokeWidth:`${e.strokeWidth}px`};return t.createVNode("path",{class:Pl("layer"),style:o,d:i.value},null)},u=()=>{const{color:o}=e;if(!r(o))return;const a=Object.keys(o).sort(((e,t)=>parseFloat(e)-parseFloat(t))).map(((e,a)=>t.createVNode("stop",{key:a,offset:e,"stop-color":o[e]},null)));return t.createVNode("defs",null,[t.createVNode("linearGradient",{id:n,x1:"100%",y1:"0%",x2:"0%",y2:"0%"},[a])])};return()=>t.createVNode("div",{class:Pl(),style:pe(e.size)},[t.createVNode("svg",{viewBox:`0 0 ${l.value} ${l.value}`,style:s.value},[u(),d(),c()]),a.default?a.default():e.text?t.createVNode("div",{class:Pl("text")},[e.text]):void 0])}})),[zl,El]=Ie("row"),Ll=Symbol(zl),$l={tag:N("div"),wrap:b,align:String,gutter:{type:[String,Number,Array],default:0},justify:String};var Ml=t.defineComponent({name:zl,props:$l,setup(e,{slots:o}){const{children:a,linkChildren:n}=I(Ll),r=t.computed((()=>{const e=[[]];let t=0;return a.forEach(((o,a)=>{t+=Number(o.span),t>24?(e.push([a]),t-=24):e[e.length-1].push(a)})),e}));return n({spaces:t.computed((()=>{let t=0;t=Array.isArray(e.gutter)?Number(e.gutter[0])||0:Number(e.gutter);const o=[];return t?(r.value.forEach((e=>{const a=t*(e.length-1)/e.length;e.forEach(((e,n)=>{if(0===n)o.push({right:a});else{const n=t-o[e-1].right,r=a-n;o.push({left:n,right:r})}}))})),o):o})),verticalSpaces:t.computed((()=>{const{gutter:t}=e,o=[];if(Array.isArray(t)&&t.length>1){const e=Number(t[1])||0;if(e<=0)return o;r.value.forEach(((t,a)=>{a!==r.value.length-1&&t.forEach((()=>{o.push({bottom:e})}))}))}return o}))}),()=>{const{tag:a,wrap:n,align:r,justify:l}=e;return t.createVNode(a,{class:El({[`align-${r}`]:r,[`justify-${l}`]:l,nowrap:!n})},{default:()=>{var e;return[null==(e=o.default)?void 0:e.call(o)]}})}}});const[Fl,Rl]=Ie("col"),Hl={tag:N("div"),span:V(0),offset:g};const jl=Xe(t.defineComponent({name:Fl,props:Hl,setup(e,{slots:o}){const{parent:n,index:r}=D(Ll),l=t.computed((()=>{if(!n)return;const{spaces:e,verticalSpaces:t}=n;let o={};if(e&&e.value&&e.value[r.value]){const{left:t,right:a}=e.value[r.value];o={paddingLeft:t?`${t}px`:null,paddingRight:a?`${a}px`:null}}const{bottom:l}=t.value[r.value]||{};return a(o,{marginBottom:l?`${l}px`:null})}));return()=>{const{tag:a,span:n,offset:r}=e;return t.createVNode(a,{style:l.value,class:Rl({[n]:n,[`offset-${r}`]:r})},{default:()=>{var e;return[null==(e=o.default)?void 0:e.call(o)]}})}}})),[Wl,Ul]=Ie("collapse"),Yl=Symbol(Wl),Xl={border:b,accordion:Boolean,modelValue:{type:[String,Number,Array],default:""}};const ql=Xe(t.defineComponent({name:Wl,props:Xl,emits:["change","update:modelValue"],setup(e,{emit:o,slots:a}){const{linkChildren:n,children:r}=I(Yl),l=e=>{o("change",e),o("update:modelValue",e)};return at({toggleAll:(t={})=>{if(e.accordion)return;"boolean"==typeof t&&(t={expanded:t});const{expanded:o,skipDisabled:a}=t,n=r.filter((e=>e.disabled&&a?e.expanded.value:null!=o?o:!e.expanded.value)).map((e=>e.itemName.value));l(n)}}),n({toggle:(t,o)=>{const{accordion:a,modelValue:n}=e;l(a?t===n?"":t:o?n.concat(t):n.filter((e=>e!==t)))},isExpanded:t=>{const{accordion:o,modelValue:a}=e;return o?a===t:a.includes(t)}}),()=>{var o;return t.createVNode("div",{class:[Ul(),{[Re]:e.border}]},[null==(o=a.default)?void 0:o.call(a)])}}})),[Gl,Zl]=Ie("collapse-item"),Kl=["icon","title","value","label","right-icon"],_l=a({},La,{name:g,isLink:b,disabled:Boolean,readonly:Boolean,lazyRender:b});const Jl=Xe(t.defineComponent({name:Gl,props:_l,setup(e,{slots:o}){const a=t.ref(),n=t.ref(),{parent:r,index:l}=D(Yl);if(!r)return;const i=t.computed((()=>{var t;return null!=(t=e.name)?t:l.value})),s=t.computed((()=>r.isExpanded(i.value))),c=t.ref(s.value),d=qt((()=>c.value||!e.lazyRender)),u=()=>{s.value?a.value&&(a.value.style.height=""):c.value=!1};t.watch(s,((e,o)=>{if(null===o)return;e&&(c.value=!0);(e?t.nextTick:k)((()=>{if(!n.value||!a.value)return;const{offsetHeight:t}=n.value;if(t){const o=`${t}px`;a.value.style.height=e?"0":o,T((()=>{a.value&&(a.value.style.height=e?o:"0")}))}else u()}))}));const p=(e=!s.value)=>{r.toggle(i.value,e)},m=()=>{e.disabled||e.readonly||p()},f=()=>{const{border:a,disabled:n,readonly:r}=e,l=v(e,Object.keys(La));return r&&(l.isLink=!1),(n||r)&&(l.clickable=!1),t.createVNode(Ma,t.mergeProps({role:"button",class:Zl("title",{disabled:n,expanded:s.value,borderless:!a}),"aria-expanded":String(s.value),onClick:m},l),v(o,Kl))},h=d((()=>{var e;return t.withDirectives(t.createVNode("div",{ref:a,class:Zl("wrapper"),onTransitionend:u},[t.createVNode("div",{ref:n,class:Zl("content")},[null==(e=o.default)?void 0:e.call(o)])]),[[t.vShow,c.value]])}));return at({toggle:p,expanded:s,itemName:i}),()=>t.createVNode("div",{class:[Zl({border:l.value&&e.border})]},[f(),h()])}})),Ql=Xe(gt),[ei,ti,oi]=Ie("contact-card"),ai={tel:String,name:String,type:N("add"),addText:String,editable:b};const ni=Xe(t.defineComponent({name:ei,props:ai,emits:["click"],setup(e,{emit:o}){const a=t=>{e.editable&&o("click",t)},n=()=>"add"===e.type?e.addText||oi("addContact"):[t.createVNode("div",null,[`${oi("name")}${e.name}`]),t.createVNode("div",null,[`${oi("tel")}${e.tel}`])];return()=>t.createVNode(Ma,{center:!0,icon:"edit"===e.type?"contact":"add-square",class:ti([e.type]),border:!1,isLink:e.editable,titleClass:ti("title"),onClick:a},{title:n})}})),[ri,li,ii]=Ie("contact-edit"),si={tel:"",name:""},ci={isEdit:Boolean,isSaving:Boolean,isDeleting:Boolean,showSetDefault:Boolean,setDefaultLabel:String,contactInfo:{type:Object,default:()=>a({},si)},telValidator:{type:Function,default:d}};const di=Xe(t.defineComponent({name:ri,props:ci,emits:["save","delete","changeDefault"],setup(e,{emit:o}){const n=t.reactive(a({},si,e.contactInfo)),r=()=>{e.isSaving||o("save",n)},l=()=>o("delete",n),i=()=>t.createVNode(kn,{modelValue:n.isDefault,"onUpdate:modelValue":e=>n.isDefault=e,onChange:e=>o("changeDefault",e)},null),s=()=>{if(e.showSetDefault)return t.createVNode(Ma,{title:e.setDefaultLabel,class:li("switch-cell"),border:!1},{"right-icon":i})};return t.watch((()=>e.contactInfo),(e=>a(n,si,e))),()=>t.createVNode(ja,{class:li(),onSubmit:r},{default:()=>[t.createVNode("div",{class:li("fields")},[t.createVNode(Qa,{modelValue:n.name,"onUpdate:modelValue":e=>n.name=e,clearable:!0,label:ii("name"),rules:[{required:!0,message:ii("nameEmpty")}],maxlength:"30",placeholder:ii("name")},null),t.createVNode(Qa,{modelValue:n.tel,"onUpdate:modelValue":e=>n.tel=e,clearable:!0,type:"tel",label:ii("tel"),rules:[{validator:e.telValidator,message:ii("telInvalid")}],placeholder:ii("tel")},null)]),s(),t.createVNode("div",{class:li("buttons")},[t.createVNode(Ot,{block:!0,round:!0,type:"primary",text:ii("save"),class:li("button"),loading:e.isSaving,nativeType:"submit"},null),e.isEdit&&t.createVNode(Ot,{block:!0,round:!0,text:ii("delete"),class:li("button"),loading:e.isDeleting,onClick:l},null)])]})}})),[ui,pi,vi]=Ie("contact-list"),mi={list:Array,addText:String,modelValue:h,defaultTagText:String};const fi=Xe(t.defineComponent({name:ui,props:mi,emits:["add","edit","select","update:modelValue"],setup(e,{emit:o}){const a=(a,n)=>t.createVNode(Ma,{key:a.id,isLink:!0,center:!0,class:pi("item"),titleClass:pi("item-title"),onClick:()=>{o("update:modelValue",a.id),o("select",a,n)}},{icon:()=>t.createVNode(xt,{name:"edit",class:pi("edit"),onClick:e=>{e.stopPropagation(),o("edit",a,n)}},null),title:()=>{const o=[`${a.name}${a.tel}`];return a.isDefault&&e.defaultTagText&&o.push(t.createVNode(Zn,{type:"primary",round:!0,class:pi("item-tag")},{default:()=>[e.defaultTagText]})),o},"right-icon":()=>t.createVNode(tr,{class:pi("radio"),name:a.id,iconSize:18},null)});return()=>t.createVNode("div",{class:pi()},[t.createVNode(Rn,{modelValue:e.modelValue,class:pi("group")},{default:()=>[e.list&&e.list.map(a)]}),t.createVNode("div",{class:[pi("bottom"),"van-safe-area-bottom"]},[t.createVNode(Ot,{round:!0,block:!0,type:"primary",class:pi("add"),text:e.addText||vi("addContact"),onClick:()=>o("add")},null)])])}}));const[hi,gi]=Ie("count-down"),bi={time:V(0),format:N("HH:mm:ss"),autoStart:b,millisecond:Boolean};const yi=Xe(t.defineComponent({name:hi,props:bi,emits:["change","finish"],setup(e,{emit:o,slots:a}){const{start:n,pause:r,reset:l,current:i}=R({time:+e.time,millisecond:e.millisecond,onChange:e=>o("change",e),onFinish:()=>o("finish")}),s=t.computed((()=>function(e,t){const{days:o}=t;let{hours:a,minutes:n,seconds:r,milliseconds:l}=t;if(e.includes("DD")?e=e.replace("DD",ye(o)):a+=24*o,e.includes("HH")?e=e.replace("HH",ye(a)):n+=60*a,e.includes("mm")?e=e.replace("mm",ye(n)):r+=60*n,e.includes("ss")?e=e.replace("ss",ye(r)):l+=1e3*r,e.includes("S")){const t=ye(l,3);e=e.includes("SSS")?e.replace("SSS",t):e.includes("SS")?e.replace("SS",t.slice(0,2)):e.replace("S",t.charAt(0))}return e}(e.format,i.value))),c=()=>{l(+e.time),e.autoStart&&n()};return t.watch((()=>e.time),c,{immediate:!0}),at({start:n,pause:r,reset:c}),()=>t.createVNode("div",{role:"timer",class:gi()},[a.default?a.default(i.value):s.value])}}));function wi(e){const t=new Date(1e3*e);return`${t.getFullYear()}.${ye(t.getMonth()+1)}.${ye(t.getDate())}`}const xi=e=>(e/100).toFixed(e%100==0?0:e%10==0?1:2),[Vi,Ni,Ci]=Ie("coupon");const ki=Xe(t.defineComponent({name:Vi,props:{chosen:Boolean,coupon:y(Object),disabled:Boolean,currency:N("")},setup(e){const o=t.computed((()=>{const{startAt:t,endAt:o}=e.coupon;return`${wi(t)} - ${wi(o)}`})),a=t.computed((()=>{const{coupon:o,currency:a}=e;if(o.valueDesc)return[o.valueDesc,t.createVNode("span",null,[o.unitDesc||""])];if(o.denominations){const e=xi(o.denominations);return[t.createVNode("span",null,[a]),` ${e}`]}return o.discount?Ci("discount",((n=o.discount)/10).toFixed(n%10==0?0:1)):"";var n})),n=t.computed((()=>{const t=xi(e.coupon.originCondition||0);return"0"===t?Ci("unlimited"):Ci("condition",t)}));return()=>{const{chosen:r,coupon:l,disabled:i}=e,s=i&&l.reason||l.description;return t.createVNode("div",{class:Ni({disabled:i})},[t.createVNode("div",{class:Ni("content")},[t.createVNode("div",{class:Ni("head")},[t.createVNode("h2",{class:Ni("amount")},[a.value]),t.createVNode("p",{class:Ni("condition")},[l.condition||n.value])]),t.createVNode("div",{class:Ni("body")},[t.createVNode("p",{class:Ni("name")},[l.name]),t.createVNode("p",{class:Ni("valid")},[o.value]),!i&&t.createVNode(rr,{class:Ni("corner"),modelValue:r},null)])]),s&&t.createVNode("p",{class:Ni("description")},[s])])}}})),[Si,Ti,Bi]=Ie("coupon-cell"),Pi={title:String,border:b,editable:b,coupons:w(),currency:N(""),chosenCoupon:{type:[Number,Array],default:-1}};function Di({coupons:e,chosenCoupon:t,currency:o}){let a=0,n=!1;return(Array.isArray(t)?t:[t]).forEach((t=>{const o=e[+t];o&&(n=!0,a+=(e=>{const{value:t,denominations:o}=e;return l(t)?t:l(o)?o:0})(o))})),n?`-${o} ${(a/100).toFixed(2)}`:0===e.length?Bi("noCoupon"):Bi("count",e.length)}const Ai=Xe(t.defineComponent({name:Si,props:Pi,setup:e=>()=>{const o=Array.isArray(e.chosenCoupon)?e.chosenCoupon.length:e.coupons[+e.chosenCoupon];return t.createVNode(Ma,{class:Ti(),value:Di(e),title:e.title||Bi("title"),border:e.border,isLink:e.editable,valueClass:Ti("value",{selected:o})},null)}})),[Oi,Ii]=Ie("empty"),zi={image:N("default"),imageSize:[Number,String,Array],description:String};const Ei=Xe(t.defineComponent({name:Oi,props:zi,setup(e,{slots:o}){const a=()=>{const a=o.description?o.description():e.description;if(a)return t.createVNode("p",{class:Ii("description")},[a])},n=()=>{if(o.default)return t.createVNode("div",{class:Ii("bottom")},[o.default()])},r=Mo(),l=e=>`${r}-${e}`,i=e=>`url(#${l(e)})`,s=(e,o,a)=>t.createVNode("stop",{"stop-color":e,offset:`${o}%`,"stop-opacity":a},null),c=(e,t)=>[s(e,0),s(t,100)],d=e=>[t.createVNode("defs",null,[t.createVNode("radialGradient",{id:l(e),cx:"50%",cy:"54%",fx:"50%",fy:"54%",r:"297%",gradientTransform:"matrix(-.16 0 0 -.33 .58 .72)"},[s("#EBEDF0",0),s("#F2F3F5",100,.3)])]),t.createVNode("ellipse",{fill:i(e),opacity:".8",cx:"80",cy:"140",rx:"46",ry:"8"},null)],u=()=>[t.createVNode("defs",null,[t.createVNode("linearGradient",{id:l("a"),x1:"64%",y1:"100%",x2:"64%"},[s("#FFF",0,.5),s("#F2F3F5",100)])]),t.createVNode("g",{opacity:".8"},[t.createVNode("path",{d:"M36 131V53H16v20H2v58h34z",fill:i("a")},null),t.createVNode("path",{d:"M123 15h22v14h9v77h-31V15z",fill:i("a")},null)])],p=()=>[t.createVNode("defs",null,[t.createVNode("linearGradient",{id:l("b"),x1:"64%",y1:"97%",x2:"64%",y2:"0%"},[s("#F2F3F5",0,.3),s("#F2F3F5",100)])]),t.createVNode("g",{opacity:".8"},[t.createVNode("path",{d:"M87 6c3 0 7 3 8 6a8 8 0 1 1-1 16H80a7 7 0 0 1-8-6c0-4 3-7 6-7 0-5 4-9 9-9Z",fill:i("b")},null),t.createVNode("path",{d:"M19 23c2 0 3 1 4 3 2 0 4 2 4 4a4 4 0 0 1-4 3v1h-7v-1l-1 1c-2 0-3-2-3-4 0-1 1-3 3-3 0-2 2-4 4-4Z",fill:i("b")},null)])],v=()=>t.createVNode("svg",{viewBox:"0 0 160 160"},[t.createVNode("defs",null,[t.createVNode("linearGradient",{id:l(1),x1:"64%",y1:"100%",x2:"64%"},[s("#FFF",0,.5),s("#F2F3F5",100)]),t.createVNode("linearGradient",{id:l(2),x1:"50%",x2:"50%",y2:"84%"},[s("#EBEDF0",0),s("#DCDEE0",100,0)]),t.createVNode("linearGradient",{id:l(3),x1:"100%",x2:"100%",y2:"100%"},[c("#EAEDF0","#DCDEE0")]),t.createVNode("radialGradient",{id:l(4),cx:"50%",cy:"0%",fx:"50%",fy:"0%",r:"100%",gradientTransform:"matrix(0 1 -.54 0 .5 -.5)"},[s("#EBEDF0",0),s("#FFF",100,0)])]),t.createVNode("g",{fill:"none"},[u(),t.createVNode("path",{fill:i(4),d:"M0 139h160v21H0z"},null),t.createVNode("path",{d:"M80 54a7 7 0 0 1 3 13v27l-2 2h-2a2 2 0 0 1-2-2V67a7 7 0 0 1 3-13z",fill:i(2)},null),t.createVNode("g",{opacity:".6","stroke-linecap":"round","stroke-width":"7"},[t.createVNode("path",{d:"M64 47a19 19 0 0 0-5 13c0 5 2 10 5 13",stroke:i(3)},null),t.createVNode("path",{d:"M53 36a34 34 0 0 0 0 48",stroke:i(3)},null),t.createVNode("path",{d:"M95 73a19 19 0 0 0 6-13c0-5-2-9-6-13",stroke:i(3)},null),t.createVNode("path",{d:"M106 84a34 34 0 0 0 0-48",stroke:i(3)},null)]),t.createVNode("g",{transform:"translate(31 105)"},[t.createVNode("rect",{fill:"#EBEDF0",width:"98",height:"34",rx:"2"},null),t.createVNode("rect",{fill:"#FFF",x:"9",y:"8",width:"80",height:"18",rx:"1.1"},null),t.createVNode("rect",{fill:"#EBEDF0",x:"15",y:"12",width:"18",height:"6",rx:"1.1"},null)])])]),m=()=>t.createVNode("svg",{viewBox:"0 0 160 160"},[t.createVNode("defs",null,[t.createVNode("linearGradient",{x1:"50%",x2:"50%",y2:"100%",id:l(5)},[c("#F2F3F5","#DCDEE0")]),t.createVNode("linearGradient",{x1:"95%",y1:"48%",x2:"5.5%",y2:"51%",id:l(6)},[c("#EAEDF1","#DCDEE0")]),t.createVNode("linearGradient",{y1:"45%",x2:"100%",y2:"54%",id:l(7)},[c("#EAEDF1","#DCDEE0")])]),u(),p(),t.createVNode("g",{transform:"translate(36 50)",fill:"none"},[t.createVNode("g",{transform:"translate(8)"},[t.createVNode("rect",{fill:"#EBEDF0",opacity:".6",x:"38",y:"13",width:"36",height:"53",rx:"2"},null),t.createVNode("rect",{fill:i(5),width:"64",height:"66",rx:"2"},null),t.createVNode("rect",{fill:"#FFF",x:"6",y:"6",width:"52",height:"55",rx:"1"},null),t.createVNode("g",{transform:"translate(15 17)",fill:i(6)},[t.createVNode("rect",{width:"34",height:"6",rx:"1"},null),t.createVNode("path",{d:"M0 14h34v6H0z"},null),t.createVNode("rect",{y:"28",width:"34",height:"6",rx:"1"},null)])]),t.createVNode("rect",{fill:i(7),y:"61",width:"88",height:"28",rx:"1"},null),t.createVNode("rect",{fill:"#F7F8FA",x:"29",y:"72",width:"30",height:"6",rx:"1"},null)])]),f=()=>t.createVNode("svg",{viewBox:"0 0 160 160"},[t.createVNode("defs",null,[t.createVNode("linearGradient",{x1:"50%",x2:"50%",y2:"100%",id:l(8)},[c("#EAEDF1","#DCDEE0")])]),u(),p(),d("c"),t.createVNode("path",{d:"m59 60 21 21 21-21h3l9 9v3L92 93l21 21v3l-9 9h-3l-21-21-21 21h-3l-9-9v-3l21-21-21-21v-3l9-9h3Z",fill:i(8)},null)]),h=()=>t.createVNode("svg",{viewBox:"0 0 160 160"},[t.createVNode("defs",null,[t.createVNode("linearGradient",{x1:"50%",y1:"100%",x2:"50%",id:l(9)},[c("#EEE","#D8D8D8")]),t.createVNode("linearGradient",{x1:"100%",y1:"50%",y2:"50%",id:l(10)},[c("#F2F3F5","#DCDEE0")]),t.createVNode("linearGradient",{x1:"50%",x2:"50%",y2:"100%",id:l(11)},[c("#F2F3F5","#DCDEE0")]),t.createVNode("linearGradient",{x1:"50%",x2:"50%",y2:"100%",id:l(12)},[c("#FFF","#F7F8FA")])]),u(),p(),d("d"),t.createVNode("g",{transform:"rotate(-45 113 -4)",fill:"none"},[t.createVNode("rect",{fill:i(9),x:"24",y:"52.8",width:"5.8",height:"19",rx:"1"},null),t.createVNode("rect",{fill:i(10),x:"22.1",y:"67.3",width:"9.9",height:"28",rx:"1"},null),t.createVNode("circle",{stroke:i(11),"stroke-width":"8",cx:"27",cy:"27",r:"27"},null),t.createVNode("circle",{fill:i(12),cx:"27",cy:"27",r:"16"},null),t.createVNode("path",{d:"M37 7c-8 0-15 5-16 12",stroke:i(11),"stroke-width":"3",opacity:".5","stroke-linecap":"round",transform:"rotate(45 29 13)"},null)])]),g=()=>{var a;if(o.image)return o.image();const n={error:f,search:h,network:v,default:m};return(null==(a=n[e.image])?void 0:a.call(n))||t.createVNode("img",{src:e.image},null)};return()=>t.createVNode("div",{class:Ii()},[t.createVNode("div",{class:Ii("image"),style:pe(e.imageSize)},[g()]),a(),n()])}})),[Li,$i,Mi]=Ie("coupon-list"),Fi={code:N(""),coupons:w(),currency:N(""),showCount:b,emptyImage:String,enabledTitle:String,disabledTitle:String,disabledCoupons:w(),showExchangeBar:b,showCloseButton:b,closeButtonText:String,inputPlaceholder:String,exchangeMinLength:x(1),exchangeButtonText:String,displayedCouponIndex:x(-1),exchangeButtonLoading:Boolean,exchangeButtonDisabled:Boolean,chosenCoupon:{type:[Number,Array],default:-1}};const Ri=Xe(t.defineComponent({name:Li,props:Fi,emits:["change","exchange","update:code"],setup(e,{emit:o,slots:a}){const[n,r]=Fo(),l=t.ref(),i=t.ref(),s=t.ref(0),c=t.ref(0),d=t.ref(e.code),u=t.computed((()=>!e.exchangeButtonLoading&&(e.exchangeButtonDisabled||!d.value||d.value.length{const e=P(l).height,t=P(i).height+44;c.value=(e>t?e:ce.value)-t},v=()=>{o("exchange",d.value),e.code||(d.value="")},m=e=>{t.nextTick((()=>{var t;return null==(t=n.value[e])?void 0:t.scrollIntoView()}))},f=()=>t.createVNode(Ei,{image:e.emptyImage},{default:()=>[t.createVNode("p",{class:$i("empty-tip")},[Mi("noCoupon")])]}),h=()=>{if(e.showExchangeBar)return t.createVNode("div",{ref:i,class:$i("exchange-bar")},[t.createVNode(Qa,{modelValue:d.value,"onUpdate:modelValue":e=>d.value=e,clearable:!0,border:!1,class:$i("field"),placeholder:e.inputPlaceholder||Mi("placeholder"),maxlength:"20"},null),t.createVNode(Ot,{plain:!0,type:"primary",class:$i("exchange"),text:e.exchangeButtonText||Mi("exchange"),loading:e.exchangeButtonLoading,disabled:u.value,onClick:v},null)])},g=()=>{const{coupons:n,chosenCoupon:l}=e,i=e.showCount?` (${n.length})`:"",s=(e.enabledTitle||Mi("enable"))+i;return t.createVNode(ma,{title:s},{default:()=>{var i;return[t.createVNode("div",{class:$i("list",{"with-bottom":e.showCloseButton}),style:{height:`${c.value}px`}},[n.map(((a,n)=>t.createVNode(ki,{key:a.id,ref:r(n),coupon:a,chosen:Array.isArray(l)?l.includes(n):n===l,currency:e.currency,onClick:()=>o("change",Array.isArray(l)?((e=[],t=0)=>e.includes(t)?e.filter((e=>e!==t)):[...e,t])(l,n):n)},null))),!n.length&&f(),null==(i=a["list-footer"])?void 0:i.call(a)])]}})},b=()=>{const{disabledCoupons:o}=e,n=e.showCount?` (${o.length})`:"",r=(e.disabledTitle||Mi("disabled"))+n;return t.createVNode(ma,{title:r},{default:()=>{var n;return[t.createVNode("div",{class:$i("list",{"with-bottom":e.showCloseButton}),style:{height:`${c.value}px`}},[o.map((o=>t.createVNode(ki,{disabled:!0,key:o.id,coupon:o,currency:e.currency},null))),!o.length&&f(),null==(n=a["disabled-list-footer"])?void 0:n.call(a)])]}})};return t.watch((()=>e.code),(e=>{d.value=e})),t.watch(ce,p),t.watch(d,(e=>o("update:code",e))),t.watch((()=>e.displayedCouponIndex),m),t.onMounted((()=>{p(),m(e.displayedCouponIndex)})),()=>t.createVNode("div",{ref:l,class:$i()},[h(),t.createVNode(fa,{active:s.value,"onUpdate:active":e=>s.value=e,class:$i("tab")},{default:()=>[g(),b()]}),t.createVNode("div",{class:$i("bottom")},[a["list-button"]?a["list-button"]():t.withDirectives(t.createVNode(Ot,{round:!0,block:!0,type:"primary",class:$i("close"),text:e.closeButtonText||Mi("close"),onClick:()=>o("change",Array.isArray(e.chosenCoupon)?[]:-1)},null),[[t.vShow,e.showCloseButton]])])])}})),Hi=(new Date).getFullYear(),[ji]=Ie("date-picker"),Wi=a({},_r,{columnsType:{type:Array,default:()=>["year","month","day"]},minDate:{type:Date,default:()=>new Date(Hi-10,0,1),validator:c},maxDate:{type:Date,default:()=>new Date(Hi+10,11,31),validator:c}});const Ui=Xe(t.defineComponent({name:ji,props:Wi,emits:["confirm","cancel","change","update:modelValue"],setup(e,{emit:o,slots:a}){const n=t.ref(e.modelValue),r=t.ref(!1),l=t.ref(),i=t=>t===e.minDate.getFullYear(),s=t=>t===e.maxDate.getFullYear(),c=t=>{const{minDate:o,columnsType:a}=e,l=a.indexOf(t),i=r.value?e.modelValue[l]:n.value[l];if(i)return+i;switch(t){case"year":return o.getFullYear();case"month":return o.getMonth()+1;case"day":return o.getDate()}},d=()=>{const t=c("year"),o=c("month"),a=i(t)&&(t=>t===e.minDate.getMonth()+1)(o)?e.minDate.getDate():1,n=s(t)&&(t=>t===e.maxDate.getMonth()+1)(o)?e.maxDate.getDate():Qr(t,o);return el(a,n,"day",e.formatter,e.filter)},u=t.computed((()=>e.columnsType.map((t=>{switch(t){case"year":return(()=>{const t=e.minDate.getFullYear(),o=e.maxDate.getFullYear();return el(t,o,"year",e.formatter,e.filter)})();case"month":return(()=>{const t=c("year"),o=i(t)?e.minDate.getMonth()+1:1,a=s(t)?e.maxDate.getMonth()+1:12;return el(o,a,"month",e.formatter,e.filter)})();case"day":return d();default:return[]}}))));t.watch(n,(t=>{m(t,e.modelValue)||o("update:modelValue",t)})),t.watch((()=>e.modelValue),((e,t)=>{r.value=m(t,n.value),e=tl(e,u.value),m(e,n.value)||(n.value=e),r.value=!1}),{immediate:!0});const p=(...e)=>o("change",...e),f=(...e)=>o("cancel",...e),h=(...e)=>o("confirm",...e);return at({confirm:()=>{var e;return null==(e=l.value)?void 0:e.confirm()},getSelectedDate:()=>n.value}),()=>t.createVNode(Pa,t.mergeProps({ref:l,modelValue:n.value,"onUpdate:modelValue":e=>n.value=e,columns:u.value,onChange:p,onCancel:f,onConfirm:h},v(e,Jr)),a)}})),[Yi,Xi,qi]=Ie("dialog"),Gi=a({},Ht,{title:String,theme:String,width:g,message:[String,Function],callback:Function,allowHtml:Boolean,className:h,transition:N("van-dialog-bounce"),messageAlign:String,closeOnPopstate:b,showCancelButton:Boolean,cancelButtonText:String,cancelButtonColor:String,cancelButtonDisabled:Boolean,confirmButtonText:String,confirmButtonColor:String,confirmButtonDisabled:Boolean,showConfirmButton:b,closeOnClickOverlay:Boolean}),Zi=[...jt,"transition","closeOnPopstate"];var Ki=t.defineComponent({name:Yi,props:Gi,emits:["confirm","cancel","keydown","update:show"],setup(e,{emit:a,slots:n}){const r=t.ref(),l=t.reactive({confirm:!1,cancel:!1}),s=e=>a("update:show",e),c=t=>{var o;s(!1),null==(o=e.callback)||o.call(e,t)},d=t=>()=>{e.show&&(a(t),e.beforeClose?(l[t]=!0,Ye(e.beforeClose,{args:[t],done(){c(t),l[t]=!1},canceled(){l[t]=!1}})):c(t))},u=d("cancel"),p=d("confirm"),m=t.withKeys((t=>{var n,l;if(t.target!==(null==(l=null==(n=r.value)?void 0:n.popupRef)?void 0:l.value))return;({Enter:e.showConfirmButton?p:o,Escape:e.showCancelButton?u:o})[t.key](),a("keydown",t)}),["enter","esc"]),f=()=>{const o=n.title?n.title():e.title;if(o)return t.createVNode("div",{class:Xi("header",{isolated:!e.message&&!n.default})},[o])},h=o=>{const{message:a,allowHtml:n,messageAlign:r}=e,l=Xi("message",{"has-title":o,[r]:r}),s=i(a)?a():a;return n&&"string"==typeof s?t.createVNode("div",{class:l,innerHTML:s},null):t.createVNode("div",{class:l},[s])},g=()=>{if(n.default)return t.createVNode("div",{class:Xi("content")},[n.default()]);const{title:o,message:a,allowHtml:r}=e;if(a){const e=!(!o&&!n.title);return t.createVNode("div",{key:r?1:0,class:Xi("content",{isolated:!e})},[h(e)])}},b=()=>n.footer?n.footer():"round-button"===e.theme?t.createVNode(ot,{class:Xi("footer")},{default:()=>[e.showCancelButton&&t.createVNode(Lt,{type:"warning",text:e.cancelButtonText||qi("cancel"),class:Xi("cancel"),color:e.cancelButtonColor,loading:l.cancel,disabled:e.cancelButtonDisabled,onClick:u},null),e.showConfirmButton&&t.createVNode(Lt,{type:"danger",text:e.confirmButtonText||qi("confirm"),class:Xi("confirm"),color:e.confirmButtonColor,loading:l.confirm,disabled:e.confirmButtonDisabled,onClick:p},null)]}):t.createVNode("div",{class:[Ee,Xi("footer")]},[e.showCancelButton&&t.createVNode(Ot,{size:"large",text:e.cancelButtonText||qi("cancel"),class:Xi("cancel"),style:{color:e.cancelButtonColor},loading:l.cancel,disabled:e.cancelButtonDisabled,onClick:u},null),e.showConfirmButton&&t.createVNode(Ot,{size:"large",text:e.confirmButtonText||qi("confirm"),class:[Xi("confirm"),{[Le]:e.showCancelButton}],style:{color:e.confirmButtonColor},loading:l.confirm,disabled:e.confirmButtonDisabled,onClick:p},null)]);return()=>{const{width:o,title:a,theme:n,message:l,className:i}=e;return t.createVNode(oo,t.mergeProps({ref:r,role:"dialog",class:[Xi([n]),i],style:{width:ue(o)},tabindex:0,"aria-labelledby":a||l,onKeydown:m,"onUpdate:show":s},v(e,Zi)),{default:()=>[f(),g(),b()]})}}});let _i;const Ji={title:"",width:"",theme:null,message:"",overlay:!0,callback:null,teleport:"body",className:"",allowHtml:!1,lockScroll:!0,transition:void 0,beforeClose:null,overlayClass:"",overlayStyle:void 0,messageAlign:"",cancelButtonText:"",cancelButtonColor:null,cancelButtonDisabled:!1,confirmButtonText:"",confirmButtonColor:null,confirmButtonDisabled:!1,showConfirmButton:!0,showCancelButton:!1,closeOnPopstate:!0,closeOnClickOverlay:!1};let Qi=a({},Ji);function es(e){return n?new Promise(((o,n)=>{_i||function(){const e={setup(){const{state:e,toggle:o}=ln();return()=>t.createVNode(Ki,t.mergeProps(e,{"onUpdate:show":o}),null)}};({instance:_i}=sn(e))}(),_i.open(a({},Qi,e,{callback:e=>{("confirm"===e?o:n)(e)}}))})):Promise.resolve(void 0)}const ts=Xe(Ki),[os,as]=Ie("divider"),ns={dashed:Boolean,hairline:b,vertical:Boolean,contentPosition:N("center")};const rs=Xe(t.defineComponent({name:os,props:ns,setup:(e,{slots:o})=>()=>{var a;return t.createVNode("div",{role:"separator",class:as({dashed:e.dashed,hairline:e.hairline,vertical:e.vertical,[`content-${e.contentPosition}`]:!!o.default&&!e.vertical})},[!e.vertical&&(null==(a=o.default)?void 0:a.call(o))])}})),[ls,is]=Ie("dropdown-menu"),ss={overlay:b,zIndex:g,duration:V(.2),direction:N("down"),activeColor:String,autoLocate:Boolean,closeOnClickOutside:b,closeOnClickOverlay:b,swipeThreshold:g},cs=Symbol(ls);var ds=t.defineComponent({name:ls,props:ss,setup(e,{slots:o}){const a=Mo(),n=t.ref(),r=t.ref(),i=t.ref(0),{children:s,linkChildren:c}=I(cs),d=Z(n),u=t.computed((()=>s.some((e=>e.state.showWrapper)))),p=t.computed((()=>e.swipeThreshold&&s.length>+e.swipeThreshold)),v=t.computed((()=>{if(u.value&&l(e.zIndex))return{zIndex:+e.zIndex+1}})),m=()=>{s.forEach((e=>{e.toggle(!1)}))},f=()=>{if(r.value){const t=P(r);"down"===e.direction?i.value=t.bottom:i.value=ce.value-t.top}},h=(o,n)=>{const{showPopup:r}=o.state,{disabled:l,titleClass:i}=o;return t.createVNode("div",{id:`${a}-${n}`,role:"button",tabindex:l?void 0:0,class:[is("item",{disabled:l,grow:p.value}),{[je]:!l}],onClick:()=>{var e;l||(e=n,s.forEach(((t,o)=>{o===e?t.toggle():t.state.showPopup&&t.toggle(!1,{immediate:!0})})))}},[t.createVNode("span",{class:[is("title",{down:r===("down"===e.direction),active:r}),i],style:{color:r?e.activeColor:""}},[t.createVNode("div",{class:"van-ellipsis"},[o.renderTitle()])])])};return at({close:m}),c({id:a,props:e,offset:i,updateOffset:f}),W(n,(()=>{e.closeOnClickOutside&&m()})),j("scroll",(()=>{u.value&&f()}),{target:d,passive:!0}),()=>{var e;return t.createVNode("div",{ref:n,class:is()},[t.createVNode("div",{ref:r,style:v.value,class:is("bar",{opened:u.value,scrollable:p.value})},[s.map(h)]),null==(e=o.default)?void 0:e.call(o)])}}});const[us,ps]=Ie("dropdown-item"),vs={title:String,options:w(),disabled:Boolean,teleport:[String,Object],lazyRender:b,modelValue:h,titleClass:h};const ms=Xe(t.defineComponent({name:us,inheritAttrs:!1,props:vs,emits:["open","opened","close","closed","change","update:modelValue"],setup(e,{emit:o,slots:a,attrs:n}){const r=t.reactive({showPopup:!1,transition:!0,showWrapper:!1}),l=t.ref(),{parent:i,index:s}=D(cs);if(!i)return;const c=e=>()=>o(e),d=c("open"),u=c("close"),p=c("opened"),v=()=>{r.showWrapper=!1,o("closed")},m=t=>{e.teleport&&t.stopPropagation()},f=a=>{const{activeColor:n}=i.props,{disabled:l}=a,s=a.value===e.modelValue;return t.createVNode(Ma,{role:"menuitem",key:String(a.value),icon:a.icon,title:a.text,class:ps("option",{active:s,disabled:l}),style:{color:s?n:""},tabindex:s?0:-1,clickable:!l,onClick:()=>{l||(r.showPopup=!1,a.value!==e.modelValue&&(o("update:modelValue",a.value),o("change",a.value)))}},{value:()=>{if(s)return t.createVNode(xt,{class:ps("icon"),color:l?void 0:n,name:"success"},null)}})},h=()=>{const{offset:o}=i,{autoLocate:c,zIndex:h,overlay:g,duration:b,direction:y,closeOnClickOverlay:w}=i.props,x=ve(h);let V=o.value;if(c&&l.value){const e=function(e){let t=e.parentElement;for(;t;){if(t&&"HTML"!==t.tagName&&"BODY"!==t.tagName&&de(t))return t;t=t.parentElement}return null}(l.value);e&&(V-=P(e).top)}return"down"===y?x.top=`${V}px`:x.bottom=`${V}px`,t.withDirectives(t.createVNode("div",t.mergeProps({ref:l,style:x,class:ps([y]),onClick:m},n),[t.createVNode(oo,{show:r.showPopup,"onUpdate:show":e=>r.showPopup=e,role:"menu",class:ps("content"),overlay:g,position:"down"===y?"top":"bottom",duration:r.transition?b:0,lazyRender:e.lazyRender,overlayStyle:{position:"absolute"},"aria-labelledby":`${i.id}-${s.value}`,closeOnClickOverlay:w,onOpen:d,onClose:u,onOpened:p,onClosed:v},{default:()=>{var t;return[e.options.map(f),null==(t=a.default)?void 0:t.call(a)]}})]),[[t.vShow,r.showWrapper]])};return at({state:r,toggle:(e=!r.showPopup,t={})=>{e!==r.showPopup&&(r.showPopup=e,r.transition=!t.immediate,e&&(i.updateOffset(),r.showWrapper=!0))},renderTitle:()=>{if(a.title)return a.title();if(e.title)return e.title;const t=e.options.find((t=>t.value===e.modelValue));return t?t.text:""}}),()=>e.teleport?t.createVNode(t.Teleport,{to:e.teleport},{default:()=>[h()]}):h()}})),fs=Xe(ds),hs={gap:x(24),icon:String,axis:N("y"),magnetic:String,offset:{type:Object,default:()=>({x:-1,y:-1})},teleport:{type:[String,Object],default:"body"}},[gs,bs]=Ie("floating-bubble");const ys=Xe(t.defineComponent({name:gs,inheritAttrs:!1,props:hs,emits:["click","update:offset","offsetChange"],setup(e,{slots:o,emit:a,attrs:n}){const r=t.ref(),l=t.ref({x:0,y:0,width:0,height:0}),i=t.computed((()=>({top:e.gap,right:se.value-l.value.width-e.gap,bottom:ce.value-l.value.height-e.gap,left:e.gap}))),s=t.ref(!1);let c=!1;const d=t.computed((()=>{const e={},t=ue(l.value.x),o=ue(l.value.y);return e.transform=`translate3d(${t}, ${o}, 0)`,!s.value&&c||(e.transition="none"),e})),u=()=>{if(!y.value)return;const{width:t,height:o}=P(r.value),{offset:a}=e;l.value={x:a.x>-1?a.x:se.value-t-e.gap,y:a.y>-1?a.y:ce.value-o-e.gap,width:t,height:o}},p=Wt();let m=0,f=0;const h=e=>{p.start(e),s.value=!0,m=l.value.x,f=l.value.y};j("touchmove",(t=>{if(t.preventDefault(),p.move(t),"lock"!==e.axis&&!p.isTap.value){if("x"===e.axis||"xy"===e.axis){let e=m+p.deltaX.value;ei.value.right&&(e=i.value.right),l.value.x=e}if("y"===e.axis||"xy"===e.axis){let e=f+p.deltaY.value;ei.value.bottom&&(e=i.value.bottom),l.value.y=e}const t=v(l.value,["x","y"]);a("update:offset",t)}}),{target:r});const g=()=>{s.value=!1,t.nextTick((()=>{if("x"===e.magnetic){const e=qe([i.value.left,i.value.right],l.value.x);l.value.x=e}if("y"===e.magnetic){const e=qe([i.value.top,i.value.bottom],l.value.y);l.value.y=e}if(!p.isTap.value){const e=v(l.value,["x","y"]);a("update:offset",e),m===e.x&&f===e.y||a("offsetChange",e)}}))},b=e=>{p.isTap.value?a("click",e):e.stopPropagation()};t.onMounted((()=>{u(),t.nextTick((()=>{c=!0}))})),t.watch([se,ce,()=>e.gap,()=>e.offset],u,{deep:!0});const y=t.ref(!0);return t.onActivated((()=>{y.value=!0})),t.onDeactivated((()=>{e.teleport&&(y.value=!1)})),()=>{const a=t.withDirectives(t.createVNode("div",t.mergeProps({class:bs(),ref:r,onTouchstartPassive:h,onTouchend:g,onTouchcancel:g,onClickCapture:b,style:d.value},n),[o.default?o.default():t.createVNode(Vt,{name:e.icon,class:bs("icon")},null)]),[[t.vShow,y.value]]);return e.teleport?t.createVNode(t.Teleport,{to:e.teleport},{default:()=>[a]}):a}}})),ws={height:V(0),anchors:w(),duration:V(.3),contentDraggable:b,lockScroll:Boolean,safeAreaInsetBottom:b},[xs,Vs]=Ie("floating-panel");const Ns=Xe(t.defineComponent({name:xs,props:ws,emits:["heightChange","update:height"],setup(e,{emit:o,slots:a}){const n=t.ref(),r=t.ref(),l=ko((()=>+e.height),(e=>o("update:height",e))),i=t.computed((()=>{var t,o;return{min:null!=(t=e.anchors[0])?t:100,max:null!=(o=e.anchors[e.anchors.length-1])?o:Math.round(.6*ce.value)}})),s=t.computed((()=>e.anchors.length>=2?e.anchors:[i.value.min,i.value.max])),c=t.ref(!1),d=t.computed((()=>({height:ue(i.value.max),transform:`translateY(calc(100% + ${ue(-l.value)}))`,transition:c.value?"none":`transform ${e.duration}s cubic-bezier(0.18, 0.89, 0.32, 1.28)`})));let u,p=-1;const v=Wt(),m=e=>{v.start(e),c.value=!0,u=-l.value,p=-1},f=()=>{p=-1,c.value=!1,l.value=qe(s.value,l.value),l.value!==-u&&o("heightChange",{height:l.value})};t.watch(i,(()=>{l.value=qe(s.value,l.value)}),{immediate:!0}),Xt(n,(()=>e.lockScroll||c.value)),j("touchmove",(t=>{var o;v.move(t);const a=t.target;if(r.value===a||(null==(o=r.value)?void 0:o.contains(a))){const{scrollTop:o}=r.value;if(p=Math.max(p,o),!e.contentDraggable)return;if(-u0)||p>0)return}const n=v.deltaY.value+u;l.value=-(e=>{const t=Math.abs(e),{min:o,max:a}=i.value;return t>a?-(a+.2*(t-a)):t{var o;return t.createVNode("div",{class:[Vs(),{"van-safe-area-bottom":e.safeAreaInsetBottom}],ref:n,style:d.value,onTouchstartPassive:m,onTouchend:f,onTouchcancel:f},[a.header?a.header():t.createVNode("div",{class:Vs("header")},[t.createVNode("div",{class:Vs("header-bar")},null)]),t.createVNode("div",{class:Vs("content"),ref:r},[null==(o=a.default)?void 0:o.call(a)])])}}})),[Cs,ks]=Ie("grid"),Ss={square:Boolean,center:b,border:b,gutter:g,reverse:Boolean,iconSize:g,direction:String,clickable:Boolean,columnNum:V(4)},Ts=Symbol(Cs);const Bs=Xe(t.defineComponent({name:Cs,props:Ss,setup(e,{slots:o}){const{linkChildren:a}=I(Ts);return a({props:e}),()=>{var a;return t.createVNode("div",{style:{paddingLeft:ue(e.gutter)},class:[ks(),{[Ee]:e.border&&!e.gutter}]},[null==(a=o.default)?void 0:a.call(o)])}}})),[Ps,Ds]=Ie("grid-item"),As=a({},nt,{dot:Boolean,text:String,icon:String,badge:g,iconColor:String,iconPrefix:String,badgeProps:Object});const Os=Xe(t.defineComponent({name:Ps,props:As,setup(e,{slots:o}){const{parent:a,index:n}=D(Ts),r=lt();if(!a)return;const l=t.computed((()=>{const{square:e,gutter:t,columnNum:o}=a.props,r=100/+o+"%",l={flexBasis:r};if(e)l.paddingTop=r;else if(t){const e=ue(t);l.paddingRight=e,n.value>=+o&&(l.marginTop=e)}return l})),i=t.computed((()=>{const{square:e,gutter:t}=a.props;if(e&&t){const e=ue(t);return{right:e,bottom:e,height:"auto"}}}));return()=>{const{center:n,border:s,square:c,gutter:d,reverse:u,direction:p,clickable:v}=a.props,m=[Ds("content",[p,{center:n,square:c,reverse:u,clickable:v,surround:s&&d}]),{[ze]:s}];return t.createVNode("div",{class:[Ds({square:c})],style:l.value},[t.createVNode("div",{role:v?"button":void 0,class:m,style:i.value,tabindex:v?0:void 0,onClick:r},[o.default?o.default():[o.icon?t.createVNode(dt,t.mergeProps({dot:e.dot,content:e.badge},e.badgeProps),{default:o.icon}):e.icon?t.createVNode(xt,{dot:e.dot,name:e.icon,size:a.props.iconSize,badge:e.badge,class:Ds("icon"),color:e.iconColor,badgeProps:e.badgeProps,classPrefix:e.iconPrefix},null):void 0,o.text?o.text():e.text?t.createVNode("span",{class:Ds("text")},[e.text]):void 0]])])}}})),[Is,zs]=Ie("highlight"),Es={autoEscape:b,caseSensitive:Boolean,highlightClass:String,highlightTag:N("span"),keywords:y([String,Array]),sourceString:N(""),tag:N("div"),unhighlightClass:String,unhighlightTag:N("span")};const Ls=Xe(t.defineComponent({name:Is,props:Es,setup(e){const o=t.computed((()=>{const{autoEscape:t,caseSensitive:o,keywords:a,sourceString:n}=e,r=o?"g":"gi";let l=(Array.isArray(a)?a:[a]).filter((e=>e)).reduce(((e,o)=>{t&&(o=o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"));const a=new RegExp(o,r);let l;for(;l=a.exec(n);){const t=l.index,o=a.lastIndex;t>=o?a.lastIndex++:e.push({start:t,end:o,highlight:!0})}return e}),[]);l=l.sort(((e,t)=>e.start-t.start)).reduce(((e,t)=>{const o=e[e.length-1];if(!o||t.start>o.end){const a=o?o.end:0,n=t.start;a!==n&&e.push({start:a,end:n,highlight:!1}),e.push(t)}else o.end=Math.max(o.end,t.end);return e}),[]);const i=l[l.length-1];return i||l.push({start:0,end:n.length,highlight:!1}),i&&i.end{const{sourceString:a,highlightClass:n,unhighlightClass:r,highlightTag:l,unhighlightTag:i}=e;return o.value.map((e=>{const{start:o,end:s,highlight:c}=e,d=a.slice(o,s);return c?t.createVNode(l,{class:[zs("tag"),n]},{default:()=>[d]}):t.createVNode(i,{class:r},{default:()=>[d]})}))};return()=>{const{tag:o}=e;return t.createVNode(o,{class:zs()},{default:()=>[a()]})}}})),$s=e=>Math.sqrt((e[0].clientX-e[1].clientX)**2+(e[0].clientY-e[1].clientY)**2),Ms=Ie("image-preview")[1],Fs={src:String,show:Boolean,active:Number,minZoom:y(g),maxZoom:y(g),rootWidth:y(Number),rootHeight:y(Number),disableZoom:Boolean,doubleScale:Boolean,closeOnClickImage:Boolean,closeOnClickOverlay:Boolean,vertical:Boolean};var Rs=t.defineComponent({props:Fs,emits:["scale","close","longPress"],setup(e,{emit:o,slots:a}){const n=t.reactive({scale:1,moveX:0,moveY:0,moving:!1,zooming:!1,initializing:!1,imageRatio:0}),r=Wt(),l=t.ref(),i=t.ref(),s=t.ref(!1),c=t.ref(!1);let d=0;const u=t.computed((()=>{const{scale:e,moveX:t,moveY:o,moving:a,zooming:r,initializing:l}=n,i={transitionDuration:r||a||l?"0s":".3s"};return(1!==e||c.value)&&(i.transform=`matrix(${e}, 0, 0, ${e}, ${t}, ${o})`),i})),p=t.computed((()=>{if(n.imageRatio){const{rootWidth:t,rootHeight:o}=e,a=s.value?o/n.imageRatio:t;return Math.max(0,(n.scale*a-t)/2)}return 0})),v=t.computed((()=>{if(n.imageRatio){const{rootWidth:t,rootHeight:o}=e,a=s.value?o:t*n.imageRatio;return Math.max(0,(n.scale*a-o)/2)}return 0})),m=(t,a)=>{var r;if((t=we(t,+e.minZoom,+e.maxZoom+1))!==n.scale){const i=t/n.scale;if(n.scale=t,a){const e=P(null==(r=l.value)?void 0:r.$el),t={x:.5*e.width,y:.5*e.height},o=n.moveX-(a.x-e.left-t.x)*(i-1),s=n.moveY-(a.y-e.top-t.y)*(i-1);n.moveX=we(o,-p.value,p.value),n.moveY=we(s,-v.value,v.value)}else n.moveX=0,n.moveY=c.value?d:0;o("scale",{scale:t,index:e.active})}},f=()=>{m(1)};let h,g,b,y,w,x,V,N,C=!1;const S=t=>{const{touches:o}=t;if(h=o.length,2===h&&e.disableZoom)return;const{offsetX:a}=r;r.start(t),g=n.moveX,b=n.moveY,N=Date.now(),C=!1,n.moving=1===h&&(1!==n.scale||c.value),n.zooming=2===h&&!a.value,n.zooming&&(y=n.scale,w=$s(o))},T=t=>{var a;const n=null==(a=i.value)?void 0:a.$el;if(!n)return;const r=n.firstElementChild,l=t.target===n,s=null==r?void 0:r.contains(t.target);!e.closeOnClickImage&&s||!e.closeOnClickOverlay&&l||o("close")},B=t=>{if(h>1)return;const a=Date.now()-N;r.isTap.value&&(a<250?e.doubleScale?V?(clearTimeout(V),V=null,(()=>{const e=n.scale>1?1:2;m(e,2===e||c.value?{x:r.startX.value,y:r.startY.value}:void 0)})()):V=setTimeout((()=>{T(t),V=null}),250):T(t):a>500&&o("longPress"))},D=t=>{let o=!1;if((n.moving||n.zooming)&&(o=!0,n.moving&&g===n.moveX&&b===n.moveY&&(o=!1),!t.touches.length)){n.zooming&&(n.moveX=we(n.moveX,-p.value,p.value),n.moveY=we(n.moveY,-v.value,v.value),n.zooming=!1),n.moving=!1,g=0,b=0,y=1,n.scale<1&&f();const t=+e.maxZoom;n.scale>t&&m(t,x)}le(t,o),B(t),r.reset()},A=()=>{const{rootWidth:t,rootHeight:o}=e,a=o/t,{imageRatio:r}=n;s.value=n.imageRatio>a&&r<2.6,c.value=n.imageRatio>a&&r>=2.6,c.value&&(d=(r*t-o)/2,n.moveY=d,n.initializing=!0,k((()=>{n.initializing=!1}))),f()},O=e=>{const{naturalWidth:t,naturalHeight:o}=e.target;n.imageRatio=o/t,A()};return t.watch((()=>e.active),f),t.watch((()=>e.show),(e=>{e||f()})),t.watch((()=>[e.rootWidth,e.rootHeight]),A),j("touchmove",(t=>{const{touches:o}=t;if(r.move(t),n.moving){const{deltaX:o,deltaY:a}=r,l=o.value+g,i=a.value+b;if((e.vertical?r.isVertical()&&Math.abs(i)>v.value:r.isHorizontal()&&Math.abs(l)>p.value)&&!C)return void(n.moving=!1);C=!0,le(t,!0),n.moveX=we(l,-p.value,p.value),n.moveY=we(i,-v.value,v.value)}if(n.zooming&&(le(t,!0),2===o.length)){const e=$s(o),t=y*e/w;x=(e=>({x:(e[0].clientX+e[1].clientX)/2,y:(e[0].clientY+e[1].clientY)/2}))(o),m(t,x)}}),{target:t.computed((()=>{var e;return null==(e=i.value)?void 0:e.$el}))}),at({resetScale:f}),()=>{const o={loading:()=>t.createVNode(Bt,{type:"spinner"},null)};return t.createVNode(da,{ref:i,class:Ms("swipe-item"),onTouchstartPassive:S,onTouchend:D,onTouchcancel:D},{default:()=>[a.image?t.createVNode("div",{class:Ms("image-wrap")},[a.image({src:e.src,onLoad:O,style:u.value})]):t.createVNode(ml,{ref:l,src:e.src,fit:"contain",class:Ms("image",{vertical:s.value}),style:u.value,onLoad:O},o)]})}}});const[Hs,js]=Ie("image-preview"),Ws=["show","teleport","transition","overlayStyle","closeOnPopstate"],Us={show:Boolean,loop:b,images:w(),minZoom:V(1/3),maxZoom:V(3),overlay:b,vertical:Boolean,closeable:Boolean,showIndex:b,className:h,closeIcon:N("clear"),transition:String,beforeClose:Function,doubleScale:b,overlayClass:h,overlayStyle:Object,swipeDuration:V(300),startPosition:V(0),showIndicators:Boolean,closeOnPopstate:b,closeOnClickImage:b,closeOnClickOverlay:b,closeIconPosition:N("top-right"),teleport:[String,Object]};var Ys=t.defineComponent({name:Hs,props:Us,emits:["scale","close","closed","change","longPress","update:show"],setup(e,{emit:o,slots:a}){const n=t.ref(),r=t.ref(),l=t.reactive({active:0,rootWidth:0,rootHeight:0,disableZoom:!1}),i=()=>{if(n.value){const e=P(n.value.$el);l.rootWidth=e.width,l.rootHeight=e.height,n.value.resize()}},s=e=>o("scale",e),c=e=>o("update:show",e),d=()=>{Ye(e.beforeClose,{args:[l.active],done:()=>c(!1)})},u=e=>{e!==l.active&&(l.active=e,o("change",e))},p=()=>{if(e.showIndex)return t.createVNode("div",{class:js("index")},[a.index?a.index({index:l.active}):`${l.active+1} / ${e.images.length}`])},m=()=>{if(a.cover)return t.createVNode("div",{class:js("cover")},[a.cover()])},f=()=>{l.disableZoom=!0},h=()=>{l.disableZoom=!1},g=()=>{if(e.closeable)return t.createVNode(xt,{role:"button",name:e.closeIcon,class:[js("close-icon",e.closeIconPosition),je],onClick:d},null)},b=()=>o("closed"),y=(e,t)=>{var o;return null==(o=n.value)?void 0:o.swipeTo(e,t)};return at({resetScale:()=>{var e;null==(e=r.value)||e.resetScale()},swipeTo:y}),t.onMounted(i),t.watch([se,ce],i),t.watch((()=>e.startPosition),(e=>u(+e))),t.watch((()=>e.show),(a=>{const{images:n,startPosition:r}=e;a?(u(+r),t.nextTick((()=>{i(),y(+r,{immediate:!0})}))):o("close",{index:l.active,url:n[l.active]})})),()=>t.createVNode(oo,t.mergeProps({class:[js(),e.className],overlayClass:[js("overlay"),e.overlayClass],onClosed:b,"onUpdate:show":c},v(e,Ws)),{default:()=>[g(),t.createVNode(Zo,{ref:n,lazyRender:!0,loop:e.loop,class:js("swipe"),vertical:e.vertical,duration:e.swipeDuration,initialSwipe:e.startPosition,showIndicators:e.showIndicators,indicatorColor:"white",onChange:u,onDragEnd:h,onDragStart:f},{default:()=>[e.images.map(((n,i)=>t.createVNode(Rs,{ref:e=>{i===l.active&&(r.value=e)},src:n,show:e.show,active:l.active,maxZoom:e.maxZoom,minZoom:e.minZoom,rootWidth:l.rootWidth,rootHeight:l.rootHeight,disableZoom:l.disableZoom,doubleScale:e.doubleScale,closeOnClickImage:e.closeOnClickImage,closeOnClickOverlay:e.closeOnClickOverlay,vertical:e.vertical,onScale:s,onClose:d,onLongPress:()=>o("longPress",{index:i})},{image:a.image})))]}),p(),m()]})}});let Xs;const qs={loop:!0,images:[],maxZoom:3,minZoom:1/3,onScale:void 0,onClose:void 0,onChange:void 0,vertical:!1,teleport:"body",className:"",showIndex:!0,closeable:!1,closeIcon:"clear",transition:void 0,beforeClose:void 0,doubleScale:!0,overlayStyle:void 0,overlayClass:void 0,startPosition:0,swipeDuration:300,showIndicators:!1,closeOnPopstate:!0,closeOnClickOverlay:!0,closeIconPosition:"top-right"};const Gs=(e,o=0)=>{if(n)return Xs||({instance:Xs}=sn({setup(){const{state:e,toggle:o}=ln(),a=()=>{e.images=[]};return()=>t.createVNode(Ys,t.mergeProps(e,{onClosed:a,"onUpdate:show":o}),null)}})),e=Array.isArray(e)?{images:e,startPosition:o}:e,Xs.open(a({},qs,e)),Xs},Zs=Xe(Ys);const[Ks,_s]=Ie("index-bar"),Js={sticky:b,zIndex:g,teleport:[String,Object],highlightColor:String,stickyOffsetTop:x(0),indexList:{type:Array,default:function(){const e="A".charCodeAt(0);return Array(26).fill("").map(((t,o)=>String.fromCharCode(e+o)))}}},Qs=Symbol(Ks);var ec=t.defineComponent({name:Ks,props:Js,emits:["select","change"],setup(e,{emit:o,slots:a}){const n=t.ref(),r=t.ref(),i=t.ref(""),s=Wt(),c=Z(n),{children:d,linkChildren:u}=I(Qs);let p;u({props:e});const v=t.computed((()=>{if(l(e.zIndex))return{zIndex:+e.zIndex+1}})),m=t.computed((()=>{if(e.highlightColor)return{color:e.highlightColor}})),f=(t,o)=>{for(let a=d.length-1;a>=0;a--){const n=a>0?o[a-1].height:0;if(t+(e.sticky?n+e.stickyOffsetTop:0)>=o[a].top)return a}return-1},h=e=>d.find((t=>String(t.index)===e)),g=()=>{if(ie(n))return;const{sticky:t,indexList:o}=e,a=J(c.value),r=P(c),l=d.map((e=>e.getRect(c.value,r)));let s=-1;if(p){const t=h(p);if(t){const o=t.getRect(c.value,r);s=e.sticky&&e.stickyOffsetTop?f(o.top-e.stickyOffsetTop,l):f(o.top,l)}}else s=f(a,l);i.value=o[s],t&&d.forEach(((t,o)=>{const{state:n,$el:i}=t;if(o===s||o===s-1){const e=i.getBoundingClientRect();n.left=e.left,n.width=e.width}else n.left=null,n.width=null;if(o===s)n.active=!0,n.top=Math.max(e.stickyOffsetTop,l[o].top-a)+r.top;else if(o===s-1&&""===p){const e=l[s].top-a;n.active=e>0,n.top=e+r.top-l[o].height}else n.active=!1})),p=""},b=()=>{t.nextTick(g)};j("scroll",g,{target:c,passive:!0}),t.onMounted(b),t.watch((()=>e.indexList),b),t.watch(i,(e=>{e&&o("change",e)}));const y=t=>{p=String(t);const a=h(p);if(a){const t=J(c.value),n=P(c),{offsetHeight:r}=document.documentElement;if(a.$el.scrollIntoView(),t===r-n.height)return void g();e.sticky&&e.stickyOffsetTop&&(ee()===r-n.height?te(ee()):te(ee()-e.stickyOffsetTop)),o("select",a.index)}},w=e=>{const{index:t}=e.dataset;t&&y(t)},x=e=>{w(e.target)};let V;const N=()=>t.createVNode("div",{ref:r,class:_s("sidebar"),style:v.value,onClick:x,onTouchstartPassive:s.start},[e.indexList.map((e=>{const o=e===i.value;return t.createVNode("span",{class:_s("index",{active:o}),style:o?m.value:void 0,"data-index":e},[e])}))]);return at({scrollTo:y}),j("touchmove",(e=>{if(s.move(e),s.isVertical()){le(e);const{clientX:t,clientY:o}=e.touches[0],a=document.elementFromPoint(t,o);if(a){const{index:e}=a.dataset;e&&V!==e&&(V=e,w(a))}}}),{target:r}),()=>{var o;return t.createVNode("div",{ref:n,class:_s()},[e.teleport?t.createVNode(t.Teleport,{to:e.teleport},{default:()=>[N()]}):N(),null==(o=a.default)?void 0:o.call(a)])}}});const[tc,oc]=Ie("index-anchor"),ac={index:g};const nc=Xe(t.defineComponent({name:tc,props:ac,setup(e,{slots:o}){const n=t.reactive({top:0,left:null,rect:{top:0,height:0},width:null,active:!1}),r=t.ref(),{parent:l}=D(Qs);if(!l)return;const i=()=>n.active&&l.props.sticky,s=t.computed((()=>{const{zIndex:e,highlightColor:t}=l.props;if(i())return a(ve(e),{left:n.left?`${n.left}px`:void 0,width:n.width?`${n.width}px`:void 0,transform:n.top?`translate3d(0, ${n.top}px, 0)`:void 0,color:t})}));return at({state:n,getRect:(e,t)=>{const o=P(r);return n.rect.height=o.height,e===window||e===document.body?n.rect.top=o.top+ee():n.rect.top=o.top+J(e)-t.top,n.rect}}),()=>{const a=i();return t.createVNode("div",{ref:r,style:{height:a?`${n.rect.height}px`:void 0}},[t.createVNode("div",{style:s.value,class:[oc({sticky:a}),{[Me]:a}]},[o.default?o.default():e.index])])}}})),rc=Xe(ec),[lc,ic,sc]=Ie("list"),cc={error:Boolean,offset:V(300),loading:Boolean,disabled:Boolean,finished:Boolean,scroller:Object,errorText:String,direction:N("down"),loadingText:String,finishedText:String,immediateCheck:b};const dc=Xe(t.defineComponent({name:lc,props:cc,emits:["load","update:error","update:loading"],setup(e,{emit:o,slots:a}){const n=t.ref(e.loading),r=t.ref(),l=t.ref(),i=t.inject(na,null),s=Z(r),c=t.computed((()=>e.scroller||s.value)),d=()=>{t.nextTick((()=>{if(n.value||e.finished||e.disabled||e.error||!1===(null==i?void 0:i.value))return;const{direction:t}=e,a=+e.offset,s=P(c);if(!s.height||ie(r))return;let d=!1;const u=P(l);d="up"===t?s.top-u.top<=a:u.bottom-s.bottom<=a,d&&(n.value=!0,o("update:loading",!0),o("load"))}))},u=()=>{if(e.finished){const o=a.finished?a.finished():e.finishedText;if(o)return t.createVNode("div",{class:ic("finished-text")},[o])}},p=()=>{o("update:error",!1),d()},v=()=>{if(e.error){const o=a.error?a.error():e.errorText;if(o)return t.createVNode("div",{role:"button",class:ic("error-text"),tabindex:0,onClick:p},[o])}},m=()=>{if(n.value&&!e.finished&&!e.disabled)return t.createVNode("div",{class:ic("loading")},[a.loading?a.loading():t.createVNode(Bt,{class:ic("loading-icon")},{default:()=>[e.loadingText||sc("loading")]})])};return t.watch((()=>[e.loading,e.finished,e.error]),d),i&&t.watch(i,(e=>{e&&d()})),t.onUpdated((()=>{n.value=e.loading})),t.onMounted((()=>{e.immediateCheck&&d()})),at({check:d}),j("scroll",d,{target:c,passive:!0}),()=>{var o;const i=null==(o=a.default)?void 0:o.call(a),s=t.createVNode("div",{ref:l,class:ic("placeholder")},null);return t.createVNode("div",{ref:r,role:"feed",class:ic(),"aria-busy":n.value},["down"===e.direction?i:s,m(),u(),v(),"up"===e.direction?i:s])}}})),[uc,pc]=Ie("nav-bar"),vc={title:String,fixed:Boolean,zIndex:g,border:b,leftText:String,rightText:String,leftDisabled:Boolean,rightDisabled:Boolean,leftArrow:Boolean,placeholder:Boolean,safeAreaInsetTop:Boolean,clickable:b};const mc=Xe(t.defineComponent({name:uc,props:vc,emits:["clickLeft","clickRight"],setup(e,{emit:o,slots:a}){const n=t.ref(),r=_e(n,pc),l=t=>{e.leftDisabled||o("clickLeft",t)},i=t=>{e.rightDisabled||o("clickRight",t)},s=()=>{const{title:o,fixed:r,border:s,zIndex:c}=e,d=ve(c),u=e.leftArrow||e.leftText||a.left,p=e.rightText||a.right;return t.createVNode("div",{ref:n,style:d,class:[pc({fixed:r}),{[Me]:s,"van-safe-area-top":e.safeAreaInsetTop}]},[t.createVNode("div",{class:pc("content")},[u&&t.createVNode("div",{class:[pc("left",{disabled:e.leftDisabled}),e.clickable&&!e.leftDisabled?je:""],onClick:l},[a.left?a.left():[e.leftArrow&&t.createVNode(xt,{class:pc("arrow"),name:"arrow-left"},null),e.leftText&&t.createVNode("span",{class:pc("text")},[e.leftText])]]),t.createVNode("div",{class:[pc("title"),"van-ellipsis"]},[a.title?a.title():o]),p&&t.createVNode("div",{class:[pc("right",{disabled:e.rightDisabled}),e.clickable&&!e.rightDisabled?je:""],onClick:i},[a.right?a.right():t.createVNode("span",{class:pc("text")},[e.rightText])])])])};return()=>e.fixed&&e.placeholder?r(s):s()}})),[fc,hc]=Ie("notice-bar"),gc={text:String,mode:String,color:String,delay:V(1),speed:V(60),leftIcon:String,wrapable:Boolean,background:String,scrollable:{type:Boolean,default:null}};const bc=Xe(t.defineComponent({name:fc,props:gc,emits:["close","replay"],setup(e,{emit:o,slots:a}){let n,r=0,i=0;const s=t.ref(),c=t.ref(),d=t.reactive({show:!0,offset:0,duration:0}),u=t=>{"closeable"===e.mode&&(d.show=!1,o("close",t))},p=()=>{if(a["right-icon"])return a["right-icon"]();const o="closeable"===e.mode?"cross":"link"===e.mode?"arrow":void 0;return o?t.createVNode(xt,{name:o,class:hc("right-icon"),onClick:u},null):void 0},v=()=>{d.offset=r,d.duration=0,k((()=>{T((()=>{d.offset=-i,d.duration=(i+r)/+e.speed,o("replay")}))}))},m=()=>{const o=!1===e.scrollable&&!e.wrapable,n={transform:d.offset?`translateX(${d.offset}px)`:"",transitionDuration:`${d.duration}s`};return t.createVNode("div",{ref:s,role:"marquee",class:hc("wrap")},[t.createVNode("div",{ref:c,style:n,class:[hc("content"),{"van-ellipsis":o}],onTransitionend:v},[a.default?a.default():e.text])])},f=()=>{const{delay:t,speed:o,scrollable:a}=e,u=l(t)?1e3*+t:0;r=0,i=0,d.offset=0,d.duration=0,clearTimeout(n),n=setTimeout((()=>{if(!s.value||!c.value||!1===a)return;const e=P(s).width,t=P(c).width;(a||t>e)&&T((()=>{r=e,i=t,d.offset=-i,d.duration=i/+o}))}),u)};return Ze(f),H(f),j("pageshow",f),at({reset:f}),t.watch((()=>[e.text,e.scrollable]),f),()=>{const{color:o,wrapable:n,background:r}=e;return t.withDirectives(t.createVNode("div",{role:"alert",class:hc({wrapable:n}),style:{color:o,background:r}},[a["left-icon"]?a["left-icon"]():e.leftIcon?t.createVNode(xt,{class:hc("left-icon"),name:e.leftIcon},null):void 0,m(),p()]),[[t.vShow,d.show]])}}})),[yc,wc]=Ie("notify"),xc=["lockScroll","position","show","teleport","zIndex"],Vc=a({},Ht,{type:N("danger"),color:String,message:g,position:N("top"),className:h,background:String,lockScroll:Boolean});var Nc=t.defineComponent({name:yc,props:Vc,emits:["update:show"],setup(e,{emit:o,slots:a}){const n=e=>o("update:show",e);return()=>t.createVNode(oo,t.mergeProps({class:[wc([e.type]),e.className],style:{color:e.color,background:e.background},overlay:!1,duration:.2,"onUpdate:show":n},v(e,xc)),{default:()=>[a.default?a.default():e.message]})}});let Cc,kc;let Sc={type:"danger",color:void 0,message:"",onClose:void 0,onClick:void 0,onOpened:void 0,duration:3e3,position:void 0,className:"",lockScroll:!1,background:void 0};const Tc=()=>{kc&&kc.toggle(!1)};const Bc=Xe(Nc),[Pc,Dc]=Ie("key"),Ac=t.createVNode("svg",{class:Dc("collapse-icon"),viewBox:"0 0 30 24"},[t.createVNode("path",{d:"M26 13h-2v2h2v-2zm-8-3h2V8h-2v2zm2-4h2V4h-2v2zm2 4h4V4h-2v4h-2v2zm-7 14 3-3h-6l3 3zM6 13H4v2h2v-2zm16 0H8v2h14v-2zm-12-3h2V8h-2v2zM28 0l1 1 1 1v15l-1 2H1l-1-2V2l1-1 1-1zm0 2H2v15h26V2zM6 4v2H4V4zm10 2h2V4h-2v2zM8 9v1H4V8zm8 0v1h-2V8zm-6-5v2H8V4zm4 0v2h-2V4z",fill:"currentColor"},null)]),Oc=t.createVNode("svg",{class:Dc("delete-icon"),viewBox:"0 0 32 22"},[t.createVNode("path",{d:"M28 0a4 4 0 0 1 4 4v14a4 4 0 0 1-4 4H10.4a2 2 0 0 1-1.4-.6L1 13.1c-.6-.5-.9-1.3-.9-2 0-1 .3-1.7.9-2.2L9 .6a2 2 0 0 1 1.4-.6zm0 2H10.4l-8.2 8.3a1 1 0 0 0-.3.7c0 .3.1.5.3.7l8.2 8.4H28a2 2 0 0 0 2-2V4c0-1.1-.9-2-2-2zm-5 4a1 1 0 0 1 .7.3 1 1 0 0 1 0 1.4L20.4 11l3.3 3.3c.2.2.3.5.3.7 0 .3-.1.5-.3.7a1 1 0 0 1-.7.3 1 1 0 0 1-.7-.3L19 12.4l-3.4 3.3a1 1 0 0 1-.6.3 1 1 0 0 1-.7-.3 1 1 0 0 1-.3-.7c0-.2.1-.5.3-.7l3.3-3.3-3.3-3.3A1 1 0 0 1 14 7c0-.3.1-.5.3-.7A1 1 0 0 1 15 6a1 1 0 0 1 .6.3L19 9.6l3.3-3.3A1 1 0 0 1 23 6z",fill:"currentColor"},null)]);var Ic=t.defineComponent({name:Pc,props:{type:String,text:g,color:String,wider:Boolean,large:Boolean,loading:Boolean},emits:["press"],setup(e,{emit:o,slots:a}){const n=t.ref(!1),r=Wt(),l=e=>{r.start(e),n.value=!0},i=e=>{r.move(e),r.direction.value&&(n.value=!1)},s=t=>{n.value&&(a.default||le(t),n.value=!1,o("press",e.text,e.type))},c=()=>{if(e.loading)return t.createVNode(Bt,{class:Dc("loading-icon")},null);const o=a.default?a.default():e.text;switch(e.type){case"delete":return o||Oc;case"extra":return o||Ac;default:return o}};return()=>t.createVNode("div",{class:Dc("wrapper",{wider:e.wider}),onTouchstartPassive:l,onTouchmovePassive:i,onTouchend:s,onTouchcancel:s},[t.createVNode("div",{role:"button",tabindex:0,class:Dc([e.color,{large:e.large,active:n.value,delete:"delete"===e.type}])},[c()])])}});const[zc,Ec]=Ie("number-keyboard"),Lc={show:Boolean,title:String,theme:N("default"),zIndex:g,teleport:[String,Object],maxlength:V(1/0),modelValue:N(""),transition:b,blurOnClose:b,showDeleteKey:b,randomKeyOrder:Boolean,closeButtonText:String,deleteButtonText:String,closeButtonLoading:Boolean,hideOnClickOutside:b,safeAreaInsetBottom:b,extraKey:{type:[String,Array],default:""}};const $c=Xe(t.defineComponent({name:zc,inheritAttrs:!1,props:Lc,emits:["show","hide","blur","input","close","delete","update:modelValue"],setup(e,{emit:o,slots:a,attrs:n}){const r=t.ref(),l=()=>{const t=Array(9).fill("").map(((e,t)=>({text:t+1})));return e.randomKeyOrder&&function(e){for(let t=e.length-1;t>0;t--){const o=Math.floor(Math.random()*(t+1)),a=e[t];e[t]=e[o],e[o]=a}}(t),t},i=t.computed((()=>"custom"===e.theme?(()=>{const t=l(),{extraKey:o}=e,a=Array.isArray(o)?o:[o];return 1===a.length?t.push({text:0,wider:!0},{text:a[0],type:"extra"}):2===a.length&&t.push({text:a[0],type:"extra"},{text:0},{text:a[1],type:"extra"}),t})():[...l(),{text:e.extraKey,type:"extra"},{text:0},{text:e.showDeleteKey?e.deleteButtonText:"",type:e.showDeleteKey?"delete":""}])),s=()=>{e.show&&o("blur")},c=()=>{o("close"),e.blurOnClose&&s()},d=()=>o(e.show?"show":"hide"),u=(t,a)=>{if(""===t)return void("extra"===a&&s());const n=e.modelValue;"delete"===a?(o("delete"),o("update:modelValue",n.slice(0,n.length-1))):"close"===a?c():n.length<+e.maxlength&&(o("input",t),o("update:modelValue",n+t))},p=()=>{if("custom"===e.theme)return t.createVNode("div",{class:Ec("sidebar")},[e.showDeleteKey&&t.createVNode(Ic,{large:!0,text:e.deleteButtonText,type:"delete",onPress:u},{default:a.delete}),t.createVNode(Ic,{large:!0,text:e.closeButtonText,type:"close",color:"blue",loading:e.closeButtonLoading,onPress:u},null)])};return t.watch((()=>e.show),(t=>{e.transition||o(t?"show":"hide")})),e.hideOnClickOutside&&W(r,s,{eventName:"touchstart"}),()=>{const o=(()=>{const{title:o,theme:n,closeButtonText:r}=e,l=a["title-left"],i=r&&"default"===n;if(o||i||l)return t.createVNode("div",{class:Ec("header")},[l&&t.createVNode("span",{class:Ec("title-left")},[l()]),o&&t.createVNode("h2",{class:Ec("title")},[o]),i&&t.createVNode("button",{type:"button",class:[Ec("close"),je],onClick:c},[r])])})(),l=t.createVNode(t.Transition,{name:e.transition?"van-slide-up":""},{default:()=>[t.withDirectives(t.createVNode("div",t.mergeProps({ref:r,style:ve(e.zIndex),class:Ec({unfit:!e.safeAreaInsetBottom,"with-title":!!o}),onAnimationend:d,onTouchstartPassive:re},n),[o,t.createVNode("div",{class:Ec("body")},[t.createVNode("div",{class:Ec("keys")},[i.value.map((e=>{const o={};return"delete"===e.type&&(o.default=a.delete),"extra"===e.type&&(o.default=a["extra-key"]),t.createVNode(Ic,{key:e.text,text:e.text,type:e.type,wider:e.wider,color:e.color,onPress:u},o)}))]),p()])]),[[t.vShow,e.show]])]});return e.teleport?t.createVNode(t.Teleport,{to:e.teleport},{default:()=>[l]}):l}}})),[Mc,Fc,Rc]=Ie("pagination"),Hc=(e,t,o)=>({number:e,text:t,active:o}),jc={mode:N("multi"),prevText:String,nextText:String,pageCount:V(0),modelValue:x(0),totalItems:V(0),showPageSize:V(5),itemsPerPage:V(10),forceEllipses:Boolean,showPrevButton:b,showNextButton:b};const Wc=Xe(t.defineComponent({name:Mc,props:jc,emits:["change","update:modelValue"],setup(e,{emit:o,slots:a}){const n=t.computed((()=>{const{pageCount:t,totalItems:o,itemsPerPage:a}=e,n=+t||Math.ceil(+o/+a);return Math.max(1,n)})),r=t.computed((()=>{const t=[],o=n.value,a=+e.showPageSize,{modelValue:r,forceEllipses:l}=e;let i=1,s=o;const c=ao&&(s=o,i=s-a+1));for(let e=i;e<=s;e++){const o=Hc(e,e,e===r);t.push(o)}if(c&&a>0&&l){if(i>1){const e=Hc(i-1,"...");t.unshift(e)}if(s{t=we(t,1,n.value),e.modelValue!==t&&(o("update:modelValue",t),a&&o("change",t))};t.watchEffect((()=>l(e.modelValue)));const i=()=>{const{mode:o,modelValue:n,showPrevButton:r}=e;if(!r)return;const i=a["prev-text"],s=1===n;return t.createVNode("li",{class:[Fc("item",{disabled:s,border:"simple"===o,prev:!0}),Fe]},[t.createVNode("button",{type:"button",disabled:s,onClick:()=>l(n-1,!0)},[i?i():e.prevText||Rc("prev")])])},s=()=>{const{mode:o,modelValue:r,showNextButton:i}=e;if(!i)return;const s=a["next-text"],c=r===n.value;return t.createVNode("li",{class:[Fc("item",{disabled:c,border:"simple"===o,next:!0}),Fe]},[t.createVNode("button",{type:"button",disabled:c,onClick:()=>l(r+1,!0)},[s?s():e.nextText||Rc("next")])])};return()=>t.createVNode("nav",{role:"navigation",class:Fc()},[t.createVNode("ul",{class:Fc("items")},[i(),"simple"===e.mode?t.createVNode("li",{class:Fc("page-desc")},[a.pageDesc?a.pageDesc():`${e.modelValue}/${n.value}`]):r.value.map((e=>t.createVNode("li",{class:[Fc("item",{active:e.active,page:!0}),Fe]},[t.createVNode("button",{type:"button","aria-current":e.active||void 0,onClick:()=>l(e.number,!0)},[a.page?a.page(e):e.text])]))),s()])])}})),[Uc,Yc]=Ie("password-input"),Xc={info:String,mask:b,value:N(""),gutter:g,length:V(6),focused:Boolean,errorInfo:String};const qc=Xe(t.defineComponent({name:Uc,props:Xc,emits:["focus"],setup(e,{emit:o}){const a=e=>{e.stopPropagation(),o("focus",e)},n=()=>{const o=[],{mask:a,value:n,gutter:r,focused:l}=e,i=+e.length;for(let e=0;e{const o=e.errorInfo||e.info;return t.createVNode("div",{class:Yc()},[t.createVNode("ul",{class:[Yc("security"),{[Fe]:!e.gutter}],onTouchstartPassive:a},[n()]),o&&t.createVNode("div",{class:Yc(e.errorInfo?"error-info":"info")},[o])])}}})),Gc=Xe(wa);function Zc(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function Kc(e){return e instanceof Zc(e).Element||e instanceof Element}function _c(e){return e instanceof Zc(e).HTMLElement||e instanceof HTMLElement}function Jc(e){return"undefined"!=typeof ShadowRoot&&(e instanceof Zc(e).ShadowRoot||e instanceof ShadowRoot)}var Qc=Math.round;function ed(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map((function(e){return e.brand+"/"+e.version})).join(" "):navigator.userAgent}function td(e,t,o){void 0===t&&(t=!1),void 0===o&&(o=!1);var a=e.getBoundingClientRect(),n=1,r=1;t&&_c(e)&&(n=e.offsetWidth>0&&Qc(a.width)/e.offsetWidth||1,r=e.offsetHeight>0&&Qc(a.height)/e.offsetHeight||1);var l=(Kc(e)?Zc(e):window).visualViewport,i=!!/^((?!chrome|android).)*safari/i.test(ed())&&o,s=(a.left+(i&&l?l.offsetLeft:0))/n,c=(a.top+(i&&l?l.offsetTop:0))/r,d=a.width/n,u=a.height/r;return{width:d,height:u,top:c,right:s+d,bottom:c+u,left:s,x:s,y:c}}function od(e){var t=Zc(e);return{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function ad(e){return e?(e.nodeName||"").toLowerCase():null}function nd(e){return((Kc(e)?e.ownerDocument:e.document)||window.document).documentElement}function rd(e){return Zc(e).getComputedStyle(e)}function ld(e){var t=rd(e),o=t.overflow,a=t.overflowX,n=t.overflowY;return/auto|scroll|overlay|hidden/.test(o+n+a)}function id(e,t,o){void 0===o&&(o=!1);var a,n,r=_c(t),l=_c(t)&&function(e){var t=e.getBoundingClientRect(),o=Qc(t.width)/e.offsetWidth||1,a=Qc(t.height)/e.offsetHeight||1;return 1!==o||1!==a}(t),i=nd(t),s=td(e,l,o),c={scrollLeft:0,scrollTop:0},d={x:0,y:0};return(r||!r&&!o)&&(("body"!==ad(t)||ld(i))&&(c=(a=t)!==Zc(a)&&_c(a)?{scrollLeft:(n=a).scrollLeft,scrollTop:n.scrollTop}:od(a)),_c(t)?((d=td(t,!0)).x+=t.clientLeft,d.y+=t.clientTop):i&&(d.x=function(e){return td(nd(e)).left+od(e).scrollLeft}(i))),{x:s.left+c.scrollLeft-d.x,y:s.top+c.scrollTop-d.y,width:s.width,height:s.height}}function sd(e){return"html"===ad(e)?e:e.assignedSlot||e.parentNode||(Jc(e)?e.host:null)||nd(e)}function cd(e){return["html","body","#document"].indexOf(ad(e))>=0?e.ownerDocument.body:_c(e)&&ld(e)?e:cd(sd(e))}function dd(e,t){var o;void 0===t&&(t=[]);var a=cd(e),n=a===(null==(o=e.ownerDocument)?void 0:o.body),r=Zc(a),l=n?[r].concat(r.visualViewport||[],ld(a)?a:[]):a,i=t.concat(l);return n?i:i.concat(dd(sd(l)))}function ud(e){return["table","td","th"].indexOf(ad(e))>=0}function pd(e){return _c(e)&&"fixed"!==rd(e).position?e.offsetParent:null}function vd(e){for(var t=Zc(e),o=pd(e);o&&ud(o)&&"static"===rd(o).position;)o=pd(o);return o&&("html"===ad(o)||"body"===ad(o)&&"static"===rd(o).position)?t:o||function(e){var t=/firefox/i.test(ed());if(/Trident/i.test(ed())&&_c(e)&&"fixed"===rd(e).position)return null;var o=sd(e);for(Jc(o)&&(o=o.host);_c(o)&&["html","body"].indexOf(ad(o))<0;){var a=rd(o);if("none"!==a.transform||"none"!==a.perspective||"paint"===a.contain||-1!==["transform","perspective"].indexOf(a.willChange)||t&&"filter"===a.willChange||t&&a.filter&&"none"!==a.filter)return o;o=o.parentNode}return null}(e)||t}var md="top",fd="bottom",hd="right",gd="left",bd="start",yd="end",wd=[].concat([md,fd,hd,gd],["auto"]).reduce((function(e,t){return e.concat([t,t+"-"+bd,t+"-"+yd])}),[]),xd=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function Vd(e){var t=new Map,o=new Set,a=[];function n(e){o.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!o.has(e)){var a=t.get(e);a&&n(a)}})),a.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){o.has(e.name)||n(e)})),a}function Nd(e){return e.split("-")[0]}function Cd(e){return e.split("-")[1]}var kd={placement:"bottom",modifiers:[],strategy:"absolute"};function Sd(){for(var e=arguments.length,t=new Array(e),o=0;o=0?"x":"y"}(r):null;if(null!=c){var d="y"===c?"height":"width";switch(l){case bd:t[c]=t[c]-(o[d]/2-a[d]/2);break;case yd:t[c]=t[c]+(o[d]/2-a[d]/2)}}return t}({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})},data:{}},{name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,o=e.options,a=o.gpuAcceleration,n=void 0===a||a,r=o.adaptive,l=void 0===r||r,i=o.roundOffsets,s=void 0===i||i,c={placement:Nd(t.placement),variation:Cd(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:n,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,Dd(Object.assign({},c,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:l,roundOffsets:s})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,Dd(Object.assign({},c,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:s})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}},{name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach((function(e){var o=t.styles[e]||{},a=t.attributes[e]||{},n=t.elements[e];_c(n)&&ad(n)&&(Object.assign(n.style,o),Object.keys(a).forEach((function(e){var t=a[e];!1===t?n.removeAttribute(e):n.setAttribute(e,!0===t?"":t)})))}))},effect:function(e){var t=e.state,o={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,o.popper),t.styles=o,t.elements.arrow&&Object.assign(t.elements.arrow.style,o.arrow),function(){Object.keys(t.elements).forEach((function(e){var a=t.elements[e],n=t.attributes[e]||{},r=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:o[e]).reduce((function(e,t){return e[t]="",e}),{});_c(a)&&ad(a)&&(Object.assign(a.style,r),Object.keys(n).forEach((function(e){a.removeAttribute(e)})))}))}},requires:["computeStyles"]}]});var Od={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,o=e.options,a=e.name,n=o.offset,r=void 0===n?[0,0]:n,l=wd.reduce((function(e,o){return e[o]=function(e,t,o){var a=Nd(e),n=[gd,md].indexOf(a)>=0?-1:1,r="function"==typeof o?o(Object.assign({},t,{placement:e})):o,l=r[0],i=r[1];return l=l||0,i=(i||0)*n,[gd,hd].indexOf(a)>=0?{x:i,y:l}:{x:l,y:i}}(o,t.rects,r),e}),{}),i=l[t.placement],s=i.x,c=i.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=s,t.modifiersData.popperOffsets.y+=c),t.modifiersData[a]=l}};const[Id,zd]=Ie("popover"),Ed=["overlay","duration","teleport","overlayStyle","overlayClass","closeOnClickOverlay"],Ld={show:Boolean,theme:N("light"),overlay:Boolean,actions:w(),actionsDirection:N("vertical"),trigger:N("click"),duration:g,showArrow:b,placement:N("bottom"),iconPrefix:String,overlayClass:h,overlayStyle:Object,closeOnClickAction:b,closeOnClickOverlay:b,closeOnClickOutside:b,offset:{type:Array,default:()=>[0,8]},teleport:{type:[String,Object],default:"body"}};const $d=Xe(t.defineComponent({name:Id,props:Ld,emits:["select","touchstart","update:show"],setup(e,{emit:o,slots:r,attrs:l}){let i;const s=t.ref(),c=t.ref(),d=t.ref(),u=ko((()=>e.show),(e=>o("update:show",e))),p=()=>({placement:e.placement,modifiers:[{name:"computeStyles",options:{adaptive:!1,gpuAcceleration:!1}},a({},Od,{options:{offset:e.offset}})]}),m=()=>{t.nextTick((()=>{u.value&&(i?i.setOptions(p()):(i=c.value&&d.value?Ad(c.value,d.value.popupRef.value,p()):null,n&&(window.addEventListener("animationend",m),window.addEventListener("transitionend",m))))}))},f=e=>{u.value=e},h=()=>{"click"===e.trigger&&(u.value=!u.value)},g=(o,a)=>r.action?r.action({action:o,index:a}):[o.icon&&t.createVNode(xt,{name:o.icon,classPrefix:e.iconPrefix,class:zd("action-icon")},null),t.createVNode("div",{class:[zd("action-text"),{[Me]:"vertical"===e.actionsDirection}]},[o.text])],b=(a,n)=>{const{icon:r,color:l,disabled:i,className:s}=a;return t.createVNode("div",{role:"menuitem",class:[zd("action",{disabled:i,"with-icon":r}),{[$e]:"horizontal"===e.actionsDirection},s],style:{color:l},tabindex:i?void 0:0,"aria-disabled":i||void 0,onClick:()=>((t,a)=>{t.disabled||(o("select",t,a),e.closeOnClickAction&&(u.value=!1))})(a,n)},[g(a,n)])};return t.onMounted((()=>{m(),t.watchEffect((()=>{var e;s.value=null==(e=d.value)?void 0:e.popupRef.value}))})),t.onBeforeUnmount((()=>{i&&(n&&(window.removeEventListener("animationend",m),window.removeEventListener("transitionend",m)),i.destroy(),i=null)})),t.watch((()=>[u.value,e.offset,e.placement]),m),W([c,s],(()=>{u.value&&e.closeOnClickOutside&&(!e.overlay||e.closeOnClickOverlay)&&(u.value=!1)}),{eventName:"touchstart"}),()=>{var o;return t.createVNode(t.Fragment,null,[t.createVNode("span",{ref:c,class:zd("wrapper"),onClick:h},[null==(o=r.reference)?void 0:o.call(r)]),t.createVNode(oo,t.mergeProps({ref:d,show:u.value,class:zd([e.theme]),position:"",transition:"van-popover-zoom",lockScroll:!1,"onUpdate:show":f},l,Gt(),v(e,Ed)),{default:()=>[e.showArrow&&t.createVNode("div",{class:zd("arrow")},null),t.createVNode("div",{role:"menu",class:zd("content",e.actionsDirection)},[r.default?r.default():e.actions.map(b)])]})])}}})),[Md,Fd]=Ie("progress"),Rd={color:String,inactive:Boolean,pivotText:String,textColor:String,showPivot:b,pivotColor:String,trackColor:String,strokeWidth:g,percentage:{type:g,default:0,validator:e=>+e>=0&&+e<=100}};const Hd=Xe(t.defineComponent({name:Md,props:Rd,setup(e){const o=t.computed((()=>e.inactive?void 0:e.color)),a=()=>{const{textColor:a,pivotText:n,pivotColor:r,percentage:l}=e,i=null!=n?n:`${l}%`;if(e.showPivot&&i){const n={color:a,left:+l+"%",transform:`translate(-${+l}%,-50%)`,background:r||o.value};return t.createVNode("span",{style:n,class:Fd("pivot",{inactive:e.inactive})},[i])}};return()=>{const{trackColor:n,percentage:r,strokeWidth:l}=e,i={background:n,height:ue(l)},s={width:`${r}%`,background:o.value};return t.createVNode("div",{class:Fd(),style:i},[t.createVNode("span",{class:Fd("portion",{inactive:e.inactive}),style:s},null),a()])}}})),[jd,Wd,Ud]=Ie("pull-refresh"),Yd=["pulling","loosing","success"],Xd={disabled:Boolean,modelValue:Boolean,headHeight:V(50),successText:String,pullingText:String,loosingText:String,loadingText:String,pullDistance:g,successDuration:V(500),animationDuration:V(300)};const qd=Xe(t.defineComponent({name:jd,props:Xd,emits:["change","refresh","update:modelValue"],setup(e,{emit:o,slots:a}){let n;const r=t.ref(),l=t.ref(),i=Z(r),s=t.reactive({status:"normal",distance:0,duration:0}),c=Wt(),d=()=>{if(50!==e.headHeight)return{height:`${e.headHeight}px`}},u=()=>"loading"!==s.status&&"success"!==s.status&&!e.disabled,p=(t,a)=>{const n=+(e.pullDistance||e.headHeight);s.distance=t,s.status=a?"loading":0===t?"normal":t{const{status:t}=s;return"normal"===t?"":e[`${t}Text`]||Ud(t)},m=()=>{const{status:e,distance:o}=s;if(a[e])return a[e]({distance:o});const n=[];return Yd.includes(e)&&n.push(t.createVNode("div",{class:Wd("text")},[v()])),"loading"===e&&n.push(t.createVNode(Bt,{class:Wd("loading")},{default:v})),n},f=e=>{n=0===J(i.value),n&&(s.duration=0,c.start(e))},h=e=>{u()&&f(e)},g=()=>{n&&c.deltaY.value&&u()&&(s.duration=+e.animationDuration,"loosing"===s.status?(p(+e.headHeight,!0),o("update:modelValue",!0),t.nextTick((()=>o("refresh")))):p(0))};return t.watch((()=>e.modelValue),(t=>{s.duration=+e.animationDuration,t?p(+e.headHeight,!0):a.success||e.successText?(s.status="success",setTimeout((()=>{p(0)}),+e.successDuration)):p(0,!1)})),j("touchmove",(t=>{if(u()){n||f(t);const{deltaY:o}=c;c.move(t),n&&o.value>=0&&c.isVertical()&&(le(t),p((t=>{const o=+(e.pullDistance||e.headHeight);return t>o&&(t=t<2*o?o+(t-o)/2:1.5*o+(t-2*o)/4),Math.round(t)})(o.value)))}}),{target:l}),()=>{var e;const o={transitionDuration:`${s.duration}ms`,transform:s.distance?`translate3d(0,${s.distance}px, 0)`:""};return t.createVNode("div",{ref:r,class:Wd()},[t.createVNode("div",{ref:l,class:Wd("track"),style:o,onTouchstartPassive:h,onTouchend:g,onTouchcancel:g},[t.createVNode("div",{class:Wd("head"),style:d()},[m()]),null==(e=a.default)?void 0:e.call(a)])])}}})),[Gd,Zd]=Ie("rate");const Kd={size:g,icon:N("star"),color:String,count:V(5),gutter:g,clearable:Boolean,readonly:Boolean,disabled:Boolean,voidIcon:N("star-o"),allowHalf:Boolean,voidColor:String,touchable:b,iconPrefix:String,modelValue:x(0),disabledColor:String};const _d=Xe(t.defineComponent({name:Gd,props:Kd,emits:["change","update:modelValue"],setup(e,{emit:o}){const a=Wt(),[n,r]=Fo(),l=t.ref(),i=t.computed((()=>e.readonly||e.disabled)),s=t.computed((()=>i.value||!e.touchable)),c=t.computed((()=>Array(+e.count).fill("").map(((t,o)=>function(e,t,o,a){if(e>=t)return{status:"full",value:1};if(e+.5>=t&&o&&!a)return{status:"half",value:.5};if(e+1>=t&&o&&a){const o=10**10;return{status:"half",value:Math.round((e-t+1)*o)/o}}return{status:"void",value:0}}(e.modelValue,o+1,e.allowHalf,e.readonly)))));let d,u,p=Number.MAX_SAFE_INTEGER,v=Number.MIN_SAFE_INTEGER;const m=()=>{u=P(l);const t=n.value.map(P);d=[],t.forEach(((t,o)=>{p=Math.min(t.top,p),v=Math.max(t.top,v),e.allowHalf?d.push({score:o+.5,left:t.left,top:t.top,height:t.height},{score:o+1,left:t.left+t.width/2,top:t.top,height:t.height}):d.push({score:o+1,left:t.left,top:t.top,height:t.height})}))},f=(t,o)=>{for(let e=d.length-1;e>0;e--)if(o>=u.top&&o<=u.bottom){if(t>d[e].left&&o>=d[e].top&&o<=d[e].top+d[e].height)return d[e].score}else{const a=od[e].left&&d[e].top===a)return d[e].score}return e.allowHalf?.5:1},h=t=>{i.value||t===e.modelValue||(o("update:modelValue",t),o("change",t))},g=e=>{s.value||(a.start(e),m())},b=(o,n)=>{const{icon:l,size:i,color:s,count:c,gutter:d,voidIcon:u,disabled:p,voidColor:v,allowHalf:g,iconPrefix:b,disabledColor:y}=e,w=n+1,x="full"===o.status,V="void"===o.status,N=g&&o.value>0&&o.value<1;let C;d&&w!==+c&&(C={paddingRight:ue(d)});return t.createVNode("div",{key:n,ref:r(n),role:"radio",style:C,class:Zd("item"),tabindex:p?void 0:0,"aria-setsize":c,"aria-posinset":w,"aria-checked":!V,onClick:t=>{m();let o=g?f(t.clientX,t.clientY):w;e.clearable&&a.isTap.value&&o===e.modelValue&&(o=0),h(o)}},[t.createVNode(xt,{size:i,name:x?l:u,class:Zd("icon",{disabled:p,full:x}),color:p?y:x?s:v,classPrefix:b},null),N&&t.createVNode(xt,{size:i,style:{width:o.value+"em"},name:V?u:l,class:Zd("icon",["half",{disabled:p,full:!V}]),color:p?y:V?v:s,classPrefix:b},null)])};return _((()=>e.modelValue)),j("touchmove",(e=>{if(!s.value&&(a.move(e),a.isHorizontal()&&!a.isTap.value)){const{clientX:t,clientY:o}=e.touches[0];le(e),h(f(t,o))}}),{target:l}),()=>t.createVNode("div",{ref:l,role:"radiogroup",class:Zd({readonly:e.readonly,disabled:e.disabled}),tabindex:e.disabled?void 0:0,"aria-disabled":e.disabled,"aria-readonly":e.readonly,onTouchstartPassive:g},[c.value.map(b)])}})),Jd={figureArr:w(),delay:Number,duration:x(2),isStart:Boolean,direction:N("down"),height:x(40)},[Qd,eu]=Ie("rolling-text-item");var tu=t.defineComponent({name:Qd,props:Jd,setup(e){const o=t.computed((()=>"down"===e.direction?e.figureArr.slice().reverse():e.figureArr)),a=t.computed((()=>`-${e.height*(e.figureArr.length-1)}px`)),n=t.computed((()=>({lineHeight:ue(e.height)}))),r=t.computed((()=>({height:ue(e.height),"--van-translate":a.value,"--van-duration":e.duration+"s","--van-delay":e.delay+"s"})));return()=>t.createVNode("div",{class:eu([e.direction]),style:r.value},[t.createVNode("div",{class:eu("box",{animate:e.isStart})},[Array.isArray(o.value)&&o.value.map((e=>t.createVNode("div",{class:eu("item"),style:n.value},[e])))])])}});const[ou,au]=Ie("rolling-text"),nu={startNum:x(0),targetNum:Number,textList:w(),duration:x(2),autoStart:b,direction:N("down"),stopOrder:N("ltr"),height:x(40)};const ru=Xe(t.defineComponent({name:ou,props:nu,setup(e){const o=t.computed((()=>Array.isArray(e.textList)&&e.textList.length)),a=t.computed((()=>o.value?e.textList[0].length:`${Math.max(e.startNum,e.targetNum)}`.length)),n=t=>{const o=[];for(let a=0;ao.value?new Array(a.value).fill(""):ye(e.targetNum,a.value).split(""))),l=t.computed((()=>ye(e.startNum,a.value).split(""))),i=e=>{const t=+l.value[e],o=+r.value[e],a=[];for(let n=t;n<=9;n++)a.push(n);for(let n=0;n<=2;n++)for(let e=0;e<=9;e++)a.push(e);for(let n=0;n<=o;n++)a.push(n);return a},s=(t,o)=>"ltr"===e.stopOrder?.2*t:.2*(o-1-t),c=t.ref(e.autoStart),d=()=>{c.value=!0};return t.watch((()=>e.autoStart),(e=>{e&&d()})),at({start:d,reset:()=>{c.value=!1,e.autoStart&&k((()=>d()))}}),()=>t.createVNode("div",{class:au()},[r.value.map(((r,l)=>t.createVNode(tu,{figureArr:o.value?n(l):i(l),duration:e.duration,direction:e.direction,isStart:c.value,height:e.height,delay:s(l,a.value)},null)))])}})),lu=Xe(Ml),[iu,su,cu]=Ie("search"),du=a({},_a,{label:String,shape:N("square"),leftIcon:N("search"),clearable:b,actionText:String,background:String,showAction:Boolean});const uu=Xe(t.defineComponent({name:iu,props:du,emits:["blur","focus","clear","search","cancel","clickInput","clickLeftIcon","clickRightIcon","update:modelValue"],setup(e,{emit:o,slots:n,attrs:r}){const l=Mo(),i=t.ref(),s=()=>{n.action||(o("update:modelValue",""),o("cancel"))},c=t=>{13===t.keyCode&&(le(t),o("search",e.modelValue))},d=()=>e.id||`${l}-input`,u=()=>{if(n.label||e.label)return t.createVNode("label",{class:su("label"),for:d()},[n.label?n.label():e.label])},p=()=>{if(e.showAction){const o=e.actionText||cu("cancel");return t.createVNode("div",{class:su("action"),role:"button",tabindex:0,onClick:s},[n.action?n.action():o])}},m=e=>o("blur",e),f=e=>o("focus",e),h=e=>o("clear",e),g=e=>o("clickInput",e),b=e=>o("clickLeftIcon",e),y=e=>o("clickRightIcon",e),w=Object.keys(_a),x=()=>{const l=a({},r,v(e,w),{id:d()});return t.createVNode(Qa,t.mergeProps({ref:i,type:"search",class:su("field",{"with-message":l.errorMessage}),border:!1,onBlur:m,onFocus:f,onClear:h,onKeypress:c,onClickInput:g,onClickLeftIcon:b,onClickRightIcon:y,"onUpdate:modelValue":e=>o("update:modelValue",e)},l),v(n,["left-icon","right-icon"]))};return at({focus:()=>{var e;return null==(e=i.value)?void 0:e.focus()},blur:()=>{var e;return null==(e=i.value)?void 0:e.blur()}}),()=>{var o;return t.createVNode("div",{class:su({"show-action":e.showAction}),style:{background:e.background}},[null==(o=n.left)?void 0:o.call(n),t.createVNode("div",{class:su("content",e.shape)},[u(),x()]),p()])}}})),pu=[...jt,"round","closeOnPopstate","safeAreaInsetBottom"],vu={qq:"qq",link:"link-o",weibo:"weibo",qrcode:"qr",poster:"photo-o",wechat:"wechat","weapp-qrcode":"miniprogram-o","wechat-moments":"wechat-moments"},[mu,fu,hu]=Ie("share-sheet"),gu=a({},Ht,{title:String,round:b,options:w(),cancelText:String,description:String,closeOnPopstate:b,safeAreaInsetBottom:b});const bu=Xe(t.defineComponent({name:mu,props:gu,emits:["cancel","select","update:show"],setup(e,{emit:o,slots:a}){const n=e=>o("update:show",e),r=()=>{n(!1),o("cancel")},l=()=>{const o=a.title?a.title():e.title,n=a.description?a.description():e.description;if(o||n)return t.createVNode("div",{class:fu("header")},[o&&t.createVNode("h2",{class:fu("title")},[o]),n&&t.createVNode("span",{class:fu("description")},[n])])},i=e=>{return(null==(o=e)?void 0:o.includes("/"))?t.createVNode("img",{src:e,class:fu("image-icon")},null):t.createVNode("div",{class:fu("icon",[e])},[t.createVNode(xt,{name:vu[e]||e},null)]);var o},s=(e,a)=>{const{name:n,icon:r,className:l,description:s}=e;return t.createVNode("div",{role:"button",tabindex:0,class:[fu("option"),l,je],onClick:()=>((e,t)=>o("select",e,t))(e,a)},[i(r),n&&t.createVNode("span",{class:fu("name")},[n]),s&&t.createVNode("span",{class:fu("option-description")},[s])])},c=(e,o)=>t.createVNode("div",{class:fu("options",{border:o})},[e.map(s)]),d=()=>{const{options:t}=e;return Array.isArray(t[0])?t.map(((e,t)=>c(e,0!==t))):c(t)},u=()=>{var o;const n=null!=(o=e.cancelText)?o:hu("cancel");if(a.cancel||n)return t.createVNode("button",{type:"button",class:fu("cancel"),onClick:r},[a.cancel?a.cancel():n])};return()=>t.createVNode(oo,t.mergeProps({class:fu(),position:"bottom","onUpdate:show":n},v(e,pu)),{default:()=>[l(),d(),u()]})}})),[yu,wu]=Ie("sidebar"),xu=Symbol(yu),Vu={modelValue:V(0)};const Nu=Xe(t.defineComponent({name:yu,props:Vu,emits:["change","update:modelValue"],setup(e,{emit:o,slots:a}){const{linkChildren:n}=I(xu),r=()=>+e.modelValue;return n({getActive:r,setActive:e=>{e!==r()&&(o("update:modelValue",e),o("change",e))}}),()=>{var e;return t.createVNode("div",{role:"tablist",class:wu()},[null==(e=a.default)?void 0:e.call(a)])}}})),[Cu,ku]=Ie("sidebar-item"),Su=a({},nt,{dot:Boolean,title:String,badge:g,disabled:Boolean,badgeProps:Object});const Tu=Xe(t.defineComponent({name:Cu,props:Su,emits:["click"],setup(e,{emit:o,slots:a}){const n=lt(),{parent:r,index:l}=D(xu);if(!r)return;const i=()=>{e.disabled||(o("click",l.value),r.setActive(l.value),n())};return()=>{const{dot:o,badge:n,title:s,disabled:c}=e,d=l.value===r.getActive();return t.createVNode("div",{role:"tab",class:ku({select:d,disabled:c}),tabindex:c?void 0:0,"aria-selected":d,onClick:i},[t.createVNode(dt,t.mergeProps({dot:o,class:ku("text"),content:n},e.badgeProps),{default:()=>[a.title?a.title():s]})])}}})),[Bu,Pu,Du]=Ie("signature"),Au={tips:String,type:N("png"),penColor:N("#000"),lineWidth:x(3),clearButtonText:String,backgroundColor:N(""),confirmButtonText:String};const Ou=Xe(t.defineComponent({name:Bu,props:Au,emits:["submit","clear","start","end","signing"],setup(e,{emit:o}){const a=t.ref(),r=t.ref(),l=t.computed((()=>a.value?a.value.getContext("2d"):null)),i=!n||(()=>{var e;const t=document.createElement("canvas");return!!(null==(e=t.getContext)?void 0:e.call(t,"2d"))})();let s,c=0,d=0;const u=()=>{if(!l.value)return!1;l.value.beginPath(),l.value.lineWidth=e.lineWidth,l.value.strokeStyle=e.penColor,s=P(a),o("start")},p=e=>{if(!l.value)return!1;le(e);const t=e.touches[0],a=t.clientX-((null==s?void 0:s.left)||0),n=t.clientY-((null==s?void 0:s.top)||0);l.value.lineCap="round",l.value.lineJoin="round",l.value.lineTo(a,n),l.value.stroke(),o("signing",e)},v=e=>{le(e),o("end")},m=t=>{t&&e.backgroundColor&&(t.fillStyle=e.backgroundColor,t.fillRect(0,0,c,d))},f=()=>{var t,n;const r=a.value;if(!r)return;const l=(t=>{const o=document.createElement("canvas");if(o.width=t.width,o.height=t.height,e.backgroundColor){const e=o.getContext("2d");m(e)}return t.toDataURL()===o.toDataURL()})(r),i=l?"":(null==(n=(t={jpg:()=>r.toDataURL("image/jpeg",.8),jpeg:()=>r.toDataURL("image/jpeg",.8)})[e.type])?void 0:n.call(t))||r.toDataURL(`image/${e.type}`);o("submit",{image:i,canvas:r})},h=()=>{l.value&&(l.value.clearRect(0,0,c,d),l.value.closePath(),m(l.value)),o("clear")},g=()=>{var e,t,o;if(i&&a.value){const i=a.value,s=n?window.devicePixelRatio:1;c=i.width=((null==(e=r.value)?void 0:e.offsetWidth)||0)*s,d=i.height=((null==(t=r.value)?void 0:t.offsetHeight)||0)*s,null==(o=l.value)||o.scale(s,s),m(l.value)}},b=()=>{if(l.value){const e=l.value.getImageData(0,0,c,d);g(),l.value.putImageData(e,0,0)}};return t.watch(se,b),t.onMounted(g),at({resize:b,clear:h,submit:f}),()=>t.createVNode("div",{class:Pu()},[t.createVNode("div",{class:Pu("content"),ref:r},[i?t.createVNode("canvas",{ref:a,onTouchstartPassive:u,onTouchmove:p,onTouchend:v},null):t.createVNode("p",null,[e.tips])]),t.createVNode("div",{class:Pu("footer")},[t.createVNode(Ot,{size:"small",onClick:h},{default:()=>[e.clearButtonText||Du("clear")]}),t.createVNode(Ot,{type:"primary",size:"small",onClick:f},{default:()=>[e.confirmButtonText||Du("confirm")]})])])}})),[Iu,zu]=Ie("skeleton-title"),Eu={round:Boolean,titleWidth:g};const Lu=Xe(t.defineComponent({name:Iu,props:Eu,setup:e=>()=>t.createVNode("h3",{class:zu([{round:e.round}]),style:{width:ue(e.titleWidth)}},null)}));var $u=Lu;const[Mu,Fu]=Ie("skeleton-avatar"),Ru={avatarSize:g,avatarShape:N("round")};const Hu=Xe(t.defineComponent({name:Mu,props:Ru,setup:e=>()=>t.createVNode("div",{class:Fu([e.avatarShape]),style:pe(e.avatarSize)},null)}));var ju=Hu;const Wu="100%",Uu={round:Boolean,rowWidth:{type:g,default:Wu}},[Yu,Xu]=Ie("skeleton-paragraph");const qu=Xe(t.defineComponent({name:Yu,props:Uu,setup:e=>()=>t.createVNode("div",{class:Xu([{round:e.round}]),style:{width:e.rowWidth}},null)}));var Gu=qu;const[Zu,Ku]=Ie("skeleton"),_u={row:V(0),round:Boolean,title:Boolean,titleWidth:g,avatar:Boolean,avatarSize:g,avatarShape:N("round"),loading:b,animate:b,rowWidth:{type:[Number,String,Array],default:Wu}};const Ju=Xe(t.defineComponent({name:Zu,inheritAttrs:!1,props:_u,setup(e,{slots:o,attrs:a}){const n=()=>{if(e.avatar)return t.createVNode(ju,{avatarShape:e.avatarShape,avatarSize:e.avatarSize},null)},r=()=>{if(e.title)return t.createVNode($u,{round:e.round,titleWidth:e.titleWidth},null)},l=t=>{const{rowWidth:o}=e;return o===Wu&&t===+e.row-1?"60%":Array.isArray(o)?o[t]:o};return()=>{var i;return e.loading?t.createVNode("div",t.mergeProps({class:Ku({animate:e.animate,round:e.round})},a),[o.template?o.template():t.createVNode(t.Fragment,null,[n(),t.createVNode("div",{class:Ku("content")},[r(),Array(+e.row).fill("").map(((o,a)=>t.createVNode(Gu,{key:a,round:e.round,rowWidth:ue(l(a))},null)))])])]):null==(i=o.default)?void 0:i.call(o)}}})),[Qu,ep]=Ie("skeleton-image"),tp={imageSize:g,imageShape:N("square")};const op=Xe(t.defineComponent({name:Qu,props:tp,setup:e=>()=>t.createVNode("div",{class:ep([e.imageShape]),style:pe(e.imageSize)},[t.createVNode(xt,{name:"photo",class:ep("icon")},null)])})),[ap,np]=Ie("slider"),rp={min:V(0),max:V(100),step:V(1),range:Boolean,reverse:Boolean,disabled:Boolean,readonly:Boolean,vertical:Boolean,barHeight:g,buttonSize:g,activeColor:String,inactiveColor:String,modelValue:{type:[Number,Array],default:0}};const lp=Xe(t.defineComponent({name:ap,props:rp,emits:["change","dragEnd","dragStart","update:modelValue"],setup(e,{emit:o,slots:a}){let n,r,l;const i=t.ref(),s=[t.ref(),t.ref()],c=t.ref(),d=Wt(),u=t.computed((()=>Number(e.max)-Number(e.min))),p=t.computed((()=>{const t=e.vertical?"width":"height";return{background:e.inactiveColor,[t]:ue(e.barHeight)}})),v=t=>e.range&&Array.isArray(t),f=()=>{const{modelValue:t,min:o}=e;return v(t)?100*(t[1]-t[0])/u.value+"%":100*(t-Number(o))/u.value+"%"},h=t.computed((()=>{const t=e.vertical?"height":"width",o={[t]:f(),background:e.activeColor};c.value&&(o.transition="none");return o[e.vertical?e.reverse?"bottom":"top":e.reverse?"right":"left"]=(()=>{const{modelValue:t,min:o}=e;return v(t)?100*(t[0]-Number(o))/u.value+"%":"0%"})(),o})),g=t=>{const o=+e.min,a=+e.max,n=+e.step;t=we(t,o,a);return Ne(o,Math.round((t-o)/n)*n)},b=()=>{const t=e.modelValue;l=v(t)?t.map(g):g(t)},y=(t,a)=>{t=v(t)?(t=>{var o,a;const n=null!=(o=t[0])?o:Number(e.min),r=null!=(a=t[1])?a:Number(e.max);return n>r?[r,n]:[n,r]})(t).map(g):g(t),m(t,e.modelValue)||o("update:modelValue",t),a&&!m(t,l)&&o("change",t)},w=t=>{if(t.stopPropagation(),e.disabled||e.readonly)return;b();const{min:o,reverse:a,vertical:n,modelValue:r}=e,l=P(i),s=n?l.height:l.width,c=Number(o)+(n?a?l.bottom-t.clientY:t.clientY-l.top:a?l.right-t.clientX:t.clientX-l.left)/s*u.value;if(v(r)){const[e,t]=r;y(c<=(e+t)/2?[c,t]:[e,c],!0)}else y(c,!0)},x=t=>{if(e.disabled||e.readonly)return;"start"===c.value&&o("dragStart",t),le(t,!0),d.move(t),c.value="dragging";const a=P(i);let s=(e.vertical?d.deltaY.value:d.deltaX.value)/(e.vertical?a.height:a.width)*u.value;if(e.reverse&&(s=-s),v(l)){const t=e.reverse?1-n:n;r[t]=l[t]+s}else r=l+s;y(r)},V=t=>{e.disabled||e.readonly||("dragging"===c.value&&(y(r,!0),o("dragEnd",t)),c.value="")},N=t=>{if("number"==typeof t){return np("button-wrapper",["left","right"][t])}return np("button-wrapper",e.reverse?"left":"right")},C=(o,l)=>{const i="dragging"===c.value;if("number"==typeof l){const e=a[0===l?"left-button":"right-button"];let t;if(i&&Array.isArray(r)&&(t=r[0]>r[1]?1^n:n),e)return e({value:o,dragging:i,dragIndex:t})}return a.button?a.button({value:o,dragging:i}):t.createVNode("div",{class:np("button"),style:pe(e.buttonSize)},null)},k=o=>{const a="number"==typeof o?e.modelValue[o]:e.modelValue;return t.createVNode("div",{ref:s[null!=o?o:0],role:"slider",class:N(o),tabindex:e.disabled?void 0:0,"aria-valuemin":e.min,"aria-valuenow":a,"aria-valuemax":e.max,"aria-disabled":e.disabled||void 0,"aria-readonly":e.readonly||void 0,"aria-orientation":e.vertical?"vertical":"horizontal",onTouchstartPassive:t=>{"number"==typeof o&&(n=o),(t=>{e.disabled||e.readonly||(d.start(t),r=e.modelValue,b(),c.value="start")})(t)},onTouchend:V,onTouchcancel:V,onClick:re},[C(a,o)])};return y(e.modelValue),_((()=>e.modelValue)),s.forEach((e=>{j("touchmove",x,{target:e})})),()=>t.createVNode("div",{ref:i,style:p.value,class:np({vertical:e.vertical,disabled:e.disabled}),onClick:w},[t.createVNode("div",{class:np("bar"),style:h.value},[e.range?[k(0),k(1)]:k()])])}})),[ip,sp]=Ie("space"),cp={align:String,direction:{type:String,default:"horizontal"},size:{type:[Number,String,Array],default:8},wrap:Boolean,fill:Boolean};function dp(e=[]){const o=[];return e.forEach((e=>{Array.isArray(e)?o.push(...e):e.type===t.Fragment?o.push(...dp(e.children)):o.push(e)})),o.filter((e=>{var o;return!(e&&(e.type===t.Comment||e.type===t.Fragment&&0===(null==(o=e.children)?void 0:o.length)||e.type===t.Text&&""===e.children.trim()))}))}const up=Xe(t.defineComponent({name:ip,props:cp,setup(e,{slots:o}){const a=t.computed((()=>{var t;return null!=(t=e.align)?t:"horizontal"===e.direction?"center":""})),n=e=>"number"==typeof e?e+"px":e,r=t=>{const o={},a=`${n(Array.isArray(e.size)?e.size[0]:e.size)}`,r=`${n(Array.isArray(e.size)?e.size[1]:e.size)}`;return t?e.wrap?{marginBottom:r}:{}:("horizontal"===e.direction&&(o.marginRight=a),("vertical"===e.direction||e.wrap)&&(o.marginBottom=r),o)};return()=>{var n;const l=dp(null==(n=o.default)?void 0:n.call(o));return t.createVNode("div",{class:[sp({[e.direction]:e.direction,[`align-${a.value}`]:a.value,wrap:e.wrap,fill:e.fill})]},[l.map(((e,o)=>t.createVNode("div",{key:`item-${o}`,class:`${ip}-item`,style:r(o===l.length-1)},[e])))])}}})),[pp,vp]=Ie("steps"),mp={active:V(0),direction:N("horizontal"),activeIcon:N("checked"),iconPrefix:String,finishIcon:String,activeColor:String,inactiveIcon:String,inactiveColor:String},fp=Symbol(pp);var hp=t.defineComponent({name:pp,props:mp,emits:["clickStep"],setup(e,{emit:o,slots:a}){const{linkChildren:n}=I(fp);return n({props:e,onClickStep:e=>o("clickStep",e)}),()=>{var o;return t.createVNode("div",{class:vp([e.direction])},[t.createVNode("div",{class:vp("items")},[null==(o=a.default)?void 0:o.call(a)])])}}});const[gp,bp]=Ie("step");const yp=Xe(t.defineComponent({name:gp,setup(e,{slots:o}){const{parent:a,index:n}=D(fp);if(!a)return;const r=a.props,l=()=>{const e=+r.active;return n.value"process"===l(),s=t.computed((()=>({background:"finish"===l()?r.activeColor:r.inactiveColor}))),c=t.computed((()=>i()?{color:r.activeColor}:"waiting"===l()?{color:r.inactiveColor}:void 0)),d=()=>a.onClickStep(n.value),u=()=>{const{iconPrefix:e,finishIcon:a,activeIcon:n,activeColor:c,inactiveIcon:d}=r;return i()?o["active-icon"]?o["active-icon"]():t.createVNode(xt,{class:bp("icon","active"),name:n,color:c,classPrefix:e},null):"finish"===l()&&(a||o["finish-icon"])?o["finish-icon"]?o["finish-icon"]():t.createVNode(xt,{class:bp("icon","finish"),name:a,color:c,classPrefix:e},null):o["inactive-icon"]?o["inactive-icon"]():d?t.createVNode(xt,{class:bp("icon"),name:d,classPrefix:e},null):t.createVNode("i",{class:bp("circle"),style:s.value},null)};return()=>{var e;const a=l();return t.createVNode("div",{class:[ze,bp([r.direction,{[a]:a}])]},[t.createVNode("div",{class:bp("title",{active:i()}),style:c.value,onClick:d},[null==(e=o.default)?void 0:e.call(o)]),t.createVNode("div",{class:bp("circle-container"),onClick:d},[u()]),t.createVNode("div",{class:bp("line"),style:s.value},null)])}}})),[wp,xp]=Ie("stepper"),Vp=(e,t)=>String(e)===String(t),Np={min:V(1),max:V(1/0),name:V(""),step:V(1),theme:String,integer:Boolean,disabled:Boolean,showPlus:b,showMinus:b,showInput:b,longPress:b,autoFixed:b,allowEmpty:Boolean,modelValue:g,inputWidth:g,buttonSize:g,placeholder:String,disablePlus:Boolean,disableMinus:Boolean,disableInput:Boolean,beforeChange:Function,defaultValue:V(1),decimalLength:g};const Cp=Xe(t.defineComponent({name:wp,props:Np,emits:["plus","blur","minus","focus","change","overlimit","update:modelValue"],setup(e,{emit:o}){const a=(t,o=!0)=>{const{min:a,max:n,allowEmpty:r,decimalLength:i}=e;return r&&""===t||(t=""===(t=Ve(String(t),!e.integer))?0:+t,t=Number.isNaN(t)?+a:t,t=o?Math.max(Math.min(+n,t),+a):t,l(i)&&(t=t.toFixed(+i))),t};let n;const r=t.ref(),i=t.ref((()=>{var t;const n=null!=(t=e.modelValue)?t:e.defaultValue,r=a(n);return Vp(r,e.modelValue)||o("update:modelValue",r),r})()),s=t.computed((()=>e.disabled||e.disableMinus||+i.value<=+e.min)),c=t.computed((()=>e.disabled||e.disablePlus||+i.value>=+e.max)),d=t.computed((()=>({width:ue(e.inputWidth),height:ue(e.buttonSize)}))),u=t.computed((()=>pe(e.buttonSize))),p=t=>{e.beforeChange?Ye(e.beforeChange,{args:[t],done(){i.value=t}}):i.value=t},v=()=>{if("plus"===n&&c.value||"minus"===n&&s.value)return void o("overlimit",n);const t="minus"===n?-e.step:+e.step,r=a(Ne(+i.value,t));p(r),o(n)},m=t=>{const o=t.target,{value:a}=o,{decimalLength:n}=e;let r=Ve(String(a),!e.integer);if(l(n)&&r.includes(".")){const e=r.split(".");r=`${e[0]}.${e[1].slice(0,+n)}`}e.beforeChange?o.value=String(i.value):Vp(a,r)||(o.value=r);const s=r===String(+r);p(s?+r:r)},f=t=>{var a;e.disableInput?null==(a=r.value)||a.blur():o("focus",t)},h=n=>{const r=n.target,l=a(r.value,e.autoFixed);r.value=String(l),i.value=l,t.nextTick((()=>{o("blur",n),ne()}))};let g,b;const y=()=>{b=setTimeout((()=>{v(),y()}),200)},w=t=>{e.longPress&&(clearTimeout(b),g&&le(t))},x=t=>{e.disableInput&&le(t)},V=t=>({onClick:e=>{le(e),n=t,v()},onTouchstartPassive:()=>{n=t,e.longPress&&(g=!1,clearTimeout(b),b=setTimeout((()=>{g=!0,v(),y()}),500))},onTouchend:w,onTouchcancel:w});return t.watch((()=>[e.max,e.min,e.integer,e.decimalLength]),(()=>{const e=a(i.value);Vp(e,i.value)||(i.value=e)})),t.watch((()=>e.modelValue),(e=>{Vp(e,i.value)||(i.value=a(e))})),t.watch(i,(t=>{o("update:modelValue",t),o("change",t,{name:e.name})})),_((()=>e.modelValue)),()=>t.createVNode("div",{role:"group",class:xp([e.theme])},[t.withDirectives(t.createVNode("button",t.mergeProps({type:"button",style:u.value,class:[xp("minus",{disabled:s.value}),{[je]:!s.value}],"aria-disabled":s.value||void 0},V("minus")),null),[[t.vShow,e.showMinus]]),t.withDirectives(t.createVNode("input",{ref:r,type:e.integer?"tel":"text",role:"spinbutton",class:xp("input"),value:i.value,style:d.value,disabled:e.disabled,readonly:e.disableInput,inputmode:e.integer?"numeric":"decimal",placeholder:e.placeholder,autocomplete:"off","aria-valuemax":e.max,"aria-valuemin":e.min,"aria-valuenow":i.value,onBlur:h,onInput:m,onFocus:f,onMousedown:x},null),[[t.vShow,e.showInput]]),t.withDirectives(t.createVNode("button",t.mergeProps({type:"button",style:u.value,class:[xp("plus",{disabled:c.value}),{[je]:!c.value}],"aria-disabled":c.value||void 0},V("plus")),null),[[t.vShow,e.showPlus]])])}})),kp=Xe(hp),[Sp,Tp,Bp]=Ie("submit-bar"),Pp={tip:String,label:String,price:Number,tipIcon:String,loading:Boolean,currency:N(""),disabled:Boolean,textAlign:String,buttonText:String,buttonType:N("danger"),buttonColor:String,suffixLabel:String,placeholder:Boolean,decimalLength:V(2),safeAreaInsetBottom:b};const Dp=Xe(t.defineComponent({name:Sp,props:Pp,emits:["submit"],setup(e,{emit:o,slots:a}){const n=t.ref(),r=_e(n,Tp),l=()=>{const{price:o,label:a,currency:n,textAlign:r,suffixLabel:l,decimalLength:i}=e;if("number"==typeof o){const e=(o/100).toFixed(+i).split("."),s=i?`.${e[1]}`:"";return t.createVNode("div",{class:Tp("text"),style:{textAlign:r}},[t.createVNode("span",null,[a||Bp("label")]),t.createVNode("span",{class:Tp("price")},[n,t.createVNode("span",{class:Tp("price-integer")},[e[0]]),s]),l&&t.createVNode("span",{class:Tp("suffix-label")},[l])])}},i=()=>{var o;const{tip:n,tipIcon:r}=e;if(a.tip||n)return t.createVNode("div",{class:Tp("tip")},[r&&t.createVNode(xt,{class:Tp("tip-icon"),name:r},null),n&&t.createVNode("span",{class:Tp("tip-text")},[n]),null==(o=a.tip)?void 0:o.call(a)])},s=()=>o("submit"),c=()=>{var o,r;return t.createVNode("div",{ref:n,class:[Tp(),{"van-safe-area-bottom":e.safeAreaInsetBottom}]},[null==(o=a.top)?void 0:o.call(a),i(),t.createVNode("div",{class:Tp("bar")},[null==(r=a.default)?void 0:r.call(a),l(),a.button?a.button():t.createVNode(Ot,{round:!0,type:e.buttonType,text:e.buttonText,class:Tp("button",e.buttonType),color:e.buttonColor,loading:e.loading,disabled:e.disabled,onClick:s},null)])])};return()=>e.placeholder?r(c):c()}})),[Ap,Op]=Ie("swipe-cell"),Ip={name:V(""),disabled:Boolean,leftWidth:g,rightWidth:g,beforeClose:Function,stopPropagation:Boolean};const zp=Xe(t.defineComponent({name:Ap,props:Ip,emits:["open","close","click"],setup(e,{emit:o,slots:a}){let n,r,i,s;const c=t.ref(),d=t.ref(),u=t.ref(),p=t.reactive({offset:0,dragging:!1}),v=Wt(),m=e=>e.value?P(e).width:0,f=t.computed((()=>l(e.leftWidth)?+e.leftWidth:m(d))),h=t.computed((()=>l(e.rightWidth)?+e.rightWidth:m(u))),g=t=>{p.offset="left"===t?f.value:-h.value,n||(n=!0,o("open",{name:e.name,position:t}))},b=t=>{p.offset=0,n&&(n=!1,o("close",{name:e.name,position:t}))},y=t=>{e.disabled||(i=p.offset,v.start(t))},w=()=>{p.dragging&&(p.dragging=!1,(e=>{const t=Math.abs(p.offset),o=n?.85:.15,a="left"===e?f.value:h.value;a&&t>a*o?g(e):b(e)})(p.offset>0?"left":"right"),setTimeout((()=>{r=!1}),0))},x=(t="outside",a)=>{s||(o("click",t),n&&!r&&(s=!0,Ye(e.beforeClose,{args:[{event:a,name:e.name,position:t}],done:()=>{s=!1,b(t)},canceled:()=>s=!1,error:()=>s=!1})))},V=(e,t)=>o=>{t&&o.stopPropagation(),r||x(e,o)},N=(e,o)=>{const n=a[e];if(n)return t.createVNode("div",{ref:o,class:Op(e),onClick:V(e,!0)},[n()])};return at({open:g,close:b}),W(c,(e=>x("outside",e)),{eventName:"touchstart"}),j("touchmove",(t=>{if(e.disabled)return;const{deltaX:o}=v;if(v.move(t),v.isHorizontal()){r=!0,p.dragging=!0;(!n||o.value*i<0)&&le(t,e.stopPropagation),p.offset=we(o.value+i,-h.value,f.value)}}),{target:c}),()=>{var e;const o={transform:`translate3d(${p.offset}px, 0, 0)`,transitionDuration:p.dragging?"0s":".6s"};return t.createVNode("div",{ref:c,class:Op(),onClick:V("cell",r),onTouchstartPassive:y,onTouchend:w,onTouchcancel:w},[t.createVNode("div",{class:Op("wrapper"),style:o},[N("left",d),null==(e=a.default)?void 0:e.call(a),N("right",u)])])}}})),[Ep,Lp]=Ie("tabbar"),$p={route:Boolean,fixed:b,border:b,zIndex:g,placeholder:Boolean,activeColor:String,beforeChange:Function,inactiveColor:String,modelValue:V(0),safeAreaInsetBottom:{type:Boolean,default:null}},Mp=Symbol(Ep);const Fp=Xe(t.defineComponent({name:Ep,props:$p,emits:["change","update:modelValue"],setup(e,{emit:o,slots:a}){const n=t.ref(),{linkChildren:r}=I(Mp),l=_e(n,Lp),i=()=>{var t;return null!=(t=e.safeAreaInsetBottom)?t:e.fixed},s=()=>{var o;const{fixed:r,zIndex:l,border:s}=e;return t.createVNode("div",{ref:n,role:"tablist",style:ve(l),class:[Lp({fixed:r}),{[Re]:s,"van-safe-area-bottom":i()}]},[null==(o=a.default)?void 0:o.call(a)])};return r({props:e,setActive:(t,a)=>{Ye(e.beforeChange,{args:[t],done(){o("update:modelValue",t),o("change",t),a()}})}}),()=>e.fixed&&e.placeholder?l(s):s()}})),[Rp,Hp]=Ie("tabbar-item"),jp=a({},nt,{dot:Boolean,icon:String,name:g,badge:g,badgeProps:Object,iconPrefix:String});const Wp=Xe(t.defineComponent({name:Rp,props:jp,emits:["click"],setup(e,{emit:o,slots:a}){const n=lt(),l=t.getCurrentInstance().proxy,{parent:i,index:s}=D(Mp);if(!i)return;const c=t.computed((()=>{var t;const{route:o,modelValue:a}=i.props;if(o&&"$route"in l){const{$route:t}=l,{to:o}=e,a=r(o)?o:{path:o};return!!t.matched.find((e=>{const t="path"in a&&a.path===e.path,o="name"in a&&a.name===e.name;return t||o}))}return(null!=(t=e.name)?t:s.value)===a})),d=t=>{var a;c.value||i.setActive(null!=(a=e.name)?a:s.value,n),o("click",t)},u=()=>a.icon?a.icon({active:c.value}):e.icon?t.createVNode(xt,{name:e.icon,classPrefix:e.iconPrefix},null):void 0;return()=>{var o;const{dot:n,badge:r}=e,{activeColor:l,inactiveColor:s}=i.props,p=c.value?l:s;return t.createVNode("div",{role:"tab",class:Hp({active:c.value}),style:{color:p},tabindex:0,"aria-selected":c.value,onClick:d},[t.createVNode(dt,t.mergeProps({dot:n,class:Hp("icon"),content:r},e.badgeProps),{default:u}),t.createVNode("div",{class:Hp("text")},[null==(o=a.default)?void 0:o.call(a,{active:c.value})])])}}})),[Up,Yp]=Ie("text-ellipsis"),Xp={rows:V(1),dots:N("..."),content:N(""),expandText:N(""),collapseText:N(""),position:N("end")};const qp=Xe(t.defineComponent({name:Up,props:Xp,emits:["clickAction"],setup(e,{emit:o,slots:a}){const n=t.ref(e.content),r=t.ref(!1),l=t.ref(!1),i=t.ref(),s=t.ref();let c=!1;const d=t.computed((()=>r.value?e.collapseText:e.expandText)),u=e=>{if(!e)return 0;const t=e.match(/^\d*(\.\d*)?/);return t?Number(t[0]):0},p=()=>{const t=(()=>{if(!i.value||!i.value.isConnected)return;const t=window.getComputedStyle(i.value),o=document.createElement("div");return Array.prototype.slice.apply(t).forEach((e=>{o.style.setProperty(e,t.getPropertyValue(e))})),o.style.position="fixed",o.style.zIndex="-9999",o.style.top="-9999px",o.style.height="auto",o.style.minHeight="auto",o.style.maxHeight="auto",o.innerText=e.content,document.body.appendChild(o),o})();if(!t)return void(c=!0);const{paddingBottom:o,paddingTop:r,lineHeight:d}=t.style,p=Math.ceil((Number(e.rows)+.5)*u(d)+u(r)+u(o));p{var n,r;const{content:l,position:i,dots:c}=e,d=l.length,u=0+d>>1,p=a.action?null!=(r=null==(n=s.value)?void 0:n.outerHTML)?r:"":e.expandText,v=(a,n)=>{if(a[1]-a[0]<=1&&n[1]-n[0]<=1)return l.slice(0,a[0])+c+l.slice(n[1],d);const r=Math.floor((a[0]+a[1])/2),i=Math.ceil((n[0]+n[1])/2);return t.innerText=e.content.slice(0,r)+e.dots+e.content.slice(i,d),t.innerHTML+=p,t.offsetHeight>=o?v([a[0],r],[i,n[1]]):v([r,a[1]],[n[0],i])};return"middle"===e.position?v([0,u],[u,d]):(()=>{const e=(a,n)=>{if(n-a<=1)return"end"===i?l.slice(0,a)+c:c+l.slice(n,d);const r=Math.round((a+n)/2);return t.innerText="end"===i?l.slice(0,r)+c:c+l.slice(r,d),t.innerHTML+=p,t.offsetHeight>o?"end"===i?e(a,r):e(r,n):"end"===i?e(r,n):e(a,r)};return e(0,d)})()})(t,p)):(l.value=!1,n.value=e.content),document.body.removeChild(t)},v=(e=!r.value)=>{r.value=e},m=e=>{v(),o("clickAction",e)},f=()=>{const e=a.action?a.action({expanded:r.value}):d.value;return t.createVNode("span",{ref:s,class:Yp("action"),onClick:m},[e])};return t.onMounted((()=>{p(),a.action&&t.nextTick(p)})),t.onActivated((()=>{c&&(c=!1,p())})),t.watch([se,()=>[e.content,e.rows,e.position]],p),at({toggle:v}),()=>t.createVNode("div",{ref:i,class:Yp()},[r.value?e.content:n.value,l.value?f():null])}})),[Gp]=Ie("time-picker"),Zp=e=>/^([01]\d|2[0-3]):([0-5]\d):([0-5]\d)$/.test(e),Kp=["hour","minute","second"],_p=a({},_r,{minHour:V(0),maxHour:V(23),minMinute:V(0),maxMinute:V(59),minSecond:V(0),maxSecond:V(59),minTime:{type:String,validator:Zp},maxTime:{type:String,validator:Zp},columnsType:{type:Array,default:()=>["hour","minute"]},filter:Function});const Jp=Xe(t.defineComponent({name:Gp,props:_p,emits:["confirm","cancel","change","update:modelValue"],setup(e,{emit:o,slots:a}){const n=t.ref(e.modelValue),r=t.ref(),l=t=>{const o=t.split(":");return Kp.map(((t,a)=>e.columnsType.includes(t)?o[a]:"00"))},i=t.computed((()=>{let{minHour:t,maxHour:o,minMinute:a,maxMinute:r,minSecond:i,maxSecond:s}=e;if(e.minTime||e.maxTime){const c={hour:0,minute:0,second:0};e.columnsType.forEach(((e,t)=>{var o;c[e]=null!=(o=n.value[t])?o:0}));const{hour:d,minute:u}=c;if(e.minTime){const[o,n,r]=l(e.minTime);t=o,a=+d<=+t?n:"00",i=+d<=+t&&+u<=+a?r:"00"}if(e.maxTime){const[t,a,n]=l(e.maxTime);o=t,r=+d>=+o?a:"59",s=+d>=+o&&+u>=+r?n:"59"}}return e.columnsType.map((l=>{const{filter:c,formatter:d}=e;switch(l){case"hour":return el(+t,+o,l,d,c,n.value);case"minute":return el(+a,+r,l,d,c,n.value);case"second":return el(+i,+s,l,d,c,n.value);default:return[]}}))}));t.watch(n,(t=>{m(t,e.modelValue)||o("update:modelValue",t)})),t.watch((()=>e.modelValue),(e=>{e=tl(e,i.value),m(e,n.value)||(n.value=e)}),{immediate:!0});const s=(...e)=>o("change",...e),c=(...e)=>o("cancel",...e),d=(...e)=>o("confirm",...e);return at({confirm:()=>{var e;return null==(e=r.value)?void 0:e.confirm()},getSelectedTime:()=>n.value}),()=>t.createVNode(Pa,t.mergeProps({ref:r,modelValue:n.value,"onUpdate:modelValue":e=>n.value=e,columns:i.value,onChange:s,onCancel:c,onConfirm:d},v(e,Jr)),a)}})),[Qp,ev]=Ie("tree-select"),tv={max:V(1/0),items:w(),height:V(300),selectedIcon:N("success"),mainActiveIndex:V(0),activeId:{type:[Number,String,Array],default:0}};const ov=Xe(t.defineComponent({name:Qp,props:tv,emits:["clickNav","clickItem","update:activeId","update:mainActiveIndex"],setup(e,{emit:o,slots:a}){const n=t=>Array.isArray(e.activeId)?e.activeId.includes(t):e.activeId===t,r=a=>t.createVNode("div",{key:a.id,class:["van-ellipsis",ev("item",{active:n(a.id),disabled:a.disabled})],onClick:()=>{if(a.disabled)return;let t;if(Array.isArray(e.activeId)){t=e.activeId.slice();const o=t.indexOf(a.id);-1!==o?t.splice(o,1):t.length<+e.max&&t.push(a.id)}else t=a.id;o("update:activeId",t),o("clickItem",a)}},[a.text,n(a.id)&&t.createVNode(xt,{name:e.selectedIcon,class:ev("selected")},null)]),l=e=>{o("update:mainActiveIndex",e)},i=e=>o("clickNav",e),s=()=>{const o=e.items.map((e=>t.createVNode(Tu,{dot:e.dot,badge:e.badge,class:[ev("nav-item"),e.className],disabled:e.disabled,onClick:i},{title:()=>a["nav-text"]?a["nav-text"](e):e.text})));return t.createVNode(Nu,{class:ev("nav"),modelValue:e.mainActiveIndex,onChange:l},{default:()=>[o]})},c=()=>{if(a.content)return a.content();const t=e.items[+e.mainActiveIndex]||{};return t.children?t.children.map(r):void 0};return()=>t.createVNode("div",{class:ev(),style:{height:ue(e.height)}},[s(),t.createVNode("div",{class:ev("content")},[c()])])}})),[av,nv,rv]=Ie("uploader");function lv(e,t){return new Promise((o=>{if("file"===t)return void o();const a=new FileReader;a.onload=e=>{o(e.target.result)},"dataUrl"===t?a.readAsDataURL(e):"text"===t&&a.readAsText(e)}))}function iv(e,t){return f(e).some((e=>!!e.file&&(i(t)?t(e.file):e.file.size>+t)))}const sv=/\.(jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg|avif)/i;function cv(e){return!!e.isImage||(e.file&&e.file.type?0===e.file.type.indexOf("image"):e.url?(t=e.url,sv.test(t)):"string"==typeof e.content&&0===e.content.indexOf("data:image"));var t}var dv=t.defineComponent({props:{name:g,item:y(Object),index:Number,imageFit:String,lazyLoad:Boolean,deletable:Boolean,reupload:Boolean,previewSize:[Number,String,Array],beforeDelete:Function},emits:["delete","preview","reupload"],setup(e,{emit:o,slots:n}){const r=()=>{const{status:o,message:a}=e.item;if("uploading"===o||"failed"===o){const e="failed"===o?t.createVNode(xt,{name:"close",class:nv("mask-icon")},null):t.createVNode(Bt,{class:nv("loading")},null),n=l(a)&&""!==a;return t.createVNode("div",{class:nv("mask")},[e,n&&t.createVNode("div",{class:nv("mask-message")},[a])])}},i=t=>{const{name:a,item:n,index:r,beforeDelete:l}=e;t.stopPropagation(),Ye(l,{args:[n,{name:a,index:r}],done:()=>o("delete")})},s=()=>o("preview"),c=()=>o("reupload"),d=()=>{if(e.deletable&&"uploading"!==e.item.status){const e=n["preview-delete"];return t.createVNode("div",{role:"button",class:nv("preview-delete",{shadow:!e}),tabindex:0,"aria-label":rv("delete"),onClick:i},[e?e():t.createVNode(xt,{name:"cross",class:nv("preview-delete-icon")},null)])}},u=()=>{if(n["preview-cover"]){const{index:o,item:r}=e;return t.createVNode("div",{class:nv("preview-cover")},[n["preview-cover"](a({index:o},r))])}},p=()=>{const{item:o,lazyLoad:a,imageFit:n,previewSize:r,reupload:l}=e;return cv(o)?t.createVNode(ml,{fit:n,src:o.objectUrl||o.content||o.url,class:nv("preview-image"),width:Array.isArray(r)?r[0]:r,height:Array.isArray(r)?r[1]:r,lazyLoad:a,onClick:l?c:s},{default:u}):t.createVNode("div",{class:nv("file"),style:pe(e.previewSize)},[t.createVNode(xt,{class:nv("file-icon"),name:"description"},null),t.createVNode("div",{class:[nv("file-name"),"van-ellipsis"]},[o.file?o.file.name:o.url]),u()])};return()=>t.createVNode("div",{class:nv("preview")},[p(),r(),d()])}});const uv={name:V(""),accept:N("image/*"),capture:String,multiple:Boolean,disabled:Boolean,readonly:Boolean,lazyLoad:Boolean,maxCount:V(1/0),imageFit:N("cover"),resultType:N("dataUrl"),uploadIcon:N("photograph"),uploadText:String,deletable:b,reupload:Boolean,afterRead:Function,showUpload:b,modelValue:w(),beforeRead:Function,beforeDelete:Function,previewSize:[Number,String,Array],previewImage:b,previewOptions:Object,previewFullImage:b,maxSize:{type:[Number,String,Function],default:1/0}};const pv=Xe(t.defineComponent({name:av,props:uv,emits:["delete","oversize","clickUpload","closePreview","clickPreview","clickReupload","update:modelValue"],setup(e,{emit:o,slots:n}){const r=t.ref(),l=[],i=t.ref(-1),c=t.ref(!1),d=(t=e.modelValue.length)=>({name:e.name,index:t}),u=()=>{r.value&&(r.value.value="")},p=a=>{if(u(),iv(a,e.maxSize)){if(!Array.isArray(a))return void o("oversize",a,d());{const t=function(e,t){const o=[],a=[];return e.forEach((e=>{iv(e,t)?a.push(e):o.push(e)})),{valid:o,invalid:a}}(a,e.maxSize);if(a=t.valid,o("oversize",t.invalid,d()),!a.length)return}}if(a=t.reactive(a),i.value>-1){const t=[...e.modelValue];t.splice(i.value,1,a),o("update:modelValue",t),i.value=-1}else o("update:modelValue",[...e.modelValue,...f(a)]);e.afterRead&&e.afterRead(a,d())},m=t=>{const{maxCount:o,modelValue:a,resultType:n}=e;if(Array.isArray(t)){const e=+o-a.length;t.length>e&&(t=t.slice(0,e)),Promise.all(t.map((e=>lv(e,n)))).then((e=>{const o=t.map(((t,o)=>{const a={file:t,status:"",message:"",objectUrl:URL.createObjectURL(t)};return e[o]&&(a.content=e[o]),a}));p(o)}))}else lv(t,n).then((e=>{const o={file:t,status:"",message:"",objectUrl:URL.createObjectURL(t)};e&&(o.content=e),p(o)}))},h=t=>{const{files:o}=t.target;if(e.disabled||!o||!o.length)return;const a=1===o.length?o[0]:[].slice.call(o);if(e.beforeRead){const t=e.beforeRead(a,d());if(!t)return void u();if(s(t))return void t.then((e=>{m(e||a)})).catch(u)}m(a)};let g;const b=()=>o("closePreview"),y=e=>{c.value=!0,i.value=e,t.nextTick((()=>k()))},w=()=>{c.value||(i.value=-1),c.value=!1},x=(r,i)=>{const s=["imageFit","deletable","reupload","previewSize","beforeDelete"],c=a(v(e,s),v(r,s,!0));return t.createVNode(dv,t.mergeProps({item:r,index:i,onClick:()=>o(e.reupload?"clickReupload":"clickPreview",r,d(i)),onDelete:()=>((t,a)=>{const n=e.modelValue.slice(0);n.splice(a,1),o("update:modelValue",n),o("delete",t,d(a))})(r,i),onPreview:()=>(t=>{if(e.previewFullImage){const o=e.modelValue.filter(cv),n=o.map((e=>(e.objectUrl&&!e.url&&"failed"!==e.status&&(e.url=e.objectUrl,l.push(e.url)),e.url))).filter(Boolean);g=Gs(a({images:n,startPosition:o.indexOf(t),onClose:b},e.previewOptions))}})(r),onReupload:()=>y(i)},v(e,["name","lazyLoad"]),c),v(n,["preview-cover","preview-delete"]))},V=()=>{if(e.previewImage)return e.modelValue.map(x)},N=e=>o("clickUpload",e),C=()=>{const o=e.modelValue.length<+e.maxCount,a=e.readonly?null:t.createVNode("input",{ref:r,type:"file",class:nv("input"),accept:e.accept,capture:e.capture,multiple:e.multiple&&-1===i.value,disabled:e.disabled,onChange:h,onClick:w},null);return n.default?t.withDirectives(t.createVNode("div",{class:nv("input-wrapper"),onClick:N},[n.default(),a]),[[t.vShow,o]]):t.withDirectives(t.createVNode("div",{class:nv("upload",{readonly:e.readonly}),style:pe(e.previewSize),onClick:N},[t.createVNode(xt,{name:e.uploadIcon,class:nv("upload-icon")},null),e.uploadText&&t.createVNode("span",{class:nv("upload-text")},[e.uploadText]),a]),[[t.vShow,e.showUpload&&o]])},k=()=>{r.value&&!e.disabled&&r.value.click()};return t.onBeforeUnmount((()=>{l.forEach((e=>URL.revokeObjectURL(e)))})),at({chooseFile:k,reuploadFile:y,closeImagePreview:()=>{g&&g.close()}}),_((()=>e.modelValue)),()=>t.createVNode("div",{class:nv()},[t.createVNode("div",{class:nv("wrapper",{disabled:e.disabled})},[V(),C()])])}})),[vv,mv]=Ie("watermark"),fv={gapX:x(0),gapY:x(0),image:String,width:x(100),height:x(100),rotate:V(-22),zIndex:g,content:String,opacity:g,fullPage:b,textColor:N("#dcdee0")};const hv=Xe(t.defineComponent({name:vv,props:fv,setup(e,{slots:o}){const n=t.ref(),r=t.ref(""),l=t.ref(""),i=()=>{const a={transformOrigin:"center",transform:`rotate(${e.rotate}deg)`},n=e.width+e.gapX,r=e.height+e.gapY;return t.createVNode("svg",{viewBox:`0 0 ${n} ${r}`,width:n,height:r,xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",style:{padding:`0 ${e.gapX}px ${e.gapY}px 0`,opacity:e.opacity}},[e.image&&!o.content?t.createVNode("image",{href:l.value,"xlink:href":l.value,x:"0",y:"0",width:e.width,height:e.height,style:a},null):t.createVNode("foreignObject",{x:"0",y:"0",width:e.width,height:e.height},[t.createVNode("div",{xmlns:"http://www.w3.org/1999/xhtml",style:a},[o.content?o.content():t.createVNode("span",{style:{color:e.textColor}},[e.content])])])])};return t.watchEffect((()=>{e.image&&(e=>{const t=document.createElement("canvas"),o=new Image;o.crossOrigin="anonymous",o.referrerPolicy="no-referrer",o.onload=()=>{t.width=o.naturalWidth,t.height=o.naturalHeight;const e=t.getContext("2d");null==e||e.drawImage(o,0,0),l.value=t.toDataURL()},o.src=e})(e.image)})),t.watch((()=>[l.value,e.content,e.textColor,e.height,e.width,e.rotate,e.gapX,e.gapY]),(()=>{t.nextTick((()=>{n.value&&(r.value&&URL.revokeObjectURL(r.value),r.value=(e=>{const t=new Blob([e],{type:"image/svg+xml"});return URL.createObjectURL(t)})(n.value.innerHTML))}))}),{immediate:!0}),t.onUnmounted((()=>{r.value&&URL.revokeObjectURL(r.value)})),()=>{const o=a({backgroundImage:`url(${r.value})`},ve(e.zIndex));return t.createVNode("div",{class:mv({full:e.fullPage}),style:o},[t.createVNode("div",{class:mv("wrapper"),ref:n},[i()])])}}}));class gv{constructor({el:e,src:t,error:o,loading:a,bindType:n,$parent:r,options:l,cors:i,elRenderer:s,imageCache:c}){this.el=e,this.src=t,this.error=o,this.loading=a,this.bindType=n,this.attempt=0,this.cors=i,this.naturalHeight=0,this.naturalWidth=0,this.options=l,this.$parent=r,this.elRenderer=s,this.imageCache=c,this.performanceData={loadStart:0,loadEnd:0},this.filter(),this.initState(),this.render("loading",!1)}initState(){"dataset"in this.el?this.el.dataset.src=this.src:this.el.setAttribute("data-src",this.src),this.state={loading:!1,error:!1,loaded:!1,rendered:!1}}record(e){this.performanceData[e]=Date.now()}update({src:e,loading:t,error:o}){const a=this.src;this.src=e,this.loading=t,this.error=o,this.filter(),a!==this.src&&(this.attempt=0,this.initState())}checkInView(){const e=P(this.el);return e.topthis.options.preLoadTop&&e.left0}filter(){Object.keys(this.options.filter).forEach((e=>{this.options.filter[e](this,this.options)}))}renderLoading(e){this.state.loading=!0,Cr({src:this.loading,cors:this.cors},(()=>{this.render("loading",!1),this.state.loading=!1,e()}),(()=>{e(),this.state.loading=!1}))}load(e=o){if(this.attempt>this.options.attempt-1&&this.state.error)e();else if(!this.state.rendered||!this.state.loaded)return this.imageCache.has(this.src)?(this.state.loaded=!0,this.render("loaded",!0),this.state.rendered=!0,e()):void this.renderLoading((()=>{var t,o;this.attempt++,null==(o=(t=this.options.adapter).beforeLoad)||o.call(t,this,this.options),this.record("loadStart"),Cr({src:this.src,cors:this.cors},(t=>{this.naturalHeight=t.naturalHeight,this.naturalWidth=t.naturalWidth,this.state.loaded=!0,this.state.error=!1,this.record("loadEnd"),this.render("loaded",!1),this.state.rendered=!0,this.imageCache.add(this.src),e()}),(e=>{!this.options.silent&&console.error(e),this.state.error=!0,this.state.loaded=!1,this.render("error",!1)}))}))}render(e,t){this.elRenderer(this,e,t)}performance(){let e="loading",t=0;return this.state.loaded&&(e="loaded",t=(this.performanceData.loadEnd-this.performanceData.loadStart)/1e3),this.state.error&&(e="error"),{src:this.src,state:e,time:t}}$destroy(){this.el=null,this.src=null,this.error=null,this.loading=null,this.bindType=null,this.attempt=0}}const bv="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",yv=["scroll","wheel","mousewheel","resize","animationend","transitionend","touchmove"],wv={rootMargin:"0px",threshold:0};var xv=e=>({props:{tag:{type:String,default:"div"}},emits:["show"],render(){return t.h(this.tag,this.show&&this.$slots.default?this.$slots.default():null)},data:()=>({el:null,state:{loaded:!1},show:!1}),mounted(){this.el=this.$el,e.addLazyBox(this),e.lazyLoadHandler()},beforeUnmount(){e.removeComponent(this)},methods:{checkInView(){const t=P(this.$el);return C&&t.top0&&t.left0},load(){this.show=!0,this.state.loaded=!0,this.$emit("show",this)},destroy(){return this.$destroy}}});const Vv={selector:"img"};class Nv{constructor({el:e,binding:t,vnode:o,lazy:a}){this.el=null,this.vnode=o,this.binding=t,this.options={},this.lazy=a,this.queue=[],this.update({el:e,binding:t})}update({el:e,binding:t}){this.el=e,this.options=Object.assign({},Vv,t.value);this.getImgs().forEach((e=>{this.lazy.add(e,Object.assign({},this.binding,{value:{src:"dataset"in e?e.dataset.src:e.getAttribute("data-src"),error:("dataset"in e?e.dataset.error:e.getAttribute("data-error"))||this.options.error,loading:("dataset"in e?e.dataset.loading:e.getAttribute("data-loading"))||this.options.loading}}),this.vnode)}))}getImgs(){return Array.from(this.el.querySelectorAll(this.options.selector))}clear(){this.getImgs().forEach((e=>this.lazy.remove(e))),this.vnode=null,this.binding=null,this.lazy=null}}class Cv{constructor({lazy:e}){this.lazy=e,this.queue=[]}bind(e,t,o){const a=new Nv({el:e,binding:t,vnode:o,lazy:this.lazy});this.queue.push(a)}update(e,t,o){const a=this.queue.find((t=>t.el===e));a&&a.update({el:e,binding:t,vnode:o})}unbind(e){const t=this.queue.find((t=>t.el===e));t&&(t.clear(),gr(this.queue,t))}}var kv=e=>({props:{src:[String,Object],tag:{type:String,default:"img"}},render(){var e,o;return t.h(this.tag,{src:this.renderSrc},null==(o=(e=this.$slots).default)?void 0:o.call(e))},data:()=>({el:null,options:{src:"",error:"",loading:"",attempt:e.options.attempt},state:{loaded:!1,error:!1,attempt:0},renderSrc:""}),watch:{src(){this.init(),e.addLazyBox(this),e.lazyLoadHandler()}},created(){this.init()},mounted(){this.el=this.$el,e.addLazyBox(this),e.lazyLoadHandler()},beforeUnmount(){e.removeComponent(this)},methods:{init(){const{src:t,loading:o,error:a}=e.valueFormatter(this.src);this.state.loaded=!1,this.options.src=t,this.options.error=a,this.options.loading=o,this.renderSrc=this.options.loading},checkInView(){const t=P(this.$el);return t.top0&&t.left0},load(e=o){if(this.state.attempt>this.options.attempt-1&&this.state.error)return void e();const{src:t}=this.options;Cr({src:t},(({src:e})=>{this.renderSrc=e,this.state.loaded=!0}),(()=>{this.state.attempt++,this.renderSrc=this.options.error,this.state.error=!0}))}}});const Sv={install(e,o={}){const a=class{constructor({preLoad:e,error:t,throttleWait:o,preLoadTop:a,dispatchEvent:n,loading:r,attempt:l,silent:i=!0,scale:s,listenEvents:c,filter:d,adapter:u,observer:p,observerOptions:v}){this.mode=fr,this.listeners=[],this.targetIndex=0,this.targets=[],this.options={silent:i,dispatchEvent:!!n,throttleWait:o||200,preLoad:e||1.3,preLoadTop:a||0,error:t||bv,loading:r||bv,attempt:l||3,scale:s||yr(s),ListenEvents:c||yv,supportWebp:wr(),filter:d||{},adapter:u||{},observer:!!p,observerOptions:v||wv},this.initEvent(),this.imageCache=new kr({max:200}),this.lazyLoadHandler=xr(this.lazyLoadHandler.bind(this),this.options.throttleWait),this.setMode(this.options.observer?hr:fr)}config(e={}){Object.assign(this.options,e)}performance(){return this.listeners.map((e=>e.performance()))}addLazyBox(e){this.listeners.push(e),C&&(this.addListenerTarget(window),this.observer&&this.observer.observe(e.el),e.$el&&e.$el.parentNode&&this.addListenerTarget(e.$el.parentNode))}add(e,o,a){if(this.listeners.some((t=>t.el===e)))return this.update(e,o),t.nextTick(this.lazyLoadHandler);const n=this.valueFormatter(o.value);let{src:r}=n;t.nextTick((()=>{r=br(e,this.options.scale)||r,this.observer&&this.observer.observe(e);const l=Object.keys(o.modifiers)[0];let i;l&&(i=a.context.$refs[l],i=i?i.$el||i:document.getElementById(l)),i||(i=G(e));const s=new gv({bindType:o.arg,$parent:i,el:e,src:r,loading:n.loading,error:n.error,cors:n.cors,elRenderer:this.elRenderer.bind(this),options:this.options,imageCache:this.imageCache});this.listeners.push(s),C&&(this.addListenerTarget(window),this.addListenerTarget(i)),this.lazyLoadHandler(),t.nextTick((()=>this.lazyLoadHandler()))}))}update(e,o,a){const n=this.valueFormatter(o.value);let{src:r}=n;r=br(e,this.options.scale)||r;const l=this.listeners.find((t=>t.el===e));l?l.update({src:r,error:n.error,loading:n.loading}):this.add(e,o,a),this.observer&&(this.observer.unobserve(e),this.observer.observe(e)),this.lazyLoadHandler(),t.nextTick((()=>this.lazyLoadHandler()))}remove(e){if(!e)return;this.observer&&this.observer.unobserve(e);const t=this.listeners.find((t=>t.el===e));t&&(this.removeListenerTarget(t.$parent),this.removeListenerTarget(window),gr(this.listeners,t),t.$destroy())}removeComponent(e){e&&(gr(this.listeners,e),this.observer&&this.observer.unobserve(e.el),e.$parent&&e.$el.parentNode&&this.removeListenerTarget(e.$el.parentNode),this.removeListenerTarget(window))}setMode(e){mr||e!==hr||(e=fr),this.mode=e,e===fr?(this.observer&&(this.listeners.forEach((e=>{this.observer.unobserve(e.el)})),this.observer=null),this.targets.forEach((e=>{this.initListen(e.el,!0)}))):(this.targets.forEach((e=>{this.initListen(e.el,!1)})),this.initIntersectionObserver())}addListenerTarget(e){if(!e)return;let t=this.targets.find((t=>t.el===e));return t?t.childrenCount++:(t={el:e,id:++this.targetIndex,childrenCount:1,listened:!0},this.mode===fr&&this.initListen(t.el,!0),this.targets.push(t)),this.targetIndex}removeListenerTarget(e){this.targets.forEach(((t,o)=>{t.el===e&&(t.childrenCount--,t.childrenCount||(this.initListen(t.el,!1),this.targets.splice(o,1),t=null))}))}initListen(e,t){this.options.ListenEvents.forEach((o=>(t?Vr:Nr)(e,o,this.lazyLoadHandler)))}initEvent(){this.Event={listeners:{loading:[],loaded:[],error:[]}},this.$on=(e,t)=>{this.Event.listeners[e]||(this.Event.listeners[e]=[]),this.Event.listeners[e].push(t)},this.$once=(e,t)=>{const o=(...a)=>{this.$off(e,o),t.apply(this,a)};this.$on(e,o)},this.$off=(e,t)=>{if(t)gr(this.Event.listeners[e],t);else{if(!this.Event.listeners[e])return;this.Event.listeners[e].length=0}},this.$emit=(e,t,o)=>{this.Event.listeners[e]&&this.Event.listeners[e].forEach((e=>e(t,o)))}}lazyLoadHandler(){const e=[];this.listeners.forEach((t=>{t.el&&t.el.parentNode||e.push(t),t.checkInView()&&t.load()})),e.forEach((e=>{gr(this.listeners,e),e.$destroy()}))}initIntersectionObserver(){mr&&(this.observer=new IntersectionObserver(this.observerHandler.bind(this),this.options.observerOptions),this.listeners.length&&this.listeners.forEach((e=>{this.observer.observe(e.el)})))}observerHandler(e){e.forEach((e=>{e.isIntersecting&&this.listeners.forEach((t=>{if(t.el===e.target){if(t.state.loaded)return this.observer.unobserve(t.el);t.load()}}))}))}elRenderer(e,t,o){if(!e.el)return;const{el:a,bindType:n}=e;let r;switch(t){case"loading":r=e.loading;break;case"error":r=e.error;break;default:({src:r}=e)}if(n?a.style[n]='url("'+r+'")':a.getAttribute("src")!==r&&a.setAttribute("src",r),a.setAttribute("lazy",t),this.$emit(t,e,o),this.options.adapter[t]&&this.options.adapter[t](e,this.options),this.options.dispatchEvent){const o=new CustomEvent(t,{detail:e});a.dispatchEvent(o)}}valueFormatter(e){let t=e,{loading:o,error:a}=this.options;return r(e)&&(({src:t}=e),o=e.loading||this.options.loading,a=e.error||this.options.error),{src:t,loading:o,error:a}}},n=new a(o),l=new Cv({lazy:n});e.config.globalProperties.$Lazyload=n,o.lazyComponent&&e.component("LazyComponent",xv(n)),o.lazyImage&&e.component("LazyImage",kv(n)),e.directive("lazy",{beforeMount:n.add.bind(n),updated:n.update.bind(n),unmounted:n.remove.bind(n)}),e.directive("lazy-container",{beforeMount:l.bind.bind(l),updated:l.update.bind(l),unmounted:l.unbind.bind(l)})}},Tv="4.9.4";function Bv(e){[ot,Lt,Rt,io,En,vr,Ia,Pr,dt,Ir,Ot,dl,bl,Nl,Ma,Tl,rr,Yn,Il,jl,ql,Jl,Ql,ni,di,fi,yi,ki,Ai,Ri,Ui,ts,rs,ms,fs,Ei,Qa,ys,Ns,ja,Bs,Os,Ls,xt,ml,Zs,nc,rc,dc,Bt,Be,mc,bc,Bc,$c,Jt,Wc,qc,Pa,Gc,$d,oo,Hd,qd,tr,Rn,_d,ru,lu,uu,bu,Nu,Tu,Ou,Ju,Hu,op,qu,Lu,lp,up,yp,Cp,kp,Uo,Dp,Zo,zp,da,kn,ma,Fp,Wp,fa,Zn,qp,Jp,xn,ov,pv,hv].forEach((t=>{t.install?e.use(t):t.name&&e.component(t.name,t)}))}var Pv={install:Bv,version:Tv};e.ActionBar=ot,e.ActionBarButton=Lt,e.ActionBarIcon=Rt,e.ActionSheet=io,e.AddressEdit=En,e.AddressList=vr,e.Area=Ia,e.BackTop=Pr,e.Badge=dt,e.Barrage=Ir,e.Button=Ot,e.Calendar=dl,e.Card=bl,e.Cascader=Nl,e.Cell=Ma,e.CellGroup=Tl,e.Checkbox=rr,e.CheckboxGroup=Yn,e.Circle=Il,e.Col=jl,e.Collapse=ql,e.CollapseItem=Jl,e.ConfigProvider=Ql,e.ContactCard=ni,e.ContactEdit=di,e.ContactList=fi,e.CountDown=yi,e.Coupon=ki,e.CouponCell=Ai,e.CouponList=Ri,e.DEFAULT_ROW_WIDTH=Wu,e.DatePicker=Ui,e.Dialog=ts,e.Divider=rs,e.DropdownItem=ms,e.DropdownMenu=fs,e.Empty=Ei,e.Field=Qa,e.FloatingBubble=ys,e.FloatingPanel=Ns,e.Form=ja,e.Grid=Bs,e.GridItem=Os,e.Highlight=Ls,e.Icon=xt,e.Image=ml,e.ImagePreview=Zs,e.IndexAnchor=nc,e.IndexBar=rc,e.Lazyload=Sv,e.List=dc,e.Loading=Bt,e.Locale=Be,e.NavBar=mc,e.NoticeBar=bc,e.Notify=Bc,e.NumberKeyboard=$c,e.Overlay=Jt,e.Pagination=Wc,e.PasswordInput=qc,e.Picker=Pa,e.PickerGroup=Gc,e.Popover=$d,e.Popup=oo,e.Progress=Hd,e.PullRefresh=qd,e.Radio=tr,e.RadioGroup=Rn,e.Rate=_d,e.RollingText=ru,e.Row=lu,e.Search=uu,e.ShareSheet=bu,e.Sidebar=Nu,e.SidebarItem=Tu,e.Signature=Ou,e.Skeleton=Ju,e.SkeletonAvatar=Hu,e.SkeletonImage=op,e.SkeletonParagraph=qu,e.SkeletonTitle=Lu,e.Slider=lp,e.Space=up,e.Step=yp,e.Stepper=Cp,e.Steps=kp,e.Sticky=Uo,e.SubmitBar=Dp,e.Swipe=Zo,e.SwipeCell=zp,e.SwipeItem=da,e.Switch=kn,e.Tab=ma,e.Tabbar=Fp,e.TabbarItem=Wp,e.Tabs=fa,e.Tag=Zn,e.TextEllipsis=qp,e.TimePicker=Jp,e.Toast=xn,e.TreeSelect=ov,e.Uploader=pv,e.Watermark=hv,e.actionBarButtonProps=Et,e.actionBarIconProps=Ft,e.actionBarProps=tt,e.actionSheetProps=ro,e.addressEditProps=zn,e.addressListProps=pr,e.allowMultipleToast=(e=!0)=>{un=e},e.areaProps=Oa,e.backTopProps=Br,e.badgeProps=ct,e.barrageProps=Dr,e.buttonProps=At,e.calendarProps=cl,e.cardProps=gl,e.cascaderProps=Vl,e.cellGroupProps=Sl,e.cellProps=$a,e.checkboxGroupProps=Wn,e.checkboxProps=nr,e.circleProps=Ol,e.closeDialog=()=>{_i&&_i.toggle(!1)},e.closeNotify=Tc,e.closeToast=e=>{var t;dn.length&&(e?(dn.forEach((e=>{e.close()})),dn=[]):un?null==(t=dn.shift())||t.close():dn[0].close())},e.colProps=Hl,e.collapseItemProps=_l,e.collapseProps=Xl,e.configProviderProps=ft,e.contactCardProps=ai,e.contactEditProps=ci,e.contactListProps=mi,e.countDownProps=bi,e.couponCellProps=Pi,e.couponListProps=Fi,e.datePickerProps=Wi,e.default=Pv,e.dialogProps=Gi,e.dividerProps=ns,e.dropdownItemProps=vs,e.dropdownMenuProps=ss,e.emptyProps=zi,e.fieldProps=Ja,e.floatingBubbleProps=hs,e.floatingPanelProps=ws,e.formProps=Ha,e.gridItemProps=As,e.gridProps=Ss,e.highlightProps=Es,e.iconProps=wt,e.imagePreviewProps=Us,e.imageProps=vl,e.indexAnchorProps=ac,e.indexBarProps=Js,e.install=Bv,e.listProps=cc,e.loadingProps=Tt,e.navBarProps=vc,e.noticeBarProps=gc,e.notifyProps=Vc,e.numberKeyboardProps=Lc,e.overlayProps=_t,e.paginationProps=jc,e.passwordInputProps=Xc,e.pickerGroupProps=ya,e.pickerProps=Va,e.popoverProps=Ld,e.popupProps=Qt,e.progressProps=Rd,e.pullRefreshProps=Xd,e.radioGroupProps=Mn,e.radioProps=Jn,e.rateProps=Kd,e.resetDialogDefaultOptions=()=>{Qi=a({},Ji)},e.resetNotifyDefaultOptions=()=>{Sc={type:"danger",color:void 0,message:"",onClose:void 0,onClick:void 0,onOpened:void 0,duration:3e3,position:void 0,className:"",lockScroll:!1,background:void 0}},e.resetToastDefaultOptions=e=>{"string"==typeof e?vn.delete(e):(pn=a({},cn),vn.clear())},e.rollingTextProps=nu,e.rowProps=$l,e.searchProps=du,e.setDialogDefaultOptions=e=>{a(Qi,e)},e.setNotifyDefaultOptions=e=>a(Sc,e),e.setToastDefaultOptions=function(e,t){"string"==typeof e?vn.set(e,t):a(pn,e)},e.shareSheetProps=gu,e.showConfirmDialog=e=>es(a({showCancelButton:!0},e)),e.showDialog=es,e.showFailToast=wn,e.showImagePreview=Gs,e.showLoadingToast=bn,e.showNotify=function(e){var o;if(n)return kc||({instance:kc}=sn({setup(){const{state:e,toggle:o}=ln();return()=>t.createVNode(Nc,t.mergeProps(e,{"onUpdate:show":o}),null)}})),e=a({},Sc,r(o=e)?o:{message:o}),kc.open(e),clearTimeout(Cc),e.duration>0&&(Cc=setTimeout(Tc,e.duration)),kc},e.showSuccessToast=yn,e.showToast=hn,e.sidebarItemProps=Su,e.sidebarProps=Vu,e.skeletonAvatarProps=Ru,e.skeletonImageProps=tp,e.skeletonParagraphProps=Uu,e.skeletonProps=_u,e.skeletonTitleProps=Eu,e.sliderProps=rp,e.spaceProps=cp,e.stepperProps=Np,e.stepsProps=mp,e.stickyProps=Wo,e.submitBarProps=Pp,e.swipeCellProps=Ip,e.swipeProps=qo,e.switchProps=Cn,e.tabProps=va,e.tabbarItemProps=jp,e.tabbarProps=$p,e.tabsProps=ta,e.tagProps=Gn,e.textEllipsisProps=Xp,e.timePickerProps=_p,e.toastProps=nn,e.treeSelectProps=tv,e.uploaderProps=uv,e.useCurrentLang=()=>Se,e.version=Tv,e.watermarkProps=fv,Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})})); \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..2bc0d65 --- /dev/null +++ b/app/src/main/res/values/colors.xml @@ -0,0 +1,4 @@ + + + #1A1C1E + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..7ea4529 --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + DuckTV + \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml new file mode 100644 index 0000000..57f1f19 --- /dev/null +++ b/app/src/main/res/values/themes.xml @@ -0,0 +1,5 @@ + + +