commit 1ed31b9292b6dea2a1572987ec4711d12312b107 Author: CN-JS-HuiBai Date: Fri Apr 17 09:49:16 2026 +0800 first commit diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..3527629 --- /dev/null +++ b/.env.example @@ -0,0 +1,17 @@ +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_USER=root +DB_PASS=change_me +DB_NAME=xboard + +REDIS_HOST=127.0.0.1 +REDIS_PORT=6379 +REDIS_PASS= +REDIS_DB=0 + +JWT_SECRET=change_me_to_a_long_random_secret +APP_PORT=8080 +APP_URL=http://127.0.0.1:8080 + +# Plugin source reference directory, only needed during development. +PLUGIN_ROOT=reference/LDNET-GA-Theme/plugin diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml new file mode 100644 index 0000000..00babaf --- /dev/null +++ b/.gitea/workflows/build.yml @@ -0,0 +1,67 @@ +name: build + +on: + push: + branches: + - main + - master + pull_request: + +jobs: + build: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + include: + - goos: linux + goarch: amd64 + binary_name: api + - goos: linux + goarch: arm64 + binary_name: api + - goos: windows + goarch: amd64 + binary_name: api.exe + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version-file: go.mod + + - name: Verify build + run: | + go build ./cmd/api + go build ./... + + - name: Prepare directories + run: | + mkdir -p dist/singbox-gopanel-${{ matrix.goos }}-${{ matrix.goarch }}/frontend + mkdir -p dist/singbox-gopanel-${{ matrix.goos }}-${{ matrix.goarch }}/docs + + - name: Build binary + env: + CGO_ENABLED: 0 + GOOS: ${{ matrix.goos }} + GOARCH: ${{ matrix.goarch }} + run: | + go build -trimpath -ldflags="-s -w" -o dist/singbox-gopanel-${{ matrix.goos }}-${{ matrix.goarch }}/${{ matrix.binary_name }} ./cmd/api + + - name: Copy runtime files + run: | + cp README.md dist/singbox-gopanel-${{ matrix.goos }}-${{ matrix.goarch }}/README.md + cp .env.example dist/singbox-gopanel-${{ matrix.goos }}-${{ matrix.goarch }}/.env.example + cp -r frontend/. dist/singbox-gopanel-${{ matrix.goos }}-${{ matrix.goarch }}/frontend/ + cp -r docs/. dist/singbox-gopanel-${{ matrix.goos }}-${{ matrix.goarch }}/docs/ + cp scripts/install.sh dist/singbox-gopanel-${{ matrix.goos }}-${{ matrix.goarch }}/install.sh + chmod +x dist/singbox-gopanel-${{ matrix.goos }}-${{ matrix.goarch }}/install.sh + + - name: Upload artifact + uses: actions/upload-artifact@v3 + with: + name: singbox-gopanel-${{ matrix.goos }}-${{ matrix.goarch }} + path: dist/singbox-gopanel-${{ matrix.goos }}-${{ matrix.goarch }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..79ed2a0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +AIAgentKey.pem +.env +reference/ +development/ +dist/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..cc8ccf9 --- /dev/null +++ b/README.md @@ -0,0 +1,177 @@ +# SingBox-Gopanel + +`SingBox-Gopanel` 是对 `reference/Xboard` 与 `reference/LDNET-GA-Theme` 的 Go 重构版本,当前已经完成一轮后端复刻、Nebula 用户前台接入,以及 plugin 能力向统一 Go 后端的整合。 + +## 当前状态 + +- 后端主入口为 `cmd/api/main_entry.go` +- 用户前台已接入 `reference/LDNET-GA-Theme/theme/Nebula` 主题资源 +- 后台已改为 Go 直接提供的统一布局,并将 plugin 页面合并到左侧栏 +- Nebula 前端依赖的核心接口已补齐: + - 登录、注册、找回密码、邮箱验证码 + - 用户信息、订阅、统计、节点、知识库、工单 + - 活跃会话查询与撤销 + - 实名认证、在线设备、IPv6 订阅 plugin API + +## 目录说明 + +- `cmd/api`: API 启动入口 +- `internal/handler`: Gin 处理器 +- `internal/service`: 业务服务,包括插件、会话、配置等 +- `internal/model`: GORM 数据模型 +- `frontend/theme/Nebula`: 前台主题静态资源 +- `frontend/admin`: 后台统一布局的静态资源 +- `frontend/templates`: 用户前台与后台页面模板 +- `reference`: 原始参考项目与主题/plugin 实现 +- `docs/API.md`: API 文档 + +## 运行方式 + +1. 配置 `.env` +2. 启动: + +```powershell +go run ./cmd/api +``` + +或: + +```powershell +go build ./cmd/api +.\api.exe +``` + +默认读取 `.env` 中的 MySQL、Valkey/Redis 与应用配置。 + +## 安装脚本 + +仓库已提供两个 Linux 脚本: + +- `scripts/build_install.sh`:在仓库当前目录下载 Go 工具链并编译 `api` +- `scripts/install.sh`:针对自动化构建产物目录执行安装 + +从源码构建: + +```bash +bash scripts/build_install.sh +``` + +从自动化构建产物安装: + +```bash +cd package +sudo bash ./install.sh --install-dir /opt/singbox-gopanel --run-user root +``` + +脚本会执行这些步骤: + +- 在 `/opt` 下创建安装目录及其 `frontend`、`docs` 子目录 +- 复制 `api`、`frontend`、`docs`、`README.md` 与 `.env.example` +- 在安装目录生成 `.env` +- 安装并重启 systemd 服务 + +默认 service 名称是 `singbox-gopanel`,可通过 `--service-name` 修改。 + +## Gitea Actions + +仓库已新增 Gitea workflow: + +- `.gitea/workflows/build.yml` + +当前 workflow 会: + +- 执行 `go build ./cmd/api` +- 执行 `go build ./...` +- 构建 Linux `amd64` / `arm64` 二进制 +- 按平台输出目录化制品,例如 `singbox-gopanel-linux-amd64/` +- 将二进制、`frontend`、`docs`、`.env.example`、`install.sh` 直接作为 artifact 上传 +- 不再额外生成 `zip` / `tar.gz` + +## 当前远端开发环境 + +以下信息基于 2026-04-17 对远端环境的实际核对: + +- 开发服务器:`10.32.100.3` +- SSH:使用仓库内 `AIAgentKey.pem` +- 数据库:`xboard` +- 数据库密码:`11223456` +- 当前 `v2_settings.secure_path`:`helloadmin` +- 当前 `v2_settings.app_name`:`LDNET-GA` +- 当前 `real_name_verification`、`user_online_devices`、`user_add_ipv6_subscription` 三个 plugin 均为启用状态 + +## 前台与后台页面 + +- 用户前台:`/` +- 用户前台备用入口:`/dashboard` +- 后台入口:`/{secure_path}` + - 远端当前值是 `/helloadmin` + +后台左侧栏已整合: + +- 总览 +- 实名认证 +- 在线设备 +- IPv6 订阅 +- Plugin 集成状态 + +## Plugin 集成结论 + +### 已完成 + +- `RealNameVerification` + - 用户查询状态 + - 用户提交实名信息 + - 管理端记录查询、通过、驳回、重置、批量同步、批量通过 + - `auto_approve`、`allow_resubmit_after_reject`、`enforce_real_name`、`verified_expiration_date` 已接入 + +- `UserOnlineDevices` + - 用户在线 IP 查询 + - 管理端用户在线设备监控 + - 与新的活跃会话能力联动输出 `session_overview` + +- `UserAddIPv6Subscription` + - 用户资格检查 + - 手动启用 + - IPv6 子账号密码同步 + - 运行时影子账号自动同步 + +### 仍需后续完整订单流配合 + +- `UserAddIPv6Subscription` 的“订单完成后立即自动创建 IPv6 子账号”这一点,仍然依赖后续订单生命周期重构完全落地后再补最终钩子。 + +## 已完成的主要改动 + +- 新增 Nebula 前台页面模板与静态资源接入 +- 新增统一后台页面与左侧栏 plugin 入口 +- 补充知识库、工单、活跃会话相关接口 +- 补充 token 快速登录、邮箱验证码、找回密码接口 +- 为 JWT 登录补充基于缓存的会话跟踪与撤销能力 +- 调整实名插件逻辑,贴近参考配置行为 +- 输出 plugin 集成状态接口,便于后台与文档统一核对 + +## 验证 + +已完成: + +- `go build ./cmd/api` +- `go build ./...` + +说明: + +- 本地编译已通过 +- 本地实际连远端 DB/Valkey 的完整页面联调仍建议在目标服务器或等价网络环境下继续验证 +## 2026-04 parity addendum + +This pass added another backend parity sweep against `reference/Xboard`. + +Added in this round: + +- passport quick-login URL, mail-link compatibility, and invite PV tracking +- user notice, invite, traffic-log, order, coupon, Telegram bot info, Stripe public key, and quick-login compatibility endpoints +- admin config save support backed by `v2_settings` +- missing GORM models for `v2_notice`, `v2_invite_code`, `v2_payment`, `v2_commission_log`, `v2_stat_user`, and `v2_coupon` + +Validation after the changes: + +- `go build ./cmd/api` +- `go build ./...` diff --git a/api.exe b/api.exe new file mode 100644 index 0000000..6c55a64 Binary files /dev/null and b/api.exe differ diff --git a/cmd/api/main.go b/cmd/api/main.go new file mode 100644 index 0000000..e173252 --- /dev/null +++ b/cmd/api/main.go @@ -0,0 +1,92 @@ +//go:build ignore + +package main + +import ( + "log" + "net/http" + "strings" + "xboard-go/internal/config" + "xboard-go/internal/database" + "xboard-go/internal/handler" + "xboard-go/internal/middleware" + + "github.com/gin-gonic/gin" +) + +func main() { + // Initialize configuration + config.LoadConfig() + + // Initialize database + database.InitDB() + + // Initialize Gin router + r := gin.Default() + + // Global Middleware + r.Use(gin.Recovery()) + + // API Groups + v1 := r.Group("/api/v1") + { + // Passport (Auth) + passport := v1.Group("/passport") + { + passport.POST("/login", handler.Login) + passport.POST("/register", handler.Register) + } + + // Subscription (Client) Routes + v1.GET("/s/:token", handler.Subscribe) + + // Authenticated Routes + auth := v1.Group("") + auth.Use(middleware.Auth()) + { + // User module + user := auth.Group("/user") + { + user.GET("/info", handler.UserInfo) + } + } + + // Admin Routes + admin := auth.Group("/admin") + admin.Use(middleware.AdminAuth()) + { + admin.GET("/stats", func(c *gin.Context) { + c.JSON(200, gin.H{"message": "Admin Stats"}) + }) + } + + // Admin Portal (Secure Path Entry) + v1.GET("/:path", handler.AdminPortal) + v1.GET("/:path/realname", handler.RealNameIndex) + + // Plugin API (Secure Path) + realname := v1.Group("/api/v1/:path/realname") + realname.Use(middleware.AdminAuth()) // Ensure only admins can access plugin APIs + { + realname.GET("/records", handler.RealNameRecords) + realname.POST("/review/:id", handler.RealNameReview) + } + + // Node (UniProxy) Routes + server := v1.Group("/server") + server.Use(middleware.NodeAuth()) + { + uniProxy := server.Group("/uniProxy") + { + uniProxy.GET("/user", handler.NodeUser) + uniProxy.POST("/push", handler.NodePush) + } + } + } + + // Start server + log.Printf("Server starting on port %s", config.AppConfig.AppPort) + if err := r.Run(":" + config.AppConfig.AppPort); err != nil { + log.Fatalf("Failed to start server: %v", err) + } +} diff --git a/cmd/api/main_entry.go b/cmd/api/main_entry.go new file mode 100644 index 0000000..0c1e7b0 --- /dev/null +++ b/cmd/api/main_entry.go @@ -0,0 +1,245 @@ +package main + +import ( + "log" + "os" + "path/filepath" + "xboard-go/internal/config" + "xboard-go/internal/database" + "xboard-go/internal/handler" + "xboard-go/internal/middleware" + "xboard-go/internal/service" + + "github.com/gin-gonic/gin" +) + +func main() { + config.LoadConfig() + database.InitDB() + database.InitCache() + + router := gin.New() + router.Use(gin.Logger(), gin.Recovery()) + + api := router.Group("/api") + registerV1(api.Group("/v1")) + registerV2(api.Group("/v2")) + registerWebRoutes(router) + + log.Printf("server starting on port %s", config.AppConfig.AppPort) + if err := router.Run(":" + config.AppConfig.AppPort); err != nil { + log.Fatalf("failed to start server: %v", err) + } +} + +func registerV1(v1 *gin.RouterGroup) { + registerPassportRoutes(v1) + registerGuestRoutes(v1) + registerUserRoutes(v1) + registerClientRoutes(v1) + registerServerRoutesV1(v1) + registerPluginRoutesV1(v1) +} + +func registerV2(v2 *gin.RouterGroup) { + registerPassportRoutes(v2) + registerUserRoutesV2(v2) + registerClientRoutesV2(v2) + registerServerRoutesV2(v2) + registerAdminRoutesV2(v2) +} + +func registerPassportRoutes(group *gin.RouterGroup) { + passport := group.Group("/passport") + passport.POST("/auth/register", handler.Register) + passport.POST("/auth/login", handler.Login) + passport.GET("/auth/token2Login", handler.Token2Login) + passport.POST("/auth/forget", handler.ForgetPassword) + passport.POST("/auth/getQuickLoginUrl", handler.PassportGetQuickLoginURL) + passport.POST("/auth/loginWithMailLink", handler.PassportLoginWithMailLink) + passport.POST("/comm/sendEmailVerify", handler.SendEmailVerify) + passport.POST("/comm/pv", handler.PassportPV) +} + +func registerGuestRoutes(v1 *gin.RouterGroup) { + guest := v1.Group("/guest") + guest.GET("/plan/fetch", handler.GuestPlanFetch) + guest.POST("/telegram/webhook", handler.NotImplemented("guest.telegram.webhook")) + guest.Any("/payment/notify/:method/:uuid", handler.NotImplemented("guest.payment.notify")) + guest.GET("/comm/config", handler.GuestConfig) +} + +func registerUserRoutes(v1 *gin.RouterGroup) { + user := v1.Group("/user") + user.Use(middleware.Auth()) + user.GET("/resetSecurity", handler.UserResetSecurity) + user.GET("/info", handler.UserInfo) + user.POST("/changePassword", handler.UserChangePassword) + user.POST("/update", handler.UserUpdate) + user.GET("/getSubscribe", handler.UserGetSubscribe) + user.GET("/getStat", handler.UserGetStat) + user.GET("/checkLogin", handler.UserCheckLogin) + user.GET("/plan/fetch", handler.GuestPlanFetch) + user.GET("/server/fetch", handler.UserServerFetch) + user.GET("/comm/config", handler.UserCommConfig) + + user.POST("/transfer", handler.UserTransfer) + user.POST("/getQuickLoginUrl", handler.UserGetQuickLoginURL) + user.GET("/notice/fetch", handler.UserNoticeFetch) + user.POST("/coupon/check", handler.UserCouponCheck) + user.POST("/gift-card/check", handler.UserGiftCardCheck) + user.POST("/gift-card/redeem", handler.UserGiftCardRedeem) + user.GET("/gift-card/history", handler.UserGiftCardHistory) + user.GET("/gift-card/detail", handler.UserGiftCardDetail) + user.GET("/gift-card/types", handler.UserGiftCardTypes) + user.GET("/telegram/getBotInfo", handler.UserTelegramBotInfo) + user.POST("/comm/getStripePublicKey", handler.UserGetStripePublicKey) + user.GET("/stat/getTrafficLog", handler.UserTrafficLog) + user.POST("/order/save", handler.UserOrderSave) + user.POST("/order/checkout", handler.UserOrderCheckout) + user.GET("/order/check", handler.UserOrderCheck) + user.GET("/order/detail", handler.UserOrderDetail) + user.GET("/order/fetch", handler.UserOrderFetch) + user.GET("/order/getPaymentMethod", handler.UserOrderGetPaymentMethod) + user.POST("/order/cancel", handler.UserOrderCancel) + user.GET("/invite/save", handler.UserInviteSave) + user.GET("/invite/fetch", handler.UserInviteFetch) + user.GET("/invite/details", handler.UserInviteDetails) + user.GET("/getActiveSession", handler.UserGetActiveSession) + user.POST("/removeActiveSession", handler.UserRemoveActiveSession) + user.GET("/knowledge/fetch", handler.UserKnowledgeFetch) + user.GET("/knowledge/getCategory", handler.UserKnowledgeCategories) + user.POST("/ticket/reply", handler.UserTicketReply) + user.POST("/ticket/close", handler.UserTicketClose) + user.POST("/ticket/save", handler.UserTicketSave) + user.GET("/ticket/fetch", handler.UserTicketFetch) + user.POST("/ticket/withdraw", handler.UserTicketWithdraw) +} + +func registerUserRoutesV2(v2 *gin.RouterGroup) { + user := v2.Group("/user") + user.Use(middleware.Auth()) + user.GET("/resetSecurity", handler.UserResetSecurity) + user.GET("/info", handler.UserInfo) +} + +func registerClientRoutes(v1 *gin.RouterGroup) { + client := v1.Group("/client") + client.Use(middleware.ClientAuth()) + client.GET("/subscribe", handler.ClientSubscribe) + client.GET("/app/getConfig", handler.ClientAppConfigV1) + client.GET("/app/getVersion", handler.ClientAppVersion) +} + +func registerClientRoutesV2(v2 *gin.RouterGroup) { + client := v2.Group("/client") + client.Use(middleware.ClientAuth()) + client.GET("/app/getConfig", handler.ClientAppConfigV2) + client.GET("/app/getVersion", handler.ClientAppVersion) +} + +func registerServerRoutesV1(v1 *gin.RouterGroup) { + server := v1.Group("/server") + + uniProxy := server.Group("/UniProxy") + uniProxy.Use(middleware.NodeAuth()) + uniProxy.GET("/config", handler.NodeConfig) + uniProxy.GET("/user", handler.NodeUser) + uniProxy.POST("/push", handler.NodePush) + uniProxy.POST("/alive", handler.NodeAlive) + uniProxy.GET("/alivelist", handler.NodeAliveList) + uniProxy.POST("/status", handler.NodeStatus) + + shadowsocks := server.Group("/ShadowsocksTidalab") + shadowsocks.Use(middleware.NodeAuth()) + shadowsocks.GET("/user", handler.NodeShadowsocksTidalabUser) + shadowsocks.POST("/submit", handler.NodeTidalabSubmit) + + trojan := server.Group("/TrojanTidalab") + trojan.Use(middleware.NodeAuth()) + trojan.GET("/config", handler.NodeTrojanTidalabConfig) + trojan.GET("/user", handler.NodeTrojanTidalabUser) + trojan.POST("/submit", handler.NodeTidalabSubmit) +} + +func registerServerRoutesV2(v2 *gin.RouterGroup) { + server := v2.Group("/server") + server.Use(middleware.NodeAuth()) + server.POST("/handshake", handler.NodeHandshake) + server.POST("/report", handler.NodeReport) + server.GET("/config", handler.NodeConfig) + server.GET("/user", handler.NodeUser) + server.POST("/push", handler.NodePush) + server.POST("/alive", handler.NodeAlive) + server.GET("/alivelist", handler.NodeAliveList) + server.POST("/status", handler.NodeStatus) +} + +func registerPluginRoutesV1(v1 *gin.RouterGroup) { + securePath := service.GetAdminSecurePath() + + adminPlugins := v1.Group("/" + securePath) + adminPlugins.Use(middleware.Auth(), middleware.AdminAuth()) + adminPlugins.GET("/realname/records", handler.PluginRealNameRecords) + adminPlugins.POST("/realname/clear-cache", handler.PluginRealNameClearCache) + adminPlugins.POST("/realname/review/:userId", handler.PluginRealNameReview) + adminPlugins.POST("/realname/reset/:userId", handler.PluginRealNameReset) + adminPlugins.POST("/realname/sync-all", handler.PluginRealNameSyncAll) + adminPlugins.POST("/realname/approve-all", handler.PluginRealNameApproveAll) + adminPlugins.GET("/user-online-devices/users", handler.PluginUserOnlineDevicesUsers) + + userPlugins := v1.Group("/user") + userPlugins.Use(middleware.Auth()) + userPlugins.GET("/real-name-verification/status", handler.PluginRealNameStatus) + userPlugins.POST("/real-name-verification/submit", handler.PluginRealNameSubmit) + userPlugins.GET("/user-online-devices/get-ip", handler.PluginUserOnlineDevicesGetIP) + userPlugins.POST("/user-add-ipv6-subscription/enable", handler.PluginUserAddIPv6Enable) + userPlugins.POST("/user-add-ipv6-subscription/sync-password", handler.PluginUserAddIPv6SyncPassword) + userPlugins.GET("/user-add-ipv6-subscription/check", handler.PluginUserAddIPv6Check) +} + +func registerAdminRoutesV2(v2 *gin.RouterGroup) { + admin := v2.Group("/" + service.GetAdminSecurePath()) + admin.Use(middleware.Auth(), middleware.AdminAuth()) + + admin.GET("/config/fetch", handler.AdminConfigFetch) + admin.POST("/config/save", handler.AdminConfigSave) + admin.GET("/server/group/fetch", handler.AdminServerGroupsFetch) + admin.POST("/server/group/save", handler.AdminServerGroupSave) + admin.POST("/server/group/drop", handler.AdminServerGroupDrop) + admin.GET("/server/route/fetch", handler.AdminServerRoutesFetch) + admin.POST("/server/route/save", handler.AdminServerRouteSave) + admin.POST("/server/route/drop", handler.AdminServerRouteDrop) + admin.GET("/server/manage/getNodes", handler.AdminServerManageGetNodes) + admin.POST("/server/manage/sort", handler.AdminServerManageSort) + admin.POST("/server/manage/update", handler.AdminServerManageUpdate) + admin.POST("/server/manage/save", handler.AdminServerManageSave) + admin.POST("/server/manage/drop", handler.AdminServerManageDrop) + admin.POST("/server/manage/copy", handler.AdminServerManageCopy) + admin.POST("/server/manage/batchDelete", handler.AdminServerManageBatchDelete) + admin.POST("/server/manage/resetTraffic", handler.AdminServerManageResetTraffic) + admin.POST("/server/manage/batchResetTraffic", handler.AdminServerManageBatchResetTraffic) + admin.GET("/system/getSystemStatus", handler.AdminSystemStatus) + admin.GET("/plugin/getPlugins", handler.AdminPluginsList) + admin.GET("/plugin/types", handler.AdminPluginTypes) + admin.GET("/plugin/integration-status", handler.AdminPluginIntegrationStatus) +} + +func registerWebRoutes(router *gin.Engine) { + themeRoot := filepath.Join(".", "frontend", "theme") + adminRoot := filepath.Join(".", "frontend", "admin") + + if _, err := os.Stat(themeRoot); err == nil { + router.Static("/theme", themeRoot) + } + if _, err := os.Stat(adminRoot); err == nil { + router.Static("/admin-assets", adminRoot) + } + + securePath := "/" + service.GetAdminSecurePath() + router.GET("/", handler.UserThemePage) + router.GET("/dashboard", handler.UserThemePage) + router.GET(securePath, handler.AdminAppPage) + router.GET(securePath+"/", handler.AdminAppPage) + router.GET(securePath+"/plugins/:plugin", handler.AdminAppPage) +} diff --git a/docs/API.md b/docs/API.md new file mode 100644 index 0000000..85f7710 --- /dev/null +++ b/docs/API.md @@ -0,0 +1,330 @@ +# API 文档 + +本文档覆盖当前 Go 重构版本中已经接入并可用于前台/后台重构联调的主要接口。 + +## 认证与通用约定 + +- 基础前缀:`/api` +- 用户接口:`/api/v1/user/*` +- 后台配置接口:`/api/v2/{secure_path}/*` +- plugin 后台接口:`/api/v1/{secure_path}/*` +- 鉴权方式:`Authorization: Bearer ` +- 标准成功响应: + +```json +{ + "data": {} +} +``` + +## Supplementary Parity Endpoints + +The current Go backend also exposes these Xboard-compatible endpoints: + +- `POST /api/v1/passport/auth/getQuickLoginUrl` +- `POST /api/v1/passport/auth/loginWithMailLink` +- `POST /api/v1/passport/comm/pv` +- `GET /api/v1/user/comm/config` +- `POST /api/v1/user/transfer` +- `POST /api/v1/user/getQuickLoginUrl` +- `GET /api/v1/user/notice/fetch` +- `GET /api/v1/user/stat/getTrafficLog` +- `GET /api/v1/user/invite/save` +- `GET /api/v1/user/invite/fetch` +- `GET /api/v1/user/invite/details` +- `POST /api/v1/user/order/save` +- `POST /api/v1/user/order/checkout` +- `GET /api/v1/user/order/check` +- `GET /api/v1/user/order/detail` +- `GET /api/v1/user/order/fetch` +- `GET /api/v1/user/order/getPaymentMethod` +- `POST /api/v1/user/order/cancel` +- `POST /api/v1/user/coupon/check` +- `GET /api/v1/user/telegram/getBotInfo` +- `POST /api/v1/user/comm/getStripePublicKey` +- `POST /api/v1/user/gift-card/check` +- `POST /api/v1/user/gift-card/redeem` +- `GET /api/v1/user/gift-card/history` +- `GET /api/v1/user/gift-card/detail` +- `GET /api/v1/user/gift-card/types` +- `POST /api/v2/{secure_path}/config/save` + +Notes: + +- order APIs now cover create, query, cancel, payment-method lookup, and zero-amount completion +- invite APIs now read/write the existing `v2_*` tables directly +- gift card routes are no longer `501`, but full reward-application business logic still needs a later dedicated migration + +- 标准失败响应: + +```json +{ + "message": "error message" +} +``` + +## Passport + +### POST `/api/v1/passport/auth/login` + +登录。 + +请求: + +```json +{ + "email": "admin@example.com", + "password": "password123" +} +``` + +响应: + +```json +{ + "data": { + "token": "", + "auth_data": "", + "is_admin": true + } +} +``` + +### POST `/api/v1/passport/auth/register` + +注册并直接返回登录态。 + +### GET `/api/v1/passport/auth/token2Login?verify=` + +使用一次性 `verify` 令牌换取登录态。 + +### POST `/api/v1/passport/comm/sendEmailVerify` + +生成邮箱验证码。 + +请求: + +```json +{ + "email": "user@example.com" +} +``` + +响应中会返回 `debug_code`,便于当前开发阶段联调。 + +### POST `/api/v1/passport/auth/forget` + +使用邮箱验证码重置密码。 + +请求: + +```json +{ + "email": "user@example.com", + "email_code": "123456", + "password": "new-password" +} +``` + +## 用户前台接口 + +### GET `/api/v1/user/info` + +返回当前用户信息。 + +### GET `/api/v1/user/getSubscribe` + +返回订阅信息与订阅链接。 + +### GET `/api/v1/user/getStat` + +返回 `[待支付订单数, 打开工单数, 邀请人数]`。 + +### GET `/api/v1/user/server/fetch` + +返回当前用户可用节点列表。 + +### GET `/api/v1/user/checkLogin` + +返回当前登录状态与管理员标记。 + +### GET `/api/v1/user/resetSecurity` + +重置订阅令牌与 UUID。 + +### POST `/api/v1/user/changePassword` + +修改密码。 + +### POST `/api/v1/user/update` + +更新 `remind_expire` / `remind_traffic`。 + +## 知识库 + +### GET `/api/v1/user/knowledge/fetch` + +返回知识库文章列表。 + +查询参数: + +- `language`: 可选,默认 `zh-CN` + +### GET `/api/v1/user/knowledge/getCategory` + +返回知识库分类列表。 + +## 工单 + +### GET `/api/v1/user/ticket/fetch` + +不带 `id` 时返回当前用户工单列表。 + +### GET `/api/v1/user/ticket/fetch?id=` + +返回工单详情与消息列表。 + +### POST `/api/v1/user/ticket/save` + +创建工单。 + +请求: + +```json +{ + "subject": "节点异常", + "level": 1, + "message": "请帮我检查节点状态" +} +``` + +### POST `/api/v1/user/ticket/reply` + +回复工单。 + +### POST `/api/v1/user/ticket/close` + +关闭工单。 + +### POST `/api/v1/user/ticket/withdraw` + +撤回工单,当前实现为将工单状态置为关闭。 + +## 活跃会话 + +### GET `/api/v1/user/getActiveSession` + +返回当前用户活跃 JWT 会话列表。 + +### POST `/api/v1/user/removeActiveSession` + +撤销指定会话。 + +请求: + +```json +{ + "session_id": "uuid" +} +``` + +## Plugin: Real Name Verification + +### GET `/api/v1/user/real-name-verification/status` + +返回实名状态、是否可提交、实名信息掩码、审核结果等。 + +### POST `/api/v1/user/real-name-verification/submit` + +提交实名信息。 + +请求: + +```json +{ + "real_name": "张三", + "identity_no": "110101199001011234" +} +``` + +管理端: + +- `GET /api/v1/{secure_path}/realname/records` +- `POST /api/v1/{secure_path}/realname/review/{userId}` +- `POST /api/v1/{secure_path}/realname/reset/{userId}` +- `POST /api/v1/{secure_path}/realname/sync-all` +- `POST /api/v1/{secure_path}/realname/approve-all` +- `POST /api/v1/{secure_path}/realname/clear-cache` + +## Plugin: User Online Devices + +### GET `/api/v1/user/user-online-devices/get-ip` + +返回: + +- 在线 IP 列表 +- `session_overview` + - 在线设备数 + - 设备限制 + - 活跃会话列表 + +管理端: + +- `GET /api/v1/{secure_path}/user-online-devices/users` + +## Plugin: User Add IPv6 Subscription + +### GET `/api/v1/user/user-add-ipv6-subscription/check` + +检查当前用户是否允许启用 IPv6 子账号。 + +### POST `/api/v1/user/user-add-ipv6-subscription/enable` + +启用或同步 IPv6 影子账号。 + +### POST `/api/v1/user/user-add-ipv6-subscription/sync-password` + +将主账号密码同步到 IPv6 子账号。 + +## 后台统一接口 + +### GET `/api/v2/{secure_path}/config/fetch` + +返回应用名称、站点 URL、后台路径、节点拉取/推送周期。 + +### GET `/api/v2/{secure_path}/system/getSystemStatus` + +返回系统时间与站点基础信息。 + +### GET `/api/v2/{secure_path}/plugin/getPlugins` + +返回 `v2_plugins` 列表。 + +### GET `/api/v2/{secure_path}/plugin/types` + +返回插件类型。 + +### GET `/api/v2/{secure_path}/plugin/integration-status` + +返回当前 plugin 在 Go 后端中的整合完成度说明。 + +示例字段: + +```json +{ + "data": { + "real_name_verification": { + "enabled": true, + "status": "complete" + }, + "user_online_devices": { + "enabled": true, + "status": "complete" + }, + "user_add_ipv6_subscription": { + "enabled": true, + "status": "integrated_with_runtime_sync" + } + } +} +``` diff --git a/frontend/admin/app.css b/frontend/admin/app.css new file mode 100644 index 0000000..e50ebe9 --- /dev/null +++ b/frontend/admin/app.css @@ -0,0 +1,677 @@ +:root { + --bg: #eff3f9; + --bg-accent: #f8fbff; + --surface: #ffffff; + --surface-soft: #f5f8fc; + --surface-strong: #ecf2fb; + --border: #d9e1ef; + --border-strong: #c8d4e7; + --text: #172033; + --muted: #61708b; + --muted-soft: #8c9ab2; + --brand: #1677ff; + --brand-strong: #0f5fd6; + --brand-soft: #eaf2ff; + --success: #168a54; + --warn: #d97706; + --danger: #c0392b; + --sidebar: #0f1728; + --sidebar-panel: #141f35; + --sidebar-muted: #8ea0c3; + --sidebar-active: #ffffff; + --sidebar-border: rgba(255, 255, 255, 0.08); + --shadow: 0 20px 48px rgba(15, 23, 42, 0.08); + --shadow-soft: 0 12px 28px rgba(15, 23, 42, 0.05); + font-family: "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif; +} + +* { + box-sizing: border-box; +} + +html, +body { + min-height: 100%; +} + +body { + margin: 0; + color: var(--text); + background: + radial-gradient(circle at top left, rgba(22, 119, 255, 0.12), transparent 28%), + radial-gradient(circle at right top, rgba(15, 95, 214, 0.08), transparent 24%), + linear-gradient(180deg, var(--bg-accent) 0%, var(--bg) 100%); +} + +a { + color: inherit; + text-decoration: none; +} + +button, +input, +select, +textarea { + font: inherit; +} + +.admin-shell { + min-height: 100vh; + display: grid; + grid-template-columns: 272px minmax(0, 1fr); +} + +.admin-sidebar { + position: sticky; + top: 0; + height: 100vh; + overflow: auto; + padding: 26px 18px 22px; + color: #fff; + background: + linear-gradient(180deg, rgba(255, 255, 255, 0.04), rgba(255, 255, 255, 0)), + linear-gradient(180deg, #121c2f 0%, #0d1524 100%); + border-right: 1px solid rgba(255, 255, 255, 0.03); +} + +.sidebar-brand { + padding: 18px 16px 20px; + border-radius: 20px; + border: 1px solid var(--sidebar-border); + background: linear-gradient(180deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.02)); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04); +} + +.sidebar-brand-mark { + display: inline-flex; + align-items: center; + margin-bottom: 12px; + padding: 6px 10px; + border-radius: 999px; + background: rgba(22, 119, 255, 0.16); + color: #b9d5ff; + font-size: 11px; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.sidebar-brand strong { + display: block; + font-size: 24px; + line-height: 1.15; + color: var(--sidebar-active); +} + +.sidebar-brand span:last-child { + display: block; + margin-top: 10px; + color: var(--sidebar-muted); + font-size: 12px; + line-height: 1.5; +} + +.sidebar-nav-label, +.sidebar-meta-label { + display: block; + color: var(--sidebar-muted); + font-size: 11px; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.sidebar-nav-label { + margin: 22px 12px 10px; +} + +.sidebar-nav { + display: grid; + gap: 8px; +} + +.sidebar-item { + position: relative; + display: block; + border: 1px solid transparent; + border-radius: 16px; + padding: 14px 14px 14px 16px; + transition: background-color 0.2s ease, border-color 0.2s ease, transform 0.2s ease; +} + +.sidebar-item:hover { + transform: translateX(2px); + background: rgba(255, 255, 255, 0.05); + border-color: rgba(255, 255, 255, 0.06); +} + +.sidebar-item.active { + background: linear-gradient(180deg, rgba(22, 119, 255, 0.22), rgba(22, 119, 255, 0.12)); + border-color: rgba(95, 162, 255, 0.28); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04); +} + +.sidebar-item.active::before { + content: ""; + position: absolute; + left: -6px; + top: 14px; + bottom: 14px; + width: 3px; + border-radius: 999px; + background: #7db3ff; +} + +.sidebar-item strong { + display: block; + font-size: 14px; + color: var(--sidebar-active); +} + +.sidebar-item span { + display: block; + margin-top: 6px; + color: var(--sidebar-muted); + font-size: 12px; + line-height: 1.45; +} + +.sidebar-meta, +.sidebar-footer { + margin-top: 18px; + padding: 14px 16px; + border-radius: 16px; + border: 1px solid var(--sidebar-border); + background: rgba(255, 255, 255, 0.04); +} + +.sidebar-meta strong { + display: block; + margin-top: 8px; + color: var(--sidebar-active); + font-size: 15px; +} + +.sidebar-footer { + color: var(--sidebar-muted); + font-size: 12px; + line-height: 1.65; +} + +.admin-main { + min-width: 0; + padding: 22px 26px 30px; +} + +.topbar { + position: sticky; + top: 0; + z-index: 5; + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 20px; + padding: 18px 22px; + margin-bottom: 22px; + border: 1px solid rgba(255, 255, 255, 0.72); + border-radius: 24px; + background: rgba(255, 255, 255, 0.84); + backdrop-filter: blur(18px); + box-shadow: var(--shadow-soft); +} + +.topbar-copy { + min-width: 0; +} + +.topbar-eyebrow { + display: inline-flex; + margin-bottom: 8px; + padding: 5px 10px; + border-radius: 999px; + background: var(--brand-soft); + color: var(--brand-strong); + font-size: 11px; + font-weight: 700; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.topbar h1 { + margin: 0; + font-size: 30px; + line-height: 1.15; +} + +.topbar p { + margin: 8px 0 0; + color: var(--muted); + line-height: 1.6; +} + +.topbar-meta { + display: flex; + flex-wrap: wrap; + gap: 10px; + margin-top: 14px; +} + +.topbar-chip { + display: inline-flex; + align-items: center; + padding: 7px 11px; + border-radius: 999px; + border: 1px solid var(--border); + background: var(--surface-soft); + color: var(--muted); + font-size: 12px; +} + +.page-shell { + display: grid; + gap: 18px; +} + +.page-hero, +.page-section, +.plugin-card, +.stat-card { + overflow: hidden; +} + +.page-hero { + display: grid; + grid-template-columns: minmax(0, 1.5fr) minmax(240px, 0.8fr); + gap: 20px; + align-items: stretch; +} + +.page-hero-copy h2 { + margin: 10px 0 10px; + font-size: 28px; + line-height: 1.2; +} + +.page-hero-copy p { + margin: 0; + color: var(--muted); + line-height: 1.7; +} + +.page-hero-label, +.section-kicker { + display: inline-flex; + color: var(--brand-strong); + font-size: 11px; + font-weight: 700; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.page-hero-side { + display: grid; + gap: 12px; +} + +.hero-metric { + display: grid; + align-content: center; + gap: 6px; + padding: 18px; + border: 1px solid var(--border); + border-radius: 18px; + background: linear-gradient(180deg, var(--surface-soft), #fff); +} + +.hero-metric span { + color: var(--muted); + font-size: 12px; +} + +.hero-metric strong { + font-size: 22px; + line-height: 1.2; +} + +.grid { + display: grid; + gap: 18px; +} + +.grid-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); +} + +.plugin-grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); +} + +.card { + background: var(--surface); + border: 1px solid rgba(255, 255, 255, 0.72); + border-radius: 24px; + box-shadow: var(--shadow); + padding: 22px; +} + +.card h2, +.card h3 { + margin: 0; +} + +.card p { + margin: 0; + color: var(--muted); + line-height: 1.65; +} + +.section-headline { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 14px; + margin-bottom: 18px; +} + +.section-headline h2 { + margin-top: 8px; + font-size: 22px; +} + +.section-copy { + max-width: 520px; + color: var(--muted); + line-height: 1.65; +} + +.status-strip { + display: flex; + align-items: center; +} + +.stat { + display: grid; + gap: 10px; +} + +.stat strong { + font-size: 30px; + line-height: 1.15; +} + +.hint { + color: var(--muted); + font-size: 13px; + line-height: 1.6; +} + +.toolbar { + display: flex; + gap: 10px; + flex-wrap: wrap; +} + +.btn { + display: inline-flex; + align-items: center; + justify-content: center; + min-height: 42px; + border: 1px solid transparent; + border-radius: 14px; + padding: 10px 16px; + cursor: pointer; + font-weight: 600; + transition: transform 0.15s ease, box-shadow 0.15s ease, background-color 0.15s ease; +} + +.btn:hover { + transform: translateY(-1px); +} + +.btn-primary { + color: #fff; + background: linear-gradient(180deg, var(--brand) 0%, var(--brand-strong) 100%); + box-shadow: 0 10px 20px rgba(22, 119, 255, 0.2); +} + +.btn-secondary { + color: var(--brand-strong); + background: var(--brand-soft); + border-color: rgba(22, 119, 255, 0.08); +} + +.btn-ghost { + color: var(--text); + background: #fff; + border-color: var(--border); +} + +.status-pill { + display: inline-flex; + align-items: center; + gap: 8px; + width: fit-content; + padding: 7px 12px; + border-radius: 999px; + font-size: 12px; + font-weight: 700; +} + +.status-ok { + background: rgba(22, 138, 84, 0.12); + color: var(--success); +} + +.status-warn { + background: rgba(217, 119, 6, 0.12); + color: var(--warn); +} + +.status-danger { + background: rgba(192, 57, 43, 0.12); + color: var(--danger); +} + +.table-wrap { + overflow: auto; + border: 1px solid var(--border); + border-radius: 18px; + background: #fff; +} + +table { + width: 100%; + border-collapse: collapse; + min-width: 680px; +} + +th, +td { + text-align: left; + padding: 14px 14px; + border-bottom: 1px solid var(--border); + vertical-align: top; +} + +th { + position: sticky; + top: 0; + z-index: 1; + background: var(--surface-soft); + color: var(--muted); + font-size: 12px; + font-weight: 700; + letter-spacing: 0.02em; +} + +tbody tr:hover { + background: #f8fbff; +} + +td { + font-size: 14px; +} + +tbody tr:last-child td { + border-bottom: 0; +} + +.row-actions { + display: flex; + gap: 8px; + flex-wrap: wrap; +} + +.login-shell { + min-height: 100vh; + display: grid; + place-items: center; + padding: 24px; +} + +.login-card { + width: min(480px, 100%); + background: rgba(255, 255, 255, 0.9); + border: 1px solid rgba(255, 255, 255, 0.76); + border-radius: 28px; + padding: 30px; + box-shadow: var(--shadow); + backdrop-filter: blur(12px); +} + +.login-card form, +.filter-form { + display: grid; + gap: 12px; +} + +.field { + display: grid; + gap: 8px; +} + +.field label { + color: var(--muted); + font-size: 13px; +} + +.field input, +.field select, +.field textarea { + width: 100%; + min-height: 44px; + padding: 12px 14px; + border: 1px solid var(--border); + border-radius: 14px; + background: #fff; + color: var(--text); + outline: none; +} + +.field input:focus, +.field select:focus, +.field textarea:focus { + border-color: rgba(22, 119, 255, 0.4); + box-shadow: 0 0 0 4px rgba(22, 119, 255, 0.08); +} + +.notice { + padding: 12px 14px; + border-radius: 14px; + font-size: 13px; + line-height: 1.5; +} + +.notice.error { + background: rgba(192, 57, 43, 0.12); + color: var(--danger); +} + +.notice.success { + background: rgba(22, 138, 84, 0.12); + color: var(--success); +} + +.stack { + display: grid; + gap: 18px; +} + +pre { + margin: 0; + white-space: pre-wrap; + word-break: break-word; + border-radius: 16px; + background: #0f172a; + color: #dbe7ff; + padding: 14px 16px; + font-size: 12px; + line-height: 1.55; +} + +.code-panel { + max-height: 420px; + overflow: auto; +} + +.table-code { + max-width: 360px; + max-height: 180px; + overflow: auto; + border-radius: 12px; + background: #111b31; + font-size: 11px; +} + +@media (max-width: 1180px) { + .page-hero, + .plugin-grid { + grid-template-columns: 1fr; + } +} + +@media (max-width: 980px) { + .admin-shell { + grid-template-columns: 1fr; + } + + .admin-sidebar { + position: static; + height: auto; + border-right: 0; + } + + .admin-main { + padding: 18px; + } + + .topbar { + position: static; + flex-direction: column; + align-items: flex-start; + } + + .grid-3 { + grid-template-columns: 1fr; + } +} + +@media (max-width: 640px) { + .card { + padding: 18px; + border-radius: 20px; + } + + .sidebar-brand, + .sidebar-meta, + .sidebar-footer { + border-radius: 16px; + } + + .topbar h1, + .page-hero-copy h2 { + font-size: 24px; + } + + .table-wrap { + border-radius: 14px; + } +} diff --git a/frontend/admin/app.js b/frontend/admin/app.js new file mode 100644 index 0000000..b62d0af --- /dev/null +++ b/frontend/admin/app.js @@ -0,0 +1,694 @@ +(function () { + "use strict"; + + var cfg = window.ADMIN_APP_CONFIG || {}; + var api = cfg.api || {}; + var root = document.getElementById("admin-app"); + + if (!root) { + return; + } + + var state = { + token: readToken(), + user: null, + route: normalizeRoute(readRoute()), + message: "", + messageType: "", + config: null, + system: null, + plugins: [], + integration: {}, + realname: null, + devices: null, + busy: false + }; + + boot(); + + async function boot() { + window.addEventListener("hashchange", function () { + state.route = normalizeRoute(readRoute()); + render(); + hydrateRoute(); + }); + + root.addEventListener("click", onClick); + root.addEventListener("submit", onSubmit); + + if (state.token) { + await loadBootstrap(); + } + + render(); + hydrateRoute(); + } + + async function loadBootstrap() { + try { + state.busy = true; + var loginCheck = unwrap(await request("/api/v1/user/checkLogin", { method: "GET" })); + if (!loginCheck || !loginCheck.is_login || !loginCheck.is_admin) { + clearSession(); + return; + } + + state.user = loginCheck; + + var results = await Promise.all([ + request(api.adminConfig, { method: "GET" }), + request(api.systemStatus, { method: "GET" }), + request(api.plugins, { method: "GET" }), + request(api.integration, { method: "GET" }) + ]); + + state.config = unwrap(results[0]) || {}; + state.system = unwrap(results[1]) || {}; + state.plugins = toArray(unwrap(results[2])); + state.integration = unwrap(results[3]) || {}; + } catch (error) { + clearSession(); + show(error.message || "Failed to load admin data.", "error"); + } finally { + state.busy = false; + } + } + + async function hydrateRoute() { + if (!state.user) { + return; + } + + try { + if (state.route === "realname") { + state.realname = unwrap(await request(api.realnameBase + "/records?per_page=50", { method: "GET" })) || {}; + render(); + return; + } + + if (state.route === "user-online-devices") { + state.devices = unwrap(await request(api.onlineDevices + "?per_page=50", { method: "GET" })) || {}; + render(); + } + } catch (error) { + show(error.message || "Failed to load page data.", "error"); + render(); + } + } + + function onClick(event) { + var actionEl = event.target.closest("[data-action]"); + if (!actionEl) { + return; + } + + var action = actionEl.getAttribute("data-action"); + + if (action === "logout") { + clearSession(); + render(); + return; + } + + if (action === "nav") { + window.location.hash = actionEl.getAttribute("data-route") || "overview"; + return; + } + + if (action === "refresh") { + refreshAll(); + return; + } + + if (action === "approve-all") { + adminPost(api.realnameBase + "/approve-all", {}, "Approved all pending records.").then(hydrateRoute); + return; + } + + if (action === "sync-all") { + adminPost(api.realnameBase + "/sync-all", {}, "Triggered real-name sync.").then(hydrateRoute); + return; + } + + if (action === "clear-cache") { + adminPost(api.realnameBase + "/clear-cache", {}, "Cleared plugin cache."); + return; + } + + if (action === "review") { + var userId = actionEl.getAttribute("data-user-id"); + var status = actionEl.getAttribute("data-status") || "approved"; + var reason = ""; + if (status === "rejected") { + reason = window.prompt("Reject reason", "") || ""; + } + + adminPost( + api.realnameBase + "/review/" + encodeURIComponent(userId), + { status: status, reason: reason }, + "Updated review result." + ).then(hydrateRoute); + return; + } + + if (action === "reset-record") { + var resetUserId = actionEl.getAttribute("data-user-id"); + adminPost( + api.realnameBase + "/reset/" + encodeURIComponent(resetUserId), + {}, + "Reset the verification record." + ).then(hydrateRoute); + } + } + + function onSubmit(event) { + var form = event.target; + if (form.getAttribute("data-form") !== "login") { + return; + } + + event.preventDefault(); + var formData = serializeForm(form); + + request("/api/v1/passport/auth/login", { + method: "POST", + auth: false, + body: formData + }).then(function (response) { + var payload = unwrap(response); + if (!payload || !payload.auth_data || !payload.is_admin) { + throw new Error("This account does not have admin access."); + } + + saveToken(payload.auth_data); + state.token = readToken(); + return loadBootstrap(); + }).then(function () { + show("Admin login successful.", "success"); + render(); + hydrateRoute(); + }).catch(function (error) { + show(error.message || "Login failed.", "error"); + render(); + }); + } + + function refreshAll() { + state.realname = null; + state.devices = null; + state.busy = true; + render(); + loadBootstrap().then(function () { + render(); + return hydrateRoute(); + }); + } + + function clearSession() { + clearToken(); + state.user = null; + state.config = null; + state.system = null; + state.plugins = []; + state.integration = {}; + state.realname = null; + state.devices = null; + state.route = "overview"; + state.busy = false; + } + + function render() { + root.innerHTML = state.user ? renderDashboard() : renderLogin(); + } + + function renderLogin() { + return [ + '' + ].join(""); + } + + function renderDashboard() { + return [ + '
', + renderSidebar(), + '
', + renderTopbar(), + '
', + state.message ? renderNotice() : "", + renderMainContent(), + '
', + '
', + '
' + ].join(""); + } + + function renderSidebar() { + var items = [ + navItem("overview", "Overview", "System status, plugin visibility, and entry summary"), + navItem("realname", "Real Name", "Review and operate the verification workflow"), + navItem("user-online-devices", "Online Devices", "Inspect user sessions and online device data"), + navItem("ipv6-subscription", "IPv6 Subscription", "Check the IPv6 shadow-account integration state"), + navItem("plugin-status", "Plugin Status", "Compare current backend integrations by module") + ]; + + return [ + '' + ].join(""); + } + + function renderTopbar() { + return [ + '
', + '
', + 'Admin Workspace', + '

' + escapeHtml(getRouteTitle(state.route)) + '

', + '

' + escapeHtml(getRouteDescription(state.route)) + '

', + '
', + 'Secure Path /' + escapeHtml(getSecurePath()) + '', + 'Server Time ' + escapeHtml(formatDate(state.system && state.system.server_time)) + '', + state.busy ? 'Refreshing' : "", + '
', + '
', + '
', + '
' + ].join(""); + } + + function renderMainContent() { + if (state.route === "realname") { + return renderRealName(); + } + if (state.route === "user-online-devices") { + return renderOnlineDevices(); + } + if (state.route === "ipv6-subscription") { + return renderIPv6Integration(); + } + if (state.route === "plugin-status") { + return renderPluginStatus(); + } + return renderOverview(); + } + + function renderOverview() { + var enabledCount = countEnabledPlugins(); + return [ + '
', + '
', + 'Overview', + '

Classic backend structure, rebuilt with the current Go APIs.

', + '

The page keeps the familiar admin navigation pattern while exposing plugin data, system state, and backend integration results in one place.

', + '
', + '
', + '
Enabled Plugins' + escapeHtml(String(enabledCount)) + '
', + '
Secure Path/' + escapeHtml(getSecurePath()) + '
', + '
', + '
', + '
', + statCard("Server Time", formatDate(state.system && state.system.server_time), "Source: /system/getSystemStatus"), + statCard("Admin Path", "/" + getSecurePath(), "Synced from current backend settings"), + statCard("Plugin Count", String((state.plugins || []).length), "Read from the integrated plugin list"), + '
', + '
Plugins

Integrated plugin list

Each entry reflects the current Go backend response and the copied integration status.

' + renderPluginsTable() + '
' + ].join(""); + } + + function renderRealName() { + var rows = toArray(state.realname, "data"); + var loading = state.realname === null; + return [ + '
', + '
Workflow

Real-name verification

Batch actions stay in the toolbar while the review table keeps the classic admin operating rhythm.

', + '
', + '
', + loading ? '' : rows.length ? rows.map(function (row) { + return [ + '', + '', + '', + '', + '', + '', + '', + '', + '' + ].join(""); + }).join("") : '', + '
IDEmailStatusReal NameID NumberSubmitted AtActions
Loading verification records...
' + escapeHtml(String(row.id || "")) + '' + escapeHtml(row.email || "-") + '' + renderStatus(row.status) + '' + escapeHtml(row.real_name || "-") + '' + escapeHtml(row.identity_no_masked || "-") + '' + escapeHtml(formatDate(row.submitted_at)) + '
No verification records available.
', + '
' + ].join(""); + } + + function renderOnlineDevices() { + var rows = toArray(state.devices, "list"); + var loading = state.devices === null; + return [ + '
', + '
Monitoring

Online devices

This table keeps the admin-friendly scan pattern for sessions, subscription names, IPs, and recent activity.

', + '
', + loading ? '' : rows.length ? rows.map(function (row) { + return [ + '', + '', + '', + '', + '', + '', + '', + '' + ].join(""); + }).join("") : '', + '
UserSubscriptionOnline CountOnline IPsLast SeenCreated At
Loading device records...
' + escapeHtml(row.email || "-") + '' + escapeHtml(row.subscription_name || "-") + '' + escapeHtml(String(row.online_count || 0)) + '' + escapeHtml(formatDeviceList(row.online_devices)) + '' + escapeHtml(row.last_online_text || "-") + '' + escapeHtml(row.created_text || "-") + '
No online device records available.
', + '
' + ].join(""); + } + + function renderIPv6Integration() { + var integration = (state.integration && state.integration.user_add_ipv6_subscription) || {}; + return [ + '
', + '
Integration

IPv6 shadow subscription

' + escapeHtml(buildSummary(integration, "This panel shows the current runtime status of the IPv6 shadow-account integration.")) + '

', + '
' + renderStatus(integration.status || "unknown") + '
', + '
' + escapeHtml(stringifyJSON(integration)) + '
', + '
' + ].join(""); + } + + function renderPluginStatus() { + var cards = [ + sectionCard("Real-name verification", state.integration && state.integration.real_name_verification), + sectionCard("Online devices", state.integration && state.integration.user_online_devices), + sectionCard("IPv6 shadow subscription", state.integration && state.integration.user_add_ipv6_subscription) + ]; + + return '
' + cards.join("") + '
'; + } + + function renderPluginsTable() { + var rows = toArray(state.plugins); + return '' + (rows.length ? rows.map(function (row) { + return ''; + }).join("") : '') + '
IDCodeStatusConfig
' + escapeHtml(String(row.id || "")) + '' + escapeHtml(row.code || row.name || "-") + '' + renderStatus(row.is_enabled ? "enabled" : "disabled") + '
' + escapeHtml(formatPluginConfig(row.config)) + '
No plugin data available.
'; + } + + function sectionCard(title, data) { + data = data || {}; + return [ + '
', + '
Module

' + escapeHtml(title) + '

', + '

' + escapeHtml(buildSummary(data, "No summary has been returned by the backend for this module.")) + '

', + renderStatus(data.status || "unknown"), + '
' + escapeHtml(stringifyJSON(data)) + '
', + '
' + ].join(""); + } + + function navItem(route, title, desc) { + return '' + escapeHtml(title) + '' + escapeHtml(desc) + ''; + } + + function statCard(title, value, hint) { + return '
' + escapeHtml(title) + '' + escapeHtml(value || "-") + '

' + escapeHtml(hint || "") + '

'; + } + + function renderNotice() { + return '
' + escapeHtml(state.message || "") + '
'; + } + + function countEnabledPlugins() { + return toArray(state.plugins).filter(function (item) { + return !!item.is_enabled; + }).length; + } + + function buildSummary(data, fallback) { + if (!data) { + return fallback; + } + if (typeof data.summary === "string" && data.summary.trim()) { + return data.summary.trim(); + } + if (typeof data.message === "string" && data.message.trim()) { + return data.message.trim(); + } + return fallback; + } + + function formatPluginConfig(value) { + if (typeof value === "string" && value.trim()) { + return value; + } + return stringifyJSON(value || {}); + } + + function stringifyJSON(value) { + try { + return JSON.stringify(value == null ? {} : value, null, 2); + } catch (error) { + return String(value == null ? "" : value); + } + } + + function formatDeviceList(value) { + if (Array.isArray(value)) { + return value.join(", ") || "-"; + } + if (typeof value === "string" && value.trim()) { + return value; + } + return "-"; + } + + function toArray(value, preferredKey) { + if (Array.isArray(value)) { + return value; + } + if (!value || typeof value !== "object") { + return []; + } + if (preferredKey && Array.isArray(value[preferredKey])) { + return value[preferredKey]; + } + if (Array.isArray(value.data)) { + return value.data; + } + if (Array.isArray(value.list)) { + return value.list; + } + return []; + } + + function request(url, options) { + options = options || {}; + + var headers = { + "Content-Type": "application/json" + }; + + if (options.auth !== false && state.token) { + headers.Authorization = state.token; + } + + return fetch(url, { + method: options.method || "GET", + headers: headers, + credentials: "same-origin", + body: options.body ? JSON.stringify(options.body) : undefined + }).then(async function (response) { + var payload = null; + try { + payload = await response.json(); + } catch (error) { + payload = null; + } + + if (!response.ok) { + if (response.status === 401) { + clearSession(); + render(); + } + throw new Error(getErrorMessage(payload) || "Request failed."); + } + + return payload; + }); + } + + function adminPost(url, body, successMessage) { + return request(url, { + method: "POST", + body: body || {} + }).then(function (payload) { + show(successMessage || "Operation completed.", "success"); + render(); + return payload; + }).catch(function (error) { + show(error.message || "Operation failed.", "error"); + render(); + throw error; + }); + } + + function unwrap(payload) { + if (!payload) { + return null; + } + return typeof payload.data !== "undefined" ? payload.data : payload; + } + + function getErrorMessage(payload) { + if (!payload) { + return ""; + } + return payload.message || payload.msg || payload.error || ""; + } + + function saveToken(token) { + var normalized = /^Bearer /.test(token) ? token : "Bearer " + token; + window.localStorage.setItem("__gopanel_admin_auth__", normalized); + } + + function serializeForm(form) { + var result = {}; + var formData = new FormData(form); + formData.forEach(function (value, key) { + result[key] = value; + }); + return result; + } + + function readToken() { + var token = window.localStorage.getItem("__gopanel_admin_auth__") || + window.localStorage.getItem("__nebula_auth_data__") || + window.localStorage.getItem("auth_data") || + ""; + + if (!token) { + return ""; + } + + return /^Bearer /.test(token) ? token : "Bearer " + token; + } + + function clearToken() { + window.localStorage.removeItem("__gopanel_admin_auth__"); + state.token = ""; + } + + function readRoute() { + return (window.location.hash || "#overview").slice(1) || "overview"; + } + + function normalizeRoute(route) { + var allowed = { + overview: true, + realname: true, + "user-online-devices": true, + "ipv6-subscription": true, + "plugin-status": true + }; + + return allowed[route] ? route : "overview"; + } + + function getSecurePath() { + return (state.config && state.config.secure_path) || cfg.securePath || "admin"; + } + + function getRouteTitle(route) { + if (route === "realname") { + return "Real-name Verification"; + } + if (route === "user-online-devices") { + return "Online Devices"; + } + if (route === "ipv6-subscription") { + return "IPv6 Subscription"; + } + if (route === "plugin-status") { + return "Plugin Status"; + } + return "Overview"; + } + + function getRouteDescription(route) { + if (route === "realname") { + return "Review records, run batch actions, and keep the original backend workflow readable."; + } + if (route === "user-online-devices") { + return "Inspect active users, current devices, and recent online activity in one table."; + } + if (route === "ipv6-subscription") { + return "Check the replicated backend integration output for the IPv6 shadow-account module."; + } + if (route === "plugin-status") { + return "Compare plugin integration payloads and runtime summaries side by side."; + } + return "A familiar backend workspace with sidebar navigation, top control bar, and focused content cards."; + } + + function show(message, type) { + state.message = message || ""; + state.messageType = type || ""; + } + + function formatDate(value) { + if (!value) { + return "-"; + } + + var numeric = Number(value); + if (!Number.isNaN(numeric) && numeric > 0) { + return new Date(numeric * 1000).toLocaleString(); + } + + var parsed = Date.parse(value); + if (!Number.isNaN(parsed)) { + return new Date(parsed).toLocaleString(); + } + + return String(value); + } + + function renderStatus(status) { + var raw = String(status || "unknown"); + var normalized = raw.toLowerCase(); + var klass = "status-pill status-ok"; + + if (normalized.indexOf("warn") !== -1 || normalized.indexOf("pending") !== -1 || normalized.indexOf("runtime") !== -1) { + klass = "status-pill status-warn"; + } + + if (normalized.indexOf("disabled") !== -1 || normalized.indexOf("fail") !== -1 || normalized.indexOf("error") !== -1 || normalized.indexOf("reject") !== -1 || normalized.indexOf("unknown") !== -1) { + klass = "status-pill status-danger"; + } + + return '' + escapeHtml(raw) + ''; + } + + function escapeHtml(value) { + return String(value == null ? "" : value) + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/"/g, """) + .replace(/'/g, "'"); + } +})(); diff --git a/frontend/templates/admin_app.html b/frontend/templates/admin_app.html new file mode 100644 index 0000000..169c874 --- /dev/null +++ b/frontend/templates/admin_app.html @@ -0,0 +1,16 @@ + + + + + + {{.Title}} + + + +
+ + + + diff --git a/frontend/templates/user_nebula.html b/frontend/templates/user_nebula.html new file mode 100644 index 0000000..12e073f --- /dev/null +++ b/frontend/templates/user_nebula.html @@ -0,0 +1,54 @@ + + + + + + + {{.Title}} + + + + + +
+
+ Nebula Theme +

{{.Title}}

+

Go backend rebuild with original Nebula user experience.

+
+
+
+
+ + {{.CustomHTML}} + + diff --git a/frontend/theme/Nebula/assets/app.css b/frontend/theme/Nebula/assets/app.css new file mode 100644 index 0000000..4c8f00f --- /dev/null +++ b/frontend/theme/Nebula/assets/app.css @@ -0,0 +1,1923 @@ +:root { + --bg: #07101b; + --panel: rgba(9, 20, 35, 0.78); + --panel-strong: rgba(11, 24, 41, 0.92); + --text: #eef6ff; + --text-dim: rgba(227, 239, 255, 0.72); + --text-faint: rgba(227, 239, 255, 0.54); + --border: rgba(152, 192, 255, 0.16); + --shadow: 0 24px 80px rgba(0, 0, 0, 0.34); + --radius-xl: 30px; + --radius-lg: 22px; + --radius-md: 16px; + --accent: #6ce5ff; + --accent-strong: #21b8ff; + --accent-rgb: 108, 229, 255; + --success: #65f0b7; + --danger: #ff8db5; + --font-sans: "Avenir Next", "Segoe UI Variable Display", "Trebuchet MS", sans-serif; + --font-mono: "JetBrains Mono", "Cascadia Mono", "SFMono-Regular", monospace; + --card-bg: linear-gradient(180deg, rgba(11, 24, 41, 0.9), rgba(9, 18, 31, 0.82)); + --nebula-bg-image: none; +} + +:root[data-theme-mode="light"] { + --bg: #eef4fb; + --panel: rgba(255, 255, 255, 0.86); + --panel-strong: rgba(255, 255, 255, 0.96); + --text: #142235; + --text-dim: rgba(20, 34, 53, 0.72); + --text-faint: rgba(20, 34, 53, 0.56); + --border: rgba(75, 104, 145, 0.16); + --shadow: 0 18px 45px rgba(39, 61, 92, 0.12); + --card-bg: linear-gradient(180deg, rgba(255, 255, 255, 0.96), rgba(247, 250, 255, 0.92)); +} + +:root[data-accent="sunset"] { + --accent: #ffc177; + --accent-strong: #ff8f40; + --accent-rgb: 255, 193, 119; +} + +:root[data-accent="ember"] { + --accent: #ff97b9; + --accent-strong: #ff5e92; + --accent-rgb: 255, 151, 185; +} + +:root[data-accent="violet"] { + --accent: #b6a4ff; + --accent-strong: #776dff; + --accent-rgb: 182, 164, 255; +} + +* { + box-sizing: border-box; +} + +html, +body { + margin: 0; + min-height: 100%; + background: + var(--nebula-bg-image) center / cover fixed no-repeat, + radial-gradient(circle at top left, rgba(var(--accent-rgb), 0.16), transparent 30%), + radial-gradient(circle at top right, rgba(255, 201, 122, 0.12), transparent 22%), + linear-gradient(180deg, #050d16 0%, #07101b 48%, #040a12 100%); + color: var(--text); + font-family: var(--font-sans); +} + +:root[data-theme-mode="light"] html, +:root[data-theme-mode="light"] body { + background: + var(--nebula-bg-image) center / cover fixed no-repeat, + radial-gradient(circle at top left, rgba(var(--accent-rgb), 0.18), transparent 30%), + radial-gradient(circle at top right, rgba(255, 201, 122, 0.14), transparent 22%), + linear-gradient(180deg, #f7fbff 0%, #eef4fb 48%, #e7eef8 100%); +} + +body { + position: relative; + overflow-x: hidden; + min-height: 100vh; +} + +body::before, +body::after { + content: ""; + position: fixed; + inset: 0; + pointer-events: none; + z-index: -1; +} + +body::before { + background-image: + linear-gradient(rgba(155, 192, 255, 0.06) 1px, transparent 1px), + linear-gradient(90deg, rgba(155, 192, 255, 0.06) 1px, transparent 1px); + background-size: 72px 72px; + mask-image: linear-gradient(180deg, rgba(0, 0, 0, 0.78), transparent 88%); +} + +body::after { + background: + radial-gradient(circle at 12% 20%, rgba(var(--accent-rgb), 0.2), transparent 24%), + radial-gradient(circle at 82% 12%, rgba(255, 201, 122, 0.14), transparent 18%), + radial-gradient(circle at 50% 88%, rgba(113, 162, 255, 0.12), transparent 18%); + filter: blur(28px); +} + +a { + color: inherit; + text-decoration: none; +} + +button, +input, +textarea { + font: inherit; +} + +select { + font: inherit; +} + +button { + cursor: pointer; +} + +#app { + position: relative; + min-height: 100vh; +} + +.glass-card, +.nebula-loading__card { + border: 1px solid var(--border); + background: var(--card-bg); + box-shadow: var(--shadow); + backdrop-filter: blur(18px); +} + +.nebula-loading { + min-height: 100vh; + display: grid; + place-items: center; + padding: 24px; +} + +.nebula-loading__card { + width: min(540px, 100%); + padding: 28px; + border-radius: var(--radius-xl); +} + +.nebula-loading__card h1 { + margin: 18px 0 10px; + font-size: clamp(2rem, 5vw, 3.1rem); + line-height: 1; +} + +.nebula-loading__card p { + margin: 0; + color: var(--text-dim); + line-height: 1.7; +} + +.nebula-pill, +.tiny-pill, +.status-chip { + display: inline-flex; + align-items: center; + gap: 8px; + border-radius: 999px; + border: 1px solid rgba(var(--accent-rgb), 0.24); + background: rgba(var(--accent-rgb), 0.08); +} + +.nebula-pill { + padding: 8px 14px; + font-size: 12px; + letter-spacing: 0.18em; + text-transform: uppercase; +} + +.tiny-pill, +.status-chip { + padding: 6px 12px; + font-size: 12px; + color: var(--text-dim); +} + +.status-chip.online { + color: var(--success); + border-color: rgba(101, 240, 183, 0.24); + background: rgba(101, 240, 183, 0.08); +} + +.status-chip.offline { + color: var(--danger); + border-color: rgba(255, 141, 181, 0.24); + background: rgba(255, 141, 181, 0.08); +} + +.status-chip.pending { + color: #f6b84f; + border-color: rgba(246, 184, 79, 0.24); + background: rgba(246, 184, 79, 0.1); +} + +.status-chip.neutral { + color: var(--text-dim); + border-color: rgba(255, 255, 255, 0.12); + background: rgba(255, 255, 255, 0.04); +} + +.app-shell { + width: min(1400px, calc(100vw - 32px)); + margin: 0 auto; + min-height: 100vh; + display: flex; + flex-direction: column; + padding: 24px 0 20px; + position: relative; + z-index: 1; +} + +.record-footer { + display: flex; + align-items: center; + justify-content: center; + gap: 10px; + flex-wrap: wrap; + margin-top: auto; + padding: 28px 0 6px; + color: var(--text-faint); + font-size: 12px; + line-height: 1.6; +} + +.record-divider { + opacity: 0.48; +} + +.topbar { + display: flex; + align-items: center; + justify-content: space-between; + gap: 16px; + padding: 12px 0 24px; +} + +.nebula-topbar { + padding: 18px 22px; + border-radius: 26px; + margin-bottom: 18px; +} + +.brand { + display: flex; + align-items: center; + gap: 14px; +} + +.brand-mark { + width: 46px; + height: 46px; + flex: 0 0 46px; + border-radius: 16px; + border: 1px solid rgba(var(--accent-rgb), 0.28); + background: + radial-gradient(circle at 30% 30%, rgba(255, 255, 255, 0.24), transparent 40%), + linear-gradient(135deg, rgba(var(--accent-rgb), 0.35), rgba(255, 212, 121, 0.12)); + box-shadow: inset 0 0 24px rgba(var(--accent-rgb), 0.16); +} + +.brand-mark--image { + display: grid; + place-items: center; + overflow: hidden; + background: rgba(255, 255, 255, 0.94); + box-shadow: 0 10px 26px rgba(10, 20, 36, 0.14); +} + +.brand-mark--image img { + width: 100%; + height: 100%; + object-fit: contain; + padding: 8px; +} + +:root[data-theme-mode="light"] .brand-mark--image { + border-color: rgba(75, 104, 145, 0.18); + box-shadow: 0 10px 24px rgba(39, 61, 92, 0.1); +} + +.brand h1, +.brand p, +.section-head h3, +.hero h2, +.auth-panel h2 { + margin: 0; +} + +.hero-badge-row { + display: flex; + align-items: center; + gap: 12px; + flex-wrap: wrap; + position: relative; + z-index: 1; +} + +.hero { + display: flex; + flex-direction: column; + justify-content: flex-start; + min-height: 100%; + padding: 34px 34px 38px; +} + +.hero::after { + content: ""; + position: absolute; + inset: 28px; + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: 24px; + pointer-events: none; + mask-image: linear-gradient(180deg, rgba(0, 0, 0, 0.85), rgba(0, 0, 0, 0.45)); +} + +.hero-copy-block { + display: flex; + flex: 1 1 auto; + flex-direction: column; + justify-content: space-between; + gap: clamp(34px, 6vh, 56px); + min-height: 0; + padding: 26px 0 4px; + position: relative; + z-index: 1; +} + +.hero-description { + color: var(--text-dim); + font-size: 13px; + line-height: 1.5; +} + +.hero-subcopy { + display: block; + margin-top: 14px; +} + +.hero-metric-label { + margin-top: 12px; + font-size: clamp(1.05rem, 1.9vw, 1.35rem); + font-weight: 600; + line-height: 1.2; + letter-spacing: -0.02em; + color: var(--text-dim); +} + +.hero-metric-stack { + display: grid; + gap: clamp(16px, 2.3vh, 26px); + margin: auto 0; + align-content: start; + justify-items: start; + width: 100%; +} + +.hero-metric-line { + font-size: clamp(3.4rem, 6.6vw, 5.9rem); + font-weight: 760; + line-height: 0.86; + letter-spacing: -0.095em; + font-style: italic; + white-space: nowrap; + text-wrap: nowrap; + text-align: left; +} + +.hero-metric-value { + font-size: clamp(3.4rem, 6.4vw, 5.9rem); + font-weight: 760; + line-height: 0.86; + letter-spacing: -0.095em; + white-space: nowrap; + text-wrap: nowrap; + text-align: left; +} + +.hero-metric-value em { + font-style: italic; +} + +.hero-custom-line { + margin: 18px 0 0; + font-size: clamp(2.4rem, 4.5vw, 4.15rem); + font-weight: 760; + line-height: 0.9; + letter-spacing: -0.085em; + font-style: italic; + color: color-mix(in srgb, var(--text-main) 78%, transparent); + width: 100%; + white-space: normal; + text-wrap: balance; + text-align: left; + opacity: 0.88; +} + +.auth-panel-heading { + display: grid; + gap: 10px; + margin: 16px 0 12px; +} + +.auth-panel-eyebrow { + margin: 0; + font-size: 0.82rem; + line-height: 1; + letter-spacing: 0.22em; + text-transform: uppercase; + color: var(--text-dim); +} + +@media (min-width: 1181px) { + .auth-grid .hero { + min-height: 560px; + } +} + +.brand p, +.hero p, +.auth-panel p, +.section-copy, +.footer-note { + color: var(--text-dim); +} + +.topbar-actions, +.form-actions, +.toolbar, +.inline-actions { + display: flex; + align-items: center; + gap: 12px; + flex-wrap: wrap; +} + +.btn { + border: 0; + border-radius: 999px; + padding: 12px 18px; + transition: transform 160ms ease, box-shadow 160ms ease, opacity 160ms ease; +} + +.btn:hover { + transform: translateY(-1px); +} + +.btn:disabled { + opacity: 0.55; + cursor: not-allowed; + transform: none; +} + +.btn-primary { + color: #06111b; + background: linear-gradient(135deg, var(--accent), var(--accent-strong)); + box-shadow: 0 12px 30px rgba(var(--accent-rgb), 0.18); + font-weight: 700; +} + +.btn-secondary { + color: var(--text); + background: rgba(255, 255, 255, 0.04); + border: 1px solid var(--border); +} + +.btn-ghost { + color: var(--text-dim); + background: transparent; + border: 1px solid rgba(255, 255, 255, 0.08); +} + +:root[data-theme-mode="light"] .btn-secondary, +:root[data-theme-mode="light"] .btn-ghost { + background: rgba(20, 34, 53, 0.035); + border-color: rgba(75, 104, 145, 0.16); +} + +.auth-grid, +.dashboard-grid, +.dashboard-hero, +.dashboard-stat-grid, +.metric-strip, +.kpi-row, +.ip-list, +.session-list, +.node-list, +.notice-list, +.stack { + display: grid; + gap: 14px; +} + +.auth-grid { + grid-template-columns: 1.34fr 0.78fr; + align-items: stretch; +} + +.hero, +.auth-panel, +.section-card { + position: relative; + overflow: hidden; + border-radius: var(--radius-xl); + padding: 34px; +} + +.auth-panel { + width: min(100%, 460px); + justify-self: end; + display: flex; + flex-direction: column; + margin-top: 0; +} + +.hero::before, +.auth-panel::before { + content: ""; + position: absolute; + inset: 0; + pointer-events: none; + background: linear-gradient(130deg, rgba(255, 255, 255, 0.08), transparent 38%, rgba(var(--accent-rgb), 0.1)); +} + +.hero h2, +.auth-panel h2 { + margin: 14px 0 12px; + font-size: clamp(2.3rem, 5vw, 4.2rem); + line-height: 0.95; + letter-spacing: -0.05em; +} + +.auth-panel-heading h2 { + margin: 0; +} + +.auth-panel form[data-form] { + display: flex; + flex: 1 1 auto; + flex-direction: column; + gap: 14px; + min-height: 100%; +} + +.auth-panel .form-actions { + margin-top: 18px; + padding-top: 8px; +} + +.auth-panel .form-actions .btn-primary { + width: 100%; + justify-content: center; +} + +.hero h2 { + margin-bottom: 0; +} + +.hero .hero-metric-label { + margin-top: 0; +} + +.metric-strip { + grid-template-columns: repeat(3, minmax(0, 1fr)); + margin-top: 28px; +} + +.metric-box, +.dashboard-stat, +.kpi-box, +.token-field, +.ip-item, +.session-item, +.node-item, +.notice-item, +.message-banner, +.empty-state { + border-radius: var(--radius-md); + padding: 16px; + background: rgba(255, 255, 255, 0.035); + border: 1px solid rgba(255, 255, 255, 0.06); +} + +.metric-box .value, +.dashboard-stat .value, +.kpi-value { + display: block; + font-size: 1.8rem; + font-weight: 700; + letter-spacing: -0.04em; +} + +.kpi-box { + min-width: 0; +} + +.kpi-label { + white-space: nowrap; +} + +.kpi-value { + min-width: 0; + overflow-wrap: anywhere; + word-break: break-word; +} + +.section-card--overview .kpi-value { + font-size: clamp(1.1rem, 2vw, 1.45rem); +} + +.section-card--overview .kpi-box:nth-child(1) .kpi-value, +.section-card--overview .kpi-box:nth-child(4) .kpi-value { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + word-break: normal; +} + +.section-card--overview .kpi-box:nth-child(4) .kpi-value span { + display: block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.metric-box .label, +.dashboard-stat .label, +.kpi-label, +.meta-label { + display: block; + margin-top: 8px; + color: var(--text-faint); + font-size: 12px; + text-transform: uppercase; + letter-spacing: 0.14em; +} + +.message-banner { + margin-bottom: 16px; + color: var(--text-dim); +} + +.message-banner.error { + color: var(--danger); + border-color: rgba(255, 141, 181, 0.22); + background: rgba(255, 141, 181, 0.08); +} + +.message-banner.success { + color: var(--success); + border-color: rgba(101, 240, 183, 0.22); + background: rgba(101, 240, 183, 0.08); +} + +.form-tabs { + display: inline-flex; + gap: 8px; + padding: 6px; + border-radius: 999px; + background: rgba(255, 255, 255, 0.03); + border: 1px solid rgba(255, 255, 255, 0.06); +} + +:root[data-theme-mode="light"] .form-tabs { + background: rgba(20, 34, 53, 0.03); + border-color: rgba(75, 104, 145, 0.14); +} + +.form-tab { + border: 0; + background: transparent; + color: var(--text-dim); + border-radius: 999px; + padding: 10px 14px; +} + +.form-tab.active { + color: #07111d; + background: linear-gradient(135deg, var(--accent), var(--accent-strong)); + font-weight: 700; +} + +.field { + display: grid; + gap: 8px; +} + +.field label { + font-size: 13px; + color: var(--text-dim); +} + +.field-help { + color: var(--text-faint); + font-size: 12px; + line-height: 1.7; +} + +.field input, +.field textarea { + width: 100%; + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: 16px; + background: rgba(255, 255, 255, 0.04); + color: var(--text); + padding: 14px 16px; + outline: none; +} + +.field select { + width: 100%; + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: 16px; + background: rgba(255, 255, 255, 0.04); + color: var(--text); + padding: 14px 16px; + outline: none; +} + +:root[data-theme-mode="light"] .field input, +:root[data-theme-mode="light"] .field textarea, +:root[data-theme-mode="light"] .field select { + background: rgba(20, 34, 53, 0.035); + border-color: rgba(75, 104, 145, 0.16); +} + +.field input:focus, +.field textarea:focus { + border-color: rgba(var(--accent-rgb), 0.45); + box-shadow: 0 0 0 4px rgba(var(--accent-rgb), 0.1); +} + +.node-search-input { + background: rgba(255, 255, 255, 0.05); + border: 1px solid var(--border); + border-radius: 12px; + color: var(--text); + padding: 8px 14px; + font-size: 14px; + width: 180px; + outline: none; + transition: all 0.2s ease; +} + +.node-search-input:focus { + background: rgba(255, 255, 255, 0.08); + border-color: rgba(var(--accent-rgb), 0.5); + width: 240px; +} + +:root[data-theme-mode="light"] .node-search-input { + background: rgba(0, 0, 0, 0.03); + border-color: rgba(0, 0, 0, 0.1); +} + +.node-action-btn { + background: rgba(var(--accent-rgb), 0.1); + color: var(--accent); + border: 1px solid rgba(var(--accent-rgb), 0.2); + padding: 6px 14px; + border-radius: 10px; + font-size: 11px; + font-weight: 600; + letter-spacing: 0.02em; + transition: all 0.2s ease; + backdrop-filter: blur(8px); + white-space: nowrap; + cursor: pointer; +} + +.node-action-btn:hover { + background: var(--accent); + color: #08101c; + border-color: var(--accent); + transform: translateY(-1px); + box-shadow: 0 4px 12px rgba(var(--accent-rgb), 0.3); +} + +.node-action-btn:active { + transform: translateY(0); +} + +:root[data-theme-mode="light"] .node-action-btn { + background: rgba(var(--accent-rgb), 0.08); + border-color: rgba(var(--accent-rgb), 0.15); +} + +:root[data-theme-mode="light"] .node-action-btn:hover { + color: #fff; +} + +.node-info-pre { + background: rgba(0, 0, 0, 0.2); + border-radius: 12px; + padding: 16px; + font-family: var(--font-mono); + font-size: 13px; + line-height: 1.5; + color: var(--accent); + overflow-x: auto; + white-space: pre-wrap; + border: 1px solid var(--border); + margin: 10px 0; + max-height: 300px; +} + +.input-with-button { + display: flex; + align-items: center; + gap: 12px; + width: 100%; +} + +.input-with-button input { + flex: 1; + min-width: 0; +} + +.send-code-btn { + height: 44px; + min-width: 100px; + padding-left: 12px; + padding-right: 12px; + flex-shrink: 0; +} + +@media (max-width: 480px) { + .input-with-button { + gap: 8px; + } + + .send-code-btn { + min-width: 80px; + font-size: 11px; + padding-left: 8px; + padding-right: 8px; + } +} + +:root[data-theme-mode="light"] .node-info-pre { + background: rgba(0, 0, 0, 0.03); + color: var(--text); +} + +.dashboard-hero { + grid-template-columns: 1.45fr 0.85fr; + margin-bottom: 18px; +} + +.dashboard-stat-grid { + grid-template-columns: repeat(3, minmax(0, 1fr)); + margin-top: 22px; +} + +.dashboard-grid { + grid-template-columns: repeat(12, minmax(0, 1fr)); +} + +.dashboard-grid--overview { + grid-template-columns: minmax(0, 1fr); +} + +.section-card--overview { + max-width: 100%; +} + +.dashboard-grid--overview .kpi-row { + grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); +} + +.dashboard-shell { + display: grid; + grid-template-columns: 280px minmax(0, 1fr); + gap: 18px; + align-items: start; +} + +.dashboard-main { + display: grid; + gap: 18px; +} + +.dashboard-sidebar { + position: sticky; + top: 20px; + display: grid; + gap: 16px; + padding: 22px; + border-radius: 28px; +} + +.sidebar-title { + margin: 10px 0 0; + font-size: 1.35rem; +} + +.sidebar-nav, +.sidebar-kpis { + display: grid; + gap: 10px; +} + +.sidebar-link, +.sidebar-kpi { + border-radius: 20px; + padding: 14px 16px; + background: rgba(255, 255, 255, 0.035); + border: 1px solid rgba(255, 255, 255, 0.06); +} + +.sidebar-link { + width: 100%; + text-align: left; + cursor: pointer; + color: var(--text); +} + +.sidebar-link.is-active { + border-color: rgba(var(--accent-rgb), 0.34); + background: rgba(var(--accent-rgb), 0.12); + box-shadow: inset 0 0 0 1px rgba(var(--accent-rgb), 0.12); +} + +.sidebar-link strong, +.sidebar-kpi strong { + display: block; + font-size: 1rem; +} + +.sidebar-link span { + display: block; + margin-top: 6px; + color: var(--text-faint); + font-size: 13px; +} + +.sidebar-progress { + margin-top: 0; +} + +.nebula-main-grid { + display: grid; + grid-template-columns: minmax(0, 1.62fr) minmax(320px, 0.74fr); + gap: 18px; + align-items: start; +} + +.nebula-app-stage { + position: relative; + min-height: 100%; + padding: 18px; + border-radius: var(--radius-xl); + overflow: hidden; +} + +.nebula-app-stage::before { + content: ""; + position: absolute; + inset: 0; + pointer-events: none; + background: + linear-gradient(180deg, rgba(255, 255, 255, 0.06), transparent 20%), + radial-gradient(circle at top right, rgba(var(--accent-rgb), 0.12), transparent 24%); +} + +.nebula-app-stage > #app { + position: relative; + z-index: 1; +} + +.nebula-side-rail { + display: grid; + gap: 18px; + align-content: start; +} + +.span-5 { grid-column: span 5; } +.span-6 { grid-column: span 6; } +.span-7 { grid-column: span 7; } +.span-12 { grid-column: span 12; } + +.section-head { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + margin-bottom: 18px; +} + +.kpi-row { + grid-template-columns: repeat(2, minmax(0, 1fr)); +} + +.progress { + margin-top: 16px; + height: 12px; + border-radius: 999px; + background: rgba(255, 255, 255, 0.05); + overflow: hidden; +} + +:root[data-theme-mode="light"] .progress { + background: rgba(20, 34, 53, 0.08); +} + +.progress > span { + display: block; + height: 100%; + border-radius: inherit; + background: linear-gradient(90deg, var(--accent), var(--accent-strong)); +} + +.token-field { + font-family: var(--font-mono); + color: var(--text-dim); + overflow: auto; + white-space: nowrap; +} + +.token-field--masked { + display: grid; + gap: 8px; + font-family: var(--font-sans); + white-space: normal; +} + +.token-field--masked strong { + color: var(--text); + font-size: 1rem; +} + +.session-item, +.notice-item { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 14px; +} + +.notice-item--interactive { + width: 100%; + border: 0; + padding: 0; + background: transparent; + color: inherit; + text-align: left; + cursor: pointer; + transition: transform 0.18s ease, opacity 0.18s ease; +} + +.notice-item--interactive:hover { + transform: translateY(-1px); +} + +.notice-item--interactive:focus-visible { + outline: 2px solid rgba(var(--accent-rgb), 0.45); + outline-offset: 6px; + border-radius: 18px; +} + +.session-copy, +.node-copy, +.notice-copy { + display: grid; + gap: 6px; +} + +.notice-title-row { + display: flex; + align-items: center; + gap: 10px; + flex-wrap: wrap; +} + +.notice-open-indicator { + color: var(--accent); + font-size: 12px; + font-weight: 700; + white-space: nowrap; +} + +.node-list { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 14px; + align-items: stretch; +} + +.section-card--nodes { + overflow: visible; +} + +.node-item { + display: grid; + gap: 14px; + align-content: start; + min-width: 0; + height: 100%; + grid-template-rows: auto auto auto; + isolation: isolate; +} + +.node-head { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 12px; +} + +.node-copy { + min-width: 0; +} + +.node-copy strong { + word-break: break-word; +} + +.node-specs { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 10px; +} + +.node-spec { + border-radius: 14px; + padding: 12px; + background: rgba(255, 255, 255, 0.035); + border: 1px solid rgba(255, 255, 255, 0.06); +} + +:root[data-theme-mode="light"] .metric-box, +:root[data-theme-mode="light"] .dashboard-stat, +:root[data-theme-mode="light"] .kpi-box, +:root[data-theme-mode="light"] .token-field, +:root[data-theme-mode="light"] .ip-item, +:root[data-theme-mode="light"] .session-item, +:root[data-theme-mode="light"] .node-item, +:root[data-theme-mode="light"] .notice-item, +:root[data-theme-mode="light"] .message-banner, +:root[data-theme-mode="light"] .empty-state, +:root[data-theme-mode="light"] .sidebar-link, +:root[data-theme-mode="light"] .sidebar-kpi { + background: rgba(20, 34, 53, 0.035); + border-color: rgba(75, 104, 145, 0.14); +} + +.node-spec strong { + display: block; + margin-top: 6px; + font-size: 14px; +} + +.real-name-grid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 14px; +} + +.real-name-identity { + font-family: var(--font-mono); + letter-spacing: 0.06em; +} + +.real-name-alert { + margin-top: 16px; + padding: 14px 16px; + border-radius: 16px; + background: rgba(var(--accent-rgb), 0.08); + border: 1px solid rgba(var(--accent-rgb), 0.14); + color: var(--text-dim); + line-height: 1.7; +} + +.real-name-alert--rejected { + border-color: rgba(255, 141, 181, 0.22); + background: rgba(255, 141, 181, 0.08); + color: var(--danger); +} + +.node-tags { + display: flex; + flex-wrap: wrap; + gap: 8px; +} + +.node-list-wrap { + display: grid; + gap: 14px; +} + +.node-pagination { + display: flex; + align-items: center; + justify-content: flex-end; + gap: 10px; + flex-wrap: wrap; +} + +.theme-switch { + display: inline-flex; + align-items: center; + gap: 10px; + border: 0; + padding: 0; + background: transparent; + color: var(--text); +} + +.theme-switch__track { + position: relative; + display: flex; + align-items: center; + justify-content: space-between; + width: 58px; + height: 30px; + padding: 0 6px; + border-radius: 999px; + border: 1px solid rgba(var(--accent-rgb), 0.2); + background: rgba(255, 255, 255, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.1); + overflow: hidden; +} + +.theme-switch__icon { + position: relative; + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + width: 20px; + height: 20px; + color: var(--text-faint); + transition: color 240ms ease; + pointer-events: none; +} + +.theme-switch.is-dark .theme-switch__icon--moon { + color: #06111b; +} + +.theme-switch.is-light .theme-switch__icon--sun { + color: #06111b; +} + +.theme-switch__thumb { + position: absolute; + top: 3px; + left: 3px; + width: 24px; + height: 24px; + border-radius: 50%; + background: linear-gradient(135deg, var(--accent), var(--accent-strong)); + box-shadow: 0 4px 12px rgba(var(--accent-rgb), 0.3); + transition: transform 320ms cubic-bezier(0.34, 1.56, 0.64, 1); +} + +.theme-switch.is-dark .theme-switch__thumb { + transform: translateX(0); +} + +.theme-switch.is-light .theme-switch__thumb { + transform: translateX(26px); +} + +:root[data-theme-mode="light"] .theme-switch__track { + background: rgba(20, 34, 53, 0.05); + border-color: rgba(75, 104, 145, 0.16); +} + +.session-copy strong, +.node-copy strong, +.notice-copy strong { + font-size: 15px; +} + +.session-meta, +.node-meta, +.notice-meta { + color: var(--text-faint); + font-size: 13px; +} + +.ip-list { + grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); +} + +.ip-item code { + font-family: var(--font-mono); + color: var(--text); +} + +.empty-state { + color: var(--text-faint); + text-align: center; +} + +:root[data-theme-mode="light"] .node-spec { + background: rgba(20, 34, 53, 0.035); + border-color: rgba(75, 104, 145, 0.14); +} + +:root[data-theme-mode="light"] .glass-card, +:root[data-theme-mode="light"] .nebula-loading__card { + border-color: rgba(75, 104, 145, 0.14); +} + +.sidebar-overlay, +.menu-toggle { + display: none; +} + +.sidebar-overlay, +.menu-toggle { + display: none; +} + +@media (max-width: 1180px) { + .auth-grid, + .dashboard-hero { + grid-template-columns: 1fr; + } + + .dashboard-shell { + grid-template-columns: 1fr; + } + + .span-5, + .span-6, + .span-7 { + grid-column: span 12; + } + + .nebula-main-grid { + grid-template-columns: 1fr; + } + + .node-list { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + /* Sidebar Drawer for Mobile */ + .dashboard-sidebar { + position: fixed; + top: 0; + left: 0; + height: 100vh; + width: 280px; + z-index: 10000; + transform: translateX(-110%) scale(0.96); + filter: blur(8px); + transition: transform 450ms cubic-bezier(0.16, 1, 0.3, 1), + filter 400ms ease, + box-shadow 450ms ease, + opacity 450ms ease; + background: var(--panel-strong) !important; + border-radius: 0 !important; + border: none !important; + border-right: 1px solid var(--border) !important; + backdrop-filter: blur(28px); + overflow-y: auto; + padding: 32px 24px; + display: flex; + flex-direction: column; + gap: 16px; + opacity: 0; + pointer-events: none; + } + + [data-sidebar-open="true"] .dashboard-sidebar, + .dashboard-sidebar.is-open { + transform: translateX(0) scale(1); + filter: blur(0); + opacity: 1; + pointer-events: auto; + box-shadow: 40px 0 100px rgba(0, 0, 0, 0.45); + } + + .sidebar-overlay { + position: fixed; + inset: 0; + background: rgba(4, 9, 17, 0.55); + z-index: 9999; + opacity: 0; + visibility: hidden; + transition: opacity 400ms ease, visibility 400ms ease, backdrop-filter 400ms ease; + backdrop-filter: blur(0px); + display: block; + } + + [data-sidebar-open="true"] .sidebar-overlay, + .sidebar-overlay.is-visible { + opacity: 1; + visibility: visible; + backdrop-filter: blur(8px); + } + + .menu-toggle { + display: flex !important; + align-items: center; + justify-content: center; + width: 42px; + height: 42px; + border: 1px solid var(--border); + background: rgba(255, 255, 255, 0.04); + border-radius: 14px; + color: var(--text); + cursor: pointer; + } +} + +@media (max-width: 860px) { + .app-shell { + width: min(100vw - 20px, 1400px); + padding-top: 10px; + min-height: auto; + } + + .topbar { + flex-direction: row; + align-items: center; + padding: 12px 0 16px; + } + + .brand h1 { + display: none; + } + + .hero-badge-row { + align-items: flex-start; + } + + .metric-strip, + .dashboard-stat-grid, + .kpi-row, + .node-specs, + .real-name-grid { + grid-template-columns: 1fr; + } + + .node-list { + grid-template-columns: 1fr; + } + + .hero, + .auth-panel, + .section-card { + padding: 20px; + } + + .auth-panel { + margin-top: 0; + } + + .hero-metric-stack { + gap: 12px; + margin: auto auto auto 0; + padding-left: 0; + justify-items: start; + max-width: 100%; + } + + .hero-copy-block { + gap: 20px; + padding: 12px 0 0; + } + + .hero-metric-line { + font-size: clamp(2.4rem, 10vw, 4.2rem); + white-space: normal; + text-align: left; + } + + .hero-metric-value { + font-size: clamp(2.1rem, 8vw, 2.9rem); + white-space: normal; + text-align: left; + } + + .hero-custom-line { + font-size: clamp(1.65rem, 6.5vw, 2.4rem); + max-width: 100%; + white-space: normal; + padding-left: 0; + text-wrap: pretty; + } + + .record-footer { + padding-top: 22px; + } + + .topbar-actions .btn { + padding: 8px 12px; + font-size: 13px; + } + + .nebula-topbar { + padding: 12px 14px; + } + + .nebula-app-stage { + padding: 12px; + } +} + +.nebula-shell { + position: fixed; + inset: 0; + pointer-events: none; + z-index: 0; + overflow: hidden; +} + +.nebula-glow, +.nebula-ring { + position: absolute; + pointer-events: none; +} + +.nebula-glow { + border-radius: 50%; + filter: blur(24px); + opacity: 0.36; +} + +.nebula-glow-a { + top: -10vw; + right: -8vw; + width: 42vw; + height: 42vw; + background: radial-gradient(circle, rgba(var(--accent-rgb), 0.38), transparent 62%); +} + +.nebula-glow-b { + left: -12vw; + bottom: -16vw; + width: 38vw; + height: 38vw; + background: radial-gradient(circle, rgba(255, 208, 122, 0.26), transparent 58%); +} + +.nebula-ring { + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: 999px; + transform: rotate(-18deg); + opacity: 0.32; +} + +.nebula-ring-a { + width: 520px; + height: 520px; + top: -180px; + right: -120px; +} + +.nebula-ring-b { + width: 420px; + height: 420px; + left: -140px; + bottom: -160px; +} + +.nebula-loading { + position: fixed; + inset: 0; + display: grid; + place-items: center; + padding: 24px; + background: linear-gradient(180deg, rgba(4, 10, 18, 0.84), rgba(4, 10, 18, 0.92)); + z-index: 20; + transition: opacity 320ms ease, visibility 320ms ease; +} + +.nebula-loading.is-hidden { + opacity: 0; + visibility: hidden; +} + +.n-layout, +.n-layout-content, +.n-drawer-container, +.n-modal-container, +.n-drawer, +.n-menu, +.n-layout-scroll-container { + background: transparent !important; +} + +.n-layout-sider, +.n-card, +.n-modal .n-card, +.n-data-table, +.n-tabs-nav, +.n-dropdown-menu, +.n-popover, +.n-drawer .n-drawer-content, +.n-base-selection, +.n-input { + background: linear-gradient(180deg, rgba(11, 24, 41, 0.9), rgba(9, 18, 31, 0.82)) !important; + border: 1px solid rgba(152, 192, 255, 0.14) !important; + box-shadow: var(--shadow) !important; + backdrop-filter: blur(18px); +} + +.n-card, +.n-modal .n-card, +.n-layout-sider, +.n-base-selection, +.n-input { + border-radius: var(--radius-lg) !important; +} + +.n-button { + border-radius: 999px !important; +} + +.n-button--primary-type, +.n-button--info-type, +.n-button--success-type { + color: #06111b !important; + border: none !important; + background: linear-gradient(135deg, var(--accent), var(--accent-strong)) !important; +} + +.n-menu-item-content--selected, +.n-tabs-tab--active, +.n-tag--info-type { + background: rgba(var(--accent-rgb), 0.12) !important; + color: var(--accent) !important; +} + +.nebula-monitor { + position: sticky; + top: 20px; + width: 100%; + border-radius: var(--radius-xl); + border: 1px solid rgba(var(--accent-rgb), 0.2); + background: linear-gradient(180deg, rgba(11, 24, 41, 0.96), rgba(8, 18, 31, 0.92)); + box-shadow: var(--shadow); + backdrop-filter: blur(18px); + overflow: hidden; +} + +.nebula-monitor__head, +.nebula-monitor__section { + padding: 16px 18px; +} + +.nebula-monitor__head { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 12px; + border-bottom: 1px solid rgba(255, 255, 255, 0.06); +} + +.nebula-monitor__body { + display: grid; +} + +.nebula-monitor__title { + margin: 0; + font-size: 1rem; +} + +.nebula-monitor__copy { + margin-top: 6px; + color: var(--text-faint); + font-size: 13px; + line-height: 1.5; +} + +.nebula-monitor__actions { + display: flex; + gap: 8px; +} + +.nebula-monitor__actions button { + border: 0; + border-radius: 999px; + padding: 8px 12px; + color: var(--text); + background: rgba(255, 255, 255, 0.05); +} + +.nebula-monitor.is-collapsed .nebula-monitor__body { + display: none; +} + +.nebula-monitor__grid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 12px; +} + +.nebula-monitor__metric { + border-radius: var(--radius-md); + padding: 14px; + background: rgba(255, 255, 255, 0.035); + border: 1px solid rgba(255, 255, 255, 0.06); +} + +.nebula-monitor__metric strong { + display: block; + font-size: 1.5rem; + letter-spacing: -0.04em; +} + +.nebula-monitor__metric span, +.nebula-monitor__meta, +.nebula-monitor__empty { + color: var(--text-faint); + font-size: 12px; +} + +.nebula-monitor__chips, +.nebula-monitor__sessions { + display: grid; + gap: 10px; +} + +.nebula-monitor__chip, +.nebula-monitor__session { + border-radius: 14px; + padding: 12px; + background: rgba(255, 255, 255, 0.03); + border: 1px solid rgba(255, 255, 255, 0.06); +} + +.nebula-monitor__chip code { + font-family: var(--font-mono); + color: var(--text); +} + +.nebula-monitor__session strong { + display: block; + margin-bottom: 6px; + font-size: 13px; +} + +.nebula-monitor__empty { + padding: 4px 0; +} + +@media (max-width: 860px) { + .nebula-monitor { + position: relative; + top: 0; + } + + .nebula-monitor__grid { + grid-template-columns: 1fr; + } +} + +/* Modal Overlay & Dialogs */ +.nebula-modal-overlay { + position: fixed; + inset: 0; + z-index: 9000; + background: rgba(4, 9, 17, 0.6); + backdrop-filter: blur(12px); + display: flex; + align-items: center; + justify-content: center; + padding: 24px; + animation: nebula-fade-in 240ms ease-out forwards; +} + +.nebula-modal { + width: min(440px, 100%); + border-radius: var(--radius-xl); + padding: 34px; + border: 1px solid var(--border); + background: var(--card-bg); + box-shadow: 0 40px 100px rgba(0, 0, 0, 0.45); + transform-origin: center; + animation: nebula-pop-in 340ms cubic-bezier(0.34, 1.56, 0.64, 1) forwards; +} + +.nebula-modal--article { + width: min(720px, 100%); + max-height: min(80vh, 760px); + overflow: auto; +} + +.nebula-modal-title { + margin: 0 0 14px; + font-size: 1.7rem; + font-weight: 760; + letter-spacing: -0.04em; + color: var(--text); +} + +.nebula-modal-body { + margin-bottom: 32px; + color: var(--text-dim); + line-height: 1.6; + font-size: 14px; +} + +.nebula-modal-footer { + display: flex; + justify-content: flex-end; + gap: 12px; +} + +.knowledge-article-head { + display: flex; + align-items: center; + gap: 12px; + margin-bottom: 12px; + flex-wrap: wrap; +} + +.knowledge-article-head .nebula-modal-title { + margin: 0; +} + +.knowledge-article-meta { + display: flex; + align-items: center; + gap: 10px; + margin-bottom: 20px; + color: var(--text-faint); + font-size: 13px; + flex-wrap: wrap; +} + +.knowledge-article-body { + margin-bottom: 28px; + color: var(--text-dim); + line-height: 1.8; + font-size: 14px; + word-break: break-word; +} + +.knowledge-article-empty { + margin: 0 0 28px; + color: var(--text-faint); +} + +@keyframes nebula-fade-in { + from { opacity: 0; } + to { opacity: 1; } +} + +@keyframes nebula-pop-in { + from { transform: scale(0.92) translateY(12px); opacity: 0; } + to { transform: scale(1) translateY(0); opacity: 1; } +} + +:root[data-theme-mode="light"] .nebula-modal-overlay { + background: rgba(238, 244, 251, 0.45); +} + +:root[data-theme-mode="light"] .message-banner { + background: rgba(255, 255, 255, 0.55); + border: 1px solid rgba(20, 34, 53, 0.12); + box-shadow: 0 16px 48px rgba(39, 61, 92, 0.12); + backdrop-filter: blur(16px); + color: var(--text); +} + +:root[data-theme-mode="light"] .message-banner.success { + background: #f0fff4; + border-color: #65f0b7; + color: #0b7a4b; +} + +:root[data-theme-mode="light"] .message-banner.error { + background: #fff5f7; + border-color: #ff8db5; + color: #a31d44; +} + +/* Toast Notifications */ +.nebula-toast-container { + position: fixed; + top: 32px; + right: 32px; + z-index: 11000; + display: flex; + flex-direction: column; + gap: 12px; + pointer-events: none; +} + +.message-banner { + pointer-events: auto; + border-radius: var(--radius-md); + padding: 16px 24px; + background: rgba(14, 25, 41, 0.5); + border: 1px solid rgba(255, 255, 255, 0.08); + box-shadow: 0 12px 40px rgba(0, 0, 0, 0.24); + backdrop-filter: blur(16px); + min-width: 280px; + max-width: 420px; + animation: nebula-toast-slide-in 400ms cubic-bezier(0.23, 1, 0.32, 1) forwards; + display: flex; + align-items: center; + gap: 12px; +} + +@keyframes nebula-toast-slide-in { + from { transform: translateX(60px); opacity: 0; } + to { transform: translateX(0); opacity: 1; } +} + diff --git a/frontend/theme/Nebula/assets/app.js b/frontend/theme/Nebula/assets/app.js new file mode 100644 index 0000000..9b800b9 --- /dev/null +++ b/frontend/theme/Nebula/assets/app.js @@ -0,0 +1,2911 @@ +(function () { + "use strict"; + + var theme = window.NEBULA_THEME || {}; + var app = document.getElementById("app"); + var loader = document.getElementById("nebula-loader"); + var themeMediaQuery = getThemeMediaQuery(); + + if (!app) { + return; + } + + var state = { + mode: "login", + loading: true, + message: "", + messageType: "", + themePreference: getStoredThemePreference(), + themeMode: "dark", + uplinkMbps: null, + currentRoute: getCurrentRoute(), + nodePage: 1, + localIp: null, + reportedIps: [], + authToken: getStoredToken(), + user: null, + subscribe: null, + stats: null, + knowledge: [], + tickets: [], + selectedTicketId: null, + selectedTicket: null, + servers: [], + ipv6AuthToken: getStoredIpv6Token(), + ipv6User: null, + ipv6Subscribe: null, + ipv6Servers: [], + sessionOverview: null, + ipv6SessionOverview: null, + realNameVerification: null, + appConfig: null, + isSidebarOpen: false, + serverSearch: "", + cachedSubNodes: null, + ipv6CachedSubNodes: null + }; + + init(); + + async function init() { + applyThemeMode(); + applyCustomBackground(); + loadUplinkMetric(); + window.setInterval(loadUplinkMetric, 5000); + + try { + var verify = getVerifyToken(); + if (verify) { + var verifyResponse = await fetchJson("/api/v1/passport/auth/token2Login?verify=" + encodeURIComponent(verify), { + method: "GET", + auth: false + }); + var verifyPayload = unwrap(verifyResponse); + if (verifyPayload && verifyPayload.auth_data) { + saveToken(verifyPayload.auth_data); + clearVerifyToken(); + state.authToken = getStoredToken(); + } + } + } catch (error) { + showMessage(error.message || "Quick login failed", "error"); + } + + if (state.authToken) { + var loaded = await loadDashboard(); + if (!loaded) { + state.loading = false; + } + } else { + state.loading = false; + } + + render(); + app.addEventListener("click", onClick); + app.addEventListener("input", onInput); + app.addEventListener("submit", onSubmit); + window.addEventListener("hashchange", onRouteChange); + bindSystemThemeListener(); + } + + async function loadDashboard(silent) { + if (!state.authToken) { + state.loading = false; + return false; + } + + state.loading = !silent; + if (!silent) { + render(); + } + + try { + var results = await Promise.all([ + fetchJson("/api/v1/user/info", { method: "GET" }), + fetchJson("/api/v1/user/getSubscribe", { method: "GET" }), + fetchJson("/api/v1/user/getStat", { method: "GET" }), + fetchJson("/api/v1/user/server/fetch", { method: "GET" }), + fetchJson("/api/v1/user/knowledge/fetch", { method: "GET" }), + fetchJson("/api/v1/user/ticket/fetch", { method: "GET" }), + fetchSessionOverview(), + fetchJson("/api/v1/user/comm/config", { method: "GET" }), + fetchRealNameVerificationStatus() + ]); + + state.user = unwrap(results[0]); + state.subscribe = unwrap(results[1]); + state.stats = unwrap(results[2]); + state.servers = unwrap(results[3]) || []; + state.knowledge = unwrap(results[4]) || []; + state.tickets = unwrap(results[5]) || []; + state.sessionOverview = results[6]; + state.appConfig = unwrap(results[7]) || {}; + state.realNameVerification = results[8] || null; + + if (state.ipv6AuthToken) { + try { + var ipv6Results = await Promise.all([ + fetchJson("/api/v1/user/info", { method: "GET", ipv6: true }), + fetchJson("/api/v1/user/getSubscribe", { method: "GET", ipv6: true }), + fetchJson("/api/v1/user/server/fetch", { method: "GET", ipv6: true }), + fetchSessionOverview(true) + ]); + state.ipv6User = unwrap(ipv6Results[0]); + state.ipv6Subscribe = unwrap(ipv6Results[1]); + state.ipv6Servers = unwrap(ipv6Results[2]) || []; + state.ipv6SessionOverview = ipv6Results[3]; + } catch (e) { + if (handleIpv6AuthFailure(e)) { + console.warn("Nebula: cleared stale IPv6 session after unauthorized response"); + } + console.error("Failed to load IPv6 dashboard data", e); + } + } + + state.nodePage = 1; + state.loading = false; + return true; + } catch (error) { + state.loading = false; + if (error.status === 401 || error.status === 403) { + var hadSession = Boolean(state.authToken); + clearToken(); + resetDashboard(); + showMessage(hadSession ? "Session expired. Please sign in again." : "", hadSession ? "error" : ""); + return false; + } + showMessage(error.message || "Failed to load dashboard", "error"); + return false; + } + } + + async function fetchSessionOverview(isIpv6) { + try { + var response = await fetchJson("/api/v1/user/user-online-devices/get-ip", { method: "GET", ipv6: !!isIpv6 }); + var ipPayload = unwrap(response) || {}; + + var reportedIps = ipPayload.ips || []; + if (!isIpv6) { + state.reportedIps = reportedIps; + } + + var overview = ipPayload.session_overview || { sessions: [], online_ips: [] }; + if (!isIpv6) { + overview.online_ips = state.reportedIps; + } + + return buildSessionOverview(overview.sessions, overview, !!isIpv6); + } catch (error) { + if (isIpv6 && handleIpv6AuthFailure(error)) { + return null; + } + console.error("Nebula: Failed to synchronize online status", error); + // Fallback for sessions if plugin fails + try { + var sessionsFallback = unwrap(await fetchJson("/api/v1/user/getActiveSession", { method: "GET", ipv6: !!isIpv6 })) || []; + return buildSessionOverview(sessionsFallback, {}, !!isIpv6); + } catch (e) { + if (isIpv6 && handleIpv6AuthFailure(e)) { + return null; + } + return buildSessionOverview([], {}, !!isIpv6); + } + } + } + + async function fetchRealNameVerificationStatus() { + try { + var response = await fetchJson("/api/v1/user/real-name-verification/status", { method: "GET" }); + var payload = unwrap(response) || {}; + return Object.assign({ + enabled: true, + status: "unverified", + status_label: "未认证", + can_submit: true, + real_name: "", + identity_no_masked: "", + notice: "", + reject_reason: "", + submitted_at: null, + reviewed_at: null + }, payload); + } catch (error) { + return { + enabled: false, + status: "unavailable", + status_label: "Unavailable", + can_submit: false, + real_name: "", + identity_no_masked: "", + notice: "", + reject_reason: "", + submitted_at: null, + reviewed_at: null + }; + } + } + + async function fetchJson(url, options) { + options = options || {}; + var headers = { + "Content-Type": "application/json", + "X-Requested-With": "XMLHttpRequest" + }; + + if (options.auth !== false) { + var token = options.ipv6 ? (state.ipv6AuthToken || getStoredIpv6Token()) : (state.authToken || getStoredToken()); + if (token) { + headers.Authorization = token; + } + } + + var response = await fetch(url, { + method: options.method || "GET", + headers: headers, + credentials: "same-origin", + body: options.body ? JSON.stringify(options.body) : undefined + }); + + var payload = null; + try { + payload = await response.json(); + } catch (error) { + payload = null; + } + + if (!response.ok) { + var message = payload && (payload.message || payload.error) || "Request failed"; + var err = new Error(message); + err.status = response.status; + throw err; + } + + return payload; + } + + function unwrap(payload) { + if (!payload) { + return null; + } + if (typeof payload.data !== "undefined") { + return payload.data; + } + if (typeof payload.total !== "undefined" && Array.isArray(payload.data)) { + return payload.data; + } + return payload; + } + + function onClick(event) { + if (state.isSidebarOpen) { + var sidebar = event.target.closest(".dashboard-sidebar"); + var toggleBtn = event.target.closest("[data-action='toggle-sidebar']"); + if (!sidebar && !toggleBtn) { + state.isSidebarOpen = false; + document.documentElement.dataset.sidebarOpen = "false"; + var sidebarEl = document.querySelector(".dashboard-sidebar"); + var overlayEl = document.querySelector(".sidebar-overlay"); + if (sidebarEl) sidebarEl.classList.remove("is-open"); + if (overlayEl) overlayEl.classList.remove("is-visible"); + } + } + + var actionEl = event.target.closest("[data-action]"); + if (!actionEl) return; + + var action = actionEl.getAttribute("data-action"); + + if (action === "switch-mode") { + state.mode = actionEl.getAttribute("data-mode") || "login"; + showMessage("", ""); + render(); + return; + } + + if (action === "navigate") { + state.isSidebarOpen = false; + document.documentElement.dataset.sidebarOpen = "false"; + setCurrentRoute(actionEl.getAttribute("data-route") || "overview"); + return; + } + + if (action === "toggle-sidebar") { + state.isSidebarOpen = !state.isSidebarOpen; + document.documentElement.dataset.sidebarOpen = String(state.isSidebarOpen); + var sidebar = document.querySelector(".dashboard-sidebar"); + var overlay = document.querySelector(".sidebar-overlay"); + if (sidebar) sidebar.classList.toggle("is-open", state.isSidebarOpen); + if (overlay) overlay.classList.toggle("is-visible", state.isSidebarOpen); + return; + } + + if (action === "close-sidebar") { + state.isSidebarOpen = false; + document.documentElement.dataset.sidebarOpen = "false"; + var sidebar = document.querySelector(".dashboard-sidebar"); + var overlay = document.querySelector(".sidebar-overlay"); + if (sidebar) sidebar.classList.remove("is-open"); + if (overlay) overlay.classList.remove("is-visible"); + return; + } + + if (action === "toggle-theme-mode") { + toggleThemeMode(); + return; + } + + if (action === "change-node-page") { + setNodePage(Number(actionEl.getAttribute("data-page") || 1)); + return; + } + + if (action === "logout") { + clearToken(); + clearIpv6Token(); + resetDashboard(); + render(); + return; + } + + if (action === "refresh-dashboard") { + loadDashboard(true).then(render); + return; + } + + if (action === "copy-subscribe") { + copyText((state.subscribe && state.subscribe.subscribe_url) || ""); + return; + } + + if (action === "copy-ipv6-subscribe") { + copyText((state.ipv6Subscribe && state.ipv6Subscribe.subscribe_url) || ""); + return; + } + + if (action === "copy-text") { + copyText(actionEl.getAttribute("data-value") || ""); + return; + } + + if (action === "reset-security") { + handleResetSecurity(actionEl); + return; + } + + if (action === "reset-ipv6-security") { + handleResetSecurity(actionEl, true); + return; + } + + if (action === "remove-session") { + handleRemoveSession(actionEl); + return; + } + + if (action === "remove-other-sessions") { + handleRemoveOtherSessions(actionEl); + return; + } + + if (action === "open-ticket-detail") { + handleOpenTicketDetail(actionEl); + return; + } + + if (action === "open-knowledge-article") { + handleOpenKnowledgeArticle(actionEl); + return; + } + + if (action === "close-ticket-detail") { + state.selectedTicketId = null; + state.selectedTicket = null; + render(); + } + + if (action === "enable-ipv6") { + handleEnableIpv6(actionEl); + return; + } + + if (action === "sync-ipv6-password") { + handleSyncIpv6Password(actionEl); + return; + } + + if (action === "copy-node-info") { + handleCopyNodeInfo(actionEl.getAttribute("data-node-id")); + return; + } + + if (action === "set-mode") { + state.mode = actionEl.getAttribute("data-mode") || "login"; + render(); + return; + } + + if (action === "send-reset-code") { + var form = actionEl.closest("form"); + var email = form.querySelector("[name='email']").value; + if (!email) { + showMessage("请输入邮箱地址", "warning"); + return; + } + actionEl.disabled = true; + fetchJson("/api/v1/passport/comm/sendEmailVerify", { + method: "POST", + auth: false, + body: { email: email } + }).then(function () { + showMessage("验证码已发送,请检查您的邮箱", "success"); + startCountdown(actionEl, 60); + }).catch(function (error) { + showMessage(error.message || "获取验证码失败", "error"); + actionEl.disabled = false; + }); + return; + } + } + + function startCountdown(button, seconds) { + var originalText = "获取验证码"; + button.disabled = true; + var current = seconds; + var timer = setInterval(function () { + if (current <= 0) { + clearInterval(timer); + button.innerText = originalText; + button.disabled = false; + return; + } + button.innerText = current + "s"; + current--; + }, 1000); + } + + async function handleCopyNodeInfo(nodeId) { + var server = (state.servers || []).concat(state.ipv6Servers || []).find(function (s) { + return String(s.id) === String(nodeId); + }); + if (!server) return; + + var isIpv6Node = (state.ipv6Servers || []).some(function (s) { + return String(s.id) === String(nodeId); + }); + + var sub = isIpv6Node ? state.ipv6Subscribe : state.subscribe; + var subUrl = (sub && sub.subscribe_url) || ""; + var targetName = (server.name || "").trim(); + var cacheKey = isIpv6Node ? "ipv6CachedSubNodes" : "cachedSubNodes"; + var storageKey = isIpv6Node ? "__nebula_ipv6_sub_content__" : "__nebula_sub_content__"; + + // Try to get link from subscription if possible + if (subUrl) { + try { + if (!state[cacheKey]) { + // Check if we have a manually pasted sub content in sessionStorage + var savedSub = window.sessionStorage.getItem(storageKey); + if (savedSub) { + console.log("Nebula: Using session-cached " + (isIpv6Node ? "IPv6 " : "") + "subscription content"); + state[cacheKey] = parseSubscriptionToLines(savedSub); + } else { + console.log("Nebula: Synchronizing " + (isIpv6Node ? "IPv6 " : "") + "subscription metadata..."); + state[cacheKey] = await fetchSubscriptionNodes(subUrl); + } + } + + if (state[cacheKey] && state[cacheKey].length) { + var link = findNodeLinkByName(state[cacheKey], targetName); + if (link) { + var clashYaml = linkToClash(link); + showNodeInfoModal(server, clashYaml, link); + return; + } + } + } catch (error) { + console.error("Nebula: Failed to parse subscription", error); + // If it looks like a CORS error (TypeError: Failed to fetch) + if (error instanceof TypeError) { + showCorsHelpModal(subUrl, nodeId, isIpv6Node); + return; + } + } + } + + // Fallback to text info if link not found or subscription failed + var tags = normalizeServerTags(server.tags); + var info = [ + "节点名称: " + (server.name || "未命名节点"), + "节点类型: " + (server.type || "未知"), + "节点倍率: " + (server.rate || 1) + "x", + "节点状态: " + (server.is_online ? "在线" : "离线"), + tags.length ? "节点标签: " + tags.join(", ") : "" + ].filter(Boolean).join("\n"); + + copyText(info, "已复制节点基本信息(订阅链接当前不可达)"); + } + + function showNodeInfoModal(server, clashYaml, standardLink) { + var overlay = document.createElement("div"); + overlay.className = "nebula-modal-overlay"; + + var modal = document.createElement("div"); + modal.className = "nebula-modal stack"; + modal.style.maxWidth = "600px"; + modal.style.width = "min(540px, 100%)"; + + modal.innerHTML = [ + '

' + escapeHtml(server.name || "节点详情") + '

', + '
', + '
' + + '节点类型' + + '' + escapeHtml(server.type || "unknown").toUpperCase() + '' + + '
', + '
' + + '结算倍率' + + '' + escapeHtml(String(server.rate || 1)) + 'x' + + '
', + '
', + '
', + '
' + escapeHtml(maskClashYaml(clashYaml)) + '
', + '
', + '' + ].join(""); + + document.body.appendChild(overlay); + overlay.appendChild(modal); + + modal.querySelector("#node-info-close").onclick = function() { + document.body.removeChild(overlay); + }; + + modal.querySelector("#node-info-copy-link").onclick = function() { + copyText(standardLink, "标准配置链接已复制"); + document.body.removeChild(overlay); + }; + + modal.querySelector("#node-info-copy-clash").onclick = function() { + copyText(clashYaml, "Clash 配置已复制"); + document.body.removeChild(overlay); + }; + + overlay.onclick = function(e) { + if (e.target === overlay) document.body.removeChild(overlay); + }; + } + + function showCorsHelpModal(subUrl, nodeId, isIpv6) { + var title = (isIpv6 ? "IPv6 " : "") + "同步订阅数据"; + showNebulaModal({ + title: title, + content: "由于浏览器跨域 (CORS) 策略限制,无法直接从网页获取节点配置链接。请手动同步一次订阅:\n\n1. 点击下方按钮在浏览器中打开订阅链接\n2. 复制网页显示的全部内容\n3. 返回此处点击“去粘贴”并存入系统", + confirmText: "打开订阅链接", + cancelText: "我要手动粘贴", + onConfirm: function() { + window.open(subUrl, "_blank"); + showMessage("订阅已在新标签页打开,请复制其内容", "info"); + }, + onCancel: function() { + showManualPasteModal(nodeId, isIpv6); + } + }); + } + + function showManualPasteModal(nodeId, isIpv6) { + var overlay = document.createElement("div"); + overlay.className = "nebula-modal-overlay"; + + var modal = document.createElement("div"); + modal.className = "nebula-modal stack"; + modal.style.maxWidth = "550px"; + + var storageKey = isIpv6 ? "__nebula_ipv6_sub_content__" : "__nebula_sub_content__"; + var cacheKey = isIpv6 ? "ipv6CachedSubNodes" : "cachedSubNodes"; + + modal.innerHTML = [ + '

粘贴 ' + (isIpv6 ? "IPv6 " : "") + '订阅内容

', + '

请将你刚才复制的订阅源代码粘贴在下方。我们将为您解析并保存。

', + '', + '' + ].join(""); + + document.body.appendChild(overlay); + overlay.appendChild(modal); + + modal.querySelector("#nebula-paste-cancel").onclick = function() { + document.body.removeChild(overlay); + }; + + modal.querySelector("#nebula-paste-save").onclick = function() { + var content = modal.querySelector("#nebula-sub-paste").value.trim(); + if (content) { + window.sessionStorage.setItem(storageKey, content); + state[cacheKey] = parseSubscriptionToLines(content); + document.body.removeChild(overlay); + showMessage("订阅数据同步成功!", "success"); + if (nodeId) handleCopyNodeInfo(nodeId); + } else { + showMessage("内容不能为空", "error"); + } + }; + } + + async function fetchSubscriptionNodes(url) { + try { + var response = await fetch(url); + if (!response.ok) throw new Error("Network response was not ok"); + var text = await response.text(); + return parseSubscriptionToLines(text); + } catch (e) { + throw e; // Reraise to be caught by handleCopyNodeInfo for CORS check + } + } + + function parseSubscriptionToLines(text) { + var decoded = ""; + try { + decoded = utf8Base64Decode(text.trim()); + } catch (e) { + decoded = text; + } + return decoded.split(/\r?\n/).map(function(s) { return s.trim(); }).filter(Boolean); + } + + function findNodeLinkByName(links, name) { + if (!name) return null; + var target = name.trim(); + + console.log("Nebula: Searching for node '" + name + "' among " + links.length + " links (Strict Match)"); + + for (var i = 0; i < links.length; i++) { + var link = links[i].trim(); + var remark = ""; + + if (link.indexOf("#") !== -1) { + var parts = link.split("#"); + var rawRemark = parts[parts.length - 1]; + try { + remark = decodeURIComponent(rawRemark.replace(/\+/g, "%20")); + } catch (e) { + remark = rawRemark; + } + } else if (link.indexOf("vmess://") === 0) { + try { + var jsonStr = utf8Base64Decode(link.slice(8)); + var json = JSON.parse(jsonStr); + remark = json.ps || ""; + } catch (e) {} + } else if (link.indexOf("name:") !== -1) { + var yamlMatch = link.match(/name:\s*["']?([^"']+)["']?/); + if (yamlMatch) remark = yamlMatch[1]; + } + + // Strict exact match after trimming + if ((remark || "").trim() === target) { + return link; + } + } + + console.warn("Nebula: No exact match found for node '" + name + "'"); + return null; + } + + function maskClashYaml(yaml) { + if (!yaml) return ""; + return yaml + .replace(/server:\s*.+/g, "server: **********") + .replace(/password:\s*.+/g, "password: **********") + .replace(/uuid:\s*.+/g, "uuid: **********") + .replace(/public-key:\s*.+/g, "public-key: **********"); + } + + function linkToClash(link) { + if (!link) return ""; + + var remark = ""; + if (link.indexOf("#") !== -1) { + var parts = link.split("#"); + try { + remark = decodeURIComponent(parts[parts.length - 1].replace(/\+/g, "%20")); + } catch (e) { + remark = parts[parts.length - 1]; + } + } + + // Shadowsocks + if (link.indexOf("ss://") === 0) { + var body = link.split("#")[0].slice(5); + var parts = body.split("@"); + if (parts.length < 2) return link; + + var userinfo = parts[0]; + var serverinfo = parts[1]; + var decodedUser = ""; + try { + decodedUser = atob(userinfo.replace(/-/g, "+").replace(/_/g, "/")); + } catch (e) { + decodedUser = userinfo; + } + + var userParts = decodedUser.split(":"); + var serverParts = serverinfo.split(":"); + + return [ + "- name: \"" + (remark || "SS Node") + "\"", + " type: ss", + " server: " + serverParts[0], + " port: " + (serverParts[1] || 443), + " cipher: " + (userParts[0] || "aes-256-gcm"), + " password: " + (userParts[1] || ""), + " udp: true" + ].join("\n"); + } + + // VMess + if (link.indexOf("vmess://") === 0) { + try { + var json = JSON.parse(utf8Base64Decode(link.slice(8))); + var yaml = [ + "- name: \"" + (json.ps || remark || "VMess Node") + "\"", + " type: vmess", + " server: " + json.add, + " port: " + (json.port || 443), + " uuid: " + json.id, + " alterId: " + (json.aid || 0), + " cipher: auto", + " udp: true", + " tls: " + (json.tls === "tls" ? "true" : "false"), + " network: " + (json.net || "tcp"), + " servername: " + (json.sni || json.host || "") + ]; + if (json.net === "ws") { + yaml.push(" ws-opts:"); + yaml.push(" path: " + (json.path || "/")); + if (json.host) yaml.push(" headers:"); + if (json.host) yaml.push(" Host: " + json.host); + } + if (json.net === "grpc") { + yaml.push(" grpc-opts:"); + yaml.push(" grpc-service-name: " + (json.path || "")); + } + return yaml.join("\n"); + } catch (e) { + return link; + } + } + + // VLESS + if (link.indexOf("vless://") === 0) { + var body = link.split("#")[0].slice(8); + var main = body.split("?")[0]; + var query = body.split("?")[1] || ""; + var parts = main.split("@"); + var uuid = parts[0]; + var serverParts = (parts[1] || "").split(":"); + + var params = {}; + query.split("&").forEach(function (pair) { + var p = pair.split("="); + params[p[0]] = decodeURIComponent(p[1] || ""); + }); + + var yaml = [ + "- name: \"" + (remark || "VLESS Node") + "\"", + " type: vless", + " server: " + serverParts[0], + " port: " + (parseInt(serverParts[1]) || 443), + " uuid: " + uuid, + " udp: true", + " tls: " + (params.security !== "none" ? "true" : "false"), + " skip-cert-verify: true" + ]; + + if (params.sni) yaml.push(" servername: " + params.sni); + if (params.type) yaml.push(" network: " + params.type); + if (params.flow) yaml.push(" flow: " + params.flow); + if (params.fp) yaml.push(" client-fingerprint: " + params.fp); + if (params.security === "reality") { + yaml.push(" reality-opts:"); + if (params.pbk) yaml.push(" public-key: " + params.pbk); + if (params.sid) yaml.push(" short-id: " + params.sid); + } + if (params.type === "ws") { + yaml.push(" ws-opts:"); + yaml.push(" path: " + (params.path || "/")); + if (params.host) yaml.push(" headers:"); + if (params.host) yaml.push(" Host: " + params.host); + } + if (params.type === "grpc") { + yaml.push(" grpc-opts:"); + yaml.push(" grpc-service-name: " + (params.serviceName || "")); + } + + return yaml.join("\n"); + } + + // Trojan + if (link.indexOf("trojan://") === 0) { + var body = link.split("#")[0].slice(9); + var main = body.split("?")[0]; + var query = body.split("?")[1] || ""; + var parts = main.split("@"); + var password = parts[0]; + var serverParts = (parts[1] || "").split(":"); + + var params = {}; + query.split("&").forEach(function (pair) { + var p = pair.split("="); + params[p[0]] = decodeURIComponent(p[1] || ""); + }); + + var yaml = [ + "- name: \"" + (remark || "Trojan Node") + "\"", + " type: trojan", + " server: " + serverParts[0], + " port: " + (parseInt(serverParts[1]) || 443), + " password: " + password, + " udp: true", + " sni: " + (params.sni || params.peer || ""), + " skip-cert-verify: true" + ]; + + if (params.type === "ws") { + yaml.push(" ws-opts:"); + yaml.push(" path: " + (params.path || "/")); + if (params.host) yaml.push(" headers:"); + if (params.host) yaml.push(" Host: " + params.host); + } + if (params.type === "grpc") { + yaml.push(" grpc-opts:"); + yaml.push(" grpc-service-name: " + (params.serviceName || "")); + } + + return yaml.join("\n"); + } + + return link; + } + + function utf8Base64Decode(str) { + try { + var b64 = str.trim().replace(/-/g, "+").replace(/_/g, "/"); + while (b64.length % 4 !== 0) b64 += "="; + + var binary = atob(b64); + try { + if (typeof TextDecoder !== "undefined") { + var bytes = new Uint8Array(binary.length); + for (var i = 0; i < binary.length; i++) { + bytes[i] = binary.charCodeAt(i); + } + return new TextDecoder("utf-8").decode(bytes); + } + + return decodeURIComponent(binary.split("").map(function (c) { + return "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2); + }).join("")); + } catch (e) { + return binary; + } + } catch (e) { + throw new Error("Invalid base64 content: " + e.message); + } + } + + function onInput(event) { + var target = event.target; + if (target.matches("[data-action='search-servers']")) { + state.serverSearch = target.value; + state.nodePage = 1; + render(); + + var input = document.querySelector("[data-action='search-servers']"); + if (input) { + input.focus(); + input.setSelectionRange(target.value.length, target.value.length); + } + } + } + + async function handleEnableIpv6(actionEl) { + actionEl.disabled = true; + try { + await fetchJson("/api/v1/user/user-add-ipv6-subscription/enable", { method: "POST" }); + showMessage("IPv6 订阅已开启,正在刷新...", "success"); + // Try to login to IPv6 account if possible, or just refresh dashboard + // Since we don't have the password here (state doesn't keep it), + // the user might need to sync password first or we assume it was synced during creation. + await loadDashboard(true); + render(); + } catch (error) { + showMessage(error.message || "开启失败", "error"); + } finally { + actionEl.disabled = false; + } + } + + async function handleSyncIpv6Password(actionEl) { + actionEl.disabled = true; + try { + await fetchJson("/api/v1/user/user-add-ipv6-subscription/sync-password", { method: "POST" }); + showMessage("密码已同步到 IPv6 账户", "success"); + } catch (error) { + showMessage(error.message || "同步失败", "error"); + } finally { + actionEl.disabled = false; + } + } + + async function loadUplinkMetric() { + if (state.authToken) { + return; + } + var baseUrl = getMetricsBaseUrl(); + if (!baseUrl) { + return; + } + try { + var response = await fetch(baseUrl + "/api/metrics/overview", { + method: "GET", + headers: { + "X-Requested-With": "XMLHttpRequest" + } + }); + var payload = await response.json(); + var network = (payload && payload.network) || {}; + var tx = Number(network.tx || 0); + var total = tx; + if (total > 0) { + state.uplinkMbps = (total * 8) / 1000000; + var el = document.getElementById("nebula-hero-metric-stack"); + if (el) { + el.innerHTML = renderUplinkMetricStack(); + } else if (!state.authToken || !state.user) { + render(); + } + } + } catch (error) { + state.uplinkMbps = null; + } + } + + function onSubmit(event) { + var form = event.target; + if (!form.matches("[data-form]")) { + return; + } + + event.preventDefault(); + var formType = form.getAttribute("data-form"); + var data = Object.fromEntries(new FormData(form).entries()); + var submitButton = form.querySelector("[type='submit']"); + + if (submitButton) { + submitButton.disabled = true; + } + + if (formType === "create-ticket") { + fetchJson("/api/v1/user/ticket/save", { + method: "POST", + body: { + subject: data.subject || "", + level: data.level || "0", + message: data.message || "" + } + }).then(function () { + showMessage("工单已创建", "success"); + state.selectedTicketId = null; + state.selectedTicket = null; + return loadDashboard(true); + }).then(render).catch(function (error) { + showMessage(error.message || "工单创建失败", "error"); + render(); + }).finally(function () { + if (submitButton) { + submitButton.disabled = false; + } + }); + return; + } + + if (formType === "real-name-verification") { + fetchJson("/api/v1/user/real-name-verification/submit", { + method: "POST", + body: { + real_name: data.real_name || "", + identity_no: data.identity_no || "" + } + }).then(function (response) { + var payload = unwrap(response) || {}; + var verification = payload.verification || payload; + state.realNameVerification = verification; + showMessage( + verification && verification.status === "approved" + ? "实名认证已通过。" + : "认证信息已提交,请等待审核。", + "success" + ); + return loadDashboard(true); + }).then(render).catch(function (error) { + showMessage(error.message || "认证提交失败", "error"); + render(); + }).finally(function () { + if (submitButton) { + submitButton.disabled = false; + } + }); + return; + } + + if (formType === "change-password") { + if (data.new_password !== data.confirm_password) { + showMessage("两次输入的新密码不一致", "error"); + if (submitButton) submitButton.disabled = false; + return; + } + fetchJson("/api/v1/user/changePassword", { + method: "POST", + body: { + old_password: data.old_password || "", + new_password: data.new_password || "" + } + }).then(function () { + showMessage("密码已修改,建议在 IPv6 节点同步新密码", "success"); + form.reset(); + }).catch(function (error) { + showMessage(error.message || "密码修改失败", "error"); + }).finally(function () { + if (submitButton) { + submitButton.disabled = false; + } + }); + return; + } + + if (formType === "forget-password") { + fetchJson("/api/v1/passport/auth/forget", { + method: "POST", + auth: false, + body: { + email: data.email, + email_code: data.email_code, + password: data.password + } + }).then(function () { + showMessage("密码已重置,请使用新密码登录", "success"); + state.mode = "login"; + render(); + }).catch(function (error) { + showMessage(error.message || "重置失败", "error"); + }).finally(function () { + if (submitButton) { + submitButton.disabled = false; + } + }); + return; + } + + fetchJson(formType === "register" ? "/api/v1/passport/auth/register" : "/api/v1/passport/auth/login", { + method: "POST", + auth: false, + body: data + }).then(function (response) { + var payload = unwrap(response); + if (!payload || !payload.auth_data) { + throw new Error("Authentication succeeded but token payload is missing"); + } + saveToken(payload.auth_data); + state.authToken = getStoredToken(); + + // Try IPv6 login/register if email/password available + if (data.email && data.password) { + var ipv6Email = data.email.replace("@", "-ipv6@"); + var ipv6Action = formType === "register" ? "/api/v1/passport/auth/register" : "/api/v1/passport/auth/login"; + + fetchJson(ipv6Action, { + method: "POST", + auth: false, + body: Object.assign({}, data, { email: ipv6Email }) + }).then(function (ipv6Response) { + var ipv6Payload = unwrap(ipv6Response); + if (ipv6Payload && ipv6Payload.auth_data) { + saveIpv6Token(ipv6Payload.auth_data); + state.ipv6AuthToken = getStoredIpv6Token(); + } + }).catch(function () { + // Ignore IPv6 errors as it might not be enabled yet or fail + }).finally(function() { + loadDashboard(true).then(render); + }); + } + + showMessage(formType === "register" ? "Account created" : "Signed in", "success"); + return loadDashboard(true); + }).then(render).catch(function (error) { + showMessage(error.message || "Unable to continue", "error"); + render(); + }).finally(function () { + if (submitButton) { + submitButton.disabled = false; + } + }); + } + + function handleResetSecurity(actionEl, isIpv6) { + showNebulaModal({ + title: "安全提醒", + content: "确定要重置订阅令牌吗?重置令牌后,原本的订阅地址将失效,你需要重新获取并配置订阅。", + confirmText: "确认重置", + onConfirm: function () { + actionEl.disabled = true; + fetchJson("/api/v1/user/resetSecurity", { method: "GET", ipv6: !!isIpv6 }).then(function (response) { + var subscribeUrl = unwrap(response); + var sub = isIpv6 ? state.ipv6Subscribe : state.subscribe; + if (sub && subscribeUrl) { + sub.subscribe_url = subscribeUrl; + } + showMessage((isIpv6 ? "IPv6 " : "") + "订阅令牌已重置", "success"); + render(); + }).catch(function (error) { + showMessage(error.message || "重置失败", "error"); + render(); + }).finally(function () { + actionEl.disabled = false; + }); + } + }); + } + + function handleRemoveSession(actionEl) { + var sessionId = actionEl.getAttribute("data-session-id"); + if (!sessionId) { + return; + } + + actionEl.disabled = true; + fetchJson("/api/v1/user/removeActiveSession", { + method: "POST", + body: { session_id: sessionId } + }).then(function () { + showMessage("Session revoked", "success"); + return loadDashboard(true); + }).then(render).catch(function (error) { + showMessage(error.message || "Unable to revoke session", "error"); + render(); + }).finally(function () { + actionEl.disabled = false; + }); + } + + function handleRemoveOtherSessions(actionEl) { + var sessions = ((state.sessionOverview && state.sessionOverview.sessions) || []).filter(function (session) { + return !session.is_current; + }); + + if (!sessions.length) { + showMessage("No other sessions to sign out.", "success"); + render(); + return; + } + + actionEl.disabled = true; + Promise.all(sessions.map(function (session) { + return fetchJson("/api/v1/user/removeActiveSession", { + method: "POST", + body: { session_id: session.id } + }); + })).then(function () { + showMessage("Signed out all other sessions.", "success"); + return loadDashboard(true); + }).then(render).catch(function (error) { + showMessage(error.message || "Unable to sign out other sessions", "error"); + render(); + }).finally(function () { + actionEl.disabled = false; + }); + } + + function handleOpenTicketDetail(actionEl) { + var ticketId = actionEl.getAttribute("data-ticket-id"); + if (!ticketId) { + return; + } + actionEl.disabled = true; + fetchJson("/api/v1/user/ticket/fetch?id=" + encodeURIComponent(ticketId), { method: "GET" }).then(function (response) { + state.selectedTicketId = ticketId; + state.selectedTicket = unwrap(response); + render(); + }).catch(function (error) { + showMessage(error.message || "工单详情加载失败", "error"); + render(); + }).finally(function () { + actionEl.disabled = false; + }); + } + + function handleOpenKnowledgeArticle(actionEl) { + var articleId = actionEl.getAttribute("data-article-id"); + if (!articleId) { + return; + } + + var article = findKnowledgeArticleById(articleId); + if (!article) { + showMessage("Knowledge article not found", "error"); + return; + } + + showKnowledgeArticleModal(article); + } + + var currentLayout = null; // "loading", "login", "dashboard" + + function render() { + if (state.loading) { + return; + } + + var isLoggedIn = !!(state.authToken && state.user); + var targetLayout = isLoggedIn ? "dashboard" : "login"; + + // If layout type changed (e.g. Login -> Dashboard), do a full shell render + if (currentLayout !== targetLayout) { + currentLayout = targetLayout; + app.innerHTML = isLoggedIn ? renderDashboard() : renderAuth(); + hideLoader(); + return; + } + + // If already in Dashboard, only update the content area and sidebar state + if (isLoggedIn) { + var usedTraffic = ((state.subscribe && state.subscribe.u) || 0) + ((state.subscribe && state.subscribe.d) || 0); + var totalTraffic = (state.subscribe && state.subscribe.transfer_enable) || 0; + var remainingTraffic = Math.max(totalTraffic - usedTraffic, 0); + var percent = totalTraffic > 0 ? Math.min(100, Math.round((usedTraffic / totalTraffic) * 100)) : 0; + var stats = Array.isArray(state.stats) ? state.stats : [0, 0, 0]; + var overview = state.sessionOverview || {}; + + var contentArea = document.querySelector(".dashboard-main"); + if (contentArea) { + contentArea.innerHTML = renderCurrentRoute(remainingTraffic, usedTraffic, totalTraffic, percent, stats, overview); + } + + var sidebarContainer = document.querySelector(".dashboard-shell"); + if (sidebarContainer) { + var sidebar = sidebarContainer.querySelector(".dashboard-sidebar"); + if (sidebar) { + sidebar.innerHTML = renderSidebar(remainingTraffic, usedTraffic, totalTraffic, percent, overview, true); + } + } + } else { + // For auth page, simple re-render is fine + app.innerHTML = renderAuth(); + } + + hideLoader(); + } + + function renderAuth() { + return [ + '
', + renderTopbar(false), + '
', + '
', + '
' + escapeHtml(theme.description || "") + "
", + '
' + renderUplinkMetricStack() + '
', + (theme.config && theme.config.slogan) ? '

' + escapeHtml(theme.config.slogan) + "

" : "", + "
", + '
', + (theme.config && (theme.config.isRegisterEnabled || state.mode === "forget-password")) ? [ + '
', + tabButton("login", "登录", state.mode === "login"), + (theme.config && theme.config.isRegisterEnabled) ? tabButton("register", "注册", state.mode === "register") : "", + tabButton("forget-password", "找回密码", state.mode === "forget-password"), + "
" + ].join("") : [ + '
', + tabButton("login", "登录", state.mode === "login"), + tabButton("forget-password", "找回密码", state.mode === "forget-password"), + "
" + ].join(""), + renderAuthPanelHeading(), + renderAuthForm(), + "
", + "
", + renderRecordFooter(), + "
" + ].join(""); + } + + function renderDashboard() { + var usedTraffic = ((state.subscribe && state.subscribe.u) || 0) + ((state.subscribe && state.subscribe.d) || 0); + var totalTraffic = (state.subscribe && state.subscribe.transfer_enable) || 0; + var remainingTraffic = Math.max(totalTraffic - usedTraffic, 0); + var percent = totalTraffic > 0 ? Math.min(100, Math.round((usedTraffic / totalTraffic) * 100)) : 0; + var stats = Array.isArray(state.stats) ? state.stats : [0, 0, 0]; + var overview = state.sessionOverview || {}; + + return renderDashboardByRoute(remainingTraffic, usedTraffic, totalTraffic, percent, stats, overview); + } + + function renderTopbar(isLoggedIn) { + return [ + '
', + '
', + isLoggedIn ? '' : '', + renderBrandMark(), + '

' + escapeHtml(theme.title || "Nebula") + "

", + "
", + '
', + renderThemeToggle(), + isLoggedIn + ? '' + : '', + "
", + "
" + ].join(""); + } + + function renderDashboardByRoute(remainingTraffic, usedTraffic, totalTraffic, percent, stats, overview) { + return [ + '
', + renderTopbar(true), + '', + '
', + renderSidebar(remainingTraffic, usedTraffic, totalTraffic, percent, overview), + '
', + renderCurrentRoute(remainingTraffic, usedTraffic, totalTraffic, percent, stats, overview), + '
', + '
', + renderRecordFooter(), + '
' + ].join(""); + } + + function renderCurrentRoute(remainingTraffic, usedTraffic, totalTraffic, percent, stats, overview) { + if (state.currentRoute === "access-history") { + return [ + '
', + renderSessionSection(overview.sessions || []), + renderIpSection(overview.online_ips || []), + '
' + ].join(""); + } + if (state.currentRoute === "nodes") { + return [ + '
', + renderSubscribeSection("span-12 section-card--overview"), + renderServerSection(state.servers || []), + '
' + ].join(""); + } + if (state.currentRoute === "ipv6-nodes") { + return [ + '
', + renderIpv6SubscribeSection("span-12 section-card--overview"), + renderServerSection(state.ipv6Servers || [], true), + '
' + ].join(""); + } + if (state.currentRoute === "notices") { + return [ + '
', + renderKnowledgeSection(state.knowledge || []), + '
' + ].join(""); + } + if (state.currentRoute === "tickets") { + return [ + '
', + renderTicketComposer(), + renderTicketSection(state.tickets || []), + renderTicketDetailSection(state.selectedTicket), + '
' + ].join(""); + } + if (state.currentRoute === "real-name") { + return [ + '
', + renderRealNameVerificationPanel(), + '
' + ].join(""); + } + if (state.currentRoute === "security") { + return [ + '
', + renderSecuritySection(), + '
' + ].join(""); + } + + return [ + '
', + renderTrafficOverviewCard(remainingTraffic, usedTraffic, totalTraffic, percent, "span-12 section-card--overview"), + renderIpv6TrafficOverviewCard("span-12"), + renderAccessSnapshotCard(overview, "span-12 section-card--overview"), + renderRealNameVerificationOverviewCard("span-12 section-card--overview"), + '
' + ].join(""); + } + + function renderLiveUserSurface(remainingTraffic, usedTraffic, totalTraffic, percent, overview) { + return [ + '
', + '
', + 'Subscription', + "

" + escapeHtml(theme.title || "Nebula") + "

", + "

" + escapeHtml((state.subscribe && state.subscribe.plan && state.subscribe.plan.name) || "No active plan") + " · " + escapeHtml((state.user && state.user.email) || "") + "

", + '
', + dashboardStat(formatTraffic(remainingTraffic), "Remaining traffic"), + dashboardStat(String(overview.online_ip_count || 0), "Current online IPs"), + dashboardStat(String(overview.active_session_count || 0), "Stored sessions"), + '
', + '
', + '', + '
', + renderSubscribeSection(), + '
' + ].join(""); + } + + function renderAccessSnapshot(overview) { + return [ + '
', + renderAccessSnapshotCard(overview), + renderOpsSection(Array.isArray(state.stats) ? state.stats : [0, 0, 0], overview), + '
' + ].join(""); + } + + function renderAccessSnapshotCard(overview, extraClass) { + extraClass = extraClass || "span-7"; + var ipv6Overview = state.ipv6SessionOverview; + var limitDisplay = formatLimit(overview.device_limit) + (ipv6Overview ? " / " + formatLimit(ipv6Overview.device_limit) : ""); + return [ + '
', + '
访问概览

安全状态

', + '
', + kpiBox("设备数限制(IPv4/IPv6)", limitDisplay), + kpiBox("余额", formatMoney((state.user && state.user.balance) || 0, state.appConfig && state.appConfig.currency_symbol)), + kpiBox("到期时间", formatDate(state.subscribe && state.subscribe.expired_at)), + '
', + '
' + ].join(""); + } + + function renderIpv6TrafficOverviewCard(extraClass) { + if (!state.ipv6AuthToken || !state.ipv6Subscribe) { + return [ + '
', + '
IPv6 流量

IPv6 流量概览

', + '
IPv6 账号未启用或加载失败。
', + '
' + ].join(""); + } + + var usedTraffic = (state.ipv6Subscribe.u || 0) + (state.ipv6Subscribe.d || 0); + var totalTraffic = state.ipv6Subscribe.transfer_enable || 0; + var remainingTraffic = Math.max(totalTraffic - usedTraffic, 0); + var percent = totalTraffic > 0 ? Math.min(100, Math.round((usedTraffic / totalTraffic) * 100)) : 0; + + return renderTrafficOverviewCard(remainingTraffic, usedTraffic, totalTraffic, percent, extraClass || "span-6 section-card--overview", "IPv6 "); + } + + function renderTrafficOverviewCard(remainingTraffic, usedTraffic, totalTraffic, percent, extraClass, prefix) { + extraClass = extraClass || "span-5"; + prefix = prefix || ""; + return [ + '
', + '
流量

' + prefix + '用户流量概览

', + '
', + kpiBox("剩余", formatTraffic(remainingTraffic)), + kpiBox("已用", formatTraffic(usedTraffic)), + kpiBox("总量", formatTraffic(totalTraffic)), + kpiBox("使用率", String(percent) + "%"), + '
', + '
', + '
' + ].join(""); + } + + function renderSidebar(remainingTraffic, usedTraffic, totalTraffic, percent, overview, innerOnly) { + var content = [ + '' + ].join(""); + content = content.replace( + '', + sidebarLink("real-name", "\u5b9e\u540d\u8ba4\u8bc1", "\u63d0\u4ea4\u4e0e\u67e5\u770b\u5b9e\u540d\u5ba1\u6838\u72b6\u6001") + '' + ); + + if (innerOnly) return content; + + return [ + '' + ].join(""); + } + + function renderAuthForm() { + var isRegister = state.mode === "register"; + var isForget = state.mode === "forget-password"; + + if (isForget) { + return [ + '
', + '
', + '
', + '
', + '', + '', + '
', + '
', + '
', + '', + "
", + "
" + ].join(""); + } + + return [ + '
', + '
', + '
', + '
', + '", + "
", + "
" + ].join(""); + } + + function renderIpv6SubscribeSection(extraClass) { + return renderSubscribeSection(extraClass, true); + } + + function renderSubscribeSection(extraClass, isIpv6) { + extraClass = extraClass || "span-7"; + var sub = isIpv6 ? state.ipv6Subscribe : state.subscribe; + var user = isIpv6 ? state.ipv6User : state.user; + var prefix = isIpv6 ? "IPv6 " : ""; + var copyAction = isIpv6 ? "copy-ipv6-subscribe" : "copy-subscribe"; + var resetAction = isIpv6 ? "reset-ipv6-security" : "reset-security"; + + if (isIpv6 && !state.ipv6AuthToken) { + // If IPv6 not enabled, we still want to show the section with an "Enable" button + // But we need to make sure we don't crash on 'sub' or 'user' + } else if (isIpv6 && !sub) { + return ""; + } + + return [ + '
', + '
' + prefix + '订阅

连接工具

', + '', + isIpv6 ? '' : '', + "
", + '
', + !isIpv6 ? kpiBox("套餐", escapeHtml((sub && sub.plan && sub.plan.name) || "暂无套餐")) : "", + kpiBox("限速", formatSpeed(sub && sub.speed_limit)), + kpiBox("重置日", String((sub && sub.reset_day) || "-")), + !isIpv6 ? kpiBox("邮箱", '' + escapeHtml((user && user.email) || "-") + "") : "", + "
", + (isIpv6 && !state.ipv6AuthToken) ? '' : '', + "
" + ].join(""); + } + + function renderOpsSection(stats, overview) { + return [ + '
', + '
运营

当前工作台

', + '
', + kpiBox("待处理订单", String(stats[0] || 0)), + kpiBox("工单数量", String(stats[1] || 0)), + kpiBox("邀请用户", String(stats[2] || 0)), + kpiBox("在线设备", String(overview.online_device_count || 0)), + "
", + "
" + ].join(""); + } + + function renderIpSection(ips) { + return [ + '
', + '
当前 IP

在线入口

', + renderIpList(ips), + "
" + ].join(""); + } + + function renderSessionSection(sessions) { + return [ + '
', + '
会话

访问记录

', + renderSessions(sessions), + "
" + ].join(""); + } + + function renderServerSection(servers, isIpv6) { + return [ + '
', + '
', + '
' + (isIpv6 ? "IPv6 " : "") + '节点

' + (isIpv6 ? "IPv6 " : "") + '服务节点' + '

', + '
', + '', + '
', + '
', + renderServers(servers), + "
" + ].join(""); + } + + function renderKnowledgeSection(articles) { + if (!articles.length) { + return [ + '
', + '
知识库

知识内容

', + '
暂时没有内容。
', + "
" + ].join(""); + } + + // Group articles by category if possibly present, or just list them + return [ + '
', + '
知识库

全部文章

', + '
' + articles.map(function (article) { + return [ + '
', + '
', + "" + escapeHtml(article.title || "未命名文章") + "", + '' + escapeHtml(truncate(article.body || article.content || "", 160)) + "", + "
", + article.category ? '' + escapeHtml(article.category) + '' : formatDate(article.updated_at || article.created_at), + "
" + ].join(""); + }).join("") + "
", + "
" + ].join(""); + } + + function renderTicketSection(tickets) { + return [ + '
', + '
工单

工单列表

', + renderTickets(tickets), + "
" + ].join(""); + } + + function renderTicketComposer() { + return [ + '
', + '
新建

创建工单

', + '
', + '
', + '
', + '
', + '
', + '
', + "
" + ].join(""); + } + + function renderTicketDetailSection(ticket) { + if (!ticket) { + return ""; + } + return [ + '
', + '
详情

' + escapeHtml(ticket.subject || ("工单 #" + ticket.id)) + '

', + '
', + kpiBox("状态", renderTicketStatus(ticket.status)), + kpiBox("等级", getTicketLevelLabel(ticket.level)), + kpiBox("创建时间", formatDate(ticket.created_at)), + kpiBox("更新时间", formatDate(ticket.updated_at)), + '
', + renderTicketMessages(ticket.message || []), + "
" + ].join(""); + } + + + function renderIpList(ips) { + var list = ips.slice(); + if (!list.length) { + return '
当前还没有检测到在线 IP 记录。
'; + } + return '
' + list.map(function (ip) { + return '
在线设备 IP' + escapeHtml(ip) + '
'; + }).join("") + "
"; + } + + function renderSessions(sessions) { + if (!sessions.length) { + return '
当前没有会话记录。
'; + } + return '
' + sessions.map(function (session) { + var tag = session.is_current ? '当前' : '已保存'; + var revoke = session.is_current ? "" : ''; + return [ + '
', + '
', + "" + escapeHtml(session.name || ("Session #" + session.id)) + "", + '创建于 ' + formatDate(session.created_at) + " · 最近使用 " + formatDate(session.last_used_at) + (session.ip ? " · IP " + escapeHtml(session.ip) : "") + "", + "
", + '
' + tag + revoke + "
", + "
" + ].join(""); + }).join("") + "
"; + } + + function renderServers(servers) { + if (!servers.length) { + return '
当前没有可用节点。
'; + } + var sortedServers = servers.slice().sort(compareServers); + + var searchTerm = (state.serverSearch || "").toLowerCase(); + var filteredServers = sortedServers; + if (searchTerm) { + filteredServers = sortedServers.filter(function (server) { + var nameMatch = (server.name || "").toLowerCase().indexOf(searchTerm) !== -1; + var tags = normalizeServerTags(server.tags); + var tagMatch = tags.some(function (tag) { + return String(tag).toLowerCase().indexOf(searchTerm) !== -1; + }); + return nameMatch || tagMatch; + }); + } + + if (!filteredServers.length && servers.length > 0) { + return '
没有匹配的节点。
'; + } + + var pageSize = getNodePageSize(); + var totalPages = Math.max(1, Math.ceil(filteredServers.length / pageSize)); + if (state.nodePage > totalPages) { + state.nodePage = totalPages; + } + if (state.nodePage < 1) { + state.nodePage = 1; + } + var startIndex = (state.nodePage - 1) * pageSize; + var pagedServers = filteredServers.slice(startIndex, startIndex + pageSize); + + return '
' + pagedServers.map(function (server) { + var tags = normalizeServerTags(server.tags); + return [ + '
', + '
', + '
', + "" + escapeHtml(server.name || "未命名节点") + "", + '' + escapeHtml(server.type || "node") + "", + "
", + '', + "
", + '
', + nodeSpec("倍率", escapeHtml(String(server.rate || 1)) + "x"), + nodeSpec("状态", '' + (server.is_online ? "在线" : "离线") + ""), + "
", + tags.length ? '
' + tags.map(function (tag) { + return '' + escapeHtml(String(tag)) + ""; + }).join("") + "
" : "", + "
" + ].join(""); + }).join("") + '
' + renderNodePagination(totalPages) + "
"; + } + + function renderNotices(articles) { + if (!articles.length) { + return '
暂时没有内容。
'; + } + return '
' + articles.map(function (article) { + return [ + '
', + '
', + "" + escapeHtml(article.title || "公告") + "", + '' + escapeHtml(truncate(article.body || article.content || "", 160)) + "", + "
", + '' + formatDate(article.updated_at || article.created_at) + "", + "
" + ].join(""); + }).join("") + "
"; + } + + function renderTickets(tickets) { + if (!tickets.length) { + return '
当前没有工单记录。
'; + } + return '
' + tickets.map(function (ticket) { + return [ + '
', + '
', + "" + escapeHtml(ticket.subject || ("工单 #" + ticket.id)) + "", + '等级 ' + escapeHtml(getTicketLevelLabel(ticket.level)) + ' · 更新时间 ' + formatDate(ticket.updated_at || ticket.created_at) + "", + "
", + '
' + renderTicketStatus(ticket.status) + '
', + "
" + ].join(""); + }).join("") + "
"; + } + + function renderTicketMessages(messages) { + if (!messages.length) { + return '
当前工单还没有更多消息。
'; + } + return '
' + messages.map(function (message) { + return [ + '
', + '
', + '' + (message.is_me ? "我" : "客服") + "", + '' + formatDate(message.created_at) + "", + '' + escapeHtml(message.message || "") + "", + "
", + "
" + ].join(""); + }).join("") + "
"; + } + + function renderTicketStatus(status) { + var isOpen = Number(status) === 0; + return '' + (isOpen ? "处理中" : "已关闭") + ""; + } + + function getTicketLevelLabel(level) { + if (String(level) === "2") { + return "高"; + } + if (String(level) === "1") { + return "中"; + } + return "低"; + } + + function metricBox(value, label) { + return '
' + escapeHtml(value) + '' + escapeHtml(label) + "
"; + } + + function nodeSpec(label, value) { + return '
' + escapeHtml(label) + '' + value + "
"; + } + + function renderNodePagination(totalPages) { + if (totalPages <= 1) { + return ""; + } + return [ + '
', + '', + '第 ' + String(state.nodePage) + " / " + String(totalPages) + " 页", + '', + "
" + ].join(""); + } + + function getNodePageSize() { + var width = window.innerWidth || document.documentElement.clientWidth || 1280; + if (width <= 860) { + return 2; + } + if (width <= 1180) { + return 4; + } + return 6; + } + + function compareServers(left, right) { + var leftOnline = left && left.is_online ? 1 : 0; + var rightOnline = right && right.is_online ? 1 : 0; + if (leftOnline !== rightOnline) { + return rightOnline - leftOnline; + } + + var leftRate = toSortableNumber(left && left.rate, Number.POSITIVE_INFINITY); + var rightRate = toSortableNumber(right && right.rate, Number.POSITIVE_INFINITY); + if (leftRate !== rightRate) { + return leftRate - rightRate; + } + + var leftCheckedAt = toTimestamp(left && left.last_check_at) || 0; + var rightCheckedAt = toTimestamp(right && right.last_check_at) || 0; + if (leftCheckedAt !== rightCheckedAt) { + return rightCheckedAt - leftCheckedAt; + } + + return String((left && left.name) || "").localeCompare(String((right && right.name) || "")); + } + + function normalizeServerTags(tags) { + if (!tags) { + return []; + } + if (Array.isArray(tags)) { + return tags.filter(Boolean); + } + if (typeof tags === "string") { + var normalized = tags.trim(); + if (!normalized || normalized === "[]" || normalized === "null" || normalized === '""') { + return []; + } + if ((normalized.charAt(0) === "[" && normalized.charAt(normalized.length - 1) === "]") || + (normalized.charAt(0) === "{" && normalized.charAt(normalized.length - 1) === "}")) { + try { + var parsed = JSON.parse(normalized); + if (Array.isArray(parsed)) { + return parsed.map(function (tag) { + return String(tag).trim(); + }).filter(Boolean); + } + } catch (error) { + normalized = normalized.replace(/^\[/, "").replace(/\]$/, ""); + } + } + return normalized.split(/[|,\/]/).map(function (tag) { + return tag.trim().replace(/^["'\[]+|["'\]]+$/g, ""); + }).filter(Boolean); + } + return []; + } + + function toSortableNumber(value, fallback) { + var numeric = Number(value); + return Number.isFinite(numeric) ? numeric : fallback; + } + + function buildSessionOverview(list, extra, isIpv6) { + var ipMap = {}; + var deviceMap = {}; + var lastOnlineAt = null; + + var normalizedSessions = list.map(function (session) { + var lastUsedAt = toTimestamp(session.last_used_at); + var createdAt = toTimestamp(session.created_at); + var expiresAt = toTimestamp(session.expires_at); + var sessionName = session.name || session.device_name || session.user_agent || ("Session #" + (session.id || "")); + var sessionIp = firstNonEmpty([ + session.ip, + session.ip_address, + session.last_used_ip, + session.login_ip, + session.current_ip + ]); + var deviceKey = firstNonEmpty([ + session.device_name, + session.user_agent, + session.client_type, + session.os, + sessionName + ]) || ("device-" + Math.random().toString(36).slice(2)); + + if (sessionIp) { + ipMap[sessionIp] = true; + } + if (deviceKey) { + deviceMap[deviceKey] = true; + } + if (lastUsedAt && (!lastOnlineAt || lastUsedAt > lastOnlineAt)) { + lastOnlineAt = lastUsedAt; + } + + return { + id: session.id, + name: sessionName, + abilities: session.abilities, + ip: sessionIp, + user_agent: session.user_agent || "", + last_used_at: lastUsedAt, + created_at: createdAt, + expires_at: expiresAt, + is_current: Boolean(session.is_current || session.current || session.is_login || session.this_device) + }; + }); + + var sub = isIpv6 ? state.ipv6Subscribe : state.subscribe; + + return { + online_ip_count: Object.keys(ipMap).length, + online_ips: Object.keys(ipMap), + online_device_count: Object.keys(deviceMap).length, + device_limit: extra.device_limit || (sub ? (sub.device_limit || (sub.plan && sub.plan.device_limit) || null) : null), + last_online_at: toTimestamp(extra.last_online_at) || lastOnlineAt, + active_session_count: normalizedSessions.length, + sessions: normalizedSessions + }; + } + + function dashboardStat(value, label) { + return '
' + escapeHtml(value) + '' + escapeHtml(label) + "
"; + } + + function kpiBox(label, value) { + return '
' + label + '' + value + "
"; + } + + function sidebarLink(route, title, copy) { + return '"; + } + + function renderBrandMark() { + var logoUrl = getThemeLogo(); + if (logoUrl) { + return '' + escapeHtml(theme.title || '; + } + return ''; + } + + function renderThemeToggle() { + var isLight = state.themeMode === "light"; + return [ + '' + ].join(""); + } + + function renderRecordFooter() { + var records = []; + if (theme.config && theme.config.icpNo) { + records.push('' + escapeHtml(theme.config.icpNo) + ''); + } + if (theme.config && theme.config.psbNo) { + records.push('' + escapeHtml(theme.config.psbNo) + ''); + } + if (!records.length) { + return ""; + } + return '
' + records.join('|') + '
'; + } + + function renderAuthPanelHeading() { + return [ + '
', + '

Welcome To

', + '

' + escapeHtml(getAuthPanelTitle()) + "

", + '
' + ].join(""); + } + + function getAuthPanelTitle() { + if (state.mode === "register") { + return (theme.config && theme.config.registerTitle) || "Create your access."; + } + return (theme.config && theme.config.welcomeTarget) || (theme && theme.title) || "Your Space"; + } + + function onRouteChange() { + state.currentRoute = getCurrentRoute(); + if (state.authToken && state.user) { + render(); + } + } + + function setCurrentRoute(route) { + var nextRoute = isValidRoute(route) ? route : "overview"; + state.currentRoute = nextRoute; + window.location.hash = "#/" + nextRoute; + render(); + } + + function setNodePage(page) { + state.nodePage = page > 0 ? page : 1; + render(); + } + + function toggleThemeMode() { + state.themePreference = state.themeMode === "light" ? "dark" : "light"; + persistThemePreference(state.themePreference); + applyThemeMode(); + render(); + } + + function getCurrentRoute() { + var hash = String(window.location.hash || ""); + var route = hash.indexOf("#/") === 0 ? hash.slice(2) : ""; + return isValidRoute(route) ? route : "overview"; + } + + function getStoredThemePreference() { + var stored = ""; + try { + stored = window.localStorage.getItem("nebula_theme_preference") || ""; + } catch (error) { + stored = ""; + } + if (stored === "light" || stored === "dark" || stored === "system") { + return stored; + } + return getDefaultThemePreference(); + } + + function persistThemePreference(mode) { + try { + window.localStorage.setItem("nebula_theme_preference", mode); + } catch (error) { + return; + } + } + + function applyThemeMode() { + state.themeMode = resolveThemeMode(state.themePreference); + document.documentElement.dataset.themeMode = state.themeMode; + document.documentElement.dataset.themePreference = state.themePreference; + updateThemeColorMeta(); + } + + function getThemeToggleLabel() { + return state.themeMode === "light" ? "切换至黑夜模式" : "切换至白天模式"; + } + + function getRealNameVerificationState() { + return state.realNameVerification || { + enabled: false, + status: "unavailable", + status_label: "Unavailable", + can_submit: false, + real_name: "", + identity_no_masked: "", + reject_reason: "", + notice: "", + submitted_at: null, + reviewed_at: null + }; + } + + function getRealNameStatusTone(status) { + if (status === "approved") { + return "online"; + } + if (status === "rejected") { + return "offline"; + } + if (status === "pending") { + return "pending"; + } + return "neutral"; + } + + function renderRealNameStatusChip(status, label) { + return '' + escapeHtml(label || "未知状态") + ''; + } + + function renderRealNameVerificationOverviewCard(extraClass) { + var verification = getRealNameVerificationState(); + if (!verification.enabled) { + return ""; + } + + var submitted = verification.submitted_at ? formatDate(verification.submitted_at) : "-"; + var reviewed = verification.reviewed_at ? formatDate(verification.reviewed_at) : "-"; + + return [ + '
', + '
实名认证

认证信息

', + '
', + kpiBox("认证状态", escapeHtml(verification.status_label || "未认证")), + kpiBox("真实姓名", escapeHtml(verification.real_name || "-")), + kpiBox("证件号码", escapeHtml(verification.identity_no_masked || "-")), + '
', + verification.reviewed_at ? '' : "", + verification.reject_reason ? '
审核备注: ' + escapeHtml(verification.reject_reason) + '
' : "", + '
' + ].join(""); + } + + function renderRealNameVerificationPanel() { + var verification = getRealNameVerificationState(); + if (!verification.enabled) { + return ""; + } + + var detailBlocks = [ + '
', + '
当前状态' + renderRealNameStatusChip(verification.status, verification.status_label) + '
', + '
真实姓名' + escapeHtml(verification.real_name || "-") + '
', + '
身份证号' + escapeHtml(verification.identity_no_masked || "-") + '
', + '
提交时间' + escapeHtml(verification.submitted_at ? formatDate(verification.submitted_at) : "-") + '
', + '
' + ]; + + if (verification.reviewed_at) { + detailBlocks.push(''); + } + + if (verification.reject_reason) { + detailBlocks.push('
驳回原因: ' + escapeHtml(verification.reject_reason) + '
'); + } else if (verification.notice) { + detailBlocks.push('
提示: ' + escapeHtml(verification.notice) + '
'); + } + + if (!verification.can_submit) { + return [ + '
', + '
实名认证

认证信息

', + detailBlocks.join(""), + '
' + ].join(""); + } + + return [ + '
', + '
实名认证

提交认证

', + detailBlocks.join(""), + '
', + '
', + '
', + '
您的身份证号码将以加密形式存储,并在控制台中脱敏显示。
', + '
', + '
', + '
' + ].join(""); + } + + function renderSecuritySection() { + return [ + '
', + '
账户设置

修改密码

', + '
', + '
', + '
', + '
', + '
', + '', + '
', + '
', + "
", + '
', + '
安全操作

订阅令牌管理

', + '
', + '
IPv4 订阅
', + '
IPv6 订阅
', + '
', + '', + '
' + ].join(""); + } + + function getThemeLogo() { + var config = theme.config || {}; + if (state.themeMode === "light") { + return config.lightLogoUrl || config.darkLogoUrl || theme.logo || ""; + } + return config.darkLogoUrl || theme.logo || config.lightLogoUrl || ""; + } + + function updateThemeColorMeta() { + var meta = document.querySelector('meta[name="theme-color"]'); + if (meta) { + meta.setAttribute("content", state.themeMode === "light" ? "#eef4fb" : "#08101c"); + } + } + + function getDefaultThemePreference() { + var configMode = theme && theme.config ? theme.config.defaultThemeMode : ""; + if (configMode === "light" || configMode === "dark" || configMode === "system") { + return configMode; + } + return "system"; + } + + function resolveThemeMode(preference) { + if (preference === "light" || preference === "dark") { + return preference; + } + return isSystemDarkMode() ? "dark" : "light"; + } + + function bindSystemThemeListener() { + if (!themeMediaQuery) { + return; + } + var onThemeChange = function () { + if (state.themePreference === "system") { + applyThemeMode(); + render(); + } + }; + if (typeof themeMediaQuery.addEventListener === "function") { + themeMediaQuery.addEventListener("change", onThemeChange); + return; + } + if (typeof themeMediaQuery.addListener === "function") { + themeMediaQuery.addListener(onThemeChange); + } + } + + function getThemeMediaQuery() { + if (!window.matchMedia) { + return null; + } + return window.matchMedia("(prefers-color-scheme: dark)"); + } + + function isSystemDarkMode() { + return Boolean(themeMediaQuery && themeMediaQuery.matches); + } + + function getMetricsBaseUrl() { + var baseUrl = theme && theme.config ? theme.config.metricsBaseUrl : ""; + return String(baseUrl || "").replace(/\/+$/, ""); + } + + function getUplinkHeadline() { + if (!Number.isFinite(state.uplinkMbps)) { + return "Delivering -- Mbps"; + } + return "Delivering " + formatUplinkMbps(state.uplinkMbps) + " Mbps"; + } + + function renderUplinkMetricStack() { + return [ + '
Delivering
', + '
' + escapeHtml(getUplinkValueText()) + '
', + '
Uplink Bandwidth
' + ].join(""); + } + + function getUplinkValueText() { + if (!Number.isFinite(state.uplinkMbps)) { + return "-- Mbps"; + } + return formatUplinkMbps(state.uplinkMbps) + " Mbps"; + } + + function formatUplinkMbps(value) { + if (value >= 100) { + return String(Math.round(value)); + } + if (value >= 10) { + return value.toFixed(1); + } + return value.toFixed(2); + } + + function isValidRoute(route) { + return [ + "overview", + "access-history", + "nodes", + "ipv6-nodes", + "notices", + "tickets", + "real-name", + "security" + ].indexOf(route) !== -1; + } + + function getRouteTitle(route) { + if (route === "access-history") { + return "访问记录"; + } + if (route === "nodes") { + return "节点"; + } + if (route === "ipv6-nodes") { + return "IPv6 节点"; + } + if (route === "notices") { + return "知识库"; + } + if (route === "tickets") { + return "工单"; + } + if (route === "real-name") { + return "\u5b9e\u540d\u8ba4\u8bc1"; + } + if (route === "security") { + return "账号安全"; + } + return "总览"; + } + + function tabButton(mode, label, active) { + return '"; + } + + function getStoredToken() { + var candidates = []; + collectStorageValues(window.localStorage, ["access_token", "auth_data", "__nebula_auth_data__", "token", "auth_token"], candidates); + collectStorageValues(window.sessionStorage, ["access_token", "auth_data", "__nebula_auth_data__", "token", "auth_token"], candidates); + for (var i = 0; i < candidates.length; i += 1) { + var token = extractToken(candidates[i]); + if (token) { + return token; + } + } + return ""; + } + + function saveToken(token) { + window.localStorage.setItem("access_token", token); + window.localStorage.setItem("auth_data", token); + window.localStorage.setItem("__nebula_auth_data__", token); + window.sessionStorage.setItem("access_token", token); + window.sessionStorage.setItem("auth_data", token); + window.sessionStorage.setItem("__nebula_auth_data__", token); + } + + function clearToken() { + window.localStorage.removeItem("access_token"); + window.localStorage.removeItem("auth_data"); + window.localStorage.removeItem("__nebula_auth_data__"); + window.sessionStorage.removeItem("access_token"); + window.sessionStorage.removeItem("auth_data"); + window.sessionStorage.removeItem("__nebula_auth_data__"); + state.authToken = ""; + } + + function getStoredIpv6Token() { + var stored = ""; + try { + stored = window.localStorage.getItem("__nebula_ipv6_auth_data__") || ""; + } catch (e) { + stored = ""; + } + return stored; + } + + function saveIpv6Token(token) { + window.localStorage.setItem("__nebula_ipv6_auth_data__", token); + } + + function clearIpv6Token() { + window.localStorage.removeItem("__nebula_ipv6_auth_data__"); + state.ipv6AuthToken = ""; + } + + function resetIpv6DashboardState() { + clearIpv6Token(); + state.ipv6User = null; + state.ipv6Subscribe = null; + state.ipv6Servers = []; + state.ipv6SessionOverview = null; + state.ipv6CachedSubNodes = null; + window.sessionStorage.removeItem("__nebula_ipv6_sub_content__"); + } + + function handleIpv6AuthFailure(error) { + if (!error || (error.status !== 401 && error.status !== 403)) { + return false; + } + resetIpv6DashboardState(); + return true; + } + + function resetDashboard() { + state.user = null; + state.subscribe = null; + state.stats = null; + state.knowledge = []; + state.tickets = []; + state.selectedTicketId = null; + state.selectedTicket = null; + state.servers = []; + state.ipv6AuthToken = ""; + state.ipv6User = null; + state.ipv6Subscribe = null; + state.ipv6Servers = []; + state.sessionOverview = null; + state.ipv6SessionOverview = null; + state.realNameVerification = null; + state.appConfig = null; + state.cachedSubNodes = null; + state.ipv6CachedSubNodes = null; + state.loading = false; + } + + function applyCustomBackground() { + if (!theme.config || !theme.config.backgroundUrl) { + document.documentElement.style.removeProperty("--nebula-bg-image"); + return; + } + document.documentElement.style.setProperty("--nebula-bg-image", 'url("' + String(theme.config.backgroundUrl).replace(/"/g, '\\"') + '")'); + } + + function getVerifyToken() { + var url = new URL(window.location.href); + var directVerify = url.searchParams.get("verify"); + if (directVerify) { + return directVerify; + } + if (window.location.hash.indexOf("?") !== -1) { + return new URLSearchParams(window.location.hash.split("?")[1] || "").get("verify"); + } + return ""; + } + + function clearVerifyToken() { + var url = new URL(window.location.href); + url.searchParams.delete("verify"); + if (window.location.hash.indexOf("?") !== -1) { + window.history.replaceState({}, "", url.pathname + url.search + window.location.hash.split("?")[0]); + return; + } + window.history.replaceState({}, "", url.pathname + url.search); + } + + function showMessage(message, type) { + var container = document.getElementById("nebula-toasts"); + if (!container) return; + + if (!message) { + container.innerHTML = ""; + return; + } + + container.innerHTML = '
' + escapeHtml(message) + "
"; + + // Auto clear after 4s + if (state.messageTimeout) clearTimeout(state.messageTimeout); + state.messageTimeout = window.setTimeout(function() { + container.innerHTML = ""; + }, 4000); + } + + function hideLoader() { + if (!loader) { + return; + } + loader.classList.add("is-hidden"); + window.setTimeout(function () { + if (loader && loader.parentNode) { + loader.parentNode.removeChild(loader); + loader = null; + } + }, 350); + } + + function collectStorageValues(storage, keys, target) { + if (!storage) { + return; + } + for (var i = 0; i < keys.length; i += 1) { + pushCandidate(storage.getItem(keys[i]), target); + } + } + + function pushCandidate(value, target) { + if (value === null || typeof value === "undefined" || value === "") { + return; + } + target.push(value); + } + + function extractToken(value, depth) { + depth = depth || 0; + if (depth > 4 || value === null || typeof value === "undefined") { + return ""; + } + if (typeof value === "string") { + var trimmed = value.trim(); + if (!trimmed) { + return ""; + } + if (trimmed.indexOf("Bearer ") === 0) { + return trimmed; + } + if (/^[A-Za-z0-9\-_=]+\.[A-Za-z0-9\-_=]+(\.[A-Za-z0-9\-_.+/=]+)?$/.test(trimmed)) { + return "Bearer " + trimmed; + } + if (/^[A-Za-z0-9\-_.+/=]{24,}$/.test(trimmed) && trimmed.indexOf("{") === -1) { + return "Bearer " + trimmed; + } + if ((trimmed.charAt(0) === "{" && trimmed.charAt(trimmed.length - 1) === "}") || + (trimmed.charAt(0) === "[" && trimmed.charAt(trimmed.length - 1) === "]")) { + try { + return extractToken(JSON.parse(trimmed), depth + 1); + } catch (error) { + return ""; + } + } + return ""; + } + if (Array.isArray(value)) { + for (var i = 0; i < value.length; i += 1) { + var arrayToken = extractToken(value[i], depth + 1); + if (arrayToken) { + return arrayToken; + } + } + return ""; + } + if (typeof value === "object") { + var directKeys = ["access_token", "auth_data", "token", "Authorization", "authorization"]; + for (var j = 0; j < directKeys.length; j += 1) { + if (Object.prototype.hasOwnProperty.call(value, directKeys[j])) { + var directToken = extractToken(value[directKeys[j]], depth + 1); + if (directToken) { + return directToken; + } + } + } + } + return ""; + } + + function copyText(value, successMessage) { + if (!value) { + return; + } + navigator.clipboard.writeText(value).then(function () { + showMessage(successMessage || "内容已复制到剪贴板", "success"); + render(); + }).catch(function () { + showMessage("复制失败,请尝试手动复制", "error"); + render(); + }); + } + + function formatTraffic(value) { + var units = ["B", "KB", "MB", "GB", "TB"]; + var size = Number(value || 0); + var index = 0; + while (size >= 1024 && index < units.length - 1) { + size /= 1024; + index += 1; + } + return size.toFixed(size >= 10 || index === 0 ? 0 : 1) + " " + units[index]; + } + + function formatMoney(value, symbol) { + return (symbol || "$") + (Number(value || 0) / 100).toFixed(2); + } + + function formatSpeed(value) { + if (!value) { + return "不限"; + } + return value + " Mbps"; + } + + function formatLimit(value) { + if (value === null || typeof value === "undefined" || value === "") { + return "不限"; + } + return String(value); + } + + function formatDate(value) { + var timestamp = toTimestamp(value); + if (!timestamp) { + return "-"; + } + return new Date(timestamp * 1000).toLocaleString(); + } + + function toTimestamp(value) { + if (!value) { + return null; + } + if (typeof value === "number") { + return value; + } + var parsed = Date.parse(value); + return Number.isNaN(parsed) ? null : Math.floor(parsed / 1000); + } + + function truncate(text, maxLength) { + var str = String(text || ""); + if (str.length <= maxLength) { + return str; + } + return str.slice(0, maxLength - 1) + "..."; + } + + function firstNonEmpty(values) { + for (var i = 0; i < values.length; i += 1) { + if (values[i]) { + return values[i]; + } + } + return ""; + } + + function escapeHtml(value) { + return String(value || "") + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/"/g, """) + .replace(/'/g, "'"); + } + + function renderKnowledgeSection(articles) { + if (!articles.length) { + return [ + '
', + '
Knowledge

Knowledge Base

', + '
No knowledge articles yet.
', + "
" + ].join(""); + } + + return [ + '
', + '
Knowledge

Knowledge Base

', + '
' + articles.map(function (article) { + return [ + '" + ].join(""); + }).join("") + "
", + "
" + ].join(""); + } + + function getMetricsBaseUrl() { + var baseUrl = theme && theme.config ? theme.config.metricsBaseUrl : ""; + baseUrl = normalizeUrlValue(baseUrl); + return String(baseUrl || "").replace(/\/+$/, ""); + } + + function applyCustomBackground() { + var backgroundUrl = theme.config ? normalizeUrlValue(theme.config.backgroundUrl) : ""; + if (!backgroundUrl) { + document.documentElement.style.removeProperty("--nebula-bg-image"); + return; + } + document.documentElement.style.setProperty("--nebula-bg-image", 'url("' + String(backgroundUrl).replace(/"/g, '\\"') + '")'); + } + + function getThemeLogo() { + var config = theme.config || {}; + var lightLogo = normalizeUrlValue(config.lightLogoUrl); + var darkLogo = normalizeUrlValue(config.darkLogoUrl); + var themeLogo = normalizeUrlValue(theme.logo); + if (state.themeMode === "light") { + return lightLogo || darkLogo || themeLogo || ""; + } + return darkLogo || themeLogo || lightLogo || ""; + } + + function normalizeUrlValue(value) { + var normalized = String(value == null ? "" : value).trim(); + if (!normalized) { + return ""; + } + if (normalized === '""' || normalized === "''" || normalized === "null" || normalized === "undefined") { + return ""; + } + if ((normalized.charAt(0) === '"' && normalized.charAt(normalized.length - 1) === '"') || + (normalized.charAt(0) === "'" && normalized.charAt(normalized.length - 1) === "'")) { + normalized = normalized.slice(1, -1).trim(); + } + return normalized; + } + + function findKnowledgeArticleById(articleId) { + return (state.knowledge || []).find(function (article) { + return String(article.id) === String(articleId); + }) || null; + } + + function renderKnowledgeArticleBody(article) { + var content = String((article && (article.body || article.content)) || "").trim(); + if (!content) { + return '

No article body provided.

'; + } + + return '
' + escapeHtml(content).replace(/\r?\n/g, "
") + '
'; + } + + function showKnowledgeArticleModal(article) { + var overlay = document.createElement("div"); + overlay.className = "nebula-modal-overlay"; + + var modal = document.createElement("div"); + modal.className = "nebula-modal nebula-modal--article"; + modal.innerHTML = [ + '
', + 'Knowledge', + '

' + escapeHtml(article.title || "Untitled article") + '

', + '
', + '', + renderKnowledgeArticleBody(article), + '' + ].join(""); + + document.body.appendChild(overlay); + overlay.appendChild(modal); + + var close = function () { + if (overlay.parentNode) { + overlay.parentNode.removeChild(overlay); + } + }; + + var closeButton = modal.querySelector('[data-role="close-knowledge-article"]'); + if (closeButton) { + closeButton.onclick = close; + } + + overlay.onclick = function (event) { + if (event.target === overlay) { + close(); + } + }; + } + + function showNebulaModal(options) { + var overlay = document.createElement("div"); + overlay.className = "nebula-modal-overlay"; + + var modal = document.createElement("div"); + modal.className = "nebula-modal"; + + var title = document.createElement("h3"); + title.className = "nebula-modal-title"; + title.innerText = options.title || "操作确认"; + + var body = document.createElement("div"); + body.className = "nebula-modal-body"; + body.innerText = options.content || ""; + + var footer = document.createElement("div"); + footer.className = "nebula-modal-footer"; + + var cancelBtn = document.createElement("button"); + cancelBtn.className = "btn btn-ghost"; + cancelBtn.innerText = options.cancelText || "取消"; + cancelBtn.onclick = function() { + document.body.removeChild(overlay); + if (options.onCancel) options.onCancel(); + }; + + var confirmBtn = document.createElement("button"); + confirmBtn.className = "btn btn-primary"; + confirmBtn.innerText = options.confirmText || "确定提交"; + confirmBtn.onclick = function() { + document.body.removeChild(overlay); + if (options.onConfirm) options.onConfirm(); + }; + + footer.appendChild(cancelBtn); + footer.appendChild(confirmBtn); + + modal.appendChild(title); + modal.appendChild(body); + modal.appendChild(footer); + overlay.appendChild(modal); + + document.body.appendChild(overlay); + + // Auto-close on overlay click + overlay.onclick = function(e) { + if (e.target === overlay) { + document.body.removeChild(overlay); + if (options.onCancel) options.onCancel(); + } + }; + } +})(); diff --git a/frontend/theme/Nebula/assets/enhancer.js b/frontend/theme/Nebula/assets/enhancer.js new file mode 100644 index 0000000..755e154 --- /dev/null +++ b/frontend/theme/Nebula/assets/enhancer.js @@ -0,0 +1,429 @@ +(function () { + "use strict"; + + var theme = window.NEBULA_THEME || {}; + var loader = document.getElementById("nebula-loader"); + var appRoot = document.getElementById("app"); + + applyCustomBackground(); + mountShell(); + mountMonitor(); + hideLoaderWhenReady(); + + function mountShell() { + if (!appRoot || document.getElementById("nebula-app-shell")) { + return; + } + + var shell = document.createElement("div"); + shell.className = "app-shell nebula-app-shell"; + shell.id = "nebula-app-shell"; + shell.innerHTML = renderShellChrome(); + + var parent = appRoot.parentNode; + parent.insertBefore(shell, appRoot); + + var appStage = shell.querySelector(".nebula-app-stage"); + if (appStage) { + appStage.appendChild(appRoot); + } + } + + function mountMonitor() { + var rail = document.getElementById("nebula-side-rail"); + var panel = document.createElement("aside"); + panel.className = "nebula-monitor"; + panel.id = "nebula-monitor"; + panel.innerHTML = renderLoadingPanel(); + + if (rail) { + rail.appendChild(panel); + } else { + document.body.appendChild(panel); + } + + panel.addEventListener("click", function (event) { + var actionEl = event.target.closest("[data-nebula-action]"); + if (!actionEl) { + return; + } + + var action = actionEl.getAttribute("data-nebula-action"); + if (action === "refresh") { + loadDeviceOverview(panel); + } + if (action === "toggle") { + panel.classList.toggle("is-collapsed"); + } + }); + + loadDeviceOverview(panel); + window.setInterval(function () { + loadDeviceOverview(panel, true); + }, 30000); + } + + async function loadDeviceOverview(panel, silent) { + if (!silent) { + panel.innerHTML = renderLoadingPanel(); + } + + try { + var response = await fetch("/api/v1/user/user-online-devices/get-ip", { + method: "GET", + headers: getRequestHeaders(), + credentials: "same-origin" + }); + + if (response.status === 401 || response.status === 403) { + panel.innerHTML = renderGuestPanel(); + return; + } + + if (!response.ok) { + throw new Error("Unable to load device overview"); + } + + var resJson = await response.json(); + var data = resJson && resJson.data ? resJson.data : {}; + console.log("[Nebula] Device overview data:", data); // Diagnostic log + var overview = data.session_overview || data; + + panel.innerHTML = renderPanel(overview); + } catch (error) { + panel.innerHTML = renderErrorPanel(error.message || "Unable to load device overview"); + } + } + + function renderShellChrome() { + return [ + '
', + '
', + '
', + '
', + '

' + escapeHtml(theme.title || "Nebula") + '

', + '

' + escapeHtml(theme.description || "Refined user workspace") + '

', + '
', + '
', + '
', + 'Nebula Theme', + 'Platform Control Surface', + '
', + '
', + '
', + '
', + 'User Console', + '

Subscriptions, sessions, and live access in one view.

', + '

' + escapeHtml((theme.config && theme.config.slogan) || "Current IP visibility, online devices, and the original workflow remain available.") + '

', + '
', + '
LiveCurrent ingress overview
', + '
NativeOriginal features retained
', + '
RefreshAuto-updated every 30 seconds
', + '
', + '
', + '', + '
', + '
', + '
', + '', + '
' + ].join(""); + } + + function renderLoadingPanel() { + return [ + '
', + '

Live Access Monitor

Checking online IPs, devices, and active sessions...
', + '
', + '
', + '
', + '
Loading...
', + '
' + ].join(""); + } + + function renderGuestPanel() { + return [ + '
', + '

Live Access Monitor

The panel is ready, but this browser session is not authenticated for the API yet.
', + '
', + '
', + '
', + '
Sign in first, then refresh this panel to view current IP and device data.
', + '
' + ].join(""); + } + + function renderErrorPanel(message) { + return [ + '
', + '

Live Access Monitor

The panel loaded, but the device overview endpoint did not respond as expected.
', + '
', + '
', + '
', + '
' + escapeHtml(message) + '
', + '
' + ].join(""); + } + + function renderPanel(data) { + var ips = Array.isArray(data.online_ips) ? data.online_ips : []; + var sessions = Array.isArray(data.sessions) ? data.sessions.slice(0, 4) : []; + + return [ + '
', + '

Live Access Monitor

' + escapeHtml((theme.config && theme.config.slogan) || "Current IP and session visibility") + '
', + '
', + '
', + '
', + '
', + '
', + metric(String(data.online_ip_count || 0), "Current IPs"), + metric(String(data.online_device_count || 0), "Online devices"), + metric(String(data.active_session_count || 0), "Stored sessions"), + metric(formatLimit(data.device_limit), "Device limit"), + '
', + '
Last online: ' + formatDate(data.last_online_at) + '
', + '
', + '
', + '
Online IP addresses
', + ips.length ? '
' + ips.map(function (ip) { + return '
' + escapeHtml(ip) + '
'; + }).join("") + '
' : '
No IP data reported yet.
', + '
', + '
', + '
Recent sessions
', + sessions.length ? '
' + sessions.map(function (session) { + return [ + '
', + '' + escapeHtml(session.name || ("Session #" + session.id)) + (session.is_current ? " · current" : "") + '', + '
Last used: ' + formatDate(session.last_used_at) + '
', + '
' + ].join(""); + }).join("") + '
' : '
No session records available.
', + '
', + '
' + ].join(""); + } + + function metric(value, label) { + return '
' + escapeHtml(value) + '' + escapeHtml(label) + '
'; + } + + function getRequestHeaders() { + var headers = { + "Content-Type": "application/json", + "X-Requested-With": "XMLHttpRequest" + }; + var token = getStoredToken(); + if (token) { + headers.Authorization = token; + } + return headers; + } + + function hideLoaderWhenReady() { + if (!loader) { + return; + } + + var hide = function () { + loader.classList.add("is-hidden"); + window.setTimeout(function () { + if (loader && loader.parentNode) { + loader.parentNode.removeChild(loader); + } + }, 350); + }; + + if (appRoot && appRoot.children.length > 0) { + hide(); + return; + } + + var observer = new MutationObserver(function () { + if (appRoot && appRoot.children.length > 0) { + observer.disconnect(); + hide(); + } + }); + + if (appRoot) { + observer.observe(appRoot, { childList: true }); + } + + window.setTimeout(hide, 6000); + } + + function applyCustomBackground() { + if (!theme.config || !theme.config.backgroundUrl) { + return; + } + + document.body.style.backgroundImage = + 'linear-gradient(180deg, rgba(5, 13, 22, 0.76), rgba(5, 13, 22, 0.9)), url("' + String(theme.config.backgroundUrl).replace(/"/g, '\\"') + '")'; + document.body.style.backgroundSize = "cover"; + document.body.style.backgroundPosition = "center"; + document.body.style.backgroundAttachment = "fixed"; + } + + function getStoredToken() { + var candidates = []; + var directKeys = ["access_token", "auth_data", "__nebula_auth_data__", "token", "auth_token"]; + collectStorageValues(window.localStorage, directKeys, candidates); + collectStorageValues(window.sessionStorage, directKeys, candidates); + collectCookieValues(candidates); + collectGlobalValues(candidates); + + for (var i = 0; i < candidates.length; i += 1) { + var token = extractToken(candidates[i]); + if (token) { + return token; + } + } + + return ""; + } + + function collectStorageValues(storage, keys, target) { + if (!storage) { + return; + } + + for (var i = 0; i < keys.length; i += 1) { + pushCandidate(storage.getItem(keys[i]), target); + } + } + + function collectCookieValues(target) { + if (!document.cookie) { + return; + } + var cookies = document.cookie.split(";"); + for (var i = 0; i < cookies.length; i += 1) { + var part = cookies[i].split("="); + if (part.length < 2) { + continue; + } + var key = String(part[0] || "").trim(); + if (key.indexOf("token") !== -1 || key.indexOf("auth") !== -1) { + pushCandidate(decodeURIComponent(part.slice(1).join("=")), target); + } + } + } + + function collectGlobalValues(target) { + pushCandidate(window.__INITIAL_STATE__, target); + pushCandidate(window.g_initialProps, target); + pushCandidate(window.g_app, target); + } + + function pushCandidate(value, target) { + if (value === null || typeof value === "undefined" || value === "") { + return; + } + target.push(value); + } + + function extractToken(value, depth) { + if (depth > 4 || value === null || typeof value === "undefined") { + return ""; + } + + if (typeof value === "string") { + var trimmed = value.trim(); + if (!trimmed) { + return ""; + } + if (trimmed.indexOf("Bearer ") === 0) { + return trimmed; + } + if (/^[A-Za-z0-9\-_=]+\.[A-Za-z0-9\-_=]+(\.[A-Za-z0-9\-_.+/=]+)?$/.test(trimmed)) { + return "Bearer " + trimmed; + } + if (/^[A-Za-z0-9\-_.+/=]{24,}$/.test(trimmed) && trimmed.indexOf("{") === -1) { + return "Bearer " + trimmed; + } + if ((trimmed.charAt(0) === "{" && trimmed.charAt(trimmed.length - 1) === "}") || + (trimmed.charAt(0) === "[" && trimmed.charAt(trimmed.length - 1) === "]")) { + try { + return extractToken(JSON.parse(trimmed), (depth || 0) + 1); + } catch (error) { + return ""; + } + } + return ""; + } + + if (Array.isArray(value)) { + for (var i = 0; i < value.length; i += 1) { + var nestedToken = extractToken(value[i], (depth || 0) + 1); + if (nestedToken) { + return nestedToken; + } + } + return ""; + } + + if (typeof value === "object") { + var keys = ["access_token", "auth_data", "token", "Authorization", "authorization"]; + for (var j = 0; j < keys.length; j += 1) { + if (Object.prototype.hasOwnProperty.call(value, keys[j])) { + var directToken = extractToken(value[keys[j]], (depth || 0) + 1); + if (directToken) { + return directToken; + } + } + } + + for (var key in value) { + if (!Object.prototype.hasOwnProperty.call(value, key)) { + continue; + } + var token = extractToken(value[key], (depth || 0) + 1); + if (token) { + return token; + } + } + } + + return ""; + } + + function formatDate(value) { + if (!value) { + return "-"; + } + if (typeof value === "number") { + return new Date(value * 1000).toLocaleString(); + } + var parsed = Date.parse(value); + if (Number.isNaN(parsed)) { + return "-"; + } + return new Date(parsed).toLocaleString(); + } + + function formatLimit(value) { + if (value === null || typeof value === "undefined" || value === "") { + return "Unlimited"; + } + return String(value); + } + + function escapeHtml(value) { + return String(value || "") + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/"/g, """) + .replace(/'/g, "'"); + } +})(); diff --git a/frontend/theme/Nebula/assets/images/nebula-grid.svg b/frontend/theme/Nebula/assets/images/nebula-grid.svg new file mode 100644 index 0000000..5e4b945 --- /dev/null +++ b/frontend/theme/Nebula/assets/images/nebula-grid.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/theme/Nebula/assets/umi.js b/frontend/theme/Nebula/assets/umi.js new file mode 100644 index 0000000..391d5f0 --- /dev/null +++ b/frontend/theme/Nebula/assets/umi.js @@ -0,0 +1,2 @@ +!function(){"use strict";try{if("undefined"!=typeof document){var o=document.createElement("style");o.appendChild(document.createTextNode('@charset "UTF-8";html.dark .markdown-body{color-scheme:dark;--color-prettylights-syntax-comment: #8b949e;--color-prettylights-syntax-constant: #79c0ff;--color-prettylights-syntax-entity: #d2a8ff;--color-prettylights-syntax-storage-modifier-import: #c9d1d9;--color-prettylights-syntax-entity-tag: #7ee787;--color-prettylights-syntax-keyword: #ff7b72;--color-prettylights-syntax-string: #a5d6ff;--color-prettylights-syntax-variable: #ffa657;--color-prettylights-syntax-brackethighlighter-unmatched: #f85149;--color-prettylights-syntax-invalid-illegal-text: #f0f6fc;--color-prettylights-syntax-invalid-illegal-bg: #8e1519;--color-prettylights-syntax-carriage-return-text: #f0f6fc;--color-prettylights-syntax-carriage-return-bg: #b62324;--color-prettylights-syntax-string-regexp: #7ee787;--color-prettylights-syntax-markup-list: #f2cc60;--color-prettylights-syntax-markup-heading: #1f6feb;--color-prettylights-syntax-markup-italic: #c9d1d9;--color-prettylights-syntax-markup-bold: #c9d1d9;--color-prettylights-syntax-markup-deleted-text: #ffdcd7;--color-prettylights-syntax-markup-deleted-bg: #67060c;--color-prettylights-syntax-markup-inserted-text: #aff5b4;--color-prettylights-syntax-markup-inserted-bg: #033a16;--color-prettylights-syntax-markup-changed-text: #ffdfb6;--color-prettylights-syntax-markup-changed-bg: #5a1e02;--color-prettylights-syntax-markup-ignored-text: #c9d1d9;--color-prettylights-syntax-markup-ignored-bg: #1158c7;--color-prettylights-syntax-meta-diff-range: #d2a8ff;--color-prettylights-syntax-brackethighlighter-angle: #8b949e;--color-prettylights-syntax-sublimelinter-gutter-mark: #484f58;--color-prettylights-syntax-constant-other-reference-link: #a5d6ff;--color-fg-default: #e6edf3;--color-fg-muted: #7d8590;--color-fg-subtle: #6e7681;--color-canvas-default: #0d1117;--color-canvas-subtle: #161b22;--color-border-default: #30363d;--color-border-muted: #21262d;--color-neutral-muted: rgba(110,118,129,.4);--color-accent-fg: #2f81f7;--color-accent-emphasis: #1f6feb;--color-attention-fg: #d29922;--color-attention-subtle: rgba(187,128,9,.15);--color-danger-fg: #f85149;--color-done-fg: #a371f7}html:not(.dark) .markdown-body{color-scheme:light;--color-prettylights-syntax-comment: #6e7781;--color-prettylights-syntax-constant: #0550ae;--color-prettylights-syntax-entity: #6639ba;--color-prettylights-syntax-storage-modifier-import: #24292f;--color-prettylights-syntax-entity-tag: #116329;--color-prettylights-syntax-keyword: #cf222e;--color-prettylights-syntax-string: #0a3069;--color-prettylights-syntax-variable: #953800;--color-prettylights-syntax-brackethighlighter-unmatched: #82071e;--color-prettylights-syntax-invalid-illegal-text: #f6f8fa;--color-prettylights-syntax-invalid-illegal-bg: #82071e;--color-prettylights-syntax-carriage-return-text: #f6f8fa;--color-prettylights-syntax-carriage-return-bg: #cf222e;--color-prettylights-syntax-string-regexp: #116329;--color-prettylights-syntax-markup-list: #3b2300;--color-prettylights-syntax-markup-heading: #0550ae;--color-prettylights-syntax-markup-italic: #24292f;--color-prettylights-syntax-markup-bold: #24292f;--color-prettylights-syntax-markup-deleted-text: #82071e;--color-prettylights-syntax-markup-deleted-bg: #ffebe9;--color-prettylights-syntax-markup-inserted-text: #116329;--color-prettylights-syntax-markup-inserted-bg: #dafbe1;--color-prettylights-syntax-markup-changed-text: #953800;--color-prettylights-syntax-markup-changed-bg: #ffd8b5;--color-prettylights-syntax-markup-ignored-text: #eaeef2;--color-prettylights-syntax-markup-ignored-bg: #0550ae;--color-prettylights-syntax-meta-diff-range: #8250df;--color-prettylights-syntax-brackethighlighter-angle: #57606a;--color-prettylights-syntax-sublimelinter-gutter-mark: #8c959f;--color-prettylights-syntax-constant-other-reference-link: #0a3069;--color-fg-default: #1F2328;--color-fg-muted: #656d76;--color-fg-subtle: #6e7781;--color-canvas-default: #ffffff;--color-canvas-subtle: #f6f8fa;--color-border-default: #d0d7de;--color-border-muted: hsla(210,18%,87%,1);--color-neutral-muted: rgba(175,184,193,.2);--color-accent-fg: #0969da;--color-accent-emphasis: #0969da;--color-attention-fg: #9a6700;--color-attention-subtle: #fff8c5;--color-danger-fg: #d1242f;--color-done-fg: #8250df}.markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0;color:var(--color-fg-default);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Noto Sans,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:16px;line-height:1.5;word-wrap:break-word}.markdown-body .octicon{display:inline-block;fill:currentColor;vertical-align:text-bottom}.markdown-body h1:hover .anchor .octicon-link:before,.markdown-body h2:hover .anchor .octicon-link:before,.markdown-body h3:hover .anchor .octicon-link:before,.markdown-body h4:hover .anchor .octicon-link:before,.markdown-body h5:hover .anchor .octicon-link:before,.markdown-body h6:hover .anchor .octicon-link:before{width:16px;height:16px;content:" ";display:inline-block;background-color:currentColor;-webkit-mask-image:url("data:image/svg+xml,");mask-image:url("data:image/svg+xml,")}.markdown-body details,.markdown-body figcaption,.markdown-body figure{display:block}.markdown-body summary{display:list-item}.markdown-body [hidden]{display:none!important}.markdown-body a{background-color:transparent;color:var(--color-accent-fg);text-decoration:none}.markdown-body abbr[title]{border-bottom:none;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.markdown-body b,.markdown-body strong{font-weight:var(--base-text-weight-semibold, 600)}.markdown-body dfn{font-style:italic}.markdown-body h1{margin:.67em 0;font-weight:var(--base-text-weight-semibold, 600);padding-bottom:.3em;font-size:2em;border-bottom:1px solid var(--color-border-muted)}.markdown-body mark{background-color:var(--color-attention-subtle);color:var(--color-fg-default)}.markdown-body small{font-size:90%}.markdown-body sub,.markdown-body sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.markdown-body sub{bottom:-.25em}.markdown-body sup{top:-.5em}.markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:var(--color-canvas-default)}.markdown-body code,.markdown-body kbd,.markdown-body pre,.markdown-body samp{font-family:monospace;font-size:1em}.markdown-body figure{margin:1em 40px}.markdown-body hr{box-sizing:content-box;overflow:hidden;background:transparent;border-bottom:1px solid var(--color-border-muted);height:.25em;padding:0;margin:24px 0;background-color:var(--color-border-default);border:0}.markdown-body input{font:inherit;margin:0;overflow:visible;font-family:inherit;font-size:inherit;line-height:inherit}.markdown-body [type=button],.markdown-body [type=reset],.markdown-body [type=submit]{-webkit-appearance:button}.markdown-body [type=checkbox],.markdown-body [type=radio]{box-sizing:border-box;padding:0}.markdown-body [type=number]::-webkit-inner-spin-button,.markdown-body [type=number]::-webkit-outer-spin-button{height:auto}.markdown-body [type=search]::-webkit-search-cancel-button,.markdown-body [type=search]::-webkit-search-decoration{-webkit-appearance:none}.markdown-body ::-webkit-input-placeholder{color:inherit;opacity:.54}.markdown-body ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}.markdown-body a:hover{text-decoration:underline}.markdown-body ::placeholder{color:var(--color-fg-subtle);opacity:1}.markdown-body hr:before{display:table;content:""}.markdown-body hr:after{display:table;clear:both;content:""}.markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto}.markdown-body td,.markdown-body th{padding:0}.markdown-body details summary{cursor:pointer}.markdown-body details:not([open])>*:not(summary){display:none!important}.markdown-body a:focus,.markdown-body [role=button]:focus,.markdown-body input[type=radio]:focus,.markdown-body input[type=checkbox]:focus{outline:2px solid var(--color-accent-fg);outline-offset:-2px;box-shadow:none}.markdown-body a:focus:not(:focus-visible),.markdown-body [role=button]:focus:not(:focus-visible),.markdown-body input[type=radio]:focus:not(:focus-visible),.markdown-body input[type=checkbox]:focus:not(:focus-visible){outline:solid 1px transparent}.markdown-body a:focus-visible,.markdown-body [role=button]:focus-visible,.markdown-body input[type=radio]:focus-visible,.markdown-body input[type=checkbox]:focus-visible{outline:2px solid var(--color-accent-fg);outline-offset:-2px;box-shadow:none}.markdown-body a:not([class]):focus,.markdown-body a:not([class]):focus-visible,.markdown-body input[type=radio]:focus,.markdown-body input[type=radio]:focus-visible,.markdown-body input[type=checkbox]:focus,.markdown-body input[type=checkbox]:focus-visible{outline-offset:0}.markdown-body kbd{display:inline-block;padding:3px 5px;font:11px ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;line-height:10px;color:var(--color-fg-default);vertical-align:middle;background-color:var(--color-canvas-subtle);border:solid 1px var(--color-neutral-muted);border-bottom-color:var(--color-neutral-muted);border-radius:6px;box-shadow:inset 0 -1px 0 var(--color-neutral-muted)}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:var(--base-text-weight-semibold, 600);line-height:1.25}.markdown-body h2{font-weight:var(--base-text-weight-semibold, 600);padding-bottom:.3em;font-size:1.5em;border-bottom:1px solid var(--color-border-muted)}.markdown-body h3{font-weight:var(--base-text-weight-semibold, 600);font-size:1.25em}.markdown-body h4{font-weight:var(--base-text-weight-semibold, 600);font-size:1em}.markdown-body h5{font-weight:var(--base-text-weight-semibold, 600);font-size:.875em}.markdown-body h6{font-weight:var(--base-text-weight-semibold, 600);font-size:.85em;color:var(--color-fg-muted)}.markdown-body p{margin-top:0;margin-bottom:10px}.markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-fg-muted);border-left:.25em solid var(--color-border-default)}.markdown-body ul,.markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em}.markdown-body ol ol,.markdown-body ul ol{list-style-type:lower-roman}.markdown-body ul ul ol,.markdown-body ul ol ol,.markdown-body ol ul ol,.markdown-body ol ol ol{list-style-type:lower-alpha}.markdown-body dd{margin-left:0}.markdown-body tt,.markdown-body code,.markdown-body samp{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:12px}.markdown-body pre{margin-top:0;margin-bottom:0;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:12px;word-wrap:normal}.markdown-body .octicon{display:inline-block;overflow:visible!important;vertical-align:text-bottom;fill:currentColor}.markdown-body input::-webkit-outer-spin-button,.markdown-body input::-webkit-inner-spin-button{margin:0;-webkit-appearance:none;appearance:none}.markdown-body .color-fg-accent{color:var(--color-accent-fg)!important}.markdown-body .color-fg-attention{color:var(--color-attention-fg)!important}.markdown-body .color-fg-done{color:var(--color-done-fg)!important}.markdown-body .flex-items-center{align-items:center!important}.markdown-body .mb-1{margin-bottom:var(--base-size-4, 4px)!important}.markdown-body .text-semibold{font-weight:var(--base-text-weight-medium, 500)!important}.markdown-body .d-inline-flex{display:inline-flex!important}.markdown-body:before{display:table;content:""}.markdown-body:after{display:table;clear:both;content:""}.markdown-body>*:first-child{margin-top:0!important}.markdown-body>*:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .absent{color:var(--color-danger-fg)}.markdown-body .anchor{float:left;padding-right:4px;margin-left:-20px;line-height:1}.markdown-body .anchor:focus{outline:none}.markdown-body p,.markdown-body blockquote,.markdown-body ul,.markdown-body ol,.markdown-body dl,.markdown-body table,.markdown-body pre,.markdown-body details{margin-top:0;margin-bottom:16px}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:var(--color-fg-default);vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1 tt,.markdown-body h1 code,.markdown-body h2 tt,.markdown-body h2 code,.markdown-body h3 tt,.markdown-body h3 code,.markdown-body h4 tt,.markdown-body h4 code,.markdown-body h5 tt,.markdown-body h5 code,.markdown-body h6 tt,.markdown-body h6 code{padding:0 .2em;font-size:inherit}.markdown-body summary h1,.markdown-body summary h2,.markdown-body summary h3,.markdown-body summary h4,.markdown-body summary h5,.markdown-body summary h6{display:inline-block}.markdown-body summary h1 .anchor,.markdown-body summary h2 .anchor,.markdown-body summary h3 .anchor,.markdown-body summary h4 .anchor,.markdown-body summary h5 .anchor,.markdown-body summary h6 .anchor{margin-left:-40px}.markdown-body summary h1,.markdown-body summary h2{padding-bottom:0;border-bottom:0}.markdown-body ul.no-list,.markdown-body ol.no-list{padding:0;list-style-type:none}.markdown-body ol[type="a s"]{list-style-type:lower-alpha}.markdown-body ol[type="A s"]{list-style-type:upper-alpha}.markdown-body ol[type="i s"]{list-style-type:lower-roman}.markdown-body ol[type="I s"]{list-style-type:upper-roman}.markdown-body ol[type="1"]{list-style-type:decimal}.markdown-body div>ol:not([type]){list-style-type:decimal}.markdown-body ul ul,.markdown-body ul ol,.markdown-body ol ol,.markdown-body ol ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:var(--base-text-weight-semibold, 600)}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body table th{font-weight:var(--base-text-weight-semibold, 600)}.markdown-body table th,.markdown-body table td{padding:6px 13px;border:1px solid var(--color-border-default)}.markdown-body table td>:last-child{margin-bottom:0}.markdown-body table tr{background-color:var(--color-canvas-default);border-top:1px solid var(--color-border-muted)}.markdown-body table tr:nth-child(2n){background-color:var(--color-canvas-subtle)}.markdown-body table img{background-color:transparent}.markdown-body img[align=right]{padding-left:20px}.markdown-body img[align=left]{padding-right:20px}.markdown-body .emoji{max-width:none;vertical-align:text-top;background-color:transparent}.markdown-body span.frame{display:block;overflow:hidden}.markdown-body span.frame>span{display:block;float:left;width:auto;padding:7px;margin:13px 0 0;overflow:hidden;border:1px solid var(--color-border-default)}.markdown-body span.frame span img{display:block;float:left}.markdown-body span.frame span span{display:block;padding:5px 0 0;clear:both;color:var(--color-fg-default)}.markdown-body span.align-center{display:block;overflow:hidden;clear:both}.markdown-body span.align-center>span{display:block;margin:13px auto 0;overflow:hidden;text-align:center}.markdown-body span.align-center span img{margin:0 auto;text-align:center}.markdown-body span.align-right{display:block;overflow:hidden;clear:both}.markdown-body span.align-right>span{display:block;margin:13px 0 0;overflow:hidden;text-align:right}.markdown-body span.align-right span img{margin:0;text-align:right}.markdown-body span.float-left{display:block;float:left;margin-right:13px;overflow:hidden}.markdown-body span.float-left span{margin:13px 0 0}.markdown-body span.float-right{display:block;float:right;margin-left:13px;overflow:hidden}.markdown-body span.float-right>span{display:block;margin:13px auto 0;overflow:hidden;text-align:right}.markdown-body code,.markdown-body tt{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;background-color:var(--color-neutral-muted);border-radius:6px}.markdown-body code br,.markdown-body tt br{display:none}.markdown-body del code{text-decoration:inherit}.markdown-body samp{font-size:85%}.markdown-body pre code{font-size:100%}.markdown-body pre>code{padding:0;margin:0;word-break:normal;white-space:pre;background:transparent;border:0}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body .highlight pre,.markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-fg-default);background-color:var(--color-canvas-subtle);border-radius:6px}.markdown-body pre code,.markdown-body pre tt{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.markdown-body .csv-data td,.markdown-body .csv-data th{padding:5px;overflow:hidden;font-size:12px;line-height:1;text-align:left;white-space:nowrap}.markdown-body .csv-data .blob-num{padding:10px 8px 9px;text-align:right;background:var(--color-canvas-default);border:0}.markdown-body .csv-data tr{border-top:0}.markdown-body .csv-data th{font-weight:var(--base-text-weight-semibold, 600);background:var(--color-canvas-subtle);border-top:0}.markdown-body [data-footnote-ref]:before{content:"["}.markdown-body [data-footnote-ref]:after{content:"]"}.markdown-body .footnotes{font-size:12px;color:var(--color-fg-muted);border-top:1px solid var(--color-border-default)}.markdown-body .footnotes ol{padding-left:16px}.markdown-body .footnotes ol ul{display:inline-block;padding-left:16px;margin-top:16px}.markdown-body .footnotes li{position:relative}.markdown-body .footnotes li:target:before{position:absolute;inset:-8px -8px -8px -24px;pointer-events:none;content:"";border:2px solid var(--color-accent-emphasis);border-radius:6px}.markdown-body .footnotes li:target{color:var(--color-fg-default)}.markdown-body .footnotes .data-footnote-backref g-emoji{font-family:monospace}.markdown-body .pl-c{color:var(--color-prettylights-syntax-comment)}.markdown-body .pl-c1,.markdown-body .pl-s .pl-v{color:var(--color-prettylights-syntax-constant)}.markdown-body .pl-e,.markdown-body .pl-en{color:var(--color-prettylights-syntax-entity)}.markdown-body .pl-smi,.markdown-body .pl-s .pl-s1{color:var(--color-prettylights-syntax-storage-modifier-import)}.markdown-body .pl-ent{color:var(--color-prettylights-syntax-entity-tag)}.markdown-body .pl-k{color:var(--color-prettylights-syntax-keyword)}.markdown-body .pl-s,.markdown-body .pl-pds,.markdown-body .pl-s .pl-pse .pl-s1,.markdown-body .pl-sr,.markdown-body .pl-sr .pl-cce,.markdown-body .pl-sr .pl-sre,.markdown-body .pl-sr .pl-sra{color:var(--color-prettylights-syntax-string)}.markdown-body .pl-v,.markdown-body .pl-smw{color:var(--color-prettylights-syntax-variable)}.markdown-body .pl-bu{color:var(--color-prettylights-syntax-brackethighlighter-unmatched)}.markdown-body .pl-ii{color:var(--color-prettylights-syntax-invalid-illegal-text);background-color:var(--color-prettylights-syntax-invalid-illegal-bg)}.markdown-body .pl-c2{color:var(--color-prettylights-syntax-carriage-return-text);background-color:var(--color-prettylights-syntax-carriage-return-bg)}.markdown-body .pl-sr .pl-cce{font-weight:700;color:var(--color-prettylights-syntax-string-regexp)}.markdown-body .pl-ml{color:var(--color-prettylights-syntax-markup-list)}.markdown-body .pl-mh,.markdown-body .pl-mh .pl-en,.markdown-body .pl-ms{font-weight:700;color:var(--color-prettylights-syntax-markup-heading)}.markdown-body .pl-mi{font-style:italic;color:var(--color-prettylights-syntax-markup-italic)}.markdown-body .pl-mb{font-weight:700;color:var(--color-prettylights-syntax-markup-bold)}.markdown-body .pl-md{color:var(--color-prettylights-syntax-markup-deleted-text);background-color:var(--color-prettylights-syntax-markup-deleted-bg)}.markdown-body .pl-mi1{color:var(--color-prettylights-syntax-markup-inserted-text);background-color:var(--color-prettylights-syntax-markup-inserted-bg)}.markdown-body .pl-mc{color:var(--color-prettylights-syntax-markup-changed-text);background-color:var(--color-prettylights-syntax-markup-changed-bg)}.markdown-body .pl-mi2{color:var(--color-prettylights-syntax-markup-ignored-text);background-color:var(--color-prettylights-syntax-markup-ignored-bg)}.markdown-body .pl-mdr{font-weight:700;color:var(--color-prettylights-syntax-meta-diff-range)}.markdown-body .pl-ba{color:var(--color-prettylights-syntax-brackethighlighter-angle)}.markdown-body .pl-sg{color:var(--color-prettylights-syntax-sublimelinter-gutter-mark)}.markdown-body .pl-corl{text-decoration:underline;color:var(--color-prettylights-syntax-constant-other-reference-link)}.markdown-body g-emoji{display:inline-block;min-width:1ch;font-family:"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol;font-size:1em;font-style:normal!important;font-weight:var(--base-text-weight-normal, 400);line-height:1;vertical-align:-.075em}.markdown-body g-emoji img{width:1em;height:1em}.markdown-body .task-list-item{list-style-type:none}.markdown-body .task-list-item label{font-weight:var(--base-text-weight-normal, 400)}.markdown-body .task-list-item.enabled label{cursor:pointer}.markdown-body .task-list-item+.task-list-item{margin-top:4px}.markdown-body .task-list-item .handle{display:none}.markdown-body .task-list-item-checkbox{margin:0 .2em .25em -1.4em;vertical-align:middle}.markdown-body .contains-task-list:dir(rtl) .task-list-item-checkbox{margin:0 -1.6em .25em .2em}.markdown-body .contains-task-list{position:relative}.markdown-body .contains-task-list:hover .task-list-item-convert-container,.markdown-body .contains-task-list:focus-within .task-list-item-convert-container{display:block;width:auto;height:24px;overflow:visible;clip:auto}.markdown-body .QueryBuilder .qb-entity{color:var(--color-prettylights-syntax-entity)}.markdown-body .QueryBuilder .qb-constant{color:var(--color-prettylights-syntax-constant)}.markdown-body ::-webkit-calendar-picker-indicator{filter:invert(50%)}.markdown-body .markdown-alert{padding:0 1em;margin-bottom:16px;color:inherit;border-left:.25em solid var(--color-border-default)}.markdown-body .markdown-alert>:first-child{margin-top:0}.markdown-body .markdown-alert>:last-child{margin-bottom:0}.markdown-body .markdown-alert.markdown-alert-note{border-left-color:var(--color-accent-fg)}.markdown-body .markdown-alert.markdown-alert-important{border-left-color:var(--color-done-fg)}.markdown-body .markdown-alert.markdown-alert-warning{border-left-color:var(--color-attention-fg)}*,:before,:after{box-sizing:border-box;background-repeat:no-repeat}:before,:after{text-decoration:inherit;vertical-align:inherit}:where(:root){cursor:default;line-height:1.5;overflow-wrap:break-word;-moz-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent;-webkit-text-size-adjust:100%}:where(body){margin:0}:where(h1){font-size:2em;margin:.67em 0}:where(dl,ol,ul) :where(dl,ol,ul){margin:0}:where(hr){color:inherit;height:0}:where(nav) :where(ol,ul){list-style-type:none;padding:0}:where(nav li):before{content:"​";float:left}:where(pre){font-family:monospace,monospace;font-size:1em;overflow:auto}:where(abbr[title]){text-decoration:underline;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(audio,canvas,iframe,img,svg,video){vertical-align:baseline}:where(iframe){border-style:none}:where(svg:not([fill])){fill:currentColor}:where(table){border-collapse:collapse;border-color:inherit;text-indent:0}:where(button,input,select){margin:0}:where(button,[type=button i],[type=reset i],[type=submit i]){-webkit-appearance:button}:where(fieldset){border:1px solid #a0a0a0}:where(progress){vertical-align:baseline}:where(textarea){margin:0;resize:vertical}:where([type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(details>summary:first-of-type){display:list-item}:where([aria-busy=true i]){cursor:progress}:where([aria-controls]){cursor:pointer}:where([aria-disabled=true i],[disabled]){cursor:not-allowed}:where([aria-hidden=false i][hidden]){display:initial}:where([aria-hidden=false i][hidden]:not(:focus)){clip:rect(0,0,0,0);position:absolute}html{font-size:16px}html,body{width:100%;height:100%;overflow:hidden;background-color:#f2f2f2;font-family:Encode Sans Condensed,sans-serif}html.dark body{background-color:#292b2b}::-webkit-scrollbar{width:8px;background-color:#eee}::-webkit-scrollbar-thumb{background-color:#c1c1c1}::-webkit-scrollbar-thumb:hover{background-color:#a8a8a8}html,body{width:100%;height:100%;overflow:hidden;font-size:16px}#app{width:100%;height:100%}.fade-slide-leave-active,.fade-slide-enter-active{transition:all .3s}.fade-slide-enter-from{opacity:0;transform:translate(-30px)}.fade-slide-leave-to{opacity:0;transform:translate(30px)}.cus-scroll{overflow:auto}.cus-scroll::-webkit-scrollbar{width:8px;height:8px}.cus-scroll-x{overflow-x:auto}.cus-scroll-x::-webkit-scrollbar{width:0;height:8px}.cus-scroll-y{overflow-y:auto}.cus-scroll-y::-webkit-scrollbar{width:8px;height:0}.cus-scroll::-webkit-scrollbar-thumb,.cus-scroll-x::-webkit-scrollbar-thumb,.cus-scroll-y::-webkit-scrollbar-thumb{background-color:transparent;border-radius:4px}.cus-scroll:hover::-webkit-scrollbar-thumb,.cus-scroll-x:hover::-webkit-scrollbar-thumb,.cus-scroll-y:hover::-webkit-scrollbar-thumb{background:#bfbfbf}.cus-scroll:hover::-webkit-scrollbar-thumb:hover,.cus-scroll-x:hover::-webkit-scrollbar-thumb:hover,.cus-scroll-y:hover::-webkit-scrollbar-thumb:hover{background:var(--primary-color)}#--unocss--{layer:__ALL__}#app{height:100%}#app .n-config-provider{height:inherit}@media (max-width: 768px){.title-text[data-v-143fb1b0]{max-width:100px}}.side-menu:not(.n-menu--collapsed) .n-menu-item-content:before{left:5px;right:5px}.side-menu:not(.n-menu--collapsed) .n-menu-item-content.n-menu-item-content--selected:before,.side-menu:not(.n-menu--collapsed) .n-menu-item-content:hover:before{border-left:4px solid var(--primary-color)}.carousel-img[data-v-2492d831]{width:100%;height:240px;object-fit:cover}.pay-qrcode{width:100%;height:100%}.pay-qrcode>canvas{width:100%!important;height:100%!important}.card-container[data-v-16d7c058]{display:grid;justify-content:space-between;grid-template-columns:repeat(auto-fit,minmax(calc(100% - 1rem),1fr));row-gap:20px;min-width:100%}.card-item[data-v-16d7c058]{max-width:100%}@media screen and (min-width: 768px){.card-container[data-v-16d7c058]{grid-template-columns:repeat(auto-fit,minmax(calc(50% - 1rem),1fr));column-gap:20px;min-width:375px}}@media screen and (min-width: 1200px){.card-container[data-v-16d7c058]{grid-template-columns:repeat(auto-fit,minmax(calc(33.33% - 1rem),1fr));padding:0 10px;column-gap:20px;min-width:375px}}#--unocss-layer-start--__ALL__--{start:__ALL__}*,:before,:after{--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;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }::backdrop{--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;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }.container{width:100%}.wh-full,[wh-full=""]{width:100%;height:100%}.f-c-c,[f-c-c=""]{display:flex;align-items:center;justify-content:center}.flex-col,[flex-col=""]{display:flex;flex-direction:column}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.right-0{right:0}.right-4{right:16px}[bottom~="20"]{bottom:80px}.z-99999{z-index:99999}.grid{display:grid}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.m-0{margin:0}.m-0\\!{margin:0!important}.m-3{margin:12px}.m-auto,[m-auto=""]{margin:auto}.mx-2{margin-left:8px;margin-right:8px}.mx-2\\.5{margin-left:10px;margin-right:10px}.mx-auto{margin-left:auto;margin-right:auto}.mb-1{margin-bottom:4px}.mb-1em{margin-bottom:1em}.mb-2{margin-bottom:8px}.mb-2\\.5{margin-bottom:10px}.mb-3{margin-bottom:12px}.mb-4{margin-bottom:16px}.mb-5{margin-bottom:20px}.ml-1{margin-left:4px}.ml-2\\.5{margin-left:10px}.ml-5{margin-left:20px}.ml-auto,[ml-auto=""]{margin-left:auto}.mr-0{margin-right:0}.mr-1\\.2{margin-right:4.8px}.mr-1\\.3{margin-right:5.2px}.mr-5{margin-right:20px}.mr-auto{margin-right:auto}.mr10,[mr10=""]{margin-right:40px}.mt-1{margin-top:4px}.mt-15,[mt-15=""]{margin-top:60px}.mt-2{margin-top:8px}.mt-2\\.5{margin-top:10px}.mt-4{margin-top:16px}.mt-5,[mt-5=""]{margin-top:20px}.mt-8{margin-top:32px}.inline-block{display:inline-block}.hidden{display:none}.h-1\\.5{height:6px}.h-10{height:40px}.h-15{height:60px}.h-35,[h-35=""]{height:140px}.h-5,.h5{height:20px}.h-60,[h-60=""]{height:240px}.h-8{height:32px}.h-9{height:36px}.h-auto{height:auto}.h-full,[h-full=""]{height:100%}.h-full\\!{height:100%!important}.h-px{height:1px}.h1{height:4px}.h2{height:8px}.h3{height:12px}.max-h-8{max-height:32px}.max-w-1200{max-width:4800px}.max-w-125{max-width:500px}.max-w-full{max-width:100%}.max-w-md{max-width:448px}.min-w-75{min-width:300px}.w-1\\.5{width:6px}.w-150{width:600px}.w-16{width:64px}.w-35,[w-35=""]{width:140px}.w-375{width:1500px}.w-5{width:20px}.w-75{width:300px}.w-8{width:32px}.w-auto{width:auto}.w-full{width:100%}.w-full\\!{width:100%!important}.flex,[flex=""]{display:flex}.flex-\\[1\\]{flex:1}.flex-\\[2\\]{flex:2}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.flex-wrap{flex-wrap:wrap}[transform-origin~=center]{transform-origin:center}.transform{transform:translate(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)) rotate(var(--un-rotate-z)) skew(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z))}.cursor-pointer,[cursor-pointer=""]{cursor:pointer}.resize{resize:both}.items-center,[items-center=""]{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-3{gap:12px}.gap-5{gap:20px}.space-x-4>:not([hidden])~:not([hidden]){--un-space-x-reverse:0;margin-left:calc(16px * calc(1 - var(--un-space-x-reverse)));margin-right:calc(16px * var(--un-space-x-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--un-space-y-reverse:0;margin-top:calc(16px * calc(1 - var(--un-space-y-reverse)));margin-bottom:calc(16px * var(--un-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--un-space-y-reverse:0;margin-top:calc(20px * calc(1 - var(--un-space-y-reverse)));margin-bottom:calc(20px * var(--un-space-y-reverse))}.overflow-hidden{overflow:hidden}.whitespace-nowrap{white-space:nowrap}.break-anywhere{overflow-wrap:anywhere}.b{border-width:1px}.border-0,.dark [dark~=border-0]{border-width:0px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-\\[\\#646669\\]{--un-border-opacity:1;border-color:rgb(100 102 105 / var(--un-border-opacity))}.border-gray-600{--un-border-opacity:1;border-color:rgb(75 85 99 / var(--un-border-opacity))}.border-primary{border-color:var(--primary-color)}.border-transparent{border-color:transparent}.rounded-full,[rounded-full=""]{border-radius:9999px}.rounded-lg{border-radius:8px}.rounded-md{border-radius:6px}.border-none{border-style:none}.border-solid{border-style:solid}.bg-\\[--n-color-embedded\\]{background-color:var(--n-color-embedded)}.bg-\\[--n-color\\]{background-color:var(--n-color)}.bg-\\[\\#f5f6fb\\],.bg-hex-f5f6fb{--un-bg-opacity:1;background-color:rgb(245 246 251 / var(--un-bg-opacity))}.bg-blue-500{--un-bg-opacity:1;background-color:rgb(59 130 246 / var(--un-bg-opacity))}.bg-dark,.dark [dark~=bg-dark]{--un-bg-opacity:1;background-color:rgb(24 24 28 / var(--un-bg-opacity))}.bg-gray-300{--un-bg-opacity:1;background-color:rgb(209 213 219 / var(--un-bg-opacity))}.bg-gray-50{--un-bg-opacity:1;background-color:rgb(249 250 251 / var(--un-bg-opacity))}.bg-gray-800{--un-bg-opacity:1;background-color:rgb(31 41 55 / var(--un-bg-opacity))}.bg-green-500{--un-bg-opacity:1;background-color:rgb(34 197 94 / var(--un-bg-opacity))}.bg-orange-600{--un-bg-opacity:1;background-color:rgb(234 88 12 / var(--un-bg-opacity))}.bg-red-500{--un-bg-opacity:1;background-color:rgb(239 68 68 / var(--un-bg-opacity))}.bg-transparent{background-color:transparent}.bg-white{--un-bg-opacity:1;background-color:rgb(255 255 255 / var(--un-bg-opacity))}.dark .dark\\:bg-hex-101014{--un-bg-opacity:1;background-color:rgb(16 16 20 / var(--un-bg-opacity))}.dark .dark\\:bg-hex-121212{--un-bg-opacity:1;background-color:rgb(18 18 18 / var(--un-bg-opacity))}.dark .dark\\:bg-primary\\/20,.dark .dark\\:hover\\:bg-primary\\/20:hover{background-color:var(--primary-color)}.hover\\:bg-gray-100:hover{--un-bg-opacity:1;background-color:rgb(243 244 246 / var(--un-bg-opacity))}.p-0{padding:0}.p-0\\!{padding:0!important}.p-0\\.5{padding:2px}.p-1{padding:4px}.p-2\\.5{padding:10px}.p-5{padding:20px}.p-6{padding:24px}.px,.px-4{padding-left:16px;padding-right:16px}.px-3{padding-left:12px;padding-right:12px}.px-6{padding-left:24px;padding-right:24px}.py-2{padding-top:8px;padding-bottom:8px}.py-3{padding-top:12px;padding-bottom:12px}.py-4{padding-top:16px;padding-bottom:16px}.pb-1{padding-bottom:4px}.pb-2\\.5{padding-bottom:10px}.pb-4{padding-bottom:16px}.pb-8{padding-bottom:32px}.pl-1{padding-left:4px}.pl-4{padding-left:16px}.pr-4{padding-right:16px}.pt-1{padding-top:4px}.pt-2{padding-top:8px}.pt-2\\.5{padding-top:10px}.pt-4{padding-top:16px}.pt-5{padding-top:20px}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.indent{text-indent:24px}[indent~="0"]{text-indent:0}.root-indent:root{text-indent:24px}[root-indent~="18"]:root{text-indent:72px}.vertical-bottom{vertical-align:bottom}.text-14,[text-14=""]{font-size:56px}.text-3xl{font-size:30px;line-height:36px}.text-4xl{font-size:36px;line-height:40px}.text-5xl{font-size:48px;line-height:1}.text-9xl{font-size:128px;line-height:1}.text-base{font-size:16px;line-height:24px}.text-lg{font-size:18px;line-height:28px}.text-sm{font-size:14px;line-height:20px}.text-xl{font-size:20px;line-height:28px}.text-xs{font-size:12px;line-height:16px}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.color-\\[hsla\\(0\\,0\\%\\,100\\%\\,\\.75\\)\\]{--un-text-opacity:.75;color:hsla(0,0%,100%,var(--un-text-opacity))}.color-\\#48bc19{--un-text-opacity:1;color:rgb(72 188 25 / var(--un-text-opacity))}.color-\\#f8f9fa{--un-text-opacity:1;color:rgb(248 249 250 / var(--un-text-opacity))}.color-\\#f8f9fa41{--un-text-opacity:.25;color:rgb(248 249 250 / var(--un-text-opacity))}.color-\\#f9a314{--un-text-opacity:1;color:rgb(249 163 20 / var(--un-text-opacity))}.color-primary,.text-\\[--primary-color\\]{color:var(--primary-color)}[color~="#343a40"]{--un-text-opacity:1;color:rgb(52 58 64 / var(--un-text-opacity))}[color~="#6a6a6a"]{--un-text-opacity:1;color:rgb(106 106 106 / var(--un-text-opacity))}[color~="#6c757d"]{--un-text-opacity:1;color:rgb(108 117 125 / var(--un-text-opacity))}[color~="#db4619"]{--un-text-opacity:1;color:rgb(219 70 25 / var(--un-text-opacity))}[hover~=color-primary]:hover{color:var(--primary-color)}.dark .dark\\:text-gray-100{--un-text-opacity:1;color:rgb(243 244 246 / var(--un-text-opacity))}.dark .dark\\:text-gray-300,.text-gray-300{--un-text-opacity:1;color:rgb(209 213 219 / var(--un-text-opacity))}.text-\\[rgba\\(0\\,0\\,0\\,0\\.45\\)\\]{--un-text-opacity:.45;color:rgba(0,0,0,var(--un-text-opacity))}.text-gray-400{--un-text-opacity:1;color:rgb(156 163 175 / var(--un-text-opacity))}.text-gray-500{--un-text-opacity:1;color:rgb(107 114 128 / var(--un-text-opacity))}.text-gray-600{--un-text-opacity:1;color:rgb(75 85 99 / var(--un-text-opacity))}.text-gray-700{--un-text-opacity:1;color:rgb(55 65 81 / var(--un-text-opacity))}.text-gray-900{--un-text-opacity:1;color:rgb(17 24 39 / var(--un-text-opacity))}.text-green-400{--un-text-opacity:1;color:rgb(74 222 128 / var(--un-text-opacity))}.text-green-500{--un-text-opacity:1;color:rgb(34 197 94 / var(--un-text-opacity))}.text-red-500{--un-text-opacity:1;color:rgb(239 68 68 / var(--un-text-opacity))}.text-white{--un-text-opacity:1;color:rgb(255 255 255 / var(--un-text-opacity))}.decoration-underline,[hover~=decoration-underline]:hover{text-decoration-line:underline}.tab{-moz-tab-size:4;-o-tab-size:4;tab-size:4}.opacity-30{opacity:.3}.opacity-50{opacity:.5}.opacity-85{opacity:.85}.hover\\:opacity-75:hover{opacity:.75}.shadow-black{--un-shadow-opacity:1;--un-shadow-color:rgb(0 0 0 / var(--un-shadow-opacity))}.outline-none{outline:2px solid transparent;outline-offset:2px}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}[duration~="500"]{transition-duration:.5s}[content~="$t("]{content:var(--t\\()}.placeholder-gray-400::placeholder{--un-placeholder-opacity:1;color:rgb(156 163 175 / var(--un-placeholder-opacity))}[placeholder~="$t("]::placeholder{color:var(--t\\()}@media (min-width: 768px){.md\\:mx-auto{margin-left:auto;margin-right:auto}.md\\:mb-10{margin-bottom:40px}.md\\:ml-5{margin-left:20px}.md\\:mr-2\\.5{margin-right:10px}.md\\:mt-10{margin-top:40px}.md\\:mt-5{margin-top:20px}.md\\:block{display:block}.md\\:hidden{display:none}.md\\:h-8{height:32px}.md\\:w-8{width:32px}.md\\:flex-\\[1\\]{flex:1}.md\\:flex-\\[2\\]{flex:2}.md\\:p-4{padding:16px}.md\\:pl-5{padding-left:20px}}@media (min-width: 1024px){.lg\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}#--unocss-layer-end--__ALL__--{end:__ALL__}')),document.head.appendChild(o)}}catch(t){console.error("vite-plugin-css-injected-by-js",t)}}(); +var e,t,n=Object.defineProperty,o=Object.defineProperties,r=Object.getOwnPropertyDescriptors,i=Object.getOwnPropertyNames,a=Object.getOwnPropertySymbols,l=Object.prototype.hasOwnProperty,s=Object.prototype.propertyIsEnumerable,c=(e,t)=>{if(t=Symbol[e])return t;throw Error("Symbol."+e+" is not defined")},u=(e,t,o)=>t in e?n(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,d=(e,t)=>{for(var n in t||(t={}))l.call(t,n)&&u(e,n,t[n]);if(a)for(var n of a(t))s.call(t,n)&&u(e,n,t[n]);return e},p=(e,t)=>o(e,r(t)),h=(e,t)=>{var n={};for(var o in e)l.call(e,o)&&t.indexOf(o)<0&&(n[o]=e[o]);if(null!=e&&a)for(var o of a(e))t.indexOf(o)<0&&s.call(e,o)&&(n[o]=e[o]);return n},f=(e,t,n)=>(u(e,"symbol"!=typeof t?t+"":t,n),n),v=(e,t,n)=>new Promise(((o,r)=>{var i=e=>{try{l(n.next(e))}catch(t){r(t)}},a=e=>{try{l(n.throw(e))}catch(t){r(t)}},l=e=>e.done?o(e.value):Promise.resolve(e.value).then(i,a);l((n=n.apply(e,t)).next())})),m=function(e,t){this[0]=e,this[1]=t},g=e=>{var t,n=e[c("asyncIterator")],o=!1,r={};return null==n?(n=e[c("iterator")](),t=e=>r[e]=t=>n[e](t)):(n=n.call(e),t=e=>r[e]=t=>{if(o){if(o=!1,"throw"===e)throw t;return t}return o=!0,{done:!1,value:new m(new Promise((o=>{var r=n[e](t);if(!(r instanceof Object))throw TypeError("Object expected");o(r)})),1)}}),r[c("iterator")]=()=>r,t("next"),"throw"in n?t("throw"):r.throw=e=>{throw e},"return"in n&&t("return"),r},b=(e={"assets/umi.js"(e,t){var n;function o(e,t){const n=new Set(e.split(","));return t?e=>n.has(e.toLowerCase()):e=>n.has(e)}!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))t(e);new MutationObserver((e=>{for(const n of e)if("childList"===n.type)for(const e of n.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&t(e)})).observe(document,{childList:!0,subtree:!0})}function t(e){if(e.ep)return;e.ep=!0;const t=function(e){const t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?t.credentials="include":"anonymous"===e.crossOrigin?t.credentials="omit":t.credentials="same-origin",t}(e);fetch(e.href,t)}}();const r={},i=[],a=()=>{},l=()=>!1,s=e=>111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),u=e=>e.startsWith("onUpdate:"),b=Object.assign,y=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},x=Object.prototype.hasOwnProperty,C=(e,t)=>x.call(e,t),w=Array.isArray,k=e=>"[object Map]"===E(e),S=e=>"[object Set]"===E(e),_=e=>"function"==typeof e,P=e=>"string"==typeof e,T=e=>"symbol"==typeof e,A=e=>null!==e&&"object"==typeof e,z=e=>(A(e)||_(e))&&_(e.then)&&_(e.catch),R=Object.prototype.toString,E=e=>R.call(e),O=e=>"[object Object]"===E(e),M=e=>P(e)&&"NaN"!==e&&"-"!==e[0]&&""+parseInt(e,10)===e,F=o(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),I=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},L=/-(\w)/g,B=I((e=>e.replace(L,((e,t)=>t?t.toUpperCase():"")))),D=/\B([A-Z])/g,$=I((e=>e.replace(D,"-$1").toLowerCase())),N=I((e=>e.charAt(0).toUpperCase()+e.slice(1))),j=I((e=>e?`on${N(e)}`:"")),H=(e,t)=>!Object.is(e,t),W=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:o,value:n})},V=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let q;const K=()=>q||(q="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{});function G(e){if(w(e)){const t={};for(let n=0;n{if(e){const n=e.split(Y);n.length>1&&(t[n[0].trim()]=n[1].trim())}})),t}function J(e){let t="";if(P(e))t=e;else if(w(e))for(let n=0;n!(!e||!0!==e.__v_isRef),oe=e=>P(e)?e:null==e?"":w(e)||A(e)&&(e.toString===R||!_(e.toString))?ne(e)?oe(e.value):JSON.stringify(e,re,2):String(e),re=(e,t)=>ne(t)?re(e,t.value):k(t)?{[`Map(${t.size})`]:[...t.entries()].reduce(((e,[t,n],o)=>(e[ie(t,o)+" =>"]=n,e)),{})}:S(t)?{[`Set(${t.size})`]:[...t.values()].map((e=>ie(e)))}:T(t)?ie(t):!A(t)||w(t)||O(t)?t:String(t),ie=(e,t="")=>{var n;return T(e)?`Symbol(${null!=(n=e.description)?n:t})`:e};let ae,le;class se{constructor(e=!1){this.detached=e,this._active=!0,this.effects=[],this.cleanups=[],this.parent=ae,!e&&ae&&(this.index=(ae.scopes||(ae.scopes=[])).push(this)-1)}get active(){return this._active}run(e){if(this._active){const t=ae;try{return ae=this,e()}finally{ae=t}}}on(){ae=this}off(){ae=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),xe()}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=le;try{return me=!0,le=this,this._runnings++,he(this),this.fn()}finally{fe(this),this._runnings--,le=t,me=e}}stop(){this.active&&(he(this),fe(this),this.onStop&&this.onStop(),this.active=!1)}}function he(e){e._trackId++,e._depsLength=0}function fe(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},Te=new WeakMap,Ae=Symbol(""),ze=Symbol("");function Re(e,t,n){if(me&&le){let t=Te.get(e);t||Te.set(e,t=new Map);let o=t.get(n);o||t.set(n,o=Pe((()=>t.delete(n)))),ke(le,o)}}function Ee(e,t,n,o,r,i){const a=Te.get(e);if(!a)return;let l=[];if("clear"===t)l=[...a.values()];else if("length"===n&&w(e)){const e=Number(o);a.forEach(((t,n)=>{("length"===n||!T(n)&&n>=e)&&l.push(t)}))}else switch(void 0!==n&&l.push(a.get(n)),t){case"add":w(e)?M(n)&&l.push(a.get("length")):(l.push(a.get(Ae)),k(e)&&l.push(a.get(ze)));break;case"delete":w(e)||(l.push(a.get(Ae)),k(e)&&l.push(a.get(ze)));break;case"set":k(e)&&l.push(a.get(Ae))}Ce();for(const s of l)s&&_e(s,4);we()}const Oe=o("__proto__,__v_isRef,__isVue"),Me=new Set(Object.getOwnPropertyNames(Symbol).filter((e=>"arguments"!==e&&"caller"!==e)).map((e=>Symbol[e])).filter(T)),Fe=Ie();function Ie(){const e={};return["includes","indexOf","lastIndexOf"].forEach((t=>{e[t]=function(...e){const n=kt(this);for(let t=0,r=this.length;t{e[t]=function(...e){ye(),Ce();const n=kt(this)[t].apply(this,e);return we(),xe(),n}})),e}function Le(e){T(e)||(e=String(e));const t=kt(this);return Re(t,0,e),t.hasOwnProperty(e)}class Be{constructor(e=!1,t=!1){this._isReadonly=e,this._isShallow=t}get(e,t,n){const o=this._isReadonly,r=this._isShallow;if("__v_isReactive"===t)return!o;if("__v_isReadonly"===t)return o;if("__v_isShallow"===t)return r;if("__v_raw"===t)return n===(o?r?ht:pt:r?dt:ut).get(e)||Object.getPrototypeOf(e)===Object.getPrototypeOf(n)?e:void 0;const i=w(e);if(!o){if(i&&C(Fe,t))return Reflect.get(Fe,t,n);if("hasOwnProperty"===t)return Le}const a=Reflect.get(e,t,n);return(T(t)?Me.has(t):Oe(t))?a:(o||Re(e,0,t),r?a:Rt(a)?i&&M(t)?a:a.value:A(a)?o?gt(a):vt(a):a)}}class De extends Be{constructor(e=!1){super(!1,e)}set(e,t,n,o){let r=e[t];if(!this._isShallow){const t=xt(r);if(Ct(n)||xt(n)||(r=kt(r),n=kt(n)),!w(e)&&Rt(r)&&!Rt(n))return!t&&(r.value=n,!0)}const i=w(e)&&M(t)?Number(t)e,Ue=e=>Reflect.getPrototypeOf(e);function Ve(e,t,n=!1,o=!1){const r=kt(e=e.__v_raw),i=kt(t);n||(H(t,i)&&Re(r,0,t),Re(r,0,i));const{has:a}=Ue(r),l=o?We:n?Pt:_t;return a.call(r,t)?l(e.get(t)):a.call(r,i)?l(e.get(i)):void(e!==r&&e.get(t))}function qe(e,t=!1){const n=this.__v_raw,o=kt(n),r=kt(e);return t||(H(e,r)&&Re(o,0,e),Re(o,0,r)),e===r?n.has(e):n.has(e)||n.has(r)}function Ke(e,t=!1){return e=e.__v_raw,!t&&Re(kt(e),0,Ae),Reflect.get(e,"size",e)}function Ge(e,t=!1){t||Ct(e)||xt(e)||(e=kt(e));const n=kt(this);return Ue(n).has.call(n,e)||(n.add(e),Ee(n,"add",e,e)),this}function Xe(e,t,n=!1){n||Ct(t)||xt(t)||(t=kt(t));const o=kt(this),{has:r,get:i}=Ue(o);let a=r.call(o,e);a||(e=kt(e),a=r.call(o,e));const l=i.call(o,e);return o.set(e,t),a?H(t,l)&&Ee(o,"set",e,t):Ee(o,"add",e,t),this}function Ye(e){const t=kt(this),{has:n,get:o}=Ue(t);let r=n.call(t,e);r||(e=kt(e),r=n.call(t,e)),o&&o.call(t,e);const i=t.delete(e);return r&&Ee(t,"delete",e,void 0),i}function Qe(){const e=kt(this),t=0!==e.size,n=e.clear();return t&&Ee(e,"clear",void 0,void 0),n}function Ze(e,t){return function(n,o){const r=this,i=r.__v_raw,a=kt(i),l=t?We:e?Pt:_t;return!e&&Re(a,0,Ae),i.forEach(((e,t)=>n.call(o,l(e),l(t),r)))}}function Je(e,t,n){return function(...o){const r=this.__v_raw,i=kt(r),a=k(i),l="entries"===e||e===Symbol.iterator&&a,s="keys"===e&&a,c=r[e](...o),u=n?We:t?Pt:_t;return!t&&Re(i,0,s?ze:Ae),{next(){const{value:e,done:t}=c.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 Ve(this,e)},get size(){return Ke(this)},has:qe,add:Ge,set:Xe,delete:Ye,clear:Qe,forEach:Ze(!1,!1)},t={get(e){return Ve(this,e,!1,!0)},get size(){return Ke(this)},has:qe,add(e){return Ge.call(this,e,!0)},set(e,t){return Xe.call(this,e,t,!0)},delete:Ye,clear:Qe,forEach:Ze(!1,!0)},n={get(e){return Ve(this,e,!0)},get size(){return Ke(this,!0)},has(e){return qe.call(this,e,!0)},add:et("add"),set:et("set"),delete:et("delete"),clear:et("clear"),forEach:Ze(!0,!1)},o={get(e){return Ve(this,e,!0,!0)},get size(){return Ke(this,!0)},has(e){return qe.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((r=>{e[r]=Je(r,!1,!1),n[r]=Je(r,!0,!1),t[r]=Je(r,!1,!0),o[r]=Je(r,!0,!0)})),[e,n,t,o]}const[nt,ot,rt,it]=tt();function at(e,t){const n=t?e?it:rt:e?ot:nt;return(t,o,r)=>"__v_isReactive"===o?!e:"__v_isReadonly"===o?e:"__v_raw"===o?t:Reflect.get(C(n,o)&&o in t?n:t,o,r)}const lt={get:at(!1,!1)},st={get:at(!1,!0)},ct={get:at(!0,!1)},ut=new WeakMap,dt=new WeakMap,pt=new WeakMap,ht=new WeakMap;function ft(e){return e.__v_skip||!Object.isExtensible(e)?0:function(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}((e=>E(e).slice(8,-1))(e))}function vt(e){return xt(e)?e:bt(e,!1,Ne,lt,ut)}function mt(e){return bt(e,!1,He,st,dt)}function gt(e){return bt(e,!0,je,ct,pt)}function bt(e,t,n,o,r){if(!A(e))return e;if(e.__v_raw&&(!t||!e.__v_isReactive))return e;const i=r.get(e);if(i)return i;const a=ft(e);if(0===a)return e;const l=new Proxy(e,2===a?o:n);return r.set(e,l),l}function yt(e){return xt(e)?yt(e.__v_raw):!(!e||!e.__v_isReactive)}function xt(e){return!(!e||!e.__v_isReadonly)}function Ct(e){return!(!e||!e.__v_isShallow)}function wt(e){return!!e&&!!e.__v_raw}function kt(e){const t=e&&e.__v_raw;return t?kt(t):e}function St(e){return Object.isExtensible(e)&&U(e,"__v_skip",!0),e}const _t=e=>A(e)?vt(e):e,Pt=e=>A(e)?gt(e):e;class Tt{constructor(e,t,n,o){this.getter=e,this._setter=t,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new pe((()=>e(this._value)),(()=>zt(this,2===this.effect._dirtyLevel?2:3))),this.effect.computed=this,this.effect.active=this._cacheable=!o,this.__v_isReadonly=n}get value(){const e=kt(this);return e._cacheable&&!e.effect.dirty||!H(e._value,e._value=e.effect.run())||zt(e,4),At(e),e.effect._dirtyLevel>=2&&zt(e,2),e._value}set value(e){this._setter(e)}get _dirty(){return this.effect.dirty}set _dirty(e){this.effect.dirty=e}}function At(e){var t;me&&le&&(e=kt(e),ke(le,null!=(t=e.dep)?t:e.dep=Pe((()=>e.dep=void 0),e instanceof Tt?e:void 0)))}function zt(e,t=4,n,o){const r=(e=kt(e)).dep;r&&_e(r,t)}function Rt(e){return!(!e||!0!==e.__v_isRef)}function Et(e){return Mt(e,!1)}function Ot(e){return Mt(e,!0)}function Mt(e,t){return Rt(e)?e:new Ft(e,t)}class Ft{constructor(e,t){this.__v_isShallow=t,this.dep=void 0,this.__v_isRef=!0,this._rawValue=t?e:kt(e),this._value=t?e:_t(e)}get value(){return At(this),this._value}set value(e){const t=this.__v_isShallow||Ct(e)||xt(e);e=t?e:kt(e),H(e,this._rawValue)&&(this._rawValue,this._rawValue=e,this._value=t?e:_t(e),zt(this,4))}}function It(e){return Rt(e)?e.value:e}const Lt={get:(e,t,n)=>It(Reflect.get(e,t,n)),set:(e,t,n,o)=>{const r=e[t];return Rt(r)&&!Rt(n)?(r.value=n,!0):Reflect.set(e,t,n,o)}};function Bt(e){return yt(e)?e:new Proxy(e,Lt)}class Dt{constructor(e){this.dep=void 0,this.__v_isRef=!0;const{get:t,set:n}=e((()=>At(this)),(()=>zt(this)));this._get=t,this._set=n}get value(){return this._get()}set value(e){this._set(e)}}class $t{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 function(e,t){const n=Te.get(e);return n&&n.get(t)}(kt(this._object),this._key)}}class Nt{constructor(e){this._getter=e,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function jt(e,t,n){return Rt(e)?e:_(e)?new Nt(e):A(e)&&arguments.length>1?Ht(e,t,n):Et(e)}function Ht(e,t,n){const o=e[t];return Rt(o)?o:new $t(e,t,n)}function Wt(e,t,n,o){try{return o?e(...o):e()}catch(r){Vt(r,t,n)}}function Ut(e,t,n,o){if(_(e)){const r=Wt(e,t,n,o);return r&&z(r)&&r.catch((e=>{Vt(e,t,n)})),r}if(w(e)){const r=[];for(let i=0;i>>1,r=Gt[o],i=ln(r);iln(e)-ln(t)));if(Yt.length=0,Qt)return void Qt.push(...e);for(Qt=e,Zt=0;Ztnull==e.id?1/0:e.id,sn=(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 cn(e){Kt=!1,qt=!0,Gt.sort(sn);try{for(Xt=0;Xt{o._d&&Tr(-1);const r=pn(t);let i;try{i=e(...n)}finally{pn(r),o._d&&Tr(1)}return i};return o._n=!0,o._c=!0,o._d=!0,o}function fn(e,t){if(null===un)return e;const n=ri(un),o=e.dirs||(e.dirs=[]);for(let i=0;i{e.isMounted=!0})),Hn((()=>{e.isUnmounting=!0})),e}const yn=[Function,Array],xn={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:yn,onEnter:yn,onAfterEnter:yn,onEnterCancelled:yn,onBeforeLeave:yn,onLeave:yn,onAfterLeave:yn,onLeaveCancelled:yn,onBeforeAppear:yn,onAppear:yn,onAfterAppear:yn,onAppearCancelled:yn},Cn=e=>{const t=e.subTree;return t.component?Cn(t.component):t},wn={name:"BaseTransition",props:xn,setup(e,{slots:t}){const n=Gr(),o=bn();return()=>{const r=t.default&&An(t.default(),!0);if(!r||!r.length)return;let i=r[0];if(r.length>1)for(const e of r)if(e.type!==Cr){i=e;break}const a=kt(e),{mode:l}=a;if(o.isLeaving)return _n(i);const s=Pn(i);if(!s)return _n(i);let c=Sn(s,a,o,n,(e=>c=e));Tn(s,c);const u=n.subTree,d=u&&Pn(u);if(d&&d.type!==Cr&&!Or(s,d)&&Cn(n).type!==Cr){const e=Sn(d,a,o,n);if(Tn(d,e),"out-in"===l&&s.type!==Cr)return o.isLeaving=!0,e.afterLeave=()=>{o.isLeaving=!1,!1!==n.update.active&&(n.effect.dirty=!0,n.update())},_n(i);"in-out"===l&&s.type!==Cr&&(e.delayLeave=(e,t,n)=>{kn(o,d)[String(d.key)]=d,e[mn]=()=>{t(),e[mn]=void 0,delete c.delayedLeave},c.delayedLeave=n})}return i}}};function kn(e,t){const{leavingVNodes:n}=e;let o=n.get(t.type);return o||(o=Object.create(null),n.set(t.type,o)),o}function Sn(e,t,n,o,r){const{appear:i,mode:a,persisted:l=!1,onBeforeEnter:s,onEnter:c,onAfterEnter:u,onEnterCancelled:d,onBeforeLeave:p,onLeave:h,onAfterLeave:f,onLeaveCancelled:v,onBeforeAppear:m,onAppear:g,onAfterAppear:b,onAppearCancelled:y}=t,x=String(e.key),C=kn(n,e),k=(e,t)=>{e&&Ut(e,o,9,t)},S=(e,t)=>{const n=t[1];k(e,t),w(e)?e.every((e=>e.length<=1))&&n():e.length<=1&&n()},_={mode:a,persisted:l,beforeEnter(t){let o=s;if(!n.isMounted){if(!i)return;o=m||s}t[mn]&&t[mn](!0);const r=C[x];r&&Or(e,r)&&r.el[mn]&&r.el[mn](),k(o,[t])},enter(e){let t=c,o=u,r=d;if(!n.isMounted){if(!i)return;t=g||c,o=b||u,r=y||d}let a=!1;const l=e[gn]=t=>{a||(a=!0,k(t?r:o,[e]),_.delayedLeave&&_.delayedLeave(),e[gn]=void 0)};t?S(t,[e,l]):l()},leave(t,o){const r=String(e.key);if(t[gn]&&t[gn](!0),n.isUnmounting)return o();k(p,[t]);let i=!1;const a=t[mn]=n=>{i||(i=!0,o(),k(n?v:f,[t]),t[mn]=void 0,C[r]===e&&delete C[r])};C[r]=e,h?S(h,[t,a]):a()},clone(e){const i=Sn(e,t,n,o,r);return r&&r(i),i}};return _}function _n(e){if(En(e))return(e=Br(e)).children=null,e}function Pn(e){if(!En(e))return e;const{shapeFlag:t,children:n}=e;if(n){if(16&t)return n[0];if(32&t&&_(n.default))return n.default()}}function Tn(e,t){6&e.shapeFlag&&e.component?Tn(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 An(e,t=!1,n){let o=[],r=0;for(let i=0;i1)for(let i=0;ib({name:e.name},t,{setup:e}))():e}const Rn=e=>!!e.type.__asyncLoader,En=e=>e.type.__isKeepAlive;function On(e,t){Fn(e,"a",t)}function Mn(e,t){Fn(e,"da",t)}function Fn(e,t,n=Kr){const o=e.__wdc||(e.__wdc=()=>{let t=n;for(;t;){if(t.isDeactivated)return;t=t.parent}return e()});if(Ln(t,o,n),n){let e=n.parent;for(;e&&e.parent;)En(e.parent.vnode)&&In(o,t,n,e),e=e.parent}}function In(e,t,n,o){const r=Ln(t,e,o,!0);Wn((()=>{y(o[t],r)}),n)}function Ln(e,t,n=Kr,o=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{ye();const r=Qr(n),i=Ut(t,n,e,o);return r(),xe(),i});return o?r.unshift(i):r.push(i),i}}const Bn=e=>(t,n=Kr)=>{ei&&"sp"!==e||Ln(e,((...e)=>t(...e)),n)},Dn=Bn("bm"),$n=Bn("m"),Nn=Bn("bu"),jn=Bn("u"),Hn=Bn("bum"),Wn=Bn("um"),Un=Bn("sp"),Vn=Bn("rtg"),qn=Bn("rtc");function Kn(e,t=Kr){Ln("ec",e,t)}const Gn="components";function Xn(e,t){return Zn(Gn,e,!0,t)||e}const Yn=Symbol.for("v-ndc");function Qn(e){return P(e)?Zn(Gn,e,!1)||e:e||Yn}function Zn(e,t,n=!0,o=!1){const r=un||Kr;if(r){const n=r.type;if(e===Gn){const e=ii(n,!1);if(e&&(e===t||e===B(t)||e===N(B(t))))return n}const i=Jn(r[e]||n[e],t)||Jn(r.appContext[e],t);return!i&&o?n:i}}function Jn(e,t){return e&&(e[t]||e[B(t)]||e[N(B(t))])}function eo(e,t,n,o){let r;const i=n&&n[o];if(w(e)||P(e)){r=new Array(e.length);for(let n=0,o=e.length;nt(e,n,void 0,i&&i[n])));else{const n=Object.keys(e);r=new Array(n.length);for(let o=0,a=n.length;o!Er(e)||e.type!==Cr&&!(e.type===yr&&!no(e.children))))?e:null}const oo=e=>e?Jr(e)?ri(e):oo(e.parent):null,ro=b(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=>oo(e.parent),$root:e=>oo(e.root),$emit:e=>e.emit,$options:e=>ho(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,nn(e.update)}),$nextTick:e=>e.n||(e.n=tn.bind(e.proxy)),$watch:e=>cr.bind(e)}),io=(e,t)=>e!==r&&!e.__isScriptSetup&&C(e,t),ao={get({_:e},t){if("__v_skip"===t)return!0;const{ctx:n,setupState:o,data:i,props:a,accessCache:l,type:s,appContext:c}=e;let u;if("$"!==t[0]){const s=l[t];if(void 0!==s)switch(s){case 1:return o[t];case 2:return i[t];case 4:return n[t];case 3:return a[t]}else{if(io(o,t))return l[t]=1,o[t];if(i!==r&&C(i,t))return l[t]=2,i[t];if((u=e.propsOptions[0])&&C(u,t))return l[t]=3,a[t];if(n!==r&&C(n,t))return l[t]=4,n[t];so&&(l[t]=0)}}const d=ro[t];let p,h;return d?("$attrs"===t&&Re(e.attrs,0,""),d(e)):(p=s.__cssModules)&&(p=p[t])?p:n!==r&&C(n,t)?(l[t]=4,n[t]):(h=c.config.globalProperties,C(h,t)?h[t]:void 0)},set({_:e},t,n){const{data:o,setupState:i,ctx:a}=e;return io(i,t)?(i[t]=n,!0):o!==r&&C(o,t)?(o[t]=n,!0):!(C(e.props,t)||"$"===t[0]&&t.slice(1)in e||(a[t]=n,0))},has({_:{data:e,setupState:t,accessCache:n,ctx:o,appContext:i,propsOptions:a}},l){let s;return!!n[l]||e!==r&&C(e,l)||io(t,l)||(s=a[0])&&C(s,l)||C(o,l)||C(ro,l)||C(i.config.globalProperties,l)},defineProperty(e,t,n){return null!=n.get?e._.accessCache[t]=0:C(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function lo(e){return w(e)?e.reduce(((e,t)=>(e[t]=null,e)),{}):e}let so=!0;function co(e){const t=ho(e),n=e.proxy,o=e.ctx;so=!1,t.beforeCreate&&uo(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:l,watch:s,provide:c,inject:u,created:d,beforeMount:p,mounted:h,beforeUpdate:f,updated:v,activated:m,deactivated:g,beforeDestroy:b,beforeUnmount:y,destroyed:x,unmounted:C,render:k,renderTracked:S,renderTriggered:P,errorCaptured:T,serverPrefetch:z,expose:R,inheritAttrs:E,components:O,directives:M,filters:F}=t;if(u&&function(e,t,n=a){w(e)&&(e=go(e));for(const o in e){const n=e[o];let r;r=A(n)?"default"in n?Po(n.from||o,n.default,!0):Po(n.from||o):Po(n),Rt(r)?Object.defineProperty(t,o,{enumerable:!0,configurable:!0,get:()=>r.value,set:e=>r.value=e}):t[o]=r}}(u,o,null),l)for(const a in l){const e=l[a];_(e)&&(o[a]=e.bind(n))}if(r){const t=r.call(n,n);A(t)&&(e.data=vt(t))}if(so=!0,i)for(const w in i){const e=i[w],t=_(e)?e.bind(n,n):_(e.get)?e.get.bind(n,n):a,r=!_(e)&&_(e.set)?e.set.bind(n):a,l=ai({get:t,set:r});Object.defineProperty(o,w,{enumerable:!0,configurable:!0,get:()=>l.value,set:e=>l.value=e})}if(s)for(const a in s)po(s[a],o,n,a);if(c){const e=_(c)?c.call(n):c;Reflect.ownKeys(e).forEach((t=>{_o(t,e[t])}))}function I(e,t){w(t)?t.forEach((t=>e(t.bind(n)))):t&&e(t.bind(n))}if(d&&uo(d,e,"c"),I(Dn,p),I($n,h),I(Nn,f),I(jn,v),I(On,m),I(Mn,g),I(Kn,T),I(qn,S),I(Vn,P),I(Hn,y),I(Wn,C),I(Un,z),w(R))if(R.length){const t=e.exposed||(e.exposed={});R.forEach((e=>{Object.defineProperty(t,e,{get:()=>n[e],set:t=>n[e]=t})}))}else e.exposed||(e.exposed={});k&&e.render===a&&(e.render=k),null!=E&&(e.inheritAttrs=E),O&&(e.components=O),M&&(e.directives=M)}function uo(e,t,n){Ut(w(e)?e.map((e=>e.bind(t.proxy))):e.bind(t.proxy),t,n)}function po(e,t,n,o){const r=o.includes(".")?ur(n,o):()=>n[o];if(P(e)){const n=t[e];_(n)&&lr(r,n)}else if(_(e))lr(r,e.bind(n));else if(A(e))if(w(e))e.forEach((e=>po(e,t,n,o)));else{const o=_(e.handler)?e.handler.bind(n):t[e.handler];_(o)&&lr(r,o,e)}}function ho(e){const t=e.type,{mixins:n,extends:o}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:a}}=e.appContext,l=i.get(t);let s;return l?s=l:r.length||n||o?(s={},r.length&&r.forEach((e=>fo(s,e,a,!0))),fo(s,t,a)):s=t,A(t)&&i.set(t,s),s}function fo(e,t,n,o=!1){const{mixins:r,extends:i}=t;i&&fo(e,i,n,!0),r&&r.forEach((t=>fo(e,t,n,!0)));for(const a in t)if(o&&"expose"===a);else{const o=vo[a]||n&&n[a];e[a]=o?o(e[a],t[a]):t[a]}return e}const vo={data:mo,props:xo,emits:xo,methods:yo,computed:yo,beforeCreate:bo,created:bo,beforeMount:bo,mounted:bo,beforeUpdate:bo,updated:bo,beforeDestroy:bo,beforeUnmount:bo,destroyed:bo,unmounted:bo,activated:bo,deactivated:bo,errorCaptured:bo,serverPrefetch:bo,components:yo,directives:yo,watch:function(e,t){if(!e)return t;if(!t)return e;const n=b(Object.create(null),e);for(const o in t)n[o]=bo(e[o],t[o]);return n},provide:mo,inject:function(e,t){return yo(go(e),go(t))}};function mo(e,t){return t?e?function(){return b(_(e)?e.call(this,this):e,_(t)?t.call(this,this):t)}:t:e}function go(e){if(w(e)){const t={};for(let n=0;n(i.has(e)||(e&&_(e.install)?(i.add(e),e.install(l,...t)):_(e)&&(i.add(e),e(l,...t))),l),mixin:e=>(r.mixins.includes(e)||r.mixins.push(e),l),component:(e,t)=>t?(r.components[e]=t,l):r.components[e],directive:(e,t)=>t?(r.directives[e]=t,l):r.directives[e],mount(i,s,c){if(!a){const u=Lr(n,o);return u.appContext=r,!0===c?c="svg":!1===c&&(c=void 0),s&&t?t(u,i):e(u,i,c),a=!0,l._container=i,i.__vue_app__=l,ri(u.component)}},unmount(){a&&(e(null,l._container),delete l._container.__vue_app__)},provide:(e,t)=>(r.provides[e]=t,l),runWithContext(e){const t=So;So=l;try{return e()}finally{So=t}}};return l}}let So=null;function _o(e,t){if(Kr){let n=Kr.provides;const o=Kr.parent&&Kr.parent.provides;o===n&&(n=Kr.provides=Object.create(o)),n[e]=t}}function Po(e,t,n=!1){const o=Kr||un;if(o||So){const r=So?So._context.provides:o?null==o.parent?o.vnode.appContext&&o.vnode.appContext.provides:o.parent.provides:void 0;if(r&&e in r)return r[e];if(arguments.length>1)return n&&_(t)?t.call(o&&o.proxy):t}}const To={},Ao=()=>Object.create(To),zo=e=>Object.getPrototypeOf(e)===To;function Ro(e,t,n,o){const[i,a]=e.propsOptions;let l,s=!1;if(t)for(let r in t){if(F(r))continue;const c=t[r];let u;i&&C(i,u=B(r))?a&&a.includes(u)?(l||(l={}))[u]=c:n[u]=c:fr(e.emitsOptions,r)||r in o&&c===o[r]||(o[r]=c,s=!0)}if(a){const t=kt(n),o=l||r;for(let r=0;r{u=!0;const[n,o]=Mo(e,t,!0);b(s,n),o&&c.push(...o)};!n&&t.mixins.length&&t.mixins.forEach(o),e.extends&&o(e.extends),e.mixins&&e.mixins.forEach(o)}if(!l&&!u)return A(e)&&o.set(e,i),i;if(w(l))for(let i=0;i"_"===e[0]||"$stable"===e,Lo=e=>w(e)?e.map(Nr):[Nr(e)],Bo=(e,t,n)=>{if(t._n)return t;const o=hn(((...e)=>Lo(t(...e))),n);return o._c=!1,o},Do=(e,t,n)=>{const o=e._ctx;for(const r in e){if(Io(r))continue;const n=e[r];if(_(n))t[r]=Bo(0,n,o);else if(null!=n){const e=Lo(n);t[r]=()=>e}}},$o=(e,t)=>{const n=Lo(t);e.slots.default=()=>n},No=(e,t,n)=>{for(const o in t)(n||"_"!==o)&&(e[o]=t[o])};function jo(e,t,n,o,i=!1){if(w(e))return void e.forEach(((e,r)=>jo(e,t&&(w(t)?t[r]:t),n,o,i)));if(Rn(o)&&!i)return;const a=4&o.shapeFlag?ri(o.component):o.el,l=i?null:a,{i:s,r:c}=e,u=t&&t.r,d=s.refs===r?s.refs={}:s.refs,p=s.setupState;if(null!=u&&u!==c&&(P(u)?(d[u]=null,C(p,u)&&(p[u]=null)):Rt(u)&&(u.value=null)),_(c))Wt(c,s,12,[l,d]);else{const t=P(c),o=Rt(c);if(t||o){const r=()=>{if(e.f){const n=t?C(p,c)?p[c]:d[c]:c.value;i?w(n)&&y(n,a):w(n)?n.includes(a)||n.push(a):t?(d[c]=[a],C(p,c)&&(p[c]=d[c])):(c.value=[a],e.k&&(d[e.k]=c.value))}else t?(d[c]=l,C(p,c)&&(p[c]=l)):o&&(c.value=l,e.k&&(d[e.k]=l))};l?(r.id=-1,Qo(r,n)):r()}}}const Ho=Symbol("_vte"),Wo=e=>e&&(e.disabled||""===e.disabled),Uo=e=>"undefined"!=typeof SVGElement&&e instanceof SVGElement,Vo=e=>"function"==typeof MathMLElement&&e instanceof MathMLElement,qo=(e,t)=>{const n=e&&e.to;return P(n)?t?t(n):null:n};function Ko(e,t,n,{o:{insert:o},m:r},i=2){0===i&&o(e.targetAnchor,t,n);const{el:a,anchor:l,shapeFlag:s,children:c,props:u}=e,d=2===i;if(d&&o(a,t,n),(!d||Wo(u))&&16&s)for(let p=0;p{16&b&&u(y,e,t,r,i,a,l,s)};g?m(n,c):d&&m(d,p)}else{t.el=e.el,t.targetStart=e.targetStart;const o=t.anchor=e.anchor,u=t.target=e.target,h=t.targetAnchor=e.targetAnchor,v=Wo(e.props),m=v?n:u,b=v?o:h;if("svg"===a||Uo(u)?a="svg":("mathml"===a||Vo(u))&&(a="mathml"),x?(p(e.dynamicChildren,x,m,r,i,a,l),tr(e,t,!0)):s||d(e,t,m,b,r,i,a,l,!1),g)v?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):Ko(t,n,o,c,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const e=t.target=qo(t.props,f);e&&Ko(t,e,null,c,0)}else v&&Ko(t,u,h,c,1)}Xo(t)},remove(e,t,n,{um:o,o:{remove:r}},i){const{shapeFlag:a,children:l,anchor:s,targetStart:c,targetAnchor:u,target:d,props:p}=e;if(d&&(r(c),r(u)),i&&r(s),16&a){const e=i||!Wo(p);for(let r=0;r{if(e===t)return;e&&!Or(e,t)&&(o=J(e),G(e,r,i,!0),e=null),-2===t.patchFlag&&(s=!1,t.dynamicChildren=null);const{type:c,ref:u,shapeFlag:d}=t;switch(c){case xr:b(e,t,n,o);break;case Cr:y(e,t,n,o);break;case wr:null==e&&x(t,n,o,a);break;case yr:O(e,t,n,o,r,i,a,l,s);break;default:1&d?S(e,t,n,o,r,i,a,l,s):6&d?M(e,t,n,o,r,i,a,l,s):(64&d||128&d)&&c.process(e,t,n,o,r,i,a,l,s,ne)}null!=u&&r&&jo(u,e&&e.ref,i,t||e,!t)},b=(e,t,o,r)=>{if(null==e)n(t.el=c(t.children),o,r);else{const n=t.el=e.el;t.children!==e.children&&d(n,t.children)}},y=(e,t,o,r)=>{null==e?n(t.el=u(t.children||""),o,r):t.el=e.el},x=(e,t,n,o)=>{[e.el,e.anchor]=m(e.children,t,n,o,e.el,e.anchor)},w=({el:e,anchor:t},o,r)=>{let i;for(;e&&e!==t;)i=f(e),n(e,o,r),e=i;n(t,o,r)},k=({el:e,anchor:t})=>{let n;for(;e&&e!==t;)n=f(e),o(e),e=n;o(t)},S=(e,t,n,o,r,i,a,l,s)=>{"svg"===t.type?a="svg":"math"===t.type&&(a="mathml"),null==e?_(t,n,o,r,i,a,l,s):A(e,t,r,i,a,l,s)},_=(e,t,o,r,i,a,c,u)=>{let d,h;const{props:f,shapeFlag:v,transition:m,dirs:g}=e;if(d=e.el=s(e.type,a,f&&f.is,f),8&v?p(d,e.children):16&v&&T(e.children,d,null,r,i,Jo(e,a),c,u),g&&vn(e,null,r,"created"),P(d,e,e.scopeId,c,r),f){for(const e in f)"value"===e||F(e)||l(d,e,null,f[e],a,r);"value"in f&&l(d,"value",null,f.value,a),(h=f.onVnodeBeforeMount)&&Ur(h,r,e)}g&&vn(e,null,r,"beforeMount");const b=function(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}(i,m);b&&m.beforeEnter(d),n(d,t,o),((h=f&&f.onVnodeMounted)||b||g)&&Qo((()=>{h&&Ur(h,r,e),b&&m.enter(d),g&&vn(e,null,r,"mounted")}),i)},P=(e,t,n,o,r)=>{if(n&&v(e,n),o)for(let i=0;i{for(let c=s;c{const c=t.el=e.el;let{patchFlag:u,dynamicChildren:d,dirs:h}=t;u|=16&e.patchFlag;const f=e.props||r,v=t.props||r;let m;if(n&&er(n,!1),(m=v.onVnodeBeforeUpdate)&&Ur(m,n,t,e),h&&vn(t,e,n,"beforeUpdate"),n&&er(n,!0),(f.innerHTML&&null==v.innerHTML||f.textContent&&null==v.textContent)&&p(c,""),d?R(e.dynamicChildren,d,c,n,o,Jo(t,i),a):s||j(e,t,c,null,n,o,Jo(t,i),a,!1),u>0){if(16&u)E(c,f,v,n,i);else if(2&u&&f.class!==v.class&&l(c,"class",null,v.class,i),4&u&&l(c,"style",f.style,v.style,i),8&u){const e=t.dynamicProps;for(let t=0;t{m&&Ur(m,n,t,e),h&&vn(t,e,n,"updated")}),o)},R=(e,t,n,o,r,i,a)=>{for(let l=0;l{if(t!==n){if(t!==r)for(const r in t)F(r)||r in n||l(e,r,t[r],null,i,o);for(const r in n){if(F(r))continue;const a=n[r],s=t[r];a!==s&&"value"!==r&&l(e,r,s,a,i,o)}"value"in n&&l(e,"value",t.value,n.value,i)}},O=(e,t,o,r,i,a,l,s,u)=>{const d=t.el=e?e.el:c(""),p=t.anchor=e?e.anchor:c("");let{patchFlag:h,dynamicChildren:f,slotScopeIds:v}=t;v&&(s=s?s.concat(v):v),null==e?(n(d,o,r),n(p,o,r),T(t.children||[],o,p,i,a,l,s,u)):h>0&&64&h&&f&&e.dynamicChildren?(R(e.dynamicChildren,f,o,i,a,l,s),(null!=t.key||i&&t===i.subTree)&&tr(e,t,!0)):j(e,t,o,p,i,a,l,s,u)},M=(e,t,n,o,r,i,a,l,s)=>{t.slotScopeIds=l,null==e?512&t.shapeFlag?r.ctx.activate(t,n,o,a,s):I(t,n,o,r,i,a,s):L(e,t,s)},I=(e,t,n,o,i,a,l)=>{const s=e.component=function(e,t,n){const o=e.type,i=(t?t.appContext:e.appContext)||Vr,a={uid:qr++,vnode:e,type:o,parent:t,appContext:i,root:null,next:null,subTree:null,effect:null,update:null,scope:new se(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:t?t.provides:Object.create(i.provides),accessCache:null,renderCache:[],components:null,directives:null,propsOptions:Mo(o,i),emitsOptions:hr(o,i),emit:null,emitted:null,propsDefaults:r,inheritAttrs:o.inheritAttrs,ctx:r,data:r,props:r,attrs:r,slots:r,refs:r,setupState:r,setupContext:null,suspense:n,suspenseId:n?n.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};return a.ctx={_:a},a.root=t?t.root:a,a.emit=pr.bind(null,a),e.ce&&e.ce(a),a}(e,o,i);if(En(e)&&(s.ctx.renderer=ne),function(e,t=!1,n=!1){t&&Yr(t);const{props:o,children:r}=e.vnode,i=Jr(e);(function(e,t,n,o=!1){const r={},i=Ao();e.propsDefaults=Object.create(null),Ro(e,t,r,i);for(const a in e.propsOptions[0])a in r||(r[a]=void 0);n?e.props=o?r:mt(r):e.type.props?e.props=r:e.props=i,e.attrs=i})(e,o,i,t),((e,t,n)=>{const o=e.slots=Ao();if(32&e.vnode.shapeFlag){const e=t._;e?(No(o,t,n),n&&U(o,"_",e,!0)):Do(t,o)}else t&&$o(e,t)})(e,r,n);i&&function(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,ao);const{setup:o}=n;if(o){const n=e.setupContext=o.length>1?function(e){const t=t=>{e.exposed=t||{}};return{attrs:new Proxy(e.attrs,oi),slots:e.slots,emit:e.emit,expose:t}}(e):null,r=Qr(e);ye();const i=Wt(o,e,0,[e.props,n]);if(xe(),r(),z(i)){if(i.then(Zr,Zr),t)return i.then((n=>{ti(e,n,t)})).catch((t=>{Vt(t,e,0)}));e.asyncDep=i}else ti(e,i,t)}else ni(e)}(e,t);t&&Yr(!1)}(s,!1,l),s.asyncDep){if(i&&i.registerDep(s,D,l),!e.el){const e=s.subTree=Lr(Cr);y(null,e,t,n)}}else D(s,e,t,n,i,a,l)},L=(e,t,n)=>{const o=t.component=e.component;if(function(e,t,n){const{props:o,children:r,component:i}=e,{props:a,children:l,patchFlag:s}=t,c=i.emitsOptions;if(t.dirs||t.transition)return!0;if(!(n&&s>=0))return!(!r&&!l||l&&l.$stable)||o!==a&&(o?!a||br(o,a,c):!!a);if(1024&s)return!0;if(16&s)return o?br(o,a,c):!!a;if(8&s){const e=t.dynamicProps;for(let t=0;tXt&&Gt.splice(t,1)}(o.update),o.effect.dirty=!0,o.update()}else t.el=e.el,o.vnode=t},D=(e,t,n,o,r,i,l)=>{const s=()=>{if(e.isMounted){let{next:t,bu:n,u:o,parent:a,vnode:c}=e;{const n=nr(e);if(n)return t&&(t.el=c.el,N(e,t,l)),void n.asyncDep.then((()=>{e.isUnmounted||s()}))}let u,d=t;er(e,!1),t?(t.el=c.el,N(e,t,l)):t=c,n&&W(n),(u=t.props&&t.props.onVnodeBeforeUpdate)&&Ur(u,a,t,c),er(e,!0);const p=vr(e),f=e.subTree;e.subTree=p,g(f,p,h(f.el),J(f),e,r,i),t.el=p.el,null===d&&function({vnode:e,parent:t},n){for(;t;){const o=t.subTree;if(o.suspense&&o.suspense.activeBranch===e&&(o.el=e.el),o!==e)break;(e=t.vnode).el=n,t=t.parent}}(e,p.el),o&&Qo(o,r),(u=t.props&&t.props.onVnodeUpdated)&&Qo((()=>Ur(u,a,t,c)),r)}else{let a;const{el:l,props:s}=t,{bm:c,m:u,parent:d}=e,p=Rn(t);if(er(e,!1),c&&W(c),!p&&(a=s&&s.onVnodeBeforeMount)&&Ur(a,d,t),er(e,!0),l&&re){const n=()=>{e.subTree=vr(e),re(l,e.subTree,e,r,null)};p?t.type.__asyncLoader().then((()=>!e.isUnmounted&&n())):n()}else{const a=e.subTree=vr(e);g(null,a,n,o,e,r,i),t.el=a.el}if(u&&Qo(u,r),!p&&(a=s&&s.onVnodeMounted)){const e=t;Qo((()=>Ur(a,d,e)),r)}(256&t.shapeFlag||d&&Rn(d.vnode)&&256&d.vnode.shapeFlag)&&e.a&&Qo(e.a,r),e.isMounted=!0,t=n=o=null}},c=e.effect=new pe(s,a,(()=>nn(u)),e.scope),u=e.update=()=>{c.dirty&&c.run()};u.i=e,u.id=e.uid,er(e,!0),u()},N=(e,t,n)=>{t.component=e;const o=e.vnode.props;e.vnode=t,e.next=null,function(e,t,n,o){const{props:r,attrs:i,vnode:{patchFlag:a}}=e,l=kt(r),[s]=e.propsOptions;let c=!1;if(!(o||a>0)||16&a){let o;Ro(e,t,r,i)&&(c=!0);for(const i in l)t&&(C(t,i)||(o=$(i))!==i&&C(t,o))||(s?!n||void 0===n[i]&&void 0===n[o]||(r[i]=Eo(s,l,i,void 0,e,!0)):delete r[i]);if(i!==l)for(const e in i)t&&C(t,e)||(delete i[e],c=!0)}else if(8&a){const n=e.vnode.dynamicProps;for(let o=0;o{const{vnode:o,slots:i}=e;let a=!0,l=r;if(32&o.shapeFlag){const e=t._;e?n&&1===e?a=!1:No(i,t,n):(a=!t.$stable,Do(t,i)),l=t}else t&&($o(e,t),l={default:1});if(a)for(const r in i)Io(r)||null!=l[r]||delete i[r]})(e,t.children,n),ye(),rn(e),xe()},j=(e,t,n,o,r,i,a,l,s=!1)=>{const c=e&&e.children,u=e?e.shapeFlag:0,d=t.children,{patchFlag:h,shapeFlag:f}=t;if(h>0){if(128&h)return void V(c,d,n,o,r,i,a,l,s);if(256&h)return void H(c,d,n,o,r,i,a,l,s)}8&f?(16&u&&Z(c,r,i),d!==c&&p(n,d)):16&u?16&f?V(c,d,n,o,r,i,a,l,s):Z(c,r,i,!0):(8&u&&p(n,""),16&f&&T(d,n,o,r,i,a,l,s))},H=(e,t,n,o,r,a,l,s,c)=>{t=t||i;const u=(e=e||i).length,d=t.length,p=Math.min(u,d);let h;for(h=0;hd?Z(e,r,a,!0,!1,p):T(t,n,o,r,a,l,s,c,p)},V=(e,t,n,o,r,a,l,s,c)=>{let u=0;const d=t.length;let p=e.length-1,h=d-1;for(;u<=p&&u<=h;){const o=e[u],i=t[u]=c?jr(t[u]):Nr(t[u]);if(!Or(o,i))break;g(o,i,n,null,r,a,l,s,c),u++}for(;u<=p&&u<=h;){const o=e[p],i=t[h]=c?jr(t[h]):Nr(t[h]);if(!Or(o,i))break;g(o,i,n,null,r,a,l,s,c),p--,h--}if(u>p){if(u<=h){const e=h+1,i=eh)for(;u<=p;)G(e[u],r,a,!0),u++;else{const f=u,v=u,m=new Map;for(u=v;u<=h;u++){const e=t[u]=c?jr(t[u]):Nr(t[u]);null!=e.key&&m.set(e.key,u)}let b,y=0;const x=h-v+1;let C=!1,w=0;const k=new Array(x);for(u=0;u=x){G(o,r,a,!0);continue}let i;if(null!=o.key)i=m.get(o.key);else for(b=v;b<=h;b++)if(0===k[b-v]&&Or(o,t[b])){i=b;break}void 0===i?G(o,r,a,!0):(k[i-v]=u+1,i>=w?w=i:C=!0,g(o,t[i],n,null,r,a,l,s,c),y++)}const S=C?function(e){const t=e.slice(),n=[0];let o,r,i,a,l;const s=e.length;for(o=0;o>1,e[n[l]]0&&(t[o]=n[i-1]),n[i]=o)}}for(i=n.length,a=n[i-1];i-- >0;)n[i]=a,a=t[a];return n}(k):i;for(b=S.length-1,u=x-1;u>=0;u--){const e=v+u,i=t[e],p=e+1{const{el:a,type:l,transition:s,children:c,shapeFlag:u}=e;if(6&u)q(e.component.subTree,t,o,r);else if(128&u)e.suspense.move(t,o,r);else if(64&u)l.move(e,t,o,ne);else if(l!==yr)if(l!==wr)if(2!==r&&1&u&&s)if(0===r)s.beforeEnter(a),n(a,t,o),Qo((()=>s.enter(a)),i);else{const{leave:e,delayLeave:r,afterLeave:i}=s,l=()=>n(a,t,o),c=()=>{e(a,(()=>{l(),i&&i()}))};r?r(a,l,c):c()}else n(a,t,o);else w(e,t,o);else{n(a,t,o);for(let e=0;e{const{type:i,props:a,ref:l,children:s,dynamicChildren:c,shapeFlag:u,patchFlag:d,dirs:p,cacheIndex:h}=e;if(-2===d&&(r=!1),null!=l&&jo(l,null,n,e,!0),null!=h&&(t.renderCache[h]=void 0),256&u)return void t.ctx.deactivate(e);const f=1&u&&p,v=!Rn(e);let m;if(v&&(m=a&&a.onVnodeBeforeUnmount)&&Ur(m,t,e),6&u)Q(e.component,n,o);else{if(128&u)return void e.suspense.unmount(n,o);f&&vn(e,null,t,"beforeUnmount"),64&u?e.type.remove(e,t,n,ne,o):c&&!c.hasOnce&&(i!==yr||d>0&&64&d)?Z(c,t,n,!1,!0):(i===yr&&384&d||!r&&16&u)&&Z(s,t,n),o&&X(e)}(v&&(m=a&&a.onVnodeUnmounted)||f)&&Qo((()=>{m&&Ur(m,t,e),f&&vn(e,null,t,"unmounted")}),n)},X=e=>{const{type:t,el:n,anchor:r,transition:i}=e;if(t===yr)return void Y(n,r);if(t===wr)return void k(e);const a=()=>{o(n),i&&!i.persisted&&i.afterLeave&&i.afterLeave()};if(1&e.shapeFlag&&i&&!i.persisted){const{leave:t,delayLeave:o}=i,r=()=>t(n,a);o?o(e.el,a,r):r()}else a()},Y=(e,t)=>{let n;for(;e!==t;)n=f(e),o(e),e=n;o(t)},Q=(e,t,n)=>{const{bum:o,scope:r,update:i,subTree:a,um:l,m:s,a:c}=e;or(s),or(c),o&&W(o),r.stop(),i&&(i.active=!1,G(a,e,t,n)),l&&Qo(l,t),Qo((()=>{e.isUnmounted=!0}),t),t&&t.pendingBranch&&!t.isUnmounted&&e.asyncDep&&!e.asyncResolved&&e.suspenseId===t.pendingId&&(t.deps--,0===t.deps&&t.resolve())},Z=(e,t,n,o=!1,r=!1,i=0)=>{for(let a=i;a{if(6&e.shapeFlag)return J(e.component.subTree);if(128&e.shapeFlag)return e.suspense.next();const t=f(e.anchor||e.el),n=t&&t[Ho];return n?f(n):t};let ee=!1;const te=(e,t,n)=>{null==e?t._vnode&&G(t._vnode,null,null,!0):g(t._vnode||null,e,t,null,null,null,n),t._vnode=e,ee||(ee=!0,rn(),an(),ee=!1)},ne={p:g,um:G,m:q,r:X,mt:I,mc:T,pc:j,pbc:R,n:J,o:e};let oe,re;return t&&([oe,re]=t(ne)),{render:te,hydrate:oe,createApp:ko(te,oe)}}(e)}function Jo({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 er({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function tr(e,t,n=!1){const o=e.children,r=t.children;if(w(o)&&w(r))for(let i=0;i{e(...t),P()}}const u=Kr,d=e=>!0===o?e:dr(e,!1===o?1:void 0);let p,h,f=!1,v=!1;if(Rt(e)?(p=()=>e.value,f=Ct(e)):yt(e)?(p=()=>d(e),f=!0):w(e)?(v=!0,f=e.some((e=>yt(e)||Ct(e))),p=()=>e.map((e=>Rt(e)?e.value:yt(e)?d(e):_(e)?Wt(e,u,2):void 0))):p=_(e)?t?()=>Wt(e,u,2):()=>(h&&h(),Ut(e,u,3,[g])):a,t&&o){const e=p;p=()=>dr(e())}let m,g=e=>{h=k.onStop=()=>{Wt(e,u,4),h=k.onStop=void 0}};if(ei){if(g=a,t?n&&Ut(t,u,3,[p(),v?[]:void 0,g]):p(),"sync"!==i)return a;{const e=Po(rr);m=e.__watcherHandles||(e.__watcherHandles=[])}}let b=v?new Array(e.length).fill(ar):ar;const x=()=>{if(k.active&&k.dirty)if(t){const e=k.run();(o||f||(v?e.some(((e,t)=>H(e,b[t]))):H(e,b)))&&(h&&h(),Ut(t,u,3,[e,b===ar?void 0:v&&b[0]===ar?[]:b,g]),b=e)}else k.run()};let C;x.allowRecurse=!!t,"sync"===i?C=x:"post"===i?C=()=>Qo(x,u&&u.suspense):(x.pre=!0,u&&(x.id=u.uid),C=()=>nn(x));const k=new pe(p,a,C),S=ue(),P=()=>{k.stop(),S&&y(S.effects,k)};return t?n?x():b=k.run():"post"===i?Qo(k.run.bind(k),u&&u.suspense):k.run(),m&&m.push(P),P}function cr(e,t,n){const o=this.proxy,r=P(e)?e.includes(".")?ur(o,e):()=>o[e]:e.bind(o,o);let i;_(t)?i=t:(i=t.handler,n=t);const a=Qr(this),l=sr(r,i.bind(o),n);return a(),l}function ur(e,t){const n=t.split(".");return()=>{let t=e;for(let e=0;e{dr(e,t,n)}));else if(O(e)){for(const o in e)dr(e[o],t,n);for(const o of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,o)&&dr(e[o],t,n)}return e}function pr(e,t,...n){if(e.isUnmounted)return;const o=e.vnode.props||r;let i=n;const a=t.startsWith("update:"),l=a&&((e,t)=>"modelValue"===t||"model-value"===t?e.modelModifiers:e[`${t}Modifiers`]||e[`${B(t)}Modifiers`]||e[`${$(t)}Modifiers`])(o,t.slice(7));let s;l&&(l.trim&&(i=n.map((e=>P(e)?e.trim():e))),l.number&&(i=n.map(V)));let c=o[s=j(t)]||o[s=j(B(t))];!c&&a&&(c=o[s=j($(t))]),c&&Ut(c,e,6,i);const u=o[s+"Once"];if(u){if(e.emitted){if(e.emitted[s])return}else e.emitted={};e.emitted[s]=!0,Ut(u,e,6,i)}}function hr(e,t,n=!1){const o=t.emitsCache,r=o.get(e);if(void 0!==r)return r;const i=e.emits;let a={},l=!1;if(!_(e)){const o=e=>{const n=hr(e,t,!0);n&&(l=!0,b(a,n))};!n&&t.mixins.length&&t.mixins.forEach(o),e.extends&&o(e.extends),e.mixins&&e.mixins.forEach(o)}return i||l?(w(i)?i.forEach((e=>a[e]=null)):b(a,i),A(e)&&o.set(e,a),a):(A(e)&&o.set(e,null),null)}function fr(e,t){return!(!e||!s(t))&&(t=t.slice(2).replace(/Once$/,""),C(e,t[0].toLowerCase()+t.slice(1))||C(e,$(t))||C(e,t))}function vr(e){const{type:t,vnode:n,proxy:o,withProxy:r,propsOptions:[i],slots:a,attrs:l,emit:s,render:c,renderCache:d,props:p,data:h,setupState:f,ctx:v,inheritAttrs:m}=e,g=pn(e);let b,y;try{if(4&n.shapeFlag){const e=r||o,t=e;b=Nr(c.call(t,e,d,p,f,h,v)),y=l}else{const e=t;b=Nr(e.length>1?e(p,{attrs:l,slots:a,emit:s}):e(p,null)),y=t.props?l:mr(l)}}catch(C){kr.length=0,Vt(C,e,1),b=Lr(Cr)}let x=b;if(y&&!1!==m){const e=Object.keys(y),{shapeFlag:t}=x;e.length&&7&t&&(i&&e.some(u)&&(y=gr(y,i)),x=Br(x,y,!1,!0))}return n.dirs&&(x=Br(x,null,!1,!0),x.dirs=x.dirs?x.dirs.concat(n.dirs):n.dirs),n.transition&&(x.transition=n.transition),b=x,pn(g),b}const mr=e=>{let t;for(const n in e)("class"===n||"style"===n||s(n))&&((t||(t={}))[n]=e[n]);return t},gr=(e,t)=>{const n={};for(const o in e)u(o)&&o.slice(9)in t||(n[o]=e[o]);return n};function br(e,t,n){const o=Object.keys(t);if(o.length!==Object.keys(e).length)return!0;for(let r=0;r0?Sr||i:null,kr.pop(),Sr=kr[kr.length-1]||null,Pr>0&&Sr&&Sr.push(e),e}function zr(e,t,n,o,r,i){return Ar(Ir(e,t,n,o,r,i,!0))}function Rr(e,t,n,o,r){return Ar(Lr(e,t,n,o,r,!0))}function Er(e){return!!e&&!0===e.__v_isVNode}function Or(e,t){return e.type===t.type&&e.key===t.key}const Mr=({key:e})=>null!=e?e:null,Fr=({ref:e,ref_key:t,ref_for:n})=>("number"==typeof e&&(e=""+e),null!=e?P(e)||Rt(e)||_(e)?{i:un,r:e,k:t,f:!!n}:e:null);function Ir(e,t=null,n=null,o=0,r=null,i=(e===yr?0:1),a=!1,l=!1){const s={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Mr(t),ref:t&&Fr(t),scopeId:dn,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:o,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:un};return l?(Hr(s,n),128&i&&e.normalize(s)):n&&(s.shapeFlag|=P(n)?8:16),Pr>0&&!a&&Sr&&(s.patchFlag>0||6&i)&&32!==s.patchFlag&&Sr.push(s),s}const Lr=function(e,t=null,n=null,o=0,r=null,i=!1){if(e&&e!==Yn||(e=Cr),Er(e)){const o=Br(e,t,!0);return n&&Hr(o,n),Pr>0&&!i&&Sr&&(6&o.shapeFlag?Sr[Sr.indexOf(e)]=o:Sr.push(o)),o.patchFlag=-2,o}var a;if(_(a=e)&&"__vccOpts"in a&&(e=e.__vccOpts),t){t=function(e){return e?wt(e)||zo(e)?b({},e):e:null}(t);let{class:e,style:n}=t;e&&!P(e)&&(t.class=J(e)),A(n)&&(wt(n)&&!w(n)&&(n=b({},n)),t.style=G(n))}const l=P(e)?1:(e=>e.__isSuspense)(e)?128:(e=>e.__isTeleport)(e)?64:A(e)?4:_(e)?2:0;return Ir(e,t,n,o,r,l,i,!0)};function Br(e,t,n=!1,o=!1){const{props:r,ref:i,patchFlag:a,children:l,transition:s}=e,c=t?Wr(r||{},t):r,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:c,key:c&&Mr(c),ref:t&&t.ref?n&&i?w(i)?i.concat(Fr(t)):[i,Fr(t)]:Fr(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==yr?-1===a?16:16|a:a,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:s,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Br(e.ssContent),ssFallback:e.ssFallback&&Br(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return s&&o&&Tn(u,s.clone(u)),u}function Dr(e=" ",t=0){return Lr(xr,null,e,t)}function $r(e="",t=!1){return t?(_r(),Rr(Cr,null,e)):Lr(Cr,null,e)}function Nr(e){return null==e||"boolean"==typeof e?Lr(Cr):w(e)?Lr(yr,null,e.slice()):"object"==typeof e?jr(e):Lr(xr,null,String(e))}function jr(e){return null===e.el&&-1!==e.patchFlag||e.memo?e:Br(e)}function Hr(e,t){let n=0;const{shapeFlag:o}=e;if(null==t)t=null;else if(w(t))n=16;else if("object"==typeof t){if(65&o){const n=t.default;return void(n&&(n._c&&(n._d=!1),Hr(e,n()),n._c&&(n._d=!0)))}{n=32;const o=t._;o||zo(t)?3===o&&un&&(1===un.slots._?t._=1:(t._=2,e.patchFlag|=1024)):t._ctx=un}}else _(t)?(t={default:t,_ctx:un},n=32):(t=String(t),64&o?(n=16,t=[Dr(t)]):n=8);e.children=t,e.shapeFlag|=n}function Wr(...e){const t={};for(let n=0;nKr||un;let Xr,Yr;{const e=K(),t=(t,n)=>{let o;return(o=e[t])||(o=e[t]=[]),o.push(n),e=>{o.length>1?o.forEach((t=>t(e))):o[0](e)}};Xr=t("__VUE_INSTANCE_SETTERS__",(e=>Kr=e)),Yr=t("__VUE_SSR_SETTERS__",(e=>ei=e))}const Qr=e=>{const t=Kr;return Xr(e),e.scope.on(),()=>{e.scope.off(),Xr(t)}},Zr=()=>{Kr&&Kr.scope.off(),Xr(null)};function Jr(e){return 4&e.vnode.shapeFlag}let ei=!1;function ti(e,t,n){_(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:A(t)&&(e.setupState=Bt(t)),ni(e)}function ni(e,t,n){const o=e.type;e.render||(e.render=o.render||a);{const t=Qr(e);ye();try{co(e)}finally{xe(),t()}}}const oi={get:(e,t)=>(Re(e,0,""),e[t])};function ri(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Bt(St(e.exposed)),{get:(t,n)=>n in t?t[n]:n in ro?ro[n](e):void 0,has:(e,t)=>t in e||t in ro})):e.proxy}function ii(e,t=!0){return _(e)?e.displayName||e.name:e.name||t&&e.__name}const ai=(e,t)=>{const n=function(e,t,n=!1){let o,r;const i=_(e);return i?(o=e,r=a):(o=e.get,r=e.set),new Tt(o,r,i||!r,n)}(e,0,ei);return n};function li(e,t,n){const o=arguments.length;return 2===o?A(t)&&!w(t)?Er(t)?Lr(e,null,[t]):Lr(e,t):Lr(e,null,t):(o>3?n=Array.prototype.slice.call(arguments,2):3===o&&Er(n)&&(n=[n]),Lr(e,t,n))}const si="3.4.38",ci="undefined"!=typeof document?document:null,ui=ci&&ci.createElement("template"),di={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,o)=>{const r="svg"===t?ci.createElementNS("http://www.w3.org/2000/svg",e):"mathml"===t?ci.createElementNS("http://www.w3.org/1998/Math/MathML",e):n?ci.createElement(e,{is:n}):ci.createElement(e);return"select"===e&&o&&null!=o.multiple&&r.setAttribute("multiple",o.multiple),r},createText:e=>ci.createTextNode(e),createComment:e=>ci.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>ci.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,o,r,i){const a=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),r!==i&&(r=r.nextSibling););else{ui.innerHTML="svg"===o?`${e}`:"mathml"===o?`${e}`:e;const r=ui.content;if("svg"===o||"mathml"===o){const e=r.firstChild;for(;e.firstChild;)r.appendChild(e.firstChild);r.removeChild(e)}t.insertBefore(r,n)}return[a?a.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},pi="transition",hi="animation",fi=Symbol("_vtc"),vi=(e,{slots:t})=>li(wn,xi(e),t);vi.displayName="Transition";const mi={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},gi=vi.props=b({},xn,mi),bi=(e,t=[])=>{w(e)?e.forEach((e=>e(...t))):e&&e(...t)},yi=e=>!!e&&(w(e)?e.some((e=>e.length>1)):e.length>1);function xi(e){const t={};for(const b in e)b in mi||(t[b]=e[b]);if(!1===e.css)return t;const{name:n="v",type:o,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:a=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:s=i,appearActiveClass:c=a,appearToClass:u=l,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:h=`${n}-leave-to`}=e,f=function(e){if(null==e)return null;if(A(e))return[Ci(e.enter),Ci(e.leave)];{const t=Ci(e);return[t,t]}}(r),v=f&&f[0],m=f&&f[1],{onBeforeEnter:g,onEnter:y,onEnterCancelled:x,onLeave:C,onLeaveCancelled:w,onBeforeAppear:k=g,onAppear:S=y,onAppearCancelled:_=x}=t,P=(e,t,n)=>{ki(e,t?u:l),ki(e,t?c:a),n&&n()},T=(e,t)=>{e._isLeaving=!1,ki(e,d),ki(e,h),ki(e,p),t&&t()},z=e=>(t,n)=>{const r=e?S:y,a=()=>P(t,e,n);bi(r,[t,a]),Si((()=>{ki(t,e?s:i),wi(t,e?u:l),yi(r)||Pi(t,o,v,a)}))};return b(t,{onBeforeEnter(e){bi(g,[e]),wi(e,i),wi(e,a)},onBeforeAppear(e){bi(k,[e]),wi(e,s),wi(e,c)},onEnter:z(!1),onAppear:z(!0),onLeave(e,t){e._isLeaving=!0;const n=()=>T(e,t);wi(e,d),wi(e,p),Ri(),Si((()=>{e._isLeaving&&(ki(e,d),wi(e,h),yi(C)||Pi(e,o,m,n))})),bi(C,[e,n])},onEnterCancelled(e){P(e,!1),bi(x,[e])},onAppearCancelled(e){P(e,!0),bi(_,[e])},onLeaveCancelled(e){T(e),bi(w,[e])}})}function Ci(e){const t=(e=>{const t=P(e)?Number(e):NaN;return isNaN(t)?e:t})(e);return t}function wi(e,t){t.split(/\s+/).forEach((t=>t&&e.classList.add(t))),(e[fi]||(e[fi]=new Set)).add(t)}function ki(e,t){t.split(/\s+/).forEach((t=>t&&e.classList.remove(t)));const n=e[fi];n&&(n.delete(t),n.size||(e[fi]=void 0))}function Si(e){requestAnimationFrame((()=>{requestAnimationFrame(e)}))}let _i=0;function Pi(e,t,n,o){const r=e._endId=++_i,i=()=>{r===e._endId&&o()};if(n)return setTimeout(i,n);const{type:a,timeout:l,propCount:s}=Ti(e,t);if(!a)return o();const c=a+"end";let u=0;const d=()=>{e.removeEventListener(c,p),i()},p=t=>{t.target===e&&++u>=s&&d()};setTimeout((()=>{u(n[e]||"").split(", "),r=o(`${pi}Delay`),i=o(`${pi}Duration`),a=Ai(r,i),l=o(`${hi}Delay`),s=o(`${hi}Duration`),c=Ai(l,s);let u=null,d=0,p=0;return t===pi?a>0&&(u=pi,d=a,p=i.length):t===hi?c>0&&(u=hi,d=c,p=s.length):(d=Math.max(a,c),u=d>0?a>c?pi:hi:null,p=u?u===pi?i.length:s.length:0),{type:u,timeout:d,propCount:p,hasTransform:u===pi&&/\b(transform|all)(,|$)/.test(o(`${pi}Property`).toString())}}function Ai(e,t){for(;e.lengthzi(t)+zi(e[n]))))}function zi(e){return"auto"===e?0:1e3*Number(e.slice(0,-1).replace(",","."))}function Ri(){return document.body.offsetHeight}const Ei=Symbol("_vod"),Oi=Symbol("_vsh"),Mi={beforeMount(e,{value:t},{transition:n}){e[Ei]="none"===e.style.display?"":e.style.display,n&&t?n.beforeEnter(e):Fi(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:o}){!t!=!n&&(o?t?(o.beforeEnter(e),Fi(e,!0),o.enter(e)):o.leave(e,(()=>{Fi(e,!1)})):Fi(e,t))},beforeUnmount(e,{value:t}){Fi(e,t)}};function Fi(e,t){e.style.display=t?e[Ei]:"none",e[Oi]=!t}const Ii=Symbol(""),Li=/(^|;)\s*display\s*:/,Bi=/\s*!important$/;function Di(e,t,n){if(w(n))n.forEach((n=>Di(e,t,n)));else if(null==n&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const o=function(e,t){const n=Ni[t];if(n)return n;let o=B(t);if("filter"!==o&&o in e)return Ni[t]=o;o=N(o);for(let r=0;r<$i.length;r++){const n=$i[r]+o;if(n in e)return Ni[t]=n}return t}(e,t);Bi.test(n)?e.setProperty($(o),n.replace(Bi,""),"important"):e[o]=n}}const $i=["Webkit","Moz","ms"],Ni={},ji="http://www.w3.org/1999/xlink";function Hi(e,t,n,o,r,i=ee(t)){o&&t.startsWith("xlink:")?null==n?e.removeAttributeNS(ji,t.slice(6,t.length)):e.setAttributeNS(ji,t,n):null==n||i&&!te(n)?e.removeAttribute(t):e.setAttribute(t,i?"":T(n)?String(n):n)}function Wi(e,t,n,o){e.addEventListener(t,n,o)}const Ui=Symbol("_vei");function Vi(e,t,n,o,r=null){const i=e[Ui]||(e[Ui]={}),a=i[t];if(o&&a)a.value=o;else{const[n,l]=function(e){let t;if(qi.test(e)){let n;for(t={};n=e.match(qi);)e=e.slice(0,e.length-n[0].length),t[n[0].toLowerCase()]=!0}const n=":"===e[2]?e.slice(3):$(e.slice(2));return[n,t]}(t);if(o){const a=i[t]=function(e,t){const n=e=>{if(e._vts){if(e._vts<=n.attached)return}else e._vts=Date.now();Ut(function(e,t){if(w(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=Ki||(Gi.then((()=>Ki=0)),Ki=Date.now()),n}(o,r);Wi(e,n,a,l)}else a&&(function(e,t,n,o){e.removeEventListener(t,n,o)}(e,n,a,l),i[t]=void 0)}}const qi=/(?:Once|Passive|Capture)$/;let Ki=0;const Gi=Promise.resolve(),Xi=e=>111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Yi=new WeakMap,Qi=new WeakMap,Zi=Symbol("_moveCb"),Ji=Symbol("_enterCb"),ea={name:"TransitionGroup",props:b({},gi,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=Gr(),o=bn();let r,i;return jn((()=>{if(!r.length)return;const t=e.moveClass||`${e.name||"v"}-move`;if(!function(e,t,n){const o=e.cloneNode(),r=e[fi];r&&r.forEach((e=>{e.split(/\s+/).forEach((e=>e&&o.classList.remove(e)))})),n.split(/\s+/).forEach((e=>e&&o.classList.add(e))),o.style.display="none";const i=1===t.nodeType?t:t.parentNode;i.appendChild(o);const{hasTransform:a}=Ti(o);return i.removeChild(o),a}(r[0].el,n.vnode.el,t))return;r.forEach(na),r.forEach(oa);const o=r.filter(ra);Ri(),o.forEach((e=>{const n=e.el,o=n.style;wi(n,t),o.transform=o.webkitTransform=o.transitionDuration="";const r=n[Zi]=e=>{e&&e.target!==n||e&&!/transform$/.test(e.propertyName)||(n.removeEventListener("transitionend",r),n[Zi]=null,ki(n,t))};n.addEventListener("transitionend",r)}))})),()=>{const a=kt(e),l=xi(a);let s=a.tag||yr;if(r=[],i)for(let e=0;e{const t=e.props["onUpdate:modelValue"]||!1;return w(t)?e=>W(t,e):t};function aa(e){e.target.composing=!0}function la(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const sa=Symbol("_assign"),ca={created(e,{modifiers:{lazy:t,trim:n,number:o}},r){e[sa]=ia(r);const i=o||r.props&&"number"===r.props.type;Wi(e,t?"change":"input",(t=>{if(t.target.composing)return;let o=e.value;n&&(o=o.trim()),i&&(o=V(o)),e[sa](o)})),n&&Wi(e,"change",(()=>{e.value=e.value.trim()})),t||(Wi(e,"compositionstart",aa),Wi(e,"compositionend",la),Wi(e,"change",la))},mounted(e,{value:t}){e.value=null==t?"":t},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:o,trim:r,number:i}},a){if(e[sa]=ia(a),e.composing)return;const l=null==t?"":t;if((!i&&"number"!==e.type||/^0\d/.test(e.value)?e.value:V(e.value))!==l){if(document.activeElement===e&&"range"!==e.type){if(o&&t===n)return;if(r&&e.value.trim()===l)return}e.value=l}}},ua=["ctrl","shift","alt","meta"],da={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)=>ua.some((n=>e[`${n}Key`]&&!t.includes(n)))},pa=(e,t)=>{const n=e._withMods||(e._withMods={}),o=t.join(".");return n[o]||(n[o]=(n,...o)=>{for(let e=0;e{const n=e._withKeys||(e._withKeys={}),o=t.join(".");return n[o]||(n[o]=n=>{if(!("key"in n))return;const o=$(n.key);return t.some((e=>e===o||ha[e]===o))?e(n):void 0})},va=b({patchProp:(e,t,n,o,r,i)=>{const a="svg"===r;"class"===t?function(e,t,n){const o=e[fi];o&&(t=(t?[t,...o]:[...o]).join(" ")),null==t?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}(e,o,a):"style"===t?function(e,t,n){const o=e.style,r=P(n);let i=!1;if(n&&!r){if(t)if(P(t))for(const e of t.split(";")){const t=e.slice(0,e.indexOf(":")).trim();null==n[t]&&Di(o,t,"")}else for(const e in t)null==n[e]&&Di(o,e,"");for(const e in n)"display"===e&&(i=!0),Di(o,e,n[e])}else if(r){if(t!==n){const e=o[Ii];e&&(n+=";"+e),o.cssText=n,i=Li.test(n)}}else t&&e.removeAttribute("style");Ei in e&&(e[Ei]=i?o.display:"",e[Oi]&&(o.display="none"))}(e,n,o):s(t)?u(t)||Vi(e,t,0,o,i):("."===t[0]?(t=t.slice(1),1):"^"===t[0]?(t=t.slice(1),0):function(e,t,n,o){if(o)return"innerHTML"===t||"textContent"===t||!!(t in e&&Xi(t)&&_(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}return(!Xi(t)||!P(n))&&t in e}(e,t,o,a))?(function(e,t,n,o){if("innerHTML"===t||"textContent"===t){if(null==n)return;return void(e[t]=n)}const r=e.tagName;if("value"===t&&"PROGRESS"!==r&&!r.includes("-")){const o="OPTION"===r?e.getAttribute("value")||"":e.value,i=null==n?"":String(n);return o===i&&"_value"in e||(e.value=i),null==n&&e.removeAttribute(t),void(e._value=n)}let i=!1;if(""===n||null==n){const o=typeof e[t];"boolean"===o?n=te(n):null==n&&"string"===o?(n="",i=!0):"number"===o&&(n=0,i=!0)}try{e[t]=n}catch(a){}i&&e.removeAttribute(t)}(e,t,o),e.tagName.includes("-")||"value"!==t&&"checked"!==t&&"selected"!==t||Hi(e,t,o,a,0,"value"!==t)):("true-value"===t?e._trueValue=o:"false-value"===t&&(e._falseValue=o),Hi(e,t,o,a))}},di);let ma;const ga=(...e)=>{const t=(ma||(ma=Zo(va))).createApp(...e),{mount:n}=t;return t.mount=e=>{const o=function(e){return P(e)?document.querySelector(e):e}(e);if(!o)return;const r=t._component;_(r)||r.render||r.template||(r.template=o.innerHTML),o.innerHTML="";const i=n(o,!1,function(e){return e instanceof SVGElement?"svg":"function"==typeof MathMLElement&&e instanceof MathMLElement?"mathml":void 0}(o));return o instanceof Element&&(o.removeAttribute("v-cloak"),o.setAttribute("data-v-app","")),i},t},ba="undefined"!=typeof document,ya=Object.assign;function xa(e,t){const n={};for(const o in t){const r=t[o];n[o]=wa(r)?r.map(e):e(r)}return n}const Ca=()=>{},wa=Array.isArray,ka=/#/g,Sa=/&/g,_a=/\//g,Pa=/=/g,Ta=/\?/g,Aa=/\+/g,za=/%5B/g,Ra=/%5D/g,Ea=/%5E/g,Oa=/%60/g,Ma=/%7B/g,Fa=/%7C/g,Ia=/%7D/g,La=/%20/g;function Ba(e){return encodeURI(""+e).replace(Fa,"|").replace(za,"[").replace(Ra,"]")}function Da(e){return Ba(e).replace(Aa,"%2B").replace(La,"+").replace(ka,"%23").replace(Sa,"%26").replace(Oa,"`").replace(Ma,"{").replace(Ia,"}").replace(Ea,"^")}function $a(e){return null==e?"":function(e){return Ba(e).replace(ka,"%23").replace(Ta,"%3F")}(e).replace(_a,"%2F")}function Na(e){try{return decodeURIComponent(""+e)}catch(t){}return""+e}const ja=/\/$/;function Ha(e,t,n="/"){let o,r={},i="",a="";const l=t.indexOf("#");let s=t.indexOf("?");return l=0&&(s=-1),s>-1&&(o=t.slice(0,s),i=t.slice(s+1,l>-1?l:t.length),r=e(i)),l>-1&&(o=o||t.slice(0,l),a=t.slice(l,t.length)),o=function(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),o=e.split("/"),r=o[o.length-1];".."!==r&&"."!==r||o.push("");let i,a,l=n.length-1;for(i=0;i1&&l--}return n.slice(0,l).join("/")+"/"+o.slice(i).join("/")}(null!=o?o:t,n),{fullPath:o+(i&&"?")+i+a,path:o,query:r,hash:Na(a)}}function Wa(e,t){return t&&e.toLowerCase().startsWith(t.toLowerCase())?e.slice(t.length)||"/":e}function Ua(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Va(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!qa(e[n],t[n]))return!1;return!0}function qa(e,t){return wa(e)?Ka(e,t):wa(t)?Ka(t,e):e===t}function Ka(e,t){return wa(t)?e.length===t.length&&e.every(((e,n)=>e===t[n])):1===e.length&&e[0]===t}const Ga={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};var Xa,Ya,Qa,Za;function Ja(e){if(!e)if(ba){const t=document.querySelector("base");e=(e=t&&t.getAttribute("href")||"/").replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return"/"!==e[0]&&"#"!==e[0]&&(e="/"+e),e.replace(ja,"")}(Ya=Xa||(Xa={})).pop="pop",Ya.push="push",(Za=Qa||(Qa={})).back="back",Za.forward="forward",Za.unknown="";const el=/^[^#]+#/;function tl(e,t){return e.replace(el,"#")+t}const nl=()=>({left:window.scrollX,top:window.scrollY});function ol(e){let t;if("el"in e){const n=e.el,o="string"==typeof n&&n.startsWith("#"),r="string"==typeof n?o?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!r)return;t=function(e,t){const n=document.documentElement.getBoundingClientRect(),o=e.getBoundingClientRect();return{behavior:t.behavior,left:o.left-n.left-(t.left||0),top:o.top-n.top-(t.top||0)}}(r,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(null!=t.left?t.left:window.scrollX,null!=t.top?t.top:window.scrollY)}function rl(e,t){return(history.state?history.state.position-t:-1)+e}const il=new Map;function al(e,t){const{pathname:n,search:o,hash:r}=t,i=e.indexOf("#");if(i>-1){let t=r.includes(e.slice(i))?e.slice(i).length:1,n=r.slice(t);return"/"!==n[0]&&(n="/"+n),Wa(n,"")}return Wa(n,e)+o+r}function ll(e,t,n,o=!1,r=!1){return{back:e,current:t,forward:n,replaced:o,position:window.history.length,scroll:r?nl():null}}function sl(e){const{history:t,location:n}=window,o={value:al(e,n)},r={value:t.state};function i(o,i,a){const l=e.indexOf("#"),s=l>-1?(n.host&&document.querySelector("base")?e:e.slice(l))+o:location.protocol+"//"+location.host+e+o;try{t[a?"replaceState":"pushState"](i,"",s),r.value=i}catch(c){n[a?"replace":"assign"](s)}}return r.value||i(o.value,{back:null,current:o.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0),{location:o,state:r,push:function(e,n){const a=ya({},r.value,t.state,{forward:e,scroll:nl()});i(a.current,a,!0),i(e,ya({},ll(o.value,e,null),{position:a.position+1},n),!1),o.value=e},replace:function(e,n){i(e,ya({},t.state,ll(r.value.back,e,r.value.forward,!0),n,{position:r.value.position}),!0),o.value=e}}}function cl(e){const t=sl(e=Ja(e)),n=function(e,t,n,o){let r=[],i=[],a=null;const l=({state:i})=>{const l=al(e,location),s=n.value,c=t.value;let u=0;if(i){if(n.value=l,t.value=i,a&&a===s)return void(a=null);u=c?i.position-c.position:0}else o(l);r.forEach((e=>{e(n.value,s,{delta:u,type:Xa.pop,direction:u?u>0?Qa.forward:Qa.back:Qa.unknown})}))};function s(){const{history:e}=window;e.state&&e.replaceState(ya({},e.state,{scroll:nl()}),"")}return window.addEventListener("popstate",l),window.addEventListener("beforeunload",s,{passive:!0}),{pauseListeners:function(){a=n.value},listen:function(e){r.push(e);const t=()=>{const t=r.indexOf(e);t>-1&&r.splice(t,1)};return i.push(t),t},destroy:function(){for(const e of i)e();i=[],window.removeEventListener("popstate",l),window.removeEventListener("beforeunload",s)}}}(e,t.state,t.location,t.replace),o=ya({location:"",base:e,go:function(e,t=!0){t||n.pauseListeners(),history.go(e)},createHref:tl.bind(null,e)},t,n);return Object.defineProperty(o,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(o,"state",{enumerable:!0,get:()=>t.state.value}),o}function ul(e){return"string"==typeof e||"symbol"==typeof e}const dl=Symbol("");var pl,hl;function fl(e,t){return ya(new Error,{type:e,[dl]:!0},t)}function vl(e,t){return e instanceof Error&&dl in e&&(null==t||!!(e.type&t))}(hl=pl||(pl={}))[hl.aborted=4]="aborted",hl[hl.cancelled=8]="cancelled",hl[hl.duplicated=16]="duplicated";const ml="[^/]+?",gl={sensitive:!1,strict:!1,start:!0,end:!0},bl=/[.+*?^${}()[\]/\\]/g;function yl(e,t){let n=0;for(;nt.length?1===t.length&&80===t[0]?1:-1:0}function xl(e,t){let n=0;const o=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const wl={type:0,value:""},kl=/[a-zA-Z0-9_]/;function Sl(e,t,n){const o=function(e,t){const n=ya({},gl,t),o=[];let r=n.start?"^":"";const i=[];for(const s of e){const e=s.length?[]:[90];n.strict&&!s.length&&(r+="/");for(let t=0;t1&&("*"===l||"+"===l)&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),i.push({type:1,value:c,regexp:u,repeatable:"*"===l||"+"===l,optional:"*"===l||"?"===l})):t("Invalid state to consume buffer"),c="")}function p(){c+=l}for(;s{i(p)}:Ca}function i(e){if(ul(e)){const t=o.get(e);t&&(o.delete(e),n.splice(n.indexOf(t),1),t.children.forEach(i),t.alias.forEach(i))}else{const t=n.indexOf(e);t>-1&&(n.splice(t,1),e.record.name&&o.delete(e.record.name),e.children.forEach(i),e.alias.forEach(i))}}function a(e){const t=function(e,t){let n=0,o=t.length;for(;n!==o;){const r=n+o>>1;xl(e,t[r])<0?o=r:n=r+1}const r=function(e){let t=e;for(;t=t.parent;)if(El(t)&&0===xl(e,t))return t}(e);return r&&(o=t.lastIndexOf(r,o-1)),o}(e,n);n.splice(t,0,e),e.record.name&&!Al(e)&&o.set(e.record.name,e)}return t=Rl({strict:!1,end:!0,sensitive:!1},t),e.forEach((e=>r(e))),{addRoute:r,resolve:function(e,t){let r,i,a,l={};if("name"in e&&e.name){if(r=o.get(e.name),!r)throw fl(1,{location:e});a=r.record.name,l=ya(Pl(t.params,r.keys.filter((e=>!e.optional)).concat(r.parent?r.parent.keys.filter((e=>e.optional)):[]).map((e=>e.name))),e.params&&Pl(e.params,r.keys.map((e=>e.name)))),i=r.stringify(l)}else if(null!=e.path)i=e.path,r=n.find((e=>e.re.test(i))),r&&(l=r.parse(i),a=r.record.name);else{if(r=t.name?o.get(t.name):n.find((e=>e.re.test(t.path))),!r)throw fl(1,{location:e,currentLocation:t});a=r.record.name,l=ya({},t.params,e.params),i=r.stringify(l)}const s=[];let c=r;for(;c;)s.unshift(c.record),c=c.parent;return{name:a,path:i,params:l,matched:s,meta:zl(s)}},removeRoute:i,clearRoutes:function(){n.length=0,o.clear()},getRoutes:function(){return n},getRecordMatcher:function(e){return o.get(e)}}}function Pl(e,t){const n={};for(const o of t)o in e&&(n[o]=e[o]);return n}function Tl(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const o in e.components)t[o]="object"==typeof n?n[o]:n;return t}function Al(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function zl(e){return e.reduce(((e,t)=>ya(e,t.meta)),{})}function Rl(e,t){const n={};for(const o in e)n[o]=o in t?t[o]:e[o];return n}function El({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Ol(e){const t={};if(""===e||"?"===e)return t;const n=("?"===e[0]?e.slice(1):e).split("&");for(let o=0;oe&&Da(e))):[o&&Da(o)]).forEach((e=>{void 0!==e&&(t+=(t.length?"&":"")+n,null!=e&&(t+="="+e))})):void 0!==o&&(t+=(t.length?"&":"")+n)}return t}function Fl(e){const t={};for(const n in e){const o=e[n];void 0!==o&&(t[n]=wa(o)?o.map((e=>null==e?null:""+e)):null==o?o:""+o)}return t}const Il=Symbol(""),Ll=Symbol(""),Bl=Symbol(""),Dl=Symbol(""),$l=Symbol("");function Nl(){let e=[];return{add:function(t){return e.push(t),()=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)}},list:()=>e.slice(),reset:function(){e=[]}}}function jl(e,t,n,o,r,i=(e=>e())){const a=o&&(o.enterCallbacks[r]=o.enterCallbacks[r]||[]);return()=>new Promise(((l,s)=>{const c=e=>{var i;!1===e?s(fl(4,{from:n,to:t})):e instanceof Error?s(e):"string"==typeof(i=e)||i&&"object"==typeof i?s(fl(2,{from:t,to:e})):(a&&o.enterCallbacks[r]===a&&"function"==typeof e&&a.push(e),l())},u=i((()=>e.call(o&&o.instances[r],t,n,c)));let d=Promise.resolve(u);e.length<3&&(d=d.then(c)),d.catch((e=>s(e)))}))}function Hl(e,t,n,o,r=(e=>e())){const i=[];for(const l of e)for(const e in l.components){let s=l.components[e];if("beforeRouteEnter"===t||l.instances[e])if("object"==typeof(a=s)||"displayName"in a||"props"in a||"__vccOpts"in a){const a=(s.__vccOpts||s)[t];a&&i.push(jl(a,n,o,l,e,r))}else{let a=s();i.push((()=>a.then((i=>{if(!i)return Promise.reject(new Error(`Couldn't resolve component "${e}" at "${l.path}"`));const a=(s=i).__esModule||"Module"===s[Symbol.toStringTag]?i.default:i;var s;l.components[e]=a;const c=(a.__vccOpts||a)[t];return c&&jl(c,n,o,l,e,r)()}))))}}var a;return i}function Wl(e){const t=Po(Bl),n=Po(Dl),o=ai((()=>{const n=It(e.to);return t.resolve(n)})),r=ai((()=>{const{matched:e}=o.value,{length:t}=e,r=e[t-1],i=n.matched;if(!r||!i.length)return-1;const a=i.findIndex(Ua.bind(null,r));if(a>-1)return a;const l=Vl(e[t-2]);return t>1&&Vl(r)===l&&i[i.length-1].path!==l?i.findIndex(Ua.bind(null,e[t-2])):a})),i=ai((()=>r.value>-1&&function(e,t){for(const n in t){const o=t[n],r=e[n];if("string"==typeof o){if(o!==r)return!1}else if(!wa(r)||r.length!==o.length||o.some(((e,t)=>e!==r[t])))return!1}return!0}(n.params,o.value.params))),a=ai((()=>r.value>-1&&r.value===n.matched.length-1&&Va(n.params,o.value.params)));return{route:o,href:ai((()=>o.value.href)),isActive:i,isExactActive:a,navigate:function(n={}){return function(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey||e.defaultPrevented||void 0!==e.button&&0!==e.button)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}(n)?t[It(e.replace)?"replace":"push"](It(e.to)).catch(Ca):Promise.resolve()}}}const Ul=zn({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:Wl,setup(e,{slots:t}){const n=vt(Wl(e)),{options:o}=Po(Bl),r=ai((()=>({[ql(e.activeClass,o.linkActiveClass,"router-link-active")]:n.isActive,[ql(e.exactActiveClass,o.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive})));return()=>{const o=t.default&&t.default(n);return e.custom?o:li("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},o)}}});function Vl(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const ql=(e,t,n)=>null!=e?e:null!=t?t:n;function Kl(e,t){if(!e)return null;const n=e(t);return 1===n.length?n[0]:n}const Gl=zn({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const o=Po($l),r=ai((()=>e.route||o.value)),i=Po(Ll,0),a=ai((()=>{let e=It(i);const{matched:t}=r.value;let n;for(;(n=t[e])&&!n.components;)e++;return e})),l=ai((()=>r.value.matched[a.value]));_o(Ll,ai((()=>a.value+1))),_o(Il,l),_o($l,r);const s=Et();return lr((()=>[s.value,l.value,e.name]),(([e,t,n],[o,r,i])=>{t&&(t.instances[n]=e,r&&r!==t&&e&&e===o&&(t.leaveGuards.size||(t.leaveGuards=r.leaveGuards),t.updateGuards.size||(t.updateGuards=r.updateGuards))),!e||!t||r&&Ua(t,r)&&o||(t.enterCallbacks[n]||[]).forEach((t=>t(e)))}),{flush:"post"}),()=>{const o=r.value,i=e.name,a=l.value,c=a&&a.components[i];if(!c)return Kl(n.default,{Component:c,route:o});const u=a.props[i],d=u?!0===u?o.params:"function"==typeof u?u(o):u:null,p=li(c,ya({},d,t,{onVnodeUnmounted:e=>{e.component.isUnmounted&&(a.instances[i]=null)},ref:s}));return Kl(n.default,{Component:p,route:o})||p}}});function Xl(){return Po(Bl)}function Yl(e){return Po(Dl)}const Ql={},Zl=function(e,t,n){if(!t||0===t.length)return e();const o=document.getElementsByTagName("link");return Promise.all(t.map((e=>{if((e=function(e){return"/"+e}(e))in Ql)return;Ql[e]=!0;const t=e.endsWith(".css"),r=t?'[rel="stylesheet"]':"";if(n)for(let n=o.length-1;n>=0;n--){const r=o[n];if(r.href===e&&(!t||"stylesheet"===r.rel))return}else if(document.querySelector(`link[href="${e}"]${r}`))return;const i=document.createElement("link");return i.rel=t?"stylesheet":"modulepreload",t||(i.as="script",i.crossOrigin=""),i.href=e,document.head.appendChild(i),t?new Promise(((t,n)=>{i.addEventListener("load",t),i.addEventListener("error",(()=>n(new Error(`Unable to preload CSS for ${e}`))))})):void 0}))).then((()=>e())).catch((e=>{const t=new Event("vite:preloadError",{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}))},Jl={name:"dashboard",path:"/",component:()=>Zl((()=>Promise.resolve().then((()=>qj))),void 0),redirect:"dashboard",meta:{isHidden:!1},children:[{name:"dashboard",path:"/dashboard",component:()=>Zl((()=>Promise.resolve().then((()=>Hq))),void 0),meta:{title:"仪表盘",icon:"mdi:home",order:0}}]},es=Object.freeze(Object.defineProperty({__proto__:null,default:Jl},Symbol.toStringTag,{value:"Module"})),ts={name:"Invite",path:"/",component:()=>Zl((()=>Promise.resolve().then((()=>qj))),void 0),redirect:"/invite",meta:{isHidden:!1},children:[{name:"Invite",path:"invite",component:()=>Zl((()=>Promise.resolve().then((()=>bK))),void 0),meta:{title:"我的邀请",icon:"mdi:invite",order:1,group:{key:"finance",label:"财务"}}}]},ns=Object.freeze(Object.defineProperty({__proto__:null,default:ts},Symbol.toStringTag,{value:"Module"})),os={name:"knowledge",path:"/",component:()=>Zl((()=>Promise.resolve().then((()=>qj))),void 0),redirect:"/knowledge",meta:{isHidden:!1},children:[{name:"Knowledge",path:"knowledge",component:()=>Zl((()=>Promise.resolve().then((()=>SK))),void 0),meta:{title:"使用文档",icon:"mdi-book-open-variant",order:10}}]},rs=Object.freeze(Object.defineProperty({__proto__:null,default:os},Symbol.toStringTag,{value:"Module"})),is={name:"Node",path:"/",component:()=>Zl((()=>Promise.resolve().then((()=>qj))),void 0),redirect:"/node",meta:{isHidden:!1},children:[{name:"Node",path:"node",component:()=>Zl((()=>Promise.resolve().then((()=>WK))),void 0),meta:{title:"节点状态",icon:"mdi-check-circle-outline",order:11,group:{key:"subscribe",label:"订阅"}}}]},as=Object.freeze(Object.defineProperty({__proto__:null,default:is},Symbol.toStringTag,{value:"Module"})),ls={name:"Order",path:"/",component:()=>Zl((()=>Promise.resolve().then((()=>qj))),void 0),redirect:"/order",meta:{isHidden:!1},children:[{name:"Order",path:"order",component:()=>Zl((()=>Promise.resolve().then((()=>VK))),void 0),meta:{title:"我的订单",icon:"mdi-format-list-bulleted",order:0,group:{key:"finance",label:"财务"}}},{name:"OrderDetail",path:"order/:trade_no",component:()=>Zl((()=>Promise.resolve().then((()=>vX))),void 0),meta:{title:"订单详情",icon:"mdi:doc",order:1,isHidden:!0}}]},ss=Object.freeze(Object.defineProperty({__proto__:null,default:ls},Symbol.toStringTag,{value:"Module"})),cs={name:"plan",path:"/",component:()=>Zl((()=>Promise.resolve().then((()=>qj))),void 0),redirect:"/plan",meta:{isHidden:!1},children:[{name:"Plan",path:"plan",component:()=>Zl((()=>Promise.resolve().then((()=>MX))),void 0),meta:{title:"购买订阅",icon:"mdi-shopping-outline",order:10,group:{key:"subscribe",label:"订阅"}}},{name:"PlanDetail",path:"plan/:plan_id",component:()=>Zl((()=>Promise.resolve().then((()=>rY))),void 0),meta:{title:"配置订阅",icon:"mdi:doc",order:1,isHidden:!0}}]},us=Object.freeze(Object.defineProperty({__proto__:null,default:cs},Symbol.toStringTag,{value:"Module"})),ds={name:"profile",path:"/",component:()=>Zl((()=>Promise.resolve().then((()=>qj))),void 0),redirect:"/profile",meta:{isHidden:!1},children:[{name:"Profile",path:"profile",component:()=>Zl((()=>Promise.resolve().then((()=>PY))),void 0),meta:{title:"个人中心",icon:"mdi-account-outline",order:0,group:{key:"user",label:"用户"}}}]},ps=Object.freeze(Object.defineProperty({__proto__:null,default:ds},Symbol.toStringTag,{value:"Module"})),hs={name:"ticket",path:"/",component:()=>Zl((()=>Promise.resolve().then((()=>qj))),void 0),redirect:"/ticket",meta:{isHidden:!1},children:[{name:"Ticket",path:"ticket",component:()=>Zl((()=>Promise.resolve().then((()=>zY))),void 0),meta:{title:"我的工单",icon:"mdi-comment-alert-outline",order:0,group:{key:"user",label:"用户"}}},{name:"TicketDetail",path:"ticket/:ticket_id",component:()=>Zl((()=>Promise.resolve().then((()=>FY))),void 0),meta:{title:"工单详情",order:0,isHidden:!0}}]},fs=Object.freeze(Object.defineProperty({__proto__:null,default:hs},Symbol.toStringTag,{value:"Module"})),vs={name:"traffic",path:"/",component:()=>Zl((()=>Promise.resolve().then((()=>qj))),void 0),redirect:"/traffic",meta:{isHidden:!1},children:[{name:"Traffic",path:"traffic",component:()=>Zl((()=>Promise.resolve().then((()=>LY))),void 0),meta:{title:"流量明细",icon:"mdi-poll",order:0,group:{key:"user",label:"用户"}}}]},ms=Object.freeze(Object.defineProperty({__proto__:null,default:vs},Symbol.toStringTag,{value:"Module"})),gs=[{name:"Home",path:"/",redirect:"/dashboard",meta:{title:"首页",isHidden:!0}},{name:"404",path:"/404",component:()=>Zl((()=>Promise.resolve().then((()=>$Y))),void 0),meta:{title:"404",isHidden:!0}},{name:"LOGIN",path:"/login",component:()=>Zl((()=>Promise.resolve().then((()=>FQ))),void 0),meta:{title:"登录页",isHidden:!0}},{name:"Register",path:"/register",component:()=>Zl((()=>Promise.resolve().then((()=>FQ))),void 0),meta:{title:"注册",isHidden:!0}},{name:"forgetpassword",path:"/forgetpassword",component:()=>Zl((()=>Promise.resolve().then((()=>FQ))),void 0),meta:{title:"重置密码",isHidden:!0}}],bs={name:"NotFound",path:"/:pathMatch(.*)*",redirect:"/404",meta:{title:"Not Found"}},ys=Object.assign({"/src/views/dashboard/route.ts":es,"/src/views/invite/route.ts":ns,"/src/views/knowledge/route.ts":rs,"/src/views/node/route.ts":as,"/src/views/order/route.ts":ss,"/src/views/plan/route.ts":us,"/src/views/profile/route.ts":ps,"/src/views/ticket/route.ts":fs,"/src/views/traffic/route.ts":ms}),xs=[];Object.keys(ys).forEach((e=>{xs.push(ys[e].default)}));const Cs=(null==(n=window.settings)?void 0:n.title)||"Xboard";let ws;const ks=e=>ws=e,Ss=Symbol();function _s(e){return e&&"object"==typeof e&&"[object Object]"===Object.prototype.toString.call(e)&&"function"!=typeof e.toJSON}var Ps,Ts;(Ts=Ps||(Ps={})).direct="direct",Ts.patchObject="patch object",Ts.patchFunction="patch function";const As=()=>{};function zs(e,t,n,o=As){e.push(t);const r=()=>{const n=e.indexOf(t);n>-1&&(e.splice(n,1),o())};return!n&&ue()&&de(r),r}function Rs(e,...t){e.slice().forEach((e=>{e(...t)}))}const Es=e=>e(),Os=Symbol(),Ms=Symbol();function Fs(e,t){e instanceof Map&&t instanceof Map?t.forEach(((t,n)=>e.set(n,t))):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const o=t[n],r=e[n];_s(r)&&_s(o)&&e.hasOwnProperty(n)&&!Rt(o)&&!yt(o)?e[n]=Fs(r,o):e[n]=o}return e}const Is=Symbol(),{assign:Ls}=Object;function Bs(e,t,n,o){const{state:r,actions:i,getters:a}=t,l=n.state.value[e];let s;return s=Ds(e,(function(){l||(n.state.value[e]=r?r():{});const t=function(e){const t=w(e)?new Array(e.length):{};for(const n in e)t[n]=Ht(e,n);return t}(n.state.value[e]);return Ls(t,i,Object.keys(a||{}).reduce(((t,o)=>(t[o]=St(ai((()=>{ks(n);const t=n._s.get(e);return a[o].call(t,t)}))),t)),{}))}),t,n,0,!0),s}function Ds(e,t,n={},o,r,i){let a;const l=Ls({actions:{}},n),s={deep:!0};let c,u,d,p=[],h=[];const f=o.state.value[e];let v;function m(t){let n;c=u=!1,"function"==typeof t?(t(o.state.value[e]),n={type:Ps.patchFunction,storeId:e,events:d}):(Fs(o.state.value[e],t),n={type:Ps.patchObject,payload:t,storeId:e,events:d});const r=v=Symbol();tn().then((()=>{v===r&&(c=!0)})),u=!0,Rs(p,n,o.state.value[e])}i||f||(o.state.value[e]={}),Et({});const g=i?function(){const{state:e}=n,t=e?e():{};this.$patch((e=>{Ls(e,t)}))}:As,b=(t,n="")=>{if(Os in t)return t[Ms]=n,t;const r=function(){ks(o);const n=Array.from(arguments),i=[],a=[];let l;Rs(h,{args:n,name:r[Ms],store:y,after:function(e){i.push(e)},onError:function(e){a.push(e)}});try{l=t.apply(this&&this.$id===e?this:y,n)}catch(s){throw Rs(a,s),s}return l instanceof Promise?l.then((e=>(Rs(i,e),e))).catch((e=>(Rs(a,e),Promise.reject(e)))):(Rs(i,l),l)};return r[Os]=!0,r[Ms]=n,r},y=vt({_p:o,$id:e,$onAction:zs.bind(null,h),$patch:m,$reset:g,$subscribe(t,n={}){const r=zs(p,t,n.detached,(()=>i())),i=a.run((()=>lr((()=>o.state.value[e]),(o=>{("sync"===n.flush?u:c)&&t({storeId:e,type:Ps.direct,events:d},o)}),Ls({},s,n))));return r},$dispose:function(){a.stop(),p=[],h=[],o._s.delete(e)}});o._s.set(e,y);const x=(o._a&&o._a.runWithContext||Es)((()=>o._e.run((()=>(a=ce()).run((()=>t({action:b})))))));for(const k in x){const t=x[k];if(Rt(t)&&(!Rt(w=t)||!w.effect)||yt(t))i||(!f||_s(C=t)&&C.hasOwnProperty(Is)||(Rt(t)?t.value=f[k]:Fs(t,f[k])),o.state.value[e][k]=t);else if("function"==typeof t){const e=b(t,k);x[k]=e,l.actions[k]=t}}var C,w;return Ls(y,x),Ls(kt(y),x),Object.defineProperty(y,"$state",{get:()=>o.state.value[e],set:e=>{m((t=>{Ls(t,e)}))}}),o._p.forEach((e=>{Ls(y,a.run((()=>e({store:y,app:o._a,pinia:o,options:l}))))})),f&&i&&n.hydrate&&n.hydrate(y.$state,f),c=!0,u=!0,y}function $s(e,t,n){let o,r;const i="function"==typeof t;function a(e,n){return(e=e||(Kr||un||So?Po(Ss,null):null))&&ks(e),(e=ws)._s.has(o)||(i?Ds(o,t,r,e):Bs(o,r,e)),e._s.get(o)}return"string"==typeof e?(o=e,r=i?n:t):(r=e,o=e.id),a.$id=o,a}function Ns(e,t){return function(){return e.apply(t,arguments)}}const{toString:js}=Object.prototype,{getPrototypeOf:Hs}=Object,Ws=(Us=Object.create(null),e=>{const t=js.call(e);return Us[t]||(Us[t]=t.slice(8,-1).toLowerCase())});var Us;const Vs=e=>(e=e.toLowerCase(),t=>Ws(t)===e),qs=e=>t=>typeof t===e,{isArray:Ks}=Array,Gs=qs("undefined"),Xs=Vs("ArrayBuffer"),Ys=qs("string"),Qs=qs("function"),Zs=qs("number"),Js=e=>null!==e&&"object"==typeof e,ec=e=>{if("object"!==Ws(e))return!1;const t=Hs(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e)},tc=Vs("Date"),nc=Vs("File"),oc=Vs("Blob"),rc=Vs("FileList"),ic=Vs("URLSearchParams"),[ac,lc,sc,cc]=["ReadableStream","Request","Response","Headers"].map(Vs);function uc(e,t,{allOwnKeys:n=!1}={}){if(null==e)return;let o,r;if("object"!=typeof e&&(e=[e]),Ks(e))for(o=0,r=e.length;o0;)if(o=n[r],t===o.toLowerCase())return o;return null}const pc="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,hc=e=>!Gs(e)&&e!==pc,fc=(vc="undefined"!=typeof Uint8Array&&Hs(Uint8Array),e=>vc&&e instanceof vc);var vc;const mc=Vs("HTMLFormElement"),gc=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),bc=Vs("RegExp"),yc=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),o={};uc(n,((n,r)=>{let i;!1!==(i=t(n,r,e))&&(o[r]=i||n)})),Object.defineProperties(e,o)},xc="abcdefghijklmnopqrstuvwxyz",Cc="0123456789",wc={DIGIT:Cc,ALPHA:xc,ALPHA_DIGIT:xc+xc.toUpperCase()+Cc},kc=Vs("AsyncFunction"),Sc=(_c="function"==typeof setImmediate,Pc=Qs(pc.postMessage),_c?setImmediate:Pc?(Tc=`axios@${Math.random()}`,Ac=[],pc.addEventListener("message",(({source:e,data:t})=>{e===pc&&t===Tc&&Ac.length&&Ac.shift()()}),!1),e=>{Ac.push(e),pc.postMessage(Tc,"*")}):e=>setTimeout(e));var _c,Pc,Tc,Ac;const zc="undefined"!=typeof queueMicrotask?queueMicrotask.bind(pc):"undefined"!=typeof process&&process.nextTick||Sc,Rc={isArray:Ks,isArrayBuffer:Xs,isBuffer:function(e){return null!==e&&!Gs(e)&&null!==e.constructor&&!Gs(e.constructor)&&Qs(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:e=>{let t;return e&&("function"==typeof FormData&&e instanceof FormData||Qs(e.append)&&("formdata"===(t=Ws(e))||"object"===t&&Qs(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&Xs(e.buffer),t},isString:Ys,isNumber:Zs,isBoolean:e=>!0===e||!1===e,isObject:Js,isPlainObject:ec,isReadableStream:ac,isRequest:lc,isResponse:sc,isHeaders:cc,isUndefined:Gs,isDate:tc,isFile:nc,isBlob:oc,isRegExp:bc,isFunction:Qs,isStream:e=>Js(e)&&Qs(e.pipe),isURLSearchParams:ic,isTypedArray:fc,isFileList:rc,forEach:uc,merge:function e(){const{caseless:t}=hc(this)&&this||{},n={},o=(o,r)=>{const i=t&&dc(n,r)||r;ec(n[i])&&ec(o)?n[i]=e(n[i],o):ec(o)?n[i]=e({},o):Ks(o)?n[i]=o.slice():n[i]=o};for(let r=0,i=arguments.length;r(uc(t,((t,o)=>{n&&Qs(t)?e[o]=Ns(t,n):e[o]=t}),{allOwnKeys:o}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,n,o)=>{e.prototype=Object.create(t.prototype,o),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,n,o)=>{let r,i,a;const l={};if(t=t||{},null==e)return t;do{for(r=Object.getOwnPropertyNames(e),i=r.length;i-- >0;)a=r[i],o&&!o(a,e,t)||l[a]||(t[a]=e[a],l[a]=!0);e=!1!==n&&Hs(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:Ws,kindOfTest:Vs,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const o=e.indexOf(t,n);return-1!==o&&o===n},toArray:e=>{if(!e)return null;if(Ks(e))return e;let t=e.length;if(!Zs(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[Symbol.iterator]).call(e);let o;for(;(o=n.next())&&!o.done;){const n=o.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const o=[];for(;null!==(n=e.exec(t));)o.push(n);return o},isHTMLForm:mc,hasOwnProperty:gc,hasOwnProp:gc,reduceDescriptors:yc,freezeMethods:e=>{yc(e,((t,n)=>{if(Qs(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const o=e[n];Qs(o)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))}))},toObjectSet:(e,t)=>{const n={},o=e=>{e.forEach((e=>{n[e]=!0}))};return Ks(e)?o(e):o(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,t,n){return t.toUpperCase()+n})),noop:()=>{},toFiniteNumber:(e,t)=>null!=e&&Number.isFinite(e=+e)?e:t,findKey:dc,global:pc,isContextDefined:hc,ALPHABET:wc,generateString:(e=16,t=wc.ALPHA_DIGIT)=>{let n="";const{length:o}=t;for(;e--;)n+=t[Math.random()*o|0];return n},isSpecCompliantForm:function(e){return!!(e&&Qs(e.append)&&"FormData"===e[Symbol.toStringTag]&&e[Symbol.iterator])},toJSONObject:e=>{const t=new Array(10),n=(e,o)=>{if(Js(e)){if(t.indexOf(e)>=0)return;if(!("toJSON"in e)){t[o]=e;const r=Ks(e)?[]:{};return uc(e,((e,t)=>{const i=n(e,o+1);!Gs(i)&&(r[t]=i)})),t[o]=void 0,r}}return e};return n(e,0)},isAsyncFn:kc,isThenable:e=>e&&(Js(e)||Qs(e))&&Qs(e.then)&&Qs(e.catch),setImmediate:Sc,asap:zc};function Ec(e,t,n,o,r){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),o&&(this.request=o),r&&(this.response=r,this.status=r.status?r.status:null)}Rc.inherits(Ec,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:Rc.toJSONObject(this.config),code:this.code,status:this.status}}});const Oc=Ec.prototype,Mc={};function Fc(e){return Rc.isPlainObject(e)||Rc.isArray(e)}function Ic(e){return Rc.endsWith(e,"[]")?e.slice(0,-2):e}function Lc(e,t,n){return e?e.concat(t).map((function(e,t){return e=Ic(e),!n&&t?"["+e+"]":e})).join(n?".":""):t}["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((e=>{Mc[e]={value:e}})),Object.defineProperties(Ec,Mc),Object.defineProperty(Oc,"isAxiosError",{value:!0}),Ec.from=(e,t,n,o,r,i)=>{const a=Object.create(Oc);return Rc.toFlatObject(e,a,(function(e){return e!==Error.prototype}),(e=>"isAxiosError"!==e)),Ec.call(a,e.message,t,n,o,r),a.cause=e,a.name=e.name,i&&Object.assign(a,i),a};const Bc=Rc.toFlatObject(Rc,{},null,(function(e){return/^is[A-Z]/.test(e)}));function Dc(e,t,n){if(!Rc.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const o=(n=Rc.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!Rc.isUndefined(t[e])}))).metaTokens,r=n.visitor||c,i=n.dots,a=n.indexes,l=(n.Blob||"undefined"!=typeof Blob&&Blob)&&Rc.isSpecCompliantForm(t);if(!Rc.isFunction(r))throw new TypeError("visitor must be a function");function s(e){if(null===e)return"";if(Rc.isDate(e))return e.toISOString();if(!l&&Rc.isBlob(e))throw new Ec("Blob is not supported. Use a Buffer instead.");return Rc.isArrayBuffer(e)||Rc.isTypedArray(e)?l&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function c(e,n,r){let l=e;if(e&&!r&&"object"==typeof e)if(Rc.endsWith(n,"{}"))n=o?n:n.slice(0,-2),e=JSON.stringify(e);else if(Rc.isArray(e)&&function(e){return Rc.isArray(e)&&!e.some(Fc)}(e)||(Rc.isFileList(e)||Rc.endsWith(n,"[]"))&&(l=Rc.toArray(e)))return n=Ic(n),l.forEach((function(e,o){!Rc.isUndefined(e)&&null!==e&&t.append(!0===a?Lc([n],o,i):null===a?n:n+"[]",s(e))})),!1;return!!Fc(e)||(t.append(Lc(r,n,i),s(e)),!1)}const u=[],d=Object.assign(Bc,{defaultVisitor:c,convertValue:s,isVisitable:Fc});if(!Rc.isObject(e))throw new TypeError("data must be an object");return function e(n,o){if(!Rc.isUndefined(n)){if(-1!==u.indexOf(n))throw Error("Circular reference detected in "+o.join("."));u.push(n),Rc.forEach(n,(function(n,i){!0===(!(Rc.isUndefined(n)||null===n)&&r.call(t,n,Rc.isString(i)?i.trim():i,o,d))&&e(n,o?o.concat(i):[i])})),u.pop()}}(e),t}function $c(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return t[e]}))}function Nc(e,t){this._pairs=[],e&&Dc(e,this,t)}const jc=Nc.prototype;function Hc(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function Wc(e,t,n){if(!t)return e;const o=n&&n.encode||Hc,r=n&&n.serialize;let i;if(i=r?r(t,n):Rc.isURLSearchParams(t)?t.toString():new Nc(t,n).toString(o),i){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+i}return e}jc.append=function(e,t){this._pairs.push([e,t])},jc.toString=function(e){const t=e?function(t){return e.call(this,t,$c)}:$c;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};const Uc=class{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){Rc.forEach(this.handlers,(function(t){null!==t&&e(t)}))}},Vc={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},qc={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:Nc,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]},Kc="undefined"!=typeof window&&"undefined"!=typeof document,Gc="object"==typeof navigator&&navigator||void 0,Xc=Kc&&(!Gc||["ReactNative","NativeScript","NS"].indexOf(Gc.product)<0),Yc="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,Qc=Kc&&window.location.href||"http://localhost",Zc=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:Kc,hasStandardBrowserEnv:Xc,hasStandardBrowserWebWorkerEnv:Yc,navigator:Gc,origin:Qc},Symbol.toStringTag,{value:"Module"})),Jc=d(d({},Zc),qc);function eu(e){function t(e,n,o,r){let i=e[r++];if("__proto__"===i)return!0;const a=Number.isFinite(+i),l=r>=e.length;return i=!i&&Rc.isArray(o)?o.length:i,l?(Rc.hasOwnProp(o,i)?o[i]=[o[i],n]:o[i]=n,!a):(o[i]&&Rc.isObject(o[i])||(o[i]=[]),t(e,n,o[i],r)&&Rc.isArray(o[i])&&(o[i]=function(e){const t={},n=Object.keys(e);let o;const r=n.length;let i;for(o=0;o{t(function(e){return Rc.matchAll(/\w+|\[(\w*)]/g,e).map((e=>"[]"===e[0]?"":e[1]||e[0]))}(e),o,n,0)})),n}return null}const tu={transitional:Vc,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const n=t.getContentType()||"",o=n.indexOf("application/json")>-1,r=Rc.isObject(e);if(r&&Rc.isHTMLForm(e)&&(e=new FormData(e)),Rc.isFormData(e))return o?JSON.stringify(eu(e)):e;if(Rc.isArrayBuffer(e)||Rc.isBuffer(e)||Rc.isStream(e)||Rc.isFile(e)||Rc.isBlob(e)||Rc.isReadableStream(e))return e;if(Rc.isArrayBufferView(e))return e.buffer;if(Rc.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let i;if(r){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return Dc(e,new Jc.classes.URLSearchParams,Object.assign({visitor:function(e,t,n,o){return Jc.isNode&&Rc.isBuffer(e)?(this.append(t,e.toString("base64")),!1):o.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((i=Rc.isFileList(e))||n.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return Dc(i?{"files[]":e}:e,t&&new t,this.formSerializer)}}return r||o?(t.setContentType("application/json",!1),function(e,t,n){if(Rc.isString(e))try{return(t||JSON.parse)(e),Rc.trim(e)}catch(o){if("SyntaxError"!==o.name)throw o}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||tu.transitional,n=t&&t.forcedJSONParsing,o="json"===this.responseType;if(Rc.isResponse(e)||Rc.isReadableStream(e))return e;if(e&&Rc.isString(e)&&(n&&!this.responseType||o)){const n=!(t&&t.silentJSONParsing)&&o;try{return JSON.parse(e)}catch(r){if(n){if("SyntaxError"===r.name)throw Ec.from(r,Ec.ERR_BAD_RESPONSE,this,null,this.response);throw r}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Jc.classes.FormData,Blob:Jc.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};Rc.forEach(["delete","get","head","post","put","patch"],(e=>{tu.headers[e]={}}));const nu=tu,ou=Rc.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),ru=Symbol("internals");function iu(e){return e&&String(e).trim().toLowerCase()}function au(e){return!1===e||null==e?e:Rc.isArray(e)?e.map(au):String(e)}function lu(e,t,n,o,r){return Rc.isFunction(o)?o.call(this,t,n):(r&&(t=n),Rc.isString(t)?Rc.isString(o)?-1!==t.indexOf(o):Rc.isRegExp(o)?o.test(t):void 0:void 0)}class su{constructor(e){e&&this.set(e)}set(e,t,n){const o=this;function r(e,t,n){const r=iu(t);if(!r)throw new Error("header name must be a non-empty string");const i=Rc.findKey(o,r);(!i||void 0===o[i]||!0===n||void 0===n&&!1!==o[i])&&(o[i||t]=au(e))}const i=(e,t)=>Rc.forEach(e,((e,n)=>r(e,n,t)));if(Rc.isPlainObject(e)||e instanceof this.constructor)i(e,t);else if(Rc.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))i((e=>{const t={};let n,o,r;return e&&e.split("\n").forEach((function(e){r=e.indexOf(":"),n=e.substring(0,r).trim().toLowerCase(),o=e.substring(r+1).trim(),!n||t[n]&&ou[n]||("set-cookie"===n?t[n]?t[n].push(o):t[n]=[o]:t[n]=t[n]?t[n]+", "+o:o)})),t})(e),t);else if(Rc.isHeaders(e))for(const[a,l]of e.entries())r(l,a,n);else null!=e&&r(t,e,n);return this}get(e,t){if(e=iu(e)){const n=Rc.findKey(this,e);if(n){const e=this[n];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let o;for(;o=n.exec(e);)t[o[1]]=o[2];return t}(e);if(Rc.isFunction(t))return t.call(this,e,n);if(Rc.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=iu(e)){const n=Rc.findKey(this,e);return!(!n||void 0===this[n]||t&&!lu(0,this[n],n,t))}return!1}delete(e,t){const n=this;let o=!1;function r(e){if(e=iu(e)){const r=Rc.findKey(n,e);!r||t&&!lu(0,n[r],r,t)||(delete n[r],o=!0)}}return Rc.isArray(e)?e.forEach(r):r(e),o}clear(e){const t=Object.keys(this);let n=t.length,o=!1;for(;n--;){const r=t[n];e&&!lu(0,this[r],r,e,!0)||(delete this[r],o=!0)}return o}normalize(e){const t=this,n={};return Rc.forEach(this,((o,r)=>{const i=Rc.findKey(n,r);if(i)return t[i]=au(o),void delete t[r];const a=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,t,n)=>t.toUpperCase()+n))}(r):String(r).trim();a!==r&&delete t[r],t[a]=au(o),n[a]=!0})),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return Rc.forEach(this,((n,o)=>{null!=n&&!1!==n&&(t[o]=e&&Rc.isArray(n)?n.join(", "):n)})),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([e,t])=>e+": "+t)).join("\n")}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const n=new this(e);return t.forEach((e=>n.set(e))),n}static accessor(e){const t=(this[ru]=this[ru]={accessors:{}}).accessors,n=this.prototype;function o(e){const o=iu(e);t[o]||(function(e,t){const n=Rc.toCamelCase(" "+t);["get","set","has"].forEach((o=>{Object.defineProperty(e,o+n,{value:function(e,n,r){return this[o].call(this,t,e,n,r)},configurable:!0})}))}(n,e),t[o]=!0)}return Rc.isArray(e)?e.forEach(o):o(e),this}}su.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),Rc.reduceDescriptors(su.prototype,(({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}})),Rc.freezeMethods(su);const cu=su;function uu(e,t){const n=this||nu,o=t||n,r=cu.from(o.headers);let i=o.data;return Rc.forEach(e,(function(e){i=e.call(n,i,r.normalize(),t?t.status:void 0)})),r.normalize(),i}function du(e){return!(!e||!e.__CANCEL__)}function pu(e,t,n){Ec.call(this,null==e?"canceled":e,Ec.ERR_CANCELED,t,n),this.name="CanceledError"}function hu(e,t,n){const o=n.config.validateStatus;n.status&&o&&!o(n.status)?t(new Ec("Request failed with status code "+n.status,[Ec.ERR_BAD_REQUEST,Ec.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}Rc.inherits(pu,Ec,{__CANCEL__:!0});const fu=(e,t,n=3)=>{let o=0;const r=function(e,t){e=e||10;const n=new Array(e),o=new Array(e);let r,i=0,a=0;return t=void 0!==t?t:1e3,function(l){const s=Date.now(),c=o[a];r||(r=s),n[i]=l,o[i]=s;let u=a,d=0;for(;u!==i;)d+=n[u++],u%=e;if(i=(i+1)%e,i===a&&(a=(a+1)%e),s-r{r=i,n=null,o&&(clearTimeout(o),o=null),e.apply(null,t)};return[(...e)=>{const t=Date.now(),l=t-r;l>=i?a(e,t):(n=e,o||(o=setTimeout((()=>{o=null,a(n)}),i-l)))},()=>n&&a(n)]}((n=>{const i=n.loaded,a=n.lengthComputable?n.total:void 0,l=i-o,s=r(l);o=i,e({loaded:i,total:a,progress:a?i/a:void 0,bytes:l,rate:s||void 0,estimated:s&&a&&i<=a?(a-i)/s:void 0,event:n,lengthComputable:null!=a,[t?"download":"upload"]:!0})}),n)},vu=(e,t)=>{const n=null!=e;return[o=>t[0]({lengthComputable:n,total:e,loaded:o}),t[1]]},mu=e=>(...t)=>Rc.asap((()=>e(...t))),gu=Jc.hasStandardBrowserEnv?function(){const e=Jc.navigator&&/(msie|trident)/i.test(Jc.navigator.userAgent),t=document.createElement("a");let n;function o(n){let o=n;return e&&(t.setAttribute("href",o),o=t.href),t.setAttribute("href",o),{href:t.href,protocol:t.protocol?t.protocol.replace(/:$/,""):"",host:t.host,search:t.search?t.search.replace(/^\?/,""):"",hash:t.hash?t.hash.replace(/^#/,""):"",hostname:t.hostname,port:t.port,pathname:"/"===t.pathname.charAt(0)?t.pathname:"/"+t.pathname}}return n=o(window.location.href),function(e){const t=Rc.isString(e)?o(e):e;return t.protocol===n.protocol&&t.host===n.host}}():function(){return!0},bu=Jc.hasStandardBrowserEnv?{write(e,t,n,o,r,i){const a=[e+"="+encodeURIComponent(t)];Rc.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),Rc.isString(o)&&a.push("path="+o),Rc.isString(r)&&a.push("domain="+r),!0===i&&a.push("secure"),document.cookie=a.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read:()=>null,remove(){}};function yu(e,t){return e&&!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)?function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const xu=e=>e instanceof cu?d({},e):e;function Cu(e,t){t=t||{};const n={};function o(e,t,n){return Rc.isPlainObject(e)&&Rc.isPlainObject(t)?Rc.merge.call({caseless:n},e,t):Rc.isPlainObject(t)?Rc.merge({},t):Rc.isArray(t)?t.slice():t}function r(e,t,n){return Rc.isUndefined(t)?Rc.isUndefined(e)?void 0:o(void 0,e,n):o(e,t,n)}function i(e,t){if(!Rc.isUndefined(t))return o(void 0,t)}function a(e,t){return Rc.isUndefined(t)?Rc.isUndefined(e)?void 0:o(void 0,e):o(void 0,t)}function l(n,r,i){return i in t?o(n,r):i in e?o(void 0,n):void 0}const s={url:i,method:i,data:i,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,withXSRFToken:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,beforeRedirect:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:l,headers:(e,t)=>r(xu(e),xu(t),!0)};return Rc.forEach(Object.keys(Object.assign({},e,t)),(function(o){const i=s[o]||r,a=i(e[o],t[o],o);Rc.isUndefined(a)&&i!==l||(n[o]=a)})),n}const wu=e=>{const t=Cu({},e);let n,{data:o,withXSRFToken:r,xsrfHeaderName:i,xsrfCookieName:a,headers:l,auth:s}=t;if(t.headers=l=cu.from(l),t.url=Wc(yu(t.baseURL,t.url),e.params,e.paramsSerializer),s&&l.set("Authorization","Basic "+btoa((s.username||"")+":"+(s.password?unescape(encodeURIComponent(s.password)):""))),Rc.isFormData(o))if(Jc.hasStandardBrowserEnv||Jc.hasStandardBrowserWebWorkerEnv)l.setContentType(void 0);else if(!1!==(n=l.getContentType())){const[e,...t]=n?n.split(";").map((e=>e.trim())).filter(Boolean):[];l.setContentType([e||"multipart/form-data",...t].join("; "))}if(Jc.hasStandardBrowserEnv&&(r&&Rc.isFunction(r)&&(r=r(t)),r||!1!==r&&gu(t.url))){const e=i&&a&&bu.read(a);e&&l.set(i,e)}return t},ku="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise((function(t,n){const o=wu(e);let r=o.data;const i=cu.from(o.headers).normalize();let a,l,s,c,u,{responseType:d,onUploadProgress:p,onDownloadProgress:h}=o;function f(){c&&c(),u&&u(),o.cancelToken&&o.cancelToken.unsubscribe(a),o.signal&&o.signal.removeEventListener("abort",a)}let v=new XMLHttpRequest;function m(){if(!v)return;const o=cu.from("getAllResponseHeaders"in v&&v.getAllResponseHeaders());hu((function(e){t(e),f()}),(function(e){n(e),f()}),{data:d&&"text"!==d&&"json"!==d?v.response:v.responseText,status:v.status,statusText:v.statusText,headers:o,config:e,request:v}),v=null}v.open(o.method.toUpperCase(),o.url,!0),v.timeout=o.timeout,"onloadend"in v?v.onloadend=m:v.onreadystatechange=function(){v&&4===v.readyState&&(0!==v.status||v.responseURL&&0===v.responseURL.indexOf("file:"))&&setTimeout(m)},v.onabort=function(){v&&(n(new Ec("Request aborted",Ec.ECONNABORTED,e,v)),v=null)},v.onerror=function(){n(new Ec("Network Error",Ec.ERR_NETWORK,e,v)),v=null},v.ontimeout=function(){let t=o.timeout?"timeout of "+o.timeout+"ms exceeded":"timeout exceeded";const r=o.transitional||Vc;o.timeoutErrorMessage&&(t=o.timeoutErrorMessage),n(new Ec(t,r.clarifyTimeoutError?Ec.ETIMEDOUT:Ec.ECONNABORTED,e,v)),v=null},void 0===r&&i.setContentType(null),"setRequestHeader"in v&&Rc.forEach(i.toJSON(),(function(e,t){v.setRequestHeader(t,e)})),Rc.isUndefined(o.withCredentials)||(v.withCredentials=!!o.withCredentials),d&&"json"!==d&&(v.responseType=o.responseType),h&&([s,u]=fu(h,!0),v.addEventListener("progress",s)),p&&v.upload&&([l,c]=fu(p),v.upload.addEventListener("progress",l),v.upload.addEventListener("loadend",c)),(o.cancelToken||o.signal)&&(a=t=>{v&&(n(!t||t.type?new pu(null,e,v):t),v.abort(),v=null)},o.cancelToken&&o.cancelToken.subscribe(a),o.signal&&(o.signal.aborted?a():o.signal.addEventListener("abort",a)));const g=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(o.url);g&&-1===Jc.protocols.indexOf(g)?n(new Ec("Unsupported protocol "+g+":",Ec.ERR_BAD_REQUEST,e)):v.send(r||null)}))},Su=(e,t)=>{let n,o=new AbortController;const r=function(e){if(!n){n=!0,a();const t=e instanceof Error?e:this.reason;o.abort(t instanceof Ec?t:new pu(t instanceof Error?t.message:t))}};let i=t&&setTimeout((()=>{r(new Ec(`timeout ${t} of ms exceeded`,Ec.ETIMEDOUT))}),t);const a=()=>{e&&(i&&clearTimeout(i),i=null,e.forEach((e=>{e&&(e.removeEventListener?e.removeEventListener("abort",r):e.unsubscribe(r))})),e=null)};e.forEach((e=>e&&e.addEventListener&&e.addEventListener("abort",r)));const{signal:l}=o;return l.unsubscribe=a,[l,()=>{i&&clearTimeout(i),i=null}]},_u=function*(e,t){let n=e.byteLength;if(!t||n{var o=(e,t,r,i)=>{try{var a=n[e](t),l=(t=a.value)instanceof m,s=a.done;Promise.resolve(l?t[0]:t).then((n=>l?o("return"===e?e:"next",t[1]?{done:n.done,value:n.value}:n,r,i):r({value:n,done:s}))).catch((e=>o("throw",e,r,i)))}catch(c){i(c)}},r=e=>i[e]=t=>new Promise(((n,r)=>o(e,t,n,r))),i={};return n=n.apply(e,t),i[Symbol.asyncIterator]=()=>i,r("next"),r("throw"),r("return"),i})(this,null,(function*(){try{for(var o,r,i,a=((e,t,n)=>(t=e[c("asyncIterator")])?t.call(e):(e=e[c("iterator")](),t={},(n=(n,o)=>(o=e[n])&&(t[n]=t=>new Promise(((n,r,i)=>(t=o.call(e,t),i=t.done,Promise.resolve(t.value).then((e=>n({value:e,done:i})),r))))))("next"),n("return"),t))(e);o=!(r=yield new m(a.next())).done;o=!1){const e=r.value;yield*g(_u(ArrayBuffer.isView(e)?e:yield new m(n(String(e))),t))}}catch(r){i=[r]}finally{try{o&&(r=a.return)&&(yield new m(r.call(a)))}finally{if(i)throw i[0]}}}))},Tu=(e,t,n,o,r)=>{const i=Pu(e,t,r);let a,l=0,s=e=>{a||(a=!0,o&&o(e))};return new ReadableStream({pull(e){return v(this,null,(function*(){try{const{done:t,value:o}=yield i.next();if(t)return s(),void e.close();let r=o.byteLength;if(n){let e=l+=r;n(e)}e.enqueue(new Uint8Array(o))}catch(t){throw s(t),t}}))},cancel:e=>(s(e),i.return())},{highWaterMark:2})},Au="function"==typeof fetch&&"function"==typeof Request&&"function"==typeof Response,zu=Au&&"function"==typeof ReadableStream,Ru=Au&&("function"==typeof TextEncoder?(Eu=new TextEncoder,e=>Eu.encode(e)):t=>v(e,null,(function*(){return new Uint8Array(yield new Response(t).arrayBuffer())})));var Eu;const Ou=(e,...t)=>{try{return!!e(...t)}catch(n){return!1}},Mu=zu&&Ou((()=>{let e=!1;const t=new Request(Jc.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t})),Fu=zu&&Ou((()=>Rc.isReadableStream(new Response("").body))),Iu={stream:Fu&&(e=>e.body)};var Lu;Au&&(Lu=new Response,["text","arrayBuffer","blob","formData","stream"].forEach((e=>{!Iu[e]&&(Iu[e]=Rc.isFunction(Lu[e])?t=>t[e]():(t,n)=>{throw new Ec(`Response type '${e}' is not supported`,Ec.ERR_NOT_SUPPORT,n)})})));const Bu=(t,n)=>v(e,null,(function*(){const o=Rc.toFiniteNumber(t.getContentLength());return null==o?(t=>v(e,null,(function*(){return null==t?0:Rc.isBlob(t)?t.size:Rc.isSpecCompliantForm(t)?(yield new Request(t).arrayBuffer()).byteLength:Rc.isArrayBufferView(t)||Rc.isArrayBuffer(t)?t.byteLength:(Rc.isURLSearchParams(t)&&(t+=""),Rc.isString(t)?(yield Ru(t)).byteLength:void 0)})))(n):o})),Du={http:null,xhr:ku,fetch:Au&&(t=>v(e,null,(function*(){let{url:e,method:n,data:o,signal:r,cancelToken:i,timeout:a,onDownloadProgress:l,onUploadProgress:s,responseType:c,headers:u,withCredentials:h="same-origin",fetchOptions:f}=wu(t);c=c?(c+"").toLowerCase():"text";let v,m,[g,b]=r||i||a?Su([r,i],a):[];const y=()=>{!v&&setTimeout((()=>{g&&g.unsubscribe()})),v=!0};let x;try{if(s&&Mu&&"get"!==n&&"head"!==n&&0!==(x=yield Bu(u,o))){let t,n=new Request(e,{method:"POST",body:o,duplex:"half"});if(Rc.isFormData(o)&&(t=n.headers.get("content-type"))&&u.setContentType(t),n.body){const[e,t]=vu(x,fu(mu(s)));o=Tu(n.body,65536,e,t,Ru)}}Rc.isString(h)||(h=h?"include":"omit");const r="credentials"in Request.prototype;m=new Request(e,p(d({},f),{signal:g,method:n.toUpperCase(),headers:u.normalize().toJSON(),body:o,duplex:"half",credentials:r?h:void 0}));let i=yield fetch(m);const a=Fu&&("stream"===c||"response"===c);if(Fu&&(l||a)){const e={};["status","statusText","headers"].forEach((t=>{e[t]=i[t]}));const t=Rc.toFiniteNumber(i.headers.get("content-length")),[n,o]=l&&vu(t,fu(mu(l),!0))||[];i=new Response(Tu(i.body,65536,n,(()=>{o&&o(),a&&y()}),Ru),e)}c=c||"text";let v=yield Iu[Rc.findKey(Iu,c)||"text"](i,t);return!a&&y(),b&&b(),yield new Promise(((e,n)=>{hu(e,n,{data:v,headers:cu.from(i.headers),status:i.status,statusText:i.statusText,config:t,request:m})}))}catch(C){if(y(),C&&"TypeError"===C.name&&/fetch/i.test(C.message))throw Object.assign(new Ec("Network Error",Ec.ERR_NETWORK,t,m),{cause:C.cause||C});throw Ec.from(C,C&&C.code,t,m)}})))};Rc.forEach(Du,((e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(n){}Object.defineProperty(e,"adapterName",{value:t})}}));const $u=e=>`- ${e}`,Nu=e=>Rc.isFunction(e)||null===e||!1===e,ju=e=>{e=Rc.isArray(e)?e:[e];const{length:t}=e;let n,o;const r={};for(let i=0;i`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build")));throw new Ec("There is no suitable adapter to dispatch the request "+(t?e.length>1?"since :\n"+e.map($u).join("\n"):" "+$u(e[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return o};function Hu(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new pu(null,e)}function Wu(e){return Hu(e),e.headers=cu.from(e.headers),e.data=uu.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1),ju(e.adapter||nu.adapter)(e).then((function(t){return Hu(e),t.data=uu.call(e,e.transformResponse,t),t.headers=cu.from(t.headers),t}),(function(t){return du(t)||(Hu(e),t&&t.response&&(t.response.data=uu.call(e,e.transformResponse,t.response),t.response.headers=cu.from(t.response.headers))),Promise.reject(t)}))}const Uu="1.7.5",Vu={};["object","boolean","number","function","string","symbol"].forEach(((e,t)=>{Vu[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));const qu={};Vu.transitional=function(e,t,n){return(o,r,i)=>{if(!1===e)throw new Ec(function(e,t){return"[Axios v1.7.5] Transitional option '"+e+"'"+t+(n?". "+n:"")}(r," has been removed"+(t?" in "+t:"")),Ec.ERR_DEPRECATED);return t&&!qu[r]&&(qu[r]=!0),!e||e(o,r,i)}};const Ku={assertOptions:function(e,t,n){if("object"!=typeof e)throw new Ec("options must be an object",Ec.ERR_BAD_OPTION_VALUE);const o=Object.keys(e);let r=o.length;for(;r-- >0;){const i=o[r],a=t[i];if(a){const t=e[i],n=void 0===t||a(t,i,e);if(!0!==n)throw new Ec("option "+i+" must be "+n,Ec.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new Ec("Unknown option "+i,Ec.ERR_BAD_OPTION)}},validators:Vu},Gu=Ku.validators;class Xu{constructor(e){this.defaults=e,this.interceptors={request:new Uc,response:new Uc}}request(e,t){return v(this,null,(function*(){try{return yield this._request(e,t)}catch(n){if(n instanceof Error){let e;Error.captureStackTrace?Error.captureStackTrace(e={}):e=new Error;const t=e.stack?e.stack.replace(/^.+\n/,""):"";try{n.stack?t&&!String(n.stack).endsWith(t.replace(/^.+\n.+\n/,""))&&(n.stack+="\n"+t):n.stack=t}catch(o){}}throw n}}))}_request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=Cu(this.defaults,t);const{transitional:n,paramsSerializer:o,headers:r}=t;void 0!==n&&Ku.assertOptions(n,{silentJSONParsing:Gu.transitional(Gu.boolean),forcedJSONParsing:Gu.transitional(Gu.boolean),clarifyTimeoutError:Gu.transitional(Gu.boolean)},!1),null!=o&&(Rc.isFunction(o)?t.paramsSerializer={serialize:o}:Ku.assertOptions(o,{encode:Gu.function,serialize:Gu.function},!0)),t.method=(t.method||this.defaults.method||"get").toLowerCase();let i=r&&Rc.merge(r.common,r[t.method]);r&&Rc.forEach(["delete","get","head","post","put","patch","common"],(e=>{delete r[e]})),t.headers=cu.concat(i,r);const a=[];let l=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(l=l&&e.synchronous,a.unshift(e.fulfilled,e.rejected))}));const s=[];let c;this.interceptors.response.forEach((function(e){s.push(e.fulfilled,e.rejected)}));let u,d=0;if(!l){const e=[Wu.bind(this),void 0];for(e.unshift.apply(e,a),e.push.apply(e,s),u=e.length,c=Promise.resolve(t);d{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null})),this.promise.then=e=>{let t;const o=new Promise((e=>{n.subscribe(e),t=e})).then(e);return o.cancel=function(){n.unsubscribe(t)},o},e((function(e,o,r){n.reason||(n.reason=new pu(e,o,r),t(n.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}static source(){let e;return{token:new Qu((function(t){e=t})),cancel:e}}}const Zu=Qu,Ju={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(Ju).forEach((([e,t])=>{Ju[t]=e}));const ed=Ju,td=function e(t){const n=new Yu(t),o=Ns(Yu.prototype.request,n);return Rc.extend(o,Yu.prototype,n,{allOwnKeys:!0}),Rc.extend(o,n,null,{allOwnKeys:!0}),o.create=function(n){return e(Cu(t,n))},o}(nu);td.Axios=Yu,td.CanceledError=pu,td.CancelToken=Zu,td.isCancel=du,td.VERSION=Uu,td.toFormData=Dc,td.AxiosError=Ec,td.Cancel=td.CanceledError,td.all=function(e){return Promise.all(e)},td.spread=function(e){return function(t){return e.apply(null,t)}},td.isAxiosError=function(e){return Rc.isObject(e)&&!0===e.isAxiosError},td.mergeConfig=Cu,td.AxiosHeaders=cu,td.formToJSON=e=>eu(Rc.isHTMLForm(e)?new FormData(e):e),td.getAdapter=ju,td.HttpStatusCode=ed,td.default=td;const nd=td,od=[{url:"/passport/auth/login",method:"POST"},{url:"/passport/auth/token2Login",method:"GET"},{url:"/passport/auth/register",method:"POST"},{url:"/passport/auth/register",method:"POST"},{url:"/guest/comm/config",method:"GET"},{url:"/passport/comm/sendEmailVerify",method:"POST"},{url:"/passport/auth/forget",method:"POST"},{url:"/passport/auth/telegramLogin",method:"POST"}];function rd(e){try{if("object"==typeof JSON.parse(e))return!0}catch(t){return!1}}class id{constructor(e){f(this,"storage"),f(this,"prefixKey"),this.storage=e.storage,this.prefixKey=e.prefixKey}getKey(e){return`${this.prefixKey}${e}`.toUpperCase()}set(e,t,n=null){const o=JSON.stringify({value:t,time:Date.now(),expire:null!==n?(new Date).getTime()+1e3*n:null});this.storage.setItem(this.getKey(e),o)}get(e,t=null){const n=this.storage.getItem(this.getKey(e));if(!n)return{value:t,time:0};try{const o=JSON.parse(n),{value:r,time:i,expire:a}=o;return function(e){return function(e){return null===e}(e)||function(e){return void 0===e}(e)}(a)||a>(new Date).getTime()?{value:r,time:i}:(this.remove(e),{value:t,time:0})}catch(o){return this.remove(e),{value:t,time:0}}}remove(e){this.storage.removeItem(this.getKey(e))}clear(){this.storage.clear()}}function ad({prefixKey:e="",storage:t=sessionStorage}){return new id({prefixKey:e,storage:t})}const ld="Vue_Naive_",sd=function(e={}){return ad({prefixKey:e.prefixKey||"",storage:localStorage})}({prefixKey:ld}),cd=function(e={}){return ad({prefixKey:e.prefixKey||"",storage:sessionStorage})}({prefixKey:ld}),ud="access_token";function dd(){return sd.get(ud)}function pd(){sd.remove(ud)}function hd(){const e=It(qN.currentRoute),t=!e.meta.requireAuth&&!["/404","/login"].includes(qN.currentRoute.value.path);qN.replace({path:"/login",query:t?p(d({},e.query),{redirect:e.path}):{}})}var fd="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function vd(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function md(e){if(e.__esModule)return e;var t=e.default;if("function"==typeof t){var n=function e(){return this instanceof e?Reflect.construct(t,arguments,this.constructor):t.apply(this,arguments)};n.prototype=t.prototype}else n={};return Object.defineProperty(n,"__esModule",{value:!0}),Object.keys(e).forEach((function(t){var o=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,o.get?o:{enumerable:!0,get:function(){return e[t]}})})),n}var gd={exports:{}};gd.exports=function(){var e=1e3,t=6e4,n=36e5,o="millisecond",r="second",i="minute",a="hour",l="day",s="week",c="month",u="quarter",d="year",p="date",h="Invalid Date",f=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,v=/\[([^\]]+)]|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(e){var t=["th","st","nd","rd"],n=e%100;return"["+e+(t[(n-20)%10]||t[n]||t[0])+"]"}},g=function(e,t,n){var o=String(e);return!o||o.length>=t?e:""+Array(t+1-o.length).join(n)+e},b={s:g,z:function(e){var t=-e.utcOffset(),n=Math.abs(t),o=Math.floor(n/60),r=n%60;return(t<=0?"+":"-")+g(o,2,"0")+":"+g(r,2,"0")},m:function e(t,n){if(t.date()1)return e(a[0])}else{var l=t.name;x[l]=t,r=l}return!o&&r&&(y=r),r||!o&&y},S=function(e,t){if(w(e))return e.clone();var n="object"==typeof t?t:{};return n.date=e,n.args=arguments,new P(n)},_=b;_.l=k,_.i=w,_.w=function(e,t){return S(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset})};var P=function(){function m(e){this.$L=k(e.locale,null,!0),this.parse(e),this.$x=this.$x||e.x||{},this[C]=!0}var g=m.prototype;return g.parse=function(e){this.$d=function(e){var t=e.date,n=e.utc;if(null===t)return new Date(NaN);if(_.u(t))return new Date;if(t instanceof Date)return new Date(t);if("string"==typeof t&&!/Z$/i.test(t)){var o=t.match(f);if(o){var r=o[2]-1||0,i=(o[7]||"0").substring(0,3);return n?new Date(Date.UTC(o[1],r,o[3]||1,o[4]||0,o[5]||0,o[6]||0,i)):new Date(o[1],r,o[3]||1,o[4]||0,o[5]||0,o[6]||0,i)}}return new Date(t)}(e),this.init()},g.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},g.$utils=function(){return _},g.isValid=function(){return!(this.$d.toString()===h)},g.isSame=function(e,t){var n=S(e);return this.startOf(t)<=n&&n<=this.endOf(t)},g.isAfter=function(e,t){return S(e)1&&void 0!==arguments[1]?arguments[1]:{container:document.body},n="";return"string"==typeof e?n=d(e,t):e instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(null==e?void 0:e.type)?n=d(e.value,t):(n=s()(e),c("copy")),n};function h(e){return(h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var f=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.action,n=void 0===t?"copy":t,o=e.container,r=e.target,i=e.text;if("copy"!==n&&"cut"!==n)throw new Error('Invalid "action" value, use either "copy" or "cut"');if(void 0!==r){if(!r||"object"!==h(r)||1!==r.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===n&&r.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===n&&(r.hasAttribute("readonly")||r.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes')}return i?p(i,{container:o}):r?"cut"===n?u(r):p(r,{container:o}):void 0};function v(e){return(v="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function m(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof e.action?e.action:this.defaultAction,this.target="function"==typeof e.target?e.target:this.defaultTarget,this.text="function"==typeof e.text?e.text:this.defaultText,this.container="object"===v(e.container)?e.container:document.body}},{key:"listenClick",value:function(e){var t=this;this.listener=a()(e,"click",(function(e){return t.onClick(e)}))}},{key:"onClick",value:function(e){var t=e.delegateTarget||e.currentTarget,n=this.action(t)||"copy",o=f({action:n,container:this.container,target:this.target(t),text:this.text(t)});this.emit(o?"success":"error",{action:n,text:o,trigger:t,clearSelection:function(){t&&t.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(e){return x("action",e)}},{key:"defaultTarget",value:function(e){var t=x("target",e);if(t)return document.querySelector(t)}},{key:"defaultText",value:function(e){return x("text",e)}},{key:"destroy",value:function(){this.listener.destroy()}}],o=[{key:"copy",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{container:document.body};return p(e,t)}},{key:"cut",value:function(e){return u(e)}},{key:"isSupported",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],t="string"==typeof e?[e]:e,n=!!document.queryCommandSupported;return t.forEach((function(e){n=n&&!!document.queryCommandSupported(e)})),n}}],n&&m(t.prototype,n),o&&m(t,o),i}(r()),w=C},828:function(e){if("undefined"!=typeof Element&&!Element.prototype.matches){var t=Element.prototype;t.matches=t.matchesSelector||t.mozMatchesSelector||t.msMatchesSelector||t.oMatchesSelector||t.webkitMatchesSelector}e.exports=function(e,t){for(;e&&9!==e.nodeType;){if("function"==typeof e.matches&&e.matches(t))return e;e=e.parentNode}}},438:function(e,t,n){var o=n(828);function r(e,t,n,o,r){var a=i.apply(this,arguments);return e.addEventListener(n,a,r),{destroy:function(){e.removeEventListener(n,a,r)}}}function i(e,t,n,r){return function(n){n.delegateTarget=o(n.target,t),n.delegateTarget&&r.call(e,n)}}e.exports=function(e,t,n,o,i){return"function"==typeof e.addEventListener?r.apply(null,arguments):"function"==typeof n?r.bind(null,document).apply(null,arguments):("string"==typeof e&&(e=document.querySelectorAll(e)),Array.prototype.map.call(e,(function(e){return r(e,t,n,o,i)})))}},879:function(e,t){t.node=function(e){return void 0!==e&&e instanceof HTMLElement&&1===e.nodeType},t.nodeList=function(e){var n=Object.prototype.toString.call(e);return void 0!==e&&("[object NodeList]"===n||"[object HTMLCollection]"===n)&&"length"in e&&(0===e.length||t.node(e[0]))},t.string=function(e){return"string"==typeof e||e instanceof String},t.fn=function(e){return"[object Function]"===Object.prototype.toString.call(e)}},370:function(e,t,n){var o=n(879),r=n(438);e.exports=function(e,t,n){if(!e&&!t&&!n)throw new Error("Missing required arguments");if(!o.string(t))throw new TypeError("Second argument must be a String");if(!o.fn(n))throw new TypeError("Third argument must be a Function");if(o.node(e))return function(e,t,n){return e.addEventListener(t,n),{destroy:function(){e.removeEventListener(t,n)}}}(e,t,n);if(o.nodeList(e))return function(e,t,n){return Array.prototype.forEach.call(e,(function(e){e.addEventListener(t,n)})),{destroy:function(){Array.prototype.forEach.call(e,(function(e){e.removeEventListener(t,n)}))}}}(e,t,n);if(o.string(e))return function(e,t,n){return r(document.body,e,t,n)}(e,t,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}},817:function(e){e.exports=function(e){var t;if("SELECT"===e.nodeName)e.focus(),t=e.value;else if("INPUT"===e.nodeName||"TEXTAREA"===e.nodeName){var n=e.hasAttribute("readonly");n||e.setAttribute("readonly",""),e.select(),e.setSelectionRange(0,e.value.length),n||e.removeAttribute("readonly"),t=e.value}else{e.hasAttribute("contenteditable")&&e.focus();var o=window.getSelection(),r=document.createRange();r.selectNodeContents(e),o.removeAllRanges(),o.addRange(r),t=o.toString()}return t}},279:function(e){function t(){}t.prototype={on:function(e,t,n){var o=this.e||(this.e={});return(o[e]||(o[e]=[])).push({fn:t,ctx:n}),this},once:function(e,t,n){var o=this;function r(){o.off(e,r),t.apply(n,arguments)}return r._=t,this.on(e,r,n)},emit:function(e){for(var t=[].slice.call(arguments,1),n=((this.e||(this.e={}))[e]||[]).slice(),o=0,r=n.length;ot?Symbol.for(e):Symbol(e),kd=e=>JSON.stringify(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029").replace(/\u0027/g,"\\u0027"),Sd=e=>"number"==typeof e&&isFinite(e),_d=e=>"[object RegExp]"===$d(e),Pd=e=>Nd(e)&&0===Object.keys(e).length,Td=Object.assign;let Ad;const zd=()=>Ad||(Ad="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{});function Rd(e){return e.replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}const Ed=Object.prototype.hasOwnProperty;function Od(e,t){return Ed.call(e,t)}const Md=Array.isArray,Fd=e=>"function"==typeof e,Id=e=>"string"==typeof e,Ld=e=>"boolean"==typeof e,Bd=e=>null!==e&&"object"==typeof e,Dd=Object.prototype.toString,$d=e=>Dd.call(e),Nd=e=>{if(!Bd(e))return!1;const t=Object.getPrototypeOf(e);return null===t||t.constructor===Object};function jd(e){let t=e;return()=>++t}function Hd(e,t){}const Wd=e=>!Bd(e)||Md(e);function Ud(e,t){if(Wd(e)||Wd(t))throw new Error("Invalid value");const n=[{src:e,des:t}];for(;n.length;){const{src:e,des:t}=n.pop();Object.keys(e).forEach((o=>{Wd(e[o])||Wd(t[o])?t[o]=e[o]:n.push({src:e[o],des:t[o]})}))}}function Vd(e,t,n){const o={start:e,end:t};return null!=n&&(o.source=n),o}const qd=/\{([0-9a-zA-Z]+)\}/g;function Kd(e,...t){return 1===t.length&&Yd(t[0])&&(t=t[0]),t&&t.hasOwnProperty||(t={}),e.replace(qd,((e,n)=>t.hasOwnProperty(n)?t[n]:""))}const Gd=Object.assign,Xd=e=>"string"==typeof e,Yd=e=>null!==e&&"object"==typeof e;function Qd(e,t=""){return e.reduce(((e,n,o)=>0===o?e+n:e+t+n),"")}const Zd=1,Jd=2,ep={[Zd]:"Use modulo before '{{0}}'."},tp=1,np=2,op=3,rp=4,ip=5,ap=6,lp=7,sp=8,cp=9,up=10,dp=11,pp=12,hp=13,fp=14,vp=15,mp=16,gp=17,bp={[tp]:"Expected token: '{0}'",[np]:"Invalid token in placeholder: '{0}'",[op]:"Unterminated single quote in placeholder",[rp]:"Unknown escape sequence: \\{0}",[ip]:"Invalid unicode escape sequence: {0}",[ap]:"Unbalanced closing brace",[lp]:"Unterminated closing brace",[sp]:"Empty placeholder",[cp]:"Not allowed nest placeholder",[up]:"Invalid linked format",[dp]:"Plural must have messages",[pp]:"Unexpected empty linked modifier",[hp]:"Unexpected empty linked key",[fp]:"Unexpected lexical analysis in token: '{0}'",[vp]:"unhandled codegen node type: '{0}'",[mp]:"unhandled mimifier node type: '{0}'"};function yp(e,t,n={}){const{domain:o,messages:r,args:i}=n,a=Kd((r||bp)[e]||"",...i||[]),l=new SyntaxError(String(a));return l.code=e,t&&(l.location=t),l.domain=o,l}function xp(e){throw e}const Cp=" ",wp="\n",kp=String.fromCharCode(8232),Sp=String.fromCharCode(8233);function _p(e){const t=e;let n=0,o=1,r=1,i=0;const a=e=>"\r"===t[e]&&t[e+1]===wp,l=e=>t[e]===Sp,s=e=>t[e]===kp,c=e=>a(e)||(e=>t[e]===wp)(e)||l(e)||s(e),u=e=>a(e)||l(e)||s(e)?wp:t[e];function d(){return i=0,c(n)&&(o++,r=0),a(n)&&n++,n++,r++,t[n]}return{index:()=>n,line:()=>o,column:()=>r,peekOffset:()=>i,charAt:u,currentChar:()=>u(n),currentPeek:()=>u(n+i),next:d,peek:function(){return a(n+i)&&i++,i++,t[n+i]},reset:function(){n=0,o=1,r=1,i=0},resetPeek:function(e=0){i=e},skipToPeek:function(){const e=n+i;for(;e!==n;)d();i=0}}}const Pp=void 0;function Tp(e,t={}){const n=!1!==t.location,o=_p(e),r=()=>o.index(),i=()=>{return e=o.line(),t=o.column(),n=o.index(),{line:e,column:t,offset:n};var e,t,n},a=i(),l=r(),s={currentType:14,offset:l,startLoc:a,endLoc:a,lastType:14,lastOffset:l,lastStartLoc:a,lastEndLoc:a,braceNest:0,inLinked:!1,text:""},c=()=>s,{onError:u}=t;function d(e,t,o,...r){const i=c();if(t.column+=o,t.offset+=o,u){const o=yp(e,n?Vd(i.startLoc,t):null,{domain:"tokenizer",args:r});u(o)}}function p(e,t,o){e.endLoc=i(),e.currentType=t;const r={type:t};return n&&(r.loc=Vd(e.startLoc,e.endLoc)),null!=o&&(r.value=o),r}const h=e=>p(e,14);function f(e,t){return e.currentChar()===t?(e.next(),t):(d(tp,i(),0,t),"")}function v(e){let t="";for(;e.currentPeek()===Cp||e.currentPeek()===wp;)t+=e.currentPeek(),e.peek();return t}function m(e){const t=v(e);return e.skipToPeek(),t}function g(e){if(e===Pp)return!1;const t=e.charCodeAt(0);return t>=97&&t<=122||t>=65&&t<=90||95===t}function b(e,t){const{currentType:n}=t;if(2!==n)return!1;v(e);const o=function(e){if(e===Pp)return!1;const t=e.charCodeAt(0);return t>=48&&t<=57}("-"===e.currentPeek()?e.peek():e.currentPeek());return e.resetPeek(),o}function y(e){v(e);const t="|"===e.currentPeek();return e.resetPeek(),t}function x(e,t=!0){const n=(t=!1,o="",r=!1)=>{const i=e.currentPeek();return"{"===i?"%"!==o&&t:"@"!==i&&i?"%"===i?(e.peek(),n(t,"%",!0)):"|"===i?!("%"!==o&&!r&&(o===Cp||o===wp)):i===Cp?(e.peek(),n(!0,Cp,r)):i!==wp||(e.peek(),n(!0,wp,r)):"%"===o||t},o=n();return t&&e.resetPeek(),o}function C(e,t){const n=e.currentChar();return n===Pp?Pp:t(n)?(e.next(),n):null}function w(e){const t=e.charCodeAt(0);return t>=97&&t<=122||t>=65&&t<=90||t>=48&&t<=57||95===t||36===t}function k(e){return C(e,w)}function S(e){const t=e.charCodeAt(0);return t>=97&&t<=122||t>=65&&t<=90||t>=48&&t<=57||95===t||36===t||45===t}function _(e){return C(e,S)}function P(e){const t=e.charCodeAt(0);return t>=48&&t<=57}function T(e){return C(e,P)}function A(e){const t=e.charCodeAt(0);return t>=48&&t<=57||t>=65&&t<=70||t>=97&&t<=102}function z(e){return C(e,A)}function R(e){let t="",n="";for(;t=T(e);)n+=t;return n}function E(e){let t="";for(;;){const n=e.currentChar();if("{"===n||"}"===n||"@"===n||"|"===n||!n)break;if("%"===n){if(!x(e))break;t+=n,e.next()}else if(n===Cp||n===wp)if(x(e))t+=n,e.next();else{if(y(e))break;t+=n,e.next()}else t+=n,e.next()}return t}function O(e){return"'"!==e&&e!==wp}function M(e){const t=e.currentChar();switch(t){case"\\":case"'":return e.next(),`\\${t}`;case"u":return F(e,t,4);case"U":return F(e,t,6);default:return d(rp,i(),0,t),""}}function F(e,t,n){f(e,t);let o="";for(let r=0;r=1&&d(cp,i(),0),e.next(),n=p(t,2,"{"),m(e),t.braceNest++,n;case"}":return t.braceNest>0&&2===t.currentType&&d(sp,i(),0),e.next(),n=p(t,3,"}"),t.braceNest--,t.braceNest>0&&m(e),t.inLinked&&0===t.braceNest&&(t.inLinked=!1),n;case"@":return t.braceNest>0&&d(lp,i(),0),n=D(e,t)||h(t),t.braceNest=0,n;default:{let o=!0,r=!0,a=!0;if(y(e))return t.braceNest>0&&d(lp,i(),0),n=p(t,1,L(e)),t.braceNest=0,t.inLinked=!1,n;if(t.braceNest>0&&(5===t.currentType||6===t.currentType||7===t.currentType))return d(lp,i(),0),t.braceNest=0,$(e,t);if(o=function(e,t){const{currentType:n}=t;if(2!==n)return!1;v(e);const o=g(e.currentPeek());return e.resetPeek(),o}(e,t))return n=p(t,5,function(e){m(e);let t="",n="";for(;t=_(e);)n+=t;return e.currentChar()===Pp&&d(lp,i(),0),n}(e)),m(e),n;if(r=b(e,t))return n=p(t,6,function(e){m(e);let t="";return"-"===e.currentChar()?(e.next(),t+=`-${R(e)}`):t+=R(e),e.currentChar()===Pp&&d(lp,i(),0),t}(e)),m(e),n;if(a=function(e,t){const{currentType:n}=t;if(2!==n)return!1;v(e);const o="'"===e.currentPeek();return e.resetPeek(),o}(e,t))return n=p(t,7,function(e){m(e),f(e,"'");let t="",n="";for(;t=C(e,O);)n+="\\"===t?M(e):t;const o=e.currentChar();return o===wp||o===Pp?(d(op,i(),0),o===wp&&(e.next(),f(e,"'")),n):(f(e,"'"),n)}(e)),m(e),n;if(!o&&!r&&!a)return n=p(t,13,function(e){m(e);let t="",n="";for(;t=C(e,I);)n+=t;return n}(e)),d(np,i(),0,n.value),m(e),n;break}}return n}function D(e,t){const{currentType:n}=t;let o=null;const r=e.currentChar();switch(8!==n&&9!==n&&12!==n&&10!==n||r!==wp&&r!==Cp||d(up,i(),0),r){case"@":return e.next(),o=p(t,8,"@"),t.inLinked=!0,o;case".":return m(e),e.next(),p(t,9,".");case":":return m(e),e.next(),p(t,10,":");default:return y(e)?(o=p(t,1,L(e)),t.braceNest=0,t.inLinked=!1,o):function(e,t){const{currentType:n}=t;if(8!==n)return!1;v(e);const o="."===e.currentPeek();return e.resetPeek(),o}(e,t)||function(e,t){const{currentType:n}=t;if(8!==n&&12!==n)return!1;v(e);const o=":"===e.currentPeek();return e.resetPeek(),o}(e,t)?(m(e),D(e,t)):function(e,t){const{currentType:n}=t;if(9!==n)return!1;v(e);const o=g(e.currentPeek());return e.resetPeek(),o}(e,t)?(m(e),p(t,12,function(e){let t="",n="";for(;t=k(e);)n+=t;return n}(e))):function(e,t){const{currentType:n}=t;if(10!==n)return!1;const o=()=>{const t=e.currentPeek();return"{"===t?g(e.peek()):!("@"===t||"%"===t||"|"===t||":"===t||"."===t||t===Cp||!t)&&(t===wp?(e.peek(),o()):x(e,!1))},r=o();return e.resetPeek(),r}(e,t)?(m(e),"{"===r?B(e,t)||o:p(t,11,function(e){const t=n=>{const o=e.currentChar();return"{"!==o&&"%"!==o&&"@"!==o&&"|"!==o&&"("!==o&&")"!==o&&o?o===Cp?n:(n+=o,e.next(),t(n)):n};return t("")}(e))):(8===n&&d(up,i(),0),t.braceNest=0,t.inLinked=!1,$(e,t))}}function $(e,t){let n={type:14};if(t.braceNest>0)return B(e,t)||h(t);if(t.inLinked)return D(e,t)||h(t);switch(e.currentChar()){case"{":return B(e,t)||h(t);case"}":return d(ap,i(),0),e.next(),p(t,3,"}");case"@":return D(e,t)||h(t);default:{if(y(e))return n=p(t,1,L(e)),t.braceNest=0,t.inLinked=!1,n;const{isModulo:o,hasSpace:r}=function(e){const t=v(e),n="%"===e.currentPeek()&&"{"===e.peek();return e.resetPeek(),{isModulo:n,hasSpace:t.length>0}}(e);if(o)return r?p(t,0,E(e)):p(t,4,function(e){m(e);const t=e.currentChar();return"%"!==t&&d(tp,i(),0,t),e.next(),"%"}(e));if(x(e))return p(t,0,E(e));break}}return n}return{nextToken:function(){const{currentType:e,offset:t,startLoc:n,endLoc:a}=s;return s.lastType=e,s.lastOffset=t,s.lastStartLoc=n,s.lastEndLoc=a,s.offset=r(),s.startLoc=i(),o.currentChar()===Pp?p(s,14):$(o,s)},currentOffset:r,currentPosition:i,context:c}}const Ap=/(?:\\\\|\\'|\\u([0-9a-fA-F]{4})|\\U([0-9a-fA-F]{6}))/g;function zp(e,t,n){switch(e){case"\\\\":return"\\";case"\\'":return"'";default:{const e=parseInt(t||n,16);return e<=55295||e>=57344?String.fromCodePoint(e):"�"}}}function Rp(e={}){const t=!1!==e.location,{onError:n,onWarn:o}=e;function r(e,o,r,i,...a){const l=e.currentPosition();if(l.offset+=i,l.column+=i,n){const e=yp(o,t?Vd(r,l):null,{domain:"parser",args:a});n(e)}}function i(e,n,r,i,...a){const l=e.currentPosition();if(l.offset+=i,l.column+=i,o){const e=t?Vd(r,l):null;o(function(e,t,...n){const o=Kd(ep[e]||"",...n||[]),r={message:String(o),code:e};return t&&(r.location=t),r}(n,e,a))}}function a(e,n,o){const r={type:e};return t&&(r.start=n,r.end=n,r.loc={start:o,end:o}),r}function l(e,n,o,r){r&&(e.type=r),t&&(e.end=n,e.loc&&(e.loc.end=o))}function s(e,t){const n=e.context(),o=a(3,n.offset,n.startLoc);return o.value=t,l(o,e.currentOffset(),e.currentPosition()),o}function c(e,t){const n=e.context(),{lastOffset:o,lastStartLoc:r}=n,i=a(5,o,r);return i.index=parseInt(t,10),e.nextToken(),l(i,e.currentOffset(),e.currentPosition()),i}function u(e,t,n){const o=e.context(),{lastOffset:r,lastStartLoc:i}=o,s=a(4,r,i);return s.key=t,!0===n&&(s.modulo=!0),e.nextToken(),l(s,e.currentOffset(),e.currentPosition()),s}function d(e,t){const n=e.context(),{lastOffset:o,lastStartLoc:r}=n,i=a(9,o,r);return i.value=t.replace(Ap,zp),e.nextToken(),l(i,e.currentOffset(),e.currentPosition()),i}function p(e){const t=e.context(),n=a(6,t.offset,t.startLoc);let o=e.nextToken();if(9===o.type){const t=function(e){const t=e.nextToken(),n=e.context(),{lastOffset:o,lastStartLoc:i}=n,s=a(8,o,i);return 12!==t.type?(r(e,pp,n.lastStartLoc,0),s.value="",l(s,o,i),{nextConsumeToken:t,node:s}):(null==t.value&&r(e,fp,n.lastStartLoc,0,Ep(t)),s.value=t.value||"",l(s,e.currentOffset(),e.currentPosition()),{node:s})}(e);n.modifier=t.node,o=t.nextConsumeToken||e.nextToken()}switch(10!==o.type&&r(e,fp,t.lastStartLoc,0,Ep(o)),o=e.nextToken(),2===o.type&&(o=e.nextToken()),o.type){case 11:null==o.value&&r(e,fp,t.lastStartLoc,0,Ep(o)),n.key=function(e,t){const n=e.context(),o=a(7,n.offset,n.startLoc);return o.value=t,l(o,e.currentOffset(),e.currentPosition()),o}(e,o.value||"");break;case 5:null==o.value&&r(e,fp,t.lastStartLoc,0,Ep(o)),n.key=u(e,o.value||"");break;case 6:null==o.value&&r(e,fp,t.lastStartLoc,0,Ep(o)),n.key=c(e,o.value||"");break;case 7:null==o.value&&r(e,fp,t.lastStartLoc,0,Ep(o)),n.key=d(e,o.value||"");break;default:{r(e,hp,t.lastStartLoc,0);const i=e.context(),s=a(7,i.offset,i.startLoc);return s.value="",l(s,i.offset,i.startLoc),n.key=s,l(n,i.offset,i.startLoc),{nextConsumeToken:o,node:n}}}return l(n,e.currentOffset(),e.currentPosition()),{node:n}}function h(e){const t=e.context(),n=a(2,1===t.currentType?e.currentOffset():t.offset,1===t.currentType?t.endLoc:t.startLoc);n.items=[];let o=null,h=null;do{const a=o||e.nextToken();switch(o=null,a.type){case 0:null==a.value&&r(e,fp,t.lastStartLoc,0,Ep(a)),n.items.push(s(e,a.value||""));break;case 6:null==a.value&&r(e,fp,t.lastStartLoc,0,Ep(a)),n.items.push(c(e,a.value||""));break;case 4:h=!0;break;case 5:null==a.value&&r(e,fp,t.lastStartLoc,0,Ep(a)),n.items.push(u(e,a.value||"",!!h)),h&&(i(e,Zd,t.lastStartLoc,0,Ep(a)),h=null);break;case 7:null==a.value&&r(e,fp,t.lastStartLoc,0,Ep(a)),n.items.push(d(e,a.value||""));break;case 8:{const t=p(e);n.items.push(t.node),o=t.nextConsumeToken||null;break}}}while(14!==t.currentType&&1!==t.currentType);return l(n,1===t.currentType?t.lastOffset:e.currentOffset(),1===t.currentType?t.lastEndLoc:e.currentPosition()),n}function f(e){const t=e.context(),{offset:n,startLoc:o}=t,i=h(e);return 14===t.currentType?i:function(e,t,n,o){const i=e.context();let s=0===o.items.length;const c=a(1,t,n);c.cases=[],c.cases.push(o);do{const t=h(e);s||(s=0===t.items.length),c.cases.push(t)}while(14!==i.currentType);return s&&r(e,dp,n,0),l(c,e.currentOffset(),e.currentPosition()),c}(e,n,o,i)}return{parse:function(n){const o=Tp(n,Gd({},e)),i=o.context(),s=a(0,i.offset,i.startLoc);return t&&s.loc&&(s.loc.source=n),s.body=f(o),e.onCacheKey&&(s.cacheKey=e.onCacheKey(n)),14!==i.currentType&&r(o,fp,i.lastStartLoc,0,n[i.offset]||""),l(s,o.currentOffset(),o.currentPosition()),s}}}function Ep(e){if(14===e.type)return"EOF";const t=(e.value||"").replace(/\r?\n/gu,"\\n");return t.length>10?t.slice(0,9)+"…":t}function Op(e,t){for(let n=0;nn,helper:e=>(n.helpers.add(e),e)}}(e);n.helper("normalize"),e.body&&Mp(e.body,n);const o=n.context();e.helpers=Array.from(o.helpers)}function Ip(e){if(1===e.items.length){const t=e.items[0];3!==t.type&&9!==t.type||(e.static=t.value,delete t.value)}else{const t=[];for(let n=0;n1){e.push(`${n("plural")}([`),e.indent(o());const r=t.cases.length;for(let n=0;nIp(e)))}(a),r&&Lp(a),{ast:a,code:""}):(Fp(a,n),((e,t={})=>{const n=Xd(t.mode)?t.mode:"normal",o=Xd(t.filename)?t.filename:"message.intl",r=!!t.sourceMap,i=null!=t.breakLineCode?t.breakLineCode:"arrow"===n?";":"\n",a=t.needIndent?t.needIndent:"arrow"!==n,l=e.helpers||[],s=function(e,t){const{sourceMap:n,filename:o,breakLineCode:r,needIndent:i}=t,a=!1!==t.location,l={filename:o,code:"",column:1,line:1,offset:0,map:void 0,breakLineCode:r,needIndent:i,indentLevel:0};function s(e,t){l.code+=e}function c(e,t=!0){const n=t?r:"";s(i?n+" ".repeat(e):n)}return a&&e.loc&&(l.source=e.loc.source),{context:()=>l,push:s,indent:function(e=!0){const t=++l.indentLevel;e&&c(t)},deindent:function(e=!0){const t=--l.indentLevel;e&&c(t)},newline:function(){c(l.indentLevel)},helper:e=>`_${e}`,needIndent:()=>l.needIndent}}(e,{mode:n,filename:o,sourceMap:r,breakLineCode:i,needIndent:a});s.push("normal"===n?"function __msg__ (ctx) {":"(ctx) => {"),s.indent(a),l.length>0&&(s.push(`const { ${Qd(l.map((e=>`${e}: _${e}`)),", ")} } = ctx`),s.newline()),s.push("return "),Bp(s,e),s.deindent(a),s.push("}"),delete e.helpers;const{code:c,map:u}=s.context();return{ast:e,code:c,map:u?u.toJSON():void 0}})(a,n))}const $p=[];$p[0]={w:[0],i:[3,0],"[":[4],o:[7]},$p[1]={w:[1],".":[2],"[":[4],o:[7]},$p[2]={w:[2],i:[3,0],0:[3,0]},$p[3]={i:[3,0],0:[3,0],w:[1,1],".":[2,1],"[":[4,1],o:[7,1]},$p[4]={"'":[5,0],'"':[6,0],"[":[4,2],"]":[1,3],o:8,l:[4,0]},$p[5]={"'":[4,0],o:8,l:[5,0]},$p[6]={'"':[4,0],o:8,l:[6,0]};const Np=/^\s?(?:true|false|-?[\d.]+|'[^']*'|"[^"]*")\s?$/;function jp(e){if(null==e)return"o";switch(e.charCodeAt(0)){case 91:case 93:case 46:case 34:case 39:return e;case 95:case 36:case 45:return"i";case 9:case 10:case 13:case 160:case 65279:case 8232:case 8233:return"w"}return"i"}function Hp(e){const t=e.trim();return("0"!==e.charAt(0)||!isNaN(parseInt(e)))&&(n=t,Np.test(n)?function(e){const t=e.charCodeAt(0);return t!==e.charCodeAt(e.length-1)||34!==t&&39!==t?e:e.slice(1,-1)}(t):"*"+t);var n}const Wp=new Map;function Up(e,t){return Bd(e)?e[t]:null}const Vp=e=>e,qp=e=>"",Kp=e=>0===e.length?"":function(e,t=""){return e.reduce(((e,n,o)=>0===o?e+n:e+t+n),"")}(e),Gp=e=>null==e?"":Md(e)||Nd(e)&&e.toString===Dd?JSON.stringify(e,null,2):String(e);function Xp(e,t){return e=Math.abs(e),2===t?e?e>1?1:0:1:e?Math.min(e,2):0}function Yp(e={}){const t=e.locale,n=function(e){const t=Sd(e.pluralIndex)?e.pluralIndex:-1;return e.named&&(Sd(e.named.count)||Sd(e.named.n))?Sd(e.named.count)?e.named.count:Sd(e.named.n)?e.named.n:t:t}(e),o=Bd(e.pluralRules)&&Id(t)&&Fd(e.pluralRules[t])?e.pluralRules[t]:Xp,r=Bd(e.pluralRules)&&Id(t)&&Fd(e.pluralRules[t])?Xp:void 0,i=e.list||[],a=e.named||{};function l(t){const n=Fd(e.messages)?e.messages(t):!!Bd(e.messages)&&e.messages[t];return n||(e.parent?e.parent.message(t):qp)}Sd(e.pluralIndex)&&function(e,t){t.count||(t.count=e),t.n||(t.n=e)}(n,a);const s=Nd(e.processor)&&Fd(e.processor.normalize)?e.processor.normalize:Kp,c=Nd(e.processor)&&Fd(e.processor.interpolate)?e.processor.interpolate:Gp,u={list:e=>i[e],named:e=>a[e],plural:e=>e[o(n,e.length,r)],linked:(t,...n)=>{const[o,r]=n;let i="text",a="";1===n.length?Bd(o)?(a=o.modifier||a,i=o.type||i):Id(o)&&(a=o||a):2===n.length&&(Id(o)&&(a=o||a),Id(r)&&(i=r||i));const s=l(t)(u),c="vnode"===i&&Md(s)&&a?s[0]:s;return a?(d=a,e.modifiers?e.modifiers[d]:Vp)(c,i):c;var d},message:l,type:Nd(e.processor)&&Id(e.processor.type)?e.processor.type:"text",interpolate:c,normalize:s,values:Td({},i,a)};return u}let Qp=null;const Zp=Jp("function:translate");function Jp(e){return t=>Qp&&Qp.emit(e,t)}const eh=Jd,th=jd(eh),nh={NOT_FOUND_KEY:eh,FALLBACK_TO_TRANSLATE:th(),CANNOT_FORMAT_NUMBER:th(),FALLBACK_TO_NUMBER_FORMAT:th(),CANNOT_FORMAT_DATE:th(),FALLBACK_TO_DATE_FORMAT:th(),EXPERIMENTAL_CUSTOM_MESSAGE_COMPILER:th(),__EXTEND_POINT__:th()},oh=gp,rh=jd(oh),ih={INVALID_ARGUMENT:oh,INVALID_DATE_ARGUMENT:rh(),INVALID_ISO_DATE_ARGUMENT:rh(),NOT_SUPPORT_NON_STRING_MESSAGE:rh(),NOT_SUPPORT_LOCALE_PROMISE_VALUE:rh(),NOT_SUPPORT_LOCALE_ASYNC_FUNCTION:rh(),NOT_SUPPORT_LOCALE_TYPE:rh(),__EXTEND_POINT__:rh()};function ah(e){return yp(e,null,void 0)}function lh(e,t){return null!=t.locale?ch(t.locale):ch(e.locale)}let sh;function ch(e){if(Id(e))return e;if(Fd(e)){if(e.resolvedOnce&&null!=sh)return sh;if("Function"===e.constructor.name){const n=e();if(Bd(t=n)&&Fd(t.then)&&Fd(t.catch))throw ah(ih.NOT_SUPPORT_LOCALE_PROMISE_VALUE);return sh=n}throw ah(ih.NOT_SUPPORT_LOCALE_ASYNC_FUNCTION)}throw ah(ih.NOT_SUPPORT_LOCALE_TYPE);var t}function uh(e,t,n){return[...new Set([n,...Md(t)?t:Bd(t)?Object.keys(t):Id(t)?[t]:[n]])]}function dh(e,t,n){const o=Id(n)?n:vh,r=e;r.__localeChainCache||(r.__localeChainCache=new Map);let i=r.__localeChainCache.get(o);if(!i){i=[];let e=[n];for(;Md(e);)e=ph(i,e,t);const a=Md(t)||!Nd(t)?t:t.default?t.default:null;e=Id(a)?[a]:a,Md(e)&&ph(i,e,!1),r.__localeChainCache.set(o,i)}return i}function ph(e,t,n){let o=!0;for(let r=0;r`${e.charAt(0).toLocaleUpperCase()}${e.substr(1)}`;let gh,bh,yh;function xh(e){gh=e}let Ch=null;const wh=()=>Ch;let kh=null;const Sh=e=>{kh=e};let _h=0;function Ph(e={}){const t=Fd(e.onWarn)?e.onWarn:Hd,n=Id(e.version)?e.version:"9.14.0",o=Id(e.locale)||Fd(e.locale)?e.locale:vh,r=Fd(o)?vh:o,i=Md(e.fallbackLocale)||Nd(e.fallbackLocale)||Id(e.fallbackLocale)||!1===e.fallbackLocale?e.fallbackLocale:r,a=Nd(e.messages)?e.messages:{[r]:{}},l=Nd(e.datetimeFormats)?e.datetimeFormats:{[r]:{}},s=Nd(e.numberFormats)?e.numberFormats:{[r]:{}},c=Td({},e.modifiers||{},{upper:(e,t)=>"text"===t&&Id(e)?e.toUpperCase():"vnode"===t&&Bd(e)&&"__v_isVNode"in e?e.children.toUpperCase():e,lower:(e,t)=>"text"===t&&Id(e)?e.toLowerCase():"vnode"===t&&Bd(e)&&"__v_isVNode"in e?e.children.toLowerCase():e,capitalize:(e,t)=>"text"===t&&Id(e)?mh(e):"vnode"===t&&Bd(e)&&"__v_isVNode"in e?mh(e.children):e}),u=e.pluralRules||{},d=Fd(e.missing)?e.missing:null,p=!Ld(e.missingWarn)&&!_d(e.missingWarn)||e.missingWarn,h=!Ld(e.fallbackWarn)&&!_d(e.fallbackWarn)||e.fallbackWarn,f=!!e.fallbackFormat,v=!!e.unresolving,m=Fd(e.postTranslation)?e.postTranslation:null,g=Nd(e.processor)?e.processor:null,b=!Ld(e.warnHtmlMessage)||e.warnHtmlMessage,y=!!e.escapeParameter,x=Fd(e.messageCompiler)?e.messageCompiler:gh,C=Fd(e.messageResolver)?e.messageResolver:bh||Up,w=Fd(e.localeFallbacker)?e.localeFallbacker:yh||uh,k=Bd(e.fallbackContext)?e.fallbackContext:void 0,S=e,_=Bd(S.__datetimeFormatters)?S.__datetimeFormatters:new Map,P=Bd(S.__numberFormatters)?S.__numberFormatters:new Map,T=Bd(S.__meta)?S.__meta:{};_h++;const A={version:n,cid:_h,locale:o,fallbackLocale:i,messages:a,modifiers:c,pluralRules:u,missing:d,missingWarn:p,fallbackWarn:h,fallbackFormat:f,unresolving:v,postTranslation:m,processor:g,warnHtmlMessage:b,escapeParameter:y,messageCompiler:x,messageResolver:C,localeFallbacker:w,fallbackContext:k,onWarn:t,__meta:T};return A.datetimeFormats=l,A.numberFormats=s,A.__datetimeFormatters=_,A.__numberFormatters=P,__INTLIFY_PROD_DEVTOOLS__&&function(e,t,n){Qp&&Qp.emit("i18n:init",{timestamp:Date.now(),i18n:e,version:t,meta:n})}(A,n,T),A}function Th(e,t,n,o,r){const{missing:i,onWarn:a}=e;if(null!==i){const o=i(e,n,t,r);return Id(o)?o:t}return t}function Ah(e,t,n){e.__localeChainCache=new Map,e.localeFallbacker(e,n,t)}function zh(e,t){const n=t.indexOf(e);if(-1===n)return!1;for(let i=n+1;ifunction(e,t){const n=t.b||t.body;if(1===(n.t||n.type)){const t=n,o=t.c||t.cases;return e.plural(o.reduce(((t,n)=>[...t,Eh(e,n)]),[]))}return Eh(e,n)}(t,e)}function Eh(e,t){const n=t.s||t.static;if(n)return"text"===e.type?n:e.normalize([n]);{const n=(t.i||t.items).reduce(((t,n)=>[...t,Oh(e,n)]),[]);return e.normalize(n)}}function Oh(e,t){const n=t.t||t.type;switch(n){case 3:{const e=t;return e.v||e.value}case 9:{const e=t;return e.v||e.value}case 4:{const n=t;return e.interpolate(e.named(n.k||n.key))}case 5:{const n=t;return e.interpolate(e.list(null!=n.i?n.i:n.index))}case 6:{const n=t,o=n.m||n.modifier;return e.linked(Oh(e,n.k||n.key),o?Oh(e,o):void 0,e.type)}case 7:{const e=t;return e.v||e.value}case 8:{const e=t;return e.v||e.value}default:throw new Error(`unhandled node type on format message part: ${n}`)}}const Mh=e=>e;let Fh=Object.create(null);const Ih=e=>Bd(e)&&(0===e.t||0===e.type)&&("b"in e||"body"in e);function Lh(e,t={}){let n=!1;const o=t.onError||xp;return t.onError=e=>{n=!0,o(e)},p(d({},Dp(e,t)),{detectError:n})}const Bh=(e,t)=>{if(!Id(e))throw ah(ih.NOT_SUPPORT_NON_STRING_MESSAGE);{!Ld(t.warnHtmlMessage)||t.warnHtmlMessage;const n=(t.onCacheKey||Mh)(e),o=Fh[n];if(o)return o;const{code:r,detectError:i}=Lh(e,t),a=new Function(`return ${r}`)();return i?a:Fh[n]=a}},Dh=()=>"",$h=e=>Fd(e);function Nh(e,...t){const{fallbackFormat:n,postTranslation:o,unresolving:r,messageCompiler:i,fallbackLocale:a,messages:l}=e,[s,c]=Wh(...t),u=(Ld(c.missingWarn)?c.missingWarn:e.missingWarn,Ld(c.fallbackWarn)?c.fallbackWarn:e.fallbackWarn,Ld(c.escapeParameter)?c.escapeParameter:e.escapeParameter),d=!!c.resolvedMessage,p=Id(c.default)||Ld(c.default)?Ld(c.default)?i?s:()=>s:c.default:n?i?s:()=>s:"",h=n||""!==p,f=lh(e,c);u&&function(e){Md(e.list)?e.list=e.list.map((e=>Id(e)?Rd(e):e)):Bd(e.named)&&Object.keys(e.named).forEach((t=>{Id(e.named[t])&&(e.named[t]=Rd(e.named[t]))}))}(c);let[v,m,g]=d?[s,f,l[f]||{}]:jh(e,s,f,a),b=v,y=s;if(d||Id(b)||Ih(b)||$h(b)||h&&(b=p,y=b),!(d||(Id(b)||Ih(b)||$h(b))&&Id(m)))return r?-1:s;let x=!1;const C=$h(b)?b:Hh(e,s,m,b,y,(()=>{x=!0}));if(x)return b;const w=function(e,t,n,o){const{modifiers:r,pluralRules:i,messageResolver:a,fallbackLocale:l,fallbackWarn:s,missingWarn:c,fallbackContext:u}=e,d=o=>{let r=a(n,o);if(null==r&&u){const[,,e]=jh(u,o,t,l);r=a(e,o)}if(Id(r)||Ih(r)){let n=!1;const i=Hh(e,o,t,r,o,(()=>{n=!0}));return n?Dh:i}return $h(r)?r:Dh},p={locale:t,modifiers:r,pluralRules:i,messages:d};return e.processor&&(p.processor=e.processor),o.list&&(p.list=o.list),o.named&&(p.named=o.named),Sd(o.plural)&&(p.pluralIndex=o.plural),p}(e,m,g,c),k=function(e,t,n){const o=t(n);return o}(0,C,Yp(w)),S=o?o(k,s):k;if(__INTLIFY_PROD_DEVTOOLS__){const t={timestamp:Date.now(),key:Id(s)?s:$h(b)?b.key:"",locale:m||($h(b)?b.locale:""),format:Id(b)?b:$h(b)?b.source:"",message:S};t.meta=Td({},e.__meta,wh()||{}),Zp(t)}return S}function jh(e,t,n,o,r,i){const{messages:a,onWarn:l,messageResolver:s,localeFallbacker:c}=e,u=c(e,o,n);let d,p={},h=null;for(let f=0;fo;return e.locale=n,e.key=t,e}const s=a(o,function(e,t,n,o,r,i){return{locale:t,key:n,warnHtmlMessage:r,onError:e=>{throw i&&i(e),e},onCacheKey:e=>((e,t,n)=>kd({l:e,k:t,s:n}))(t,n,e)}}(0,n,r,0,l,i));return s.locale=n,s.key=t,s.source=o,s}function Wh(...e){const[t,n,o]=e,r={};if(!(Id(t)||Sd(t)||$h(t)||Ih(t)))throw ah(ih.INVALID_ARGUMENT);const i=Sd(t)?String(t):($h(t),t);return Sd(n)?r.plural=n:Id(n)?r.default=n:Nd(n)&&!Pd(n)?r.named=n:Md(n)&&(r.list=n),Sd(o)?r.plural=o:Id(o)?r.default=o:Nd(o)&&Td(r,o),[i,r]}function Uh(e,...t){const{datetimeFormats:n,unresolving:o,fallbackLocale:r,onWarn:i,localeFallbacker:a}=e,{__datetimeFormatters:l}=e,[s,c,u,d]=qh(...t);Ld(u.missingWarn)?u.missingWarn:e.missingWarn,Ld(u.fallbackWarn)?u.fallbackWarn:e.fallbackWarn;const p=!!u.part,h=lh(e,u),f=a(e,r,h);if(!Id(s)||""===s)return new Intl.DateTimeFormat(h,d).format(c);let v,m={},g=null;for(let x=0;x{Vh.includes(e)?l[e]=n[e]:i[e]=n[e]})),Id(o)?i.locale=o:Nd(o)&&(l=o),Nd(r)&&(l=r),[i.key||"",a,i,l]}function Kh(e,t,n){const o=e;for(const r in n){const e=`${t}__${r}`;o.__datetimeFormatters.has(e)&&o.__datetimeFormatters.delete(e)}}function Gh(e,...t){const{numberFormats:n,unresolving:o,fallbackLocale:r,onWarn:i,localeFallbacker:a}=e,{__numberFormatters:l}=e,[s,c,u,d]=Yh(...t);Ld(u.missingWarn)?u.missingWarn:e.missingWarn,Ld(u.fallbackWarn)?u.fallbackWarn:e.fallbackWarn;const p=!!u.part,h=lh(e,u),f=a(e,r,h);if(!Id(s)||""===s)return new Intl.NumberFormat(h,d).format(c);let v,m={},g=null;for(let x=0;x{Xh.includes(e)?a[e]=n[e]:i[e]=n[e]})),Id(o)?i.locale=o:Nd(o)&&(a=o),Nd(r)&&(a=r),[i.key||"",l,i,a]}function Qh(e,t,n){const o=e;for(const r in n){const e=`${t}__${r}`;o.__numberFormatters.has(e)&&o.__numberFormatters.delete(e)}}"boolean"!=typeof __INTLIFY_PROD_DEVTOOLS__&&(zd().__INTLIFY_PROD_DEVTOOLS__=!1),"boolean"!=typeof __INTLIFY_JIT_COMPILATION__&&(zd().__INTLIFY_JIT_COMPILATION__=!1),"boolean"!=typeof __INTLIFY_DROP_MESSAGE_COMPILER__&&(zd().__INTLIFY_DROP_MESSAGE_COMPILER__=!1);const Zh=nh.__EXTEND_POINT__,Jh=jd(Zh);Jh(),Jh(),Jh(),Jh(),Jh(),Jh(),Jh(),Jh(),Jh();const ef=ih.__EXTEND_POINT__,tf=jd(ef),nf={UNEXPECTED_RETURN_TYPE:ef,INVALID_ARGUMENT:tf(),MUST_BE_CALL_SETUP_TOP:tf(),NOT_INSTALLED:tf(),NOT_AVAILABLE_IN_LEGACY_MODE:tf(),REQUIRED_VALUE:tf(),INVALID_VALUE:tf(),CANNOT_SETUP_VUE_DEVTOOLS_PLUGIN:tf(),NOT_INSTALLED_WITH_PROVIDE:tf(),UNEXPECTED_ERROR:tf(),NOT_COMPATIBLE_LEGACY_VUE_I18N:tf(),BRIDGE_SUPPORT_VUE_2_ONLY:tf(),MUST_DEFINE_I18N_OPTION_IN_ALLOW_COMPOSITION:tf(),NOT_AVAILABLE_COMPOSITION_IN_LEGACY:tf(),__EXTEND_POINT__:tf()};function of(e,...t){return yp(e,null,void 0)}const rf=wd("__translateVNode"),af=wd("__datetimeParts"),lf=wd("__numberParts"),sf=wd("__setPluralRules"),cf=wd("__injectWithOption"),uf=wd("__dispose");function df(e){if(!Bd(e))return e;for(const t in e)if(Od(e,t))if(t.includes(".")){const n=t.split("."),o=n.length-1;let r=e,i=!1;for(let e=0;e{if("locale"in e&&"resource"in e){const{locale:t,resource:n}=e;t?(a[t]=a[t]||{},Ud(n,a[t])):Ud(n,a)}else Id(e)&&Ud(JSON.parse(e),a)})),null==r&&i)for(const l in a)Od(a,l)&&df(a[l]);return a}function hf(e){return e.type}function ff(e,t,n){let o=Bd(t.messages)?t.messages:{};"__i18nGlobal"in n&&(o=pf(e.locale.value,{messages:o,__i18n:n.__i18nGlobal}));const r=Object.keys(o);if(r.length&&r.forEach((t=>{e.mergeLocaleMessage(t,o[t])})),Bd(t.datetimeFormats)){const n=Object.keys(t.datetimeFormats);n.length&&n.forEach((n=>{e.mergeDateTimeFormat(n,t.datetimeFormats[n])}))}if(Bd(t.numberFormats)){const n=Object.keys(t.numberFormats);n.length&&n.forEach((n=>{e.mergeNumberFormat(n,t.numberFormats[n])}))}}function vf(e){return Lr(xr,null,e,0)}const mf=()=>[],gf=()=>!1;let bf=0;function yf(e){return(t,n,o,r)=>e(n,o,Gr()||void 0,r)}function xf(e={},t){const{__root:n,__injectWithOption:o}=e,r=void 0===n,i=e.flatJson,a=Cd?Et:Ot,l=!!e.translateExistCompatible;let s=!Ld(e.inheritLocale)||e.inheritLocale;const c=a(n&&s?n.locale.value:Id(e.locale)?e.locale:vh),u=a(n&&s?n.fallbackLocale.value:Id(e.fallbackLocale)||Md(e.fallbackLocale)||Nd(e.fallbackLocale)||!1===e.fallbackLocale?e.fallbackLocale:c.value),d=a(pf(c.value,e)),p=a(Nd(e.datetimeFormats)?e.datetimeFormats:{[c.value]:{}}),h=a(Nd(e.numberFormats)?e.numberFormats:{[c.value]:{}});let f=n?n.missingWarn:!Ld(e.missingWarn)&&!_d(e.missingWarn)||e.missingWarn,v=n?n.fallbackWarn:!Ld(e.fallbackWarn)&&!_d(e.fallbackWarn)||e.fallbackWarn,m=n?n.fallbackRoot:!Ld(e.fallbackRoot)||e.fallbackRoot,g=!!e.fallbackFormat,b=Fd(e.missing)?e.missing:null,y=Fd(e.missing)?yf(e.missing):null,x=Fd(e.postTranslation)?e.postTranslation:null,C=n?n.warnHtmlMessage:!Ld(e.warnHtmlMessage)||e.warnHtmlMessage,w=!!e.escapeParameter;const k=n?n.modifiers:Nd(e.modifiers)?e.modifiers:{};let S,_=e.pluralRules||n&&n.pluralRules;S=(()=>{r&&Sh(null);const t={version:"9.14.0",locale:c.value,fallbackLocale:u.value,messages:d.value,modifiers:k,pluralRules:_,missing:null===y?void 0:y,missingWarn:f,fallbackWarn:v,fallbackFormat:g,unresolving:!0,postTranslation:null===x?void 0:x,warnHtmlMessage:C,escapeParameter:w,messageResolver:e.messageResolver,messageCompiler:e.messageCompiler,__meta:{framework:"vue"}};t.datetimeFormats=p.value,t.numberFormats=h.value,t.__datetimeFormatters=Nd(S)?S.__datetimeFormatters:void 0,t.__numberFormatters=Nd(S)?S.__numberFormatters:void 0;const n=Ph(t);return r&&Sh(n),n})(),Ah(S,c.value,u.value);const P=ai({get:()=>c.value,set:e=>{c.value=e,S.locale=c.value}}),T=ai({get:()=>u.value,set:e=>{u.value=e,S.fallbackLocale=u.value,Ah(S,c.value,e)}}),A=ai((()=>d.value)),z=ai((()=>p.value)),R=ai((()=>h.value)),E=(e,t,o,i,a,l)=>{let s;c.value,u.value,d.value,p.value,h.value;try{__INTLIFY_PROD_DEVTOOLS__,r||(S.fallbackContext=n?kh:void 0),s=e(S)}finally{__INTLIFY_PROD_DEVTOOLS__,r||(S.fallbackContext=void 0)}if("translate exists"!==o&&Sd(s)&&-1===s||"translate exists"===o&&!s){const[e,o]=t();return n&&m?i(n):a(e)}if(l(s))return s;throw of(nf.UNEXPECTED_RETURN_TYPE)};function O(...e){return E((t=>Reflect.apply(Nh,null,[t,...e])),(()=>Wh(...e)),"translate",(t=>Reflect.apply(t.t,t,[...e])),(e=>e),(e=>Id(e)))}const M={normalize:function(e){return e.map((e=>Id(e)||Sd(e)||Ld(e)?vf(String(e)):e))},interpolate:e=>e,type:"vnode"};function F(e){return d.value[e]||{}}bf++,n&&Cd&&(lr(n.locale,(e=>{s&&(c.value=e,S.locale=e,Ah(S,c.value,u.value))})),lr(n.fallbackLocale,(e=>{s&&(u.value=e,S.fallbackLocale=e,Ah(S,c.value,u.value))})));const I={id:bf,locale:P,fallbackLocale:T,get inheritLocale(){return s},set inheritLocale(e){s=e,e&&n&&(c.value=n.locale.value,u.value=n.fallbackLocale.value,Ah(S,c.value,u.value))},get availableLocales(){return Object.keys(d.value).sort()},messages:A,get modifiers(){return k},get pluralRules(){return _||{}},get isGlobal(){return r},get missingWarn(){return f},set missingWarn(e){f=e,S.missingWarn=f},get fallbackWarn(){return v},set fallbackWarn(e){v=e,S.fallbackWarn=v},get fallbackRoot(){return m},set fallbackRoot(e){m=e},get fallbackFormat(){return g},set fallbackFormat(e){g=e,S.fallbackFormat=g},get warnHtmlMessage(){return C},set warnHtmlMessage(e){C=e,S.warnHtmlMessage=e},get escapeParameter(){return w},set escapeParameter(e){w=e,S.escapeParameter=e},t:O,getLocaleMessage:F,setLocaleMessage:function(e,t){if(i){const n={[e]:t};for(const e in n)Od(n,e)&&df(n[e]);t=n[e]}d.value[e]=t,S.messages=d.value},mergeLocaleMessage:function(e,t){d.value[e]=d.value[e]||{};const n={[e]:t};if(i)for(const o in n)Od(n,o)&&df(n[o]);Ud(t=n[e],d.value[e]),S.messages=d.value},getPostTranslationHandler:function(){return Fd(x)?x:null},setPostTranslationHandler:function(e){x=e,S.postTranslation=e},getMissingHandler:function(){return b},setMissingHandler:function(e){null!==e&&(y=yf(e)),b=e,S.missing=y},[sf]:function(e){_=e,S.pluralRules=_}};return I.datetimeFormats=z,I.numberFormats=R,I.rt=function(...e){const[t,n,o]=e;if(o&&!Bd(o))throw of(nf.INVALID_ARGUMENT);return O(t,n,Td({resolvedMessage:!0},o||{}))},I.te=function(e,t){return E((()=>{if(!e)return!1;const n=F(Id(t)?t:c.value),o=S.messageResolver(n,e);return l?null!=o:Ih(o)||$h(o)||Id(o)}),(()=>[e]),"translate exists",(n=>Reflect.apply(n.te,n,[e,t])),gf,(e=>Ld(e)))},I.tm=function(e){const t=function(e){let t=null;const n=dh(S,u.value,c.value);for(let o=0;oReflect.apply(Uh,null,[t,...e])),(()=>qh(...e)),"datetime format",(t=>Reflect.apply(t.d,t,[...e])),(()=>""),(e=>Id(e)))},I.n=function(...e){return E((t=>Reflect.apply(Gh,null,[t,...e])),(()=>Yh(...e)),"number format",(t=>Reflect.apply(t.n,t,[...e])),(()=>""),(e=>Id(e)))},I.getDateTimeFormat=function(e){return p.value[e]||{}},I.setDateTimeFormat=function(e,t){p.value[e]=t,S.datetimeFormats=p.value,Kh(S,e,t)},I.mergeDateTimeFormat=function(e,t){p.value[e]=Td(p.value[e]||{},t),S.datetimeFormats=p.value,Kh(S,e,t)},I.getNumberFormat=function(e){return h.value[e]||{}},I.setNumberFormat=function(e,t){h.value[e]=t,S.numberFormats=h.value,Qh(S,e,t)},I.mergeNumberFormat=function(e,t){h.value[e]=Td(h.value[e]||{},t),S.numberFormats=h.value,Qh(S,e,t)},I[cf]=o,I[rf]=function(...e){return E((t=>{let n;const o=t;try{o.processor=M,n=Reflect.apply(Nh,null,[o,...e])}finally{o.processor=null}return n}),(()=>Wh(...e)),"translate",(t=>t[rf](...e)),(e=>[vf(e)]),(e=>Md(e)))},I[af]=function(...e){return E((t=>Reflect.apply(Uh,null,[t,...e])),(()=>qh(...e)),"datetime format",(t=>t[af](...e)),mf,(e=>Id(e)||Md(e)))},I[lf]=function(...e){return E((t=>Reflect.apply(Gh,null,[t,...e])),(()=>Yh(...e)),"number format",(t=>t[lf](...e)),mf,(e=>Id(e)||Md(e)))},I}function Cf(e={},t){{const t=xf(function(e){const t=Id(e.locale)?e.locale:vh,n=Id(e.fallbackLocale)||Md(e.fallbackLocale)||Nd(e.fallbackLocale)||!1===e.fallbackLocale?e.fallbackLocale:t,o=Fd(e.missing)?e.missing:void 0,r=!Ld(e.silentTranslationWarn)&&!_d(e.silentTranslationWarn)||!e.silentTranslationWarn,i=!Ld(e.silentFallbackWarn)&&!_d(e.silentFallbackWarn)||!e.silentFallbackWarn,a=!Ld(e.fallbackRoot)||e.fallbackRoot,l=!!e.formatFallbackMessages,s=Nd(e.modifiers)?e.modifiers:{},c=e.pluralizationRules,u=Fd(e.postTranslation)?e.postTranslation:void 0,d=!Id(e.warnHtmlInMessage)||"off"!==e.warnHtmlInMessage,p=!!e.escapeParameterHtml,h=!Ld(e.sync)||e.sync;let f=e.messages;if(Nd(e.sharedMessages)){const t=e.sharedMessages;f=Object.keys(t).reduce(((e,n)=>{const o=e[n]||(e[n]={});return Td(o,t[n]),e}),f||{})}const{__i18n:v,__root:m,__injectWithOption:g}=e,b=e.datetimeFormats,y=e.numberFormats,x=e.flatJson,C=e.translateExistCompatible;return{locale:t,fallbackLocale:n,messages:f,flatJson:x,datetimeFormats:b,numberFormats:y,missing:o,missingWarn:r,fallbackWarn:i,fallbackRoot:a,fallbackFormat:l,modifiers:s,pluralRules:c,postTranslation:u,warnHtmlMessage:d,escapeParameter:p,messageResolver:e.messageResolver,inheritLocale:h,translateExistCompatible:C,__i18n:v,__root:m,__injectWithOption:g}}(e)),{__extender:n}=e,o={id:t.id,get locale(){return t.locale.value},set locale(e){t.locale.value=e},get fallbackLocale(){return t.fallbackLocale.value},set fallbackLocale(e){t.fallbackLocale.value=e},get messages(){return t.messages.value},get datetimeFormats(){return t.datetimeFormats.value},get numberFormats(){return t.numberFormats.value},get availableLocales(){return t.availableLocales},get formatter(){return{interpolate:()=>[]}},set formatter(e){},get missing(){return t.getMissingHandler()},set missing(e){t.setMissingHandler(e)},get silentTranslationWarn(){return Ld(t.missingWarn)?!t.missingWarn:t.missingWarn},set silentTranslationWarn(e){t.missingWarn=Ld(e)?!e:e},get silentFallbackWarn(){return Ld(t.fallbackWarn)?!t.fallbackWarn:t.fallbackWarn},set silentFallbackWarn(e){t.fallbackWarn=Ld(e)?!e:e},get modifiers(){return t.modifiers},get formatFallbackMessages(){return t.fallbackFormat},set formatFallbackMessages(e){t.fallbackFormat=e},get postTranslation(){return t.getPostTranslationHandler()},set postTranslation(e){t.setPostTranslationHandler(e)},get sync(){return t.inheritLocale},set sync(e){t.inheritLocale=e},get warnHtmlInMessage(){return t.warnHtmlMessage?"warn":"off"},set warnHtmlInMessage(e){t.warnHtmlMessage="off"!==e},get escapeParameterHtml(){return t.escapeParameter},set escapeParameterHtml(e){t.escapeParameter=e},get preserveDirectiveContent(){return!0},set preserveDirectiveContent(e){},get pluralizationRules(){return t.pluralRules||{}},__composer:t,t(...e){const[n,o,r]=e,i={};let a=null,l=null;if(!Id(n))throw of(nf.INVALID_ARGUMENT);const s=n;return Id(o)?i.locale=o:Md(o)?a=o:Nd(o)&&(l=o),Md(r)?a=r:Nd(r)&&(l=r),Reflect.apply(t.t,t,[s,a||l||{},i])},rt:(...e)=>Reflect.apply(t.rt,t,[...e]),tc(...e){const[n,o,r]=e,i={plural:1};let a=null,l=null;if(!Id(n))throw of(nf.INVALID_ARGUMENT);const s=n;return Id(o)?i.locale=o:Sd(o)?i.plural=o:Md(o)?a=o:Nd(o)&&(l=o),Id(r)?i.locale=r:Md(r)?a=r:Nd(r)&&(l=r),Reflect.apply(t.t,t,[s,a||l||{},i])},te:(e,n)=>t.te(e,n),tm:e=>t.tm(e),getLocaleMessage:e=>t.getLocaleMessage(e),setLocaleMessage(e,n){t.setLocaleMessage(e,n)},mergeLocaleMessage(e,n){t.mergeLocaleMessage(e,n)},d:(...e)=>Reflect.apply(t.d,t,[...e]),getDateTimeFormat:e=>t.getDateTimeFormat(e),setDateTimeFormat(e,n){t.setDateTimeFormat(e,n)},mergeDateTimeFormat(e,n){t.mergeDateTimeFormat(e,n)},n:(...e)=>Reflect.apply(t.n,t,[...e]),getNumberFormat:e=>t.getNumberFormat(e),setNumberFormat(e,n){t.setNumberFormat(e,n)},mergeNumberFormat(e,n){t.mergeNumberFormat(e,n)},getChoiceIndex:(e,t)=>-1};return o.__extender=n,o}}const wf={tag:{type:[String,Object]},locale:{type:String},scope:{type:String,validator:e=>"parent"===e||"global"===e,default:"parent"},i18n:{type:Object}};function kf(e){return yr}const Sf=zn({name:"i18n-t",props:Td({keypath:{type:String,required:!0},plural:{type:[Number,String],validator:e=>Sd(e)||!isNaN(e)}},wf),setup(e,t){const{slots:n,attrs:o}=t,r=e.i18n||Mf({useScope:e.scope,__useComponent:!0});return()=>{const i=Object.keys(n).filter((e=>"_"!==e)),a={};e.locale&&(a.locale=e.locale),void 0!==e.plural&&(a.plural=Id(e.plural)?+e.plural:e.plural);const l=function({slots:e},t){return 1===t.length&&"default"===t[0]?(e.default?e.default():[]).reduce(((e,t)=>[...e,...t.type===yr?t.children:[t]]),[]):t.reduce(((t,n)=>{const o=e[n];return o&&(t[n]=o()),t}),{})}(t,i),s=r[rf](e.keypath,l,a),c=Td({},o);return li(Id(e.tag)||Bd(e.tag)?e.tag:kf(),c,s)}}});function _f(e,t,n,o){const{slots:r,attrs:i}=t;return()=>{const t={part:!0};let a={};e.locale&&(t.locale=e.locale),Id(e.format)?t.key=e.format:Bd(e.format)&&(Id(e.format.key)&&(t.key=e.format.key),a=Object.keys(e.format).reduce(((t,o)=>n.includes(o)?Td({},t,{[o]:e.format[o]}):t),{}));const l=o(e.value,t,a);let s=[t.key];Md(l)?s=l.map(((e,t)=>{const n=r[e.type],o=n?n({[e.type]:e.value,index:t,parts:l}):[e.value];var i;return Md(i=o)&&!Id(i[0])&&(o[0].key=`${e.type}-${t}`),o})):Id(l)&&(s=[l]);const c=Td({},i);return li(Id(e.tag)||Bd(e.tag)?e.tag:kf(),c,s)}}const Pf=zn({name:"i18n-n",props:Td({value:{type:Number,required:!0},format:{type:[String,Object]}},wf),setup(e,t){const n=e.i18n||Mf({useScope:e.scope,__useComponent:!0});return _f(e,t,Xh,((...e)=>n[lf](...e)))}}),Tf=zn({name:"i18n-d",props:Td({value:{type:[Number,Date],required:!0},format:{type:[String,Object]}},wf),setup(e,t){const n=e.i18n||Mf({useScope:e.scope,__useComponent:!0});return _f(e,t,Vh,((...e)=>n[af](...e)))}});function Af(e){if(Id(e))return{path:e};if(Nd(e)){if(!("path"in e))throw of(nf.REQUIRED_VALUE);return e}throw of(nf.INVALID_VALUE)}function zf(e){const{path:t,locale:n,args:o,choice:r,plural:i}=e,a={},l=o||{};return Id(n)&&(a.locale=n),Sd(r)&&(a.plural=r),Sd(i)&&(a.plural=i),[t,l,a]}function Rf(e,t,...n){const o=Nd(n[0])?n[0]:{},r=!!o.useI18nComponentName;(!Ld(o.globalInstall)||o.globalInstall)&&([r?"i18n":Sf.name,"I18nT"].forEach((t=>e.component(t,Sf))),[Pf.name,"I18nN"].forEach((t=>e.component(t,Pf))),[Tf.name,"I18nD"].forEach((t=>e.component(t,Tf)))),e.directive("t",function(e){const t=t=>{const{instance:n,modifiers:o,value:r}=t;if(!n||!n.$)throw of(nf.UNEXPECTED_ERROR);const i=function(e,t){const n=e;if("composition"===e.mode)return n.__getInstance(t)||e.global;{const o=n.__getInstance(t);return null!=o?o.__composer:e.global.__composer}}(e,n.$),a=Af(r);return[Reflect.apply(i.t,i,[...zf(a)]),i]};return{created:(n,o)=>{const[r,i]=t(o);Cd&&e.global===i&&(n.__i18nWatcher=lr(i.locale,(()=>{o.instance&&o.instance.$forceUpdate()}))),n.__composer=i,n.textContent=r},unmounted:e=>{Cd&&e.__i18nWatcher&&(e.__i18nWatcher(),e.__i18nWatcher=void 0,delete e.__i18nWatcher),e.__composer&&(e.__composer=void 0,delete e.__composer)},beforeUpdate:(e,{value:t})=>{if(e.__composer){const n=e.__composer,o=Af(t);e.textContent=Reflect.apply(n.t,n,[...zf(o)])}},getSSRProps:e=>{const[n]=t(e);return{textContent:n}}}}(t))}function Ef(e,t){e.locale=t.locale||e.locale,e.fallbackLocale=t.fallbackLocale||e.fallbackLocale,e.missing=t.missing||e.missing,e.silentTranslationWarn=t.silentTranslationWarn||e.silentFallbackWarn,e.silentFallbackWarn=t.silentFallbackWarn||e.silentFallbackWarn,e.formatFallbackMessages=t.formatFallbackMessages||e.formatFallbackMessages,e.postTranslation=t.postTranslation||e.postTranslation,e.warnHtmlInMessage=t.warnHtmlInMessage||e.warnHtmlInMessage,e.escapeParameterHtml=t.escapeParameterHtml||e.escapeParameterHtml,e.sync=t.sync||e.sync,e.__composer[sf](t.pluralizationRules||e.pluralizationRules);const n=pf(e.locale,{messages:t.messages,__i18n:t.__i18n});return Object.keys(n).forEach((t=>e.mergeLocaleMessage(t,n[t]))),t.datetimeFormats&&Object.keys(t.datetimeFormats).forEach((n=>e.mergeDateTimeFormat(n,t.datetimeFormats[n]))),t.numberFormats&&Object.keys(t.numberFormats).forEach((n=>e.mergeNumberFormat(n,t.numberFormats[n]))),e}const Of=wd("global-vue-i18n");function Mf(e={}){const t=Gr();if(null==t)throw of(nf.MUST_BE_CALL_SETUP_TOP);if(!t.isCE&&null!=t.appContext.app&&!t.appContext.app.__VUE_I18N_SYMBOL__)throw of(nf.NOT_INSTALLED);const n=function(e){{const t=Po(e.isCE?Of:e.appContext.app.__VUE_I18N_SYMBOL__);if(!t)throw of(e.isCE?nf.NOT_INSTALLED_WITH_PROVIDE:nf.UNEXPECTED_ERROR);return t}}(t),o=function(e){return"composition"===e.mode?e.global:e.global.__composer}(n),r=hf(t),i=function(e,t){return Pd(e)?"__i18n"in t?"local":"global":e.useScope?e.useScope:"local"}(e,r);if(__VUE_I18N_LEGACY_API__&&"legacy"===n.mode&&!e.__useComponent){if(!n.allowComposition)throw of(nf.NOT_AVAILABLE_IN_LEGACY_MODE);return function(e,t,n,o={}){const r="local"===t,i=Ot(null);if(r&&e.proxy&&!e.proxy.$options.i18n&&!e.proxy.$options.__i18n)throw of(nf.MUST_DEFINE_I18N_OPTION_IN_ALLOW_COMPOSITION);const a=Ld(o.inheritLocale)?o.inheritLocale:!Id(o.locale),l=Et(!r||a?n.locale.value:Id(o.locale)?o.locale:vh),s=Et(!r||a?n.fallbackLocale.value:Id(o.fallbackLocale)||Md(o.fallbackLocale)||Nd(o.fallbackLocale)||!1===o.fallbackLocale?o.fallbackLocale:l.value),c=Et(pf(l.value,o)),u=Et(Nd(o.datetimeFormats)?o.datetimeFormats:{[l.value]:{}}),d=Et(Nd(o.numberFormats)?o.numberFormats:{[l.value]:{}}),p=r?n.missingWarn:!Ld(o.missingWarn)&&!_d(o.missingWarn)||o.missingWarn,h=r?n.fallbackWarn:!Ld(o.fallbackWarn)&&!_d(o.fallbackWarn)||o.fallbackWarn,f=r?n.fallbackRoot:!Ld(o.fallbackRoot)||o.fallbackRoot,v=!!o.fallbackFormat,m=Fd(o.missing)?o.missing:null,g=Fd(o.postTranslation)?o.postTranslation:null,b=r?n.warnHtmlMessage:!Ld(o.warnHtmlMessage)||o.warnHtmlMessage,y=!!o.escapeParameter,x=r?n.modifiers:Nd(o.modifiers)?o.modifiers:{},C=o.pluralRules||r&&n.pluralRules;function w(){return[l.value,s.value,c.value,u.value,d.value]}const k=ai({get:()=>i.value?i.value.locale.value:l.value,set:e=>{i.value&&(i.value.locale.value=e),l.value=e}}),S=ai({get:()=>i.value?i.value.fallbackLocale.value:s.value,set:e=>{i.value&&(i.value.fallbackLocale.value=e),s.value=e}}),_=ai((()=>i.value?i.value.messages.value:c.value)),P=ai((()=>u.value)),T=ai((()=>d.value));function A(){return i.value?i.value.getPostTranslationHandler():g}function z(e){i.value&&i.value.setPostTranslationHandler(e)}function R(){return i.value?i.value.getMissingHandler():m}function E(e){i.value&&i.value.setMissingHandler(e)}function O(e){return w(),e()}function M(...e){return i.value?O((()=>Reflect.apply(i.value.t,null,[...e]))):O((()=>""))}function F(...e){return i.value?Reflect.apply(i.value.rt,null,[...e]):""}function I(...e){return i.value?O((()=>Reflect.apply(i.value.d,null,[...e]))):O((()=>""))}function L(...e){return i.value?O((()=>Reflect.apply(i.value.n,null,[...e]))):O((()=>""))}function B(e){return i.value?i.value.tm(e):{}}function D(e,t){return!!i.value&&i.value.te(e,t)}function $(e){return i.value?i.value.getLocaleMessage(e):{}}function N(e,t){i.value&&(i.value.setLocaleMessage(e,t),c.value[e]=t)}function j(e,t){i.value&&i.value.mergeLocaleMessage(e,t)}function H(e){return i.value?i.value.getDateTimeFormat(e):{}}function W(e,t){i.value&&(i.value.setDateTimeFormat(e,t),u.value[e]=t)}function U(e,t){i.value&&i.value.mergeDateTimeFormat(e,t)}function V(e){return i.value?i.value.getNumberFormat(e):{}}function q(e,t){i.value&&(i.value.setNumberFormat(e,t),d.value[e]=t)}function K(e,t){i.value&&i.value.mergeNumberFormat(e,t)}const G={get id(){return i.value?i.value.id:-1},locale:k,fallbackLocale:S,messages:_,datetimeFormats:P,numberFormats:T,get inheritLocale(){return i.value?i.value.inheritLocale:a},set inheritLocale(e){i.value&&(i.value.inheritLocale=e)},get availableLocales(){return i.value?i.value.availableLocales:Object.keys(c.value)},get modifiers(){return i.value?i.value.modifiers:x},get pluralRules(){return i.value?i.value.pluralRules:C},get isGlobal(){return!!i.value&&i.value.isGlobal},get missingWarn(){return i.value?i.value.missingWarn:p},set missingWarn(e){i.value&&(i.value.missingWarn=e)},get fallbackWarn(){return i.value?i.value.fallbackWarn:h},set fallbackWarn(e){i.value&&(i.value.missingWarn=e)},get fallbackRoot(){return i.value?i.value.fallbackRoot:f},set fallbackRoot(e){i.value&&(i.value.fallbackRoot=e)},get fallbackFormat(){return i.value?i.value.fallbackFormat:v},set fallbackFormat(e){i.value&&(i.value.fallbackFormat=e)},get warnHtmlMessage(){return i.value?i.value.warnHtmlMessage:b},set warnHtmlMessage(e){i.value&&(i.value.warnHtmlMessage=e)},get escapeParameter(){return i.value?i.value.escapeParameter:y},set escapeParameter(e){i.value&&(i.value.escapeParameter=e)},t:M,getPostTranslationHandler:A,setPostTranslationHandler:z,getMissingHandler:R,setMissingHandler:E,rt:F,d:I,n:L,tm:B,te:D,getLocaleMessage:$,setLocaleMessage:N,mergeLocaleMessage:j,getDateTimeFormat:H,setDateTimeFormat:W,mergeDateTimeFormat:U,getNumberFormat:V,setNumberFormat:q,mergeNumberFormat:K};function X(e){e.locale.value=l.value,e.fallbackLocale.value=s.value,Object.keys(c.value).forEach((t=>{e.mergeLocaleMessage(t,c.value[t])})),Object.keys(u.value).forEach((t=>{e.mergeDateTimeFormat(t,u.value[t])})),Object.keys(d.value).forEach((t=>{e.mergeNumberFormat(t,d.value[t])})),e.escapeParameter=y,e.fallbackFormat=v,e.fallbackRoot=f,e.fallbackWarn=h,e.missingWarn=p,e.warnHtmlMessage=b}return Dn((()=>{if(null==e.proxy||null==e.proxy.$i18n)throw of(nf.NOT_AVAILABLE_COMPOSITION_IN_LEGACY);const n=i.value=e.proxy.$i18n.__composer;"global"===t?(l.value=n.locale.value,s.value=n.fallbackLocale.value,c.value=n.messages.value,u.value=n.datetimeFormats.value,d.value=n.numberFormats.value):r&&X(n)})),G}(t,i,o,e)}if("global"===i)return ff(o,e,r),o;if("parent"===i){let r=function(e,t,n=!1){let o=null;const r=t.root;let i=function(e,t=!1){return null==e?null:t&&e.vnode.ctx||e.parent}(t,n);for(;null!=i;){const t=e;if("composition"===e.mode)o=t.__getInstance(i);else if(__VUE_I18N_LEGACY_API__){const e=t.__getInstance(i);null!=e&&(o=e.__composer,n&&o&&!o[cf]&&(o=null))}if(null!=o)break;if(r===i)break;i=i.parent}return o}(n,t,e.__useComponent);return null==r&&(r=o),r}const a=n;let l=a.__getInstance(t);if(null==l){const n=Td({},e);"__i18n"in r&&(n.__i18n=r.__i18n),o&&(n.__root=o),l=xf(n),a.__composerExtend&&(l[uf]=a.__composerExtend(l)),function(e,t,n){$n((()=>{}),t),Wn((()=>{const o=n;e.__deleteInstance(t);const r=o[uf];r&&(r(),delete o[uf])}),t)}(a,t,l),a.__setInstance(t,l)}return l}const Ff=["locale","fallbackLocale","availableLocales"],If=["t","rt","d","n","tm","te"];var Lf;if("boolean"!=typeof __VUE_I18N_FULL_INSTALL__&&(zd().__VUE_I18N_FULL_INSTALL__=!0),"boolean"!=typeof __VUE_I18N_LEGACY_API__&&(zd().__VUE_I18N_LEGACY_API__=!0),"boolean"!=typeof __INTLIFY_JIT_COMPILATION__&&(zd().__INTLIFY_JIT_COMPILATION__=!1),"boolean"!=typeof __INTLIFY_DROP_MESSAGE_COMPILER__&&(zd().__INTLIFY_DROP_MESSAGE_COMPILER__=!1),"boolean"!=typeof __INTLIFY_PROD_DEVTOOLS__&&(zd().__INTLIFY_PROD_DEVTOOLS__=!1),__INTLIFY_JIT_COMPILATION__?xh((function(e,t){if(__INTLIFY_JIT_COMPILATION__&&!__INTLIFY_DROP_MESSAGE_COMPILER__&&Id(e)){!Ld(t.warnHtmlMessage)||t.warnHtmlMessage;const n=(t.onCacheKey||Mh)(e),o=Fh[n];if(o)return o;const{ast:r,detectError:i}=Lh(e,p(d({},t),{location:!1,jit:!0})),a=Rh(r);return i?a:Fh[n]=a}{const t=e.cacheKey;return t?Fh[t]||(Fh[t]=Rh(e)):Rh(e)}})):xh(Bh),bh=function(e,t){if(!Bd(e))return null;let n=Wp.get(t);if(n||(n=function(e){const t=[];let n,o,r,i,a,l,s,c=-1,u=0,d=0;const p=[];function h(){const t=e[c+1];if(5===u&&"'"===t||6===u&&'"'===t)return c++,r="\\"+t,p[0](),!0}for(p[0]=()=>{void 0===o?o=r:o+=r},p[1]=()=>{void 0!==o&&(t.push(o),o=void 0)},p[2]=()=>{p[0](),d++},p[3]=()=>{if(d>0)d--,u=4,p[0]();else{if(d=0,void 0===o)return!1;if(o=Hp(o),!1===o)return!1;p[1]()}};null!==u;)if(c++,n=e[c],"\\"!==n||!h()){if(i=jp(n),s=$p[u],a=s[i]||s.l||8,8===a)return;if(u=a[0],void 0!==a[1]&&(l=p[a[1]],l&&(r=n,!1===l())))return;if(7===u)return t}}(t),n&&Wp.set(t,n)),!n)return null;const o=n.length;let r=e,i=0;for(;iZl((()=>Promise.resolve().then((()=>IQ))),void 0),"./lang/fa-IR.json":()=>Zl((()=>Promise.resolve().then((()=>LQ))),void 0),"./lang/ja-JP.json":()=>Zl((()=>Promise.resolve().then((()=>BQ))),void 0),"./lang/ko-KR.json":()=>Zl((()=>Promise.resolve().then((()=>DQ))),void 0),"./lang/ru-RU.json":()=>Zl((()=>Promise.resolve().then((()=>$Q))),void 0),"./lang/vi-VN.json":()=>Zl((()=>Promise.resolve().then((()=>NQ))),void 0),"./lang/zh-CN.json":()=>Zl((()=>Promise.resolve().then((()=>jQ))),void 0),"./lang/zh-TW.json":()=>Zl((()=>Promise.resolve().then((()=>HQ))),void 0)})).map((e=>e.slice(7,-5))),jf=function(e={},t){const n=__VUE_I18N_LEGACY_API__&&Ld(e.legacy)?e.legacy:__VUE_I18N_LEGACY_API__,o=!Ld(e.globalInjection)||e.globalInjection,r=!__VUE_I18N_LEGACY_API__||!n||!!e.allowComposition,i=new Map,[a,l]=function(e,t,n){const o=ce();{const n=__VUE_I18N_LEGACY_API__&&t?o.run((()=>Cf(e))):o.run((()=>xf(e)));if(null==n)throw of(nf.UNEXPECTED_ERROR);return[o,n]}}(e,n),s=wd("");{const e={get mode(){return __VUE_I18N_LEGACY_API__&&n?"legacy":"composition"},get allowComposition(){return r},install(t,...r){return v(this,null,(function*(){if(t.__VUE_I18N_SYMBOL__=s,t.provide(t.__VUE_I18N_SYMBOL__,e),Nd(r[0])){const t=r[0];e.__composerExtend=t.__composerExtend,e.__vueI18nExtend=t.__vueI18nExtend}let i=null;!n&&o&&(i=function(e,t){const n=Object.create(null);Ff.forEach((e=>{const o=Object.getOwnPropertyDescriptor(t,e);if(!o)throw of(nf.UNEXPECTED_ERROR);const r=Rt(o.value)?{get:()=>o.value.value,set(e){o.value.value=e}}:{get:()=>o.get&&o.get()};Object.defineProperty(n,e,r)})),e.config.globalProperties.$i18n=n,If.forEach((n=>{const o=Object.getOwnPropertyDescriptor(t,n);if(!o||!o.value)throw of(nf.UNEXPECTED_ERROR);Object.defineProperty(e.config.globalProperties,`$${n}`,o)}));const o=()=>{delete e.config.globalProperties.$i18n,If.forEach((t=>{delete e.config.globalProperties[`$${t}`]}))};return o}(t,e.global)),__VUE_I18N_FULL_INSTALL__&&Rf(t,e,...r),__VUE_I18N_LEGACY_API__&&n&&t.mixin(function(e,t,n){return{beforeCreate(){const o=Gr();if(!o)throw of(nf.UNEXPECTED_ERROR);const r=this.$options;if(r.i18n){const o=r.i18n;if(r.__i18n&&(o.__i18n=r.__i18n),o.__root=t,this===this.$root)this.$i18n=Ef(e,o);else{o.__injectWithOption=!0,o.__extender=n.__vueI18nExtend,this.$i18n=Cf(o);const e=this.$i18n;e.__extender&&(e.__disposer=e.__extender(this.$i18n))}}else if(r.__i18n)if(this===this.$root)this.$i18n=Ef(e,r);else{this.$i18n=Cf({__i18n:r.__i18n,__injectWithOption:!0,__extender:n.__vueI18nExtend,__root:t});const e=this.$i18n;e.__extender&&(e.__disposer=e.__extender(this.$i18n))}else this.$i18n=e;r.__i18nGlobal&&ff(t,r,r),this.$t=(...e)=>this.$i18n.t(...e),this.$rt=(...e)=>this.$i18n.rt(...e),this.$tc=(...e)=>this.$i18n.tc(...e),this.$te=(e,t)=>this.$i18n.te(e,t),this.$d=(...e)=>this.$i18n.d(...e),this.$n=(...e)=>this.$i18n.n(...e),this.$tm=e=>this.$i18n.tm(e),n.__setInstance(o,this.$i18n)},mounted(){},unmounted(){const e=Gr();if(!e)throw of(nf.UNEXPECTED_ERROR);const t=this.$i18n;delete this.$t,delete this.$rt,delete this.$tc,delete this.$te,delete this.$d,delete this.$n,delete this.$tm,t.__disposer&&(t.__disposer(),delete t.__disposer,delete t.__extender),n.__deleteInstance(e),delete this.$i18n}}}(l,l.__composer,e));const a=t.unmount;t.unmount=()=>{i&&i(),e.dispose(),a()}}))},get global(){return l},dispose(){a.stop()},__instances:i,__getInstance:function(e){return i.get(e)||null},__setInstance:function(e,t){i.set(e,t)},__deleteInstance:function(e){i.delete(e)}};return e}}({locale:Df().value||function(){const e=navigator.language,t=Nf.includes(e)?e:"zh-CN";return Df().value||$f(t),t}(),fallbackLocale:"en-US",messages:{}});function Hf(){return v(this,null,(function*(){yield Promise.all(Nf.map((e=>v(this,null,(function*(){const t=yield((e,t)=>{const n=e[t];return n?"function"==typeof n?n():Promise.resolve(n):new Promise(((e,n)=>{("function"==typeof queueMicrotask?queueMicrotask:setTimeout)(n.bind(null,new Error("Unknown variable dynamic import: "+t)))}))})(Object.assign({"./lang/en-US.json":()=>Zl((()=>Promise.resolve().then((()=>IQ))),void 0),"./lang/fa-IR.json":()=>Zl((()=>Promise.resolve().then((()=>LQ))),void 0),"./lang/ja-JP.json":()=>Zl((()=>Promise.resolve().then((()=>BQ))),void 0),"./lang/ko-KR.json":()=>Zl((()=>Promise.resolve().then((()=>DQ))),void 0),"./lang/ru-RU.json":()=>Zl((()=>Promise.resolve().then((()=>$Q))),void 0),"./lang/vi-VN.json":()=>Zl((()=>Promise.resolve().then((()=>NQ))),void 0),"./lang/zh-CN.json":()=>Zl((()=>Promise.resolve().then((()=>jQ))),void 0),"./lang/zh-TW.json":()=>Zl((()=>Promise.resolve().then((()=>HQ))),void 0)}),`./lang/${e}.json`).then((e=>e.default||e));jf.global.setLocaleMessage(e,t)})))))}))}const Wf={"zh-CN":"简体中文","zh-TW":"繁體中文","en-US":"English","fa-IR":"Iran","ja-JP":"日本語","vi-VN":"Tiếng Việt","ko-KR":"한국어","ru-RU":"Русский"},Uf=e=>jf.global.t(e);function Vf(e=void 0,t="YYYY-MM-DD HH:mm:ss"){return null==e?"":(10===e.toString().length&&(e*=1e3),bd(e).format(t))}function qf(e=void 0,t="YYYY-MM-DD"){return Vf(e,t)}function Kf(e){const t="string"==typeof e?parseFloat(e):e;return isNaN(t)?"0.00":t.toFixed(2)}function Gf(e){const t="string"==typeof e?parseFloat(e):e;return isNaN(t)?"0.00":(t/100).toFixed(2)}function Xf(e){navigator.clipboard?navigator.clipboard.writeText(e).then((()=>{window.$message.success(Uf("复制成功"))})).catch((t=>{Yf(e)})):Yf(e)}function Yf(e){const t=document.createElement("button"),n=new xd(t,{text:()=>e});n.on("success",(()=>{window.$message.success(Uf("复制成功")),n.destroy()})),n.on("error",(()=>{window.$message.error(Uf("复制失败")),n.destroy()})),t.click()}function Qf(e){const t=e/1024,n=t/1024,o=n/1024,r=o/1024;return r>=1?Kf(r)+" TB":o>=1?Kf(o)+" GB":n>=1?Kf(n)+" MB":Kf(t)+" KB"}function Zf(e){return e&&Array.isArray(e)}function Jf(e){return/^(https?:|mailto:|tel:)/.test(e)}const ev=/^[a-z0-9]+(-[a-z0-9]+)*$/,tv=(e,t,n,o="")=>{const r=e.split(":");if("@"===e.slice(0,1)){if(r.length<2||r.length>3)return null;o=r.shift().slice(1)}if(r.length>3||!r.length)return null;if(r.length>1){const e=r.pop(),n=r.pop(),i={provider:r.length>0?r[0]:o,prefix:n,name:e};return t&&!nv(i)?null:i}const i=r[0],a=i.split("-");if(a.length>1){const e={provider:o,prefix:a.shift(),name:a.join("-")};return t&&!nv(e)?null:e}if(n&&""===o){const e={provider:o,prefix:"",name:i};return t&&!nv(e,n)?null:e}return null},nv=(e,t)=>!!e&&!(""!==e.provider&&!e.provider.match(ev)||!(t&&""===e.prefix||e.prefix.match(ev))||!e.name.match(ev)),ov=Object.freeze({left:0,top:0,width:16,height:16}),rv=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),iv=Object.freeze(d(d({},ov),rv)),av=Object.freeze(p(d({},iv),{body:"",hidden:!1}));function lv(e,t){const n=function(e,t){const n={};!e.hFlip!=!t.hFlip&&(n.hFlip=!0),!e.vFlip!=!t.vFlip&&(n.vFlip=!0);const o=((e.rotate||0)+(t.rotate||0))%4;return o&&(n.rotate=o),n}(e,t);for(const o in av)o in rv?o in e&&!(o in n)&&(n[o]=rv[o]):o in t?n[o]=t[o]:o in e&&(n[o]=e[o]);return n}function sv(e,t,n){const o=e.icons,r=e.aliases||Object.create(null);let i={};function a(e){i=lv(o[e]||r[e],i)}return a(t),n.forEach(a),lv(e,i)}function cv(e,t){const n=[];if("object"!=typeof e||"object"!=typeof e.icons)return n;e.not_found instanceof Array&&e.not_found.forEach((e=>{t(e,null),n.push(e)}));const o=function(e,t){const n=e.icons,o=e.aliases||Object.create(null),r=Object.create(null);return(t||Object.keys(n).concat(Object.keys(o))).forEach((function e(t){if(n[t])return r[t]=[];if(!(t in r)){r[t]=null;const n=o[t]&&o[t].parent,i=n&&e(n);i&&(r[t]=[n].concat(i))}return r[t]})),r}(e);for(const r in o){const i=o[r];i&&(t(r,sv(e,r,i)),n.push(r))}return n}const uv=d({provider:"",aliases:{},not_found:{}},ov);function dv(e,t){for(const n in t)if(n in e&&typeof e[n]!=typeof t[n])return!1;return!0}function pv(e){if("object"!=typeof e||null===e)return null;const t=e;if("string"!=typeof t.prefix||!e.icons||"object"!=typeof e.icons)return null;if(!dv(e,uv))return null;const n=t.icons;for(const r in n){const e=n[r];if(!r.match(ev)||"string"!=typeof e.body||!dv(e,av))return null}const o=t.aliases||Object.create(null);for(const r in o){const e=o[r],t=e.parent;if(!r.match(ev)||"string"!=typeof t||!n[t]&&!o[t]||!dv(e,av))return null}return t}const hv=Object.create(null);function fv(e,t){const n=hv[e]||(hv[e]=Object.create(null));return n[t]||(n[t]=function(e,t){return{provider:e,prefix:t,icons:Object.create(null),missing:new Set}}(e,t))}function vv(e,t){return pv(t)?cv(t,((t,n)=>{n?e.icons[t]=n:e.missing.add(t)})):[]}let mv=!1;function gv(e){return"boolean"==typeof e&&(mv=e),mv}function bv(e,t){const n=tv(e,!0,mv);return!!n&&function(e,t,n){try{if("string"==typeof n.body)return e.icons[t]=d({},n),!0}catch(o){}return!1}(fv(n.provider,n.prefix),n.name,t)}const yv=Object.freeze({width:null,height:null}),xv=Object.freeze(d(d({},yv),rv)),Cv=/(-?[0-9.]*[0-9]+[0-9.]*)/g,wv=/^-?[0-9.]*[0-9]+[0-9.]*$/g;function kv(e,t,n){if(1===t)return e;if(n=n||100,"number"==typeof e)return Math.ceil(e*t*n)/n;if("string"!=typeof e)return e;const o=e.split(Cv);if(null===o||!o.length)return e;const r=[];let i=o.shift(),a=wv.test(i);for(;;){if(a){const e=parseFloat(i);isNaN(e)?r.push(i):r.push(Math.ceil(e*t*n)/n)}else r.push(i);if(i=o.shift(),void 0===i)return r.join("");a=!a}}const Sv=/\sid="(\S+)"/g,_v="IconifyId"+Date.now().toString(16)+(16777216*Math.random()|0).toString(16);let Pv=0;const Tv=Object.create(null);function Av(e){return Tv[e]||Tv[""]}function zv(e){let t;if("string"==typeof e.resources)t=[e.resources];else if(t=e.resources,!(t instanceof Array&&t.length))return null;return{resources:t,path:e.path||"/",maxURL:e.maxURL||500,rotate:e.rotate||750,timeout:e.timeout||5e3,random:!0===e.random,index:e.index||0,dataAfterTimeout:!1!==e.dataAfterTimeout}}const Rv=Object.create(null),Ev=["https://api.simplesvg.com","https://api.unisvg.com"],Ov=[];for(;Ev.length>0;)1===Ev.length||Math.random()>.5?Ov.push(Ev.shift()):Ov.push(Ev.pop());function Mv(e,t){const n=zv(t);return null!==n&&(Rv[e]=n,!0)}function Fv(e){return Rv[e]}Rv[""]=zv({resources:["https://api.iconify.design"].concat(Ov)});let Iv=(()=>{let e;try{if(e=fetch,"function"==typeof e)return e}catch(t){}})();const Lv={prepare:(e,t,n)=>{const o=[],r=function(e,t){const n=Fv(e);if(!n)return 0;let o;if(n.maxURL){let e=0;n.resources.forEach((t=>{const n=t;e=Math.max(e,n.length)}));const r=t+".json?icons=";o=n.maxURL-e-n.path.length-r.length}else o=0;return o}(e,t),i="icons";let a={type:i,provider:e,prefix:t,icons:[]},l=0;return n.forEach(((n,s)=>{l+=n.length+1,l>=r&&s>0&&(o.push(a),a={type:i,provider:e,prefix:t,icons:[]},l=n.length),a.icons.push(n)})),o.push(a),o},send:(e,t,n)=>{if(!Iv)return void n("abort",424);let o=function(e){if("string"==typeof e){const t=Fv(e);if(t)return t.path}return"/"}(t.provider);switch(t.type){case"icons":{const e=t.prefix,n=t.icons.join(",");o+=e+".json?"+new URLSearchParams({icons:n}).toString();break}case"custom":{const e=t.uri;o+="/"===e.slice(0,1)?e.slice(1):e;break}default:return void n("abort",400)}let r=503;Iv(e+o).then((e=>{const t=e.status;if(200===t)return r=501,e.json();setTimeout((()=>{n(function(e){return 404===e}(t)?"abort":"next",t)}))})).then((e=>{"object"==typeof e&&null!==e?setTimeout((()=>{n("success",e)})):setTimeout((()=>{404===e?n("abort",e):n("next",r)}))})).catch((()=>{n("next",r)}))}};function Bv(e,t){e.forEach((e=>{const n=e.loaderCallbacks;n&&(e.loaderCallbacks=n.filter((e=>e.id!==t)))}))}let Dv=0;var $v={resources:[],index:0,timeout:2e3,rotate:750,random:!1,dataAfterTimeout:!1};function Nv(e,t,n,o){const r=e.resources.length,i=e.random?Math.floor(Math.random()*r):e.index;let a;if(e.random){let t=e.resources.slice(0);for(a=[];t.length>1;){const e=Math.floor(Math.random()*t.length);a.push(t[e]),t=t.slice(0,e).concat(t.slice(e+1))}a=a.concat(t)}else a=e.resources.slice(i).concat(e.resources.slice(0,i));const l=Date.now();let s,c="pending",u=0,d=null,p=[],h=[];function f(){d&&(clearTimeout(d),d=null)}function v(){"pending"===c&&(c="aborted"),f(),p.forEach((e=>{"pending"===e.status&&(e.status="aborted")})),p=[]}function m(e,t){t&&(h=[]),"function"==typeof e&&h.push(e)}function g(){c="failed",h.forEach((e=>{e(void 0,s)}))}function b(){p.forEach((e=>{"pending"===e.status&&(e.status="aborted")})),p=[]}function y(){if("pending"!==c)return;f();const o=a.shift();if(void 0===o)return p.length?void(d=setTimeout((()=>{f(),"pending"===c&&(b(),g())}),e.timeout)):void g();const r={status:"pending",resource:o,callback:(t,n)=>{!function(t,n,o){const r="success"!==n;switch(p=p.filter((e=>e!==t)),c){case"pending":break;case"failed":if(r||!e.dataAfterTimeout)return;break;default:return}if("abort"===n)return s=o,void g();if(r)return s=o,void(p.length||(a.length?y():g()));if(f(),b(),!e.random){const n=e.resources.indexOf(t.resource);-1!==n&&n!==e.index&&(e.index=n)}c="completed",h.forEach((e=>{e(o)}))}(r,t,n)}};p.push(r),u++,d=setTimeout(y,e.rotate),n(o,t,r.callback)}return"function"==typeof o&&h.push(o),setTimeout(y),function(){return{startTime:l,payload:t,status:c,queriesSent:u,queriesPending:p.length,subscribe:m,abort:v}}}function jv(e){const t=d(d({},$v),e);let n=[];function o(){n=n.filter((e=>"pending"===e().status))}return{query:function(e,r,i){const a=Nv(t,e,r,((e,t)=>{o(),i&&i(e,t)}));return n.push(a),a},find:function(e){return n.find((t=>e(t)))||null},setIndex:e=>{t.index=e},getIndex:()=>t.index,cleanup:o}}function Hv(){}const Wv=Object.create(null);function Uv(e,t,n){let o,r;if("string"==typeof e){const t=Av(e);if(!t)return n(void 0,424),Hv;r=t.send;const i=function(e){if(!Wv[e]){const t=Fv(e);if(!t)return;const n={config:t,redundancy:jv(t)};Wv[e]=n}return Wv[e]}(e);i&&(o=i.redundancy)}else{const t=zv(e);if(t){o=jv(t);const n=Av(e.resources?e.resources[0]:"");n&&(r=n.send)}}return o&&r?o.query(t,r,n)().abort:(n(void 0,424),Hv)}const Vv="iconify2",qv="iconify",Kv=qv+"-count",Gv=qv+"-version",Xv=36e5;function Yv(e,t){try{return e.getItem(t)}catch(n){}}function Qv(e,t,n){try{return e.setItem(t,n),!0}catch(o){}}function Zv(e,t){try{e.removeItem(t)}catch(n){}}function Jv(e,t){return Qv(e,Kv,t.toString())}function em(e){return parseInt(Yv(e,Kv))||0}const tm={local:!0,session:!0},nm={local:new Set,session:new Set};let om=!1,rm="undefined"==typeof window?{}:window;function im(e){const t=e+"Storage";try{if(rm&&rm[t]&&"number"==typeof rm[t].length)return rm[t]}catch(n){}tm[e]=!1}function am(e,t){const n=im(e);if(!n)return;const o=Yv(n,Gv);if(o!==Vv){if(o){const e=em(n);for(let t=0;t{const o=qv+e.toString(),i=Yv(n,o);if("string"==typeof i){try{const n=JSON.parse(i);if("object"==typeof n&&"number"==typeof n.cached&&n.cached>r&&"string"==typeof n.provider&&"object"==typeof n.data&&"string"==typeof n.data.prefix&&t(n,e))return!0}catch(a){}Zv(n,o)}};let a=em(n);for(let l=a-1;l>=0;l--)i(l)||(l===a-1?(a--,Jv(n,a)):nm[e].add(l))}function lm(){if(!om){om=!0;for(const e in tm)am(e,(e=>{const t=e.data,n=fv(e.provider,t.prefix);if(!vv(n,t).length)return!1;const o=t.lastModified||-1;return n.lastModifiedCached=n.lastModifiedCached?Math.min(n.lastModifiedCached,o):o,!0}))}}function sm(e,t){function n(n){let o;if(!tm[n]||!(o=im(n)))return;const r=nm[n];let i;if(r.size)r.delete(i=Array.from(r).shift());else if(i=em(o),i>=50||!Jv(o,i+1))return;const a={cached:Math.floor(Date.now()/Xv),provider:e.provider,data:t};return Qv(o,qv+i.toString(),JSON.stringify(a))}om||lm(),t.lastModified&&!function(e,t){const n=e.lastModifiedCached;if(n&&n>=t)return n===t;if(e.lastModifiedCached=t,n)for(const o in tm)am(o,(n=>{const o=n.data;return n.provider!==e.provider||o.prefix!==e.prefix||o.lastModified===t}));return!0}(e,t.lastModified)||Object.keys(t.icons).length&&(t.not_found&&delete(t=Object.assign({},t)).not_found,n("local")||n("session"))}function cm(){}function um(e){e.iconsLoaderFlag||(e.iconsLoaderFlag=!0,setTimeout((()=>{e.iconsLoaderFlag=!1,function(e){e.pendingCallbacksFlag||(e.pendingCallbacksFlag=!0,setTimeout((()=>{e.pendingCallbacksFlag=!1;const t=e.loaderCallbacks?e.loaderCallbacks.slice(0):[];if(!t.length)return;let n=!1;const o=e.provider,r=e.prefix;t.forEach((t=>{const i=t.icons,a=i.pending.length;i.pending=i.pending.filter((t=>{if(t.prefix!==r)return!0;const a=t.name;if(e.icons[a])i.loaded.push({provider:o,prefix:r,name:a});else{if(!e.missing.has(a))return n=!0,!0;i.missing.push({provider:o,prefix:r,name:a})}return!1})),i.pending.length!==a&&(n||Bv([e],t.id),t.callback(i.loaded.slice(0),i.missing.slice(0),i.pending.slice(0),t.abort))}))})))}(e)})))}const dm=(e,t)=>{const n=function(e){const t={loaded:[],missing:[],pending:[]},n=Object.create(null);e.sort(((e,t)=>e.provider!==t.provider?e.provider.localeCompare(t.provider):e.prefix!==t.prefix?e.prefix.localeCompare(t.prefix):e.name.localeCompare(t.name)));let o={provider:"",prefix:"",name:""};return e.forEach((e=>{if(o.name===e.name&&o.prefix===e.prefix&&o.provider===e.provider)return;o=e;const r=e.provider,i=e.prefix,a=e.name,l=n[r]||(n[r]=Object.create(null)),s=l[i]||(l[i]=fv(r,i));let c;c=a in s.icons?t.loaded:""===i||s.missing.has(a)?t.missing:t.pending;const u={provider:r,prefix:i,name:a};c.push(u)})),t}(function(e,t=!0,n=!1){const o=[];return e.forEach((e=>{const r="string"==typeof e?tv(e,t,n):e;r&&o.push(r)})),o}(e,!0,gv()));if(!n.pending.length){let e=!0;return t&&setTimeout((()=>{e&&t(n.loaded,n.missing,n.pending,cm)})),()=>{e=!1}}const o=Object.create(null),r=[];let i,a;return n.pending.forEach((e=>{const{provider:t,prefix:n}=e;if(n===a&&t===i)return;i=t,a=n,r.push(fv(t,n));const l=o[t]||(o[t]=Object.create(null));l[n]||(l[n]=[])})),n.pending.forEach((e=>{const{provider:t,prefix:n,name:r}=e,i=fv(t,n),a=i.pendingIcons||(i.pendingIcons=new Set);a.has(r)||(a.add(r),o[t][n].push(r))})),r.forEach((e=>{const{provider:t,prefix:n}=e;o[t][n].length&&function(e,t){e.iconsToLoad?e.iconsToLoad=e.iconsToLoad.concat(t).sort():e.iconsToLoad=t,e.iconsQueueFlag||(e.iconsQueueFlag=!0,setTimeout((()=>{e.iconsQueueFlag=!1;const{provider:t,prefix:n}=e,o=e.iconsToLoad;let r;delete e.iconsToLoad,o&&(r=Av(t))&&r.prepare(t,n,o).forEach((n=>{Uv(t,n,(t=>{if("object"!=typeof t)n.icons.forEach((t=>{e.missing.add(t)}));else try{const n=vv(e,t);if(!n.length)return;const o=e.pendingIcons;o&&n.forEach((e=>{o.delete(e)})),sm(e,t)}catch(o){}um(e)}))}))})))}(e,o[t][n])})),t?function(e,t,n){const o=Dv++,r=Bv.bind(null,n,o);if(!t.pending.length)return r;const i={id:o,icons:t,callback:e,abort:r};return n.forEach((e=>{(e.loaderCallbacks||(e.loaderCallbacks=[])).push(i)})),r}(t,n,r):cm},pm=/[\s,]+/;function hm(e,t){t.split(pm).forEach((t=>{switch(t.trim()){case"horizontal":e.hFlip=!0;break;case"vertical":e.vFlip=!0}}))}function fm(e,t=0){const n=e.replace(/^-?[0-9.]*/,"");function o(e){for(;e<0;)e+=4;return e%4}if(""===n){const t=parseInt(e);return isNaN(t)?0:o(t)}if(n!==e){let t=0;switch(n){case"%":t=25;break;case"deg":t=90}if(t){let r=parseFloat(e.slice(0,e.length-n.length));return isNaN(r)?0:(r/=t,r%1==0?o(r):0)}}return t}const vm=p(d({},xv),{inline:!1}),mm={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink","aria-hidden":!0,role:"img"},gm={display:"inline-block"},bm={backgroundColor:"currentColor"},ym={backgroundColor:"transparent"},xm={Image:"var(--svg)",Repeat:"no-repeat",Size:"100% 100%"},Cm={webkitMask:bm,mask:bm,background:ym};for(const c in Cm){const e=Cm[c];for(const t in xm)e[c+t]=xm[t]}const wm={};function km(e){return e+(e.match(/^[-0-9.]+$/)?"px":"")}["horizontal","vertical"].forEach((e=>{const t=e.slice(0,1)+"Flip";wm[e+"-flip"]=t,wm[e.slice(0,1)+"-flip"]=t,wm[e+"Flip"]=t}));const Sm=(e,t)=>{const n=function(e,t){const n=d({},e);for(const o in t){const e=t[o],r=typeof e;o in yv?(null===e||e&&("string"===r||"number"===r))&&(n[o]=e):r===typeof n[o]&&(n[o]="rotate"===o?e%4:e)}return n}(vm,t),o=d({},mm),r=t.mode||"svg",i={},a=t.style,l="object"!=typeof a||a instanceof Array?{}:a;for(let d in t){const e=t[d];if(void 0!==e)switch(d){case"icon":case"style":case"onLoad":case"mode":break;case"inline":case"hFlip":case"vFlip":n[d]=!0===e||"true"===e||1===e;break;case"flip":"string"==typeof e&&hm(n,e);break;case"color":i.color=e;break;case"rotate":"string"==typeof e?n[d]=fm(e):"number"==typeof e&&(n[d]=e);break;case"ariaHidden":case"aria-hidden":!0!==e&&"true"!==e&&delete o["aria-hidden"];break;default:{const t=wm[d];t?!0!==e&&"true"!==e&&1!==e||(n[t]=!0):void 0===vm[d]&&(o[d]=e)}}}const s=function(e,t){const n=d(d({},iv),e),o=d(d({},xv),t),r={left:n.left,top:n.top,width:n.width,height:n.height};let i=n.body;[n,o].forEach((e=>{const t=[],n=e.hFlip,o=e.vFlip;let a,l=e.rotate;switch(n?o?l+=2:(t.push("translate("+(r.width+r.left).toString()+" "+(0-r.top).toString()+")"),t.push("scale(-1 1)"),r.top=r.left=0):o&&(t.push("translate("+(0-r.left).toString()+" "+(r.height+r.top).toString()+")"),t.push("scale(1 -1)"),r.top=r.left=0),l<0&&(l-=4*Math.floor(l/4)),l%=4,l){case 1:a=r.height/2+r.top,t.unshift("rotate(90 "+a.toString()+" "+a.toString()+")");break;case 2:t.unshift("rotate(180 "+(r.width/2+r.left).toString()+" "+(r.height/2+r.top).toString()+")");break;case 3:a=r.width/2+r.left,t.unshift("rotate(-90 "+a.toString()+" "+a.toString()+")")}l%2==1&&(r.left!==r.top&&(a=r.left,r.left=r.top,r.top=a),r.width!==r.height&&(a=r.width,r.width=r.height,r.height=a)),t.length&&(i=function(e,t,n){const o=function(e,t="defs"){let n="";const o=e.indexOf("<"+t);for(;o>=0;){const r=e.indexOf(">",o),i=e.indexOf("",i);if(-1===a)break;n+=e.slice(r+1,i).trim(),e=e.slice(0,o).trim()+e.slice(a+1)}return{defs:n,content:e}}(e);return r=o.defs,i=t+o.content+n,r?""+r+""+i:i;var r,i}(i,'',""))}));const a=o.width,l=o.height,s=r.width,c=r.height;let u,p;null===a?(p=null===l?"1em":"auto"===l?c:l,u=kv(p,s/c)):(u="auto"===a?s:a,p=null===l?kv(u,c/s):"auto"===l?c:l);const h={},f=(e,t)=>{(e=>"unset"===e||"undefined"===e||"none"===e)(t)||(h[e]=t.toString())};f("width",u),f("height",p);const v=[r.left,r.top,s,c];return h.viewBox=v.join(" "),{attributes:h,viewBox:v,body:i}}(e,n),c=s.attributes;if(n.inline&&(i.verticalAlign="-0.125em"),"svg"===r){o.style=d(d({},i),l),Object.assign(o,c);let e=0,n=t.id;return"string"==typeof n&&(n=n.replace(/-/g,"_")),o.innerHTML=function(e,t=_v){const n=[];let o;for(;o=Sv.exec(e);)n.push(o[1]);if(!n.length)return e;const r="suffix"+(16777216*Math.random()|Date.now()).toString(16);return n.forEach((n=>{const o="function"==typeof t?t(n):t+(Pv++).toString(),i=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");e=e.replace(new RegExp('([#;"])('+i+')([")]|\\.[a-z])',"g"),"$1"+o+r+"$3")})),e=e.replace(new RegExp(r,"g"),"")}(s.body,n?()=>n+"ID"+e++:"iconifyVue"),li("svg",o)}const{body:u,width:h,height:f}=e,v="mask"===r||"bg"!==r&&-1!==u.indexOf("currentColor"),m=function(e,t){let n=-1===e.indexOf("xlink:")?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(const o in t)n+=" "+o+'="'+t[o]+'"';return'"+e+""}(u,p(d({},c),{width:h+"",height:f+""}));var g;return o.style=d(d(d(p(d({},i),{"--svg":(g=m,'url("'+function(e){return"data:image/svg+xml,"+function(e){return e.replace(/"/g,"'").replace(/%/g,"%25").replace(/#/g,"%23").replace(//g,"%3E").replace(/\s+/g," ")}(e)}(g)+'")'),width:km(c.width),height:km(c.height)}),gm),v?bm:ym),l),li("span",o)};var _m;if(gv(!0),_m=Lv,Tv[""]=_m,"undefined"!=typeof document&&"undefined"!=typeof window){lm();const e=window;if(void 0!==e.IconifyPreload){const t=e.IconifyPreload;"object"==typeof t&&null!==t&&(t instanceof Array?t:[t]).forEach((e=>{try{"object"!=typeof e||null===e||e instanceof Array||"object"!=typeof e.icons||"string"!=typeof e.prefix||function(e,t){if("object"!=typeof e)return!1;if("string"!=typeof t&&(t=e.provider||""),mv&&!t&&!e.prefix){let t=!1;return pv(e)&&(e.prefix="",cv(e,((e,n)=>{n&&bv(e,n)&&(t=!0)}))),t}const n=e.prefix;nv({provider:t,prefix:n,name:"a"})&&vv(fv(t,n),e)}(e)}catch(t){}}))}if(void 0!==e.IconifyProviders){const t=e.IconifyProviders;if("object"==typeof t&&null!==t)for(let e in t)try{const n=t[e];if("object"!=typeof n||!n||void 0===n.resources)continue;Mv(e,n)}catch(WQ){}}}const Pm=p(d({},iv),{body:""}),Tm=zn({inheritAttrs:!1,data:()=>({_name:"",_loadingIcon:null,iconMounted:!1,counter:0}),mounted(){this.iconMounted=!0},unmounted(){this.abortLoading()},methods:{abortLoading(){this._loadingIcon&&(this._loadingIcon.abort(),this._loadingIcon=null)},getIcon(e,t){if("object"==typeof e&&null!==e&&"string"==typeof e.body)return this._name="",this.abortLoading(),{data:e};let n;if("string"!=typeof e||null===(n=tv(e,!1,!0)))return this.abortLoading(),null;const o=function(e){const t="string"==typeof e?tv(e,!0,mv):e;if(t){const e=fv(t.provider,t.prefix),n=t.name;return e.icons[n]||(e.missing.has(n)?null:void 0)}}(n);if(!o)return this._loadingIcon&&this._loadingIcon.name===e||(this.abortLoading(),this._name="",null!==o&&(this._loadingIcon={name:e,abort:dm([n],(()=>{this.counter++}))})),null;this.abortLoading(),this._name!==e&&(this._name=e,t&&t(e));const r=["iconify"];return""!==n.prefix&&r.push("iconify--"+n.prefix),""!==n.provider&&r.push("iconify--"+n.provider),{data:o,classes:r}}},render(){this.counter;const e=this.$attrs,t=this.iconMounted||e.ssr?this.getIcon(e.icon,e.onLoad):null;if(!t)return Sm(Pm,e);let n=e;return t.classes&&(n=p(d({},e),{class:("string"==typeof e.class?e.class+" ":"")+t.classes.join(" ")})),Sm(d(d({},iv),t.data),n)}});let Am=[];const zm=new WeakMap;function Rm(){Am.forEach((e=>e(...zm.get(e)))),Am=[]}function Em(e,...t){zm.set(e,t),Am.includes(e)||1===Am.push(e)&&requestAnimationFrame(Rm)}function Om(e){if(null===e)return null;const t=function(e){return 9===e.nodeType?null:e.parentNode}(e);if(null===t)return null;if(9===t.nodeType)return document.documentElement;if(1===t.nodeType){const{overflow:e,overflowX:n,overflowY:o}=getComputedStyle(t);if(/(auto|scroll|overlay)/.test(e+o+n))return t}return Om(t)}function Mm(e,t){let{target:n}=e;for(;n;){if(n.dataset&&void 0!==n.dataset[t])return!0;n=n.parentElement}return!1}function Fm(e){return e.composedPath()[0]||null}function Im(e){return"string"==typeof e?e.endsWith("px")?Number(e.slice(0,e.length-2)):Number(e):e}function Lm(e){if(null!=e)return"number"==typeof e?`${e}px`:e.endsWith("px")?e:`${e}px`}function Bm(e,t){const n=e.trim().split(/\s+/g),o={top:n[0]};switch(n.length){case 1:o.right=n[0],o.bottom=n[0],o.left=n[0];break;case 2:o.right=n[1],o.left=n[1],o.bottom=n[0];break;case 3:o.right=n[1],o.bottom=n[2],o.left=n[1];break;case 4:o.right=n[1],o.bottom=n[2],o.left=n[3];break;default:throw new Error("[seemly/getMargin]:"+e+" is not a valid value.")}return void 0===t?o:o[t]}const Dm={black:"#000",silver:"#C0C0C0",gray:"#808080",white:"#FFF",maroon:"#800000",red:"#F00",purple:"#800080",fuchsia:"#F0F",green:"#008000",lime:"#0F0",olive:"#808000",yellow:"#FF0",navy:"#000080",blue:"#00F",teal:"#008080",aqua:"#0FF",transparent:"#0000"},$m="^\\s*",Nm="\\s*$",jm="\\s*((\\.\\d+)|(\\d+(\\.\\d*)?))\\s*",Hm="([0-9A-Fa-f])",Wm="([0-9A-Fa-f]{2})",Um=new RegExp(`${$m}rgb\\s*\\(${jm},${jm},${jm}\\)${Nm}`),Vm=new RegExp(`${$m}rgba\\s*\\(${jm},${jm},${jm},${jm}\\)${Nm}`),qm=new RegExp(`${$m}#${Hm}${Hm}${Hm}${Nm}`),Km=new RegExp(`${$m}#${Wm}${Wm}${Wm}${Nm}`),Gm=new RegExp(`${$m}#${Hm}${Hm}${Hm}${Hm}${Nm}`),Xm=new RegExp(`${$m}#${Wm}${Wm}${Wm}${Wm}${Nm}`);function Ym(e){return parseInt(e,16)}function Qm(e){try{let t;if(t=Km.exec(e))return[Ym(t[1]),Ym(t[2]),Ym(t[3]),1];if(t=Um.exec(e))return[rg(t[1]),rg(t[5]),rg(t[9]),1];if(t=Vm.exec(e))return[rg(t[1]),rg(t[5]),rg(t[9]),og(t[13])];if(t=qm.exec(e))return[Ym(t[1]+t[1]),Ym(t[2]+t[2]),Ym(t[3]+t[3]),1];if(t=Xm.exec(e))return[Ym(t[1]),Ym(t[2]),Ym(t[3]),og(Ym(t[4])/255)];if(t=Gm.exec(e))return[Ym(t[1]+t[1]),Ym(t[2]+t[2]),Ym(t[3]+t[3]),og(Ym(t[4]+t[4])/255)];if(e in Dm)return Qm(Dm[e]);throw new Error(`[seemly/rgba]: Invalid color value ${e}.`)}catch(WQ){throw WQ}}function Zm(e,t,n,o){return`rgba(${rg(e)}, ${rg(t)}, ${rg(n)}, ${r=o,r>1?1:r<0?0:r})`;var r}function Jm(e,t,n,o,r){return rg((e*t*(1-o)+n*o)/r)}function eg(e,t){Array.isArray(e)||(e=Qm(e)),Array.isArray(t)||(t=Qm(t));const n=e[3],o=t[3],r=og(n+o-n*o);return Zm(Jm(e[0],n,t[0],o,r),Jm(e[1],n,t[1],o,r),Jm(e[2],n,t[2],o,r),r)}function tg(e,t){const[n,o,r,i=1]=Array.isArray(e)?e:Qm(e);return t.alpha?Zm(n,o,r,t.alpha):Zm(n,o,r,i)}function ng(e,t){const[n,o,r,i=1]=Array.isArray(e)?e:Qm(e),{lightness:a=1,alpha:l=1}=t;return function(e){const[t,n,o]=e;return 3 in e?`rgba(${rg(t)}, ${rg(n)}, ${rg(o)}, ${og(e[3])})`:`rgba(${rg(t)}, ${rg(n)}, ${rg(o)}, 1)`}([n*a,o*a,r*a,i*l])}function og(e){const t=Math.round(100*Number(e))/100;return t>1?1:t<0?0:t}function rg(e){const t=Math.round(Number(e));return t>255?255:t<0?0:t}function ig(e=8){return Math.random().toString(16).slice(2,2+e)}function ag(e,t){const n=[];for(let o=0;o{o[t]=e[t]})),Object.assign(o,n)}function cg(e,t=[],n){const o={};return Object.getOwnPropertyNames(e).forEach((n=>{t.includes(n)||(o[n]=e[n])})),Object.assign(o,n)}function ug(e,t=!0,n=[]){return e.forEach((e=>{if(null!==e)if("object"==typeof e)if(Array.isArray(e))ug(e,t,n);else if(e.type===yr){if(null===e.children)return;Array.isArray(e.children)&&ug(e.children,t,n)}else{if(e.type===Cr&&t)return;n.push(e)}else"string"!=typeof e&&"number"!=typeof e||n.push(Dr(String(e)))})),n}function dg(e,...t){if(!Array.isArray(e))return e(...t);e.forEach((e=>dg(e,...t)))}function pg(e){return Object.keys(e)}function hg(e,...t){return"function"==typeof e?e(...t):"string"==typeof e?Dr(e):"number"==typeof e?Dr(String(e)):null}function fg(e,t){throw new Error(`[naive/${e}]: ${t}`)}function vg(e){switch(e){case"tiny":return"mini";case"small":return"tiny";case"medium":return"small";case"large":return"medium";case"huge":return"large"}throw new Error(`${e} has no smaller size.`)}function mg(e){switch(typeof e){case"string":return e||void 0;case"number":return String(e);default:return}}function gg(e,t="default",n=void 0){const o=e[t];if(!o)return null;const r=ug(o(n));return 1===r.length?r[0]:null}function bg(e){return t=>{e.value=t?t.$el:null}}function yg(e){return e.some((e=>!Er(e)||e.type!==Cr&&!(e.type===yr&&!yg(e.children))))?e:null}function xg(e,t){return e&&yg(e())||t()}function Cg(e,t,n){return e&&yg(e(t))||n(t)}function wg(e,t){return t(e&&yg(e())||null)}function kg(e){return!(e&&yg(e()))}function Sg(e){const t=e.filter((e=>void 0!==e));if(0!==t.length)return 1===t.length?t[0]:t=>{e.forEach((e=>{e&&e(t)}))}}const _g=zn({render(){var e,t;return null===(t=(e=this.$slots).default)||void 0===t?void 0:t.call(e)}}),Pg=/^(\d|\.)+$/,Tg=/(\d|\.)+/;function Ag(e,{c:t=1,offset:n=0,attachPx:o=!0}={}){if("number"==typeof e){const o=(e+n)*t;return 0===o?"0":`${o}px`}if("string"==typeof e){if(Pg.test(e)){const r=(Number(e)+n)*t;return o?0===r?"0":`${r}px`:`${r}`}{const o=Tg.exec(e);return o?e.replace(Tg,String((Number(o[0])+n)*t)):e}}return e}function zg(e){return e.replace(/#|\(|\)|,|\s|\./g,"_")}function Rg(e){const{left:t,right:n,top:o,bottom:r}=Bm(e);return`${o} ${n} ${r} ${t}`}const Eg=/\s*,(?![^(]*\))\s*/g,Og=/\s+/g;function Mg(e){let t=[""];return e.forEach((e=>{(e=e&&e.trim())&&(t=e.includes("&")?function(e,t){const n=[];return t.split(Eg).forEach((t=>{let o=function(e){let t=0;for(let n=0;n{n.push((e&&e+" ")+t)}));if(1===o)return void e.forEach((e=>{n.push(t.replace("&",e))}));let r=[t];for(;o--;){const t=[];r.forEach((n=>{e.forEach((e=>{t.push(n.replace("&",e))}))})),r=t}r.forEach((e=>n.push(e)))})),n}(t,e):function(e,t){const n=[];return t.split(Eg).forEach((t=>{e.forEach((e=>{n.push((e&&e+" ")+t)}))})),n}(t,e))})),t.join(", ").replace(Og," ")}function Fg(e){if(!e)return;const t=e.parentElement;t&&t.removeChild(e)}function Ig(e){return document.querySelector(`style[cssr-id="${e}"]`)}function Lg(e){return!!e&&/^\s*@(s|m)/.test(e)}const Bg=/[A-Z]/g;function Dg(e){return e.replace(Bg,(e=>"-"+e.toLowerCase()))}function $g(e,t,n,o){if(!t)return"";const r=function(e,t,n){return"function"==typeof e?e({context:t.context,props:n}):e}(t,n,o);if(!r)return"";if("string"==typeof r)return`${e} {\n${r}\n}`;const i=Object.keys(r);if(0===i.length)return n.config.keepEmptyBlock?e+" {\n}":"";const a=e?[e+" {"]:[];return i.forEach((e=>{const t=r[e];"raw"!==e?(e=Dg(e),null!=t&&a.push(` ${e}${function(e,t=" "){return"object"==typeof e&&null!==e?" {\n"+Object.entries(e).map((e=>t+` ${Dg(e[0])}: ${e[1]};`)).join("\n")+"\n"+t+"}":`: ${e};`}(t)}`)):a.push("\n"+t+"\n")})),e&&a.push("}"),a.join("\n")}function Ng(e,t,n){e&&e.forEach((e=>{if(Array.isArray(e))Ng(e,t,n);else if("function"==typeof e){const o=e(t);Array.isArray(o)?Ng(o,t,n):o&&n(o)}else e&&n(e)}))}function jg(e,t,n,o,r,i){const a=e.$;let l="";if(a&&"string"!=typeof a)if("function"==typeof a){const e=a({context:o.context,props:r});Lg(e)?l=e:t.push(e)}else if(a.before&&a.before(o.context),a.$&&"string"!=typeof a.$){if(a.$){const e=a.$({context:o.context,props:r});Lg(e)?l=e:t.push(e)}}else Lg(a.$)?l=a.$:t.push(a.$);else Lg(a)?l=a:t.push(a);const s=Mg(t),c=$g(s,e.props,o,r);l?(n.push(`${l} {`),i&&c&&i.insertRule(`${l} {\n${c}\n}\n`)):(i&&c&&i.insertRule(c),!i&&c.length&&n.push(c)),e.children&&Ng(e.children,{context:o.context,props:r},(e=>{if("string"==typeof e){const t=$g(s,{raw:e},o,r);i?i.insertRule(t):n.push(t)}else jg(e,t,n,o,r,i)})),t.pop(),l&&n.push("}"),a&&a.after&&a.after(o.context)}function Hg(e,t,n,o=!1){const r=[];return jg(e,[],r,t,n,o?e.instance.__styleSheet:void 0),o?"":r.join("\n\n")}function Wg(e){for(var t,n=0,o=0,r=e.length;r>=4;++o,r-=4)t=1540483477*(65535&(t=255&e.charCodeAt(o)|(255&e.charCodeAt(++o))<<8|(255&e.charCodeAt(++o))<<16|(255&e.charCodeAt(++o))<<24))+(59797*(t>>>16)<<16),n=1540483477*(65535&(t^=t>>>24))+(59797*(t>>>16)<<16)^1540483477*(65535&n)+(59797*(n>>>16)<<16);switch(r){case 3:n^=(255&e.charCodeAt(o+2))<<16;case 2:n^=(255&e.charCodeAt(o+1))<<8;case 1:n=1540483477*(65535&(n^=255&e.charCodeAt(o)))+(59797*(n>>>16)<<16)}return(((n=1540483477*(65535&(n^=n>>>13))+(59797*(n>>>16)<<16))^n>>>15)>>>0).toString(36)}function Ug(e,t){e.push(t)}function Vg(e,t,n,o,r,i,a,l,s){if(i&&!s){if(void 0===n)return;const r=window.__cssrContext;return void(r[n]||(r[n]=!0,Hg(t,e,o,i)))}let c;if(void 0===n&&(c=t.render(o),n=Wg(c)),s)return void s.adapter(n,null!=c?c:t.render(o));const u=Ig(n);if(null!==u&&!a)return u;const d=null!=u?u:function(e){const t=document.createElement("style");return t.setAttribute("cssr-id",e),t}(n);if(void 0===c&&(c=t.render(o)),d.textContent=c,null!==u)return u;if(l){const e=document.head.querySelector(`meta[name="${l}"]`);if(e)return document.head.insertBefore(d,e),Ug(t.els,d),d}return r?document.head.insertBefore(d,document.head.querySelector("style, link")):document.head.appendChild(d),Ug(t.els,d),d}function qg(e){return Hg(this,this.instance,e)}function Kg(e={}){const{id:t,ssr:n,props:o,head:r=!1,silent:i=!1,force:a=!1,anchorMetaName:l}=e;return Vg(this.instance,this,t,o,r,i,a,l,n)}function Gg(e={}){const{id:t}=e;!function(e,t,n){const{els:o}=t;if(void 0===n)o.forEach(Fg),t.els=[];else{const e=Ig(n);e&&o.includes(e)&&(Fg(e),t.els=o.filter((t=>t!==e)))}}(this.instance,this,t)}"undefined"!=typeof window&&(window.__cssrContext={});const Xg=function(e,t,n,o){return{instance:e,$:t,props:n,children:o,els:[],render:qg,mount:Kg,unmount:Gg}};function Yg(e={}){let t=null;const n={c:(...e)=>function(e,t,n,o){return Array.isArray(t)?Xg(e,{$:null},null,t):Array.isArray(n)?Xg(e,t,null,n):Array.isArray(o)?Xg(e,t,n,o):Xg(e,t,n,null)}(n,...e),use:(e,...t)=>e.install(n,...t),find:Ig,context:{},config:e,get __styleSheet(){if(!t){const e=document.createElement("style");return document.head.appendChild(e),t=document.styleSheets[document.styleSheets.length-1],t}return t}};return n}const Qg=".n-",Zg=Yg(),Jg=function(e){let t,n=".",o="__",r="--";if(e){let t=e.blockPrefix;t&&(n=t),t=e.elementPrefix,t&&(o=t),t=e.modifierPrefix,t&&(r=t)}const i={install(e){t=e.c;const n=e.context;n.bem={},n.bem.b=null,n.bem.els=null}};return Object.assign(i,{cB:(...e)=>t(function(e){let t,o;return{before(e){t=e.bem.b,o=e.bem.els,e.bem.els=null},after(e){e.bem.b=t,e.bem.els=o},$:({context:t,props:o})=>(e="string"==typeof e?e:e({context:t,props:o}),t.bem.b=e,`${(null==o?void 0:o.bPrefix)||n}${t.bem.b}`)}}(e[0]),e[1],e[2]),cE:(...e)=>t(function(e){let t;return{before(e){t=e.bem.els},after(e){e.bem.els=t},$:({context:t,props:r})=>(e="string"==typeof e?e:e({context:t,props:r}),t.bem.els=e.split(",").map((e=>e.trim())),t.bem.els.map((e=>`${(null==r?void 0:r.bPrefix)||n}${t.bem.b}${o}${e}`)).join(", "))}}(e[0]),e[1],e[2]),cM:(...e)=>{return t((i=e[0],{$({context:e,props:t}){const a=(i="string"==typeof i?i:i({context:e,props:t})).split(",").map((e=>e.trim()));function l(i){return a.map((a=>`&${(null==t?void 0:t.bPrefix)||n}${e.bem.b}${void 0!==i?`${o}${i}`:""}${r}${a}`)).join(", ")}const s=e.bem.els;return null!==s?l(s[0]):l()}}),e[1],e[2]);var i},cNotM:(...e)=>{return t((i=e[0],{$({context:e,props:t}){i="string"==typeof i?i:i({context:e,props:t});const a=e.bem.els;return`&:not(${(null==t?void 0:t.bPrefix)||n}${e.bem.b}${null!==a&&a.length>0?`${o}${a[0]}`:""}${r}${i})`}}),e[1],e[2]);var i}}),i}({blockPrefix:Qg,elementPrefix:"__",modifierPrefix:"--"});Zg.use(Jg);const{c:eb,find:tb}=Zg,{cB:nb,cE:ob,cM:rb,cNotM:ib}=Jg;function ab(e){return eb((({props:{bPrefix:e}})=>`${e||Qg}modal, ${e||Qg}drawer`),[e])}function lb(e){return eb((({props:{bPrefix:e}})=>`${e||Qg}popover`),[e])}function sb(e){return eb((({props:{bPrefix:e}})=>`&${e||Qg}modal`),e)}const cb=(...e)=>eb(">",[nb(...e)]);function ub(e,t){return e+("default"===t?"":t.replace(/^[a-z]/,(e=>e.toUpperCase())))}let db;const pb="undefined"!=typeof document&&"undefined"!=typeof window,hb=new WeakSet;function fb(e){return!hb.has(e)}function vb(e){const t=Et(!!e.value);if(t.value)return gt(t);const n=lr(e,(e=>{e&&(t.value=!0,n())}));return gt(t)}function mb(e){const t=ai(e),n=Et(t.value);return lr(t,(e=>{n.value=e})),"function"==typeof e?n:{__v_isRef:!0,get value(){return n.value},set value(t){e.set(t)}}}function gb(){return null!==Gr()}const bb="undefined"!=typeof window;let yb,xb;var Cb,wb;function kb(e){return e.composedPath()[0]}yb=bb?null===(wb=null===(Cb=document)||void 0===Cb?void 0:Cb.fonts)||void 0===wb?void 0:wb.ready:void 0,xb=!1,void 0!==yb?yb.then((()=>{xb=!0})):xb=!0;const Sb={mousemoveoutside:new WeakMap,clickoutside:new WeakMap};function _b(e,t,n){const o=Sb[e];let r=o.get(t);void 0===r&&o.set(t,r=new WeakMap);let i=r.get(n);return void 0===i&&r.set(n,i=function(e,t,n){if("mousemoveoutside"===e){const e=e=>{t.contains(kb(e))||n(e)};return{mousemove:e,touchstart:e}}if("clickoutside"===e){let e=!1;const o=n=>{e=!t.contains(kb(n))},r=o=>{e&&(t.contains(kb(o))||n(o))};return{mousedown:o,mouseup:r,touchstart:o,touchend:r}}return{}}(e,t,n)),i}const{on:Pb,off:Tb}=function(){if("undefined"==typeof window)return{on:()=>{},off:()=>{}};const e=new WeakMap,t=new WeakMap;function n(){e.set(this,!0)}function o(){e.set(this,!0),t.set(this,!0)}function r(e,t,n){const o=e[t];return e[t]=function(){return n.apply(e,arguments),o.apply(e,arguments)},e}function i(e,t){e[t]=Event.prototype[t]}const a=new WeakMap,l=Object.getOwnPropertyDescriptor(Event.prototype,"currentTarget");function s(){var e;return null!==(e=a.get(this))&&void 0!==e?e:null}function c(e,t){void 0!==l&&Object.defineProperty(e,"currentTarget",{configurable:!0,enumerable:!0,get:null!=t?t:l.get})}const u={bubble:{},capture:{}},d={},p=function(){const l=function(l){const{type:d,eventPhase:p,bubbles:h}=l,f=kb(l);if(2===p)return;const v=1===p?"capture":"bubble";let m=f;const g=[];for(;null===m&&(m=window),g.push(m),m!==window;)m=m.parentNode||null;const b=u.capture[d],y=u.bubble[d];if(r(l,"stopPropagation",n),r(l,"stopImmediatePropagation",o),c(l,s),"capture"===v){if(void 0===b)return;for(let n=g.length-1;n>=0&&!e.has(l);--n){const e=g[n],o=b.get(e);if(void 0!==o){a.set(l,e);for(const e of o){if(t.has(l))break;e(l)}}if(0===n&&!h&&void 0!==y){const n=y.get(e);if(void 0!==n)for(const e of n){if(t.has(l))break;e(l)}}}}else if("bubble"===v){if(void 0===y)return;for(let n=0;nt(e)))};return e.displayName="evtdUnifiedWindowEventHandler",e}();function f(e,t){const n=u[e];return void 0===n[t]&&(n[t]=new Map,window.addEventListener(t,p,"capture"===e)),n[t]}function v(e,t){let n=e.get(t);return void 0===n&&e.set(t,n=new Set),n}function m(e,t,n,o){const r=function(e,t,n,o){if("mousemoveoutside"===e||"clickoutside"===e){const r=_b(e,t,n);return Object.keys(r).forEach((e=>{Tb(e,document,r[e],o)})),!0}return!1}(e,t,n,o);if(r)return;const i=!0===o||"object"==typeof o&&!0===o.capture,a=i?"capture":"bubble",l=f(a,e),s=v(l,t);if(t===window&&!function(e,t,n,o){const r=u[t][n];if(void 0!==r){const t=r.get(e);if(void 0!==t&&t.has(o))return!0}return!1}(t,i?"bubble":"capture",e,n)&&function(e,t){const n=d[e];return!(void 0===n||!n.has(t))}(e,n)){const t=d[e];t.delete(n),0===t.size&&(window.removeEventListener(e,h),d[e]=void 0)}s.has(n)&&s.delete(n),0===s.size&&l.delete(t),0===l.size&&(window.removeEventListener(e,p,"capture"===a),u[a][e]=void 0)}return{on:function(e,t,n,o){let r;if(r="object"==typeof o&&!0===o.once?i=>{m(e,t,r,o),n(i)}:n,function(e,t,n,o){if("mousemoveoutside"===e||"clickoutside"===e){const r=_b(e,t,n);return Object.keys(r).forEach((e=>{Pb(e,document,r[e],o)})),!0}return!1}(e,t,r,o))return;const i=v(f(!0===o||"object"==typeof o&&!0===o.capture?"capture":"bubble",e),t);if(i.has(r)||i.add(r),t===window){const t=function(e){return void 0===d[e]&&(d[e]=new Set,window.addEventListener(e,h)),d[e]}(e);t.has(r)||t.add(r)}},off:m}}(),Ab=Et(null);function zb(e){if(e.clientX>0||e.clientY>0)Ab.value={x:e.clientX,y:e.clientY};else{const{target:t}=e;if(t instanceof Element){const{left:e,top:n,width:o,height:r}=t.getBoundingClientRect();Ab.value=e>0||n>0?{x:e+o/2,y:n+r/2}:{x:0,y:0}}else Ab.value=null}}let Rb=0,Eb=!0;function Ob(){if(!bb)return gt(Et(null));0===Rb&&Pb("click",document,zb,!0);const e=()=>{Rb+=1};return Eb&&(Eb=gb())?(Dn(e),Hn((()=>{Rb-=1,0===Rb&&Tb("click",document,zb,!0)}))):e(),gt(Ab)}const Mb=Et(void 0);let Fb=0;function Ib(){Mb.value=Date.now()}let Lb=!0;function Bb(e){if(!bb)return gt(Et(!1));const t=Et(!1);let n=null;function o(){null!==n&&window.clearTimeout(n)}function r(){o(),t.value=!0,n=window.setTimeout((()=>{t.value=!1}),e)}0===Fb&&Pb("click",window,Ib,!0);const i=()=>{Fb+=1,Pb("click",window,r,!0)};return Lb&&(Lb=gb())?(Dn(i),Hn((()=>{Fb-=1,0===Fb&&Tb("click",window,Ib,!0),Tb("click",window,r,!0),o()}))):i(),gt(t)}function Db(e,t){return lr(e,(e=>{void 0!==e&&(t.value=e)})),ai((()=>void 0===e.value?t.value:e.value))}function $b(){const e=Et(!1);return $n((()=>{e.value=!0})),gt(e)}function Nb(e,t){return ai((()=>{for(const n of t)if(void 0!==e[n])return e[n];return e[t[t.length-1]]}))}const jb="undefined"!=typeof window&&(/iPad|iPhone|iPod/.test(navigator.platform)||"MacIntel"===navigator.platform&&navigator.maxTouchPoints>1)&&!window.MSStream,Hb="n-internal-select-menu",Wb="n-internal-select-menu-body",Ub="n-modal-body",Vb="n-modal",qb="n-drawer-body",Kb="n-drawer",Gb="n-popover-body",Xb="__disabled__";function Yb(e){const t=Po(Ub,null),n=Po(qb,null),o=Po(Gb,null),r=Po(Wb,null),i=Et();if("undefined"!=typeof document){i.value=document.fullscreenElement;const e=()=>{i.value=document.fullscreenElement};$n((()=>{Pb("fullscreenchange",document,e)})),Hn((()=>{Tb("fullscreenchange",document,e)}))}return mb((()=>{var a;const{to:l}=e;return void 0!==l?!1===l?Xb:!0===l?i.value||"body":l:(null==t?void 0:t.value)?null!==(a=t.value.$el)&&void 0!==a?a:t.value:(null==n?void 0:n.value)?n.value:(null==o?void 0:o.value)?o.value:(null==r?void 0:r.value)?r.value:null!=l?l:i.value||"body"}))}Yb.tdkey=Xb,Yb.propTo={type:[String,Object,Boolean],default:void 0};let Qb=!1;function Zb(e,t,n="default"){const o=t[n];if(void 0===o)throw new Error(`[vueuc/${e}]: slot[${n}] is empty.`);return o()}function Jb(e,t=!0,n=[]){return e.forEach((e=>{if(null!==e)if("object"==typeof e)if(Array.isArray(e))Jb(e,t,n);else if(e.type===yr){if(null===e.children)return;Array.isArray(e.children)&&Jb(e.children,t,n)}else e.type!==Cr&&n.push(e);else"string"!=typeof e&&"number"!=typeof e||n.push(Dr(String(e)))})),n}function ey(e,t,n="default"){const o=t[n];if(void 0===o)throw new Error(`[vueuc/${e}]: slot[${n}] is empty.`);const r=Jb(o());if(1===r.length)return r[0];throw new Error(`[vueuc/${e}]: slot[${n}] should have exactly one child.`)}let ty=null;function ny(){if(null===ty&&(ty=document.getElementById("v-binder-view-measurer"),null===ty)){ty=document.createElement("div"),ty.id="v-binder-view-measurer";const{style:e}=ty;e.position="fixed",e.left="0",e.right="0",e.top="0",e.bottom="0",e.pointerEvents="none",e.visibility="hidden",document.body.appendChild(ty)}return ty.getBoundingClientRect()}function oy(e){const t=e.getBoundingClientRect(),n=ny();return{left:t.left-n.left,top:t.top-n.top,bottom:n.height+n.top-t.bottom,right:n.width+n.left-t.right,width:t.width,height:t.height}}function ry(e){if(null===e)return null;const t=function(e){return 9===e.nodeType?null:e.parentNode}(e);if(null===t)return null;if(9===t.nodeType)return document;if(1===t.nodeType){const{overflow:e,overflowX:n,overflowY:o}=getComputedStyle(t);if(/(auto|scroll|overlay)/.test(e+o+n))return t}return ry(t)}const iy=zn({name:"Binder",props:{syncTargetWithParent:Boolean,syncTarget:{type:Boolean,default:!0}},setup(e){var t;_o("VBinder",null===(t=Gr())||void 0===t?void 0:t.proxy);const n=Po("VBinder",null),o=Et(null);let r=[];const i=()=>{for(const e of r)Tb("scroll",e,l,!0);r=[]},a=new Set,l=()=>{Em(s)},s=()=>{a.forEach((e=>e()))},c=new Set,u=()=>{c.forEach((e=>e()))};return Hn((()=>{Tb("resize",window,u),i()})),{targetRef:o,setTargetRef:t=>{o.value=t,n&&e.syncTargetWithParent&&n.setTargetRef(t)},addScrollListener:e=>{0===a.size&&(()=>{let e=o.value;for(;e=ry(e),null!==e;)r.push(e);for(const t of r)Pb("scroll",t,l,!0)})(),a.has(e)||a.add(e)},removeScrollListener:e=>{a.has(e)&&a.delete(e),0===a.size&&i()},addResizeListener:e=>{0===c.size&&Pb("resize",window,u),c.has(e)||c.add(e)},removeResizeListener:e=>{c.has(e)&&c.delete(e),0===c.size&&Tb("resize",window,u)}}},render(){return Zb("binder",this.$slots)}}),ay=iy,ly=zn({name:"Target",setup(){const{setTargetRef:e,syncTarget:t}=Po("VBinder");return{syncTarget:t,setTargetDirective:{mounted:e,updated:e}}},render(){const{syncTarget:e,setTargetDirective:t}=this;return e?fn(ey("follower",this.$slots),[[t]]):ey("follower",this.$slots)}}),sy="@@mmoContext",cy={mounted(e,{value:t}){e[sy]={handler:void 0},"function"==typeof t&&(e[sy].handler=t,Pb("mousemoveoutside",e,t))},updated(e,{value:t}){const n=e[sy];"function"==typeof t?n.handler?n.handler!==t&&(Tb("mousemoveoutside",e,n.handler),n.handler=t,Pb("mousemoveoutside",e,t)):(e[sy].handler=t,Pb("mousemoveoutside",e,t)):n.handler&&(Tb("mousemoveoutside",e,n.handler),n.handler=void 0)},unmounted(e){const{handler:t}=e[sy];t&&Tb("mousemoveoutside",e,t),e[sy].handler=void 0}},uy="@@coContext",dy={mounted(e,{value:t,modifiers:n}){e[uy]={handler:void 0},"function"==typeof t&&(e[uy].handler=t,Pb("clickoutside",e,t,{capture:n.capture}))},updated(e,{value:t,modifiers:n}){const o=e[uy];"function"==typeof t?o.handler?o.handler!==t&&(Tb("clickoutside",e,o.handler,{capture:n.capture}),o.handler=t,Pb("clickoutside",e,t,{capture:n.capture})):(e[uy].handler=t,Pb("clickoutside",e,t,{capture:n.capture})):o.handler&&(Tb("clickoutside",e,o.handler,{capture:n.capture}),o.handler=void 0)},unmounted(e,{modifiers:t}){const{handler:n}=e[uy];n&&Tb("clickoutside",e,n,{capture:t.capture}),e[uy].handler=void 0}},py=new class{constructor(){this.elementZIndex=new Map,this.nextZIndex=2e3}get elementCount(){return this.elementZIndex.size}ensureZIndex(e,t){const{elementZIndex:n}=this;if(void 0!==t)return e.style.zIndex=`${t}`,void n.delete(e);const{nextZIndex:o}=this;n.has(e)&&n.get(e)+1===this.nextZIndex||(e.style.zIndex=`${o}`,n.set(e,o),this.nextZIndex=o+1,this.squashState())}unregister(e,t){const{elementZIndex:n}=this;n.has(e)&&n.delete(e),this.squashState()}squashState(){const{elementCount:e}=this;e||(this.nextZIndex=2e3),this.nextZIndex-e>2500&&this.rearrange()}rearrange(){const e=Array.from(this.elementZIndex.entries());e.sort(((e,t)=>e[1]-t[1])),this.nextZIndex=2e3,e.forEach((e=>{const t=e[0],n=this.nextZIndex++;`${n}`!==t.style.zIndex&&(t.style.zIndex=`${n}`)}))}},hy="@@ziContext",fy={mounted(e,t){const{value:n={}}=t,{zIndex:o,enabled:r}=n;e[hy]={enabled:!!r,initialized:!1},r&&(py.ensureZIndex(e,o),e[hy].initialized=!0)},updated(e,t){const{value:n={}}=t,{zIndex:o,enabled:r}=n,i=e[hy].enabled;r&&!i&&(py.ensureZIndex(e,o),e[hy].initialized=!0),e[hy].enabled=!!r},unmounted(e,t){if(!e[hy].initialized)return;const{value:n={}}=t,{zIndex:o}=n;py.unregister(e,o)}},vy=Symbol("@css-render/vue3-ssr");function my(e,t){const n=Po(vy,null);if(null===n)return;const{styles:o,ids:r}=n;r.has(e)||null!==o&&(r.add(e),o.push(function(e,t){return``}(e,t)))}const gy="undefined"!=typeof document;function by(){if(gy)return;const e=Po(vy,null);return null!==e?{adapter:my,context:e}:void 0}const{c:yy}=Yg(),xy="vueuc-style";function Cy(e){return e&-e}class wy{constructor(e,t){this.l=e,this.min=t;const n=new Array(e+1);for(let o=0;oo)throw new Error("[FinweckTree.sum]: `i` is larger than length.");let r=e*n;for(;e>0;)r+=t[e],e-=Cy(e);return r}getBound(e){let t=0,n=this.l;for(;n>t;){const o=Math.floor((t+n)/2),r=this.sum(o);if(r>e)n=o;else{if(!(r({showTeleport:vb(jt(e,"show")),mergedTo:ai((()=>{const{to:t}=e;return null!=t?t:"body"}))}),render(){return this.showTeleport?this.disabled?Zb("lazy-teleport",this.$slots):li(Go,{disabled:this.disabled,to:this.mergedTo},Zb("lazy-teleport",this.$slots)):null}}),_y={top:"bottom",bottom:"top",left:"right",right:"left"},Py={start:"end",center:"center",end:"start"},Ty={top:"height",bottom:"height",left:"width",right:"width"},Ay={"bottom-start":"top left",bottom:"top center","bottom-end":"top right","top-start":"bottom left",top:"bottom center","top-end":"bottom right","right-start":"top left",right:"center left","right-end":"bottom left","left-start":"top right",left:"center right","left-end":"bottom right"},zy={"bottom-start":"bottom left",bottom:"bottom center","bottom-end":"bottom right","top-start":"top left",top:"top center","top-end":"top right","right-start":"top right",right:"center right","right-end":"bottom right","left-start":"top left",left:"center left","left-end":"bottom left"},Ry={"bottom-start":"right","bottom-end":"left","top-start":"right","top-end":"left","right-start":"bottom","right-end":"top","left-start":"bottom","left-end":"top"},Ey={top:!0,bottom:!1,left:!0,right:!1},Oy={top:"end",bottom:"start",left:"end",right:"start"},My=yy([yy(".v-binder-follower-container",{position:"absolute",left:"0",right:"0",top:"0",height:"0",pointerEvents:"none",zIndex:"auto"}),yy(".v-binder-follower-content",{position:"absolute",zIndex:"auto"},[yy("> *",{pointerEvents:"all"})])]),Fy=zn({name:"Follower",inheritAttrs:!1,props:{show:Boolean,enabled:{type:Boolean,default:void 0},placement:{type:String,default:"bottom"},syncTrigger:{type:Array,default:["resize","scroll"]},to:[String,Object],flip:{type:Boolean,default:!0},internalShift:Boolean,x:Number,y:Number,width:String,minWidth:String,containerClass:String,teleportDisabled:Boolean,zindexable:{type:Boolean,default:!0},zIndex:Number,overlap:Boolean},setup(e){const t=Po("VBinder"),n=mb((()=>void 0!==e.enabled?e.enabled:e.show)),o=Et(null),r=Et(null),i=()=>{const{syncTrigger:n}=e;n.includes("scroll")&&t.addScrollListener(s),n.includes("resize")&&t.addResizeListener(s)},a=()=>{t.removeScrollListener(s),t.removeResizeListener(s)};$n((()=>{n.value&&(s(),i())}));const l=by();My.mount({id:"vueuc/binder",head:!0,anchorMetaName:xy,ssr:l}),Hn((()=>{a()})),function(e){if(xb)return;let t=!1;$n((()=>{xb||null==yb||yb.then((()=>{t||e()}))})),Hn((()=>{t=!0}))}((()=>{n.value&&s()}));const s=()=>{if(!n.value)return;const i=o.value;if(null===i)return;const a=t.targetRef,{x:l,y:s,overlap:c}=e,u=void 0!==l&&void 0!==s?function(e,t){const n=ny();return{top:t,left:e,height:0,width:0,right:n.width-e,bottom:n.height-t}}(l,s):oy(a);i.style.setProperty("--v-target-width",`${Math.round(u.width)}px`),i.style.setProperty("--v-target-height",`${Math.round(u.height)}px`);const{width:d,minWidth:p,placement:h,internalShift:f,flip:v}=e;i.setAttribute("v-placement",h),c?i.setAttribute("v-overlap",""):i.removeAttribute("v-overlap");const{style:m}=i;m.width="target"===d?`${u.width}px`:void 0!==d?d:"",m.minWidth="target"===p?`${u.width}px`:void 0!==p?p:"";const g=oy(i),b=oy(r.value),{left:y,top:x,placement:C}=function(e,t,n,o,r,i){if(!r||i)return{placement:e,top:0,left:0};const[a,l]=e.split("-");let s=null!=l?l:"center",c={top:0,left:0};const u=(e,r,i)=>{let a=0,l=0;const s=n[e]-t[r]-t[e];return s>0&&o&&(i?l=Ey[r]?s:-s:a=Ey[r]?s:-s),{left:a,top:l}},d="left"===a||"right"===a;if("center"!==s){const o=Ry[e],r=_y[o],i=Ty[o];if(n[i]>t[i]){if(t[o]+t[i]t[r]&&(s=Py[l])}else{const e="bottom"===a||"top"===a?"left":"top",o=_y[e],r=Ty[e],i=(n[r]-t[r])/2;(t[e]t[o]?(s=Oy[e],c=u(r,e,d)):(s=Oy[o],c=u(r,o,d)))}let p=a;return t[a]{e?(i(),c()):a()}));const c=()=>{tn().then(s).catch((e=>{}))};["placement","x","y","internalShift","flip","width","overlap","minWidth"].forEach((t=>{lr(jt(e,t),s)})),["teleportDisabled"].forEach((t=>{lr(jt(e,t),c)})),lr(jt(e,"syncTrigger"),(e=>{e.includes("resize")?t.addResizeListener(s):t.removeResizeListener(s),e.includes("scroll")?t.addScrollListener(s):t.removeScrollListener(s)}));const u=$b(),d=mb((()=>{const{to:t}=e;if(void 0!==t)return t;u.value}));return{VBinder:t,mergedEnabled:n,offsetContainerRef:r,followerRef:o,mergedTo:d,syncPosition:s}},render(){return li(Sy,{show:this.show,to:this.mergedTo,disabled:this.teleportDisabled},{default:()=>{var e,t;const n=li("div",{class:["v-binder-follower-container",this.containerClass],ref:"offsetContainerRef"},[li("div",{class:"v-binder-follower-content",ref:"followerRef"},null===(t=(e=this.$slots).default)||void 0===t?void 0:t.call(e))]);return this.zindexable?fn(n,[[fy,{enabled:this.mergedEnabled,zIndex:this.zIndex}]]):n}})}});var Iy,Ly,By=[],Dy="ResizeObserver loop completed with undelivered notifications.";(Ly=Iy||(Iy={})).BORDER_BOX="border-box",Ly.CONTENT_BOX="content-box",Ly.DEVICE_PIXEL_CONTENT_BOX="device-pixel-content-box";var $y,Ny=function(e){return Object.freeze(e)},jy=function(e,t){this.inlineSize=e,this.blockSize=t,Ny(this)},Hy=function(){function e(e,t,n,o){return this.x=e,this.y=t,this.width=n,this.height=o,this.top=this.y,this.left=this.x,this.bottom=this.top+this.height,this.right=this.left+this.width,Ny(this)}return e.prototype.toJSON=function(){var e=this;return{x:e.x,y:e.y,top:e.top,right:e.right,bottom:e.bottom,left:e.left,width:e.width,height:e.height}},e.fromRect=function(t){return new e(t.x,t.y,t.width,t.height)},e}(),Wy=function(e){return e instanceof SVGElement&&"getBBox"in e},Uy=function(e){if(Wy(e)){var t=e.getBBox(),n=t.width,o=t.height;return!n&&!o}var r=e,i=r.offsetWidth,a=r.offsetHeight;return!(i||a||e.getClientRects().length)},Vy=function(e){var t;if(e instanceof Element)return!0;var n=null===(t=null==e?void 0:e.ownerDocument)||void 0===t?void 0:t.defaultView;return!!(n&&e instanceof n.Element)},qy="undefined"!=typeof window?window:{},Ky=new WeakMap,Gy=/auto|scroll/,Xy=/^tb|vertical/,Yy=/msie|trident/i.test(qy.navigator&&qy.navigator.userAgent),Qy=function(e){return parseFloat(e||"0")},Zy=function(e,t,n){return void 0===e&&(e=0),void 0===t&&(t=0),void 0===n&&(n=!1),new jy((n?t:e)||0,(n?e:t)||0)},Jy=Ny({devicePixelContentBoxSize:Zy(),borderBoxSize:Zy(),contentBoxSize:Zy(),contentRect:new Hy(0,0,0,0)}),ex=function(e,t){if(void 0===t&&(t=!1),Ky.has(e)&&!t)return Ky.get(e);if(Uy(e))return Ky.set(e,Jy),Jy;var n=getComputedStyle(e),o=Wy(e)&&e.ownerSVGElement&&e.getBBox(),r=!Yy&&"border-box"===n.boxSizing,i=Xy.test(n.writingMode||""),a=!o&&Gy.test(n.overflowY||""),l=!o&&Gy.test(n.overflowX||""),s=o?0:Qy(n.paddingTop),c=o?0:Qy(n.paddingRight),u=o?0:Qy(n.paddingBottom),d=o?0:Qy(n.paddingLeft),p=o?0:Qy(n.borderTopWidth),h=o?0:Qy(n.borderRightWidth),f=o?0:Qy(n.borderBottomWidth),v=d+c,m=s+u,g=(o?0:Qy(n.borderLeftWidth))+h,b=p+f,y=l?e.offsetHeight-b-e.clientHeight:0,x=a?e.offsetWidth-g-e.clientWidth:0,C=r?v+g:0,w=r?m+b:0,k=o?o.width:Qy(n.width)-C-x,S=o?o.height:Qy(n.height)-w-y,_=k+v+x+g,P=S+m+y+b,T=Ny({devicePixelContentBoxSize:Zy(Math.round(k*devicePixelRatio),Math.round(S*devicePixelRatio),i),borderBoxSize:Zy(_,P,i),contentBoxSize:Zy(k,S,i),contentRect:new Hy(d,s,k,S)});return Ky.set(e,T),T},tx=function(e,t,n){var o=ex(e,n),r=o.borderBoxSize,i=o.contentBoxSize,a=o.devicePixelContentBoxSize;switch(t){case Iy.DEVICE_PIXEL_CONTENT_BOX:return a;case Iy.BORDER_BOX:return r;default:return i}},nx=function(e){var t=ex(e);this.target=e,this.contentRect=t.contentRect,this.borderBoxSize=Ny([t.borderBoxSize]),this.contentBoxSize=Ny([t.contentBoxSize]),this.devicePixelContentBoxSize=Ny([t.devicePixelContentBoxSize])},ox=function(e){if(Uy(e))return 1/0;for(var t=0,n=e.parentNode;n;)t+=1,n=n.parentNode;return t},rx=function(){var e=1/0,t=[];By.forEach((function(n){if(0!==n.activeTargets.length){var o=[];n.activeTargets.forEach((function(t){var n=new nx(t.target),r=ox(t.target);o.push(n),t.lastReportedSize=tx(t.target,t.observedBox),re?t.activeTargets.push(n):t.skippedTargets.push(n))}))}))},ax=function(){var e,t=0;for(ix(t);By.some((function(e){return e.activeTargets.length>0}));)t=rx(),ix(t);return By.some((function(e){return e.skippedTargets.length>0}))&&("function"==typeof ErrorEvent?e=new ErrorEvent("error",{message:Dy}):((e=document.createEvent("Event")).initEvent("error",!1,!1),e.message=Dy),window.dispatchEvent(e)),t>0},lx=[],sx=function(e){if(!$y){var t=0,n=document.createTextNode("");new MutationObserver((function(){return lx.splice(0).forEach((function(e){return e()}))})).observe(n,{characterData:!0}),$y=function(){n.textContent="".concat(t?t--:t++)}}lx.push(e),$y()},cx=0,ux={attributes:!0,characterData:!0,childList:!0,subtree:!0},dx=["resize","load","transitionend","animationend","animationstart","animationiteration","keyup","keydown","mouseup","mousedown","mouseover","mouseout","blur","focus"],px=function(e){return void 0===e&&(e=0),Date.now()+e},hx=!1,fx=new(function(){function e(){var e=this;this.stopped=!0,this.listener=function(){return e.schedule()}}return e.prototype.run=function(e){var t=this;if(void 0===e&&(e=250),!hx){hx=!0;var n,o=px(e);n=function(){var n=!1;try{n=ax()}finally{if(hx=!1,e=o-px(),!cx)return;n?t.run(1e3):e>0?t.run(e):t.start()}},sx((function(){requestAnimationFrame(n)}))}},e.prototype.schedule=function(){this.stop(),this.run()},e.prototype.observe=function(){var e=this,t=function(){return e.observer&&e.observer.observe(document.body,ux)};document.body?t():qy.addEventListener("DOMContentLoaded",t)},e.prototype.start=function(){var e=this;this.stopped&&(this.stopped=!1,this.observer=new MutationObserver(this.listener),this.observe(),dx.forEach((function(t){return qy.addEventListener(t,e.listener,!0)})))},e.prototype.stop=function(){var e=this;this.stopped||(this.observer&&this.observer.disconnect(),dx.forEach((function(t){return qy.removeEventListener(t,e.listener,!0)})),this.stopped=!0)},e}()),vx=function(e){!cx&&e>0&&fx.start(),!(cx+=e)&&fx.stop()},mx=function(){function e(e,t){this.target=e,this.observedBox=t||Iy.CONTENT_BOX,this.lastReportedSize={inlineSize:0,blockSize:0}}return e.prototype.isActive=function(){var e,t=tx(this.target,this.observedBox,!0);return e=this.target,Wy(e)||function(e){switch(e.tagName){case"INPUT":if("image"!==e.type)break;case"VIDEO":case"AUDIO":case"EMBED":case"OBJECT":case"CANVAS":case"IFRAME":case"IMG":return!0}return!1}(e)||"inline"!==getComputedStyle(e).display||(this.lastReportedSize=t),this.lastReportedSize.inlineSize!==t.inlineSize||this.lastReportedSize.blockSize!==t.blockSize},e}(),gx=function(e,t){this.activeTargets=[],this.skippedTargets=[],this.observationTargets=[],this.observer=e,this.callback=t},bx=new WeakMap,yx=function(e,t){for(var n=0;n=0&&(r&&By.splice(By.indexOf(n),1),n.observationTargets.splice(o,1),vx(-1))},e.disconnect=function(e){var t=this,n=bx.get(e);n.observationTargets.slice().forEach((function(n){return t.unobserve(e,n.target)})),n.activeTargets.splice(0,n.activeTargets.length)},e}(),Cx=function(){function e(e){if(0===arguments.length)throw new TypeError("Failed to construct 'ResizeObserver': 1 argument required, but only 0 present.");if("function"!=typeof e)throw new TypeError("Failed to construct 'ResizeObserver': The callback provided as parameter 1 is not a function.");xx.connect(this,e)}return e.prototype.observe=function(e,t){if(0===arguments.length)throw new TypeError("Failed to execute 'observe' on 'ResizeObserver': 1 argument required, but only 0 present.");if(!Vy(e))throw new TypeError("Failed to execute 'observe' on 'ResizeObserver': parameter 1 is not of type 'Element");xx.observe(this,e,t)},e.prototype.unobserve=function(e){if(0===arguments.length)throw new TypeError("Failed to execute 'unobserve' on 'ResizeObserver': 1 argument required, but only 0 present.");if(!Vy(e))throw new TypeError("Failed to execute 'unobserve' on 'ResizeObserver': parameter 1 is not of type 'Element");xx.unobserve(this,e)},e.prototype.disconnect=function(){xx.disconnect(this)},e.toString=function(){return"function ResizeObserver () { [polyfill code] }"},e}();const wx=new class{constructor(){this.handleResize=this.handleResize.bind(this),this.observer=new("undefined"!=typeof window&&window.ResizeObserver||Cx)(this.handleResize),this.elHandlersMap=new Map}handleResize(e){for(const t of e){const e=this.elHandlersMap.get(t.target);void 0!==e&&e(t)}}registerHandler(e,t){this.elHandlersMap.set(e,t),this.observer.observe(e)}unregisterHandler(e){this.elHandlersMap.has(e)&&(this.elHandlersMap.delete(e),this.observer.unobserve(e))}},kx=zn({name:"ResizeObserver",props:{onResize:Function},setup(e){let t=!1;const n=Gr().proxy;function o(t){const{onResize:n}=e;void 0!==n&&n(t)}$n((()=>{const e=n.$el;void 0!==e&&(e.nextElementSibling!==e.nextSibling&&3===e.nodeType&&""!==e.nodeValue||null!==e.nextElementSibling&&(wx.registerHandler(e.nextElementSibling,o),t=!0))})),Hn((()=>{t&&wx.unregisterHandler(n.$el.nextElementSibling)}))},render(){return to(this.$slots,"default")}});let Sx,_x;function Px(){return"undefined"==typeof document?1:(void 0===_x&&(_x="chrome"in window?window.devicePixelRatio:1),_x)}const Tx=yy(".v-vl",{maxHeight:"inherit",height:"100%",overflow:"auto",minWidth:"1px"},[yy("&:not(.v-vl--show-scrollbar)",{scrollbarWidth:"none"},[yy("&::-webkit-scrollbar, &::-webkit-scrollbar-track-piece, &::-webkit-scrollbar-thumb",{width:0,height:0,display:"none"})])]),Ax=zn({name:"VirtualList",inheritAttrs:!1,props:{showScrollbar:{type:Boolean,default:!0},items:{type:Array,default:()=>[]},itemSize:{type:Number,required:!0},itemResizable:Boolean,itemsStyle:[String,Object],visibleItemsTag:{type:[String,Object],default:"div"},visibleItemsProps:Object,ignoreItemResize:Boolean,onScroll:Function,onWheel:Function,onResize:Function,defaultScrollKey:[Number,String],defaultScrollIndex:Number,keyField:{type:String,default:"key"},paddingTop:{type:[Number,String],default:0},paddingBottom:{type:[Number,String],default:0}},setup(e){const t=by();Tx.mount({id:"vueuc/virtual-list",head:!0,anchorMetaName:xy,ssr:t}),$n((()=>{const{defaultScrollIndex:t,defaultScrollKey:n}=e;null!=t?f({index:t}):null!=n&&f({key:n})}));let n=!1,o=!1;On((()=>{n=!1,o?f({top:d.value,left:u}):o=!0})),Mn((()=>{n=!0,o||(o=!0)}));const r=ai((()=>{const t=new Map,{keyField:n}=e;return e.items.forEach(((e,o)=>{t.set(e[n],o)})),t})),i=Et(null),a=Et(void 0),l=new Map,s=ai((()=>{const{items:t,itemSize:n,keyField:o}=e,r=new wy(t.length,n);return t.forEach(((e,t)=>{const n=e[o],i=l.get(n);void 0!==i&&r.add(t,i)})),r})),c=Et(0);let u=0;const d=Et(0),p=mb((()=>Math.max(s.value.getBound(d.value-Im(e.paddingTop))-1,0))),h=ai((()=>{const{value:t}=a;if(void 0===t)return[];const{items:n,itemSize:o}=e,r=p.value,i=Math.min(r+Math.ceil(t/o+1),n.length-1),l=[];for(let e=r;e<=i;++e)l.push(n[e]);return l})),f=(e,t)=>{if("number"==typeof e)return void b(e,t,"auto");const{left:n,top:o,index:i,key:a,position:l,behavior:s,debounce:c=!0}=e;if(void 0!==n||void 0!==o)b(n,o,s);else if(void 0!==i)g(i,s,c);else if(void 0!==a){const e=r.value.get(a);void 0!==e&&g(e,s,c)}else"bottom"===l?b(0,Number.MAX_SAFE_INTEGER,s):"top"===l&&b(0,0,s)};let v,m=null;function g(t,n,o){const{value:r}=s,a=r.sum(t)+Im(e.paddingTop);if(o){v=t,null!==m&&window.clearTimeout(m),m=window.setTimeout((()=>{v=void 0,m=null}),16);const{scrollTop:e,offsetHeight:o}=i.value;if(a>e){const l=r.get(t);a+l<=e+o||i.value.scrollTo({left:0,top:a+l-o,behavior:n})}else i.value.scrollTo({left:0,top:a,behavior:n})}else i.value.scrollTo({left:0,top:a,behavior:n})}function b(e,t,n){i.value.scrollTo({left:e,top:t,behavior:n})}const y=!("undefined"!=typeof document&&(void 0===Sx&&(Sx="matchMedia"in window&&window.matchMedia("(pointer:coarse)").matches),Sx));let x=!1;function C(){const{value:e}=i;null!=e&&(d.value=e.scrollTop,u=e.scrollLeft)}function w(e){let t=e;for(;null!==t;){if("none"===t.style.display)return!0;t=t.parentElement}return!1}return{listHeight:a,listStyle:{overflow:"auto"},keyToIndex:r,itemsStyle:ai((()=>{const{itemResizable:t}=e,n=Lm(s.value.sum());return c.value,[e.itemsStyle,{boxSizing:"content-box",height:t?"":n,minHeight:t?n:"",paddingTop:Lm(e.paddingTop),paddingBottom:Lm(e.paddingBottom)}]})),visibleItemsStyle:ai((()=>(c.value,{transform:`translateY(${Lm(s.value.sum(p.value))})`}))),viewportItems:h,listElRef:i,itemsElRef:Et(null),scrollTo:f,handleListResize:function(t){if(n)return;if(w(t.target))return;if(t.contentRect.height===a.value)return;a.value=t.contentRect.height;const{onResize:o}=e;void 0!==o&&o(t)},handleListScroll:function(t){var n;null===(n=e.onScroll)||void 0===n||n.call(e,t),y&&x||C()},handleListWheel:function(t){var n;if(null===(n=e.onWheel)||void 0===n||n.call(e,t),y){const e=i.value;if(null!=e){if(0===t.deltaX){if(0===e.scrollTop&&t.deltaY<=0)return;if(e.scrollTop+e.offsetHeight>=e.scrollHeight&&t.deltaY>=0)return}t.preventDefault(),e.scrollTop+=t.deltaY/Px(),e.scrollLeft+=t.deltaX/Px(),C(),x=!0,Em((()=>{x=!1}))}}},handleItemResize:function(t,o){var a,u,d;if(n)return;if(e.ignoreItemResize)return;if(w(o.target))return;const{value:p}=s,h=r.value.get(t),f=p.get(h),m=null!==(d=null===(u=null===(a=o.borderBoxSize)||void 0===a?void 0:a[0])||void 0===u?void 0:u.blockSize)&&void 0!==d?d:o.contentRect.height;if(m===f)return;0==m-e.itemSize?l.delete(t):l.set(t,m-e.itemSize);const g=m-f;if(0===g)return;p.add(h,g);const b=i.value;if(null!=b){if(void 0===v){const e=p.sum(h);b.scrollTop>e&&b.scrollBy(0,g)}else(hb.scrollTop+b.offsetHeight)&&b.scrollBy(0,g);C()}c.value++}}},render(){const{itemResizable:e,keyField:t,keyToIndex:n,visibleItemsTag:o}=this;return li(kx,{onResize:this.handleListResize},{default:()=>{var r,i;return li("div",Wr(this.$attrs,{class:["v-vl",this.showScrollbar&&"v-vl--show-scrollbar"],onScroll:this.handleListScroll,onWheel:this.handleListWheel,ref:"listElRef"}),[0!==this.items.length?li("div",{ref:"itemsElRef",class:"v-vl-items",style:this.itemsStyle},[li(o,Object.assign({class:"v-vl-visible-items",style:this.visibleItemsStyle},this.visibleItemsProps),{default:()=>this.viewportItems.map((o=>{const r=o[t],i=n.get(r),a=this.$slots.default({item:o,index:i})[0];return e?li(kx,{key:r,onResize:e=>this.handleItemResize(r,e)},{default:()=>a}):(a.key=r,a)}))})]):null===(i=(r=this.$slots).empty)||void 0===i?void 0:i.call(r)])}})}}),zx="v-hidden",Rx=yy("[v-hidden]",{display:"none!important"}),Ex=zn({name:"Overflow",props:{getCounter:Function,getTail:Function,updateCounter:Function,onUpdateCount:Function,onUpdateOverflow:Function},setup(e,{slots:t}){const n=Et(null),o=Et(null);function r(r){const{value:i}=n,{getCounter:a,getTail:l}=e;let s;if(s=void 0!==a?a():o.value,!i||!s)return;s.hasAttribute(zx)&&s.removeAttribute(zx);const{children:c}=i;if(r.showAllItemsBeforeCalculate)for(const e of c)e.hasAttribute(zx)&&e.removeAttribute(zx);const u=i.offsetWidth,d=[],p=t.tail?null==l?void 0:l():null;let h=p?p.offsetWidth:0,f=!1;const v=i.children.length-(t.tail?1:0);for(let t=0;tu){const{updateCounter:n}=e;for(let o=t;o>=0;--o){const r=v-1-o;void 0!==n?n(r):s.textContent=`${r}`;const i=s.offsetWidth;if(h-=d[o],h+i<=u||0===o){f=!0,t=o-1,p&&(-1===t?(p.style.maxWidth=u-i+"px",p.style.boxSizing="border-box"):p.style.maxWidth="");const{onUpdateCount:n}=e;n&&n(r);break}}}}const{onUpdateOverflow:m}=e;f?void 0!==m&&m(!0):(void 0!==m&&m(!1),s.setAttribute(zx,""))}const i=by();return Rx.mount({id:"vueuc/overflow",head:!0,anchorMetaName:xy,ssr:i}),$n((()=>r({showAllItemsBeforeCalculate:!1}))),{selfRef:n,counterRef:o,sync:r}},render(){const{$slots:e}=this;return tn((()=>this.sync({showAllItemsBeforeCalculate:!1}))),li("div",{class:"v-overflow",ref:"selfRef"},[to(e,"default"),e.counter?e.counter():li("span",{style:{display:"inline-block"},ref:"counterRef"}),e.tail?e.tail():null])}});function Ox(e){return e instanceof HTMLElement}function Mx(e){for(let t=0;t=0;t--){const n=e.childNodes[t];if(Ox(n)&&(Ix(n)||Fx(n)))return!0}return!1}function Ix(e){if(!function(e){if(e.tabIndex>0||0===e.tabIndex&&null!==e.getAttribute("tabIndex"))return!0;if(e.getAttribute("disabled"))return!1;switch(e.nodeName){case"A":return!!e.href&&"ignore"!==e.rel;case"INPUT":return"hidden"!==e.type&&"file"!==e.type;case"BUTTON":case"SELECT":case"TEXTAREA":return!0;default:return!1}}(e))return!1;try{e.focus({preventScroll:!0})}catch(WQ){}return document.activeElement===e}let Lx=[];const Bx=zn({name:"FocusTrap",props:{disabled:Boolean,active:Boolean,autoFocus:{type:Boolean,default:!0},onEsc:Function,initialFocusTo:String,finalFocusTo:String,returnFocusOnDeactivated:{type:Boolean,default:!0}},setup(e){const t=ig(),n=Et(null),o=Et(null);let r=!1,i=!1;const a="undefined"==typeof document?null:document.activeElement;function l(){return Lx[Lx.length-1]===t}function s(t){var n;"Escape"===t.code&&l()&&(null===(n=e.onEsc)||void 0===n||n.call(e,t))}function c(e){if(!i&&l()){const t=u();if(null===t)return;if(t.contains(Fm(e)))return;p("first")}}function u(){const e=n.value;if(null===e)return null;let t=e;for(;t=t.nextSibling,!(null===t||t instanceof Element&&"DIV"===t.tagName););return t}function d(){var n;if(e.disabled)return;if(document.removeEventListener("focus",c,!0),Lx=Lx.filter((e=>e!==t)),l())return;const{finalFocusTo:o}=e;void 0!==o?null===(n=ky(o))||void 0===n||n.focus({preventScroll:!0}):e.returnFocusOnDeactivated&&a instanceof HTMLElement&&(i=!0,a.focus({preventScroll:!0}),i=!1)}function p(t){if(l()&&e.active){const e=n.value,r=o.value;if(null!==e&&null!==r){const n=u();if(null==n||n===r)return i=!0,e.focus({preventScroll:!0}),void(i=!1);i=!0;const o="first"===t?Mx(n):Fx(n);i=!1,o||(i=!0,e.focus({preventScroll:!0}),i=!1)}}}return $n((()=>{lr((()=>e.active),(n=>{n?(function(){var n;if(!e.disabled){if(Lx.push(t),e.autoFocus){const{initialFocusTo:t}=e;void 0===t?p("first"):null===(n=ky(t))||void 0===n||n.focus({preventScroll:!0})}r=!0,document.addEventListener("focus",c,!0)}}(),Pb("keydown",document,s)):(Tb("keydown",document,s),r&&d())}),{immediate:!0})})),Hn((()=>{Tb("keydown",document,s),r&&d()})),{focusableStartRef:n,focusableEndRef:o,focusableStyle:"position: absolute; height: 0; width: 0;",handleStartFocus:function(e){if(i)return;const t=u();null!==t&&(null!==e.relatedTarget&&t.contains(e.relatedTarget)?p("last"):p("first"))},handleEndFocus:function(e){i||(null!==e.relatedTarget&&e.relatedTarget===n.value?p("last"):p("first"))}}},render(){const{default:e}=this.$slots;if(void 0===e)return null;if(this.disabled)return e();const{active:t,focusableStyle:n}=this;return li(yr,null,[li("div",{"aria-hidden":"true",tabindex:t?"0":"-1",ref:"focusableStartRef",style:n,onFocus:this.handleStartFocus}),e(),li("div",{"aria-hidden":"true",style:n,ref:"focusableEndRef",tabindex:t?"0":"-1",onFocus:this.handleEndFocus})])}});function Dx(e,t){t&&($n((()=>{const{value:n}=e;n&&wx.registerHandler(n,t)})),Hn((()=>{const{value:t}=e;t&&wx.unregisterHandler(t)})))}let $x=0,Nx="",jx="",Hx="",Wx="";const Ux=Et("0px");function Vx(e){if("undefined"==typeof document)return;const t=document.documentElement;let n,o=!1;const r=()=>{t.style.marginRight=Nx,t.style.overflow=jx,t.style.overflowX=Hx,t.style.overflowY=Wx,Ux.value="0px"};$n((()=>{n=lr(e,(e=>{if(e){if(!$x){const e=window.innerWidth-t.offsetWidth;e>0&&(Nx=t.style.marginRight,t.style.marginRight=`${e}px`,Ux.value=`${e}px`),jx=t.style.overflow,Hx=t.style.overflowX,Wx=t.style.overflowY,t.style.overflow="hidden",t.style.overflowX="hidden",t.style.overflowY="hidden"}o=!0,$x++}else $x--,$x||r(),o=!1}),{immediate:!0})})),Hn((()=>{null==n||n(),o&&($x--,$x||r(),o=!1)}))}const qx=Et(!1);function Kx(){qx.value=!0}function Gx(){qx.value=!1}let Xx=0;function Yx(){return pb&&(Dn((()=>{Xx||(window.addEventListener("compositionstart",Kx),window.addEventListener("compositionend",Gx)),Xx++})),Hn((()=>{Xx<=1?(window.removeEventListener("compositionstart",Kx),window.removeEventListener("compositionend",Gx),Xx=0):Xx--}))),qx}function Qx(e){const t={isDeactivated:!1};let n=!1;return On((()=>{t.isDeactivated=!1,n?e():n=!0})),Mn((()=>{t.isDeactivated=!0,n||(n=!0)})),t}function Zx(e){return"#document"===e.nodeName}const Jx="n-form-item";function eC(e,{defaultSize:t="medium",mergedSize:n,mergedDisabled:o}={}){const r=Po(Jx,null);_o(Jx,null);const i=ai(n?()=>n(r):()=>{const{size:n}=e;if(n)return n;if(r){const{mergedSize:e}=r;if(void 0!==e.value)return e.value}return t}),a=ai(o?()=>o(r):()=>{const{disabled:t}=e;return void 0!==t?t:!!r&&r.disabled.value}),l=ai((()=>{const{status:t}=e;return t||(null==r?void 0:r.mergedValidationStatus.value)}));return Hn((()=>{r&&r.restoreValidation()})),{mergedSizeRef:i,mergedDisabledRef:a,mergedStatusRef:l,nTriggerFormBlur(){r&&r.handleContentBlur()},nTriggerFormChange(){r&&r.handleContentChange()},nTriggerFormFocus(){r&&r.handleContentFocus()},nTriggerFormInput(){r&&r.handleContentInput()}}}const tC="object"==typeof global&&global&&global.Object===Object&&global;var nC="object"==typeof self&&self&&self.Object===Object&&self;const oC=tC||nC||Function("return this")(),rC=oC.Symbol;var iC=Object.prototype,aC=iC.hasOwnProperty,lC=iC.toString,sC=rC?rC.toStringTag:void 0,cC=Object.prototype.toString,uC=rC?rC.toStringTag:void 0;function dC(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":uC&&uC in Object(e)?function(e){var t=aC.call(e,sC),n=e[sC];try{e[sC]=void 0;var o=!0}catch(WQ){}var r=lC.call(e);return o&&(t?e[sC]=n:delete e[sC]),r}(e):function(e){return cC.call(e)}(e)}function pC(e){return null!=e&&"object"==typeof e}function hC(e){return"symbol"==typeof e||pC(e)&&"[object Symbol]"==dC(e)}function fC(e,t){for(var n=-1,o=null==e?0:e.length,r=Array(o);++n0){if(++JC>=800)return arguments[0]}else JC=0;return ZC.apply(void 0,arguments)});const ow=nw;var rw=/^(?:0|[1-9]\d*)$/;function iw(e,t){var n=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==n||"symbol"!=n&&rw.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function hw(e){return null!=e&&pw(e.length)&&!EC(e)}var fw=Object.prototype;function vw(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||fw)}function mw(e){return pC(e)&&"[object Arguments]"==dC(e)}var gw=Object.prototype,bw=gw.hasOwnProperty,yw=gw.propertyIsEnumerable,xw=mw(function(){return arguments}())?mw:function(e){return pC(e)&&bw.call(e,"callee")&&!yw.call(e,"callee")};const Cw=xw;var ww="object"==typeof e&&e&&!e.nodeType&&e,kw=ww&&"object"==typeof t&&t&&!t.nodeType&&t,Sw=kw&&kw.exports===ww?oC.Buffer:void 0;const _w=(Sw?Sw.isBuffer:void 0)||function(){return!1};var Pw={};Pw["[object Float32Array]"]=Pw["[object Float64Array]"]=Pw["[object Int8Array]"]=Pw["[object Int16Array]"]=Pw["[object Int32Array]"]=Pw["[object Uint8Array]"]=Pw["[object Uint8ClampedArray]"]=Pw["[object Uint16Array]"]=Pw["[object Uint32Array]"]=!0,Pw["[object Arguments]"]=Pw["[object Array]"]=Pw["[object ArrayBuffer]"]=Pw["[object Boolean]"]=Pw["[object DataView]"]=Pw["[object Date]"]=Pw["[object Error]"]=Pw["[object Function]"]=Pw["[object Map]"]=Pw["[object Number]"]=Pw["[object Object]"]=Pw["[object RegExp]"]=Pw["[object Set]"]=Pw["[object String]"]=Pw["[object WeakMap]"]=!1;var Tw="object"==typeof e&&e&&!e.nodeType&&e,Aw=Tw&&"object"==typeof t&&t&&!t.nodeType&&t,zw=Aw&&Aw.exports===Tw&&tC.process,Rw=function(){try{var e=Aw&&Aw.require&&Aw.require("util").types;return e||zw&&zw.binding&&zw.binding("util")}catch(WQ){}}(),Ew=Rw&&Rw.isTypedArray,Ow=Ew?function(e){return function(t){return e(t)}}(Ew):function(e){return pC(e)&&pw(e.length)&&!!Pw[dC(e)]};const Mw=Ow;var Fw=Object.prototype.hasOwnProperty;function Iw(e,t){var n=vC(e),o=!n&&Cw(e),r=!n&&!o&&_w(e),i=!n&&!o&&!r&&Mw(e),a=n||o||r||i,l=a?function(e,t){for(var n=-1,o=Array(e);++n-1},Zw.prototype.set=function(e,t){var n=this.__data__,o=Yw(n,e);return o<0?(++this.size,n.push([e,t])):n[o][1]=t,this};const Jw=UC(oC,"Map");function ek(e,t){var n,o,r=e.__data__;return("string"==(o=typeof(n=t))||"number"==o||"symbol"==o||"boolean"==o?"__proto__"!==n:null===n)?r["string"==typeof t?"string":"hash"]:r.map}function tk(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t=o?e:function(e,t,n){var o=-1,r=e.length;t<0&&(t=-t>r?0:r+t),(n=n>r?r:n)<0&&(n+=r),r=t>n?0:n-t>>>0,t>>>=0;for(var i=Array(r);++ol))return!1;var c=i.get(e),u=i.get(t);if(c&&u)return c==t&&u==e;var d=-1,p=!0,h=2&n?new WS:void 0;for(i.set(e,t),i.set(t,e);++d1?t[o-1]:void 0,i=o>2?t[2]:void 0;for(r=k_.length>3&&"function"==typeof r?(o--,r):void 0,i&&function(e,t,n){if(!wC(n))return!1;var o=typeof t;return!!("number"==o?hw(n)&&iw(t,n.length):"string"==o&&t in n)&&lw(n[t],e)}(t[0],t[1],i)&&(r=o<3?void 0:r,o=1),e=Object(e);++n{const e=null==i?void 0:i.value;n.mount({id:void 0===e?t:e+t,head:!0,props:{bPrefix:e?`.${e}-`:void 0},anchorMetaName:F_,ssr:a}),(null==l?void 0:l.preflightStyleDisabled)||O_.mount({id:"n-global",head:!0,anchorMetaName:F_,ssr:a})};a?e():Dn(e)}const s=ai((()=>{var t;const{theme:{common:n,self:i,peers:a={}}={},themeOverrides:s={},builtinThemeOverrides:c={}}=r,{common:u,peers:d}=s,{common:p,[e]:{common:h,self:f,peers:v={}}={}}=(null==l?void 0:l.mergedThemeRef.value)||{},{common:m,[e]:g={}}=(null==l?void 0:l.mergedThemeOverridesRef.value)||{},{common:b,peers:y={}}=g,x=__({},n||h||p||o.common,m,b,u);return{common:x,self:__(null===(t=i||f||o.self)||void 0===t?void 0:t(x),c,g,s),peers:__({},o.peers,v,a),peerOverrides:__({},c.peers,y,d)}}));return s}I_.props={theme:Object,themeOverrides:Object,builtinThemeOverrides:Object};const L_="n";function B_(e={},t={defaultBordered:!0}){const n=Po(M_,null);return{inlineThemeDisabled:null==n?void 0:n.inlineThemeDisabled,mergedRtlRef:null==n?void 0:n.mergedRtlRef,mergedComponentPropsRef:null==n?void 0:n.mergedComponentPropsRef,mergedBreakpointsRef:null==n?void 0:n.mergedBreakpointsRef,mergedBorderedRef:ai((()=>{var o,r;const{bordered:i}=e;return void 0!==i?i:null===(r=null!==(o=null==n?void 0:n.mergedBorderedRef.value)&&void 0!==o?o:t.defaultBordered)||void 0===r||r})),mergedClsPrefixRef:n?n.mergedClsPrefixRef:Ot(L_),namespaceRef:ai((()=>null==n?void 0:n.mergedNamespaceRef.value))}}function D_(){const e=Po(M_,null);return e?e.mergedClsPrefixRef:Ot(L_)}const $_={name:"zh-CN",global:{undo:"撤销",redo:"重做",confirm:"确认",clear:"清除"},Popconfirm:{positiveText:"确认",negativeText:"取消"},Cascader:{placeholder:"请选择",loading:"加载中",loadingRequiredMessage:e=>`加载全部 ${e} 的子节点后才可选中`},Time:{dateFormat:"yyyy-MM-dd",dateTimeFormat:"yyyy-MM-dd HH:mm:ss"},DatePicker:{yearFormat:"yyyy年",monthFormat:"MMM",dayFormat:"eeeeee",yearTypeFormat:"yyyy",monthTypeFormat:"yyyy-MM",dateFormat:"yyyy-MM-dd",dateTimeFormat:"yyyy-MM-dd HH:mm:ss",quarterFormat:"yyyy-qqq",weekFormat:"RRRR-w周",clear:"清除",now:"此刻",confirm:"确认",selectTime:"选择时间",selectDate:"选择日期",datePlaceholder:"选择日期",datetimePlaceholder:"选择日期时间",monthPlaceholder:"选择月份",yearPlaceholder:"选择年份",quarterPlaceholder:"选择季度",weekPlaceholder:"选择周",startDatePlaceholder:"开始日期",endDatePlaceholder:"结束日期",startDatetimePlaceholder:"开始日期时间",endDatetimePlaceholder:"结束日期时间",startMonthPlaceholder:"开始月份",endMonthPlaceholder:"结束月份",monthBeforeYear:!1,firstDayOfWeek:0,today:"今天"},DataTable:{checkTableAll:"选择全部表格数据",uncheckTableAll:"取消选择全部表格数据",confirm:"确认",clear:"重置"},LegacyTransfer:{sourceTitle:"源项",targetTitle:"目标项"},Transfer:{selectAll:"全选",clearAll:"清除",unselectAll:"取消全选",total:e=>`共 ${e} 项`,selected:e=>`已选 ${e} 项`},Empty:{description:"无数据"},Select:{placeholder:"请选择"},TimePicker:{placeholder:"请选择时间",positiveText:"确认",negativeText:"取消",now:"此刻",clear:"清除"},Pagination:{goto:"跳至",selectionSuffix:"页"},DynamicTags:{add:"添加"},Log:{loading:"加载中"},Input:{placeholder:"请输入"},InputNumber:{placeholder:"请输入"},DynamicInput:{create:"添加"},ThemeEditor:{title:"主题编辑器",clearAllVars:"清除全部变量",clearSearch:"清除搜索",filterCompName:"过滤组件名",filterVarName:"过滤变量名",import:"导入",export:"导出",restore:"恢复默认"},Image:{tipPrevious:"上一张(←)",tipNext:"下一张(→)",tipCounterclockwise:"向左旋转",tipClockwise:"向右旋转",tipZoomOut:"缩小",tipZoomIn:"放大",tipDownload:"下载",tipClose:"关闭(Esc)",tipOriginalSize:"缩放到原始尺寸"}},N_={name:"zh-TW",global:{undo:"復原",redo:"重做",confirm:"確定",clear:"清除"},Popconfirm:{positiveText:"確定",negativeText:"取消"},Cascader:{placeholder:"請選擇",loading:"載入中",loadingRequiredMessage:e=>`載入全部 ${e} 的子節點後才可選擇`},Time:{dateFormat:"yyyy-MM-dd",dateTimeFormat:"yyyy-MM-dd HH:mm:ss"},DatePicker:{yearFormat:"yyyy 年",monthFormat:"MMM",dayFormat:"eeeeee",yearTypeFormat:"yyyy",monthTypeFormat:"yyyy-MM",dateFormat:"yyyy-MM-dd",dateTimeFormat:"yyyy-MM-dd HH:mm:ss",quarterFormat:"yyyy-qqq",weekFormat:"RRRR-w",clear:"清除",now:"現在",confirm:"確定",selectTime:"選擇時間",selectDate:"選擇日期",datePlaceholder:"選擇日期",datetimePlaceholder:"選擇日期時間",monthPlaceholder:"選擇月份",yearPlaceholder:"選擇年份",quarterPlaceholder:"選擇季度",weekPlaceholder:"Select Week",startDatePlaceholder:"開始日期",endDatePlaceholder:"結束日期",startDatetimePlaceholder:"開始日期時間",endDatetimePlaceholder:"結束日期時間",startMonthPlaceholder:"開始月份",endMonthPlaceholder:"結束月份",monthBeforeYear:!1,firstDayOfWeek:0,today:"今天"},DataTable:{checkTableAll:"選擇全部表格資料",uncheckTableAll:"取消選擇全部表格資料",confirm:"確定",clear:"重設"},LegacyTransfer:{sourceTitle:"來源",targetTitle:"目標"},Transfer:{selectAll:"全選",unselectAll:"取消全選",clearAll:"清除全部",total:e=>`共 ${e} 項`,selected:e=>`已選 ${e} 項`},Empty:{description:"無資料"},Select:{placeholder:"請選擇"},TimePicker:{placeholder:"請選擇時間",positiveText:"確定",negativeText:"取消",now:"現在",clear:"清除"},Pagination:{goto:"跳至",selectionSuffix:"頁"},DynamicTags:{add:"新增"},Log:{loading:"載入中"},Input:{placeholder:"請輸入"},InputNumber:{placeholder:"請輸入"},DynamicInput:{create:"新增"},ThemeEditor:{title:"主題編輯器",clearAllVars:"清除全部變數",clearSearch:"清除搜尋",filterCompName:"過濾組件名稱",filterVarName:"過濾變數名稱",import:"匯入",export:"匯出",restore:"恢復預設"},Image:{tipPrevious:"上一張(←)",tipNext:"下一張(→)",tipCounterclockwise:"向左旋轉",tipClockwise:"向右旋轉",tipZoomOut:"縮小",tipZoomIn:"放大",tipDownload:"下載",tipClose:"關閉(Esc)",tipOriginalSize:"縮放到原始尺寸"}},j_={name:"en-US",global:{undo:"Undo",redo:"Redo",confirm:"Confirm",clear:"Clear"},Popconfirm:{positiveText:"Confirm",negativeText:"Cancel"},Cascader:{placeholder:"Please Select",loading:"Loading",loadingRequiredMessage:e=>`Please load all ${e}'s descendants before checking it.`},Time:{dateFormat:"yyyy-MM-dd",dateTimeFormat:"yyyy-MM-dd HH:mm:ss"},DatePicker:{yearFormat:"yyyy",monthFormat:"MMM",dayFormat:"eeeeee",yearTypeFormat:"yyyy",monthTypeFormat:"yyyy-MM",dateFormat:"yyyy-MM-dd",dateTimeFormat:"yyyy-MM-dd HH:mm:ss",quarterFormat:"yyyy-qqq",weekFormat:"RRRR-w",clear:"Clear",now:"Now",confirm:"Confirm",selectTime:"Select Time",selectDate:"Select Date",datePlaceholder:"Select Date",datetimePlaceholder:"Select Date and Time",monthPlaceholder:"Select Month",yearPlaceholder:"Select Year",quarterPlaceholder:"Select Quarter",weekPlaceholder:"Select Week",startDatePlaceholder:"Start Date",endDatePlaceholder:"End Date",startDatetimePlaceholder:"Start Date and Time",endDatetimePlaceholder:"End Date and Time",startMonthPlaceholder:"Start Month",endMonthPlaceholder:"End Month",monthBeforeYear:!0,firstDayOfWeek:6,today:"Today"},DataTable:{checkTableAll:"Select all in the table",uncheckTableAll:"Unselect all in the table",confirm:"Confirm",clear:"Clear"},LegacyTransfer:{sourceTitle:"Source",targetTitle:"Target"},Transfer:{selectAll:"Select all",unselectAll:"Unselect all",clearAll:"Clear",total:e=>`Total ${e} items`,selected:e=>`${e} items selected`},Empty:{description:"No Data"},Select:{placeholder:"Please Select"},TimePicker:{placeholder:"Select Time",positiveText:"OK",negativeText:"Cancel",now:"Now",clear:"Clear"},Pagination:{goto:"Goto",selectionSuffix:"page"},DynamicTags:{add:"Add"},Log:{loading:"Loading"},Input:{placeholder:"Please Input"},InputNumber:{placeholder:"Please Input"},DynamicInput:{create:"Create"},ThemeEditor:{title:"Theme Editor",clearAllVars:"Clear All Variables",clearSearch:"Clear Search",filterCompName:"Filter Component Name",filterVarName:"Filter Variable Name",import:"Import",export:"Export",restore:"Reset to Default"},Image:{tipPrevious:"Previous picture (←)",tipNext:"Next picture (→)",tipCounterclockwise:"Counterclockwise",tipClockwise:"Clockwise",tipZoomOut:"Zoom out",tipZoomIn:"Zoom in",tipDownload:"Download",tipClose:"Close (Esc)",tipOriginalSize:"Zoom to original size"}},H_={name:"ru-RU",global:{undo:"Отменить",redo:"Вернуть",confirm:"Подтвердить",clear:"Очистить"},Popconfirm:{positiveText:"Подтвердить",negativeText:"Отмена"},Cascader:{placeholder:"Выбрать",loading:"Загрузка",loadingRequiredMessage:e=>`Загрузите все дочерние узлы ${e} прежде чем они станут необязательными`},Time:{dateFormat:"yyyy-MM-dd",dateTimeFormat:"yyyy-MM-dd HH:mm:ss"},DatePicker:{yearFormat:"yyyy",monthFormat:"MMM",dayFormat:"eeeeee",yearTypeFormat:"yyyy",monthTypeFormat:"yyyy-MM",dateFormat:"yyyy-MM-dd",dateTimeFormat:"yyyy-MM-dd HH:mm:ss",quarterFormat:"yyyy-qqq",weekFormat:"RRRR-w",clear:"Очистить",now:"Сейчас",confirm:"Подтвердить",selectTime:"Выбрать время",selectDate:"Выбрать дату",datePlaceholder:"Выбрать дату",datetimePlaceholder:"Выбрать дату и время",monthPlaceholder:"Выберите месяц",yearPlaceholder:"Выберите год",quarterPlaceholder:"Выберите квартал",weekPlaceholder:"Select Week",startDatePlaceholder:"Дата начала",endDatePlaceholder:"Дата окончания",startDatetimePlaceholder:"Дата и время начала",endDatetimePlaceholder:"Дата и время окончания",startMonthPlaceholder:"Начало месяца",endMonthPlaceholder:"Конец месяца",monthBeforeYear:!0,firstDayOfWeek:0,today:"Сегодня"},DataTable:{checkTableAll:"Выбрать все в таблице",uncheckTableAll:"Отменить все в таблице",confirm:"Подтвердить",clear:"Очистить"},LegacyTransfer:{sourceTitle:"Источник",targetTitle:"Назначение"},Transfer:{selectAll:"Выбрать все",unselectAll:"Снять все",clearAll:"Очистить",total:e=>`Всего ${e} элементов`,selected:e=>`${e} выбрано элементов`},Empty:{description:"Нет данных"},Select:{placeholder:"Выбрать"},TimePicker:{placeholder:"Выбрать время",positiveText:"OK",negativeText:"Отменить",now:"Сейчас",clear:"Очистить"},Pagination:{goto:"Перейти",selectionSuffix:"страница"},DynamicTags:{add:"Добавить"},Log:{loading:"Загрузка"},Input:{placeholder:"Ввести"},InputNumber:{placeholder:"Ввести"},DynamicInput:{create:"Создать"},ThemeEditor:{title:"Редактор темы",clearAllVars:"Очистить все",clearSearch:"Очистить поиск",filterCompName:"Фильтровать по имени компонента",filterVarName:"Фильтровать имена переменных",import:"Импорт",export:"Экспорт",restore:"Сбросить"},Image:{tipPrevious:"Предыдущее изображение (←)",tipNext:"Следующее изображение (→)",tipCounterclockwise:"Против часовой стрелки",tipClockwise:"По часовой стрелке",tipZoomOut:"Отдалить",tipZoomIn:"Приблизить",tipDownload:"Скачать",tipClose:"Закрыть (Esc)",tipOriginalSize:"Вернуть исходный размер"}},W_={name:"ja-JP",global:{undo:"元に戻す",redo:"やり直す",confirm:"OK",clear:"クリア"},Popconfirm:{positiveText:"OK",negativeText:"キャンセル"},Cascader:{placeholder:"選択してください",loading:"ロード中",loadingRequiredMessage:e=>`すべての ${e} サブノードをロードしてから選択できます。`},Time:{dateFormat:"yyyy-MM-dd",dateTimeFormat:"yyyy-MM-dd HH:mm:ss"},DatePicker:{yearFormat:"yyyy年",monthFormat:"MMM",dayFormat:"eeeeee",yearTypeFormat:"yyyy",monthTypeFormat:"yyyy-MM",dateFormat:"yyyy-MM-dd",dateTimeFormat:"yyyy-MM-dd HH:mm:ss",quarterFormat:"yyyy-qqq",weekFormat:"RRRR-w",clear:"クリア",now:"現在",confirm:"OK",selectTime:"時間を選択",selectDate:"日付を選択",datePlaceholder:"日付を選択",datetimePlaceholder:"選択",monthPlaceholder:"月を選択",yearPlaceholder:"年を選択",quarterPlaceholder:"四半期を選択",weekPlaceholder:"Select Week",startDatePlaceholder:"開始日",endDatePlaceholder:"終了日",startDatetimePlaceholder:"開始時間",endDatetimePlaceholder:"終了時間",startMonthPlaceholder:"開始月",endMonthPlaceholder:"終了月",monthBeforeYear:!1,firstDayOfWeek:0,today:"今日"},DataTable:{checkTableAll:"全選択",uncheckTableAll:"全選択取消",confirm:"OK",clear:"リセット"},LegacyTransfer:{sourceTitle:"元",targetTitle:"先"},Transfer:{selectAll:"全選択",unselectAll:"全選択取消",clearAll:"リセット",total:e=>`合計 ${e} 項目`,selected:e=>`${e} 個の項目を選択`},Empty:{description:"データなし"},Select:{placeholder:"選択してください"},TimePicker:{placeholder:"選択してください",positiveText:"OK",negativeText:"キャンセル",now:"現在",clear:"クリア"},Pagination:{goto:"ページジャンプ",selectionSuffix:"ページ"},DynamicTags:{add:"追加"},Log:{loading:"ロード中"},Input:{placeholder:"入力してください"},InputNumber:{placeholder:"入力してください"},DynamicInput:{create:"追加"},ThemeEditor:{title:"テーマエディタ",clearAllVars:"全件変数クリア",clearSearch:"検索クリア",filterCompName:"コンポネント名をフィルタ",filterVarName:"変数をフィルタ",import:"インポート",export:"エクスポート",restore:"デフォルト"},Image:{tipPrevious:"前の画像 (←)",tipNext:"次の画像 (→)",tipCounterclockwise:"左に回転",tipClockwise:"右に回転",tipZoomOut:"縮小",tipZoomIn:"拡大",tipDownload:"ダウンロード",tipClose:"閉じる (Esc)",tipOriginalSize:"元のサイズに戻す"}},U_={name:"ko-KR",global:{undo:"실행 취소",redo:"다시 실행",confirm:"확인",clear:"지우기"},Popconfirm:{positiveText:"확인",negativeText:"취소"},Cascader:{placeholder:"선택해 주세요",loading:"불러오는 중",loadingRequiredMessage:e=>`${e}의 모든 하위 항목을 불러온 뒤에 선택할 수 있습니다.`},Time:{dateFormat:"yyyy-MM-dd",dateTimeFormat:"yyyy-MM-dd HH:mm:ss"},DatePicker:{yearFormat:"yyyy년",monthFormat:"MMM",dayFormat:"eeeeee",yearTypeFormat:"yyyy",monthTypeFormat:"yyyy-MM",dateFormat:"yyyy-MM-dd",dateTimeFormat:"yyyy-MM-dd HH:mm:ss",quarterFormat:"yyyy-qqq",weekFormat:"RRRR-w",clear:"지우기",now:"현재",confirm:"확인",selectTime:"시간 선택",selectDate:"날짜 선택",datePlaceholder:"날짜 선택",datetimePlaceholder:"날짜 및 시간 선택",monthPlaceholder:"월 선택",yearPlaceholder:"년 선택",quarterPlaceholder:"분기 선택",weekPlaceholder:"Select Week",startDatePlaceholder:"시작 날짜",endDatePlaceholder:"종료 날짜",startDatetimePlaceholder:"시작 날짜 및 시간",endDatetimePlaceholder:"종료 날짜 및 시간",startMonthPlaceholder:"시작 월",endMonthPlaceholder:"종료 월",monthBeforeYear:!1,firstDayOfWeek:6,today:"오늘"},DataTable:{checkTableAll:"모두 선택",uncheckTableAll:"모두 선택 해제",confirm:"확인",clear:"지우기"},LegacyTransfer:{sourceTitle:"원본",targetTitle:"타깃"},Transfer:{selectAll:"전체 선택",unselectAll:"전체 해제",clearAll:"전체 삭제",total:e=>`총 ${e} 개`,selected:e=>`${e} 개 선택`},Empty:{description:"데이터 없음"},Select:{placeholder:"선택해 주세요"},TimePicker:{placeholder:"시간 선택",positiveText:"확인",negativeText:"취소",now:"현재 시간",clear:"지우기"},Pagination:{goto:"이동",selectionSuffix:"페이지"},DynamicTags:{add:"추가"},Log:{loading:"불러오는 중"},Input:{placeholder:"입력해 주세요"},InputNumber:{placeholder:"입력해 주세요"},DynamicInput:{create:"추가"},ThemeEditor:{title:"테마 편집기",clearAllVars:"모든 변수 지우기",clearSearch:"검색 지우기",filterCompName:"구성 요소 이름 필터",filterVarName:"변수 이름 필터",import:"가져오기",export:"내보내기",restore:"기본으로 재설정"},Image:{tipPrevious:"이전 (←)",tipNext:"다음 (→)",tipCounterclockwise:"시계 반대 방향으로 회전",tipClockwise:"시계 방향으로 회전",tipZoomOut:"축소",tipZoomIn:"확대",tipDownload:"다운로드",tipClose:"닫기 (Esc)",tipOriginalSize:"원본 크기로 확대"}},V_={name:"vi-VN",global:{undo:"Hoàn tác",redo:"Làm lại",confirm:"Xác nhận",clear:"xóa"},Popconfirm:{positiveText:"Xác nhận",negativeText:"Hủy"},Cascader:{placeholder:"Vui lòng chọn",loading:"Đang tải",loadingRequiredMessage:e=>`Vui lòng tải tất cả thông tin con của ${e} trước.`},Time:{dateFormat:"",dateTimeFormat:"HH:mm:ss dd-MM-yyyy"},DatePicker:{yearFormat:"yyyy",monthFormat:"MMM",dayFormat:"eeeeee",yearTypeFormat:"yyyy",monthTypeFormat:"MM-yyyy",dateFormat:"dd-MM-yyyy",dateTimeFormat:"HH:mm:ss dd-MM-yyyy",quarterFormat:"qqq-yyyy",weekFormat:"RRRR-w",clear:"Xóa",now:"Hôm nay",confirm:"Xác nhận",selectTime:"Chọn giờ",selectDate:"Chọn ngày",datePlaceholder:"Chọn ngày",datetimePlaceholder:"Chọn ngày giờ",monthPlaceholder:"Chọn tháng",yearPlaceholder:"Chọn năm",quarterPlaceholder:"Chọn quý",weekPlaceholder:"Select Week",startDatePlaceholder:"Ngày bắt đầu",endDatePlaceholder:"Ngày kết thúc",startDatetimePlaceholder:"Thời gian bắt đầu",endDatetimePlaceholder:"Thời gian kết thúc",startMonthPlaceholder:"Tháng bắt đầu",endMonthPlaceholder:"Tháng kết thúc",monthBeforeYear:!0,firstDayOfWeek:0,today:"Hôm nay"},DataTable:{checkTableAll:"Chọn tất cả có trong bảng",uncheckTableAll:"Bỏ chọn tất cả có trong bảng",confirm:"Xác nhận",clear:"Xóa"},LegacyTransfer:{sourceTitle:"Nguồn",targetTitle:"Đích"},Transfer:{selectAll:"Chọn tất cả",unselectAll:"Bỏ chọn tất cả",clearAll:"Xoá tất cả",total:e=>`Tổng cộng ${e} mục`,selected:e=>`${e} mục được chọn`},Empty:{description:"Không có dữ liệu"},Select:{placeholder:"Vui lòng chọn"},TimePicker:{placeholder:"Chọn thời gian",positiveText:"OK",negativeText:"Hủy",now:"Hiện tại",clear:"Xóa"},Pagination:{goto:"Đi đến trang",selectionSuffix:"trang"},DynamicTags:{add:"Thêm"},Log:{loading:"Đang tải"},Input:{placeholder:"Vui lòng nhập"},InputNumber:{placeholder:"Vui lòng nhập"},DynamicInput:{create:"Tạo"},ThemeEditor:{title:"Tùy chỉnh giao diện",clearAllVars:"Xóa tất cả các biến",clearSearch:"Xóa tìm kiếm",filterCompName:"Lọc tên component",filterVarName:"Lọc tên biến",import:"Nhập",export:"Xuất",restore:"Đặt lại mặc định"},Image:{tipPrevious:"Hình trước (←)",tipNext:"Hình tiếp (→)",tipCounterclockwise:"Counterclockwise",tipClockwise:"Chiều kim đồng hồ",tipZoomOut:"Thu nhỏ",tipZoomIn:"Phóng to",tipDownload:"Tải về",tipClose:"Đóng (Esc)",tipOriginalSize:"Xem kích thước gốc"}},q_={name:"fa-IR",global:{undo:"لغو انجام شده",redo:"انجام دوباره",confirm:"تأیید",clear:"پاک کردن"},Popconfirm:{positiveText:"تأیید",negativeText:"لغو"},Cascader:{placeholder:"لطفا انتخاب کنید",loading:"بارگذاری",loadingRequiredMessage:e=>`پس از بارگیری کامل زیرمجموعه های ${e} می توانید انتخاب کنید `},Time:{dateFormat:"yyyy/MM/dd",dateTimeFormat:"yyyy/MM/dd، H:mm:ss"},DatePicker:{yearFormat:"yyyy سال",monthFormat:"MMM",dayFormat:"eeeeee",yearTypeFormat:"yyyy",monthTypeFormat:"MM/yyyy",dateFormat:"yyyy/MM/dd",dateTimeFormat:"yyyy/MM/dd HH:mm:ss",quarterFormat:"سه ماهه yyyy",weekFormat:"RRRR-w",clear:"پاک کردن",now:"اکنون",confirm:"تأیید",selectTime:"انتخاب زمان",selectDate:"انتخاب تاریخ",datePlaceholder:"انتخاب تاریخ",datetimePlaceholder:"انتخاب تاریخ و زمان",monthPlaceholder:"انتخاب ماه",yearPlaceholder:"انتخاب سال",quarterPlaceholder:"انتخاب سه‌ماهه",weekPlaceholder:"Select Week",startDatePlaceholder:"تاریخ شروع",endDatePlaceholder:"تاریخ پایان",startDatetimePlaceholder:"زمان شروع",endDatetimePlaceholder:"زمان پایان",startMonthPlaceholder:"ماه شروع",endMonthPlaceholder:"ماه پایان",monthBeforeYear:!1,firstDayOfWeek:6,today:"امروز"},DataTable:{checkTableAll:"انتخاب همه داده‌های جدول",uncheckTableAll:"عدم انتخاب همه داده‌های جدول",confirm:"تأیید",clear:"تنظیم مجدد"},LegacyTransfer:{sourceTitle:"آیتم منبع",targetTitle:"آیتم مقصد"},Transfer:{selectAll:"انتخاب همه",clearAll:"حذف همه",unselectAll:"عدم انتخاب همه",total:e=>`کل ${e} مورد`,selected:e=>`انتخاب شده ${e} مورد`},Empty:{description:"اطلاعاتی وجود ندارد"},Select:{placeholder:"لطفاً انتخاب کنید"},TimePicker:{placeholder:"لطفاً زمان مورد نظر را انتخاب کنید",positiveText:"تأیید",negativeText:"لغو",now:"همین الان",clear:"پاک کردن"},Pagination:{goto:"رفتن به صفحه",selectionSuffix:"صفحه"},DynamicTags:{add:"افزودن"},Log:{loading:"در حال بارگذاری"},Input:{placeholder:"لطفاً وارد کنید"},InputNumber:{placeholder:"لطفاً وارد کنید"},DynamicInput:{create:"افزودن"},ThemeEditor:{title:"ویرایشگر پوسته",clearAllVars:"پاک کردن همه متغیرها",clearSearch:"پاک کردن جستجو",filterCompName:"فیلتر نام کامپوننت",filterVarName:"فیلتر نام متغیر",import:"ورود",export:"خروج",restore:"بازگردانی به حالت پیش‌فرض"},Image:{tipPrevious:"تصویر قبلی (←)",tipNext:"تصویر بعدی (→)",tipCounterclockwise:"چرخش به سمت چپ",tipClockwise:"چرخش به سمت راست",tipZoomOut:"کوچک نمایی تصویر",tipZoomIn:"بزرگ نمایی تصویر",tipDownload:"بارگیری",tipClose:"بستن (Esc)",tipOriginalSize:"اندازه اصلی تصویر"}};var K_={lessThanXSeconds:{one:"不到 1 秒",other:"不到 {{count}} 秒"},xSeconds:{one:"1 秒",other:"{{count}} 秒"},halfAMinute:"半分钟",lessThanXMinutes:{one:"不到 1 分钟",other:"不到 {{count}} 分钟"},xMinutes:{one:"1 分钟",other:"{{count}} 分钟"},xHours:{one:"1 小时",other:"{{count}} 小时"},aboutXHours:{one:"大约 1 小时",other:"大约 {{count}} 小时"},xDays:{one:"1 天",other:"{{count}} 天"},aboutXWeeks:{one:"大约 1 个星期",other:"大约 {{count}} 个星期"},xWeeks:{one:"1 个星期",other:"{{count}} 个星期"},aboutXMonths:{one:"大约 1 个月",other:"大约 {{count}} 个月"},xMonths:{one:"1 个月",other:"{{count}} 个月"},aboutXYears:{one:"大约 1 年",other:"大约 {{count}} 年"},xYears:{one:"1 年",other:"{{count}} 年"},overXYears:{one:"超过 1 年",other:"超过 {{count}} 年"},almostXYears:{one:"将近 1 年",other:"将近 {{count}} 年"}};const G_=function(e,t,n){var o,r=K_[e];return o="string"==typeof r?r:1===t?r.one:r.other.replace("{{count}}",String(t)),null!=n&&n.addSuffix?n.comparison&&n.comparison>0?o+"内":o+"前":o};function X_(e){return function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.width?String(t.width):e.defaultWidth;return e.formats[n]||e.formats[e.defaultWidth]}}var Y_={date:X_({formats:{full:"y'年'M'月'd'日' EEEE",long:"y'年'M'月'd'日'",medium:"yyyy-MM-dd",short:"yy-MM-dd"},defaultWidth:"full"}),time:X_({formats:{full:"zzzz a h:mm:ss",long:"z a h:mm:ss",medium:"a h:mm:ss",short:"a h:mm"},defaultWidth:"full"}),dateTime:X_({formats:{full:"{{date}} {{time}}",long:"{{date}} {{time}}",medium:"{{date}} {{time}}",short:"{{date}} {{time}}"},defaultWidth:"full"})};function Q_(e,t){if(t.length1?"s":"")+" required, but only "+t.length+" present")}function Z_(e){return(Z_="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var J_={};function eP(e,t){var n,o,r,i,a,l,s,c;Q_(1,arguments);var u=J_,d=function(e){if(null===e||!0===e||!1===e)return NaN;var t=Number(e);return isNaN(t)?t:t<0?Math.ceil(t):Math.floor(t)}(null!==(n=null!==(o=null!==(r=null!==(i=null==t?void 0:t.weekStartsOn)&&void 0!==i?i:null==t||null===(a=t.locale)||void 0===a||null===(l=a.options)||void 0===l?void 0:l.weekStartsOn)&&void 0!==r?r:u.weekStartsOn)&&void 0!==o?o:null===(s=u.locale)||void 0===s||null===(c=s.options)||void 0===c?void 0:c.weekStartsOn)&&void 0!==n?n:0);if(!(d>=0&&d<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var p=function(e){Q_(1,arguments);var t=Object.prototype.toString.call(e);return e instanceof Date||"object"===Z_(e)&&"[object Date]"===t?new Date(e.getTime()):"number"==typeof e||"[object Number]"===t?new Date(e):new Date(NaN)}(e),h=p.getUTCDay(),f=(ht.getTime()?"'下个'"+o:"'上个'"+o}var oP={lastWeek:nP,yesterday:"'昨天' p",today:"'今天' p",tomorrow:"'明天' p",nextWeek:nP,other:"PP p"};const rP=function(e,t,n,o){var r=oP[e];return"function"==typeof r?r(t,n,o):r};function iP(e){return function(t,n){var o;if("formatting"===(null!=n&&n.context?String(n.context):"standalone")&&e.formattingValues){var r=e.defaultFormattingWidth||e.defaultWidth,i=null!=n&&n.width?String(n.width):r;o=e.formattingValues[i]||e.formattingValues[r]}else{var a=e.defaultWidth,l=null!=n&&n.width?String(n.width):e.defaultWidth;o=e.values[l]||e.values[a]}return o[e.argumentCallback?e.argumentCallback(t):t]}}function aP(e){return function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=n.width,r=o&&e.matchPatterns[o]||e.matchPatterns[e.defaultMatchWidth],i=t.match(r);if(!i)return null;var a,l=i[0],s=o&&e.parsePatterns[o]||e.parsePatterns[e.defaultParseWidth],c=Array.isArray(s)?function(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},o=t.match(e.matchPattern);if(!o)return null;var r=o[0],i=t.match(e.parsePattern);if(!i)return null;var a=e.valueCallback?e.valueCallback(i[0]):i[0];return{value:a=n.valueCallback?n.valueCallback(a):a,rest:t.slice(r.length)}}}const sP={code:"zh-CN",formatDistance:G_,formatLong:Y_,formatRelative:rP,localize:{ordinalNumber:function(e,t){var n=Number(e);switch(null==t?void 0:t.unit){case"date":return n.toString()+"日";case"hour":return n.toString()+"时";case"minute":return n.toString()+"分";case"second":return n.toString()+"秒";default:return"第 "+n.toString()}},era:iP({values:{narrow:["前","公元"],abbreviated:["前","公元"],wide:["公元前","公元"]},defaultWidth:"wide"}),quarter:iP({values:{narrow:["1","2","3","4"],abbreviated:["第一季","第二季","第三季","第四季"],wide:["第一季度","第二季度","第三季度","第四季度"]},defaultWidth:"wide",argumentCallback:function(e){return e-1}}),month:iP({values:{narrow:["一","二","三","四","五","六","七","八","九","十","十一","十二"],abbreviated:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],wide:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]},defaultWidth:"wide"}),day:iP({values:{narrow:["日","一","二","三","四","五","六"],short:["日","一","二","三","四","五","六"],abbreviated:["周日","周一","周二","周三","周四","周五","周六"],wide:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]},defaultWidth:"wide"}),dayPeriod:iP({values:{narrow:{am:"上",pm:"下",midnight:"凌晨",noon:"午",morning:"早",afternoon:"下午",evening:"晚",night:"夜"},abbreviated:{am:"上午",pm:"下午",midnight:"凌晨",noon:"中午",morning:"早晨",afternoon:"中午",evening:"晚上",night:"夜间"},wide:{am:"上午",pm:"下午",midnight:"凌晨",noon:"中午",morning:"早晨",afternoon:"中午",evening:"晚上",night:"夜间"}},defaultWidth:"wide",formattingValues:{narrow:{am:"上",pm:"下",midnight:"凌晨",noon:"午",morning:"早",afternoon:"下午",evening:"晚",night:"夜"},abbreviated:{am:"上午",pm:"下午",midnight:"凌晨",noon:"中午",morning:"早晨",afternoon:"中午",evening:"晚上",night:"夜间"},wide:{am:"上午",pm:"下午",midnight:"凌晨",noon:"中午",morning:"早晨",afternoon:"中午",evening:"晚上",night:"夜间"}},defaultFormattingWidth:"wide"})},match:{ordinalNumber:lP({matchPattern:/^(第\s*)?\d+(日|时|分|秒)?/i,parsePattern:/\d+/i,valueCallback:function(e){return parseInt(e,10)}}),era:aP({matchPatterns:{narrow:/^(前)/i,abbreviated:/^(前)/i,wide:/^(公元前|公元)/i},defaultMatchWidth:"wide",parsePatterns:{any:[/^(前)/i,/^(公元)/i]},defaultParseWidth:"any"}),quarter:aP({matchPatterns:{narrow:/^[1234]/i,abbreviated:/^第[一二三四]刻/i,wide:/^第[一二三四]刻钟/i},defaultMatchWidth:"wide",parsePatterns:{any:[/(1|一)/i,/(2|二)/i,/(3|三)/i,/(4|四)/i]},defaultParseWidth:"any",valueCallback:function(e){return e+1}}),month:aP({matchPatterns:{narrow:/^(一|二|三|四|五|六|七|八|九|十[二一])/i,abbreviated:/^(一|二|三|四|五|六|七|八|九|十[二一]|\d|1[12])月/i,wide:/^(一|二|三|四|五|六|七|八|九|十[二一])月/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^一/i,/^二/i,/^三/i,/^四/i,/^五/i,/^六/i,/^七/i,/^八/i,/^九/i,/^十(?!(一|二))/i,/^十一/i,/^十二/i],any:[/^一|1/i,/^二|2/i,/^三|3/i,/^四|4/i,/^五|5/i,/^六|6/i,/^七|7/i,/^八|8/i,/^九|9/i,/^十(?!(一|二))|10/i,/^十一|11/i,/^十二|12/i]},defaultParseWidth:"any"}),day:aP({matchPatterns:{narrow:/^[一二三四五六日]/i,short:/^[一二三四五六日]/i,abbreviated:/^周[一二三四五六日]/i,wide:/^星期[一二三四五六日]/i},defaultMatchWidth:"wide",parsePatterns:{any:[/日/i,/一/i,/二/i,/三/i,/四/i,/五/i,/六/i]},defaultParseWidth:"any"}),dayPeriod:aP({matchPatterns:{any:/^(上午?|下午?|午夜|[中正]午|早上?|下午|晚上?|凌晨|)/i},defaultMatchWidth:"any",parsePatterns:{any:{am:/^上午?/i,pm:/^下午?/i,midnight:/^午夜/i,noon:/^[中正]午/i,morning:/^早上/i,afternoon:/^下午/i,evening:/^晚上?/i,night:/^凌晨/i}},defaultParseWidth:"any"})},options:{weekStartsOn:1,firstWeekContainsDate:4}},cP={name:"zh-CN",locale:sP};var uP={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}};const dP=function(e,t,n){var o,r=uP[e];return o="string"==typeof r?r:1===t?r.one:r.other.replace("{{count}}",t.toString()),null!=n&&n.addSuffix?n.comparison&&n.comparison>0?"in "+o:o+" ago":o};var pP={date:X_({formats:{full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},defaultWidth:"full"}),time:X_({formats:{full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},defaultWidth:"full"}),dateTime:X_({formats:{full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},defaultWidth:"full"})},hP={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"};const fP=function(e,t,n,o){return hP[e]},vP={name:"en-US",locale:{code:"en-US",formatDistance:dP,formatLong:pP,formatRelative:fP,localize:{ordinalNumber:function(e,t){var n=Number(e),o=n%100;if(o>20||o<10)switch(o%10){case 1:return n+"st";case 2:return n+"nd";case 3:return n+"rd"}return n+"th"},era:iP({values:{narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},defaultWidth:"wide"}),quarter:iP({values:{narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},defaultWidth:"wide",argumentCallback:function(e){return e-1}}),month:iP({values:{narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},defaultWidth:"wide"}),day:iP({values:{narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},defaultWidth:"wide"}),dayPeriod:iP({values:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},defaultWidth:"wide",formattingValues:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},defaultFormattingWidth:"wide"})},match:{ordinalNumber:lP({matchPattern:/^(\d+)(th|st|nd|rd)?/i,parsePattern:/\d+/i,valueCallback:function(e){return parseInt(e,10)}}),era:aP({matchPatterns:{narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},defaultMatchWidth:"wide",parsePatterns:{any:[/^b/i,/^(a|c)/i]},defaultParseWidth:"any"}),quarter:aP({matchPatterns:{narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},defaultMatchWidth:"wide",parsePatterns:{any:[/1/i,/2/i,/3/i,/4/i]},defaultParseWidth:"any",valueCallback:function(e){return e+1}}),month:aP({matchPatterns:{narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},defaultParseWidth:"any"}),day:aP({matchPatterns:{narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},defaultParseWidth:"any"}),dayPeriod:aP({matchPatterns:{narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},defaultMatchWidth:"any",parsePatterns:{any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},defaultParseWidth:"any"})},options:{weekStartsOn:0,firstWeekContainsDate:1}}};function mP(e,t){if(void 0!==e.one&&1===t)return e.one;var n=t%10,o=t%100;return 1===n&&11!==o?e.singularNominative.replace("{{count}}",String(t)):n>=2&&n<=4&&(o<10||o>20)?e.singularGenitive.replace("{{count}}",String(t)):e.pluralGenitive.replace("{{count}}",String(t))}function gP(e){return function(t,n){return null!=n&&n.addSuffix?n.comparison&&n.comparison>0?e.future?mP(e.future,t):"через "+mP(e.regular,t):e.past?mP(e.past,t):mP(e.regular,t)+" назад":mP(e.regular,t)}}var bP={lessThanXSeconds:gP({regular:{one:"меньше секунды",singularNominative:"меньше {{count}} секунды",singularGenitive:"меньше {{count}} секунд",pluralGenitive:"меньше {{count}} секунд"},future:{one:"меньше, чем через секунду",singularNominative:"меньше, чем через {{count}} секунду",singularGenitive:"меньше, чем через {{count}} секунды",pluralGenitive:"меньше, чем через {{count}} секунд"}}),xSeconds:gP({regular:{singularNominative:"{{count}} секунда",singularGenitive:"{{count}} секунды",pluralGenitive:"{{count}} секунд"},past:{singularNominative:"{{count}} секунду назад",singularGenitive:"{{count}} секунды назад",pluralGenitive:"{{count}} секунд назад"},future:{singularNominative:"через {{count}} секунду",singularGenitive:"через {{count}} секунды",pluralGenitive:"через {{count}} секунд"}}),halfAMinute:function(e,t){return null!=t&&t.addSuffix?t.comparison&&t.comparison>0?"через полминуты":"полминуты назад":"полминуты"},lessThanXMinutes:gP({regular:{one:"меньше минуты",singularNominative:"меньше {{count}} минуты",singularGenitive:"меньше {{count}} минут",pluralGenitive:"меньше {{count}} минут"},future:{one:"меньше, чем через минуту",singularNominative:"меньше, чем через {{count}} минуту",singularGenitive:"меньше, чем через {{count}} минуты",pluralGenitive:"меньше, чем через {{count}} минут"}}),xMinutes:gP({regular:{singularNominative:"{{count}} минута",singularGenitive:"{{count}} минуты",pluralGenitive:"{{count}} минут"},past:{singularNominative:"{{count}} минуту назад",singularGenitive:"{{count}} минуты назад",pluralGenitive:"{{count}} минут назад"},future:{singularNominative:"через {{count}} минуту",singularGenitive:"через {{count}} минуты",pluralGenitive:"через {{count}} минут"}}),aboutXHours:gP({regular:{singularNominative:"около {{count}} часа",singularGenitive:"около {{count}} часов",pluralGenitive:"около {{count}} часов"},future:{singularNominative:"приблизительно через {{count}} час",singularGenitive:"приблизительно через {{count}} часа",pluralGenitive:"приблизительно через {{count}} часов"}}),xHours:gP({regular:{singularNominative:"{{count}} час",singularGenitive:"{{count}} часа",pluralGenitive:"{{count}} часов"}}),xDays:gP({regular:{singularNominative:"{{count}} день",singularGenitive:"{{count}} дня",pluralGenitive:"{{count}} дней"}}),aboutXWeeks:gP({regular:{singularNominative:"около {{count}} недели",singularGenitive:"около {{count}} недель",pluralGenitive:"около {{count}} недель"},future:{singularNominative:"приблизительно через {{count}} неделю",singularGenitive:"приблизительно через {{count}} недели",pluralGenitive:"приблизительно через {{count}} недель"}}),xWeeks:gP({regular:{singularNominative:"{{count}} неделя",singularGenitive:"{{count}} недели",pluralGenitive:"{{count}} недель"}}),aboutXMonths:gP({regular:{singularNominative:"около {{count}} месяца",singularGenitive:"около {{count}} месяцев",pluralGenitive:"около {{count}} месяцев"},future:{singularNominative:"приблизительно через {{count}} месяц",singularGenitive:"приблизительно через {{count}} месяца",pluralGenitive:"приблизительно через {{count}} месяцев"}}),xMonths:gP({regular:{singularNominative:"{{count}} месяц",singularGenitive:"{{count}} месяца",pluralGenitive:"{{count}} месяцев"}}),aboutXYears:gP({regular:{singularNominative:"около {{count}} года",singularGenitive:"около {{count}} лет",pluralGenitive:"около {{count}} лет"},future:{singularNominative:"приблизительно через {{count}} год",singularGenitive:"приблизительно через {{count}} года",pluralGenitive:"приблизительно через {{count}} лет"}}),xYears:gP({regular:{singularNominative:"{{count}} год",singularGenitive:"{{count}} года",pluralGenitive:"{{count}} лет"}}),overXYears:gP({regular:{singularNominative:"больше {{count}} года",singularGenitive:"больше {{count}} лет",pluralGenitive:"больше {{count}} лет"},future:{singularNominative:"больше, чем через {{count}} год",singularGenitive:"больше, чем через {{count}} года",pluralGenitive:"больше, чем через {{count}} лет"}}),almostXYears:gP({regular:{singularNominative:"почти {{count}} год",singularGenitive:"почти {{count}} года",pluralGenitive:"почти {{count}} лет"},future:{singularNominative:"почти через {{count}} год",singularGenitive:"почти через {{count}} года",pluralGenitive:"почти через {{count}} лет"}})};const yP=function(e,t,n){return bP[e](t,n)};var xP={date:X_({formats:{full:"EEEE, d MMMM y 'г.'",long:"d MMMM y 'г.'",medium:"d MMM y 'г.'",short:"dd.MM.y"},defaultWidth:"full"}),time:X_({formats:{full:"H:mm:ss zzzz",long:"H:mm:ss z",medium:"H:mm:ss",short:"H:mm"},defaultWidth:"full"}),dateTime:X_({formats:{any:"{{date}}, {{time}}"},defaultWidth:"any"})},CP=["воскресенье","понедельник","вторник","среду","четверг","пятницу","субботу"];function wP(e){var t=CP[e];return 2===e?"'во "+t+" в' p":"'в "+t+" в' p"}var kP={lastWeek:function(e,t,n){var o=e.getUTCDay();return tP(e,t,n)?wP(o):function(e){var t=CP[e];switch(e){case 0:return"'в прошлое "+t+" в' p";case 1:case 2:case 4:return"'в прошлый "+t+" в' p";case 3:case 5:case 6:return"'в прошлую "+t+" в' p"}}(o)},yesterday:"'вчера в' p",today:"'сегодня в' p",tomorrow:"'завтра в' p",nextWeek:function(e,t,n){var o=e.getUTCDay();return tP(e,t,n)?wP(o):function(e){var t=CP[e];switch(e){case 0:return"'в следующее "+t+" в' p";case 1:case 2:case 4:return"'в следующий "+t+" в' p";case 3:case 5:case 6:return"'в следующую "+t+" в' p"}}(o)},other:"P"};const SP=function(e,t,n,o){var r=kP[e];return"function"==typeof r?r(t,n,o):r},_P={name:"ru-RU",locale:{code:"ru",formatDistance:yP,formatLong:xP,formatRelative:SP,localize:{ordinalNumber:function(e,t){var n=Number(e),o=null==t?void 0:t.unit;return n+("date"===o?"-е":"week"===o||"minute"===o||"second"===o?"-я":"-й")},era:iP({values:{narrow:["до н.э.","н.э."],abbreviated:["до н. э.","н. э."],wide:["до нашей эры","нашей эры"]},defaultWidth:"wide"}),quarter:iP({values:{narrow:["1","2","3","4"],abbreviated:["1-й кв.","2-й кв.","3-й кв.","4-й кв."],wide:["1-й квартал","2-й квартал","3-й квартал","4-й квартал"]},defaultWidth:"wide",argumentCallback:function(e){return e-1}}),month:iP({values:{narrow:["Я","Ф","М","А","М","И","И","А","С","О","Н","Д"],abbreviated:["янв.","фев.","март","апр.","май","июнь","июль","авг.","сент.","окт.","нояб.","дек."],wide:["январь","февраль","март","апрель","май","июнь","июль","август","сентябрь","октябрь","ноябрь","декабрь"]},defaultWidth:"wide",formattingValues:{narrow:["Я","Ф","М","А","М","И","И","А","С","О","Н","Д"],abbreviated:["янв.","фев.","мар.","апр.","мая","июн.","июл.","авг.","сент.","окт.","нояб.","дек."],wide:["января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря"]},defaultFormattingWidth:"wide"}),day:iP({values:{narrow:["В","П","В","С","Ч","П","С"],short:["вс","пн","вт","ср","чт","пт","сб"],abbreviated:["вск","пнд","втр","срд","чтв","птн","суб"],wide:["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"]},defaultWidth:"wide"}),dayPeriod:iP({values:{narrow:{am:"ДП",pm:"ПП",midnight:"полн.",noon:"полд.",morning:"утро",afternoon:"день",evening:"веч.",night:"ночь"},abbreviated:{am:"ДП",pm:"ПП",midnight:"полн.",noon:"полд.",morning:"утро",afternoon:"день",evening:"веч.",night:"ночь"},wide:{am:"ДП",pm:"ПП",midnight:"полночь",noon:"полдень",morning:"утро",afternoon:"день",evening:"вечер",night:"ночь"}},defaultWidth:"any",formattingValues:{narrow:{am:"ДП",pm:"ПП",midnight:"полн.",noon:"полд.",morning:"утра",afternoon:"дня",evening:"веч.",night:"ночи"},abbreviated:{am:"ДП",pm:"ПП",midnight:"полн.",noon:"полд.",morning:"утра",afternoon:"дня",evening:"веч.",night:"ночи"},wide:{am:"ДП",pm:"ПП",midnight:"полночь",noon:"полдень",morning:"утра",afternoon:"дня",evening:"вечера",night:"ночи"}},defaultFormattingWidth:"wide"})},match:{ordinalNumber:lP({matchPattern:/^(\d+)(-?(е|я|й|ое|ье|ая|ья|ый|ой|ий|ый))?/i,parsePattern:/\d+/i,valueCallback:function(e){return parseInt(e,10)}}),era:aP({matchPatterns:{narrow:/^((до )?н\.?\s?э\.?)/i,abbreviated:/^((до )?н\.?\s?э\.?)/i,wide:/^(до нашей эры|нашей эры|наша эра)/i},defaultMatchWidth:"wide",parsePatterns:{any:[/^д/i,/^н/i]},defaultParseWidth:"any"}),quarter:aP({matchPatterns:{narrow:/^[1234]/i,abbreviated:/^[1234](-?[ыои]?й?)? кв.?/i,wide:/^[1234](-?[ыои]?й?)? квартал/i},defaultMatchWidth:"wide",parsePatterns:{any:[/1/i,/2/i,/3/i,/4/i]},defaultParseWidth:"any",valueCallback:function(e){return e+1}}),month:aP({matchPatterns:{narrow:/^[яфмаисонд]/i,abbreviated:/^(янв|фев|март?|апр|ма[йя]|июн[ья]?|июл[ья]?|авг|сент?|окт|нояб?|дек)\.?/i,wide:/^(январ[ья]|феврал[ья]|марта?|апрел[ья]|ма[йя]|июн[ья]|июл[ья]|августа?|сентябр[ья]|октябр[ья]|октябр[ья]|ноябр[ья]|декабр[ья])/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^я/i,/^ф/i,/^м/i,/^а/i,/^м/i,/^и/i,/^и/i,/^а/i,/^с/i,/^о/i,/^н/i,/^я/i],any:[/^я/i,/^ф/i,/^мар/i,/^ап/i,/^ма[йя]/i,/^июн/i,/^июл/i,/^ав/i,/^с/i,/^о/i,/^н/i,/^д/i]},defaultParseWidth:"any"}),day:aP({matchPatterns:{narrow:/^[впсч]/i,short:/^(вс|во|пн|по|вт|ср|чт|че|пт|пя|сб|су)\.?/i,abbreviated:/^(вск|вос|пнд|пон|втр|вто|срд|сре|чтв|чет|птн|пят|суб).?/i,wide:/^(воскресень[ея]|понедельника?|вторника?|сред[аы]|четверга?|пятниц[аы]|суббот[аы])/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^в/i,/^п/i,/^в/i,/^с/i,/^ч/i,/^п/i,/^с/i],any:[/^в[ос]/i,/^п[он]/i,/^в/i,/^ср/i,/^ч/i,/^п[ят]/i,/^с[уб]/i]},defaultParseWidth:"any"}),dayPeriod:aP({matchPatterns:{narrow:/^([дп]п|полн\.?|полд\.?|утр[оа]|день|дня|веч\.?|ноч[ьи])/i,abbreviated:/^([дп]п|полн\.?|полд\.?|утр[оа]|день|дня|веч\.?|ноч[ьи])/i,wide:/^([дп]п|полночь|полдень|утр[оа]|день|дня|вечера?|ноч[ьи])/i},defaultMatchWidth:"wide",parsePatterns:{any:{am:/^дп/i,pm:/^пп/i,midnight:/^полн/i,noon:/^полд/i,morning:/^у/i,afternoon:/^д[ен]/i,evening:/^в/i,night:/^н/i}},defaultParseWidth:"any"})},options:{weekStartsOn:1,firstWeekContainsDate:1}}};var PP={lessThanXSeconds:{one:"1秒未満",other:"{{count}}秒未満",oneWithSuffix:"約1秒",otherWithSuffix:"約{{count}}秒"},xSeconds:{one:"1秒",other:"{{count}}秒"},halfAMinute:"30秒",lessThanXMinutes:{one:"1分未満",other:"{{count}}分未満",oneWithSuffix:"約1分",otherWithSuffix:"約{{count}}分"},xMinutes:{one:"1分",other:"{{count}}分"},aboutXHours:{one:"約1時間",other:"約{{count}}時間"},xHours:{one:"1時間",other:"{{count}}時間"},xDays:{one:"1日",other:"{{count}}日"},aboutXWeeks:{one:"約1週間",other:"約{{count}}週間"},xWeeks:{one:"1週間",other:"{{count}}週間"},aboutXMonths:{one:"約1か月",other:"約{{count}}か月"},xMonths:{one:"1か月",other:"{{count}}か月"},aboutXYears:{one:"約1年",other:"約{{count}}年"},xYears:{one:"1年",other:"{{count}}年"},overXYears:{one:"1年以上",other:"{{count}}年以上"},almostXYears:{one:"1年近く",other:"{{count}}年近く"}};const TP=function(e,t,n){var o;n=n||{};var r=PP[e];return o="string"==typeof r?r:1===t?n.addSuffix&&r.oneWithSuffix?r.oneWithSuffix:r.one:n.addSuffix&&r.otherWithSuffix?r.otherWithSuffix.replace("{{count}}",String(t)):r.other.replace("{{count}}",String(t)),n.addSuffix?n.comparison&&n.comparison>0?o+"後":o+"前":o};var AP={date:X_({formats:{full:"y年M月d日EEEE",long:"y年M月d日",medium:"y/MM/dd",short:"y/MM/dd"},defaultWidth:"full"}),time:X_({formats:{full:"H時mm分ss秒 zzzz",long:"H:mm:ss z",medium:"H:mm:ss",short:"H:mm"},defaultWidth:"full"}),dateTime:X_({formats:{full:"{{date}} {{time}}",long:"{{date}} {{time}}",medium:"{{date}} {{time}}",short:"{{date}} {{time}}"},defaultWidth:"full"})},zP={lastWeek:"先週のeeeeのp",yesterday:"昨日のp",today:"今日のp",tomorrow:"明日のp",nextWeek:"翌週のeeeeのp",other:"P"};const RP=function(e,t,n,o){return zP[e]},EP={name:"ja-JP",locale:{code:"ja",formatDistance:TP,formatLong:AP,formatRelative:RP,localize:{ordinalNumber:function(e,t){var n=Number(e);switch(String(null==t?void 0:t.unit)){case"year":return"".concat(n,"年");case"quarter":return"第".concat(n,"四半期");case"month":return"".concat(n,"月");case"week":return"第".concat(n,"週");case"date":return"".concat(n,"日");case"hour":return"".concat(n,"時");case"minute":return"".concat(n,"分");case"second":return"".concat(n,"秒");default:return"".concat(n)}},era:iP({values:{narrow:["BC","AC"],abbreviated:["紀元前","西暦"],wide:["紀元前","西暦"]},defaultWidth:"wide"}),quarter:iP({values:{narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["第1四半期","第2四半期","第3四半期","第4四半期"]},defaultWidth:"wide",argumentCallback:function(e){return Number(e)-1}}),month:iP({values:{narrow:["1","2","3","4","5","6","7","8","9","10","11","12"],abbreviated:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],wide:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"]},defaultWidth:"wide"}),day:iP({values:{narrow:["日","月","火","水","木","金","土"],short:["日","月","火","水","木","金","土"],abbreviated:["日","月","火","水","木","金","土"],wide:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"]},defaultWidth:"wide"}),dayPeriod:iP({values:{narrow:{am:"午前",pm:"午後",midnight:"深夜",noon:"正午",morning:"朝",afternoon:"午後",evening:"夜",night:"深夜"},abbreviated:{am:"午前",pm:"午後",midnight:"深夜",noon:"正午",morning:"朝",afternoon:"午後",evening:"夜",night:"深夜"},wide:{am:"午前",pm:"午後",midnight:"深夜",noon:"正午",morning:"朝",afternoon:"午後",evening:"夜",night:"深夜"}},defaultWidth:"wide",formattingValues:{narrow:{am:"午前",pm:"午後",midnight:"深夜",noon:"正午",morning:"朝",afternoon:"午後",evening:"夜",night:"深夜"},abbreviated:{am:"午前",pm:"午後",midnight:"深夜",noon:"正午",morning:"朝",afternoon:"午後",evening:"夜",night:"深夜"},wide:{am:"午前",pm:"午後",midnight:"深夜",noon:"正午",morning:"朝",afternoon:"午後",evening:"夜",night:"深夜"}},defaultFormattingWidth:"wide"})},match:{ordinalNumber:lP({matchPattern:/^第?\d+(年|四半期|月|週|日|時|分|秒)?/i,parsePattern:/\d+/i,valueCallback:function(e){return parseInt(e,10)}}),era:aP({matchPatterns:{narrow:/^(B\.?C\.?|A\.?D\.?)/i,abbreviated:/^(紀元[前後]|西暦)/i,wide:/^(紀元[前後]|西暦)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^B/i,/^A/i],any:[/^(紀元前)/i,/^(西暦|紀元後)/i]},defaultParseWidth:"any"}),quarter:aP({matchPatterns:{narrow:/^[1234]/i,abbreviated:/^Q[1234]/i,wide:/^第[1234一二三四1234]四半期/i},defaultMatchWidth:"wide",parsePatterns:{any:[/(1|一|1)/i,/(2|二|2)/i,/(3|三|3)/i,/(4|四|4)/i]},defaultParseWidth:"any",valueCallback:function(e){return e+1}}),month:aP({matchPatterns:{narrow:/^([123456789]|1[012])/,abbreviated:/^([123456789]|1[012])月/i,wide:/^([123456789]|1[012])月/i},defaultMatchWidth:"wide",parsePatterns:{any:[/^1\D/,/^2/,/^3/,/^4/,/^5/,/^6/,/^7/,/^8/,/^9/,/^10/,/^11/,/^12/]},defaultParseWidth:"any"}),day:aP({matchPatterns:{narrow:/^[日月火水木金土]/,short:/^[日月火水木金土]/,abbreviated:/^[日月火水木金土]/,wide:/^[日月火水木金土]曜日/},defaultMatchWidth:"wide",parsePatterns:{any:[/^日/,/^月/,/^火/,/^水/,/^木/,/^金/,/^土/]},defaultParseWidth:"any"}),dayPeriod:aP({matchPatterns:{any:/^(AM|PM|午前|午後|正午|深夜|真夜中|夜|朝)/i},defaultMatchWidth:"any",parsePatterns:{any:{am:/^(A|午前)/i,pm:/^(P|午後)/i,midnight:/^深夜|真夜中/i,noon:/^正午/i,morning:/^朝/i,afternoon:/^午後/i,evening:/^夜/i,night:/^深夜/i}},defaultParseWidth:"any"})},options:{weekStartsOn:0,firstWeekContainsDate:1}}};var OP={lessThanXSeconds:{one:"1초 미만",other:"{{count}}초 미만"},xSeconds:{one:"1초",other:"{{count}}초"},halfAMinute:"30초",lessThanXMinutes:{one:"1분 미만",other:"{{count}}분 미만"},xMinutes:{one:"1분",other:"{{count}}분"},aboutXHours:{one:"약 1시간",other:"약 {{count}}시간"},xHours:{one:"1시간",other:"{{count}}시간"},xDays:{one:"1일",other:"{{count}}일"},aboutXWeeks:{one:"약 1주",other:"약 {{count}}주"},xWeeks:{one:"1주",other:"{{count}}주"},aboutXMonths:{one:"약 1개월",other:"약 {{count}}개월"},xMonths:{one:"1개월",other:"{{count}}개월"},aboutXYears:{one:"약 1년",other:"약 {{count}}년"},xYears:{one:"1년",other:"{{count}}년"},overXYears:{one:"1년 이상",other:"{{count}}년 이상"},almostXYears:{one:"거의 1년",other:"거의 {{count}}년"}};const MP=function(e,t,n){var o,r=OP[e];return o="string"==typeof r?r:1===t?r.one:r.other.replace("{{count}}",t.toString()),null!=n&&n.addSuffix?n.comparison&&n.comparison>0?o+" 후":o+" 전":o};var FP={date:X_({formats:{full:"y년 M월 d일 EEEE",long:"y년 M월 d일",medium:"y.MM.dd",short:"y.MM.dd"},defaultWidth:"full"}),time:X_({formats:{full:"a H시 mm분 ss초 zzzz",long:"a H:mm:ss z",medium:"HH:mm:ss",short:"HH:mm"},defaultWidth:"full"}),dateTime:X_({formats:{full:"{{date}} {{time}}",long:"{{date}} {{time}}",medium:"{{date}} {{time}}",short:"{{date}} {{time}}"},defaultWidth:"full"})},IP={lastWeek:"'지난' eeee p",yesterday:"'어제' p",today:"'오늘' p",tomorrow:"'내일' p",nextWeek:"'다음' eeee p",other:"P"};const LP=function(e,t,n,o){return IP[e]},BP={name:"ko-KR",locale:{code:"ko",formatDistance:MP,formatLong:FP,formatRelative:LP,localize:{ordinalNumber:function(e,t){var n=Number(e);switch(String(null==t?void 0:t.unit)){case"minute":case"second":return String(n);case"date":return n+"일";default:return n+"번째"}},era:iP({values:{narrow:["BC","AD"],abbreviated:["BC","AD"],wide:["기원전","서기"]},defaultWidth:"wide"}),quarter:iP({values:{narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1분기","2분기","3분기","4분기"]},defaultWidth:"wide",argumentCallback:function(e){return e-1}}),month:iP({values:{narrow:["1","2","3","4","5","6","7","8","9","10","11","12"],abbreviated:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],wide:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"]},defaultWidth:"wide"}),day:iP({values:{narrow:["일","월","화","수","목","금","토"],short:["일","월","화","수","목","금","토"],abbreviated:["일","월","화","수","목","금","토"],wide:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"]},defaultWidth:"wide"}),dayPeriod:iP({values:{narrow:{am:"오전",pm:"오후",midnight:"자정",noon:"정오",morning:"아침",afternoon:"오후",evening:"저녁",night:"밤"},abbreviated:{am:"오전",pm:"오후",midnight:"자정",noon:"정오",morning:"아침",afternoon:"오후",evening:"저녁",night:"밤"},wide:{am:"오전",pm:"오후",midnight:"자정",noon:"정오",morning:"아침",afternoon:"오후",evening:"저녁",night:"밤"}},defaultWidth:"wide",formattingValues:{narrow:{am:"오전",pm:"오후",midnight:"자정",noon:"정오",morning:"아침",afternoon:"오후",evening:"저녁",night:"밤"},abbreviated:{am:"오전",pm:"오후",midnight:"자정",noon:"정오",morning:"아침",afternoon:"오후",evening:"저녁",night:"밤"},wide:{am:"오전",pm:"오후",midnight:"자정",noon:"정오",morning:"아침",afternoon:"오후",evening:"저녁",night:"밤"}},defaultFormattingWidth:"wide"})},match:{ordinalNumber:lP({matchPattern:/^(\d+)(일|번째)?/i,parsePattern:/\d+/i,valueCallback:function(e){return parseInt(e,10)}}),era:aP({matchPatterns:{narrow:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(기원전|서기)/i},defaultMatchWidth:"wide",parsePatterns:{any:[/^(bc|기원전)/i,/^(ad|서기)/i]},defaultParseWidth:"any"}),quarter:aP({matchPatterns:{narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234]사?분기/i},defaultMatchWidth:"wide",parsePatterns:{any:[/1/i,/2/i,/3/i,/4/i]},defaultParseWidth:"any",valueCallback:function(e){return e+1}}),month:aP({matchPatterns:{narrow:/^(1[012]|[123456789])/,abbreviated:/^(1[012]|[123456789])월/i,wide:/^(1[012]|[123456789])월/i},defaultMatchWidth:"wide",parsePatterns:{any:[/^1월?$/,/^2/,/^3/,/^4/,/^5/,/^6/,/^7/,/^8/,/^9/,/^10/,/^11/,/^12/]},defaultParseWidth:"any"}),day:aP({matchPatterns:{narrow:/^[일월화수목금토]/,short:/^[일월화수목금토]/,abbreviated:/^[일월화수목금토]/,wide:/^[일월화수목금토]요일/},defaultMatchWidth:"wide",parsePatterns:{any:[/^일/,/^월/,/^화/,/^수/,/^목/,/^금/,/^토/]},defaultParseWidth:"any"}),dayPeriod:aP({matchPatterns:{any:/^(am|pm|오전|오후|자정|정오|아침|저녁|밤)/i},defaultMatchWidth:"any",parsePatterns:{any:{am:/^(am|오전)/i,pm:/^(pm|오후)/i,midnight:/^자정/i,noon:/^정오/i,morning:/^아침/i,afternoon:/^오후/i,evening:/^저녁/i,night:/^밤/i}},defaultParseWidth:"any"})},options:{weekStartsOn:0,firstWeekContainsDate:1}}};var DP={lessThanXSeconds:{one:"dưới 1 giây",other:"dưới {{count}} giây"},xSeconds:{one:"1 giây",other:"{{count}} giây"},halfAMinute:"nửa phút",lessThanXMinutes:{one:"dưới 1 phút",other:"dưới {{count}} phút"},xMinutes:{one:"1 phút",other:"{{count}} phút"},aboutXHours:{one:"khoảng 1 giờ",other:"khoảng {{count}} giờ"},xHours:{one:"1 giờ",other:"{{count}} giờ"},xDays:{one:"1 ngày",other:"{{count}} ngày"},aboutXWeeks:{one:"khoảng 1 tuần",other:"khoảng {{count}} tuần"},xWeeks:{one:"1 tuần",other:"{{count}} tuần"},aboutXMonths:{one:"khoảng 1 tháng",other:"khoảng {{count}} tháng"},xMonths:{one:"1 tháng",other:"{{count}} tháng"},aboutXYears:{one:"khoảng 1 năm",other:"khoảng {{count}} năm"},xYears:{one:"1 năm",other:"{{count}} năm"},overXYears:{one:"hơn 1 năm",other:"hơn {{count}} năm"},almostXYears:{one:"gần 1 năm",other:"gần {{count}} năm"}};const $P=function(e,t,n){var o,r=DP[e];return o="string"==typeof r?r:1===t?r.one:r.other.replace("{{count}}",String(t)),null!=n&&n.addSuffix?n.comparison&&n.comparison>0?o+" nữa":o+" trước":o};var NP={date:X_({formats:{full:"EEEE, 'ngày' d MMMM 'năm' y",long:"'ngày' d MMMM 'năm' y",medium:"d MMM 'năm' y",short:"dd/MM/y"},defaultWidth:"full"}),time:X_({formats:{full:"HH:mm:ss zzzz",long:"HH:mm:ss z",medium:"HH:mm:ss",short:"HH:mm"},defaultWidth:"full"}),dateTime:X_({formats:{full:"{{date}} {{time}}",long:"{{date}} {{time}}",medium:"{{date}} {{time}}",short:"{{date}} {{time}}"},defaultWidth:"full"})},jP={lastWeek:"eeee 'tuần trước vào lúc' p",yesterday:"'hôm qua vào lúc' p",today:"'hôm nay vào lúc' p",tomorrow:"'ngày mai vào lúc' p",nextWeek:"eeee 'tới vào lúc' p",other:"P"};const HP=function(e,t,n,o){return jP[e]},WP={name:"vi-VN",locale:{code:"vi",formatDistance:$P,formatLong:NP,formatRelative:HP,localize:{ordinalNumber:function(e,t){var n=Number(e),o=null==t?void 0:t.unit;if("quarter"===o)switch(n){case 1:return"I";case 2:return"II";case 3:return"III";case 4:return"IV"}else if("day"===o)switch(n){case 1:return"thứ 2";case 2:return"thứ 3";case 3:return"thứ 4";case 4:return"thứ 5";case 5:return"thứ 6";case 6:return"thứ 7";case 7:return"chủ nhật"}else{if("week"===o)return 1===n?"thứ nhất":"thứ "+n;if("dayOfYear"===o)return 1===n?"đầu tiên":"thứ "+n}return String(n)},era:iP({values:{narrow:["TCN","SCN"],abbreviated:["trước CN","sau CN"],wide:["trước Công Nguyên","sau Công Nguyên"]},defaultWidth:"wide"}),quarter:iP({values:{narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["Quý 1","Quý 2","Quý 3","Quý 4"]},defaultWidth:"wide",formattingValues:{narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["quý I","quý II","quý III","quý IV"]},defaultFormattingWidth:"wide",argumentCallback:function(e){return e-1}}),month:iP({values:{narrow:["1","2","3","4","5","6","7","8","9","10","11","12"],abbreviated:["Thg 1","Thg 2","Thg 3","Thg 4","Thg 5","Thg 6","Thg 7","Thg 8","Thg 9","Thg 10","Thg 11","Thg 12"],wide:["Tháng Một","Tháng Hai","Tháng Ba","Tháng Tư","Tháng Năm","Tháng Sáu","Tháng Bảy","Tháng Tám","Tháng Chín","Tháng Mười","Tháng Mười Một","Tháng Mười Hai"]},defaultWidth:"wide",formattingValues:{narrow:["01","02","03","04","05","06","07","08","09","10","11","12"],abbreviated:["thg 1","thg 2","thg 3","thg 4","thg 5","thg 6","thg 7","thg 8","thg 9","thg 10","thg 11","thg 12"],wide:["tháng 01","tháng 02","tháng 03","tháng 04","tháng 05","tháng 06","tháng 07","tháng 08","tháng 09","tháng 10","tháng 11","tháng 12"]},defaultFormattingWidth:"wide"}),day:iP({values:{narrow:["CN","T2","T3","T4","T5","T6","T7"],short:["CN","Th 2","Th 3","Th 4","Th 5","Th 6","Th 7"],abbreviated:["CN","Thứ 2","Thứ 3","Thứ 4","Thứ 5","Thứ 6","Thứ 7"],wide:["Chủ Nhật","Thứ Hai","Thứ Ba","Thứ Tư","Thứ Năm","Thứ Sáu","Thứ Bảy"]},defaultWidth:"wide"}),dayPeriod:iP({values:{narrow:{am:"am",pm:"pm",midnight:"nửa đêm",noon:"tr",morning:"sg",afternoon:"ch",evening:"tối",night:"đêm"},abbreviated:{am:"AM",pm:"PM",midnight:"nửa đêm",noon:"trưa",morning:"sáng",afternoon:"chiều",evening:"tối",night:"đêm"},wide:{am:"SA",pm:"CH",midnight:"nửa đêm",noon:"trưa",morning:"sáng",afternoon:"chiều",evening:"tối",night:"đêm"}},defaultWidth:"wide",formattingValues:{narrow:{am:"am",pm:"pm",midnight:"nửa đêm",noon:"tr",morning:"sg",afternoon:"ch",evening:"tối",night:"đêm"},abbreviated:{am:"AM",pm:"PM",midnight:"nửa đêm",noon:"trưa",morning:"sáng",afternoon:"chiều",evening:"tối",night:"đêm"},wide:{am:"SA",pm:"CH",midnight:"nửa đêm",noon:"giữa trưa",morning:"vào buổi sáng",afternoon:"vào buổi chiều",evening:"vào buổi tối",night:"vào ban đêm"}},defaultFormattingWidth:"wide"})},match:{ordinalNumber:lP({matchPattern:/^(\d+)/i,parsePattern:/\d+/i,valueCallback:function(e){return parseInt(e,10)}}),era:aP({matchPatterns:{narrow:/^(tcn|scn)/i,abbreviated:/^(trước CN|sau CN)/i,wide:/^(trước Công Nguyên|sau Công Nguyên)/i},defaultMatchWidth:"wide",parsePatterns:{any:[/^t/i,/^s/i]},defaultParseWidth:"any"}),quarter:aP({matchPatterns:{narrow:/^([1234]|i{1,3}v?)/i,abbreviated:/^q([1234]|i{1,3}v?)/i,wide:/^quý ([1234]|i{1,3}v?)/i},defaultMatchWidth:"wide",parsePatterns:{any:[/(1|i)$/i,/(2|ii)$/i,/(3|iii)$/i,/(4|iv)$/i]},defaultParseWidth:"any",valueCallback:function(e){return e+1}}),month:aP({matchPatterns:{narrow:/^(0?[2-9]|10|11|12|0?1)/i,abbreviated:/^thg[ _]?(0?[1-9](?!\d)|10|11|12)/i,wide:/^tháng ?(Một|Hai|Ba|Tư|Năm|Sáu|Bảy|Tám|Chín|Mười|Mười ?Một|Mười ?Hai|0?[1-9](?!\d)|10|11|12)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/0?1$/i,/0?2/i,/3/,/4/,/5/,/6/,/7/,/8/,/9/,/10/,/11/,/12/],abbreviated:[/^thg[ _]?0?1(?!\d)/i,/^thg[ _]?0?2/i,/^thg[ _]?0?3/i,/^thg[ _]?0?4/i,/^thg[ _]?0?5/i,/^thg[ _]?0?6/i,/^thg[ _]?0?7/i,/^thg[ _]?0?8/i,/^thg[ _]?0?9/i,/^thg[ _]?10/i,/^thg[ _]?11/i,/^thg[ _]?12/i],wide:[/^tháng ?(Một|0?1(?!\d))/i,/^tháng ?(Hai|0?2)/i,/^tháng ?(Ba|0?3)/i,/^tháng ?(Tư|0?4)/i,/^tháng ?(Năm|0?5)/i,/^tháng ?(Sáu|0?6)/i,/^tháng ?(Bảy|0?7)/i,/^tháng ?(Tám|0?8)/i,/^tháng ?(Chín|0?9)/i,/^tháng ?(Mười|10)/i,/^tháng ?(Mười ?Một|11)/i,/^tháng ?(Mười ?Hai|12)/i]},defaultParseWidth:"wide"}),day:aP({matchPatterns:{narrow:/^(CN|T2|T3|T4|T5|T6|T7)/i,short:/^(CN|Th ?2|Th ?3|Th ?4|Th ?5|Th ?6|Th ?7)/i,abbreviated:/^(CN|Th ?2|Th ?3|Th ?4|Th ?5|Th ?6|Th ?7)/i,wide:/^(Chủ ?Nhật|Chúa ?Nhật|thứ ?Hai|thứ ?Ba|thứ ?Tư|thứ ?Năm|thứ ?Sáu|thứ ?Bảy)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/CN/i,/2/i,/3/i,/4/i,/5/i,/6/i,/7/i],short:[/CN/i,/2/i,/3/i,/4/i,/5/i,/6/i,/7/i],abbreviated:[/CN/i,/2/i,/3/i,/4/i,/5/i,/6/i,/7/i],wide:[/(Chủ|Chúa) ?Nhật/i,/Hai/i,/Ba/i,/Tư/i,/Năm/i,/Sáu/i,/Bảy/i]},defaultParseWidth:"wide"}),dayPeriod:aP({matchPatterns:{narrow:/^(a|p|nửa đêm|trưa|(giờ) (sáng|chiều|tối|đêm))/i,abbreviated:/^(am|pm|nửa đêm|trưa|(giờ) (sáng|chiều|tối|đêm))/i,wide:/^(ch[^i]*|sa|nửa đêm|trưa|(giờ) (sáng|chiều|tối|đêm))/i},defaultMatchWidth:"wide",parsePatterns:{any:{am:/^(a|sa)/i,pm:/^(p|ch[^i]*)/i,midnight:/nửa đêm/i,noon:/trưa/i,morning:/sáng/i,afternoon:/chiều/i,evening:/tối/i,night:/^đêm/i}},defaultParseWidth:"any"})},options:{weekStartsOn:1,firstWeekContainsDate:1}}},UP={name:"fa-IR",locale:sP};function VP(e){const{mergedLocaleRef:t,mergedDateLocaleRef:n}=Po(M_,null)||{},o=ai((()=>{var n,o;return null!==(o=null===(n=null==t?void 0:t.value)||void 0===n?void 0:n[e])&&void 0!==o?o:j_[e]})),r=ai((()=>{var e;return null!==(e=null==n?void 0:n.value)&&void 0!==e?e:vP}));return{dateLocaleRef:r,localeRef:o}}function qP(e,t,n){if(!t)return;const o=by(),r=Po(M_,null),i=()=>{const i=n.value;t.mount({id:void 0===i?e:i+e,head:!0,anchorMetaName:F_,props:{bPrefix:i?`.${i}-`:void 0},ssr:o}),(null==r?void 0:r.preflightStyleDisabled)||O_.mount({id:"n-global",head:!0,anchorMetaName:F_,ssr:o})};o?i():Dn(i)}function KP(e,t,n,o){var r;n||fg("useThemeClass","cssVarsRef is not passed");const i=null===(r=Po(M_,null))||void 0===r?void 0:r.mergedThemeHashRef,a=Et(""),l=by();let s;const c=`__${e}`;return ir((()=>{(()=>{let e=c;const r=t?t.value:void 0,u=null==i?void 0:i.value;u&&(e+=`-${u}`),r&&(e+=`-${r}`);const{themeOverrides:d,builtinThemeOverrides:p}=o;d&&(e+=`-${Wg(JSON.stringify(d))}`),p&&(e+=`-${Wg(JSON.stringify(p))}`),a.value=e,s=()=>{const t=n.value;let o="";for(const e in t)o+=`${e}: ${t[e]};`;eb(`.${e}`,o).mount({id:e,ssr:l}),s=void 0}})()})),{themeClass:a,onRender:()=>{null==s||s()}}}function GP(e,t,n){if(!t)return;const o=by(),r=ai((()=>{const{value:n}=t;if(!n)return;const o=n[e];return o||void 0})),i=()=>{ir((()=>{const{value:t}=n,i=`${t}${e}Rtl`;if(function(e,t){if(void 0===e)return!1;if(t){const{context:{ids:n}}=t;return n.has(e)}return null!==Ig(e)}(i,o))return;const{value:a}=r;a&&a.style.mount({id:i,head:!0,anchorMetaName:F_,props:{bPrefix:t?`.${t}-`:void 0},ssr:o})}))};return o?i():Dn(i),r}const XP=zn({name:"Add",render:()=>li("svg",{width:"512",height:"512",viewBox:"0 0 512 512",fill:"none",xmlns:"http://www.w3.org/2000/svg"},li("path",{d:"M256 112V400M400 256H112",stroke:"currentColor","stroke-width":"32","stroke-linecap":"round","stroke-linejoin":"round"}))}),YP=zn({name:"ArrowDown",render:()=>li("svg",{viewBox:"0 0 28 28",version:"1.1",xmlns:"http://www.w3.org/2000/svg"},li("g",{stroke:"none","stroke-width":"1","fill-rule":"evenodd"},li("g",{"fill-rule":"nonzero"},li("path",{d:"M23.7916,15.2664 C24.0788,14.9679 24.0696,14.4931 23.7711,14.206 C23.4726,13.9188 22.9978,13.928 22.7106,14.2265 L14.7511,22.5007 L14.7511,3.74792 C14.7511,3.33371 14.4153,2.99792 14.0011,2.99792 C13.5869,2.99792 13.2511,3.33371 13.2511,3.74793 L13.2511,22.4998 L5.29259,14.2265 C5.00543,13.928 4.53064,13.9188 4.23213,14.206 C3.93361,14.4931 3.9244,14.9679 4.21157,15.2664 L13.2809,24.6944 C13.6743,25.1034 14.3289,25.1034 14.7223,24.6944 L23.7916,15.2664 Z"}))))});function QP(e,t){return zn({name:Ik(e),setup(){var n;const o=null===(n=Po(M_,null))||void 0===n?void 0:n.mergedIconsRef;return()=>{var n;const r=null===(n=null==o?void 0:o.value)||void 0===n?void 0:n[e];return r?r():t}}})}const ZP=zn({name:"Backward",render:()=>li("svg",{viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg"},li("path",{d:"M12.2674 15.793C11.9675 16.0787 11.4927 16.0672 11.2071 15.7673L6.20572 10.5168C5.9298 10.2271 5.9298 9.7719 6.20572 9.48223L11.2071 4.23177C11.4927 3.93184 11.9675 3.92031 12.2674 4.206C12.5673 4.49169 12.5789 4.96642 12.2932 5.26634L7.78458 9.99952L12.2932 14.7327C12.5789 15.0326 12.5673 15.5074 12.2674 15.793Z",fill:"currentColor"}))}),JP=zn({name:"Checkmark",render:()=>li("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16"},li("g",{fill:"none"},li("path",{d:"M14.046 3.486a.75.75 0 0 1-.032 1.06l-7.93 7.474a.85.85 0 0 1-1.188-.022l-2.68-2.72a.75.75 0 1 1 1.068-1.053l2.234 2.267l7.468-7.038a.75.75 0 0 1 1.06.032z",fill:"currentColor"})))}),eT=zn({name:"ChevronRight",render:()=>li("svg",{viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},li("path",{d:"M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z",fill:"currentColor"}))}),tT=QP("close",li("svg",{viewBox:"0 0 12 12",version:"1.1",xmlns:"http://www.w3.org/2000/svg","aria-hidden":!0},li("g",{stroke:"none","stroke-width":"1",fill:"none","fill-rule":"evenodd"},li("g",{fill:"currentColor","fill-rule":"nonzero"},li("path",{d:"M2.08859116,2.2156945 L2.14644661,2.14644661 C2.32001296,1.97288026 2.58943736,1.95359511 2.7843055,2.08859116 L2.85355339,2.14644661 L6,5.293 L9.14644661,2.14644661 C9.34170876,1.95118446 9.65829124,1.95118446 9.85355339,2.14644661 C10.0488155,2.34170876 10.0488155,2.65829124 9.85355339,2.85355339 L6.707,6 L9.85355339,9.14644661 C10.0271197,9.32001296 10.0464049,9.58943736 9.91140884,9.7843055 L9.85355339,9.85355339 C9.67998704,10.0271197 9.41056264,10.0464049 9.2156945,9.91140884 L9.14644661,9.85355339 L6,6.707 L2.85355339,9.85355339 C2.65829124,10.0488155 2.34170876,10.0488155 2.14644661,9.85355339 C1.95118446,9.65829124 1.95118446,9.34170876 2.14644661,9.14644661 L5.293,6 L2.14644661,2.85355339 C1.97288026,2.67998704 1.95359511,2.41056264 2.08859116,2.2156945 L2.14644661,2.14644661 L2.08859116,2.2156945 Z"}))))),nT=zn({name:"Eye",render:()=>li("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},li("path",{d:"M255.66 112c-77.94 0-157.89 45.11-220.83 135.33a16 16 0 0 0-.27 17.77C82.92 340.8 161.8 400 255.66 400c92.84 0 173.34-59.38 221.79-135.25a16.14 16.14 0 0 0 0-17.47C428.89 172.28 347.8 112 255.66 112z",fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"32"}),li("circle",{cx:"256",cy:"256",r:"80",fill:"none",stroke:"currentColor","stroke-miterlimit":"10","stroke-width":"32"}))}),oT=zn({name:"EyeOff",render:()=>li("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},li("path",{d:"M432 448a15.92 15.92 0 0 1-11.31-4.69l-352-352a16 16 0 0 1 22.62-22.62l352 352A16 16 0 0 1 432 448z",fill:"currentColor"}),li("path",{d:"M255.66 384c-41.49 0-81.5-12.28-118.92-36.5c-34.07-22-64.74-53.51-88.7-91v-.08c19.94-28.57 41.78-52.73 65.24-72.21a2 2 0 0 0 .14-2.94L93.5 161.38a2 2 0 0 0-2.71-.12c-24.92 21-48.05 46.76-69.08 76.92a31.92 31.92 0 0 0-.64 35.54c26.41 41.33 60.4 76.14 98.28 100.65C162 402 207.9 416 255.66 416a239.13 239.13 0 0 0 75.8-12.58a2 2 0 0 0 .77-3.31l-21.58-21.58a4 4 0 0 0-3.83-1a204.8 204.8 0 0 1-51.16 6.47z",fill:"currentColor"}),li("path",{d:"M490.84 238.6c-26.46-40.92-60.79-75.68-99.27-100.53C349 110.55 302 96 255.66 96a227.34 227.34 0 0 0-74.89 12.83a2 2 0 0 0-.75 3.31l21.55 21.55a4 4 0 0 0 3.88 1a192.82 192.82 0 0 1 50.21-6.69c40.69 0 80.58 12.43 118.55 37c34.71 22.4 65.74 53.88 89.76 91a.13.13 0 0 1 0 .16a310.72 310.72 0 0 1-64.12 72.73a2 2 0 0 0-.15 2.95l19.9 19.89a2 2 0 0 0 2.7.13a343.49 343.49 0 0 0 68.64-78.48a32.2 32.2 0 0 0-.1-34.78z",fill:"currentColor"}),li("path",{d:"M256 160a95.88 95.88 0 0 0-21.37 2.4a2 2 0 0 0-1 3.38l112.59 112.56a2 2 0 0 0 3.38-1A96 96 0 0 0 256 160z",fill:"currentColor"}),li("path",{d:"M165.78 233.66a2 2 0 0 0-3.38 1a96 96 0 0 0 115 115a2 2 0 0 0 1-3.38z",fill:"currentColor"}))}),rT=zn({name:"Empty",render:()=>li("svg",{viewBox:"0 0 28 28",fill:"none",xmlns:"http://www.w3.org/2000/svg"},li("path",{d:"M26 7.5C26 11.0899 23.0899 14 19.5 14C15.9101 14 13 11.0899 13 7.5C13 3.91015 15.9101 1 19.5 1C23.0899 1 26 3.91015 26 7.5ZM16.8536 4.14645C16.6583 3.95118 16.3417 3.95118 16.1464 4.14645C15.9512 4.34171 15.9512 4.65829 16.1464 4.85355L18.7929 7.5L16.1464 10.1464C15.9512 10.3417 15.9512 10.6583 16.1464 10.8536C16.3417 11.0488 16.6583 11.0488 16.8536 10.8536L19.5 8.20711L22.1464 10.8536C22.3417 11.0488 22.6583 11.0488 22.8536 10.8536C23.0488 10.6583 23.0488 10.3417 22.8536 10.1464L20.2071 7.5L22.8536 4.85355C23.0488 4.65829 23.0488 4.34171 22.8536 4.14645C22.6583 3.95118 22.3417 3.95118 22.1464 4.14645L19.5 6.79289L16.8536 4.14645Z",fill:"currentColor"}),li("path",{d:"M25 22.75V12.5991C24.5572 13.0765 24.053 13.4961 23.5 13.8454V16H17.5L17.3982 16.0068C17.0322 16.0565 16.75 16.3703 16.75 16.75C16.75 18.2688 15.5188 19.5 14 19.5C12.4812 19.5 11.25 18.2688 11.25 16.75L11.2432 16.6482C11.1935 16.2822 10.8797 16 10.5 16H4.5V7.25C4.5 6.2835 5.2835 5.5 6.25 5.5H12.2696C12.4146 4.97463 12.6153 4.47237 12.865 4H6.25C4.45507 4 3 5.45507 3 7.25V22.75C3 24.5449 4.45507 26 6.25 26H21.75C23.5449 26 25 24.5449 25 22.75ZM4.5 22.75V17.5H9.81597L9.85751 17.7041C10.2905 19.5919 11.9808 21 14 21L14.215 20.9947C16.2095 20.8953 17.842 19.4209 18.184 17.5H23.5V22.75C23.5 23.7165 22.7165 24.5 21.75 24.5H6.25C5.2835 24.5 4.5 23.7165 4.5 22.75Z",fill:"currentColor"}))}),iT=QP("error",li("svg",{viewBox:"0 0 48 48",version:"1.1",xmlns:"http://www.w3.org/2000/svg"},li("g",{stroke:"none","stroke-width":"1","fill-rule":"evenodd"},li("g",{"fill-rule":"nonzero"},li("path",{d:"M24,4 C35.045695,4 44,12.954305 44,24 C44,35.045695 35.045695,44 24,44 C12.954305,44 4,35.045695 4,24 C4,12.954305 12.954305,4 24,4 Z M17.8838835,16.1161165 L17.7823881,16.0249942 C17.3266086,15.6583353 16.6733914,15.6583353 16.2176119,16.0249942 L16.1161165,16.1161165 L16.0249942,16.2176119 C15.6583353,16.6733914 15.6583353,17.3266086 16.0249942,17.7823881 L16.1161165,17.8838835 L22.233,24 L16.1161165,30.1161165 L16.0249942,30.2176119 C15.6583353,30.6733914 15.6583353,31.3266086 16.0249942,31.7823881 L16.1161165,31.8838835 L16.2176119,31.9750058 C16.6733914,32.3416647 17.3266086,32.3416647 17.7823881,31.9750058 L17.8838835,31.8838835 L24,25.767 L30.1161165,31.8838835 L30.2176119,31.9750058 C30.6733914,32.3416647 31.3266086,32.3416647 31.7823881,31.9750058 L31.8838835,31.8838835 L31.9750058,31.7823881 C32.3416647,31.3266086 32.3416647,30.6733914 31.9750058,30.2176119 L31.8838835,30.1161165 L25.767,24 L31.8838835,17.8838835 L31.9750058,17.7823881 C32.3416647,17.3266086 32.3416647,16.6733914 31.9750058,16.2176119 L31.8838835,16.1161165 L31.7823881,16.0249942 C31.3266086,15.6583353 30.6733914,15.6583353 30.2176119,16.0249942 L30.1161165,16.1161165 L24,22.233 L17.8838835,16.1161165 L17.7823881,16.0249942 L17.8838835,16.1161165 Z"}))))),aT=zn({name:"FastBackward",render:()=>li("svg",{viewBox:"0 0 20 20",version:"1.1",xmlns:"http://www.w3.org/2000/svg"},li("g",{stroke:"none","stroke-width":"1",fill:"none","fill-rule":"evenodd"},li("g",{fill:"currentColor","fill-rule":"nonzero"},li("path",{d:"M8.73171,16.7949 C9.03264,17.0795 9.50733,17.0663 9.79196,16.7654 C10.0766,16.4644 10.0634,15.9897 9.76243,15.7051 L4.52339,10.75 L17.2471,10.75 C17.6613,10.75 17.9971,10.4142 17.9971,10 C17.9971,9.58579 17.6613,9.25 17.2471,9.25 L4.52112,9.25 L9.76243,4.29275 C10.0634,4.00812 10.0766,3.53343 9.79196,3.2325 C9.50733,2.93156 9.03264,2.91834 8.73171,3.20297 L2.31449,9.27241 C2.14819,9.4297 2.04819,9.62981 2.01448,9.8386 C2.00308,9.89058 1.99707,9.94459 1.99707,10 C1.99707,10.0576 2.00356,10.1137 2.01585,10.1675 C2.05084,10.3733 2.15039,10.5702 2.31449,10.7254 L8.73171,16.7949 Z"}))))}),lT=zn({name:"FastForward",render:()=>li("svg",{viewBox:"0 0 20 20",version:"1.1",xmlns:"http://www.w3.org/2000/svg"},li("g",{stroke:"none","stroke-width":"1",fill:"none","fill-rule":"evenodd"},li("g",{fill:"currentColor","fill-rule":"nonzero"},li("path",{d:"M11.2654,3.20511 C10.9644,2.92049 10.4897,2.93371 10.2051,3.23464 C9.92049,3.53558 9.93371,4.01027 10.2346,4.29489 L15.4737,9.25 L2.75,9.25 C2.33579,9.25 2,9.58579 2,10.0000012 C2,10.4142 2.33579,10.75 2.75,10.75 L15.476,10.75 L10.2346,15.7073 C9.93371,15.9919 9.92049,16.4666 10.2051,16.7675 C10.4897,17.0684 10.9644,17.0817 11.2654,16.797 L17.6826,10.7276 C17.8489,10.5703 17.9489,10.3702 17.9826,10.1614 C17.994,10.1094 18,10.0554 18,10.0000012 C18,9.94241 17.9935,9.88633 17.9812,9.83246 C17.9462,9.62667 17.8467,9.42976 17.6826,9.27455 L11.2654,3.20511 Z"}))))}),sT=zn({name:"Filter",render:()=>li("svg",{viewBox:"0 0 28 28",version:"1.1",xmlns:"http://www.w3.org/2000/svg"},li("g",{stroke:"none","stroke-width":"1","fill-rule":"evenodd"},li("g",{"fill-rule":"nonzero"},li("path",{d:"M17,19 C17.5522847,19 18,19.4477153 18,20 C18,20.5522847 17.5522847,21 17,21 L11,21 C10.4477153,21 10,20.5522847 10,20 C10,19.4477153 10.4477153,19 11,19 L17,19 Z M21,13 C21.5522847,13 22,13.4477153 22,14 C22,14.5522847 21.5522847,15 21,15 L7,15 C6.44771525,15 6,14.5522847 6,14 C6,13.4477153 6.44771525,13 7,13 L21,13 Z M24,7 C24.5522847,7 25,7.44771525 25,8 C25,8.55228475 24.5522847,9 24,9 L4,9 C3.44771525,9 3,8.55228475 3,8 C3,7.44771525 3.44771525,7 4,7 L24,7 Z"}))))}),cT=zn({name:"Forward",render:()=>li("svg",{viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg"},li("path",{d:"M7.73271 4.20694C8.03263 3.92125 8.50737 3.93279 8.79306 4.23271L13.7944 9.48318C14.0703 9.77285 14.0703 10.2281 13.7944 10.5178L8.79306 15.7682C8.50737 16.0681 8.03263 16.0797 7.73271 15.794C7.43279 15.5083 7.42125 15.0336 7.70694 14.7336L12.2155 10.0005L7.70694 5.26729C7.42125 4.96737 7.43279 4.49264 7.73271 4.20694Z",fill:"currentColor"}))}),uT=QP("info",li("svg",{viewBox:"0 0 28 28",version:"1.1",xmlns:"http://www.w3.org/2000/svg"},li("g",{stroke:"none","stroke-width":"1","fill-rule":"evenodd"},li("g",{"fill-rule":"nonzero"},li("path",{d:"M14,2 C20.6274,2 26,7.37258 26,14 C26,20.6274 20.6274,26 14,26 C7.37258,26 2,20.6274 2,14 C2,7.37258 7.37258,2 14,2 Z M14,11 C13.4477,11 13,11.4477 13,12 L13,12 L13,20 C13,20.5523 13.4477,21 14,21 C14.5523,21 15,20.5523 15,20 L15,20 L15,12 C15,11.4477 14.5523,11 14,11 Z M14,6.75 C13.3096,6.75 12.75,7.30964 12.75,8 C12.75,8.69036 13.3096,9.25 14,9.25 C14.6904,9.25 15.25,8.69036 15.25,8 C15.25,7.30964 14.6904,6.75 14,6.75 Z"}))))),dT=zn({name:"More",render:()=>li("svg",{viewBox:"0 0 16 16",version:"1.1",xmlns:"http://www.w3.org/2000/svg"},li("g",{stroke:"none","stroke-width":"1",fill:"none","fill-rule":"evenodd"},li("g",{fill:"currentColor","fill-rule":"nonzero"},li("path",{d:"M4,7 C4.55228,7 5,7.44772 5,8 C5,8.55229 4.55228,9 4,9 C3.44772,9 3,8.55229 3,8 C3,7.44772 3.44772,7 4,7 Z M8,7 C8.55229,7 9,7.44772 9,8 C9,8.55229 8.55229,9 8,9 C7.44772,9 7,8.55229 7,8 C7,7.44772 7.44772,7 8,7 Z M12,7 C12.5523,7 13,7.44772 13,8 C13,8.55229 12.5523,9 12,9 C11.4477,9 11,8.55229 11,8 C11,7.44772 11.4477,7 12,7 Z"}))))}),pT=zn({name:"Remove",render:()=>li("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},li("line",{x1:"400",y1:"256",x2:"112",y2:"256",style:"\n fill: none;\n stroke: currentColor;\n stroke-linecap: round;\n stroke-linejoin: round;\n stroke-width: 32px;\n "}))}),hT=QP("success",li("svg",{viewBox:"0 0 48 48",version:"1.1",xmlns:"http://www.w3.org/2000/svg"},li("g",{stroke:"none","stroke-width":"1","fill-rule":"evenodd"},li("g",{"fill-rule":"nonzero"},li("path",{d:"M24,4 C35.045695,4 44,12.954305 44,24 C44,35.045695 35.045695,44 24,44 C12.954305,44 4,35.045695 4,24 C4,12.954305 12.954305,4 24,4 Z M32.6338835,17.6161165 C32.1782718,17.1605048 31.4584514,17.1301307 30.9676119,17.5249942 L30.8661165,17.6161165 L20.75,27.732233 L17.1338835,24.1161165 C16.6457281,23.6279612 15.8542719,23.6279612 15.3661165,24.1161165 C14.9105048,24.5717282 14.8801307,25.2915486 15.2749942,25.7823881 L15.3661165,25.8838835 L19.8661165,30.3838835 C20.3217282,30.8394952 21.0415486,30.8698693 21.5323881,30.4750058 L21.6338835,30.3838835 L32.6338835,19.3838835 C33.1220388,18.8957281 33.1220388,18.1042719 32.6338835,17.6161165 Z"}))))),fT=QP("warning",li("svg",{viewBox:"0 0 24 24",version:"1.1",xmlns:"http://www.w3.org/2000/svg"},li("g",{stroke:"none","stroke-width":"1","fill-rule":"evenodd"},li("g",{"fill-rule":"nonzero"},li("path",{d:"M12,2 C17.523,2 22,6.478 22,12 C22,17.522 17.523,22 12,22 C6.477,22 2,17.522 2,12 C2,6.478 6.477,2 12,2 Z M12.0018002,15.0037242 C11.450254,15.0037242 11.0031376,15.4508407 11.0031376,16.0023869 C11.0031376,16.553933 11.450254,17.0010495 12.0018002,17.0010495 C12.5533463,17.0010495 13.0004628,16.553933 13.0004628,16.0023869 C13.0004628,15.4508407 12.5533463,15.0037242 12.0018002,15.0037242 Z M11.99964,7 C11.4868042,7.00018474 11.0642719,7.38637706 11.0066858,7.8837365 L11,8.00036004 L11.0018003,13.0012393 L11.00857,13.117858 C11.0665141,13.6151758 11.4893244,14.0010638 12.0021602,14.0008793 C12.514996,14.0006946 12.9375283,13.6145023 12.9951144,13.1171428 L13.0018002,13.0005193 L13,7.99964009 L12.9932303,7.8830214 C12.9352861,7.38570354 12.5124758,6.99981552 11.99964,7 Z"}))))),vT=zn({name:"ChevronDown",render:()=>li("svg",{viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},li("path",{d:"M3.14645 5.64645C3.34171 5.45118 3.65829 5.45118 3.85355 5.64645L8 9.79289L12.1464 5.64645C12.3417 5.45118 12.6583 5.45118 12.8536 5.64645C13.0488 5.84171 13.0488 6.15829 12.8536 6.35355L8.35355 10.8536C8.15829 11.0488 7.84171 11.0488 7.64645 10.8536L3.14645 6.35355C2.95118 6.15829 2.95118 5.84171 3.14645 5.64645Z",fill:"currentColor"}))}),mT=QP("clear",li("svg",{viewBox:"0 0 16 16",version:"1.1",xmlns:"http://www.w3.org/2000/svg"},li("g",{stroke:"none","stroke-width":"1",fill:"none","fill-rule":"evenodd"},li("g",{fill:"currentColor","fill-rule":"nonzero"},li("path",{d:"M8,2 C11.3137085,2 14,4.6862915 14,8 C14,11.3137085 11.3137085,14 8,14 C4.6862915,14 2,11.3137085 2,8 C2,4.6862915 4.6862915,2 8,2 Z M6.5343055,5.83859116 C6.33943736,5.70359511 6.07001296,5.72288026 5.89644661,5.89644661 L5.89644661,5.89644661 L5.83859116,5.9656945 C5.70359511,6.16056264 5.72288026,6.42998704 5.89644661,6.60355339 L5.89644661,6.60355339 L7.293,8 L5.89644661,9.39644661 L5.83859116,9.4656945 C5.70359511,9.66056264 5.72288026,9.92998704 5.89644661,10.1035534 L5.89644661,10.1035534 L5.9656945,10.1614088 C6.16056264,10.2964049 6.42998704,10.2771197 6.60355339,10.1035534 L6.60355339,10.1035534 L8,8.707 L9.39644661,10.1035534 L9.4656945,10.1614088 C9.66056264,10.2964049 9.92998704,10.2771197 10.1035534,10.1035534 L10.1035534,10.1035534 L10.1614088,10.0343055 C10.2964049,9.83943736 10.2771197,9.57001296 10.1035534,9.39644661 L10.1035534,9.39644661 L8.707,8 L10.1035534,6.60355339 L10.1614088,6.5343055 C10.2964049,6.33943736 10.2771197,6.07001296 10.1035534,5.89644661 L10.1035534,5.89644661 L10.0343055,5.83859116 C9.83943736,5.70359511 9.57001296,5.72288026 9.39644661,5.89644661 L9.39644661,5.89644661 L8,7.293 L6.60355339,5.89644661 Z"}))))),gT=zn({name:"ChevronDownFilled",render:()=>li("svg",{viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},li("path",{d:"M3.20041 5.73966C3.48226 5.43613 3.95681 5.41856 4.26034 5.70041L8 9.22652L11.7397 5.70041C12.0432 5.41856 12.5177 5.43613 12.7996 5.73966C13.0815 6.0432 13.0639 6.51775 12.7603 6.7996L8.51034 10.7996C8.22258 11.0668 7.77743 11.0668 7.48967 10.7996L3.23966 6.7996C2.93613 6.51775 2.91856 6.0432 3.20041 5.73966Z",fill:"currentColor"}))}),bT=zn({name:"BaseIconSwitchTransition",setup(e,{slots:t}){const n=$b();return()=>li(vi,{name:"icon-switch-transition",appear:n.value},t)}}),yT=zn({name:"FadeInExpandTransition",props:{appear:Boolean,group:Boolean,mode:String,onLeave:Function,onAfterLeave:Function,onAfterEnter:Function,width:Boolean,reverse:Boolean},setup(e,{slots:t}){function n(t){e.width?t.style.maxWidth=`${t.offsetWidth}px`:t.style.maxHeight=`${t.offsetHeight}px`,t.offsetWidth}function o(t){e.width?t.style.maxWidth="0":t.style.maxHeight="0",t.offsetWidth;const{onLeave:n}=e;n&&n()}function r(t){e.width?t.style.maxWidth="":t.style.maxHeight="";const{onAfterLeave:n}=e;n&&n()}function i(t){if(t.style.transition="none",e.width){const e=t.offsetWidth;t.style.maxWidth="0",t.offsetWidth,t.style.transition="",t.style.maxWidth=`${e}px`}else if(e.reverse)t.style.maxHeight=`${t.offsetHeight}px`,t.offsetHeight,t.style.transition="",t.style.maxHeight="0";else{const e=t.offsetHeight;t.style.maxHeight="0",t.offsetWidth,t.style.transition="",t.style.maxHeight=`${e}px`}t.offsetWidth}function a(t){var n;e.width?t.style.maxWidth="":e.reverse||(t.style.maxHeight=""),null===(n=e.onAfterEnter)||void 0===n||n.call(e)}return()=>{const{group:l,width:s,appear:c,mode:u}=e,d=l?ta:vi,p={name:s?"fade-in-width-expand-transition":"fade-in-height-expand-transition",appear:c,onEnter:i,onAfterEnter:a,onBeforeLeave:n,onLeave:o,onAfterLeave:r};return l||(p.mode=u),li(d,p,t)}}}),xT=nb("base-icon","\n height: 1em;\n width: 1em;\n line-height: 1em;\n text-align: center;\n display: inline-block;\n position: relative;\n fill: currentColor;\n transform: translateZ(0);\n",[eb("svg","\n height: 1em;\n width: 1em;\n ")]),CT=zn({name:"BaseIcon",props:{role:String,ariaLabel:String,ariaDisabled:{type:Boolean,default:void 0},ariaHidden:{type:Boolean,default:void 0},clsPrefix:{type:String,required:!0},onClick:Function,onMousedown:Function,onMouseup:Function},setup(e){qP("-base-icon",xT,jt(e,"clsPrefix"))},render(){return li("i",{class:`${this.clsPrefix}-base-icon`,onClick:this.onClick,onMousedown:this.onMousedown,onMouseup:this.onMouseup,role:this.role,"aria-label":this.ariaLabel,"aria-hidden":this.ariaHidden,"aria-disabled":this.ariaDisabled},this.$slots)}}),wT=nb("base-close","\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n background-color: transparent;\n color: var(--n-close-icon-color);\n border-radius: var(--n-close-border-radius);\n height: var(--n-close-size);\n width: var(--n-close-size);\n font-size: var(--n-close-icon-size);\n outline: none;\n border: none;\n position: relative;\n padding: 0;\n",[rb("absolute","\n height: var(--n-close-icon-size);\n width: var(--n-close-icon-size);\n "),eb("&::before",'\n content: "";\n position: absolute;\n width: var(--n-close-size);\n height: var(--n-close-size);\n left: 50%;\n top: 50%;\n transform: translateY(-50%) translateX(-50%);\n transition: inherit;\n border-radius: inherit;\n '),ib("disabled",[eb("&:hover","\n color: var(--n-close-icon-color-hover);\n "),eb("&:hover::before","\n background-color: var(--n-close-color-hover);\n "),eb("&:focus::before","\n background-color: var(--n-close-color-hover);\n "),eb("&:active","\n color: var(--n-close-icon-color-pressed);\n "),eb("&:active::before","\n background-color: var(--n-close-color-pressed);\n ")]),rb("disabled","\n cursor: not-allowed;\n color: var(--n-close-icon-color-disabled);\n background-color: transparent;\n "),rb("round",[eb("&::before","\n border-radius: 50%;\n ")])]),kT=zn({name:"BaseClose",props:{isButtonTag:{type:Boolean,default:!0},clsPrefix:{type:String,required:!0},disabled:{type:Boolean,default:void 0},focusable:{type:Boolean,default:!0},round:Boolean,onClick:Function,absolute:Boolean},setup:e=>(qP("-base-close",wT,jt(e,"clsPrefix")),()=>{const{clsPrefix:t,disabled:n,absolute:o,round:r,isButtonTag:i}=e;return li(i?"button":"div",{type:i?"button":void 0,tabindex:n||!e.focusable?-1:0,"aria-disabled":n,"aria-label":"close",role:i?void 0:"button",disabled:n,class:[`${t}-base-close`,o&&`${t}-base-close--absolute`,n&&`${t}-base-close--disabled`,r&&`${t}-base-close--round`],onMousedown:t=>{e.focusable||t.preventDefault()},onClick:e.onClick},li(CT,{clsPrefix:t},{default:()=>li(tT,null)}))})}),ST=zn({props:{onFocus:Function,onBlur:Function},setup:e=>()=>li("div",{style:"width: 0; height: 0",tabindex:0,onFocus:e.onFocus,onBlur:e.onBlur})}),{cubicBezierEaseInOut:_T}=A_;function PT({originalTransform:e="",left:t=0,top:n=0,transition:o=`all .3s ${_T} !important`}={}){return[eb("&.icon-switch-transition-enter-from, &.icon-switch-transition-leave-to",{transform:`${e} scale(0.75)`,left:t,top:n,opacity:0}),eb("&.icon-switch-transition-enter-to, &.icon-switch-transition-leave-from",{transform:`scale(1) ${e}`,left:t,top:n,opacity:1}),eb("&.icon-switch-transition-enter-active, &.icon-switch-transition-leave-active",{transformOrigin:"center",position:"absolute",left:t,top:n,transition:o})]}const TT=eb([eb("@keyframes rotator","\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }"),nb("base-loading","\n position: relative;\n line-height: 0;\n width: 1em;\n height: 1em;\n ",[ob("transition-wrapper","\n position: absolute;\n width: 100%;\n height: 100%;\n ",[PT()]),ob("placeholder","\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translateX(-50%) translateY(-50%);\n ",[PT({left:"50%",top:"50%",originalTransform:"translateX(-50%) translateY(-50%)"})]),ob("container","\n animation: rotator 3s linear infinite both;\n ",[ob("icon","\n height: 1em;\n width: 1em;\n ")])])]),AT="1.6s",zT={strokeWidth:{type:Number,default:28},stroke:{type:String,default:void 0}},RT=zn({name:"BaseLoading",props:Object.assign({clsPrefix:{type:String,required:!0},show:{type:Boolean,default:!0},scale:{type:Number,default:1},radius:{type:Number,default:100}},zT),setup(e){qP("-base-loading",TT,jt(e,"clsPrefix"))},render(){const{clsPrefix:e,radius:t,strokeWidth:n,stroke:o,scale:r}=this,i=t/r;return li("div",{class:`${e}-base-loading`,role:"img","aria-label":"loading"},li(bT,null,{default:()=>this.show?li("div",{key:"icon",class:`${e}-base-loading__transition-wrapper`},li("div",{class:`${e}-base-loading__container`},li("svg",{class:`${e}-base-loading__icon`,viewBox:`0 0 ${2*i} ${2*i}`,xmlns:"http://www.w3.org/2000/svg",style:{color:o}},li("g",null,li("animateTransform",{attributeName:"transform",type:"rotate",values:`0 ${i} ${i};270 ${i} ${i}`,begin:"0s",dur:AT,fill:"freeze",repeatCount:"indefinite"}),li("circle",{class:`${e}-base-loading__icon`,fill:"none",stroke:"currentColor","stroke-width":n,"stroke-linecap":"round",cx:i,cy:i,r:t-n/2,"stroke-dasharray":5.67*t,"stroke-dashoffset":18.48*t},li("animateTransform",{attributeName:"transform",type:"rotate",values:`0 ${i} ${i};135 ${i} ${i};450 ${i} ${i}`,begin:"0s",dur:AT,fill:"freeze",repeatCount:"indefinite"}),li("animate",{attributeName:"stroke-dashoffset",values:`${5.67*t};${1.42*t};${5.67*t}`,begin:"0s",dur:AT,fill:"freeze",repeatCount:"indefinite"})))))):li("div",{key:"placeholder",class:`${e}-base-loading__placeholder`},this.$slots)}))}});function ET(e){return Array.isArray(e)?e:[e]}const OT="STOP";function MT(e,t){const n=t(e);void 0!==e.children&&n!==OT&&e.children.forEach((e=>MT(e,t)))}function FT(e){return e.children}function IT(e){return e.key}function LT(){return!1}function BT(e){return!0===e.disabled}function DT(e){var t;return null==e?[]:Array.isArray(e)?e:null!==(t=e.checkedKeys)&&void 0!==t?t:[]}function $T(e){var t;return null==e||Array.isArray(e)?[]:null!==(t=e.indeterminateKeys)&&void 0!==t?t:[]}function NT(e,t){const n=new Set(e);return t.forEach((e=>{n.has(e)||n.add(e)})),Array.from(n)}function jT(e,t){const n=new Set(e);return t.forEach((e=>{n.has(e)&&n.delete(e)})),Array.from(n)}function HT(e){return"group"===(null==e?void 0:e.type)}class WT extends Error{constructor(){super(),this.message="SubtreeNotLoadedError: checking a subtree whose required nodes are not fully loaded."}}function UT(e,t,n,o){const r=qT(t,n,o,!1),i=qT(e,n,o,!0),a=function(e,t){const n=new Set;return e.forEach((e=>{const o=t.treeNodeMap.get(e);if(void 0!==o){let e=o.parent;for(;null!==e&&!e.disabled&&!n.has(e.key);)n.add(e.key),e=e.parent}})),n}(e,n),l=[];return r.forEach((e=>{(i.has(e)||a.has(e))&&l.push(e)})),l.forEach((e=>r.delete(e))),r}function VT(e,t){const{checkedKeys:n,keysToCheck:o,keysToUncheck:r,indeterminateKeys:i,cascade:a,leafOnly:l,checkStrategy:s,allowNotLoaded:c}=e;if(!a)return void 0!==o?{checkedKeys:NT(n,o),indeterminateKeys:Array.from(i)}:void 0!==r?{checkedKeys:jT(n,r),indeterminateKeys:Array.from(i)}:{checkedKeys:Array.from(n),indeterminateKeys:Array.from(i)};const{levelTreeNodeMap:u}=t;let d;d=void 0!==r?UT(r,n,t,c):void 0!==o?function(e,t,n,o){return qT(t.concat(e),n,o,!1)}(o,n,t,c):qT(n,t,c,!1);const p="parent"===s,h="child"===s||l,f=d,v=new Set;for(let m=Math.max.apply(null,Array.from(u.keys()));m>=0;m-=1){const e=0===m,t=u.get(m);for(const n of t){if(n.isLeaf)continue;const{key:t,shallowLoaded:o}=n;if(h&&o&&n.children.forEach((e=>{!e.disabled&&!e.isLeaf&&e.shallowLoaded&&f.has(e.key)&&f.delete(e.key)})),n.disabled||!o)continue;let r=!0,i=!1,a=!0;for(const e of n.children){const t=e.key;if(!e.disabled)if(a&&(a=!1),f.has(t))i=!0;else{if(v.has(t)){i=!0,r=!1;break}if(r=!1,i)break}}r&&!a?(p&&n.children.forEach((e=>{!e.disabled&&f.has(e.key)&&f.delete(e.key)})),f.add(t)):i&&v.add(t),e&&h&&f.has(t)&&f.delete(t)}}return{checkedKeys:Array.from(f),indeterminateKeys:Array.from(v)}}function qT(e,t,n,o){const{treeNodeMap:r,getChildren:i}=t,a=new Set,l=new Set(e);return e.forEach((e=>{const t=r.get(e);void 0!==t&&MT(t,(e=>{if(e.disabled)return OT;const{key:t}=e;if(!a.has(t)&&(a.add(t),l.add(t),function(e,t){return!1===e.isLeaf&&!Array.isArray(t(e))}(e.rawNode,i))){if(o)return OT;if(!n)throw new WT}}))})),l}function KT(e,t){const n=e.siblings,o=n.length,{index:r}=e;return t?n[(r+1)%o]:r===n.length-1?null:n[r+1]}function GT(e,t,{loop:n=!1,includeDisabled:o=!1}={}){const r="prev"===t?XT:KT,i={reverse:"prev"===t};let a=!1,l=null;return function t(s){if(null!==s){if(s===e)if(a){if(!e.disabled&&!e.isGroup)return void(l=e)}else a=!0;else if((!s.disabled||o)&&!s.ignored&&!s.isGroup)return void(l=s);if(s.isGroup){const e=YT(s,i);null!==e?l=e:t(r(s,n))}else{const e=r(s,!1);if(null!==e)t(e);else{const e=function(e){return e.parent}(s);(null==e?void 0:e.isGroup)?t(r(e,n)):n&&t(r(s,!0))}}}}(e),l}function XT(e,t){const n=e.siblings,o=n.length,{index:r}=e;return t?n[(r-1+o)%o]:0===r?null:n[r-1]}function YT(e,t={}){const{reverse:n=!1}=t,{children:o}=e;if(o){const{length:e}=o,r=n?-1:e,i=n?-1:1;for(let a=n?e-1:0;a!==r;a+=i){const e=o[a];if(!e.disabled&&!e.ignored){if(!e.isGroup)return e;{const n=YT(e,t);if(null!==n)return n}}}}return null}const QT={getChild(){return this.ignored?null:YT(this)},getParent(){const{parent:e}=this;return(null==e?void 0:e.isGroup)?e.getParent():e},getNext(e={}){return GT(this,"next",e)},getPrev(e={}){return GT(this,"prev",e)}};function ZT(e,t,n,o,r,i=null,a=0){const l=[];return e.forEach(((s,c)=>{var u;const d=Object.create(o);if(d.rawNode=s,d.siblings=l,d.level=a,d.index=c,d.isFirstChild=0===c,d.isLastChild=c+1===e.length,d.parent=i,!d.ignored){const e=r(s);Array.isArray(e)&&(d.children=ZT(e,t,n,o,r,d,a+1))}l.push(d),t.set(d.key,d),n.has(a)||n.set(a,[]),null===(u=n.get(a))||void 0===u||u.push(d)})),l}function JT(e,t={}){var n;const o=new Map,r=new Map,{getDisabled:i=BT,getIgnored:a=LT,getIsGroup:l=HT,getKey:s=IT}=t,c=null!==(n=t.getChildren)&&void 0!==n?n:FT,u=t.ignoreEmptyChildren?e=>{const t=c(e);return Array.isArray(t)?t.length?t:null:t}:c,d=Object.assign({get key(){return s(this.rawNode)},get disabled(){return i(this.rawNode)},get isGroup(){return l(this.rawNode)},get isLeaf(){return function(e,t){const{isLeaf:n}=e;return void 0!==n?n:!t(e)}(this.rawNode,u)},get shallowLoaded(){return function(e,t){const{isLeaf:n}=e;return!(!1===n&&!Array.isArray(t(e)))}(this.rawNode,u)},get ignored(){return a(this.rawNode)},contains(e){return function(e,t){const n=e.key;for(;t;){if(t.key===n)return!0;t=t.parent}return!1}(this,e)}},QT),p=ZT(e,o,r,d,u);function h(e){if(null==e)return null;const t=o.get(e);return t&&!t.ignored?t:null}const f={treeNodes:p,treeNodeMap:o,levelTreeNodeMap:r,maxLevel:Math.max(...r.keys()),getChildren:u,getFlattenedNodes:e=>function(e,t){const n=t?new Set(t):void 0,o=[];return function e(t){t.forEach((t=>{o.push(t),t.isLeaf||!t.children||t.ignored||(t.isGroup||void 0===n||n.has(t.key))&&e(t.children)}))}(e),o}(p,e),getNode:function(e){if(null==e)return null;const t=o.get(e);return!t||t.isGroup||t.ignored?null:t},getPrev:function(e,t){const n=h(e);return n?n.getPrev(t):null},getNext:function(e,t){const n=h(e);return n?n.getNext(t):null},getParent:function(e){const t=h(e);return t?t.getParent():null},getChild:function(e){const t=h(e);return t?t.getChild():null},getFirstAvailableNode:()=>function(e){if(0===e.length)return null;const t=e[0];return t.isGroup||t.ignored||t.disabled?t.getNext():t}(p),getPath:(e,t={})=>function(e,{includeGroup:t=!1,includeSelf:n=!0},o){var r;const i=o.treeNodeMap;let a=null==e?null:null!==(r=i.get(e))&&void 0!==r?r:null;const l={keyPath:[],treeNodePath:[],treeNode:a};if(null==a?void 0:a.ignored)return l.treeNode=null,l;for(;a;)a.ignored||!t&&a.isGroup||l.treeNodePath.push(a),a=a.parent;return l.treeNodePath.reverse(),n||l.treeNodePath.pop(),l.keyPath=l.treeNodePath.map((e=>e.key)),l}(e,t,f),getCheckedKeys(e,t={}){const{cascade:n=!0,leafOnly:o=!1,checkStrategy:r="all",allowNotLoaded:i=!1}=t;return VT({checkedKeys:DT(e),indeterminateKeys:$T(e),cascade:n,leafOnly:o,checkStrategy:r,allowNotLoaded:i},f)},check(e,t,n={}){const{cascade:o=!0,leafOnly:r=!1,checkStrategy:i="all",allowNotLoaded:a=!1}=n;return VT({checkedKeys:DT(t),indeterminateKeys:$T(t),keysToCheck:null==e?[]:ET(e),cascade:o,leafOnly:r,checkStrategy:i,allowNotLoaded:a},f)},uncheck(e,t,n={}){const{cascade:o=!0,leafOnly:r=!1,checkStrategy:i="all",allowNotLoaded:a=!1}=n;return VT({checkedKeys:DT(t),indeterminateKeys:$T(t),keysToUncheck:null==e?[]:ET(e),cascade:o,leafOnly:r,checkStrategy:i,allowNotLoaded:a},f)},getNonLeafKeys:(e={})=>function(e,t={}){const{preserveGroup:n=!1}=t,o=[],r=n?e=>{e.isLeaf||(o.push(e.key),i(e.children))}:e=>{e.isLeaf||(e.isGroup||o.push(e.key),i(e.children))};function i(e){e.forEach(r)}return i(e),o}(p,e)};return f}const eA="#000",tA="#fff",nA="#fff",oA="rgb(72, 72, 78)",rA="rgb(24, 24, 28)",iA="rgb(44, 44, 50)",aA="rgb(16, 16, 20)",lA="0.9",sA="0.82",cA="0.52",uA="0.38",dA="0.28",pA="0.52",hA="0.38",fA="0.06",vA="0.09",mA="0.06",gA="0.05",bA="0.05",yA="0.18",xA="0.2",CA="0.12",wA="0.24",kA="0.09",SA="0.1",_A="0.06",PA="0.04",TA="0.2",AA="0.3",zA="0.12",RA="0.2",EA="#7fe7c4",OA="#63e2b7",MA="#5acea7",FA="rgb(42, 148, 125)",IA="#8acbec",LA="#70c0e8",BA="#66afd3",DA="rgb(56, 137, 197)",$A="#e98b8b",NA="#e88080",jA="#e57272",HA="rgb(208, 58, 82)",WA="#f5d599",UA="#f2c97d",VA="#e6c260",qA="rgb(240, 138, 0)",KA="#7fe7c4",GA="#63e2b7",XA="#5acea7",YA="rgb(42, 148, 125)",QA=Qm(eA),ZA=Qm(tA),JA=`rgba(${ZA.slice(0,3).join(", ")}, `;function ez(e){return`${JA+String(e)})`}const tz=Object.assign(Object.assign({name:"common"},A_),{baseColor:eA,primaryColor:OA,primaryColorHover:EA,primaryColorPressed:MA,primaryColorSuppl:FA,infoColor:LA,infoColorHover:IA,infoColorPressed:BA,infoColorSuppl:DA,successColor:GA,successColorHover:KA,successColorPressed:XA,successColorSuppl:YA,warningColor:UA,warningColorHover:WA,warningColorPressed:VA,warningColorSuppl:qA,errorColor:NA,errorColorHover:$A,errorColorPressed:jA,errorColorSuppl:HA,textColorBase:nA,textColor1:ez(lA),textColor2:ez(sA),textColor3:ez(cA),textColorDisabled:ez(uA),placeholderColor:ez(uA),placeholderColorDisabled:ez(dA),iconColor:ez(uA),iconColorDisabled:ez(dA),iconColorHover:ez(1.25*Number(uA)),iconColorPressed:ez(.8*Number(uA)),opacity1:lA,opacity2:sA,opacity3:cA,opacity4:uA,opacity5:dA,dividerColor:ez(kA),borderColor:ez(wA),closeIconColorHover:ez(Number(pA)),closeIconColor:ez(Number(pA)),closeIconColorPressed:ez(Number(pA)),closeColorHover:"rgba(255, 255, 255, .12)",closeColorPressed:"rgba(255, 255, 255, .08)",clearColor:ez(uA),clearColorHover:ng(ez(uA),{alpha:1.25}),clearColorPressed:ng(ez(uA),{alpha:.8}),scrollbarColor:ez(TA),scrollbarColorHover:ez(AA),scrollbarWidth:"5px",scrollbarHeight:"5px",scrollbarBorderRadius:"5px",progressRailColor:ez(CA),railColor:ez(xA),popoverColor:oA,tableColor:rA,cardColor:rA,modalColor:iA,bodyColor:aA,tagColor:function(e){const t=Array.from(ZA);return t[3]=Number(e),eg(QA,t)}(RA),avatarColor:ez(yA),invertedColor:eA,inputColor:ez(SA),codeColor:ez(zA),tabColor:ez(PA),actionColor:ez(_A),tableHeaderColor:ez(_A),hoverColor:ez(vA),tableColorHover:ez(mA),tableColorStriped:ez(gA),pressedColor:ez(bA),opacityDisabled:hA,inputColorDisabled:ez(fA),buttonColor2:"rgba(255, 255, 255, .08)",buttonColor2Hover:"rgba(255, 255, 255, .12)",buttonColor2Pressed:"rgba(255, 255, 255, .08)",boxShadow1:"0 1px 2px -2px rgba(0, 0, 0, .24), 0 3px 6px 0 rgba(0, 0, 0, .18), 0 5px 12px 4px rgba(0, 0, 0, .12)",boxShadow2:"0 3px 6px -4px rgba(0, 0, 0, .24), 0 6px 12px 0 rgba(0, 0, 0, .16), 0 9px 18px 8px rgba(0, 0, 0, .10)",boxShadow3:"0 6px 16px -9px rgba(0, 0, 0, .08), 0 9px 28px 0 rgba(0, 0, 0, .05), 0 12px 48px 16px rgba(0, 0, 0, .03)"}),nz="#FFF",oz="#000",rz="#000",iz="#fff",az="#fff",lz="#fff",sz="#fff",cz="0.82",uz="0.72",dz="0.38",pz="0.24",hz="0.18",fz="0.6",vz="0.5",mz="0.2",gz=".08",bz="0",yz="0.25",xz="0.4",Cz="#36ad6a",wz="#18a058",kz="#0c7a43",Sz="#36ad6a",_z="#4098fc",Pz="#2080f0",Tz="#1060c9",Az="#4098fc",zz="#de576d",Rz="#d03050",Ez="#ab1f3f",Oz="#de576d",Mz="#fcb040",Fz="#f0a020",Iz="#c97c10",Lz="#fcb040",Bz="#36ad6a",Dz="#18a058",$z="#0c7a43",Nz="#36ad6a",jz=Qm(nz),Hz=Qm(oz),Wz=`rgba(${Hz.slice(0,3).join(", ")}, `;function Uz(e){return`${Wz+String(e)})`}function Vz(e){const t=Array.from(Hz);return t[3]=Number(e),eg(jz,t)}const qz=Object.assign(Object.assign({name:"common"},A_),{baseColor:nz,primaryColor:wz,primaryColorHover:Cz,primaryColorPressed:kz,primaryColorSuppl:Sz,infoColor:Pz,infoColorHover:_z,infoColorPressed:Tz,infoColorSuppl:Az,successColor:Dz,successColorHover:Bz,successColorPressed:$z,successColorSuppl:Nz,warningColor:Fz,warningColorHover:Mz,warningColorPressed:Iz,warningColorSuppl:Lz,errorColor:Rz,errorColorHover:zz,errorColorPressed:Ez,errorColorSuppl:Oz,textColorBase:rz,textColor1:"rgb(31, 34, 37)",textColor2:"rgb(51, 54, 57)",textColor3:"rgb(118, 124, 130)",textColorDisabled:Vz(pz),placeholderColor:Vz(pz),placeholderColorDisabled:Vz(hz),iconColor:Vz(pz),iconColorHover:ng(Vz(pz),{lightness:.75}),iconColorPressed:ng(Vz(pz),{lightness:.9}),iconColorDisabled:Vz(hz),opacity1:cz,opacity2:uz,opacity3:dz,opacity4:pz,opacity5:hz,dividerColor:"rgb(239, 239, 245)",borderColor:"rgb(224, 224, 230)",closeIconColor:Vz(Number(fz)),closeIconColorHover:Vz(Number(fz)),closeIconColorPressed:Vz(Number(fz)),closeColorHover:"rgba(0, 0, 0, .09)",closeColorPressed:"rgba(0, 0, 0, .13)",clearColor:Vz(pz),clearColorHover:ng(Vz(pz),{lightness:.75}),clearColorPressed:ng(Vz(pz),{lightness:.9}),scrollbarColor:Uz(yz),scrollbarColorHover:Uz(xz),scrollbarWidth:"5px",scrollbarHeight:"5px",scrollbarBorderRadius:"5px",progressRailColor:Vz(gz),railColor:"rgb(219, 219, 223)",popoverColor:iz,tableColor:az,cardColor:az,modalColor:lz,bodyColor:sz,tagColor:"#eee",avatarColor:Vz(mz),invertedColor:"rgb(0, 20, 40)",inputColor:Vz(bz),codeColor:"rgb(244, 244, 248)",tabColor:"rgb(247, 247, 250)",actionColor:"rgb(250, 250, 252)",tableHeaderColor:"rgb(250, 250, 252)",hoverColor:"rgb(243, 243, 245)",tableColorHover:"rgba(0, 0, 100, 0.03)",tableColorStriped:"rgba(0, 0, 100, 0.02)",pressedColor:"rgb(237, 237, 239)",opacityDisabled:vz,inputColorDisabled:"rgb(250, 250, 252)",buttonColor2:"rgba(46, 51, 56, .05)",buttonColor2Hover:"rgba(46, 51, 56, .09)",buttonColor2Pressed:"rgba(46, 51, 56, .13)",boxShadow1:"0 1px 2px -2px rgba(0, 0, 0, .08), 0 3px 6px 0 rgba(0, 0, 0, .06), 0 5px 12px 4px rgba(0, 0, 0, .04)",boxShadow2:"0 3px 6px -4px rgba(0, 0, 0, .12), 0 6px 16px 0 rgba(0, 0, 0, .08), 0 9px 28px 8px rgba(0, 0, 0, .05)",boxShadow3:"0 6px 16px -9px rgba(0, 0, 0, .08), 0 9px 28px 0 rgba(0, 0, 0, .05), 0 12px 48px 16px rgba(0, 0, 0, .03)"}),Kz={iconSizeSmall:"34px",iconSizeMedium:"40px",iconSizeLarge:"46px",iconSizeHuge:"52px"};function Gz(e){const{textColorDisabled:t,iconColor:n,textColor2:o,fontSizeSmall:r,fontSizeMedium:i,fontSizeLarge:a,fontSizeHuge:l}=e;return Object.assign(Object.assign({},Kz),{fontSizeSmall:r,fontSizeMedium:i,fontSizeLarge:a,fontSizeHuge:l,textColor:t,iconColor:n,extraTextColor:o})}const Xz={name:"Empty",common:qz,self:Gz},Yz={name:"Empty",common:tz,self:Gz},Qz=nb("empty","\n display: flex;\n flex-direction: column;\n align-items: center;\n font-size: var(--n-font-size);\n",[ob("icon","\n width: var(--n-icon-size);\n height: var(--n-icon-size);\n font-size: var(--n-icon-size);\n line-height: var(--n-icon-size);\n color: var(--n-icon-color);\n transition:\n color .3s var(--n-bezier);\n ",[eb("+",[ob("description","\n margin-top: 8px;\n ")])]),ob("description","\n transition: color .3s var(--n-bezier);\n color: var(--n-text-color);\n "),ob("extra","\n text-align: center;\n transition: color .3s var(--n-bezier);\n margin-top: 12px;\n color: var(--n-extra-text-color);\n ")]),Zz=zn({name:"Empty",props:Object.assign(Object.assign({},I_.props),{description:String,showDescription:{type:Boolean,default:!0},showIcon:{type:Boolean,default:!0},size:{type:String,default:"medium"},renderIcon:Function}),setup(e){const{mergedClsPrefixRef:t,inlineThemeDisabled:n}=B_(e),o=I_("Empty","-empty",Qz,Xz,e,t),{localeRef:r}=VP("Empty"),i=Po(M_,null),a=ai((()=>{var t,n,o;return null!==(t=e.description)&&void 0!==t?t:null===(o=null===(n=null==i?void 0:i.mergedComponentPropsRef.value)||void 0===n?void 0:n.Empty)||void 0===o?void 0:o.description})),l=ai((()=>{var e,t;return(null===(t=null===(e=null==i?void 0:i.mergedComponentPropsRef.value)||void 0===e?void 0:e.Empty)||void 0===t?void 0:t.renderIcon)||(()=>li(rT,null))})),s=ai((()=>{const{size:t}=e,{common:{cubicBezierEaseInOut:n},self:{[ub("iconSize",t)]:r,[ub("fontSize",t)]:i,textColor:a,iconColor:l,extraTextColor:s}}=o.value;return{"--n-icon-size":r,"--n-font-size":i,"--n-bezier":n,"--n-text-color":a,"--n-icon-color":l,"--n-extra-text-color":s}})),c=n?KP("empty",ai((()=>{let t="";const{size:n}=e;return t+=n[0],t})),s,e):void 0;return{mergedClsPrefix:t,mergedRenderIcon:l,localizedDescription:ai((()=>a.value||r.value.description)),cssVars:n?void 0:s,themeClass:null==c?void 0:c.themeClass,onRender:null==c?void 0:c.onRender}},render(){const{$slots:e,mergedClsPrefix:t,onRender:n}=this;return null==n||n(),li("div",{class:[`${t}-empty`,this.themeClass],style:this.cssVars},this.showIcon?li("div",{class:`${t}-empty__icon`},e.icon?e.icon():li(CT,{clsPrefix:t},{default:this.mergedRenderIcon})):null,this.showDescription?li("div",{class:`${t}-empty__description`},e.default?e.default():this.localizedDescription):null,e.extra?li("div",{class:`${t}-empty__extra`},e.extra()):null)}}),Jz={railInsetHorizontal:"auto 2px 4px 2px",railInsetVertical:"2px 4px 2px auto",railColor:"transparent"};function eR(e){const{scrollbarColor:t,scrollbarColorHover:n,scrollbarHeight:o,scrollbarWidth:r,scrollbarBorderRadius:i}=e;return Object.assign(Object.assign({},Jz),{height:o,width:r,borderRadius:i,color:t,colorHover:n})}const tR={name:"Scrollbar",common:qz,self:eR},nR={name:"Scrollbar",common:tz,self:eR},{cubicBezierEaseInOut:oR}=A_;function rR({name:e="fade-in",enterDuration:t="0.2s",leaveDuration:n="0.2s",enterCubicBezier:o=oR,leaveCubicBezier:r=oR}={}){return[eb(`&.${e}-transition-enter-active`,{transition:`all ${t} ${o}!important`}),eb(`&.${e}-transition-leave-active`,{transition:`all ${n} ${r}!important`}),eb(`&.${e}-transition-enter-from, &.${e}-transition-leave-to`,{opacity:0}),eb(`&.${e}-transition-leave-from, &.${e}-transition-enter-to`,{opacity:1})]}const iR=nb("scrollbar","\n overflow: hidden;\n position: relative;\n z-index: auto;\n height: 100%;\n width: 100%;\n",[eb(">",[nb("scrollbar-container","\n width: 100%;\n overflow: scroll;\n height: 100%;\n min-height: inherit;\n max-height: inherit;\n scrollbar-width: none;\n ",[eb("&::-webkit-scrollbar, &::-webkit-scrollbar-track-piece, &::-webkit-scrollbar-thumb","\n width: 0;\n height: 0;\n display: none;\n "),eb(">",[nb("scrollbar-content","\n box-sizing: border-box;\n min-width: 100%;\n ")])])]),eb(">, +",[nb("scrollbar-rail","\n position: absolute;\n pointer-events: none;\n user-select: none;\n background: var(--n-scrollbar-rail-color);\n -webkit-user-select: none;\n ",[rb("horizontal","\n inset: var(--n-scrollbar-rail-inset-horizontal);\n height: var(--n-scrollbar-height);\n ",[eb(">",[ob("scrollbar","\n height: var(--n-scrollbar-height);\n border-radius: var(--n-scrollbar-border-radius);\n right: 0;\n ")])]),rb("vertical","\n inset: var(--n-scrollbar-rail-inset-vertical);\n width: var(--n-scrollbar-width);\n ",[eb(">",[ob("scrollbar","\n width: var(--n-scrollbar-width);\n border-radius: var(--n-scrollbar-border-radius);\n bottom: 0;\n ")])]),rb("disabled",[eb(">",[ob("scrollbar","pointer-events: none;")])]),eb(">",[ob("scrollbar","\n z-index: 1;\n position: absolute;\n cursor: pointer;\n pointer-events: all;\n background-color: var(--n-scrollbar-color);\n transition: background-color .2s var(--n-scrollbar-bezier);\n ",[rR(),eb("&:hover","background-color: var(--n-scrollbar-color-hover);")])])])])]),aR=zn({name:"Scrollbar",props:Object.assign(Object.assign({},I_.props),{duration:{type:Number,default:0},scrollable:{type:Boolean,default:!0},xScrollable:Boolean,trigger:{type:String,default:"hover"},useUnifiedContainer:Boolean,triggerDisplayManually:Boolean,container:Function,content:Function,containerClass:String,containerStyle:[String,Object],contentClass:[String,Array],contentStyle:[String,Object],horizontalRailStyle:[String,Object],verticalRailStyle:[String,Object],onScroll:Function,onWheel:Function,onResize:Function,internalOnUpdateScrollLeft:Function,internalHoistYRail:Boolean}),inheritAttrs:!1,setup(e){const{mergedClsPrefixRef:t,inlineThemeDisabled:n,mergedRtlRef:o}=B_(e),r=GP("Scrollbar",o,t),i=Et(null),a=Et(null),l=Et(null),s=Et(null),c=Et(null),u=Et(null),d=Et(null),p=Et(null),h=Et(null),f=Et(null),v=Et(null),m=Et(0),g=Et(0),b=Et(!1),y=Et(!1);let x,C,w=!1,k=!1,S=0,_=0,P=0,T=0;const A=jb,z=I_("Scrollbar","-scrollbar",iR,tR,e,t),R=ai((()=>{const{value:e}=p,{value:t}=u,{value:n}=f;return null===e||null===t||null===n?0:Math.min(e,n*e/t+1.5*Im(z.value.self.width))})),E=ai((()=>`${R.value}px`)),O=ai((()=>{const{value:e}=h,{value:t}=d,{value:n}=v;return null===e||null===t||null===n?0:n*e/t+1.5*Im(z.value.self.height)})),M=ai((()=>`${O.value}px`)),F=ai((()=>{const{value:e}=p,{value:t}=m,{value:n}=u,{value:o}=f;if(null===e||null===n||null===o)return 0;{const r=n-e;return r?t/r*(o-R.value):0}})),I=ai((()=>`${F.value}px`)),L=ai((()=>{const{value:e}=h,{value:t}=g,{value:n}=d,{value:o}=v;if(null===e||null===n||null===o)return 0;{const r=n-e;return r?t/r*(o-O.value):0}})),B=ai((()=>`${L.value}px`)),D=ai((()=>{const{value:e}=p,{value:t}=u;return null!==e&&null!==t&&t>e})),$=ai((()=>{const{value:e}=h,{value:t}=d;return null!==e&&null!==t&&t>e})),N=ai((()=>{const{trigger:t}=e;return"none"===t||b.value})),j=ai((()=>{const{trigger:t}=e;return"none"===t||y.value})),H=ai((()=>{const{container:t}=e;return t?t():a.value})),W=ai((()=>{const{content:t}=e;return t?t():l.value})),U=(t,n)=>{if(!e.scrollable)return;if("number"==typeof t)return void q(t,null!=n?n:0,0,!1,"auto");const{left:o,top:r,index:i,elSize:a,position:l,behavior:s,el:c,debounce:u=!0}=t;void 0===o&&void 0===r||q(null!=o?o:0,null!=r?r:0,0,!1,s),void 0!==c?q(0,c.offsetTop,c.offsetHeight,u,s):void 0!==i&&void 0!==a?q(0,i*a,a,u,s):"bottom"===l?q(0,Number.MAX_SAFE_INTEGER,0,!1,s):"top"===l&&q(0,0,0,!1,s)},V=Qx((()=>{e.container||U({top:m.value,left:g.value})}));function q(e,t,n,o,r){const{value:i}=H;if(i){if(o){const{scrollTop:o,offsetHeight:a}=i;if(t>o)return void(t+n<=o+a||i.scrollTo({left:e,top:t+n-a,behavior:r}))}i.scrollTo({left:e,top:t,behavior:r})}}function K(){void 0!==C&&window.clearTimeout(C),C=window.setTimeout((()=>{y.value=!1}),e.duration),void 0!==x&&window.clearTimeout(x),x=window.setTimeout((()=>{b.value=!1}),e.duration)}function G(){const{value:e}=H;e&&(m.value=e.scrollTop,g.value=e.scrollLeft*((null==r?void 0:r.value)?-1:1))}function X(){const{value:e}=H;e&&(m.value=e.scrollTop,g.value=e.scrollLeft*((null==r?void 0:r.value)?-1:1),p.value=e.offsetHeight,h.value=e.offsetWidth,u.value=e.scrollHeight,d.value=e.scrollWidth);const{value:t}=c,{value:n}=s;t&&(v.value=t.offsetWidth),n&&(f.value=n.offsetHeight)}function Y(){e.scrollable&&(e.useUnifiedContainer?X():(function(){const{value:e}=W;e&&(u.value=e.offsetHeight,d.value=e.offsetWidth);const{value:t}=H;t&&(p.value=t.offsetHeight,h.value=t.offsetWidth);const{value:n}=c,{value:o}=s;n&&(v.value=n.offsetWidth),o&&(f.value=o.offsetHeight)}(),G()))}function Q(e){var t;return!(null===(t=i.value)||void 0===t?void 0:t.contains(Fm(e)))}function Z(t){if(!k)return;void 0!==x&&window.clearTimeout(x),void 0!==C&&window.clearTimeout(C);const{value:n}=h,{value:o}=d,{value:i}=O;if(null===n||null===o)return;const a=(null==r?void 0:r.value)?window.innerWidth-t.clientX-P:t.clientX-P,l=o-n;let s=_+a*(o-n)/(n-i);s=Math.min(l,s),s=Math.max(s,0);const{value:c}=H;if(c){c.scrollLeft=s*((null==r?void 0:r.value)?-1:1);const{internalOnUpdateScrollLeft:t}=e;t&&t(s)}}function J(e){e.preventDefault(),e.stopPropagation(),Tb("mousemove",window,Z,!0),Tb("mouseup",window,J,!0),k=!1,Y(),Q(e)&&K()}function ee(e){if(!w)return;void 0!==x&&window.clearTimeout(x),void 0!==C&&window.clearTimeout(C);const{value:t}=p,{value:n}=u,{value:o}=R;if(null===t||null===n)return;const r=e.clientY-T,i=n-t;let a=S+r*(n-t)/(t-o);a=Math.min(i,a),a=Math.max(a,0);const{value:l}=H;l&&(l.scrollTop=a)}function te(e){e.preventDefault(),e.stopPropagation(),Tb("mousemove",window,ee,!0),Tb("mouseup",window,te,!0),w=!1,Y(),Q(e)&&K()}ir((()=>{const{value:e}=$,{value:n}=D,{value:o}=t,{value:r}=c,{value:i}=s;r&&(e?r.classList.remove(`${o}-scrollbar-rail--disabled`):r.classList.add(`${o}-scrollbar-rail--disabled`)),i&&(n?i.classList.remove(`${o}-scrollbar-rail--disabled`):i.classList.add(`${o}-scrollbar-rail--disabled`))})),$n((()=>{e.container||Y()})),Hn((()=>{void 0!==x&&window.clearTimeout(x),void 0!==C&&window.clearTimeout(C),Tb("mousemove",window,ee,!0),Tb("mouseup",window,te,!0)}));const ne=ai((()=>{const{common:{cubicBezierEaseInOut:e},self:{color:t,colorHover:n,height:o,width:i,borderRadius:a,railInsetHorizontal:l,railInsetVertical:s,railColor:c}}=z.value;return{"--n-scrollbar-bezier":e,"--n-scrollbar-color":t,"--n-scrollbar-color-hover":n,"--n-scrollbar-border-radius":a,"--n-scrollbar-width":i,"--n-scrollbar-height":o,"--n-scrollbar-rail-inset-horizontal":l,"--n-scrollbar-rail-inset-vertical":(null==r?void 0:r.value)?Rg(s):s,"--n-scrollbar-rail-color":c}})),oe=n?KP("scrollbar",void 0,ne,e):void 0,re={scrollTo:U,scrollBy:(t,n)=>{if(!e.scrollable)return;const{value:o}=H;o&&("object"==typeof t?o.scrollBy(t):o.scrollBy(t,n||0))},sync:Y,syncUnifiedContainer:X,handleMouseEnterWrapper:function(){void 0!==x&&window.clearTimeout(x),b.value=!0,void 0!==C&&window.clearTimeout(C),y.value=!0,Y()},handleMouseLeaveWrapper:function(){K()}};return Object.assign(Object.assign({},re),{mergedClsPrefix:t,rtlEnabled:r,containerScrollTop:m,wrapperRef:i,containerRef:a,contentRef:l,yRailRef:s,xRailRef:c,needYBar:D,needXBar:$,yBarSizePx:E,xBarSizePx:M,yBarTopPx:I,xBarLeftPx:B,isShowXBar:N,isShowYBar:j,isIos:A,handleScroll:function(t){const{onScroll:n}=e;n&&n(t),G()},handleContentResize:()=>{V.isDeactivated||Y()},handleContainerResize:t=>{if(V.isDeactivated)return;const{onResize:n}=e;n&&n(t),Y()},handleYScrollMouseDown:function(e){e.preventDefault(),e.stopPropagation(),w=!0,Pb("mousemove",window,ee,!0),Pb("mouseup",window,te,!0),S=m.value,T=e.clientY},handleXScrollMouseDown:function(e){e.preventDefault(),e.stopPropagation(),k=!0,Pb("mousemove",window,Z,!0),Pb("mouseup",window,J,!0),_=g.value,P=(null==r?void 0:r.value)?window.innerWidth-e.clientX:e.clientX},cssVars:n?void 0:ne,themeClass:null==oe?void 0:oe.themeClass,onRender:null==oe?void 0:oe.onRender})},render(){var e;const{$slots:t,mergedClsPrefix:n,triggerDisplayManually:o,rtlEnabled:r,internalHoistYRail:i}=this;if(!this.scrollable)return null===(e=t.default)||void 0===e?void 0:e.call(t);const a="none"===this.trigger,l=(e,t)=>li("div",{ref:"yRailRef",class:[`${n}-scrollbar-rail`,`${n}-scrollbar-rail--vertical`,e],"data-scrollbar-rail":!0,style:[t||"",this.verticalRailStyle],"aria-hidden":!0},li(a?_g:vi,a?null:{name:"fade-in-transition"},{default:()=>this.needYBar&&this.isShowYBar&&!this.isIos?li("div",{class:`${n}-scrollbar-rail__scrollbar`,style:{height:this.yBarSizePx,top:this.yBarTopPx},onMousedown:this.handleYScrollMouseDown}):null})),s=()=>{var e,s;return null===(e=this.onRender)||void 0===e||e.call(this),li("div",Wr(this.$attrs,{role:"none",ref:"wrapperRef",class:[`${n}-scrollbar`,this.themeClass,r&&`${n}-scrollbar--rtl`],style:this.cssVars,onMouseenter:o?void 0:this.handleMouseEnterWrapper,onMouseleave:o?void 0:this.handleMouseLeaveWrapper}),[this.container?null===(s=t.default)||void 0===s?void 0:s.call(t):li("div",{role:"none",ref:"containerRef",class:[`${n}-scrollbar-container`,this.containerClass],style:this.containerStyle,onScroll:this.handleScroll,onWheel:this.onWheel},li(kx,{onResize:this.handleContentResize},{default:()=>li("div",{ref:"contentRef",role:"none",style:[{width:this.xScrollable?"fit-content":null},this.contentStyle],class:[`${n}-scrollbar-content`,this.contentClass]},t)})),i?null:l(void 0,void 0),this.xScrollable&&li("div",{ref:"xRailRef",class:[`${n}-scrollbar-rail`,`${n}-scrollbar-rail--horizontal`],style:this.horizontalRailStyle,"data-scrollbar-rail":!0,"aria-hidden":!0},li(a?_g:vi,a?null:{name:"fade-in-transition"},{default:()=>this.needXBar&&this.isShowXBar&&!this.isIos?li("div",{class:`${n}-scrollbar-rail__scrollbar`,style:{width:this.xBarSizePx,right:r?this.xBarLeftPx:void 0,left:r?void 0:this.xBarLeftPx},onMousedown:this.handleXScrollMouseDown}):null}))])},c=this.container?s():li(kx,{onResize:this.handleContainerResize},{default:s});return i?li(yr,null,c,l(this.themeClass,this.cssVars)):c}}),lR=aR,sR=aR,cR={height:"calc(var(--n-option-height) * 7.6)",paddingSmall:"4px 0",paddingMedium:"4px 0",paddingLarge:"4px 0",paddingHuge:"4px 0",optionPaddingSmall:"0 12px",optionPaddingMedium:"0 12px",optionPaddingLarge:"0 12px",optionPaddingHuge:"0 12px",loadingSize:"18px"};function uR(e){const{borderRadius:t,popoverColor:n,textColor3:o,dividerColor:r,textColor2:i,primaryColorPressed:a,textColorDisabled:l,primaryColor:s,opacityDisabled:c,hoverColor:u,fontSizeSmall:d,fontSizeMedium:p,fontSizeLarge:h,fontSizeHuge:f,heightSmall:v,heightMedium:m,heightLarge:g,heightHuge:b}=e;return Object.assign(Object.assign({},cR),{optionFontSizeSmall:d,optionFontSizeMedium:p,optionFontSizeLarge:h,optionFontSizeHuge:f,optionHeightSmall:v,optionHeightMedium:m,optionHeightLarge:g,optionHeightHuge:b,borderRadius:t,color:n,groupHeaderTextColor:o,actionDividerColor:r,optionTextColor:i,optionTextColorPressed:a,optionTextColorDisabled:l,optionTextColorActive:s,optionOpacityDisabled:c,optionCheckColor:s,optionColorPending:u,optionColorActive:"rgba(0, 0, 0, 0)",optionColorActivePending:u,actionTextColor:i,loadingColor:s})}const dR={name:"InternalSelectMenu",common:qz,peers:{Scrollbar:tR,Empty:Xz},self:uR},pR={name:"InternalSelectMenu",common:tz,peers:{Scrollbar:nR,Empty:Yz},self:uR},hR=zn({name:"NBaseSelectOption",props:{clsPrefix:{type:String,required:!0},tmNode:{type:Object,required:!0}},setup(e){const{valueRef:t,pendingTmNodeRef:n,multipleRef:o,valueSetRef:r,renderLabelRef:i,renderOptionRef:a,labelFieldRef:l,valueFieldRef:s,showCheckmarkRef:c,nodePropsRef:u,handleOptionClick:d,handleOptionMouseEnter:p}=Po(Hb),h=mb((()=>{const{value:t}=n;return!!t&&e.tmNode.key===t.key}));return{multiple:o,isGrouped:mb((()=>{const{tmNode:t}=e,{parent:n}=t;return n&&"group"===n.rawNode.type})),showCheckmark:c,nodeProps:u,isPending:h,isSelected:mb((()=>{const{value:n}=t,{value:i}=o;if(null===n)return!1;const a=e.tmNode.rawNode[s.value];if(i){const{value:e}=r;return e.has(a)}return n===a})),labelField:l,renderLabel:i,renderOption:a,handleMouseMove:function(t){const{tmNode:n}=e,{value:o}=h;n.disabled||o||p(t,n)},handleMouseEnter:function(t){const{tmNode:n}=e;n.disabled||p(t,n)},handleClick:function(t){const{tmNode:n}=e;n.disabled||d(t,n)}}},render(){const{clsPrefix:e,tmNode:{rawNode:t},isSelected:n,isPending:o,isGrouped:r,showCheckmark:i,nodeProps:a,renderOption:l,renderLabel:s,handleClick:c,handleMouseEnter:u,handleMouseMove:d}=this,p=function(e,t){return li(vi,{name:"fade-in-scale-up-transition"},{default:()=>e?li(CT,{clsPrefix:t,class:`${t}-base-select-option__check`},{default:()=>li(JP)}):null})}(n,e),h=s?[s(t,n),i&&p]:[hg(t[this.labelField],t,n),i&&p],f=null==a?void 0:a(t),v=li("div",Object.assign({},f,{class:[`${e}-base-select-option`,t.class,null==f?void 0:f.class,{[`${e}-base-select-option--disabled`]:t.disabled,[`${e}-base-select-option--selected`]:n,[`${e}-base-select-option--grouped`]:r,[`${e}-base-select-option--pending`]:o,[`${e}-base-select-option--show-checkmark`]:i}],style:[(null==f?void 0:f.style)||"",t.style||""],onClick:Sg([c,null==f?void 0:f.onClick]),onMouseenter:Sg([u,null==f?void 0:f.onMouseenter]),onMousemove:Sg([d,null==f?void 0:f.onMousemove])}),li("div",{class:`${e}-base-select-option__content`},h));return t.render?t.render({node:v,option:t,selected:n}):l?l({node:v,option:t,selected:n}):v}}),fR=zn({name:"NBaseSelectGroupHeader",props:{clsPrefix:{type:String,required:!0},tmNode:{type:Object,required:!0}},setup(){const{renderLabelRef:e,renderOptionRef:t,labelFieldRef:n,nodePropsRef:o}=Po(Hb);return{labelField:n,nodeProps:o,renderLabel:e,renderOption:t}},render(){const{clsPrefix:e,renderLabel:t,renderOption:n,nodeProps:o,tmNode:{rawNode:r}}=this,i=null==o?void 0:o(r),a=t?t(r,!1):hg(r[this.labelField],r,!1),l=li("div",Object.assign({},i,{class:[`${e}-base-select-group-header`,null==i?void 0:i.class]}),a);return r.render?r.render({node:l,option:r}):n?n({node:l,option:r,selected:!1}):l}}),{cubicBezierEaseIn:vR,cubicBezierEaseOut:mR}=A_;function gR({transformOrigin:e="inherit",duration:t=".2s",enterScale:n=".9",originalTransform:o="",originalTransition:r=""}={}){return[eb("&.fade-in-scale-up-transition-leave-active",{transformOrigin:e,transition:`opacity ${t} ${vR}, transform ${t} ${vR} ${r&&`,${r}`}`}),eb("&.fade-in-scale-up-transition-enter-active",{transformOrigin:e,transition:`opacity ${t} ${mR}, transform ${t} ${mR} ${r&&`,${r}`}`}),eb("&.fade-in-scale-up-transition-enter-from, &.fade-in-scale-up-transition-leave-to",{opacity:0,transform:`${o} scale(${n})`}),eb("&.fade-in-scale-up-transition-leave-from, &.fade-in-scale-up-transition-enter-to",{opacity:1,transform:`${o} scale(1)`})]}const bR=nb("base-select-menu","\n line-height: 1.5;\n outline: none;\n z-index: 0;\n position: relative;\n border-radius: var(--n-border-radius);\n transition:\n background-color .3s var(--n-bezier),\n box-shadow .3s var(--n-bezier);\n background-color: var(--n-color);\n",[nb("scrollbar","\n max-height: var(--n-height);\n "),nb("virtual-list","\n max-height: var(--n-height);\n "),nb("base-select-option","\n min-height: var(--n-option-height);\n font-size: var(--n-option-font-size);\n display: flex;\n align-items: center;\n ",[ob("content","\n z-index: 1;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n ")]),nb("base-select-group-header","\n min-height: var(--n-option-height);\n font-size: .93em;\n display: flex;\n align-items: center;\n "),nb("base-select-menu-option-wrapper","\n position: relative;\n width: 100%;\n "),ob("loading, empty","\n display: flex;\n padding: 12px 32px;\n flex: 1;\n justify-content: center;\n "),ob("loading","\n color: var(--n-loading-color);\n font-size: var(--n-loading-size);\n "),ob("header","\n padding: 8px var(--n-option-padding-left);\n font-size: var(--n-option-font-size);\n transition: \n color .3s var(--n-bezier),\n border-color .3s var(--n-bezier);\n border-bottom: 1px solid var(--n-action-divider-color);\n color: var(--n-action-text-color);\n "),ob("action","\n padding: 8px var(--n-option-padding-left);\n font-size: var(--n-option-font-size);\n transition: \n color .3s var(--n-bezier),\n border-color .3s var(--n-bezier);\n border-top: 1px solid var(--n-action-divider-color);\n color: var(--n-action-text-color);\n "),nb("base-select-group-header","\n position: relative;\n cursor: default;\n padding: var(--n-option-padding);\n color: var(--n-group-header-text-color);\n "),nb("base-select-option","\n cursor: pointer;\n position: relative;\n padding: var(--n-option-padding);\n transition:\n color .3s var(--n-bezier),\n opacity .3s var(--n-bezier);\n box-sizing: border-box;\n color: var(--n-option-text-color);\n opacity: 1;\n ",[rb("show-checkmark","\n padding-right: calc(var(--n-option-padding-right) + 20px);\n "),eb("&::before",'\n content: "";\n position: absolute;\n left: 4px;\n right: 4px;\n top: 0;\n bottom: 0;\n border-radius: var(--n-border-radius);\n transition: background-color .3s var(--n-bezier);\n '),eb("&:active","\n color: var(--n-option-text-color-pressed);\n "),rb("grouped","\n padding-left: calc(var(--n-option-padding-left) * 1.5);\n "),rb("pending",[eb("&::before","\n background-color: var(--n-option-color-pending);\n ")]),rb("selected","\n color: var(--n-option-text-color-active);\n ",[eb("&::before","\n background-color: var(--n-option-color-active);\n "),rb("pending",[eb("&::before","\n background-color: var(--n-option-color-active-pending);\n ")])]),rb("disabled","\n cursor: not-allowed;\n ",[ib("selected","\n color: var(--n-option-text-color-disabled);\n "),rb("selected","\n opacity: var(--n-option-opacity-disabled);\n ")]),ob("check","\n font-size: 16px;\n position: absolute;\n right: calc(var(--n-option-padding-right) - 4px);\n top: calc(50% - 7px);\n color: var(--n-option-check-color);\n transition: color .3s var(--n-bezier);\n ",[gR({enterScale:"0.5"})])])]),yR=zn({name:"InternalSelectMenu",props:Object.assign(Object.assign({},I_.props),{clsPrefix:{type:String,required:!0},scrollable:{type:Boolean,default:!0},treeMate:{type:Object,required:!0},multiple:Boolean,size:{type:String,default:"medium"},value:{type:[String,Number,Array],default:null},autoPending:Boolean,virtualScroll:{type:Boolean,default:!0},show:{type:Boolean,default:!0},labelField:{type:String,default:"label"},valueField:{type:String,default:"value"},loading:Boolean,focusable:Boolean,renderLabel:Function,renderOption:Function,nodeProps:Function,showCheckmark:{type:Boolean,default:!0},onMousedown:Function,onScroll:Function,onFocus:Function,onBlur:Function,onKeyup:Function,onKeydown:Function,onTabOut:Function,onMouseenter:Function,onMouseleave:Function,onResize:Function,resetMenuOnOptionsChange:{type:Boolean,default:!0},inlineThemeDisabled:Boolean,onToggle:Function}),setup(e){const{mergedClsPrefixRef:t,mergedRtlRef:n}=B_(e),o=GP("InternalSelectMenu",n,t),r=I_("InternalSelectMenu","-internal-select-menu",bR,dR,e,jt(e,"clsPrefix")),i=Et(null),a=Et(null),l=Et(null),s=ai((()=>e.treeMate.getFlattenedNodes())),c=ai((()=>function(e){const t=new Map;return e.forEach(((e,n)=>{t.set(e.key,n)})),e=>{var n;return null!==(n=t.get(e))&&void 0!==n?n:null}}(s.value))),u=Et(null);function d(){const{value:t}=u;t&&!e.treeMate.getNode(t.key)&&(u.value=null)}let p;lr((()=>e.show),(t=>{t?p=lr((()=>e.treeMate),(()=>{e.resetMenuOnOptionsChange?(e.autoPending?function(){const{treeMate:t}=e;let n=null;const{value:o}=e;null===o?n=t.getFirstAvailableNode():(n=e.multiple?t.getNode((o||[])[(o||[]).length-1]):t.getNode(o),n&&!n.disabled||(n=t.getFirstAvailableNode())),b(n||null)}():d(),tn(y)):d()}),{immediate:!0}):null==p||p()}),{immediate:!0}),Hn((()=>{null==p||p()}));const h=ai((()=>Im(r.value.self[ub("optionHeight",e.size)]))),f=ai((()=>Bm(r.value.self[ub("padding",e.size)]))),v=ai((()=>e.multiple&&Array.isArray(e.value)?new Set(e.value):new Set)),m=ai((()=>{const e=s.value;return e&&0===e.length}));function g(t){const{onScroll:n}=e;n&&n(t)}function b(e,t=!1){u.value=e,t&&y()}function y(){var t,n;const o=u.value;if(!o)return;const r=c.value(o.key);null!==r&&(e.virtualScroll?null===(t=a.value)||void 0===t||t.scrollTo({index:r}):null===(n=l.value)||void 0===n||n.scrollTo({index:r,elSize:h.value}))}_o(Hb,{handleOptionMouseEnter:function(e,t){t.disabled||b(t,!1)},handleOptionClick:function(t,n){n.disabled||function(t){const{onToggle:n}=e;n&&n(t)}(n)},valueSetRef:v,pendingTmNodeRef:u,nodePropsRef:jt(e,"nodeProps"),showCheckmarkRef:jt(e,"showCheckmark"),multipleRef:jt(e,"multiple"),valueRef:jt(e,"value"),renderLabelRef:jt(e,"renderLabel"),renderOptionRef:jt(e,"renderOption"),labelFieldRef:jt(e,"labelField"),valueFieldRef:jt(e,"valueField")}),_o(Wb,i),$n((()=>{const{value:e}=l;e&&e.sync()}));const x=ai((()=>{const{size:t}=e,{common:{cubicBezierEaseInOut:n},self:{height:o,borderRadius:i,color:a,groupHeaderTextColor:l,actionDividerColor:s,optionTextColorPressed:c,optionTextColor:u,optionTextColorDisabled:d,optionTextColorActive:p,optionOpacityDisabled:h,optionCheckColor:f,actionTextColor:v,optionColorPending:m,optionColorActive:g,loadingColor:b,loadingSize:y,optionColorActivePending:x,[ub("optionFontSize",t)]:C,[ub("optionHeight",t)]:w,[ub("optionPadding",t)]:k}}=r.value;return{"--n-height":o,"--n-action-divider-color":s,"--n-action-text-color":v,"--n-bezier":n,"--n-border-radius":i,"--n-color":a,"--n-option-font-size":C,"--n-group-header-text-color":l,"--n-option-check-color":f,"--n-option-color-pending":m,"--n-option-color-active":g,"--n-option-color-active-pending":x,"--n-option-height":w,"--n-option-opacity-disabled":h,"--n-option-text-color":u,"--n-option-text-color-active":p,"--n-option-text-color-disabled":d,"--n-option-text-color-pressed":c,"--n-option-padding":k,"--n-option-padding-left":Bm(k,"left"),"--n-option-padding-right":Bm(k,"right"),"--n-loading-color":b,"--n-loading-size":y}})),{inlineThemeDisabled:C}=e,w=C?KP("internal-select-menu",ai((()=>e.size[0])),x,e):void 0,k={selfRef:i,next:function(){const{value:e}=u;e&&b(e.getNext({loop:!0}),!0)},prev:function(){const{value:e}=u;e&&b(e.getPrev({loop:!0}),!0)},getPendingTmNode:function(){const{value:e}=u;return e||null}};return Dx(i,e.onResize),Object.assign({mergedTheme:r,mergedClsPrefix:t,rtlEnabled:o,virtualListRef:a,scrollbarRef:l,itemSize:h,padding:f,flattenedNodes:s,empty:m,virtualListContainer(){const{value:e}=a;return null==e?void 0:e.listElRef},virtualListContent(){const{value:e}=a;return null==e?void 0:e.itemsElRef},doScroll:g,handleFocusin:function(t){var n,o;(null===(n=i.value)||void 0===n?void 0:n.contains(t.target))&&(null===(o=e.onFocus)||void 0===o||o.call(e,t))},handleFocusout:function(t){var n,o;(null===(n=i.value)||void 0===n?void 0:n.contains(t.relatedTarget))||null===(o=e.onBlur)||void 0===o||o.call(e,t)},handleKeyUp:function(t){var n;Mm(t,"action")||null===(n=e.onKeyup)||void 0===n||n.call(e,t)},handleKeyDown:function(t){var n;Mm(t,"action")||null===(n=e.onKeydown)||void 0===n||n.call(e,t)},handleMouseDown:function(t){var n;null===(n=e.onMousedown)||void 0===n||n.call(e,t),e.focusable||t.preventDefault()},handleVirtualListResize:function(){var e;null===(e=l.value)||void 0===e||e.sync()},handleVirtualListScroll:function(e){var t;null===(t=l.value)||void 0===t||t.sync(),g(e)},cssVars:C?void 0:x,themeClass:null==w?void 0:w.themeClass,onRender:null==w?void 0:w.onRender},k)},render(){const{$slots:e,virtualScroll:t,clsPrefix:n,mergedTheme:o,themeClass:r,onRender:i}=this;return null==i||i(),li("div",{ref:"selfRef",tabindex:this.focusable?0:-1,class:[`${n}-base-select-menu`,this.rtlEnabled&&`${n}-base-select-menu--rtl`,r,this.multiple&&`${n}-base-select-menu--multiple`],style:this.cssVars,onFocusin:this.handleFocusin,onFocusout:this.handleFocusout,onKeyup:this.handleKeyUp,onKeydown:this.handleKeyDown,onMousedown:this.handleMouseDown,onMouseenter:this.onMouseenter,onMouseleave:this.onMouseleave},wg(e.header,(e=>e&&li("div",{class:`${n}-base-select-menu__header`,"data-header":!0,key:"header"},e))),this.loading?li("div",{class:`${n}-base-select-menu__loading`},li(RT,{clsPrefix:n,strokeWidth:20})):this.empty?li("div",{class:`${n}-base-select-menu__empty`,"data-empty":!0},xg(e.empty,(()=>[li(Zz,{theme:o.peers.Empty,themeOverrides:o.peerOverrides.Empty})]))):li(lR,{ref:"scrollbarRef",theme:o.peers.Scrollbar,themeOverrides:o.peerOverrides.Scrollbar,scrollable:this.scrollable,container:t?this.virtualListContainer:void 0,content:t?this.virtualListContent:void 0,onScroll:t?void 0:this.doScroll},{default:()=>t?li(Ax,{ref:"virtualListRef",class:`${n}-virtual-list`,items:this.flattenedNodes,itemSize:this.itemSize,showScrollbar:!1,paddingTop:this.padding.top,paddingBottom:this.padding.bottom,onResize:this.handleVirtualListResize,onScroll:this.handleVirtualListScroll,itemResizable:!0},{default:({item:e})=>e.isGroup?li(fR,{key:e.key,clsPrefix:n,tmNode:e}):e.ignored?null:li(hR,{clsPrefix:n,key:e.key,tmNode:e})}):li("div",{class:`${n}-base-select-menu-option-wrapper`,style:{paddingTop:this.padding.top,paddingBottom:this.padding.bottom}},this.flattenedNodes.map((e=>e.isGroup?li(fR,{key:e.key,clsPrefix:n,tmNode:e}):li(hR,{clsPrefix:n,key:e.key,tmNode:e}))))}),wg(e.action,(e=>e&&[li("div",{class:`${n}-base-select-menu__action`,"data-action":!0,key:"action"},e),li(ST,{onFocus:this.onTabOut,key:"focus-detector"})])))}}),xR=nb("base-wave","\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n border-radius: inherit;\n"),CR=zn({name:"BaseWave",props:{clsPrefix:{type:String,required:!0}},setup(e){qP("-base-wave",xR,jt(e,"clsPrefix"));const t=Et(null),n=Et(!1);let o=null;return Hn((()=>{null!==o&&window.clearTimeout(o)})),{active:n,selfRef:t,play(){null!==o&&(window.clearTimeout(o),n.value=!1,o=null),tn((()=>{var e;null===(e=t.value)||void 0===e||e.offsetHeight,n.value=!0,o=window.setTimeout((()=>{n.value=!1,o=null}),1e3)}))}}},render(){const{clsPrefix:e}=this;return li("div",{ref:"selfRef","aria-hidden":!0,class:[`${e}-base-wave`,this.active&&`${e}-base-wave--active`]})}}),wR={space:"6px",spaceArrow:"10px",arrowOffset:"10px",arrowOffsetVertical:"10px",arrowHeight:"6px",padding:"8px 14px"};function kR(e){const{boxShadow2:t,popoverColor:n,textColor2:o,borderRadius:r,fontSize:i,dividerColor:a}=e;return Object.assign(Object.assign({},wR),{fontSize:i,borderRadius:r,color:n,dividerColor:a,textColor:o,boxShadow:t})}const SR={name:"Popover",common:qz,self:kR},_R={name:"Popover",common:tz,self:kR},PR={top:"bottom",bottom:"top",left:"right",right:"left"},TR="var(--n-arrow-height) * 1.414",AR=eb([nb("popover","\n transition:\n box-shadow .3s var(--n-bezier),\n background-color .3s var(--n-bezier),\n color .3s var(--n-bezier);\n position: relative;\n font-size: var(--n-font-size);\n color: var(--n-text-color);\n box-shadow: var(--n-box-shadow);\n word-break: break-word;\n ",[eb(">",[nb("scrollbar","\n height: inherit;\n max-height: inherit;\n ")]),ib("raw","\n background-color: var(--n-color);\n border-radius: var(--n-border-radius);\n ",[ib("scrollable",[ib("show-header-or-footer","padding: var(--n-padding);")])]),ob("header","\n padding: var(--n-padding);\n border-bottom: 1px solid var(--n-divider-color);\n transition: border-color .3s var(--n-bezier);\n "),ob("footer","\n padding: var(--n-padding);\n border-top: 1px solid var(--n-divider-color);\n transition: border-color .3s var(--n-bezier);\n "),rb("scrollable, show-header-or-footer",[ob("content","\n padding: var(--n-padding);\n ")])]),nb("popover-shared","\n transform-origin: inherit;\n ",[nb("popover-arrow-wrapper","\n position: absolute;\n overflow: hidden;\n pointer-events: none;\n ",[nb("popover-arrow",`\n transition: background-color .3s var(--n-bezier);\n position: absolute;\n display: block;\n width: calc(${TR});\n height: calc(${TR});\n box-shadow: 0 0 8px 0 rgba(0, 0, 0, .12);\n transform: rotate(45deg);\n background-color: var(--n-color);\n pointer-events: all;\n `)]),eb("&.popover-transition-enter-from, &.popover-transition-leave-to","\n opacity: 0;\n transform: scale(.85);\n "),eb("&.popover-transition-enter-to, &.popover-transition-leave-from","\n transform: scale(1);\n opacity: 1;\n "),eb("&.popover-transition-enter-active","\n transition:\n box-shadow .3s var(--n-bezier),\n background-color .3s var(--n-bezier),\n color .3s var(--n-bezier),\n opacity .15s var(--n-bezier-ease-out),\n transform .15s var(--n-bezier-ease-out);\n "),eb("&.popover-transition-leave-active","\n transition:\n box-shadow .3s var(--n-bezier),\n background-color .3s var(--n-bezier),\n color .3s var(--n-bezier),\n opacity .15s var(--n-bezier-ease-in),\n transform .15s var(--n-bezier-ease-in);\n ")]),OR("top-start",`\n top: calc(${TR} / -2);\n left: calc(${ER("top-start")} - var(--v-offset-left));\n `),OR("top",`\n top: calc(${TR} / -2);\n transform: translateX(calc(${TR} / -2)) rotate(45deg);\n left: 50%;\n `),OR("top-end",`\n top: calc(${TR} / -2);\n right: calc(${ER("top-end")} + var(--v-offset-left));\n `),OR("bottom-start",`\n bottom: calc(${TR} / -2);\n left: calc(${ER("bottom-start")} - var(--v-offset-left));\n `),OR("bottom",`\n bottom: calc(${TR} / -2);\n transform: translateX(calc(${TR} / -2)) rotate(45deg);\n left: 50%;\n `),OR("bottom-end",`\n bottom: calc(${TR} / -2);\n right: calc(${ER("bottom-end")} + var(--v-offset-left));\n `),OR("left-start",`\n left: calc(${TR} / -2);\n top: calc(${ER("left-start")} - var(--v-offset-top));\n `),OR("left",`\n left: calc(${TR} / -2);\n transform: translateY(calc(${TR} / -2)) rotate(45deg);\n top: 50%;\n `),OR("left-end",`\n left: calc(${TR} / -2);\n bottom: calc(${ER("left-end")} + var(--v-offset-top));\n `),OR("right-start",`\n right: calc(${TR} / -2);\n top: calc(${ER("right-start")} - var(--v-offset-top));\n `),OR("right",`\n right: calc(${TR} / -2);\n transform: translateY(calc(${TR} / -2)) rotate(45deg);\n top: 50%;\n `),OR("right-end",`\n right: calc(${TR} / -2);\n bottom: calc(${ER("right-end")} + var(--v-offset-top));\n `),...(zR={top:["right-start","left-start"],right:["top-end","bottom-end"],bottom:["right-end","left-end"],left:["top-start","bottom-start"]},RR=(e,t)=>{const n=["right","left"].includes(t),o=n?"width":"height";return e.map((e=>{const r="end"===e.split("-")[1],i=`calc((var(--v-target-${o}, 0px) - ${TR}) / 2)`,a=ER(e);return eb(`[v-placement="${e}"] >`,[nb("popover-shared",[rb("center-arrow",[nb("popover-arrow",`${t}: calc(max(${i}, ${a}) ${r?"+":"-"} var(--v-offset-${n?"left":"top"}));`)])])])}))},(vC(zR)?fC:C_)(zR,u_(RR)))]);var zR,RR;function ER(e){return["top","bottom"].includes(e.split("-")[0])?"var(--n-arrow-offset)":"var(--n-arrow-offset-vertical)"}function OR(e,t){const n=e.split("-")[0],o=["top","bottom"].includes(n)?"height: var(--n-space-arrow);":"width: var(--n-space-arrow);";return eb(`[v-placement="${e}"] >`,[nb("popover-shared",`\n margin-${PR[n]}: var(--n-space);\n `,[rb("show-arrow",`\n margin-${PR[n]}: var(--n-space-arrow);\n `),rb("overlap","\n margin: 0;\n "),cb("popover-arrow-wrapper",`\n right: 0;\n left: 0;\n top: 0;\n bottom: 0;\n ${n}: 100%;\n ${PR[n]}: auto;\n ${o}\n `,[nb("popover-arrow",t)])])])}const MR=Object.assign(Object.assign({},I_.props),{to:Yb.propTo,show:Boolean,trigger:String,showArrow:Boolean,delay:Number,duration:Number,raw:Boolean,arrowPointToCenter:Boolean,arrowClass:String,arrowStyle:[String,Object],arrowWrapperClass:String,arrowWrapperStyle:[String,Object],displayDirective:String,x:Number,y:Number,flip:Boolean,overlap:Boolean,placement:String,width:[Number,String],keepAliveOnHover:Boolean,scrollable:Boolean,contentClass:String,contentStyle:[Object,String],headerClass:String,headerStyle:[Object,String],footerClass:String,footerStyle:[Object,String],internalDeactivateImmediately:Boolean,animated:Boolean,onClickoutside:Function,internalTrapFocus:Boolean,internalOnAfterLeave:Function,minWidth:Number,maxWidth:Number});function FR({arrowClass:e,arrowStyle:t,arrowWrapperClass:n,arrowWrapperStyle:o,clsPrefix:r}){return li("div",{key:"__popover-arrow__",style:o,class:[`${r}-popover-arrow-wrapper`,n]},li("div",{class:[`${r}-popover-arrow`,e],style:t}))}const IR=zn({name:"PopoverBody",inheritAttrs:!1,props:MR,setup(e,{slots:t,attrs:n}){const{namespaceRef:o,mergedClsPrefixRef:r,inlineThemeDisabled:i}=B_(e),a=I_("Popover","-popover",AR,SR,e,r),l=Et(null),s=Po("NPopover"),c=Et(null),u=Et(e.show),d=Et(!1);ir((()=>{const{show:t}=e;!t||(void 0===db&&(db=navigator.userAgent.includes("Node.js")||navigator.userAgent.includes("jsdom")),db)||e.internalDeactivateImmediately||(d.value=!0)}));const p=ai((()=>{const{trigger:t,onClickoutside:n}=e,o=[],{positionManuallyRef:{value:r}}=s;return r||("click"!==t||n||o.push([dy,y,void 0,{capture:!0}]),"hover"===t&&o.push([cy,b])),n&&o.push([dy,y,void 0,{capture:!0}]),("show"===e.displayDirective||e.animated&&d.value)&&o.push([Mi,e.show]),o})),h=ai((()=>{const{common:{cubicBezierEaseInOut:e,cubicBezierEaseIn:t,cubicBezierEaseOut:n},self:{space:o,spaceArrow:r,padding:i,fontSize:l,textColor:s,dividerColor:c,color:u,boxShadow:d,borderRadius:p,arrowHeight:h,arrowOffset:f,arrowOffsetVertical:v}}=a.value;return{"--n-box-shadow":d,"--n-bezier":e,"--n-bezier-ease-in":t,"--n-bezier-ease-out":n,"--n-font-size":l,"--n-text-color":s,"--n-color":u,"--n-divider-color":c,"--n-border-radius":p,"--n-arrow-height":h,"--n-arrow-offset":f,"--n-arrow-offset-vertical":v,"--n-padding":i,"--n-space":o,"--n-space-arrow":r}})),f=ai((()=>{const t="trigger"===e.width?void 0:Ag(e.width),n=[];t&&n.push({width:t});const{maxWidth:o,minWidth:r}=e;return o&&n.push({maxWidth:Ag(o)}),r&&n.push({maxWidth:Ag(r)}),i||n.push(h.value),n})),v=i?KP("popover",void 0,h,e):void 0;function m(t){"hover"===e.trigger&&e.keepAliveOnHover&&e.show&&s.handleMouseEnter(t)}function g(t){"hover"===e.trigger&&e.keepAliveOnHover&&s.handleMouseLeave(t)}function b(t){"hover"!==e.trigger||x().contains(Fm(t))||s.handleMouseMoveOutside(t)}function y(t){("click"===e.trigger&&!x().contains(Fm(t))||e.onClickoutside)&&s.handleClickOutside(t)}function x(){return s.getTriggerElement()}return s.setBodyInstance({syncPosition:function(){var e;null===(e=l.value)||void 0===e||e.syncPosition()}}),Hn((()=>{s.setBodyInstance(null)})),lr(jt(e,"show"),(t=>{e.animated||(u.value=!!t)})),_o(Gb,c),_o(qb,null),_o(Ub,null),{displayed:d,namespace:o,isMounted:s.isMountedRef,zIndex:s.zIndexRef,followerRef:l,adjustedTo:Yb(e),followerEnabled:u,renderContentNode:function(){if(null==v||v.onRender(),!("show"===e.displayDirective||e.show||e.animated&&d.value))return null;let o;const i=s.internalRenderBodyRef.value,{value:a}=r;if(i)o=i([`${a}-popover-shared`,null==v?void 0:v.themeClass.value,e.overlap&&`${a}-popover-shared--overlap`,e.showArrow&&`${a}-popover-shared--show-arrow`,e.arrowPointToCenter&&`${a}-popover-shared--center-arrow`],c,f.value,m,g);else{const{value:r}=s.extraClassRef,{internalTrapFocus:i}=e,l=!kg(t.header)||!kg(t.footer),u=()=>{var n,o;const r=l?li(yr,null,wg(t.header,(t=>t?li("div",{class:[`${a}-popover__header`,e.headerClass],style:e.headerStyle},t):null)),wg(t.default,(n=>n?li("div",{class:[`${a}-popover__content`,e.contentClass],style:e.contentStyle},t):null)),wg(t.footer,(t=>t?li("div",{class:[`${a}-popover__footer`,e.footerClass],style:e.footerStyle},t):null))):e.scrollable?null===(n=t.default)||void 0===n?void 0:n.call(t):li("div",{class:[`${a}-popover__content`,e.contentClass],style:e.contentStyle},t);return[e.scrollable?li(sR,{contentClass:l?void 0:`${a}-popover__content ${null!==(o=e.contentClass)&&void 0!==o?o:""}`,contentStyle:l?void 0:e.contentStyle},{default:()=>r}):r,e.showArrow?FR({arrowClass:e.arrowClass,arrowStyle:e.arrowStyle,arrowWrapperClass:e.arrowWrapperClass,arrowWrapperStyle:e.arrowWrapperStyle,clsPrefix:a}):null]};o=li("div",Wr({class:[`${a}-popover`,`${a}-popover-shared`,null==v?void 0:v.themeClass.value,r.map((e=>`${a}-${e}`)),{[`${a}-popover--scrollable`]:e.scrollable,[`${a}-popover--show-header-or-footer`]:l,[`${a}-popover--raw`]:e.raw,[`${a}-popover-shared--overlap`]:e.overlap,[`${a}-popover-shared--show-arrow`]:e.showArrow,[`${a}-popover-shared--center-arrow`]:e.arrowPointToCenter}],ref:c,style:f.value,onKeydown:s.handleKeydown,onMouseenter:m,onMouseleave:g},n),i?li(Bx,{active:e.show,autoFocus:!0},{default:u}):u())}return fn(o,p.value)}}},render(){return li(Fy,{ref:"followerRef",zIndex:this.zIndex,show:this.show,enabled:this.followerEnabled,to:this.adjustedTo,x:this.x,y:this.y,flip:this.flip,placement:this.placement,containerClass:this.namespace,overlap:this.overlap,width:"trigger"===this.width?"target":void 0,teleportDisabled:this.adjustedTo===Yb.tdkey},{default:()=>this.animated?li(vi,{name:"popover-transition",appear:this.isMounted,onEnter:()=>{this.followerEnabled=!0},onAfterLeave:()=>{var e;null===(e=this.internalOnAfterLeave)||void 0===e||e.call(this),this.followerEnabled=!1,this.displayed=!1}},{default:this.renderContentNode}):this.renderContentNode()})}}),LR=Object.keys(MR),BR={focus:["onFocus","onBlur"],click:["onClick"],hover:["onMouseenter","onMouseleave"],manual:[],nested:["onFocus","onBlur","onMouseenter","onMouseleave","onClick"]},DR={show:{type:Boolean,default:void 0},defaultShow:Boolean,showArrow:{type:Boolean,default:!0},trigger:{type:String,default:"hover"},delay:{type:Number,default:100},duration:{type:Number,default:100},raw:Boolean,placement:{type:String,default:"top"},x:Number,y:Number,arrowPointToCenter:Boolean,disabled:Boolean,getDisabled:Function,displayDirective:{type:String,default:"if"},arrowClass:String,arrowStyle:[String,Object],arrowWrapperClass:String,arrowWrapperStyle:[String,Object],flip:{type:Boolean,default:!0},animated:{type:Boolean,default:!0},width:{type:[Number,String],default:void 0},overlap:Boolean,keepAliveOnHover:{type:Boolean,default:!0},zIndex:Number,to:Yb.propTo,scrollable:Boolean,contentClass:String,contentStyle:[Object,String],headerClass:String,headerStyle:[Object,String],footerClass:String,footerStyle:[Object,String],onClickoutside:Function,"onUpdate:show":[Function,Array],onUpdateShow:[Function,Array],internalDeactivateImmediately:Boolean,internalSyncTargetWithParent:Boolean,internalInheritedEventHandlers:{type:Array,default:()=>[]},internalTrapFocus:Boolean,internalExtraClass:{type:Array,default:()=>[]},onShow:[Function,Array],onHide:[Function,Array],arrow:{type:Boolean,default:void 0},minWidth:Number,maxWidth:Number},$R=zn({name:"Popover",inheritAttrs:!1,props:Object.assign(Object.assign(Object.assign({},I_.props),DR),{internalOnAfterLeave:Function,internalRenderBody:Function}),__popover__:!0,setup(e){const t=$b(),n=Et(null),o=ai((()=>e.show)),r=Et(e.defaultShow),i=Db(o,r),a=mb((()=>!e.disabled&&i.value)),l=()=>{if(e.disabled)return!0;const{getDisabled:t}=e;return!!(null==t?void 0:t())},s=()=>!l()&&i.value,c=Nb(e,["arrow","showArrow"]),u=ai((()=>!e.overlap&&c.value));let d=null;const p=Et(null),h=Et(null),f=mb((()=>void 0!==e.x&&void 0!==e.y));function v(t){const{"onUpdate:show":n,onUpdateShow:o,onShow:i,onHide:a}=e;r.value=t,n&&dg(n,t),o&&dg(o,t),t&&i&&dg(i,!0),t&&a&&dg(a,!1)}function m(){const{value:e}=p;e&&(window.clearTimeout(e),p.value=null)}function g(){const{value:e}=h;e&&(window.clearTimeout(e),h.value=null)}function b(){const t=l();if("hover"===e.trigger&&!t){if(g(),null!==p.value)return;if(s())return;const t=()=>{v(!0),p.value=null},{delay:n}=e;0===n?t():p.value=window.setTimeout(t,n)}}function y(){const t=l();if("hover"===e.trigger&&!t){if(m(),null!==h.value)return;if(!s())return;const t=()=>{v(!1),h.value=null},{duration:n}=e;0===n?t():h.value=window.setTimeout(t,n)}}return _o("NPopover",{getTriggerElement:function(){var e;return null===(e=n.value)||void 0===e?void 0:e.targetRef},handleKeydown:function(t){e.internalTrapFocus&&"Escape"===t.key&&(m(),g(),v(!1))},handleMouseEnter:b,handleMouseLeave:y,handleClickOutside:function(t){var n;s()&&("click"===e.trigger&&(m(),g(),v(!1)),null===(n=e.onClickoutside)||void 0===n||n.call(e,t))},handleMouseMoveOutside:function(){y()},setBodyInstance:function(e){d=e},positionManuallyRef:f,isMountedRef:t,zIndexRef:jt(e,"zIndex"),extraClassRef:jt(e,"internalExtraClass"),internalRenderBodyRef:jt(e,"internalRenderBody")}),ir((()=>{i.value&&l()&&v(!1)})),{binderInstRef:n,positionManually:f,mergedShowConsideringDisabledProp:a,uncontrolledShow:r,mergedShowArrow:u,getMergedShow:s,setShow:function(e){r.value=e},handleClick:function(){"click"!==e.trigger||l()||(m(),g(),v(!s()))},handleMouseEnter:b,handleMouseLeave:y,handleFocus:function(){const t=l();if("focus"===e.trigger&&!t){if(s())return;v(!0)}},handleBlur:function(){const t=l();if("focus"===e.trigger&&!t){if(!s())return;v(!1)}},syncPosition:function(){d&&d.syncPosition()}}},render(){var e;const{positionManually:t,$slots:n}=this;let o,r=!1;if(!t&&(o=n.activator?gg(n,"activator"):gg(n,"trigger"),o)){o=Br(o),o=o.type===xr?li("span",[o]):o;const n={onClick:this.handleClick,onMouseenter:this.handleMouseEnter,onMouseleave:this.handleMouseLeave,onFocus:this.handleFocus,onBlur:this.handleBlur};if(null===(e=o.type)||void 0===e?void 0:e.__popover__)r=!0,o.props||(o.props={internalSyncTargetWithParent:!0,internalInheritedEventHandlers:[]}),o.props.internalSyncTargetWithParent=!0,o.props.internalInheritedEventHandlers?o.props.internalInheritedEventHandlers=[n,...o.props.internalInheritedEventHandlers]:o.props.internalInheritedEventHandlers=[n];else{const{internalInheritedEventHandlers:e}=this,r=[n,...e],s={onBlur:e=>{r.forEach((t=>{t.onBlur(e)}))},onFocus:e=>{r.forEach((t=>{t.onFocus(e)}))},onClick:e=>{r.forEach((t=>{t.onClick(e)}))},onMouseenter:e=>{r.forEach((t=>{t.onMouseenter(e)}))},onMouseleave:e=>{r.forEach((t=>{t.onMouseleave(e)}))}};i=o,a=e?"nested":t?"manual":this.trigger,l=s,BR[a].forEach((e=>{i.props?i.props=Object.assign({},i.props):i.props={};const t=i.props[e],n=l[e];i.props[e]=t?(...e)=>{t(...e),n(...e)}:n}))}}var i,a,l;return li(ay,{ref:"binderInstRef",syncTarget:!r,syncTargetWithParent:this.internalSyncTargetWithParent},{default:()=>{this.mergedShowConsideringDisabledProp;const e=this.getMergedShow();return[this.internalTrapFocus&&e?fn(li("div",{style:{position:"fixed",inset:0}}),[[fy,{enabled:e,zIndex:this.zIndex}]]):null,t?null:li(ly,null,{default:()=>o}),li(IR,sg(this.$props,LR,Object.assign(Object.assign({},this.$attrs),{showArrow:this.mergedShowArrow,show:e})),{default:()=>{var e,t;return null===(t=(e=this.$slots).default)||void 0===t?void 0:t.call(e)},header:()=>{var e,t;return null===(t=(e=this.$slots).header)||void 0===t?void 0:t.call(e)},footer:()=>{var e,t;return null===(t=(e=this.$slots).footer)||void 0===t?void 0:t.call(e)}})]}})}}),NR={closeIconSizeTiny:"12px",closeIconSizeSmall:"12px",closeIconSizeMedium:"14px",closeIconSizeLarge:"14px",closeSizeTiny:"16px",closeSizeSmall:"16px",closeSizeMedium:"18px",closeSizeLarge:"18px",padding:"0 7px",closeMargin:"0 0 0 4px"},jR={name:"Tag",common:tz,self(e){const{textColor2:t,primaryColorHover:n,primaryColorPressed:o,primaryColor:r,infoColor:i,successColor:a,warningColor:l,errorColor:s,baseColor:c,borderColor:u,tagColor:d,opacityDisabled:p,closeIconColor:h,closeIconColorHover:f,closeIconColorPressed:v,closeColorHover:m,closeColorPressed:g,borderRadiusSmall:b,fontSizeMini:y,fontSizeTiny:x,fontSizeSmall:C,fontSizeMedium:w,heightMini:k,heightTiny:S,heightSmall:_,heightMedium:P,buttonColor2Hover:T,buttonColor2Pressed:A,fontWeightStrong:z}=e;return Object.assign(Object.assign({},NR),{closeBorderRadius:b,heightTiny:k,heightSmall:S,heightMedium:_,heightLarge:P,borderRadius:b,opacityDisabled:p,fontSizeTiny:y,fontSizeSmall:x,fontSizeMedium:C,fontSizeLarge:w,fontWeightStrong:z,textColorCheckable:t,textColorHoverCheckable:t,textColorPressedCheckable:t,textColorChecked:c,colorCheckable:"#0000",colorHoverCheckable:T,colorPressedCheckable:A,colorChecked:r,colorCheckedHover:n,colorCheckedPressed:o,border:`1px solid ${u}`,textColor:t,color:d,colorBordered:"#0000",closeIconColor:h,closeIconColorHover:f,closeIconColorPressed:v,closeColorHover:m,closeColorPressed:g,borderPrimary:`1px solid ${tg(r,{alpha:.3})}`,textColorPrimary:r,colorPrimary:tg(r,{alpha:.16}),colorBorderedPrimary:"#0000",closeIconColorPrimary:ng(r,{lightness:.7}),closeIconColorHoverPrimary:ng(r,{lightness:.7}),closeIconColorPressedPrimary:ng(r,{lightness:.7}),closeColorHoverPrimary:tg(r,{alpha:.16}),closeColorPressedPrimary:tg(r,{alpha:.12}),borderInfo:`1px solid ${tg(i,{alpha:.3})}`,textColorInfo:i,colorInfo:tg(i,{alpha:.16}),colorBorderedInfo:"#0000",closeIconColorInfo:ng(i,{alpha:.7}),closeIconColorHoverInfo:ng(i,{alpha:.7}),closeIconColorPressedInfo:ng(i,{alpha:.7}),closeColorHoverInfo:tg(i,{alpha:.16}),closeColorPressedInfo:tg(i,{alpha:.12}),borderSuccess:`1px solid ${tg(a,{alpha:.3})}`,textColorSuccess:a,colorSuccess:tg(a,{alpha:.16}),colorBorderedSuccess:"#0000",closeIconColorSuccess:ng(a,{alpha:.7}),closeIconColorHoverSuccess:ng(a,{alpha:.7}),closeIconColorPressedSuccess:ng(a,{alpha:.7}),closeColorHoverSuccess:tg(a,{alpha:.16}),closeColorPressedSuccess:tg(a,{alpha:.12}),borderWarning:`1px solid ${tg(l,{alpha:.3})}`,textColorWarning:l,colorWarning:tg(l,{alpha:.16}),colorBorderedWarning:"#0000",closeIconColorWarning:ng(l,{alpha:.7}),closeIconColorHoverWarning:ng(l,{alpha:.7}),closeIconColorPressedWarning:ng(l,{alpha:.7}),closeColorHoverWarning:tg(l,{alpha:.16}),closeColorPressedWarning:tg(l,{alpha:.11}),borderError:`1px solid ${tg(s,{alpha:.3})}`,textColorError:s,colorError:tg(s,{alpha:.16}),colorBorderedError:"#0000",closeIconColorError:ng(s,{alpha:.7}),closeIconColorHoverError:ng(s,{alpha:.7}),closeIconColorPressedError:ng(s,{alpha:.7}),closeColorHoverError:tg(s,{alpha:.16}),closeColorPressedError:tg(s,{alpha:.12})})}},HR={name:"Tag",common:qz,self:function(e){const{textColor2:t,primaryColorHover:n,primaryColorPressed:o,primaryColor:r,infoColor:i,successColor:a,warningColor:l,errorColor:s,baseColor:c,borderColor:u,opacityDisabled:d,tagColor:p,closeIconColor:h,closeIconColorHover:f,closeIconColorPressed:v,borderRadiusSmall:m,fontSizeMini:g,fontSizeTiny:b,fontSizeSmall:y,fontSizeMedium:x,heightMini:C,heightTiny:w,heightSmall:k,heightMedium:S,closeColorHover:_,closeColorPressed:P,buttonColor2Hover:T,buttonColor2Pressed:A,fontWeightStrong:z}=e;return Object.assign(Object.assign({},NR),{closeBorderRadius:m,heightTiny:C,heightSmall:w,heightMedium:k,heightLarge:S,borderRadius:m,opacityDisabled:d,fontSizeTiny:g,fontSizeSmall:b,fontSizeMedium:y,fontSizeLarge:x,fontWeightStrong:z,textColorCheckable:t,textColorHoverCheckable:t,textColorPressedCheckable:t,textColorChecked:c,colorCheckable:"#0000",colorHoverCheckable:T,colorPressedCheckable:A,colorChecked:r,colorCheckedHover:n,colorCheckedPressed:o,border:`1px solid ${u}`,textColor:t,color:p,colorBordered:"rgb(250, 250, 252)",closeIconColor:h,closeIconColorHover:f,closeIconColorPressed:v,closeColorHover:_,closeColorPressed:P,borderPrimary:`1px solid ${tg(r,{alpha:.3})}`,textColorPrimary:r,colorPrimary:tg(r,{alpha:.12}),colorBorderedPrimary:tg(r,{alpha:.1}),closeIconColorPrimary:r,closeIconColorHoverPrimary:r,closeIconColorPressedPrimary:r,closeColorHoverPrimary:tg(r,{alpha:.12}),closeColorPressedPrimary:tg(r,{alpha:.18}),borderInfo:`1px solid ${tg(i,{alpha:.3})}`,textColorInfo:i,colorInfo:tg(i,{alpha:.12}),colorBorderedInfo:tg(i,{alpha:.1}),closeIconColorInfo:i,closeIconColorHoverInfo:i,closeIconColorPressedInfo:i,closeColorHoverInfo:tg(i,{alpha:.12}),closeColorPressedInfo:tg(i,{alpha:.18}),borderSuccess:`1px solid ${tg(a,{alpha:.3})}`,textColorSuccess:a,colorSuccess:tg(a,{alpha:.12}),colorBorderedSuccess:tg(a,{alpha:.1}),closeIconColorSuccess:a,closeIconColorHoverSuccess:a,closeIconColorPressedSuccess:a,closeColorHoverSuccess:tg(a,{alpha:.12}),closeColorPressedSuccess:tg(a,{alpha:.18}),borderWarning:`1px solid ${tg(l,{alpha:.35})}`,textColorWarning:l,colorWarning:tg(l,{alpha:.15}),colorBorderedWarning:tg(l,{alpha:.12}),closeIconColorWarning:l,closeIconColorHoverWarning:l,closeIconColorPressedWarning:l,closeColorHoverWarning:tg(l,{alpha:.12}),closeColorPressedWarning:tg(l,{alpha:.18}),borderError:`1px solid ${tg(s,{alpha:.23})}`,textColorError:s,colorError:tg(s,{alpha:.1}),colorBorderedError:tg(s,{alpha:.08}),closeIconColorError:s,closeIconColorHoverError:s,closeIconColorPressedError:s,closeColorHoverError:tg(s,{alpha:.12}),closeColorPressedError:tg(s,{alpha:.18})})}},WR={color:Object,type:{type:String,default:"default"},round:Boolean,size:{type:String,default:"medium"},closable:Boolean,disabled:{type:Boolean,default:void 0}},UR=nb("tag","\n --n-close-margin: var(--n-close-margin-top) var(--n-close-margin-right) var(--n-close-margin-bottom) var(--n-close-margin-left);\n white-space: nowrap;\n position: relative;\n box-sizing: border-box;\n cursor: default;\n display: inline-flex;\n align-items: center;\n flex-wrap: nowrap;\n padding: var(--n-padding);\n border-radius: var(--n-border-radius);\n color: var(--n-text-color);\n background-color: var(--n-color);\n transition: \n border-color .3s var(--n-bezier),\n background-color .3s var(--n-bezier),\n color .3s var(--n-bezier),\n box-shadow .3s var(--n-bezier),\n opacity .3s var(--n-bezier);\n line-height: 1;\n height: var(--n-height);\n font-size: var(--n-font-size);\n",[rb("strong","\n font-weight: var(--n-font-weight-strong);\n "),ob("border","\n pointer-events: none;\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n border-radius: inherit;\n border: var(--n-border);\n transition: border-color .3s var(--n-bezier);\n "),ob("icon","\n display: flex;\n margin: 0 4px 0 0;\n color: var(--n-text-color);\n transition: color .3s var(--n-bezier);\n font-size: var(--n-avatar-size-override);\n "),ob("avatar","\n display: flex;\n margin: 0 6px 0 0;\n "),ob("close","\n margin: var(--n-close-margin);\n transition:\n background-color .3s var(--n-bezier),\n color .3s var(--n-bezier);\n "),rb("round","\n padding: 0 calc(var(--n-height) / 3);\n border-radius: calc(var(--n-height) / 2);\n ",[ob("icon","\n margin: 0 4px 0 calc((var(--n-height) - 8px) / -2);\n "),ob("avatar","\n margin: 0 6px 0 calc((var(--n-height) - 8px) / -2);\n "),rb("closable","\n padding: 0 calc(var(--n-height) / 4) 0 calc(var(--n-height) / 3);\n ")]),rb("icon, avatar",[rb("round","\n padding: 0 calc(var(--n-height) / 3) 0 calc(var(--n-height) / 2);\n ")]),rb("disabled","\n cursor: not-allowed !important;\n opacity: var(--n-opacity-disabled);\n "),rb("checkable","\n cursor: pointer;\n box-shadow: none;\n color: var(--n-text-color-checkable);\n background-color: var(--n-color-checkable);\n ",[ib("disabled",[eb("&:hover","background-color: var(--n-color-hover-checkable);",[ib("checked","color: var(--n-text-color-hover-checkable);")]),eb("&:active","background-color: var(--n-color-pressed-checkable);",[ib("checked","color: var(--n-text-color-pressed-checkable);")])]),rb("checked","\n color: var(--n-text-color-checked);\n background-color: var(--n-color-checked);\n ",[ib("disabled",[eb("&:hover","background-color: var(--n-color-checked-hover);"),eb("&:active","background-color: var(--n-color-checked-pressed);")])])])]),VR=Object.assign(Object.assign(Object.assign({},I_.props),WR),{bordered:{type:Boolean,default:void 0},checked:Boolean,checkable:Boolean,strong:Boolean,triggerClickOnClose:Boolean,onClose:[Array,Function],onMouseenter:Function,onMouseleave:Function,"onUpdate:checked":Function,onUpdateChecked:Function,internalCloseFocusable:{type:Boolean,default:!0},internalCloseIsButtonTag:{type:Boolean,default:!0},onCheckedChange:Function}),qR=zn({name:"Tag",props:VR,setup(e){const t=Et(null),{mergedBorderedRef:n,mergedClsPrefixRef:o,inlineThemeDisabled:r,mergedRtlRef:i}=B_(e),a=I_("Tag","-tag",UR,HR,e,o);_o("n-tag",{roundRef:jt(e,"round")});const l={setTextContent(e){const{value:n}=t;n&&(n.textContent=e)}},s=GP("Tag",i,o),c=ai((()=>{const{type:t,size:o,color:{color:r,textColor:i}={}}=e,{common:{cubicBezierEaseInOut:l},self:{padding:s,closeMargin:c,borderRadius:u,opacityDisabled:d,textColorCheckable:p,textColorHoverCheckable:h,textColorPressedCheckable:f,textColorChecked:v,colorCheckable:m,colorHoverCheckable:g,colorPressedCheckable:b,colorChecked:y,colorCheckedHover:x,colorCheckedPressed:C,closeBorderRadius:w,fontWeightStrong:k,[ub("colorBordered",t)]:S,[ub("closeSize",o)]:_,[ub("closeIconSize",o)]:P,[ub("fontSize",o)]:T,[ub("height",o)]:A,[ub("color",t)]:z,[ub("textColor",t)]:R,[ub("border",t)]:E,[ub("closeIconColor",t)]:O,[ub("closeIconColorHover",t)]:M,[ub("closeIconColorPressed",t)]:F,[ub("closeColorHover",t)]:I,[ub("closeColorPressed",t)]:L}}=a.value,B=Bm(c);return{"--n-font-weight-strong":k,"--n-avatar-size-override":`calc(${A} - 8px)`,"--n-bezier":l,"--n-border-radius":u,"--n-border":E,"--n-close-icon-size":P,"--n-close-color-pressed":L,"--n-close-color-hover":I,"--n-close-border-radius":w,"--n-close-icon-color":O,"--n-close-icon-color-hover":M,"--n-close-icon-color-pressed":F,"--n-close-icon-color-disabled":O,"--n-close-margin-top":B.top,"--n-close-margin-right":B.right,"--n-close-margin-bottom":B.bottom,"--n-close-margin-left":B.left,"--n-close-size":_,"--n-color":r||(n.value?S:z),"--n-color-checkable":m,"--n-color-checked":y,"--n-color-checked-hover":x,"--n-color-checked-pressed":C,"--n-color-hover-checkable":g,"--n-color-pressed-checkable":b,"--n-font-size":T,"--n-height":A,"--n-opacity-disabled":d,"--n-padding":s,"--n-text-color":i||R,"--n-text-color-checkable":p,"--n-text-color-checked":v,"--n-text-color-hover-checkable":h,"--n-text-color-pressed-checkable":f}})),u=r?KP("tag",ai((()=>{let t="";const{type:o,size:r,color:{color:i,textColor:a}={}}=e;return t+=o[0],t+=r[0],i&&(t+=`a${zg(i)}`),a&&(t+=`b${zg(a)}`),n.value&&(t+="c"),t})),c,e):void 0;return Object.assign(Object.assign({},l),{rtlEnabled:s,mergedClsPrefix:o,contentRef:t,mergedBordered:n,handleClick:function(){if(!e.disabled&&e.checkable){const{checked:t,onCheckedChange:n,onUpdateChecked:o,"onUpdate:checked":r}=e;o&&o(!t),r&&r(!t),n&&n(!t)}},handleCloseClick:function(t){if(e.triggerClickOnClose||t.stopPropagation(),!e.disabled){const{onClose:n}=e;n&&dg(n,t)}},cssVars:r?void 0:c,themeClass:null==u?void 0:u.themeClass,onRender:null==u?void 0:u.onRender})},render(){var e,t;const{mergedClsPrefix:n,rtlEnabled:o,closable:r,color:{borderColor:i}={},round:a,onRender:l,$slots:s}=this;null==l||l();const c=wg(s.avatar,(e=>e&&li("div",{class:`${n}-tag__avatar`},e))),u=wg(s.icon,(e=>e&&li("div",{class:`${n}-tag__icon`},e)));return li("div",{class:[`${n}-tag`,this.themeClass,{[`${n}-tag--rtl`]:o,[`${n}-tag--strong`]:this.strong,[`${n}-tag--disabled`]:this.disabled,[`${n}-tag--checkable`]:this.checkable,[`${n}-tag--checked`]:this.checkable&&this.checked,[`${n}-tag--round`]:a,[`${n}-tag--avatar`]:c,[`${n}-tag--icon`]:u,[`${n}-tag--closable`]:r}],style:this.cssVars,onClick:this.handleClick,onMouseenter:this.onMouseenter,onMouseleave:this.onMouseleave},u||c,li("span",{class:`${n}-tag__content`,ref:"contentRef"},null===(t=(e=this.$slots).default)||void 0===t?void 0:t.call(e)),!this.checkable&&r?li(kT,{clsPrefix:n,class:`${n}-tag__close`,disabled:this.disabled,onClick:this.handleCloseClick,focusable:this.internalCloseFocusable,round:a,isButtonTag:this.internalCloseIsButtonTag,absolute:!0}):null,!this.checkable&&this.mergedBordered?li("div",{class:`${n}-tag__border`,style:{borderColor:i}}):null)}}),KR=nb("base-clear","\n flex-shrink: 0;\n height: 1em;\n width: 1em;\n position: relative;\n",[eb(">",[ob("clear","\n font-size: var(--n-clear-size);\n height: 1em;\n width: 1em;\n cursor: pointer;\n color: var(--n-clear-color);\n transition: color .3s var(--n-bezier);\n display: flex;\n ",[eb("&:hover","\n color: var(--n-clear-color-hover)!important;\n "),eb("&:active","\n color: var(--n-clear-color-pressed)!important;\n ")]),ob("placeholder","\n display: flex;\n "),ob("clear, placeholder","\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translateX(-50%) translateY(-50%);\n ",[PT({originalTransform:"translateX(-50%) translateY(-50%)",left:"50%",top:"50%"})])])]),GR=zn({name:"BaseClear",props:{clsPrefix:{type:String,required:!0},show:Boolean,onClear:Function},setup:e=>(qP("-base-clear",KR,jt(e,"clsPrefix")),{handleMouseDown(e){e.preventDefault()}}),render(){const{clsPrefix:e}=this;return li("div",{class:`${e}-base-clear`},li(bT,null,{default:()=>{var t,n;return this.show?li("div",{key:"dismiss",class:`${e}-base-clear__clear`,onClick:this.onClear,onMousedown:this.handleMouseDown,"data-clear":!0},xg(this.$slots.icon,(()=>[li(CT,{clsPrefix:e},{default:()=>li(mT,null)})]))):li("div",{key:"icon",class:`${e}-base-clear__placeholder`},null===(n=(t=this.$slots).placeholder)||void 0===n?void 0:n.call(t))}}))}}),XR=zn({name:"InternalSelectionSuffix",props:{clsPrefix:{type:String,required:!0},showArrow:{type:Boolean,default:void 0},showClear:{type:Boolean,default:void 0},loading:{type:Boolean,default:!1},onClear:Function},setup:(e,{slots:t})=>()=>{const{clsPrefix:n}=e;return li(RT,{clsPrefix:n,class:`${n}-base-suffix`,strokeWidth:24,scale:.85,show:e.loading},{default:()=>e.showArrow?li(GR,{clsPrefix:n,show:e.showClear,onClear:e.onClear},{placeholder:()=>li(CT,{clsPrefix:n,class:`${n}-base-suffix__arrow`},{default:()=>xg(t.default,(()=>[li(vT,null)]))})}):null})}}),YR={paddingSingle:"0 26px 0 12px",paddingMultiple:"3px 26px 0 12px",clearSize:"16px",arrowSize:"16px"},QR={name:"InternalSelection",common:qz,peers:{Popover:SR},self:function(e){const{borderRadius:t,textColor2:n,textColorDisabled:o,inputColor:r,inputColorDisabled:i,primaryColor:a,primaryColorHover:l,warningColor:s,warningColorHover:c,errorColor:u,errorColorHover:d,borderColor:p,iconColor:h,iconColorDisabled:f,clearColor:v,clearColorHover:m,clearColorPressed:g,placeholderColor:b,placeholderColorDisabled:y,fontSizeTiny:x,fontSizeSmall:C,fontSizeMedium:w,fontSizeLarge:k,heightTiny:S,heightSmall:_,heightMedium:P,heightLarge:T}=e;return Object.assign(Object.assign({},YR),{fontSizeTiny:x,fontSizeSmall:C,fontSizeMedium:w,fontSizeLarge:k,heightTiny:S,heightSmall:_,heightMedium:P,heightLarge:T,borderRadius:t,textColor:n,textColorDisabled:o,placeholderColor:b,placeholderColorDisabled:y,color:r,colorDisabled:i,colorActive:r,border:`1px solid ${p}`,borderHover:`1px solid ${l}`,borderActive:`1px solid ${a}`,borderFocus:`1px solid ${l}`,boxShadowHover:"none",boxShadowActive:`0 0 0 2px ${tg(a,{alpha:.2})}`,boxShadowFocus:`0 0 0 2px ${tg(a,{alpha:.2})}`,caretColor:a,arrowColor:h,arrowColorDisabled:f,loadingColor:a,borderWarning:`1px solid ${s}`,borderHoverWarning:`1px solid ${c}`,borderActiveWarning:`1px solid ${s}`,borderFocusWarning:`1px solid ${c}`,boxShadowHoverWarning:"none",boxShadowActiveWarning:`0 0 0 2px ${tg(s,{alpha:.2})}`,boxShadowFocusWarning:`0 0 0 2px ${tg(s,{alpha:.2})}`,colorActiveWarning:r,caretColorWarning:s,borderError:`1px solid ${u}`,borderHoverError:`1px solid ${d}`,borderActiveError:`1px solid ${u}`,borderFocusError:`1px solid ${d}`,boxShadowHoverError:"none",boxShadowActiveError:`0 0 0 2px ${tg(u,{alpha:.2})}`,boxShadowFocusError:`0 0 0 2px ${tg(u,{alpha:.2})}`,colorActiveError:r,caretColorError:u,clearColor:v,clearColorHover:m,clearColorPressed:g})}},ZR={name:"InternalSelection",common:tz,peers:{Popover:_R},self(e){const{borderRadius:t,textColor2:n,textColorDisabled:o,inputColor:r,inputColorDisabled:i,primaryColor:a,primaryColorHover:l,warningColor:s,warningColorHover:c,errorColor:u,errorColorHover:d,iconColor:p,iconColorDisabled:h,clearColor:f,clearColorHover:v,clearColorPressed:m,placeholderColor:g,placeholderColorDisabled:b,fontSizeTiny:y,fontSizeSmall:x,fontSizeMedium:C,fontSizeLarge:w,heightTiny:k,heightSmall:S,heightMedium:_,heightLarge:P}=e;return Object.assign(Object.assign({},YR),{fontSizeTiny:y,fontSizeSmall:x,fontSizeMedium:C,fontSizeLarge:w,heightTiny:k,heightSmall:S,heightMedium:_,heightLarge:P,borderRadius:t,textColor:n,textColorDisabled:o,placeholderColor:g,placeholderColorDisabled:b,color:r,colorDisabled:i,colorActive:tg(a,{alpha:.1}),border:"1px solid #0000",borderHover:`1px solid ${l}`,borderActive:`1px solid ${a}`,borderFocus:`1px solid ${l}`,boxShadowHover:"none",boxShadowActive:`0 0 8px 0 ${tg(a,{alpha:.4})}`,boxShadowFocus:`0 0 8px 0 ${tg(a,{alpha:.4})}`,caretColor:a,arrowColor:p,arrowColorDisabled:h,loadingColor:a,borderWarning:`1px solid ${s}`,borderHoverWarning:`1px solid ${c}`,borderActiveWarning:`1px solid ${s}`,borderFocusWarning:`1px solid ${c}`,boxShadowHoverWarning:"none",boxShadowActiveWarning:`0 0 8px 0 ${tg(s,{alpha:.4})}`,boxShadowFocusWarning:`0 0 8px 0 ${tg(s,{alpha:.4})}`,colorActiveWarning:tg(s,{alpha:.1}),caretColorWarning:s,borderError:`1px solid ${u}`,borderHoverError:`1px solid ${d}`,borderActiveError:`1px solid ${u}`,borderFocusError:`1px solid ${d}`,boxShadowHoverError:"none",boxShadowActiveError:`0 0 8px 0 ${tg(u,{alpha:.4})}`,boxShadowFocusError:`0 0 8px 0 ${tg(u,{alpha:.4})}`,colorActiveError:tg(u,{alpha:.1}),caretColorError:u,clearColor:f,clearColorHover:v,clearColorPressed:m})}},JR=eb([nb("base-selection","\n --n-padding-single: var(--n-padding-single-top) var(--n-padding-single-right) var(--n-padding-single-bottom) var(--n-padding-single-left);\n --n-padding-multiple: var(--n-padding-multiple-top) var(--n-padding-multiple-right) var(--n-padding-multiple-bottom) var(--n-padding-multiple-left);\n position: relative;\n z-index: auto;\n box-shadow: none;\n width: 100%;\n max-width: 100%;\n display: inline-block;\n vertical-align: bottom;\n border-radius: var(--n-border-radius);\n min-height: var(--n-height);\n line-height: 1.5;\n font-size: var(--n-font-size);\n ",[nb("base-loading","\n color: var(--n-loading-color);\n "),nb("base-selection-tags","min-height: var(--n-height);"),ob("border, state-border","\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n pointer-events: none;\n border: var(--n-border);\n border-radius: inherit;\n transition:\n box-shadow .3s var(--n-bezier),\n border-color .3s var(--n-bezier);\n "),ob("state-border","\n z-index: 1;\n border-color: #0000;\n "),nb("base-suffix","\n cursor: pointer;\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n right: 10px;\n ",[ob("arrow","\n font-size: var(--n-arrow-size);\n color: var(--n-arrow-color);\n transition: color .3s var(--n-bezier);\n ")]),nb("base-selection-overlay","\n display: flex;\n align-items: center;\n white-space: nowrap;\n pointer-events: none;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: var(--n-padding-single);\n transition: color .3s var(--n-bezier);\n ",[ob("wrapper","\n flex-basis: 0;\n flex-grow: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n ")]),nb("base-selection-placeholder","\n color: var(--n-placeholder-color);\n ",[ob("inner","\n max-width: 100%;\n overflow: hidden;\n ")]),nb("base-selection-tags","\n cursor: pointer;\n outline: none;\n box-sizing: border-box;\n position: relative;\n z-index: auto;\n display: flex;\n padding: var(--n-padding-multiple);\n flex-wrap: wrap;\n align-items: center;\n width: 100%;\n vertical-align: bottom;\n background-color: var(--n-color);\n border-radius: inherit;\n transition:\n color .3s var(--n-bezier),\n box-shadow .3s var(--n-bezier),\n background-color .3s var(--n-bezier);\n "),nb("base-selection-label","\n height: var(--n-height);\n display: inline-flex;\n width: 100%;\n vertical-align: bottom;\n cursor: pointer;\n outline: none;\n z-index: auto;\n box-sizing: border-box;\n position: relative;\n transition:\n color .3s var(--n-bezier),\n box-shadow .3s var(--n-bezier),\n background-color .3s var(--n-bezier);\n border-radius: inherit;\n background-color: var(--n-color);\n align-items: center;\n ",[nb("base-selection-input","\n font-size: inherit;\n line-height: inherit;\n outline: none;\n cursor: pointer;\n box-sizing: border-box;\n border:none;\n width: 100%;\n padding: var(--n-padding-single);\n background-color: #0000;\n color: var(--n-text-color);\n transition: color .3s var(--n-bezier);\n caret-color: var(--n-caret-color);\n ",[ob("content","\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap; \n ")]),ob("render-label","\n color: var(--n-text-color);\n ")]),ib("disabled",[eb("&:hover",[ob("state-border","\n box-shadow: var(--n-box-shadow-hover);\n border: var(--n-border-hover);\n ")]),rb("focus",[ob("state-border","\n box-shadow: var(--n-box-shadow-focus);\n border: var(--n-border-focus);\n ")]),rb("active",[ob("state-border","\n box-shadow: var(--n-box-shadow-active);\n border: var(--n-border-active);\n "),nb("base-selection-label","background-color: var(--n-color-active);"),nb("base-selection-tags","background-color: var(--n-color-active);")])]),rb("disabled","cursor: not-allowed;",[ob("arrow","\n color: var(--n-arrow-color-disabled);\n "),nb("base-selection-label","\n cursor: not-allowed;\n background-color: var(--n-color-disabled);\n ",[nb("base-selection-input","\n cursor: not-allowed;\n color: var(--n-text-color-disabled);\n "),ob("render-label","\n color: var(--n-text-color-disabled);\n ")]),nb("base-selection-tags","\n cursor: not-allowed;\n background-color: var(--n-color-disabled);\n "),nb("base-selection-placeholder","\n cursor: not-allowed;\n color: var(--n-placeholder-color-disabled);\n ")]),nb("base-selection-input-tag","\n height: calc(var(--n-height) - 6px);\n line-height: calc(var(--n-height) - 6px);\n outline: none;\n display: none;\n position: relative;\n margin-bottom: 3px;\n max-width: 100%;\n vertical-align: bottom;\n ",[ob("input","\n font-size: inherit;\n font-family: inherit;\n min-width: 1px;\n padding: 0;\n background-color: #0000;\n outline: none;\n border: none;\n max-width: 100%;\n overflow: hidden;\n width: 1em;\n line-height: inherit;\n cursor: pointer;\n color: var(--n-text-color);\n caret-color: var(--n-caret-color);\n "),ob("mirror","\n position: absolute;\n left: 0;\n top: 0;\n white-space: pre;\n visibility: hidden;\n user-select: none;\n -webkit-user-select: none;\n opacity: 0;\n ")]),["warning","error"].map((e=>rb(`${e}-status`,[ob("state-border",`border: var(--n-border-${e});`),ib("disabled",[eb("&:hover",[ob("state-border",`\n box-shadow: var(--n-box-shadow-hover-${e});\n border: var(--n-border-hover-${e});\n `)]),rb("active",[ob("state-border",`\n box-shadow: var(--n-box-shadow-active-${e});\n border: var(--n-border-active-${e});\n `),nb("base-selection-label",`background-color: var(--n-color-active-${e});`),nb("base-selection-tags",`background-color: var(--n-color-active-${e});`)]),rb("focus",[ob("state-border",`\n box-shadow: var(--n-box-shadow-focus-${e});\n border: var(--n-border-focus-${e});\n `)])])])))]),nb("base-selection-popover","\n margin-bottom: -3px;\n display: flex;\n flex-wrap: wrap;\n margin-right: -8px;\n "),nb("base-selection-tag-wrapper","\n max-width: 100%;\n display: inline-flex;\n padding: 0 7px 3px 0;\n ",[eb("&:last-child","padding-right: 0;"),nb("tag","\n font-size: 14px;\n max-width: 100%;\n ",[ob("content","\n line-height: 1.25;\n text-overflow: ellipsis;\n overflow: hidden;\n ")])])]),eE=zn({name:"InternalSelection",props:Object.assign(Object.assign({},I_.props),{clsPrefix:{type:String,required:!0},bordered:{type:Boolean,default:void 0},active:Boolean,pattern:{type:String,default:""},placeholder:String,selectedOption:{type:Object,default:null},selectedOptions:{type:Array,default:null},labelField:{type:String,default:"label"},valueField:{type:String,default:"value"},multiple:Boolean,filterable:Boolean,clearable:Boolean,disabled:Boolean,size:{type:String,default:"medium"},loading:Boolean,autofocus:Boolean,showArrow:{type:Boolean,default:!0},inputProps:Object,focused:Boolean,renderTag:Function,onKeydown:Function,onClick:Function,onBlur:Function,onFocus:Function,onDeleteOption:Function,maxTagCount:[String,Number],ellipsisTagPopoverProps:Object,onClear:Function,onPatternInput:Function,onPatternFocus:Function,onPatternBlur:Function,renderLabel:Function,status:String,inlineThemeDisabled:Boolean,ignoreComposition:{type:Boolean,default:!0},onResize:Function}),setup(e){const{mergedClsPrefixRef:t,mergedRtlRef:n}=B_(e),o=GP("InternalSelection",n,t),r=Et(null),i=Et(null),a=Et(null),l=Et(null),s=Et(null),c=Et(null),u=Et(null),d=Et(null),p=Et(null),h=Et(null),f=Et(!1),v=Et(!1),m=Et(!1),g=I_("InternalSelection","-internal-selection",JR,QR,e,jt(e,"clsPrefix")),b=ai((()=>e.clearable&&!e.disabled&&(m.value||e.active))),y=ai((()=>e.selectedOption?e.renderTag?e.renderTag({option:e.selectedOption,handleClose:()=>{}}):e.renderLabel?e.renderLabel(e.selectedOption,!0):hg(e.selectedOption[e.labelField],e.selectedOption,!0):e.placeholder)),x=ai((()=>{const t=e.selectedOption;if(t)return t[e.labelField]})),C=ai((()=>e.multiple?!(!Array.isArray(e.selectedOptions)||!e.selectedOptions.length):null!==e.selectedOption));function w(){var t;const{value:n}=r;if(n){const{value:o}=i;o&&(o.style.width=`${n.offsetWidth}px`,"responsive"!==e.maxTagCount&&(null===(t=p.value)||void 0===t||t.sync({showAllItemsBeforeCalculate:!1})))}}function k(t){const{onPatternInput:n}=e;n&&n(t)}function S(t){!function(t){const{onDeleteOption:n}=e;n&&n(t)}(t)}lr(jt(e,"active"),(e=>{e||function(){const{value:e}=h;e&&(e.style.display="none")}()})),lr(jt(e,"pattern"),(()=>{e.multiple&&tn(w)}));const _=Et(!1);let P=null,T=null;function A(){null!==T&&window.clearTimeout(T)}lr(C,(e=>{e||(f.value=!1)})),$n((()=>{ir((()=>{const t=c.value;t&&(e.disabled?t.removeAttribute("tabindex"):t.tabIndex=v.value?-1:0)}))})),Dx(a,e.onResize);const{inlineThemeDisabled:z}=e,R=ai((()=>{const{size:t}=e,{common:{cubicBezierEaseInOut:n},self:{borderRadius:o,color:r,placeholderColor:i,textColor:a,paddingSingle:l,paddingMultiple:s,caretColor:c,colorDisabled:u,textColorDisabled:d,placeholderColorDisabled:p,colorActive:h,boxShadowFocus:f,boxShadowActive:v,boxShadowHover:m,border:b,borderFocus:y,borderHover:x,borderActive:C,arrowColor:w,arrowColorDisabled:k,loadingColor:S,colorActiveWarning:_,boxShadowFocusWarning:P,boxShadowActiveWarning:T,boxShadowHoverWarning:A,borderWarning:z,borderFocusWarning:R,borderHoverWarning:E,borderActiveWarning:O,colorActiveError:M,boxShadowFocusError:F,boxShadowActiveError:I,boxShadowHoverError:L,borderError:B,borderFocusError:D,borderHoverError:$,borderActiveError:N,clearColor:j,clearColorHover:H,clearColorPressed:W,clearSize:U,arrowSize:V,[ub("height",t)]:q,[ub("fontSize",t)]:K}}=g.value,G=Bm(l),X=Bm(s);return{"--n-bezier":n,"--n-border":b,"--n-border-active":C,"--n-border-focus":y,"--n-border-hover":x,"--n-border-radius":o,"--n-box-shadow-active":v,"--n-box-shadow-focus":f,"--n-box-shadow-hover":m,"--n-caret-color":c,"--n-color":r,"--n-color-active":h,"--n-color-disabled":u,"--n-font-size":K,"--n-height":q,"--n-padding-single-top":G.top,"--n-padding-multiple-top":X.top,"--n-padding-single-right":G.right,"--n-padding-multiple-right":X.right,"--n-padding-single-left":G.left,"--n-padding-multiple-left":X.left,"--n-padding-single-bottom":G.bottom,"--n-padding-multiple-bottom":X.bottom,"--n-placeholder-color":i,"--n-placeholder-color-disabled":p,"--n-text-color":a,"--n-text-color-disabled":d,"--n-arrow-color":w,"--n-arrow-color-disabled":k,"--n-loading-color":S,"--n-color-active-warning":_,"--n-box-shadow-focus-warning":P,"--n-box-shadow-active-warning":T,"--n-box-shadow-hover-warning":A,"--n-border-warning":z,"--n-border-focus-warning":R,"--n-border-hover-warning":E,"--n-border-active-warning":O,"--n-color-active-error":M,"--n-box-shadow-focus-error":F,"--n-box-shadow-active-error":I,"--n-box-shadow-hover-error":L,"--n-border-error":B,"--n-border-focus-error":D,"--n-border-hover-error":$,"--n-border-active-error":N,"--n-clear-size":U,"--n-clear-color":j,"--n-clear-color-hover":H,"--n-clear-color-pressed":W,"--n-arrow-size":V}})),E=z?KP("internal-selection",ai((()=>e.size[0])),R,e):void 0;return{mergedTheme:g,mergedClearable:b,mergedClsPrefix:t,rtlEnabled:o,patternInputFocused:v,filterablePlaceholder:y,label:x,selected:C,showTagsPanel:f,isComposing:_,counterRef:u,counterWrapperRef:d,patternInputMirrorRef:r,patternInputRef:i,selfRef:a,multipleElRef:l,singleElRef:s,patternInputWrapperRef:c,overflowRef:p,inputTagElRef:h,handleMouseDown:function(t){e.active&&e.filterable&&t.target!==i.value&&t.preventDefault()},handleFocusin:function(t){var n;t.relatedTarget&&(null===(n=a.value)||void 0===n?void 0:n.contains(t.relatedTarget))||function(t){const{onFocus:n}=e;n&&n(t)}(t)},handleClear:function(t){!function(t){const{onClear:n}=e;n&&n(t)}(t)},handleMouseEnter:function(){m.value=!0},handleMouseLeave:function(){m.value=!1},handleDeleteOption:S,handlePatternKeyDown:function(t){if("Backspace"===t.key&&!_.value&&!e.pattern.length){const{selectedOptions:t}=e;(null==t?void 0:t.length)&&S(t[t.length-1])}},handlePatternInputInput:function(t){const{value:n}=r;if(n){const e=t.target.value;n.textContent=e,w()}e.ignoreComposition&&_.value?P=t:k(t)},handlePatternInputBlur:function(t){var n;v.value=!1,null===(n=e.onPatternBlur)||void 0===n||n.call(e,t)},handlePatternInputFocus:function(t){var n;v.value=!0,null===(n=e.onPatternFocus)||void 0===n||n.call(e,t)},handleMouseEnterCounter:function(){e.active||(A(),T=window.setTimeout((()=>{C.value&&(f.value=!0)}),100))},handleMouseLeaveCounter:function(){A()},handleFocusout:function(t){var n;(null===(n=a.value)||void 0===n?void 0:n.contains(t.relatedTarget))||function(t){const{onBlur:n}=e;n&&n(t)}(t)},handleCompositionEnd:function(){_.value=!1,e.ignoreComposition&&k(P),P=null},handleCompositionStart:function(){_.value=!0},onPopoverUpdateShow:function(e){e||(A(),f.value=!1)},focus:function(){var t,n,o;e.filterable?(v.value=!1,null===(t=c.value)||void 0===t||t.focus()):e.multiple?null===(n=l.value)||void 0===n||n.focus():null===(o=s.value)||void 0===o||o.focus()},focusInput:function(){const{value:e}=i;e&&(function(){const{value:e}=h;e&&(e.style.display="inline-block")}(),e.focus())},blur:function(){var t,n;if(e.filterable)v.value=!1,null===(t=c.value)||void 0===t||t.blur(),null===(n=i.value)||void 0===n||n.blur();else if(e.multiple){const{value:e}=l;null==e||e.blur()}else{const{value:e}=s;null==e||e.blur()}},blurInput:function(){const{value:e}=i;e&&e.blur()},updateCounter:function(e){const{value:t}=u;t&&t.setTextContent(`+${e}`)},getCounter:function(){const{value:e}=d;return e},getTail:function(){return i.value},renderLabel:e.renderLabel,cssVars:z?void 0:R,themeClass:null==E?void 0:E.themeClass,onRender:null==E?void 0:E.onRender}},render(){const{status:e,multiple:t,size:n,disabled:o,filterable:r,maxTagCount:i,bordered:a,clsPrefix:l,ellipsisTagPopoverProps:s,onRender:c,renderTag:u,renderLabel:d}=this;null==c||c();const p="responsive"===i,h="number"==typeof i,f=p||h,v=li(_g,null,{default:()=>li(XR,{clsPrefix:l,loading:this.loading,showArrow:this.showArrow,showClear:this.mergedClearable&&this.selected,onClear:this.handleClear},{default:()=>{var e,t;return null===(t=(e=this.$slots).arrow)||void 0===t?void 0:t.call(e)}})});let m;if(t){const{labelField:e}=this,t=t=>li("div",{class:`${l}-base-selection-tag-wrapper`,key:t.value},u?u({option:t,handleClose:()=>{this.handleDeleteOption(t)}}):li(qR,{size:n,closable:!t.disabled,disabled:o,onClose:()=>{this.handleDeleteOption(t)},internalCloseIsButtonTag:!1,internalCloseFocusable:!1},{default:()=>d?d(t,!0):hg(t[e],t,!0)})),a=()=>(h?this.selectedOptions.slice(0,i):this.selectedOptions).map(t),c=r?li("div",{class:`${l}-base-selection-input-tag`,ref:"inputTagElRef",key:"__input-tag__"},li("input",Object.assign({},this.inputProps,{ref:"patternInputRef",tabindex:-1,disabled:o,value:this.pattern,autofocus:this.autofocus,class:`${l}-base-selection-input-tag__input`,onBlur:this.handlePatternInputBlur,onFocus:this.handlePatternInputFocus,onKeydown:this.handlePatternKeyDown,onInput:this.handlePatternInputInput,onCompositionstart:this.handleCompositionStart,onCompositionend:this.handleCompositionEnd})),li("span",{ref:"patternInputMirrorRef",class:`${l}-base-selection-input-tag__mirror`},this.pattern)):null,g=p?()=>li("div",{class:`${l}-base-selection-tag-wrapper`,ref:"counterWrapperRef"},li(qR,{size:n,ref:"counterRef",onMouseenter:this.handleMouseEnterCounter,onMouseleave:this.handleMouseLeaveCounter,disabled:o})):void 0;let b;if(h){const e=this.selectedOptions.length-i;e>0&&(b=li("div",{class:`${l}-base-selection-tag-wrapper`,key:"__counter__"},li(qR,{size:n,ref:"counterRef",onMouseenter:this.handleMouseEnterCounter,disabled:o},{default:()=>`+${e}`})))}const y=p?r?li(Ex,{ref:"overflowRef",updateCounter:this.updateCounter,getCounter:this.getCounter,getTail:this.getTail,style:{width:"100%",display:"flex",overflow:"hidden"}},{default:a,counter:g,tail:()=>c}):li(Ex,{ref:"overflowRef",updateCounter:this.updateCounter,getCounter:this.getCounter,style:{width:"100%",display:"flex",overflow:"hidden"}},{default:a,counter:g}):h&&b?a().concat(b):a(),x=f?()=>li("div",{class:`${l}-base-selection-popover`},p?a():this.selectedOptions.map(t)):void 0,C=f?Object.assign({show:this.showTagsPanel,trigger:"hover",overlap:!0,placement:"top",width:"trigger",onUpdateShow:this.onPopoverUpdateShow,theme:this.mergedTheme.peers.Popover,themeOverrides:this.mergedTheme.peerOverrides.Popover},s):null,w=this.selected||this.active&&(this.pattern||this.isComposing)?null:li("div",{class:`${l}-base-selection-placeholder ${l}-base-selection-overlay`},li("div",{class:`${l}-base-selection-placeholder__inner`},this.placeholder)),k=r?li("div",{ref:"patternInputWrapperRef",class:`${l}-base-selection-tags`},y,p?null:c,v):li("div",{ref:"multipleElRef",class:`${l}-base-selection-tags`,tabindex:o?void 0:0},y,v);m=li(yr,null,f?li($R,Object.assign({},C,{scrollable:!0,style:"max-height: calc(var(--v-target-height) * 6.6);"}),{trigger:()=>k,default:x}):k,w)}else if(r){const e=this.pattern||this.isComposing,t=this.active?!e:!this.selected,n=!this.active&&this.selected;m=li("div",{ref:"patternInputWrapperRef",class:`${l}-base-selection-label`,title:this.patternInputFocused?void 0:mg(this.label)},li("input",Object.assign({},this.inputProps,{ref:"patternInputRef",class:`${l}-base-selection-input`,value:this.active?this.pattern:"",placeholder:"",readonly:o,disabled:o,tabindex:-1,autofocus:this.autofocus,onFocus:this.handlePatternInputFocus,onBlur:this.handlePatternInputBlur,onInput:this.handlePatternInputInput,onCompositionstart:this.handleCompositionStart,onCompositionend:this.handleCompositionEnd})),n?li("div",{class:`${l}-base-selection-label__render-label ${l}-base-selection-overlay`,key:"input"},li("div",{class:`${l}-base-selection-overlay__wrapper`},u?u({option:this.selectedOption,handleClose:()=>{}}):d?d(this.selectedOption,!0):hg(this.label,this.selectedOption,!0))):null,t?li("div",{class:`${l}-base-selection-placeholder ${l}-base-selection-overlay`,key:"placeholder"},li("div",{class:`${l}-base-selection-overlay__wrapper`},this.filterablePlaceholder)):null,v)}else m=li("div",{ref:"singleElRef",class:`${l}-base-selection-label`,tabindex:this.disabled?void 0:0},void 0!==this.label?li("div",{class:`${l}-base-selection-input`,title:mg(this.label),key:"input"},li("div",{class:`${l}-base-selection-input__content`},u?u({option:this.selectedOption,handleClose:()=>{}}):d?d(this.selectedOption,!0):hg(this.label,this.selectedOption,!0))):li("div",{class:`${l}-base-selection-placeholder ${l}-base-selection-overlay`,key:"placeholder"},li("div",{class:`${l}-base-selection-placeholder__inner`},this.placeholder)),v);return li("div",{ref:"selfRef",class:[`${l}-base-selection`,this.rtlEnabled&&`${l}-base-selection--rtl`,this.themeClass,e&&`${l}-base-selection--${e}-status`,{[`${l}-base-selection--active`]:this.active,[`${l}-base-selection--selected`]:this.selected||this.active&&this.pattern,[`${l}-base-selection--disabled`]:this.disabled,[`${l}-base-selection--multiple`]:this.multiple,[`${l}-base-selection--focus`]:this.focused}],style:this.cssVars,onClick:this.onClick,onMouseenter:this.handleMouseEnter,onMouseleave:this.handleMouseLeave,onKeydown:this.onKeydown,onFocusin:this.handleFocusin,onFocusout:this.handleFocusout,onMousedown:this.handleMouseDown},m,a?li("div",{class:`${l}-base-selection__border`}):null,a?li("div",{class:`${l}-base-selection__state-border`}):null)}}),{cubicBezierEaseInOut:tE}=A_,nE={iconMargin:"11px 8px 0 12px",iconMarginRtl:"11px 12px 0 8px",iconSize:"24px",closeIconSize:"16px",closeSize:"20px",closeMargin:"13px 14px 0 0",closeMarginRtl:"13px 0 0 14px",padding:"13px"},oE={name:"Alert",common:tz,self(e){const{lineHeight:t,borderRadius:n,fontWeightStrong:o,dividerColor:r,inputColor:i,textColor1:a,textColor2:l,closeColorHover:s,closeColorPressed:c,closeIconColor:u,closeIconColorHover:d,closeIconColorPressed:p,infoColorSuppl:h,successColorSuppl:f,warningColorSuppl:v,errorColorSuppl:m,fontSize:g}=e;return Object.assign(Object.assign({},nE),{fontSize:g,lineHeight:t,titleFontWeight:o,borderRadius:n,border:`1px solid ${r}`,color:i,titleTextColor:a,iconColor:l,contentTextColor:l,closeBorderRadius:n,closeColorHover:s,closeColorPressed:c,closeIconColor:u,closeIconColorHover:d,closeIconColorPressed:p,borderInfo:`1px solid ${tg(h,{alpha:.35})}`,colorInfo:tg(h,{alpha:.25}),titleTextColorInfo:a,iconColorInfo:h,contentTextColorInfo:l,closeColorHoverInfo:s,closeColorPressedInfo:c,closeIconColorInfo:u,closeIconColorHoverInfo:d,closeIconColorPressedInfo:p,borderSuccess:`1px solid ${tg(f,{alpha:.35})}`,colorSuccess:tg(f,{alpha:.25}),titleTextColorSuccess:a,iconColorSuccess:f,contentTextColorSuccess:l,closeColorHoverSuccess:s,closeColorPressedSuccess:c,closeIconColorSuccess:u,closeIconColorHoverSuccess:d,closeIconColorPressedSuccess:p,borderWarning:`1px solid ${tg(v,{alpha:.35})}`,colorWarning:tg(v,{alpha:.25}),titleTextColorWarning:a,iconColorWarning:v,contentTextColorWarning:l,closeColorHoverWarning:s,closeColorPressedWarning:c,closeIconColorWarning:u,closeIconColorHoverWarning:d,closeIconColorPressedWarning:p,borderError:`1px solid ${tg(m,{alpha:.35})}`,colorError:tg(m,{alpha:.25}),titleTextColorError:a,iconColorError:m,contentTextColorError:l,closeColorHoverError:s,closeColorPressedError:c,closeIconColorError:u,closeIconColorHoverError:d,closeIconColorPressedError:p})}},rE={name:"Alert",common:qz,self:function(e){const{lineHeight:t,borderRadius:n,fontWeightStrong:o,baseColor:r,dividerColor:i,actionColor:a,textColor1:l,textColor2:s,closeColorHover:c,closeColorPressed:u,closeIconColor:d,closeIconColorHover:p,closeIconColorPressed:h,infoColor:f,successColor:v,warningColor:m,errorColor:g,fontSize:b}=e;return Object.assign(Object.assign({},nE),{fontSize:b,lineHeight:t,titleFontWeight:o,borderRadius:n,border:`1px solid ${i}`,color:a,titleTextColor:l,iconColor:s,contentTextColor:s,closeBorderRadius:n,closeColorHover:c,closeColorPressed:u,closeIconColor:d,closeIconColorHover:p,closeIconColorPressed:h,borderInfo:`1px solid ${eg(r,tg(f,{alpha:.25}))}`,colorInfo:eg(r,tg(f,{alpha:.08})),titleTextColorInfo:l,iconColorInfo:f,contentTextColorInfo:s,closeColorHoverInfo:c,closeColorPressedInfo:u,closeIconColorInfo:d,closeIconColorHoverInfo:p,closeIconColorPressedInfo:h,borderSuccess:`1px solid ${eg(r,tg(v,{alpha:.25}))}`,colorSuccess:eg(r,tg(v,{alpha:.08})),titleTextColorSuccess:l,iconColorSuccess:v,contentTextColorSuccess:s,closeColorHoverSuccess:c,closeColorPressedSuccess:u,closeIconColorSuccess:d,closeIconColorHoverSuccess:p,closeIconColorPressedSuccess:h,borderWarning:`1px solid ${eg(r,tg(m,{alpha:.33}))}`,colorWarning:eg(r,tg(m,{alpha:.08})),titleTextColorWarning:l,iconColorWarning:m,contentTextColorWarning:s,closeColorHoverWarning:c,closeColorPressedWarning:u,closeIconColorWarning:d,closeIconColorHoverWarning:p,closeIconColorPressedWarning:h,borderError:`1px solid ${eg(r,tg(g,{alpha:.25}))}`,colorError:eg(r,tg(g,{alpha:.08})),titleTextColorError:l,iconColorError:g,contentTextColorError:s,closeColorHoverError:c,closeColorPressedError:u,closeIconColorError:d,closeIconColorHoverError:p,closeIconColorPressedError:h})}},{cubicBezierEaseInOut:iE,cubicBezierEaseOut:aE,cubicBezierEaseIn:lE}=A_;function sE({overflow:e="hidden",duration:t=".3s",originalTransition:n="",leavingDelay:o="0s",foldPadding:r=!1,enterToProps:i,leaveToProps:a,reverse:l=!1}={}){const s=l?"leave":"enter",c=l?"enter":"leave";return[eb(`&.fade-in-height-expand-transition-${c}-from,\n &.fade-in-height-expand-transition-${s}-to`,Object.assign(Object.assign({},i),{opacity:1})),eb(`&.fade-in-height-expand-transition-${c}-to,\n &.fade-in-height-expand-transition-${s}-from`,Object.assign(Object.assign({},a),{opacity:0,marginTop:"0 !important",marginBottom:"0 !important",paddingTop:r?"0 !important":void 0,paddingBottom:r?"0 !important":void 0})),eb(`&.fade-in-height-expand-transition-${c}-active`,`\n overflow: ${e};\n transition:\n max-height ${t} ${iE} ${o},\n opacity ${t} ${aE} ${o},\n margin-top ${t} ${iE} ${o},\n margin-bottom ${t} ${iE} ${o},\n padding-top ${t} ${iE} ${o},\n padding-bottom ${t} ${iE} ${o}\n ${n?`,${n}`:""}\n `),eb(`&.fade-in-height-expand-transition-${s}-active`,`\n overflow: ${e};\n transition:\n max-height ${t} ${iE},\n opacity ${t} ${lE},\n margin-top ${t} ${iE},\n margin-bottom ${t} ${iE},\n padding-top ${t} ${iE},\n padding-bottom ${t} ${iE}\n ${n?`,${n}`:""}\n `)]}const cE=nb("alert","\n line-height: var(--n-line-height);\n border-radius: var(--n-border-radius);\n position: relative;\n transition: background-color .3s var(--n-bezier);\n background-color: var(--n-color);\n text-align: start;\n word-break: break-word;\n",[ob("border","\n border-radius: inherit;\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n transition: border-color .3s var(--n-bezier);\n border: var(--n-border);\n pointer-events: none;\n "),rb("closable",[nb("alert-body",[ob("title","\n padding-right: 24px;\n ")])]),ob("icon",{color:"var(--n-icon-color)"}),nb("alert-body",{padding:"var(--n-padding)"},[ob("title",{color:"var(--n-title-text-color)"}),ob("content",{color:"var(--n-content-text-color)"})]),sE({originalTransition:"transform .3s var(--n-bezier)",enterToProps:{transform:"scale(1)"},leaveToProps:{transform:"scale(0.9)"}}),ob("icon","\n position: absolute;\n left: 0;\n top: 0;\n align-items: center;\n justify-content: center;\n display: flex;\n width: var(--n-icon-size);\n height: var(--n-icon-size);\n font-size: var(--n-icon-size);\n margin: var(--n-icon-margin);\n "),ob("close","\n transition:\n color .3s var(--n-bezier),\n background-color .3s var(--n-bezier);\n position: absolute;\n right: 0;\n top: 0;\n margin: var(--n-close-margin);\n "),rb("show-icon",[nb("alert-body",{paddingLeft:"calc(var(--n-icon-margin-left) + var(--n-icon-size) + var(--n-icon-margin-right))"})]),rb("right-adjust",[nb("alert-body",{paddingRight:"calc(var(--n-close-size) + var(--n-padding) + 2px)"})]),nb("alert-body","\n border-radius: var(--n-border-radius);\n transition: border-color .3s var(--n-bezier);\n ",[ob("title","\n transition: color .3s var(--n-bezier);\n font-size: 16px;\n line-height: 19px;\n font-weight: var(--n-title-font-weight);\n ",[eb("& +",[ob("content",{marginTop:"9px"})])]),ob("content",{transition:"color .3s var(--n-bezier)",fontSize:"var(--n-font-size)"})]),ob("icon",{transition:"color .3s var(--n-bezier)"})]),uE=zn({name:"Alert",inheritAttrs:!1,props:Object.assign(Object.assign({},I_.props),{title:String,showIcon:{type:Boolean,default:!0},type:{type:String,default:"default"},bordered:{type:Boolean,default:!0},closable:Boolean,onClose:Function,onAfterLeave:Function,onAfterHide:Function}),setup(e){const{mergedClsPrefixRef:t,mergedBorderedRef:n,inlineThemeDisabled:o,mergedRtlRef:r}=B_(e),i=I_("Alert","-alert",cE,rE,e,t),a=GP("Alert",r,t),l=ai((()=>{const{common:{cubicBezierEaseInOut:t},self:n}=i.value,{fontSize:o,borderRadius:r,titleFontWeight:a,lineHeight:l,iconSize:s,iconMargin:c,iconMarginRtl:u,closeIconSize:d,closeBorderRadius:p,closeSize:h,closeMargin:f,closeMarginRtl:v,padding:m}=n,{type:g}=e,{left:b,right:y}=Bm(c);return{"--n-bezier":t,"--n-color":n[ub("color",g)],"--n-close-icon-size":d,"--n-close-border-radius":p,"--n-close-color-hover":n[ub("closeColorHover",g)],"--n-close-color-pressed":n[ub("closeColorPressed",g)],"--n-close-icon-color":n[ub("closeIconColor",g)],"--n-close-icon-color-hover":n[ub("closeIconColorHover",g)],"--n-close-icon-color-pressed":n[ub("closeIconColorPressed",g)],"--n-icon-color":n[ub("iconColor",g)],"--n-border":n[ub("border",g)],"--n-title-text-color":n[ub("titleTextColor",g)],"--n-content-text-color":n[ub("contentTextColor",g)],"--n-line-height":l,"--n-border-radius":r,"--n-font-size":o,"--n-title-font-weight":a,"--n-icon-size":s,"--n-icon-margin":c,"--n-icon-margin-rtl":u,"--n-close-size":h,"--n-close-margin":f,"--n-close-margin-rtl":v,"--n-padding":m,"--n-icon-margin-left":b,"--n-icon-margin-right":y}})),s=o?KP("alert",ai((()=>e.type[0])),l,e):void 0,c=Et(!0);return{rtlEnabled:a,mergedClsPrefix:t,mergedBordered:n,visible:c,handleCloseClick:()=>{var t;Promise.resolve(null===(t=e.onClose)||void 0===t?void 0:t.call(e)).then((e=>{!1!==e&&(c.value=!1)}))},handleAfterLeave:()=>{(()=>{const{onAfterLeave:t,onAfterHide:n}=e;t&&t(),n&&n()})()},mergedTheme:i,cssVars:o?void 0:l,themeClass:null==s?void 0:s.themeClass,onRender:null==s?void 0:s.onRender}},render(){var e;return null===(e=this.onRender)||void 0===e||e.call(this),li(yT,{onAfterLeave:this.handleAfterLeave},{default:()=>{const{mergedClsPrefix:e,$slots:t}=this,n={class:[`${e}-alert`,this.themeClass,this.closable&&`${e}-alert--closable`,this.showIcon&&`${e}-alert--show-icon`,!this.title&&this.closable&&`${e}-alert--right-adjust`,this.rtlEnabled&&`${e}-alert--rtl`],style:this.cssVars,role:"alert"};return this.visible?li("div",Object.assign({},Wr(this.$attrs,n)),this.closable&&li(kT,{clsPrefix:e,class:`${e}-alert__close`,onClick:this.handleCloseClick}),this.bordered&&li("div",{class:`${e}-alert__border`}),this.showIcon&&li("div",{class:`${e}-alert__icon`,"aria-hidden":"true"},xg(t.icon,(()=>[li(CT,{clsPrefix:e},{default:()=>{switch(this.type){case"success":return li(hT,null);case"info":return li(uT,null);case"warning":return li(fT,null);case"error":return li(iT,null);default:return null}}})]))),li("div",{class:[`${e}-alert-body`,this.mergedBordered&&`${e}-alert-body--bordered`]},wg(t.header,(t=>{const n=t||this.title;return n?li("div",{class:`${e}-alert-body__title`},n):null})),t.default&&li("div",{class:`${e}-alert-body__content`},t))):null}})}}),dE={linkFontSize:"13px",linkPadding:"0 0 0 16px",railWidth:"4px"},pE={name:"Anchor",common:tz,self:function(e){const{borderRadius:t,railColor:n,primaryColor:o,primaryColorHover:r,primaryColorPressed:i,textColor2:a}=e;return Object.assign(Object.assign({},dE),{borderRadius:t,railColor:n,railColorActive:o,linkColor:tg(o,{alpha:.15}),linkTextColor:a,linkTextColorHover:r,linkTextColorPressed:i,linkTextColorActive:o})}};function hE(e){return"group"===e.type}function fE(e){return"ignored"===e.type}function vE(e,t){try{return!!(1+t.toString().toLowerCase().indexOf(e.trim().toLowerCase()))}catch(Cb){return!1}}function mE(e,t){return{getIsGroup:hE,getIgnored:fE,getKey:t=>hE(t)?t.name||t.key||"key-required":t[e],getChildren:e=>e[t]}}const gE=pb&&"chrome"in window;pb&&navigator.userAgent.includes("Firefox");const bE=pb&&navigator.userAgent.includes("Safari")&&!gE,yE={paddingTiny:"0 8px",paddingSmall:"0 10px",paddingMedium:"0 12px",paddingLarge:"0 14px",clearSize:"16px"},xE={name:"Input",common:tz,self(e){const{textColor2:t,textColor3:n,textColorDisabled:o,primaryColor:r,primaryColorHover:i,inputColor:a,inputColorDisabled:l,warningColor:s,warningColorHover:c,errorColor:u,errorColorHover:d,borderRadius:p,lineHeight:h,fontSizeTiny:f,fontSizeSmall:v,fontSizeMedium:m,fontSizeLarge:g,heightTiny:b,heightSmall:y,heightMedium:x,heightLarge:C,clearColor:w,clearColorHover:k,clearColorPressed:S,placeholderColor:_,placeholderColorDisabled:P,iconColor:T,iconColorDisabled:A,iconColorHover:z,iconColorPressed:R}=e;return Object.assign(Object.assign({},yE),{countTextColorDisabled:o,countTextColor:n,heightTiny:b,heightSmall:y,heightMedium:x,heightLarge:C,fontSizeTiny:f,fontSizeSmall:v,fontSizeMedium:m,fontSizeLarge:g,lineHeight:h,lineHeightTextarea:h,borderRadius:p,iconSize:"16px",groupLabelColor:a,textColor:t,textColorDisabled:o,textDecorationColor:t,groupLabelTextColor:t,caretColor:r,placeholderColor:_,placeholderColorDisabled:P,color:a,colorDisabled:l,colorFocus:tg(r,{alpha:.1}),groupLabelBorder:"1px solid #0000",border:"1px solid #0000",borderHover:`1px solid ${i}`,borderDisabled:"1px solid #0000",borderFocus:`1px solid ${i}`,boxShadowFocus:`0 0 8px 0 ${tg(r,{alpha:.3})}`,loadingColor:r,loadingColorWarning:s,borderWarning:`1px solid ${s}`,borderHoverWarning:`1px solid ${c}`,colorFocusWarning:tg(s,{alpha:.1}),borderFocusWarning:`1px solid ${c}`,boxShadowFocusWarning:`0 0 8px 0 ${tg(s,{alpha:.3})}`,caretColorWarning:s,loadingColorError:u,borderError:`1px solid ${u}`,borderHoverError:`1px solid ${d}`,colorFocusError:tg(u,{alpha:.1}),borderFocusError:`1px solid ${d}`,boxShadowFocusError:`0 0 8px 0 ${tg(u,{alpha:.3})}`,caretColorError:u,clearColor:w,clearColorHover:k,clearColorPressed:S,iconColor:T,iconColorDisabled:A,iconColorHover:z,iconColorPressed:R,suffixTextColor:t})}},CE={name:"Input",common:qz,self:function(e){const{textColor2:t,textColor3:n,textColorDisabled:o,primaryColor:r,primaryColorHover:i,inputColor:a,inputColorDisabled:l,borderColor:s,warningColor:c,warningColorHover:u,errorColor:d,errorColorHover:p,borderRadius:h,lineHeight:f,fontSizeTiny:v,fontSizeSmall:m,fontSizeMedium:g,fontSizeLarge:b,heightTiny:y,heightSmall:x,heightMedium:C,heightLarge:w,actionColor:k,clearColor:S,clearColorHover:_,clearColorPressed:P,placeholderColor:T,placeholderColorDisabled:A,iconColor:z,iconColorDisabled:R,iconColorHover:E,iconColorPressed:O}=e;return Object.assign(Object.assign({},yE),{countTextColorDisabled:o,countTextColor:n,heightTiny:y,heightSmall:x,heightMedium:C,heightLarge:w,fontSizeTiny:v,fontSizeSmall:m,fontSizeMedium:g,fontSizeLarge:b,lineHeight:f,lineHeightTextarea:f,borderRadius:h,iconSize:"16px",groupLabelColor:k,groupLabelTextColor:t,textColor:t,textColorDisabled:o,textDecorationColor:t,caretColor:r,placeholderColor:T,placeholderColorDisabled:A,color:a,colorDisabled:l,colorFocus:a,groupLabelBorder:`1px solid ${s}`,border:`1px solid ${s}`,borderHover:`1px solid ${i}`,borderDisabled:`1px solid ${s}`,borderFocus:`1px solid ${i}`,boxShadowFocus:`0 0 0 2px ${tg(r,{alpha:.2})}`,loadingColor:r,loadingColorWarning:c,borderWarning:`1px solid ${c}`,borderHoverWarning:`1px solid ${u}`,colorFocusWarning:a,borderFocusWarning:`1px solid ${u}`,boxShadowFocusWarning:`0 0 0 2px ${tg(c,{alpha:.2})}`,caretColorWarning:c,loadingColorError:d,borderError:`1px solid ${d}`,borderHoverError:`1px solid ${p}`,colorFocusError:a,borderFocusError:`1px solid ${p}`,boxShadowFocusError:`0 0 0 2px ${tg(d,{alpha:.2})}`,caretColorError:d,clearColor:S,clearColorHover:_,clearColorPressed:P,iconColor:z,iconColorDisabled:R,iconColorHover:E,iconColorPressed:O,suffixTextColor:t})}},wE="n-input";function kE(e){let t=0;for(const n of e)t++;return t}function SE(e){return""===e||null==e}const _E=zn({name:"InputWordCount",setup(e,{slots:t}){const{mergedValueRef:n,maxlengthRef:o,mergedClsPrefixRef:r,countGraphemesRef:i}=Po(wE),a=ai((()=>{const{value:e}=n;return null===e||Array.isArray(e)?0:(i.value||kE)(e)}));return()=>{const{value:e}=o,{value:i}=n;return li("span",{class:`${r.value}-input-word-count`},Cg(t.default,{value:null===i||Array.isArray(i)?"":i},(()=>[void 0===e?a.value:`${a.value} / ${e}`])))}}}),PE=nb("input","\n max-width: 100%;\n cursor: text;\n line-height: 1.5;\n z-index: auto;\n outline: none;\n box-sizing: border-box;\n position: relative;\n display: inline-flex;\n border-radius: var(--n-border-radius);\n background-color: var(--n-color);\n transition: background-color .3s var(--n-bezier);\n font-size: var(--n-font-size);\n --n-padding-vertical: calc((var(--n-height) - 1.5 * var(--n-font-size)) / 2);\n",[ob("input, textarea","\n overflow: hidden;\n flex-grow: 1;\n position: relative;\n "),ob("input-el, textarea-el, input-mirror, textarea-mirror, separator, placeholder","\n box-sizing: border-box;\n font-size: inherit;\n line-height: 1.5;\n font-family: inherit;\n border: none;\n outline: none;\n background-color: #0000;\n text-align: inherit;\n transition:\n -webkit-text-fill-color .3s var(--n-bezier),\n caret-color .3s var(--n-bezier),\n color .3s var(--n-bezier),\n text-decoration-color .3s var(--n-bezier);\n "),ob("input-el, textarea-el","\n -webkit-appearance: none;\n scrollbar-width: none;\n width: 100%;\n min-width: 0;\n text-decoration-color: var(--n-text-decoration-color);\n color: var(--n-text-color);\n caret-color: var(--n-caret-color);\n background-color: transparent;\n ",[eb("&::-webkit-scrollbar, &::-webkit-scrollbar-track-piece, &::-webkit-scrollbar-thumb","\n width: 0;\n height: 0;\n display: none;\n "),eb("&::placeholder","\n color: #0000;\n -webkit-text-fill-color: transparent !important;\n "),eb("&:-webkit-autofill ~",[ob("placeholder","display: none;")])]),rb("round",[ib("textarea","border-radius: calc(var(--n-height) / 2);")]),ob("placeholder","\n pointer-events: none;\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n overflow: hidden;\n color: var(--n-placeholder-color);\n ",[eb("span","\n width: 100%;\n display: inline-block;\n ")]),rb("textarea",[ob("placeholder","overflow: visible;")]),ib("autosize","width: 100%;"),rb("autosize",[ob("textarea-el, input-el","\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n ")]),nb("input-wrapper","\n overflow: hidden;\n display: inline-flex;\n flex-grow: 1;\n position: relative;\n padding-left: var(--n-padding-left);\n padding-right: var(--n-padding-right);\n "),ob("input-mirror","\n padding: 0;\n height: var(--n-height);\n line-height: var(--n-height);\n overflow: hidden;\n visibility: hidden;\n position: static;\n white-space: pre;\n pointer-events: none;\n "),ob("input-el","\n padding: 0;\n height: var(--n-height);\n line-height: var(--n-height);\n ",[eb("&[type=password]::-ms-reveal","display: none;"),eb("+",[ob("placeholder","\n display: flex;\n align-items: center; \n ")])]),ib("textarea",[ob("placeholder","white-space: nowrap;")]),ob("eye","\n display: flex;\n align-items: center;\n justify-content: center;\n transition: color .3s var(--n-bezier);\n "),rb("textarea","width: 100%;",[nb("input-word-count","\n position: absolute;\n right: var(--n-padding-right);\n bottom: var(--n-padding-vertical);\n "),rb("resizable",[nb("input-wrapper","\n resize: vertical;\n min-height: var(--n-height);\n ")]),ob("textarea-el, textarea-mirror, placeholder","\n height: 100%;\n padding-left: 0;\n padding-right: 0;\n padding-top: var(--n-padding-vertical);\n padding-bottom: var(--n-padding-vertical);\n word-break: break-word;\n display: inline-block;\n vertical-align: bottom;\n box-sizing: border-box;\n line-height: var(--n-line-height-textarea);\n margin: 0;\n resize: none;\n white-space: pre-wrap;\n scroll-padding-block-end: var(--n-padding-vertical);\n "),ob("textarea-mirror","\n width: 100%;\n pointer-events: none;\n overflow: hidden;\n visibility: hidden;\n position: static;\n white-space: pre-wrap;\n overflow-wrap: break-word;\n ")]),rb("pair",[ob("input-el, placeholder","text-align: center;"),ob("separator","\n display: flex;\n align-items: center;\n transition: color .3s var(--n-bezier);\n color: var(--n-text-color);\n white-space: nowrap;\n ",[nb("icon","\n color: var(--n-icon-color);\n "),nb("base-icon","\n color: var(--n-icon-color);\n ")])]),rb("disabled","\n cursor: not-allowed;\n background-color: var(--n-color-disabled);\n ",[ob("border","border: var(--n-border-disabled);"),ob("input-el, textarea-el","\n cursor: not-allowed;\n color: var(--n-text-color-disabled);\n text-decoration-color: var(--n-text-color-disabled);\n "),ob("placeholder","color: var(--n-placeholder-color-disabled);"),ob("separator","color: var(--n-text-color-disabled);",[nb("icon","\n color: var(--n-icon-color-disabled);\n "),nb("base-icon","\n color: var(--n-icon-color-disabled);\n ")]),nb("input-word-count","\n color: var(--n-count-text-color-disabled);\n "),ob("suffix, prefix","color: var(--n-text-color-disabled);",[nb("icon","\n color: var(--n-icon-color-disabled);\n "),nb("internal-icon","\n color: var(--n-icon-color-disabled);\n ")])]),ib("disabled",[ob("eye","\n color: var(--n-icon-color);\n cursor: pointer;\n ",[eb("&:hover","\n color: var(--n-icon-color-hover);\n "),eb("&:active","\n color: var(--n-icon-color-pressed);\n ")]),eb("&:hover",[ob("state-border","border: var(--n-border-hover);")]),rb("focus","background-color: var(--n-color-focus);",[ob("state-border","\n border: var(--n-border-focus);\n box-shadow: var(--n-box-shadow-focus);\n ")])]),ob("border, state-border","\n box-sizing: border-box;\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n pointer-events: none;\n border-radius: inherit;\n border: var(--n-border);\n transition:\n box-shadow .3s var(--n-bezier),\n border-color .3s var(--n-bezier);\n "),ob("state-border","\n border-color: #0000;\n z-index: 1;\n "),ob("prefix","margin-right: 4px;"),ob("suffix","\n margin-left: 4px;\n "),ob("suffix, prefix","\n transition: color .3s var(--n-bezier);\n flex-wrap: nowrap;\n flex-shrink: 0;\n line-height: var(--n-height);\n white-space: nowrap;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: var(--n-suffix-text-color);\n ",[nb("base-loading","\n font-size: var(--n-icon-size);\n margin: 0 2px;\n color: var(--n-loading-color);\n "),nb("base-clear","\n font-size: var(--n-icon-size);\n ",[ob("placeholder",[nb("base-icon","\n transition: color .3s var(--n-bezier);\n color: var(--n-icon-color);\n font-size: var(--n-icon-size);\n ")])]),eb(">",[nb("icon","\n transition: color .3s var(--n-bezier);\n color: var(--n-icon-color);\n font-size: var(--n-icon-size);\n ")]),nb("base-icon","\n font-size: var(--n-icon-size);\n ")]),nb("input-word-count","\n pointer-events: none;\n line-height: 1.5;\n font-size: .85em;\n color: var(--n-count-text-color);\n transition: color .3s var(--n-bezier);\n margin-left: 4px;\n font-variant: tabular-nums;\n "),["warning","error"].map((e=>rb(`${e}-status`,[ib("disabled",[nb("base-loading",`\n color: var(--n-loading-color-${e})\n `),ob("input-el, textarea-el",`\n caret-color: var(--n-caret-color-${e});\n `),ob("state-border",`\n border: var(--n-border-${e});\n `),eb("&:hover",[ob("state-border",`\n border: var(--n-border-hover-${e});\n `)]),eb("&:focus",`\n background-color: var(--n-color-focus-${e});\n `,[ob("state-border",`\n box-shadow: var(--n-box-shadow-focus-${e});\n border: var(--n-border-focus-${e});\n `)]),rb("focus",`\n background-color: var(--n-color-focus-${e});\n `,[ob("state-border",`\n box-shadow: var(--n-box-shadow-focus-${e});\n border: var(--n-border-focus-${e});\n `)])])])))]),TE=nb("input",[rb("disabled",[ob("input-el, textarea-el","\n -webkit-text-fill-color: var(--n-text-color-disabled);\n ")])]),AE=zn({name:"Input",props:Object.assign(Object.assign({},I_.props),{bordered:{type:Boolean,default:void 0},type:{type:String,default:"text"},placeholder:[Array,String],defaultValue:{type:[String,Array],default:null},value:[String,Array],disabled:{type:Boolean,default:void 0},size:String,rows:{type:[Number,String],default:3},round:Boolean,minlength:[String,Number],maxlength:[String,Number],clearable:Boolean,autosize:{type:[Boolean,Object],default:!1},pair:Boolean,separator:String,readonly:{type:[String,Boolean],default:!1},passivelyActivated:Boolean,showPasswordOn:String,stateful:{type:Boolean,default:!0},autofocus:Boolean,inputProps:Object,resizable:{type:Boolean,default:!0},showCount:Boolean,loading:{type:Boolean,default:void 0},allowInput:Function,renderCount:Function,onMousedown:Function,onKeydown:Function,onKeyup:[Function,Array],onInput:[Function,Array],onFocus:[Function,Array],onBlur:[Function,Array],onClick:[Function,Array],onChange:[Function,Array],onClear:[Function,Array],countGraphemes:Function,status:String,"onUpdate:value":[Function,Array],onUpdateValue:[Function,Array],textDecoration:[String,Array],attrSize:{type:Number,default:20},onInputBlur:[Function,Array],onInputFocus:[Function,Array],onDeactivate:[Function,Array],onActivate:[Function,Array],onWrapperFocus:[Function,Array],onWrapperBlur:[Function,Array],internalDeactivateOnEnter:Boolean,internalForceFocus:Boolean,internalLoadingBeforeSuffix:{type:Boolean,default:!0},showPasswordToggle:Boolean}),setup(e){const{mergedClsPrefixRef:t,mergedBorderedRef:n,inlineThemeDisabled:o,mergedRtlRef:r}=B_(e),i=I_("Input","-input",PE,CE,e,t);bE&&qP("-input-safari",TE,t);const a=Et(null),l=Et(null),s=Et(null),c=Et(null),u=Et(null),d=Et(null),p=Et(null),h=function(e){const t=Et(null);function n(){t.value=null}return lr(e,n),{recordCursor:function(){const{value:o}=e;if(!(null==o?void 0:o.focus))return void n();const{selectionStart:r,selectionEnd:i,value:a}=o;null!=r&&null!=i?t.value={start:r,end:i,beforeText:a.slice(0,r),afterText:a.slice(i)}:n()},restoreCursor:function(){var n;const{value:o}=t,{value:r}=e;if(!o||!r)return;const{value:i}=r,{start:a,beforeText:l,afterText:s}=o;let c=i.length;if(i.endsWith(s))c=i.length-s.length;else if(i.startsWith(l))c=l.length;else{const e=l[a-1],t=i.indexOf(e,a-1);-1!==t&&(c=t+1)}null===(n=r.setSelectionRange)||void 0===n||n.call(r,c,c)}}}(p),f=Et(null),{localeRef:v}=VP("Input"),m=Et(e.defaultValue),g=Db(jt(e,"value"),m),b=eC(e),{mergedSizeRef:y,mergedDisabledRef:x,mergedStatusRef:C}=b,w=Et(!1),k=Et(!1),S=Et(!1),_=Et(!1);let P=null;const T=ai((()=>{const{placeholder:t,pair:n}=e;return n?Array.isArray(t)?t:void 0===t?["",""]:[t,t]:void 0===t?[v.value.placeholder]:[t]})),A=ai((()=>{const{value:e}=S,{value:t}=g,{value:n}=T;return!e&&(SE(t)||Array.isArray(t)&&SE(t[0]))&&n[0]})),z=ai((()=>{const{value:e}=S,{value:t}=g,{value:n}=T;return!e&&n[1]&&(SE(t)||Array.isArray(t)&&SE(t[1]))})),R=mb((()=>e.internalForceFocus||w.value)),E=mb((()=>{if(x.value||e.readonly||!e.clearable||!R.value&&!k.value)return!1;const{value:t}=g,{value:n}=R;return e.pair?!(!Array.isArray(t)||!t[0]&&!t[1])&&(k.value||n):!!t&&(k.value||n)})),O=ai((()=>{const{showPasswordOn:t}=e;return t||(e.showPasswordToggle?"click":void 0)})),M=Et(!1),F=ai((()=>{const{textDecoration:t}=e;return t?Array.isArray(t)?t.map((e=>({textDecoration:e}))):[{textDecoration:t}]:["",""]})),I=Et(void 0),L=ai((()=>{const{maxlength:t}=e;return void 0===t?void 0:Number(t)}));$n((()=>{const{value:e}=g;Array.isArray(e)||V(e)}));const B=Gr().proxy;function D(t,n){const{onUpdateValue:o,"onUpdate:value":r,onInput:i}=e,{nTriggerFormInput:a}=b;o&&dg(o,t,n),r&&dg(r,t,n),i&&dg(i,t,n),m.value=t,a()}function $(t,n){const{onChange:o}=e,{nTriggerFormChange:r}=b;o&&dg(o,t,n),m.value=t,r()}function N(t,n=0,o="input"){const r=t.target.value;if(V(r),t instanceof InputEvent&&!t.isComposing&&(S.value=!1),"textarea"===e.type){const{value:e}=f;e&&e.syncUnifiedContainer()}if(P=r,S.value)return;h.recordCursor();const i=function(t){const{countGraphemes:n,maxlength:o,minlength:r}=e;if(n){let e;if(void 0!==o&&(void 0===e&&(e=n(t)),e>Number(o)))return!1;if(void 0!==r&&(void 0===e&&(e=n(t)),e{var e;null===(e=a.value)||void 0===e||e.focus()})))}function U(){var t,n,o;x.value||(e.passivelyActivated?null===(t=a.value)||void 0===t||t.focus():(null===(n=l.value)||void 0===n||n.focus(),null===(o=u.value)||void 0===o||o.focus()))}function V(t){const{type:n,pair:o,autosize:r}=e;if(!o&&r)if("textarea"===n){const{value:e}=s;e&&(e.textContent=`${null!=t?t:""}\r\n`)}else{const{value:e}=c;e&&(t?e.textContent=t:e.innerHTML=" ")}}const q=Et({top:"0"});let K=null;ir((()=>{const{autosize:t,type:n}=e;t&&"textarea"===n?K=lr(g,(e=>{Array.isArray(e)||e===P||V(e)})):null==K||K()}));let G=null;ir((()=>{"textarea"===e.type?G=lr(g,(e=>{var t;Array.isArray(e)||e===P||null===(t=f.value)||void 0===t||t.syncUnifiedContainer()})):null==G||G()})),_o(wE,{mergedValueRef:g,maxlengthRef:L,mergedClsPrefixRef:t,countGraphemesRef:jt(e,"countGraphemes")});const X={wrapperElRef:a,inputElRef:u,textareaElRef:l,isCompositing:S,clear:H,focus:U,blur:function(){var e;(null===(e=a.value)||void 0===e?void 0:e.contains(document.activeElement))&&document.activeElement.blur()},select:function(){var e,t;null===(e=l.value)||void 0===e||e.select(),null===(t=u.value)||void 0===t||t.select()},deactivate:function(){const{value:e}=a;(null==e?void 0:e.contains(document.activeElement))&&e!==document.activeElement&&W()},activate:function(){x.value||(l.value?l.value.focus():u.value&&u.value.focus())},scrollTo:function(t){if("textarea"===e.type){const{value:e}=l;null==e||e.scrollTo(t)}else{const{value:e}=u;null==e||e.scrollTo(t)}}},Y=GP("Input",r,t),Q=ai((()=>{const{value:e}=y,{common:{cubicBezierEaseInOut:t},self:{color:n,borderRadius:o,textColor:r,caretColor:a,caretColorError:l,caretColorWarning:s,textDecorationColor:c,border:u,borderDisabled:d,borderHover:p,borderFocus:h,placeholderColor:f,placeholderColorDisabled:v,lineHeightTextarea:m,colorDisabled:g,colorFocus:b,textColorDisabled:x,boxShadowFocus:C,iconSize:w,colorFocusWarning:k,boxShadowFocusWarning:S,borderWarning:_,borderFocusWarning:P,borderHoverWarning:T,colorFocusError:A,boxShadowFocusError:z,borderError:R,borderFocusError:E,borderHoverError:O,clearSize:M,clearColor:F,clearColorHover:I,clearColorPressed:L,iconColor:B,iconColorDisabled:D,suffixTextColor:$,countTextColor:N,countTextColorDisabled:j,iconColorHover:H,iconColorPressed:W,loadingColor:U,loadingColorError:V,loadingColorWarning:q,[ub("padding",e)]:K,[ub("fontSize",e)]:G,[ub("height",e)]:X}}=i.value,{left:Y,right:Q}=Bm(K);return{"--n-bezier":t,"--n-count-text-color":N,"--n-count-text-color-disabled":j,"--n-color":n,"--n-font-size":G,"--n-border-radius":o,"--n-height":X,"--n-padding-left":Y,"--n-padding-right":Q,"--n-text-color":r,"--n-caret-color":a,"--n-text-decoration-color":c,"--n-border":u,"--n-border-disabled":d,"--n-border-hover":p,"--n-border-focus":h,"--n-placeholder-color":f,"--n-placeholder-color-disabled":v,"--n-icon-size":w,"--n-line-height-textarea":m,"--n-color-disabled":g,"--n-color-focus":b,"--n-text-color-disabled":x,"--n-box-shadow-focus":C,"--n-loading-color":U,"--n-caret-color-warning":s,"--n-color-focus-warning":k,"--n-box-shadow-focus-warning":S,"--n-border-warning":_,"--n-border-focus-warning":P,"--n-border-hover-warning":T,"--n-loading-color-warning":q,"--n-caret-color-error":l,"--n-color-focus-error":A,"--n-box-shadow-focus-error":z,"--n-border-error":R,"--n-border-focus-error":E,"--n-border-hover-error":O,"--n-loading-color-error":V,"--n-clear-color":F,"--n-clear-size":M,"--n-clear-color-hover":I,"--n-clear-color-pressed":L,"--n-icon-color":B,"--n-icon-color-hover":H,"--n-icon-color-pressed":W,"--n-icon-color-disabled":D,"--n-suffix-text-color":$}})),Z=o?KP("input",ai((()=>{const{value:e}=y;return e[0]})),Q,e):void 0;return Object.assign(Object.assign({},X),{wrapperElRef:a,inputElRef:u,inputMirrorElRef:c,inputEl2Ref:d,textareaElRef:l,textareaMirrorElRef:s,textareaScrollbarInstRef:f,rtlEnabled:Y,uncontrolledValue:m,mergedValue:g,passwordVisible:M,mergedPlaceholder:T,showPlaceholder1:A,showPlaceholder2:z,mergedFocus:R,isComposing:S,activated:_,showClearButton:E,mergedSize:y,mergedDisabled:x,textDecorationStyle:F,mergedClsPrefix:t,mergedBordered:n,mergedShowPasswordOn:O,placeholderStyle:q,mergedStatus:C,textAreaScrollContainerWidth:I,handleTextAreaScroll:function(e){var t;const{scrollTop:n}=e.target;q.value.top=-n+"px",null===(t=f.value)||void 0===t||t.syncUnifiedContainer()},handleCompositionStart:function(){S.value=!0},handleCompositionEnd:function(e){S.value=!1,e.target===d.value?N(e,1):N(e,0)},handleInput:N,handleInputBlur:function(t){!function(t){const{onInputBlur:n}=e;n&&dg(n,t)}(t),t.relatedTarget===a.value&&function(){const{onDeactivate:t}=e;t&&dg(t)}(),(null===t.relatedTarget||t.relatedTarget!==u.value&&t.relatedTarget!==d.value&&t.relatedTarget!==l.value)&&(_.value=!1),j(t,"blur"),p.value=null},handleInputFocus:function(t,n){!function(t){const{onInputFocus:n}=e;n&&dg(n,t)}(t),w.value=!0,_.value=!0,function(){const{onActivate:t}=e;t&&dg(t)}(),j(t,"focus"),0===n?p.value=u.value:1===n?p.value=d.value:2===n&&(p.value=l.value)},handleWrapperBlur:function(t){e.passivelyActivated&&(function(t){const{onWrapperBlur:n}=e;n&&dg(n,t)}(t),j(t,"blur"))},handleWrapperFocus:function(t){e.passivelyActivated&&(w.value=!0,function(t){const{onWrapperFocus:n}=e;n&&dg(n,t)}(t),j(t,"focus"))},handleMouseEnter:function(){var t;k.value=!0,"textarea"===e.type&&(null===(t=f.value)||void 0===t||t.handleMouseEnterWrapper())},handleMouseLeave:function(){var t;k.value=!1,"textarea"===e.type&&(null===(t=f.value)||void 0===t||t.handleMouseLeaveWrapper())},handleMouseDown:function(t){const{onMousedown:n}=e;n&&n(t);const{tagName:o}=t.target;if("INPUT"!==o&&"TEXTAREA"!==o){if(e.resizable){const{value:e}=a;if(e){const{left:n,top:o,width:r,height:i}=e.getBoundingClientRect(),a=14;if(n+r-a{e.preventDefault(),Tb("mouseup",document,t)};if(Pb("mouseup",document,t),"mousedown"!==O.value)return;M.value=!0;const n=()=>{M.value=!1,Tb("mouseup",document,n)};Pb("mouseup",document,n)},handleWrapperKeydown:function(t){switch(e.onKeydown&&dg(e.onKeydown,t),t.key){case"Escape":W();break;case"Enter":!function(t){var n,o;if(e.passivelyActivated){const{value:r}=_;if(r)return void(e.internalDeactivateOnEnter&&W());t.preventDefault(),"textarea"===e.type?null===(n=l.value)||void 0===n||n.focus():null===(o=u.value)||void 0===o||o.focus()}}(t)}},handleWrapperKeyup:function(t){e.onKeyup&&dg(e.onKeyup,t)},handleTextAreaMirrorResize:function(){(()=>{var t,n;if("textarea"===e.type){const{autosize:o}=e;if(o&&(I.value=null===(n=null===(t=f.value)||void 0===t?void 0:t.$el)||void 0===n?void 0:n.offsetWidth),!l.value)return;if("boolean"==typeof o)return;const{paddingTop:r,paddingBottom:i,lineHeight:a}=window.getComputedStyle(l.value),c=Number(r.slice(0,-2)),u=Number(i.slice(0,-2)),d=Number(a.slice(0,-2)),{value:p}=s;if(!p)return;if(o.minRows){const e=`${c+u+d*Math.max(o.minRows,1)}px`;p.style.minHeight=e}if(o.maxRows){const e=`${c+u+d*o.maxRows}px`;p.style.maxHeight=e}}})()},getTextareaScrollContainer:()=>l.value,mergedTheme:i,cssVars:o?void 0:Q,themeClass:null==Z?void 0:Z.themeClass,onRender:null==Z?void 0:Z.onRender})},render(){var e,t;const{mergedClsPrefix:n,mergedStatus:o,themeClass:r,type:i,countGraphemes:a,onRender:l}=this,s=this.$slots;return null==l||l(),li("div",{ref:"wrapperElRef",class:[`${n}-input`,r,o&&`${n}-input--${o}-status`,{[`${n}-input--rtl`]:this.rtlEnabled,[`${n}-input--disabled`]:this.mergedDisabled,[`${n}-input--textarea`]:"textarea"===i,[`${n}-input--resizable`]:this.resizable&&!this.autosize,[`${n}-input--autosize`]:this.autosize,[`${n}-input--round`]:this.round&&!("textarea"===i),[`${n}-input--pair`]:this.pair,[`${n}-input--focus`]:this.mergedFocus,[`${n}-input--stateful`]:this.stateful}],style:this.cssVars,tabindex:this.mergedDisabled||!this.passivelyActivated||this.activated?void 0:0,onFocus:this.handleWrapperFocus,onBlur:this.handleWrapperBlur,onClick:this.handleClick,onMousedown:this.handleMouseDown,onMouseenter:this.handleMouseEnter,onMouseleave:this.handleMouseLeave,onCompositionstart:this.handleCompositionStart,onCompositionend:this.handleCompositionEnd,onKeyup:this.handleWrapperKeyup,onKeydown:this.handleWrapperKeydown},li("div",{class:`${n}-input-wrapper`},wg(s.prefix,(e=>e&&li("div",{class:`${n}-input__prefix`},e))),"textarea"===i?li(lR,{ref:"textareaScrollbarInstRef",class:`${n}-input__textarea`,container:this.getTextareaScrollContainer,triggerDisplayManually:!0,useUnifiedContainer:!0,internalHoistYRail:!0},{default:()=>{var e,t;const{textAreaScrollContainerWidth:o}=this,r={width:this.autosize&&o&&`${o}px`};return li(yr,null,li("textarea",Object.assign({},this.inputProps,{ref:"textareaElRef",class:[`${n}-input__textarea-el`,null===(e=this.inputProps)||void 0===e?void 0:e.class],autofocus:this.autofocus,rows:Number(this.rows),placeholder:this.placeholder,value:this.mergedValue,disabled:this.mergedDisabled,maxlength:a?void 0:this.maxlength,minlength:a?void 0:this.minlength,readonly:this.readonly,tabindex:this.passivelyActivated&&!this.activated?-1:void 0,style:[this.textDecorationStyle[0],null===(t=this.inputProps)||void 0===t?void 0:t.style,r],onBlur:this.handleInputBlur,onFocus:e=>{this.handleInputFocus(e,2)},onInput:this.handleInput,onChange:this.handleChange,onScroll:this.handleTextAreaScroll})),this.showPlaceholder1?li("div",{class:`${n}-input__placeholder`,style:[this.placeholderStyle,r],key:"placeholder"},this.mergedPlaceholder[0]):null,this.autosize?li(kx,{onResize:this.handleTextAreaMirrorResize},{default:()=>li("div",{ref:"textareaMirrorElRef",class:`${n}-input__textarea-mirror`,key:"mirror"})}):null)}}):li("div",{class:`${n}-input__input`},li("input",Object.assign({type:"password"===i&&this.mergedShowPasswordOn&&this.passwordVisible?"text":i},this.inputProps,{ref:"inputElRef",class:[`${n}-input__input-el`,null===(e=this.inputProps)||void 0===e?void 0:e.class],style:[this.textDecorationStyle[0],null===(t=this.inputProps)||void 0===t?void 0:t.style],tabindex:this.passivelyActivated&&!this.activated?-1:void 0,placeholder:this.mergedPlaceholder[0],disabled:this.mergedDisabled,maxlength:a?void 0:this.maxlength,minlength:a?void 0:this.minlength,value:Array.isArray(this.mergedValue)?this.mergedValue[0]:this.mergedValue,readonly:this.readonly,autofocus:this.autofocus,size:this.attrSize,onBlur:this.handleInputBlur,onFocus:e=>{this.handleInputFocus(e,0)},onInput:e=>{this.handleInput(e,0)},onChange:e=>{this.handleChange(e,0)}})),this.showPlaceholder1?li("div",{class:`${n}-input__placeholder`},li("span",null,this.mergedPlaceholder[0])):null,this.autosize?li("div",{class:`${n}-input__input-mirror`,key:"mirror",ref:"inputMirrorElRef"}," "):null),!this.pair&&wg(s.suffix,(e=>e||this.clearable||this.showCount||this.mergedShowPasswordOn||void 0!==this.loading?li("div",{class:`${n}-input__suffix`},[wg(s["clear-icon-placeholder"],(e=>(this.clearable||e)&&li(GR,{clsPrefix:n,show:this.showClearButton,onClear:this.handleClear},{placeholder:()=>e,icon:()=>{var e,t;return null===(t=(e=this.$slots)["clear-icon"])||void 0===t?void 0:t.call(e)}}))),this.internalLoadingBeforeSuffix?null:e,void 0!==this.loading?li(XR,{clsPrefix:n,loading:this.loading,showArrow:!1,showClear:!1,style:this.cssVars}):null,this.internalLoadingBeforeSuffix?e:null,this.showCount&&"textarea"!==this.type?li(_E,null,{default:e=>{var t;return null===(t=s.count)||void 0===t?void 0:t.call(s,e)}}):null,this.mergedShowPasswordOn&&"password"===this.type?li("div",{class:`${n}-input__eye`,onMousedown:this.handlePasswordToggleMousedown,onClick:this.handlePasswordToggleClick},this.passwordVisible?xg(s["password-visible-icon"],(()=>[li(CT,{clsPrefix:n},{default:()=>li(nT,null)})])):xg(s["password-invisible-icon"],(()=>[li(CT,{clsPrefix:n},{default:()=>li(oT,null)})]))):null]):null))),this.pair?li("span",{class:`${n}-input__separator`},xg(s.separator,(()=>[this.separator]))):null,this.pair?li("div",{class:`${n}-input-wrapper`},li("div",{class:`${n}-input__input`},li("input",{ref:"inputEl2Ref",type:this.type,class:`${n}-input__input-el`,tabindex:this.passivelyActivated&&!this.activated?-1:void 0,placeholder:this.mergedPlaceholder[1],disabled:this.mergedDisabled,maxlength:a?void 0:this.maxlength,minlength:a?void 0:this.minlength,value:Array.isArray(this.mergedValue)?this.mergedValue[1]:void 0,readonly:this.readonly,style:this.textDecorationStyle[1],onBlur:this.handleInputBlur,onFocus:e=>{this.handleInputFocus(e,1)},onInput:e=>{this.handleInput(e,1)},onChange:e=>{this.handleChange(e,1)}}),this.showPlaceholder2?li("div",{class:`${n}-input__placeholder`},li("span",null,this.mergedPlaceholder[1])):null),wg(s.suffix,(e=>(this.clearable||e)&&li("div",{class:`${n}-input__suffix`},[this.clearable&&li(GR,{clsPrefix:n,show:this.showClearButton,onClear:this.handleClear},{icon:()=>{var e;return null===(e=s["clear-icon"])||void 0===e?void 0:e.call(s)},placeholder:()=>{var e;return null===(e=s["clear-icon-placeholder"])||void 0===e?void 0:e.call(s)}}),e])))):null,this.mergedBordered?li("div",{class:`${n}-input__border`}):null,this.mergedBordered?li("div",{class:`${n}-input__state-border`}):null,this.showCount&&"textarea"===i?li(_E,null,{default:e=>{var t;const{renderCount:n}=this;return n?n(e):null===(t=s.count)||void 0===t?void 0:t.call(s,e)}}):null)}}),zE=nb("input-group","\n display: inline-flex;\n width: 100%;\n flex-wrap: nowrap;\n vertical-align: bottom;\n",[eb(">",[nb("input",[eb("&:not(:last-child)","\n border-top-right-radius: 0!important;\n border-bottom-right-radius: 0!important;\n "),eb("&:not(:first-child)","\n border-top-left-radius: 0!important;\n border-bottom-left-radius: 0!important;\n margin-left: -1px!important;\n ")]),nb("button",[eb("&:not(:last-child)","\n border-top-right-radius: 0!important;\n border-bottom-right-radius: 0!important;\n ",[ob("state-border, border","\n border-top-right-radius: 0!important;\n border-bottom-right-radius: 0!important;\n ")]),eb("&:not(:first-child)","\n border-top-left-radius: 0!important;\n border-bottom-left-radius: 0!important;\n ",[ob("state-border, border","\n border-top-left-radius: 0!important;\n border-bottom-left-radius: 0!important;\n ")])]),eb("*",[eb("&:not(:last-child)","\n border-top-right-radius: 0!important;\n border-bottom-right-radius: 0!important;\n ",[eb(">",[nb("input","\n border-top-right-radius: 0!important;\n border-bottom-right-radius: 0!important;\n "),nb("base-selection",[nb("base-selection-label","\n border-top-right-radius: 0!important;\n border-bottom-right-radius: 0!important;\n "),nb("base-selection-tags","\n border-top-right-radius: 0!important;\n border-bottom-right-radius: 0!important;\n "),ob("box-shadow, border, state-border","\n border-top-right-radius: 0!important;\n border-bottom-right-radius: 0!important;\n ")])])]),eb("&:not(:first-child)","\n margin-left: -1px!important;\n border-top-left-radius: 0!important;\n border-bottom-left-radius: 0!important;\n ",[eb(">",[nb("input","\n border-top-left-radius: 0!important;\n border-bottom-left-radius: 0!important;\n "),nb("base-selection",[nb("base-selection-label","\n border-top-left-radius: 0!important;\n border-bottom-left-radius: 0!important;\n "),nb("base-selection-tags","\n border-top-left-radius: 0!important;\n border-bottom-left-radius: 0!important;\n "),ob("box-shadow, border, state-border","\n border-top-left-radius: 0!important;\n border-bottom-left-radius: 0!important;\n ")])])])])])]),RE=zn({name:"InputGroup",props:{},setup(e){const{mergedClsPrefixRef:t}=B_(e);return qP("-input-group",zE,t),{mergedClsPrefix:t}},render(){const{mergedClsPrefix:e}=this;return li("div",{class:`${e}-input-group`},this.$slots)}}),EE={name:"AutoComplete",common:tz,peers:{InternalSelectMenu:pR,Input:xE},self:function(e){const{boxShadow2:t}=e;return{menuBoxShadow:t}}},OE={name:"Avatar",common:tz,self:function(e){const{borderRadius:t,avatarColor:n,cardColor:o,fontSize:r,heightTiny:i,heightSmall:a,heightMedium:l,heightLarge:s,heightHuge:c,modalColor:u,popoverColor:d}=e;return{borderRadius:t,fontSize:r,border:`2px solid ${o}`,heightTiny:i,heightSmall:a,heightMedium:l,heightLarge:s,heightHuge:c,color:eg(o,n),colorModal:eg(u,n),colorPopover:eg(d,n)}}},ME={name:"AvatarGroup",common:tz,peers:{Avatar:OE},self:function(){return{gap:"-12px"}}},FE={width:"44px",height:"44px",borderRadius:"22px",iconSize:"26px"},IE={name:"BackTop",common:tz,self(e){const{popoverColor:t,textColor2:n,primaryColorHover:o,primaryColorPressed:r}=e;return Object.assign(Object.assign({},FE),{color:t,textColor:n,iconColor:n,iconColorHover:o,iconColorPressed:r,boxShadow:"0 2px 8px 0px rgba(0, 0, 0, .12)",boxShadowHover:"0 2px 12px 0px rgba(0, 0, 0, .18)",boxShadowPressed:"0 2px 12px 0px rgba(0, 0, 0, .18)"})}},LE={name:"BackTop",common:qz,self:function(e){const{popoverColor:t,textColor2:n,primaryColorHover:o,primaryColorPressed:r}=e;return Object.assign(Object.assign({},FE),{color:t,textColor:n,iconColor:n,iconColorHover:o,iconColorPressed:r,boxShadow:"0 2px 8px 0px rgba(0, 0, 0, .12)",boxShadowHover:"0 2px 12px 0px rgba(0, 0, 0, .18)",boxShadowPressed:"0 2px 12px 0px rgba(0, 0, 0, .18)"})}},BE=li("svg",{viewBox:"0 0 24 24",version:"1.1",xmlns:"http://www.w3.org/2000/svg",xlinkHref:"http://www.w3.org/1999/xlink"},li("g",{stroke:"none","stroke-width":"1","fill-rule":"evenodd"},li("g",{transform:"translate(-139.000000, -4423.000000)","fill-rule":"nonzero"},li("g",{transform:"translate(120.000000, 4285.000000)"},li("g",{transform:"translate(7.000000, 126.000000)"},li("g",{transform:"translate(24.000000, 24.000000) scale(1, -1) translate(-24.000000, -24.000000) translate(12.000000, 12.000000)"},li("g",{transform:"translate(4.000000, 2.000000)"},li("path",{d:"M8,0 C8.51283584,0 8.93550716,0.38604019 8.99327227,0.883378875 L9,1 L9,10.584 L12.2928932,7.29289322 C12.6834175,6.90236893 13.3165825,6.90236893 13.7071068,7.29289322 C14.0675907,7.65337718 14.0953203,8.22060824 13.7902954,8.61289944 L13.7071068,8.70710678 L8.70710678,13.7071068 L8.62544899,13.7803112 L8.618,13.784 L8.59530661,13.8036654 L8.4840621,13.8753288 L8.37133602,13.9287745 L8.22929083,13.9735893 L8.14346259,13.9897165 L8.03324678,13.9994506 L7.9137692,13.9962979 L7.77070917,13.9735893 L7.6583843,13.9401293 L7.57677845,13.9063266 L7.47929125,13.8540045 L7.4048407,13.8036865 L7.38131006,13.7856883 C7.35030318,13.7612383 7.32077858,13.7349921 7.29289322,13.7071068 L2.29289322,8.70710678 L2.20970461,8.61289944 C1.90467972,8.22060824 1.93240926,7.65337718 2.29289322,7.29289322 C2.65337718,6.93240926 3.22060824,6.90467972 3.61289944,7.20970461 L3.70710678,7.29289322 L7,10.585 L7,1 L7.00672773,0.883378875 C7.06449284,0.38604019 7.48716416,0 8,0 Z"}),li("path",{d:"M14.9333333,15.9994506 C15.5224371,15.9994506 16,16.4471659 16,16.9994506 C16,17.5122865 15.5882238,17.9349578 15.0577292,17.9927229 L14.9333333,17.9994506 L1.06666667,17.9994506 C0.477562934,17.9994506 0,17.5517354 0,16.9994506 C0,16.4866148 0.411776203,16.0639435 0.9422708,16.0061783 L1.06666667,15.9994506 L14.9333333,15.9994506 Z"})))))))),DE=nb("back-top","\n position: fixed;\n right: 40px;\n bottom: 40px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--n-text-color);\n transition:\n color .3s var(--n-bezier),\n box-shadow .3s var(--n-bezier),\n background-color .3s var(--n-bezier);\n border-radius: var(--n-border-radius);\n height: var(--n-height);\n min-width: var(--n-width);\n box-shadow: var(--n-box-shadow);\n background-color: var(--n-color);\n",[gR(),rb("transition-disabled",{transition:"none !important"}),nb("base-icon","\n font-size: var(--n-icon-size);\n color: var(--n-icon-color);\n transition: color .3s var(--n-bezier);\n "),eb("svg",{pointerEvents:"none"}),eb("&:hover",{boxShadow:"var(--n-box-shadow-hover)"},[nb("base-icon",{color:"var(--n-icon-color-hover)"})]),eb("&:active",{boxShadow:"var(--n-box-shadow-pressed)"},[nb("base-icon",{color:"var(--n-icon-color-pressed)"})])]),$E=zn({name:"BackTop",inheritAttrs:!1,props:Object.assign(Object.assign({},I_.props),{show:{type:Boolean,default:void 0},right:{type:[Number,String],default:40},bottom:{type:[Number,String],default:40},to:{type:[String,Object],default:"body"},visibilityHeight:{type:Number,default:180},listenTo:[String,Object,Function],"onUpdate:show":{type:Function,default:()=>{}},target:Function,onShow:Function,onHide:Function}),setup(e){const{mergedClsPrefixRef:t,inlineThemeDisabled:n}=B_(e),o=Et(null),r=Et(!1);ir((()=>{const{value:t}=o;r.value=null!==t&&t>=e.visibilityHeight}));const i=Et(!1);lr(r,(t=>{var n;i.value&&(null===(n=e["onUpdate:show"])||void 0===n||n.call(e,t))}));const a=Db(jt(e,"show"),r),l=Et(!0),s=Et(null),c=ai((()=>({right:`calc(${Ag(e.right)} + ${Ux.value})`,bottom:Ag(e.bottom)})));let u,d;lr(a,(t=>{var n,o;i.value&&(t&&(null===(n=e.onShow)||void 0===n||n.call(e)),null===(o=e.onHide)||void 0===o||o.call(e))}));const p=I_("BackTop","-back-top",DE,LE,e,t);function h(){var t;if(d)return;d=!0;const n=(null===(t=e.target)||void 0===t?void 0:t.call(e))||("string"==typeof(o=e.listenTo)?document.querySelector(o):"function"==typeof o?o():o)||Om(s.value);var o;if(!n)return;u=n===document.documentElement?document:n;const{to:r}=e;"string"==typeof r&&document.querySelector(r),u.addEventListener("scroll",f),f()}function f(){o.value=(Zx(u)?document.documentElement:u).scrollTop,i.value||tn((()=>{i.value=!0}))}$n((()=>{h(),l.value=a.value})),Hn((()=>{u&&u.removeEventListener("scroll",f)}));const v=ai((()=>{const{self:{color:e,boxShadow:t,boxShadowHover:n,boxShadowPressed:o,iconColor:r,iconColorHover:i,iconColorPressed:a,width:l,height:s,iconSize:c,borderRadius:u,textColor:d},common:{cubicBezierEaseInOut:h}}=p.value;return{"--n-bezier":h,"--n-border-radius":u,"--n-height":s,"--n-width":l,"--n-box-shadow":t,"--n-box-shadow-hover":n,"--n-box-shadow-pressed":o,"--n-color":e,"--n-icon-size":c,"--n-icon-color":r,"--n-icon-color-hover":i,"--n-icon-color-pressed":a,"--n-text-color":d}})),m=n?KP("back-top",void 0,v,e):void 0;return{placeholderRef:s,style:c,mergedShow:a,isMounted:$b(),scrollElement:Et(null),scrollTop:o,DomInfoReady:i,transitionDisabled:l,mergedClsPrefix:t,handleAfterEnter:function(){l.value=!1},handleScroll:f,handleClick:function(){(Zx(u)?document.documentElement:u).scrollTo({top:0,behavior:"smooth"})},cssVars:n?void 0:v,themeClass:null==m?void 0:m.themeClass,onRender:null==m?void 0:m.onRender}},render(){const{mergedClsPrefix:e}=this;return li("div",{ref:"placeholderRef",class:`${e}-back-top-placeholder`,style:"display: none","aria-hidden":!0},li(Sy,{to:this.to,show:this.mergedShow},{default:()=>li(vi,{name:"fade-in-scale-up-transition",appear:this.isMounted,onAfterEnter:this.handleAfterEnter},{default:()=>{var t;return null===(t=this.onRender)||void 0===t||t.call(this),this.mergedShow?li("div",Wr(this.$attrs,{class:[`${e}-back-top`,this.themeClass,this.transitionDisabled&&`${e}-back-top--transition-disabled`],style:[this.style,this.cssVars],onClick:this.handleClick}),xg(this.$slots.default,(()=>[li(CT,{clsPrefix:e},{default:()=>BE})]))):null}})}))}}),NE={name:"Badge",common:tz,self(e){const{errorColorSuppl:t,infoColorSuppl:n,successColorSuppl:o,warningColorSuppl:r,fontFamily:i}=e;return{color:t,colorInfo:n,colorSuccess:o,colorError:t,colorWarning:r,fontSize:"12px",fontFamily:i}}},jE={fontWeightActive:"400"};function HE(e){const{fontSize:t,textColor3:n,textColor2:o,borderRadius:r,buttonColor2Hover:i,buttonColor2Pressed:a}=e;return Object.assign(Object.assign({},jE),{fontSize:t,itemLineHeight:"1.25",itemTextColor:n,itemTextColorHover:o,itemTextColorPressed:o,itemTextColorActive:o,itemBorderRadius:r,itemColorHover:i,itemColorPressed:a,separatorColor:n})}const WE={name:"Breadcrumb",common:qz,self:HE},UE={name:"Breadcrumb",common:tz,self:HE},VE=nb("breadcrumb","\n white-space: nowrap;\n cursor: default;\n line-height: var(--n-item-line-height);\n",[eb("ul","\n list-style: none;\n padding: 0;\n margin: 0;\n "),eb("a","\n color: inherit;\n text-decoration: inherit;\n "),nb("breadcrumb-item","\n font-size: var(--n-font-size);\n transition: color .3s var(--n-bezier);\n display: inline-flex;\n align-items: center;\n ",[nb("icon","\n font-size: 18px;\n vertical-align: -.2em;\n transition: color .3s var(--n-bezier);\n color: var(--n-item-text-color);\n "),eb("&:not(:last-child)",[rb("clickable",[ob("link","\n cursor: pointer;\n ",[eb("&:hover","\n background-color: var(--n-item-color-hover);\n "),eb("&:active","\n background-color: var(--n-item-color-pressed); \n ")])])]),ob("link","\n padding: 4px;\n border-radius: var(--n-item-border-radius);\n transition:\n background-color .3s var(--n-bezier),\n color .3s var(--n-bezier);\n color: var(--n-item-text-color);\n position: relative;\n ",[eb("&:hover","\n color: var(--n-item-text-color-hover);\n ",[nb("icon","\n color: var(--n-item-text-color-hover);\n ")]),eb("&:active","\n color: var(--n-item-text-color-pressed);\n ",[nb("icon","\n color: var(--n-item-text-color-pressed);\n ")])]),ob("separator","\n margin: 0 8px;\n color: var(--n-separator-color);\n transition: color .3s var(--n-bezier);\n user-select: none;\n -webkit-user-select: none;\n "),eb("&:last-child",[ob("link","\n font-weight: var(--n-font-weight-active);\n cursor: unset;\n color: var(--n-item-text-color-active);\n ",[nb("icon","\n color: var(--n-item-text-color-active);\n ")]),ob("separator","\n display: none;\n ")])])]),qE="n-breadcrumb",KE=zn({name:"Breadcrumb",props:Object.assign(Object.assign({},I_.props),{separator:{type:String,default:"/"}}),setup(e){const{mergedClsPrefixRef:t,inlineThemeDisabled:n}=B_(e),o=I_("Breadcrumb","-breadcrumb",VE,WE,e,t);_o(qE,{separatorRef:jt(e,"separator"),mergedClsPrefixRef:t});const r=ai((()=>{const{common:{cubicBezierEaseInOut:e},self:{separatorColor:t,itemTextColor:n,itemTextColorHover:r,itemTextColorPressed:i,itemTextColorActive:a,fontSize:l,fontWeightActive:s,itemBorderRadius:c,itemColorHover:u,itemColorPressed:d,itemLineHeight:p}}=o.value;return{"--n-font-size":l,"--n-bezier":e,"--n-item-text-color":n,"--n-item-text-color-hover":r,"--n-item-text-color-pressed":i,"--n-item-text-color-active":a,"--n-separator-color":t,"--n-item-color-hover":u,"--n-item-color-pressed":d,"--n-item-border-radius":c,"--n-font-weight-active":s,"--n-item-line-height":p}})),i=n?KP("breadcrumb",void 0,r,e):void 0;return{mergedClsPrefix:t,cssVars:n?void 0:r,themeClass:null==i?void 0:i.themeClass,onRender:null==i?void 0:i.onRender}},render(){var e;return null===(e=this.onRender)||void 0===e||e.call(this),li("nav",{class:[`${this.mergedClsPrefix}-breadcrumb`,this.themeClass],style:this.cssVars,"aria-label":"Breadcrumb"},li("ul",null,this.$slots))}}),GE=zn({name:"BreadcrumbItem",props:{separator:String,href:String,clickable:{type:Boolean,default:!0},onClick:Function},setup(e,{slots:t}){const n=Po(qE,null);if(!n)return()=>null;const{separatorRef:o,mergedClsPrefixRef:r}=n,i=function(e=(pb?window:null)){const t=()=>{const{hash:t,host:n,hostname:o,href:r,origin:i,pathname:a,port:l,protocol:s,search:c}=(null==e?void 0:e.location)||{};return{hash:t,host:n,hostname:o,href:r,origin:i,pathname:a,port:l,protocol:s,search:c}},n=Et(t()),o=()=>{n.value=t()};return $n((()=>{e&&(e.addEventListener("popstate",o),e.addEventListener("hashchange",o))})),Wn((()=>{e&&(e.removeEventListener("popstate",o),e.removeEventListener("hashchange",o))})),n}(),a=ai((()=>e.href?"a":"span")),l=ai((()=>i.value.href===e.href?"location":null));return()=>{const{value:n}=r;return li("li",{class:[`${n}-breadcrumb-item`,e.clickable&&`${n}-breadcrumb-item--clickable`]},li(a.value,{class:`${n}-breadcrumb-item__link`,"aria-current":l.value,href:e.href,onClick:e.onClick},t),li("span",{class:`${n}-breadcrumb-item__separator`,"aria-hidden":"true"},xg(t.separator,(()=>{var t;return[null!==(t=e.separator)&&void 0!==t?t:o.value]}))))}}});function XE(e){return eg(e,[255,255,255,.16])}function YE(e){return eg(e,[0,0,0,.12])}const QE={paddingTiny:"0 6px",paddingSmall:"0 10px",paddingMedium:"0 14px",paddingLarge:"0 18px",paddingRoundTiny:"0 10px",paddingRoundSmall:"0 14px",paddingRoundMedium:"0 18px",paddingRoundLarge:"0 22px",iconMarginTiny:"6px",iconMarginSmall:"6px",iconMarginMedium:"6px",iconMarginLarge:"6px",iconSizeTiny:"14px",iconSizeSmall:"18px",iconSizeMedium:"18px",iconSizeLarge:"20px",rippleDuration:".6s"};function ZE(e){const{heightTiny:t,heightSmall:n,heightMedium:o,heightLarge:r,borderRadius:i,fontSizeTiny:a,fontSizeSmall:l,fontSizeMedium:s,fontSizeLarge:c,opacityDisabled:u,textColor2:d,textColor3:p,primaryColorHover:h,primaryColorPressed:f,borderColor:v,primaryColor:m,baseColor:g,infoColor:b,infoColorHover:y,infoColorPressed:x,successColor:C,successColorHover:w,successColorPressed:k,warningColor:S,warningColorHover:_,warningColorPressed:P,errorColor:T,errorColorHover:A,errorColorPressed:z,fontWeight:R,buttonColor2:E,buttonColor2Hover:O,buttonColor2Pressed:M,fontWeightStrong:F}=e;return Object.assign(Object.assign({},QE),{heightTiny:t,heightSmall:n,heightMedium:o,heightLarge:r,borderRadiusTiny:i,borderRadiusSmall:i,borderRadiusMedium:i,borderRadiusLarge:i,fontSizeTiny:a,fontSizeSmall:l,fontSizeMedium:s,fontSizeLarge:c,opacityDisabled:u,colorOpacitySecondary:"0.16",colorOpacitySecondaryHover:"0.22",colorOpacitySecondaryPressed:"0.28",colorSecondary:E,colorSecondaryHover:O,colorSecondaryPressed:M,colorTertiary:E,colorTertiaryHover:O,colorTertiaryPressed:M,colorQuaternary:"#0000",colorQuaternaryHover:O,colorQuaternaryPressed:M,color:"#0000",colorHover:"#0000",colorPressed:"#0000",colorFocus:"#0000",colorDisabled:"#0000",textColor:d,textColorTertiary:p,textColorHover:h,textColorPressed:f,textColorFocus:h,textColorDisabled:d,textColorText:d,textColorTextHover:h,textColorTextPressed:f,textColorTextFocus:h,textColorTextDisabled:d,textColorGhost:d,textColorGhostHover:h,textColorGhostPressed:f,textColorGhostFocus:h,textColorGhostDisabled:d,border:`1px solid ${v}`,borderHover:`1px solid ${h}`,borderPressed:`1px solid ${f}`,borderFocus:`1px solid ${h}`,borderDisabled:`1px solid ${v}`,rippleColor:m,colorPrimary:m,colorHoverPrimary:h,colorPressedPrimary:f,colorFocusPrimary:h,colorDisabledPrimary:m,textColorPrimary:g,textColorHoverPrimary:g,textColorPressedPrimary:g,textColorFocusPrimary:g,textColorDisabledPrimary:g,textColorTextPrimary:m,textColorTextHoverPrimary:h,textColorTextPressedPrimary:f,textColorTextFocusPrimary:h,textColorTextDisabledPrimary:d,textColorGhostPrimary:m,textColorGhostHoverPrimary:h,textColorGhostPressedPrimary:f,textColorGhostFocusPrimary:h,textColorGhostDisabledPrimary:m,borderPrimary:`1px solid ${m}`,borderHoverPrimary:`1px solid ${h}`,borderPressedPrimary:`1px solid ${f}`,borderFocusPrimary:`1px solid ${h}`,borderDisabledPrimary:`1px solid ${m}`,rippleColorPrimary:m,colorInfo:b,colorHoverInfo:y,colorPressedInfo:x,colorFocusInfo:y,colorDisabledInfo:b,textColorInfo:g,textColorHoverInfo:g,textColorPressedInfo:g,textColorFocusInfo:g,textColorDisabledInfo:g,textColorTextInfo:b,textColorTextHoverInfo:y,textColorTextPressedInfo:x,textColorTextFocusInfo:y,textColorTextDisabledInfo:d,textColorGhostInfo:b,textColorGhostHoverInfo:y,textColorGhostPressedInfo:x,textColorGhostFocusInfo:y,textColorGhostDisabledInfo:b,borderInfo:`1px solid ${b}`,borderHoverInfo:`1px solid ${y}`,borderPressedInfo:`1px solid ${x}`,borderFocusInfo:`1px solid ${y}`,borderDisabledInfo:`1px solid ${b}`,rippleColorInfo:b,colorSuccess:C,colorHoverSuccess:w,colorPressedSuccess:k,colorFocusSuccess:w,colorDisabledSuccess:C,textColorSuccess:g,textColorHoverSuccess:g,textColorPressedSuccess:g,textColorFocusSuccess:g,textColorDisabledSuccess:g,textColorTextSuccess:C,textColorTextHoverSuccess:w,textColorTextPressedSuccess:k,textColorTextFocusSuccess:w,textColorTextDisabledSuccess:d,textColorGhostSuccess:C,textColorGhostHoverSuccess:w,textColorGhostPressedSuccess:k,textColorGhostFocusSuccess:w,textColorGhostDisabledSuccess:C,borderSuccess:`1px solid ${C}`,borderHoverSuccess:`1px solid ${w}`,borderPressedSuccess:`1px solid ${k}`,borderFocusSuccess:`1px solid ${w}`,borderDisabledSuccess:`1px solid ${C}`,rippleColorSuccess:C,colorWarning:S,colorHoverWarning:_,colorPressedWarning:P,colorFocusWarning:_,colorDisabledWarning:S,textColorWarning:g,textColorHoverWarning:g,textColorPressedWarning:g,textColorFocusWarning:g,textColorDisabledWarning:g,textColorTextWarning:S,textColorTextHoverWarning:_,textColorTextPressedWarning:P,textColorTextFocusWarning:_,textColorTextDisabledWarning:d,textColorGhostWarning:S,textColorGhostHoverWarning:_,textColorGhostPressedWarning:P,textColorGhostFocusWarning:_,textColorGhostDisabledWarning:S,borderWarning:`1px solid ${S}`,borderHoverWarning:`1px solid ${_}`,borderPressedWarning:`1px solid ${P}`,borderFocusWarning:`1px solid ${_}`,borderDisabledWarning:`1px solid ${S}`,rippleColorWarning:S,colorError:T,colorHoverError:A,colorPressedError:z,colorFocusError:A,colorDisabledError:T,textColorError:g,textColorHoverError:g,textColorPressedError:g,textColorFocusError:g,textColorDisabledError:g,textColorTextError:T,textColorTextHoverError:A,textColorTextPressedError:z,textColorTextFocusError:A,textColorTextDisabledError:d,textColorGhostError:T,textColorGhostHoverError:A,textColorGhostPressedError:z,textColorGhostFocusError:A,textColorGhostDisabledError:T,borderError:`1px solid ${T}`,borderHoverError:`1px solid ${A}`,borderPressedError:`1px solid ${z}`,borderFocusError:`1px solid ${A}`,borderDisabledError:`1px solid ${T}`,rippleColorError:T,waveOpacity:"0.6",fontWeight:R,fontWeightStrong:F})}const JE={name:"Button",common:qz,self:ZE},eO={name:"Button",common:tz,self(e){const t=ZE(e);return t.waveOpacity="0.8",t.colorOpacitySecondary="0.16",t.colorOpacitySecondaryHover="0.2",t.colorOpacitySecondaryPressed="0.12",t}},tO=eb([nb("button","\n margin: 0;\n font-weight: var(--n-font-weight);\n line-height: 1;\n font-family: inherit;\n padding: var(--n-padding);\n height: var(--n-height);\n font-size: var(--n-font-size);\n border-radius: var(--n-border-radius);\n color: var(--n-text-color);\n background-color: var(--n-color);\n width: var(--n-width);\n white-space: nowrap;\n outline: none;\n position: relative;\n z-index: auto;\n border: none;\n display: inline-flex;\n flex-wrap: nowrap;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n user-select: none;\n -webkit-user-select: none;\n text-align: center;\n cursor: pointer;\n text-decoration: none;\n transition:\n color .3s var(--n-bezier),\n background-color .3s var(--n-bezier),\n opacity .3s var(--n-bezier),\n border-color .3s var(--n-bezier);\n ",[rb("color",[ob("border",{borderColor:"var(--n-border-color)"}),rb("disabled",[ob("border",{borderColor:"var(--n-border-color-disabled)"})]),ib("disabled",[eb("&:focus",[ob("state-border",{borderColor:"var(--n-border-color-focus)"})]),eb("&:hover",[ob("state-border",{borderColor:"var(--n-border-color-hover)"})]),eb("&:active",[ob("state-border",{borderColor:"var(--n-border-color-pressed)"})]),rb("pressed",[ob("state-border",{borderColor:"var(--n-border-color-pressed)"})])])]),rb("disabled",{backgroundColor:"var(--n-color-disabled)",color:"var(--n-text-color-disabled)"},[ob("border",{border:"var(--n-border-disabled)"})]),ib("disabled",[eb("&:focus",{backgroundColor:"var(--n-color-focus)",color:"var(--n-text-color-focus)"},[ob("state-border",{border:"var(--n-border-focus)"})]),eb("&:hover",{backgroundColor:"var(--n-color-hover)",color:"var(--n-text-color-hover)"},[ob("state-border",{border:"var(--n-border-hover)"})]),eb("&:active",{backgroundColor:"var(--n-color-pressed)",color:"var(--n-text-color-pressed)"},[ob("state-border",{border:"var(--n-border-pressed)"})]),rb("pressed",{backgroundColor:"var(--n-color-pressed)",color:"var(--n-text-color-pressed)"},[ob("state-border",{border:"var(--n-border-pressed)"})])]),rb("loading","cursor: wait;"),nb("base-wave","\n pointer-events: none;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n animation-iteration-count: 1;\n animation-duration: var(--n-ripple-duration);\n animation-timing-function: var(--n-bezier-ease-out), var(--n-bezier-ease-out);\n ",[rb("active",{zIndex:1,animationName:"button-wave-spread, button-wave-opacity"})]),pb&&"MozBoxSizing"in document.createElement("div").style?eb("&::moz-focus-inner",{border:0}):null,ob("border, state-border","\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n border-radius: inherit;\n transition: border-color .3s var(--n-bezier);\n pointer-events: none;\n "),ob("border",{border:"var(--n-border)"}),ob("state-border",{border:"var(--n-border)",borderColor:"#0000",zIndex:1}),ob("icon","\n margin: var(--n-icon-margin);\n margin-left: 0;\n height: var(--n-icon-size);\n width: var(--n-icon-size);\n max-width: var(--n-icon-size);\n font-size: var(--n-icon-size);\n position: relative;\n flex-shrink: 0;\n ",[nb("icon-slot","\n height: var(--n-icon-size);\n width: var(--n-icon-size);\n position: absolute;\n left: 0;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n justify-content: center;\n ",[PT({top:"50%",originalTransform:"translateY(-50%)"})]),function({duration:e=".2s",delay:t=".1s"}={}){return[eb("&.fade-in-width-expand-transition-leave-from, &.fade-in-width-expand-transition-enter-to",{opacity:1}),eb("&.fade-in-width-expand-transition-leave-to, &.fade-in-width-expand-transition-enter-from","\n opacity: 0!important;\n margin-left: 0!important;\n margin-right: 0!important;\n "),eb("&.fade-in-width-expand-transition-leave-active",`\n overflow: hidden;\n transition:\n opacity ${e} ${tE},\n max-width ${e} ${tE} ${t},\n margin-left ${e} ${tE} ${t},\n margin-right ${e} ${tE} ${t};\n `),eb("&.fade-in-width-expand-transition-enter-active",`\n overflow: hidden;\n transition:\n opacity ${e} ${tE} ${t},\n max-width ${e} ${tE},\n margin-left ${e} ${tE},\n margin-right ${e} ${tE};\n `)]}()]),ob("content","\n display: flex;\n align-items: center;\n flex-wrap: nowrap;\n min-width: 0;\n ",[eb("~",[ob("icon",{margin:"var(--n-icon-margin)",marginRight:0})])]),rb("block","\n display: flex;\n width: 100%;\n "),rb("dashed",[ob("border, state-border",{borderStyle:"dashed !important"})]),rb("disabled",{cursor:"not-allowed",opacity:"var(--n-opacity-disabled)"})]),eb("@keyframes button-wave-spread",{from:{boxShadow:"0 0 0.5px 0 var(--n-ripple-color)"},to:{boxShadow:"0 0 0.5px 4.5px var(--n-ripple-color)"}}),eb("@keyframes button-wave-opacity",{from:{opacity:"var(--n-wave-opacity)"},to:{opacity:0}})]),nO=zn({name:"Button",props:Object.assign(Object.assign({},I_.props),{color:String,textColor:String,text:Boolean,block:Boolean,loading:Boolean,disabled:Boolean,circle:Boolean,size:String,ghost:Boolean,round:Boolean,secondary:Boolean,tertiary:Boolean,quaternary:Boolean,strong:Boolean,focusable:{type:Boolean,default:!0},keyboard:{type:Boolean,default:!0},tag:{type:String,default:"button"},type:{type:String,default:"default"},dashed:Boolean,renderIcon:Function,iconPlacement:{type:String,default:"left"},attrType:{type:String,default:"button"},bordered:{type:Boolean,default:!0},onClick:[Function,Array],nativeFocusBehavior:{type:Boolean,default:!bE}}),setup(e){const t=Et(null),n=Et(null),o=Et(!1),r=mb((()=>!e.quaternary&&!e.tertiary&&!e.secondary&&!e.text&&(!e.color||e.ghost||e.dashed)&&e.bordered)),i=Po("n-button-group",{}),{mergedSizeRef:a}=eC({},{defaultSize:"medium",mergedSize:t=>{const{size:n}=e;if(n)return n;const{size:o}=i;if(o)return o;const{mergedSize:r}=t||{};return r?r.value:"medium"}}),l=ai((()=>e.focusable&&!e.disabled)),{inlineThemeDisabled:s,mergedClsPrefixRef:c,mergedRtlRef:u}=B_(e),d=I_("Button","-button",tO,JE,e,c),p=GP("Button",u,c),h=ai((()=>{const t=d.value,{common:{cubicBezierEaseInOut:n,cubicBezierEaseOut:o},self:r}=t,{rippleDuration:i,opacityDisabled:l,fontWeight:s,fontWeightStrong:c}=r,u=a.value,{dashed:p,type:h,ghost:f,text:v,color:m,round:g,circle:b,textColor:y,secondary:x,tertiary:C,quaternary:w,strong:k}=e,S={"font-weight":k?c:s};let _={"--n-color":"initial","--n-color-hover":"initial","--n-color-pressed":"initial","--n-color-focus":"initial","--n-color-disabled":"initial","--n-ripple-color":"initial","--n-text-color":"initial","--n-text-color-hover":"initial","--n-text-color-pressed":"initial","--n-text-color-focus":"initial","--n-text-color-disabled":"initial"};const P="tertiary"===h,T="default"===h,A=P?"default":h;if(v){const e=y||m;_={"--n-color":"#0000","--n-color-hover":"#0000","--n-color-pressed":"#0000","--n-color-focus":"#0000","--n-color-disabled":"#0000","--n-ripple-color":"#0000","--n-text-color":e||r[ub("textColorText",A)],"--n-text-color-hover":e?XE(e):r[ub("textColorTextHover",A)],"--n-text-color-pressed":e?YE(e):r[ub("textColorTextPressed",A)],"--n-text-color-focus":e?XE(e):r[ub("textColorTextHover",A)],"--n-text-color-disabled":e||r[ub("textColorTextDisabled",A)]}}else if(f||p){const e=y||m;_={"--n-color":"#0000","--n-color-hover":"#0000","--n-color-pressed":"#0000","--n-color-focus":"#0000","--n-color-disabled":"#0000","--n-ripple-color":m||r[ub("rippleColor",A)],"--n-text-color":e||r[ub("textColorGhost",A)],"--n-text-color-hover":e?XE(e):r[ub("textColorGhostHover",A)],"--n-text-color-pressed":e?YE(e):r[ub("textColorGhostPressed",A)],"--n-text-color-focus":e?XE(e):r[ub("textColorGhostHover",A)],"--n-text-color-disabled":e||r[ub("textColorGhostDisabled",A)]}}else if(x){const e=T?r.textColor:P?r.textColorTertiary:r[ub("color",A)],t=m||e,n="default"!==h&&"tertiary"!==h;_={"--n-color":n?tg(t,{alpha:Number(r.colorOpacitySecondary)}):r.colorSecondary,"--n-color-hover":n?tg(t,{alpha:Number(r.colorOpacitySecondaryHover)}):r.colorSecondaryHover,"--n-color-pressed":n?tg(t,{alpha:Number(r.colorOpacitySecondaryPressed)}):r.colorSecondaryPressed,"--n-color-focus":n?tg(t,{alpha:Number(r.colorOpacitySecondaryHover)}):r.colorSecondaryHover,"--n-color-disabled":r.colorSecondary,"--n-ripple-color":"#0000","--n-text-color":t,"--n-text-color-hover":t,"--n-text-color-pressed":t,"--n-text-color-focus":t,"--n-text-color-disabled":t}}else if(C||w){const e=T?r.textColor:P?r.textColorTertiary:r[ub("color",A)],t=m||e;C?(_["--n-color"]=r.colorTertiary,_["--n-color-hover"]=r.colorTertiaryHover,_["--n-color-pressed"]=r.colorTertiaryPressed,_["--n-color-focus"]=r.colorSecondaryHover,_["--n-color-disabled"]=r.colorTertiary):(_["--n-color"]=r.colorQuaternary,_["--n-color-hover"]=r.colorQuaternaryHover,_["--n-color-pressed"]=r.colorQuaternaryPressed,_["--n-color-focus"]=r.colorQuaternaryHover,_["--n-color-disabled"]=r.colorQuaternary),_["--n-ripple-color"]="#0000",_["--n-text-color"]=t,_["--n-text-color-hover"]=t,_["--n-text-color-pressed"]=t,_["--n-text-color-focus"]=t,_["--n-text-color-disabled"]=t}else _={"--n-color":m||r[ub("color",A)],"--n-color-hover":m?XE(m):r[ub("colorHover",A)],"--n-color-pressed":m?YE(m):r[ub("colorPressed",A)],"--n-color-focus":m?XE(m):r[ub("colorFocus",A)],"--n-color-disabled":m||r[ub("colorDisabled",A)],"--n-ripple-color":m||r[ub("rippleColor",A)],"--n-text-color":y||(m?r.textColorPrimary:P?r.textColorTertiary:r[ub("textColor",A)]),"--n-text-color-hover":y||(m?r.textColorHoverPrimary:r[ub("textColorHover",A)]),"--n-text-color-pressed":y||(m?r.textColorPressedPrimary:r[ub("textColorPressed",A)]),"--n-text-color-focus":y||(m?r.textColorFocusPrimary:r[ub("textColorFocus",A)]),"--n-text-color-disabled":y||(m?r.textColorDisabledPrimary:r[ub("textColorDisabled",A)])};let z={"--n-border":"initial","--n-border-hover":"initial","--n-border-pressed":"initial","--n-border-focus":"initial","--n-border-disabled":"initial"};z=v?{"--n-border":"none","--n-border-hover":"none","--n-border-pressed":"none","--n-border-focus":"none","--n-border-disabled":"none"}:{"--n-border":r[ub("border",A)],"--n-border-hover":r[ub("borderHover",A)],"--n-border-pressed":r[ub("borderPressed",A)],"--n-border-focus":r[ub("borderFocus",A)],"--n-border-disabled":r[ub("borderDisabled",A)]};const{[ub("height",u)]:R,[ub("fontSize",u)]:E,[ub("padding",u)]:O,[ub("paddingRound",u)]:M,[ub("iconSize",u)]:F,[ub("borderRadius",u)]:I,[ub("iconMargin",u)]:L,waveOpacity:B}=r,D={"--n-width":b&&!v?R:"initial","--n-height":v?"initial":R,"--n-font-size":E,"--n-padding":b||v?"initial":g?M:O,"--n-icon-size":F,"--n-icon-margin":L,"--n-border-radius":v?"initial":b||g?R:I};return Object.assign(Object.assign(Object.assign(Object.assign({"--n-bezier":n,"--n-bezier-ease-out":o,"--n-ripple-duration":i,"--n-opacity-disabled":l,"--n-wave-opacity":B},S),_),z),D)})),f=s?KP("button",ai((()=>{let t="";const{dashed:n,type:o,ghost:r,text:i,color:l,round:s,circle:c,textColor:u,secondary:d,tertiary:p,quaternary:h,strong:f}=e;n&&(t+="a"),r&&(t+="b"),i&&(t+="c"),s&&(t+="d"),c&&(t+="e"),d&&(t+="f"),p&&(t+="g"),h&&(t+="h"),f&&(t+="i"),l&&(t+=`j${zg(l)}`),u&&(t+=`k${zg(u)}`);const{value:v}=a;return t+=`l${v[0]}`,t+=`m${o[0]}`,t})),h,e):void 0;return{selfElRef:t,waveElRef:n,mergedClsPrefix:c,mergedFocusable:l,mergedSize:a,showBorder:r,enterPressed:o,rtlEnabled:p,handleMousedown:n=>{var o;l.value||n.preventDefault(),e.nativeFocusBehavior||(n.preventDefault(),e.disabled||l.value&&(null===(o=t.value)||void 0===o||o.focus({preventScroll:!0})))},handleKeydown:t=>{if("Enter"===t.key){if(!e.keyboard||e.loading)return void t.preventDefault();o.value=!0}},handleBlur:()=>{o.value=!1},handleKeyup:t=>{if("Enter"===t.key){if(!e.keyboard)return;o.value=!1}},handleClick:t=>{var o;if(!e.disabled&&!e.loading){const{onClick:r}=e;r&&dg(r,t),e.text||null===(o=n.value)||void 0===o||o.play()}},customColorCssVars:ai((()=>{const{color:t}=e;if(!t)return null;const n=XE(t);return{"--n-border-color":t,"--n-border-color-hover":n,"--n-border-color-pressed":YE(t),"--n-border-color-focus":n,"--n-border-color-disabled":t}})),cssVars:s?void 0:h,themeClass:null==f?void 0:f.themeClass,onRender:null==f?void 0:f.onRender}},render(){const{mergedClsPrefix:e,tag:t,onRender:n}=this;null==n||n();const o=wg(this.$slots.default,(t=>t&&li("span",{class:`${e}-button__content`},t)));return li(t,{ref:"selfElRef",class:[this.themeClass,`${e}-button`,`${e}-button--${this.type}-type`,`${e}-button--${this.mergedSize}-type`,this.rtlEnabled&&`${e}-button--rtl`,this.disabled&&`${e}-button--disabled`,this.block&&`${e}-button--block`,this.enterPressed&&`${e}-button--pressed`,!this.text&&this.dashed&&`${e}-button--dashed`,this.color&&`${e}-button--color`,this.secondary&&`${e}-button--secondary`,this.loading&&`${e}-button--loading`,this.ghost&&`${e}-button--ghost`],tabindex:this.mergedFocusable?0:-1,type:this.attrType,style:this.cssVars,disabled:this.disabled,onClick:this.handleClick,onBlur:this.handleBlur,onMousedown:this.handleMousedown,onKeyup:this.handleKeyup,onKeydown:this.handleKeydown},"right"===this.iconPlacement&&o,li(yT,{width:!0},{default:()=>wg(this.$slots.icon,(t=>(this.loading||this.renderIcon||t)&&li("span",{class:`${e}-button__icon`,style:{margin:kg(this.$slots.default)?"0":""}},li(bT,null,{default:()=>this.loading?li(RT,{clsPrefix:e,key:"loading",class:`${e}-icon-slot`,strokeWidth:20}):li("div",{key:"icon",class:`${e}-icon-slot`,role:"none"},this.renderIcon?this.renderIcon():t)}))))}),"left"===this.iconPlacement&&o,this.text?null:li(CR,{ref:"waveElRef",clsPrefix:e}),this.showBorder?li("div",{"aria-hidden":!0,class:`${e}-button__border`,style:this.customColorCssVars}):null,this.showBorder?li("div",{"aria-hidden":!0,class:`${e}-button__state-border`,style:this.customColorCssVars}):null)}}),oO=nO,rO=nO,iO={titleFontSize:"22px"},aO={name:"Calendar",common:tz,peers:{Button:eO},self:function(e){const{borderRadius:t,fontSize:n,lineHeight:o,textColor2:r,textColor1:i,textColorDisabled:a,dividerColor:l,fontWeightStrong:s,primaryColor:c,baseColor:u,hoverColor:d,cardColor:p,modalColor:h,popoverColor:f}=e;return Object.assign(Object.assign({},iO),{borderRadius:t,borderColor:eg(p,l),borderColorModal:eg(h,l),borderColorPopover:eg(f,l),textColor:r,titleFontWeight:s,titleTextColor:i,dayTextColor:a,fontSize:n,lineHeight:o,dateColorCurrent:c,dateTextColorCurrent:u,cellColorHover:eg(p,d),cellColorHoverModal:eg(h,d),cellColorHoverPopover:eg(f,d),cellColor:p,cellColorModal:h,cellColorPopover:f,barColor:c})}},lO={name:"ColorPicker",common:tz,peers:{Input:xE,Button:eO},self:function(e){const{fontSize:t,boxShadow2:n,popoverColor:o,textColor2:r,borderRadius:i,borderColor:a,heightSmall:l,heightMedium:s,heightLarge:c,fontSizeSmall:u,fontSizeMedium:d,fontSizeLarge:p,dividerColor:h}=e;return{panelFontSize:t,boxShadow:n,color:o,textColor:r,borderRadius:i,border:`1px solid ${a}`,heightSmall:l,heightMedium:s,heightLarge:c,fontSizeSmall:u,fontSizeMedium:d,fontSizeLarge:p,dividerColor:h}}},sO={paddingSmall:"12px 16px 12px",paddingMedium:"19px 24px 20px",paddingLarge:"23px 32px 24px",paddingHuge:"27px 40px 28px",titleFontSizeSmall:"16px",titleFontSizeMedium:"18px",titleFontSizeLarge:"18px",titleFontSizeHuge:"18px",closeIconSize:"18px",closeSize:"22px"};function cO(e){const{primaryColor:t,borderRadius:n,lineHeight:o,fontSize:r,cardColor:i,textColor2:a,textColor1:l,dividerColor:s,fontWeightStrong:c,closeIconColor:u,closeIconColorHover:d,closeIconColorPressed:p,closeColorHover:h,closeColorPressed:f,modalColor:v,boxShadow1:m,popoverColor:g,actionColor:b}=e;return Object.assign(Object.assign({},sO),{lineHeight:o,color:i,colorModal:v,colorPopover:g,colorTarget:t,colorEmbedded:b,colorEmbeddedModal:b,colorEmbeddedPopover:b,textColor:a,titleTextColor:l,borderColor:s,actionColor:b,titleFontWeight:c,closeColorHover:h,closeColorPressed:f,closeBorderRadius:n,closeIconColor:u,closeIconColorHover:d,closeIconColorPressed:p,fontSizeSmall:r,fontSizeMedium:r,fontSizeLarge:r,fontSizeHuge:r,boxShadow:m,borderRadius:n})}const uO={name:"Card",common:qz,self:cO},dO={name:"Card",common:tz,self(e){const t=cO(e),{cardColor:n,modalColor:o,popoverColor:r}=e;return t.colorEmbedded=n,t.colorEmbeddedModal=o,t.colorEmbeddedPopover=r,t}},pO=eb([nb("card","\n font-size: var(--n-font-size);\n line-height: var(--n-line-height);\n display: flex;\n flex-direction: column;\n width: 100%;\n box-sizing: border-box;\n position: relative;\n border-radius: var(--n-border-radius);\n background-color: var(--n-color);\n color: var(--n-text-color);\n word-break: break-word;\n transition: \n color .3s var(--n-bezier),\n background-color .3s var(--n-bezier),\n box-shadow .3s var(--n-bezier),\n border-color .3s var(--n-bezier);\n ",[sb({background:"var(--n-color-modal)"}),rb("hoverable",[eb("&:hover","box-shadow: var(--n-box-shadow);")]),rb("content-segmented",[eb(">",[ob("content",{paddingTop:"var(--n-padding-bottom)"})])]),rb("content-soft-segmented",[eb(">",[ob("content","\n margin: 0 var(--n-padding-left);\n padding: var(--n-padding-bottom) 0;\n ")])]),rb("footer-segmented",[eb(">",[ob("footer",{paddingTop:"var(--n-padding-bottom)"})])]),rb("footer-soft-segmented",[eb(">",[ob("footer","\n padding: var(--n-padding-bottom) 0;\n margin: 0 var(--n-padding-left);\n ")])]),eb(">",[nb("card-header","\n box-sizing: border-box;\n display: flex;\n align-items: center;\n font-size: var(--n-title-font-size);\n padding:\n var(--n-padding-top)\n var(--n-padding-left)\n var(--n-padding-bottom)\n var(--n-padding-left);\n ",[ob("main","\n font-weight: var(--n-title-font-weight);\n transition: color .3s var(--n-bezier);\n flex: 1;\n min-width: 0;\n color: var(--n-title-text-color);\n "),ob("extra","\n display: flex;\n align-items: center;\n font-size: var(--n-font-size);\n font-weight: 400;\n transition: color .3s var(--n-bezier);\n color: var(--n-text-color);\n "),ob("close","\n margin: 0 0 0 8px;\n transition:\n background-color .3s var(--n-bezier),\n color .3s var(--n-bezier);\n ")]),ob("action","\n box-sizing: border-box;\n transition:\n background-color .3s var(--n-bezier),\n border-color .3s var(--n-bezier);\n background-clip: padding-box;\n background-color: var(--n-action-color);\n "),ob("content","flex: 1; min-width: 0;"),ob("content, footer","\n box-sizing: border-box;\n padding: 0 var(--n-padding-left) var(--n-padding-bottom) var(--n-padding-left);\n font-size: var(--n-font-size);\n ",[eb("&:first-child",{paddingTop:"var(--n-padding-bottom)"})]),ob("action","\n background-color: var(--n-action-color);\n padding: var(--n-padding-bottom) var(--n-padding-left);\n border-bottom-left-radius: var(--n-border-radius);\n border-bottom-right-radius: var(--n-border-radius);\n ")]),nb("card-cover","\n overflow: hidden;\n width: 100%;\n border-radius: var(--n-border-radius) var(--n-border-radius) 0 0;\n ",[eb("img","\n display: block;\n width: 100%;\n ")]),rb("bordered","\n border: 1px solid var(--n-border-color);\n ",[eb("&:target","border-color: var(--n-color-target);")]),rb("action-segmented",[eb(">",[ob("action",[eb("&:not(:first-child)",{borderTop:"1px solid var(--n-border-color)"})])])]),rb("content-segmented, content-soft-segmented",[eb(">",[ob("content",{transition:"border-color 0.3s var(--n-bezier)"},[eb("&:not(:first-child)",{borderTop:"1px solid var(--n-border-color)"})])])]),rb("footer-segmented, footer-soft-segmented",[eb(">",[ob("footer",{transition:"border-color 0.3s var(--n-bezier)"},[eb("&:not(:first-child)",{borderTop:"1px solid var(--n-border-color)"})])])]),rb("embedded","\n background-color: var(--n-color-embedded);\n ")]),ab(nb("card","\n background: var(--n-color-modal);\n ",[rb("embedded","\n background-color: var(--n-color-embedded-modal);\n ")])),lb(nb("card","\n background: var(--n-color-popover);\n ",[rb("embedded","\n background-color: var(--n-color-embedded-popover);\n ")]))]),hO={title:[String,Function],contentClass:String,contentStyle:[Object,String],headerClass:String,headerStyle:[Object,String],headerExtraClass:String,headerExtraStyle:[Object,String],footerClass:String,footerStyle:[Object,String],embedded:Boolean,segmented:{type:[Boolean,Object],default:!1},size:{type:String,default:"medium"},bordered:{type:Boolean,default:!0},closable:Boolean,hoverable:Boolean,role:String,onClose:[Function,Array],tag:{type:String,default:"div"},cover:Function,content:[String,Function],footer:Function,action:Function,headerExtra:Function},fO=pg(hO),vO=zn({name:"Card",props:Object.assign(Object.assign({},I_.props),hO),setup(e){const{inlineThemeDisabled:t,mergedClsPrefixRef:n,mergedRtlRef:o}=B_(e),r=I_("Card","-card",pO,uO,e,n),i=GP("Card",o,n),a=ai((()=>{const{size:t}=e,{self:{color:n,colorModal:o,colorTarget:i,textColor:a,titleTextColor:l,titleFontWeight:s,borderColor:c,actionColor:u,borderRadius:d,lineHeight:p,closeIconColor:h,closeIconColorHover:f,closeIconColorPressed:v,closeColorHover:m,closeColorPressed:g,closeBorderRadius:b,closeIconSize:y,closeSize:x,boxShadow:C,colorPopover:w,colorEmbedded:k,colorEmbeddedModal:S,colorEmbeddedPopover:_,[ub("padding",t)]:P,[ub("fontSize",t)]:T,[ub("titleFontSize",t)]:A},common:{cubicBezierEaseInOut:z}}=r.value,{top:R,left:E,bottom:O}=Bm(P);return{"--n-bezier":z,"--n-border-radius":d,"--n-color":n,"--n-color-modal":o,"--n-color-popover":w,"--n-color-embedded":k,"--n-color-embedded-modal":S,"--n-color-embedded-popover":_,"--n-color-target":i,"--n-text-color":a,"--n-line-height":p,"--n-action-color":u,"--n-title-text-color":l,"--n-title-font-weight":s,"--n-close-icon-color":h,"--n-close-icon-color-hover":f,"--n-close-icon-color-pressed":v,"--n-close-color-hover":m,"--n-close-color-pressed":g,"--n-border-color":c,"--n-box-shadow":C,"--n-padding-top":R,"--n-padding-bottom":O,"--n-padding-left":E,"--n-font-size":T,"--n-title-font-size":A,"--n-close-size":x,"--n-close-icon-size":y,"--n-close-border-radius":b}})),l=t?KP("card",ai((()=>e.size[0])),a,e):void 0;return{rtlEnabled:i,mergedClsPrefix:n,mergedTheme:r,handleCloseClick:()=>{const{onClose:t}=e;t&&dg(t)},cssVars:t?void 0:a,themeClass:null==l?void 0:l.themeClass,onRender:null==l?void 0:l.onRender}},render(){const{segmented:e,bordered:t,hoverable:n,mergedClsPrefix:o,rtlEnabled:r,onRender:i,embedded:a,tag:l,$slots:s}=this;return null==i||i(),li(l,{class:[`${o}-card`,this.themeClass,a&&`${o}-card--embedded`,{[`${o}-card--rtl`]:r,[`${o}-card--content${"boolean"!=typeof e&&"soft"===e.content?"-soft":""}-segmented`]:!0===e||!1!==e&&e.content,[`${o}-card--footer${"boolean"!=typeof e&&"soft"===e.footer?"-soft":""}-segmented`]:!0===e||!1!==e&&e.footer,[`${o}-card--action-segmented`]:!0===e||!1!==e&&e.action,[`${o}-card--bordered`]:t,[`${o}-card--hoverable`]:n}],style:this.cssVars,role:this.role},wg(s.cover,(e=>{const t=this.cover?yg([this.cover()]):e;return t&&li("div",{class:`${o}-card-cover`,role:"none"},t)})),wg(s.header,(e=>{const{title:t}=this,n=t?yg("function"==typeof t?[t()]:[t]):e;return n||this.closable?li("div",{class:[`${o}-card-header`,this.headerClass],style:this.headerStyle,role:"heading"},li("div",{class:`${o}-card-header__main`,role:"heading"},n),wg(s["header-extra"],(e=>{const t=this.headerExtra?yg([this.headerExtra()]):e;return t&&li("div",{class:[`${o}-card-header__extra`,this.headerExtraClass],style:this.headerExtraStyle},t)})),this.closable&&li(kT,{clsPrefix:o,class:`${o}-card-header__close`,onClick:this.handleCloseClick,absolute:!0})):null})),wg(s.default,(e=>{const{content:t}=this,n=t?yg("function"==typeof t?[t()]:[t]):e;return n&&li("div",{class:[`${o}-card__content`,this.contentClass],style:this.contentStyle,role:"none"},n)})),wg(s.footer,(e=>{const t=this.footer?yg([this.footer()]):e;return t&&li("div",{class:[`${o}-card__footer`,this.footerClass],style:this.footerStyle,role:"none"},t)})),wg(s.action,(e=>{const t=this.action?yg([this.action()]):e;return t&&li("div",{class:`${o}-card__action`,role:"none"},t)})))}});function mO(){return{dotSize:"8px",dotColor:"rgba(255, 255, 255, .3)",dotColorActive:"rgba(255, 255, 255, 1)",dotColorFocus:"rgba(255, 255, 255, .5)",dotLineWidth:"16px",dotLineWidthActive:"24px",arrowColor:"#eee"}}const gO={name:"Carousel",common:qz,self:mO},bO={name:"Carousel",common:tz,self:mO};function yO(e,t,n){return Br(e,{key:`carousel-item-duplicate-${t}-${n}`})}function xO(e,t,n){return 1===t?0:n?0===e?t-3:e===t-1?0:e-1:e}function CO(e,t){return t?e+1:e}function wO(e){return window.TouchEvent&&e instanceof window.TouchEvent}function kO(e,t){let{offsetWidth:n,offsetHeight:o}=e;if(t){const t=getComputedStyle(e);n=n-Number.parseFloat(t.getPropertyValue("padding-left"))-Number.parseFloat(t.getPropertyValue("padding-right")),o=o-Number.parseFloat(t.getPropertyValue("padding-top"))-Number.parseFloat(t.getPropertyValue("padding-bottom"))}return{width:n,height:o}}function SO(e,t,n){return en?n:e}const _O="n-carousel-methods";function PO(e="unknown",t="component"){const n=Po(_O);return n||fg(e,`\`${t}\` must be placed inside \`n-carousel\`.`),n}const TO=zn({name:"CarouselDots",props:{total:{type:Number,default:0},currentIndex:{type:Number,default:0},dotType:{type:String,default:"dot"},trigger:{type:String,default:"click"},keyboard:Boolean},setup(e){const{mergedClsPrefixRef:t}=B_(e),n=Et([]),o=PO();function r(e){var t;null===(t=n.value[e])||void 0===t||t.focus()}return Nn((()=>n.value.length=0)),{mergedClsPrefix:t,dotEls:n,handleKeydown:function(t,n){switch(t.key){case"Enter":case" ":return t.preventDefault(),void o.to(n)}e.keyboard&&function(e){var t;if(e.shiftKey||e.altKey||e.ctrlKey||e.metaKey)return;const n=null===(t=document.activeElement)||void 0===t?void 0:t.nodeName.toLowerCase();if("input"===n||"textarea"===n)return;const{code:i}=e,a="PageUp"===i||"ArrowUp"===i,l="PageDown"===i||"ArrowDown"===i,s="PageUp"===i||"ArrowRight"===i,c="PageDown"===i||"ArrowLeft"===i,u=o.isVertical(),d=u?a:s,p=u?l:c;(d||p)&&(e.preventDefault(),d&&!o.isNextDisabled()?(o.next(),r(o.currentIndexRef.value)):p&&!o.isPrevDisabled()&&(o.prev(),r(o.currentIndexRef.value)))}(t)},handleMouseenter:function(t){"hover"===e.trigger&&o.to(t)},handleClick:function(t){"click"===e.trigger&&o.to(t)}}},render(){const{mergedClsPrefix:e,dotEls:t}=this;return li("div",{class:[`${e}-carousel__dots`,`${e}-carousel__dots--${this.dotType}`],role:"tablist"},function(e,t){const n=[];if(!t){for(let t=0;t{const o=n===this.currentIndex;return li("div",{"aria-selected":o,ref:e=>t.push(e),role:"button",tabindex:"0",class:[`${e}-carousel__dot`,o&&`${e}-carousel__dot--active`],key:n,onClick:()=>{this.handleClick(n)},onMouseenter:()=>{this.handleMouseenter(n)},onKeydown:e=>{this.handleKeydown(e,n)}})})))}}),AO=li("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16"},li("g",{fill:"none"},li("path",{d:"M10.26 3.2a.75.75 0 0 1 .04 1.06L6.773 8l3.527 3.74a.75.75 0 1 1-1.1 1.02l-4-4.25a.75.75 0 0 1 0-1.02l4-4.25a.75.75 0 0 1 1.06-.04z",fill:"currentColor"}))),zO=li("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16"},li("g",{fill:"none"},li("path",{d:"M5.74 3.2a.75.75 0 0 0-.04 1.06L9.227 8L5.7 11.74a.75.75 0 1 0 1.1 1.02l4-4.25a.75.75 0 0 0 0-1.02l-4-4.25a.75.75 0 0 0-1.06-.04z",fill:"currentColor"}))),RO=zn({name:"CarouselArrow",setup(e){const{mergedClsPrefixRef:t}=B_(e),{isVertical:n,isPrevDisabled:o,isNextDisabled:r,prev:i,next:a}=PO();return{mergedClsPrefix:t,isVertical:n,isPrevDisabled:o,isNextDisabled:r,prev:i,next:a}},render(){const{mergedClsPrefix:e}=this;return li("div",{class:`${e}-carousel__arrow-group`},li("div",{class:[`${e}-carousel__arrow`,this.isPrevDisabled()&&`${e}-carousel__arrow--disabled`],role:"button",onClick:this.prev},AO),li("div",{class:[`${e}-carousel__arrow`,this.isNextDisabled()&&`${e}-carousel__arrow--disabled`],role:"button",onClick:this.next},zO))}}),EO="CarouselItem",OO=zn({name:EO,setup(e){const{mergedClsPrefixRef:t}=B_(e),n=PO(hS(EO),`n-${hS(EO)}`),o=Et(),r=ai((()=>{const{value:e}=o;return e?n.getSlideIndex(e):-1})),i=ai((()=>n.isPrev(r.value))),a=ai((()=>n.isNext(r.value))),l=ai((()=>n.isActive(r.value))),s=ai((()=>n.getSlideStyle(r.value)));return $n((()=>{n.addSlide(o.value)})),Hn((()=>{n.removeSlide(o.value)})),{mergedClsPrefix:t,selfElRef:o,isPrev:i,isNext:a,isActive:l,index:r,style:s,handleClick:function(e){const{value:t}=r;void 0!==t&&(null==n||n.onCarouselItemClick(t,e))}}},render(){var e;const{$slots:t,mergedClsPrefix:n,isPrev:o,isNext:r,isActive:i,index:a,style:l}=this;return li("div",{ref:"selfElRef",class:[`${n}-carousel__slide`,{[`${n}-carousel__slide--current`]:i,[`${n}-carousel__slide--prev`]:o,[`${n}-carousel__slide--next`]:r}],role:"option",tabindex:"-1","data-index":a,"aria-hidden":!i,style:l,onClickCapture:this.handleClick},null===(e=t.default)||void 0===e?void 0:e.call(t,{isPrev:o,isNext:r,isActive:i,index:a}))}}),MO=nb("carousel","\n position: relative;\n width: 100%;\n height: 100%;\n touch-action: pan-y;\n overflow: hidden;\n",[ob("slides","\n display: flex;\n width: 100%;\n height: 100%;\n transition-timing-function: var(--n-bezier);\n transition-property: transform;\n ",[ob("slide","\n flex-shrink: 0;\n position: relative;\n width: 100%;\n height: 100%;\n outline: none;\n overflow: hidden;\n ",[eb("> img","\n display: block;\n ")])]),ob("dots","\n position: absolute;\n display: flex;\n flex-wrap: nowrap;\n ",[rb("dot",[ob("dot","\n height: var(--n-dot-size);\n width: var(--n-dot-size);\n background-color: var(--n-dot-color);\n border-radius: 50%;\n cursor: pointer;\n transition:\n box-shadow .3s var(--n-bezier),\n background-color .3s var(--n-bezier);\n outline: none;\n ",[eb("&:focus","\n background-color: var(--n-dot-color-focus);\n "),rb("active","\n background-color: var(--n-dot-color-active);\n ")])]),rb("line",[ob("dot","\n border-radius: 9999px;\n width: var(--n-dot-line-width);\n height: 4px;\n background-color: var(--n-dot-color);\n cursor: pointer;\n transition:\n width .3s var(--n-bezier),\n box-shadow .3s var(--n-bezier),\n background-color .3s var(--n-bezier);\n outline: none;\n ",[eb("&:focus","\n background-color: var(--n-dot-color-focus);\n "),rb("active","\n width: var(--n-dot-line-width-active);\n background-color: var(--n-dot-color-active);\n ")])])]),ob("arrow","\n transition: background-color .3s var(--n-bezier);\n cursor: pointer;\n height: 28px;\n width: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: rgba(255, 255, 255, .2);\n color: var(--n-arrow-color);\n border-radius: 8px;\n user-select: none;\n -webkit-user-select: none;\n font-size: 18px;\n ",[eb("svg","\n height: 1em;\n width: 1em;\n "),eb("&:hover","\n background-color: rgba(255, 255, 255, .3);\n ")]),rb("vertical","\n touch-action: pan-x;\n ",[ob("slides","\n flex-direction: column;\n "),rb("fade",[ob("slide","\n top: 50%;\n left: unset;\n transform: translateY(-50%);\n ")]),rb("card",[ob("slide","\n top: 50%;\n left: unset;\n transform: translateY(-50%) translateZ(-400px);\n ",[rb("current","\n transform: translateY(-50%) translateZ(0);\n "),rb("prev","\n transform: translateY(-100%) translateZ(-200px);\n "),rb("next","\n transform: translateY(0%) translateZ(-200px);\n ")])])]),rb("usercontrol",[ob("slides",[eb(">",[eb("div","\n position: absolute;\n top: 50%;\n left: 50%;\n width: 100%;\n height: 100%;\n transform: translate(-50%, -50%);\n ")])])]),rb("left",[ob("dots","\n transform: translateY(-50%);\n top: 50%;\n left: 12px;\n flex-direction: column;\n ",[rb("line",[ob("dot","\n width: 4px;\n height: var(--n-dot-line-width);\n margin: 4px 0;\n transition:\n height .3s var(--n-bezier),\n box-shadow .3s var(--n-bezier),\n background-color .3s var(--n-bezier);\n outline: none;\n ",[rb("active","\n height: var(--n-dot-line-width-active);\n ")])])]),ob("dot","\n margin: 4px 0;\n ")]),ob("arrow-group","\n position: absolute;\n display: flex;\n flex-wrap: nowrap;\n "),rb("vertical",[ob("arrow","\n transform: rotate(90deg);\n ")]),rb("show-arrow",[rb("bottom",[ob("dots","\n transform: translateX(0);\n bottom: 18px;\n left: 18px;\n ")]),rb("top",[ob("dots","\n transform: translateX(0);\n top: 18px;\n left: 18px;\n ")]),rb("left",[ob("dots","\n transform: translateX(0);\n top: 18px;\n left: 18px;\n ")]),rb("right",[ob("dots","\n transform: translateX(0);\n top: 18px;\n right: 18px;\n ")])]),rb("left",[ob("arrow-group","\n bottom: 12px;\n left: 12px;\n flex-direction: column;\n ",[eb("> *:first-child","\n margin-bottom: 12px;\n ")])]),rb("right",[ob("dots","\n transform: translateY(-50%);\n top: 50%;\n right: 12px;\n flex-direction: column;\n ",[rb("line",[ob("dot","\n width: 4px;\n height: var(--n-dot-line-width);\n margin: 4px 0;\n transition:\n height .3s var(--n-bezier),\n box-shadow .3s var(--n-bezier),\n background-color .3s var(--n-bezier);\n outline: none;\n ",[rb("active","\n height: var(--n-dot-line-width-active);\n ")])])]),ob("dot","\n margin: 4px 0;\n "),ob("arrow-group","\n bottom: 12px;\n right: 12px;\n flex-direction: column;\n ",[eb("> *:first-child","\n margin-bottom: 12px;\n ")])]),rb("top",[ob("dots","\n transform: translateX(-50%);\n top: 12px;\n left: 50%;\n ",[rb("line",[ob("dot","\n margin: 0 4px;\n ")])]),ob("dot","\n margin: 0 4px;\n "),ob("arrow-group","\n top: 12px;\n right: 12px;\n ",[eb("> *:first-child","\n margin-right: 12px;\n ")])]),rb("bottom",[ob("dots","\n transform: translateX(-50%);\n bottom: 12px;\n left: 50%;\n ",[rb("line",[ob("dot","\n margin: 0 4px;\n ")])]),ob("dot","\n margin: 0 4px;\n "),ob("arrow-group","\n bottom: 12px;\n right: 12px;\n ",[eb("> *:first-child","\n margin-right: 12px;\n ")])]),rb("fade",[ob("slide","\n position: absolute;\n opacity: 0;\n transition-property: opacity;\n pointer-events: none;\n ",[rb("current","\n opacity: 1;\n pointer-events: auto;\n ")])]),rb("card",[ob("slides","\n perspective: 1000px;\n "),ob("slide","\n position: absolute;\n left: 50%;\n opacity: 0;\n transform: translateX(-50%) translateZ(-400px);\n transition-property: opacity, transform;\n ",[rb("current","\n opacity: 1;\n transform: translateX(-50%) translateZ(0);\n z-index: 1;\n "),rb("prev","\n opacity: 0.4;\n transform: translateX(-100%) translateZ(-200px);\n "),rb("next","\n opacity: 0.4;\n transform: translateX(0%) translateZ(-200px);\n ")])])]),FO=["transitionDuration","transitionTimingFunction"],IO=Object.assign(Object.assign({},I_.props),{defaultIndex:{type:Number,default:0},currentIndex:Number,showArrow:Boolean,dotType:{type:String,default:"dot"},dotPlacement:{type:String,default:"bottom"},slidesPerView:{type:[Number,String],default:1},spaceBetween:{type:Number,default:0},centeredSlides:Boolean,direction:{type:String,default:"horizontal"},autoplay:Boolean,interval:{type:Number,default:5e3},loop:{type:Boolean,default:!0},effect:{type:String,default:"slide"},showDots:{type:Boolean,default:!0},trigger:{type:String,default:"click"},transitionStyle:{type:Object,default:()=>({transitionDuration:"300ms"})},transitionProps:Object,draggable:Boolean,prevSlideStyle:[Object,String],nextSlideStyle:[Object,String],touchable:{type:Boolean,default:!0},mousewheel:Boolean,keyboard:Boolean,"onUpdate:currentIndex":Function,onUpdateCurrentIndex:Function});let LO=!1;const BO=zn({name:"Carousel",props:IO,setup(e){const{mergedClsPrefixRef:t,inlineThemeDisabled:n}=B_(e),o=Et(null),r=Et(null),i=Et([]),a={value:[]},l=ai((()=>"vertical"===e.direction)),s=ai((()=>l.value?"height":"width")),c=ai((()=>l.value?"bottom":"right")),u=ai((()=>"slide"===e.effect)),d=ai((()=>e.loop&&1===e.slidesPerView&&u.value)),p=ai((()=>"custom"===e.effect)),h=ai((()=>!u.value||e.centeredSlides?1:e.slidesPerView)),f=ai((()=>p.value?1:e.slidesPerView)),v=ai((()=>"auto"===h.value||"auto"===e.slidesPerView&&e.centeredSlides)),m=Et({width:0,height:0}),g=ai((()=>{const{value:t}=i;if(!t.length)return[];const{value:n}=v;if(n)return t.map((e=>kO(e)));const{value:o}=f,{value:r}=m,{value:a}=s;let l=r[a];if("auto"!==o){const{spaceBetween:t}=e;l=(l-(o-1)*t)*(1/Math.max(1,o))}const c=Object.assign(Object.assign({},r),{[a]:l});return t.map((()=>c))})),b=ai((()=>{const{value:t}=g;if(!t.length)return[];const{centeredSlides:n,spaceBetween:o}=e,{value:r}=s,{[r]:i}=m.value;let a=0;return t.map((({[r]:e})=>{let t=a;return n&&(t+=(e-i)/2),a+=e+o,t}))})),y=Et(!1),x=ai((()=>{const{transitionStyle:t}=e;return t?sg(t,FO):{}})),C=ai((()=>p.value?0:function(e){if(void 0===e)return 0;if("number"==typeof e)return e;const t=e.match(/^((\d+)?\.?\d+?)(ms|s)?$/);if(t){const[,e,,n="ms"]=t;return Number(e)*("ms"===n?1:1e3)}return 0}(x.value.transitionDuration))),w=ai((()=>{const{value:t}=i;if(!t.length)return[];const n=!(v.value||1===f.value),o=e=>{if(n){const{value:t}=s;return{[t]:`${g.value[e][t]}px`}}};if(p.value)return t.map(((e,t)=>o(t)));const{effect:r,spaceBetween:a}=e,{value:l}=c;return t.reduce(((e,t,n)=>{const i=Object.assign(Object.assign({},o(n)),{[`margin-${l}`]:`${a}px`});return e.push(i),!y.value||"fade"!==r&&"card"!==r||Object.assign(i,x.value),e}),[])})),k=ai((()=>{const{value:e}=h,{length:t}=i.value;if("auto"!==e)return Math.max(t-e,0)+1;{const{value:e}=g,{length:n}=e;if(!n)return t;const{value:o}=b,{value:r}=s,i=m.value[r];let a=e[e.length-1][r],l=n;for(;l>1&&a{return e=k.value,d.value&&e>3?e-2:e;var e})),_=Et(xO(CO(e.defaultIndex,d.value),k.value,d.value)),P=Db(jt(e,"currentIndex"),_),T=ai((()=>CO(P.value,d.value)));function A(t){var n,o;const r=xO(t=SO(t,0,k.value-1),k.value,d.value),{value:i}=P;r!==P.value&&(_.value=r,null===(n=e["onUpdate:currentIndex"])||void 0===n||n.call(e,r,i),null===(o=e.onUpdateCurrentIndex)||void 0===o||o.call(e,r,i))}function z(t=T.value){return n=t,o=k.value,r=e.loop,n<0?null:0===n?r?o-1:null:n-1;var n,o,r}function R(t=T.value){return n=t,o=k.value,r=e.loop,n>o-1?null:n===o-1?r?0:null:n+1;var n,o,r}function E(e){return T.value===q(e)}function O(){return null===z()}function M(){return null===R()}function F(e){const t=SO(CO(e,d.value),0,k.value);e===P.value&&t===T.value||A(t)}function I(){const e=z();null!==e&&A(e)}function L(){const e=R();null!==e&&A(e)}let B=!1,D=0;const $=Et({});function N(e,t=0){$.value=Object.assign({},x.value,{transform:l.value?`translateY(${-e}px)`:`translateX(${-e}px)`,transitionDuration:`${t}ms`})}function j(e=0){u.value?H(T.value,e):0!==D&&(!B&&e>0&&(B=!0),N(D=0,e))}function H(e,t){const n=W(e);n!==D&&t>0&&(B=!0),D=W(T.value),N(n,t)}function W(e){let t;return t=e>=k.value-1?U():b.value[e]||0,t}function U(){if("auto"===h.value){const{value:e}=s,{[e]:t}=m.value,{value:n}=b,o=n[n.length-1];let r;if(void 0===o)r=t;else{const{value:t}=g;r=o+t[t.length-1][e]}return r-t}{const{value:e}=b;return e[k.value-1]||0}}const V={currentIndexRef:P,to:F,prev:function(){B&&d.value||I()},next:function(){B&&d.value||L()},isVertical:()=>l.value,isHorizontal:()=>!l.value,isPrev:function(e){const t=q(e);return null!==t&&z()===t},isNext:function(e){const t=q(e);return null!==t&&R()===t},isActive:E,isPrevDisabled:O,isNextDisabled:M,getSlideIndex:q,getSlideStyle:function(t){const n=q(t);if(-1!==n){const t=[w.value[n]],o=V.isPrev(n),r=V.isNext(n);return o&&t.push(e.prevSlideStyle||""),r&&t.push(e.nextSlideStyle||""),G(t)}},addSlide:function(e){e&&i.value.push(e)},removeSlide:function(e){if(!e)return;const t=q(e);-1!==t&&i.value.splice(t,1)},onCarouselItemClick:function(t,n){let o=!B&&!Z&&!J;"card"===e.effect&&o&&!E(t)&&(F(t),o=!1),o||(n.preventDefault(),n.stopPropagation())}};function q(e){return"number"==typeof e?e:e?i.value.indexOf(e):-1}_o(_O,V);let K=0,X=0,Y=0,Q=0,Z=!1,J=!1,ee=null;function te(){ee&&(clearInterval(ee),ee=null)}function ne(){te(),!e.autoplay||S.value<2||(ee=window.setInterval(L,e.interval))}function oe(t){var n;if(LO)return;if(!(null===(n=r.value)||void 0===n?void 0:n.contains(Fm(t))))return;LO=!0,Z=!0,J=!1,Q=Date.now(),te(),"touchstart"===t.type||t.target.isContentEditable||t.preventDefault();const o=wO(t)?t.touches[0]:t;l.value?X=o.clientY:K=o.clientX,e.touchable&&(Pb("touchmove",document,re),Pb("touchend",document,ie),Pb("touchcancel",document,ie)),e.draggable&&(Pb("mousemove",document,re),Pb("mouseup",document,ie))}function re(e){const{value:t}=l,{value:n}=s,o=wO(e)?e.touches[0]:e,r=t?o.clientY-X:o.clientX-K,i=m.value[n];Y=SO(r,-i,i),e.cancelable&&e.preventDefault(),u.value&&N(D-Y,0)}function ie(){const{value:e}=T;let t=e;if(!B&&0!==Y&&u.value){const e=D-Y,n=[...b.value.slice(0,k.value-1),U()];let o=null;for(let r=0;rr/2||Y/n>.4?t=z(e):(Y<-r/2||Y/n<-.4)&&(t=R(e))}null!==t&&t!==e?(J=!0,A(t),tn((()=>{d.value&&_.value===P.value||j(C.value)}))):j(C.value),ae(),ne()}function ae(){Z&&(LO=!1),Z=!1,K=0,X=0,Y=0,Q=0,Tb("touchmove",document,re),Tb("touchend",document,ie),Tb("touchcancel",document,ie),Tb("mousemove",document,re),Tb("mouseup",document,ie)}function le(e){if(e.preventDefault(),B)return;let{deltaX:t,deltaY:n}=e;e.shiftKey&&!t&&(t=n);const o=(t||n)>0?1:-1;let r=0,i=0;l.value?i=o:r=o,(i*n>=10||r*t>=10)&&(1!==o||M()?-1!==o||O()||I():L())}$n((()=>{ir(ne),requestAnimationFrame((()=>y.value=!0))})),Hn((()=>{ae(),te()})),jn((()=>{const{value:e}=i,{value:t}=a,n=new Map,o=e=>n.has(e)?n.get(e):-1;let r=!1;for(let i=0;it.el===e[i]));o!==i&&(r=!0),n.set(e[i],o)}r&&e.sort(((e,t)=>o(e)-o(t)))})),lr(T,((e,t)=>{if(e!==t)if(ne(),u.value){if(d.value){const{value:n}=k;S.value>2&&e===n-2&&1===t?e=0:1===e&&t===n-2&&(e=n-1)}H(e,C.value)}else j()}),{immediate:!0}),lr([d,h],(()=>{tn((()=>{A(T.value)}))})),lr(b,(()=>{u.value&&j()}),{deep:!0}),lr(u,(e=>{e?j():(B=!1,N(D=0))}));const se=ai((()=>({onTouchstartPassive:e.touchable?oe:void 0,onMousedown:e.draggable?oe:void 0,onWheel:e.mousewheel?le:void 0}))),ce=ai((()=>Object.assign(Object.assign({},sg(V,["to","prev","next","isPrevDisabled","isNextDisabled"])),{total:S.value,currentIndex:P.value}))),ue=ai((()=>({total:S.value,currentIndex:P.value,to:V.to}))),de={getCurrentIndex:()=>P.value,to:F,prev:I,next:L},pe=I_("Carousel","-carousel",MO,gO,e,t),he=ai((()=>{const{common:{cubicBezierEaseInOut:e},self:{dotSize:t,dotColor:n,dotColorActive:o,dotColorFocus:r,dotLineWidth:i,dotLineWidthActive:a,arrowColor:l}}=pe.value;return{"--n-bezier":e,"--n-dot-color":n,"--n-dot-color-focus":r,"--n-dot-color-active":o,"--n-dot-size":t,"--n-dot-line-width":i,"--n-dot-line-width-active":a,"--n-arrow-color":l}})),fe=n?KP("carousel",void 0,he,e):void 0;return Object.assign(Object.assign({mergedClsPrefix:t,selfElRef:o,slidesElRef:r,slideVNodes:a,duplicatedable:d,userWantsControl:p,autoSlideSize:v,realIndex:T,slideStyles:w,translateStyle:$,slidesControlListeners:se,handleTransitionEnd:function(){if(u.value&&B){const{value:e}=T;H(e,0)}else ne();u.value&&($.value.transitionDuration="0ms"),B=!1},handleResize:function(){m.value=kO(o.value,!0),ne()},handleSlideResize:function(){var e,t;v.value&&(null===(t=(e=g.effect).scheduler)||void 0===t||t.call(e),g.effect.run())},handleMouseenter:function(){e.autoplay&&te()},handleMouseleave:function(){e.autoplay&&ne()},isActive:function(e){return P.value===e},arrowSlotProps:ce,dotSlotProps:ue},de),{cssVars:n?void 0:he,themeClass:null==fe?void 0:fe.themeClass,onRender:null==fe?void 0:fe.onRender})},render(){var e;const{mergedClsPrefix:t,showArrow:n,userWantsControl:o,slideStyles:r,dotType:i,dotPlacement:a,slidesControlListeners:l,transitionProps:s={},arrowSlotProps:c,dotSlotProps:u,$slots:{default:d,dots:p,arrow:h}}=this,f=d&&ug(d())||[];let v=f.reduce(((e,t)=>(function(e){var t;return(null===(t=e.type)||void 0===t?void 0:t.name)===EO}(t)&&e.push(t),e)),[]);return v.length||(v=f.map((e=>li(OO,null,{default:()=>Br(e)})))),this.duplicatedable&&(v=function(e){const{length:t}=e;return t>1?(e.push(yO(e[0],0,"append")),e.unshift(yO(e[t-1],t-1,"prepend")),e):e}(v)),this.slideVNodes.value=v,this.autoSlideSize&&(v=v.map((e=>li(kx,{onResize:this.handleSlideResize},{default:()=>e})))),null===(e=this.onRender)||void 0===e||e.call(this),li("div",Object.assign({ref:"selfElRef",class:[this.themeClass,`${t}-carousel`,"vertical"===this.direction&&`${t}-carousel--vertical`,this.showArrow&&`${t}-carousel--show-arrow`,`${t}-carousel--${a}`,`${t}-carousel--${this.direction}`,`${t}-carousel--${this.effect}`,o&&`${t}-carousel--usercontrol`],style:this.cssVars},l,{onMouseenter:this.handleMouseenter,onMouseleave:this.handleMouseleave}),li(kx,{onResize:this.handleResize},{default:()=>li("div",{ref:"slidesElRef",class:`${t}-carousel__slides`,role:"listbox",style:this.translateStyle,onTransitionend:this.handleTransitionEnd},o?v.map(((e,t)=>li("div",{style:r[t],key:t},fn(li(vi,Object.assign({},s),{default:()=>e}),[[Mi,this.isActive(t)]])))):v)}),this.showDots&&u.total>1&&Cg(p,u,(()=>[li(TO,{key:i+a,total:u.total,currentIndex:u.currentIndex,dotType:i,trigger:this.trigger,keyboard:this.keyboard})])),n&&Cg(h,c,(()=>[li(RO,null)])))}}),DO={sizeSmall:"14px",sizeMedium:"16px",sizeLarge:"18px",labelPadding:"0 8px",labelFontWeight:"400"};function $O(e){const{baseColor:t,inputColorDisabled:n,cardColor:o,modalColor:r,popoverColor:i,textColorDisabled:a,borderColor:l,primaryColor:s,textColor2:c,fontSizeSmall:u,fontSizeMedium:d,fontSizeLarge:p,borderRadiusSmall:h,lineHeight:f}=e;return Object.assign(Object.assign({},DO),{labelLineHeight:f,fontSizeSmall:u,fontSizeMedium:d,fontSizeLarge:p,borderRadius:h,color:t,colorChecked:s,colorDisabled:n,colorDisabledChecked:n,colorTableHeader:o,colorTableHeaderModal:r,colorTableHeaderPopover:i,checkMarkColor:t,checkMarkColorDisabled:a,checkMarkColorDisabledChecked:a,border:`1px solid ${l}`,borderDisabled:`1px solid ${l}`,borderDisabledChecked:`1px solid ${l}`,borderChecked:`1px solid ${s}`,borderFocus:`1px solid ${s}`,boxShadowFocus:`0 0 0 2px ${tg(s,{alpha:.3})}`,textColor:c,textColorDisabled:a})}const NO={name:"Checkbox",common:qz,self:$O},jO={name:"Checkbox",common:tz,self(e){const{cardColor:t}=e,n=$O(e);return n.color="#0000",n.checkMarkColor=t,n}},HO={name:"Cascader",common:tz,peers:{InternalSelectMenu:pR,InternalSelection:ZR,Scrollbar:nR,Checkbox:jO,Empty:Xz},self:function(e){const{borderRadius:t,boxShadow2:n,popoverColor:o,textColor2:r,textColor3:i,primaryColor:a,textColorDisabled:l,dividerColor:s,hoverColor:c,fontSizeMedium:u,heightMedium:d}=e;return{menuBorderRadius:t,menuColor:o,menuBoxShadow:n,menuDividerColor:s,menuHeight:"calc(var(--n-option-height) * 6.6)",optionArrowColor:i,optionHeight:d,optionFontSize:u,optionColorHover:c,optionTextColor:r,optionTextColorActive:a,optionTextColorDisabled:l,optionCheckMarkColor:a,loadingColor:a,columnWidth:"180px"}}},WO=li("svg",{viewBox:"0 0 64 64",class:"check-icon"},li("path",{d:"M50.42,16.76L22.34,39.45l-8.1-11.46c-1.12-1.58-3.3-1.96-4.88-0.84c-1.58,1.12-1.95,3.3-0.84,4.88l10.26,14.51 c0.56,0.79,1.42,1.31,2.38,1.45c0.16,0.02,0.32,0.03,0.48,0.03c0.8,0,1.57-0.27,2.2-0.78l30.99-25.03c1.5-1.21,1.74-3.42,0.52-4.92 C54.13,15.78,51.93,15.55,50.42,16.76z"})),UO=li("svg",{viewBox:"0 0 100 100",class:"line-icon"},li("path",{d:"M80.2,55.5H21.4c-2.8,0-5.1-2.5-5.1-5.5l0,0c0-3,2.3-5.5,5.1-5.5h58.7c2.8,0,5.1,2.5,5.1,5.5l0,0C85.2,53.1,82.9,55.5,80.2,55.5z"})),VO="n-checkbox-group",qO=zn({name:"CheckboxGroup",props:{min:Number,max:Number,size:String,value:Array,defaultValue:{type:Array,default:null},disabled:{type:Boolean,default:void 0},"onUpdate:value":[Function,Array],onUpdateValue:[Function,Array],onChange:[Function,Array]},setup(e){const{mergedClsPrefixRef:t}=B_(e),n=eC(e),{mergedSizeRef:o,mergedDisabledRef:r}=n,i=Et(e.defaultValue),a=Db(ai((()=>e.value)),i),l=ai((()=>{var e;return(null===(e=a.value)||void 0===e?void 0:e.length)||0})),s=ai((()=>Array.isArray(a.value)?new Set(a.value):new Set));return _o(VO,{checkedCountRef:l,maxRef:jt(e,"max"),minRef:jt(e,"min"),valueSetRef:s,disabledRef:r,mergedSizeRef:o,toggleCheckbox:function(t,o){const{nTriggerFormInput:r,nTriggerFormChange:l}=n,{onChange:s,"onUpdate:value":c,onUpdateValue:u}=e;if(Array.isArray(a.value)){const e=Array.from(a.value),n=e.findIndex((e=>e===o));t?~n||(e.push(o),u&&dg(u,e,{actionType:"check",value:o}),c&&dg(c,e,{actionType:"check",value:o}),r(),l(),i.value=e,s&&dg(s,e)):~n&&(e.splice(n,1),u&&dg(u,e,{actionType:"uncheck",value:o}),c&&dg(c,e,{actionType:"uncheck",value:o}),s&&dg(s,e),i.value=e,r(),l())}else t?(u&&dg(u,[o],{actionType:"check",value:o}),c&&dg(c,[o],{actionType:"check",value:o}),s&&dg(s,[o]),i.value=[o],r(),l()):(u&&dg(u,[],{actionType:"uncheck",value:o}),c&&dg(c,[],{actionType:"uncheck",value:o}),s&&dg(s,[]),i.value=[],r(),l())}}),{mergedClsPrefix:t}},render(){return li("div",{class:`${this.mergedClsPrefix}-checkbox-group`,role:"group"},this.$slots)}}),KO=eb([nb("checkbox","\n font-size: var(--n-font-size);\n outline: none;\n cursor: pointer;\n display: inline-flex;\n flex-wrap: nowrap;\n align-items: flex-start;\n word-break: break-word;\n line-height: var(--n-size);\n --n-merged-color-table: var(--n-color-table);\n ",[rb("show-label","line-height: var(--n-label-line-height);"),eb("&:hover",[nb("checkbox-box",[ob("border","border: var(--n-border-checked);")])]),eb("&:focus:not(:active)",[nb("checkbox-box",[ob("border","\n border: var(--n-border-focus);\n box-shadow: var(--n-box-shadow-focus);\n ")])]),rb("inside-table",[nb("checkbox-box","\n background-color: var(--n-merged-color-table);\n ")]),rb("checked",[nb("checkbox-box","\n background-color: var(--n-color-checked);\n ",[nb("checkbox-icon",[eb(".check-icon","\n opacity: 1;\n transform: scale(1);\n ")])])]),rb("indeterminate",[nb("checkbox-box",[nb("checkbox-icon",[eb(".check-icon","\n opacity: 0;\n transform: scale(.5);\n "),eb(".line-icon","\n opacity: 1;\n transform: scale(1);\n ")])])]),rb("checked, indeterminate",[eb("&:focus:not(:active)",[nb("checkbox-box",[ob("border","\n border: var(--n-border-checked);\n box-shadow: var(--n-box-shadow-focus);\n ")])]),nb("checkbox-box","\n background-color: var(--n-color-checked);\n border-left: 0;\n border-top: 0;\n ",[ob("border",{border:"var(--n-border-checked)"})])]),rb("disabled",{cursor:"not-allowed"},[rb("checked",[nb("checkbox-box","\n background-color: var(--n-color-disabled-checked);\n ",[ob("border",{border:"var(--n-border-disabled-checked)"}),nb("checkbox-icon",[eb(".check-icon, .line-icon",{fill:"var(--n-check-mark-color-disabled-checked)"})])])]),nb("checkbox-box","\n background-color: var(--n-color-disabled);\n ",[ob("border","\n border: var(--n-border-disabled);\n "),nb("checkbox-icon",[eb(".check-icon, .line-icon","\n fill: var(--n-check-mark-color-disabled);\n ")])]),ob("label","\n color: var(--n-text-color-disabled);\n ")]),nb("checkbox-box-wrapper","\n position: relative;\n width: var(--n-size);\n flex-shrink: 0;\n flex-grow: 0;\n user-select: none;\n -webkit-user-select: none;\n "),nb("checkbox-box","\n position: absolute;\n left: 0;\n top: 50%;\n transform: translateY(-50%);\n height: var(--n-size);\n width: var(--n-size);\n display: inline-block;\n box-sizing: border-box;\n border-radius: var(--n-border-radius);\n background-color: var(--n-color);\n transition: background-color 0.3s var(--n-bezier);\n ",[ob("border","\n transition:\n border-color .3s var(--n-bezier),\n box-shadow .3s var(--n-bezier);\n border-radius: inherit;\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n border: var(--n-border);\n "),nb("checkbox-icon","\n display: flex;\n align-items: center;\n justify-content: center;\n position: absolute;\n left: 1px;\n right: 1px;\n top: 1px;\n bottom: 1px;\n ",[eb(".check-icon, .line-icon","\n width: 100%;\n fill: var(--n-check-mark-color);\n opacity: 0;\n transform: scale(0.5);\n transform-origin: center;\n transition:\n fill 0.3s var(--n-bezier),\n transform 0.3s var(--n-bezier),\n opacity 0.3s var(--n-bezier),\n border-color 0.3s var(--n-bezier);\n "),PT({left:"1px",top:"1px"})])]),ob("label","\n color: var(--n-text-color);\n transition: color .3s var(--n-bezier);\n user-select: none;\n -webkit-user-select: none;\n padding: var(--n-label-padding);\n font-weight: var(--n-label-font-weight);\n ",[eb("&:empty",{display:"none"})])]),ab(nb("checkbox","\n --n-merged-color-table: var(--n-color-table-modal);\n ")),lb(nb("checkbox","\n --n-merged-color-table: var(--n-color-table-popover);\n "))]),GO=zn({name:"Checkbox",props:Object.assign(Object.assign({},I_.props),{size:String,checked:{type:[Boolean,String,Number],default:void 0},defaultChecked:{type:[Boolean,String,Number],default:!1},value:[String,Number],disabled:{type:Boolean,default:void 0},indeterminate:Boolean,label:String,focusable:{type:Boolean,default:!0},checkedValue:{type:[Boolean,String,Number],default:!0},uncheckedValue:{type:[Boolean,String,Number],default:!1},"onUpdate:checked":[Function,Array],onUpdateChecked:[Function,Array],privateInsideTable:Boolean,onChange:[Function,Array]}),setup(e){const t=Po(VO,null),n=Et(null),{mergedClsPrefixRef:o,inlineThemeDisabled:r,mergedRtlRef:i}=B_(e),a=Et(e.defaultChecked),l=Db(jt(e,"checked"),a),s=mb((()=>{if(t){const n=t.valueSetRef.value;return!(!n||void 0===e.value)&&n.has(e.value)}return l.value===e.checkedValue})),c=eC(e,{mergedSize(n){const{size:o}=e;if(void 0!==o)return o;if(t){const{value:e}=t.mergedSizeRef;if(void 0!==e)return e}if(n){const{mergedSize:e}=n;if(void 0!==e)return e.value}return"medium"},mergedDisabled(n){const{disabled:o}=e;if(void 0!==o)return o;if(t){if(t.disabledRef.value)return!0;const{maxRef:{value:e},checkedCountRef:n}=t;if(void 0!==e&&n.value>=e&&!s.value)return!0;const{minRef:{value:o}}=t;if(void 0!==o&&n.value<=o&&s.value)return!0}return!!n&&n.disabled.value}}),{mergedDisabledRef:u,mergedSizeRef:d}=c,p=I_("Checkbox","-checkbox",KO,NO,e,o);function h(n){if(t&&void 0!==e.value)t.toggleCheckbox(!s.value,e.value);else{const{onChange:t,"onUpdate:checked":o,onUpdateChecked:r}=e,{nTriggerFormInput:i,nTriggerFormChange:l}=c,u=s.value?e.uncheckedValue:e.checkedValue;o&&dg(o,u,n),r&&dg(r,u,n),t&&dg(t,u,n),i(),l(),a.value=u}}const f={focus:()=>{var e;null===(e=n.value)||void 0===e||e.focus()},blur:()=>{var e;null===(e=n.value)||void 0===e||e.blur()}},v=GP("Checkbox",i,o),m=ai((()=>{const{value:e}=d,{common:{cubicBezierEaseInOut:t},self:{borderRadius:n,color:o,colorChecked:r,colorDisabled:i,colorTableHeader:a,colorTableHeaderModal:l,colorTableHeaderPopover:s,checkMarkColor:c,checkMarkColorDisabled:u,border:h,borderFocus:f,borderDisabled:v,borderChecked:m,boxShadowFocus:g,textColor:b,textColorDisabled:y,checkMarkColorDisabledChecked:x,colorDisabledChecked:C,borderDisabledChecked:w,labelPadding:k,labelLineHeight:S,labelFontWeight:_,[ub("fontSize",e)]:P,[ub("size",e)]:T}}=p.value;return{"--n-label-line-height":S,"--n-label-font-weight":_,"--n-size":T,"--n-bezier":t,"--n-border-radius":n,"--n-border":h,"--n-border-checked":m,"--n-border-focus":f,"--n-border-disabled":v,"--n-border-disabled-checked":w,"--n-box-shadow-focus":g,"--n-color":o,"--n-color-checked":r,"--n-color-table":a,"--n-color-table-modal":l,"--n-color-table-popover":s,"--n-color-disabled":i,"--n-color-disabled-checked":C,"--n-text-color":b,"--n-text-color-disabled":y,"--n-check-mark-color":c,"--n-check-mark-color-disabled":u,"--n-check-mark-color-disabled-checked":x,"--n-font-size":P,"--n-label-padding":k}})),g=r?KP("checkbox",ai((()=>d.value[0])),m,e):void 0;return Object.assign(c,f,{rtlEnabled:v,selfRef:n,mergedClsPrefix:o,mergedDisabled:u,renderedChecked:s,mergedTheme:p,labelId:ig(),handleClick:function(e){u.value||h(e)},handleKeyUp:function(e){if(!u.value)switch(e.key){case" ":case"Enter":h(e)}},handleKeyDown:function(e){" "===e.key&&e.preventDefault()},cssVars:r?void 0:m,themeClass:null==g?void 0:g.themeClass,onRender:null==g?void 0:g.onRender})},render(){var e;const{$slots:t,renderedChecked:n,mergedDisabled:o,indeterminate:r,privateInsideTable:i,cssVars:a,labelId:l,label:s,mergedClsPrefix:c,focusable:u,handleKeyUp:d,handleKeyDown:p,handleClick:h}=this;null===(e=this.onRender)||void 0===e||e.call(this);const f=wg(t.default,(e=>s||e?li("span",{class:`${c}-checkbox__label`,id:l},s||e):null));return li("div",{ref:"selfRef",class:[`${c}-checkbox`,this.themeClass,this.rtlEnabled&&`${c}-checkbox--rtl`,n&&`${c}-checkbox--checked`,o&&`${c}-checkbox--disabled`,r&&`${c}-checkbox--indeterminate`,i&&`${c}-checkbox--inside-table`,f&&`${c}-checkbox--show-label`],tabindex:o||!u?void 0:0,role:"checkbox","aria-checked":r?"mixed":n,"aria-labelledby":l,style:a,onKeyup:d,onKeydown:p,onClick:h,onMousedown:()=>{Pb("selectstart",window,(e=>{e.preventDefault()}),{once:!0})}},li("div",{class:`${c}-checkbox-box-wrapper`}," ",li("div",{class:`${c}-checkbox-box`},li(bT,null,{default:()=>this.indeterminate?li("div",{key:"indeterminate",class:`${c}-checkbox-icon`},UO):li("div",{key:"check",class:`${c}-checkbox-icon`},WO)}),li("div",{class:`${c}-checkbox-box__border`}))),f)}}),XO={name:"Code",common:tz,self(e){const{textColor2:t,fontSize:n,fontWeightStrong:o,textColor3:r}=e;return{textColor:t,fontSize:n,fontWeightStrong:o,"mono-3":"#5c6370","hue-1":"#56b6c2","hue-2":"#61aeee","hue-3":"#c678dd","hue-4":"#98c379","hue-5":"#e06c75","hue-5-2":"#be5046","hue-6":"#d19a66","hue-6-2":"#e6c07b",lineNumberTextColor:r}}},YO={name:"Collapse",common:tz,self:function(e){const{fontWeight:t,textColor1:n,textColor2:o,textColorDisabled:r,dividerColor:i,fontSize:a}=e;return{titleFontSize:a,titleFontWeight:t,dividerColor:i,titleTextColor:n,titleTextColorDisabled:r,fontSize:a,textColor:o,arrowColor:o,arrowColorDisabled:r,itemMargin:"16px 0 0 0",titlePadding:"16px 0 0 0"}}},QO={name:"CollapseTransition",common:tz,self:function(e){const{cubicBezierEaseInOut:t}=e;return{bezier:t}}},ZO=zn({name:"ConfigProvider",alias:["App"],props:{abstract:Boolean,bordered:{type:Boolean,default:void 0},clsPrefix:{type:String,default:L_},locale:Object,dateLocale:Object,namespace:String,rtl:Array,tag:{type:String,default:"div"},hljs:Object,katex:Object,theme:Object,themeOverrides:Object,componentOptions:Object,icons:Object,breakpoints:Object,preflightStyleDisabled:Boolean,inlineThemeDisabled:{type:Boolean,default:void 0},as:{type:String,validator:()=>!0,default:void 0}},setup(e){const t=Po(M_,null),n=ai((()=>{const{theme:n}=e;if(null===n)return;const o=null==t?void 0:t.mergedThemeRef.value;return void 0===n?o:void 0===o?n:Object.assign({},o,n)})),o=ai((()=>{const{themeOverrides:n}=e;if(null!==n){if(void 0===n)return null==t?void 0:t.mergedThemeOverridesRef.value;{const e=null==t?void 0:t.mergedThemeOverridesRef.value;return void 0===e?n:__({},e,n)}}})),r=mb((()=>{const{namespace:n}=e;return void 0===n?null==t?void 0:t.mergedNamespaceRef.value:n})),i=mb((()=>{const{bordered:n}=e;return void 0===n?null==t?void 0:t.mergedBorderedRef.value:n})),a=ai((()=>{const{icons:n}=e;return void 0===n?null==t?void 0:t.mergedIconsRef.value:n})),l=ai((()=>{const{componentOptions:n}=e;return void 0!==n?n:null==t?void 0:t.mergedComponentPropsRef.value})),s=ai((()=>{const{clsPrefix:n}=e;return void 0!==n?n:t?t.mergedClsPrefixRef.value:L_})),c=ai((()=>{var n;const{rtl:o}=e;if(void 0===o)return null==t?void 0:t.mergedRtlRef.value;const r={};for(const e of o)r[e.name]=St(e),null===(n=e.peers)||void 0===n||n.forEach((e=>{e.name in r||(r[e.name]=St(e))}));return r})),u=ai((()=>e.breakpoints||(null==t?void 0:t.mergedBreakpointsRef.value))),d=e.inlineThemeDisabled||(null==t?void 0:t.inlineThemeDisabled),p=e.preflightStyleDisabled||(null==t?void 0:t.preflightStyleDisabled),h=ai((()=>{const{value:e}=n,{value:t}=o,r=t&&0!==Object.keys(t).length,i=null==e?void 0:e.name;return i?r?`${i}-${Wg(JSON.stringify(o.value))}`:i:r?Wg(JSON.stringify(o.value)):""}));return _o(M_,{mergedThemeHashRef:h,mergedBreakpointsRef:u,mergedRtlRef:c,mergedIconsRef:a,mergedComponentPropsRef:l,mergedBorderedRef:i,mergedNamespaceRef:r,mergedClsPrefixRef:s,mergedLocaleRef:ai((()=>{const{locale:n}=e;if(null!==n)return void 0===n?null==t?void 0:t.mergedLocaleRef.value:n})),mergedDateLocaleRef:ai((()=>{const{dateLocale:n}=e;if(null!==n)return void 0===n?null==t?void 0:t.mergedDateLocaleRef.value:n})),mergedHljsRef:ai((()=>{const{hljs:n}=e;return void 0===n?null==t?void 0:t.mergedHljsRef.value:n})),mergedKatexRef:ai((()=>{const{katex:n}=e;return void 0===n?null==t?void 0:t.mergedKatexRef.value:n})),mergedThemeRef:n,mergedThemeOverridesRef:o,inlineThemeDisabled:d||!1,preflightStyleDisabled:p||!1}),{mergedClsPrefix:s,mergedBordered:i,mergedNamespace:r,mergedTheme:n,mergedThemeOverrides:o}},render(){var e,t,n,o;return this.abstract?null===(o=(n=this.$slots).default)||void 0===o?void 0:o.call(n):li(this.as||this.tag,{class:`${this.mergedClsPrefix||L_}-config-provider`},null===(t=(e=this.$slots).default)||void 0===t?void 0:t.call(e))}});function JO(e){const{from:t,to:n,duration:o,onUpdate:r,onFinish:i}=e,a=performance.now(),l=()=>{const e=performance.now(),s=Math.min(e-a,o),c=t+(n-t)*(u=s/o,1-Math.pow(1-u,5));var u;s!==o?(r(c),requestAnimationFrame(l)):i()};l()}const eM=zn({name:"NumberAnimation",props:{to:{type:Number,default:0},precision:{type:Number,default:0},showSeparator:Boolean,locale:String,from:{type:Number,default:0},active:{type:Boolean,default:!0},duration:{type:Number,default:2e3},onFinish:Function},setup(e){const{localeRef:t}=VP("name"),{duration:n}=e,o=Et(e.from),r=ai((()=>{const{locale:n}=e;return void 0!==n?n:t.value}));let i=!1;const a=e=>{o.value=e},l=()=>{var t;o.value=e.to,i=!1,null===(t=e.onFinish)||void 0===t||t.call(e)},s=(t=e.from,r=e.to)=>{i=!0,o.value=e.from,t!==r&&JO({from:t,to:r,duration:n,onUpdate:a,onFinish:l})},c=ai((()=>{var t;const n=T_(o.value,e.precision).toFixed(e.precision).split("."),i=new Intl.NumberFormat(r.value),a=null===(t=i.formatToParts(.5).find((e=>"decimal"===e.type)))||void 0===t?void 0:t.value;return{integer:e.showSeparator?i.format(Number(n[0])):n[0],decimal:n[1],decimalSeparator:a}}));$n((()=>{ir((()=>{e.active&&s()}))}));const u={play:function(){i||s()}};return Object.assign({formattedValue:c},u)},render(){const{formattedValue:{integer:e,decimal:t,decimalSeparator:n}}=this;return[e,t?n:null,t]}}),tM={name:"Popselect",common:tz,peers:{Popover:_R,InternalSelectMenu:pR}},nM={name:"Popselect",common:qz,peers:{Popover:SR,InternalSelectMenu:dR},self:function(e){const{boxShadow2:t}=e;return{menuBoxShadow:t}}},oM="n-popselect",rM=nb("popselect-menu","\n box-shadow: var(--n-menu-box-shadow);\n"),iM={multiple:Boolean,value:{type:[String,Number,Array],default:null},cancelable:Boolean,options:{type:Array,default:()=>[]},size:{type:String,default:"medium"},scrollable:Boolean,"onUpdate:value":[Function,Array],onUpdateValue:[Function,Array],onMouseenter:Function,onMouseleave:Function,renderLabel:Function,showCheckmark:{type:Boolean,default:void 0},nodeProps:Function,virtualScroll:Boolean,onChange:[Function,Array]},aM=pg(iM),lM=zn({name:"PopselectPanel",props:iM,setup(e){const t=Po(oM),{mergedClsPrefixRef:n,inlineThemeDisabled:o}=B_(e),r=I_("Popselect","-pop-select",rM,nM,t.props,n),i=ai((()=>JT(e.options,mE("value","children"))));function a(t,n){const{onUpdateValue:o,"onUpdate:value":r,onChange:i}=e;o&&dg(o,t,n),r&&dg(r,t,n),i&&dg(i,t,n)}lr(jt(e,"options"),(()=>{tn((()=>{t.syncPosition()}))}));const l=ai((()=>{const{self:{menuBoxShadow:e}}=r.value;return{"--n-menu-box-shadow":e}})),s=o?KP("select",void 0,l,t.props):void 0;return{mergedTheme:t.mergedThemeRef,mergedClsPrefix:n,treeMate:i,handleToggle:function(n){!function(n){const{value:{getNode:o}}=i;if(e.multiple)if(Array.isArray(e.value)){const t=[],r=[];let i=!0;e.value.forEach((e=>{if(e===n)return void(i=!1);const a=o(e);a&&(t.push(a.key),r.push(a.rawNode))})),i&&(t.push(n),r.push(o(n).rawNode)),a(t,r)}else{const e=o(n);e&&a([n],[e.rawNode])}else if(e.value===n&&e.cancelable)a(null,null);else{const e=o(n);e&&a(n,e.rawNode);const{"onUpdate:show":r,onUpdateShow:i}=t.props;r&&dg(r,!1),i&&dg(i,!1),t.setShow(!1)}tn((()=>{t.syncPosition()}))}(n.key)},handleMenuMousedown:function(e){Mm(e,"action")||Mm(e,"empty")||Mm(e,"header")||e.preventDefault()},cssVars:o?void 0:l,themeClass:null==s?void 0:s.themeClass,onRender:null==s?void 0:s.onRender}},render(){var e;return null===(e=this.onRender)||void 0===e||e.call(this),li(yR,{clsPrefix:this.mergedClsPrefix,focusable:!0,nodeProps:this.nodeProps,class:[`${this.mergedClsPrefix}-popselect-menu`,this.themeClass],style:this.cssVars,theme:this.mergedTheme.peers.InternalSelectMenu,themeOverrides:this.mergedTheme.peerOverrides.InternalSelectMenu,multiple:this.multiple,treeMate:this.treeMate,size:this.size,value:this.value,virtualScroll:this.virtualScroll,scrollable:this.scrollable,renderLabel:this.renderLabel,onToggle:this.handleToggle,onMouseenter:this.onMouseenter,onMouseleave:this.onMouseenter,onMousedown:this.handleMenuMousedown,showCheckmark:this.showCheckmark},{header:()=>{var e,t;return(null===(t=(e=this.$slots).header)||void 0===t?void 0:t.call(e))||[]},action:()=>{var e,t;return(null===(t=(e=this.$slots).action)||void 0===t?void 0:t.call(e))||[]},empty:()=>{var e,t;return(null===(t=(e=this.$slots).empty)||void 0===t?void 0:t.call(e))||[]}})}}),sM=zn({name:"Popselect",props:Object.assign(Object.assign(Object.assign(Object.assign({},I_.props),cg(DR,["showArrow","arrow"])),{placement:Object.assign(Object.assign({},DR.placement),{default:"bottom"}),trigger:{type:String,default:"hover"}}),iM),inheritAttrs:!1,__popover__:!0,setup(e){const{mergedClsPrefixRef:t}=B_(e),n=I_("Popselect","-popselect",void 0,nM,e,t),o=Et(null);function r(){var e;null===(e=o.value)||void 0===e||e.syncPosition()}function i(e){var t;null===(t=o.value)||void 0===t||t.setShow(e)}_o(oM,{props:e,mergedThemeRef:n,syncPosition:r,setShow:i});const a={syncPosition:r,setShow:i};return Object.assign(Object.assign({},a),{popoverInstRef:o,mergedTheme:n})},render(){const{mergedTheme:e}=this,t={theme:e.peers.Popover,themeOverrides:e.peerOverrides.Popover,builtinThemeOverrides:{padding:"0"},ref:"popoverInstRef",internalRenderBody:(e,t,n,o,r)=>{const{$attrs:i}=this;return li(lM,Object.assign({},i,{class:[i.class,e],style:[i.style,...n]},sg(this.$props,aM),{ref:bg(t),onMouseenter:Sg([o,i.onMouseenter]),onMouseleave:Sg([r,i.onMouseleave])}),{header:()=>{var e,t;return null===(t=(e=this.$slots).header)||void 0===t?void 0:t.call(e)},action:()=>{var e,t;return null===(t=(e=this.$slots).action)||void 0===t?void 0:t.call(e)},empty:()=>{var e,t;return null===(t=(e=this.$slots).empty)||void 0===t?void 0:t.call(e)}})}};return li($R,Object.assign({},cg(this.$props,aM),t,{internalDeactivateImmediately:!0}),{trigger:()=>{var e,t;return null===(t=(e=this.$slots).default)||void 0===t?void 0:t.call(e)}})}});function cM(e){const{boxShadow2:t}=e;return{menuBoxShadow:t}}const uM={name:"Select",common:qz,peers:{InternalSelection:QR,InternalSelectMenu:dR},self:cM},dM={name:"Select",common:tz,peers:{InternalSelection:ZR,InternalSelectMenu:pR},self:cM},pM=eb([nb("select","\n z-index: auto;\n outline: none;\n width: 100%;\n position: relative;\n "),nb("select-menu","\n margin: 4px 0;\n box-shadow: var(--n-menu-box-shadow);\n ",[gR({originalTransition:"background-color .3s var(--n-bezier), box-shadow .3s var(--n-bezier)"})])]),hM=zn({name:"Select",props:Object.assign(Object.assign({},I_.props),{to:Yb.propTo,bordered:{type:Boolean,default:void 0},clearable:Boolean,clearFilterAfterSelect:{type:Boolean,default:!0},options:{type:Array,default:()=>[]},defaultValue:{type:[String,Number,Array],default:null},keyboard:{type:Boolean,default:!0},value:[String,Number,Array],placeholder:String,menuProps:Object,multiple:Boolean,size:String,filterable:Boolean,disabled:{type:Boolean,default:void 0},remote:Boolean,loading:Boolean,filter:Function,placement:{type:String,default:"bottom-start"},widthMode:{type:String,default:"trigger"},tag:Boolean,onCreate:Function,fallbackOption:{type:[Function,Boolean],default:void 0},show:{type:Boolean,default:void 0},showArrow:{type:Boolean,default:!0},maxTagCount:[Number,String],ellipsisTagPopoverProps:Object,consistentMenuWidth:{type:Boolean,default:!0},virtualScroll:{type:Boolean,default:!0},labelField:{type:String,default:"label"},valueField:{type:String,default:"value"},childrenField:{type:String,default:"children"},renderLabel:Function,renderOption:Function,renderTag:Function,"onUpdate:value":[Function,Array],inputProps:Object,nodeProps:Function,ignoreComposition:{type:Boolean,default:!0},showOnFocus:Boolean,onUpdateValue:[Function,Array],onBlur:[Function,Array],onClear:[Function,Array],onFocus:[Function,Array],onScroll:[Function,Array],onSearch:[Function,Array],onUpdateShow:[Function,Array],"onUpdate:show":[Function,Array],displayDirective:{type:String,default:"show"},resetMenuOnOptionsChange:{type:Boolean,default:!0},status:String,showCheckmark:{type:Boolean,default:!0},onChange:[Function,Array],items:Array}),setup(e){const{mergedClsPrefixRef:t,mergedBorderedRef:n,namespaceRef:o,inlineThemeDisabled:r}=B_(e),i=I_("Select","-select",pM,uM,e,t),a=Et(e.defaultValue),l=Db(jt(e,"value"),a),s=Et(!1),c=Et(""),u=Nb(e,["items","options"]),d=Et([]),p=Et([]),h=ai((()=>p.value.concat(d.value).concat(u.value))),f=ai((()=>{const{filter:t}=e;if(t)return t;const{labelField:n,valueField:o}=e;return(e,t)=>{if(!t)return!1;const r=t[n];if("string"==typeof r)return vE(e,r);const i=t[o];return"string"==typeof i?vE(e,i):"number"==typeof i&&vE(e,String(i))}})),v=ai((()=>{if(e.remote)return u.value;{const{value:t}=h,{value:n}=c;return n.length&&e.filterable?function(e,t,n,o){return t?function e(r){if(!Array.isArray(r))return[];const i=[];for(const a of r)if(hE(a)){const t=e(a[o]);t.length&&i.push(Object.assign({},a,{[o]:t}))}else{if(fE(a))continue;t(n,a)&&i.push(a)}return i}(e):e}(t,f.value,n,e.childrenField):t}})),m=ai((()=>{const{valueField:t,childrenField:n}=e,o=mE(t,n);return JT(v.value,o)})),g=ai((()=>function(e,t,n){const o=new Map;return e.forEach((e=>{hE(e)?e[n].forEach((e=>{o.set(e[t],e)})):o.set(e[t],e)})),o}(h.value,e.valueField,e.childrenField))),b=Et(!1),y=Db(jt(e,"show"),b),x=Et(null),C=Et(null),w=Et(null),{localeRef:k}=VP("Select"),S=ai((()=>{var t;return null!==(t=e.placeholder)&&void 0!==t?t:k.value.placeholder})),_=[],P=Et(new Map),T=ai((()=>{const{fallbackOption:t}=e;if(void 0===t){const{labelField:t,valueField:n}=e;return e=>({[t]:String(e),[n]:e})}return!1!==t&&(e=>Object.assign(t(e),{value:e}))}));function A(t){const n=e.remote,{value:o}=P,{value:r}=g,{value:i}=T,a=[];return t.forEach((e=>{if(r.has(e))a.push(r.get(e));else if(n&&o.has(e))a.push(o.get(e));else if(i){const t=i(e);t&&a.push(t)}})),a}const z=ai((()=>{if(e.multiple){const{value:e}=l;return Array.isArray(e)?A(e):[]}return null})),R=ai((()=>{const{value:t}=l;return e.multiple||Array.isArray(t)||null===t?null:A([t])[0]||null})),E=eC(e),{mergedSizeRef:O,mergedDisabledRef:M,mergedStatusRef:F}=E;function I(t,n){const{onChange:o,"onUpdate:value":r,onUpdateValue:i}=e,{nTriggerFormChange:l,nTriggerFormInput:s}=E;o&&dg(o,t,n),i&&dg(i,t,n),r&&dg(r,t,n),a.value=t,l(),s()}function L(t){const{onBlur:n}=e,{nTriggerFormBlur:o}=E;n&&dg(n,t),o()}function B(){var t;const{remote:n,multiple:o}=e;if(n){const{value:n}=P;if(o){const{valueField:o}=e;null===(t=z.value)||void 0===t||t.forEach((e=>{n.set(e[o],e)}))}else{const t=R.value;t&&n.set(t[e.valueField],t)}}}function D(t){const{onUpdateShow:n,"onUpdate:show":o}=e;n&&dg(n,t),o&&dg(o,t),b.value=t}function $(){M.value||(D(!0),b.value=!0,e.filterable&&G())}function N(){D(!1)}function j(){c.value="",p.value=_}const H=Et(!1);function W(e){U(e.rawNode)}function U(t){if(M.value)return;const{tag:n,remote:o,clearFilterAfterSelect:r,valueField:i}=e;if(n&&!o){const{value:e}=p,t=e[0]||null;if(t){const e=d.value;e.length?e.push(t):d.value=[t],p.value=_}}if(o&&P.value.set(t[i],t),e.multiple){const a=function(t){if(!Array.isArray(t))return[];if(T.value)return Array.from(t);{const{remote:n}=e,{value:o}=g;if(n){const{value:e}=P;return t.filter((t=>o.has(t)||e.has(t)))}return t.filter((e=>o.has(e)))}}(l.value),s=a.findIndex((e=>e===t[i]));if(~s){if(a.splice(s,1),n&&!o){const e=V(t[i]);~e&&(d.value.splice(e,1),r&&(c.value=""))}}else a.push(t[i]),r&&(c.value="");I(a,A(a))}else{if(n&&!o){const e=V(t[i]);d.value=~e?[d.value[e]]:_}K(),N(),I(t[i],t)}}function V(t){return d.value.findIndex((n=>n[e.valueField]===t))}function q(t){var n,o,r,i,a,s;if(e.keyboard)switch(t.key){case" ":if(e.filterable)break;t.preventDefault();case"Enter":if(!(null===(n=x.value)||void 0===n?void 0:n.isComposing))if(y.value){const t=null===(o=w.value)||void 0===o?void 0:o.getPendingTmNode();t?W(t):e.filterable||(N(),K())}else if($(),e.tag&&H.value){const t=p.value[0];if(t){const n=t[e.valueField],{value:o}=l;e.multiple&&Array.isArray(o)&&o.includes(n)||U(t)}}t.preventDefault();break;case"ArrowUp":if(t.preventDefault(),e.loading)return;y.value&&(null===(r=w.value)||void 0===r||r.prev());break;case"ArrowDown":if(t.preventDefault(),e.loading)return;y.value?null===(i=w.value)||void 0===i||i.next():$();break;case"Escape":y.value&&(s=t,hb.add(s),N()),null===(a=x.value)||void 0===a||a.focus()}else t.preventDefault()}function K(){var e;null===(e=x.value)||void 0===e||e.focus()}function G(){var e;null===(e=x.value)||void 0===e||e.focusInput()}B(),lr(jt(e,"options"),B);const X={focus:()=>{var e;null===(e=x.value)||void 0===e||e.focus()},focusInput:()=>{var e;null===(e=x.value)||void 0===e||e.focusInput()},blur:()=>{var e;null===(e=x.value)||void 0===e||e.blur()},blurInput:()=>{var e;null===(e=x.value)||void 0===e||e.blurInput()}},Y=ai((()=>{const{self:{menuBoxShadow:e}}=i.value;return{"--n-menu-box-shadow":e}})),Q=r?KP("select",void 0,Y,e):void 0;return Object.assign(Object.assign({},X),{mergedStatus:F,mergedClsPrefix:t,mergedBordered:n,namespace:o,treeMate:m,isMounted:$b(),triggerRef:x,menuRef:w,pattern:c,uncontrolledShow:b,mergedShow:y,adjustedTo:Yb(e),uncontrolledValue:a,mergedValue:l,followerRef:C,localizedPlaceholder:S,selectedOption:R,selectedOptions:z,mergedSize:O,mergedDisabled:M,focused:s,activeWithoutMenuOpen:H,inlineThemeDisabled:r,onTriggerInputFocus:function(){e.filterable&&(H.value=!0)},onTriggerInputBlur:function(){e.filterable&&(H.value=!1,y.value||j())},handleTriggerOrMenuResize:function(){var e;y.value&&(null===(e=C.value)||void 0===e||e.syncPosition())},handleMenuFocus:function(){s.value=!0},handleMenuBlur:function(e){var t;(null===(t=x.value)||void 0===t?void 0:t.$el.contains(e.relatedTarget))||(s.value=!1,L(e),N())},handleMenuTabOut:function(){var e;null===(e=x.value)||void 0===e||e.focus(),N()},handleTriggerClick:function(){M.value||(y.value?e.filterable?G():N():$())},handleToggle:W,handleDeleteOption:U,handlePatternInput:function(t){y.value||$();const{value:n}=t.target;c.value=n;const{tag:o,remote:r}=e;if(function(t){const{onSearch:n}=e;n&&dg(n,t)}(n),o&&!r){if(!n)return void(p.value=_);const{onCreate:t}=e,o=t?t(n):{[e.labelField]:n,[e.valueField]:n},{valueField:r,labelField:i}=e;u.value.some((e=>e[r]===o[r]||e[i]===o[i]))||d.value.some((e=>e[r]===o[r]||e[i]===o[i]))?p.value=_:p.value=[o]}},handleClear:function(t){t.stopPropagation();const{multiple:n}=e;!n&&e.filterable&&N(),function(){const{onClear:t}=e;t&&dg(t)}(),n?I([],[]):I(null,null)},handleTriggerBlur:function(e){var t,n;(null===(n=null===(t=w.value)||void 0===t?void 0:t.selfRef)||void 0===n?void 0:n.contains(e.relatedTarget))||(s.value=!1,L(e),N())},handleTriggerFocus:function(t){!function(t){const{onFocus:n,showOnFocus:o}=e,{nTriggerFormFocus:r}=E;n&&dg(n,t),r(),o&&$()}(t),s.value=!0},handleKeydown:q,handleMenuAfterLeave:j,handleMenuClickOutside:function(e){var t;y.value&&((null===(t=x.value)||void 0===t?void 0:t.$el.contains(Fm(e)))||N())},handleMenuScroll:function(t){!function(t){const{onScroll:n}=e;n&&dg(n,t)}(t)},handleMenuKeydown:q,handleMenuMousedown:function(e){Mm(e,"action")||Mm(e,"empty")||Mm(e,"header")||e.preventDefault()},mergedTheme:i,cssVars:r?void 0:Y,themeClass:null==Q?void 0:Q.themeClass,onRender:null==Q?void 0:Q.onRender})},render(){return li("div",{class:`${this.mergedClsPrefix}-select`},li(ay,null,{default:()=>[li(ly,null,{default:()=>li(eE,{ref:"triggerRef",inlineThemeDisabled:this.inlineThemeDisabled,status:this.mergedStatus,inputProps:this.inputProps,clsPrefix:this.mergedClsPrefix,showArrow:this.showArrow,maxTagCount:this.maxTagCount,ellipsisTagPopoverProps:this.ellipsisTagPopoverProps,bordered:this.mergedBordered,active:this.activeWithoutMenuOpen||this.mergedShow,pattern:this.pattern,placeholder:this.localizedPlaceholder,selectedOption:this.selectedOption,selectedOptions:this.selectedOptions,multiple:this.multiple,renderTag:this.renderTag,renderLabel:this.renderLabel,filterable:this.filterable,clearable:this.clearable,disabled:this.mergedDisabled,size:this.mergedSize,theme:this.mergedTheme.peers.InternalSelection,labelField:this.labelField,valueField:this.valueField,themeOverrides:this.mergedTheme.peerOverrides.InternalSelection,loading:this.loading,focused:this.focused,onClick:this.handleTriggerClick,onDeleteOption:this.handleDeleteOption,onPatternInput:this.handlePatternInput,onClear:this.handleClear,onBlur:this.handleTriggerBlur,onFocus:this.handleTriggerFocus,onKeydown:this.handleKeydown,onPatternBlur:this.onTriggerInputBlur,onPatternFocus:this.onTriggerInputFocus,onResize:this.handleTriggerOrMenuResize,ignoreComposition:this.ignoreComposition},{arrow:()=>{var e,t;return[null===(t=(e=this.$slots).arrow)||void 0===t?void 0:t.call(e)]}})}),li(Fy,{ref:"followerRef",show:this.mergedShow,to:this.adjustedTo,teleportDisabled:this.adjustedTo===Yb.tdkey,containerClass:this.namespace,width:this.consistentMenuWidth?"target":void 0,minWidth:"target",placement:this.placement},{default:()=>li(vi,{name:"fade-in-scale-up-transition",appear:this.isMounted,onAfterLeave:this.handleMenuAfterLeave},{default:()=>{var e,t,n;return this.mergedShow||"show"===this.displayDirective?(null===(e=this.onRender)||void 0===e||e.call(this),fn(li(yR,Object.assign({},this.menuProps,{ref:"menuRef",onResize:this.handleTriggerOrMenuResize,inlineThemeDisabled:this.inlineThemeDisabled,virtualScroll:this.consistentMenuWidth&&this.virtualScroll,class:[`${this.mergedClsPrefix}-select-menu`,this.themeClass,null===(t=this.menuProps)||void 0===t?void 0:t.class],clsPrefix:this.mergedClsPrefix,focusable:!0,labelField:this.labelField,valueField:this.valueField,autoPending:!0,nodeProps:this.nodeProps,theme:this.mergedTheme.peers.InternalSelectMenu,themeOverrides:this.mergedTheme.peerOverrides.InternalSelectMenu,treeMate:this.treeMate,multiple:this.multiple,size:"medium",renderOption:this.renderOption,renderLabel:this.renderLabel,value:this.mergedValue,style:[null===(n=this.menuProps)||void 0===n?void 0:n.style,this.cssVars],onToggle:this.handleToggle,onScroll:this.handleMenuScroll,onFocus:this.handleMenuFocus,onBlur:this.handleMenuBlur,onKeydown:this.handleMenuKeydown,onTabOut:this.handleMenuTabOut,onMousedown:this.handleMenuMousedown,show:this.mergedShow,showCheckmark:this.showCheckmark,resetMenuOnOptionsChange:this.resetMenuOnOptionsChange}),{empty:()=>{var e,t;return[null===(t=(e=this.$slots).empty)||void 0===t?void 0:t.call(e)]},header:()=>{var e,t;return[null===(t=(e=this.$slots).header)||void 0===t?void 0:t.call(e)]},action:()=>{var e,t;return[null===(t=(e=this.$slots).action)||void 0===t?void 0:t.call(e)]}}),"show"===this.displayDirective?[[Mi,this.mergedShow],[dy,this.handleMenuClickOutside,void 0,{capture:!0}]]:[[dy,this.handleMenuClickOutside,void 0,{capture:!0}]])):null}})})]}))}}),fM={itemPaddingSmall:"0 4px",itemMarginSmall:"0 0 0 8px",itemMarginSmallRtl:"0 8px 0 0",itemPaddingMedium:"0 4px",itemMarginMedium:"0 0 0 8px",itemMarginMediumRtl:"0 8px 0 0",itemPaddingLarge:"0 4px",itemMarginLarge:"0 0 0 8px",itemMarginLargeRtl:"0 8px 0 0",buttonIconSizeSmall:"14px",buttonIconSizeMedium:"16px",buttonIconSizeLarge:"18px",inputWidthSmall:"60px",selectWidthSmall:"unset",inputMarginSmall:"0 0 0 8px",inputMarginSmallRtl:"0 8px 0 0",selectMarginSmall:"0 0 0 8px",prefixMarginSmall:"0 8px 0 0",suffixMarginSmall:"0 0 0 8px",inputWidthMedium:"60px",selectWidthMedium:"unset",inputMarginMedium:"0 0 0 8px",inputMarginMediumRtl:"0 8px 0 0",selectMarginMedium:"0 0 0 8px",prefixMarginMedium:"0 8px 0 0",suffixMarginMedium:"0 0 0 8px",inputWidthLarge:"60px",selectWidthLarge:"unset",inputMarginLarge:"0 0 0 8px",inputMarginLargeRtl:"0 8px 0 0",selectMarginLarge:"0 0 0 8px",prefixMarginLarge:"0 8px 0 0",suffixMarginLarge:"0 0 0 8px"};function vM(e){const{textColor2:t,primaryColor:n,primaryColorHover:o,primaryColorPressed:r,inputColorDisabled:i,textColorDisabled:a,borderColor:l,borderRadius:s,fontSizeTiny:c,fontSizeSmall:u,fontSizeMedium:d,heightTiny:p,heightSmall:h,heightMedium:f}=e;return Object.assign(Object.assign({},fM),{buttonColor:"#0000",buttonColorHover:"#0000",buttonColorPressed:"#0000",buttonBorder:`1px solid ${l}`,buttonBorderHover:`1px solid ${l}`,buttonBorderPressed:`1px solid ${l}`,buttonIconColor:t,buttonIconColorHover:t,buttonIconColorPressed:t,itemTextColor:t,itemTextColorHover:o,itemTextColorPressed:r,itemTextColorActive:n,itemTextColorDisabled:a,itemColor:"#0000",itemColorHover:"#0000",itemColorPressed:"#0000",itemColorActive:"#0000",itemColorActiveHover:"#0000",itemColorDisabled:i,itemBorder:"1px solid #0000",itemBorderHover:"1px solid #0000",itemBorderPressed:"1px solid #0000",itemBorderActive:`1px solid ${n}`,itemBorderDisabled:`1px solid ${l}`,itemBorderRadius:s,itemSizeSmall:p,itemSizeMedium:h,itemSizeLarge:f,itemFontSizeSmall:c,itemFontSizeMedium:u,itemFontSizeLarge:d,jumperFontSizeSmall:c,jumperFontSizeMedium:u,jumperFontSizeLarge:d,jumperTextColor:t,jumperTextColorDisabled:a})}const mM={name:"Pagination",common:qz,peers:{Select:uM,Input:CE,Popselect:nM},self:vM},gM={name:"Pagination",common:tz,peers:{Select:dM,Input:xE,Popselect:tM},self(e){const{primaryColor:t,opacity3:n}=e,o=tg(t,{alpha:Number(n)}),r=vM(e);return r.itemBorderActive=`1px solid ${o}`,r.itemBorderDisabled="1px solid #0000",r}},bM="\n background: var(--n-item-color-hover);\n color: var(--n-item-text-color-hover);\n border: var(--n-item-border-hover);\n",yM=[rb("button","\n background: var(--n-button-color-hover);\n border: var(--n-button-border-hover);\n color: var(--n-button-icon-color-hover);\n ")],xM=nb("pagination","\n display: flex;\n vertical-align: middle;\n font-size: var(--n-item-font-size);\n flex-wrap: nowrap;\n",[nb("pagination-prefix","\n display: flex;\n align-items: center;\n margin: var(--n-prefix-margin);\n "),nb("pagination-suffix","\n display: flex;\n align-items: center;\n margin: var(--n-suffix-margin);\n "),eb("> *:not(:first-child)","\n margin: var(--n-item-margin);\n "),nb("select","\n width: var(--n-select-width);\n "),eb("&.transition-disabled",[nb("pagination-item","transition: none!important;")]),nb("pagination-quick-jumper","\n white-space: nowrap;\n display: flex;\n color: var(--n-jumper-text-color);\n transition: color .3s var(--n-bezier);\n align-items: center;\n font-size: var(--n-jumper-font-size);\n ",[nb("input","\n margin: var(--n-input-margin);\n width: var(--n-input-width);\n ")]),nb("pagination-item","\n position: relative;\n cursor: pointer;\n user-select: none;\n -webkit-user-select: none;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n min-width: var(--n-item-size);\n height: var(--n-item-size);\n padding: var(--n-item-padding);\n background-color: var(--n-item-color);\n color: var(--n-item-text-color);\n border-radius: var(--n-item-border-radius);\n border: var(--n-item-border);\n fill: var(--n-button-icon-color);\n transition:\n color .3s var(--n-bezier),\n border-color .3s var(--n-bezier),\n background-color .3s var(--n-bezier),\n fill .3s var(--n-bezier);\n ",[rb("button","\n background: var(--n-button-color);\n color: var(--n-button-icon-color);\n border: var(--n-button-border);\n padding: 0;\n ",[nb("base-icon","\n font-size: var(--n-button-icon-size);\n ")]),ib("disabled",[rb("hover",bM,yM),eb("&:hover",bM,yM),eb("&:active","\n background: var(--n-item-color-pressed);\n color: var(--n-item-text-color-pressed);\n border: var(--n-item-border-pressed);\n ",[rb("button","\n background: var(--n-button-color-pressed);\n border: var(--n-button-border-pressed);\n color: var(--n-button-icon-color-pressed);\n ")]),rb("active","\n background: var(--n-item-color-active);\n color: var(--n-item-text-color-active);\n border: var(--n-item-border-active);\n ",[eb("&:hover","\n background: var(--n-item-color-active-hover);\n ")])]),rb("disabled","\n cursor: not-allowed;\n color: var(--n-item-text-color-disabled);\n ",[rb("active, button","\n background-color: var(--n-item-color-disabled);\n border: var(--n-item-border-disabled);\n ")])]),rb("disabled","\n cursor: not-allowed;\n ",[nb("pagination-quick-jumper","\n color: var(--n-jumper-text-color-disabled);\n ")]),rb("simple","\n display: flex;\n align-items: center;\n flex-wrap: nowrap;\n ",[nb("pagination-quick-jumper",[nb("input","\n margin: 0;\n ")])])]);function CM(e){var t;if(!e)return 10;const{defaultPageSize:n}=e;if(void 0!==n)return n;const o=null===(t=e.pageSizes)||void 0===t?void 0:t[0];return"number"==typeof o?o:(null==o?void 0:o.value)||10}function wM(e,t){const n=[];for(let o=e;o<=t;++o)n.push({label:`${o}`,value:o});return n}const kM=zn({name:"Pagination",props:Object.assign(Object.assign({},I_.props),{simple:Boolean,page:Number,defaultPage:{type:Number,default:1},itemCount:Number,pageCount:Number,defaultPageCount:{type:Number,default:1},showSizePicker:Boolean,pageSize:Number,defaultPageSize:Number,pageSizes:{type:Array,default:()=>[10]},showQuickJumper:Boolean,size:{type:String,default:"medium"},disabled:Boolean,pageSlot:{type:Number,default:9},selectProps:Object,prev:Function,next:Function,goto:Function,prefix:Function,suffix:Function,label:Function,displayOrder:{type:Array,default:["pages","size-picker","quick-jumper"]},to:Yb.propTo,showQuickJumpDropdown:{type:Boolean,default:!0},"onUpdate:page":[Function,Array],onUpdatePage:[Function,Array],"onUpdate:pageSize":[Function,Array],onUpdatePageSize:[Function,Array],onPageSizeChange:[Function,Array],onChange:[Function,Array]}),setup(e){const{mergedComponentPropsRef:t,mergedClsPrefixRef:n,inlineThemeDisabled:o,mergedRtlRef:r}=B_(e),i=I_("Pagination","-pagination",xM,mM,e,n),{localeRef:a}=VP("Pagination"),l=Et(null),s=Et(e.defaultPage),c=Et(CM(e)),u=Db(jt(e,"page"),s),d=Db(jt(e,"pageSize"),c),p=ai((()=>{const{itemCount:t}=e;if(void 0!==t)return Math.max(1,Math.ceil(t/d.value));const{pageCount:n}=e;return void 0!==n?Math.max(n,1):1})),h=Et("");ir((()=>{e.simple,h.value=String(u.value)}));const f=Et(!1),v=Et(!1),m=Et(!1),g=Et(!1),b=ai((()=>function(e,t,n,o){let r=!1,i=!1,a=1,l=t;if(1===t)return{hasFastBackward:!1,hasFastForward:!1,fastForwardTo:l,fastBackwardTo:a,items:[{type:"page",label:1,active:1===e,mayBeFastBackward:!1,mayBeFastForward:!1}]};if(2===t)return{hasFastBackward:!1,hasFastForward:!1,fastForwardTo:l,fastBackwardTo:a,items:[{type:"page",label:1,active:1===e,mayBeFastBackward:!1,mayBeFastForward:!1},{type:"page",label:2,active:2===e,mayBeFastBackward:!0,mayBeFastForward:!1}]};const s=t;let c=e,u=e;const d=(n-5)/2;u+=Math.ceil(d),u=Math.min(Math.max(u,1+n-3),s-2),c-=Math.floor(d),c=Math.max(Math.min(c,s-n+3),3);let p=!1,h=!1;c>3&&(p=!0),u=2&&f.push({type:"page",label:2,mayBeFastBackward:!0,mayBeFastForward:!1,active:2===e});for(let v=c;v<=u;++v)f.push({type:"page",label:v,mayBeFastBackward:!1,mayBeFastForward:!1,active:e===v});return h?(i=!0,l=u+1,f.push({type:"fast-forward",active:!1,label:void 0,options:o?wM(u+1,s-1):null})):u===s-2&&f[f.length-1].label!==s-1&&f.push({type:"page",mayBeFastForward:!0,mayBeFastBackward:!1,label:s-1,active:e===s-1}),f[f.length-1].label!==s&&f.push({type:"page",mayBeFastForward:!1,mayBeFastBackward:!1,label:s,active:e===s}),{hasFastBackward:r,hasFastForward:i,fastBackwardTo:a,fastForwardTo:l,items:f}}(u.value,p.value,e.pageSlot,e.showQuickJumpDropdown)));ir((()=>{b.value.hasFastBackward?b.value.hasFastForward||(f.value=!1,m.value=!1):(v.value=!1,g.value=!1)}));const y=ai((()=>{const t=a.value.selectionSuffix;return e.pageSizes.map((e=>"number"==typeof e?{label:`${e} / ${t}`,value:e}:e))})),x=ai((()=>{var n,o;return(null===(o=null===(n=null==t?void 0:t.value)||void 0===n?void 0:n.Pagination)||void 0===o?void 0:o.inputSize)||vg(e.size)})),C=ai((()=>{var n,o;return(null===(o=null===(n=null==t?void 0:t.value)||void 0===n?void 0:n.Pagination)||void 0===o?void 0:o.selectSize)||vg(e.size)})),w=ai((()=>(u.value-1)*d.value)),k=ai((()=>{const t=u.value*d.value-1,{itemCount:n}=e;return void 0!==n&&t>n-1?n-1:t})),S=ai((()=>{const{itemCount:t}=e;return void 0!==t?t:(e.pageCount||1)*d.value})),_=GP("Pagination",r,n);function P(){tn((()=>{var e;const{value:t}=l;t&&(t.classList.add("transition-disabled"),null===(e=l.value)||void 0===e||e.offsetWidth,t.classList.remove("transition-disabled"))}))}function T(t){if(t===u.value)return;const{"onUpdate:page":n,onUpdatePage:o,onChange:r,simple:i}=e;n&&dg(n,t),o&&dg(o,t),r&&dg(r,t),s.value=t,i&&(h.value=String(t))}ir((()=>{u.value,d.value,P()}));const A=ai((()=>{const{size:t}=e,{self:{buttonBorder:n,buttonBorderHover:o,buttonBorderPressed:r,buttonIconColor:a,buttonIconColorHover:l,buttonIconColorPressed:s,itemTextColor:c,itemTextColorHover:u,itemTextColorPressed:d,itemTextColorActive:p,itemTextColorDisabled:h,itemColor:f,itemColorHover:v,itemColorPressed:m,itemColorActive:g,itemColorActiveHover:b,itemColorDisabled:y,itemBorder:x,itemBorderHover:C,itemBorderPressed:w,itemBorderActive:k,itemBorderDisabled:S,itemBorderRadius:_,jumperTextColor:P,jumperTextColorDisabled:T,buttonColor:A,buttonColorHover:z,buttonColorPressed:R,[ub("itemPadding",t)]:E,[ub("itemMargin",t)]:O,[ub("inputWidth",t)]:M,[ub("selectWidth",t)]:F,[ub("inputMargin",t)]:I,[ub("selectMargin",t)]:L,[ub("jumperFontSize",t)]:B,[ub("prefixMargin",t)]:D,[ub("suffixMargin",t)]:$,[ub("itemSize",t)]:N,[ub("buttonIconSize",t)]:j,[ub("itemFontSize",t)]:H,[`${ub("itemMargin",t)}Rtl`]:W,[`${ub("inputMargin",t)}Rtl`]:U},common:{cubicBezierEaseInOut:V}}=i.value;return{"--n-prefix-margin":D,"--n-suffix-margin":$,"--n-item-font-size":H,"--n-select-width":F,"--n-select-margin":L,"--n-input-width":M,"--n-input-margin":I,"--n-input-margin-rtl":U,"--n-item-size":N,"--n-item-text-color":c,"--n-item-text-color-disabled":h,"--n-item-text-color-hover":u,"--n-item-text-color-active":p,"--n-item-text-color-pressed":d,"--n-item-color":f,"--n-item-color-hover":v,"--n-item-color-disabled":y,"--n-item-color-active":g,"--n-item-color-active-hover":b,"--n-item-color-pressed":m,"--n-item-border":x,"--n-item-border-hover":C,"--n-item-border-disabled":S,"--n-item-border-active":k,"--n-item-border-pressed":w,"--n-item-padding":E,"--n-item-border-radius":_,"--n-bezier":V,"--n-jumper-font-size":B,"--n-jumper-text-color":P,"--n-jumper-text-color-disabled":T,"--n-item-margin":O,"--n-item-margin-rtl":W,"--n-button-icon-size":j,"--n-button-icon-color":a,"--n-button-icon-color-hover":l,"--n-button-icon-color-pressed":s,"--n-button-color-hover":z,"--n-button-color":A,"--n-button-color-pressed":R,"--n-button-border":n,"--n-button-border-hover":o,"--n-button-border-pressed":r}})),z=o?KP("pagination",ai((()=>{let t="";const{size:n}=e;return t+=n[0],t})),A,e):void 0;return{rtlEnabled:_,mergedClsPrefix:n,locale:a,selfRef:l,mergedPage:u,pageItems:ai((()=>b.value.items)),mergedItemCount:S,jumperValue:h,pageSizeOptions:y,mergedPageSize:d,inputSize:x,selectSize:C,mergedTheme:i,mergedPageCount:p,startIndex:w,endIndex:k,showFastForwardMenu:m,showFastBackwardMenu:g,fastForwardActive:f,fastBackwardActive:v,handleMenuSelect:e=>{T(e)},handleFastForwardMouseenter:()=>{e.disabled||(f.value=!0,P())},handleFastForwardMouseleave:()=>{e.disabled||(f.value=!1,P())},handleFastBackwardMouseenter:()=>{v.value=!0,P()},handleFastBackwardMouseleave:()=>{v.value=!1,P()},handleJumperInput:function(e){h.value=e.replace(/\D+/g,"")},handleBackwardClick:function(){e.disabled||T(Math.max(u.value-1,1))},handleForwardClick:function(){e.disabled||T(Math.min(u.value+1,p.value))},handlePageItemClick:function(t){if(!e.disabled)switch(t.type){case"page":T(t.label);break;case"fast-backward":e.disabled||T(Math.max(b.value.fastBackwardTo,1));break;case"fast-forward":e.disabled||T(Math.min(b.value.fastForwardTo,p.value))}},handleSizePickerChange:function(t){!function(t){if(t===d.value)return;const{"onUpdate:pageSize":n,onUpdatePageSize:o,onPageSizeChange:r}=e;n&&dg(n,t),o&&dg(o,t),r&&dg(r,t),c.value=t,p.value{switch(e){case"pages":return li(yr,null,li("div",{class:[`${t}-pagination-item`,!O&&`${t}-pagination-item--button`,(r<=1||r>i||n)&&`${t}-pagination-item--disabled`],onClick:_},O?O({page:r,pageSize:h,pageCount:i,startIndex:this.startIndex,endIndex:this.endIndex,itemCount:this.mergedItemCount}):li(CT,{clsPrefix:t},{default:()=>this.rtlEnabled?li(cT,null):li(ZP,null)})),m?li(yr,null,li("div",{class:`${t}-pagination-quick-jumper`},li(AE,{value:v,onUpdateValue:k,size:d,placeholder:"",disabled:n,theme:c.peers.Input,themeOverrides:c.peerOverrides.Input,onChange:A}))," /"," ",i):a.map(((e,o)=>{let r,i,a;const{type:l}=e;switch(l){case"page":const n=e.label;r=F?F({type:"page",node:n,active:e.active}):n;break;case"fast-forward":const o=this.fastForwardActive?li(CT,{clsPrefix:t},{default:()=>this.rtlEnabled?li(aT,null):li(lT,null)}):li(CT,{clsPrefix:t},{default:()=>li(dT,null)});r=F?F({type:"fast-forward",node:o,active:this.fastForwardActive||this.showFastForwardMenu}):o,i=this.handleFastForwardMouseenter,a=this.handleFastForwardMouseleave;break;case"fast-backward":const l=this.fastBackwardActive?li(CT,{clsPrefix:t},{default:()=>this.rtlEnabled?li(lT,null):li(aT,null)}):li(CT,{clsPrefix:t},{default:()=>li(dT,null)});r=F?F({type:"fast-backward",node:l,active:this.fastBackwardActive||this.showFastBackwardMenu}):l,i=this.handleFastBackwardMouseenter,a=this.handleFastBackwardMouseleave}const s=li("div",{key:o,class:[`${t}-pagination-item`,e.active&&`${t}-pagination-item--active`,"page"!==l&&("fast-backward"===l&&this.showFastBackwardMenu||"fast-forward"===l&&this.showFastForwardMenu)&&`${t}-pagination-item--hover`,n&&`${t}-pagination-item--disabled`,"page"===l&&`${t}-pagination-item--clickable`],onClick:()=>{P(e)},onMouseenter:i,onMouseleave:a},r);if("page"!==l||e.mayBeFastBackward||e.mayBeFastForward){const t="page"===e.type?e.mayBeFastBackward?"fast-backward":"fast-forward":e.type;return"page"===e.type||e.options?li(sM,{to:this.to,key:t,disabled:n,trigger:"hover",virtualScroll:!0,style:{width:"60px"},theme:c.peers.Popselect,themeOverrides:c.peerOverrides.Popselect,builtinThemeOverrides:{peers:{InternalSelectMenu:{height:"calc(var(--n-option-height) * 4.6)"}}},nodeProps:()=>({style:{justifyContent:"center"}}),show:"page"!==l&&("fast-backward"===l?this.showFastBackwardMenu:this.showFastForwardMenu),onUpdateShow:e=>{"page"!==l&&(e?"fast-backward"===l?this.showFastBackwardMenu=e:this.showFastForwardMenu=e:(this.showFastBackwardMenu=!1,this.showFastForwardMenu=!1))},options:"page"!==e.type&&e.options?e.options:[],onUpdateValue:this.handleMenuSelect,scrollable:!0,showCheckmark:!1},{default:()=>s}):s}return s})),li("div",{class:[`${t}-pagination-item`,!M&&`${t}-pagination-item--button`,{[`${t}-pagination-item--disabled`]:r<1||r>=i||n}],onClick:T},M?M({page:r,pageSize:h,pageCount:i,itemCount:this.mergedItemCount,startIndex:this.startIndex,endIndex:this.endIndex}):li(CT,{clsPrefix:t},{default:()=>this.rtlEnabled?li(ZP,null):li(cT,null)})));case"size-picker":return!m&&l?li(hM,Object.assign({consistentMenuWidth:!1,placeholder:"",showCheckmark:!1,to:this.to},this.selectProps,{size:p,options:f,value:h,disabled:n,theme:c.peers.Select,themeOverrides:c.peerOverrides.Select,onUpdateValue:S})):null;case"quick-jumper":return!m&&s?li("div",{class:`${t}-pagination-quick-jumper`},w?w():xg(this.$slots.goto,(()=>[u.goto])),li(AE,{value:v,onUpdateValue:k,size:d,placeholder:"",disabled:n,theme:c.peers.Input,themeOverrides:c.peerOverrides.Input,onChange:A})):null;default:return null}})),E?li("div",{class:`${t}-pagination-suffix`},E({page:r,pageSize:h,pageCount:i,startIndex:this.startIndex,endIndex:this.endIndex,itemCount:this.mergedItemCount})):null)}}),SM={padding:"8px 14px"},_M={name:"Tooltip",common:tz,peers:{Popover:_R},self(e){const{borderRadius:t,boxShadow2:n,popoverColor:o,textColor2:r}=e;return Object.assign(Object.assign({},SM),{borderRadius:t,boxShadow:n,color:o,textColor:r})}},PM={name:"Tooltip",common:qz,peers:{Popover:SR},self:function(e){const{borderRadius:t,boxShadow2:n,baseColor:o}=e;return Object.assign(Object.assign({},SM),{borderRadius:t,boxShadow:n,color:eg(o,"rgba(0, 0, 0, .85)"),textColor:o})}},TM={name:"Ellipsis",common:tz,peers:{Tooltip:_M}},AM={name:"Ellipsis",common:qz,peers:{Tooltip:PM}},zM={radioSizeSmall:"14px",radioSizeMedium:"16px",radioSizeLarge:"18px",labelPadding:"0 8px",labelFontWeight:"400"},RM={name:"Radio",common:tz,self(e){const{borderColor:t,primaryColor:n,baseColor:o,textColorDisabled:r,inputColorDisabled:i,textColor2:a,opacityDisabled:l,borderRadius:s,fontSizeSmall:c,fontSizeMedium:u,fontSizeLarge:d,heightSmall:p,heightMedium:h,heightLarge:f,lineHeight:v}=e;return Object.assign(Object.assign({},zM),{labelLineHeight:v,buttonHeightSmall:p,buttonHeightMedium:h,buttonHeightLarge:f,fontSizeSmall:c,fontSizeMedium:u,fontSizeLarge:d,boxShadow:`inset 0 0 0 1px ${t}`,boxShadowActive:`inset 0 0 0 1px ${n}`,boxShadowFocus:`inset 0 0 0 1px ${n}, 0 0 0 2px ${tg(n,{alpha:.3})}`,boxShadowHover:`inset 0 0 0 1px ${n}`,boxShadowDisabled:`inset 0 0 0 1px ${t}`,color:"#0000",colorDisabled:i,colorActive:"#0000",textColor:a,textColorDisabled:r,dotColorActive:n,dotColorDisabled:t,buttonBorderColor:t,buttonBorderColorActive:n,buttonBorderColorHover:n,buttonColor:"#0000",buttonColorActive:n,buttonTextColor:a,buttonTextColorActive:o,buttonTextColorHover:n,opacityDisabled:l,buttonBoxShadowFocus:`inset 0 0 0 1px ${n}, 0 0 0 2px ${tg(n,{alpha:.3})}`,buttonBoxShadowHover:`inset 0 0 0 1px ${n}`,buttonBoxShadow:"inset 0 0 0 1px #0000",buttonBorderRadius:s})}},EM={name:"Radio",common:qz,self:function(e){const{borderColor:t,primaryColor:n,baseColor:o,textColorDisabled:r,inputColorDisabled:i,textColor2:a,opacityDisabled:l,borderRadius:s,fontSizeSmall:c,fontSizeMedium:u,fontSizeLarge:d,heightSmall:p,heightMedium:h,heightLarge:f,lineHeight:v}=e;return Object.assign(Object.assign({},zM),{labelLineHeight:v,buttonHeightSmall:p,buttonHeightMedium:h,buttonHeightLarge:f,fontSizeSmall:c,fontSizeMedium:u,fontSizeLarge:d,boxShadow:`inset 0 0 0 1px ${t}`,boxShadowActive:`inset 0 0 0 1px ${n}`,boxShadowFocus:`inset 0 0 0 1px ${n}, 0 0 0 2px ${tg(n,{alpha:.2})}`,boxShadowHover:`inset 0 0 0 1px ${n}`,boxShadowDisabled:`inset 0 0 0 1px ${t}`,color:o,colorDisabled:i,colorActive:"#0000",textColor:a,textColorDisabled:r,dotColorActive:n,dotColorDisabled:t,buttonBorderColor:t,buttonBorderColorActive:n,buttonBorderColorHover:t,buttonColor:o,buttonColorActive:o,buttonTextColor:a,buttonTextColorActive:n,buttonTextColorHover:n,opacityDisabled:l,buttonBoxShadowFocus:`inset 0 0 0 1px ${n}, 0 0 0 2px ${tg(n,{alpha:.3})}`,buttonBoxShadowHover:"inset 0 0 0 1px #0000",buttonBoxShadow:"inset 0 0 0 1px #0000",buttonBorderRadius:s})}},OM={padding:"4px 0",optionIconSizeSmall:"14px",optionIconSizeMedium:"16px",optionIconSizeLarge:"16px",optionIconSizeHuge:"18px",optionSuffixWidthSmall:"14px",optionSuffixWidthMedium:"14px",optionSuffixWidthLarge:"16px",optionSuffixWidthHuge:"16px",optionIconSuffixWidthSmall:"32px",optionIconSuffixWidthMedium:"32px",optionIconSuffixWidthLarge:"36px",optionIconSuffixWidthHuge:"36px",optionPrefixWidthSmall:"14px",optionPrefixWidthMedium:"14px",optionPrefixWidthLarge:"16px",optionPrefixWidthHuge:"16px",optionIconPrefixWidthSmall:"36px",optionIconPrefixWidthMedium:"36px",optionIconPrefixWidthLarge:"40px",optionIconPrefixWidthHuge:"40px"};function MM(e){const{primaryColor:t,textColor2:n,dividerColor:o,hoverColor:r,popoverColor:i,invertedColor:a,borderRadius:l,fontSizeSmall:s,fontSizeMedium:c,fontSizeLarge:u,fontSizeHuge:d,heightSmall:p,heightMedium:h,heightLarge:f,heightHuge:v,textColor3:m,opacityDisabled:g}=e;return Object.assign(Object.assign({},OM),{optionHeightSmall:p,optionHeightMedium:h,optionHeightLarge:f,optionHeightHuge:v,borderRadius:l,fontSizeSmall:s,fontSizeMedium:c,fontSizeLarge:u,fontSizeHuge:d,optionTextColor:n,optionTextColorHover:n,optionTextColorActive:t,optionTextColorChildActive:t,color:i,dividerColor:o,suffixColor:n,prefixColor:n,optionColorHover:r,optionColorActive:tg(t,{alpha:.1}),groupHeaderTextColor:m,optionTextColorInverted:"#BBB",optionTextColorHoverInverted:"#FFF",optionTextColorActiveInverted:"#FFF",optionTextColorChildActiveInverted:"#FFF",colorInverted:a,dividerColorInverted:"#BBB",suffixColorInverted:"#BBB",prefixColorInverted:"#BBB",optionColorHoverInverted:t,optionColorActiveInverted:t,groupHeaderTextColorInverted:"#AAA",optionOpacityDisabled:g})}const FM={name:"Dropdown",common:qz,peers:{Popover:SR},self:MM},IM={name:"Dropdown",common:tz,peers:{Popover:_R},self(e){const{primaryColorSuppl:t,primaryColor:n,popoverColor:o}=e,r=MM(e);return r.colorInverted=o,r.optionColorActive=tg(n,{alpha:.15}),r.optionColorActiveInverted=t,r.optionColorHoverInverted=t,r}},LM={thPaddingSmall:"8px",thPaddingMedium:"12px",thPaddingLarge:"12px",tdPaddingSmall:"8px",tdPaddingMedium:"12px",tdPaddingLarge:"12px",sorterSize:"15px",resizableContainerSize:"8px",resizableSize:"2px",filterSize:"15px",paginationMargin:"12px 0 0 0",emptyPadding:"48px 0",actionPadding:"8px 12px",actionButtonMargin:"0 8px 0 0"};function BM(e){const{cardColor:t,modalColor:n,popoverColor:o,textColor2:r,textColor1:i,tableHeaderColor:a,tableColorHover:l,iconColor:s,primaryColor:c,fontWeightStrong:u,borderRadius:d,lineHeight:p,fontSizeSmall:h,fontSizeMedium:f,fontSizeLarge:v,dividerColor:m,heightSmall:g,opacityDisabled:b,tableColorStriped:y}=e;return Object.assign(Object.assign({},LM),{actionDividerColor:m,lineHeight:p,borderRadius:d,fontSizeSmall:h,fontSizeMedium:f,fontSizeLarge:v,borderColor:eg(t,m),tdColorHover:eg(t,l),tdColorSorting:eg(t,l),tdColorStriped:eg(t,y),thColor:eg(t,a),thColorHover:eg(eg(t,a),l),thColorSorting:eg(eg(t,a),l),tdColor:t,tdTextColor:r,thTextColor:i,thFontWeight:u,thButtonColorHover:l,thIconColor:s,thIconColorActive:c,borderColorModal:eg(n,m),tdColorHoverModal:eg(n,l),tdColorSortingModal:eg(n,l),tdColorStripedModal:eg(n,y),thColorModal:eg(n,a),thColorHoverModal:eg(eg(n,a),l),thColorSortingModal:eg(eg(n,a),l),tdColorModal:n,borderColorPopover:eg(o,m),tdColorHoverPopover:eg(o,l),tdColorSortingPopover:eg(o,l),tdColorStripedPopover:eg(o,y),thColorPopover:eg(o,a),thColorHoverPopover:eg(eg(o,a),l),thColorSortingPopover:eg(eg(o,a),l),tdColorPopover:o,boxShadowBefore:"inset -12px 0 8px -12px rgba(0, 0, 0, .18)",boxShadowAfter:"inset 12px 0 8px -12px rgba(0, 0, 0, .18)",loadingColor:c,loadingSize:g,opacityLoading:b})}const DM={name:"DataTable",common:qz,peers:{Button:JE,Checkbox:NO,Radio:EM,Pagination:mM,Scrollbar:tR,Empty:Xz,Popover:SR,Ellipsis:AM,Dropdown:FM},self:BM},$M={name:"DataTable",common:tz,peers:{Button:eO,Checkbox:jO,Radio:RM,Pagination:gM,Scrollbar:nR,Empty:Yz,Popover:_R,Ellipsis:TM,Dropdown:IM},self(e){const t=BM(e);return t.boxShadowAfter="inset 12px 0 8px -12px rgba(0, 0, 0, .36)",t.boxShadowBefore="inset -12px 0 8px -12px rgba(0, 0, 0, .36)",t}},NM=zn({name:"Tooltip",props:Object.assign(Object.assign({},DR),I_.props),__popover__:!0,setup(e){const{mergedClsPrefixRef:t}=B_(e),n=I_("Tooltip","-tooltip",void 0,PM,e,t),o=Et(null),r={syncPosition(){o.value.syncPosition()},setShow(e){o.value.setShow(e)}};return Object.assign(Object.assign({},r),{popoverRef:o,mergedTheme:n,popoverThemeOverrides:ai((()=>n.value.self))})},render(){const{mergedTheme:e,internalExtraClass:t}=this;return li($R,Object.assign(Object.assign({},this.$props),{theme:e.peers.Popover,themeOverrides:e.peerOverrides.Popover,builtinThemeOverrides:this.popoverThemeOverrides,internalExtraClass:t.concat("tooltip"),ref:"popoverRef"}),this.$slots)}}),jM=nb("ellipsis",{overflow:"hidden"},[ib("line-clamp","\n white-space: nowrap;\n display: inline-block;\n vertical-align: bottom;\n max-width: 100%;\n "),rb("line-clamp","\n display: -webkit-inline-box;\n -webkit-box-orient: vertical;\n "),rb("cursor-pointer","\n cursor: pointer;\n ")]);function HM(e){return`${e}-ellipsis--line-clamp`}function WM(e,t){return`${e}-ellipsis--cursor-${t}`}const UM=Object.assign(Object.assign({},I_.props),{expandTrigger:String,lineClamp:[Number,String],tooltip:{type:[Boolean,Object],default:!0}}),VM=zn({name:"Ellipsis",inheritAttrs:!1,props:UM,setup(e,{slots:t,attrs:n}){const o=D_(),r=I_("Ellipsis","-ellipsis",jM,AM,e,o),i=Et(null),a=Et(null),l=Et(null),s=Et(!1),c=ai((()=>{const{lineClamp:t}=e,{value:n}=s;return void 0!==t?{textOverflow:"","-webkit-line-clamp":n?"":t}:{textOverflow:n?"":"ellipsis","-webkit-line-clamp":""}}));function u(){let t=!1;const{value:n}=s;if(n)return!0;const{value:r}=i;if(r){const{lineClamp:n}=e;if(function(t){if(!t)return;const n=c.value,r=HM(o.value);void 0!==e.lineClamp?p(t,r,"add"):p(t,r,"remove");for(const e in n)t.style[e]!==n[e]&&(t.style[e]=n[e])}(r),void 0!==n)t=r.scrollHeight<=r.offsetHeight;else{const{value:e}=a;e&&(t=e.getBoundingClientRect().width<=r.getBoundingClientRect().width)}!function(t,n){const r=WM(o.value,"pointer");"click"!==e.expandTrigger||n?p(t,r,"remove"):p(t,r,"add")}(r,t)}return t}const d=ai((()=>"click"===e.expandTrigger?()=>{var e;const{value:t}=s;t&&(null===(e=l.value)||void 0===e||e.setShow(!1)),s.value=!t}:void 0));function p(e,t,n){"add"===n?e.classList.contains(t)||e.classList.add(t):e.classList.contains(t)&&e.classList.remove(t)}return Mn((()=>{var t;e.tooltip&&(null===(t=l.value)||void 0===t||t.setShow(!1))})),{mergedTheme:r,triggerRef:i,triggerInnerRef:a,tooltipRef:l,handleClick:d,renderTrigger:()=>li("span",Object.assign({},Wr(n,{class:[`${o.value}-ellipsis`,void 0!==e.lineClamp?HM(o.value):void 0,"click"===e.expandTrigger?WM(o.value,"pointer"):void 0],style:c.value}),{ref:"triggerRef",onClick:d.value,onMouseenter:"click"===e.expandTrigger?u:void 0}),e.lineClamp?t:li("span",{ref:"triggerInnerRef"},t)),getTooltipDisabled:u}},render(){var e;const{tooltip:t,renderTrigger:n,$slots:o}=this;if(t){const{mergedTheme:r}=this;return li(NM,Object.assign({ref:"tooltipRef",placement:"top"},t,{getDisabled:this.getTooltipDisabled,theme:r.peers.Tooltip,themeOverrides:r.peerOverrides.Tooltip}),{trigger:n,default:null!==(e=o.tooltip)&&void 0!==e?e:o.default})}return n()}}),qM=zn({name:"PerformantEllipsis",props:UM,inheritAttrs:!1,setup(e,{attrs:t,slots:n}){const o=Et(!1),r=D_();return qP("-ellipsis",jM,r),{mouseEntered:o,renderTrigger:()=>{const{lineClamp:i}=e,a=r.value;return li("span",Object.assign({},Wr(t,{class:[`${a}-ellipsis`,void 0!==i?HM(a):void 0,"click"===e.expandTrigger?WM(a,"pointer"):void 0],style:void 0===i?{textOverflow:"ellipsis"}:{"-webkit-line-clamp":i}}),{onMouseenter:()=>{o.value=!0}}),i?n:li("span",null,n))}}},render(){return this.mouseEntered?li(VM,Wr({},this.$attrs,this.$props),this.$slots):this.renderTrigger()}}),KM=Object.assign(Object.assign({},I_.props),{onUnstableColumnResize:Function,pagination:{type:[Object,Boolean],default:!1},paginateSinglePage:{type:Boolean,default:!0},minHeight:[Number,String],maxHeight:[Number,String],columns:{type:Array,default:()=>[]},rowClassName:[String,Function],rowProps:Function,rowKey:Function,summary:[Function],data:{type:Array,default:()=>[]},loading:Boolean,bordered:{type:Boolean,default:void 0},bottomBordered:{type:Boolean,default:void 0},striped:Boolean,scrollX:[Number,String],defaultCheckedRowKeys:{type:Array,default:()=>[]},checkedRowKeys:Array,singleLine:{type:Boolean,default:!0},singleColumn:Boolean,size:{type:String,default:"medium"},remote:Boolean,defaultExpandedRowKeys:{type:Array,default:[]},defaultExpandAll:Boolean,expandedRowKeys:Array,stickyExpandedRows:Boolean,virtualScroll:Boolean,tableLayout:{type:String,default:"auto"},allowCheckingNotLoaded:Boolean,cascade:{type:Boolean,default:!0},childrenKey:{type:String,default:"children"},indent:{type:Number,default:16},flexHeight:Boolean,summaryPlacement:{type:String,default:"bottom"},paginationBehaviorOnFilter:{type:String,default:"current"},filterIconPopoverProps:Object,scrollbarProps:Object,renderCell:Function,renderExpandIcon:Function,spinProps:{type:Object,default:{}},onLoad:Function,"onUpdate:page":[Function,Array],onUpdatePage:[Function,Array],"onUpdate:pageSize":[Function,Array],onUpdatePageSize:[Function,Array],"onUpdate:sorter":[Function,Array],onUpdateSorter:[Function,Array],"onUpdate:filters":[Function,Array],onUpdateFilters:[Function,Array],"onUpdate:checkedRowKeys":[Function,Array],onUpdateCheckedRowKeys:[Function,Array],"onUpdate:expandedRowKeys":[Function,Array],onUpdateExpandedRowKeys:[Function,Array],onScroll:Function,onPageChange:[Function,Array],onPageSizeChange:[Function,Array],onSorterChange:[Function,Array],onFiltersChange:[Function,Array],onCheckedRowKeysChange:[Function,Array]}),GM="n-data-table",XM=zn({name:"DataTableRenderSorter",props:{render:{type:Function,required:!0},order:{type:[String,Boolean],default:!1}},render(){const{render:e,order:t}=this;return e({order:t})}}),YM=zn({name:"SortIcon",props:{column:{type:Object,required:!0}},setup(e){const{mergedComponentPropsRef:t}=B_(),{mergedSortStateRef:n,mergedClsPrefixRef:o}=Po(GM),r=ai((()=>n.value.find((t=>t.columnKey===e.column.key)))),i=ai((()=>void 0!==r.value)),a=ai((()=>{const{value:e}=r;return!(!e||!i.value)&&e.order})),l=ai((()=>{var n,o;return(null===(o=null===(n=null==t?void 0:t.value)||void 0===n?void 0:n.DataTable)||void 0===o?void 0:o.renderSorter)||e.column.renderSorter}));return{mergedClsPrefix:o,active:i,mergedSortOrder:a,mergedRenderSorter:l}},render(){const{mergedRenderSorter:e,mergedSortOrder:t,mergedClsPrefix:n}=this,{renderSorterIcon:o}=this.column;return e?li(XM,{render:e,order:t}):li("span",{class:[`${n}-data-table-sorter`,"ascend"===t&&`${n}-data-table-sorter--asc`,"descend"===t&&`${n}-data-table-sorter--desc`]},o?o({order:t}):li(CT,{clsPrefix:n},{default:()=>li(YP,null)}))}}),QM={name:String,value:{type:[String,Number,Boolean],default:"on"},checked:{type:Boolean,default:void 0},defaultChecked:Boolean,disabled:{type:Boolean,default:void 0},label:String,size:String,onUpdateChecked:[Function,Array],"onUpdate:checked":[Function,Array],checkedValue:{type:Boolean,default:void 0}},ZM="n-radio-group";function JM(e){const t=Po(ZM,null),n=eC(e,{mergedSize(n){const{size:o}=e;if(void 0!==o)return o;if(t){const{mergedSizeRef:{value:e}}=t;if(void 0!==e)return e}return n?n.mergedSize.value:"medium"},mergedDisabled:n=>!!e.disabled||!!(null==t?void 0:t.disabledRef.value)||!!(null==n?void 0:n.disabled.value)}),{mergedSizeRef:o,mergedDisabledRef:r}=n,i=Et(null),a=Et(null),l=Et(e.defaultChecked),s=Db(jt(e,"checked"),l),c=mb((()=>t?t.valueRef.value===e.value:s.value)),u=mb((()=>{const{name:n}=e;return void 0!==n?n:t?t.nameRef.value:void 0})),d=Et(!1);function p(){r.value||c.value||function(){if(t){const{doUpdateValue:n}=t,{value:o}=e;dg(n,o)}else{const{onUpdateChecked:t,"onUpdate:checked":o}=e,{nTriggerFormInput:r,nTriggerFormChange:i}=n;t&&dg(t,!0),o&&dg(o,!0),r(),i(),l.value=!0}}()}return{mergedClsPrefix:t?t.mergedClsPrefixRef:B_(e).mergedClsPrefixRef,inputRef:i,labelRef:a,mergedName:u,mergedDisabled:r,renderSafeChecked:c,focus:d,mergedSize:o,handleRadioInputChange:function(){p(),i.value&&(i.value.checked=c.value)},handleRadioInputBlur:function(){d.value=!1},handleRadioInputFocus:function(){d.value=!0}}}const eF=nb("radio","\n line-height: var(--n-label-line-height);\n outline: none;\n position: relative;\n user-select: none;\n -webkit-user-select: none;\n display: inline-flex;\n align-items: flex-start;\n flex-wrap: nowrap;\n font-size: var(--n-font-size);\n word-break: break-word;\n",[rb("checked",[ob("dot","\n background-color: var(--n-color-active);\n ")]),ob("dot-wrapper","\n position: relative;\n flex-shrink: 0;\n flex-grow: 0;\n width: var(--n-radio-size);\n "),nb("radio-input","\n position: absolute;\n border: 0;\n border-radius: inherit;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n opacity: 0;\n z-index: 1;\n cursor: pointer;\n "),ob("dot","\n position: absolute;\n top: 50%;\n left: 0;\n transform: translateY(-50%);\n height: var(--n-radio-size);\n width: var(--n-radio-size);\n background: var(--n-color);\n box-shadow: var(--n-box-shadow);\n border-radius: 50%;\n transition:\n background-color .3s var(--n-bezier),\n box-shadow .3s var(--n-bezier);\n ",[eb("&::before",'\n content: "";\n opacity: 0;\n position: absolute;\n left: 4px;\n top: 4px;\n height: calc(100% - 8px);\n width: calc(100% - 8px);\n border-radius: 50%;\n transform: scale(.8);\n background: var(--n-dot-color-active);\n transition: \n opacity .3s var(--n-bezier),\n background-color .3s var(--n-bezier),\n transform .3s var(--n-bezier);\n '),rb("checked",{boxShadow:"var(--n-box-shadow-active)"},[eb("&::before","\n opacity: 1;\n transform: scale(1);\n ")])]),ob("label","\n color: var(--n-text-color);\n padding: var(--n-label-padding);\n font-weight: var(--n-label-font-weight);\n display: inline-block;\n transition: color .3s var(--n-bezier);\n "),ib("disabled","\n cursor: pointer;\n ",[eb("&:hover",[ob("dot",{boxShadow:"var(--n-box-shadow-hover)"})]),rb("focus",[eb("&:not(:active)",[ob("dot",{boxShadow:"var(--n-box-shadow-focus)"})])])]),rb("disabled","\n cursor: not-allowed;\n ",[ob("dot",{boxShadow:"var(--n-box-shadow-disabled)",backgroundColor:"var(--n-color-disabled)"},[eb("&::before",{backgroundColor:"var(--n-dot-color-disabled)"}),rb("checked","\n opacity: 1;\n ")]),ob("label",{color:"var(--n-text-color-disabled)"}),nb("radio-input","\n cursor: not-allowed;\n ")])]),tF=zn({name:"Radio",props:Object.assign(Object.assign({},I_.props),QM),setup(e){const t=JM(e),n=I_("Radio","-radio",eF,EM,e,t.mergedClsPrefix),o=ai((()=>{const{mergedSize:{value:e}}=t,{common:{cubicBezierEaseInOut:o},self:{boxShadow:r,boxShadowActive:i,boxShadowDisabled:a,boxShadowFocus:l,boxShadowHover:s,color:c,colorDisabled:u,colorActive:d,textColor:p,textColorDisabled:h,dotColorActive:f,dotColorDisabled:v,labelPadding:m,labelLineHeight:g,labelFontWeight:b,[ub("fontSize",e)]:y,[ub("radioSize",e)]:x}}=n.value;return{"--n-bezier":o,"--n-label-line-height":g,"--n-label-font-weight":b,"--n-box-shadow":r,"--n-box-shadow-active":i,"--n-box-shadow-disabled":a,"--n-box-shadow-focus":l,"--n-box-shadow-hover":s,"--n-color":c,"--n-color-active":d,"--n-color-disabled":u,"--n-dot-color-active":f,"--n-dot-color-disabled":v,"--n-font-size":y,"--n-radio-size":x,"--n-text-color":p,"--n-text-color-disabled":h,"--n-label-padding":m}})),{inlineThemeDisabled:r,mergedClsPrefixRef:i,mergedRtlRef:a}=B_(e),l=GP("Radio",a,i),s=r?KP("radio",ai((()=>t.mergedSize.value[0])),o,e):void 0;return Object.assign(t,{rtlEnabled:l,cssVars:r?void 0:o,themeClass:null==s?void 0:s.themeClass,onRender:null==s?void 0:s.onRender})},render(){const{$slots:e,mergedClsPrefix:t,onRender:n,label:o}=this;return null==n||n(),li("label",{class:[`${t}-radio`,this.themeClass,this.rtlEnabled&&`${t}-radio--rtl`,this.mergedDisabled&&`${t}-radio--disabled`,this.renderSafeChecked&&`${t}-radio--checked`,this.focus&&`${t}-radio--focus`],style:this.cssVars},li("input",{ref:"inputRef",type:"radio",class:`${t}-radio-input`,value:this.value,name:this.mergedName,checked:this.renderSafeChecked,disabled:this.mergedDisabled,onChange:this.handleRadioInputChange,onFocus:this.handleRadioInputFocus,onBlur:this.handleRadioInputBlur}),li("div",{class:`${t}-radio__dot-wrapper`}," ",li("div",{class:[`${t}-radio__dot`,this.renderSafeChecked&&`${t}-radio__dot--checked`]})),wg(e.default,(e=>e||o?li("div",{ref:"labelRef",class:`${t}-radio__label`},e||o):null)))}}),nF=nb("radio-group","\n display: inline-block;\n font-size: var(--n-font-size);\n",[ob("splitor","\n display: inline-block;\n vertical-align: bottom;\n width: 1px;\n transition:\n background-color .3s var(--n-bezier),\n opacity .3s var(--n-bezier);\n background: var(--n-button-border-color);\n ",[rb("checked",{backgroundColor:"var(--n-button-border-color-active)"}),rb("disabled",{opacity:"var(--n-opacity-disabled)"})]),rb("button-group","\n white-space: nowrap;\n height: var(--n-height);\n line-height: var(--n-height);\n ",[nb("radio-button",{height:"var(--n-height)",lineHeight:"var(--n-height)"}),ob("splitor",{height:"var(--n-height)"})]),nb("radio-button","\n vertical-align: bottom;\n outline: none;\n position: relative;\n user-select: none;\n -webkit-user-select: none;\n display: inline-block;\n box-sizing: border-box;\n padding-left: 14px;\n padding-right: 14px;\n white-space: nowrap;\n transition:\n background-color .3s var(--n-bezier),\n opacity .3s var(--n-bezier),\n border-color .3s var(--n-bezier),\n color .3s var(--n-bezier);\n background: var(--n-button-color);\n color: var(--n-button-text-color);\n border-top: 1px solid var(--n-button-border-color);\n border-bottom: 1px solid var(--n-button-border-color);\n ",[nb("radio-input","\n pointer-events: none;\n position: absolute;\n border: 0;\n border-radius: inherit;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n opacity: 0;\n z-index: 1;\n "),ob("state-border","\n z-index: 1;\n pointer-events: none;\n position: absolute;\n box-shadow: var(--n-button-box-shadow);\n transition: box-shadow .3s var(--n-bezier);\n left: -1px;\n bottom: -1px;\n right: -1px;\n top: -1px;\n "),eb("&:first-child","\n border-top-left-radius: var(--n-button-border-radius);\n border-bottom-left-radius: var(--n-button-border-radius);\n border-left: 1px solid var(--n-button-border-color);\n ",[ob("state-border","\n border-top-left-radius: var(--n-button-border-radius);\n border-bottom-left-radius: var(--n-button-border-radius);\n ")]),eb("&:last-child","\n border-top-right-radius: var(--n-button-border-radius);\n border-bottom-right-radius: var(--n-button-border-radius);\n border-right: 1px solid var(--n-button-border-color);\n ",[ob("state-border","\n border-top-right-radius: var(--n-button-border-radius);\n border-bottom-right-radius: var(--n-button-border-radius);\n ")]),ib("disabled","\n cursor: pointer;\n ",[eb("&:hover",[ob("state-border","\n transition: box-shadow .3s var(--n-bezier);\n box-shadow: var(--n-button-box-shadow-hover);\n "),ib("checked",{color:"var(--n-button-text-color-hover)"})]),rb("focus",[eb("&:not(:active)",[ob("state-border",{boxShadow:"var(--n-button-box-shadow-focus)"})])])]),rb("checked","\n background: var(--n-button-color-active);\n color: var(--n-button-text-color-active);\n border-color: var(--n-button-border-color-active);\n "),rb("disabled","\n cursor: not-allowed;\n opacity: var(--n-opacity-disabled);\n ")])]),oF=zn({name:"RadioGroup",props:Object.assign(Object.assign({},I_.props),{name:String,value:[String,Number,Boolean],defaultValue:{type:[String,Number,Boolean],default:null},size:String,disabled:{type:Boolean,default:void 0},"onUpdate:value":[Function,Array],onUpdateValue:[Function,Array]}),setup(e){const t=Et(null),{mergedSizeRef:n,mergedDisabledRef:o,nTriggerFormChange:r,nTriggerFormInput:i,nTriggerFormBlur:a,nTriggerFormFocus:l}=eC(e),{mergedClsPrefixRef:s,inlineThemeDisabled:c,mergedRtlRef:u}=B_(e),d=I_("Radio","-radio-group",nF,EM,e,s),p=Et(e.defaultValue),h=Db(jt(e,"value"),p);_o(ZM,{mergedClsPrefixRef:s,nameRef:jt(e,"name"),valueRef:h,disabledRef:o,mergedSizeRef:n,doUpdateValue:function(t){const{onUpdateValue:n,"onUpdate:value":o}=e;n&&dg(n,t),o&&dg(o,t),p.value=t,r(),i()}});const f=GP("Radio",u,s),v=ai((()=>{const{value:e}=n,{common:{cubicBezierEaseInOut:t},self:{buttonBorderColor:o,buttonBorderColorActive:r,buttonBorderRadius:i,buttonBoxShadow:a,buttonBoxShadowFocus:l,buttonBoxShadowHover:s,buttonColor:c,buttonColorActive:u,buttonTextColor:p,buttonTextColorActive:h,buttonTextColorHover:f,opacityDisabled:v,[ub("buttonHeight",e)]:m,[ub("fontSize",e)]:g}}=d.value;return{"--n-font-size":g,"--n-bezier":t,"--n-button-border-color":o,"--n-button-border-color-active":r,"--n-button-border-radius":i,"--n-button-box-shadow":a,"--n-button-box-shadow-focus":l,"--n-button-box-shadow-hover":s,"--n-button-color":c,"--n-button-color-active":u,"--n-button-text-color":p,"--n-button-text-color-hover":f,"--n-button-text-color-active":h,"--n-height":m,"--n-opacity-disabled":v}})),m=c?KP("radio-group",ai((()=>n.value[0])),v,e):void 0;return{selfElRef:t,rtlEnabled:f,mergedClsPrefix:s,mergedValue:h,handleFocusout:function(e){const{value:n}=t;n&&(n.contains(e.relatedTarget)||a())},handleFocusin:function(e){const{value:n}=t;n&&(n.contains(e.relatedTarget)||l())},cssVars:c?void 0:v,themeClass:null==m?void 0:m.themeClass,onRender:null==m?void 0:m.onRender}},render(){var e;const{mergedValue:t,mergedClsPrefix:n,handleFocusin:o,handleFocusout:r}=this,{children:i,isButtonGroup:a}=function(e,t,n){var o;const r=[];let i=!1;for(let a=0;at||this.label?li("div",{ref:"labelRef",class:`${e}-radio__label`},t||this.label):null)))}});function iF(e){return"selection"===e.type||"expand"===e.type?void 0===e.width?40:Im(e.width):"children"in e?void 0:"string"==typeof e.width?Im(e.width):e.width}function aF(e){return"selection"===e.type?"__n_selection__":"expand"===e.type?"__n_expand__":e.key}function lF(e){return e&&"object"==typeof e?Object.assign({},e):e}function sF(e,t){if(void 0!==t)return{width:t,minWidth:t,maxWidth:t};const n=function(e){var t,n;return"selection"===e.type?Ag(null!==(t=e.width)&&void 0!==t?t:40):"expand"===e.type?Ag(null!==(n=e.width)&&void 0!==n?n:40):"children"in e?void 0:Ag(e.width)}(e),{minWidth:o,maxWidth:r}=e;return{width:n,minWidth:Ag(o)||n,maxWidth:Ag(r)}}function cF(e){return void 0!==e.filterOptionValues||void 0===e.filterOptionValue&&void 0!==e.defaultFilterOptionValues}function uF(e){return!("children"in e)&&!!e.sorter}function dF(e){return!("children"in e&&e.children.length||!e.resizable)}function pF(e){return!("children"in e)&&!(!e.filter||!e.filterOptions&&!e.renderFilterMenu)}function hF(e){return e?"descend"===e&&"ascend":"descend"}function fF(e,t){return void 0!==t.find((t=>t.columnKey===e.key&&t.order))}const vF=zn({name:"DataTableFilterMenu",props:{column:{type:Object,required:!0},radioGroupName:{type:String,required:!0},multiple:{type:Boolean,required:!0},value:{type:[Array,String,Number],default:null},options:{type:Array,required:!0},onConfirm:{type:Function,required:!0},onClear:{type:Function,required:!0},onChange:{type:Function,required:!0}},setup(e){const{mergedClsPrefixRef:t,mergedRtlRef:n}=B_(e),o=GP("DataTable",n,t),{mergedClsPrefixRef:r,mergedThemeRef:i,localeRef:a}=Po(GM),l=Et(e.value);function s(t){e.onChange(t)}return{mergedClsPrefix:r,rtlEnabled:o,mergedTheme:i,locale:a,checkboxGroupValue:ai((()=>{const{value:e}=l;return Array.isArray(e)?e:null})),radioGroupValue:ai((()=>{const{value:t}=l;return cF(e.column)?Array.isArray(t)&&t.length&&t[0]||null:Array.isArray(t)?null:t})),handleChange:function(t){e.multiple&&Array.isArray(t)?l.value=t:cF(e.column)&&!Array.isArray(t)?l.value=[t]:l.value=t},handleConfirmClick:function(){s(l.value),e.onConfirm()},handleClearClick:function(){e.multiple||cF(e.column)?s([]):s(null),e.onClear()}}},render(){const{mergedTheme:e,locale:t,mergedClsPrefix:n}=this;return li("div",{class:[`${n}-data-table-filter-menu`,this.rtlEnabled&&`${n}-data-table-filter-menu--rtl`]},li(lR,null,{default:()=>{const{checkboxGroupValue:t,handleChange:o}=this;return this.multiple?li(qO,{value:t,class:`${n}-data-table-filter-menu__group`,onUpdateValue:o},{default:()=>this.options.map((t=>li(GO,{key:t.value,theme:e.peers.Checkbox,themeOverrides:e.peerOverrides.Checkbox,value:t.value},{default:()=>t.label})))}):li(oF,{name:this.radioGroupName,class:`${n}-data-table-filter-menu__group`,value:this.radioGroupValue,onUpdateValue:this.handleChange},{default:()=>this.options.map((t=>li(tF,{key:t.value,value:t.value,theme:e.peers.Radio,themeOverrides:e.peerOverrides.Radio},{default:()=>t.label})))})}}),li("div",{class:`${n}-data-table-filter-menu__action`},li(oO,{size:"tiny",theme:e.peers.Button,themeOverrides:e.peerOverrides.Button,onClick:this.handleClearClick},{default:()=>t.clear}),li(oO,{theme:e.peers.Button,themeOverrides:e.peerOverrides.Button,type:"primary",size:"tiny",onClick:this.handleConfirmClick},{default:()=>t.confirm})))}}),mF=zn({name:"DataTableRenderFilter",props:{render:{type:Function,required:!0},active:{type:Boolean,default:!1},show:{type:Boolean,default:!1}},render(){const{render:e,active:t,show:n}=this;return e({active:t,show:n})}}),gF=zn({name:"DataTableFilterButton",props:{column:{type:Object,required:!0},options:{type:Array,default:()=>[]}},setup(e){const{mergedComponentPropsRef:t}=B_(),{mergedThemeRef:n,mergedClsPrefixRef:o,mergedFilterStateRef:r,filterMenuCssVarsRef:i,paginationBehaviorOnFilterRef:a,doUpdatePage:l,doUpdateFilters:s,filterIconPopoverPropsRef:c}=Po(GM),u=Et(!1),d=r,p=ai((()=>!1!==e.column.filterMultiple)),h=ai((()=>{const t=d.value[e.column.key];if(void 0===t){const{value:e}=p;return e?[]:null}return t})),f=ai((()=>{const{value:e}=h;return Array.isArray(e)?e.length>0:null!==e})),v=ai((()=>{var n,o;return(null===(o=null===(n=null==t?void 0:t.value)||void 0===n?void 0:n.DataTable)||void 0===o?void 0:o.renderFilter)||e.column.renderFilter}));return{mergedTheme:n,mergedClsPrefix:o,active:f,showPopover:u,mergedRenderFilter:v,filterIconPopoverProps:c,filterMultiple:p,mergedFilterValue:h,filterMenuCssVars:i,handleFilterChange:function(t){const n=function(e,t,n){const o=Object.assign({},e);return o[t]=n,o}(d.value,e.column.key,t);s(n,e.column),"first"===a.value&&l(1)},handleFilterMenuConfirm:function(){u.value=!1},handleFilterMenuCancel:function(){u.value=!1}}},render(){const{mergedTheme:e,mergedClsPrefix:t,handleFilterMenuCancel:n,filterIconPopoverProps:o}=this;return li($R,Object.assign({show:this.showPopover,onUpdateShow:e=>this.showPopover=e,trigger:"click",theme:e.peers.Popover,themeOverrides:e.peerOverrides.Popover,placement:"bottom"},o,{style:{padding:0}}),{trigger:()=>{const{mergedRenderFilter:e}=this;if(e)return li(mF,{"data-data-table-filter":!0,render:e,active:this.active,show:this.showPopover});const{renderFilterIcon:n}=this.column;return li("div",{"data-data-table-filter":!0,class:[`${t}-data-table-filter`,{[`${t}-data-table-filter--active`]:this.active,[`${t}-data-table-filter--show`]:this.showPopover}]},n?n({active:this.active,show:this.showPopover}):li(CT,{clsPrefix:t},{default:()=>li(sT,null)}))},default:()=>{const{renderFilterMenu:e}=this.column;return e?e({hide:n}):li(vF,{style:this.filterMenuCssVars,radioGroupName:String(this.column.key),multiple:this.filterMultiple,value:this.mergedFilterValue,options:this.options,column:this.column,onChange:this.handleFilterChange,onClear:this.handleFilterMenuCancel,onConfirm:this.handleFilterMenuConfirm})}})}}),bF=zn({name:"ColumnResizeButton",props:{onResizeStart:Function,onResize:Function,onResizeEnd:Function},setup(e){const{mergedClsPrefixRef:t}=Po(GM),n=Et(!1);let o=0;function r(e){return e.clientX}function i(t){var n;null===(n=e.onResize)||void 0===n||n.call(e,r(t)-o)}function a(){var t;n.value=!1,null===(t=e.onResizeEnd)||void 0===t||t.call(e),Tb("mousemove",window,i),Tb("mouseup",window,a)}return Hn((()=>{Tb("mousemove",window,i),Tb("mouseup",window,a)})),{mergedClsPrefix:t,active:n,handleMousedown:function(t){var l;t.preventDefault();const s=n.value;o=r(t),n.value=!0,s||(Pb("mousemove",window,i),Pb("mouseup",window,a),null===(l=e.onResizeStart)||void 0===l||l.call(e))}}},render(){const{mergedClsPrefix:e}=this;return li("span",{"data-data-table-resizable":!0,class:[`${e}-data-table-resize-button`,this.active&&`${e}-data-table-resize-button--active`],onMousedown:this.handleMousedown})}}),yF=zn({name:"DropdownDivider",props:{clsPrefix:{type:String,required:!0}},render(){return li("div",{class:`${this.clsPrefix}-dropdown-divider`})}});function xF(e){const{textColorBase:t,opacity1:n,opacity2:o,opacity3:r,opacity4:i,opacity5:a}=e;return{color:t,opacity1Depth:n,opacity2Depth:o,opacity3Depth:r,opacity4Depth:i,opacity5Depth:a}}const CF={name:"Icon",common:qz,self:xF},wF={name:"Icon",common:tz,self:xF},kF=nb("icon","\n height: 1em;\n width: 1em;\n line-height: 1em;\n text-align: center;\n display: inline-block;\n position: relative;\n fill: currentColor;\n transform: translateZ(0);\n",[rb("color-transition",{transition:"color .3s var(--n-bezier)"}),rb("depth",{color:"var(--n-color)"},[eb("svg",{opacity:"var(--n-opacity)",transition:"opacity .3s var(--n-bezier)"})]),eb("svg",{height:"1em",width:"1em"})]),SF=zn({_n_icon__:!0,name:"Icon",inheritAttrs:!1,props:Object.assign(Object.assign({},I_.props),{depth:[String,Number],size:[Number,String],color:String,component:Object}),setup(e){const{mergedClsPrefixRef:t,inlineThemeDisabled:n}=B_(e),o=I_("Icon","-icon",kF,CF,e,t),r=ai((()=>{const{depth:t}=e,{common:{cubicBezierEaseInOut:n},self:r}=o.value;if(void 0!==t){const{color:e,[`opacity${t}Depth`]:o}=r;return{"--n-bezier":n,"--n-color":e,"--n-opacity":o}}return{"--n-bezier":n,"--n-color":"","--n-opacity":""}})),i=n?KP("icon",ai((()=>`${e.depth||"d"}`)),r,e):void 0;return{mergedClsPrefix:t,mergedStyle:ai((()=>{const{size:t,color:n}=e;return{fontSize:Ag(t),color:n}})),cssVars:n?void 0:r,themeClass:null==i?void 0:i.themeClass,onRender:null==i?void 0:i.onRender}},render(){var e;const{$parent:t,depth:n,mergedClsPrefix:o,component:r,onRender:i,themeClass:a}=this;return null===(e=null==t?void 0:t.$options)||void 0===e||e._n_icon__,null==i||i(),li("i",Wr(this.$attrs,{role:"img",class:[`${o}-icon`,a,{[`${o}-icon--depth`]:n,[`${o}-icon--color-transition`]:void 0!==n}],style:[this.cssVars,this.mergedStyle]}),r?li(r):this.$slots)}}),_F="n-dropdown-menu",PF="n-dropdown",TF="n-dropdown-option";function AF(e,t){return"submenu"===e.type||void 0===e.type&&void 0!==e[t]}function zF(e){return"divider"===e.type}const RF=zn({name:"DropdownOption",props:{clsPrefix:{type:String,required:!0},tmNode:{type:Object,required:!0},parentKey:{type:[String,Number],default:null},placement:{type:String,default:"right-start"},props:Object,scrollable:Boolean},setup(e){const t=Po(PF),{hoverKeyRef:n,keyboardKeyRef:o,lastToggledSubmenuKeyRef:r,pendingKeyPathRef:i,activeKeyPathRef:a,animatedRef:l,mergedShowRef:s,renderLabelRef:c,renderIconRef:u,labelFieldRef:d,childrenFieldRef:p,renderOptionRef:h,nodePropsRef:f,menuPropsRef:v}=t,m=Po(TF,null),g=Po(_F),b=Po(Gb),y=ai((()=>e.tmNode.rawNode)),x=ai((()=>{const{value:t}=p;return AF(e.tmNode.rawNode,t)})),C=ai((()=>{const{disabled:t}=e.tmNode;return t})),w=function(e,t,n){if(!t)return e;const o=Et(e.value);let r=null;return lr(e,(e=>{null!==r&&window.clearTimeout(r),!0===e?n&&!n.value?o.value=!0:r=window.setTimeout((()=>{o.value=!0}),t):o.value=!1})),o}(ai((()=>{if(!x.value)return!1;const{key:t,disabled:a}=e.tmNode;if(a)return!1;const{value:l}=n,{value:s}=o,{value:c}=r,{value:u}=i;return null!==l?u.includes(t):null!==s?u.includes(t)&&u[u.length-1]!==t:null!==c&&u.includes(t)})),300,ai((()=>null===o.value&&!l.value))),k=ai((()=>!!(null==m?void 0:m.enteringSubmenuRef.value))),S=Et(!1);function _(){const{parentKey:t,tmNode:i}=e;i.disabled||s.value&&(r.value=t,o.value=null,n.value=i.key)}return _o(TF,{enteringSubmenuRef:S}),{labelField:d,renderLabel:c,renderIcon:u,siblingHasIcon:g.showIconRef,siblingHasSubmenu:g.hasSubmenuRef,menuProps:v,popoverBody:b,animated:l,mergedShowSubmenu:ai((()=>w.value&&!k.value)),rawNode:y,hasSubmenu:x,pending:mb((()=>{const{value:t}=i,{key:n}=e.tmNode;return t.includes(n)})),childActive:mb((()=>{const{value:t}=a,{key:n}=e.tmNode,o=t.findIndex((e=>n===e));return-1!==o&&o{const{value:t}=a,{key:n}=e.tmNode,o=t.findIndex((e=>n===e));return-1!==o&&o===t.length-1})),mergedDisabled:C,renderOption:h,nodeProps:f,handleClick:function(){const{value:n}=x,{tmNode:o}=e;s.value&&(n||o.disabled||(t.doSelect(o.key,o.rawNode),t.doUpdateShow(!1)))},handleMouseMove:function(){const{tmNode:t}=e;t.disabled||s.value&&n.value!==t.key&&_()},handleMouseEnter:_,handleMouseLeave:function(t){if(e.tmNode.disabled)return;if(!s.value)return;const{relatedTarget:o}=t;!o||Mm({target:o},"dropdownOption")||Mm({target:o},"scrollbarRail")||(n.value=null)},handleSubmenuBeforeEnter:function(){S.value=!0},handleSubmenuAfterEnter:function(){S.value=!1}}},render(){var e,t;const{animated:n,rawNode:o,mergedShowSubmenu:r,clsPrefix:i,siblingHasIcon:a,siblingHasSubmenu:l,renderLabel:s,renderIcon:c,renderOption:u,nodeProps:d,props:p,scrollable:h}=this;let f=null;if(r){const t=null===(e=this.menuProps)||void 0===e?void 0:e.call(this,o,o.children);f=li(FF,Object.assign({},t,{clsPrefix:i,scrollable:this.scrollable,tmNodes:this.tmNode.children,parentKey:this.tmNode.key}))}const v={class:[`${i}-dropdown-option-body`,this.pending&&`${i}-dropdown-option-body--pending`,this.active&&`${i}-dropdown-option-body--active`,this.childActive&&`${i}-dropdown-option-body--child-active`,this.mergedDisabled&&`${i}-dropdown-option-body--disabled`],onMousemove:this.handleMouseMove,onMouseenter:this.handleMouseEnter,onMouseleave:this.handleMouseLeave,onClick:this.handleClick},m=null==d?void 0:d(o),g=li("div",Object.assign({class:[`${i}-dropdown-option`,null==m?void 0:m.class],"data-dropdown-option":!0},m),li("div",Wr(v,p),[li("div",{class:[`${i}-dropdown-option-body__prefix`,a&&`${i}-dropdown-option-body__prefix--show-icon`]},[c?c(o):hg(o.icon)]),li("div",{"data-dropdown-option":!0,class:`${i}-dropdown-option-body__label`},s?s(o):hg(null!==(t=o[this.labelField])&&void 0!==t?t:o.title)),li("div",{"data-dropdown-option":!0,class:[`${i}-dropdown-option-body__suffix`,l&&`${i}-dropdown-option-body__suffix--has-submenu`]},this.hasSubmenu?li(SF,null,{default:()=>li(eT,null)}):null)]),this.hasSubmenu?li(ay,null,{default:()=>[li(ly,null,{default:()=>li("div",{class:`${i}-dropdown-offset-container`},li(Fy,{show:this.mergedShowSubmenu,placement:this.placement,to:h&&this.popoverBody||void 0,teleportDisabled:!h},{default:()=>li("div",{class:`${i}-dropdown-menu-wrapper`},n?li(vi,{onBeforeEnter:this.handleSubmenuBeforeEnter,onAfterEnter:this.handleSubmenuAfterEnter,name:"fade-in-scale-up-transition",appear:!0},{default:()=>f}):f)}))})]}):null);return u?u({node:g,option:o}):g}}),EF=zn({name:"DropdownGroupHeader",props:{clsPrefix:{type:String,required:!0},tmNode:{type:Object,required:!0}},setup(){const{showIconRef:e,hasSubmenuRef:t}=Po(_F),{renderLabelRef:n,labelFieldRef:o,nodePropsRef:r,renderOptionRef:i}=Po(PF);return{labelField:o,showIcon:e,hasSubmenu:t,renderLabel:n,nodeProps:r,renderOption:i}},render(){var e;const{clsPrefix:t,hasSubmenu:n,showIcon:o,nodeProps:r,renderLabel:i,renderOption:a}=this,{rawNode:l}=this.tmNode,s=li("div",Object.assign({class:`${t}-dropdown-option`},null==r?void 0:r(l)),li("div",{class:`${t}-dropdown-option-body ${t}-dropdown-option-body--group`},li("div",{"data-dropdown-option":!0,class:[`${t}-dropdown-option-body__prefix`,o&&`${t}-dropdown-option-body__prefix--show-icon`]},hg(l.icon)),li("div",{class:`${t}-dropdown-option-body__label`,"data-dropdown-option":!0},i?i(l):hg(null!==(e=l.title)&&void 0!==e?e:l[this.labelField])),li("div",{class:[`${t}-dropdown-option-body__suffix`,n&&`${t}-dropdown-option-body__suffix--has-submenu`],"data-dropdown-option":!0})));return a?a({node:s,option:l}):s}}),OF=zn({name:"NDropdownGroup",props:{clsPrefix:{type:String,required:!0},tmNode:{type:Object,required:!0},parentKey:{type:[String,Number],default:null}},render(){const{tmNode:e,parentKey:t,clsPrefix:n}=this,{children:o}=e;return li(yr,null,li(EF,{clsPrefix:n,tmNode:e,key:e.key}),null==o?void 0:o.map((e=>{const{rawNode:o}=e;return!1===o.show?null:zF(o)?li(yF,{clsPrefix:n,key:e.key}):e.isGroup?null:li(RF,{clsPrefix:n,tmNode:e,parentKey:t,key:e.key})})))}}),MF=zn({name:"DropdownRenderOption",props:{tmNode:{type:Object,required:!0}},render(){const{rawNode:{render:e,props:t}}=this.tmNode;return li("div",t,[null==e?void 0:e()])}}),FF=zn({name:"DropdownMenu",props:{scrollable:Boolean,showArrow:Boolean,arrowStyle:[String,Object],clsPrefix:{type:String,required:!0},tmNodes:{type:Array,default:()=>[]},parentKey:{type:[String,Number],default:null}},setup(e){const{renderIconRef:t,childrenFieldRef:n}=Po(PF);_o(_F,{showIconRef:ai((()=>{const n=t.value;return e.tmNodes.some((e=>{var t;if(e.isGroup)return null===(t=e.children)||void 0===t?void 0:t.some((({rawNode:e})=>n?n(e):e.icon));const{rawNode:o}=e;return n?n(o):o.icon}))})),hasSubmenuRef:ai((()=>{const{value:t}=n;return e.tmNodes.some((e=>{var n;if(e.isGroup)return null===(n=e.children)||void 0===n?void 0:n.some((({rawNode:e})=>AF(e,t)));const{rawNode:o}=e;return AF(o,t)}))}))});const o=Et(null);return _o(Ub,null),_o(qb,null),_o(Gb,o),{bodyRef:o}},render(){const{parentKey:e,clsPrefix:t,scrollable:n}=this,o=this.tmNodes.map((o=>{const{rawNode:r}=o;return!1===r.show?null:function(e){return"render"===e.type}(r)?li(MF,{tmNode:o,key:o.key}):zF(r)?li(yF,{clsPrefix:t,key:o.key}):function(e){return"group"===e.type}(r)?li(OF,{clsPrefix:t,tmNode:o,parentKey:e,key:o.key}):li(RF,{clsPrefix:t,tmNode:o,parentKey:e,key:o.key,props:r.props,scrollable:n})}));return li("div",{class:[`${t}-dropdown-menu`,n&&`${t}-dropdown-menu--scrollable`],ref:"bodyRef"},n?li(sR,{contentClass:`${t}-dropdown-menu__content`},{default:()=>o}):o,this.showArrow?FR({clsPrefix:t,arrowStyle:this.arrowStyle,arrowClass:void 0,arrowWrapperClass:void 0,arrowWrapperStyle:void 0}):null)}}),IF=nb("dropdown-menu","\n transform-origin: var(--v-transform-origin);\n background-color: var(--n-color);\n border-radius: var(--n-border-radius);\n box-shadow: var(--n-box-shadow);\n position: relative;\n transition:\n background-color .3s var(--n-bezier),\n box-shadow .3s var(--n-bezier);\n",[gR(),nb("dropdown-option","\n position: relative;\n ",[eb("a","\n text-decoration: none;\n color: inherit;\n outline: none;\n ",[eb("&::before",'\n content: "";\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n ')]),nb("dropdown-option-body","\n display: flex;\n cursor: pointer;\n position: relative;\n height: var(--n-option-height);\n line-height: var(--n-option-height);\n font-size: var(--n-font-size);\n color: var(--n-option-text-color);\n transition: color .3s var(--n-bezier);\n ",[eb("&::before",'\n content: "";\n position: absolute;\n top: 0;\n bottom: 0;\n left: 4px;\n right: 4px;\n transition: background-color .3s var(--n-bezier);\n border-radius: var(--n-border-radius);\n '),ib("disabled",[rb("pending","\n color: var(--n-option-text-color-hover);\n ",[ob("prefix, suffix","\n color: var(--n-option-text-color-hover);\n "),eb("&::before","background-color: var(--n-option-color-hover);")]),rb("active","\n color: var(--n-option-text-color-active);\n ",[ob("prefix, suffix","\n color: var(--n-option-text-color-active);\n "),eb("&::before","background-color: var(--n-option-color-active);")]),rb("child-active","\n color: var(--n-option-text-color-child-active);\n ",[ob("prefix, suffix","\n color: var(--n-option-text-color-child-active);\n ")])]),rb("disabled","\n cursor: not-allowed;\n opacity: var(--n-option-opacity-disabled);\n "),rb("group","\n font-size: calc(var(--n-font-size) - 1px);\n color: var(--n-group-header-text-color);\n ",[ob("prefix","\n width: calc(var(--n-option-prefix-width) / 2);\n ",[rb("show-icon","\n width: calc(var(--n-option-icon-prefix-width) / 2);\n ")])]),ob("prefix","\n width: var(--n-option-prefix-width);\n display: flex;\n justify-content: center;\n align-items: center;\n color: var(--n-prefix-color);\n transition: color .3s var(--n-bezier);\n z-index: 1;\n ",[rb("show-icon","\n width: var(--n-option-icon-prefix-width);\n "),nb("icon","\n font-size: var(--n-option-icon-size);\n ")]),ob("label","\n white-space: nowrap;\n flex: 1;\n z-index: 1;\n "),ob("suffix","\n box-sizing: border-box;\n flex-grow: 0;\n flex-shrink: 0;\n display: flex;\n justify-content: flex-end;\n align-items: center;\n min-width: var(--n-option-suffix-width);\n padding: 0 8px;\n transition: color .3s var(--n-bezier);\n color: var(--n-suffix-color);\n z-index: 1;\n ",[rb("has-submenu","\n width: var(--n-option-icon-suffix-width);\n "),nb("icon","\n font-size: var(--n-option-icon-size);\n ")]),nb("dropdown-menu","pointer-events: all;")]),nb("dropdown-offset-container","\n pointer-events: none;\n position: absolute;\n left: 0;\n right: 0;\n top: -4px;\n bottom: -4px;\n ")]),nb("dropdown-divider","\n transition: background-color .3s var(--n-bezier);\n background-color: var(--n-divider-color);\n height: 1px;\n margin: 4px 0;\n "),nb("dropdown-menu-wrapper","\n transform-origin: var(--v-transform-origin);\n width: fit-content;\n "),eb(">",[nb("scrollbar","\n height: inherit;\n max-height: inherit;\n ")]),ib("scrollable","\n padding: var(--n-padding);\n "),rb("scrollable",[ob("content","\n padding: var(--n-padding);\n ")])]),LF={animated:{type:Boolean,default:!0},keyboard:{type:Boolean,default:!0},size:{type:String,default:"medium"},inverted:Boolean,placement:{type:String,default:"bottom"},onSelect:[Function,Array],options:{type:Array,default:()=>[]},menuProps:Function,showArrow:Boolean,renderLabel:Function,renderIcon:Function,renderOption:Function,nodeProps:Function,labelField:{type:String,default:"label"},keyField:{type:String,default:"key"},childrenField:{type:String,default:"children"},value:[String,Number]},BF=Object.keys(DR),DF=zn({name:"Dropdown",inheritAttrs:!1,props:Object.assign(Object.assign(Object.assign({},DR),LF),I_.props),setup(e){const t=Et(!1),n=Db(jt(e,"show"),t),o=ai((()=>{const{keyField:t,childrenField:n}=e;return JT(e.options,{getKey:e=>e[t],getDisabled:e=>!0===e.disabled,getIgnored:e=>"divider"===e.type||"render"===e.type,getChildren:e=>e[n]})})),r=ai((()=>o.value.treeNodes)),i=Et(null),a=Et(null),l=Et(null),s=ai((()=>{var e,t,n;return null!==(n=null!==(t=null!==(e=i.value)&&void 0!==e?e:a.value)&&void 0!==t?t:l.value)&&void 0!==n?n:null})),c=ai((()=>o.value.getPath(s.value).keyPath)),u=ai((()=>o.value.getPath(e.value).keyPath));!function(e={},t){const n=vt({ctrl:!1,command:!1,win:!1,shift:!1,tab:!1}),{keydown:o,keyup:r}=e,i=e=>{switch(e.key){case"Control":n.ctrl=!0;break;case"Meta":n.command=!0,n.win=!0;break;case"Shift":n.shift=!0;break;case"Tab":n.tab=!0}void 0!==o&&Object.keys(o).forEach((t=>{if(t!==e.key)return;const n=o[t];if("function"==typeof n)n(e);else{const{stop:t=!1,prevent:o=!1}=n;t&&e.stopPropagation(),o&&e.preventDefault(),n.handler(e)}}))},a=e=>{switch(e.key){case"Control":n.ctrl=!1;break;case"Meta":n.command=!1,n.win=!1;break;case"Shift":n.shift=!1;break;case"Tab":n.tab=!1}void 0!==r&&Object.keys(r).forEach((t=>{if(t!==e.key)return;const n=r[t];if("function"==typeof n)n(e);else{const{stop:t=!1,prevent:o=!1}=n;t&&e.stopPropagation(),o&&e.preventDefault(),n.handler(e)}}))},l=()=>{(void 0===t||t.value)&&(Pb("keydown",document,i),Pb("keyup",document,a)),void 0!==t&&lr(t,(e=>{e?(Pb("keydown",document,i),Pb("keyup",document,a)):(Tb("keydown",document,i),Tb("keyup",document,a))}))};gb()?(Dn(l),Hn((()=>{(void 0===t||t.value)&&(Tb("keydown",document,i),Tb("keyup",document,a))}))):l(),gt(n)}({keydown:{ArrowUp:{prevent:!0,handler:function(){b("up")}},ArrowRight:{prevent:!0,handler:function(){b("right")}},ArrowDown:{prevent:!0,handler:function(){b("down")}},ArrowLeft:{prevent:!0,handler:function(){b("left")}},Enter:{prevent:!0,handler:function(){const e=g();(null==e?void 0:e.isLeaf)&&n.value&&(f(e.key,e.rawNode),v(!1))}},Escape:function(){v(!1)}}},mb((()=>e.keyboard&&n.value)));const{mergedClsPrefixRef:d,inlineThemeDisabled:p}=B_(e),h=I_("Dropdown","-dropdown",IF,FM,e,d);function f(t,n){const{onSelect:o}=e;o&&dg(o,t,n)}function v(n){const{"onUpdate:show":o,onUpdateShow:r}=e;o&&dg(o,n),r&&dg(r,n),t.value=n}function m(){i.value=null,a.value=null,l.value=null}function g(){var e;const{value:t}=o,{value:n}=s;return t&&null!==n&&null!==(e=t.getNode(n))&&void 0!==e?e:null}function b(e){const{value:t}=s,{value:{getFirstAvailableNode:n}}=o;let r=null;if(null===t){const e=n();null!==e&&(r=e.key)}else{const t=g();if(t){let n;switch(e){case"down":n=t.getNext();break;case"up":n=t.getPrev();break;case"right":n=t.getChild();break;case"left":n=t.getParent()}n&&(r=n.key)}}null!==r&&(i.value=null,a.value=r)}_o(PF,{labelFieldRef:jt(e,"labelField"),childrenFieldRef:jt(e,"childrenField"),renderLabelRef:jt(e,"renderLabel"),renderIconRef:jt(e,"renderIcon"),hoverKeyRef:i,keyboardKeyRef:a,lastToggledSubmenuKeyRef:l,pendingKeyPathRef:c,activeKeyPathRef:u,animatedRef:jt(e,"animated"),mergedShowRef:n,nodePropsRef:jt(e,"nodeProps"),renderOptionRef:jt(e,"renderOption"),menuPropsRef:jt(e,"menuProps"),doSelect:f,doUpdateShow:v}),lr(n,(t=>{e.animated||t||m()}));const y=ai((()=>{const{size:t,inverted:n}=e,{common:{cubicBezierEaseInOut:o},self:r}=h.value,{padding:i,dividerColor:a,borderRadius:l,optionOpacityDisabled:s,[ub("optionIconSuffixWidth",t)]:c,[ub("optionSuffixWidth",t)]:u,[ub("optionIconPrefixWidth",t)]:d,[ub("optionPrefixWidth",t)]:p,[ub("fontSize",t)]:f,[ub("optionHeight",t)]:v,[ub("optionIconSize",t)]:m}=r,g={"--n-bezier":o,"--n-font-size":f,"--n-padding":i,"--n-border-radius":l,"--n-option-height":v,"--n-option-prefix-width":p,"--n-option-icon-prefix-width":d,"--n-option-suffix-width":u,"--n-option-icon-suffix-width":c,"--n-option-icon-size":m,"--n-divider-color":a,"--n-option-opacity-disabled":s};return n?(g["--n-color"]=r.colorInverted,g["--n-option-color-hover"]=r.optionColorHoverInverted,g["--n-option-color-active"]=r.optionColorActiveInverted,g["--n-option-text-color"]=r.optionTextColorInverted,g["--n-option-text-color-hover"]=r.optionTextColorHoverInverted,g["--n-option-text-color-active"]=r.optionTextColorActiveInverted,g["--n-option-text-color-child-active"]=r.optionTextColorChildActiveInverted,g["--n-prefix-color"]=r.prefixColorInverted,g["--n-suffix-color"]=r.suffixColorInverted,g["--n-group-header-text-color"]=r.groupHeaderTextColorInverted):(g["--n-color"]=r.color,g["--n-option-color-hover"]=r.optionColorHover,g["--n-option-color-active"]=r.optionColorActive,g["--n-option-text-color"]=r.optionTextColor,g["--n-option-text-color-hover"]=r.optionTextColorHover,g["--n-option-text-color-active"]=r.optionTextColorActive,g["--n-option-text-color-child-active"]=r.optionTextColorChildActive,g["--n-prefix-color"]=r.prefixColor,g["--n-suffix-color"]=r.suffixColor,g["--n-group-header-text-color"]=r.groupHeaderTextColor),g})),x=p?KP("dropdown",ai((()=>`${e.size[0]}${e.inverted?"i":""}`)),y,e):void 0;return{mergedClsPrefix:d,mergedTheme:h,tmNodes:r,mergedShow:n,handleAfterLeave:()=>{e.animated&&m()},doUpdateShow:v,cssVars:p?void 0:y,themeClass:null==x?void 0:x.themeClass,onRender:null==x?void 0:x.onRender}},render(){const{mergedTheme:e}=this,t={show:this.mergedShow,theme:e.peers.Popover,themeOverrides:e.peerOverrides.Popover,internalOnAfterLeave:this.handleAfterLeave,internalRenderBody:(e,t,n,o,r)=>{var i;const{mergedClsPrefix:a,menuProps:l}=this;null===(i=this.onRender)||void 0===i||i.call(this);const s=(null==l?void 0:l(void 0,this.tmNodes.map((e=>e.rawNode))))||{},c={ref:bg(t),class:[e,`${a}-dropdown`,this.themeClass],clsPrefix:a,tmNodes:this.tmNodes,style:[...n,this.cssVars],showArrow:this.showArrow,arrowStyle:this.arrowStyle,scrollable:this.scrollable,onMouseenter:o,onMouseleave:r};return li(FF,Wr(this.$attrs,c,s))},onUpdateShow:this.doUpdateShow,"onUpdate:show":void 0};return li($R,Object.assign({},sg(this.$props,BF),t),{trigger:()=>{var e,t;return null===(t=(e=this.$slots).default)||void 0===t?void 0:t.call(e)}})}}),$F="_n_all__",NF="_n_none__",jF=zn({name:"DataTableSelectionMenu",props:{clsPrefix:{type:String,required:!0}},setup(e){const{props:t,localeRef:n,checkOptionsRef:o,rawPaginatedDataRef:r,doCheckAll:i,doUncheckAll:a}=Po(GM),l=ai((()=>function(e,t,n,o){return e?r=>{for(const i of e)switch(r){case $F:return void n(!0);case NF:return void o(!0);default:if("object"==typeof i&&i.key===r)return void i.onSelect(t.value)}}:()=>{}}(o.value,r,i,a))),s=ai((()=>function(e,t){return e?e.map((e=>{switch(e){case"all":return{label:t.checkTableAll,key:$F};case"none":return{label:t.uncheckTableAll,key:NF};default:return e}})):[]}(o.value,n.value)));return()=>{var n,o,r,i;const{clsPrefix:a}=e;return li(DF,{theme:null===(o=null===(n=t.theme)||void 0===n?void 0:n.peers)||void 0===o?void 0:o.Dropdown,themeOverrides:null===(i=null===(r=t.themeOverrides)||void 0===r?void 0:r.peers)||void 0===i?void 0:i.Dropdown,options:s.value,onSelect:l.value},{default:()=>li(CT,{clsPrefix:a,class:`${a}-data-table-check-extra`},{default:()=>li(vT,null)})})}}});function HF(e){return"function"==typeof e.title?e.title(e):e.title}const WF=zn({name:"DataTableHeader",props:{discrete:{type:Boolean,default:!0}},setup(){const{mergedClsPrefixRef:e,scrollXRef:t,fixedColumnLeftMapRef:n,fixedColumnRightMapRef:o,mergedCurrentPageRef:r,allRowsCheckedRef:i,someRowsCheckedRef:a,rowsRef:l,colsRef:s,mergedThemeRef:c,checkOptionsRef:u,mergedSortStateRef:d,componentId:p,mergedTableLayoutRef:h,headerCheckboxDisabledRef:f,onUnstableColumnResize:v,doUpdateResizableWidth:m,handleTableHeaderScroll:g,deriveNextSorter:b,doUncheckAll:y,doCheckAll:x}=Po(GM),C=Et({});function w(e){const t=C.value[e];return null==t?void 0:t.getBoundingClientRect().width}const k=new Map;return{cellElsRef:C,componentId:p,mergedSortState:d,mergedClsPrefix:e,scrollX:t,fixedColumnLeftMap:n,fixedColumnRightMap:o,currentPage:r,allRowsChecked:i,someRowsChecked:a,rows:l,cols:s,mergedTheme:c,checkOptions:u,mergedTableLayout:h,headerCheckboxDisabled:f,handleCheckboxUpdateChecked:function(){i.value?y():x()},handleColHeaderClick:function(e,t){if(Mm(e,"dataTableFilter")||Mm(e,"dataTableResizable"))return;if(!uF(t))return;const n=d.value.find((e=>e.columnKey===t.key))||null,o=function(e,t){return void 0===e.sorter?null:null===t||t.columnKey!==e.key?{columnKey:e.key,sorter:e.sorter,order:hF(!1)}:Object.assign(Object.assign({},t),{order:hF(t.order)})}(t,n);b(o)},handleTableHeaderScroll:g,handleColumnResizeStart:function(e){k.set(e.key,w(e.key))},handleColumnResize:function(e,t){const n=k.get(e.key);if(void 0===n)return;const o=n+t,r=(i=o,a=e.minWidth,void 0!==(l=e.maxWidth)&&(i=Math.min(i,"number"==typeof l?l:Number.parseFloat(l))),void 0!==a&&(i=Math.max(i,"number"==typeof a?a:Number.parseFloat(a))),i);var i,a,l;v(o,r,e,w),m(e,r)}}},render(){const{cellElsRef:e,mergedClsPrefix:t,fixedColumnLeftMap:n,fixedColumnRightMap:o,currentPage:r,allRowsChecked:i,someRowsChecked:a,rows:l,cols:s,mergedTheme:c,checkOptions:u,componentId:d,discrete:p,mergedTableLayout:h,headerCheckboxDisabled:f,mergedSortState:v,handleColHeaderClick:m,handleCheckboxUpdateChecked:g,handleColumnResizeStart:b,handleColumnResize:y}=this,x=li("thead",{class:`${t}-data-table-thead`,"data-n-id":d},l.map((l=>li("tr",{class:`${t}-data-table-tr`},l.map((({column:l,colSpan:s,rowSpan:d,isLast:p})=>{var h,x;const C=aF(l),{ellipsis:w}=l,k=C in n,S=C in o;return li("th",{ref:t=>e[C]=t,key:C,style:{textAlign:l.titleAlign||l.align,left:Lm(null===(h=n[C])||void 0===h?void 0:h.start),right:Lm(null===(x=o[C])||void 0===x?void 0:x.start)},colspan:s,rowspan:d,"data-col-key":C,class:[`${t}-data-table-th`,(k||S)&&`${t}-data-table-th--fixed-${k?"left":"right"}`,{[`${t}-data-table-th--sorting`]:fF(l,v),[`${t}-data-table-th--filterable`]:pF(l),[`${t}-data-table-th--sortable`]:uF(l),[`${t}-data-table-th--selection`]:"selection"===l.type,[`${t}-data-table-th--last`]:p},l.className],onClick:"selection"===l.type||"expand"===l.type||"children"in l?void 0:e=>{m(e,l)}},"selection"===l.type?!1!==l.multiple?li(yr,null,li(GO,{key:r,privateInsideTable:!0,checked:i,indeterminate:a,disabled:f,onUpdateChecked:g}),u?li(jF,{clsPrefix:t}):null):null:li(yr,null,li("div",{class:`${t}-data-table-th__title-wrapper`},li("div",{class:`${t}-data-table-th__title`},!0===w||w&&!w.tooltip?li("div",{class:`${t}-data-table-th__ellipsis`},HF(l)):w&&"object"==typeof w?li(VM,Object.assign({},w,{theme:c.peers.Ellipsis,themeOverrides:c.peerOverrides.Ellipsis}),{default:()=>HF(l)}):HF(l)),uF(l)?li(YM,{column:l}):null),pF(l)?li(gF,{column:l,options:l.filterOptions}):null,dF(l)?li(bF,{onResizeStart:()=>{b(l)},onResize:e=>{y(l,e)}}):null))}))))));if(!p)return x;const{handleTableHeaderScroll:C,scrollX:w}=this;return li("div",{class:`${t}-data-table-base-table-header`,onScroll:C},li("table",{ref:"body",class:`${t}-data-table-table`,style:{minWidth:Ag(w),tableLayout:h}},li("colgroup",null,s.map((e=>li("col",{key:e.key,style:e.style})))),x))}}),UF=zn({name:"DataTableCell",props:{clsPrefix:{type:String,required:!0},row:{type:Object,required:!0},index:{type:Number,required:!0},column:{type:Object,required:!0},isSummary:Boolean,mergedTheme:{type:Object,required:!0},renderCell:Function},render(){var e;const{isSummary:t,column:n,row:o,renderCell:r}=this;let i;const{render:a,key:l,ellipsis:s}=n;if(i=a&&!t?a(o,this.index):t?null===(e=o[l])||void 0===e?void 0:e.value:r?r(dk(o,l),o,n):dk(o,l),s){if("object"==typeof s){const{mergedTheme:e}=this;return"performant-ellipsis"===n.ellipsisComponent?li(qM,Object.assign({},s,{theme:e.peers.Ellipsis,themeOverrides:e.peerOverrides.Ellipsis}),{default:()=>i}):li(VM,Object.assign({},s,{theme:e.peers.Ellipsis,themeOverrides:e.peerOverrides.Ellipsis}),{default:()=>i})}return li("span",{class:`${this.clsPrefix}-data-table-td__ellipsis`},i)}return i}}),VF=zn({name:"DataTableExpandTrigger",props:{clsPrefix:{type:String,required:!0},expanded:Boolean,loading:Boolean,onClick:{type:Function,required:!0},renderExpandIcon:{type:Function}},render(){const{clsPrefix:e}=this;return li("div",{class:[`${e}-data-table-expand-trigger`,this.expanded&&`${e}-data-table-expand-trigger--expanded`],onClick:this.onClick,onMousedown:e=>{e.preventDefault()}},li(bT,null,{default:()=>this.loading?li(RT,{key:"loading",clsPrefix:this.clsPrefix,radius:85,strokeWidth:15,scale:.88}):this.renderExpandIcon?this.renderExpandIcon({expanded:this.expanded}):li(CT,{clsPrefix:e,key:"base-icon"},{default:()=>li(eT,null)})}))}}),qF=zn({name:"DataTableBodyCheckbox",props:{rowKey:{type:[String,Number],required:!0},disabled:{type:Boolean,required:!0},onUpdateChecked:{type:Function,required:!0}},setup(e){const{mergedCheckedRowKeySetRef:t,mergedInderminateRowKeySetRef:n}=Po(GM);return()=>{const{rowKey:o}=e;return li(GO,{privateInsideTable:!0,disabled:e.disabled,indeterminate:n.value.has(o),checked:t.value.has(o),onUpdateChecked:e.onUpdateChecked})}}}),KF=zn({name:"DataTableBodyRadio",props:{rowKey:{type:[String,Number],required:!0},disabled:{type:Boolean,required:!0},onUpdateChecked:{type:Function,required:!0}},setup(e){const{mergedCheckedRowKeySetRef:t,componentId:n}=Po(GM);return()=>{const{rowKey:o}=e;return li(tF,{name:n,disabled:e.disabled,checked:t.value.has(o),onUpdateChecked:e.onUpdateChecked})}}});function GF(e,t){const n=[];function o(e,r){e.forEach((e=>{e.children&&t.has(e.key)?(n.push({tmNode:e,striped:!1,key:e.key,index:r}),o(e.children,r)):n.push({key:e.key,tmNode:e,striped:!1,index:r})}))}return e.forEach((e=>{n.push(e);const{children:r}=e.tmNode;r&&t.has(e.key)&&o(r,e.index)})),n}const XF=zn({props:{clsPrefix:{type:String,required:!0},id:{type:String,required:!0},cols:{type:Array,required:!0},onMouseenter:Function,onMouseleave:Function},render(){const{clsPrefix:e,id:t,cols:n,onMouseenter:o,onMouseleave:r}=this;return li("table",{style:{tableLayout:"fixed"},class:`${e}-data-table-table`,onMouseenter:o,onMouseleave:r},li("colgroup",null,n.map((e=>li("col",{key:e.key,style:e.style})))),li("tbody",{"data-n-id":t,class:`${e}-data-table-tbody`},this.$slots))}}),YF=zn({name:"DataTableBody",props:{onResize:Function,showHeader:Boolean,flexHeight:Boolean,bodyStyle:Object},setup(e){const{slots:t,bodyWidthRef:n,mergedExpandedRowKeysRef:o,mergedClsPrefixRef:r,mergedThemeRef:i,scrollXRef:a,colsRef:l,paginatedDataRef:s,rawPaginatedDataRef:c,fixedColumnLeftMapRef:u,fixedColumnRightMapRef:d,mergedCurrentPageRef:p,rowClassNameRef:h,leftActiveFixedColKeyRef:f,leftActiveFixedChildrenColKeysRef:v,rightActiveFixedColKeyRef:m,rightActiveFixedChildrenColKeysRef:g,renderExpandRef:b,hoverKeyRef:y,summaryRef:x,mergedSortStateRef:C,virtualScrollRef:w,componentId:k,mergedTableLayoutRef:S,childTriggerColIndexRef:_,indentRef:P,rowPropsRef:T,maxHeightRef:A,stripedRef:z,loadingRef:R,onLoadRef:E,loadingKeySetRef:O,expandableRef:M,stickyExpandedRowsRef:F,renderExpandIconRef:I,summaryPlacementRef:L,treeMateRef:B,scrollbarPropsRef:D,setHeaderScrollLeft:$,doUpdateExpandedRowKeys:N,handleTableBodyScroll:j,doCheck:H,doUncheck:W,renderCell:U}=Po(GM),V=Et(null),q=Et(null),K=Et(null),G=mb((()=>0===s.value.length)),X=mb((()=>e.showHeader||!G.value)),Y=mb((()=>e.showHeader||G.value));let Q="";const Z=ai((()=>new Set(o.value)));function J(e){var t;return null===(t=B.value.getNode(e))||void 0===t?void 0:t.rawNode}function ee(){const{value:e}=q;return(null==e?void 0:e.listElRef)||null}const te={getScrollContainer:function(){if(!X.value){const{value:e}=K;return e||null}if(w.value)return ee();const{value:e}=V;return e?e.containerRef:null},scrollTo(e,t){var n,o;w.value?null===(n=q.value)||void 0===n||n.scrollTo(e,t):null===(o=V.value)||void 0===o||o.scrollTo(e,t)}},ne=eb([({props:e})=>{const t=t=>null===t?null:eb(`[data-n-id="${e.componentId}"] [data-col-key="${t}"]::after`,{boxShadow:"var(--n-box-shadow-after)"}),n=t=>null===t?null:eb(`[data-n-id="${e.componentId}"] [data-col-key="${t}"]::before`,{boxShadow:"var(--n-box-shadow-before)"});return eb([t(e.leftActiveFixedColKey),n(e.rightActiveFixedColKey),e.leftActiveFixedChildrenColKeys.map((e=>t(e))),e.rightActiveFixedChildrenColKeys.map((e=>n(e)))])}]);let oe=!1;return ir((()=>{const{value:e}=f,{value:t}=v,{value:n}=m,{value:o}=g;if(!oe&&null===e&&null===n)return;const r={leftActiveFixedColKey:e,leftActiveFixedChildrenColKeys:t,rightActiveFixedColKey:n,rightActiveFixedChildrenColKeys:o,componentId:k};ne.mount({id:`n-${k}`,force:!0,props:r,anchorMetaName:F_}),oe=!0})),Wn((()=>{ne.unmount({id:`n-${k}`})})),Object.assign({bodyWidth:n,summaryPlacement:L,dataTableSlots:t,componentId:k,scrollbarInstRef:V,virtualListRef:q,emptyElRef:K,summary:x,mergedClsPrefix:r,mergedTheme:i,scrollX:a,cols:l,loading:R,bodyShowHeaderOnly:Y,shouldDisplaySomeTablePart:X,empty:G,paginatedDataAndInfo:ai((()=>{const{value:e}=z;let t=!1;return{data:s.value.map(e?(e,n)=>(e.isLeaf||(t=!0),{tmNode:e,key:e.key,striped:n%2==1,index:n}):(e,n)=>(e.isLeaf||(t=!0),{tmNode:e,key:e.key,striped:!1,index:n})),hasChildren:t}})),rawPaginatedData:c,fixedColumnLeftMap:u,fixedColumnRightMap:d,currentPage:p,rowClassName:h,renderExpand:b,mergedExpandedRowKeySet:Z,hoverKey:y,mergedSortState:C,virtualScroll:w,mergedTableLayout:S,childTriggerColIndex:_,indent:P,rowProps:T,maxHeight:A,loadingKeySet:O,expandable:M,stickyExpandedRows:F,renderExpandIcon:I,scrollbarProps:D,setHeaderScrollLeft:$,handleVirtualListScroll:function(e){var t;j(e),null===(t=V.value)||void 0===t||t.sync()},handleVirtualListResize:function(t){var n;const{onResize:o}=e;o&&o(t),null===(n=V.value)||void 0===n||n.sync()},handleMouseleaveTable:function(){y.value=null},virtualListContainer:ee,virtualListContent:function(){const{value:e}=q;return(null==e?void 0:e.itemsElRef)||null},handleTableBodyScroll:j,handleCheckboxUpdateChecked:function(e,t,n){const o=J(e.key);if(o){if(n){const n=s.value.findIndex((e=>e.key===Q));if(-1!==n){const r=s.value.findIndex((t=>t.key===e.key)),i=Math.min(n,r),a=Math.max(n,r),l=[];return s.value.slice(i,a+1).forEach((e=>{e.disabled||l.push(e.key)})),t?H(l,!1,o):W(l,o),void(Q=e.key)}}t?H(e.key,!1,o):W(e.key,o),Q=e.key}else e.key},handleRadioUpdateChecked:function(e){const t=J(e.key);t?H(e.key,!0,t):e.key},handleUpdateExpanded:function(e,t){var n;if(O.value.has(e))return;const{value:r}=o,i=r.indexOf(e),a=Array.from(r);~i?(a.splice(i,1),N(a)):!t||t.isLeaf||t.shallowLoaded?(a.push(e),N(a)):(O.value.add(e),null===(n=E.value)||void 0===n||n.call(E,t.rawNode).then((()=>{const{value:t}=o,n=Array.from(t);~n.indexOf(e)||n.push(e),N(n)})).finally((()=>{O.value.delete(e)})))},renderCell:U},te)},render(){const{mergedTheme:e,scrollX:t,mergedClsPrefix:n,virtualScroll:o,maxHeight:r,mergedTableLayout:i,flexHeight:a,loadingKeySet:l,onResize:s,setHeaderScrollLeft:c}=this,u=void 0!==t||void 0!==r||a,d=!u&&"auto"===i,p=void 0!==t||d,h={minWidth:Ag(t)||"100%"};t&&(h.width="100%");const f=li(lR,Object.assign({},this.scrollbarProps,{ref:"scrollbarInstRef",scrollable:u||d,class:`${n}-data-table-base-table-body`,style:this.empty?void 0:this.bodyStyle,theme:e.peers.Scrollbar,themeOverrides:e.peerOverrides.Scrollbar,contentStyle:h,container:o?this.virtualListContainer:void 0,content:o?this.virtualListContent:void 0,horizontalRailStyle:{zIndex:3},verticalRailStyle:{zIndex:3},xScrollable:p,onScroll:o?void 0:this.handleTableBodyScroll,internalOnUpdateScrollLeft:c,onResize:s}),{default:()=>{const e={},t={},{cols:r,paginatedDataAndInfo:i,mergedTheme:a,fixedColumnLeftMap:s,fixedColumnRightMap:c,currentPage:u,rowClassName:d,mergedSortState:p,mergedExpandedRowKeySet:f,stickyExpandedRows:v,componentId:m,childTriggerColIndex:g,expandable:b,rowProps:y,handleMouseleaveTable:x,renderExpand:C,summary:w,handleCheckboxUpdateChecked:k,handleRadioUpdateChecked:S,handleUpdateExpanded:_}=this,{length:P}=r;let T;const{data:A,hasChildren:z}=i,R=z?GF(A,f):A;if(w){const e=w(this.rawPaginatedData);if(Array.isArray(e)){const t=e.map(((e,t)=>({isSummaryRow:!0,key:`__n_summary__${t}`,tmNode:{rawNode:e,disabled:!0},index:-1})));T="top"===this.summaryPlacement?[...t,...R]:[...R,...t]}else{const t={isSummaryRow:!0,key:"__n_summary__",tmNode:{rawNode:e,disabled:!0},index:-1};T="top"===this.summaryPlacement?[t,...R]:[...R,t]}}else T=R;const E=z?{width:Lm(this.indent)}:void 0,O=[];T.forEach((e=>{C&&f.has(e.key)&&(!b||b(e.tmNode.rawNode))?O.push(e,{isExpandedRow:!0,key:`${e.key}-expand`,tmNode:e.tmNode,index:e.index}):O.push(e)}));const{length:M}=O,F={};A.forEach((({tmNode:e},t)=>{F[t]=e.key}));const I=v?this.bodyWidth:null,L=null===I?void 0:`${I}px`,B=(o,i,h)=>{const{index:m}=o;if("isExpandedRow"in o){const{tmNode:{key:e,rawNode:t}}=o;return li("tr",{class:`${n}-data-table-tr ${n}-data-table-tr--expanded`,key:`${e}__expand`},li("td",{class:[`${n}-data-table-td`,`${n}-data-table-td--last-col`,i+1===M&&`${n}-data-table-td--last-row`],colspan:P},v?li("div",{class:`${n}-data-table-expand`,style:{width:L}},C(t,m)):C(t,m)))}const b="isSummaryRow"in o,x=!b&&o.striped,{tmNode:w,key:T}=o,{rawNode:A}=w,R=f.has(T),O=y?y(A,m):void 0,I="string"==typeof d?d:function(e,t,n){return"function"==typeof n?n(e,t):n||""}(A,m,d),B=li("tr",Object.assign({onMouseenter:()=>{this.hoverKey=T},key:T,class:[`${n}-data-table-tr`,b&&`${n}-data-table-tr--summary`,x&&`${n}-data-table-tr--striped`,R&&`${n}-data-table-tr--expanded`,I]},O),r.map(((r,d)=>{var f,v,y,x,C;if(i in e){const t=e[i],n=t.indexOf(d);if(~n)return t.splice(n,1),null}const{column:w}=r,O=aF(r),{rowSpan:I,colSpan:L}=w,B=b?(null===(f=o.tmNode.rawNode[O])||void 0===f?void 0:f.colSpan)||1:L?L(A,m):1,D=b?(null===(v=o.tmNode.rawNode[O])||void 0===v?void 0:v.rowSpan)||1:I?I(A,m):1,$=d+B===P,N=i+D===M,j=D>1;if(j&&(t[i]={[d]:[]}),B>1||j)for(let n=i;n{_(T,o.tmNode)}})]:null,"selection"===w.type?b?null:!1===w.multiple?li(KF,{key:u,rowKey:T,disabled:o.tmNode.disabled,onUpdateChecked:()=>{S(o.tmNode)}}):li(qF,{key:u,rowKey:T,disabled:o.tmNode.disabled,onUpdateChecked:(e,t)=>{k(o.tmNode,e,t.shiftKey)}}):"expand"===w.type?b?null:!w.expandable||(null===(C=w.expandable)||void 0===C?void 0:C.call(w,A))?li(VF,{clsPrefix:n,expanded:R,renderExpandIcon:this.renderExpandIcon,onClick:()=>{_(T,null)}}):null:li(UF,{clsPrefix:n,index:m,row:A,column:w,isSummary:b,mergedTheme:a,renderCell:this.renderCell}))})));return B};return o?li(Ax,{ref:"virtualListRef",items:O,itemSize:28,visibleItemsTag:XF,visibleItemsProps:{clsPrefix:n,id:m,cols:r,onMouseleave:x},showScrollbar:!1,onResize:this.handleVirtualListResize,onScroll:this.handleVirtualListScroll,itemsStyle:h,itemResizable:!0},{default:({item:e,index:t})=>B(e,t,!0)}):li("table",{class:`${n}-data-table-table`,onMouseleave:x,style:{tableLayout:this.mergedTableLayout}},li("colgroup",null,r.map((e=>li("col",{key:e.key,style:e.style})))),this.showHeader?li(WF,{discrete:!1}):null,this.empty?null:li("tbody",{"data-n-id":m,class:`${n}-data-table-tbody`},O.map(((e,t)=>B(e,t,!1)))))}});if(this.empty){const e=()=>li("div",{class:[`${n}-data-table-empty`,this.loading&&`${n}-data-table-empty--hide`],style:this.bodyStyle,ref:"emptyElRef"},xg(this.dataTableSlots.empty,(()=>[li(Zz,{theme:this.mergedTheme.peers.Empty,themeOverrides:this.mergedTheme.peerOverrides.Empty})])));return this.shouldDisplaySomeTablePart?li(yr,null,f,e()):li(kx,{onResize:this.onResize},{default:e})}return f}}),QF=zn({name:"MainTable",setup(){const{mergedClsPrefixRef:e,rightFixedColumnsRef:t,leftFixedColumnsRef:n,bodyWidthRef:o,maxHeightRef:r,minHeightRef:i,flexHeightRef:a,syncScrollState:l}=Po(GM),s=Et(null),c=Et(null),u=Et(null),d=Et(!(n.value.length||t.value.length)),p=ai((()=>({maxHeight:Ag(r.value),minHeight:Ag(i.value)}))),h={getBodyElement:function(){const{value:e}=c;return e?e.getScrollContainer():null},getHeaderElement:function(){const{value:e}=s;return e?e.$el:null},scrollTo(e,t){var n;null===(n=c.value)||void 0===n||n.scrollTo(e,t)}};return ir((()=>{const{value:t}=u;if(!t)return;const n=`${e.value}-data-table-base-table--transition-disabled`;d.value?setTimeout((()=>{t.classList.remove(n)}),0):t.classList.add(n)})),Object.assign({maxHeight:r,mergedClsPrefix:e,selfElRef:u,headerInstRef:s,bodyInstRef:c,bodyStyle:p,flexHeight:a,handleBodyResize:function(e){o.value=e.contentRect.width,l(),d.value||(d.value=!0)}},h)},render(){const{mergedClsPrefix:e,maxHeight:t,flexHeight:n}=this,o=void 0===t&&!n;return li("div",{class:`${e}-data-table-base-table`,ref:"selfElRef"},o?null:li(WF,{ref:"headerInstRef"}),li(YF,{ref:"bodyInstRef",bodyStyle:this.bodyStyle,showHeader:o,flexHeight:n,onResize:this.handleBodyResize}))}});function ZF(e){return"object"==typeof e&&"number"==typeof e.multiple&&e.multiple}function JF(e,{dataRelatedColsRef:t,filteredDataRef:n}){const o=[];t.value.forEach((e=>{var t;void 0!==e.sorter&&c(o,{columnKey:e.key,sorter:e.sorter,order:null!==(t=e.defaultSortOrder)&&void 0!==t&&t})}));const r=Et(o),i=ai((()=>{const e=t.value.filter((e=>"selection"!==e.type&&void 0!==e.sorter&&("ascend"===e.sortOrder||"descend"===e.sortOrder||!1===e.sortOrder))),n=e.filter((e=>!1!==e.sortOrder));if(n.length)return n.map((e=>({columnKey:e.key,order:e.sortOrder,sorter:e.sorter})));if(e.length)return[];const{value:o}=r;return Array.isArray(o)?o:o?[o]:[]}));function a(e){const t=function(e){let t=i.value.slice();return e&&!1!==ZF(e.sorter)?(t=t.filter((e=>!1!==ZF(e.sorter))),c(t,e),t):e||null}(e);l(t)}function l(t){const{"onUpdate:sorter":n,onUpdateSorter:o,onSorterChange:i}=e;n&&dg(n,t),o&&dg(o,t),i&&dg(i,t),r.value=t}function s(){l(null)}function c(e,t){const n=e.findIndex((e=>(null==t?void 0:t.columnKey)&&e.columnKey===t.columnKey));void 0!==n&&n>=0?e[n]=t:e.push(t)}return{clearSorter:s,sort:function(e,n="ascend"){if(e){const o=t.value.find((t=>"selection"!==t.type&&"expand"!==t.type&&t.key===e));if(!(null==o?void 0:o.sorter))return;const r=o.sorter;a({columnKey:e,sorter:r,order:n})}else s()},sortedDataRef:ai((()=>{const e=i.value.slice().sort(((e,t)=>{const n=ZF(e.sorter)||0;return(ZF(t.sorter)||0)-n}));return e.length?n.value.slice().sort(((t,n)=>{let o=0;return e.some((e=>{const{columnKey:r,sorter:i,order:a}=e,l=function(e,t){return t&&(void 0===e||"default"===e||"object"==typeof e&&"default"===e.compare)?function(e){return(t,n)=>{const o=t[e],r=n[e];return null==o?null==r?0:-1:null==r?1:"number"==typeof o&&"number"==typeof r?o-r:"string"==typeof o&&"string"==typeof r?o.localeCompare(r):0}}(t):"function"==typeof e?e:!(!e||"object"!=typeof e||!e.compare||"default"===e.compare)&&e.compare}(i,r);return!(!l||!a||(o=l(t.rawNode,n.rawNode),0===o)||(o*=function(e){return"ascend"===e?1:"descend"===e?-1:0}(a),0))})),o})):n.value})),mergedSortStateRef:i,deriveNextSorter:a}}function eI(e,{mainTableInstRef:t,mergedCurrentPageRef:n,bodyWidthRef:o}){let r=0;const i=Et(),a=Et(null),l=Et([]),s=Et(null),c=Et([]),u=ai((()=>Ag(e.scrollX))),d=ai((()=>e.columns.filter((e=>"left"===e.fixed)))),p=ai((()=>e.columns.filter((e=>"right"===e.fixed)))),h=ai((()=>{const e={};let t=0;return function n(o){o.forEach((o=>{const r={start:t,end:0};e[aF(o)]=r,"children"in o?(n(o.children),r.end=t):(t+=iF(o)||0,r.end=t)}))}(d.value),e})),f=ai((()=>{const e={};let t=0;return function n(o){for(let r=o.length-1;r>=0;--r){const i=o[r],a={start:t,end:0};e[aF(i)]=a,"children"in i?(n(i.children),a.end=t):(t+=iF(i)||0,a.end=t)}}(p.value),e}));function v(){return{header:t.value?t.value.getHeaderElement():null,body:t.value?t.value.getBodyElement():null}}function m(){const{header:t,body:n}=v();if(!n)return;const{value:u}=o;if(null!==u){if(e.maxHeight||e.flexHeight){if(!t)return;const e=r-t.scrollLeft;i.value=0!==e?"head":"body","head"===i.value?(r=t.scrollLeft,n.scrollLeft=r):(r=n.scrollLeft,t.scrollLeft=r)}else r=n.scrollLeft;!function(){var e,t;const{value:n}=d;let o=0;const{value:i}=h;let l=null;for(let a=0;a((null===(e=i[s])||void 0===e?void 0:e.start)||0)-o))break;l=s,o=(null===(t=i[s])||void 0===t?void 0:t.end)||0}a.value=l}(),function(){l.value=[];let t=e.columns.find((e=>aF(e)===a.value));for(;t&&"children"in t;){const e=t.children.length;if(0===e)break;const n=t.children[e-1];l.value.push(aF(n)),t=n}}(),function(){var t,n;const{value:i}=p,a=Number(e.scrollX),{value:l}=o;if(null===l)return;let c=0,u=null;const{value:d}=f;for(let e=i.length-1;e>=0;--e){const o=aF(i[e]);if(!(Math.round(r+((null===(t=d[o])||void 0===t?void 0:t.start)||0)+l-c)aF(e)===s.value));for(;t&&"children"in t&&t.children.length;){const e=t.children[0];c.value.push(aF(e)),t=e}}()}}return lr(n,(()=>{!function(){const{body:e}=v();e&&(e.scrollTop=0)}()})),{styleScrollXRef:u,fixedColumnLeftMapRef:h,fixedColumnRightMapRef:f,leftFixedColumnsRef:d,rightFixedColumnsRef:p,leftActiveFixedColKeyRef:a,leftActiveFixedChildrenColKeysRef:l,rightActiveFixedColKeyRef:s,rightActiveFixedChildrenColKeysRef:c,syncScrollState:m,handleTableBodyScroll:function(t){var n;null===(n=e.onScroll)||void 0===n||n.call(e,t),"head"!==i.value?Em(m):i.value=void 0},handleTableHeaderScroll:function(){"body"!==i.value?Em(m):i.value=void 0},setHeaderScrollLeft:function(e){const{header:t}=v();t&&(t.scrollLeft=e,m())}}}function tI(e,t){const n=ai((()=>function(e,t){const n=[],o=[],r=[],i=new WeakMap;let a=-1,l=0,s=!1;!function e(i,c){c>a&&(n[c]=[],a=c);for(const n of i)if("children"in n)e(n.children,c+1);else{const e="key"in n?n.key:void 0;o.push({key:aF(n),style:sF(n,void 0!==e?Ag(t(e)):void 0),column:n}),l+=1,s||(s=!!n.ellipsis),r.push(n)}}(e,0);let c=0;return function e(t,o){let r=0;t.forEach((t=>{var s;if("children"in t){const r=c,a={column:t,colSpan:0,rowSpan:1,isLast:!1};e(t.children,o+1),t.children.forEach((e=>{var t,n;a.colSpan+=null!==(n=null===(t=i.get(e))||void 0===t?void 0:t.colSpan)&&void 0!==n?n:0})),r+a.colSpan===l&&(a.isLast=!0),i.set(t,a),n[o].push(a)}else{if(c1&&(r=c+e);const u={column:t,colSpan:e,rowSpan:a-o+1,isLast:c+e===l};i.set(t,u),n[o].push(u),c+=1}}))}(e,0),{hasEllipsis:s,rows:n,cols:o,dataRelatedCols:r}}(e.columns,t)));return{rowsRef:ai((()=>n.value.rows)),colsRef:ai((()=>n.value.cols)),hasEllipsisRef:ai((()=>n.value.hasEllipsis)),dataRelatedColsRef:ai((()=>n.value.dataRelatedCols))}}const nI=[rb("fixed-left","\n left: 0;\n position: sticky;\n z-index: 2;\n ",[eb("&::after",'\n pointer-events: none;\n content: "";\n width: 36px;\n display: inline-block;\n position: absolute;\n top: 0;\n bottom: -1px;\n transition: box-shadow .2s var(--n-bezier);\n right: -36px;\n ')]),rb("fixed-right","\n right: 0;\n position: sticky;\n z-index: 1;\n ",[eb("&::before",'\n pointer-events: none;\n content: "";\n width: 36px;\n display: inline-block;\n position: absolute;\n top: 0;\n bottom: -1px;\n transition: box-shadow .2s var(--n-bezier);\n left: -36px;\n ')])],oI=eb([nb("data-table","\n width: 100%;\n font-size: var(--n-font-size);\n display: flex;\n flex-direction: column;\n position: relative;\n --n-merged-th-color: var(--n-th-color);\n --n-merged-td-color: var(--n-td-color);\n --n-merged-border-color: var(--n-border-color);\n --n-merged-th-color-sorting: var(--n-th-color-sorting);\n --n-merged-td-color-hover: var(--n-td-color-hover);\n --n-merged-td-color-sorting: var(--n-td-color-sorting);\n --n-merged-td-color-striped: var(--n-td-color-striped);\n ",[nb("data-table-wrapper","\n flex-grow: 1;\n display: flex;\n flex-direction: column;\n "),rb("flex-height",[eb(">",[nb("data-table-wrapper",[eb(">",[nb("data-table-base-table","\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n ",[eb(">",[nb("data-table-base-table-body","flex-basis: 0;",[eb("&:last-child","flex-grow: 1;")])])])])])])]),eb(">",[nb("data-table-loading-wrapper","\n color: var(--n-loading-color);\n font-size: var(--n-loading-size);\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translateX(-50%) translateY(-50%);\n transition: color .3s var(--n-bezier);\n display: flex;\n align-items: center;\n justify-content: center;\n ",[gR({originalTransform:"translateX(-50%) translateY(-50%)"})])]),nb("data-table-expand-placeholder","\n margin-right: 8px;\n display: inline-block;\n width: 16px;\n height: 1px;\n "),nb("data-table-indent","\n display: inline-block;\n height: 1px;\n "),nb("data-table-expand-trigger","\n display: inline-flex;\n margin-right: 8px;\n cursor: pointer;\n font-size: 16px;\n vertical-align: -0.2em;\n position: relative;\n width: 16px;\n height: 16px;\n color: var(--n-td-text-color);\n transition: color .3s var(--n-bezier);\n ",[rb("expanded",[nb("icon","transform: rotate(90deg);",[PT({originalTransform:"rotate(90deg)"})]),nb("base-icon","transform: rotate(90deg);",[PT({originalTransform:"rotate(90deg)"})])]),nb("base-loading","\n color: var(--n-loading-color);\n transition: color .3s var(--n-bezier);\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n ",[PT()]),nb("icon","\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n ",[PT()]),nb("base-icon","\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n ",[PT()])]),nb("data-table-thead","\n transition: background-color .3s var(--n-bezier);\n background-color: var(--n-merged-th-color);\n "),nb("data-table-tr","\n box-sizing: border-box;\n background-clip: padding-box;\n transition: background-color .3s var(--n-bezier);\n ",[nb("data-table-expand","\n position: sticky;\n left: 0;\n overflow: hidden;\n margin: calc(var(--n-th-padding) * -1);\n padding: var(--n-th-padding);\n box-sizing: border-box;\n "),rb("striped","background-color: var(--n-merged-td-color-striped);",[nb("data-table-td","background-color: var(--n-merged-td-color-striped);")]),ib("summary",[eb("&:hover","background-color: var(--n-merged-td-color-hover);",[eb(">",[nb("data-table-td","background-color: var(--n-merged-td-color-hover);")])])])]),nb("data-table-th","\n padding: var(--n-th-padding);\n position: relative;\n text-align: start;\n box-sizing: border-box;\n background-color: var(--n-merged-th-color);\n border-color: var(--n-merged-border-color);\n border-bottom: 1px solid var(--n-merged-border-color);\n color: var(--n-th-text-color);\n transition:\n border-color .3s var(--n-bezier),\n color .3s var(--n-bezier),\n background-color .3s var(--n-bezier);\n font-weight: var(--n-th-font-weight);\n ",[rb("filterable","\n padding-right: 36px;\n ",[rb("sortable","\n padding-right: calc(var(--n-th-padding) + 36px);\n ")]),nI,rb("selection","\n padding: 0;\n text-align: center;\n line-height: 0;\n z-index: 3;\n "),ob("title-wrapper","\n display: flex;\n align-items: center;\n flex-wrap: nowrap;\n max-width: 100%;\n ",[ob("title","\n flex: 1;\n min-width: 0;\n ")]),ob("ellipsis","\n display: inline-block;\n vertical-align: bottom;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n max-width: 100%;\n "),rb("hover","\n background-color: var(--n-merged-th-color-hover);\n "),rb("sorting","\n background-color: var(--n-merged-th-color-sorting);\n "),rb("sortable","\n cursor: pointer;\n ",[ob("ellipsis","\n max-width: calc(100% - 18px);\n "),eb("&:hover","\n background-color: var(--n-merged-th-color-hover);\n ")]),nb("data-table-sorter","\n height: var(--n-sorter-size);\n width: var(--n-sorter-size);\n margin-left: 4px;\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n vertical-align: -0.2em;\n color: var(--n-th-icon-color);\n transition: color .3s var(--n-bezier);\n ",[nb("base-icon","transition: transform .3s var(--n-bezier)"),rb("desc",[nb("base-icon","\n transform: rotate(0deg);\n ")]),rb("asc",[nb("base-icon","\n transform: rotate(-180deg);\n ")]),rb("asc, desc","\n color: var(--n-th-icon-color-active);\n ")]),nb("data-table-resize-button","\n width: var(--n-resizable-container-size);\n position: absolute;\n top: 0;\n right: calc(var(--n-resizable-container-size) / 2);\n bottom: 0;\n cursor: col-resize;\n user-select: none;\n ",[eb("&::after","\n width: var(--n-resizable-size);\n height: 50%;\n position: absolute;\n top: 50%;\n left: calc(var(--n-resizable-container-size) / 2);\n bottom: 0;\n background-color: var(--n-merged-border-color);\n transform: translateY(-50%);\n transition: background-color .3s var(--n-bezier);\n z-index: 1;\n content: '';\n "),rb("active",[eb("&::after"," \n background-color: var(--n-th-icon-color-active);\n ")]),eb("&:hover::after","\n background-color: var(--n-th-icon-color-active);\n ")]),nb("data-table-filter","\n position: absolute;\n z-index: auto;\n right: 0;\n width: 36px;\n top: 0;\n bottom: 0;\n cursor: pointer;\n display: flex;\n justify-content: center;\n align-items: center;\n transition:\n background-color .3s var(--n-bezier),\n color .3s var(--n-bezier);\n font-size: var(--n-filter-size);\n color: var(--n-th-icon-color);\n ",[eb("&:hover","\n background-color: var(--n-th-button-color-hover);\n "),rb("show","\n background-color: var(--n-th-button-color-hover);\n "),rb("active","\n background-color: var(--n-th-button-color-hover);\n color: var(--n-th-icon-color-active);\n ")])]),nb("data-table-td","\n padding: var(--n-td-padding);\n text-align: start;\n box-sizing: border-box;\n border: none;\n background-color: var(--n-merged-td-color);\n color: var(--n-td-text-color);\n border-bottom: 1px solid var(--n-merged-border-color);\n transition:\n box-shadow .3s var(--n-bezier),\n background-color .3s var(--n-bezier),\n border-color .3s var(--n-bezier),\n color .3s var(--n-bezier);\n ",[rb("expand",[nb("data-table-expand-trigger","\n margin-right: 0;\n ")]),rb("last-row","\n border-bottom: 0 solid var(--n-merged-border-color);\n ",[eb("&::after","\n bottom: 0 !important;\n "),eb("&::before","\n bottom: 0 !important;\n ")]),rb("summary","\n background-color: var(--n-merged-th-color);\n "),rb("hover","\n background-color: var(--n-merged-td-color-hover);\n "),rb("sorting","\n background-color: var(--n-merged-td-color-sorting);\n "),ob("ellipsis","\n display: inline-block;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n max-width: 100%;\n vertical-align: bottom;\n max-width: calc(100% - var(--indent-offset, -1.5) * 16px - 24px);\n "),rb("selection, expand","\n text-align: center;\n padding: 0;\n line-height: 0;\n "),nI]),nb("data-table-empty","\n box-sizing: border-box;\n padding: var(--n-empty-padding);\n flex-grow: 1;\n flex-shrink: 0;\n opacity: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: opacity .3s var(--n-bezier);\n ",[rb("hide","\n opacity: 0;\n ")]),ob("pagination","\n margin: var(--n-pagination-margin);\n display: flex;\n justify-content: flex-end;\n "),nb("data-table-wrapper","\n position: relative;\n opacity: 1;\n transition: opacity .3s var(--n-bezier), border-color .3s var(--n-bezier);\n border-top-left-radius: var(--n-border-radius);\n border-top-right-radius: var(--n-border-radius);\n line-height: var(--n-line-height);\n "),rb("loading",[nb("data-table-wrapper","\n opacity: var(--n-opacity-loading);\n pointer-events: none;\n ")]),rb("single-column",[nb("data-table-td","\n border-bottom: 0 solid var(--n-merged-border-color);\n ",[eb("&::after, &::before","\n bottom: 0 !important;\n ")])]),ib("single-line",[nb("data-table-th","\n border-right: 1px solid var(--n-merged-border-color);\n ",[rb("last","\n border-right: 0 solid var(--n-merged-border-color);\n ")]),nb("data-table-td","\n border-right: 1px solid var(--n-merged-border-color);\n ",[rb("last-col","\n border-right: 0 solid var(--n-merged-border-color);\n ")])]),rb("bordered",[nb("data-table-wrapper","\n border: 1px solid var(--n-merged-border-color);\n border-bottom-left-radius: var(--n-border-radius);\n border-bottom-right-radius: var(--n-border-radius);\n overflow: hidden;\n ")]),nb("data-table-base-table",[rb("transition-disabled",[nb("data-table-th",[eb("&::after, &::before","transition: none;")]),nb("data-table-td",[eb("&::after, &::before","transition: none;")])])]),rb("bottom-bordered",[nb("data-table-td",[rb("last-row","\n border-bottom: 1px solid var(--n-merged-border-color);\n ")])]),nb("data-table-table","\n font-variant-numeric: tabular-nums;\n width: 100%;\n word-break: break-word;\n transition: background-color .3s var(--n-bezier);\n border-collapse: separate;\n border-spacing: 0;\n background-color: var(--n-merged-td-color);\n "),nb("data-table-base-table-header","\n border-top-left-radius: calc(var(--n-border-radius) - 1px);\n border-top-right-radius: calc(var(--n-border-radius) - 1px);\n z-index: 3;\n overflow: scroll;\n flex-shrink: 0;\n transition: border-color .3s var(--n-bezier);\n scrollbar-width: none;\n ",[eb("&::-webkit-scrollbar","\n width: 0;\n height: 0;\n ")]),nb("data-table-check-extra","\n transition: color .3s var(--n-bezier);\n color: var(--n-th-icon-color);\n position: absolute;\n font-size: 14px;\n right: -4px;\n top: 50%;\n transform: translateY(-50%);\n z-index: 1;\n ")]),nb("data-table-filter-menu",[nb("scrollbar","\n max-height: 240px;\n "),ob("group","\n display: flex;\n flex-direction: column;\n padding: 12px 12px 0 12px;\n ",[nb("checkbox","\n margin-bottom: 12px;\n margin-right: 0;\n "),nb("radio","\n margin-bottom: 12px;\n margin-right: 0;\n ")]),ob("action","\n padding: var(--n-action-padding);\n display: flex;\n flex-wrap: nowrap;\n justify-content: space-evenly;\n border-top: 1px solid var(--n-action-divider-color);\n ",[nb("button",[eb("&:not(:last-child)","\n margin: var(--n-action-button-margin);\n "),eb("&:last-child","\n margin-right: 0;\n ")])]),nb("divider","\n margin: 0 !important;\n ")]),ab(nb("data-table","\n --n-merged-th-color: var(--n-th-color-modal);\n --n-merged-td-color: var(--n-td-color-modal);\n --n-merged-border-color: var(--n-border-color-modal);\n --n-merged-th-color-hover: var(--n-th-color-hover-modal);\n --n-merged-td-color-hover: var(--n-td-color-hover-modal);\n --n-merged-th-color-sorting: var(--n-th-color-hover-modal);\n --n-merged-td-color-sorting: var(--n-td-color-hover-modal);\n --n-merged-td-color-striped: var(--n-td-color-striped-modal);\n ")),lb(nb("data-table","\n --n-merged-th-color: var(--n-th-color-popover);\n --n-merged-td-color: var(--n-td-color-popover);\n --n-merged-border-color: var(--n-border-color-popover);\n --n-merged-th-color-hover: var(--n-th-color-hover-popover);\n --n-merged-td-color-hover: var(--n-td-color-hover-popover);\n --n-merged-th-color-sorting: var(--n-th-color-hover-popover);\n --n-merged-td-color-sorting: var(--n-td-color-hover-popover);\n --n-merged-td-color-striped: var(--n-td-color-striped-popover);\n "))]),rI=zn({name:"DataTable",alias:["AdvancedTable"],props:KM,setup(e,{slots:t}){const{mergedBorderedRef:n,mergedClsPrefixRef:o,inlineThemeDisabled:r,mergedRtlRef:i}=B_(e),a=GP("DataTable",i,o),l=ai((()=>{const{bottomBordered:t}=e;return!n.value&&(void 0===t||t)})),s=I_("DataTable","-data-table",oI,DM,e,o),c=Et(null),u=Et(null),{getResizableWidth:d,clearResizableWidth:p,doUpdateResizableWidth:h}=function(){const e=Et({});return{getResizableWidth:function(t){return e.value[t]},doUpdateResizableWidth:function(t,n){dF(t)&&"key"in t&&(e.value[t.key]=n)},clearResizableWidth:function(){e.value={}}}}(),{rowsRef:f,colsRef:v,dataRelatedColsRef:m,hasEllipsisRef:g}=tI(e,d),{treeMateRef:b,mergedCurrentPageRef:y,paginatedDataRef:x,rawPaginatedDataRef:C,selectionColumnRef:w,hoverKeyRef:k,mergedPaginationRef:S,mergedFilterStateRef:_,mergedSortStateRef:P,childTriggerColIndexRef:T,doUpdatePage:A,doUpdateFilters:z,onUnstableColumnResize:R,deriveNextSorter:E,filter:O,filters:M,clearFilter:F,clearFilters:I,clearSorter:L,page:B,sort:D}=function(e,{dataRelatedColsRef:t}){const n=ai((()=>{const t=e=>{for(let n=0;n{const{childrenKey:t}=e;return JT(e.data,{ignoreEmptyChildren:!0,getKey:e.rowKey,getChildren:e=>e[t],getDisabled:e=>{var t,o;return!!(null===(o=null===(t=n.value)||void 0===t?void 0:t.disabled)||void 0===o?void 0:o.call(t,e))}})})),r=mb((()=>{const{columns:t}=e,{length:n}=t;let o=null;for(let e=0;e{const e=t.value.filter((e=>void 0!==e.filterOptionValues||void 0!==e.filterOptionValue)),n={};return e.forEach((e=>{var t;"selection"!==e.type&&"expand"!==e.type&&(void 0===e.filterOptionValues?n[e.key]=null!==(t=e.filterOptionValue)&&void 0!==t?t:null:n[e.key]=e.filterOptionValues)})),Object.assign(lF(i.value),n)})),u=ai((()=>{const t=c.value,{columns:n}=e;function r(e){return(t,n)=>!!~String(n[e]).indexOf(String(t))}const{value:{treeNodes:i}}=o,a=[];return n.forEach((e=>{"selection"===e.type||"expand"===e.type||"children"in e||a.push([e.key,e])})),i?i.filter((e=>{const{rawNode:n}=e;for(const[o,i]of a){let e=t[o];if(null==e)continue;if(Array.isArray(e)||(e=[e]),!e.length)continue;const a="default"===i.filter?r(o):i.filter;if(i&&"function"==typeof a){if("and"!==i.filterMode){if(e.some((e=>a(e,n))))continue;return!1}if(e.some((e=>!a(e,n))))return!1}}return!0})):[]})),{sortedDataRef:d,deriveNextSorter:p,mergedSortStateRef:h,sort:f,clearSorter:v}=JF(e,{dataRelatedColsRef:t,filteredDataRef:u});t.value.forEach((e=>{var t;if(e.filter){const n=e.defaultFilterOptionValues;e.filterMultiple?i.value[e.key]=n||[]:i.value[e.key]=void 0!==n?null===n?[]:n:null!==(t=e.defaultFilterOptionValue)&&void 0!==t?t:null}}));const m=ai((()=>{const{pagination:t}=e;if(!1!==t)return t.page})),g=ai((()=>{const{pagination:t}=e;if(!1!==t)return t.pageSize})),b=Db(m,l),y=Db(g,s),x=mb((()=>{const t=b.value;return e.remote?t:Math.max(1,Math.min(Math.ceil(u.value.length/y.value),t))})),C=ai((()=>{const{pagination:t}=e;if(t){const{pageCount:e}=t;if(void 0!==e)return e}})),w=ai((()=>{if(e.remote)return o.value.treeNodes;if(!e.pagination)return d.value;const t=y.value,n=(x.value-1)*t;return d.value.slice(n,n+t)})),k=ai((()=>w.value.map((e=>e.rawNode))));function S(t){const{pagination:n}=e;if(n){const{onChange:e,"onUpdate:page":o,onUpdatePage:r}=n;e&&dg(e,t),r&&dg(r,t),o&&dg(o,t),A(t)}}function _(t){const{pagination:n}=e;if(n){const{onPageSizeChange:e,"onUpdate:pageSize":o,onUpdatePageSize:r}=n;e&&dg(e,t),r&&dg(r,t),o&&dg(o,t),z(t)}}const P=ai((()=>{if(!e.remote)return u.value.length;{const{pagination:t}=e;if(t){const{itemCount:e}=t;if(void 0!==e)return e}}})),T=ai((()=>Object.assign(Object.assign({},e.pagination),{onChange:void 0,onUpdatePage:void 0,onUpdatePageSize:void 0,onPageSizeChange:void 0,"onUpdate:page":S,"onUpdate:pageSize":_,page:x.value,pageSize:y.value,pageCount:void 0===P.value?C.value:void 0,itemCount:P.value})));function A(t){const{"onUpdate:page":n,onPageChange:o,onUpdatePage:r}=e;r&&dg(r,t),n&&dg(n,t),o&&dg(o,t),l.value=t}function z(t){const{"onUpdate:pageSize":n,onPageSizeChange:o,onUpdatePageSize:r}=e;o&&dg(o,t),r&&dg(r,t),n&&dg(n,t),s.value=t}function R(){E({})}function E(e){O(e)}function O(e){e?e&&(i.value=lF(e)):i.value={}}return{treeMateRef:o,mergedCurrentPageRef:x,mergedPaginationRef:T,paginatedDataRef:w,rawPaginatedDataRef:k,mergedFilterStateRef:c,mergedSortStateRef:h,hoverKeyRef:Et(null),selectionColumnRef:n,childTriggerColIndexRef:r,doUpdateFilters:function(t,n){const{onUpdateFilters:o,"onUpdate:filters":r,onFiltersChange:a}=e;o&&dg(o,t,n),r&&dg(r,t,n),a&&dg(a,t,n),i.value=t},deriveNextSorter:p,doUpdatePageSize:z,doUpdatePage:A,onUnstableColumnResize:function(t,n,o,r){var i;null===(i=e.onUnstableColumnResize)||void 0===i||i.call(e,t,n,o,r)},filter:O,filters:E,clearFilter:function(){R()},clearFilters:R,clearSorter:v,page:function(e){A(e)},sort:f}}(e,{dataRelatedColsRef:m}),{doCheckAll:$,doUncheckAll:N,doCheck:j,doUncheck:H,headerCheckboxDisabledRef:W,someRowsCheckedRef:U,allRowsCheckedRef:V,mergedCheckedRowKeySetRef:q,mergedInderminateRowKeySetRef:K}=function(e,t){const{paginatedDataRef:n,treeMateRef:o,selectionColumnRef:r}=t,i=Et(e.defaultCheckedRowKeys),a=ai((()=>{var t;const{checkedRowKeys:n}=e,a=void 0===n?i.value:n;return!1===(null===(t=r.value)||void 0===t?void 0:t.multiple)?{checkedKeys:a.slice(0,1),indeterminateKeys:[]}:o.value.getCheckedKeys(a,{cascade:e.cascade,allowNotLoaded:e.allowCheckingNotLoaded})})),l=ai((()=>a.value.checkedKeys)),s=ai((()=>a.value.indeterminateKeys)),c=ai((()=>new Set(l.value))),u=ai((()=>new Set(s.value))),d=ai((()=>{const{value:e}=c;return n.value.reduce(((t,n)=>{const{key:o,disabled:r}=n;return t+(!r&&e.has(o)?1:0)}),0)})),p=ai((()=>n.value.filter((e=>e.disabled)).length)),h=ai((()=>{const{length:e}=n.value,{value:t}=u;return d.value>0&&d.valuet.has(e.key)))})),f=ai((()=>{const{length:e}=n.value;return 0!==d.value&&d.value===e-p.value})),v=ai((()=>0===n.value.length));function m(t,n,r){const{"onUpdate:checkedRowKeys":a,onUpdateCheckedRowKeys:l,onCheckedRowKeysChange:s}=e,c=[],{value:{getNode:u}}=o;t.forEach((e=>{var t;const n=null===(t=u(e))||void 0===t?void 0:t.rawNode;c.push(n)})),a&&dg(a,t,c,{row:n,action:r}),l&&dg(l,t,c,{row:n,action:r}),s&&dg(s,t,c,{row:n,action:r}),i.value=t}return{mergedCheckedRowKeySetRef:c,mergedCheckedRowKeysRef:l,mergedInderminateRowKeySetRef:u,someRowsCheckedRef:h,allRowsCheckedRef:f,headerCheckboxDisabledRef:v,doUpdateCheckedRowKeys:m,doCheckAll:function(t=!1){const{value:i}=r;if(!i||e.loading)return;const a=[];(t?o.value.treeNodes:n.value).forEach((e=>{e.disabled||a.push(e.key)})),m(o.value.check(a,l.value,{cascade:!0,allowNotLoaded:e.allowCheckingNotLoaded}).checkedKeys,void 0,"checkAll")},doUncheckAll:function(t=!1){const{value:i}=r;if(!i||e.loading)return;const a=[];(t?o.value.treeNodes:n.value).forEach((e=>{e.disabled||a.push(e.key)})),m(o.value.uncheck(a,l.value,{cascade:!0,allowNotLoaded:e.allowCheckingNotLoaded}).checkedKeys,void 0,"uncheckAll")},doCheck:function(t,n=!1,r){e.loading||m(n?Array.isArray(t)?t.slice(0,1):[t]:o.value.check(t,l.value,{cascade:e.cascade,allowNotLoaded:e.allowCheckingNotLoaded}).checkedKeys,r,"check")},doUncheck:function(t,n){e.loading||m(o.value.uncheck(t,l.value,{cascade:e.cascade,allowNotLoaded:e.allowCheckingNotLoaded}).checkedKeys,n,"uncheck")}}}(e,{selectionColumnRef:w,treeMateRef:b,paginatedDataRef:x}),{stickyExpandedRowsRef:G,mergedExpandedRowKeysRef:X,renderExpandRef:Y,expandableRef:Q,doUpdateExpandedRowKeys:Z}=function(e,t){const n=mb((()=>{for(const t of e.columns)if("expand"===t.type)return t.renderExpand})),o=mb((()=>{let t;for(const n of e.columns)if("expand"===n.type){t=n.expandable;break}return t})),r=Et(e.defaultExpandAll?(null==n?void 0:n.value)?(()=>{const e=[];return t.value.treeNodes.forEach((t=>{var n;(null===(n=o.value)||void 0===n?void 0:n.call(o,t.rawNode))&&e.push(t.key)})),e})():t.value.getNonLeafKeys():e.defaultExpandedRowKeys),i=jt(e,"expandedRowKeys");return{stickyExpandedRowsRef:jt(e,"stickyExpandedRows"),mergedExpandedRowKeysRef:Db(i,r),renderExpandRef:n,expandableRef:o,doUpdateExpandedRowKeys:function(t){const{onUpdateExpandedRowKeys:n,"onUpdate:expandedRowKeys":o}=e;n&&dg(n,t),o&&dg(o,t),r.value=t}}}(e,b),{handleTableBodyScroll:J,handleTableHeaderScroll:ee,syncScrollState:te,setHeaderScrollLeft:ne,leftActiveFixedColKeyRef:oe,leftActiveFixedChildrenColKeysRef:re,rightActiveFixedColKeyRef:ie,rightActiveFixedChildrenColKeysRef:ae,leftFixedColumnsRef:le,rightFixedColumnsRef:se,fixedColumnLeftMapRef:ce,fixedColumnRightMapRef:ue}=eI(e,{bodyWidthRef:c,mainTableInstRef:u,mergedCurrentPageRef:y}),{localeRef:de}=VP("DataTable"),pe=ai((()=>e.virtualScroll||e.flexHeight||void 0!==e.maxHeight||g.value?"fixed":e.tableLayout));_o(GM,{props:e,treeMateRef:b,renderExpandIconRef:jt(e,"renderExpandIcon"),loadingKeySetRef:Et(new Set),slots:t,indentRef:jt(e,"indent"),childTriggerColIndexRef:T,bodyWidthRef:c,componentId:ig(),hoverKeyRef:k,mergedClsPrefixRef:o,mergedThemeRef:s,scrollXRef:ai((()=>e.scrollX)),rowsRef:f,colsRef:v,paginatedDataRef:x,leftActiveFixedColKeyRef:oe,leftActiveFixedChildrenColKeysRef:re,rightActiveFixedColKeyRef:ie,rightActiveFixedChildrenColKeysRef:ae,leftFixedColumnsRef:le,rightFixedColumnsRef:se,fixedColumnLeftMapRef:ce,fixedColumnRightMapRef:ue,mergedCurrentPageRef:y,someRowsCheckedRef:U,allRowsCheckedRef:V,mergedSortStateRef:P,mergedFilterStateRef:_,loadingRef:jt(e,"loading"),rowClassNameRef:jt(e,"rowClassName"),mergedCheckedRowKeySetRef:q,mergedExpandedRowKeysRef:X,mergedInderminateRowKeySetRef:K,localeRef:de,expandableRef:Q,stickyExpandedRowsRef:G,rowKeyRef:jt(e,"rowKey"),renderExpandRef:Y,summaryRef:jt(e,"summary"),virtualScrollRef:jt(e,"virtualScroll"),rowPropsRef:jt(e,"rowProps"),stripedRef:jt(e,"striped"),checkOptionsRef:ai((()=>{const{value:e}=w;return null==e?void 0:e.options})),rawPaginatedDataRef:C,filterMenuCssVarsRef:ai((()=>{const{self:{actionDividerColor:e,actionPadding:t,actionButtonMargin:n}}=s.value;return{"--n-action-padding":t,"--n-action-button-margin":n,"--n-action-divider-color":e}})),onLoadRef:jt(e,"onLoad"),mergedTableLayoutRef:pe,maxHeightRef:jt(e,"maxHeight"),minHeightRef:jt(e,"minHeight"),flexHeightRef:jt(e,"flexHeight"),headerCheckboxDisabledRef:W,paginationBehaviorOnFilterRef:jt(e,"paginationBehaviorOnFilter"),summaryPlacementRef:jt(e,"summaryPlacement"),filterIconPopoverPropsRef:jt(e,"filterIconPopoverProps"),scrollbarPropsRef:jt(e,"scrollbarProps"),syncScrollState:te,doUpdatePage:A,doUpdateFilters:z,getResizableWidth:d,onUnstableColumnResize:R,clearResizableWidth:p,doUpdateResizableWidth:h,deriveNextSorter:E,doCheck:j,doUncheck:H,doCheckAll:$,doUncheckAll:N,doUpdateExpandedRowKeys:Z,handleTableHeaderScroll:ee,handleTableBodyScroll:J,setHeaderScrollLeft:ne,renderCell:jt(e,"renderCell")});const he={filter:O,filters:M,clearFilters:I,clearSorter:L,page:B,sort:D,clearFilter:F,downloadCsv:t=>{const{fileName:n="data.csv",keepOriginalData:o=!1}=t||{},r=o?e.data:C.value,i=function(e,t){const n=e.filter((e=>"expand"!==e.type&&"selection"!==e.type));return[n.map((e=>e.title)).join(","),...t.map((e=>n.map((t=>{return"string"==typeof(n=e[t.key])?n.replace(/,/g,"\\,"):null==n?"":`${n}`.replace(/,/g,"\\,");var n})).join(",")))].join("\n")}(e.columns,r),a=new Blob([i],{type:"text/csv;charset=utf-8"}),l=URL.createObjectURL(a);!function(e,t){if(!e)return;const n=document.createElement("a");n.href=e,void 0!==t&&(n.download=t),document.body.appendChild(n),n.click(),document.body.removeChild(n)}(l,n.endsWith(".csv")?n:`${n}.csv`),URL.revokeObjectURL(l)},scrollTo:(e,t)=>{var n;null===(n=u.value)||void 0===n||n.scrollTo(e,t)}},fe=ai((()=>{const{size:t}=e,{common:{cubicBezierEaseInOut:n},self:{borderColor:o,tdColorHover:r,tdColorSorting:i,tdColorSortingModal:a,tdColorSortingPopover:l,thColorSorting:c,thColorSortingModal:u,thColorSortingPopover:d,thColor:p,thColorHover:h,tdColor:f,tdTextColor:v,thTextColor:m,thFontWeight:g,thButtonColorHover:b,thIconColor:y,thIconColorActive:x,filterSize:C,borderRadius:w,lineHeight:k,tdColorModal:S,thColorModal:_,borderColorModal:P,thColorHoverModal:T,tdColorHoverModal:A,borderColorPopover:z,thColorPopover:R,tdColorPopover:E,tdColorHoverPopover:O,thColorHoverPopover:M,paginationMargin:F,emptyPadding:I,boxShadowAfter:L,boxShadowBefore:B,sorterSize:D,resizableContainerSize:$,resizableSize:N,loadingColor:j,loadingSize:H,opacityLoading:W,tdColorStriped:U,tdColorStripedModal:V,tdColorStripedPopover:q,[ub("fontSize",t)]:K,[ub("thPadding",t)]:G,[ub("tdPadding",t)]:X}}=s.value;return{"--n-font-size":K,"--n-th-padding":G,"--n-td-padding":X,"--n-bezier":n,"--n-border-radius":w,"--n-line-height":k,"--n-border-color":o,"--n-border-color-modal":P,"--n-border-color-popover":z,"--n-th-color":p,"--n-th-color-hover":h,"--n-th-color-modal":_,"--n-th-color-hover-modal":T,"--n-th-color-popover":R,"--n-th-color-hover-popover":M,"--n-td-color":f,"--n-td-color-hover":r,"--n-td-color-modal":S,"--n-td-color-hover-modal":A,"--n-td-color-popover":E,"--n-td-color-hover-popover":O,"--n-th-text-color":m,"--n-td-text-color":v,"--n-th-font-weight":g,"--n-th-button-color-hover":b,"--n-th-icon-color":y,"--n-th-icon-color-active":x,"--n-filter-size":C,"--n-pagination-margin":F,"--n-empty-padding":I,"--n-box-shadow-before":B,"--n-box-shadow-after":L,"--n-sorter-size":D,"--n-resizable-container-size":$,"--n-resizable-size":N,"--n-loading-size":H,"--n-loading-color":j,"--n-opacity-loading":W,"--n-td-color-striped":U,"--n-td-color-striped-modal":V,"--n-td-color-striped-popover":q,"n-td-color-sorting":i,"n-td-color-sorting-modal":a,"n-td-color-sorting-popover":l,"n-th-color-sorting":c,"n-th-color-sorting-modal":u,"n-th-color-sorting-popover":d}})),ve=r?KP("data-table",ai((()=>e.size[0])),fe,e):void 0,me=ai((()=>{if(!e.pagination)return!1;if(e.paginateSinglePage)return!0;const t=S.value,{pageCount:n}=t;return void 0!==n?n>1:t.itemCount&&t.pageSize&&t.itemCount>t.pageSize}));return Object.assign({mainTableInstRef:u,mergedClsPrefix:o,rtlEnabled:a,mergedTheme:s,paginatedData:x,mergedBordered:n,mergedBottomBordered:l,mergedPagination:S,mergedShowPagination:me,cssVars:r?void 0:fe,themeClass:null==ve?void 0:ve.themeClass,onRender:null==ve?void 0:ve.onRender},he)},render(){const{mergedClsPrefix:e,themeClass:t,onRender:n,$slots:o,spinProps:r}=this;return null==n||n(),li("div",{class:[`${e}-data-table`,this.rtlEnabled&&`${e}-data-table--rtl`,t,{[`${e}-data-table--bordered`]:this.mergedBordered,[`${e}-data-table--bottom-bordered`]:this.mergedBottomBordered,[`${e}-data-table--single-line`]:this.singleLine,[`${e}-data-table--single-column`]:this.singleColumn,[`${e}-data-table--loading`]:this.loading,[`${e}-data-table--flex-height`]:this.flexHeight}],style:this.cssVars},li("div",{class:`${e}-data-table-wrapper`},li(QF,{ref:"mainTableInstRef"})),this.mergedShowPagination?li("div",{class:`${e}-data-table__pagination`},li(kM,Object.assign({theme:this.mergedTheme.peers.Pagination,themeOverrides:this.mergedTheme.peerOverrides.Pagination,disabled:this.loading},this.mergedPagination))):null,li(vi,{name:"fade-in-scale-up-transition"},{default:()=>this.loading?li("div",{class:`${e}-data-table-loading-wrapper`},xg(o.loading,(()=>[li(RT,Object.assign({clsPrefix:e,strokeWidth:20},r))]))):null}))}}),iI={itemFontSize:"12px",itemHeight:"36px",itemWidth:"52px",panelActionPadding:"8px 0"},aI={name:"TimePicker",common:tz,peers:{Scrollbar:nR,Button:eO,Input:xE},self:function(e){const{popoverColor:t,textColor2:n,primaryColor:o,hoverColor:r,dividerColor:i,opacityDisabled:a,boxShadow2:l,borderRadius:s,iconColor:c,iconColorDisabled:u}=e;return Object.assign(Object.assign({},iI),{panelColor:t,panelBoxShadow:l,panelDividerColor:i,itemTextColor:n,itemTextColorActive:o,itemColorHover:r,itemOpacityDisabled:a,itemBorderRadius:s,borderRadius:s,iconColor:c,iconColorDisabled:u})}},lI={itemSize:"24px",itemCellWidth:"38px",itemCellHeight:"32px",scrollItemWidth:"80px",scrollItemHeight:"40px",panelExtraFooterPadding:"8px 12px",panelActionPadding:"8px 12px",calendarTitlePadding:"0",calendarTitleHeight:"28px",arrowSize:"14px",panelHeaderPadding:"8px 12px",calendarDaysHeight:"32px",calendarTitleGridTempateColumns:"28px 28px 1fr 28px 28px",calendarLeftPaddingDate:"6px 12px 4px 12px",calendarLeftPaddingDatetime:"4px 12px",calendarLeftPaddingDaterange:"6px 12px 4px 12px",calendarLeftPaddingDatetimerange:"4px 12px",calendarLeftPaddingMonth:"0",calendarLeftPaddingYear:"0",calendarLeftPaddingQuarter:"0",calendarLeftPaddingMonthrange:"0",calendarLeftPaddingQuarterrange:"0",calendarLeftPaddingYearrange:"0",calendarLeftPaddingWeek:"6px 12px 4px 12px",calendarRightPaddingDate:"6px 12px 4px 12px",calendarRightPaddingDatetime:"4px 12px",calendarRightPaddingDaterange:"6px 12px 4px 12px",calendarRightPaddingDatetimerange:"4px 12px",calendarRightPaddingMonth:"0",calendarRightPaddingYear:"0",calendarRightPaddingQuarter:"0",calendarRightPaddingMonthrange:"0",calendarRightPaddingQuarterrange:"0",calendarRightPaddingYearrange:"0",calendarRightPaddingWeek:"0"},sI={name:"DatePicker",common:tz,peers:{Input:xE,Button:eO,TimePicker:aI,Scrollbar:nR},self(e){const{popoverColor:t,hoverColor:n,primaryColor:o}=e,r=function(e){const{hoverColor:t,fontSize:n,textColor2:o,textColorDisabled:r,popoverColor:i,primaryColor:a,borderRadiusSmall:l,iconColor:s,iconColorDisabled:c,textColor1:u,dividerColor:d,boxShadow2:p,borderRadius:h,fontWeightStrong:f}=e;return Object.assign(Object.assign({},lI),{itemFontSize:n,calendarDaysFontSize:n,calendarTitleFontSize:n,itemTextColor:o,itemTextColorDisabled:r,itemTextColorActive:i,itemTextColorCurrent:a,itemColorIncluded:tg(a,{alpha:.1}),itemColorHover:t,itemColorDisabled:t,itemColorActive:a,itemBorderRadius:l,panelColor:i,panelTextColor:o,arrowColor:s,calendarTitleTextColor:u,calendarTitleColorHover:t,calendarDaysTextColor:o,panelHeaderDividerColor:d,calendarDaysDividerColor:d,calendarDividerColor:d,panelActionDividerColor:d,panelBoxShadow:p,panelBorderRadius:h,calendarTitleFontWeight:f,scrollItemBorderRadius:h,iconColor:s,iconColorDisabled:c})}(e);return r.itemColorDisabled=eg(t,n),r.itemColorIncluded=tg(o,{alpha:.15}),r.itemColorHover=eg(t,n),r}},cI={thPaddingBorderedSmall:"8px 12px",thPaddingBorderedMedium:"12px 16px",thPaddingBorderedLarge:"16px 24px",thPaddingSmall:"0",thPaddingMedium:"0",thPaddingLarge:"0",tdPaddingBorderedSmall:"8px 12px",tdPaddingBorderedMedium:"12px 16px",tdPaddingBorderedLarge:"16px 24px",tdPaddingSmall:"0 0 8px 0",tdPaddingMedium:"0 0 12px 0",tdPaddingLarge:"0 0 16px 0"},uI={name:"Descriptions",common:tz,self:function(e){const{tableHeaderColor:t,textColor2:n,textColor1:o,cardColor:r,modalColor:i,popoverColor:a,dividerColor:l,borderRadius:s,fontWeightStrong:c,lineHeight:u,fontSizeSmall:d,fontSizeMedium:p,fontSizeLarge:h}=e;return Object.assign(Object.assign({},cI),{lineHeight:u,fontSizeSmall:d,fontSizeMedium:p,fontSizeLarge:h,titleTextColor:o,thColor:eg(r,t),thColorModal:eg(i,t),thColorPopover:eg(a,t),thTextColor:o,thFontWeight:c,tdTextColor:n,tdColor:r,tdColorModal:i,tdColorPopover:a,borderColor:eg(r,l),borderColorModal:eg(i,l),borderColorPopover:eg(a,l),borderRadius:s})}},dI={titleFontSize:"18px",padding:"16px 28px 20px 28px",iconSize:"28px",actionSpace:"12px",contentMargin:"8px 0 16px 0",iconMargin:"0 4px 0 0",iconMarginIconTop:"4px 0 8px 0",closeSize:"22px",closeIconSize:"18px",closeMargin:"20px 26px 0 0",closeMarginIconTop:"10px 16px 0 0"};function pI(e){const{textColor1:t,textColor2:n,modalColor:o,closeIconColor:r,closeIconColorHover:i,closeIconColorPressed:a,closeColorHover:l,closeColorPressed:s,infoColor:c,successColor:u,warningColor:d,errorColor:p,primaryColor:h,dividerColor:f,borderRadius:v,fontWeightStrong:m,lineHeight:g,fontSize:b}=e;return Object.assign(Object.assign({},dI),{fontSize:b,lineHeight:g,border:`1px solid ${f}`,titleTextColor:t,textColor:n,color:o,closeColorHover:l,closeColorPressed:s,closeIconColor:r,closeIconColorHover:i,closeIconColorPressed:a,closeBorderRadius:v,iconColor:h,iconColorInfo:c,iconColorSuccess:u,iconColorWarning:d,iconColorError:p,borderRadius:v,titleFontWeight:m})}const hI={name:"Dialog",common:qz,peers:{Button:JE},self:pI},fI={name:"Dialog",common:tz,peers:{Button:eO},self:pI},vI={icon:Function,type:{type:String,default:"default"},title:[String,Function],closable:{type:Boolean,default:!0},negativeText:String,positiveText:String,positiveButtonProps:Object,negativeButtonProps:Object,content:[String,Function],action:Function,showIcon:{type:Boolean,default:!0},loading:Boolean,bordered:Boolean,iconPlacement:String,titleClass:[String,Array],titleStyle:[String,Object],contentClass:[String,Array],contentStyle:[String,Object],actionClass:[String,Array],actionStyle:[String,Object],onPositiveClick:Function,onNegativeClick:Function,onClose:Function},mI=pg(vI),gI=eb([nb("dialog","\n --n-icon-margin: var(--n-icon-margin-top) var(--n-icon-margin-right) var(--n-icon-margin-bottom) var(--n-icon-margin-left);\n word-break: break-word;\n line-height: var(--n-line-height);\n position: relative;\n background: var(--n-color);\n color: var(--n-text-color);\n box-sizing: border-box;\n margin: auto;\n border-radius: var(--n-border-radius);\n padding: var(--n-padding);\n transition: \n border-color .3s var(--n-bezier),\n background-color .3s var(--n-bezier),\n color .3s var(--n-bezier);\n ",[ob("icon",{color:"var(--n-icon-color)"}),rb("bordered",{border:"var(--n-border)"}),rb("icon-top",[ob("close",{margin:"var(--n-close-margin)"}),ob("icon",{margin:"var(--n-icon-margin)"}),ob("content",{textAlign:"center"}),ob("title",{justifyContent:"center"}),ob("action",{justifyContent:"center"})]),rb("icon-left",[ob("icon",{margin:"var(--n-icon-margin)"}),rb("closable",[ob("title","\n padding-right: calc(var(--n-close-size) + 6px);\n ")])]),ob("close","\n position: absolute;\n right: 0;\n top: 0;\n margin: var(--n-close-margin);\n transition:\n background-color .3s var(--n-bezier),\n color .3s var(--n-bezier);\n z-index: 1;\n "),ob("content","\n font-size: var(--n-font-size);\n margin: var(--n-content-margin);\n position: relative;\n word-break: break-word;\n ",[rb("last","margin-bottom: 0;")]),ob("action","\n display: flex;\n justify-content: flex-end;\n ",[eb("> *:not(:last-child)","\n margin-right: var(--n-action-space);\n ")]),ob("icon","\n font-size: var(--n-icon-size);\n transition: color .3s var(--n-bezier);\n "),ob("title","\n transition: color .3s var(--n-bezier);\n display: flex;\n align-items: center;\n font-size: var(--n-title-font-size);\n font-weight: var(--n-title-font-weight);\n color: var(--n-title-text-color);\n "),nb("dialog-icon-container","\n display: flex;\n justify-content: center;\n ")]),ab(nb("dialog","\n width: 446px;\n max-width: calc(100vw - 32px);\n ")),nb("dialog",[sb("\n width: 446px;\n max-width: calc(100vw - 32px);\n ")])]),bI={default:()=>li(uT,null),info:()=>li(uT,null),success:()=>li(hT,null),warning:()=>li(fT,null),error:()=>li(iT,null)},yI=zn({name:"Dialog",alias:["NimbusConfirmCard","Confirm"],props:Object.assign(Object.assign({},I_.props),vI),setup(e){const{mergedComponentPropsRef:t,mergedClsPrefixRef:n,inlineThemeDisabled:o,mergedRtlRef:r}=B_(e),i=GP("Dialog",r,n),a=ai((()=>{var n,o;const{iconPlacement:r}=e;return r||(null===(o=null===(n=null==t?void 0:t.value)||void 0===n?void 0:n.Dialog)||void 0===o?void 0:o.iconPlacement)||"left"})),l=I_("Dialog","-dialog",gI,hI,e,n),s=ai((()=>{const{type:t}=e,n=a.value,{common:{cubicBezierEaseInOut:o},self:{fontSize:r,lineHeight:i,border:s,titleTextColor:c,textColor:u,color:d,closeBorderRadius:p,closeColorHover:h,closeColorPressed:f,closeIconColor:v,closeIconColorHover:m,closeIconColorPressed:g,closeIconSize:b,borderRadius:y,titleFontWeight:x,titleFontSize:C,padding:w,iconSize:k,actionSpace:S,contentMargin:_,closeSize:P,["top"===n?"iconMarginIconTop":"iconMargin"]:T,["top"===n?"closeMarginIconTop":"closeMargin"]:A,[ub("iconColor",t)]:z}}=l.value,R=Bm(T);return{"--n-font-size":r,"--n-icon-color":z,"--n-bezier":o,"--n-close-margin":A,"--n-icon-margin-top":R.top,"--n-icon-margin-right":R.right,"--n-icon-margin-bottom":R.bottom,"--n-icon-margin-left":R.left,"--n-icon-size":k,"--n-close-size":P,"--n-close-icon-size":b,"--n-close-border-radius":p,"--n-close-color-hover":h,"--n-close-color-pressed":f,"--n-close-icon-color":v,"--n-close-icon-color-hover":m,"--n-close-icon-color-pressed":g,"--n-color":d,"--n-text-color":u,"--n-border-radius":y,"--n-padding":w,"--n-line-height":i,"--n-border":s,"--n-content-margin":_,"--n-title-font-size":C,"--n-title-font-weight":x,"--n-title-text-color":c,"--n-action-space":S}})),c=o?KP("dialog",ai((()=>`${e.type[0]}${a.value[0]}`)),s,e):void 0;return{mergedClsPrefix:n,rtlEnabled:i,mergedIconPlacement:a,mergedTheme:l,handlePositiveClick:function(t){const{onPositiveClick:n}=e;n&&n(t)},handleNegativeClick:function(t){const{onNegativeClick:n}=e;n&&n(t)},handleCloseClick:function(){const{onClose:t}=e;t&&t()},cssVars:o?void 0:s,themeClass:null==c?void 0:c.themeClass,onRender:null==c?void 0:c.onRender}},render(){var e;const{bordered:t,mergedIconPlacement:n,cssVars:o,closable:r,showIcon:i,title:a,content:l,action:s,negativeText:c,positiveText:u,positiveButtonProps:d,negativeButtonProps:p,handlePositiveClick:h,handleNegativeClick:f,mergedTheme:v,loading:m,type:g,mergedClsPrefix:b}=this;null===(e=this.onRender)||void 0===e||e.call(this);const y=i?li(CT,{clsPrefix:b,class:`${b}-dialog__icon`},{default:()=>wg(this.$slots.icon,(e=>e||(this.icon?hg(this.icon):bI[this.type]())))}):null,x=wg(this.$slots.action,(e=>e||u||c||s?li("div",{class:[`${b}-dialog__action`,this.actionClass],style:this.actionStyle},e||(s?[hg(s)]:[this.negativeText&&li(oO,Object.assign({theme:v.peers.Button,themeOverrides:v.peerOverrides.Button,ghost:!0,size:"small",onClick:f},p),{default:()=>hg(this.negativeText)}),this.positiveText&&li(oO,Object.assign({theme:v.peers.Button,themeOverrides:v.peerOverrides.Button,size:"small",type:"default"===g?"primary":g,disabled:m,loading:m,onClick:h},d),{default:()=>hg(this.positiveText)})])):null));return li("div",{class:[`${b}-dialog`,this.themeClass,this.closable&&`${b}-dialog--closable`,`${b}-dialog--icon-${n}`,t&&`${b}-dialog--bordered`,this.rtlEnabled&&`${b}-dialog--rtl`],style:o,role:"dialog"},r?wg(this.$slots.close,(e=>{const t=[`${b}-dialog__close`,this.rtlEnabled&&`${b}-dialog--rtl`];return e?li("div",{class:t},e):li(kT,{clsPrefix:b,class:t,onClick:this.handleCloseClick})})):null,i&&"top"===n?li("div",{class:`${b}-dialog-icon-container`},y):null,li("div",{class:[`${b}-dialog__title`,this.titleClass],style:this.titleStyle},i&&"left"===n?y:null,xg(this.$slots.header,(()=>[hg(a)]))),li("div",{class:[`${b}-dialog__content`,x?"":`${b}-dialog__content--last`,this.contentClass],style:this.contentStyle},xg(this.$slots.default,(()=>[hg(l)]))),x)}}),xI="n-dialog-provider",CI="n-dialog-api";function wI(e){const{modalColor:t,textColor2:n,boxShadow3:o}=e;return{color:t,textColor:n,boxShadow:o}}const kI={name:"Modal",common:qz,peers:{Scrollbar:tR,Dialog:hI,Card:uO},self:wI},SI={name:"Modal",common:tz,peers:{Scrollbar:nR,Dialog:fI,Card:dO},self:wI},_I=Object.assign(Object.assign({},hO),vI),PI=pg(_I),TI=zn({name:"ModalBody",inheritAttrs:!1,props:Object.assign(Object.assign({show:{type:Boolean,required:!0},preset:String,displayDirective:{type:String,required:!0},trapFocus:{type:Boolean,default:!0},autoFocus:{type:Boolean,default:!0},blockScroll:Boolean},_I),{renderMask:Function,onClickoutside:Function,onBeforeLeave:{type:Function,required:!0},onAfterLeave:{type:Function,required:!0},onPositiveClick:{type:Function,required:!0},onNegativeClick:{type:Function,required:!0},onClose:{type:Function,required:!0},onAfterEnter:Function,onEsc:Function}),setup(e){const t=Et(null),n=Et(null),o=Et(e.show),r=Et(null),i=Et(null);lr(jt(e,"show"),(e=>{e&&(o.value=!0)})),Vx(ai((()=>e.blockScroll&&o.value)));const a=Po(Vb);function l(){if("center"===a.transformOriginRef.value)return"";const{value:e}=r,{value:t}=i;return null===e||null===t?"":n.value?`${e}px ${t+n.value.containerScrollTop}px`:""}const s=Et(null);return lr(s,(e=>{e&&tn((()=>{const n=e.el;n&&t.value!==n&&(t.value=n)}))})),_o(Ub,t),_o(qb,null),_o(Gb,null),{mergedTheme:a.mergedThemeRef,appear:a.appearRef,isMounted:a.isMountedRef,mergedClsPrefix:a.mergedClsPrefixRef,bodyRef:t,scrollbarRef:n,displayed:o,childNodeRef:s,handlePositiveClick:function(){e.onPositiveClick()},handleNegativeClick:function(){e.onNegativeClick()},handleCloseClick:function(){const{onClose:t}=e;t&&t()},handleAfterLeave:function(){o.value=!1,r.value=null,i.value=null,e.onAfterLeave()},handleBeforeLeave:function(t){t.style.transformOrigin=l(),e.onBeforeLeave()},handleEnter:function(e){tn((()=>{!function(e){if("center"===a.transformOriginRef.value)return;const t=a.getMousePosition();if(!t)return;if(!n.value)return;const o=n.value.containerScrollTop,{offsetLeft:s,offsetTop:c}=e;if(t){const e=t.y,n=t.x;r.value=-(s-n),i.value=-(c-e-o)}e.style.transformOrigin=l()}(e)}))}}},render(){const{$slots:e,$attrs:t,handleEnter:n,handleAfterLeave:o,handleBeforeLeave:r,preset:i,mergedClsPrefix:a}=this;let l=null;if(!i){if(l=gg(e),!l)return;l=Br(l),l.props=Wr({class:`${a}-modal`},t,l.props||{})}return"show"===this.displayDirective||this.displayed||this.show?fn(li("div",{role:"none",class:`${a}-modal-body-wrapper`},li(lR,{ref:"scrollbarRef",theme:this.mergedTheme.peers.Scrollbar,themeOverrides:this.mergedTheme.peerOverrides.Scrollbar,contentClass:`${a}-modal-scroll-content`},{default:()=>{var t;return[null===(t=this.renderMask)||void 0===t?void 0:t.call(this),li(Bx,{disabled:!this.trapFocus,active:this.show,onEsc:this.onEsc,autoFocus:this.autoFocus},{default:()=>{var t;return li(vi,{name:"fade-in-scale-up-transition",appear:null!==(t=this.appear)&&void 0!==t?t:this.isMounted,onEnter:n,onAfterEnter:this.onAfterEnter,onAfterLeave:o,onBeforeLeave:r},{default:()=>{const t=[[Mi,this.show]],{onClickoutside:n}=this;return n&&t.push([dy,this.onClickoutside,void 0,{capture:!0}]),fn("confirm"===this.preset||"dialog"===this.preset?li(yI,Object.assign({},this.$attrs,{class:[`${a}-modal`,this.$attrs.class],ref:"bodyRef",theme:this.mergedTheme.peers.Dialog,themeOverrides:this.mergedTheme.peerOverrides.Dialog},sg(this.$props,mI),{"aria-modal":"true"}),e):"card"===this.preset?li(vO,Object.assign({},this.$attrs,{ref:"bodyRef",class:[`${a}-modal`,this.$attrs.class],theme:this.mergedTheme.peers.Card,themeOverrides:this.mergedTheme.peerOverrides.Card},sg(this.$props,fO),{"aria-modal":"true",role:"dialog"}),e):this.childNodeRef=l,t)}})}})]}})),[[Mi,"if"===this.displayDirective||this.displayed||this.show]]):null}}),AI=eb([nb("modal-container","\n position: fixed;\n left: 0;\n top: 0;\n height: 0;\n width: 0;\n display: flex;\n "),nb("modal-mask","\n position: fixed;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, .4);\n ",[rR({enterDuration:".25s",leaveDuration:".25s",enterCubicBezier:"var(--n-bezier-ease-out)",leaveCubicBezier:"var(--n-bezier-ease-out)"})]),nb("modal-body-wrapper","\n position: fixed;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n overflow: visible;\n ",[nb("modal-scroll-content","\n min-height: 100%;\n display: flex;\n position: relative;\n ")]),nb("modal","\n position: relative;\n align-self: center;\n color: var(--n-text-color);\n margin: auto;\n box-shadow: var(--n-box-shadow);\n ",[gR({duration:".25s",enterScale:".5"})])]),zI=Object.assign(Object.assign(Object.assign(Object.assign({},I_.props),{show:Boolean,unstableShowMask:{type:Boolean,default:!0},maskClosable:{type:Boolean,default:!0},preset:String,to:[String,Object],displayDirective:{type:String,default:"if"},transformOrigin:{type:String,default:"mouse"},zIndex:Number,autoFocus:{type:Boolean,default:!0},trapFocus:{type:Boolean,default:!0},closeOnEsc:{type:Boolean,default:!0},blockScroll:{type:Boolean,default:!0}}),_I),{onEsc:Function,"onUpdate:show":[Function,Array],onUpdateShow:[Function,Array],onAfterEnter:Function,onBeforeLeave:Function,onAfterLeave:Function,onClose:Function,onPositiveClick:Function,onNegativeClick:Function,onMaskClick:Function,internalDialog:Boolean,internalModal:Boolean,internalAppear:{type:Boolean,default:void 0},overlayStyle:[String,Object],onBeforeHide:Function,onAfterHide:Function,onHide:Function}),RI=zn({name:"Modal",inheritAttrs:!1,props:zI,setup(e){const t=Et(null),{mergedClsPrefixRef:n,namespaceRef:o,inlineThemeDisabled:r}=B_(e),i=I_("Modal","-modal",AI,kI,e,n),a=Bb(64),l=Ob(),s=$b(),c=e.internalDialog?Po(xI,null):null,u=e.internalModal?Po("n-modal-provider",null):null,d=Yx();function p(t){const{onUpdateShow:n,"onUpdate:show":o,onHide:r}=e;n&&dg(n,t),o&&dg(o,t),r&&!t&&r(t)}_o(Vb,{getMousePosition:()=>{const e=c||u;if(e){const{clickedRef:t,clickedPositionRef:n}=e;if(t.value&&n.value)return n.value}return a.value?l.value:null},mergedClsPrefixRef:n,mergedThemeRef:i,isMountedRef:s,appearRef:jt(e,"internalAppear"),transformOriginRef:jt(e,"transformOrigin")});const h=ai((()=>{const{common:{cubicBezierEaseOut:e},self:{boxShadow:t,color:n,textColor:o}}=i.value;return{"--n-bezier-ease-out":e,"--n-box-shadow":t,"--n-color":n,"--n-text-color":o}})),f=r?KP("theme-class",void 0,h,e):void 0;return{mergedClsPrefix:n,namespace:o,isMounted:s,containerRef:t,presetProps:ai((()=>sg(e,PI))),handleEsc:function(t){var n;null===(n=e.onEsc)||void 0===n||n.call(e),e.show&&e.closeOnEsc&&fb(t)&&(d.value||p(!1))},handleAfterLeave:function(){const{onAfterLeave:t,onAfterHide:n}=e;t&&dg(t),n&&n()},handleClickoutside:function(n){var o;const{onMaskClick:r}=e;r&&r(n),e.maskClosable&&(null===(o=t.value)||void 0===o?void 0:o.contains(Fm(n)))&&p(!1)},handleBeforeLeave:function(){const{onBeforeLeave:t,onBeforeHide:n}=e;t&&dg(t),n&&n()},doUpdateShow:p,handleNegativeClick:function(){const{onNegativeClick:t}=e;t?Promise.resolve(t()).then((e=>{!1!==e&&p(!1)})):p(!1)},handlePositiveClick:function(){const{onPositiveClick:t}=e;t?Promise.resolve(t()).then((e=>{!1!==e&&p(!1)})):p(!1)},handleCloseClick:function(){const{onClose:t}=e;t?Promise.resolve(t()).then((e=>{!1!==e&&p(!1)})):p(!1)},cssVars:r?void 0:h,themeClass:null==f?void 0:f.themeClass,onRender:null==f?void 0:f.onRender}},render(){const{mergedClsPrefix:e}=this;return li(Sy,{to:this.to,show:this.show},{default:()=>{var t;null===(t=this.onRender)||void 0===t||t.call(this);const{unstableShowMask:n}=this;return fn(li("div",{role:"none",ref:"containerRef",class:[`${e}-modal-container`,this.themeClass,this.namespace],style:this.cssVars},li(TI,Object.assign({style:this.overlayStyle},this.$attrs,{ref:"bodyWrapper",displayDirective:this.displayDirective,show:this.show,preset:this.preset,autoFocus:this.autoFocus,trapFocus:this.trapFocus,blockScroll:this.blockScroll},this.presetProps,{onEsc:this.handleEsc,onClose:this.handleCloseClick,onNegativeClick:this.handleNegativeClick,onPositiveClick:this.handlePositiveClick,onBeforeLeave:this.handleBeforeLeave,onAfterEnter:this.onAfterEnter,onAfterLeave:this.handleAfterLeave,onClickoutside:n?void 0:this.handleClickoutside,renderMask:n?()=>{var t;return li(vi,{name:"fade-in-transition",key:"mask",appear:null!==(t=this.internalAppear)&&void 0!==t?t:this.isMounted},{default:()=>this.show?li("div",{"aria-hidden":!0,ref:"containerRef",class:`${e}-modal-mask`,onClick:this.handleClickoutside}):null})}:void 0}),this.$slots)),[[fy,{zIndex:this.zIndex,enabled:this.show}]])}})}}),EI=Object.assign(Object.assign({},vI),{onAfterEnter:Function,onAfterLeave:Function,transformOrigin:String,blockScroll:{type:Boolean,default:!0},closeOnEsc:{type:Boolean,default:!0},onEsc:Function,autoFocus:{type:Boolean,default:!0},internalStyle:[String,Object],maskClosable:{type:Boolean,default:!0},onPositiveClick:Function,onNegativeClick:Function,onClose:Function,onMaskClick:Function}),OI=zn({name:"DialogEnvironment",props:Object.assign(Object.assign({},EI),{internalKey:{type:String,required:!0},to:[String,Object],onInternalAfterLeave:{type:Function,required:!0}}),setup(e){const t=Et(!0);function n(){t.value=!1}return{show:t,hide:n,handleUpdateShow:function(e){t.value=e},handleAfterLeave:function(){const{onInternalAfterLeave:t,internalKey:n,onAfterLeave:o}=e;t&&t(n),o&&o()},handleCloseClick:function(){const{onClose:t}=e;t?Promise.resolve(t()).then((e=>{!1!==e&&n()})):n()},handleNegativeClick:function(t){const{onNegativeClick:o}=e;o?Promise.resolve(o(t)).then((e=>{!1!==e&&n()})):n()},handlePositiveClick:function(t){const{onPositiveClick:o}=e;o?Promise.resolve(o(t)).then((e=>{!1!==e&&n()})):n()},handleMaskClick:function(t){const{onMaskClick:o,maskClosable:r}=e;o&&(o(t),r&&n())},handleEsc:function(){const{onEsc:t}=e;t&&t()}}},render(){const{handlePositiveClick:e,handleUpdateShow:t,handleNegativeClick:n,handleCloseClick:o,handleAfterLeave:r,handleMaskClick:i,handleEsc:a,to:l,maskClosable:s,show:c}=this;return li(RI,{show:c,onUpdateShow:t,onMaskClick:i,onEsc:a,to:l,maskClosable:s,onAfterEnter:this.onAfterEnter,onAfterLeave:r,closeOnEsc:this.closeOnEsc,blockScroll:this.blockScroll,autoFocus:this.autoFocus,transformOrigin:this.transformOrigin,internalAppear:!0,internalDialog:!0},{default:()=>li(yI,Object.assign({},sg(this.$props,mI),{style:this.internalStyle,onClose:o,onNegativeClick:n,onPositiveClick:e}))})}}),MI=zn({name:"DialogProvider",props:{injectionKey:String,to:[String,Object]},setup(){const e=Et([]),t={};function n(n={}){const o=ig(),r=vt(Object.assign(Object.assign({},n),{key:o,destroy:()=>{var e;null===(e=t[`n-dialog-${o}`])||void 0===e||e.hide()}}));return e.value.push(r),r}const o=["info","success","warning","error"].map((e=>t=>n(Object.assign(Object.assign({},t),{type:e})))),r={create:n,destroyAll:function(){Object.values(t).forEach((e=>{null==e||e.hide()}))},info:o[0],success:o[1],warning:o[2],error:o[3]};return _o(CI,r),_o(xI,{clickedRef:Bb(64),clickedPositionRef:Ob()}),_o("n-dialog-reactive-list",e),Object.assign(Object.assign({},r),{dialogList:e,dialogInstRefs:t,handleAfterLeave:function(t){const{value:n}=e;n.splice(n.findIndex((e=>e.key===t)),1)}})},render(){var e,t;return li(yr,null,[this.dialogList.map((e=>li(OI,cg(e,["destroy","style"],{internalStyle:e.style,to:this.to,ref:t=>{null===t?delete this.dialogInstRefs[`n-dialog-${e.key}`]:this.dialogInstRefs[`n-dialog-${e.key}`]=t},internalKey:e.key,onInternalAfterLeave:this.handleAfterLeave})))),null===(t=(e=this.$slots).default)||void 0===t?void 0:t.call(e)])}});function FI(e){const{textColor1:t,dividerColor:n,fontWeightStrong:o}=e;return{textColor:t,color:n,fontWeight:o}}const II={name:"Divider",common:qz,self:FI},LI={name:"Divider",common:tz,self:FI},BI=nb("divider","\n position: relative;\n display: flex;\n width: 100%;\n box-sizing: border-box;\n font-size: 16px;\n color: var(--n-text-color);\n transition:\n color .3s var(--n-bezier),\n background-color .3s var(--n-bezier);\n",[ib("vertical","\n margin-top: 24px;\n margin-bottom: 24px;\n ",[ib("no-title","\n display: flex;\n align-items: center;\n ")]),ob("title","\n display: flex;\n align-items: center;\n margin-left: 12px;\n margin-right: 12px;\n white-space: nowrap;\n font-weight: var(--n-font-weight);\n "),rb("title-position-left",[ob("line",[rb("left",{width:"28px"})])]),rb("title-position-right",[ob("line",[rb("right",{width:"28px"})])]),rb("dashed",[ob("line","\n background-color: #0000;\n height: 0px;\n width: 100%;\n border-style: dashed;\n border-width: 1px 0 0;\n ")]),rb("vertical","\n display: inline-block;\n height: 1em;\n margin: 0 8px;\n vertical-align: middle;\n width: 1px;\n "),ob("line","\n border: none;\n transition: background-color .3s var(--n-bezier), border-color .3s var(--n-bezier);\n height: 1px;\n width: 100%;\n margin: 0;\n "),ib("dashed",[ob("line",{backgroundColor:"var(--n-color)"})]),rb("dashed",[ob("line",{borderColor:"var(--n-color)"})]),rb("vertical",{backgroundColor:"var(--n-color)"})]),DI=zn({name:"Divider",props:Object.assign(Object.assign({},I_.props),{titlePlacement:{type:String,default:"center"},dashed:Boolean,vertical:Boolean}),setup(e){const{mergedClsPrefixRef:t,inlineThemeDisabled:n}=B_(e),o=I_("Divider","-divider",BI,II,e,t),r=ai((()=>{const{common:{cubicBezierEaseInOut:e},self:{color:t,textColor:n,fontWeight:r}}=o.value;return{"--n-bezier":e,"--n-color":t,"--n-text-color":n,"--n-font-weight":r}})),i=n?KP("divider",void 0,r,e):void 0;return{mergedClsPrefix:t,cssVars:n?void 0:r,themeClass:null==i?void 0:i.themeClass,onRender:null==i?void 0:i.onRender}},render(){var e;const{$slots:t,titlePlacement:n,vertical:o,dashed:r,cssVars:i,mergedClsPrefix:a}=this;return null===(e=this.onRender)||void 0===e||e.call(this),li("div",{role:"separator",class:[`${a}-divider`,this.themeClass,{[`${a}-divider--vertical`]:o,[`${a}-divider--no-title`]:!t.default,[`${a}-divider--dashed`]:r,[`${a}-divider--title-position-${n}`]:t.default&&n}],style:i},o?null:li("div",{class:`${a}-divider__line ${a}-divider__line--left`}),!o&&t.default?li(yr,null,li("div",{class:`${a}-divider__title`},this.$slots),li("div",{class:`${a}-divider__line ${a}-divider__line--right`})):null)}});function $I(e){const{modalColor:t,textColor1:n,textColor2:o,boxShadow3:r,lineHeight:i,fontWeightStrong:a,dividerColor:l,closeColorHover:s,closeColorPressed:c,closeIconColor:u,closeIconColorHover:d,closeIconColorPressed:p,borderRadius:h,primaryColorHover:f}=e;return{bodyPadding:"16px 24px",borderRadius:h,headerPadding:"16px 24px",footerPadding:"16px 24px",color:t,textColor:o,titleTextColor:n,titleFontSize:"18px",titleFontWeight:a,boxShadow:r,lineHeight:i,headerBorderBottom:`1px solid ${l}`,footerBorderTop:`1px solid ${l}`,closeIconColor:u,closeIconColorHover:d,closeIconColorPressed:p,closeSize:"22px",closeIconSize:"18px",closeColorHover:s,closeColorPressed:c,closeBorderRadius:h,resizableTriggerColorHover:f}}const NI={name:"Drawer",common:qz,peers:{Scrollbar:tR},self:$I},jI={name:"Drawer",common:tz,peers:{Scrollbar:nR},self:$I},HI=zn({name:"NDrawerContent",inheritAttrs:!1,props:{blockScroll:Boolean,show:{type:Boolean,default:void 0},displayDirective:{type:String,required:!0},placement:{type:String,required:!0},contentClass:String,contentStyle:[Object,String],nativeScrollbar:{type:Boolean,required:!0},scrollbarProps:Object,trapFocus:{type:Boolean,default:!0},autoFocus:{type:Boolean,default:!0},showMask:{type:[Boolean,String],required:!0},maxWidth:Number,maxHeight:Number,minWidth:Number,minHeight:Number,resizable:Boolean,onClickoutside:Function,onAfterLeave:Function,onAfterEnter:Function,onEsc:Function},setup(e){const t=Et(!!e.show),n=Et(null),o=Po(Kb);let r=0,i="",a=null;const l=Et(!1),s=Et(!1),c=ai((()=>"top"===e.placement||"bottom"===e.placement)),{mergedClsPrefixRef:u,mergedRtlRef:d}=B_(e),p=GP("Drawer",d,u),h=g,{doUpdateHeight:f,doUpdateWidth:v}=o;function m(t){var o,i;if(s.value)if(c.value){let i=(null===(o=n.value)||void 0===o?void 0:o.offsetHeight)||0;const a=r-t.clientY;i+="bottom"===e.placement?a:-a,i=(t=>{const{maxHeight:n}=e;if(n&&t>n)return n;const{minHeight:o}=e;return o&&t{const{maxWidth:n}=e;if(n&&t>n)return n;const{minWidth:o}=e;return o&&t{e.show&&(t.value=!0)})),lr((()=>e.show),(e=>{e||g()})),Hn((()=>{g()}));const b=ai((()=>{const{show:t}=e,n=[[Mi,t]];return e.showMask||n.push([dy,e.onClickoutside,void 0,{capture:!0}]),n}));return Vx(ai((()=>e.blockScroll&&t.value))),_o(qb,n),_o(Gb,null),_o(Ub,null),{bodyRef:n,rtlEnabled:p,mergedClsPrefix:o.mergedClsPrefixRef,isMounted:o.isMountedRef,mergedTheme:o.mergedThemeRef,displayed:t,transitionName:ai((()=>({right:"slide-in-from-right-transition",left:"slide-in-from-left-transition",top:"slide-in-from-top-transition",bottom:"slide-in-from-bottom-transition"}[e.placement]))),handleAfterLeave:function(){var n;t.value=!1,null===(n=e.onAfterLeave)||void 0===n||n.call(e)},bodyDirectives:b,handleMousedownResizeTrigger:e=>{s.value=!0,r=c.value?e.clientY:e.clientX,i=document.body.style.cursor,document.body.style.cursor=c.value?"ns-resize":"ew-resize",document.body.addEventListener("mousemove",m),document.body.addEventListener("mouseleave",h),document.body.addEventListener("mouseup",g)},handleMouseenterResizeTrigger:()=>{null!==a&&(window.clearTimeout(a),a=null),s.value?l.value=!0:a=window.setTimeout((()=>{l.value=!0}),300)},handleMouseleaveResizeTrigger:()=>{null!==a&&(window.clearTimeout(a),a=null),l.value=!1},isDragging:s,isHoverOnResizeTrigger:l}},render(){const{$slots:e,mergedClsPrefix:t}=this;return"show"===this.displayDirective||this.displayed||this.show?fn(li("div",{role:"none"},li(Bx,{disabled:!this.showMask||!this.trapFocus,active:this.show,autoFocus:this.autoFocus,onEsc:this.onEsc},{default:()=>li(vi,{name:this.transitionName,appear:this.isMounted,onAfterEnter:this.onAfterEnter,onAfterLeave:this.handleAfterLeave},{default:()=>fn(li("div",Wr(this.$attrs,{role:"dialog",ref:"bodyRef","aria-modal":"true",class:[`${t}-drawer`,this.rtlEnabled&&`${t}-drawer--rtl`,`${t}-drawer--${this.placement}-placement`,this.isDragging&&`${t}-drawer--unselectable`,this.nativeScrollbar&&`${t}-drawer--native-scrollbar`]}),[this.resizable?li("div",{class:[`${t}-drawer__resize-trigger`,(this.isDragging||this.isHoverOnResizeTrigger)&&`${t}-drawer__resize-trigger--hover`],onMouseenter:this.handleMouseenterResizeTrigger,onMouseleave:this.handleMouseleaveResizeTrigger,onMousedown:this.handleMousedownResizeTrigger}):null,this.nativeScrollbar?li("div",{class:[`${t}-drawer-content-wrapper`,this.contentClass],style:this.contentStyle,role:"none"},e):li(lR,Object.assign({},this.scrollbarProps,{contentStyle:this.contentStyle,contentClass:[`${t}-drawer-content-wrapper`,this.contentClass],theme:this.mergedTheme.peers.Scrollbar,themeOverrides:this.mergedTheme.peerOverrides.Scrollbar}),e)]),this.bodyDirectives)})})),[[Mi,"if"===this.displayDirective||this.displayed||this.show]]):null}}),{cubicBezierEaseIn:WI,cubicBezierEaseOut:UI}=A_,{cubicBezierEaseIn:VI,cubicBezierEaseOut:qI}=A_,{cubicBezierEaseIn:KI,cubicBezierEaseOut:GI}=A_,{cubicBezierEaseIn:XI,cubicBezierEaseOut:YI}=A_,QI=eb([nb("drawer","\n word-break: break-word;\n line-height: var(--n-line-height);\n position: absolute;\n pointer-events: all;\n box-shadow: var(--n-box-shadow);\n transition:\n background-color .3s var(--n-bezier),\n color .3s var(--n-bezier);\n background-color: var(--n-color);\n color: var(--n-text-color);\n box-sizing: border-box;\n ",[function({duration:e="0.3s",leaveDuration:t="0.2s",name:n="slide-in-from-right"}={}){return[eb(`&.${n}-transition-leave-active`,{transition:`transform ${t} ${WI}`}),eb(`&.${n}-transition-enter-active`,{transition:`transform ${e} ${UI}`}),eb(`&.${n}-transition-enter-to`,{transform:"translateX(0)"}),eb(`&.${n}-transition-enter-from`,{transform:"translateX(100%)"}),eb(`&.${n}-transition-leave-from`,{transform:"translateX(0)"}),eb(`&.${n}-transition-leave-to`,{transform:"translateX(100%)"})]}(),function({duration:e="0.3s",leaveDuration:t="0.2s",name:n="slide-in-from-left"}={}){return[eb(`&.${n}-transition-leave-active`,{transition:`transform ${t} ${VI}`}),eb(`&.${n}-transition-enter-active`,{transition:`transform ${e} ${qI}`}),eb(`&.${n}-transition-enter-to`,{transform:"translateX(0)"}),eb(`&.${n}-transition-enter-from`,{transform:"translateX(-100%)"}),eb(`&.${n}-transition-leave-from`,{transform:"translateX(0)"}),eb(`&.${n}-transition-leave-to`,{transform:"translateX(-100%)"})]}(),function({duration:e="0.3s",leaveDuration:t="0.2s",name:n="slide-in-from-top"}={}){return[eb(`&.${n}-transition-leave-active`,{transition:`transform ${t} ${KI}`}),eb(`&.${n}-transition-enter-active`,{transition:`transform ${e} ${GI}`}),eb(`&.${n}-transition-enter-to`,{transform:"translateY(0)"}),eb(`&.${n}-transition-enter-from`,{transform:"translateY(-100%)"}),eb(`&.${n}-transition-leave-from`,{transform:"translateY(0)"}),eb(`&.${n}-transition-leave-to`,{transform:"translateY(-100%)"})]}(),function({duration:e="0.3s",leaveDuration:t="0.2s",name:n="slide-in-from-bottom"}={}){return[eb(`&.${n}-transition-leave-active`,{transition:`transform ${t} ${XI}`}),eb(`&.${n}-transition-enter-active`,{transition:`transform ${e} ${YI}`}),eb(`&.${n}-transition-enter-to`,{transform:"translateY(0)"}),eb(`&.${n}-transition-enter-from`,{transform:"translateY(100%)"}),eb(`&.${n}-transition-leave-from`,{transform:"translateY(0)"}),eb(`&.${n}-transition-leave-to`,{transform:"translateY(100%)"})]}(),rb("unselectable","\n user-select: none; \n -webkit-user-select: none;\n "),rb("native-scrollbar",[nb("drawer-content-wrapper","\n overflow: auto;\n height: 100%;\n ")]),ob("resize-trigger","\n position: absolute;\n background-color: #0000;\n transition: background-color .3s var(--n-bezier);\n ",[rb("hover","\n background-color: var(--n-resize-trigger-color-hover);\n ")]),nb("drawer-content-wrapper","\n box-sizing: border-box;\n "),nb("drawer-content","\n height: 100%;\n display: flex;\n flex-direction: column;\n ",[rb("native-scrollbar",[nb("drawer-body-content-wrapper","\n height: 100%;\n overflow: auto;\n ")]),nb("drawer-body","\n flex: 1 0 0;\n overflow: hidden;\n "),nb("drawer-body-content-wrapper","\n box-sizing: border-box;\n padding: var(--n-body-padding);\n "),nb("drawer-header","\n font-weight: var(--n-title-font-weight);\n line-height: 1;\n font-size: var(--n-title-font-size);\n color: var(--n-title-text-color);\n padding: var(--n-header-padding);\n transition: border .3s var(--n-bezier);\n border-bottom: 1px solid var(--n-divider-color);\n border-bottom: var(--n-header-border-bottom);\n display: flex;\n justify-content: space-between;\n align-items: center;\n ",[ob("close","\n margin-left: 6px;\n transition:\n background-color .3s var(--n-bezier),\n color .3s var(--n-bezier);\n ")]),nb("drawer-footer","\n display: flex;\n justify-content: flex-end;\n border-top: var(--n-footer-border-top);\n transition: border .3s var(--n-bezier);\n padding: var(--n-footer-padding);\n ")]),rb("right-placement","\n top: 0;\n bottom: 0;\n right: 0;\n border-top-left-radius: var(--n-border-radius);\n border-bottom-left-radius: var(--n-border-radius);\n ",[ob("resize-trigger","\n width: 3px;\n height: 100%;\n top: 0;\n left: 0;\n transform: translateX(-1.5px);\n cursor: ew-resize;\n ")]),rb("left-placement","\n top: 0;\n bottom: 0;\n left: 0;\n border-top-right-radius: var(--n-border-radius);\n border-bottom-right-radius: var(--n-border-radius);\n ",[ob("resize-trigger","\n width: 3px;\n height: 100%;\n top: 0;\n right: 0;\n transform: translateX(1.5px);\n cursor: ew-resize;\n ")]),rb("top-placement","\n top: 0;\n left: 0;\n right: 0;\n border-bottom-left-radius: var(--n-border-radius);\n border-bottom-right-radius: var(--n-border-radius);\n ",[ob("resize-trigger","\n width: 100%;\n height: 3px;\n bottom: 0;\n left: 0;\n transform: translateY(1.5px);\n cursor: ns-resize;\n ")]),rb("bottom-placement","\n left: 0;\n bottom: 0;\n right: 0;\n border-top-left-radius: var(--n-border-radius);\n border-top-right-radius: var(--n-border-radius);\n ",[ob("resize-trigger","\n width: 100%;\n height: 3px;\n top: 0;\n left: 0;\n transform: translateY(-1.5px);\n cursor: ns-resize;\n ")])]),eb("body",[eb(">",[nb("drawer-container","\n position: fixed;\n ")])]),nb("drawer-container","\n position: relative;\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n pointer-events: none;\n ",[eb("> *","\n pointer-events: all;\n ")]),nb("drawer-mask","\n background-color: rgba(0, 0, 0, .3);\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n ",[rb("invisible","\n background-color: rgba(0, 0, 0, 0)\n "),rR({enterDuration:"0.2s",leaveDuration:"0.2s",enterCubicBezier:"var(--n-bezier-in)",leaveCubicBezier:"var(--n-bezier-out)"})])]),ZI=zn({name:"Drawer",inheritAttrs:!1,props:Object.assign(Object.assign({},I_.props),{show:Boolean,width:[Number,String],height:[Number,String],placement:{type:String,default:"right"},maskClosable:{type:Boolean,default:!0},showMask:{type:[Boolean,String],default:!0},to:[String,Object],displayDirective:{type:String,default:"if"},nativeScrollbar:{type:Boolean,default:!0},zIndex:Number,onMaskClick:Function,scrollbarProps:Object,contentClass:String,contentStyle:[Object,String],trapFocus:{type:Boolean,default:!0},onEsc:Function,autoFocus:{type:Boolean,default:!0},closeOnEsc:{type:Boolean,default:!0},blockScroll:{type:Boolean,default:!0},maxWidth:Number,maxHeight:Number,minWidth:Number,minHeight:Number,resizable:Boolean,defaultWidth:{type:[Number,String],default:251},defaultHeight:{type:[Number,String],default:251},onUpdateWidth:[Function,Array],onUpdateHeight:[Function,Array],"onUpdate:width":[Function,Array],"onUpdate:height":[Function,Array],"onUpdate:show":[Function,Array],onUpdateShow:[Function,Array],onAfterEnter:Function,onAfterLeave:Function,drawerStyle:[String,Object],drawerClass:String,target:null,onShow:Function,onHide:Function}),setup(e){const{mergedClsPrefixRef:t,namespaceRef:n,inlineThemeDisabled:o}=B_(e),r=$b(),i=I_("Drawer","-drawer",QI,NI,e,t),a=Et(e.defaultWidth),l=Et(e.defaultHeight),s=Db(jt(e,"width"),a),c=Db(jt(e,"height"),l),u=ai((()=>{const{placement:t}=e;return"top"===t||"bottom"===t?"":Ag(s.value)})),d=ai((()=>{const{placement:t}=e;return"left"===t||"right"===t?"":Ag(c.value)})),p=ai((()=>[{width:u.value,height:d.value},e.drawerStyle||""]));function h(t){const{onMaskClick:n,maskClosable:o}=e;o&&v(!1),n&&n(t)}const f=Yx();function v(t){const{onHide:n,onUpdateShow:o,"onUpdate:show":r}=e;o&&dg(o,t),r&&dg(r,t),n&&!t&&dg(n,t)}_o(Kb,{isMountedRef:r,mergedThemeRef:i,mergedClsPrefixRef:t,doUpdateShow:v,doUpdateHeight:t=>{const{onUpdateHeight:n,"onUpdate:width":o}=e;n&&dg(n,t),o&&dg(o,t),l.value=t},doUpdateWidth:t=>{const{onUpdateWidth:n,"onUpdate:width":o}=e;n&&dg(n,t),o&&dg(o,t),a.value=t}});const m=ai((()=>{const{common:{cubicBezierEaseInOut:e,cubicBezierEaseIn:t,cubicBezierEaseOut:n},self:{color:o,textColor:r,boxShadow:a,lineHeight:l,headerPadding:s,footerPadding:c,borderRadius:u,bodyPadding:d,titleFontSize:p,titleTextColor:h,titleFontWeight:f,headerBorderBottom:v,footerBorderTop:m,closeIconColor:g,closeIconColorHover:b,closeIconColorPressed:y,closeColorHover:x,closeColorPressed:C,closeIconSize:w,closeSize:k,closeBorderRadius:S,resizableTriggerColorHover:_}}=i.value;return{"--n-line-height":l,"--n-color":o,"--n-border-radius":u,"--n-text-color":r,"--n-box-shadow":a,"--n-bezier":e,"--n-bezier-out":n,"--n-bezier-in":t,"--n-header-padding":s,"--n-body-padding":d,"--n-footer-padding":c,"--n-title-text-color":h,"--n-title-font-size":p,"--n-title-font-weight":f,"--n-header-border-bottom":v,"--n-footer-border-top":m,"--n-close-icon-color":g,"--n-close-icon-color-hover":b,"--n-close-icon-color-pressed":y,"--n-close-size":k,"--n-close-color-hover":x,"--n-close-color-pressed":C,"--n-close-icon-size":w,"--n-close-border-radius":S,"--n-resize-trigger-color-hover":_}})),g=o?KP("drawer",void 0,m,e):void 0;return{mergedClsPrefix:t,namespace:n,mergedBodyStyle:p,handleOutsideClick:function(e){h(e)},handleMaskClick:h,handleEsc:function(t){var n;null===(n=e.onEsc)||void 0===n||n.call(e),e.show&&e.closeOnEsc&&fb(t)&&(f.value||v(!1))},mergedTheme:i,cssVars:o?void 0:m,themeClass:null==g?void 0:g.themeClass,onRender:null==g?void 0:g.onRender,isMounted:r}},render(){const{mergedClsPrefix:e}=this;return li(Sy,{to:this.to,show:this.show},{default:()=>{var t;return null===(t=this.onRender)||void 0===t||t.call(this),fn(li("div",{class:[`${e}-drawer-container`,this.namespace,this.themeClass],style:this.cssVars,role:"none"},this.showMask?li(vi,{name:"fade-in-transition",appear:this.isMounted},{default:()=>this.show?li("div",{"aria-hidden":!0,class:[`${e}-drawer-mask`,"transparent"===this.showMask&&`${e}-drawer-mask--invisible`],onClick:this.handleMaskClick}):null}):null,li(HI,Object.assign({},this.$attrs,{class:[this.drawerClass,this.$attrs.class],style:[this.mergedBodyStyle,this.$attrs.style],blockScroll:this.blockScroll,contentStyle:this.contentStyle,contentClass:this.contentClass,placement:this.placement,scrollbarProps:this.scrollbarProps,show:this.show,displayDirective:this.displayDirective,nativeScrollbar:this.nativeScrollbar,onAfterEnter:this.onAfterEnter,onAfterLeave:this.onAfterLeave,trapFocus:this.trapFocus,autoFocus:this.autoFocus,resizable:this.resizable,maxHeight:this.maxHeight,minHeight:this.minHeight,maxWidth:this.maxWidth,minWidth:this.minWidth,showMask:this.showMask,onEsc:this.handleEsc,onClickoutside:this.handleOutsideClick}),this.$slots)),[[fy,{zIndex:this.zIndex,enabled:this.show}]])}})}}),JI=zn({name:"DrawerContent",props:{title:String,headerClass:String,headerStyle:[Object,String],footerClass:String,footerStyle:[Object,String],bodyClass:String,bodyStyle:[Object,String],bodyContentClass:String,bodyContentStyle:[Object,String],nativeScrollbar:{type:Boolean,default:!0},scrollbarProps:Object,closable:Boolean},setup(){const e=Po(Kb,null);e||fg("drawer-content","`n-drawer-content` must be placed inside `n-drawer`.");const{doUpdateShow:t}=e;return{handleCloseClick:function(){t(!1)},mergedTheme:e.mergedThemeRef,mergedClsPrefix:e.mergedClsPrefixRef}},render(){const{title:e,mergedClsPrefix:t,nativeScrollbar:n,mergedTheme:o,bodyClass:r,bodyStyle:i,bodyContentClass:a,bodyContentStyle:l,headerClass:s,headerStyle:c,footerClass:u,footerStyle:d,scrollbarProps:p,closable:h,$slots:f}=this;return li("div",{role:"none",class:[`${t}-drawer-content`,n&&`${t}-drawer-content--native-scrollbar`]},f.header||e||h?li("div",{class:[`${t}-drawer-header`,s],style:c,role:"none"},li("div",{class:`${t}-drawer-header__main`,role:"heading","aria-level":"1"},void 0!==f.header?f.header():e),h&&li(kT,{onClick:this.handleCloseClick,clsPrefix:t,class:`${t}-drawer-header__close`,absolute:!0})):null,n?li("div",{class:[`${t}-drawer-body`,r],style:i,role:"none"},li("div",{class:[`${t}-drawer-body-content-wrapper`,a],style:l,role:"none"},f)):li(lR,Object.assign({themeOverrides:o.peerOverrides.Scrollbar,theme:o.peers.Scrollbar},p,{class:`${t}-drawer-body`,contentClass:[`${t}-drawer-body-content-wrapper`,a],contentStyle:l}),f),f.footer?li("div",{class:[`${t}-drawer-footer`,u],style:d,role:"none"},f.footer()):null)}}),eL={actionMargin:"0 0 0 20px",actionMarginRtl:"0 20px 0 0"},tL={name:"DynamicInput",common:tz,peers:{Input:xE,Button:eO},self:()=>eL},nL={gapSmall:"4px 8px",gapMedium:"8px 12px",gapLarge:"12px 16px"},oL={name:"Space",self:()=>nL},rL={name:"Space",self:function(){return nL}};let iL;function aL(){if(!pb)return!0;if(void 0===iL){const e=document.createElement("div");e.style.display="flex",e.style.flexDirection="column",e.style.rowGap="1px",e.appendChild(document.createElement("div")),e.appendChild(document.createElement("div")),document.body.appendChild(e);const t=1===e.scrollHeight;return document.body.removeChild(e),iL=t}return iL}const lL=zn({name:"Space",props:Object.assign(Object.assign({},I_.props),{align:String,justify:{type:String,default:"start"},inline:Boolean,vertical:Boolean,reverse:Boolean,size:{type:[String,Number,Array],default:"medium"},wrapItem:{type:Boolean,default:!0},itemClass:String,itemStyle:[String,Object],wrap:{type:Boolean,default:!0},internalUseGap:{type:Boolean,default:void 0}}),setup(e){const{mergedClsPrefixRef:t,mergedRtlRef:n}=B_(e),o=I_("Space","-space",void 0,rL,e,t),r=GP("Space",n,t);return{useGap:aL(),rtlEnabled:r,mergedClsPrefix:t,margin:ai((()=>{const{size:t}=e;if(Array.isArray(t))return{horizontal:t[0],vertical:t[1]};if("number"==typeof t)return{horizontal:t,vertical:t};const{self:{[ub("gap",t)]:n}}=o.value,{row:r,col:i}=function(e,t){const[n,o]=e.split(" ");return t?"row"===t?n:o:{row:n,col:o||n}}(n);return{horizontal:Im(i),vertical:Im(r)}}))}},render(){const{vertical:e,reverse:t,align:n,inline:o,justify:r,itemClass:i,itemStyle:a,margin:l,wrap:s,mergedClsPrefix:c,rtlEnabled:u,useGap:d,wrapItem:p,internalUseGap:h}=this,f=ug(lg(this),!1);if(!f.length)return null;const v=`${l.horizontal}px`,m=l.horizontal/2+"px",g=`${l.vertical}px`,b=l.vertical/2+"px",y=f.length-1,x=r.startsWith("space-");return li("div",{role:"none",class:[`${c}-space`,u&&`${c}-space--rtl`],style:{display:o?"inline-flex":"flex",flexDirection:e&&!t?"column":e&&t?"column-reverse":!e&&t?"row-reverse":"row",justifyContent:["start","end"].includes(r)?`flex-${r}`:r,flexWrap:!s||e?"nowrap":"wrap",marginTop:d||e?"":`-${b}`,marginBottom:d||e?"":`-${b}`,alignItems:n,gap:d?`${l.vertical}px ${l.horizontal}px`:""}},p||!d&&!h?f.map(((t,n)=>t.type===Cr?t:li("div",{role:"none",class:i,style:[a,{maxWidth:"100%"},d?"":e?{marginBottom:n!==y?g:""}:u?{marginLeft:x?"space-between"===r&&n===y?"":m:n!==y?v:"",marginRight:x?"space-between"===r&&0===n?"":m:"",paddingTop:b,paddingBottom:b}:{marginRight:x?"space-between"===r&&n===y?"":m:n!==y?v:"",marginLeft:x?"space-between"===r&&0===n?"":m:"",paddingTop:b,paddingBottom:b}]},t))):f)}}),sL={name:"DynamicTags",common:tz,peers:{Input:xE,Button:eO,Tag:jR,Space:oL},self:()=>({inputWidth:"64px"})},cL={name:"Element",common:tz},uL={gapSmall:"4px 8px",gapMedium:"8px 12px",gapLarge:"12px 16px"},dL={name:"Flex",self:()=>uL},pL={feedbackPadding:"4px 0 0 2px",feedbackHeightSmall:"24px",feedbackHeightMedium:"24px",feedbackHeightLarge:"26px",feedbackFontSizeSmall:"13px",feedbackFontSizeMedium:"14px",feedbackFontSizeLarge:"14px",labelFontSizeLeftSmall:"14px",labelFontSizeLeftMedium:"14px",labelFontSizeLeftLarge:"15px",labelFontSizeTopSmall:"13px",labelFontSizeTopMedium:"14px",labelFontSizeTopLarge:"14px",labelHeightSmall:"24px",labelHeightMedium:"26px",labelHeightLarge:"28px",labelPaddingVertical:"0 0 6px 2px",labelPaddingHorizontal:"0 12px 0 0",labelTextAlignVertical:"left",labelTextAlignHorizontal:"right",labelFontWeight:"400"},hL={name:"Form",common:tz,self:function(e){const{heightSmall:t,heightMedium:n,heightLarge:o,textColor1:r,errorColor:i,warningColor:a,lineHeight:l,textColor3:s}=e;return Object.assign(Object.assign({},pL),{blankHeightSmall:t,blankHeightMedium:n,blankHeightLarge:o,lineHeight:l,labelTextColor:r,asteriskColor:i,feedbackTextColorError:i,feedbackTextColorWarning:a,feedbackTextColor:s})}},fL={closeMargin:"16px 12px",closeSize:"20px",closeIconSize:"16px",width:"365px",padding:"16px",titleFontSize:"16px",metaFontSize:"12px",descriptionFontSize:"12px"};function vL(e){const{textColor2:t,successColor:n,infoColor:o,warningColor:r,errorColor:i,popoverColor:a,closeIconColor:l,closeIconColorHover:s,closeIconColorPressed:c,closeColorHover:u,closeColorPressed:d,textColor1:p,textColor3:h,borderRadius:f,fontWeightStrong:v,boxShadow2:m,lineHeight:g,fontSize:b}=e;return Object.assign(Object.assign({},fL),{borderRadius:f,lineHeight:g,fontSize:b,headerFontWeight:v,iconColor:t,iconColorSuccess:n,iconColorInfo:o,iconColorWarning:r,iconColorError:i,color:a,textColor:t,closeIconColor:l,closeIconColorHover:s,closeIconColorPressed:c,closeBorderRadius:f,closeColorHover:u,closeColorPressed:d,headerTextColor:p,descriptionTextColor:h,actionTextColor:t,boxShadow:m})}const mL={name:"Notification",common:qz,peers:{Scrollbar:tR},self:vL},gL={name:"Notification",common:tz,peers:{Scrollbar:nR},self:vL},bL={margin:"0 0 8px 0",padding:"10px 20px",maxWidth:"720px",minWidth:"420px",iconMargin:"0 10px 0 0",closeMargin:"0 0 0 10px",closeSize:"20px",closeIconSize:"16px",iconSize:"20px",fontSize:"14px"};function yL(e){const{textColor2:t,closeIconColor:n,closeIconColorHover:o,closeIconColorPressed:r,infoColor:i,successColor:a,errorColor:l,warningColor:s,popoverColor:c,boxShadow2:u,primaryColor:d,lineHeight:p,borderRadius:h,closeColorHover:f,closeColorPressed:v}=e;return Object.assign(Object.assign({},bL),{closeBorderRadius:h,textColor:t,textColorInfo:t,textColorSuccess:t,textColorError:t,textColorWarning:t,textColorLoading:t,color:c,colorInfo:c,colorSuccess:c,colorError:c,colorWarning:c,colorLoading:c,boxShadow:u,boxShadowInfo:u,boxShadowSuccess:u,boxShadowError:u,boxShadowWarning:u,boxShadowLoading:u,iconColor:t,iconColorInfo:i,iconColorSuccess:a,iconColorWarning:s,iconColorError:l,iconColorLoading:d,closeColorHover:f,closeColorPressed:v,closeIconColor:n,closeIconColorHover:o,closeIconColorPressed:r,closeColorHoverInfo:f,closeColorPressedInfo:v,closeIconColorInfo:n,closeIconColorHoverInfo:o,closeIconColorPressedInfo:r,closeColorHoverSuccess:f,closeColorPressedSuccess:v,closeIconColorSuccess:n,closeIconColorHoverSuccess:o,closeIconColorPressedSuccess:r,closeColorHoverError:f,closeColorPressedError:v,closeIconColorError:n,closeIconColorHoverError:o,closeIconColorPressedError:r,closeColorHoverWarning:f,closeColorPressedWarning:v,closeIconColorWarning:n,closeIconColorHoverWarning:o,closeIconColorPressedWarning:r,closeColorHoverLoading:f,closeColorPressedLoading:v,closeIconColorLoading:n,closeIconColorHoverLoading:o,closeIconColorPressedLoading:r,loadingColor:d,lineHeight:p,borderRadius:h})}const xL={name:"Message",common:qz,self:yL},CL={name:"Message",common:tz,self:yL},wL={name:"ButtonGroup",common:tz},kL={name:"GradientText",common:tz,self(e){const{primaryColor:t,successColor:n,warningColor:o,errorColor:r,infoColor:i,primaryColorSuppl:a,successColorSuppl:l,warningColorSuppl:s,errorColorSuppl:c,infoColorSuppl:u,fontWeightStrong:d}=e;return{fontWeight:d,rotate:"252deg",colorStartPrimary:t,colorEndPrimary:a,colorStartInfo:i,colorEndInfo:u,colorStartWarning:o,colorEndWarning:s,colorStartError:r,colorEndError:c,colorStartSuccess:n,colorEndSuccess:l}}},SL={name:"InputNumber",common:tz,peers:{Button:eO,Input:xE},self(e){const{textColorDisabled:t}=e;return{iconColorDisabled:t}}},_L={name:"InputNumber",common:qz,peers:{Button:JE,Input:CE},self:function(e){const{textColorDisabled:t}=e;return{iconColorDisabled:t}}},PL={name:"Layout",common:tz,peers:{Scrollbar:nR},self(e){const{textColor2:t,bodyColor:n,popoverColor:o,cardColor:r,dividerColor:i,scrollbarColor:a,scrollbarColorHover:l}=e;return{textColor:t,textColorInverted:t,color:n,colorEmbedded:n,headerColor:r,headerColorInverted:r,footerColor:r,footerColorInverted:r,headerBorderColor:i,headerBorderColorInverted:i,footerBorderColor:i,footerBorderColorInverted:i,siderBorderColor:i,siderBorderColorInverted:i,siderColor:r,siderColorInverted:r,siderToggleButtonBorder:"1px solid transparent",siderToggleButtonColor:o,siderToggleButtonIconColor:t,siderToggleButtonIconColorInverted:t,siderToggleBarColor:eg(n,a),siderToggleBarColorHover:eg(n,l),__invertScrollbar:"false"}}},TL={name:"Layout",common:qz,peers:{Scrollbar:tR},self:function(e){const{baseColor:t,textColor2:n,bodyColor:o,cardColor:r,dividerColor:i,actionColor:a,scrollbarColor:l,scrollbarColorHover:s,invertedColor:c}=e;return{textColor:n,textColorInverted:"#FFF",color:o,colorEmbedded:a,headerColor:r,headerColorInverted:c,footerColor:a,footerColorInverted:c,headerBorderColor:i,headerBorderColorInverted:c,footerBorderColor:i,footerBorderColorInverted:c,siderBorderColor:i,siderBorderColorInverted:c,siderColor:r,siderColorInverted:c,siderToggleButtonBorder:`1px solid ${i}`,siderToggleButtonColor:t,siderToggleButtonIconColor:n,siderToggleButtonIconColorInverted:n,siderToggleBarColor:eg(o,l),siderToggleBarColorHover:eg(o,s),__invertScrollbar:"true"}}};function AL(e){const{textColor2:t,cardColor:n,modalColor:o,popoverColor:r,dividerColor:i,borderRadius:a,fontSize:l,hoverColor:s}=e;return{textColor:t,color:n,colorHover:s,colorModal:o,colorHoverModal:eg(o,s),colorPopover:r,colorHoverPopover:eg(r,s),borderColor:i,borderColorModal:eg(o,i),borderColorPopover:eg(r,i),borderRadius:a,fontSize:l}}const zL={name:"List",common:qz,self:AL},RL={name:"List",common:tz,self:AL},EL={name:"LoadingBar",common:tz,self(e){const{primaryColor:t}=e;return{colorError:"red",colorLoading:t,height:"2px"}}},OL={name:"LoadingBar",common:qz,self:function(e){const{primaryColor:t,errorColor:n}=e;return{colorError:n,colorLoading:t,height:"2px"}}},ML={name:"Log",common:tz,peers:{Scrollbar:nR,Code:XO},self(e){const{textColor2:t,inputColor:n,fontSize:o,primaryColor:r}=e;return{loaderFontSize:o,loaderTextColor:t,loaderColor:n,loaderBorder:"1px solid #0000",loadingColor:r}}},FL={name:"Mention",common:tz,peers:{InternalSelectMenu:pR,Input:xE},self(e){const{boxShadow2:t}=e;return{menuBoxShadow:t}}};function IL(e){const{borderRadius:t,textColor3:n,primaryColor:o,textColor2:r,textColor1:i,fontSize:a,dividerColor:l,hoverColor:s,primaryColorHover:c}=e;return Object.assign({borderRadius:t,color:"#0000",groupTextColor:n,itemColorHover:s,itemColorActive:tg(o,{alpha:.1}),itemColorActiveHover:tg(o,{alpha:.1}),itemColorActiveCollapsed:tg(o,{alpha:.1}),itemTextColor:r,itemTextColorHover:r,itemTextColorActive:o,itemTextColorActiveHover:o,itemTextColorChildActive:o,itemTextColorChildActiveHover:o,itemTextColorHorizontal:r,itemTextColorHoverHorizontal:c,itemTextColorActiveHorizontal:o,itemTextColorActiveHoverHorizontal:o,itemTextColorChildActiveHorizontal:o,itemTextColorChildActiveHoverHorizontal:o,itemIconColor:i,itemIconColorHover:i,itemIconColorActive:o,itemIconColorActiveHover:o,itemIconColorChildActive:o,itemIconColorChildActiveHover:o,itemIconColorCollapsed:i,itemIconColorHorizontal:i,itemIconColorHoverHorizontal:c,itemIconColorActiveHorizontal:o,itemIconColorActiveHoverHorizontal:o,itemIconColorChildActiveHorizontal:o,itemIconColorChildActiveHoverHorizontal:o,itemHeight:"42px",arrowColor:r,arrowColorHover:r,arrowColorActive:o,arrowColorActiveHover:o,arrowColorChildActive:o,arrowColorChildActiveHover:o,colorInverted:"#0000",borderColorHorizontal:"#0000",fontSize:a,dividerColor:l},{itemColorHoverInverted:"#0000",itemColorActiveInverted:d=o,itemColorActiveHoverInverted:d,itemColorActiveCollapsedInverted:d,itemTextColorInverted:u="#BBB",itemTextColorHoverInverted:p="#FFF",itemTextColorChildActiveInverted:p,itemTextColorChildActiveHoverInverted:p,itemTextColorActiveInverted:p,itemTextColorActiveHoverInverted:p,itemTextColorHorizontalInverted:u,itemTextColorHoverHorizontalInverted:p,itemTextColorChildActiveHorizontalInverted:p,itemTextColorChildActiveHoverHorizontalInverted:p,itemTextColorActiveHorizontalInverted:p,itemTextColorActiveHoverHorizontalInverted:p,itemIconColorInverted:u,itemIconColorHoverInverted:p,itemIconColorActiveInverted:p,itemIconColorActiveHoverInverted:p,itemIconColorChildActiveInverted:p,itemIconColorChildActiveHoverInverted:p,itemIconColorCollapsedInverted:u,itemIconColorHorizontalInverted:u,itemIconColorHoverHorizontalInverted:p,itemIconColorActiveHorizontalInverted:p,itemIconColorActiveHoverHorizontalInverted:p,itemIconColorChildActiveHorizontalInverted:p,itemIconColorChildActiveHoverHorizontalInverted:p,arrowColorInverted:u,arrowColorHoverInverted:p,arrowColorActiveInverted:p,arrowColorActiveHoverInverted:p,arrowColorChildActiveInverted:p,arrowColorChildActiveHoverInverted:p,groupTextColorInverted:"#AAA"});var u,d,p}const LL={name:"Menu",common:qz,peers:{Tooltip:PM,Dropdown:FM},self:IL},BL={name:"Menu",common:tz,peers:{Tooltip:_M,Dropdown:IM},self(e){const{primaryColor:t,primaryColorSuppl:n}=e,o=IL(e);return o.itemColorActive=tg(t,{alpha:.15}),o.itemColorActiveHover=tg(t,{alpha:.15}),o.itemColorActiveCollapsed=tg(t,{alpha:.15}),o.itemColorActiveInverted=n,o.itemColorActiveHoverInverted=n,o.itemColorActiveCollapsedInverted=n,o}},DL={titleFontSize:"18px",backSize:"22px"},$L={name:"PageHeader",common:tz,self:function(e){const{textColor1:t,textColor2:n,textColor3:o,fontSize:r,fontWeightStrong:i,primaryColorHover:a,primaryColorPressed:l}=e;return Object.assign(Object.assign({},DL),{titleFontWeight:i,fontSize:r,titleTextColor:t,backColor:n,backColorHover:a,backColorPressed:l,subtitleTextColor:o})}},NL={iconSize:"22px"},jL={name:"Popconfirm",common:tz,peers:{Button:eO,Popover:_R},self:function(e){const{fontSize:t,warningColor:n}=e;return Object.assign(Object.assign({},NL),{fontSize:t,iconColor:n})}};function HL(e){const{infoColor:t,successColor:n,warningColor:o,errorColor:r,textColor2:i,progressRailColor:a,fontSize:l,fontWeight:s}=e;return{fontSize:l,fontSizeCircle:"28px",fontWeightCircle:s,railColor:a,railHeight:"8px",iconSizeCircle:"36px",iconSizeLine:"18px",iconColor:t,iconColorInfo:t,iconColorSuccess:n,iconColorWarning:o,iconColorError:r,textColorCircle:i,textColorLineInner:"rgb(255, 255, 255)",textColorLineOuter:i,fillColor:t,fillColorInfo:t,fillColorSuccess:n,fillColorWarning:o,fillColorError:r,lineBgProcessing:"linear-gradient(90deg, rgba(255, 255, 255, .3) 0%, rgba(255, 255, 255, .5) 100%)"}}const WL={name:"Progress",common:qz,self:HL},UL={name:"Progress",common:tz,self(e){const t=HL(e);return t.textColorLineInner="rgb(0, 0, 0)",t.lineBgProcessing="linear-gradient(90deg, rgba(255, 255, 255, .3) 0%, rgba(255, 255, 255, .5) 100%)",t}},VL={name:"Rate",common:tz,self(e){const{railColor:t}=e;return{itemColor:t,itemColorActive:"#CCAA33",itemSize:"20px",sizeSmall:"16px",sizeMedium:"20px",sizeLarge:"24px"}}},qL={titleFontSizeSmall:"26px",titleFontSizeMedium:"32px",titleFontSizeLarge:"40px",titleFontSizeHuge:"48px",fontSizeSmall:"14px",fontSizeMedium:"14px",fontSizeLarge:"15px",fontSizeHuge:"16px",iconSizeSmall:"64px",iconSizeMedium:"80px",iconSizeLarge:"100px",iconSizeHuge:"125px",iconColor418:void 0,iconColor404:void 0,iconColor403:void 0,iconColor500:void 0};function KL(e){const{textColor2:t,textColor1:n,errorColor:o,successColor:r,infoColor:i,warningColor:a,lineHeight:l,fontWeightStrong:s}=e;return Object.assign(Object.assign({},qL),{lineHeight:l,titleFontWeight:s,titleTextColor:n,textColor:t,iconColorError:o,iconColorSuccess:r,iconColorInfo:i,iconColorWarning:a})}const GL={name:"Result",common:qz,self:KL},XL={name:"Result",common:tz,self:KL},YL={railHeight:"4px",railWidthVertical:"4px",handleSize:"18px",dotHeight:"8px",dotWidth:"8px",dotBorderRadius:"4px"},QL={name:"Slider",common:tz,self(e){const{railColor:t,modalColor:n,primaryColorSuppl:o,popoverColor:r,textColor2:i,cardColor:a,borderRadius:l,fontSize:s,opacityDisabled:c}=e;return Object.assign(Object.assign({},YL),{fontSize:s,markFontSize:s,railColor:t,railColorHover:t,fillColor:o,fillColorHover:o,opacityDisabled:c,handleColor:"#FFF",dotColor:a,dotColorModal:n,dotColorPopover:r,handleBoxShadow:"0px 2px 4px 0 rgba(0, 0, 0, 0.4)",handleBoxShadowHover:"0px 2px 4px 0 rgba(0, 0, 0, 0.4)",handleBoxShadowActive:"0px 2px 4px 0 rgba(0, 0, 0, 0.4)",handleBoxShadowFocus:"0px 2px 4px 0 rgba(0, 0, 0, 0.4)",indicatorColor:r,indicatorBoxShadow:"0 2px 8px 0 rgba(0, 0, 0, 0.12)",indicatorTextColor:i,indicatorBorderRadius:l,dotBorder:`2px solid ${t}`,dotBorderActive:`2px solid ${o}`,dotBoxShadow:""})}};function ZL(e){const{opacityDisabled:t,heightTiny:n,heightSmall:o,heightMedium:r,heightLarge:i,heightHuge:a,primaryColor:l,fontSize:s}=e;return{fontSize:s,textColor:l,sizeTiny:n,sizeSmall:o,sizeMedium:r,sizeLarge:i,sizeHuge:a,color:l,opacitySpinning:t}}const JL={name:"Spin",common:qz,self:ZL},eB={name:"Spin",common:tz,self:ZL},tB={name:"Statistic",common:tz,self:function(e){const{textColor2:t,textColor3:n,fontSize:o,fontWeight:r}=e;return{labelFontSize:o,labelFontWeight:r,valueFontWeight:r,valueFontSize:"24px",labelTextColor:n,valuePrefixTextColor:t,valueSuffixTextColor:t,valueTextColor:t}}},nB={stepHeaderFontSizeSmall:"14px",stepHeaderFontSizeMedium:"16px",indicatorIndexFontSizeSmall:"14px",indicatorIndexFontSizeMedium:"16px",indicatorSizeSmall:"22px",indicatorSizeMedium:"28px",indicatorIconSizeSmall:"14px",indicatorIconSizeMedium:"18px"},oB={name:"Steps",common:tz,self:function(e){const{fontWeightStrong:t,baseColor:n,textColorDisabled:o,primaryColor:r,errorColor:i,textColor1:a,textColor2:l}=e;return Object.assign(Object.assign({},nB),{stepHeaderFontWeight:t,indicatorTextColorProcess:n,indicatorTextColorWait:o,indicatorTextColorFinish:r,indicatorTextColorError:i,indicatorBorderColorProcess:r,indicatorBorderColorWait:o,indicatorBorderColorFinish:r,indicatorBorderColorError:i,indicatorColorProcess:r,indicatorColorWait:"#0000",indicatorColorFinish:"#0000",indicatorColorError:"#0000",splitorColorProcess:o,splitorColorWait:o,splitorColorFinish:r,splitorColorError:o,headerTextColorProcess:a,headerTextColorWait:o,headerTextColorFinish:o,headerTextColorError:i,descriptionTextColorProcess:l,descriptionTextColorWait:o,descriptionTextColorFinish:o,descriptionTextColorError:i})}},rB={buttonHeightSmall:"14px",buttonHeightMedium:"18px",buttonHeightLarge:"22px",buttonWidthSmall:"14px",buttonWidthMedium:"18px",buttonWidthLarge:"22px",buttonWidthPressedSmall:"20px",buttonWidthPressedMedium:"24px",buttonWidthPressedLarge:"28px",railHeightSmall:"18px",railHeightMedium:"22px",railHeightLarge:"26px",railWidthSmall:"32px",railWidthMedium:"40px",railWidthLarge:"48px"},iB={name:"Switch",common:tz,self(e){const{primaryColorSuppl:t,opacityDisabled:n,borderRadius:o,primaryColor:r,textColor2:i,baseColor:a}=e;return Object.assign(Object.assign({},rB),{iconColor:a,textColor:i,loadingColor:t,opacityDisabled:n,railColor:"rgba(255, 255, 255, .20)",railColorActive:t,buttonBoxShadow:"0px 2px 4px 0 rgba(0, 0, 0, 0.4)",buttonColor:"#FFF",railBorderRadiusSmall:o,railBorderRadiusMedium:o,railBorderRadiusLarge:o,buttonBorderRadiusSmall:o,buttonBorderRadiusMedium:o,buttonBorderRadiusLarge:o,boxShadowFocus:`0 0 8px 0 ${tg(r,{alpha:.3})}`})}},aB={name:"Switch",common:qz,self:function(e){const{primaryColor:t,opacityDisabled:n,borderRadius:o,textColor3:r}=e;return Object.assign(Object.assign({},rB),{iconColor:r,textColor:"white",loadingColor:t,opacityDisabled:n,railColor:"rgba(0, 0, 0, .14)",railColorActive:t,buttonBoxShadow:"0 1px 4px 0 rgba(0, 0, 0, 0.3), inset 0 0 1px 0 rgba(0, 0, 0, 0.05)",buttonColor:"#FFF",railBorderRadiusSmall:o,railBorderRadiusMedium:o,railBorderRadiusLarge:o,buttonBorderRadiusSmall:o,buttonBorderRadiusMedium:o,buttonBorderRadiusLarge:o,boxShadowFocus:`0 0 0 2px ${tg(t,{alpha:.2})}`})}},lB={thPaddingSmall:"6px",thPaddingMedium:"12px",thPaddingLarge:"12px",tdPaddingSmall:"6px",tdPaddingMedium:"12px",tdPaddingLarge:"12px"},sB={name:"Table",common:tz,self:function(e){const{dividerColor:t,cardColor:n,modalColor:o,popoverColor:r,tableHeaderColor:i,tableColorStriped:a,textColor1:l,textColor2:s,borderRadius:c,fontWeightStrong:u,lineHeight:d,fontSizeSmall:p,fontSizeMedium:h,fontSizeLarge:f}=e;return Object.assign(Object.assign({},lB),{fontSizeSmall:p,fontSizeMedium:h,fontSizeLarge:f,lineHeight:d,borderRadius:c,borderColor:eg(n,t),borderColorModal:eg(o,t),borderColorPopover:eg(r,t),tdColor:n,tdColorModal:o,tdColorPopover:r,tdColorStriped:eg(n,a),tdColorStripedModal:eg(o,a),tdColorStripedPopover:eg(r,a),thColor:eg(n,i),thColorModal:eg(o,i),thColorPopover:eg(r,i),thTextColor:l,tdTextColor:s,thFontWeight:u})}},cB={tabFontSizeSmall:"14px",tabFontSizeMedium:"14px",tabFontSizeLarge:"16px",tabGapSmallLine:"36px",tabGapMediumLine:"36px",tabGapLargeLine:"36px",tabGapSmallLineVertical:"8px",tabGapMediumLineVertical:"8px",tabGapLargeLineVertical:"8px",tabPaddingSmallLine:"6px 0",tabPaddingMediumLine:"10px 0",tabPaddingLargeLine:"14px 0",tabPaddingVerticalSmallLine:"6px 12px",tabPaddingVerticalMediumLine:"8px 16px",tabPaddingVerticalLargeLine:"10px 20px",tabGapSmallBar:"36px",tabGapMediumBar:"36px",tabGapLargeBar:"36px",tabGapSmallBarVertical:"8px",tabGapMediumBarVertical:"8px",tabGapLargeBarVertical:"8px",tabPaddingSmallBar:"4px 0",tabPaddingMediumBar:"6px 0",tabPaddingLargeBar:"10px 0",tabPaddingVerticalSmallBar:"6px 12px",tabPaddingVerticalMediumBar:"8px 16px",tabPaddingVerticalLargeBar:"10px 20px",tabGapSmallCard:"4px",tabGapMediumCard:"4px",tabGapLargeCard:"4px",tabGapSmallCardVertical:"4px",tabGapMediumCardVertical:"4px",tabGapLargeCardVertical:"4px",tabPaddingSmallCard:"8px 16px",tabPaddingMediumCard:"10px 20px",tabPaddingLargeCard:"12px 24px",tabPaddingSmallSegment:"4px 0",tabPaddingMediumSegment:"6px 0",tabPaddingLargeSegment:"8px 0",tabPaddingVerticalLargeSegment:"0 8px",tabPaddingVerticalSmallCard:"8px 12px",tabPaddingVerticalMediumCard:"10px 16px",tabPaddingVerticalLargeCard:"12px 20px",tabPaddingVerticalSmallSegment:"0 4px",tabPaddingVerticalMediumSegment:"0 6px",tabGapSmallSegment:"0",tabGapMediumSegment:"0",tabGapLargeSegment:"0",tabGapSmallSegmentVertical:"0",tabGapMediumSegmentVertical:"0",tabGapLargeSegmentVertical:"0",panePaddingSmall:"8px 0 0 0",panePaddingMedium:"12px 0 0 0",panePaddingLarge:"16px 0 0 0",closeSize:"18px",closeIconSize:"14px"},uB={name:"Tabs",common:tz,self(e){const t=function(e){const{textColor2:t,primaryColor:n,textColorDisabled:o,closeIconColor:r,closeIconColorHover:i,closeIconColorPressed:a,closeColorHover:l,closeColorPressed:s,tabColor:c,baseColor:u,dividerColor:d,fontWeight:p,textColor1:h,borderRadius:f,fontSize:v,fontWeightStrong:m}=e;return Object.assign(Object.assign({},cB),{colorSegment:c,tabFontSizeCard:v,tabTextColorLine:h,tabTextColorActiveLine:n,tabTextColorHoverLine:n,tabTextColorDisabledLine:o,tabTextColorSegment:h,tabTextColorActiveSegment:t,tabTextColorHoverSegment:t,tabTextColorDisabledSegment:o,tabTextColorBar:h,tabTextColorActiveBar:n,tabTextColorHoverBar:n,tabTextColorDisabledBar:o,tabTextColorCard:h,tabTextColorHoverCard:h,tabTextColorActiveCard:n,tabTextColorDisabledCard:o,barColor:n,closeIconColor:r,closeIconColorHover:i,closeIconColorPressed:a,closeColorHover:l,closeColorPressed:s,closeBorderRadius:f,tabColor:c,tabColorSegment:u,tabBorderColor:d,tabFontWeightActive:p,tabFontWeight:p,tabBorderRadius:f,paneTextColor:t,fontWeightStrong:m})}(e),{inputColor:n}=e;return t.colorSegment=n,t.tabColorSegment=n,t}},dB={name:"Thing",common:tz,self:function(e){const{textColor1:t,textColor2:n,fontWeightStrong:o,fontSize:r}=e;return{fontSize:r,titleTextColor:t,textColor:n,titleFontWeight:o}}},pB={titleMarginMedium:"0 0 6px 0",titleMarginLarge:"-2px 0 6px 0",titleFontSizeMedium:"14px",titleFontSizeLarge:"16px",iconSizeMedium:"14px",iconSizeLarge:"14px"},hB={name:"Timeline",common:tz,self(e){const{textColor3:t,infoColorSuppl:n,errorColorSuppl:o,successColorSuppl:r,warningColorSuppl:i,textColor1:a,textColor2:l,railColor:s,fontWeightStrong:c,fontSize:u}=e;return Object.assign(Object.assign({},pB),{contentFontSize:u,titleFontWeight:c,circleBorder:`2px solid ${t}`,circleBorderInfo:`2px solid ${n}`,circleBorderError:`2px solid ${o}`,circleBorderSuccess:`2px solid ${r}`,circleBorderWarning:`2px solid ${i}`,iconColor:t,iconColorInfo:n,iconColorError:o,iconColorSuccess:r,iconColorWarning:i,titleTextColor:a,contentTextColor:l,metaTextColor:t,lineColor:s})}},fB={extraFontSizeSmall:"12px",extraFontSizeMedium:"12px",extraFontSizeLarge:"14px",titleFontSizeSmall:"14px",titleFontSizeMedium:"16px",titleFontSizeLarge:"16px",closeSize:"20px",closeIconSize:"16px",headerHeightSmall:"44px",headerHeightMedium:"44px",headerHeightLarge:"50px"},vB={name:"Transfer",common:tz,peers:{Checkbox:jO,Scrollbar:nR,Input:xE,Empty:Yz,Button:eO},self(e){const{fontWeight:t,fontSizeLarge:n,fontSizeMedium:o,fontSizeSmall:r,heightLarge:i,heightMedium:a,borderRadius:l,inputColor:s,tableHeaderColor:c,textColor1:u,textColorDisabled:d,textColor2:p,textColor3:h,hoverColor:f,closeColorHover:v,closeColorPressed:m,closeIconColor:g,closeIconColorHover:b,closeIconColorPressed:y,dividerColor:x}=e;return Object.assign(Object.assign({},fB),{itemHeightSmall:a,itemHeightMedium:a,itemHeightLarge:i,fontSizeSmall:r,fontSizeMedium:o,fontSizeLarge:n,borderRadius:l,dividerColor:x,borderColor:"#0000",listColor:s,headerColor:c,titleTextColor:u,titleTextColorDisabled:d,extraTextColor:h,extraTextColorDisabled:d,itemTextColor:p,itemTextColorDisabled:d,itemColorPending:f,titleFontWeight:t,closeColorHover:v,closeColorPressed:m,closeIconColor:g,closeIconColorHover:b,closeIconColorPressed:y})}},mB={name:"Tree",common:tz,peers:{Checkbox:jO,Scrollbar:nR,Empty:Yz},self(e){const{primaryColor:t}=e,n=function(e){const{borderRadiusSmall:t,dividerColor:n,hoverColor:o,pressedColor:r,primaryColor:i,textColor3:a,textColor2:l,textColorDisabled:s,fontSize:c}=e;return{fontSize:c,lineHeight:"1.5",nodeHeight:"30px",nodeWrapperPadding:"3px 0",nodeBorderRadius:t,nodeColorHover:o,nodeColorPressed:r,nodeColorActive:tg(i,{alpha:.1}),arrowColor:a,nodeTextColor:l,nodeTextColorDisabled:s,loadingColor:i,dropMarkColor:i,lineColor:n}}(e);return n.nodeColorActive=tg(t,{alpha:.15}),n}},gB={name:"TreeSelect",common:tz,peers:{Tree:mB,Empty:Yz,InternalSelection:ZR}},bB={headerFontSize1:"30px",headerFontSize2:"22px",headerFontSize3:"18px",headerFontSize4:"16px",headerFontSize5:"16px",headerFontSize6:"16px",headerMargin1:"28px 0 20px 0",headerMargin2:"28px 0 20px 0",headerMargin3:"28px 0 20px 0",headerMargin4:"28px 0 18px 0",headerMargin5:"28px 0 18px 0",headerMargin6:"28px 0 18px 0",headerPrefixWidth1:"16px",headerPrefixWidth2:"16px",headerPrefixWidth3:"12px",headerPrefixWidth4:"12px",headerPrefixWidth5:"12px",headerPrefixWidth6:"12px",headerBarWidth1:"4px",headerBarWidth2:"4px",headerBarWidth3:"3px",headerBarWidth4:"3px",headerBarWidth5:"3px",headerBarWidth6:"3px",pMargin:"16px 0 16px 0",liMargin:".25em 0 0 0",olPadding:"0 0 0 2em",ulPadding:"0 0 0 2em"},yB={name:"Typography",common:tz,self:function(e){const{primaryColor:t,textColor2:n,borderColor:o,lineHeight:r,fontSize:i,borderRadiusSmall:a,dividerColor:l,fontWeightStrong:s,textColor1:c,textColor3:u,infoColor:d,warningColor:p,errorColor:h,successColor:f,codeColor:v}=e;return Object.assign(Object.assign({},bB),{aTextColor:t,blockquoteTextColor:n,blockquotePrefixColor:o,blockquoteLineHeight:r,blockquoteFontSize:i,codeBorderRadius:a,liTextColor:n,liLineHeight:r,liFontSize:i,hrColor:l,headerFontWeight:s,headerTextColor:c,pTextColor:n,pTextColor1Depth:c,pTextColor2Depth:n,pTextColor3Depth:u,pLineHeight:r,pFontSize:i,headerBarColor:t,headerBarColorPrimary:t,headerBarColorInfo:d,headerBarColorError:h,headerBarColorWarning:p,headerBarColorSuccess:f,textColor:n,textColor1Depth:c,textColor2Depth:n,textColor3Depth:u,textColorPrimary:t,textColorInfo:d,textColorSuccess:f,textColorWarning:p,textColorError:h,codeTextColor:n,codeColor:v,codeBorder:"1px solid #0000"})}},xB={name:"Upload",common:tz,peers:{Button:eO,Progress:UL},self(e){const{errorColor:t}=e,n=function(e){const{iconColor:t,primaryColor:n,errorColor:o,textColor2:r,successColor:i,opacityDisabled:a,actionColor:l,borderColor:s,hoverColor:c,lineHeight:u,borderRadius:d,fontSize:p}=e;return{fontSize:p,lineHeight:u,borderRadius:d,draggerColor:l,draggerBorder:`1px dashed ${s}`,draggerBorderHover:`1px dashed ${n}`,itemColorHover:c,itemColorHoverError:tg(o,{alpha:.06}),itemTextColor:r,itemTextColorError:o,itemTextColorSuccess:i,itemIconColor:t,itemDisabledOpacity:a,itemBorderImageCardError:`1px solid ${o}`,itemBorderImageCard:`1px solid ${s}`}}(e);return n.itemColorHoverError=tg(t,{alpha:.09}),n}},CB={name:"Watermark",common:tz,self(e){const{fontFamily:t}=e;return{fontFamily:t}}},wB={name:"Row",common:tz},kB={name:"FloatButton",common:tz,self(e){const{popoverColor:t,textColor2:n,buttonColor2Hover:o,buttonColor2Pressed:r,primaryColor:i,primaryColorHover:a,primaryColorPressed:l,baseColor:s,borderRadius:c}=e;return{color:t,textColor:n,boxShadow:"0 2px 8px 0px rgba(0, 0, 0, .12)",boxShadowHover:"0 2px 12px 0px rgba(0, 0, 0, .18)",boxShadowPressed:"0 2px 12px 0px rgba(0, 0, 0, .18)",colorHover:o,colorPressed:r,colorPrimary:i,colorPrimaryHover:a,colorPrimaryPressed:l,textColorPrimary:s,borderRadiusSquare:c}}},SB={name:"IconWrapper",common:tz,self:function(e){const{primaryColor:t,baseColor:n}=e;return{color:t,iconColor:n}}},_B={name:"Image",common:tz,peers:{Tooltip:_M},self:e=>{const{textColor2:t}=e;return{toolbarIconColor:t,toolbarColor:"rgba(0, 0, 0, .35)",toolbarBoxShadow:"none",toolbarBorderRadius:"24px"}}};function PB(e){return null==e||"string"==typeof e&&""===e.trim()?null:Number(e)}function TB(e){return null==e||!Number.isNaN(e)}function AB(e,t){return"number"!=typeof e?"":void 0===t?String(e):e.toFixed(t)}function zB(e){if(null===e)return null;if("number"==typeof e)return e;{const t=Number(e);return Number.isNaN(t)?null:t}}const RB=eb([nb("input-number-suffix","\n display: inline-block;\n margin-right: 10px;\n "),nb("input-number-prefix","\n display: inline-block;\n margin-left: 10px;\n ")]),EB=zn({name:"InputNumber",props:Object.assign(Object.assign({},I_.props),{autofocus:Boolean,loading:{type:Boolean,default:void 0},placeholder:String,defaultValue:{type:Number,default:null},value:Number,step:{type:[Number,String],default:1},min:[Number,String],max:[Number,String],size:String,disabled:{type:Boolean,default:void 0},validator:Function,bordered:{type:Boolean,default:void 0},showButton:{type:Boolean,default:!0},buttonPlacement:{type:String,default:"right"},inputProps:Object,readonly:Boolean,clearable:Boolean,keyboard:{type:Object,default:{}},updateValueOnInput:{type:Boolean,default:!0},round:{type:Boolean,default:void 0},parse:Function,format:Function,precision:Number,status:String,"onUpdate:value":[Function,Array],onUpdateValue:[Function,Array],onFocus:[Function,Array],onBlur:[Function,Array],onClear:[Function,Array],onChange:[Function,Array]}),setup(e){const{mergedBorderedRef:t,mergedClsPrefixRef:n,mergedRtlRef:o}=B_(e),r=I_("InputNumber","-input-number",RB,_L,e,n),{localeRef:i}=VP("InputNumber"),a=eC(e),{mergedSizeRef:l,mergedDisabledRef:s,mergedStatusRef:c}=a,u=Et(null),d=Et(null),p=Et(null),h=Et(e.defaultValue),f=Db(jt(e,"value"),h),v=Et(""),m=e=>{const t=String(e).split(".")[1];return t?t.length:0},g=mb((()=>{const{placeholder:t}=e;return void 0!==t?t:i.value.placeholder})),b=mb((()=>{const t=zB(e.step);return null!==t?0===t?1:Math.abs(t):1})),y=mb((()=>{const t=zB(e.min);return null!==t?t:null})),x=mb((()=>{const t=zB(e.max);return null!==t?t:null})),C=()=>{const{value:t}=f;if(TB(t)){const{format:n,precision:o}=e;n?v.value=n(t):null===t||void 0===o||m(t)>o?v.value=AB(t,void 0):v.value=AB(t,o)}else v.value=String(t)};C();const w=t=>{const{value:n}=f;if(t===n)return void C();const{"onUpdate:value":o,onUpdateValue:r,onChange:i}=e,{nTriggerFormInput:l,nTriggerFormChange:s}=a;i&&dg(i,t),r&&dg(r,t),o&&dg(o,t),h.value=t,l(),s()},k=({offset:t,doUpdateIfValid:n,fixPrecision:o,isInputing:r})=>{const{value:i}=v;if(r&&(a=i).includes(".")&&(/^(-)?\d+.*(\.|0)$/.test(a)||/^\.\d+$/.test(a)))return!1;var a;const l=(e.parse||PB)(i);if(null===l)return n&&w(null),null;if(TB(l)){const i=m(l),{precision:a}=e;if(void 0!==a&&a{const n=[e.min,e.max,e.step,t].map((e=>void 0===e?0:m(e)));return Math.max(...n)})(l)));if(TB(s)){const{value:t}=x,{value:o}=y;if(null!==t&&s>t){if(!n||r)return!1;s=t}if(null!==o&&s!1===k({offset:0,doUpdateIfValid:!1,isInputing:!1,fixPrecision:!1}))),_=mb((()=>{const{value:t}=f;if(e.validator&&null===t)return!1;const{value:n}=b;return!1!==k({offset:-n,doUpdateIfValid:!1,isInputing:!1,fixPrecision:!1})})),P=mb((()=>{const{value:t}=f;if(e.validator&&null===t)return!1;const{value:n}=b;return!1!==k({offset:+n,doUpdateIfValid:!1,isInputing:!1,fixPrecision:!1})}));function T(){const{value:t}=P;if(!t)return void B();const{value:n}=f;if(null===n)e.validator||w(E());else{const{value:e}=b;k({offset:e,doUpdateIfValid:!0,isInputing:!1,fixPrecision:!0})}}function A(){const{value:t}=_;if(!t)return void I();const{value:n}=f;if(null===n)e.validator||w(E());else{const{value:e}=b;k({offset:-e,doUpdateIfValid:!0,isInputing:!1,fixPrecision:!0})}}const z=function(t){const{onFocus:n}=e,{nTriggerFormFocus:o}=a;n&&dg(n,t),o()},R=function(t){var n,o;if(t.target===(null===(n=u.value)||void 0===n?void 0:n.wrapperElRef))return;const r=k({offset:0,doUpdateIfValid:!0,isInputing:!1,fixPrecision:!0});if(!1!==r){const e=null===(o=u.value)||void 0===o?void 0:o.inputElRef;e&&(e.value=String(r||"")),f.value===r&&C()}else C();const{onBlur:i}=e,{nTriggerFormBlur:l}=a;i&&dg(i,t),l(),tn((()=>{C()}))};function E(){if(e.validator)return null;const{value:t}=y,{value:n}=x;return null!==t?Math.max(0,t):null!==n?Math.min(0,n):0}let O=null,M=null,F=null;function I(){F&&(window.clearTimeout(F),F=null),O&&(window.clearInterval(O),O=null)}let L=null;function B(){L&&(window.clearTimeout(L),L=null),M&&(window.clearInterval(M),M=null)}lr(f,(()=>{C()}));const D={focus:()=>{var e;return null===(e=u.value)||void 0===e?void 0:e.focus()},blur:()=>{var e;return null===(e=u.value)||void 0===e?void 0:e.blur()},select:()=>{var e;return null===(e=u.value)||void 0===e?void 0:e.select()}},$=GP("InputNumber",o,n);return Object.assign(Object.assign({},D),{rtlEnabled:$,inputInstRef:u,minusButtonInstRef:d,addButtonInstRef:p,mergedClsPrefix:n,mergedBordered:t,uncontrolledValue:h,mergedValue:f,mergedPlaceholder:g,displayedValueInvalid:S,mergedSize:l,mergedDisabled:s,displayedValue:v,addable:P,minusable:_,mergedStatus:c,handleFocus:z,handleBlur:R,handleClear:function(t){!function(t){const{onClear:n}=e;n&&dg(n,t)}(t),w(null)},handleMouseDown:function(e){var t,n,o;(null===(t=p.value)||void 0===t?void 0:t.$el.contains(e.target))&&e.preventDefault(),(null===(n=d.value)||void 0===n?void 0:n.$el.contains(e.target))&&e.preventDefault(),null===(o=u.value)||void 0===o||o.activate()},handleAddClick:()=>{M||T()},handleMinusClick:()=>{O||A()},handleAddMousedown:function(){B(),L=window.setTimeout((()=>{M=window.setInterval((()=>{T()}),100)}),800),Pb("mouseup",document,B,{once:!0})},handleMinusMousedown:function(){I(),F=window.setTimeout((()=>{O=window.setInterval((()=>{A()}),100)}),800),Pb("mouseup",document,I,{once:!0})},handleKeyDown:function(t){var n,o;if("Enter"===t.key){if(t.target===(null===(n=u.value)||void 0===n?void 0:n.wrapperElRef))return;!1!==k({offset:0,doUpdateIfValid:!0,isInputing:!1,fixPrecision:!0})&&(null===(o=u.value)||void 0===o||o.deactivate())}else if("ArrowUp"===t.key){if(!P.value)return;if(!1===e.keyboard.ArrowUp)return;t.preventDefault(),!1!==k({offset:0,doUpdateIfValid:!0,isInputing:!1,fixPrecision:!0})&&T()}else if("ArrowDown"===t.key){if(!_.value)return;if(!1===e.keyboard.ArrowDown)return;t.preventDefault(),!1!==k({offset:0,doUpdateIfValid:!0,isInputing:!1,fixPrecision:!0})&&A()}},handleUpdateDisplayedValue:function(t){v.value=t,!e.updateValueOnInput||e.format||e.parse||void 0!==e.precision||k({offset:0,doUpdateIfValid:!0,isInputing:!0,fixPrecision:!1})},mergedTheme:r,inputThemeOverrides:{paddingSmall:"0 8px 0 10px",paddingMedium:"0 8px 0 12px",paddingLarge:"0 8px 0 14px"},buttonThemeOverrides:ai((()=>{const{self:{iconColorDisabled:e}}=r.value,[t,n,o,i]=Qm(e);return{textColorTextDisabled:`rgb(${t}, ${n}, ${o})`,opacityDisabled:`${i}`}}))})},render(){const{mergedClsPrefix:e,$slots:t}=this,n=()=>li(rO,{text:!0,disabled:!this.minusable||this.mergedDisabled||this.readonly,focusable:!1,theme:this.mergedTheme.peers.Button,themeOverrides:this.mergedTheme.peerOverrides.Button,builtinThemeOverrides:this.buttonThemeOverrides,onClick:this.handleMinusClick,onMousedown:this.handleMinusMousedown,ref:"minusButtonInstRef"},{icon:()=>xg(t["minus-icon"],(()=>[li(CT,{clsPrefix:e},{default:()=>li(pT,null)})]))}),o=()=>li(rO,{text:!0,disabled:!this.addable||this.mergedDisabled||this.readonly,focusable:!1,theme:this.mergedTheme.peers.Button,themeOverrides:this.mergedTheme.peerOverrides.Button,builtinThemeOverrides:this.buttonThemeOverrides,onClick:this.handleAddClick,onMousedown:this.handleAddMousedown,ref:"addButtonInstRef"},{icon:()=>xg(t["add-icon"],(()=>[li(CT,{clsPrefix:e},{default:()=>li(XP,null)})]))});return li("div",{class:[`${e}-input-number`,this.rtlEnabled&&`${e}-input-number--rtl`]},li(AE,{ref:"inputInstRef",autofocus:this.autofocus,status:this.mergedStatus,bordered:this.mergedBordered,loading:this.loading,value:this.displayedValue,onUpdateValue:this.handleUpdateDisplayedValue,theme:this.mergedTheme.peers.Input,themeOverrides:this.mergedTheme.peerOverrides.Input,builtinThemeOverrides:this.inputThemeOverrides,size:this.mergedSize,placeholder:this.mergedPlaceholder,disabled:this.mergedDisabled,readonly:this.readonly,round:this.round,textDecoration:this.displayedValueInvalid?"line-through":void 0,onFocus:this.handleFocus,onBlur:this.handleBlur,onKeydown:this.handleKeyDown,onMousedown:this.handleMouseDown,onClear:this.handleClear,clearable:this.clearable,inputProps:this.inputProps,internalLoadingBeforeSuffix:!0},{prefix:()=>{var o;return this.showButton&&"both"===this.buttonPlacement?[n(),wg(t.prefix,(t=>t?li("span",{class:`${e}-input-number-prefix`},t):null))]:null===(o=t.prefix)||void 0===o?void 0:o.call(t)},suffix:()=>{var r;return this.showButton?[wg(t.suffix,(t=>t?li("span",{class:`${e}-input-number-suffix`},t):null)),"right"===this.buttonPlacement?n():null,o()]:null===(r=t.suffix)||void 0===r?void 0:r.call(t)}}))}}),OB="n-layout-sider",MB={type:String,default:"static"},FB=nb("layout","\n color: var(--n-text-color);\n background-color: var(--n-color);\n box-sizing: border-box;\n position: relative;\n z-index: auto;\n flex: auto;\n overflow: hidden;\n transition:\n box-shadow .3s var(--n-bezier),\n background-color .3s var(--n-bezier),\n color .3s var(--n-bezier);\n",[nb("layout-scroll-container","\n overflow-x: hidden;\n box-sizing: border-box;\n height: 100%;\n "),rb("absolute-positioned","\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n ")]),IB={embedded:Boolean,position:MB,nativeScrollbar:{type:Boolean,default:!0},scrollbarProps:Object,onScroll:Function,contentClass:String,contentStyle:{type:[String,Object],default:""},hasSider:Boolean,siderPlacement:{type:String,default:"left"}},LB="n-layout",BB=zn({name:(DB=!1)?"LayoutContent":"Layout",props:Object.assign(Object.assign({},I_.props),IB),setup(e){const t=Et(null),n=Et(null),{mergedClsPrefixRef:o,inlineThemeDisabled:r}=B_(e),i=I_("Layout","-layout",FB,TL,e,o);_o(LB,e);let a=0,l=0;Qx((()=>{if(e.nativeScrollbar){const e=t.value;e&&(e.scrollTop=l,e.scrollLeft=a)}}));const s={scrollTo:function(o,r){if(e.nativeScrollbar){const{value:e}=t;e&&(void 0===r?e.scrollTo(o):e.scrollTo(o,r))}else{const{value:e}=n;e&&e.scrollTo(o,r)}}},c=ai((()=>{const{common:{cubicBezierEaseInOut:t},self:n}=i.value;return{"--n-bezier":t,"--n-color":e.embedded?n.colorEmbedded:n.color,"--n-text-color":n.textColor}})),u=r?KP("layout",ai((()=>e.embedded?"e":"")),c,e):void 0;return Object.assign({mergedClsPrefix:o,scrollableElRef:t,scrollbarInstRef:n,hasSiderStyle:{display:"flex",flexWrap:"nowrap",width:"100%",flexDirection:"row"},mergedTheme:i,handleNativeElScroll:t=>{var n;const o=t.target;a=o.scrollLeft,l=o.scrollTop,null===(n=e.onScroll)||void 0===n||n.call(e,t)},cssVars:r?void 0:c,themeClass:null==u?void 0:u.themeClass,onRender:null==u?void 0:u.onRender},s)},render(){var e;const{mergedClsPrefix:t,hasSider:n}=this;null===(e=this.onRender)||void 0===e||e.call(this);const o=n?this.hasSiderStyle:void 0;return li("div",{class:[this.themeClass,DB&&`${t}-layout-content`,`${t}-layout`,`${t}-layout--${this.position}-positioned`],style:this.cssVars},this.nativeScrollbar?li("div",{ref:"scrollableElRef",class:[`${t}-layout-scroll-container`,this.contentClass],style:[this.contentStyle,o],onScroll:this.handleNativeElScroll},this.$slots):li(lR,Object.assign({},this.scrollbarProps,{onScroll:this.onScroll,ref:"scrollbarInstRef",theme:this.mergedTheme.peers.Scrollbar,themeOverrides:this.mergedTheme.peerOverrides.Scrollbar,contentClass:this.contentClass,contentStyle:[this.contentStyle,o]}),this.$slots))}});var DB;const $B=nb("layout-sider","\n flex-shrink: 0;\n box-sizing: border-box;\n position: relative;\n z-index: 1;\n color: var(--n-text-color);\n transition:\n color .3s var(--n-bezier),\n border-color .3s var(--n-bezier),\n min-width .3s var(--n-bezier),\n max-width .3s var(--n-bezier),\n transform .3s var(--n-bezier),\n background-color .3s var(--n-bezier);\n background-color: var(--n-color);\n display: flex;\n justify-content: flex-end;\n",[rb("bordered",[ob("border",'\n content: "";\n position: absolute;\n top: 0;\n bottom: 0;\n width: 1px;\n background-color: var(--n-border-color);\n transition: background-color .3s var(--n-bezier);\n ')]),ob("left-placement",[rb("bordered",[ob("border","\n right: 0;\n ")])]),rb("right-placement","\n justify-content: flex-start;\n ",[rb("bordered",[ob("border","\n left: 0;\n ")]),rb("collapsed",[nb("layout-toggle-button",[nb("base-icon","\n transform: rotate(180deg);\n ")]),nb("layout-toggle-bar",[eb("&:hover",[ob("top",{transform:"rotate(-12deg) scale(1.15) translateY(-2px)"}),ob("bottom",{transform:"rotate(12deg) scale(1.15) translateY(2px)"})])])]),nb("layout-toggle-button","\n left: 0;\n transform: translateX(-50%) translateY(-50%);\n ",[nb("base-icon","\n transform: rotate(0);\n ")]),nb("layout-toggle-bar","\n left: -28px;\n transform: rotate(180deg);\n ",[eb("&:hover",[ob("top",{transform:"rotate(12deg) scale(1.15) translateY(-2px)"}),ob("bottom",{transform:"rotate(-12deg) scale(1.15) translateY(2px)"})])])]),rb("collapsed",[nb("layout-toggle-bar",[eb("&:hover",[ob("top",{transform:"rotate(-12deg) scale(1.15) translateY(-2px)"}),ob("bottom",{transform:"rotate(12deg) scale(1.15) translateY(2px)"})])]),nb("layout-toggle-button",[nb("base-icon","\n transform: rotate(0);\n ")])]),nb("layout-toggle-button","\n transition:\n color .3s var(--n-bezier),\n right .3s var(--n-bezier),\n left .3s var(--n-bezier),\n border-color .3s var(--n-bezier),\n background-color .3s var(--n-bezier);\n cursor: pointer;\n width: 24px;\n height: 24px;\n position: absolute;\n top: 50%;\n right: 0;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 18px;\n color: var(--n-toggle-button-icon-color);\n border: var(--n-toggle-button-border);\n background-color: var(--n-toggle-button-color);\n box-shadow: 0 2px 4px 0px rgba(0, 0, 0, .06);\n transform: translateX(50%) translateY(-50%);\n z-index: 1;\n ",[nb("base-icon","\n transition: transform .3s var(--n-bezier);\n transform: rotate(180deg);\n ")]),nb("layout-toggle-bar","\n cursor: pointer;\n height: 72px;\n width: 32px;\n position: absolute;\n top: calc(50% - 36px);\n right: -28px;\n ",[ob("top, bottom","\n position: absolute;\n width: 4px;\n border-radius: 2px;\n height: 38px;\n left: 14px;\n transition: \n background-color .3s var(--n-bezier),\n transform .3s var(--n-bezier);\n "),ob("bottom","\n position: absolute;\n top: 34px;\n "),eb("&:hover",[ob("top",{transform:"rotate(12deg) scale(1.15) translateY(-2px)"}),ob("bottom",{transform:"rotate(-12deg) scale(1.15) translateY(2px)"})]),ob("top, bottom",{backgroundColor:"var(--n-toggle-bar-color)"}),eb("&:hover",[ob("top, bottom",{backgroundColor:"var(--n-toggle-bar-color-hover)"})])]),ob("border","\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n width: 1px;\n transition: background-color .3s var(--n-bezier);\n "),nb("layout-sider-scroll-container","\n flex-grow: 1;\n flex-shrink: 0;\n box-sizing: border-box;\n height: 100%;\n opacity: 0;\n transition: opacity .3s var(--n-bezier);\n max-width: 100%;\n "),rb("show-content",[nb("layout-sider-scroll-container",{opacity:1})]),rb("absolute-positioned","\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n ")]),NB=zn({name:"LayoutToggleButton",props:{clsPrefix:{type:String,required:!0},onClick:Function},render(){const{clsPrefix:e}=this;return li("div",{class:`${e}-layout-toggle-button`,onClick:this.onClick},li(CT,{clsPrefix:e},{default:()=>li(eT,null)}))}}),jB=zn({props:{clsPrefix:{type:String,required:!0},onClick:Function},render(){const{clsPrefix:e}=this;return li("div",{onClick:this.onClick,class:`${e}-layout-toggle-bar`},li("div",{class:`${e}-layout-toggle-bar__top`}),li("div",{class:`${e}-layout-toggle-bar__bottom`}))}}),HB={position:MB,bordered:Boolean,collapsedWidth:{type:Number,default:48},width:{type:[Number,String],default:272},contentClass:String,contentStyle:{type:[String,Object],default:""},collapseMode:{type:String,default:"transform"},collapsed:{type:Boolean,default:void 0},defaultCollapsed:Boolean,showCollapsedContent:{type:Boolean,default:!0},showTrigger:{type:[Boolean,String],default:!1},nativeScrollbar:{type:Boolean,default:!0},inverted:Boolean,scrollbarProps:Object,triggerClass:String,triggerStyle:[String,Object],collapsedTriggerClass:String,collapsedTriggerStyle:[String,Object],"onUpdate:collapsed":[Function,Array],onUpdateCollapsed:[Function,Array],onAfterEnter:Function,onAfterLeave:Function,onExpand:[Function,Array],onCollapse:[Function,Array],onScroll:Function},WB=zn({name:"LayoutSider",props:Object.assign(Object.assign({},I_.props),HB),setup(e){const t=Po(LB),n=Et(null),o=Et(null),r=Et(e.defaultCollapsed),i=Db(jt(e,"collapsed"),r),a=ai((()=>Ag(i.value?e.collapsedWidth:e.width))),l=ai((()=>"transform"!==e.collapseMode?{}:{minWidth:Ag(e.width)})),s=ai((()=>t?t.siderPlacement:"left"));let c=0,u=0;Qx((()=>{if(e.nativeScrollbar){const e=n.value;e&&(e.scrollTop=u,e.scrollLeft=c)}})),_o(OB,{collapsedRef:i,collapseModeRef:jt(e,"collapseMode")});const{mergedClsPrefixRef:d,inlineThemeDisabled:p}=B_(e),h=I_("Layout","-layout-sider",$B,TL,e,d),f={scrollTo:function(t,r){if(e.nativeScrollbar){const{value:e}=n;e&&(void 0===r?e.scrollTo(t):e.scrollTo(t,r))}else{const{value:e}=o;e&&e.scrollTo(t,r)}}},v=ai((()=>{const{common:{cubicBezierEaseInOut:t},self:n}=h.value,{siderToggleButtonColor:o,siderToggleButtonBorder:r,siderToggleBarColor:i,siderToggleBarColorHover:a}=n,l={"--n-bezier":t,"--n-toggle-button-color":o,"--n-toggle-button-border":r,"--n-toggle-bar-color":i,"--n-toggle-bar-color-hover":a};return e.inverted?(l["--n-color"]=n.siderColorInverted,l["--n-text-color"]=n.textColorInverted,l["--n-border-color"]=n.siderBorderColorInverted,l["--n-toggle-button-icon-color"]=n.siderToggleButtonIconColorInverted,l.__invertScrollbar=n.__invertScrollbar):(l["--n-color"]=n.siderColor,l["--n-text-color"]=n.textColor,l["--n-border-color"]=n.siderBorderColor,l["--n-toggle-button-icon-color"]=n.siderToggleButtonIconColor),l})),m=p?KP("layout-sider",ai((()=>e.inverted?"a":"b")),v,e):void 0;return Object.assign({scrollableElRef:n,scrollbarInstRef:o,mergedClsPrefix:d,mergedTheme:h,styleMaxWidth:a,mergedCollapsed:i,scrollContainerStyle:l,siderPlacement:s,handleNativeElScroll:t=>{var n;const o=t.target;c=o.scrollLeft,u=o.scrollTop,null===(n=e.onScroll)||void 0===n||n.call(e,t)},handleTransitionend:function(t){var n,o;"max-width"===t.propertyName&&(i.value?null===(n=e.onAfterLeave)||void 0===n||n.call(e):null===(o=e.onAfterEnter)||void 0===o||o.call(e))},handleTriggerClick:function(){const{"onUpdate:collapsed":t,onUpdateCollapsed:n,onExpand:o,onCollapse:a}=e,{value:l}=i;n&&dg(n,!l),t&&dg(t,!l),r.value=!l,l?o&&dg(o):a&&dg(a)},inlineThemeDisabled:p,cssVars:v,themeClass:null==m?void 0:m.themeClass,onRender:null==m?void 0:m.onRender},f)},render(){var e;const{mergedClsPrefix:t,mergedCollapsed:n,showTrigger:o}=this;return null===(e=this.onRender)||void 0===e||e.call(this),li("aside",{class:[`${t}-layout-sider`,this.themeClass,`${t}-layout-sider--${this.position}-positioned`,`${t}-layout-sider--${this.siderPlacement}-placement`,this.bordered&&`${t}-layout-sider--bordered`,n&&`${t}-layout-sider--collapsed`,(!n||this.showCollapsedContent)&&`${t}-layout-sider--show-content`],onTransitionend:this.handleTransitionend,style:[this.inlineThemeDisabled?void 0:this.cssVars,{maxWidth:this.styleMaxWidth,width:Ag(this.width)}]},this.nativeScrollbar?li("div",{class:[`${t}-layout-sider-scroll-container`,this.contentClass],onScroll:this.handleNativeElScroll,style:[this.scrollContainerStyle,{overflow:"auto"},this.contentStyle],ref:"scrollableElRef"},this.$slots):li(lR,Object.assign({},this.scrollbarProps,{onScroll:this.onScroll,ref:"scrollbarInstRef",style:this.scrollContainerStyle,contentStyle:this.contentStyle,contentClass:this.contentClass,theme:this.mergedTheme.peers.Scrollbar,themeOverrides:this.mergedTheme.peerOverrides.Scrollbar,builtinThemeOverrides:this.inverted&&"true"===this.cssVars.__invertScrollbar?{colorHover:"rgba(255, 255, 255, .4)",color:"rgba(255, 255, 255, .3)"}:void 0}),this.$slots),o?li("bar"===o?jB:NB,{clsPrefix:t,class:n?this.collapsedTriggerClass:this.triggerClass,style:n?this.collapsedTriggerStyle:this.triggerStyle,onClick:this.handleTriggerClick}):null,this.bordered?li("div",{class:`${t}-layout-sider__border`}):null)}}),UB={extraFontSize:"12px",width:"440px"},VB={name:"Transfer",common:tz,peers:{Checkbox:jO,Scrollbar:nR,Input:xE,Empty:Yz,Button:eO},self(e){const{iconColorDisabled:t,iconColor:n,fontWeight:o,fontSizeLarge:r,fontSizeMedium:i,fontSizeSmall:a,heightLarge:l,heightMedium:s,heightSmall:c,borderRadius:u,inputColor:d,tableHeaderColor:p,textColor1:h,textColorDisabled:f,textColor2:v,hoverColor:m}=e;return Object.assign(Object.assign({},UB),{itemHeightSmall:c,itemHeightMedium:s,itemHeightLarge:l,fontSizeSmall:a,fontSizeMedium:i,fontSizeLarge:r,borderRadius:u,borderColor:"#0000",listColor:d,headerColor:p,titleTextColor:h,titleTextColorDisabled:f,extraTextColor:v,filterDividerColor:"#0000",itemTextColor:v,itemTextColorDisabled:f,itemColorPending:m,titleFontWeight:o,iconColor:n,iconColorDisabled:t})}},qB=eb([nb("list","\n --n-merged-border-color: var(--n-border-color);\n --n-merged-color: var(--n-color);\n --n-merged-color-hover: var(--n-color-hover);\n margin: 0;\n font-size: var(--n-font-size);\n transition:\n background-color .3s var(--n-bezier),\n color .3s var(--n-bezier),\n border-color .3s var(--n-bezier);\n padding: 0;\n list-style-type: none;\n color: var(--n-text-color);\n background-color: var(--n-merged-color);\n ",[rb("show-divider",[nb("list-item",[eb("&:not(:last-child)",[ob("divider","\n background-color: var(--n-merged-border-color);\n ")])])]),rb("clickable",[nb("list-item","\n cursor: pointer;\n ")]),rb("bordered","\n border: 1px solid var(--n-merged-border-color);\n border-radius: var(--n-border-radius);\n "),rb("hoverable",[nb("list-item","\n border-radius: var(--n-border-radius);\n ",[eb("&:hover","\n background-color: var(--n-merged-color-hover);\n ",[ob("divider","\n background-color: transparent;\n ")])])]),rb("bordered, hoverable",[nb("list-item","\n padding: 12px 20px;\n "),ob("header, footer","\n padding: 12px 20px;\n ")]),ob("header, footer","\n padding: 12px 0;\n box-sizing: border-box;\n transition: border-color .3s var(--n-bezier);\n ",[eb("&:not(:last-child)","\n border-bottom: 1px solid var(--n-merged-border-color);\n ")]),nb("list-item","\n position: relative;\n padding: 12px 0; \n box-sizing: border-box;\n display: flex;\n flex-wrap: nowrap;\n align-items: center;\n transition:\n background-color .3s var(--n-bezier),\n border-color .3s var(--n-bezier);\n ",[ob("prefix","\n margin-right: 20px;\n flex: 0;\n "),ob("suffix","\n margin-left: 20px;\n flex: 0;\n "),ob("main","\n flex: 1;\n "),ob("divider","\n height: 1px;\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: transparent;\n transition: background-color .3s var(--n-bezier);\n pointer-events: none;\n ")])]),ab(nb("list","\n --n-merged-color-hover: var(--n-color-hover-modal);\n --n-merged-color: var(--n-color-modal);\n --n-merged-border-color: var(--n-border-color-modal);\n ")),lb(nb("list","\n --n-merged-color-hover: var(--n-color-hover-popover);\n --n-merged-color: var(--n-color-popover);\n --n-merged-border-color: var(--n-border-color-popover);\n "))]),KB=Object.assign(Object.assign({},I_.props),{size:{type:String,default:"medium"},bordered:Boolean,clickable:Boolean,hoverable:Boolean,showDivider:{type:Boolean,default:!0}}),GB="n-list",XB=zn({name:"List",props:KB,setup(e){const{mergedClsPrefixRef:t,inlineThemeDisabled:n,mergedRtlRef:o}=B_(e),r=GP("List",o,t),i=I_("List","-list",qB,zL,e,t);_o(GB,{showDividerRef:jt(e,"showDivider"),mergedClsPrefixRef:t});const a=ai((()=>{const{common:{cubicBezierEaseInOut:e},self:{fontSize:t,textColor:n,color:o,colorModal:r,colorPopover:a,borderColor:l,borderColorModal:s,borderColorPopover:c,borderRadius:u,colorHover:d,colorHoverModal:p,colorHoverPopover:h}}=i.value;return{"--n-font-size":t,"--n-bezier":e,"--n-text-color":n,"--n-color":o,"--n-border-radius":u,"--n-border-color":l,"--n-border-color-modal":s,"--n-border-color-popover":c,"--n-color-modal":r,"--n-color-popover":a,"--n-color-hover":d,"--n-color-hover-modal":p,"--n-color-hover-popover":h}})),l=n?KP("list",void 0,a,e):void 0;return{mergedClsPrefix:t,rtlEnabled:r,cssVars:n?void 0:a,themeClass:null==l?void 0:l.themeClass,onRender:null==l?void 0:l.onRender}},render(){var e;const{$slots:t,mergedClsPrefix:n,onRender:o}=this;return null==o||o(),li("ul",{class:[`${n}-list`,this.rtlEnabled&&`${n}-list--rtl`,this.bordered&&`${n}-list--bordered`,this.showDivider&&`${n}-list--show-divider`,this.hoverable&&`${n}-list--hoverable`,this.clickable&&`${n}-list--clickable`,this.themeClass],style:this.cssVars},t.header?li("div",{class:`${n}-list__header`},t.header()):null,null===(e=t.default)||void 0===e?void 0:e.call(t),t.footer?li("div",{class:`${n}-list__footer`},t.footer()):null)}}),YB=zn({name:"ListItem",setup(){const e=Po(GB,null);return e||fg("list-item","`n-list-item` must be placed in `n-list`."),{showDivider:e.showDividerRef,mergedClsPrefix:e.mergedClsPrefixRef}},render(){const{$slots:e,mergedClsPrefix:t}=this;return li("li",{class:`${t}-list-item`},e.prefix?li("div",{class:`${t}-list-item__prefix`},e.prefix()):null,e.default?li("div",{class:`${t}-list-item__main`},e):null,e.suffix?li("div",{class:`${t}-list-item__suffix`},e.suffix()):null,this.showDivider&&li("div",{class:`${t}-list-item__divider`}))}}),QB="n-loading-bar",ZB="n-loading-bar-api",JB=nb("loading-bar-container","\n z-index: 5999;\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n height: 2px;\n",[rR({enterDuration:"0.3s",leaveDuration:"0.8s"}),nb("loading-bar","\n width: 100%;\n transition:\n max-width 4s linear,\n background .2s linear;\n height: var(--n-height);\n ",[rb("starting","\n background: var(--n-color-loading);\n "),rb("finishing","\n background: var(--n-color-loading);\n transition:\n max-width .2s linear,\n background .2s linear;\n "),rb("error","\n background: var(--n-color-error);\n transition:\n max-width .2s linear,\n background .2s linear;\n ")])]);var eD=globalThis&&globalThis.__awaiter||function(e,t,n,o){return new(n||(n=Promise))((function(r,i){function a(e){try{s(o.next(e))}catch(WQ){i(WQ)}}function l(e){try{s(o.throw(e))}catch(WQ){i(WQ)}}function s(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,l)}s((o=o.apply(e,t||[])).next())}))};function tD(e,t){return`${t}-loading-bar ${t}-loading-bar--${e}`}const nD=zn({name:"LoadingBar",props:{containerClass:String,containerStyle:[String,Object]},setup(){const{inlineThemeDisabled:e}=B_(),{props:t,mergedClsPrefixRef:n}=Po(QB),o=Et(null),r=Et(!1),i=Et(!1),a=Et(!1),l=Et(!1);let s=!1;const c=Et(!1),u=ai((()=>{const{loadingBarStyle:e}=t;return e?e[c.value?"error":"loading"]:""}));function d(){return eD(this,void 0,void 0,(function*(){r.value=!1,a.value=!1,s=!1,c.value=!1,l.value=!0,yield tn(),l.value=!1}))}function p(){return eD(this,arguments,void 0,(function*(e=0,t=80,r="starting"){if(i.value=!0,yield d(),s)return;a.value=!0,yield tn();const l=o.value;l&&(l.style.maxWidth=`${e}%`,l.style.transition="none",l.offsetWidth,l.className=tD(r,n.value),l.style.transition="",l.style.maxWidth=`${t}%`)}))}const h=I_("LoadingBar","-loading-bar",JB,OL,t,n),f=ai((()=>{const{self:{height:e,colorError:t,colorLoading:n}}=h.value;return{"--n-height":e,"--n-color-loading":n,"--n-color-error":t}})),v=e?KP("loading-bar",void 0,f,t):void 0;return{mergedClsPrefix:n,loadingBarRef:o,started:i,loading:a,entering:r,transitionDisabled:l,start:p,error:function(){if(!s&&!c.value)if(a.value){c.value=!0;const e=o.value;if(!e)return;e.className=tD("error",n.value),e.style.maxWidth="100%",e.offsetWidth,a.value=!1}else p(100,100,"error").then((()=>{c.value=!0;const e=o.value;e&&(e.className=tD("error",n.value),e.offsetWidth,a.value=!1)}))},finish:function(){return eD(this,void 0,void 0,(function*(){if(s||c.value)return;i.value&&(yield tn()),s=!0;const e=o.value;e&&(e.className=tD("finishing",n.value),e.style.maxWidth="100%",e.offsetWidth,a.value=!1)}))},handleEnter:function(){r.value=!0},handleAfterEnter:function(){r.value=!1},handleAfterLeave:function(){return eD(this,void 0,void 0,(function*(){yield d()}))},mergedLoadingBarStyle:u,cssVars:e?void 0:f,themeClass:null==v?void 0:v.themeClass,onRender:null==v?void 0:v.onRender}},render(){if(!this.started)return null;const{mergedClsPrefix:e}=this;return li(vi,{name:"fade-in-transition",appear:!0,onEnter:this.handleEnter,onAfterEnter:this.handleAfterEnter,onAfterLeave:this.handleAfterLeave,css:!this.transitionDisabled},{default:()=>{var t;return null===(t=this.onRender)||void 0===t||t.call(this),fn(li("div",{class:[`${e}-loading-bar-container`,this.themeClass,this.containerClass],style:this.containerStyle},li("div",{ref:"loadingBarRef",class:[`${e}-loading-bar`],style:[this.cssVars,this.mergedLoadingBarStyle]})),[[Mi,this.loading||!this.loading&&this.entering]])}})}}),oD=zn({name:"LoadingBarProvider",props:Object.assign(Object.assign({},I_.props),{to:{type:[String,Object,Boolean],default:void 0},containerClass:String,containerStyle:[String,Object],loadingBarStyle:{type:Object}}),setup(e){const t=$b(),n=Et(null),o={start(){var e;t.value?null===(e=n.value)||void 0===e||e.start():tn((()=>{var e;null===(e=n.value)||void 0===e||e.start()}))},error(){var e;t.value?null===(e=n.value)||void 0===e||e.error():tn((()=>{var e;null===(e=n.value)||void 0===e||e.error()}))},finish(){var e;t.value?null===(e=n.value)||void 0===e||e.finish():tn((()=>{var e;null===(e=n.value)||void 0===e||e.finish()}))}},{mergedClsPrefixRef:r}=B_(e);return _o(ZB,o),_o(QB,{props:e,mergedClsPrefixRef:r}),Object.assign(o,{loadingBarRef:n})},render(){var e,t;return li(yr,null,li(Go,{disabled:!1===this.to,to:this.to||"body"},li(nD,{ref:"loadingBarRef",containerStyle:this.containerStyle,containerClass:this.containerClass})),null===(t=(e=this.$slots).default)||void 0===t?void 0:t.call(e))}}),rD="n-menu",iD="n-submenu",aD="n-menu-item-group";function lD(e){const t=Po(rD),{props:n,mergedCollapsedRef:o}=t,r=Po(iD,null),i=Po(aD,null),a=ai((()=>"horizontal"===n.mode)),l=ai((()=>a.value?n.dropdownPlacement:"tmNodes"in e?"right-start":"right")),s=ai((()=>{var e;return Math.max(null!==(e=n.collapsedIconSize)&&void 0!==e?e:n.iconSize,n.iconSize)})),c=ai((()=>{var t;return!a.value&&e.root&&o.value&&null!==(t=n.collapsedIconSize)&&void 0!==t?t:n.iconSize})),u=ai((()=>{if(a.value)return;const{collapsedWidth:t,indent:l,rootIndent:c}=n,{root:u,isGroup:d}=e,p=void 0===c?l:c;return u?o.value?t/2-s.value/2:p:i&&"number"==typeof i.paddingLeftRef.value?l/2+i.paddingLeftRef.value:r&&"number"==typeof r.paddingLeftRef.value?(d?l/2:l)+r.paddingLeftRef.value:0})),d=ai((()=>{const{collapsedWidth:t,indent:r,rootIndent:i}=n,{value:l}=s,{root:c}=e;return a.value?8:c&&o.value?(void 0===i?r:i)+l+8-(t+l)/2:8}));return{dropdownPlacement:l,activeIconSize:c,maxIconSize:s,paddingLeft:u,iconMarginRight:d,NMenu:t,NSubmenu:r}}const sD={internalKey:{type:[String,Number],required:!0},root:Boolean,isGroup:Boolean,level:{type:Number,required:!0},title:[String,Function],extra:[String,Function]},cD=Object.assign(Object.assign({},sD),{tmNode:{type:Object,required:!0},tmNodes:{type:Array,required:!0}}),uD=zn({name:"MenuOptionGroup",props:cD,setup(e){_o(iD,null);const t=lD(e);_o(aD,{paddingLeftRef:t.paddingLeft});const{mergedClsPrefixRef:n,props:o}=Po(rD);return function(){const{value:r}=n,i=t.paddingLeft.value,{nodeProps:a}=o,l=null==a?void 0:a(e.tmNode.rawNode);return li("div",{class:`${r}-menu-item-group`,role:"group"},li("div",Object.assign({},l,{class:[`${r}-menu-item-group-title`,null==l?void 0:l.class],style:[(null==l?void 0:l.style)||"",void 0!==i?`padding-left: ${i}px;`:""]}),hg(e.title),e.extra?li(yr,null," ",hg(e.extra)):null),li("div",null,e.tmNodes.map((e=>CD(e,o)))))}}}),dD=zn({name:"MenuOptionContent",props:{collapsed:Boolean,disabled:Boolean,title:[String,Function],icon:Function,extra:[String,Function],showArrow:Boolean,childActive:Boolean,hover:Boolean,paddingLeft:Number,selected:Boolean,maxIconSize:{type:Number,required:!0},activeIconSize:{type:Number,required:!0},iconMarginRight:{type:Number,required:!0},clsPrefix:{type:String,required:!0},onClick:Function,tmNode:{type:Object,required:!0},isEllipsisPlaceholder:Boolean},setup(e){const{props:t}=Po(rD);return{menuProps:t,style:ai((()=>{const{paddingLeft:t}=e;return{paddingLeft:t&&`${t}px`}})),iconStyle:ai((()=>{const{maxIconSize:t,activeIconSize:n,iconMarginRight:o}=e;return{width:`${t}px`,height:`${t}px`,fontSize:`${n}px`,marginRight:`${o}px`}}))}},render(){const{clsPrefix:e,tmNode:t,menuProps:{renderIcon:n,renderLabel:o,renderExtra:r,expandIcon:i}}=this,a=n?n(t.rawNode):hg(this.icon);return li("div",{onClick:e=>{var t;null===(t=this.onClick)||void 0===t||t.call(this,e)},role:"none",class:[`${e}-menu-item-content`,{[`${e}-menu-item-content--selected`]:this.selected,[`${e}-menu-item-content--collapsed`]:this.collapsed,[`${e}-menu-item-content--child-active`]:this.childActive,[`${e}-menu-item-content--disabled`]:this.disabled,[`${e}-menu-item-content--hover`]:this.hover}],style:this.style},a&&li("div",{class:`${e}-menu-item-content__icon`,style:this.iconStyle,role:"none"},[a]),li("div",{class:`${e}-menu-item-content-header`,role:"none"},this.isEllipsisPlaceholder?this.title:o?o(t.rawNode):hg(this.title),this.extra||r?li("span",{class:`${e}-menu-item-content-header__extra`}," ",r?r(t.rawNode):hg(this.extra)):null),this.showArrow?li(CT,{ariaHidden:!0,class:`${e}-menu-item-content__arrow`,clsPrefix:e},{default:()=>i?i(t.rawNode):li(gT,null)}):null)}}),pD=Object.assign(Object.assign({},sD),{rawNodes:{type:Array,default:()=>[]},tmNodes:{type:Array,default:()=>[]},tmNode:{type:Object,required:!0},disabled:Boolean,icon:Function,onClick:Function,domId:String,virtualChildActive:{type:Boolean,default:void 0},isEllipsisPlaceholder:Boolean}),hD=zn({name:"Submenu",props:pD,setup(e){const t=lD(e),{NMenu:n,NSubmenu:o}=t,{props:r,mergedCollapsedRef:i,mergedThemeRef:a}=n,l=ai((()=>{const{disabled:t}=e;return!!(null==o?void 0:o.mergedDisabledRef.value)||!!r.disabled||t})),s=Et(!1);return _o(iD,{paddingLeftRef:t.paddingLeft,mergedDisabledRef:l}),_o(aD,null),{menuProps:r,mergedTheme:a,doSelect:n.doSelect,inverted:n.invertedRef,isHorizontal:n.isHorizontalRef,mergedClsPrefix:n.mergedClsPrefixRef,maxIconSize:t.maxIconSize,activeIconSize:t.activeIconSize,iconMarginRight:t.iconMarginRight,dropdownPlacement:t.dropdownPlacement,dropdownShow:s,paddingLeft:t.paddingLeft,mergedDisabled:l,mergedValue:n.mergedValueRef,childActive:mb((()=>{var t;return null!==(t=e.virtualChildActive)&&void 0!==t?t:n.activePathRef.value.includes(e.internalKey)})),collapsed:ai((()=>!("horizontal"===r.mode||!i.value&&n.mergedExpandedKeysRef.value.includes(e.internalKey)))),dropdownEnabled:ai((()=>!l.value&&("horizontal"===r.mode||i.value))),handlePopoverShowChange:function(e){s.value=e},handleClick:function(){l.value||(i.value||n.toggleExpand(e.internalKey),function(){const{onClick:t}=e;t&&t()}())}}},render(){var e;const{mergedClsPrefix:t,menuProps:{renderIcon:n,renderLabel:o}}=this,r=()=>{const{isHorizontal:e,paddingLeft:t,collapsed:n,mergedDisabled:o,maxIconSize:r,activeIconSize:i,title:a,childActive:l,icon:s,handleClick:c,menuProps:{nodeProps:u},dropdownShow:d,iconMarginRight:p,tmNode:h,mergedClsPrefix:f,isEllipsisPlaceholder:v,extra:m}=this,g=null==u?void 0:u(h.rawNode);return li("div",Object.assign({},g,{class:[`${f}-menu-item`,null==g?void 0:g.class],role:"menuitem"}),li(dD,{tmNode:h,paddingLeft:t,collapsed:n,disabled:o,iconMarginRight:p,maxIconSize:r,activeIconSize:i,title:a,extra:m,showArrow:!e,childActive:l,clsPrefix:f,icon:s,hover:d,onClick:c,isEllipsisPlaceholder:v}))},i=()=>li(yT,null,{default:()=>{const{tmNodes:e,collapsed:n}=this;return n?null:li("div",{class:`${t}-submenu-children`,role:"menu"},e.map((e=>CD(e,this.menuProps))))}});return this.root?li(DF,Object.assign({size:"large",trigger:"hover"},null===(e=this.menuProps)||void 0===e?void 0:e.dropdownProps,{themeOverrides:this.mergedTheme.peerOverrides.Dropdown,theme:this.mergedTheme.peers.Dropdown,builtinThemeOverrides:{fontSizeLarge:"14px",optionIconSizeLarge:"18px"},value:this.mergedValue,disabled:!this.dropdownEnabled,placement:this.dropdownPlacement,keyField:this.menuProps.keyField,labelField:this.menuProps.labelField,childrenField:this.menuProps.childrenField,onUpdateShow:this.handlePopoverShowChange,options:this.rawNodes,onSelect:this.doSelect,inverted:this.inverted,renderIcon:n,renderLabel:o}),{default:()=>li("div",{class:`${t}-submenu`,role:"menu","aria-expanded":!this.collapsed,id:this.domId},r(),this.isHorizontal?null:i())}):li("div",{class:`${t}-submenu`,role:"menu","aria-expanded":!this.collapsed,id:this.domId},r(),i())}}),fD=Object.assign(Object.assign({},sD),{tmNode:{type:Object,required:!0},disabled:Boolean,icon:Function,onClick:Function}),vD=zn({name:"MenuOption",props:fD,setup(e){const t=lD(e),{NSubmenu:n,NMenu:o}=t,{props:r,mergedClsPrefixRef:i,mergedCollapsedRef:a}=o,l=n?n.mergedDisabledRef:{value:!1},s=ai((()=>l.value||e.disabled));return{mergedClsPrefix:i,dropdownPlacement:t.dropdownPlacement,paddingLeft:t.paddingLeft,iconMarginRight:t.iconMarginRight,maxIconSize:t.maxIconSize,activeIconSize:t.activeIconSize,mergedTheme:o.mergedThemeRef,menuProps:r,dropdownEnabled:mb((()=>e.root&&a.value&&"horizontal"!==r.mode&&!s.value)),selected:mb((()=>o.mergedValueRef.value===e.internalKey)),mergedDisabled:s,handleClick:function(t){s.value||(o.doSelect(e.internalKey,e.tmNode.rawNode),function(t){const{onClick:n}=e;n&&n(t)}(t))}}},render(){const{mergedClsPrefix:e,mergedTheme:t,tmNode:n,menuProps:{renderLabel:o,nodeProps:r}}=this,i=null==r?void 0:r(n.rawNode);return li("div",Object.assign({},i,{role:"menuitem",class:[`${e}-menu-item`,null==i?void 0:i.class]}),li(NM,{theme:t.peers.Tooltip,themeOverrides:t.peerOverrides.Tooltip,trigger:"hover",placement:this.dropdownPlacement,disabled:!this.dropdownEnabled||void 0===this.title,internalExtraClass:["menu-tooltip"]},{default:()=>o?o(n.rawNode):hg(this.title),trigger:()=>li(dD,{tmNode:n,clsPrefix:e,paddingLeft:this.paddingLeft,iconMarginRight:this.iconMarginRight,maxIconSize:this.maxIconSize,activeIconSize:this.activeIconSize,selected:this.selected,title:this.title,extra:this.extra,disabled:this.mergedDisabled,icon:this.icon,onClick:this.handleClick})}))}}),mD=zn({name:"MenuDivider",setup(){const e=Po(rD),{mergedClsPrefixRef:t,isHorizontalRef:n}=e;return()=>n.value?null:li("div",{class:`${t.value}-menu-divider`})}}),gD=pg(cD),bD=pg(fD),yD=pg(pD);function xD(e){return"divider"===e.type||"render"===e.type}function CD(e,t){const{rawNode:n}=e,{show:o}=n;if(!1===o)return null;if(xD(n))return function(e){return"divider"===e.type}(n)?li(mD,Object.assign({key:e.key},n.props)):null;const{labelField:r}=t,{key:i,level:a,isGroup:l}=e,s=Object.assign(Object.assign({},n),{title:n.title||n[r],extra:n.titleExtra||n.extra,key:i,internalKey:i,level:a,root:0===a,isGroup:l});return e.children?e.isGroup?li(uD,sg(s,gD,{tmNode:e,tmNodes:e.children,key:i})):li(hD,sg(s,yD,{key:i,rawNodes:n[t.childrenField],tmNodes:e.children,tmNode:e})):li(vD,sg(s,bD,{key:i,tmNode:e}))}const wD=[eb("&::before","background-color: var(--n-item-color-hover);"),ob("arrow","\n color: var(--n-arrow-color-hover);\n "),ob("icon","\n color: var(--n-item-icon-color-hover);\n "),nb("menu-item-content-header","\n color: var(--n-item-text-color-hover);\n ",[eb("a","\n color: var(--n-item-text-color-hover);\n "),ob("extra","\n color: var(--n-item-text-color-hover);\n ")])],kD=[ob("icon","\n color: var(--n-item-icon-color-hover-horizontal);\n "),nb("menu-item-content-header","\n color: var(--n-item-text-color-hover-horizontal);\n ",[eb("a","\n color: var(--n-item-text-color-hover-horizontal);\n "),ob("extra","\n color: var(--n-item-text-color-hover-horizontal);\n ")])],SD=eb([nb("menu","\n background-color: var(--n-color);\n color: var(--n-item-text-color);\n overflow: hidden;\n transition: background-color .3s var(--n-bezier);\n box-sizing: border-box;\n font-size: var(--n-font-size);\n padding-bottom: 6px;\n ",[rb("horizontal","\n max-width: 100%;\n width: 100%;\n display: flex;\n overflow: hidden;\n padding-bottom: 0;\n ",[nb("submenu","margin: 0;"),nb("menu-item","margin: 0;"),nb("menu-item-content","\n padding: 0 20px;\n border-bottom: 2px solid #0000;\n ",[eb("&::before","display: none;"),rb("selected","border-bottom: 2px solid var(--n-border-color-horizontal)")]),nb("menu-item-content",[rb("selected",[ob("icon","color: var(--n-item-icon-color-active-horizontal);"),nb("menu-item-content-header","\n color: var(--n-item-text-color-active-horizontal);\n ",[eb("a","color: var(--n-item-text-color-active-horizontal);"),ob("extra","color: var(--n-item-text-color-active-horizontal);")])]),rb("child-active","\n border-bottom: 2px solid var(--n-border-color-horizontal);\n ",[nb("menu-item-content-header","\n color: var(--n-item-text-color-child-active-horizontal);\n ",[eb("a","\n color: var(--n-item-text-color-child-active-horizontal);\n "),ob("extra","\n color: var(--n-item-text-color-child-active-horizontal);\n ")]),ob("icon","\n color: var(--n-item-icon-color-child-active-horizontal);\n ")]),ib("disabled",[ib("selected, child-active",[eb("&:focus-within",kD)]),rb("selected",[_D(null,[ob("icon","color: var(--n-item-icon-color-active-hover-horizontal);"),nb("menu-item-content-header","\n color: var(--n-item-text-color-active-hover-horizontal);\n ",[eb("a","color: var(--n-item-text-color-active-hover-horizontal);"),ob("extra","color: var(--n-item-text-color-active-hover-horizontal);")])])]),rb("child-active",[_D(null,[ob("icon","color: var(--n-item-icon-color-child-active-hover-horizontal);"),nb("menu-item-content-header","\n color: var(--n-item-text-color-child-active-hover-horizontal);\n ",[eb("a","color: var(--n-item-text-color-child-active-hover-horizontal);"),ob("extra","color: var(--n-item-text-color-child-active-hover-horizontal);")])])]),_D("border-bottom: 2px solid var(--n-border-color-horizontal);",kD)]),nb("menu-item-content-header",[eb("a","color: var(--n-item-text-color-horizontal);")])])]),ib("responsive",[nb("menu-item-content-header","\n overflow: hidden;\n text-overflow: ellipsis;\n ")]),rb("collapsed",[nb("menu-item-content",[rb("selected",[eb("&::before","\n background-color: var(--n-item-color-active-collapsed) !important;\n ")]),nb("menu-item-content-header","opacity: 0;"),ob("arrow","opacity: 0;"),ob("icon","color: var(--n-item-icon-color-collapsed);")])]),nb("menu-item","\n height: var(--n-item-height);\n margin-top: 6px;\n position: relative;\n "),nb("menu-item-content",'\n box-sizing: border-box;\n line-height: 1.75;\n height: 100%;\n display: grid;\n grid-template-areas: "icon content arrow";\n grid-template-columns: auto 1fr auto;\n align-items: center;\n cursor: pointer;\n position: relative;\n padding-right: 18px;\n transition:\n background-color .3s var(--n-bezier),\n padding-left .3s var(--n-bezier),\n border-color .3s var(--n-bezier);\n ',[eb("> *","z-index: 1;"),eb("&::before",'\n z-index: auto;\n content: "";\n background-color: #0000;\n position: absolute;\n left: 8px;\n right: 8px;\n top: 0;\n bottom: 0;\n pointer-events: none;\n border-radius: var(--n-border-radius);\n transition: background-color .3s var(--n-bezier);\n '),rb("disabled","\n opacity: .45;\n cursor: not-allowed;\n "),rb("collapsed",[ob("arrow","transform: rotate(0);")]),rb("selected",[eb("&::before","background-color: var(--n-item-color-active);"),ob("arrow","color: var(--n-arrow-color-active);"),ob("icon","color: var(--n-item-icon-color-active);"),nb("menu-item-content-header","\n color: var(--n-item-text-color-active);\n ",[eb("a","color: var(--n-item-text-color-active);"),ob("extra","color: var(--n-item-text-color-active);")])]),rb("child-active",[nb("menu-item-content-header","\n color: var(--n-item-text-color-child-active);\n ",[eb("a","\n color: var(--n-item-text-color-child-active);\n "),ob("extra","\n color: var(--n-item-text-color-child-active);\n ")]),ob("arrow","\n color: var(--n-arrow-color-child-active);\n "),ob("icon","\n color: var(--n-item-icon-color-child-active);\n ")]),ib("disabled",[ib("selected, child-active",[eb("&:focus-within",wD)]),rb("selected",[_D(null,[ob("arrow","color: var(--n-arrow-color-active-hover);"),ob("icon","color: var(--n-item-icon-color-active-hover);"),nb("menu-item-content-header","\n color: var(--n-item-text-color-active-hover);\n ",[eb("a","color: var(--n-item-text-color-active-hover);"),ob("extra","color: var(--n-item-text-color-active-hover);")])])]),rb("child-active",[_D(null,[ob("arrow","color: var(--n-arrow-color-child-active-hover);"),ob("icon","color: var(--n-item-icon-color-child-active-hover);"),nb("menu-item-content-header","\n color: var(--n-item-text-color-child-active-hover);\n ",[eb("a","color: var(--n-item-text-color-child-active-hover);"),ob("extra","color: var(--n-item-text-color-child-active-hover);")])])]),rb("selected",[_D(null,[eb("&::before","background-color: var(--n-item-color-active-hover);")])]),_D(null,wD)]),ob("icon","\n grid-area: icon;\n color: var(--n-item-icon-color);\n transition:\n color .3s var(--n-bezier),\n font-size .3s var(--n-bezier),\n margin-right .3s var(--n-bezier);\n box-sizing: content-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n "),ob("arrow","\n grid-area: arrow;\n font-size: 16px;\n color: var(--n-arrow-color);\n transform: rotate(180deg);\n opacity: 1;\n transition:\n color .3s var(--n-bezier),\n transform 0.2s var(--n-bezier),\n opacity 0.2s var(--n-bezier);\n "),nb("menu-item-content-header","\n grid-area: content;\n transition:\n color .3s var(--n-bezier),\n opacity .3s var(--n-bezier);\n opacity: 1;\n white-space: nowrap;\n color: var(--n-item-text-color);\n ",[eb("a","\n outline: none;\n text-decoration: none;\n transition: color .3s var(--n-bezier);\n color: var(--n-item-text-color);\n ",[eb("&::before",'\n content: "";\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n ')]),ob("extra","\n font-size: .93em;\n color: var(--n-group-text-color);\n transition: color .3s var(--n-bezier);\n ")])]),nb("submenu","\n cursor: pointer;\n position: relative;\n margin-top: 6px;\n ",[nb("menu-item-content","\n height: var(--n-item-height);\n "),nb("submenu-children","\n overflow: hidden;\n padding: 0;\n ",[sE({duration:".2s"})])]),nb("menu-item-group",[nb("menu-item-group-title","\n margin-top: 6px;\n color: var(--n-group-text-color);\n cursor: default;\n font-size: .93em;\n height: 36px;\n display: flex;\n align-items: center;\n transition:\n padding-left .3s var(--n-bezier),\n color .3s var(--n-bezier);\n ")])]),nb("menu-tooltip",[eb("a","\n color: inherit;\n text-decoration: none;\n ")]),nb("menu-divider","\n transition: background-color .3s var(--n-bezier);\n background-color: var(--n-divider-color);\n height: 1px;\n margin: 6px 18px;\n ")]);function _D(e,t){return[rb("hover",e,t),eb("&:hover",e,t)]}const PD=zn({name:"Menu",props:Object.assign(Object.assign({},I_.props),{options:{type:Array,default:()=>[]},collapsed:{type:Boolean,default:void 0},collapsedWidth:{type:Number,default:48},iconSize:{type:Number,default:20},collapsedIconSize:{type:Number,default:24},rootIndent:Number,indent:{type:Number,default:32},labelField:{type:String,default:"label"},keyField:{type:String,default:"key"},childrenField:{type:String,default:"children"},disabledField:{type:String,default:"disabled"},defaultExpandAll:Boolean,defaultExpandedKeys:Array,expandedKeys:Array,value:[String,Number],defaultValue:{type:[String,Number],default:null},mode:{type:String,default:"vertical"},watchProps:{type:Array,default:void 0},disabled:Boolean,show:{type:Boolean,default:!0},inverted:Boolean,"onUpdate:expandedKeys":[Function,Array],onUpdateExpandedKeys:[Function,Array],onUpdateValue:[Function,Array],"onUpdate:value":[Function,Array],expandIcon:Function,renderIcon:Function,renderLabel:Function,renderExtra:Function,dropdownProps:Object,accordion:Boolean,nodeProps:Function,dropdownPlacement:{type:String,default:"bottom"},responsive:Boolean,items:Array,onOpenNamesChange:[Function,Array],onSelect:[Function,Array],onExpandedNamesChange:[Function,Array],expandedNames:Array,defaultExpandedNames:Array}),setup(e){const{mergedClsPrefixRef:t,inlineThemeDisabled:n}=B_(e),o=I_("Menu","-menu",SD,LL,e,t),r=Po(OB,null),i=ai((()=>{var t;const{collapsed:n}=e;if(void 0!==n)return n;if(r){const{collapseModeRef:e,collapsedRef:n}=r;if("width"===e.value)return null!==(t=n.value)&&void 0!==t&&t}return!1})),a=ai((()=>{const{keyField:t,childrenField:n,disabledField:o}=e;return JT(e.items||e.options,{getIgnored:e=>xD(e),getChildren:e=>e[n],getDisabled:e=>e[o],getKey(e){var n;return null!==(n=e[t])&&void 0!==n?n:e.name}})})),l=ai((()=>new Set(a.value.treeNodes.map((e=>e.key))))),{watchProps:s}=e,c=Et(null);(null==s?void 0:s.includes("defaultValue"))?ir((()=>{c.value=e.defaultValue})):c.value=e.defaultValue;const u=Db(jt(e,"value"),c),d=Et([]),p=()=>{d.value=e.defaultExpandAll?a.value.getNonLeafKeys():e.defaultExpandedNames||e.defaultExpandedKeys||a.value.getPath(u.value,{includeSelf:!1}).keyPath};(null==s?void 0:s.includes("defaultExpandedKeys"))?ir(p):p();const h=Nb(e,["expandedNames","expandedKeys"]),f=Db(h,d),v=ai((()=>a.value.treeNodes)),m=ai((()=>a.value.getPath(u.value).keyPath));function g(t){const{"onUpdate:expandedKeys":n,onUpdateExpandedKeys:o,onExpandedNamesChange:r,onOpenNamesChange:i}=e;n&&dg(n,t),o&&dg(o,t),r&&dg(r,t),i&&dg(i,t),d.value=t}_o(rD,{props:e,mergedCollapsedRef:i,mergedThemeRef:o,mergedValueRef:u,mergedExpandedKeysRef:f,activePathRef:m,mergedClsPrefixRef:t,isHorizontalRef:ai((()=>"horizontal"===e.mode)),invertedRef:jt(e,"inverted"),doSelect:function(t,n){const{"onUpdate:value":o,onUpdateValue:r,onSelect:i}=e;r&&dg(r,t,n),o&&dg(o,t,n),i&&dg(i,t,n),c.value=t},toggleExpand:function(t){const n=Array.from(f.value),o=n.findIndex((e=>e===t));if(~o)n.splice(o,1);else{if(e.accordion&&l.value.has(t)){const e=n.findIndex((e=>l.value.has(e)));e>-1&&n.splice(e,1)}n.push(t)}g(n)}});const b=ai((()=>{const{inverted:t}=e,{common:{cubicBezierEaseInOut:n},self:r}=o.value,{borderRadius:i,borderColorHorizontal:a,fontSize:l,itemHeight:s,dividerColor:c}=r,u={"--n-divider-color":c,"--n-bezier":n,"--n-font-size":l,"--n-border-color-horizontal":a,"--n-border-radius":i,"--n-item-height":s};return t?(u["--n-group-text-color"]=r.groupTextColorInverted,u["--n-color"]=r.colorInverted,u["--n-item-text-color"]=r.itemTextColorInverted,u["--n-item-text-color-hover"]=r.itemTextColorHoverInverted,u["--n-item-text-color-active"]=r.itemTextColorActiveInverted,u["--n-item-text-color-child-active"]=r.itemTextColorChildActiveInverted,u["--n-item-text-color-child-active-hover"]=r.itemTextColorChildActiveInverted,u["--n-item-text-color-active-hover"]=r.itemTextColorActiveHoverInverted,u["--n-item-icon-color"]=r.itemIconColorInverted,u["--n-item-icon-color-hover"]=r.itemIconColorHoverInverted,u["--n-item-icon-color-active"]=r.itemIconColorActiveInverted,u["--n-item-icon-color-active-hover"]=r.itemIconColorActiveHoverInverted,u["--n-item-icon-color-child-active"]=r.itemIconColorChildActiveInverted,u["--n-item-icon-color-child-active-hover"]=r.itemIconColorChildActiveHoverInverted,u["--n-item-icon-color-collapsed"]=r.itemIconColorCollapsedInverted,u["--n-item-text-color-horizontal"]=r.itemTextColorHorizontalInverted,u["--n-item-text-color-hover-horizontal"]=r.itemTextColorHoverHorizontalInverted,u["--n-item-text-color-active-horizontal"]=r.itemTextColorActiveHorizontalInverted,u["--n-item-text-color-child-active-horizontal"]=r.itemTextColorChildActiveHorizontalInverted,u["--n-item-text-color-child-active-hover-horizontal"]=r.itemTextColorChildActiveHoverHorizontalInverted,u["--n-item-text-color-active-hover-horizontal"]=r.itemTextColorActiveHoverHorizontalInverted,u["--n-item-icon-color-horizontal"]=r.itemIconColorHorizontalInverted,u["--n-item-icon-color-hover-horizontal"]=r.itemIconColorHoverHorizontalInverted,u["--n-item-icon-color-active-horizontal"]=r.itemIconColorActiveHorizontalInverted,u["--n-item-icon-color-active-hover-horizontal"]=r.itemIconColorActiveHoverHorizontalInverted,u["--n-item-icon-color-child-active-horizontal"]=r.itemIconColorChildActiveHorizontalInverted,u["--n-item-icon-color-child-active-hover-horizontal"]=r.itemIconColorChildActiveHoverHorizontalInverted,u["--n-arrow-color"]=r.arrowColorInverted,u["--n-arrow-color-hover"]=r.arrowColorHoverInverted,u["--n-arrow-color-active"]=r.arrowColorActiveInverted,u["--n-arrow-color-active-hover"]=r.arrowColorActiveHoverInverted,u["--n-arrow-color-child-active"]=r.arrowColorChildActiveInverted,u["--n-arrow-color-child-active-hover"]=r.arrowColorChildActiveHoverInverted,u["--n-item-color-hover"]=r.itemColorHoverInverted,u["--n-item-color-active"]=r.itemColorActiveInverted,u["--n-item-color-active-hover"]=r.itemColorActiveHoverInverted,u["--n-item-color-active-collapsed"]=r.itemColorActiveCollapsedInverted):(u["--n-group-text-color"]=r.groupTextColor,u["--n-color"]=r.color,u["--n-item-text-color"]=r.itemTextColor,u["--n-item-text-color-hover"]=r.itemTextColorHover,u["--n-item-text-color-active"]=r.itemTextColorActive,u["--n-item-text-color-child-active"]=r.itemTextColorChildActive,u["--n-item-text-color-child-active-hover"]=r.itemTextColorChildActiveHover,u["--n-item-text-color-active-hover"]=r.itemTextColorActiveHover,u["--n-item-icon-color"]=r.itemIconColor,u["--n-item-icon-color-hover"]=r.itemIconColorHover,u["--n-item-icon-color-active"]=r.itemIconColorActive,u["--n-item-icon-color-active-hover"]=r.itemIconColorActiveHover,u["--n-item-icon-color-child-active"]=r.itemIconColorChildActive,u["--n-item-icon-color-child-active-hover"]=r.itemIconColorChildActiveHover,u["--n-item-icon-color-collapsed"]=r.itemIconColorCollapsed,u["--n-item-text-color-horizontal"]=r.itemTextColorHorizontal,u["--n-item-text-color-hover-horizontal"]=r.itemTextColorHoverHorizontal,u["--n-item-text-color-active-horizontal"]=r.itemTextColorActiveHorizontal,u["--n-item-text-color-child-active-horizontal"]=r.itemTextColorChildActiveHorizontal,u["--n-item-text-color-child-active-hover-horizontal"]=r.itemTextColorChildActiveHoverHorizontal,u["--n-item-text-color-active-hover-horizontal"]=r.itemTextColorActiveHoverHorizontal,u["--n-item-icon-color-horizontal"]=r.itemIconColorHorizontal,u["--n-item-icon-color-hover-horizontal"]=r.itemIconColorHoverHorizontal,u["--n-item-icon-color-active-horizontal"]=r.itemIconColorActiveHorizontal,u["--n-item-icon-color-active-hover-horizontal"]=r.itemIconColorActiveHoverHorizontal,u["--n-item-icon-color-child-active-horizontal"]=r.itemIconColorChildActiveHorizontal,u["--n-item-icon-color-child-active-hover-horizontal"]=r.itemIconColorChildActiveHoverHorizontal,u["--n-arrow-color"]=r.arrowColor,u["--n-arrow-color-hover"]=r.arrowColorHover,u["--n-arrow-color-active"]=r.arrowColorActive,u["--n-arrow-color-active-hover"]=r.arrowColorActiveHover,u["--n-arrow-color-child-active"]=r.arrowColorChildActive,u["--n-arrow-color-child-active-hover"]=r.arrowColorChildActiveHover,u["--n-item-color-hover"]=r.itemColorHover,u["--n-item-color-active"]=r.itemColorActive,u["--n-item-color-active-hover"]=r.itemColorActiveHover,u["--n-item-color-active-collapsed"]=r.itemColorActiveCollapsed),u})),y=n?KP("menu",ai((()=>e.inverted?"a":"b")),b,e):void 0,x=ig(),C=Et(null),w=Et(null);let k=!0;const S=()=>{var e;k?k=!1:null===(e=C.value)||void 0===e||e.sync({showAllItemsBeforeCalculate:!0})},_=Et(-1),P=ai((()=>{const t=_.value;return{children:-1===t?[]:e.options.slice(t)}})),T=ai((()=>{const{childrenField:t,disabledField:n,keyField:o}=e;return JT([P.value],{getIgnored:e=>xD(e),getChildren:e=>e[t],getDisabled:e=>e[n],getKey(e){var t;return null!==(t=e[o])&&void 0!==t?t:e.name}})})),A=ai((()=>JT([{}]).treeNodes[0]));return{mergedClsPrefix:t,controlledExpandedKeys:h,uncontrolledExpanededKeys:d,mergedExpandedKeys:f,uncontrolledValue:c,mergedValue:u,activePath:m,tmNodes:v,mergedTheme:o,mergedCollapsed:i,cssVars:n?void 0:b,themeClass:null==y?void 0:y.themeClass,overflowRef:C,counterRef:w,updateCounter:()=>{},onResize:S,onUpdateOverflow:function(e){e||(_.value=-1)},onUpdateCount:function(t){_.value=e.options.length-t},renderCounter:function(){var e;if(-1===_.value)return li(hD,{root:!0,level:0,key:"__ellpisisGroupPlaceholder__",internalKey:"__ellpisisGroupPlaceholder__",title:"···",tmNode:A.value,domId:x,isEllipsisPlaceholder:!0});const t=T.value.treeNodes[0],n=m.value,o=!!(null===(e=t.children)||void 0===e?void 0:e.some((e=>n.includes(e.key))));return li(hD,{level:0,root:!0,key:"__ellpisisGroup__",internalKey:"__ellpisisGroup__",title:"···",virtualChildActive:o,tmNode:t,domId:x,rawNodes:t.rawNode.children||[],tmNodes:t.children||[],isEllipsisPlaceholder:!0})},getCounter:function(){return document.getElementById(x)},onRender:null==y?void 0:y.onRender,showOption:t=>{const n=a.value.getPath(null!=t?t:u.value,{includeSelf:!1}).keyPath;if(!n.length)return;const o=Array.from(f.value),r=new Set([...o,...n]);e.accordion&&l.value.forEach((e=>{r.has(e)&&!n.includes(e)&&r.delete(e)})),g(Array.from(r))},deriveResponsiveState:S}},render(){const{mergedClsPrefix:e,mode:t,themeClass:n,onRender:o}=this;null==o||o();const r=()=>this.tmNodes.map((e=>CD(e,this.$props))),i="horizontal"===t&&this.responsive,a=()=>li("div",{role:"horizontal"===t?"menubar":"menu",class:[`${e}-menu`,n,`${e}-menu--${t}`,i&&`${e}-menu--responsive`,this.mergedCollapsed&&`${e}-menu--collapsed`],style:this.cssVars},i?li(Ex,{ref:"overflowRef",onUpdateOverflow:this.onUpdateOverflow,getCounter:this.getCounter,onUpdateCount:this.onUpdateCount,updateCounter:this.updateCounter,style:{width:"100%",display:"flex",overflow:"hidden"}},{default:r,counter:this.renderCounter}):r());return i?li(kx,{onResize:this.onResize},{default:a}):a()}}),TD={icon:Function,type:{type:String,default:"info"},content:[String,Number,Function],showIcon:{type:Boolean,default:!0},closable:Boolean,keepAliveOnHover:Boolean,onClose:Function,onMouseenter:Function,onMouseleave:Function},AD="n-message-api",zD="n-message-provider",RD=eb([nb("message-wrapper","\n margin: var(--n-margin);\n z-index: 0;\n transform-origin: top center;\n display: flex;\n ",[sE({overflow:"visible",originalTransition:"transform .3s var(--n-bezier)",enterToProps:{transform:"scale(1)"},leaveToProps:{transform:"scale(0.85)"}})]),nb("message","\n box-sizing: border-box;\n display: flex;\n align-items: center;\n transition:\n color .3s var(--n-bezier),\n box-shadow .3s var(--n-bezier),\n background-color .3s var(--n-bezier),\n opacity .3s var(--n-bezier),\n transform .3s var(--n-bezier),\n margin-bottom .3s var(--n-bezier);\n padding: var(--n-padding);\n border-radius: var(--n-border-radius);\n flex-wrap: nowrap;\n overflow: hidden;\n max-width: var(--n-max-width);\n color: var(--n-text-color);\n background-color: var(--n-color);\n box-shadow: var(--n-box-shadow);\n ",[ob("content","\n display: inline-block;\n line-height: var(--n-line-height);\n font-size: var(--n-font-size);\n "),ob("icon","\n position: relative;\n margin: var(--n-icon-margin);\n height: var(--n-icon-size);\n width: var(--n-icon-size);\n font-size: var(--n-icon-size);\n flex-shrink: 0;\n ",[["default","info","success","warning","error","loading"].map((e=>rb(`${e}-type`,[eb("> *",`\n color: var(--n-icon-color-${e});\n transition: color .3s var(--n-bezier);\n `)]))),eb("> *","\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n ",[PT()])]),ob("close","\n margin: var(--n-close-margin);\n transition:\n background-color .3s var(--n-bezier),\n color .3s var(--n-bezier);\n flex-shrink: 0;\n ",[eb("&:hover","\n color: var(--n-close-icon-color-hover);\n "),eb("&:active","\n color: var(--n-close-icon-color-pressed);\n ")])]),nb("message-container","\n z-index: 6000;\n position: fixed;\n height: 0;\n overflow: visible;\n display: flex;\n flex-direction: column;\n align-items: center;\n ",[rb("top","\n top: 12px;\n left: 0;\n right: 0;\n "),rb("top-left","\n top: 12px;\n left: 12px;\n right: 0;\n align-items: flex-start;\n "),rb("top-right","\n top: 12px;\n left: 0;\n right: 12px;\n align-items: flex-end;\n "),rb("bottom","\n bottom: 4px;\n left: 0;\n right: 0;\n justify-content: flex-end;\n "),rb("bottom-left","\n bottom: 4px;\n left: 12px;\n right: 0;\n justify-content: flex-end;\n align-items: flex-start;\n "),rb("bottom-right","\n bottom: 4px;\n left: 0;\n right: 12px;\n justify-content: flex-end;\n align-items: flex-end;\n ")])]),ED={info:()=>li(uT,null),success:()=>li(hT,null),warning:()=>li(fT,null),error:()=>li(iT,null),default:()=>null},OD=zn({name:"Message",props:Object.assign(Object.assign({},TD),{render:Function}),setup(e){const{inlineThemeDisabled:t,mergedRtlRef:n}=B_(e),{props:o,mergedClsPrefixRef:r}=Po(zD),i=GP("Message",n,r),a=I_("Message","-message",RD,xL,o,r),l=ai((()=>{const{type:t}=e,{common:{cubicBezierEaseInOut:n},self:{padding:o,margin:r,maxWidth:i,iconMargin:l,closeMargin:s,closeSize:c,iconSize:u,fontSize:d,lineHeight:p,borderRadius:h,iconColorInfo:f,iconColorSuccess:v,iconColorWarning:m,iconColorError:g,iconColorLoading:b,closeIconSize:y,closeBorderRadius:x,[ub("textColor",t)]:C,[ub("boxShadow",t)]:w,[ub("color",t)]:k,[ub("closeColorHover",t)]:S,[ub("closeColorPressed",t)]:_,[ub("closeIconColor",t)]:P,[ub("closeIconColorPressed",t)]:T,[ub("closeIconColorHover",t)]:A}}=a.value;return{"--n-bezier":n,"--n-margin":r,"--n-padding":o,"--n-max-width":i,"--n-font-size":d,"--n-icon-margin":l,"--n-icon-size":u,"--n-close-icon-size":y,"--n-close-border-radius":x,"--n-close-size":c,"--n-close-margin":s,"--n-text-color":C,"--n-color":k,"--n-box-shadow":w,"--n-icon-color-info":f,"--n-icon-color-success":v,"--n-icon-color-warning":m,"--n-icon-color-error":g,"--n-icon-color-loading":b,"--n-close-color-hover":S,"--n-close-color-pressed":_,"--n-close-icon-color":P,"--n-close-icon-color-pressed":T,"--n-close-icon-color-hover":A,"--n-line-height":p,"--n-border-radius":h}})),s=t?KP("message",ai((()=>e.type[0])),l,{}):void 0;return{mergedClsPrefix:r,rtlEnabled:i,messageProviderProps:o,handleClose(){var t;null===(t=e.onClose)||void 0===t||t.call(e)},cssVars:t?void 0:l,themeClass:null==s?void 0:s.themeClass,onRender:null==s?void 0:s.onRender,placement:o.placement}},render(){const{render:e,type:t,closable:n,content:o,mergedClsPrefix:r,cssVars:i,themeClass:a,onRender:l,icon:s,handleClose:c,showIcon:u}=this;let d;return null==l||l(),li("div",{class:[`${r}-message-wrapper`,a],onMouseenter:this.onMouseenter,onMouseleave:this.onMouseleave,style:[{alignItems:this.placement.startsWith("top")?"flex-start":"flex-end"},i]},e?e(this.$props):li("div",{class:[`${r}-message ${r}-message--${t}-type`,this.rtlEnabled&&`${r}-message--rtl`]},(d=function(e,t,n){if("function"==typeof e)return e();{const e="loading"===t?li(RT,{clsPrefix:n,strokeWidth:24,scale:.85}):ED[t]();return e?li(CT,{clsPrefix:n,key:t},{default:()=>e}):null}}(s,t,r))&&u?li("div",{class:`${r}-message__icon ${r}-message__icon--${t}-type`},li(bT,null,{default:()=>d})):null,li("div",{class:`${r}-message__content`},hg(o)),n?li(kT,{clsPrefix:r,class:`${r}-message__close`,onClick:c,absolute:!0}):null))}}),MD=zn({name:"MessageEnvironment",props:Object.assign(Object.assign({},TD),{duration:{type:Number,default:3e3},onAfterLeave:Function,onLeave:Function,internalKey:{type:String,required:!0},onInternalAfterLeave:Function,onHide:Function,onAfterHide:Function}),setup(e){let t=null;const n=Et(!0);function o(){const{duration:n}=e;n&&(t=window.setTimeout(r,n))}function r(){const{onHide:o}=e;n.value=!1,t&&(window.clearTimeout(t),t=null),o&&o()}return $n((()=>{o()})),{show:n,hide:r,handleClose:function(){const{onClose:t}=e;t&&t(),r()},handleAfterLeave:function(){const{onAfterLeave:t,onInternalAfterLeave:n,onAfterHide:o,internalKey:r}=e;t&&t(),n&&n(r),o&&o()},handleMouseleave:function(e){e.currentTarget===e.target&&o()},handleMouseenter:function(e){e.currentTarget===e.target&&null!==t&&(window.clearTimeout(t),t=null)},deactivate:function(){r()}}},render(){return li(yT,{appear:!0,onAfterLeave:this.handleAfterLeave,onLeave:this.onLeave},{default:()=>[this.show?li(OD,{content:this.content,type:this.type,icon:this.icon,showIcon:this.showIcon,closable:this.closable,onClose:this.handleClose,onMouseenter:this.keepAliveOnHover?this.handleMouseenter:void 0,onMouseleave:this.keepAliveOnHover?this.handleMouseleave:void 0}):null]})}}),FD=zn({name:"MessageProvider",props:Object.assign(Object.assign({},I_.props),{to:[String,Object],duration:{type:Number,default:3e3},keepAliveOnHover:Boolean,max:Number,placement:{type:String,default:"top"},closable:Boolean,containerClass:String,containerStyle:[String,Object]}),setup(e){const{mergedClsPrefixRef:t}=B_(e),n=Et([]),o=Et({}),r={create:(e,t)=>i(e,Object.assign({type:"default"},t)),info:(e,t)=>i(e,Object.assign(Object.assign({},t),{type:"info"})),success:(e,t)=>i(e,Object.assign(Object.assign({},t),{type:"success"})),warning:(e,t)=>i(e,Object.assign(Object.assign({},t),{type:"warning"})),error:(e,t)=>i(e,Object.assign(Object.assign({},t),{type:"error"})),loading:(e,t)=>i(e,Object.assign(Object.assign({},t),{type:"loading"})),destroyAll:function(){Object.values(o.value).forEach((e=>{e.hide()}))}};function i(t,r){const i=ig(),a=vt(Object.assign(Object.assign({},r),{content:t,key:i,destroy:()=>{var e;null===(e=o.value[i])||void 0===e||e.hide()}})),{max:l}=e;return l&&n.value.length>=l&&n.value.shift(),n.value.push(a),a}return _o(zD,{props:e,mergedClsPrefixRef:t}),_o(AD,r),Object.assign({mergedClsPrefix:t,messageRefs:o,messageList:n,handleAfterLeave:function(e){n.value.splice(n.value.findIndex((t=>t.key===e)),1),delete o.value[e]}},r)},render(){var e,t,n;return li(yr,null,null===(t=(e=this.$slots).default)||void 0===t?void 0:t.call(e),this.messageList.length?li(Go,{to:null!==(n=this.to)&&void 0!==n?n:"body"},li("div",{class:[`${this.mergedClsPrefix}-message-container`,`${this.mergedClsPrefix}-message-container--${this.placement}`,this.containerClass],key:"message-container",style:this.containerStyle},this.messageList.map((e=>li(MD,Object.assign({ref:t=>{t&&(this.messageRefs[e.key]=t)},internalKey:e.key,onInternalAfterLeave:this.handleAfterLeave},cg(e,["destroy"],void 0),{duration:void 0===e.duration?this.duration:e.duration,keepAliveOnHover:void 0===e.keepAliveOnHover?this.keepAliveOnHover:e.keepAliveOnHover,closable:void 0===e.closable?this.closable:e.closable})))))):null)}}),ID=zn({name:"ModalEnvironment",props:Object.assign(Object.assign({},zI),{internalKey:{type:String,required:!0},onInternalAfterLeave:{type:Function,required:!0}}),setup(e){const t=Et(!0);function n(){t.value=!1}return{show:t,hide:n,handleUpdateShow:function(e){t.value=e},handleAfterLeave:function(){const{onInternalAfterLeave:t,internalKey:n,onAfterLeave:o}=e;t&&t(n),o&&o()},handleCloseClick:function(){const{onClose:t}=e;t?Promise.resolve(t()).then((e=>{!1!==e&&n()})):n()},handleNegativeClick:function(){const{onNegativeClick:t}=e;t?Promise.resolve(t()).then((e=>{!1!==e&&n()})):n()},handlePositiveClick:function(){const{onPositiveClick:t}=e;t?Promise.resolve(t()).then((e=>{!1!==e&&n()})):n()},handleMaskClick:function(t){const{onMaskClick:o,maskClosable:r}=e;o&&(o(t),r&&n())},handleEsc:function(){const{onEsc:t}=e;t&&t()}}},render(){const{handleUpdateShow:e,handleAfterLeave:t,handleMaskClick:n,handleEsc:o,show:r}=this;return li(RI,Object.assign({},this.$props,{show:r,onUpdateShow:e,onMaskClick:n,onEsc:o,onAfterLeave:t,internalAppear:!0,internalModal:!0}))}}),LD="n-modal-provider",BD="n-modal-api",DD=zn({name:"ModalProvider",props:{to:[String,Object]},setup(){const e=Bb(64),t=Ob(),n=Et([]),o={},r={create:function(e={}){const t=ig(),r=vt(Object.assign(Object.assign({},e),{key:t,destroy:()=>{var e;null===(e=o[`n-modal-${t}`])||void 0===e||e.hide()}}));return n.value.push(r),r},destroyAll:function(){Object.values(o).forEach((e=>{null==e||e.hide()}))}};return _o(BD,r),_o(LD,{clickedRef:Bb(64),clickedPositionRef:Ob()}),_o("n-modal-reactive-list",n),_o(LD,{clickedRef:e,clickedPositionRef:t}),Object.assign(Object.assign({},r),{modalList:n,modalInstRefs:o,handleAfterLeave:function(e){const{value:t}=n;t.splice(t.findIndex((t=>t.key===e)),1)}})},render(){var e,t;return li(yr,null,[this.modalList.map((e=>{var t;return li(ID,cg(e,["destroy"],{to:null!==(t=e.to)&&void 0!==t?t:this.to,ref:t=>{null===t?delete this.modalInstRefs[`n-modal-${e.key}`]:this.modalInstRefs[`n-modal-${e.key}`]=t},internalKey:e.key,onInternalAfterLeave:this.handleAfterLeave}))})),null===(t=(e=this.$slots).default)||void 0===t?void 0:t.call(e)])}}),$D="n-notification-provider",ND=zn({name:"NotificationContainer",props:{scrollable:{type:Boolean,required:!0},placement:{type:String,required:!0}},setup(){const{mergedThemeRef:e,mergedClsPrefixRef:t,wipTransitionCountRef:n}=Po($D),o=Et(null);return ir((()=>{var e,t;n.value>0?null===(e=null==o?void 0:o.value)||void 0===e||e.classList.add("transitioning"):null===(t=null==o?void 0:o.value)||void 0===t||t.classList.remove("transitioning")})),{selfRef:o,mergedTheme:e,mergedClsPrefix:t,transitioning:n}},render(){const{$slots:e,scrollable:t,mergedClsPrefix:n,mergedTheme:o,placement:r}=this;return li("div",{ref:"selfRef",class:[`${n}-notification-container`,t&&`${n}-notification-container--scrollable`,`${n}-notification-container--${r}`]},t?li(lR,{theme:o.peers.Scrollbar,themeOverrides:o.peerOverrides.Scrollbar,contentStyle:{overflow:"hidden"}},e):e)}}),jD={info:()=>li(uT,null),success:()=>li(hT,null),warning:()=>li(fT,null),error:()=>li(iT,null),default:()=>null},HD={closable:{type:Boolean,default:!0},type:{type:String,default:"default"},avatar:Function,title:[String,Function],description:[String,Function],content:[String,Function],meta:[String,Function],action:[String,Function],onClose:{type:Function,required:!0},keepAliveOnHover:Boolean,onMouseenter:Function,onMouseleave:Function},WD=pg(HD),UD=zn({name:"Notification",props:HD,setup(e){const{mergedClsPrefixRef:t,mergedThemeRef:n,props:o}=Po($D),{inlineThemeDisabled:r,mergedRtlRef:i}=B_(),a=GP("Notification",i,t),l=ai((()=>{const{type:t}=e,{self:{color:o,textColor:r,closeIconColor:i,closeIconColorHover:a,closeIconColorPressed:l,headerTextColor:s,descriptionTextColor:c,actionTextColor:u,borderRadius:d,headerFontWeight:p,boxShadow:h,lineHeight:f,fontSize:v,closeMargin:m,closeSize:g,width:b,padding:y,closeIconSize:x,closeBorderRadius:C,closeColorHover:w,closeColorPressed:k,titleFontSize:S,metaFontSize:_,descriptionFontSize:P,[ub("iconColor",t)]:T},common:{cubicBezierEaseOut:A,cubicBezierEaseIn:z,cubicBezierEaseInOut:R}}=n.value,{left:E,right:O,top:M,bottom:F}=Bm(y);return{"--n-color":o,"--n-font-size":v,"--n-text-color":r,"--n-description-text-color":c,"--n-action-text-color":u,"--n-title-text-color":s,"--n-title-font-weight":p,"--n-bezier":R,"--n-bezier-ease-out":A,"--n-bezier-ease-in":z,"--n-border-radius":d,"--n-box-shadow":h,"--n-close-border-radius":C,"--n-close-color-hover":w,"--n-close-color-pressed":k,"--n-close-icon-color":i,"--n-close-icon-color-hover":a,"--n-close-icon-color-pressed":l,"--n-line-height":f,"--n-icon-color":T,"--n-close-margin":m,"--n-close-size":g,"--n-close-icon-size":x,"--n-width":b,"--n-padding-left":E,"--n-padding-right":O,"--n-padding-top":M,"--n-padding-bottom":F,"--n-title-font-size":S,"--n-meta-font-size":_,"--n-description-font-size":P}})),s=r?KP("notification",ai((()=>e.type[0])),l,o):void 0;return{mergedClsPrefix:t,showAvatar:ai((()=>e.avatar||"default"!==e.type)),handleCloseClick(){e.onClose()},rtlEnabled:a,cssVars:r?void 0:l,themeClass:null==s?void 0:s.themeClass,onRender:null==s?void 0:s.onRender}},render(){var e;const{mergedClsPrefix:t}=this;return null===(e=this.onRender)||void 0===e||e.call(this),li("div",{class:[`${t}-notification-wrapper`,this.themeClass],onMouseenter:this.onMouseenter,onMouseleave:this.onMouseleave,style:this.cssVars},li("div",{class:[`${t}-notification`,this.rtlEnabled&&`${t}-notification--rtl`,this.themeClass,{[`${t}-notification--closable`]:this.closable,[`${t}-notification--show-avatar`]:this.showAvatar}],style:this.cssVars},this.showAvatar?li("div",{class:`${t}-notification__avatar`},this.avatar?hg(this.avatar):"default"!==this.type?li(CT,{clsPrefix:t},{default:()=>jD[this.type]()}):null):null,this.closable?li(kT,{clsPrefix:t,class:`${t}-notification__close`,onClick:this.handleCloseClick}):null,li("div",{ref:"bodyRef",class:`${t}-notification-main`},this.title?li("div",{class:`${t}-notification-main__header`},hg(this.title)):null,this.description?li("div",{class:`${t}-notification-main__description`},hg(this.description)):null,this.content?li("pre",{class:`${t}-notification-main__content`},hg(this.content)):null,this.meta||this.action?li("div",{class:`${t}-notification-main-footer`},this.meta?li("div",{class:`${t}-notification-main-footer__meta`},hg(this.meta)):null,this.action?li("div",{class:`${t}-notification-main-footer__action`},hg(this.action)):null):null)))}}),VD=Object.assign(Object.assign({},HD),{duration:Number,onClose:Function,onLeave:Function,onAfterEnter:Function,onAfterLeave:Function,onHide:Function,onAfterShow:Function,onAfterHide:Function}),qD=zn({name:"NotificationEnvironment",props:Object.assign(Object.assign({},VD),{internalKey:{type:String,required:!0},onInternalAfterLeave:{type:Function,required:!0}}),setup(e){const{wipTransitionCountRef:t}=Po($D),n=Et(!0);let o=null;function r(){n.value=!1,o&&window.clearTimeout(o)}return $n((()=>{e.duration&&(o=window.setTimeout(r,e.duration))})),{show:n,hide:r,handleClose:function(){const{onClose:t}=e;t?Promise.resolve(t()).then((e=>{!1!==e&&r()})):r()},handleAfterLeave:function(){t.value--;const{onAfterLeave:n,onInternalAfterLeave:o,onAfterHide:r,internalKey:i}=e;n&&n(),o(i),r&&r()},handleLeave:function(t){const{onHide:n}=e;n&&n(),t.style.maxHeight="0",t.offsetHeight},handleBeforeLeave:function(e){t.value++,e.style.maxHeight=`${e.offsetHeight}px`,e.style.height=`${e.offsetHeight}px`,e.offsetHeight},handleAfterEnter:function(n){t.value--,n.style.height="",n.style.maxHeight="";const{onAfterEnter:o,onAfterShow:r}=e;o&&o(),r&&r()},handleBeforeEnter:function(e){t.value++,tn((()=>{e.style.height=`${e.offsetHeight}px`,e.style.maxHeight="0",e.style.transition="none",e.offsetHeight,e.style.transition="",e.style.maxHeight=e.style.height}))},handleMouseenter:function(e){e.currentTarget===e.target&&null!==o&&(window.clearTimeout(o),o=null)},handleMouseleave:function(t){t.currentTarget===t.target&&function(){const{duration:t}=e;t&&(o=window.setTimeout(r,t))}()}}},render(){return li(vi,{name:"notification-transition",appear:!0,onBeforeEnter:this.handleBeforeEnter,onAfterEnter:this.handleAfterEnter,onBeforeLeave:this.handleBeforeLeave,onLeave:this.handleLeave,onAfterLeave:this.handleAfterLeave},{default:()=>this.show?li(UD,Object.assign({},sg(this.$props,WD),{onClose:this.handleClose,onMouseenter:this.duration&&this.keepAliveOnHover?this.handleMouseenter:void 0,onMouseleave:this.duration&&this.keepAliveOnHover?this.handleMouseleave:void 0})):null})}}),KD=eb([nb("notification-container","\n z-index: 4000;\n position: fixed;\n overflow: visible;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n ",[eb(">",[nb("scrollbar","\n width: initial;\n overflow: visible;\n height: -moz-fit-content !important;\n height: fit-content !important;\n max-height: 100vh !important;\n ",[eb(">",[nb("scrollbar-container","\n height: -moz-fit-content !important;\n height: fit-content !important;\n max-height: 100vh !important;\n ",[nb("scrollbar-content","\n padding-top: 12px;\n padding-bottom: 33px;\n ")])])])]),rb("top, top-right, top-left","\n top: 12px;\n ",[eb("&.transitioning >",[nb("scrollbar",[eb(">",[nb("scrollbar-container","\n min-height: 100vh !important;\n ")])])])]),rb("bottom, bottom-right, bottom-left","\n bottom: 12px;\n ",[eb(">",[nb("scrollbar",[eb(">",[nb("scrollbar-container",[nb("scrollbar-content","\n padding-bottom: 12px;\n ")])])])]),nb("notification-wrapper","\n display: flex;\n align-items: flex-end;\n margin-bottom: 0;\n margin-top: 12px;\n ")]),rb("top, bottom","\n left: 50%;\n transform: translateX(-50%);\n ",[nb("notification-wrapper",[eb("&.notification-transition-enter-from, &.notification-transition-leave-to","\n transform: scale(0.85);\n "),eb("&.notification-transition-leave-from, &.notification-transition-enter-to","\n transform: scale(1);\n ")])]),rb("top",[nb("notification-wrapper","\n transform-origin: top center;\n ")]),rb("bottom",[nb("notification-wrapper","\n transform-origin: bottom center;\n ")]),rb("top-right, bottom-right",[nb("notification","\n margin-left: 28px;\n margin-right: 16px;\n ")]),rb("top-left, bottom-left",[nb("notification","\n margin-left: 16px;\n margin-right: 28px;\n ")]),rb("top-right","\n right: 0;\n ",[GD("top-right")]),rb("top-left","\n left: 0;\n ",[GD("top-left")]),rb("bottom-right","\n right: 0;\n ",[GD("bottom-right")]),rb("bottom-left","\n left: 0;\n ",[GD("bottom-left")]),rb("scrollable",[rb("top-right","\n top: 0;\n "),rb("top-left","\n top: 0;\n "),rb("bottom-right","\n bottom: 0;\n "),rb("bottom-left","\n bottom: 0;\n ")]),nb("notification-wrapper","\n margin-bottom: 12px;\n ",[eb("&.notification-transition-enter-from, &.notification-transition-leave-to","\n opacity: 0;\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n "),eb("&.notification-transition-leave-from, &.notification-transition-enter-to","\n opacity: 1;\n "),eb("&.notification-transition-leave-active","\n transition:\n background-color .3s var(--n-bezier),\n color .3s var(--n-bezier),\n opacity .3s var(--n-bezier),\n transform .3s var(--n-bezier-ease-in),\n max-height .3s var(--n-bezier),\n margin-top .3s linear,\n margin-bottom .3s linear,\n box-shadow .3s var(--n-bezier);\n "),eb("&.notification-transition-enter-active","\n transition:\n background-color .3s var(--n-bezier),\n color .3s var(--n-bezier),\n opacity .3s var(--n-bezier),\n transform .3s var(--n-bezier-ease-out),\n max-height .3s var(--n-bezier),\n margin-top .3s linear,\n margin-bottom .3s linear,\n box-shadow .3s var(--n-bezier);\n ")]),nb("notification","\n background-color: var(--n-color);\n color: var(--n-text-color);\n transition:\n background-color .3s var(--n-bezier),\n color .3s var(--n-bezier),\n opacity .3s var(--n-bezier),\n box-shadow .3s var(--n-bezier);\n font-family: inherit;\n font-size: var(--n-font-size);\n font-weight: 400;\n position: relative;\n display: flex;\n overflow: hidden;\n flex-shrink: 0;\n padding-left: var(--n-padding-left);\n padding-right: var(--n-padding-right);\n width: var(--n-width);\n max-width: calc(100vw - 16px - 16px);\n border-radius: var(--n-border-radius);\n box-shadow: var(--n-box-shadow);\n box-sizing: border-box;\n opacity: 1;\n ",[ob("avatar",[nb("icon","\n color: var(--n-icon-color);\n "),nb("base-icon","\n color: var(--n-icon-color);\n ")]),rb("show-avatar",[nb("notification-main","\n margin-left: 40px;\n width: calc(100% - 40px); \n ")]),rb("closable",[nb("notification-main",[eb("> *:first-child","\n padding-right: 20px;\n ")]),ob("close","\n position: absolute;\n top: 0;\n right: 0;\n margin: var(--n-close-margin);\n transition:\n background-color .3s var(--n-bezier),\n color .3s var(--n-bezier);\n ")]),ob("avatar","\n position: absolute;\n top: var(--n-padding-top);\n left: var(--n-padding-left);\n width: 28px;\n height: 28px;\n font-size: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n ",[nb("icon","transition: color .3s var(--n-bezier);")]),nb("notification-main","\n padding-top: var(--n-padding-top);\n padding-bottom: var(--n-padding-bottom);\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n margin-left: 8px;\n width: calc(100% - 8px);\n ",[nb("notification-main-footer","\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-top: 12px;\n ",[ob("meta","\n font-size: var(--n-meta-font-size);\n transition: color .3s var(--n-bezier-ease-out);\n color: var(--n-description-text-color);\n "),ob("action","\n cursor: pointer;\n transition: color .3s var(--n-bezier-ease-out);\n color: var(--n-action-text-color);\n ")]),ob("header","\n font-weight: var(--n-title-font-weight);\n font-size: var(--n-title-font-size);\n transition: color .3s var(--n-bezier-ease-out);\n color: var(--n-title-text-color);\n "),ob("description","\n margin-top: 8px;\n font-size: var(--n-description-font-size);\n white-space: pre-wrap;\n word-wrap: break-word;\n transition: color .3s var(--n-bezier-ease-out);\n color: var(--n-description-text-color);\n "),ob("content","\n line-height: var(--n-line-height);\n margin: 12px 0 0 0;\n font-family: inherit;\n white-space: pre-wrap;\n word-wrap: break-word;\n transition: color .3s var(--n-bezier-ease-out);\n color: var(--n-text-color);\n ",[eb("&:first-child","margin: 0;")])])])])]);function GD(e){const t=e.split("-")[1];return nb("notification-wrapper",[eb("&.notification-transition-enter-from, &.notification-transition-leave-to",`\n transform: translate(${"left"===t?"calc(-100%)":"calc(100%)"}, 0);\n `),eb("&.notification-transition-leave-from, &.notification-transition-enter-to","\n transform: translate(0, 0);\n ")])}const XD="n-notification-api",YD=zn({name:"NotificationProvider",props:Object.assign(Object.assign({},I_.props),{containerClass:String,containerStyle:[String,Object],to:[String,Object],scrollable:{type:Boolean,default:!0},max:Number,placement:{type:String,default:"top-right"},keepAliveOnHover:Boolean}),setup(e){const{mergedClsPrefixRef:t}=B_(e),n=Et([]),o={},r=new Set;function i(t){const i=ig(),a=()=>{r.add(i),o[i]&&o[i].hide()},l=vt(Object.assign(Object.assign({},t),{key:i,destroy:a,hide:a,deactivate:a})),{max:s}=e;if(s&&n.value.length-r.size>=s){let e=!1,t=0;for(const i of n.value){if(!r.has(i.key)){o[i.key]&&(i.destroy(),e=!0);break}t++}e||n.value.splice(t,1)}return n.value.push(l),l}const a=["info","success","warning","error"].map((e=>t=>i(Object.assign(Object.assign({},t),{type:e})))),l=I_("Notification","-notification",KD,mL,e,t),s={create:i,info:a[0],success:a[1],warning:a[2],error:a[3],open:function(e){return i(e)},destroyAll:function(){Object.values(n.value).forEach((e=>{e.hide()}))}},c=Et(0);return _o(XD,s),_o($D,{props:e,mergedClsPrefixRef:t,mergedThemeRef:l,wipTransitionCountRef:c}),Object.assign({mergedClsPrefix:t,notificationList:n,notificationRefs:o,handleAfterLeave:function(e){r.delete(e),n.value.splice(n.value.findIndex((t=>t.key===e)),1)}},s)},render(){var e,t,n;const{placement:o}=this;return li(yr,null,null===(t=(e=this.$slots).default)||void 0===t?void 0:t.call(e),this.notificationList.length?li(Go,{to:null!==(n=this.to)&&void 0!==n?n:"body"},li(ND,{class:this.containerClass,style:this.containerStyle,scrollable:this.scrollable&&"top"!==o&&"bottom"!==o,placement:o},{default:()=>this.notificationList.map((e=>li(qD,Object.assign({ref:t=>{const n=e.key;null===t?delete this.notificationRefs[n]:this.notificationRefs[n]=t}},cg(e,["destroy","hide","deactivate"]),{internalKey:e.key,onInternalAfterLeave:this.handleAfterLeave,keepAliveOnHover:void 0===e.keepAliveOnHover?this.keepAliveOnHover:e.keepAliveOnHover}))))})):null)}}),QD=eb([nb("progress",{display:"inline-block"},[nb("progress-icon","\n color: var(--n-icon-color);\n transition: color .3s var(--n-bezier);\n "),rb("line","\n width: 100%;\n display: block;\n ",[nb("progress-content","\n display: flex;\n align-items: center;\n ",[nb("progress-graph",{flex:1})]),nb("progress-custom-content",{marginLeft:"14px"}),nb("progress-icon","\n width: 30px;\n padding-left: 14px;\n height: var(--n-icon-size-line);\n line-height: var(--n-icon-size-line);\n font-size: var(--n-icon-size-line);\n ",[rb("as-text","\n color: var(--n-text-color-line-outer);\n text-align: center;\n width: 40px;\n font-size: var(--n-font-size);\n padding-left: 4px;\n transition: color .3s var(--n-bezier);\n ")])]),rb("circle, dashboard",{width:"120px"},[nb("progress-custom-content","\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translateX(-50%) translateY(-50%);\n display: flex;\n align-items: center;\n justify-content: center;\n "),nb("progress-text","\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translateX(-50%) translateY(-50%);\n display: flex;\n align-items: center;\n color: inherit;\n font-size: var(--n-font-size-circle);\n color: var(--n-text-color-circle);\n font-weight: var(--n-font-weight-circle);\n transition: color .3s var(--n-bezier);\n white-space: nowrap;\n "),nb("progress-icon","\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translateX(-50%) translateY(-50%);\n display: flex;\n align-items: center;\n color: var(--n-icon-color);\n font-size: var(--n-icon-size-circle);\n ")]),rb("multiple-circle","\n width: 200px;\n color: inherit;\n ",[nb("progress-text","\n font-weight: var(--n-font-weight-circle);\n color: var(--n-text-color-circle);\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translateX(-50%) translateY(-50%);\n display: flex;\n align-items: center;\n justify-content: center;\n transition: color .3s var(--n-bezier);\n ")]),nb("progress-content",{position:"relative"}),nb("progress-graph",{position:"relative"},[nb("progress-graph-circle",[eb("svg",{verticalAlign:"bottom"}),nb("progress-graph-circle-fill","\n stroke: var(--n-fill-color);\n transition:\n opacity .3s var(--n-bezier),\n stroke .3s var(--n-bezier),\n stroke-dasharray .3s var(--n-bezier);\n ",[rb("empty",{opacity:0})]),nb("progress-graph-circle-rail","\n transition: stroke .3s var(--n-bezier);\n overflow: hidden;\n stroke: var(--n-rail-color);\n ")]),nb("progress-graph-line",[rb("indicator-inside",[nb("progress-graph-line-rail","\n height: 16px;\n line-height: 16px;\n border-radius: 10px;\n ",[nb("progress-graph-line-fill","\n height: inherit;\n border-radius: 10px;\n "),nb("progress-graph-line-indicator","\n background: #0000;\n white-space: nowrap;\n text-align: right;\n margin-left: 14px;\n margin-right: 14px;\n height: inherit;\n font-size: 12px;\n color: var(--n-text-color-line-inner);\n transition: color .3s var(--n-bezier);\n ")])]),rb("indicator-inside-label","\n height: 16px;\n display: flex;\n align-items: center;\n ",[nb("progress-graph-line-rail","\n flex: 1;\n transition: background-color .3s var(--n-bezier);\n "),nb("progress-graph-line-indicator","\n background: var(--n-fill-color);\n font-size: 12px;\n transform: translateZ(0);\n display: flex;\n vertical-align: middle;\n height: 16px;\n line-height: 16px;\n padding: 0 10px;\n border-radius: 10px;\n position: absolute;\n white-space: nowrap;\n color: var(--n-text-color-line-inner);\n transition:\n right .2s var(--n-bezier),\n color .3s var(--n-bezier),\n background-color .3s var(--n-bezier);\n ")]),nb("progress-graph-line-rail","\n position: relative;\n overflow: hidden;\n height: var(--n-rail-height);\n border-radius: 5px;\n background-color: var(--n-rail-color);\n transition: background-color .3s var(--n-bezier);\n ",[nb("progress-graph-line-fill","\n background: var(--n-fill-color);\n position: relative;\n border-radius: 5px;\n height: inherit;\n width: 100%;\n max-width: 0%;\n transition:\n background-color .3s var(--n-bezier),\n max-width .2s var(--n-bezier);\n ",[rb("processing",[eb("&::after",'\n content: "";\n background-image: var(--n-line-bg-processing);\n animation: progress-processing-animation 2s var(--n-bezier) infinite;\n ')])])])])])]),eb("@keyframes progress-processing-animation","\n 0% {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n right: 100%;\n opacity: 1;\n }\n 66% {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n opacity: 0;\n }\n 100% {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n opacity: 0;\n }\n ")]),ZD={success:li(hT,null),error:li(iT,null),warning:li(fT,null),info:li(uT,null)},JD=zn({name:"ProgressLine",props:{clsPrefix:{type:String,required:!0},percentage:{type:Number,default:0},railColor:String,railStyle:[String,Object],fillColor:String,status:{type:String,required:!0},indicatorPlacement:{type:String,required:!0},indicatorTextColor:String,unit:{type:String,default:"%"},processing:{type:Boolean,required:!0},showIndicator:{type:Boolean,required:!0},height:[String,Number],railBorderRadius:[String,Number],fillBorderRadius:[String,Number]},setup(e,{slots:t}){const n=ai((()=>Ag(e.height))),o=ai((()=>void 0!==e.railBorderRadius?Ag(e.railBorderRadius):void 0!==e.height?Ag(e.height,{c:.5}):"")),r=ai((()=>void 0!==e.fillBorderRadius?Ag(e.fillBorderRadius):void 0!==e.railBorderRadius?Ag(e.railBorderRadius):void 0!==e.height?Ag(e.height,{c:.5}):""));return()=>{const{indicatorPlacement:i,railColor:a,railStyle:l,percentage:s,unit:c,indicatorTextColor:u,status:d,showIndicator:p,fillColor:h,processing:f,clsPrefix:v}=e;return li("div",{class:`${v}-progress-content`,role:"none"},li("div",{class:`${v}-progress-graph`,"aria-hidden":!0},li("div",{class:[`${v}-progress-graph-line`,{[`${v}-progress-graph-line--indicator-${i}`]:!0}]},li("div",{class:`${v}-progress-graph-line-rail`,style:[{backgroundColor:a,height:n.value,borderRadius:o.value},l]},li("div",{class:[`${v}-progress-graph-line-fill`,f&&`${v}-progress-graph-line-fill--processing`],style:{maxWidth:`${e.percentage}%`,backgroundColor:h,height:n.value,lineHeight:n.value,borderRadius:r.value}},"inside"===i?li("div",{class:`${v}-progress-graph-line-indicator`,style:{color:u}},t.default?t.default():`${s}${c}`):null)))),p&&"outside"===i?li("div",null,t.default?li("div",{class:`${v}-progress-custom-content`,style:{color:u},role:"none"},t.default()):"default"===d?li("div",{role:"none",class:`${v}-progress-icon ${v}-progress-icon--as-text`,style:{color:u}},s,c):li("div",{class:`${v}-progress-icon`,"aria-hidden":!0},li(CT,{clsPrefix:v},{default:()=>ZD[d]}))):null)}}}),e$={success:li(hT,null),error:li(iT,null),warning:li(fT,null),info:li(uT,null)},t$=zn({name:"ProgressCircle",props:{clsPrefix:{type:String,required:!0},status:{type:String,required:!0},strokeWidth:{type:Number,required:!0},fillColor:String,railColor:String,railStyle:[String,Object],percentage:{type:Number,default:0},offsetDegree:{type:Number,default:0},showIndicator:{type:Boolean,required:!0},indicatorTextColor:String,unit:String,viewBoxWidth:{type:Number,required:!0},gapDegree:{type:Number,required:!0},gapOffsetDegree:{type:Number,default:0}},setup(e,{slots:t}){function n(t,n,o){const{gapDegree:r,viewBoxWidth:i,strokeWidth:a}=e,l=50,s=50+a/2;return{pathString:`M ${s},${s} m 0,50\n a 50,50 0 1 1 0,-100\n a 50,50 0 1 1 0,100`,pathStyle:{stroke:o,strokeDasharray:`${t/100*(2*Math.PI*l-r)}px ${8*i}px`,strokeDashoffset:`-${r/2}px`,transformOrigin:n?"center":void 0,transform:n?`rotate(${n}deg)`:void 0}}}return()=>{const{fillColor:o,railColor:r,strokeWidth:i,offsetDegree:a,status:l,percentage:s,showIndicator:c,indicatorTextColor:u,unit:d,gapOffsetDegree:p,clsPrefix:h}=e,{pathString:f,pathStyle:v}=n(100,0,r),{pathString:m,pathStyle:g}=n(s,a,o),b=100+i;return li("div",{class:`${h}-progress-content`,role:"none"},li("div",{class:`${h}-progress-graph`,"aria-hidden":!0},li("div",{class:`${h}-progress-graph-circle`,style:{transform:p?`rotate(${p}deg)`:void 0}},li("svg",{viewBox:`0 0 ${b} ${b}`},li("g",null,li("path",{class:`${h}-progress-graph-circle-rail`,d:f,"stroke-width":i,"stroke-linecap":"round",fill:"none",style:v})),li("g",null,li("path",{class:[`${h}-progress-graph-circle-fill`,0===s&&`${h}-progress-graph-circle-fill--empty`],d:m,"stroke-width":i,"stroke-linecap":"round",fill:"none",style:g}))))),c?li("div",null,t.default?li("div",{class:`${h}-progress-custom-content`,role:"none"},t.default()):"default"!==l?li("div",{class:`${h}-progress-icon`,"aria-hidden":!0},li(CT,{clsPrefix:h},{default:()=>e$[l]})):li("div",{class:`${h}-progress-text`,style:{color:u},role:"none"},li("span",{class:`${h}-progress-text__percentage`},s),li("span",{class:`${h}-progress-text__unit`},d))):null)}}});function n$(e,t,n=100){return`m ${n/2} ${n/2-e} a ${e} ${e} 0 1 1 0 ${2*e} a ${e} ${e} 0 1 1 0 -${2*e}`}const o$=zn({name:"ProgressMultipleCircle",props:{clsPrefix:{type:String,required:!0},viewBoxWidth:{type:Number,required:!0},percentage:{type:Array,default:[0]},strokeWidth:{type:Number,required:!0},circleGap:{type:Number,required:!0},showIndicator:{type:Boolean,required:!0},fillColor:{type:Array,default:()=>[]},railColor:{type:Array,default:()=>[]},railStyle:{type:Array,default:()=>[]}},setup(e,{slots:t}){const n=ai((()=>e.percentage.map(((t,n)=>`${Math.PI*t/100*(e.viewBoxWidth/2-e.strokeWidth/2*(1+2*n)-e.circleGap*n)*2}, ${8*e.viewBoxWidth}`))));return()=>{const{viewBoxWidth:o,strokeWidth:r,circleGap:i,showIndicator:a,fillColor:l,railColor:s,railStyle:c,percentage:u,clsPrefix:d}=e;return li("div",{class:`${d}-progress-content`,role:"none"},li("div",{class:`${d}-progress-graph`,"aria-hidden":!0},li("div",{class:`${d}-progress-graph-circle`},li("svg",{viewBox:`0 0 ${o} ${o}`},u.map(((e,t)=>li("g",{key:t},li("path",{class:`${d}-progress-graph-circle-rail`,d:n$(o/2-r/2*(1+2*t)-i*t,0,o),"stroke-width":r,"stroke-linecap":"round",fill:"none",style:[{strokeDashoffset:0,stroke:s[t]},c[t]]}),li("path",{class:[`${d}-progress-graph-circle-fill`,0===e&&`${d}-progress-graph-circle-fill--empty`],d:n$(o/2-r/2*(1+2*t)-i*t,0,o),"stroke-width":r,"stroke-linecap":"round",fill:"none",style:{strokeDasharray:n.value[t],strokeDashoffset:0,stroke:l[t]}}))))))),a&&t.default?li("div",null,li("div",{class:`${d}-progress-text`},t.default())):null)}}}),r$=zn({name:"Progress",props:Object.assign(Object.assign({},I_.props),{processing:Boolean,type:{type:String,default:"line"},gapDegree:Number,gapOffsetDegree:Number,status:{type:String,default:"default"},railColor:[String,Array],railStyle:[String,Array],color:[String,Array],viewBoxWidth:{type:Number,default:100},strokeWidth:{type:Number,default:7},percentage:[Number,Array],unit:{type:String,default:"%"},showIndicator:{type:Boolean,default:!0},indicatorPosition:{type:String,default:"outside"},indicatorPlacement:{type:String,default:"outside"},indicatorTextColor:String,circleGap:{type:Number,default:1},height:Number,borderRadius:[String,Number],fillBorderRadius:[String,Number],offsetDegree:Number}),setup(e){const t=ai((()=>e.indicatorPlacement||e.indicatorPosition)),n=ai((()=>e.gapDegree||0===e.gapDegree?e.gapDegree:"dashboard"===e.type?75:void 0)),{mergedClsPrefixRef:o,inlineThemeDisabled:r}=B_(e),i=I_("Progress","-progress",QD,WL,e,o),a=ai((()=>{const{status:t}=e,{common:{cubicBezierEaseInOut:n},self:{fontSize:o,fontSizeCircle:r,railColor:a,railHeight:l,iconSizeCircle:s,iconSizeLine:c,textColorCircle:u,textColorLineInner:d,textColorLineOuter:p,lineBgProcessing:h,fontWeightCircle:f,[ub("iconColor",t)]:v,[ub("fillColor",t)]:m}}=i.value;return{"--n-bezier":n,"--n-fill-color":m,"--n-font-size":o,"--n-font-size-circle":r,"--n-font-weight-circle":f,"--n-icon-color":v,"--n-icon-size-circle":s,"--n-icon-size-line":c,"--n-line-bg-processing":h,"--n-rail-color":a,"--n-rail-height":l,"--n-text-color-circle":u,"--n-text-color-line-inner":d,"--n-text-color-line-outer":p}})),l=r?KP("progress",ai((()=>e.status[0])),a,e):void 0;return{mergedClsPrefix:o,mergedIndicatorPlacement:t,gapDeg:n,cssVars:r?void 0:a,themeClass:null==l?void 0:l.themeClass,onRender:null==l?void 0:l.onRender}},render(){const{type:e,cssVars:t,indicatorTextColor:n,showIndicator:o,status:r,railColor:i,railStyle:a,color:l,percentage:s,viewBoxWidth:c,strokeWidth:u,mergedIndicatorPlacement:d,unit:p,borderRadius:h,fillBorderRadius:f,height:v,processing:m,circleGap:g,mergedClsPrefix:b,gapDeg:y,gapOffsetDegree:x,themeClass:C,$slots:w,onRender:k}=this;return null==k||k(),li("div",{class:[C,`${b}-progress`,`${b}-progress--${e}`,`${b}-progress--${r}`],style:t,"aria-valuemax":100,"aria-valuemin":0,"aria-valuenow":s,role:"circle"===e||"line"===e||"dashboard"===e?"progressbar":"none"},"circle"===e||"dashboard"===e?li(t$,{clsPrefix:b,status:r,showIndicator:o,indicatorTextColor:n,railColor:i,fillColor:l,railStyle:a,offsetDegree:this.offsetDegree,percentage:s,viewBoxWidth:c,strokeWidth:u,gapDegree:void 0===y?"dashboard"===e?75:0:y,gapOffsetDegree:x,unit:p},w):"line"===e?li(JD,{clsPrefix:b,status:r,showIndicator:o,indicatorTextColor:n,railColor:i,fillColor:l,railStyle:a,percentage:s,processing:m,indicatorPlacement:d,unit:p,fillBorderRadius:f,railBorderRadius:h,height:v},w):"multiple-circle"===e?li(o$,{clsPrefix:b,strokeWidth:u,railColor:i,fillColor:l,railStyle:a,viewBoxWidth:c,percentage:s,showIndicator:o,circleGap:g},w):null)}}),i$={name:"QrCode",common:tz,self:e=>({borderRadius:e.borderRadius})},a$={name:"QrCode",common:qz,self:function(e){return{borderRadius:e.borderRadius}}},l$=eb([nb("qr-code","\n background: #fff;\n border-radius: var(--n-border-radius);\n display: inline-flex;\n ")]);var s$,c$;!function(e){class t{static encodeText(n,o){const r=e.QrSegment.makeSegments(n);return t.encodeSegments(r,o)}static encodeBinary(n,o){const r=e.QrSegment.makeBytes(n);return t.encodeSegments([r],o)}static encodeSegments(e,o,i=1,a=40,l=-1,s=!0){if(!(t.MIN_VERSION<=i&&i<=a&&a<=t.MAX_VERSION)||l<-1||l>7)throw new RangeError("Invalid value");let c,u;for(c=i;;c++){const n=8*t.getNumDataCodewords(c,o),i=r.getTotalBits(e,c);if(i<=n){u=i;break}if(c>=a)throw new RangeError("Data too long")}for(const n of[t.Ecc.MEDIUM,t.Ecc.QUARTILE,t.Ecc.HIGH])s&&u<=8*t.getNumDataCodewords(c,n)&&(o=n);const d=[];for(const t of e){n(t.mode.modeBits,4,d),n(t.numChars,t.mode.numCharCountBits(c),d);for(const e of t.getData())d.push(e)}const p=8*t.getNumDataCodewords(c,o);n(0,Math.min(4,p-d.length),d),n(0,(8-d.length%8)%8,d);for(let t=236;d.lengthh[t>>>3]|=e<<7-(7&t))),new t(c,o,h,l)}constructor(e,n,o,r){if(this.version=e,this.errorCorrectionLevel=n,this.modules=[],this.isFunction=[],et.MAX_VERSION)throw new RangeError("Version value out of range");if(r<-1||r>7)throw new RangeError("Mask value out of range");this.size=4*e+17;const i=[];for(let t=0;t=0&&e=0&&t>>9);const r=21522^(t<<10|n);for(let i=0;i<=5;i++)this.setFunctionModule(8,i,o(r,i));this.setFunctionModule(8,7,o(r,6)),this.setFunctionModule(8,8,o(r,7)),this.setFunctionModule(7,8,o(r,8));for(let i=9;i<15;i++)this.setFunctionModule(14-i,8,o(r,i));for(let i=0;i<8;i++)this.setFunctionModule(this.size-1-i,8,o(r,i));for(let i=8;i<15;i++)this.setFunctionModule(8,this.size-15+i,o(r,i));this.setFunctionModule(8,this.size-8,!0)}drawVersion(){if(this.version<7)return;let e=this.version;for(let n=0;n<12;n++)e=e<<1^7973*(e>>>11);const t=this.version<<12|e;for(let n=0;n<18;n++){const e=o(t,n),r=this.size-11+n%3,i=Math.floor(n/3);this.setFunctionModule(r,i,e),this.setFunctionModule(i,r,e)}}drawFinderPattern(e,t){for(let n=-4;n<=4;n++)for(let o=-4;o<=4;o++){const r=Math.max(Math.abs(o),Math.abs(n)),i=e+o,a=t+n;i>=0&&i=0&&a{(t!==s-i||n>=l)&&d.push(e[t])}));return d}drawCodewords(e){if(e.length!==Math.floor(t.getNumRawDataModules(this.version)/8))throw new RangeError("Invalid argument");let n=0;for(let t=this.size-1;t>=1;t-=2){6===t&&(t=5);for(let r=0;r>>3],7-(7&n)),n++)}}}applyMask(e){if(e<0||e>7)throw new RangeError("Mask value out of range");for(let t=0;t5&&e++):(this.finderPenaltyAddHistory(o,i),n||(e+=this.finderPenaltyCountPatterns(i)*t.PENALTY_N3),n=this.modules[r][a],o=1);e+=this.finderPenaltyTerminateAndCount(n,o,i)*t.PENALTY_N3}for(let r=0;r5&&e++):(this.finderPenaltyAddHistory(o,i),n||(e+=this.finderPenaltyCountPatterns(i)*t.PENALTY_N3),n=this.modules[a][r],o=1);e+=this.finderPenaltyTerminateAndCount(n,o,i)*t.PENALTY_N3}for(let r=0;re+(t?1:0)),n);const o=this.size*this.size;return e+=(Math.ceil(Math.abs(20*n-10*o)/o)-1)*t.PENALTY_N4,e}getAlignmentPatternPositions(){if(1===this.version)return[];{const e=Math.floor(this.version/7)+2,t=32===this.version?26:2*Math.ceil((4*this.version+4)/(2*e-2)),n=[6];for(let o=this.size-7;n.lengtht.MAX_VERSION)throw new RangeError("Version number out of range");let n=(16*e+128)*e+64;if(e>=2){const t=Math.floor(e/7)+2;n-=(25*t-10)*t-55,e>=7&&(n-=36)}return n}static getNumDataCodewords(e,n){return Math.floor(t.getNumRawDataModules(e)/8)-t.ECC_CODEWORDS_PER_BLOCK[n.ordinal][e]*t.NUM_ERROR_CORRECTION_BLOCKS[n.ordinal][e]}static reedSolomonComputeDivisor(e){if(e<1||e>255)throw new RangeError("Degree out of range");const n=[];for(let t=0;t0));for(const r of e){const e=r^o.shift();o.push(0),n.forEach(((n,r)=>o[r]^=t.reedSolomonMultiply(n,e)))}return o}static reedSolomonMultiply(e,t){if(e>>>8!=0||t>>>8!=0)throw new RangeError("Byte out of range");let n=0;for(let o=7;o>=0;o--)n=n<<1^285*(n>>>7),n^=(t>>>o&1)*e;return n}finderPenaltyCountPatterns(e){const t=e[1],n=t>0&&e[2]===t&&e[3]===3*t&&e[4]===t&&e[5]===t;return(n&&e[0]>=4*t&&e[6]>=t?1:0)+(n&&e[6]>=4*t&&e[0]>=t?1:0)}finderPenaltyTerminateAndCount(e,t,n){return e&&(this.finderPenaltyAddHistory(t,n),t=0),t+=this.size,this.finderPenaltyAddHistory(t,n),this.finderPenaltyCountPatterns(n)}finderPenaltyAddHistory(e,t){0===t[0]&&(e+=this.size),t.pop(),t.unshift(e)}}function n(e,t,n){if(t<0||t>31||e>>>t!=0)throw new RangeError("Value out of range");for(let o=t-1;o>=0;o--)n.push(e>>>o&1)}function o(e,t){return!!(e>>>t&1)}t.MIN_VERSION=1,t.MAX_VERSION=40,t.PENALTY_N1=3,t.PENALTY_N2=3,t.PENALTY_N3=40,t.PENALTY_N4=10,t.ECC_CODEWORDS_PER_BLOCK=[[-1,7,10,15,20,26,18,20,24,30,18,20,24,26,30,22,24,28,30,28,28,28,28,30,30,26,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,10,16,26,18,24,16,18,22,22,26,30,22,22,24,24,28,28,26,26,26,26,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28],[-1,13,22,18,26,18,24,18,22,20,24,28,26,24,20,30,24,28,28,26,30,28,30,30,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,17,28,22,16,22,28,26,26,24,28,24,28,22,24,24,30,28,28,26,28,30,24,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30]],t.NUM_ERROR_CORRECTION_BLOCKS=[[-1,1,1,1,1,1,2,2,2,2,4,4,4,4,4,6,6,6,6,7,8,8,9,9,10,12,12,12,13,14,15,16,17,18,19,19,20,21,22,24,25],[-1,1,1,1,2,2,4,4,4,5,5,5,8,9,9,10,10,11,13,14,16,17,17,18,20,21,23,25,26,28,29,31,33,35,37,38,40,43,45,47,49],[-1,1,1,2,2,4,4,6,6,8,8,8,10,12,16,12,17,16,18,21,20,23,23,25,27,29,34,34,35,38,40,43,45,48,51,53,56,59,62,65,68],[-1,1,1,2,4,4,4,5,6,8,8,11,11,16,16,18,16,19,21,25,25,25,34,30,32,35,37,40,42,45,48,51,54,57,60,63,66,70,74,77,81]],e.QrCode=t;class r{static makeBytes(e){const t=[];for(const o of e)n(o,8,t);return new r(r.Mode.BYTE,e.length,t)}static makeNumeric(e){if(!r.isNumeric(e))throw new RangeError("String contains non-numeric characters");const t=[];for(let o=0;o=1<({"--n-border-radius":o.value.self.borderRadius}))),i=n?KP("qr-code",void 0,r,e):void 0,a=Et(),l=ai((()=>{var t;const n=d$[e.errorCorrectionLevel];return u$.QrCode.encodeText(null!==(t=e.value)&&void 0!==t?t:"-",n)}));$n((()=>{const t=Et(0);let n=null;ir((()=>{"svg"!==e.type&&(t.value,function(e,t,n,o,r){const i=a.value;if(!i)return;const l=2*t,s=e.size,c=l/s;i.width=l,i.height=l;const u=i.getContext("2d");if(u){u.clearRect(0,0,i.width,i.height);for(let t=0;t=1?a:a*c,p=c<=1?a:a/c,h=l+(a-d)/2,f=s+(a-p)/2;u.drawImage(e,h,f,d,p)}}}(l.value,e.size,e.color,e.backgroundColor,n?{icon:n,iconBorderRadius:e.iconBorderRadius,iconSize:e.iconSize,iconBackgroundColor:e.iconBackgroundColor}:null))})),ir((()=>{if("svg"===e.type)return;const{iconSrc:o}=e;if(o){let e=!1;const r=new Image;return r.src=o,r.onload=()=>{e||(n=r,t.value++)},()=>{e=!0}}}))}));const s=ai((()=>function(t,n,o){const r=t.getModules(),i=r.length,a=r;let l="";const s=``,c=``;let u="";if(o){const{iconSrc:e,iconSize:t}=o,a=.1,l=Math.floor(n*a),s=i/n,c=(t||l)*s,d=(t||l)*s;u+=``}return l+=s,l+=c,l+=u,{innerHtml:l,numCells:i}}(l.value,e.size,e.iconSrc?{iconSrc:e.iconSrc,iconBorderRadius:e.iconBorderRadius,iconSize:e.iconSize,iconBackgroundColor:e.iconBackgroundColor}:null)));return{canvasRef:a,mergedClsPrefix:t,cssVars:n?void 0:r,themeClass:null==i?void 0:i.themeClass,svgInfo:s}},render(){const{mergedClsPrefix:e,backgroundColor:t,padding:n,cssVars:o,themeClass:r,size:i,type:a}=this;return li("div",{class:[`${e}-qr-code`,r],style:Object.assign({padding:"number"==typeof n?`${n}px`:n,backgroundColor:t,width:`${i}px`,height:`${i}px`},o)},"canvas"===a?li("canvas",{ref:"canvasRef",style:{width:`${i}px`,height:`${i}px`}}):li("svg",{height:i,width:i,viewBox:`0 0 ${this.svgInfo.numCells} ${this.svgInfo.numCells}`,role:"img",innerHTML:this.svgInfo.innerHtml}))}}),f$=li("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 36 36"},li("circle",{fill:"#FFCB4C",cx:"18",cy:"17.018",r:"17"}),li("path",{fill:"#65471B",d:"M14.524 21.036c-.145-.116-.258-.274-.312-.464-.134-.46.13-.918.59-1.021 4.528-1.021 7.577 1.363 7.706 1.465.384.306.459.845.173 1.205-.286.358-.828.401-1.211.097-.11-.084-2.523-1.923-6.182-1.098-.274.061-.554-.016-.764-.184z"}),li("ellipse",{fill:"#65471B",cx:"13.119",cy:"11.174",rx:"2.125",ry:"2.656"}),li("ellipse",{fill:"#65471B",cx:"24.375",cy:"12.236",rx:"2.125",ry:"2.656"}),li("path",{fill:"#F19020",d:"M17.276 35.149s1.265-.411 1.429-1.352c.173-.972-.624-1.167-.624-1.167s1.041-.208 1.172-1.376c.123-1.101-.861-1.363-.861-1.363s.97-.4 1.016-1.539c.038-.959-.995-1.428-.995-1.428s5.038-1.221 5.556-1.341c.516-.12 1.32-.615 1.069-1.694-.249-1.08-1.204-1.118-1.697-1.003-.494.115-6.744 1.566-8.9 2.068l-1.439.334c-.54.127-.785-.11-.404-.512.508-.536.833-1.129.946-2.113.119-1.035-.232-2.313-.433-2.809-.374-.921-1.005-1.649-1.734-1.899-1.137-.39-1.945.321-1.542 1.561.604 1.854.208 3.375-.833 4.293-2.449 2.157-3.588 3.695-2.83 6.973.828 3.575 4.377 5.876 7.952 5.048l3.152-.681z"}),li("path",{fill:"#65471B",d:"M9.296 6.351c-.164-.088-.303-.224-.391-.399-.216-.428-.04-.927.393-1.112 4.266-1.831 7.699-.043 7.843.034.433.231.608.747.391 1.154-.216.405-.74.546-1.173.318-.123-.063-2.832-1.432-6.278.047-.257.109-.547.085-.785-.042zm12.135 3.75c-.156-.098-.286-.243-.362-.424-.187-.442.023-.927.468-1.084 4.381-1.536 7.685.48 7.823.567.415.26.555.787.312 1.178-.242.39-.776.495-1.191.238-.12-.072-2.727-1.621-6.267-.379-.266.091-.553.046-.783-.096z"})),v$=li("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 36 36"},li("path",{fill:"#FFCC4D",d:"M36 18c0 9.941-8.059 18-18 18-9.94 0-18-8.059-18-18C0 8.06 8.06 0 18 0c9.941 0 18 8.06 18 18"}),li("ellipse",{fill:"#664500",cx:"18",cy:"27",rx:"5",ry:"6"}),li("path",{fill:"#664500",d:"M5.999 11c-.208 0-.419-.065-.599-.2-.442-.331-.531-.958-.2-1.4C8.462 5.05 12.816 5 13 5c.552 0 1 .448 1 1 0 .551-.445.998-.996 1-.155.002-3.568.086-6.204 3.6-.196.262-.497.4-.801.4zm24.002 0c-.305 0-.604-.138-.801-.4-2.64-3.521-6.061-3.598-6.206-3.6-.55-.006-.994-.456-.991-1.005C22.006 5.444 22.45 5 23 5c.184 0 4.537.05 7.8 4.4.332.442.242 1.069-.2 1.4-.18.135-.39.2-.599.2zm-16.087 4.5l1.793-1.793c.391-.391.391-1.023 0-1.414s-1.023-.391-1.414 0L12.5 14.086l-1.793-1.793c-.391-.391-1.023-.391-1.414 0s-.391 1.023 0 1.414l1.793 1.793-1.793 1.793c-.391.391-.391 1.023 0 1.414.195.195.451.293.707.293s.512-.098.707-.293l1.793-1.793 1.793 1.793c.195.195.451.293.707.293s.512-.098.707-.293c.391-.391.391-1.023 0-1.414L13.914 15.5zm11 0l1.793-1.793c.391-.391.391-1.023 0-1.414s-1.023-.391-1.414 0L23.5 14.086l-1.793-1.793c-.391-.391-1.023-.391-1.414 0s-.391 1.023 0 1.414l1.793 1.793-1.793 1.793c-.391.391-.391 1.023 0 1.414.195.195.451.293.707.293s.512-.098.707-.293l1.793-1.793 1.793 1.793c.195.195.451.293.707.293s.512-.098.707-.293c.391-.391.391-1.023 0-1.414L24.914 15.5z"})),m$=li("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 36 36"},li("ellipse",{fill:"#292F33",cx:"18",cy:"26",rx:"18",ry:"10"}),li("ellipse",{fill:"#66757F",cx:"18",cy:"24",rx:"18",ry:"10"}),li("path",{fill:"#E1E8ED",d:"M18 31C3.042 31 1 16 1 12h34c0 2-1.958 19-17 19z"}),li("path",{fill:"#77B255",d:"M35 12.056c0 5.216-7.611 9.444-17 9.444S1 17.271 1 12.056C1 6.84 8.611 3.611 18 3.611s17 3.229 17 8.445z"}),li("ellipse",{fill:"#A6D388",cx:"18",cy:"13",rx:"15",ry:"7"}),li("path",{d:"M21 17c-.256 0-.512-.098-.707-.293-2.337-2.337-2.376-4.885-.125-8.262.739-1.109.9-2.246.478-3.377-.461-1.236-1.438-1.996-1.731-2.077-.553 0-.958-.443-.958-.996 0-.552.491-.995 1.043-.995.997 0 2.395 1.153 3.183 2.625 1.034 1.933.91 4.039-.351 5.929-1.961 2.942-1.531 4.332-.125 5.738.391.391.391 1.023 0 1.414-.195.196-.451.294-.707.294zm-6-2c-.256 0-.512-.098-.707-.293-2.337-2.337-2.376-4.885-.125-8.262.727-1.091.893-2.083.494-2.947-.444-.961-1.431-1.469-1.684-1.499-.552 0-.989-.447-.989-1 0-.552.458-1 1.011-1 .997 0 2.585.974 3.36 2.423.481.899 1.052 2.761-.528 5.131-1.961 2.942-1.531 4.332-.125 5.738.391.391.391 1.023 0 1.414-.195.197-.451.295-.707.295z",fill:"#5C913B"})),g$=li("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 36 36"},li("path",{fill:"#EF9645",d:"M15.5 2.965c1.381 0 2.5 1.119 2.5 2.5v.005L20.5.465c1.381 0 2.5 1.119 2.5 2.5V4.25l2.5-1.535c1.381 0 2.5 1.119 2.5 2.5V8.75L29 18H15.458L15.5 2.965z"}),li("path",{fill:"#FFDC5D",d:"M4.625 16.219c1.381-.611 3.354.208 4.75 2.188.917 1.3 1.187 3.151 2.391 3.344.46.073 1.234-.313 1.234-1.397V4.5s0-2 2-2 2 2 2 2v11.633c0-.029 1-.064 1-.082V2s0-2 2-2 2 2 2 2v14.053c0 .017 1 .041 1 .069V4.25s0-2 2-2 2 2 2 2v12.638c0 .118 1 .251 1 .398V8.75s0-2 2-2 2 2 2 2V24c0 6.627-5.373 12-12 12-4.775 0-8.06-2.598-9.896-5.292C8.547 28.423 8.096 26.051 8 25.334c0 0-.123-1.479-1.156-2.865-1.469-1.969-2.5-3.156-3.125-3.866-.317-.359-.625-1.707.906-2.384z"})),b$=nb("result","\n color: var(--n-text-color);\n line-height: var(--n-line-height);\n font-size: var(--n-font-size);\n transition:\n color .3s var(--n-bezier);\n",[nb("result-icon","\n display: flex;\n justify-content: center;\n transition: color .3s var(--n-bezier);\n ",[ob("status-image","\n font-size: var(--n-icon-size);\n width: 1em;\n height: 1em;\n "),nb("base-icon","\n color: var(--n-icon-color);\n font-size: var(--n-icon-size);\n ")]),nb("result-content",{marginTop:"24px"}),nb("result-footer","\n margin-top: 24px;\n text-align: center;\n "),nb("result-header",[ob("title","\n margin-top: 16px;\n font-weight: var(--n-title-font-weight);\n transition: color .3s var(--n-bezier);\n text-align: center;\n color: var(--n-title-text-color);\n font-size: var(--n-title-font-size);\n "),ob("description","\n margin-top: 4px;\n text-align: center;\n font-size: var(--n-font-size);\n ")])]),y$={403:()=>g$,404:()=>f$,418:()=>m$,500:()=>v$,info:()=>li(uT,null),success:()=>li(hT,null),warning:()=>li(fT,null),error:()=>li(iT,null)},x$=zn({name:"Result",props:Object.assign(Object.assign({},I_.props),{size:{type:String,default:"medium"},status:{type:String,default:"info"},title:String,description:String}),setup(e){const{mergedClsPrefixRef:t,inlineThemeDisabled:n}=B_(e),o=I_("Result","-result",b$,GL,e,t),r=ai((()=>{const{size:t,status:n}=e,{common:{cubicBezierEaseInOut:r},self:{textColor:i,lineHeight:a,titleTextColor:l,titleFontWeight:s,[ub("iconColor",n)]:c,[ub("fontSize",t)]:u,[ub("titleFontSize",t)]:d,[ub("iconSize",t)]:p}}=o.value;return{"--n-bezier":r,"--n-font-size":u,"--n-icon-size":p,"--n-line-height":a,"--n-text-color":i,"--n-title-font-size":d,"--n-title-font-weight":s,"--n-title-text-color":l,"--n-icon-color":c||""}})),i=n?KP("result",ai((()=>{const{size:t,status:n}=e;let o="";return t&&(o+=t[0]),n&&(o+=n[0]),o})),r,e):void 0;return{mergedClsPrefix:t,cssVars:n?void 0:r,themeClass:null==i?void 0:i.themeClass,onRender:null==i?void 0:i.onRender}},render(){var e;const{status:t,$slots:n,mergedClsPrefix:o,onRender:r}=this;return null==r||r(),li("div",{class:[`${o}-result`,this.themeClass],style:this.cssVars},li("div",{class:`${o}-result-icon`},(null===(e=n.icon)||void 0===e?void 0:e.call(n))||li(CT,{clsPrefix:o},{default:()=>y$[t]()})),li("div",{class:`${o}-result-header`},this.title?li("div",{class:`${o}-result-header__title`},this.title):null,this.description?li("div",{class:`${o}-result-header__description`},this.description):null),n.default&&li("div",{class:`${o}-result-content`},n),n.footer&&li("div",{class:`${o}-result-footer`},n.footer()))}}),C$=zn({name:"Scrollbar",props:Object.assign(Object.assign({},I_.props),{trigger:String,xScrollable:Boolean,onScroll:Function,contentClass:String,contentStyle:[Object,String],size:Number}),setup(){const e=Et(null),t={scrollTo:(...t)=>{var n;null===(n=e.value)||void 0===n||n.scrollTo(t[0],t[1])},scrollBy:(...t)=>{var n;null===(n=e.value)||void 0===n||n.scrollBy(t[0],t[1])}};return Object.assign(Object.assign({},t),{scrollbarInstRef:e})},render(){return li(lR,Object.assign({ref:"scrollbarInstRef"},this.$props),this.$slots)}}),w$=C$,k$={name:"Skeleton",common:tz,self(e){const{heightSmall:t,heightMedium:n,heightLarge:o,borderRadius:r}=e;return{color:"rgba(255, 255, 255, 0.12)",colorEnd:"rgba(255, 255, 255, 0.18)",borderRadius:r,heightSmall:t,heightMedium:n,heightLarge:o}}},S$={name:"Skeleton",common:qz,self:function(e){const{heightSmall:t,heightMedium:n,heightLarge:o,borderRadius:r}=e;return{color:"#eee",colorEnd:"#ddd",borderRadius:r,heightSmall:t,heightMedium:n,heightLarge:o}}},_$=eb([nb("skeleton","\n height: 1em;\n width: 100%;\n transition:\n --n-color-start .3s var(--n-bezier),\n --n-color-end .3s var(--n-bezier),\n background-color .3s var(--n-bezier);\n animation: 2s skeleton-loading infinite cubic-bezier(0.36, 0, 0.64, 1);\n background-color: var(--n-color-start);\n "),eb("@keyframes skeleton-loading","\n 0% {\n background: var(--n-color-start);\n }\n 40% {\n background: var(--n-color-end);\n }\n 80% {\n background: var(--n-color-start);\n }\n 100% {\n background: var(--n-color-start);\n }\n ")]),P$=zn({name:"Skeleton",inheritAttrs:!1,props:Object.assign(Object.assign({},I_.props),{text:Boolean,round:Boolean,circle:Boolean,height:[String,Number],width:[String,Number],size:String,repeat:{type:Number,default:1},animated:{type:Boolean,default:!0},sharp:{type:Boolean,default:!0}}),setup(e){!function(){if(pb&&window.CSS&&!Qb&&(Qb=!0,"registerProperty"in(null===window||void 0===window?void 0:window.CSS)))try{CSS.registerProperty({name:"--n-color-start",syntax:"",inherits:!1,initialValue:"#0000"}),CSS.registerProperty({name:"--n-color-end",syntax:"",inherits:!1,initialValue:"#0000"})}catch(Cb){}}();const{mergedClsPrefixRef:t}=B_(e),n=I_("Skeleton","-skeleton",_$,S$,e,t);return{mergedClsPrefix:t,style:ai((()=>{var t,o;const r=n.value,{common:{cubicBezierEaseInOut:i}}=r,a=r.self,{color:l,colorEnd:s,borderRadius:c}=a;let u;const{circle:d,sharp:p,round:h,width:f,height:v,size:m,text:g,animated:b}=e;void 0!==m&&(u=a[ub("height",m)]);const y=d?null!==(t=null!=f?f:v)&&void 0!==t?t:u:f,x=null!==(o=d&&null!=f?f:v)&&void 0!==o?o:u;return{display:g?"inline-block":"",verticalAlign:g?"-0.125em":"",borderRadius:d?"50%":h?"4096px":p?"":c,width:"number"==typeof y?Lm(y):y,height:"number"==typeof x?Lm(x):x,animation:b?"":"none","--n-bezier":i,"--n-color-start":l,"--n-color-end":s}}))}},render(){const{repeat:e,style:t,mergedClsPrefix:n,$attrs:o}=this,r=li("div",Wr({class:`${n}-skeleton`,style:t},o));return e>1?li(yr,null,ag(e,null).map((e=>[r,"\n"]))):r}}),T$=eb([eb("@keyframes spin-rotate","\n from {\n transform: rotate(0);\n }\n to {\n transform: rotate(360deg);\n }\n "),nb("spin-container","\n position: relative;\n ",[nb("spin-body","\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translateX(-50%) translateY(-50%);\n ",[rR()])]),nb("spin-body","\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n "),nb("spin","\n display: inline-flex;\n height: var(--n-size);\n width: var(--n-size);\n font-size: var(--n-size);\n color: var(--n-color);\n ",[rb("rotate","\n animation: spin-rotate 2s linear infinite;\n ")]),nb("spin-description","\n display: inline-block;\n font-size: var(--n-font-size);\n color: var(--n-text-color);\n transition: color .3s var(--n-bezier);\n margin-top: 8px;\n "),nb("spin-content","\n opacity: 1;\n transition: opacity .3s var(--n-bezier);\n pointer-events: all;\n ",[rb("spinning","\n user-select: none;\n -webkit-user-select: none;\n pointer-events: none;\n opacity: var(--n-opacity-spinning);\n ")])]),A$={small:20,medium:18,large:16},z$=zn({name:"Spin",props:Object.assign(Object.assign({},I_.props),{contentClass:String,contentStyle:[Object,String],description:String,stroke:String,size:{type:[String,Number],default:"medium"},show:{type:Boolean,default:!0},strokeWidth:Number,rotate:{type:Boolean,default:!0},spinning:{type:Boolean,validator:()=>!0,default:void 0},delay:Number}),setup(e){const{mergedClsPrefixRef:t,inlineThemeDisabled:n}=B_(e),o=I_("Spin","-spin",T$,JL,e,t),r=ai((()=>{const{size:t}=e,{common:{cubicBezierEaseInOut:n},self:r}=o.value,{opacitySpinning:i,color:a,textColor:l}=r;return{"--n-bezier":n,"--n-opacity-spinning":i,"--n-size":"number"==typeof t?Lm(t):r[ub("size",t)],"--n-color":a,"--n-text-color":l}})),i=n?KP("spin",ai((()=>{const{size:t}=e;return"number"==typeof t?String(t):t[0]})),r,e):void 0,a=Nb(e,["spinning","show"]),l=Et(!1);return ir((t=>{let n;if(a.value){const{delay:o}=e;if(o)return n=window.setTimeout((()=>{l.value=!0}),o),void t((()=>{clearTimeout(n)}))}l.value=a.value})),{mergedClsPrefix:t,active:l,mergedStrokeWidth:ai((()=>{const{strokeWidth:t}=e;if(void 0!==t)return t;const{size:n}=e;return A$["number"==typeof n?"medium":n]})),cssVars:n?void 0:r,themeClass:null==i?void 0:i.themeClass,onRender:null==i?void 0:i.onRender}},render(){var e,t;const{$slots:n,mergedClsPrefix:o,description:r}=this,i=n.icon&&this.rotate,a=(r||n.description)&&li("div",{class:`${o}-spin-description`},r||(null===(e=n.description)||void 0===e?void 0:e.call(n))),l=n.icon?li("div",{class:[`${o}-spin-body`,this.themeClass]},li("div",{class:[`${o}-spin`,i&&`${o}-spin--rotate`],style:n.default?"":this.cssVars},n.icon()),a):li("div",{class:[`${o}-spin-body`,this.themeClass]},li(RT,{clsPrefix:o,style:n.default?"":this.cssVars,stroke:this.stroke,"stroke-width":this.mergedStrokeWidth,class:`${o}-spin`}),a);return null===(t=this.onRender)||void 0===t||t.call(this),n.default?li("div",{class:[`${o}-spin-container`,this.themeClass],style:this.cssVars},li("div",{class:[`${o}-spin-content`,this.active&&`${o}-spin-content--spinning`,this.contentClass],style:this.contentStyle},n),li(vi,{name:"fade-in-transition"},{default:()=>this.active?l:null})):l}}),R$={name:"Split",common:tz},E$=nb("switch","\n height: var(--n-height);\n min-width: var(--n-width);\n vertical-align: middle;\n user-select: none;\n -webkit-user-select: none;\n display: inline-flex;\n outline: none;\n justify-content: center;\n align-items: center;\n",[ob("children-placeholder","\n height: var(--n-rail-height);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n pointer-events: none;\n visibility: hidden;\n "),ob("rail-placeholder","\n display: flex;\n flex-wrap: none;\n "),ob("button-placeholder","\n width: calc(1.75 * var(--n-rail-height));\n height: var(--n-rail-height);\n "),nb("base-loading","\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translateX(-50%) translateY(-50%);\n font-size: calc(var(--n-button-width) - 4px);\n color: var(--n-loading-color);\n transition: color .3s var(--n-bezier);\n ",[PT({left:"50%",top:"50%",originalTransform:"translateX(-50%) translateY(-50%)"})]),ob("checked, unchecked","\n transition: color .3s var(--n-bezier);\n color: var(--n-text-color);\n box-sizing: border-box;\n position: absolute;\n white-space: nowrap;\n top: 0;\n bottom: 0;\n display: flex;\n align-items: center;\n line-height: 1;\n "),ob("checked","\n right: 0;\n padding-right: calc(1.25 * var(--n-rail-height) - var(--n-offset));\n "),ob("unchecked","\n left: 0;\n justify-content: flex-end;\n padding-left: calc(1.25 * var(--n-rail-height) - var(--n-offset));\n "),eb("&:focus",[ob("rail","\n box-shadow: var(--n-box-shadow-focus);\n ")]),rb("round",[ob("rail","border-radius: calc(var(--n-rail-height) / 2);",[ob("button","border-radius: calc(var(--n-button-height) / 2);")])]),ib("disabled",[ib("icon",[rb("rubber-band",[rb("pressed",[ob("rail",[ob("button","max-width: var(--n-button-width-pressed);")])]),ob("rail",[eb("&:active",[ob("button","max-width: var(--n-button-width-pressed);")])]),rb("active",[rb("pressed",[ob("rail",[ob("button","left: calc(100% - var(--n-offset) - var(--n-button-width-pressed));")])]),ob("rail",[eb("&:active",[ob("button","left: calc(100% - var(--n-offset) - var(--n-button-width-pressed));")])])])])])]),rb("active",[ob("rail",[ob("button","left: calc(100% - var(--n-button-width) - var(--n-offset))")])]),ob("rail","\n overflow: hidden;\n height: var(--n-rail-height);\n min-width: var(--n-rail-width);\n border-radius: var(--n-rail-border-radius);\n cursor: pointer;\n position: relative;\n transition:\n opacity .3s var(--n-bezier),\n background .3s var(--n-bezier),\n box-shadow .3s var(--n-bezier);\n background-color: var(--n-rail-color);\n ",[ob("button-icon","\n color: var(--n-icon-color);\n transition: color .3s var(--n-bezier);\n font-size: calc(var(--n-button-height) - 4px);\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n line-height: 1;\n ",[PT()]),ob("button",'\n align-items: center; \n top: var(--n-offset);\n left: var(--n-offset);\n height: var(--n-button-height);\n width: var(--n-button-width-pressed);\n max-width: var(--n-button-width);\n border-radius: var(--n-button-border-radius);\n background-color: var(--n-button-color);\n box-shadow: var(--n-button-box-shadow);\n box-sizing: border-box;\n cursor: inherit;\n content: "";\n position: absolute;\n transition:\n background-color .3s var(--n-bezier),\n left .3s var(--n-bezier),\n opacity .3s var(--n-bezier),\n max-width .3s var(--n-bezier),\n box-shadow .3s var(--n-bezier);\n ')]),rb("active",[ob("rail","background-color: var(--n-rail-color-active);")]),rb("loading",[ob("rail","\n cursor: wait;\n ")]),rb("disabled",[ob("rail","\n cursor: not-allowed;\n opacity: .5;\n ")])]);let O$;const M$=zn({name:"Switch",props:Object.assign(Object.assign({},I_.props),{size:{type:String,default:"medium"},value:{type:[String,Number,Boolean],default:void 0},loading:Boolean,defaultValue:{type:[String,Number,Boolean],default:!1},disabled:{type:Boolean,default:void 0},round:{type:Boolean,default:!0},"onUpdate:value":[Function,Array],onUpdateValue:[Function,Array],checkedValue:{type:[String,Number,Boolean],default:!0},uncheckedValue:{type:[String,Number,Boolean],default:!1},railStyle:Function,rubberBand:{type:Boolean,default:!0},onChange:[Function,Array]}),setup(e){void 0===O$&&(O$="undefined"==typeof CSS||void 0!==CSS.supports&&CSS.supports("width","max(1px)"));const{mergedClsPrefixRef:t,inlineThemeDisabled:n}=B_(e),o=I_("Switch","-switch",E$,aB,e,t),r=eC(e),{mergedSizeRef:i,mergedDisabledRef:a}=r,l=Et(e.defaultValue),s=Db(jt(e,"value"),l),c=ai((()=>s.value===e.checkedValue)),u=Et(!1),d=Et(!1),p=ai((()=>{const{railStyle:t}=e;if(t)return t({focused:d.value,checked:c.value})}));function h(t){const{"onUpdate:value":n,onChange:o,onUpdateValue:i}=e,{nTriggerFormInput:a,nTriggerFormChange:s}=r;n&&dg(n,t),i&&dg(i,t),o&&dg(o,t),l.value=t,a(),s()}const f=ai((()=>{const{value:e}=i,{self:{opacityDisabled:t,railColor:n,railColorActive:r,buttonBoxShadow:a,buttonColor:l,boxShadowFocus:s,loadingColor:c,textColor:u,iconColor:d,[ub("buttonHeight",e)]:p,[ub("buttonWidth",e)]:h,[ub("buttonWidthPressed",e)]:f,[ub("railHeight",e)]:v,[ub("railWidth",e)]:m,[ub("railBorderRadius",e)]:g,[ub("buttonBorderRadius",e)]:b},common:{cubicBezierEaseInOut:y}}=o.value;let x,C,w;return O$?(x=`calc((${v} - ${p}) / 2)`,C=`max(${v}, ${p})`,w=`max(${m}, calc(${m} + ${p} - ${v}))`):(x=Lm((Im(v)-Im(p))/2),C=Lm(Math.max(Im(v),Im(p))),w=Im(v)>Im(p)?m:Lm(Im(m)+Im(p)-Im(v))),{"--n-bezier":y,"--n-button-border-radius":b,"--n-button-box-shadow":a,"--n-button-color":l,"--n-button-width":h,"--n-button-width-pressed":f,"--n-button-height":p,"--n-height":C,"--n-offset":x,"--n-opacity-disabled":t,"--n-rail-border-radius":g,"--n-rail-color":n,"--n-rail-color-active":r,"--n-rail-height":v,"--n-rail-width":m,"--n-width":w,"--n-box-shadow-focus":s,"--n-loading-color":c,"--n-text-color":u,"--n-icon-color":d}})),v=n?KP("switch",ai((()=>i.value[0])),f,e):void 0;return{handleClick:function(){e.loading||a.value||(s.value!==e.checkedValue?h(e.checkedValue):h(e.uncheckedValue))},handleBlur:function(){d.value=!1,function(){const{nTriggerFormBlur:e}=r;e()}(),u.value=!1},handleFocus:function(){d.value=!0,function(){const{nTriggerFormFocus:e}=r;e()}()},handleKeyup:function(t){e.loading||a.value||" "===t.key&&(s.value!==e.checkedValue?h(e.checkedValue):h(e.uncheckedValue),u.value=!1)},handleKeydown:function(t){e.loading||a.value||" "===t.key&&(t.preventDefault(),u.value=!0)},mergedRailStyle:p,pressed:u,mergedClsPrefix:t,mergedValue:s,checked:c,mergedDisabled:a,cssVars:n?void 0:f,themeClass:null==v?void 0:v.themeClass,onRender:null==v?void 0:v.onRender}},render(){const{mergedClsPrefix:e,mergedDisabled:t,checked:n,mergedRailStyle:o,onRender:r,$slots:i}=this;null==r||r();const{checked:a,unchecked:l,icon:s,"checked-icon":c,"unchecked-icon":u}=i,d=!(kg(s)&&kg(c)&&kg(u));return li("div",{role:"switch","aria-checked":n,class:[`${e}-switch`,this.themeClass,d&&`${e}-switch--icon`,n&&`${e}-switch--active`,t&&`${e}-switch--disabled`,this.round&&`${e}-switch--round`,this.loading&&`${e}-switch--loading`,this.pressed&&`${e}-switch--pressed`,this.rubberBand&&`${e}-switch--rubber-band`],tabindex:this.mergedDisabled?void 0:0,style:this.cssVars,onClick:this.handleClick,onFocus:this.handleFocus,onBlur:this.handleBlur,onKeyup:this.handleKeyup,onKeydown:this.handleKeydown},li("div",{class:`${e}-switch__rail`,"aria-hidden":"true",style:o},wg(a,(t=>wg(l,(n=>t||n?li("div",{"aria-hidden":!0,class:`${e}-switch__children-placeholder`},li("div",{class:`${e}-switch__rail-placeholder`},li("div",{class:`${e}-switch__button-placeholder`}),t),li("div",{class:`${e}-switch__rail-placeholder`},li("div",{class:`${e}-switch__button-placeholder`}),n)):null)))),li("div",{class:`${e}-switch__button`},wg(s,(t=>wg(c,(n=>wg(u,(o=>li(bT,null,{default:()=>this.loading?li(RT,{key:"loading",clsPrefix:e,strokeWidth:20}):this.checked&&(n||t)?li("div",{class:`${e}-switch__button-icon`,key:n?"checked-icon":"icon"},n||t):this.checked||!o&&!t?null:li("div",{class:`${e}-switch__button-icon`,key:o?"unchecked-icon":"icon"},o||t)}))))))),wg(a,(t=>t&&li("div",{key:"checked",class:`${e}-switch__checked`},t))),wg(l,(t=>t&&li("div",{key:"unchecked",class:`${e}-switch__unchecked`},t))))))}}),F$=zn({name:"InjectionExtractor",props:{onSetup:Function},setup(e,{slots:t}){var n;return null===(n=e.onSetup)||void 0===n||n.call(e),()=>{var e;return null===(e=t.default)||void 0===e?void 0:e.call(t)}}}),I$={message:function(){const e=Po(AD,null);return null===e&&fg("use-message","No outer founded. See prerequisite in https://www.naiveui.com/en-US/os-theme/components/message for more details. If you want to use `useMessage` outside setup, please check https://www.naiveui.com/zh-CN/os-theme/components/message#Q-&-A."),e},notification:function(){const e=Po(XD,null);return null===e&&fg("use-notification","No outer `n-notification-provider` found."),e},loadingBar:function(){const e=Po(ZB,null);return null===e&&fg("use-loading-bar","No outer founded."),e},dialog:function(){const e=Po(CI,null);return null===e&&fg("use-dialog","No outer founded."),e},modal:function(){const e=Po(BD,null);return null===e&&fg("use-modal","No outer founded."),e}};function L$(e,{configProviderProps:t,messageProviderProps:n,dialogProviderProps:o,notificationProviderProps:r,loadingBarProviderProps:i,modalProviderProps:a}={}){const l=[];e.forEach((e=>{switch(e){case"message":l.push({type:e,Provider:FD,props:n});break;case"notification":l.push({type:e,Provider:YD,props:r});break;case"dialog":l.push({type:e,Provider:MI,props:o});break;case"loadingBar":l.push({type:e,Provider:oD,props:i});break;case"modal":l.push({type:e,Provider:DD,props:a})}}));const s=function({providersAndProps:e,configProviderProps:t}){let n=ga((function(){return li(ZO,It(t),{default:()=>e.map((({type:e,Provider:t,props:n})=>li(t,It(n),{default:()=>li(F$,{onSetup:()=>o[e]=I$[e]()})})))})}));const o={app:n};let r;return pb&&(r=document.createElement("div"),document.body.appendChild(r),n.mount(r)),Object.assign({unmount:()=>{var e;null!==n&&null!==r&&(n.unmount(),null===(e=r.parentNode)||void 0===e||e.removeChild(r),r=null,n=null)}},o)}({providersAndProps:l,configProviderProps:t});return s}const B$={name:"dark",common:tz,Alert:oE,Anchor:pE,AutoComplete:EE,Avatar:OE,AvatarGroup:ME,BackTop:IE,Badge:NE,Breadcrumb:UE,Button:eO,ButtonGroup:wL,Calendar:aO,Card:dO,Carousel:bO,Cascader:HO,Checkbox:jO,Code:XO,Collapse:YO,CollapseTransition:QO,ColorPicker:lO,DataTable:$M,DatePicker:sI,Descriptions:uI,Dialog:fI,Divider:LI,Drawer:jI,Dropdown:IM,DynamicInput:tL,DynamicTags:sL,Element:cL,Empty:Yz,Ellipsis:TM,Equation:{name:"Equation",common:tz,self:()=>({})},Flex:dL,Form:hL,GradientText:kL,Icon:wF,IconWrapper:SB,Image:_B,Input:xE,InputNumber:SL,LegacyTransfer:VB,Layout:PL,List:RL,LoadingBar:EL,Log:ML,Menu:BL,Mention:FL,Message:CL,Modal:SI,Notification:gL,PageHeader:$L,Pagination:gM,Popconfirm:jL,Popover:_R,Popselect:tM,Progress:UL,QrCode:i$,Radio:RM,Rate:VL,Result:XL,Row:wB,Scrollbar:nR,Select:dM,Skeleton:k$,Slider:QL,Space:oL,Spin:eB,Statistic:tB,Steps:oB,Switch:iB,Table:sB,Tabs:uB,Tag:jR,Thing:dB,TimePicker:aI,Timeline:hB,Tooltip:_M,Transfer:vB,Tree:mB,TreeSelect:gB,Typography:yB,Upload:xB,Watermark:CB,Split:R$,FloatButton:kB,FloatButtonGroup:{name:"FloatButtonGroup",common:tz,self(e){const{popoverColor:t,dividerColor:n,borderRadius:o}=e;return{color:t,buttonBorderColor:n,borderRadiusSquare:o,boxShadow:"0 2px 8px 0px rgba(0, 0, 0, .12)"}}}},D$={"aria-hidden":"true",width:"1em",height:"1em"},$$=["xlink:href","fill"],N$=zn({__name:"SvgIcon",props:{icon:{type:String,required:!0},prefix:{type:String,default:"icon-custom"},color:{type:String,default:"currentColor"}},setup(e){const t=e,n=ai((()=>`#${t.prefix}-${t.icon}`));return(t,o)=>(_r(),zr("svg",D$,[Ir("use",{"xlink:href":n.value,fill:e.color},null,8,$$)]))}}),j$=(e,t={size:12})=>()=>li(SF,t,(()=>li(Tm,{icon:e}))),H$=(e,t={size:12})=>()=>li(SF,t,(()=>li(N$,{icon:e}))),W$={header:{height:60},tags:{visible:!0,height:50},naiveThemeOverrides:{common:{primaryColor:"#316C72FF",primaryColorHover:"#316C72E3",primaryColorPressed:"#2B4C59FF",primaryColorSuppl:"#316C72E3",infoColor:"#316C72FF",infoColorHover:"#316C72E3",infoColorPressed:"#2B4C59FF",infoColorSuppl:"#316C72E3",successColor:"#18A058FF",successColorHover:"#36AD6AFF",successColorPressed:"#0C7A43FF",successColorSuppl:"#36AD6AFF",warningColor:"#F0A020FF",warningColorHover:"#FCB040FF",warningColorPressed:"#C97C10FF",warningColorSuppl:"#FCB040FF",errorColor:"#D03050FF",errorColorHover:"#DE576DFF",errorColorPressed:"#AB1F3FFF",errorColorSuppl:"#DE576DFF"}}},U$={header:{height:60},tags:{visible:!0,height:50},naiveThemeOverrides:{common:{primaryColor:"#0665d0",primaryColorHover:"#2a84de",primaryColorPressed:"#004085",primaryColorSuppl:"#0056b3",infoColor:"#0665d0",infoColorHover:"#2a84de",infoColorPressed:"#0c5460",infoColorSuppl:"#004085",successColor:"#28a745",successColorHover:"#218838",successColorPressed:"#1e7e34",successColorSuppl:"#218838",warningColor:"#ffc107",warningColorHover:"#e0a800",warningColorPressed:"#d39e00",warningColorSuppl:"#e0a800",errorColor:"#dc3545",errorColorHover:"#c82333",errorColorPressed:"#bd2130",errorColorSuppl:"#c82333"}}},V$={header:{height:60},tags:{visible:!0,height:50},naiveThemeOverrides:{common:{primaryColor:"#343a40",primaryColorHover:"#23272b",primaryColorPressed:"#1d2124",primaryColorSuppl:"#23272b",infoColor:"#343a40",infoColorHover:"#23272b",infoColorPressed:"#1d2124",infoColorSuppl:"#23272b",successColor:"#28a745",successColorHover:"#218838",successColorPressed:"#1e7e34",successColorSuppl:"#218838",warningColor:"#ffc107",warningColorHover:"#e0a800",warningColorPressed:"#d39e00",warningColorSuppl:"#e0a800",errorColor:"#dc3545",errorColorHover:"#c82333",errorColorPressed:"#bd2130",errorColorSuppl:"#c82333"}}},q$={header:{height:60},tags:{visible:!0,height:50},naiveThemeOverrides:{common:{primaryColor:"#004175",primaryColorHover:"#002c4c",primaryColorPressed:"#001f35",primaryColorSuppl:"#002c4c",infoColor:"#004175",infoColorHover:"#002c4c",infoColorPressed:"#001f35",infoColorSuppl:"#002c4c",successColor:"#28a745",successColorHover:"#218838",successColorPressed:"#1e7e34",successColorSuppl:"#218838",warningColor:"#ffc107",warningColorHover:"#e0a800",warningColorPressed:"#d39e00",warningColorSuppl:"#e0a800",errorColor:"#dc3545",errorColorHover:"#c82333",errorColorPressed:"#bd2130",errorColorSuppl:"#c82333"}}},{header:K$,tags:G$,naiveThemeOverrides:X$}=function(){var e,t;const n={default:W$,blue:U$,black:V$,darkblue:q$},o=(null==(t=null==(e=window.settings)?void 0:e.theme)?void 0:t.color)||"default";return Object.prototype.hasOwnProperty.call(n,o)?n[o]:n.default}();function Y$(e){return!!ue()&&(de(e),!0)}function Q$(e){return"function"==typeof e?e():It(e)}const Z$="undefined"!=typeof window&&"undefined"!=typeof document;"undefined"!=typeof WorkerGlobalScope&&(globalThis,WorkerGlobalScope);const J$=e=>null!=e,eN=Object.prototype.toString,tN=()=>{},nN=e=>e();function oN(...e){if(1!==e.length)return jt(...e);const t=e[0];return"function"==typeof t?gt(new Dt((()=>({get:t,set:tN})))):Et(t)}function rN(e,t,n={}){const o=n,{eventFilter:r=nN}=o,i=h(o,["eventFilter"]);return lr(e,(a=r,l=t,function(...e){return new Promise(((t,n)=>{Promise.resolve(a((()=>l.apply(this,e)),{fn:l,thisArg:this,args:e})).then(t).catch(n)}))}),i);var a,l}function iN(e,t,n={}){const o=n,{eventFilter:r}=o,i=h(o,["eventFilter"]),{eventFilter:a,pause:l,resume:s,isActive:c}=function(e=nN){const t=Et(!0);return{isActive:gt(t),pause:function(){t.value=!1},resume:function(){t.value=!0},eventFilter:(...n)=>{t.value&&e(...n)}}}(r);return{stop:rN(e,t,p(d({},i),{eventFilter:a})),pause:l,resume:s,isActive:c}}function aN(e,t=!0,n){const o=function(e){return e||Gr()}();o?$n(e,n):t?e():tn(e)}function lN(e){var t;const n=Q$(e);return null!=(t=null==n?void 0:n.$el)?t:n}const sN=Z$?window:void 0,cN=Z$?window.document:void 0;function uN(...e){let t,n,o,r;if("string"==typeof e[0]||Array.isArray(e[0])?([n,o,r]=e,t=sN):[t,n,o,r]=e,!t)return tN;Array.isArray(n)||(n=[n]),Array.isArray(o)||(o=[o]);const i=[],a=()=>{i.forEach((e=>e())),i.length=0},l=lr((()=>[lN(t),Q$(r)]),(([e,t])=>{if(a(),!e)return;const r=(l=t,"[object Object]"===eN.call(l)?d({},t):t);var l;i.push(...n.flatMap((t=>o.map((n=>((e,t,n,o)=>(e.addEventListener(t,n,o),()=>e.removeEventListener(t,n,o)))(e,t,n,r))))))}),{immediate:!0,flush:"post"}),s=()=>{l(),a()};return Y$(s),s}function dN(e){const t=function(){const e=Et(!1),t=Gr();return t&&$n((()=>{e.value=!0}),t),e}();return ai((()=>(t.value,Boolean(e()))))}const pN="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},hN="__vueuse_ssr_handlers__",fN=vN();function vN(){return hN in pN||(pN[hN]=pN[hN]||{}),pN[hN]}function mN(e,t){return fN[e]||t}const gN={boolean:{read:e=>"true"===e,write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},bN="vueuse-storage";function yN(e,t,n,o={}){var r;const{flush:i="pre",deep:a=!0,listenToStorageChanges:l=!0,writeDefaults:s=!0,mergeDefaults:c=!1,shallow:u,window:p=sN,eventFilter:h,onError:f=(e=>{}),initOnMounted:v}=o,m=(u?Ot:Et)("function"==typeof t?t():t);if(!n)try{n=mN("getDefaultStorage",(()=>{var e;return null==(e=sN)?void 0:e.localStorage}))()}catch(WQ){f(WQ)}if(!n)return m;const g=Q$(t),b=function(e){return null==e?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":"boolean"==typeof e?"boolean":"string"==typeof e?"string":"object"==typeof e?"object":Number.isNaN(e)?"any":"number"}(g),y=null!=(r=o.serializer)?r:gN[b],{pause:x,resume:C}=iN(m,(()=>function(t){try{const o=n.getItem(e);if(null==t)w(o,null),n.removeItem(e);else{const r=y.write(t);o!==r&&(n.setItem(e,r),w(o,r))}}catch(WQ){f(WQ)}}(m.value)),{flush:i,deep:a,eventFilter:h});function w(t,o){p&&p.dispatchEvent(new CustomEvent(bN,{detail:{key:e,oldValue:t,newValue:o,storageArea:n}}))}function k(t){if(!t||t.storageArea===n)if(t&&null==t.key)m.value=g;else if(!t||t.key===e){x();try{(null==t?void 0:t.newValue)!==y.write(m.value)&&(m.value=function(t){const o=t?t.newValue:n.getItem(e);if(null==o)return s&&null!=g&&n.setItem(e,y.write(g)),g;if(!t&&c){const e=y.read(o);return"function"==typeof c?c(e,g):"object"!==b||Array.isArray(e)?e:d(d({},g),e)}return"string"!=typeof o?o:y.read(o)}(t))}catch(WQ){f(WQ)}finally{t?tn(C):C()}}}function S(e){k(e.detail)}return p&&l&&aN((()=>{uN(p,"storage",k),uN(p,bN,S),v&&k()})),v||k(),m}function xN(e){return function(e,t={}){const{window:n=sN}=t,o=dN((()=>n&&"matchMedia"in n&&"function"==typeof n.matchMedia));let r;const i=Et(!1),a=e=>{i.value=e.matches},l=()=>{r&&("removeEventListener"in r?r.removeEventListener("change",a):r.removeListener(a))},s=ir((()=>{o.value&&(l(),r=n.matchMedia(Q$(e)),"addEventListener"in r?r.addEventListener("change",a):r.addListener(a),i.value=r.matches)}));return Y$((()=>{s(),l(),r=void 0})),i}("(prefers-color-scheme: dark)",e)}function CN(e,t,n={}){const{window:o=sN,initialValue:r="",observe:i=!1}=n,a=Et(r),l=ai((()=>{var e;return lN(t)||(null==(e=null==o?void 0:o.document)?void 0:e.documentElement)}));function s(){var t;const n=Q$(e),i=Q$(l);if(i&&o){const e=null==(t=o.getComputedStyle(i).getPropertyValue(n))?void 0:t.trim();a.value=e||r}}return i&&function(e,t,n={}){const o=n,{window:r=sN}=o,i=h(o,["window"]);let a;const l=dN((()=>r&&"MutationObserver"in r)),s=()=>{a&&(a.disconnect(),a=void 0)},c=ai((()=>{const t=Q$(e),n=(Array.isArray(t)?t:[t]).map(lN).filter(J$);return new Set(n)})),u=lr((()=>c.value),(e=>{s(),l.value&&e.size&&(a=new MutationObserver(t),e.forEach((e=>a.observe(e,i))))}),{immediate:!0,flush:"post"}),d=()=>{s(),u()};Y$(d)}(l,s,{attributeFilter:["style","class"],window:o}),lr([l,()=>Q$(e)],s,{immediate:!0}),lr(a,(t=>{var n;(null==(n=l.value)?void 0:n.style)&&l.value.style.setProperty(Q$(e),t)})),a}function wN(e={}){const{valueDark:t="dark",valueLight:n="",window:o=sN}=e,r=function(e={}){const{selector:t="html",attribute:n="class",initialValue:o="auto",window:r=sN,storage:i,storageKey:a="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:s,emitAuto:c,disableTransition:u=!0}=e,p=d({auto:"",light:"light",dark:"dark"},e.modes||{}),h=xN({window:r}),f=ai((()=>h.value?"dark":"light")),v=s||(null==a?oN(o):yN(a,o,i,{window:r,listenToStorageChanges:l})),m=ai((()=>"auto"===v.value?f.value:v.value)),g=mN("updateHTMLAttrs",((e,t,n)=>{const o="string"==typeof e?null==r?void 0:r.document.querySelector(e):lN(e);if(!o)return;let i;if(u){i=r.document.createElement("style");const e="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";i.appendChild(document.createTextNode(e)),r.document.head.appendChild(i)}if("class"===t){const e=n.split(/\s/g);Object.values(p).flatMap((e=>(e||"").split(/\s/g))).filter(Boolean).forEach((t=>{e.includes(t)?o.classList.add(t):o.classList.remove(t)}))}else o.setAttribute(t,n);u&&(r.getComputedStyle(i).opacity,document.head.removeChild(i))}));function b(e){var o;g(t,n,null!=(o=p[e])?o:e)}function y(t){e.onChanged?e.onChanged(t,b):b(t)}lr(m,y,{flush:"post",immediate:!0}),aN((()=>y(m.value)));const x=ai({get:()=>c?v.value:m.value,set(e){v.value=e}});try{return Object.assign(x,{store:v,system:f,state:m})}catch(WQ){return x}}(p(d({},e),{onChanged:(t,n)=>{var o;e.onChanged?null==(o=e.onChanged)||o.call(e,"dark"===t,n,t):n(t)},modes:{dark:t,light:n}})),i=ai((()=>r.system?r.system.value:xN({window:o}).value?"dark":"light"));return ai({get:()=>"dark"===r.value,set(e){const t=e?"dark":"light";i.value===t?r.value="auto":r.value=t}})}const kN=["fullscreenchange","webkitfullscreenchange","webkitendfullscreen","mozfullscreenchange","MSFullscreenChange"];function SN(e,t={}){const{document:n=cN,autoExit:o=!1}=t,r=ai((()=>{var t;return null!=(t=lN(e))?t:null==n?void 0:n.querySelector("html")})),i=Et(!1),a=ai((()=>["requestFullscreen","webkitRequestFullscreen","webkitEnterFullscreen","webkitEnterFullScreen","webkitRequestFullScreen","mozRequestFullScreen","msRequestFullscreen"].find((e=>n&&e in n||r.value&&e in r.value)))),l=ai((()=>["exitFullscreen","webkitExitFullscreen","webkitExitFullScreen","webkitCancelFullScreen","mozCancelFullScreen","msExitFullscreen"].find((e=>n&&e in n||r.value&&e in r.value)))),s=ai((()=>["fullScreen","webkitIsFullScreen","webkitDisplayingFullscreen","mozFullScreen","msFullscreenElement"].find((e=>n&&e in n||r.value&&e in r.value)))),c=["fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement"].find((e=>n&&e in n)),u=dN((()=>r.value&&n&&void 0!==a.value&&void 0!==l.value&&void 0!==s.value)),d=()=>{if(s.value){if(n&&null!=n[s.value])return n[s.value];{const e=r.value;if(null!=(null==e?void 0:e[s.value]))return Boolean(e[s.value])}}return!1};function p(){return v(this,null,(function*(){if(u.value&&i.value){if(l.value)if(null!=(null==n?void 0:n[l.value]))yield n[l.value]();else{const e=r.value;null!=(null==e?void 0:e[l.value])&&(yield e[l.value]())}i.value=!1}}))}function h(){return v(this,null,(function*(){if(!u.value||i.value)return;d()&&(yield p());const e=r.value;a.value&&null!=(null==e?void 0:e[a.value])&&(yield e[a.value](),i.value=!0)}))}const f=()=>{const e=d();(!e||e&&c&&(null==n?void 0:n[c])===r.value)&&(i.value=e)};return uN(n,kN,f,!1),uN((()=>lN(r)),kN,f,!1),o&&Y$(p),{isSupported:u,isFullscreen:i,enter:h,exit:p,toggle:function(){return v(this,null,(function*(){yield i.value?p():h()}))}}}const _N=$s("app",{state(){var e,t,n,o,r,i,a;return{collapsed:window.innerWidth<768,isDark:wN(),title:null==(e=window.settings)?void 0:e.title,assets_path:null==(t=window.settings)?void 0:t.assets_path,theme:null==(n=window.settings)?void 0:n.theme,version:null==(o=window.settings)?void 0:o.version,background_url:null==(r=window.settings)?void 0:r.background_url,description:null==(i=window.settings)?void 0:i.description,logo:null==(a=window.settings)?void 0:a.logo,lang:Df().value||"zh-CN",appConfig:{}}},actions:{getConfig(){return v(this,null,(function*(){const{data:e}=yield EN.get("/user/comm/config");e&&(this.appConfig=e)}))},switchCollapsed(){this.collapsed=!this.collapsed},setCollapsed(e){this.collapsed=e},setDark(e){this.isDark=e},toggleDark(){this.isDark=!this.isDark},switchLang(e){return v(this,null,(function*(){$f(e),location.reload()}))}}});function PN(e){sd.set("access_token",e,21600)}function TN(e){if("get"===e.method&&(e.params=p(d({},e.params),{t:(new Date).getTime()})),function({url:e,method:t=""}){return od.some((n=>n.url===e.split("?")[0]&&n.method===t.toUpperCase()))}(e))return e;const t=dd();return t.value?(e.headers.Authorization=e.headers.Authorization||t.value,e):(hd(),Promise.reject({code:"-1",message:"未登录"}))}function AN(e){return Promise.reject(e)}function zN(e){return Promise.resolve((null==e?void 0:e.data)||{code:-1,message:"未知错误"})}function RN(e){var t;const n=(null==(t=e.response)?void 0:t.data)||{code:-1,message:"未知错误"};let o=n.message;const{code:r,errors:i}=n;switch(r){case 401:o=o||"登录已过期";break;case 403:o=o||"没有权限";break;case 404:o=o||"资源或接口不存在";break;default:o=o||"未知异常"}return window.$message.error(o),Promise.resolve({code:r,message:o,errors:i})}const EN=function(e={}){const t={headers:{"Content-Type":"application/x-www-form-urlencoded","Content-Language":Df().value||"zh-CN"},timeout:12e3},n=nd.create(d(d({},t),e));return n.interceptors.request.use(TN,AN),n.interceptors.response.use(zN,RN),n}({baseURL:function(){let e=((t=window.routerBase||"/").endsWith("/")?t:"/"+t)+"api/v1";var t;return/^https?:\/\//.test(e)||(e=window.location.origin+e),e}()});function ON(){return EN.get("/user/server/fetch")}function MN(){return EN.get("/user/order/fetch")}function FN(e){return EN.post("/user/order/cancel",{trade_no:e})}function IN(e){return EN.post("/user/update",e)}function LN(e,t,n){return EN.post("/user/order/save",{plan_id:e,period:t,coupon_code:n})}const BN=$s("user",{state:()=>({userInfo:{}}),getters:{userUUID(){var e;return null==(e=this.userInfo)?void 0:e.uuid},email(){var e;return null==(e=this.userInfo)?void 0:e.email},avatar(){var e;return null!=(e=this.userInfo.avatar_url)?e:""},role:()=>[],remind_expire(){return this.userInfo.remind_expire},remind_traffic(){return this.userInfo.remind_traffic},balance(){return this.userInfo.balance},plan_id(){return this.userInfo.plan_id},expired_at(){return this.userInfo.expired_at},plan(){return this.userInfo.plan},subscribe(){return this.userInfo.subscribe}},actions:{getUserInfo(){return v(this,null,(function*(){try{const e=yield EN.get("/user/info"),{data:t}=e;return t?(this.userInfo=t,t):Promise.reject(e)}catch(e){return Promise.reject(e)}}))},getUserSubscribe(){return v(this,null,(function*(){try{const e=yield EN.get("/user/getSubscribe"),{data:t}=e;return t?(this.userInfo.subscribe=t,this.userInfo.plan=t.plan,t):Promise.reject(e)}catch(e){return Promise.reject(e)}}))},logout(){return v(this,null,(function*(){pd(),this.userInfo={},hd()}))},setUserInfo(e){this.userInfo=d(d({},this.userInfo),e)}}});function DN(e,t){const n=[];return e.forEach((e=>{if(function(e,t){var n,o;if(!(null==(n=e.meta)?void 0:n.requireAuth))return!0;const r=(null==(o=e.meta)?void 0:o.role)||[];return!(!t.length||!r.length)&&t.some((e=>r.includes(e)))}(e,t)){const o=p(d({},e),{children:[]});e.children&&e.children.length?o.children=DN(e.children,t):Reflect.deleteProperty(o,"children"),n.push(o)}})),n}const $N=$s("permission",{state:()=>({accessRoutes:[]}),getters:{routes(){return gs.concat(JSON.parse(JSON.stringify(this.accessRoutes)))},menus(){return this.routes.filter((e=>{var t;return e.name&&!(null==(t=e.meta)?void 0:t.isHidden)}))}},actions:{generateRoutes(e){const t=DN(xs,e);return this.accessRoutes=t,t}}}),NN=cd.get("activeTag"),jN=cd.get("tags"),HN=["/404","/login"],WN=$s({id:"tag",state:()=>({tags:Et(jN.value),activeTag:Et(NN.value),reloading:Et(!1)}),getters:{activeIndex:e=>()=>e.tags.findIndex((t=>t.path===e.activeTag))},actions:{setActiveTag(e){this.activeTag=e,cd.set("activeTag",e)},setTags(e){this.tags=e,cd.set("tags",e)},addTag(e={}){if(HN.includes(e.path))return;let t=this.tags.find((t=>t.path===e.path));t?t=e:this.setTags([...this.tags,e]),this.setActiveTag(e.path)},reloadTag(e,t){return v(this,null,(function*(){let n=this.tags.find((t=>t.path===e));n?t&&(n.keepAlive=!1):(n={path:e,keepAlive:!1},this.tags.push(n)),window.$loadingBar.start(),this.reloading=!0,yield tn(),this.reloading=!1,n.keepAlive=t,setTimeout((()=>{document.documentElement.scrollTo({left:0,top:0}),window.$loadingBar.finish()}),100)}))},removeTag(e){this.setTags(this.tags.filter((t=>t.path!==e))),e===this.activeTag&&qN.push(this.tags[this.tags.length-1].path)},removeOther(e){e||(e=this.activeTag),e||this.setTags(this.tags.filter((t=>t.path===e))),e!==this.activeTag&&qN.push(this.tags[this.tags.length-1].path)},removeLeft(e){const t=this.tags.findIndex((t=>t.path===e)),n=this.tags.filter(((e,n)=>n>=t));this.setTags(n),n.find((e=>e.path===this.activeTag))||qN.push(n[n.length-1].path)},removeRight(e){const t=this.tags.findIndex((t=>t.path===e)),n=this.tags.filter(((e,n)=>n<=t));this.setTags(n),n.find((e=>e.path===this.activeTag))||qN.push(n[n.length-1].path)},resetTags(){this.setTags([]),this.setActiveTag("")}}}),UN=["/login","/register","/forgetpassword"];function VN(e){!function(e){e.beforeEach((()=>{var e;null==(e=window.$loadingBar)||e.start()})),e.afterEach((()=>{setTimeout((()=>{var e;null==(e=window.$loadingBar)||e.finish()}),200)})),e.onError((()=>{var e;null==(e=window.$loadingBar)||e.error()}))}(e),function(e){const t=BN(),n=$N();e.beforeEach(((o,r,i)=>v(this,null,(function*(){var r,a;dd().value?"/login"===o.path?i({path:null!=(a=null==(r=o.query.redirect)?void 0:r.toString())?a:"/dashboard"}):t.userUUID?i():(yield Promise.all([_N().getConfig(),t.getUserInfo().catch((e=>{pd(),hd(),window.$message.error(e.message||"获取用户信息失败!")}))]),n.generateRoutes(t.role).forEach((t=>{t.name&&!e.hasRoute(t.name)&&e.addRoute(t)})),e.addRoute(bs),i(p(d({},o),{replace:!0}))):UN.includes(o.path)?i():i({path:"/login"})}))))}(e),function(e){e.afterEach((e=>{var t;const n=null==(t=e.meta)?void 0:t.title;document.title=n?`${n} | ${Cs}`:Cs}))}(e)}const qN=function(e){const t=_l(e.routes,e),n=e.parseQuery||Ol,o=e.stringifyQuery||Ml,r=e.history,i=Nl(),a=Nl(),l=Nl(),s=Ot(Ga);let c=Ga;ba&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=xa.bind(null,(e=>""+e)),d=xa.bind(null,$a),p=xa.bind(null,Na);function h(e,i){if(i=ya({},i||s.value),"string"==typeof e){const o=Ha(n,e,i.path),a=t.resolve({path:o.path},i),l=r.createHref(o.fullPath);return ya(o,a,{params:p(a.params),hash:Na(o.hash),redirectedFrom:void 0,href:l})}let a;if(null!=e.path)a=ya({},e,{path:Ha(n,e.path,i.path).path});else{const t=ya({},e.params);for(const e in t)null==t[e]&&delete t[e];a=ya({},e,{params:d(t)}),i.params=d(i.params)}const l=t.resolve(a,i),c=e.hash||"";l.params=u(p(l.params));const h=function(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}(o,ya({},e,{hash:(f=c,Ba(f).replace(Ma,"{").replace(Ia,"}").replace(Ea,"^")),path:l.path}));var f;const v=r.createHref(h);return ya({fullPath:h,hash:c,query:o===Ml?Fl(e.query):e.query||{}},l,{redirectedFrom:void 0,href:v})}function f(e){return"string"==typeof e?Ha(n,e,s.value.path):ya({},e)}function v(e,t){if(c!==e)return fl(8,{from:t,to:e})}function m(e){return b(e)}function g(e){const t=e.matched[e.matched.length-1];if(t&&t.redirect){const{redirect:n}=t;let o="function"==typeof n?n(e):n;return"string"==typeof o&&(o=o.includes("?")||o.includes("#")?o=f(o):{path:o},o.params={}),ya({query:e.query,hash:e.hash,params:null!=o.path?{}:e.params},o)}}function b(e,t){const n=c=h(e),r=s.value,i=e.state,a=e.force,l=!0===e.replace,u=g(n);if(u)return b(ya(f(u),{state:"object"==typeof u?ya({},i,u.state):i,force:a,replace:l}),t||n);const d=n;let p;return d.redirectedFrom=t,!a&&function(e,t,n){const o=t.matched.length-1,r=n.matched.length-1;return o>-1&&o===r&&Ua(t.matched[o],n.matched[r])&&Va(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}(o,r,n)&&(p=fl(16,{to:d,from:r}),E(r,r,!0,!1)),(p?Promise.resolve(p):C(d,r)).catch((e=>vl(e)?vl(e,2)?e:R(e):z(e,d,r))).then((e=>{if(e){if(vl(e,2))return b(ya({replace:l},f(e.to),{state:"object"==typeof e.to?ya({},i,e.to.state):i,force:a}),t||d)}else e=k(d,r,!0,l,i);return w(d,r,e),e}))}function y(e,t){const n=v(e,t);return n?Promise.reject(n):Promise.resolve()}function x(e){const t=F.values().next().value;return t&&"function"==typeof t.runWithContext?t.runWithContext(e):e()}function C(e,t){let n;const[o,r,l]=function(e,t){const n=[],o=[],r=[],i=Math.max(t.matched.length,e.matched.length);for(let a=0;aUa(e,i)))?o.push(i):n.push(i));const l=e.matched[a];l&&(t.matched.find((e=>Ua(e,l)))||r.push(l))}return[n,o,r]}(e,t);n=Hl(o.reverse(),"beforeRouteLeave",e,t);for(const i of o)i.leaveGuards.forEach((o=>{n.push(jl(o,e,t))}));const s=y.bind(null,e,t);return n.push(s),L(n).then((()=>{n=[];for(const o of i.list())n.push(jl(o,e,t));return n.push(s),L(n)})).then((()=>{n=Hl(r,"beforeRouteUpdate",e,t);for(const o of r)o.updateGuards.forEach((o=>{n.push(jl(o,e,t))}));return n.push(s),L(n)})).then((()=>{n=[];for(const o of l)if(o.beforeEnter)if(wa(o.beforeEnter))for(const r of o.beforeEnter)n.push(jl(r,e,t));else n.push(jl(o.beforeEnter,e,t));return n.push(s),L(n)})).then((()=>(e.matched.forEach((e=>e.enterCallbacks={})),n=Hl(l,"beforeRouteEnter",e,t,x),n.push(s),L(n)))).then((()=>{n=[];for(const o of a.list())n.push(jl(o,e,t));return n.push(s),L(n)})).catch((e=>vl(e,8)?e:Promise.reject(e)))}function w(e,t,n){l.list().forEach((o=>x((()=>o(e,t,n)))))}function k(e,t,n,o,i){const a=v(e,t);if(a)return a;const l=t===Ga,c=ba?history.state:{};n&&(o||l?r.replace(e.fullPath,ya({scroll:l&&c&&c.scroll},i)):r.push(e.fullPath,i)),s.value=e,E(e,t,n,l),R()}let S;function _(){S||(S=r.listen(((e,t,n)=>{if(!I.listening)return;const o=h(e),i=g(o);if(i)return void b(ya(i,{replace:!0}),o).catch(Ca);c=o;const a=s.value;var l,u;ba&&(l=rl(a.fullPath,n.delta),u=nl(),il.set(l,u)),C(o,a).catch((e=>vl(e,12)?e:vl(e,2)?(b(e.to,o).then((e=>{vl(e,20)&&!n.delta&&n.type===Xa.pop&&r.go(-1,!1)})).catch(Ca),Promise.reject()):(n.delta&&r.go(-n.delta,!1),z(e,o,a)))).then((e=>{(e=e||k(o,a,!1))&&(n.delta&&!vl(e,8)?r.go(-n.delta,!1):n.type===Xa.pop&&vl(e,20)&&r.go(-1,!1)),w(o,a,e)})).catch(Ca)})))}let P,T=Nl(),A=Nl();function z(e,t,n){R(e);const o=A.list();return o.length&&o.forEach((o=>o(e,t,n))),Promise.reject(e)}function R(e){return P||(P=!e,_(),T.list().forEach((([t,n])=>e?n(e):t())),T.reset()),e}function E(t,n,o,r){const{scrollBehavior:i}=e;if(!ba||!i)return Promise.resolve();const a=!o&&function(e){const t=il.get(e);return il.delete(e),t}(rl(t.fullPath,0))||(r||!o)&&history.state&&history.state.scroll||null;return tn().then((()=>i(t,n,a))).then((e=>e&&ol(e))).catch((e=>z(e,t,n)))}const O=e=>r.go(e);let M;const F=new Set,I={currentRoute:s,listening:!0,addRoute:function(e,n){let o,r;return ul(e)?(o=t.getRecordMatcher(e),r=n):r=e,t.addRoute(r,o)},removeRoute:function(e){const n=t.getRecordMatcher(e);n&&t.removeRoute(n)},clearRoutes:t.clearRoutes,hasRoute:function(e){return!!t.getRecordMatcher(e)},getRoutes:function(){return t.getRoutes().map((e=>e.record))},resolve:h,options:e,push:m,replace:function(e){return m(ya(f(e),{replace:!0}))},go:O,back:()=>O(-1),forward:()=>O(1),beforeEach:i.add,beforeResolve:a.add,afterEach:l.add,onError:A.add,isReady:function(){return P&&s.value!==Ga?Promise.resolve():new Promise(((e,t)=>{T.add([e,t])}))},install(e){e.component("RouterLink",Ul),e.component("RouterView",Gl),e.config.globalProperties.$router=this,Object.defineProperty(e.config.globalProperties,"$route",{enumerable:!0,get:()=>It(s)}),ba&&!M&&s.value===Ga&&(M=!0,m(r.location).catch((e=>{})));const t={};for(const o in Ga)Object.defineProperty(t,o,{get:()=>s.value[o],enumerable:!0});e.provide(Bl,this),e.provide(Dl,mt(t)),e.provide($l,s);const n=e.unmount;F.add(e),e.unmount=function(){F.delete(e),F.size<1&&(c=Ga,S&&S(),S=null,s.value=Ga,M=!1,P=!1),n()}}};function L(e){return e.reduce(((e,t)=>e.then((()=>x(t)))),Promise.resolve())}return I}({history:(KN="/",(KN=location.host?KN||location.pathname+location.search:"").includes("#")||(KN+="#"),cl(KN)),routes:gs,scrollBehavior:()=>({left:0,top:0})});var KN;const GN=zn({__name:"AppProvider",setup(e){const t=_N(),n={"zh-CN":[$_,cP],"en-US":[j_,vP],"fa-IR":[q_,UP],"ko-KR":[U_,BP],"vi-VN":[V_,WP],"zh-TW":[N_,cP],"ja-JP":[W_,EP],"ru-RU":[H_,_P]};return function(){const e=X$.common;for(const t in e)CN(`--${w_(t)}`,document.documentElement).value=e[t]||"","primaryColor"===t&&window.localStorage.setItem("__THEME_COLOR__",e[t]||"")}(),(e,o)=>{const r=ZO;return _r(),Rr(r,{"wh-full":"",locale:n[It(t).lang][0],"date-locale":n[It(t).lang][1],theme:It(t).isDark?It(B$):void 0,"theme-overrides":It(X$)},{default:hn((()=>[to(e.$slots,"default")])),_:3},8,["locale","date-locale","theme","theme-overrides"])}}}),XN=ga(zn({__name:"App",setup(e){const t=BN();return ir((()=>{(()=>{const{balance:e,plan:n,expired_at:o,subscribe:r,email:i}=t;if(window.$crisp&&i){const t=[["Balance",(e/100).toString()],...(null==n?void 0:n.name)?[["Plan",n.name]]:[],["ExpireTime",Vf(o)],["UsedTraffic",Qf(((null==r?void 0:r.u)||0)+((null==r?void 0:r.d)||0))],["AllTraffic",Qf(null==r?void 0:r.transfer_enable)]];window.$crisp.push(["set","user:email",i]),window.$crisp.push(["set","session:data",[t]])}})(),(()=>{const{balance:e,plan:n,expired_at:o,subscribe:r,email:i}=t;window.tidioChatApi&&i&&(window.tidioChatApi.setVisitorData({name:i,email:i}),window.tidioChatApi.setContactProperties({Plan:(null==n?void 0:n.name)||"-",ExpireTime:Vf(o),UsedTraffic:Qf(((null==r?void 0:r.u)||0)+((null==r?void 0:r.d)||0)),AllTraffic:Qf(null==r?void 0:r.transfer_enable),Balance:e/100}))})()})),(e,t)=>{const n=Xn("router-view");return _r(),Rr(GN,null,{default:hn((()=>[Lr(n,null,{default:hn((({Component:e})=>[(_r(),Rr(Qn(e)))])),_:1})])),_:1})}}}));XN.use(function(){const e=ce(!0),t=e.run((()=>Et({})));let n=[],o=[];const r=St({install(e){ks(r),r._a=e,e.provide(Ss,r),e.config.globalProperties.$pinia=r,o.forEach((e=>n.push(e))),o=[]},use(e){return this._a?n.push(e):o.push(e),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return r}()),function(){const e=_N(),t=ai((()=>({theme:e.isDark?B$:void 0,themeOverrides:X$}))),{message:n,dialog:o,notification:r,loadingBar:i}=L$(["message","dialog","notification","loadingBar"],{configProviderProps:t});var a;window.$loadingBar=i,window.$notification=r,window.$message=function(e){let t=null;return new class{removeMessage(e=t,n=2e3){setTimeout((()=>{e&&(e.destroy(),e=null)}),n)}showMessage(n,o,r={}){if(t&&"loading"===t.type)t.type=n,t.content=o,"loading"!==n&&this.removeMessage(t,r.duration);else{const i=e[n](o,r);"loading"===n&&(t=i)}}loading(e){this.showMessage("loading",e,{duration:0})}success(e,t={}){this.showMessage("success",e,t)}error(e,t={}){this.showMessage("error",e,t)}info(e,t={}){this.showMessage("info",e,t)}warning(e,t={}){this.showMessage("warning",e,t)}}}(n),window.$dialog=((a=o).confirm=function(e={}){const t=!(function(e){return null===e}(n=e.title)||function(e){return void 0===e}(n));var n;return new Promise((n=>{a[e.type||"warning"](d({showIcon:t,positiveText:jf.global.t("确定"),negativeText:jf.global.t("取消"),onPositiveClick:()=>{e.confirm&&e.confirm(),n(!0)},onNegativeClick:()=>{e.cancel&&e.cancel(),n(!1)},onMaskClick:()=>{e.cancel&&e.cancel(),n(!1)}},e))}))},a)}(),function(e){e.use(qN),VN(qN)}(XN),function(e){v(this,null,(function*(){e.use(jf),Hf()}))}(XN),XN.mount("#app");const YN={class:"inline-block",viewBox:"0 0 24 24",width:"1em",height:"1em"},QN=[Ir("path",{fill:"currentColor",d:"M6.225 4.811a1 1 0 0 0-1.414 1.414L10.586 12L4.81 17.775a1 1 0 1 0 1.414 1.414L12 13.414l5.775 5.775a1 1 0 0 0 1.414-1.414L13.414 12l5.775-5.775a1 1 0 0 0-1.414-1.414L12 10.586z"},null,-1)],ZN={name:"gg-close",render:function(e,t){return _r(),zr("svg",YN,[...QN])}},JN={class:"h-15 f-c-c relative"},ej=["src"],tj=(e,t)=>{const n=e.__vccOpts||e;for(const[o,r]of t)n[o]=r;return n},nj=tj(zn({__name:"SideLogo",setup(e){const t=_N();return(e,n)=>{const o=ZN,r=oO;return _r(),zr("div",JN,[It(t).logo?(_r(),zr("img",{key:0,src:It(t).logo,height:"30"},null,8,ej)):$r("",!0),fn(Ir("h2",{class:"title-text font-bold color-primary text-base mx-2"},oe(It(t).title),513),[[Mi,!It(t).collapsed]]),Lr(r,{onClick:[n[0]||(n[0]=pa((()=>{}),["stop"])),It(t).switchCollapsed],class:"absolute right-4 h-auto p-0 md:hidden",tertiary:"",size:"medium"},{icon:hn((()=>[Lr(o,{class:"cursor-pointer opacity-85"})])),_:1},8,["onClick"])])}}}),[["__scopeId","data-v-143fb1b0"]]),oj=zn({__name:"SideMenu",setup(e){const t=_N(),n=e=>jf.global.t(e),o=Xl(),r=Yl(),i=$N(),a=ai((()=>{var e;return(null==(e=r.meta)?void 0:e.activeMenu)||r.name})),l=ai((()=>{const e=i.menus.reduce(((e,t)=>{var o,r,i,a;const l=c(t);if(null==(r=null==(o=l.meta)?void 0:o.group)?void 0:r.key){const t=l.meta.group.key,o=e.findIndex((e=>e.key===t));if(-1!==o)null==(i=e[o].children)||i.push(l),e[o].children=null==(a=e[o].children)?void 0:a.sort(((e,t)=>e.order-t.order));else{const o={type:"group",label:n(l.meta.group.label||""),key:t,children:[l]};e.push(o)}}else e.push(l);return e.sort(((e,t)=>e.order-t.order))}),[]);return e.sort(((e,t)=>"group"===e.type&&"group"!==t.type?1:"group"!==e.type&&"group"===t.type?-1:e.order-t.order))}));function s(e,t){return Jf(t)?t:"/"+[e,t].filter((e=>!!e&&"/"!==e)).map((e=>e.replace(/(^\/)|(\/$)/g,""))).join("/")}function c(e,t=""){const{title:o,order:r}=e.meta||{title:"",order:0},{name:i,path:a}=e,l=o||i||"",u=i||"",p=function(e){return(null==e?void 0:e.customIcon)?H$(e.customIcon,{size:18}):(null==e?void 0:e.icon)?j$(e.icon,{size:18}):null}(e.meta),h=r||0,f=e.meta;let v={label:n(l),key:u,path:s(t,a),icon:null!==p?p:void 0,meta:f,order:h};const m=function(e,t){var n;const o=(null==(n=e.children)?void 0:n.filter((e=>{var t;return e.name&&!(null==(t=e.meta)?void 0:t.isHidden)})))||[];return 1===o.length?c(o[0],t):o.length>1?{children:o.map((e=>c(e,t))).sort(((e,t)=>e.order-t.order))}:null}(e,v.path);return m&&(v=d(d({},v),m)),v}function u(e,t){Jf(t.path)?window.open(t.path):o.push(t.path)}return(e,n)=>{const o=PD;return _r(),Rr(o,{ref:"menu",class:"side-menu",accordion:"","root-indent":18,indent:0,"collapsed-icon-size":22,"collapsed-width":60,options:l.value,value:a.value,"onUpdate:value":u,onClick:n[0]||(n[0]=e=>{window.innerWidth<=950&&(t.collapsed=!0)})},null,8,["options","value"])}}}),rj=zn({__name:"index",setup:e=>(e,t)=>(_r(),zr(yr,null,[Lr(nj),Lr(oj)],64))}),ij=zn({__name:"AppMain",setup(e){const t=WN();return(e,n)=>{const o=Xn("router-view");return _r(),Rr(o,null,{default:hn((({Component:e,route:n})=>[It(t).reloading?$r("",!0):(_r(),Rr(Qn(e),{key:n.fullPath}))])),_:1})}}}),aj=zn({__name:"BreadCrumb",setup(e){const t=Yl();return(e,n)=>{const o=GE,r=KE;return _r(),Rr(r,null,{default:hn((()=>[(_r(!0),zr(yr,null,eo(It(t).matched.filter((e=>{var t;return!!(null==(t=e.meta)?void 0:t.title)})),(t=>(_r(),Rr(o,{key:t.path},{default:hn((()=>{return[(_r(),Rr(Qn((n=t.meta,(null==n?void 0:n.customIcon)?H$(n.customIcon,{size:18}):(null==n?void 0:n.icon)?j$(n.icon,{size:18}):null)))),Dr(" "+oe(e.$t(t.meta.title)),1)];var n})),_:2},1024)))),128))])),_:1})}}}),lj={class:"inline-block",viewBox:"0 0 24 24",width:"1em",height:"1em"},sj=[Ir("path",{fill:"currentColor",d:"M11 13h10v-2H11m0-2h10V7H11M3 3v2h18V3M3 21h18v-2H3m0-7l4 4V8m4 9h10v-2H11z"},null,-1)],cj={name:"mdi-format-indent-decrease",render:function(e,t){return _r(),zr("svg",lj,[...sj])}},uj={class:"inline-block",viewBox:"0 0 24 24",width:"1em",height:"1em"},dj=[Ir("path",{fill:"currentColor",d:"M11 13h10v-2H11m0-2h10V7H11M3 3v2h18V3M11 17h10v-2H11M3 8v8l4-4m-4 9h18v-2H3z"},null,-1)],pj={name:"mdi-format-indent-increase",render:function(e,t){return _r(),zr("svg",uj,[...dj])}},hj=zn({__name:"MenuCollapse",setup(e){const t=_N();return(e,n)=>{const o=pj,r=cj,i=SF;return _r(),Rr(i,{size:"20","cursor-pointer":"",onClick:It(t).switchCollapsed},{default:hn((()=>[It(t).collapsed?(_r(),Rr(o,{key:0})):(_r(),Rr(r,{key:1}))])),_:1},8,["onClick"])}}}),fj={class:"inline-block",viewBox:"0 0 1024 1024",width:"1em",height:"1em"},vj=[Ir("path",{fill:"currentColor",d:"m290 236.4l43.9-43.9a8.01 8.01 0 0 0-4.7-13.6L169 160c-5.1-.6-9.5 3.7-8.9 8.9L179 329.1c.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L370 423.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3zm352.7 187.3c3.1 3.1 8.2 3.1 11.3 0l133.7-133.6l43.7 43.7a8.01 8.01 0 0 0 13.6-4.7L863.9 169c.6-5.1-3.7-9.5-8.9-8.9L694.8 179c-6.6.8-9.4 8.9-4.7 13.6l43.9 43.9L600.3 370a8.03 8.03 0 0 0 0 11.3zM845 694.9c-.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L654 600.3a8.03 8.03 0 0 0-11.3 0l-42.4 42.3a8.03 8.03 0 0 0 0 11.3L734 787.6l-43.9 43.9a8.01 8.01 0 0 0 4.7 13.6L855 864c5.1.6 9.5-3.7 8.9-8.9zm-463.7-94.6a8.03 8.03 0 0 0-11.3 0L236.3 733.9l-43.7-43.7a8.01 8.01 0 0 0-13.6 4.7L160.1 855c-.6 5.1 3.7 9.5 8.9 8.9L329.2 845c6.6-.8 9.4-8.9 4.7-13.6L290 787.6L423.7 654c3.1-3.1 3.1-8.2 0-11.3z"},null,-1)],mj={name:"ant-design-fullscreen-outlined",render:function(e,t){return _r(),zr("svg",fj,[...vj])}},gj={class:"inline-block",viewBox:"0 0 1024 1024",width:"1em",height:"1em"},bj=[Ir("path",{fill:"currentColor",d:"M391 240.9c-.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L200 146.3a8.03 8.03 0 0 0-11.3 0l-42.4 42.3a8.03 8.03 0 0 0 0 11.3L280 333.6l-43.9 43.9a8.01 8.01 0 0 0 4.7 13.6L401 410c5.1.6 9.5-3.7 8.9-8.9zm10.1 373.2L240.8 633c-6.6.8-9.4 8.9-4.7 13.6l43.9 43.9L146.3 824a8.03 8.03 0 0 0 0 11.3l42.4 42.3c3.1 3.1 8.2 3.1 11.3 0L333.7 744l43.7 43.7A8.01 8.01 0 0 0 391 783l18.9-160.1c.6-5.1-3.7-9.4-8.8-8.8m221.8-204.2L783.2 391c6.6-.8 9.4-8.9 4.7-13.6L744 333.6L877.7 200c3.1-3.1 3.1-8.2 0-11.3l-42.4-42.3a8.03 8.03 0 0 0-11.3 0L690.3 279.9l-43.7-43.7a8.01 8.01 0 0 0-13.6 4.7L614.1 401c-.6 5.2 3.7 9.5 8.8 8.9M744 690.4l43.9-43.9a8.01 8.01 0 0 0-4.7-13.6L623 614c-5.1-.6-9.5 3.7-8.9 8.9L633 783.1c.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L824 877.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3z"},null,-1)],yj={name:"ant-design-fullscreen-exit-outlined",render:function(e,t){return _r(),zr("svg",gj,[...bj])}},xj=zn({__name:"FullScreen",setup(e){const{isFullscreen:t,toggle:n}=SN();return(e,o)=>{const r=yj,i=mj,a=SF;return _r(),Rr(a,{class:"mr-5 cursor-pointer",size:"18",onClick:It(n)},{default:hn((()=>[It(t)?(_r(),Rr(r,{key:0})):(_r(),Rr(i,{key:1}))])),_:1},8,["onClick"])}}}),Cj={class:"inline-block",viewBox:"0 0 24 24",width:"1em",height:"1em"},wj=[Ir("path",{fill:"currentColor",d:"M15.88 9.29L12 13.17L8.12 9.29a.996.996 0 1 0-1.41 1.41l4.59 4.59c.39.39 1.02.39 1.41 0l4.59-4.59a.996.996 0 0 0 0-1.41c-.39-.38-1.03-.39-1.42 0"},null,-1)],kj={name:"ic-round-expand-more",render:function(e,t){return _r(),zr("svg",Cj,[...wj])}},Sj={class:"inline-block",viewBox:"0 0 32 32",width:"1em",height:"1em"},_j=[Ir("path",{fill:"none",d:"M8.007 24.93A4.996 4.996 0 0 1 13 20h6a4.996 4.996 0 0 1 4.993 4.93a11.94 11.94 0 0 1-15.986 0M20.5 12.5A4.5 4.5 0 1 1 16 8a4.5 4.5 0 0 1 4.5 4.5"},null,-1),Ir("path",{fill:"currentColor",d:"M26.749 24.93A13.99 13.99 0 1 0 2 16a13.9 13.9 0 0 0 3.251 8.93l-.02.017c.07.084.15.156.222.239c.09.103.187.2.28.3q.418.457.87.87q.14.124.28.242q.48.415.99.782c.044.03.084.069.128.1v-.012a13.9 13.9 0 0 0 16 0v.012c.044-.031.083-.07.128-.1q.51-.368.99-.782q.14-.119.28-.242q.451-.413.87-.87c.093-.1.189-.197.28-.3c.071-.083.152-.155.222-.24ZM16 8a4.5 4.5 0 1 1-4.5 4.5A4.5 4.5 0 0 1 16 8M8.007 24.93A4.996 4.996 0 0 1 13 20h6a4.996 4.996 0 0 1 4.993 4.93a11.94 11.94 0 0 1-15.986 0"},null,-1)],Pj={name:"carbon-user-avatar-filled",render:function(e,t){return _r(),zr("svg",Sj,[..._j])}},Tj={class:"hidden md:block"},Aj=zn({__name:"UserAvatar",setup(e){const t=BN(),n=e=>jf.global.t(e),o=[{label:n("个人中心"),key:"profile",icon:j$("mdi-account-outline",{size:14})},{label:n("登出"),key:"logout",icon:j$("mdi:exit-to-app",{size:14})}];function r(e){"logout"===e&&window.$dialog.confirm({title:n("提示"),type:"info",content:n("确认退出?"),confirm(){t.logout(),window.$message.success(n("已退出登录"))}}),"profile"===e&&qN.push("/profile")}return(e,n)=>{const i=Pj,a=kj,l=oO,s=DF;return _r(),Rr(s,{options:o,onSelect:r},{default:hn((()=>[Lr(l,{text:"",flex:"","cursor-pointer":"","items-center":""},{default:hn((()=>[Lr(i,{class:"mr-0 h-5 w-5 rounded-full md:mr-2.5 md:h-8 md:w-8"}),Lr(a,{class:"h-5 w-5 md:hidden"}),Ir("span",Tj,oe(It(t).email),1)])),_:1})])),_:1})}}}),zj={class:"inline-block",viewBox:"0 0 24 24",width:"1em",height:"1em"},Rj=[Ir("path",{fill:"currentColor",d:"M11.4 18.4H.9a.9.9 0 0 1-.9-.9V7.3a.9.9 0 0 1 .9-.9h10.5zm-4.525-2.72c.058.187.229.32.431.32h.854a.45.45 0 0 0 .425-.597l.001.003l-2.15-6.34a.45.45 0 0 0-.426-.306H4.791a.45.45 0 0 0-.425.302l-.001.003l-2.154 6.34a.45.45 0 0 0 .426.596h.856a.45.45 0 0 0 .431-.323l.001-.003l.342-1.193h2.258l.351 1.195zM5.41 10.414s.16.79.294 1.245l.406 1.408H4.68l.415-1.408c.131-.455.294-1.245.294-1.245zM23.1 18.4H12.6v-12h10.5a.9.9 0 0 1 .9.9v10.2a.9.9 0 0 1-.9.9m-1.35-8.55h-2.4v-.601a.45.45 0 0 0-.45-.45h-.601a.45.45 0 0 0-.45.45v.601h-2.4a.45.45 0 0 0-.45.45v.602c0 .248.201.45.45.45h4.281a5.9 5.9 0 0 1-1.126 1.621l.001-.001a7 7 0 0 1-.637-.764l-.014-.021a.45.45 0 0 0-.602-.129l.002-.001l-.273.16l-.24.146a.45.45 0 0 0-.139.642l-.001-.001c.253.359.511.674.791.969l-.004-.004c-.28.216-.599.438-.929.645l-.05.029a.45.45 0 0 0-.159.61l-.001-.002l.298.52a.45.45 0 0 0 .628.159l-.002.001c.507-.312.94-.619 1.353-.95l-.026.02c.387.313.82.62 1.272.901l.055.032a.45.45 0 0 0 .626-.158l.001-.002l.298-.52a.45.45 0 0 0-.153-.605l-.002-.001a12 12 0 0 1-1.004-.696l.027.02a6.7 6.7 0 0 0 1.586-2.572l.014-.047h.43a.45.45 0 0 0 .45-.45v-.602a.45.45 0 0 0-.45-.447h-.001z"},null,-1)],Ej={name:"fontisto-language",render:function(e,t){return _r(),zr("svg",zj,[...Rj])}},Oj=zn({__name:"SwitchLang",setup(e){const t=_N();return(e,n)=>{const o=Ej,r=oO,i=sM;return _r(),Rr(i,{value:It(t).lang,"onUpdate:value":n[0]||(n[0]=e=>It(t).lang=e),options:Object.entries(It(Wf)).map((([e,t])=>({label:t,value:e}))),trigger:"click","on-update:value":It(t).switchLang},{default:hn((()=>[Lr(r,{text:"","icon-placement":"left",class:"mr-5"},{icon:hn((()=>[Lr(o)])),_:1})])),_:1},8,["value","options","on-update:value"])}}}),Mj={class:"inline-block",viewBox:"0 0 24 24",width:"1em",height:"1em"},Fj=[Ir("path",{fill:"currentColor",d:"m3.55 19.09l1.41 1.41l1.8-1.79l-1.42-1.42M12 6c-3.31 0-6 2.69-6 6s2.69 6 6 6s6-2.69 6-6c0-3.32-2.69-6-6-6m8 7h3v-2h-3m-2.76 7.71l1.8 1.79l1.41-1.41l-1.79-1.8M20.45 5l-1.41-1.4l-1.8 1.79l1.42 1.42M13 1h-2v3h2M6.76 5.39L4.96 3.6L3.55 5l1.79 1.81zM1 13h3v-2H1m12 9h-2v3h2"},null,-1)],Ij={name:"mdi-white-balance-sunny",render:function(e,t){return _r(),zr("svg",Mj,[...Fj])}},Lj={class:"inline-block",viewBox:"0 0 24 24",width:"1em",height:"1em"},Bj=[Ir("path",{fill:"currentColor",d:"M2 12a10 10 0 0 0 13 9.54a10 10 0 0 1 0-19.08A10 10 0 0 0 2 12"},null,-1)],Dj={name:"mdi-moon-waning-crescent",render:function(e,t){return _r(),zr("svg",Lj,[...Bj])}},$j=zn({__name:"ThemeMode",setup(e){const t=_N(),n=wN(),o=()=>{t.toggleDark(),function(e=!1,t={}){const{truthyValue:n=!0,falsyValue:o=!1}=t,r=Rt(e),i=Et(e);function a(e){if(arguments.length)return i.value=e,i.value;{const e=Q$(n);return i.value=i.value===e?Q$(o):e,i.value}}return r?a:[i,a]}(n)()};return(e,t)=>{const r=Dj,i=Ij,a=SF;return _r(),Rr(a,{class:"mr-5 cursor-pointer",size:"18",onClick:o},{default:hn((()=>[It(n)?(_r(),Rr(r,{key:0})):(_r(),Rr(i,{key:1}))])),_:1})}}}),Nj={flex:"","items-center":""},jj={"ml-auto":"",flex:"","items-center":""},Hj=zn({__name:"index",setup:e=>(e,t)=>(_r(),zr(yr,null,[Ir("div",Nj,[Lr(hj),Lr(aj)]),Ir("div",jj,[Lr($j),Lr(Oj),Lr(xj),Lr(Aj)])],64))}),Wj={class:"flex flex-col flex-1 overflow-hidden"},Uj={class:"flex-1 overflow-hidden bg-hex-f5f6fb dark:bg-hex-101014"},Vj=zn({__name:"index",setup(e){const t=_N();function n(e){t.collapsed=e}const o=ai({get:()=>r.value&&!t.collapsed,set:e=>t.collapsed=!e}),r=Et(!1),i=()=>{document.body.clientWidth<=950?(r.value=!0,t.collapsed=!0):(t.collapsed=!1,r.value=!1)};return $n((()=>{window.addEventListener("resize",i),i()})),(e,r)=>{const i=WB,a=ZI,l=BB;return _r(),Rr(l,{"has-sider":"","wh-full":""},{default:hn((()=>[fn(Lr(i,{bordered:"","collapse-mode":"transform","collapsed-width":0,width:220,"native-scrollbar":!1,collapsed:It(t).collapsed,"on-update:collapsed":n},{default:hn((()=>[Lr(rj)])),_:1},8,["collapsed"]),[[Mi,!o.value]]),Lr(a,{show:o.value,"onUpdate:show":r[0]||(r[0]=e=>o.value=e),width:220,placement:"left"},{default:hn((()=>[Lr(i,{bordered:"","collapse-mode":"transform","collapsed-width":0,width:220,"native-scrollbar":!1,collapsed:It(t).collapsed,"on-update:collapsed":n},{default:hn((()=>[Lr(rj)])),_:1},8,["collapsed"])])),_:1},8,["show"]),Ir("article",Wj,[Ir("header",{class:"flex items-center bg-white px-4",dark:"bg-dark border-0",style:G(`height: ${It(K$).height}px`)},[Lr(Hj)],4),Ir("section",Uj,[Lr(ij)])])])),_:1})}}}),qj=Object.freeze(Object.defineProperty({__proto__:null,default:Vj},Symbol.toStringTag,{value:"Module"})),Kj={},Gj={"f-c-c":"","flex-col":"","text-14":"",color:"#6a6a6a"},Xj=[Ir("p",null,[Dr(" Copyright © 2022-present "),Ir("a",{href:"https://github.com/zclzone",target:"__blank",hover:"decoration-underline color-primary"}," Ronnie Zhang ")],-1),Ir("p",null,null,-1)],Yj=tj(Kj,[["render",function(e,t){return _r(),zr("footer",Gj,Xj)}]]),Qj={class:"cus-scroll-y wh-full flex-col bg-[#f5f6fb] p-1 dark:bg-hex-121212 md:p-4"},Zj=zn({__name:"AppPage",props:{showFooter:{type:Boolean,default:!1}},setup:e=>(t,n)=>{const o=Yj,r=$E;return _r(),Rr(vi,{name:"fade-slide",mode:"out-in",appear:""},{default:hn((()=>[Ir("section",Qj,[to(t.$slots,"default"),e.showFooter?(_r(),Rr(o,{key:0,"mt-15":""})):$r("",!0),Lr(r,{bottom:20,class:"z-99999"})])])),_:3})}}),Jj={class:"inline-block",viewBox:"0 0 24 24",width:"1em",height:"1em"},eH=[Ir("path",{fill:"currentColor",d:"M20 2H4c-.53 0-1.04.21-1.41.59C2.21 2.96 2 3.47 2 4v12c0 .53.21 1.04.59 1.41c.37.38.88.59 1.41.59h4l4 4l4-4h4c.53 0 1.04-.21 1.41-.59S22 16.53 22 16V4c0-.53-.21-1.04-.59-1.41C21.04 2.21 20.53 2 20 2M4 16V4h16v12h-4.83L12 19.17L8.83 16m1.22-9.96c.54-.36 1.25-.54 2.14-.54c.94 0 1.69.21 2.23.62q.81.63.81 1.68c0 .44-.15.83-.44 1.2c-.29.36-.67.64-1.13.85c-.26.15-.43.3-.52.47c-.09.18-.14.4-.14.68h-2c0-.5.1-.84.29-1.08c.21-.24.55-.52 1.07-.84c.26-.14.47-.32.64-.54c.14-.21.22-.46.22-.74c0-.3-.09-.52-.27-.69c-.18-.18-.45-.26-.76-.26c-.27 0-.49.07-.69.21c-.16.14-.26.35-.26.63H9.27c-.05-.69.23-1.29.78-1.65M11 14v-2h2v2Z"},null,-1)],tH={name:"mdi-tooltip-question-outline",render:function(e,t){return _r(),zr("svg",Jj,[...eH])}},nH={class:"inline-block",viewBox:"0 0 24 24",width:"1em",height:"1em"},oH=[Ir("path",{fill:"currentColor",d:"M12 20a8 8 0 0 0 8-8a8 8 0 0 0-8-8a8 8 0 0 0-8 8a8 8 0 0 0 8 8m0-18a10 10 0 0 1 10 10a10 10 0 0 1-10 10C6.47 22 2 17.5 2 12A10 10 0 0 1 12 2m.5 5v5.25l4.5 2.67l-.75 1.23L11 13V7z"},null,-1)],rH={name:"mdi-clock-outline",render:function(e,t){return _r(),zr("svg",nH,[...oH])}},iH={class:"inline-block",viewBox:"0 0 24 24",width:"1em",height:"1em"},aH=[Ir("path",{fill:"currentColor",d:"M6.18 15.64a2.18 2.18 0 0 1 2.18 2.18C8.36 19 7.38 20 6.18 20C5 20 4 19 4 17.82a2.18 2.18 0 0 1 2.18-2.18M4 4.44A15.56 15.56 0 0 1 19.56 20h-2.83A12.73 12.73 0 0 0 4 7.27zm0 5.66a9.9 9.9 0 0 1 9.9 9.9h-2.83A7.07 7.07 0 0 0 4 12.93z"},null,-1)],lH={name:"mdi-rss",render:function(e,t){return _r(),zr("svg",iH,[...aH])}},sH={class:"inline-block",viewBox:"0 0 24 24",width:"1em",height:"1em"},cH=[Ir("path",{fill:"currentColor",d:"M12 21.5c-1.35-.85-3.8-1.5-5.5-1.5c-1.65 0-3.35.3-4.75 1.05c-.1.05-.15.05-.25.05c-.25 0-.5-.25-.5-.5V6c.6-.45 1.25-.75 2-1c1.11-.35 2.33-.5 3.5-.5c1.95 0 4.05.4 5.5 1.5c1.45-1.1 3.55-1.5 5.5-1.5c1.17 0 2.39.15 3.5.5c.75.25 1.4.55 2 1v14.6c0 .25-.25.5-.5.5c-.1 0-.15 0-.25-.05c-1.4-.75-3.1-1.05-4.75-1.05c-1.7 0-4.15.65-5.5 1.5M12 8v11.5c1.35-.85 3.8-1.5 5.5-1.5c1.2 0 2.4.15 3.5.5V7c-1.1-.35-2.3-.5-3.5-.5c-1.7 0-4.15.65-5.5 1.5m1 3.5c1.11-.68 2.6-1 4.5-1c.91 0 1.76.09 2.5.28V9.23c-.87-.15-1.71-.23-2.5-.23q-2.655 0-4.5.84zm4.5.17c-1.71 0-3.21.26-4.5.79v1.69c1.11-.65 2.6-.99 4.5-.99c1.04 0 1.88.08 2.5.24v-1.5c-.87-.16-1.71-.23-2.5-.23m2.5 2.9c-.87-.16-1.71-.24-2.5-.24c-1.83 0-3.33.27-4.5.8v1.69c1.11-.66 2.6-.99 4.5-.99c1.04 0 1.88.08 2.5.24z"},null,-1)],uH={name:"mdi-book-open-variant",render:function(e,t){return _r(),zr("svg",sH,[...cH])}},dH={class:"inline-block",viewBox:"0 0 24 24",width:"1em",height:"1em"},pH=[Ir("g",{fill:"none"},[Ir("path",{d:"m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"}),Ir("path",{fill:"currentColor",d:"M10.5 20a1.5 1.5 0 0 0 3 0v-6.5H20a1.5 1.5 0 0 0 0-3h-6.5V4a1.5 1.5 0 0 0-3 0v6.5H4a1.5 1.5 0 0 0 0 3h6.5z"})],-1)],hH={name:"mingcute-add-fill",render:function(e,t){return _r(),zr("svg",dH,[...pH])}},fH={class:"inline-block",viewBox:"0 0 24 24",width:"1em",height:"1em"},vH=[Ir("path",{fill:"currentColor",d:"M5.503 4.627L5.5 6.75v10.504a3.25 3.25 0 0 0 3.25 3.25h8.616a2.25 2.25 0 0 1-2.122 1.5H8.75A4.75 4.75 0 0 1 4 17.254V6.75c0-.98.627-1.815 1.503-2.123M17.75 2A2.25 2.25 0 0 1 20 4.25v13a2.25 2.25 0 0 1-2.25 2.25h-9a2.25 2.25 0 0 1-2.25-2.25v-13A2.25 2.25 0 0 1 8.75 2z"},null,-1)],mH={name:"fluent-copy24-filled",render:function(e,t){return _r(),zr("svg",fH,[...vH])}},gH={class:"inline-block",viewBox:"0 0 1200 1200",width:"1em",height:"1em"},bH=[Ir("path",{fill:"currentColor",d:"M0 0v545.312h545.312V0zm654.688 0v545.312H1200V0zM108.594 108.594h328.125v328.125H108.594zm654.687 0h328.125v328.125H763.281zM217.969 219.531v108.594h110.156V219.531zm653.906 0v108.594h108.594V219.531zM0 654.688V1200h545.312V654.688zm654.688 0V1200h108.595V873.438h108.594v108.595H1200V654.688h-108.594v108.595H980.469V654.688zM108.594 763.281h328.125v328.125H108.594zm109.375 108.594v110.156h110.156V871.875zm653.906 219.531V1200h108.594v-108.594zm219.531 0V1200H1200v-108.594z"},null,-1)],yH={name:"el-qrcode",render:function(e,t){return _r(),zr("svg",gH,[...bH])}};var xH={},CH={Aacute:"Á",aacute:"á",Abreve:"Ă",abreve:"ă",ac:"∾",acd:"∿",acE:"∾̳",Acirc:"Â",acirc:"â",acute:"´",Acy:"А",acy:"а",AElig:"Æ",aelig:"æ",af:"⁡",Afr:"𝔄",afr:"𝔞",Agrave:"À",agrave:"à",alefsym:"ℵ",aleph:"ℵ",Alpha:"Α",alpha:"α",Amacr:"Ā",amacr:"ā",amalg:"⨿",amp:"&",AMP:"&",andand:"⩕",And:"⩓",and:"∧",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angmsd:"∡",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",Aogon:"Ą",aogon:"ą",Aopf:"𝔸",aopf:"𝕒",apacir:"⩯",ap:"≈",apE:"⩰",ape:"≊",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",Aring:"Å",aring:"å",Ascr:"𝒜",ascr:"𝒶",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",barwed:"⌅",Barwed:"⌆",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",Bcy:"Б",bcy:"б",bdquo:"„",becaus:"∵",because:"∵",Because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",Beta:"Β",beta:"β",beth:"ℶ",between:"≬",Bfr:"𝔅",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bNot:"⫭",bnot:"⌐",Bopf:"𝔹",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxdl:"┐",boxdL:"╕",boxDl:"╖",boxDL:"╗",boxdr:"┌",boxdR:"╒",boxDr:"╓",boxDR:"╔",boxh:"─",boxH:"═",boxhd:"┬",boxHd:"╤",boxhD:"╥",boxHD:"╦",boxhu:"┴",boxHu:"╧",boxhU:"╨",boxHU:"╩",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxul:"┘",boxuL:"╛",boxUl:"╜",boxUL:"╝",boxur:"└",boxuR:"╘",boxUr:"╙",boxUR:"╚",boxv:"│",boxV:"║",boxvh:"┼",boxvH:"╪",boxVh:"╫",boxVH:"╬",boxvl:"┤",boxvL:"╡",boxVl:"╢",boxVL:"╣",boxvr:"├",boxvR:"╞",boxVr:"╟",boxVR:"╠",bprime:"‵",breve:"˘",Breve:"˘",brvbar:"¦",bscr:"𝒷",Bscr:"ℬ",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsolb:"⧅",bsol:"\\",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",Bumpeq:"≎",bumpeq:"≏",Cacute:"Ć",cacute:"ć",capand:"⩄",capbrcup:"⩉",capcap:"⩋",cap:"∩",Cap:"⋒",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",Ccaron:"Č",ccaron:"č",Ccedil:"Ç",ccedil:"ç",Ccirc:"Ĉ",ccirc:"ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",Cdot:"Ċ",cdot:"ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",centerdot:"·",CenterDot:"·",cfr:"𝔠",Cfr:"ℭ",CHcy:"Ч",chcy:"ч",check:"✓",checkmark:"✓",Chi:"Χ",chi:"χ",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cir:"○",cirE:"⧃",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",colon:":",Colon:"∷",Colone:"⩴",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",conint:"∮",Conint:"∯",ContourIntegral:"∮",copf:"𝕔",Copf:"ℂ",coprod:"∐",Coproduct:"∐",copy:"©",COPY:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",cross:"✗",Cross:"⨯",Cscr:"𝒞",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",cupbrcap:"⩈",cupcap:"⩆",CupCap:"≍",cup:"∪",Cup:"⋓",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",dagger:"†",Dagger:"‡",daleth:"ℸ",darr:"↓",Darr:"↡",dArr:"⇓",dash:"‐",Dashv:"⫤",dashv:"⊣",dbkarow:"⤏",dblac:"˝",Dcaron:"Ď",dcaron:"ď",Dcy:"Д",dcy:"д",ddagger:"‡",ddarr:"⇊",DD:"ⅅ",dd:"ⅆ",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",Delta:"Δ",delta:"δ",demptyv:"⦱",dfisht:"⥿",Dfr:"𝔇",dfr:"𝔡",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",diamond:"⋄",Diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",DJcy:"Ђ",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",Dopf:"𝔻",dopf:"𝕕",Dot:"¨",dot:"˙",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrowBar:"⤓",downarrow:"↓",DownArrow:"↓",Downarrow:"⇓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVectorBar:"⥖",DownLeftVector:"↽",DownRightTeeVector:"⥟",DownRightVectorBar:"⥗",DownRightVector:"⇁",DownTeeArrow:"↧",DownTee:"⊤",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",Dscr:"𝒟",dscr:"𝒹",DScy:"Ѕ",dscy:"ѕ",dsol:"⧶",Dstrok:"Đ",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",DZcy:"Џ",dzcy:"џ",dzigrarr:"⟿",Eacute:"É",eacute:"é",easter:"⩮",Ecaron:"Ě",ecaron:"ě",Ecirc:"Ê",ecirc:"ê",ecir:"≖",ecolon:"≕",Ecy:"Э",ecy:"э",eDDot:"⩷",Edot:"Ė",edot:"ė",eDot:"≑",ee:"ⅇ",efDot:"≒",Efr:"𝔈",efr:"𝔢",eg:"⪚",Egrave:"È",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",Emacr:"Ē",emacr:"ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp13:" ",emsp14:" ",emsp:" ",ENG:"Ŋ",eng:"ŋ",ensp:" ",Eogon:"Ę",eogon:"ę",Eopf:"𝔼",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",Epsilon:"Ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",escr:"ℯ",Escr:"ℰ",esdot:"≐",Esim:"⩳",esim:"≂",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",exponentiale:"ⅇ",ExponentialE:"ⅇ",fallingdotseq:"≒",Fcy:"Ф",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",Ffr:"𝔉",ffr:"𝔣",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",Fopf:"𝔽",fopf:"𝕗",forall:"∀",ForAll:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",fscr:"𝒻",Fscr:"ℱ",gacute:"ǵ",Gamma:"Γ",gamma:"γ",Gammad:"Ϝ",gammad:"ϝ",gap:"⪆",Gbreve:"Ğ",gbreve:"ğ",Gcedil:"Ģ",Gcirc:"Ĝ",gcirc:"ĝ",Gcy:"Г",gcy:"г",Gdot:"Ġ",gdot:"ġ",ge:"≥",gE:"≧",gEl:"⪌",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",gescc:"⪩",ges:"⩾",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",Gfr:"𝔊",gfr:"𝔤",gg:"≫",Gg:"⋙",ggg:"⋙",gimel:"ℷ",GJcy:"Ѓ",gjcy:"ѓ",gla:"⪥",gl:"≷",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gne:"⪈",gnE:"≩",gneq:"⪈",gneqq:"≩",gnsim:"⋧",Gopf:"𝔾",gopf:"𝕘",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",gtcc:"⪧",gtcir:"⩺",gt:">",GT:">",Gt:"≫",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",harrcir:"⥈",harr:"↔",hArr:"⇔",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",hfr:"𝔥",Hfr:"ℌ",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",hopf:"𝕙",Hopf:"ℍ",horbar:"―",HorizontalLine:"─",hscr:"𝒽",Hscr:"ℋ",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"⁣",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",ifr:"𝔦",Ifr:"ℑ",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",Im:"ℑ",imof:"⊷",imped:"Ƶ",Implies:"⇒",incare:"℅",in:"∈",infin:"∞",infintie:"⧝",inodot:"ı",intcal:"⊺",int:"∫",Int:"∬",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",iscr:"𝒾",Iscr:"ℐ",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",lang:"⟨",Lang:"⟪",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",larrb:"⇤",larrbfs:"⤟",larr:"←",Larr:"↞",lArr:"⇐",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",latail:"⤙",lAtail:"⤛",lat:"⪫",late:"⪭",lates:"⪭︀",lbarr:"⤌",lBarr:"⤎",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",le:"≤",lE:"≦",LeftAngleBracket:"⟨",LeftArrowBar:"⇤",leftarrow:"←",LeftArrow:"←",Leftarrow:"⇐",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVectorBar:"⥙",LeftDownVector:"⇃",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",leftrightarrow:"↔",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTeeArrow:"↤",LeftTee:"⊣",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangleBar:"⧏",LeftTriangle:"⊲",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVectorBar:"⥘",LeftUpVector:"↿",LeftVectorBar:"⥒",LeftVector:"↼",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",lescc:"⪨",les:"⩽",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",llarr:"⇇",ll:"≪",Ll:"⋘",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoustache:"⎰",lmoust:"⎰",lnap:"⪉",lnapprox:"⪉",lne:"⪇",lnE:"≨",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",longleftarrow:"⟵",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftrightarrow:"⟷",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longmapsto:"⟼",longrightarrow:"⟶",LongRightArrow:"⟶",Longrightarrow:"⟹",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",lscr:"𝓁",Lscr:"ℒ",lsh:"↰",Lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",ltcc:"⪦",ltcir:"⩹",lt:"<",LT:"<",Lt:"≪",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",midast:"*",midcir:"⫰",mid:"∣",middot:"·",minusb:"⊟",minus:"−",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",mscr:"𝓂",Mscr:"ℳ",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natural:"♮",naturals:"ℕ",natur:"♮",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",nearhk:"⤤",nearr:"↗",neArr:"⇗",nearrow:"↗",ne:"≠",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nharr:"↮",nhArr:"⇎",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlarr:"↚",nlArr:"⇍",nldr:"‥",nlE:"≦̸",nle:"≰",nleftarrow:"↚",nLeftarrow:"⇍",nleftrightarrow:"↮",nLeftrightarrow:"⇎",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",nopf:"𝕟",Nopf:"ℕ",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangleBar:"⧏̸",NotLeftTriangle:"⋪",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangleBar:"⧐̸",NotRightTriangle:"⋫",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",nparallel:"∦",npar:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",nprec:"⊀",npreceq:"⪯̸",npre:"⪯̸",nrarrc:"⤳̸",nrarr:"↛",nrArr:"⇏",nrarrw:"↝̸",nrightarrow:"↛",nRightarrow:"⇏",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nvdash:"⊬",nvDash:"⊭",nVdash:"⊮",nVDash:"⊯",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwarr:"↖",nwArr:"⇖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",Ocirc:"Ô",ocirc:"ô",ocir:"⊚",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",orarr:"↻",Or:"⩔",or:"∨",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",otimesas:"⨶",Otimes:"⨷",otimes:"⊗",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",para:"¶",parallel:"∥",par:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plus:"+",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",popf:"𝕡",Popf:"ℙ",pound:"£",prap:"⪷",Pr:"⪻",pr:"≺",prcue:"≼",precapprox:"⪷",prec:"≺",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",pre:"⪯",prE:"⪳",precsim:"≾",prime:"′",Prime:"″",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportional:"∝",Proportion:"∷",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",qopf:"𝕢",Qopf:"ℚ",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",quot:'"',QUOT:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",rang:"⟩",Rang:"⟫",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarr:"→",Rarr:"↠",rArr:"⇒",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",ratail:"⤚",rAtail:"⤜",ratio:"∶",rationals:"ℚ",rbarr:"⤍",rBarr:"⤏",RBarr:"⤐",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",Re:"ℜ",rect:"▭",reg:"®",REG:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",rfr:"𝔯",Rfr:"ℜ",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrowBar:"⇥",rightarrow:"→",RightArrow:"→",Rightarrow:"⇒",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVectorBar:"⥕",RightDownVector:"⇂",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTeeArrow:"↦",RightTee:"⊢",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangleBar:"⧐",RightTriangle:"⊳",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVectorBar:"⥔",RightUpVector:"↾",RightVectorBar:"⥓",RightVector:"⇀",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoustache:"⎱",rmoust:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",ropf:"𝕣",Ropf:"ℝ",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",rscr:"𝓇",Rscr:"ℛ",rsh:"↱",Rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",scap:"⪸",Scaron:"Š",scaron:"š",Sc:"⪼",sc:"≻",sccue:"≽",sce:"⪰",scE:"⪴",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdotb:"⊡",sdot:"⋅",sdote:"⩦",searhk:"⤥",searr:"↘",seArr:"⇘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",solbar:"⌿",solb:"⧄",sol:"/",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",square:"□",Square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squ:"□",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",sub:"⊂",Sub:"⋐",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",subset:"⊂",Subset:"⋐",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succapprox:"⪸",succ:"≻",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",sum:"∑",Sum:"∑",sung:"♪",sup1:"¹",sup2:"²",sup3:"³",sup:"⊃",Sup:"⋑",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",supset:"⊃",Supset:"⋑",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swarr:"↙",swArr:"⇙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",therefore:"∴",Therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",ThinSpace:" ",thinsp:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",tilde:"˜",Tilde:"∼",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",timesbar:"⨱",timesb:"⊠",times:"×",timesd:"⨰",tint:"∭",toea:"⤨",topbot:"⌶",topcir:"⫱",top:"⊤",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",trade:"™",TRADE:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",uarr:"↑",Uarr:"↟",uArr:"⇑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrowBar:"⤒",uparrow:"↑",UpArrow:"↑",Uparrow:"⇑",UpArrowDownArrow:"⇅",updownarrow:"↕",UpDownArrow:"↕",Updownarrow:"⇕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",upsi:"υ",Upsi:"ϒ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTeeArrow:"↥",UpTee:"⊥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",varr:"↕",vArr:"⇕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",vBar:"⫨",Vbar:"⫫",vBarv:"⫩",Vcy:"В",vcy:"в",vdash:"⊢",vDash:"⊨",Vdash:"⊩",VDash:"⊫",Vdashl:"⫦",veebar:"⊻",vee:"∨",Vee:"⋁",veeeq:"≚",vellip:"⋮",verbar:"|",Verbar:"‖",vert:"|",Vert:"‖",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",wedge:"∧",Wedge:"⋀",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xharr:"⟷",xhArr:"⟺",Xi:"Ξ",xi:"ξ",xlarr:"⟵",xlArr:"⟸",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrarr:"⟶",xrArr:"⟹",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",yuml:"ÿ",Yuml:"Ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"​",Zeta:"Ζ",zeta:"ζ",zfr:"𝔷",Zfr:"ℨ",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",zopf:"𝕫",Zopf:"ℤ",Zscr:"𝒵",zscr:"𝓏",zwj:"‍",zwnj:"‌"},wH=/[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4E\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDF55-\uDF59]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD806[\uDC3B\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/,kH={},SH={};function _H(e,t,n){var o,r,i,a,l,s="";for("string"!=typeof t&&(n=t,t=_H.defaultChars),void 0===n&&(n=!0),l=function(e){var t,n,o=SH[e];if(o)return o;for(o=SH[e]=[],t=0;t<128;t++)n=String.fromCharCode(t),/^[0-9a-z]$/i.test(n)?o.push(n):o.push("%"+("0"+t.toString(16).toUpperCase()).slice(-2));for(t=0;t=55296&&i<=57343){if(i>=55296&&i<=56319&&o+1=56320&&a<=57343){s+=encodeURIComponent(e[o]+e[o+1]),o++;continue}s+="%EF%BF%BD"}else s+=encodeURIComponent(e[o]);return s}_H.defaultChars=";/?:@&=+$,-_.!~*'()#",_H.componentChars="-_.!~*'()";var PH=_H,TH={};function AH(e,t){var n;return"string"!=typeof t&&(t=AH.defaultChars),n=function(e){var t,n,o=TH[e];if(o)return o;for(o=TH[e]=[],t=0;t<128;t++)n=String.fromCharCode(t),o.push(n);for(t=0;t=55296&&s<=57343?"���":String.fromCharCode(s),t+=6):240==(248&r)&&t+91114111?c+="����":(s-=65536,c+=String.fromCharCode(55296+(s>>10),56320+(1023&s))),t+=9):c+="�";return c}))}AH.defaultChars=";/?:@&=+$,#",AH.componentChars="";var zH=AH;function RH(){this.protocol=null,this.slashes=null,this.auth=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.pathname=null}var EH=/^([a-z0-9.+-]+:)/i,OH=/:[0-9]*$/,MH=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,FH=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),IH=["'"].concat(FH),LH=["%","/","?",";","#"].concat(IH),BH=["/","?","#"],DH=/^[+a-z0-9A-Z_-]{0,63}$/,$H=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,NH={javascript:!0,"javascript:":!0},jH={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0};RH.prototype.parse=function(e,t){var n,o,r,i,a,l=e;if(l=l.trim(),!t&&1===e.split("#").length){var s=MH.exec(l);if(s)return this.pathname=s[1],s[2]&&(this.search=s[2]),this}var c=EH.exec(l);if(c&&(r=(c=c[0]).toLowerCase(),this.protocol=c,l=l.substr(c.length)),(t||c||l.match(/^\/\/[^@\/]+@[^@\/]+/))&&(!(a="//"===l.substr(0,2))||c&&NH[c]||(l=l.substr(2),this.slashes=!0)),!NH[c]&&(a||c&&!jH[c])){var u,d,p=-1;for(n=0;n127?g+="x":g+=m[b];if(!g.match(DH)){var x=v.slice(0,n),C=v.slice(n+1),w=m.match($H);w&&(x.push(w[1]),C.unshift(w[2])),C.length&&(l=C.join(".")+l),this.hostname=x.join(".");break}}}}this.hostname.length>255&&(this.hostname=""),f&&(this.hostname=this.hostname.substr(1,this.hostname.length-2))}var k=l.indexOf("#");-1!==k&&(this.hash=l.substr(k),l=l.slice(0,k));var S=l.indexOf("?");return-1!==S&&(this.search=l.substr(S),l=l.slice(0,S)),l&&(this.pathname=l),jH[r]&&this.hostname&&!this.pathname&&(this.pathname=""),this},RH.prototype.parseHost=function(e){var t=OH.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)};var HH=function(e,t){if(e&&e instanceof RH)return e;var n=new RH;return n.parse(e,t),n};kH.encode=PH,kH.decode=zH,kH.format=function(e){var t="";return t+=e.protocol||"",t+=e.slashes?"//":"",t+=e.auth?e.auth+"@":"",e.hostname&&-1!==e.hostname.indexOf(":")?t+="["+e.hostname+"]":t+=e.hostname||"",t+=e.port?":"+e.port:"",t+=e.pathname||"",t+=e.search||"",t+=e.hash||""},kH.parse=HH;var WH,UH,VH,qH,KH,GH,XH,YH,QH,ZH={};function JH(){return UH?WH:(UH=1,WH=/[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/)}function eW(){return qH?VH:(qH=1,VH=/[\0-\x1F\x7F-\x9F]/)}function tW(){return YH?XH:(YH=1,XH=/[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/)}function nW(){return QH||(QH=1,ZH.Any=JH(),ZH.Cc=eW(),ZH.Cf=GH?KH:(GH=1,KH=/[\xAD\u0600-\u0605\u061C\u06DD\u070F\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/),ZH.P=wH,ZH.Z=tW()),ZH}!function(e){var t=Object.prototype.hasOwnProperty;function n(e,n){return t.call(e,n)}function o(e){return!(e>=55296&&e<=57343||e>=64976&&e<=65007||!(65535&~e&&65534!=(65535&e))||e>=0&&e<=8||11===e||e>=14&&e<=31||e>=127&&e<=159||e>1114111)}function r(e){if(e>65535){var t=55296+((e-=65536)>>10),n=56320+(1023&e);return String.fromCharCode(t,n)}return String.fromCharCode(e)}var i=/\\([!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~])/g,a=new RegExp(i.source+"|"+/&([a-z#][a-z0-9]{1,31});/gi.source,"gi"),l=/^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))$/i,s=CH,c=/[&<>"]/,u=/[&<>"]/g,d={"&":"&","<":"<",">":">",'"':"""};function p(e){return d[e]}var h=/[.?*+^$[\]\\(){}|-]/g,f=wH;e.lib={},e.lib.mdurl=kH,e.lib.ucmicro=nW(),e.assign=function(e){return Array.prototype.slice.call(arguments,1).forEach((function(t){if(t){if("object"!=typeof t)throw new TypeError(t+"must be object");Object.keys(t).forEach((function(n){e[n]=t[n]}))}})),e},e.isString=function(e){return"[object String]"===function(e){return Object.prototype.toString.call(e)}(e)},e.has=n,e.unescapeMd=function(e){return e.indexOf("\\")<0?e:e.replace(i,"$1")},e.unescapeAll=function(e){return e.indexOf("\\")<0&&e.indexOf("&")<0?e:e.replace(a,(function(e,t,i){return t||function(e,t){var i;return n(s,t)?s[t]:35===t.charCodeAt(0)&&l.test(t)&&o(i="x"===t[1].toLowerCase()?parseInt(t.slice(2),16):parseInt(t.slice(1),10))?r(i):e}(e,i)}))},e.isValidEntityCode=o,e.fromCodePoint=r,e.escapeHtml=function(e){return c.test(e)?e.replace(u,p):e},e.arrayReplaceAt=function(e,t,n){return[].concat(e.slice(0,t),n,e.slice(t+1))},e.isSpace=function(e){switch(e){case 9:case 32:return!0}return!1},e.isWhiteSpace=function(e){if(e>=8192&&e<=8202)return!0;switch(e){case 9:case 10:case 11:case 12:case 13:case 32:case 160:case 5760:case 8239:case 8287:case 12288:return!0}return!1},e.isMdAsciiPunct=function(e){switch(e){case 33:case 34:case 35:case 36:case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 94:case 95:case 96:case 123:case 124:case 125:case 126:return!0;default:return!1}},e.isPunctChar=function(e){return f.test(e)},e.escapeRE=function(e){return e.replace(h,"\\$&")},e.normalizeReference=function(e){return e=e.trim().replace(/\s+/g," "),"Ṿ"==="ẞ".toLowerCase()&&(e=e.replace(/ẞ/g,"ß")),e.toLowerCase().toUpperCase()}}(xH);var oW={},rW=xH.unescapeAll,iW=xH.unescapeAll;oW.parseLinkLabel=function(e,t,n){var o,r,i,a,l=-1,s=e.posMax,c=e.pos;for(e.pos=t+1,o=1;e.pos32)return a;if(41===o){if(0===r)break;r--}i++}return t===i||0!==r||(a.str=rW(e.slice(t,i)),a.pos=i,a.ok=!0),a},oW.parseLinkTitle=function(e,t,n){var o,r,i=0,a=t,l={ok:!1,pos:0,lines:0,str:""};if(a>=n)return l;if(34!==(r=e.charCodeAt(a))&&39!==r&&40!==r)return l;for(a++,40===r&&(r=41);a"+sW(i.content)+""},cW.code_block=function(e,t,n,o,r){var i=e[t];return""+sW(e[t].content)+"\n"},cW.fence=function(e,t,n,o,r){var i,a,l,s,c,u=e[t],d=u.info?lW(u.info).trim():"",p="",h="";return d&&(p=(l=d.split(/(\s+)/g))[0],h=l.slice(2).join("")),0===(i=n.highlight&&n.highlight(u.content,p,h)||sW(u.content)).indexOf(""+i+"\n"):"
"+i+"
\n"},cW.image=function(e,t,n,o,r){var i=e[t];return i.attrs[i.attrIndex("alt")][1]=r.renderInlineAsText(i.children,n,o),r.renderToken(e,t,n)},cW.hardbreak=function(e,t,n){return n.xhtmlOut?"
\n":"
\n"},cW.softbreak=function(e,t,n){return n.breaks?n.xhtmlOut?"
\n":"
\n":"\n"},cW.text=function(e,t){return sW(e[t].content)},cW.html_block=function(e,t){return e[t].content},cW.html_inline=function(e,t){return e[t].content},uW.prototype.renderAttrs=function(e){var t,n,o;if(!e.attrs)return"";for(o="",t=0,n=e.attrs.length;t\n":">")},uW.prototype.renderInline=function(e,t,n){for(var o,r="",i=this.rules,a=0,l=e.length;a/i.test(e)}var bW=/\+-|\.\.|\?\?\?\?|!!!!|,,|--/,yW=/\((c|tm|r)\)/i,xW=/\((c|tm|r)\)/gi,CW={c:"©",r:"®",tm:"™"};function wW(e,t){return CW[t.toLowerCase()]}function kW(e){var t,n,o=0;for(t=e.length-1;t>=0;t--)"text"!==(n=e[t]).type||o||(n.content=n.content.replace(xW,wW)),"link_open"===n.type&&"auto"===n.info&&o--,"link_close"===n.type&&"auto"===n.info&&o++}function SW(e){var t,n,o=0;for(t=e.length-1;t>=0;t--)"text"!==(n=e[t]).type||o||bW.test(n.content)&&(n.content=n.content.replace(/\+-/g,"±").replace(/\.{2,}/g,"…").replace(/([?!])…/g,"$1..").replace(/([?!]){4,}/g,"$1$1$1").replace(/,{2,}/g,",").replace(/(^|[^-])---(?=[^-]|$)/gm,"$1—").replace(/(^|\s)--(?=\s|$)/gm,"$1–").replace(/(^|[^-\s])--(?=[^-\s]|$)/gm,"$1–")),"link_open"===n.type&&"auto"===n.info&&o--,"link_close"===n.type&&"auto"===n.info&&o++}var _W=xH.isWhiteSpace,PW=xH.isPunctChar,TW=xH.isMdAsciiPunct,AW=/['"]/,zW=/['"]/g;function RW(e,t,n){return e.slice(0,t)+n+e.slice(t+1)}function EW(e,t){var n,o,r,i,a,l,s,c,u,d,p,h,f,v,m,g,b,y,x,C,w;for(x=[],n=0;n=0&&!(x[b].level<=s);b--);if(x.length=b+1,"text"===o.type){a=0,l=(r=o.content).length;e:for(;a=0)u=r.charCodeAt(i.index-1);else for(b=n-1;b>=0&&"softbreak"!==e[b].type&&"hardbreak"!==e[b].type;b--)if(e[b].content){u=e[b].content.charCodeAt(e[b].content.length-1);break}if(d=32,a=48&&u<=57&&(g=m=!1),m&&g&&(m=p,g=h),m||g){if(g)for(b=x.length-1;b>=0&&(c=x[b],!(x[b].level=0&&(n=this.attrs[t][1]),n},OW.prototype.attrJoin=function(e,t){var n=this.attrIndex(e);n<0?this.attrPush([e,t]):this.attrs[n][1]=this.attrs[n][1]+" "+t};var MW=OW,FW=MW;function IW(e,t,n){this.src=e,this.env=n,this.tokens=[],this.inlineMode=!1,this.md=t}IW.prototype.Token=FW;var LW=IW,BW=hW,DW=[["normalize",function(e){var t;t=(t=e.src.replace(fW,"\n")).replace(vW,"�"),e.src=t}],["block",function(e){var t;e.inlineMode?((t=new e.Token("inline","",0)).content=e.src,t.map=[0,1],t.children=[],e.tokens.push(t)):e.md.block.parse(e.src,e.md,e.env,e.tokens)}],["inline",function(e){var t,n,o,r=e.tokens;for(n=0,o=r.length;n=0;t--)if("link_close"!==(a=r[t]).type){if("html_inline"===a.type&&(b=a.content,/^\s]/i.test(b)&&h>0&&h--,gW(a.content)&&h++),!(h>0)&&"text"===a.type&&e.md.linkify.test(a.content)){for(c=a.content,g=e.md.linkify.match(c),l=[],p=a.level,d=0,g.length>0&&0===g[0].index&&t>0&&"text_special"===r[t-1].type&&(g=g.slice(1)),s=0;sd&&((i=new e.Token("text","",0)).content=c.slice(d,u),i.level=p,l.push(i)),(i=new e.Token("link_open","a",1)).attrs=[["href",v]],i.level=p++,i.markup="linkify",i.info="auto",l.push(i),(i=new e.Token("text","",0)).content=m,i.level=p,l.push(i),(i=new e.Token("link_close","a",-1)).level=--p,i.markup="linkify",i.info="auto",l.push(i),d=g[s].lastIndex);d=0;t--)"inline"===e.tokens[t].type&&(yW.test(e.tokens[t].content)&&kW(e.tokens[t].children),bW.test(e.tokens[t].content)&&SW(e.tokens[t].children))}],["smartquotes",function(e){var t;if(e.md.options.typographer)for(t=e.tokens.length-1;t>=0;t--)"inline"===e.tokens[t].type&&AW.test(e.tokens[t].content)&&EW(e.tokens[t].children,e)}],["text_join",function(e){var t,n,o,r,i,a,l=e.tokens;for(t=0,n=l.length;t=i)return-1;if((n=e.src.charCodeAt(r++))<48||n>57)return-1;for(;;){if(r>=i)return-1;if(!((n=e.src.charCodeAt(r++))>=48&&n<=57)){if(41===n||46===n)break;return-1}if(r-o>=10)return-1}return r`\\x00-\\x20]+|'[^']*'|\"[^\"]*\"))?)*\\s*\\/?>",JW="<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>",eU=new RegExp("^(?:"+ZW+"|"+JW+"|\x3c!----\x3e|\x3c!--(?:-?[^>-])(?:-?[^-])*--\x3e|<[?][\\s\\S]*?[?]>|]*>|)"),tU=new RegExp("^(?:"+ZW+"|"+JW+")");QW.HTML_TAG_RE=eU,QW.HTML_OPEN_CLOSE_TAG_RE=tU;var nU=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","section","source","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],oU=QW.HTML_OPEN_CLOSE_TAG_RE,rU=[[/^<(script|pre|style|textarea)(?=(\s|>|$))/i,/<\/(script|pre|style|textarea)>/i,!0],[/^/,!0],[/^<\?/,/\?>/,!0],[/^/,!0],[/^/,!0],[new RegExp("^|$))","i"),/^$/,!0],[new RegExp(oU.source+"\\s*$"),/^$/,!1]],iU=xH.isSpace,aU=MW,lU=xH.isSpace;function sU(e,t,n,o){var r,i,a,l,s,c,u,d;for(this.src=e,this.md=t,this.env=n,this.tokens=o,this.bMarks=[],this.eMarks=[],this.tShift=[],this.sCount=[],this.bsCount=[],this.blkIndent=0,this.line=0,this.lineMax=0,this.tight=!1,this.ddIndent=-1,this.listIndent=-1,this.parentType="root",this.level=0,this.result="",d=!1,a=l=c=u=0,s=(i=this.src).length;l0&&this.level++,this.tokens.push(o),o},sU.prototype.isEmpty=function(e){return this.bMarks[e]+this.tShift[e]>=this.eMarks[e]},sU.prototype.skipEmptyLines=function(e){for(var t=this.lineMax;et;)if(!lU(this.src.charCodeAt(--e)))return e+1;return e},sU.prototype.skipChars=function(e,t){for(var n=this.src.length;en;)if(t!==this.src.charCodeAt(--e))return e+1;return e},sU.prototype.getLines=function(e,t,n,o){var r,i,a,l,s,c,u,d=e;if(e>=t)return"";for(c=new Array(t-e),r=0;dn?new Array(i-n+1).join(" ")+this.src.slice(l,s):this.src.slice(l,s)}return c.join("")},sU.prototype.Token=aU;var cU=sU,uU=hW,dU=[["table",function(e,t,n,o){var r,i,a,l,s,c,u,d,p,h,f,v,m,g,b,y,x,C;if(t+2>n)return!1;if(c=t+1,e.sCount[c]=4)return!1;if((a=e.bMarks[c]+e.tShift[c])>=e.eMarks[c])return!1;if(124!==(x=e.src.charCodeAt(a++))&&45!==x&&58!==x)return!1;if(a>=e.eMarks[c])return!1;if(124!==(C=e.src.charCodeAt(a++))&&45!==C&&58!==C&&!jW(C))return!1;if(45===x&&jW(C))return!1;for(;a=4)return!1;if((u=WW(i)).length&&""===u[0]&&u.shift(),u.length&&""===u[u.length-1]&&u.pop(),0===(d=u.length)||d!==h.length)return!1;if(o)return!0;for(g=e.parentType,e.parentType="table",y=e.md.block.ruler.getRules("blockquote"),(p=e.push("table_open","table",1)).map=v=[t,0],(p=e.push("thead_open","thead",1)).map=[t,t+1],(p=e.push("tr_open","tr",1)).map=[t,t+1],l=0;l=4)break;for((u=WW(i)).length&&""===u[0]&&u.shift(),u.length&&""===u[u.length-1]&&u.pop(),c===t+2&&((p=e.push("tbody_open","tbody",1)).map=m=[t+2,0]),(p=e.push("tr_open","tr",1)).map=[c,c+1],l=0;l=4))break;r=++o}return e.line=r,(i=e.push("code_block","code",0)).content=e.getLines(t,r,4+e.blkIndent,!1)+"\n",i.map=[t,e.line],!0}],["fence",function(e,t,n,o){var r,i,a,l,s,c,u,d=!1,p=e.bMarks[t]+e.tShift[t],h=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4)return!1;if(p+3>h)return!1;if(126!==(r=e.src.charCodeAt(p))&&96!==r)return!1;if(s=p,(i=(p=e.skipChars(p,r))-s)<3)return!1;if(u=e.src.slice(s,p),a=e.src.slice(p,h),96===r&&a.indexOf(String.fromCharCode(r))>=0)return!1;if(o)return!0;for(l=t;!(++l>=n||(p=s=e.bMarks[l]+e.tShift[l])<(h=e.eMarks[l])&&e.sCount[l]=4||(p=e.skipChars(p,r))-s=4)return!1;if(62!==e.src.charCodeAt(_))return!1;if(o)return!0;for(h=[],f=[],g=[],b=[],C=e.md.block.ruler.getRules("blockquote"),m=e.parentType,e.parentType="blockquote",d=t;d=(P=e.eMarks[d])));d++)if(62!==e.src.charCodeAt(_++)||k){if(c)break;for(x=!1,a=0,s=C.length;a=P,f.push(e.bsCount[d]),e.bsCount[d]=e.sCount[d]+1+(y?1:0),g.push(e.sCount[d]),e.sCount[d]=p-l,b.push(e.tShift[d]),e.tShift[d]=_-e.bMarks[d]}for(v=e.blkIndent,e.blkIndent=0,(w=e.push("blockquote_open","blockquote",1)).markup=">",w.map=u=[t,0],e.md.block.tokenize(e,t,d),(w=e.push("blockquote_close","blockquote",-1)).markup=">",e.lineMax=S,e.parentType=m,u[1]=e.line,a=0;a=4)return!1;if(42!==(r=e.src.charCodeAt(s++))&&45!==r&&95!==r)return!1;for(i=1;s=4)return!1;if(e.listIndent>=0&&e.sCount[E]-e.listIndent>=4&&e.sCount[E]=e.blkIndent&&(O=!0),(_=GW(e,E))>=0){if(u=!0,T=e.bMarks[E]+e.tShift[E],m=Number(e.src.slice(T,_-1)),O&&1!==m)return!1}else{if(!((_=KW(e,E))>=0))return!1;u=!1}if(O&&e.skipSpaces(_)>=e.eMarks[E])return!1;if(o)return!0;for(v=e.src.charCodeAt(_-1),f=e.tokens.length,u?(R=e.push("ordered_list_open","ol",1),1!==m&&(R.attrs=[["start",m]])):R=e.push("bullet_list_open","ul",1),R.map=h=[E,0],R.markup=String.fromCharCode(v),P=!1,z=e.md.block.ruler.getRules("list"),x=e.parentType,e.parentType="list";E=g?1:b-c)>4&&(s=1),l=c+s,(R=e.push("list_item_open","li",1)).markup=String.fromCharCode(v),R.map=d=[E,0],u&&(R.info=e.src.slice(T,_-1)),k=e.tight,w=e.tShift[E],C=e.sCount[E],y=e.listIndent,e.listIndent=e.blkIndent,e.blkIndent=l,e.tight=!0,e.tShift[E]=i-e.bMarks[E],e.sCount[E]=b,i>=g&&e.isEmpty(E+1)?e.line=Math.min(e.line+2,n):e.md.block.tokenize(e,E,n,!0),e.tight&&!P||(M=!1),P=e.line-E>1&&e.isEmpty(e.line-1),e.blkIndent=e.listIndent,e.listIndent=y,e.tShift[E]=w,e.sCount[E]=C,e.tight=k,(R=e.push("list_item_close","li",-1)).markup=String.fromCharCode(v),E=e.line,d[1]=E,E>=n)break;if(e.sCount[E]=4)break;for(A=!1,a=0,p=z.length;a=4)return!1;if(91!==e.src.charCodeAt(C))return!1;for(;++C3||e.sCount[k]<0)){for(g=!1,c=0,u=b.length;c=4)return!1;if(!e.md.options.html)return!1;if(60!==e.src.charCodeAt(s))return!1;for(l=e.src.slice(s,c),r=0;r=4)return!1;if(35!==(r=e.src.charCodeAt(s))||s>=c)return!1;for(i=1,r=e.src.charCodeAt(++s);35===r&&s6||ss&&iU(e.src.charCodeAt(a-1))&&(c=a),e.line=t+1,(l=e.push("heading_open","h"+String(i),1)).markup="########".slice(0,i),l.map=[t,e.line],(l=e.push("inline","",0)).content=e.src.slice(s,c).trim(),l.map=[t,e.line],l.children=[],(l=e.push("heading_close","h"+String(i),-1)).markup="########".slice(0,i)),0))},["paragraph","reference","blockquote"]],["lheading",function(e,t,n){var o,r,i,a,l,s,c,u,d,p,h=t+1,f=e.md.block.ruler.getRules("paragraph");if(e.sCount[t]-e.blkIndent>=4)return!1;for(p=e.parentType,e.parentType="paragraph";h3)){if(e.sCount[h]>=e.blkIndent&&(s=e.bMarks[h]+e.tShift[h])<(c=e.eMarks[h])&&(45===(d=e.src.charCodeAt(s))||61===d)&&(s=e.skipChars(s,d),(s=e.skipSpaces(s))>=c)){u=61===d?1:2;break}if(!(e.sCount[h]<0)){for(r=!1,i=0,a=f.length;i3||e.sCount[c]<0)){for(r=!1,i=0,a=u.length;i=n))&&!(e.sCount[s]=u){e.line=n;break}for(i=e.line,r=0;r=e.line)throw new Error("block rule didn't increment state.line");break}if(!o)throw new Error("none of the block rules matched");e.tight=!c,e.isEmpty(e.line-1)&&(c=!0),(s=e.line)?@[]^_`{|}~-".split("").forEach((function(e){bU[e.charCodeAt(0)]=1}));var xU={};function CU(e,t){var n,o,r,i,a,l=[],s=t.length;for(n=0;n=0;n--)95!==(o=t[n]).marker&&42!==o.marker||-1!==o.end&&(r=t[o.end],l=n>0&&t[n-1].end===o.end+1&&t[n-1].marker===o.marker&&t[n-1].token===o.token-1&&t[o.end+1].token===r.token+1,a=String.fromCharCode(o.marker),(i=e.tokens[o.token]).type=l?"strong_open":"em_open",i.tag=l?"strong":"em",i.nesting=1,i.markup=l?a+a:a,i.content="",(i=e.tokens[r.token]).type=l?"strong_close":"em_close",i.tag=l?"strong":"em",i.nesting=-1,i.markup=l?a+a:a,i.content="",l&&(e.tokens[t[n-1].token].content="",e.tokens[t[o.end+1].token].content="",n--))}wU.tokenize=function(e,t){var n,o,r=e.pos,i=e.src.charCodeAt(r);if(t)return!1;if(95!==i&&42!==i)return!1;for(o=e.scanDelims(e.pos,42===i),n=0;n\x00-\x20]*)$/,RU=QW.HTML_TAG_RE,EU=CH,OU=xH.has,MU=xH.isValidEntityCode,FU=xH.fromCodePoint,IU=/^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i,LU=/^&([a-z][a-z0-9]{1,31});/i;function BU(e){var t,n,o,r,i,a,l,s,c={},u=e.length;if(u){var d=0,p=-2,h=[];for(t=0;ti;n-=h[n]+1)if((r=e[n]).marker===o.marker&&r.open&&r.end<0&&(l=!1,(r.close||o.open)&&(r.length+o.length)%3==0&&(r.length%3==0&&o.length%3==0||(l=!0)),!l)){s=n>0&&!e[n-1].open?h[n-1]+1:0,h[t]=t-n+s,h[n]=s,o.open=!1,r.end=t,r.close=!1,a=-1,p=-2;break}-1!==a&&(c[o.marker][(o.open?3:0)+(o.length||0)%3]=a)}}}var DU=MW,$U=xH.isWhiteSpace,NU=xH.isPunctChar,jU=xH.isMdAsciiPunct;function HU(e,t,n,o){this.src=e,this.env=n,this.md=t,this.tokens=o,this.tokens_meta=Array(o.length),this.pos=0,this.posMax=this.src.length,this.level=0,this.pending="",this.pendingLevel=0,this.cache={},this.delimiters=[],this._prev_delimiters=[],this.backticks={},this.backticksScanned=!1,this.linkLevel=0}HU.prototype.pushPending=function(){var e=new DU("text","",0);return e.content=this.pending,e.level=this.pendingLevel,this.tokens.push(e),this.pending="",e},HU.prototype.push=function(e,t,n){this.pending&&this.pushPending();var o=new DU(e,t,n),r=null;return n<0&&(this.level--,this.delimiters=this._prev_delimiters.pop()),o.level=this.level,n>0&&(this.level++,this._prev_delimiters.push(this.delimiters),this.delimiters=[],r={delimiters:this.delimiters}),this.pendingLevel=this.level,this.tokens.push(o),this.tokens_meta.push(r),o},HU.prototype.scanDelims=function(e,t){var n,o,r,i,a,l,s,c,u,d=e,p=!0,h=!0,f=this.posMax,v=this.src.charCodeAt(e);for(n=e>0?this.src.charCodeAt(e-1):32;d0||(n=e.pos)+3>e.posMax||58!==e.src.charCodeAt(n)||47!==e.src.charCodeAt(n+1)||47!==e.src.charCodeAt(n+2)||!(o=e.pending.match(vU))||(r=o[1],!(i=e.md.linkify.matchAtStart(e.src.slice(n-r.length)))||(a=i.url).length<=r.length||(a=a.replace(/\*+$/,""),l=e.md.normalizeLink(a),!e.md.validateLink(l)||(t||(e.pending=e.pending.slice(0,-r.length),(s=e.push("link_open","a",1)).attrs=[["href",l]],s.markup="linkify",s.info="auto",(s=e.push("text","",0)).content=e.md.normalizeLinkText(a),(s=e.push("link_close","a",-1)).markup="linkify",s.info="auto"),e.pos+=a.length-r.length,0))))}],["newline",function(e,t){var n,o,r,i=e.pos;if(10!==e.src.charCodeAt(i))return!1;if(n=e.pending.length-1,o=e.posMax,!t)if(n>=0&&32===e.pending.charCodeAt(n))if(n>=1&&32===e.pending.charCodeAt(n-1)){for(r=n-1;r>=1&&32===e.pending.charCodeAt(r-1);)r--;e.pending=e.pending.slice(0,r),e.push("hardbreak","br",0)}else e.pending=e.pending.slice(0,-1),e.push("softbreak","br",0);else e.push("softbreak","br",0);for(i++;i=s)return!1;if(10===(n=e.src.charCodeAt(l))){for(t||e.push("hardbreak","br",0),l++;l=55296&&n<=56319&&l+1=56320&&o<=57343&&(i+=e.src[l+1],l++),r="\\"+i,t||(a=e.push("text_special","",0),n<256&&0!==bU[n]?a.content=i:a.content=r,a.markup=r,a.info="escape"),e.pos=l+1,!0}],["backticks",function(e,t){var n,o,r,i,a,l,s,c,u=e.pos;if(96!==e.src.charCodeAt(u))return!1;for(n=u,u++,o=e.posMax;u=h)return!1;if(f=l,(s=e.md.helpers.parseLinkDestination(e.src,l,e.posMax)).ok){for(u=e.md.normalizeLink(s.str),e.md.validateLink(u)?l=s.pos:u="",f=l;l=h||41!==e.src.charCodeAt(l))&&(v=!0),l++}if(v){if(void 0===e.env.references)return!1;if(l=0?r=e.src.slice(f,l++):l=i+1):l=i+1,r||(r=e.src.slice(a,i)),!(c=e.env.references[SU(r)]))return e.pos=p,!1;u=c.href,d=c.title}return t||(e.pos=a,e.posMax=i,e.push("link_open","a",1).attrs=n=[["href",u]],d&&n.push(["title",d]),e.linkLevel++,e.md.inline.tokenize(e),e.linkLevel--,e.push("link_close","a",-1)),e.pos=l,e.posMax=h,!0}],["image",function(e,t){var n,o,r,i,a,l,s,c,u,d,p,h,f,v="",m=e.pos,g=e.posMax;if(33!==e.src.charCodeAt(e.pos))return!1;if(91!==e.src.charCodeAt(e.pos+1))return!1;if(l=e.pos+2,(a=e.md.helpers.parseLinkLabel(e,e.pos+1,!1))<0)return!1;if((s=a+1)=g)return!1;for(f=s,(u=e.md.helpers.parseLinkDestination(e.src,s,e.posMax)).ok&&(v=e.md.normalizeLink(u.str),e.md.validateLink(v)?s=u.pos:v=""),f=s;s=g||41!==e.src.charCodeAt(s))return e.pos=m,!1;s++}else{if(void 0===e.env.references)return!1;if(s=0?i=e.src.slice(f,s++):s=a+1):s=a+1,i||(i=e.src.slice(l,a)),!(c=e.env.references[PU(i)]))return e.pos=m,!1;v=c.href,d=c.title}return t||(r=e.src.slice(l,a),e.md.inline.parse(r,e.md,e.env,h=[]),(p=e.push("image","img",0)).attrs=n=[["src",v],["alt",""]],p.children=h,p.content=r,d&&n.push(["title",d])),e.pos=s,e.posMax=g,!0}],["autolink",function(e,t){var n,o,r,i,a,l,s=e.pos;if(60!==e.src.charCodeAt(s))return!1;for(a=e.pos,l=e.posMax;;){if(++s>=l)return!1;if(60===(i=e.src.charCodeAt(s)))return!1;if(62===i)break}return n=e.src.slice(a+1,s),zU.test(n)?(o=e.md.normalizeLink(n),!!e.md.validateLink(o)&&(t||((r=e.push("link_open","a",1)).attrs=[["href",o]],r.markup="autolink",r.info="auto",(r=e.push("text","",0)).content=e.md.normalizeLinkText(n),(r=e.push("link_close","a",-1)).markup="autolink",r.info="auto"),e.pos+=n.length+2,!0)):!!AU.test(n)&&(o=e.md.normalizeLink("mailto:"+n),!!e.md.validateLink(o)&&(t||((r=e.push("link_open","a",1)).attrs=[["href",o]],r.markup="autolink",r.info="auto",(r=e.push("text","",0)).content=e.md.normalizeLinkText(n),(r=e.push("link_close","a",-1)).markup="autolink",r.info="auto"),e.pos+=n.length+2,!0))}],["html_inline",function(e,t){var n,o,r,i,a,l=e.pos;return!(!e.md.options.html||(r=e.posMax,60!==e.src.charCodeAt(l)||l+2>=r||33!==(n=e.src.charCodeAt(l+1))&&63!==n&&47!==n&&!function(e){var t=32|e;return t>=97&&t<=122}(n)||!(o=e.src.slice(l).match(RU))||(t||((i=e.push("html_inline","",0)).content=o[0],a=i.content,/^\s]/i.test(a)&&e.linkLevel++,function(e){return/^<\/a\s*>/i.test(e)}(i.content)&&e.linkLevel--),e.pos+=o[0].length,0)))}],["entity",function(e,t){var n,o,r,i=e.pos,a=e.posMax;if(38!==e.src.charCodeAt(i))return!1;if(i+1>=a)return!1;if(35===e.src.charCodeAt(i+1)){if(o=e.src.slice(i).match(IU))return t||(n="x"===o[1][0].toLowerCase()?parseInt(o[1].slice(1),16):parseInt(o[1],10),(r=e.push("text_special","",0)).content=MU(n)?FU(n):FU(65533),r.markup=o[0],r.info="entity"),e.pos+=o[0].length,!0}else if((o=e.src.slice(i).match(LU))&&OU(EU,o[1]))return t||((r=e.push("text_special","",0)).content=EU[o[1]],r.markup=o[0],r.info="entity"),e.pos+=o[0].length,!0;return!1}]],qU=[["balance_pairs",function(e){var t,n=e.tokens_meta,o=e.tokens_meta.length;for(BU(e.delimiters),t=0;t0&&o++,"text"===r[t].type&&t+1=e.pos)throw new Error("inline rule didn't increment state.pos");break}}else e.pos=e.posMax;t||e.pos++,l[o]=e.pos}else e.pos=l[o]},KU.prototype.tokenize=function(e){for(var t,n,o,r=this.ruler.getRules(""),i=r.length,a=e.posMax,l=e.md.options.maxNesting;e.pos=e.pos)throw new Error("inline rule didn't increment state.pos");break}if(t){if(e.pos>=a)break}else e.pending+=e.src[e.pos++]}e.pending&&e.pushPending()},KU.prototype.parse=function(e,t,n,o){var r,i,a,l=new this.State(e,t,n,o);for(this.tokenize(l),a=(i=this.ruler2.getRules("")).length,r=0;r=3&&":"===e[t-3]||t>=3&&"/"===e[t-3]?0:o.match(n.re.no_http)[0].length:0}},"mailto:":{validate:function(e,t,n){var o=e.slice(t);return n.re.mailto||(n.re.mailto=new RegExp("^"+n.re.src_email_name+"@"+n.re.src_host_strict,"i")),n.re.mailto.test(o)?o.match(n.re.mailto)[0].length:0}}},oV="biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф".split("|");function rV(e){var t=e.re=(XU?GU:(XU=1,GU=function(e){var t={};e=e||{},t.src_Any=JH().source,t.src_Cc=eW().source,t.src_Z=tW().source,t.src_P=wH.source,t.src_ZPCc=[t.src_Z,t.src_P,t.src_Cc].join("|"),t.src_ZCc=[t.src_Z,t.src_Cc].join("|");var n="[><|]";return t.src_pseudo_letter="(?:(?![><|]|"+t.src_ZPCc+")"+t.src_Any+")",t.src_ip4="(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)",t.src_auth="(?:(?:(?!"+t.src_ZCc+"|[@/\\[\\]()]).)+@)?",t.src_port="(?::(?:6(?:[0-4]\\d{3}|5(?:[0-4]\\d{2}|5(?:[0-2]\\d|3[0-5])))|[1-5]?\\d{1,4}))?",t.src_host_terminator="(?=$|[><|]|"+t.src_ZPCc+")(?!"+(e["---"]?"-(?!--)|":"-|")+"_|:\\d|\\.-|\\.(?!$|"+t.src_ZPCc+"))",t.src_path="(?:[/?#](?:(?!"+t.src_ZCc+"|"+n+"|[()[\\]{}.,\"'?!\\-;]).|\\[(?:(?!"+t.src_ZCc+"|\\]).)*\\]|\\((?:(?!"+t.src_ZCc+"|[)]).)*\\)|\\{(?:(?!"+t.src_ZCc+'|[}]).)*\\}|\\"(?:(?!'+t.src_ZCc+'|["]).)+\\"|\\\'(?:(?!'+t.src_ZCc+"|[']).)+\\'|\\'(?="+t.src_pseudo_letter+"|[-])|\\.{2,}[a-zA-Z0-9%/&]|\\.(?!"+t.src_ZCc+"|[.]|$)|"+(e["---"]?"\\-(?!--(?:[^-]|$))(?:-*)|":"\\-+|")+",(?!"+t.src_ZCc+"|$)|;(?!"+t.src_ZCc+"|$)|\\!+(?!"+t.src_ZCc+"|[!]|$)|\\?(?!"+t.src_ZCc+"|[?]|$))+|\\/)?",t.src_email_name='[\\-;:&=\\+\\$,\\.a-zA-Z0-9_][\\-;:&=\\+\\$,\\"\\.a-zA-Z0-9_]*',t.src_xn="xn--[a-z0-9\\-]{1,59}",t.src_domain_root="(?:"+t.src_xn+"|"+t.src_pseudo_letter+"{1,63})",t.src_domain="(?:"+t.src_xn+"|(?:"+t.src_pseudo_letter+")|(?:"+t.src_pseudo_letter+"(?:-|"+t.src_pseudo_letter+"){0,61}"+t.src_pseudo_letter+"))",t.src_host="(?:(?:(?:(?:"+t.src_domain+")\\.)*"+t.src_domain+"))",t.tpl_host_fuzzy="(?:"+t.src_ip4+"|(?:(?:(?:"+t.src_domain+")\\.)+(?:%TLDS%)))",t.tpl_host_no_ip_fuzzy="(?:(?:(?:"+t.src_domain+")\\.)+(?:%TLDS%))",t.src_host_strict=t.src_host+t.src_host_terminator,t.tpl_host_fuzzy_strict=t.tpl_host_fuzzy+t.src_host_terminator,t.src_host_port_strict=t.src_host+t.src_port+t.src_host_terminator,t.tpl_host_port_fuzzy_strict=t.tpl_host_fuzzy+t.src_port+t.src_host_terminator,t.tpl_host_port_no_ip_fuzzy_strict=t.tpl_host_no_ip_fuzzy+t.src_port+t.src_host_terminator,t.tpl_host_fuzzy_test="localhost|www\\.|\\.\\d{1,3}\\.|(?:\\.(?:%TLDS%)(?:"+t.src_ZPCc+"|>|$))",t.tpl_email_fuzzy='(^|[><|]|"|\\(|'+t.src_ZCc+")("+t.src_email_name+"@"+t.tpl_host_fuzzy_strict+")",t.tpl_link_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`||]|"+t.src_ZPCc+"))((?![$+<=>^`||])"+t.tpl_host_port_fuzzy_strict+t.src_path+")",t.tpl_link_no_ip_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`||]|"+t.src_ZPCc+"))((?![$+<=>^`||])"+t.tpl_host_port_no_ip_fuzzy_strict+t.src_path+")",t}))(e.__opts__),n=e.__tlds__.slice();function o(e){return e.replace("%TLDS%",t.src_tlds)}e.onCompile(),e.__tlds_replaced__||n.push("a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]"),n.push(t.src_xn),t.src_tlds=n.join("|"),t.email_fuzzy=RegExp(o(t.tpl_email_fuzzy),"i"),t.link_fuzzy=RegExp(o(t.tpl_link_fuzzy),"i"),t.link_no_ip_fuzzy=RegExp(o(t.tpl_link_no_ip_fuzzy),"i"),t.host_fuzzy_test=RegExp(o(t.tpl_host_fuzzy_test),"i");var r=[];function i(e,t){throw new Error('(LinkifyIt) Invalid schema "'+e+'": '+t)}e.__compiled__={},Object.keys(e.__schemas__).forEach((function(t){var n=e.__schemas__[t];if(null!==n){var o={validate:null,link:null};if(e.__compiled__[t]=o,"[object Object]"===ZU(n))return function(e){return"[object RegExp]"===ZU(e)}(n.validate)?o.validate=function(e){return function(t,n){var o=t.slice(n);return e.test(o)?o.match(e)[0].length:0}}(n.validate):JU(n.validate)?o.validate=n.validate:i(t,n),void(JU(n.normalize)?o.normalize=n.normalize:n.normalize?i(t,n):o.normalize=function(e,t){t.normalize(e)});!function(e){return"[object String]"===ZU(e)}(n)?i(t,n):r.push(t)}})),r.forEach((function(t){e.__compiled__[e.__schemas__[t]]&&(e.__compiled__[t].validate=e.__compiled__[e.__schemas__[t]].validate,e.__compiled__[t].normalize=e.__compiled__[e.__schemas__[t]].normalize)})),e.__compiled__[""]={validate:null,normalize:function(e,t){t.normalize(e)}};var a=Object.keys(e.__compiled__).filter((function(t){return t.length>0&&e.__compiled__[t]})).map(eV).join("|");e.re.schema_test=RegExp("(^|(?!_)(?:[><|]|"+t.src_ZPCc+"))("+a+")","i"),e.re.schema_search=RegExp("(^|(?!_)(?:[><|]|"+t.src_ZPCc+"))("+a+")","ig"),e.re.schema_at_start=RegExp("^"+e.re.schema_search.source,"i"),e.re.pretest=RegExp("("+e.re.schema_test.source+")|("+e.re.host_fuzzy_test.source+")|@","i"),function(e){e.__index__=-1,e.__text_cache__=""}(e)}function iV(e,t){var n=e.__index__,o=e.__last_index__,r=e.__text_cache__.slice(n,o);this.schema=e.__schema__.toLowerCase(),this.index=n+t,this.lastIndex=o+t,this.raw=r,this.text=r,this.url=r}function aV(e,t){var n=new iV(e,t);return e.__compiled__[n.schema].normalize(n,e),n}function lV(e,t){if(!(this instanceof lV))return new lV(e,t);var n;t||(n=e,Object.keys(n||{}).reduce((function(e,t){return e||tV.hasOwnProperty(t)}),!1)&&(t=e,e={})),this.__opts__=QU({},tV,t),this.__index__=-1,this.__last_index__=-1,this.__schema__="",this.__text_cache__="",this.__schemas__=QU({},nV,e),this.__compiled__={},this.__tlds__=oV,this.__tlds_replaced__=!1,this.re={},rV(this)}lV.prototype.add=function(e,t){return this.__schemas__[e]=t,rV(this),this},lV.prototype.set=function(e){return this.__opts__=QU(this.__opts__,e),this},lV.prototype.test=function(e){if(this.__text_cache__=e,this.__index__=-1,!e.length)return!1;var t,n,o,r,i,a,l,s;if(this.re.schema_test.test(e))for((l=this.re.schema_search).lastIndex=0;null!==(t=l.exec(e));)if(r=this.testSchemaAt(e,t[2],l.lastIndex)){this.__schema__=t[2],this.__index__=t.index+t[1].length,this.__last_index__=t.index+t[0].length+r;break}return this.__opts__.fuzzyLink&&this.__compiled__["http:"]&&(s=e.search(this.re.host_fuzzy_test))>=0&&(this.__index__<0||s=0&&null!==(o=e.match(this.re.email_fuzzy))&&(i=o.index+o[1].length,a=o.index+o[0].length,(this.__index__<0||ithis.__last_index__)&&(this.__schema__="mailto:",this.__index__=i,this.__last_index__=a)),this.__index__>=0},lV.prototype.pretest=function(e){return this.re.pretest.test(e)},lV.prototype.testSchemaAt=function(e,t,n){return this.__compiled__[t.toLowerCase()]?this.__compiled__[t.toLowerCase()].validate(e,n,this):0},lV.prototype.match=function(e){var t=0,n=[];this.__index__>=0&&this.__text_cache__===e&&(n.push(aV(this,t)),t=this.__last_index__);for(var o=t?e.slice(t):e;this.test(o);)n.push(aV(this,t)),o=o.slice(this.__last_index__),t+=this.__last_index__;return n.length?n:null},lV.prototype.matchAtStart=function(e){if(this.__text_cache__=e,this.__index__=-1,!e.length)return null;var t=this.re.schema_at_start.exec(e);if(!t)return null;var n=this.testSchemaAt(e,t[2],t[0].length);return n?(this.__schema__=t[2],this.__index__=t.index+t[1].length,this.__last_index__=t.index+t[0].length+n,aV(this,0)):null},lV.prototype.tlds=function(e,t){return e=Array.isArray(e)?e:[e],t?(this.__tlds__=this.__tlds__.concat(e).sort().filter((function(e,t,n){return e!==n[t-1]})).reverse(),rV(this),this):(this.__tlds__=e.slice(),this.__tlds_replaced__=!0,rV(this),this)},lV.prototype.normalize=function(e){e.schema||(e.url="http://"+e.url),"mailto:"!==e.schema||/^mailto:/i.test(e.url)||(e.url="mailto:"+e.url)},lV.prototype.onCompile=function(){};var sV=lV;const cV=2147483647,uV=36,dV=/^xn--/,pV=/[^\0-\x7F]/,hV=/[\x2E\u3002\uFF0E\uFF61]/g,fV={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},vV=Math.floor,mV=String.fromCharCode;function gV(e){throw new RangeError(fV[e])}function bV(e,t){const n=e.split("@");let o="";n.length>1&&(o=n[0]+"@",e=n[1]);const r=function(e,t){const n=[];let o=e.length;for(;o--;)n[o]=t(e[o]);return n}((e=e.replace(hV,".")).split("."),t).join(".");return o+r}function yV(e){const t=[];let n=0;const o=e.length;for(;n=55296&&r<=56319&&nString.fromCodePoint(...e),CV=function(e,t){return e+22+75*(e<26)-((0!=t)<<5)},wV=function(e,t,n){let o=0;for(e=n?vV(e/700):e>>1,e+=vV(e/t);e>455;o+=uV)e=vV(e/35);return vV(o+36*e/(e+38))},kV=function(e){const t=[],n=e.length;let o=0,r=128,i=72,a=e.lastIndexOf("-");a<0&&(a=0);for(let s=0;s=128&&gV("not-basic"),t.push(e.charCodeAt(s));for(let s=a>0?a+1:0;s=n&&gV("invalid-input");const a=(l=e.charCodeAt(s++))>=48&&l<58?l-48+26:l>=65&&l<91?l-65:l>=97&&l<123?l-97:uV;a>=uV&&gV("invalid-input"),a>vV((cV-o)/t)&&gV("overflow"),o+=a*t;const c=r<=i?1:r>=i+26?26:r-i;if(avV(cV/u)&&gV("overflow"),t*=u}const c=t.length+1;i=wV(o-a,c,0==a),vV(o/c)>cV-r&&gV("overflow"),r+=vV(o/c),o%=c,t.splice(o++,0,r)}var l;return String.fromCodePoint(...t)},SV=function(e){const t=[],n=(e=yV(e)).length;let o=128,r=0,i=72;for(const s of e)s<128&&t.push(mV(s));const a=t.length;let l=a;for(a&&t.push("-");l=o&&tvV((cV-r)/s)&&gV("overflow"),r+=(n-o)*s,o=n;for(const c of e)if(ccV&&gV("overflow"),c===o){let e=r;for(let n=uV;;n+=uV){const o=n<=i?1:n>=i+26?26:n-i;if(e=0))try{t.hostname=BV.toASCII(t.hostname)}catch(n){}return LV.encode(LV.format(t))}function UV(e){var t=LV.parse(e,!0);if(t.hostname&&(!t.protocol||HV.indexOf(t.protocol)>=0))try{t.hostname=BV.toUnicode(t.hostname)}catch(n){}return LV.decode(LV.format(t),LV.decode.defaultChars+"%")}function VV(e,t){if(!(this instanceof VV))return new VV(e,t);t||zV.isString(e)||(t=e||{},e="default"),this.inline=new FV,this.block=new MV,this.core=new OV,this.renderer=new EV,this.linkify=new IV,this.validateLink=jV,this.normalizeLink=WV,this.normalizeLinkText=UV,this.utils=zV,this.helpers=zV.assign({},RV),this.options={},this.configure(e),t&&this.set(t)}VV.prototype.set=function(e){return zV.assign(this.options,e),this},VV.prototype.configure=function(e){var t,n=this;if(zV.isString(e)&&!(e=DV[t=e]))throw new Error('Wrong `markdown-it` preset "'+t+'", check name');if(!e)throw new Error("Wrong `markdown-it` preset, can't be empty");return e.options&&n.set(e.options),e.components&&Object.keys(e.components).forEach((function(t){e.components[t].rules&&n[t].ruler.enableOnly(e.components[t].rules),e.components[t].rules2&&n[t].ruler2.enableOnly(e.components[t].rules2)})),this},VV.prototype.enable=function(e,t){var n=[];Array.isArray(e)||(e=[e]),["core","block","inline"].forEach((function(t){n=n.concat(this[t].ruler.enable(e,!0))}),this),n=n.concat(this.inline.ruler2.enable(e,!0));var o=e.filter((function(e){return n.indexOf(e)<0}));if(o.length&&!t)throw new Error("MarkdownIt. Failed to enable unknown rule(s): "+o);return this},VV.prototype.disable=function(e,t){var n=[];Array.isArray(e)||(e=[e]),["core","block","inline"].forEach((function(t){n=n.concat(this[t].ruler.disable(e,!0))}),this),n=n.concat(this.inline.ruler2.disable(e,!0));var o=e.filter((function(e){return n.indexOf(e)<0}));if(o.length&&!t)throw new Error("MarkdownIt. Failed to disable unknown rule(s): "+o);return this},VV.prototype.use=function(e){var t=[this].concat(Array.prototype.slice.call(arguments,1));return e.apply(e,t),this},VV.prototype.parse=function(e,t){if("string"!=typeof e)throw new Error("Input data should be a String");var n=new this.core.State(e,this,t);return this.core.process(n),n.tokens},VV.prototype.render=function(e,t){return t=t||{},this.renderer.render(this.parse(e,t),this.options,t)},VV.prototype.parseInline=function(e,t){var n=new this.core.State(e,this,t);return n.inlineMode=!0,this.core.process(n),n.tokens},VV.prototype.renderInline=function(e,t){return t=t||{},this.renderer.render(this.parseInline(e,t),this.options,t)};const qV=vd(VV),KV={xmlns:"http://www.w3.org/2000/svg",id:"Layer_1",viewBox:"0 0 442.19 323.31"},GV=Ir("path",{d:"m72.8 140.45-12.7 145.1h42.41l8.99-102.69h.04l3.67-42.41zM124.16 37.75h-42.4l-5.57 63.61h42.4zM318.36 285.56h42.08l5.57-63.61H323.9z",class:"cls-2"},null,-1),XV=Ir("path",{d:"M382.09 37.76H340l-10.84 123.9H221.09l-14.14 161.65 85.83-121.47h145.89l3.52-40.18h-70.94z",class:"cls-2"},null,-1),YV=Ir("path",{d:"M149.41 121.47H3.52L0 161.66h221.09L235.23 0z",style:{fill:"#ffbc00"}},null,-1),QV={render:function(e,t){return _r(),zr("svg",KV,[Ir("defs",null,[(_r(),Rr(Qn("style"),null,{default:hn((()=>[Dr(".cls-2{fill:#000}@media (prefers-color-scheme:dark){.cls-2{fill:#fff}}")])),_:1}))]),GV,XV,YV])}};var ZV=(e=>(e[e.PENDING=0]="PENDING",e[e.PROCESSING=1]="PROCESSING",e[e.CANCELLED=2]="CANCELLED",e[e.COMPLETED=3]="COMPLETED",e[e.DISCOUNTED=4]="DISCOUNTED",e))(ZV||{});const JV={0:"待支付",1:"开通中",2:"已取消",3:"已完成",4:"已折抵"},eq={month_price:"月付",quarter_price:"季付",half_year_price:"半年付",year_price:"年付",two_year_price:"两年付",three_year_price:"三年付",onetime_price:"一次性",reset_price:"流量重置包"},tq=["innerHTML"],nq={class:"w-16 flex justify-center"},oq={class:"text-gray-500"},rq={class:"w-16 flex justify-center"},iq={class:"text-gray-500"},aq=["onClick"],lq={class:"w-16 flex justify-center"},sq=["src"],cq={class:"text-gray-500"},uq={class:"p-2.5 text-center"},dq={class:"font-bold mb-3"},pq={class:"mb-5 space-x-4"},hq={class:"text-center"},fq={class:"mt-2.5 text-center"},vq={class:"mb-1 md:mb-10"},mq={key:0,class:"mb-2.5"},gq={class:"font-bold"},bq=["onClick"],yq={class:"carousel-img flex flex-col justify-between p-5",style:{background:"rgba(0, 0, 0, 0.5) !important"}},xq={class:"text-xl"},Cq={class:"text-base font-semibold color-[hsla(0,0%,100%,.75)]"},wq={class:"text-block mb-4 pt-5 text-xl font-semibold"},kq={key:0,class:"mb-4 text-sm text-gray-500"},Sq={key:1,class:"mb-4 text-sm font-semibold text-red-500"},_q={key:2,class:"mb-4 text-sm text-gray-500"},Pq={class:"text-gray-500"},Tq={class:"flex items-center justify-between"},Aq={class:""},zq={class:"text-base"},Rq={class:"text-sm text-gray-500"},Eq={class:"flex items-center justify-between"},Oq={class:"text-base"},Mq={class:"text-sm text-gray-500"},Fq={class:"flex items-center justify-between"},Iq={class:"text-base"},Lq={class:"text-sm text-gray-500"},Bq={class:"flex items-center justify-between"},Dq={class:"text-base"},$q={class:"text-sm text-gray-500"},Nq=zn({__name:"index",setup(e){const t=e=>jf.global.t(e),n=function(){const e=Po(M_,null);return ai((()=>{if(null===e)return qz;const{mergedThemeRef:{value:t},mergedThemeOverridesRef:{value:n}}=e,o=(null==t?void 0:t.common)||qz;return(null==n?void 0:n.common)?Object.assign({},o,n.common):o}))}(),o=new qV({html:!0}),r=_N(),i=BN(),a=navigator.userAgent.toLowerCase();let l="unknown";a.includes("windows")?l="windows":a.includes("iphone")||a.includes("ipad")?l="ios":a.includes("macintosh")?l="mac":a.includes("android")&&(l="android");const s=Et(!1),c=Et();$n((()=>{}));const u=Et(!1),d=Et(!1),p=Et(""),h=Et(["auto"]),f=[{label:"自动",type:"auto"},{label:"全部",type:"all"},{label:"Anytls",type:"anytls"},{label:"Vless",type:"vless"},{label:"Hy1",type:"hysteria"},{label:"Hy2",type:"hysteria2"},{label:"Shadowsocks",type:"shadowsocks"},{label:"Vmess",type:"vmess"},{label:"Trojan",type:"trojan"}],m=Et([]),g=()=>{var e;const t=null==(e=b.value)?void 0:e.subscribe_url;if(!t)return;const n=h.value;let o="auto";n.includes("all")?o="all":n.includes("auto")||(o=n.join(",")),p.value=((e,t)=>{if(!e)return"";const n=new URL(e);return Object.entries(t).forEach((([e,t])=>{n.searchParams.set(e,t)})),n.toString()})(t,{types:o})},b=ai((()=>i.subscribe)),y=ai((()=>{var e;const t=null==(e=b.value)?void 0:e.subscribe_url,n=encodeURIComponent(r.title||"");if(!t)return[];const o=encodeURIComponent(t),i=(a=t,btoa(unescape(encodeURIComponent(a)))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"");var a;return[{name:"复制订阅链接",icon:"icon-fluent:copy-24-filled",iconType:"component",platforms:["windows","mac","ios","android","unknown"],url:"copy"},{name:"Clash",icon:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAADAFBMVEVGpf9Do/8AZ+VIp/83m/1Lqf8AZeQmkfkymPs7nf4Cg/L1+f48n/80mvwtlfrx9/4cjPcZivX3+v4BaeQBgPEAbeg+oP/v9v4BauYBfvDn8f3u9f1Bov8/of8AZeMqlPr4+/4Oh/Qjj/ggjvcAXsoAcOnt8/0BcusIhfM4nf7l8PwSh/QAe+4AduwAee3k7/zz+P/6/P4BYMwBfO/i7vwvlvsAdevp8f3h7Prk7vsAYtLp8/0Wivb9/v7g7P0BZ+Dd6/zc6vwAYM77/f6Ns9yUuOAAZNXr9P7a6PmcvuIBaOKXu+CPtt+RtNva6fzS4vYAZdnV5fjA1++20OvY5/re6vzX5vjI3fS50u0AZdzU4/euyuixy+elxOWXudzL3vK91e2dvN+Ut9sAYdCzzemoxube6vnG2/HF2e+qyOmgweTW5vrK3/XC2fGsyOeMstvs8vvS5PnP4fXM4PXO3/PH3PPE2/O20e6zzuywzOoAcObC2O+jw+agwOGbu91AfdGmxugHYa3z9/zQ4/fN4faiweMAbuKaveEAZt4CX63Y6Py50+/B1usBdun////o8Png6ve91vG71PC80+qty+oAeOoAc+fY5PTS4fPJ2+8Bf+260ekAbeWsx+QAad4AbNjf7P3i7Pjd6PbA1/MAe+yyzesAduYwlPcZiPErkvYmj/WoxeOkwuJDn/wijPMNhPAXhO4AfOm3z+iFrNkAadIvdNBWqP1ztfwuiOoAcd44edElbs/W5PakyfVdo/IrjvF+sO1QmOtTkOC32f1OpP2Cu/q51veu0PeKuvI4kfCbwO6Su+4hie4KgOwGdeITZ80caLKgzP7C3v1erP3L4/xyrvNHmPGvzu5yqOw8kesQf+kggehGjuaBrOIeeeFnmdpXjdcCaNYQZK+TxfzB2vc6l/Vnp/GkxvBjouxbmumIsuhknOQ4g+Iuf+J6pNdzoNIcas5omMwmbbSax/hGnPVTn/MRd+d1pOF9qOBDht4NZc0yfNgYc9hfkcg4d7owc7j13NKGAAAKFElEQVRo3uzUP2gTURzA8RMjJlzj6RsM5BRPhQPjkGQIyXFGBIdzURDESRzEQVDw/LOJQw6XiFwEBwUR/DPkjyQGhMSliZI/rRohSRvBNbXipNjW0T+/e7kber73ajNkEL+06aP58fvwrn+4TRNoMsjGCTQhhIMPy1rHgRsdOPcBPvGQ68D9b31tmED/ELJjAnE7JxC3fa2mnMP4U9zUFEzAy5TrAOHDxrkNo4P9HvEAUzsIbzkbAWHm6wUaFd9aQ5VGosoY4nzsmodMc76yjz20oYFQjzGzBuKpItM0+xxT2bdgIKlfZCD7WPn8C2YS6vkYQ565gxJChyoe6gTnYbbYsBBTqPrpM8WGhCQkVr3UCTbiXzkGCCg3m1TFXxWRJCFjYVzEWxMBsepRjWIfWQiaWaQjflbZajQ5Sq56ySPeloEQGOjGCkyQYyLe7LJ9kcPJfpE8UpxHOD7xPUtFvKyybRMTEN+KkSZiLYPHhqEPsrQ1HNNYvGQCMep8MxaL+X3FZrMyV6k0i0WPF74BF+ERDxnGbH485HsYiFFRaXmu1WvM33wYDgaD4YPH5vszC9VKKwDACJnOxmhIjFH+k5C0CUhQUdRKghB+QUIozttFjI+LWcoebgu9bKEVdQic5IRG8fhJOcjxlTxlEROpLyejQDi5CAw4REQQHtXGQfL1djJKINyCELGMgD4o7KIgu+jlX99Irn0LEMAARHxbz5MXcQyj8D7xtwRGZqjIZmr5Uk12EVQBIx9fF8ibGEihNOAlN0EGgAgExOPvx0A6sy6BQYAh366VxkCmo/TnJKwiMJIZlApkZA+1Ur0dRSQBWg2AAMn6bKdA3MRCXl+SkGPAfVyCQwgRARuarE93SmRkL7Xc+4RzCySeO3VVIF5CPvfgWhyuAenteom4iY5szdV0+zmhzNfucOmo+IcgBjLPl4ZLXxRR1jRVv/JhGxnZSq08MOx/gOh0KpVKd+/zf/wghKfDdCo1vB6QVVXPHHmV20vaREdK5VneTvyRtpTnEZtwDOgrfuebCsVDjz7ltq4PyZWnkY0EHMRFyLKDxMGIh5SX5W1EZButXKeN7N8n/vownU4v3YqsEiBNPNWFd7pPtXg8GAxl3pRzpFUM5MUFAKyEiP78V/fnddEWbEDTZFUOnvnZ/XVRAQIQZaazTqT84YRhCTjx3q27LkKWVav41TtXg6PCypMXZOQApdyzV4rghP/kRMgW4BMD1kNSNdW6BRRWLn94tp+wi9tP691n3RZwWNDsxyQ7Ai5kpyROvnpGWsXtJgfIS9FFiJiAr2dPgeQmwmEl8fjTu/2EZb8pJ3uYJsIADDu7uJgY4+RijLE41JC7mJB20glT6A8pxmpCTgyotaD8NHFA4oC59DBcr1w00uPayaQ2cShJUWBQgcBosVQmI/g3OKiDDr7f992f7d3AE0rb5Xnu/e564DhK9OX8gP+ljfWJI4eaCyfO55/03fvx43LvM8EunKGc5TlpacOaAg+DRDwo1RcnzAKw7gT/5Na9ePXqrZscEo4CgZPW6iW3JSc9KG2/njhmjmDgPoDz53BS5HfhmEATHR2cUNsuubg8I2pl0DnC9V6zBCuAuYgwXVHdIgc9UN+HmkZYBccGu4AGIrH3qovLK3JYXeao3n5e3RPUTl5zgUDkwsVl9fA+IuW9DBJGAdin5NzAcfB3BCKRABKB4IXqXnlfka1k0jqm1gKPAMAOYgdBQlhZco0cdkctv00CFByHxJ/BH8/ziLAAJpj+zmBn51Q4ul5WW2Xekd2k85QAj4ZVmHNOQIIwNTUQ3a3vI6LX3yTNDQB65rdOiWyIBFmDBqbC4fBAfGRbP9oaOeqOvj2ftBNWo8OxIUhhE5AgjYH4fKXcKmuK+J+vvnuFd1WuTJ6yn1ZWMCawDdBTTD/ldvxOo6x6R1ji5ZuQEPvpP+qXG1HehD2qSESApYfZkkMfCt0G9xOfZZeI38HqIpfJZKRPfr8uLmt5nucMcPGCEAwKFyhEHo1GB0KAuOPETpicHEpsFXV/M87Iu4+ZDJ9JbdV1v17ck/IcEAhBAXoK7IDZnXIwBAZjiSW3yGmL1Y+ZfD5fa2wWZV0vbkmSACy9KY8D2C8CyFOGnBADd66tb+qnm7EjzxfRkNZ3ni6gIhffSpqmWXrTDjXk91Op1GSKuWPUDe4SbqTXdmTdM9L2UstL0trfFy+eLiCyuaZFTb9lh97DDv2NeULX9e9iW0ukzWBjF42uP2iQiPhrV6tGq9WqqU+BoWGqTxj2a8wN4J8mPAJj38S2ZsyIrxLD+XxgDVEu7owoDv/w8NDwYCJB9JDbdly5ZX9I6RltZGWvSPtyVdOUFaPhy36fzgHoCQkCuXZA3Ol0ugtQOVOPmHR3r2R9LREfI/tZUZQcIgtZ0eeTs9/6c7h8pocc9Pf3Q0/tV64we08Ps48SarXRQq1Q6Ps6DsH/GBFxnESUr6yBr41ZGjD1adBF/QBy2LsBkRcKhbGZsRmD3r7fXpF28cFKTskpXxbGxXby9fHKbGKW+W096CEYesgJvTO9121uXvqwmW1vjvyjjIx5EwXjOPwp+g007gwdHI2YWDXpeMkBF6AmvQ52adKEVHQpLm42jQSkH0AnPZOLLk3Hu4H1kosFx7NXz6lVr0N/7ytCQBz6DCR/As/z8ueQcquR/bQvnxVvfNJ9f6C/DOlvNvZ6mMoMkQh+5O1r++LLxezFG191+JtU3wpOf0L1n73Dl8v1Os9fheDLxUdlJ5KiKNrdsq3r+un971TqEOPktAl9CwGD+E8A0YNKpVIGPE/812dR+MKjkorgR6b/P+lkRT/+fH/BOGu2jEDPcdQe6GGHPx9DtfGs3O6L3H1zdL1JuPl5/+vpyuhTP+f5ff01qFar+XwDFHYRxb9mMjaSRCRnTxBpUQyj7/tB4D+DHn6qZ2MpiCttJ5LcoFlTebFEBP4+LWzP34W+B7+v9/zFeFh1pSnJMNuIaU3TmbVbRgUNDo1Op9Pt8r0eAsF2BJaViD675fw8G6IoqQ9H+yKKZuVkhhk7LGcY6HAcjXTRwB8QRbGhqoIgSKBUIu6ALO3gbglIgvhgmfsipnVMKow9cp3XyUDkQAeQTg8ZgAwgmQgSQQAqkFa7kQMPU8PCSCWRSOA6rrnOfDnIFllBFX1UQEtezQviwwaDwXz+z3Hd2nBqmQdhENlWjqzjtJxhNiRoa23bi/F4PASj0agWYQSGAE8sFra93rwm5+IjQSWXluVMxs98HIZ5724OkRgIYSgMdyp6gRhUD4LJDAIRFRu9l8mx+8os7LAMSMR+/r0fEZpGUCF2zTlGlErqsv69pHREXUcCCbuZolRSkHrdHzRHgVHOJkMk9IhEmNm9pE5xKTeqauZC4QaRAQFS4H/W6I1VXjCIEIVpZOyAVDwnFZ3CGKENXu8NHhT5bLAn8t3gB5tRcTnQFMqEAAAAAElFTkSuQmCC",iconType:"img",platforms:["windows"],url:`clash://install-config?url=${o}&name=${n}`},{name:"Clash Meta",icon:"data:image/png;base64,UklGRiYGAABXRUJQVlA4WAoAAAAQAAAATwAATwAAQUxQSJ4CAAABkAVJsmlb8847eLZt27Zt27Zt27ZtG9e2bdv39tNZe++17vNPREwA/dOZo6hWhOxFssnRaNra4w+M3CJNqvLX1D7cxeDukVWTazDpXKDXrxFvXaOg9x1TDg99iOzM17Ak6Ddgc2dA0hCeZoL1k2zImMbPGvABrORlP7jBHi40l8ARzquVy/MEXOFhLqWKGYAzfCqiTGV7cAfbCko09IUA8KonX8cICIGwdnINToQgiO8vz9QMCIP0iXKsgNx8AEuk7YZg2C5BfQ7C4ZSKJdcDZAK4UyR7iSq1a1Uuri3+EZkCgt0jk1JTE8OdfJFJ8PoTsW7ZP5APx45dffiYRFTTlQfjkkQb+RhJRKXNlXuej4iW8TGaiKjAa6Wu6oiIVnBE2W8qc4h+yBVlOa7EehKBaLN8s0kQWiBT8ggShsak6ktL1xfdjQSiXhEIfLFzUrdm9es37zlt37sw+DQjoahCu0LEXLxDCRJM6f84fDIDYybV/XTx0o4xkab6sL0fQwRY+aOA19v6V8rK9sPCrRccPHhoT2meah08ePDArKYFiP+ClSqUlEXc0h5J8fGDuWozdpTE0YNys5WKAjCSLfeg0aMkjm3DVAsybmCjdYCxmm0tZKzFUtQg0E+iv98gCfm90YPY+/v6+0kMNCjKQup8eaXmJKm1e5DUnHml5lPTL7y21f4PrZVq9WF/Ky0n6qbb7AFsVWorAPttTdWKqRpusAYAx+1FlSq63REArDc0VClRZ5VZOgC3/W11xKGu7X43AOlmq+rIVGOJYSoAr6OdchC3OTod9QKQarikhqTi8z8kA/A70yM3cZ67xxk/AMkf5hdnUhkBCLrULx8Jma/fpSAARioWuhR+c0ghErjQkJvhl4hZXYCEL6Bm+5cSVlA4IGIDAAAwGQCdASpQAFAAPkEaikOioaEa2ed8KAQEtgBbJur/YPxm64bFPaPyH5r3ezvr+QGYz+G/on+Z/p35Z9rD8o+wB+lvmZ+p3+Af3D+5ewD9b/2v94D0Af9X1AP8H/uvVU/zfsMfsV7AH7O+mR7Gn7ifuB7V2Yn/RLToBFaF49vT657i4FNhTFMPtqGBnLHb4B0mdEFIcp89CJvbbCPD4/QeZhwQQzZ8BxgBYJstiZqMBJD6z585YDHszJsSre6r3yMDyPrDGOzaYTcIIILf8uoSangA/uHNmzlTvvlp4WxismwIwhrpTbKk5HA99Zt/tjf//B1f/wjF//4Oz7Ro8qdwrGruK80gZGdfcjEjVmeAY3UNq/bKHbPJeZyPGePUJYsf1pTxUT+M/1yY9sp5QEaUI/nWbM+hrV4Wv2GCz8YHB1EU6uczvWjFJmo/ILHBjfR2dpCGtC7aaJrcU2802eJTgxsCLzPMTBp+iLQAcf1z34AZndAHu/MsTUnzhvX5iBLRl0rcsyt8px9H3DpVdPqz9F30dKwOAKELHB71muyZVCqSi6Ijvf/Z3WEYi+Jy9gg4gwMX75I/kfFsZTr7B6AUO5g/bTvaEq7oh9QTCrGVLPJY2tIyTiFf6+rnBPHuJQFG2ntz1V2ZE3kFqOf1JYkNtmTx5bM42JZLzDv8lK+cZlqBMuGj5tTqsUlkszMA9vYVj/+YQXiow3o8IGtvSD8Z9yp7r5vAB/RBYfyMXHGCD2/Vj9Krhqkp9w11usppHaLv4fZw8b3KwrMeg4xklboK6/9Fk8fH9jbQr2Gh3gBR1O00KEtl0DoRpGMbFooOH7dbaaubWVWnZJSKjwKIyP/s2PwjLOOynzDVSVfh9QzyYBAtiUl2qfMRoRAekN+1zwxjUnBZz1zVVnum4pxFz4O/ytYWZA4AKd06/BG2+/aqSmflFZELL5IvsKadrnEUwQiAtJkrfXIu0S5ATyAZ8U7ztY9txpPVO65FVvH6NJPkeoxN4DJMkkeJyGkxeZyTOKOXTYLyG410M+lef83/R1x+Fufa2JlrS4UJj9uQp/8XdI+6n2yYec5INem5wZ3l+51bAhgdYqwdZhQ4nrP/8zviDM+SQAmVegbwNZIXMtlySH9p0fzgvNUc4nPYjSzoYgAAAA==",iconType:"img",platforms:["mac","android"],url:`clash://install-config?url=${o}&name=${n}`},{name:"Hiddify",icon:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAB7FBMVEVFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lFX+lHcExr5uSJAAAApHRSTlP/9/1D/u1CWC8ucnhZ6/xaRFdxb+p5Avtw6Ol3+AT65ezz5w8VgE0G9dkeJgvM1u/uUj16FyqyydO529+RLX0QU4ufvOCS+ZfkxWJnKGsJNxwrDDA1OgHy16j0W0UWNMPm44Gv2Jrd4qmP9rjHjtGYg4i2u6HKz10+JDMZXBh/HUEiSyxQX0Buc1QgSU4aoMTxq7UFbHtRMjwDCA0SShHOtCc2AIfjeMgAAAAJcEhZcwAALiMAAC4jAXilP3YAAALsSURBVGje7dnnUxpBFADwBwgYMIaIgEhTukiJAmqMMfYWW4w9lvTeeze9996b/2gYFO7EW7LIvsuY8L4ww+7jd+yyFZgXISCH5JBVi3xT6mQWXEQ/1WqAkBoVudkQglhMIiL+niDEoxAPGdhjBWTkmssIgIt4qmqBCykKsq3FC8jIlpJNALiIXtYqBWTk0aEQpEYeW6T/bh0AMjLzsgOQkS9hGwAy4pgAQEdGJkVAqgxADGbIemkO+fvIR8drdGSmJTDxHhdx6rpi2d1ORMTifh7P9n5IvqVkjfTuK1/Ilsi4wVjIFHH01SeyJQpuzbWTCHvmyOi9I9wz8xC91mY2myWpYZbU3ckY8TXLeQ/JQ+b1vZopjUYWD8XCiyYWN3yZbrj7rx5f0hJ8hNWu/vJBMyAjznBXap+yRiy3Zpf/cBgjlZ1jkB7xv9OFdTp1LEwmdSJMalU17SHo89YKwSHAQz61W4WHidxEh0RrCGsrD6kuJw3GMSpk6BUpn4esyyNVojs6RIspkB1ExECFbN8gApIvF6G5ckgOISMFRIRwZvQ8bnBVIiP5Z2Pz0NE5TMSp2xUvu5AhIqVHLO7uxTItGlJ5IjljZ4goaZEh/tpUgoOMLFmbUJArJ0uXlBWxQrjTr+fhuZQy9sjtZ97UMhVjZNkVFXtkVHFGqAJTZLBZeAlniOi/BghlHLImW+Qt8QOoEBkVQtxSsUTKxEDW/gdI0apCIA1SIgai/WeQ+2IgpmT+8As05LQ/ka8CNMTaHo1Epqcjvh4bHgJg3DseDI63WQET+XNQIsU5hBFyoLPx+m5X46lA1kgpsaStejF9cCMNUrAi5Fgy/0kHGpLhBEk+zsUGHKtFa2UI1Q6SDiFefsMDdt/ETrNbKcsS2UmBbM4WsVF0PCKiorkelFFc4KRrrj6Kjj98MVmpKc1grCGO0gHuXxnivHL+abLSpQpSpe/w84fwwmd8o+dO38O1wm1R7+bdAjTtFz7Fz/76DY+rJdzy4R8QAAAAAElFTkSuQmCC",iconType:"img",platforms:["mac","android","windows","ios"],url:`hiddify://import/${t}#${n}`},{name:"SingBox",icon:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABdCAYAAABTl8MxAAAAAXNSR0IArs4c6QAAEtRJREFUeF7tXXlwlOd9flZ7n1rtSisJ3UIcuk8kGSHMZYNjY+PaLq3bSYbU6djTdNKZpjOdNq2dmU4zjRN3WjexY5ohxsZxjF2gNGDuUwgE4j5tjO77lvaSVrtb/16xqgwrfceeYvr7B2b0fd97PO/z/s73XYnX6/UiisXtdqOlswcH687h5t0m9A8Ng3ocZ9AjJyMVjy8rRXHuIsik0igeBf+uSaIVEFonYzY7dh44iqP1jZhwuWYd1eLMNLz6R88j2RI/74GJSkBo8ls6uvHeJ3vQ3NHFa3mplUo8/+QqPLF8GTRqFWIkEl7vRdtDUQUIsWJkzIaDdWex91gdnOMTguZLGhODjJQk/MWfvIhEswlKhVzQ+9HwcNQAQqxoau/CB3v2405Tq+i5kUgkiNVpsXHNCtSWlyBWr0VMTIzo74X7xagAZHBkFKcbr2DPkVMYtdqCMgfEjsWZ6Xhpwxpkp6XMG7ZEFBCXaxJ329rx2YFjuHm3Ga7JyaCA4fsI6RGT0YAnaqqwuqoMRr0OxKBologBMjJmxdGzjThY1wBiiMfjCdk8qZQKLMlMx+an1yEzJRlymSxkbQX64bADMj7hQmtXN3buP4rbTS1wOMcDHQOv94ktcbEGrKkux7cefww6jYbXe+F+KGyAEAOGx2y43dSOzt4+HDh1BsOjY+EeL4gt6cmJ+PPNm5CxICns7XM1GBZAJt1uNHX0YGLSDY1KBbfHg+7+Afz34eNo7ewGeePhFNIjeq0GT69ajm89vhwqhSKczc/ZVsgBsdqd+KqtCwa9HjExkmml6vF6MT4+jrrGKzjRcAF2hzPsk0K6JH1BEl7dvAmZqclhb99fgyEFpHtgGCNWB1QqJWazbWgr6xkYxKf7D6GlowvhDq0RWzQqJV54cjXW11ZBIY+sMxkSQMicbe8bYmzg65TRtnbiXCMO1dWD3g+3UD+XZKXjlRc3Ii05CZGyjoMKCG1DI6M2tPYMsJWu12kgk8oEDa6rdwA79x9Ee3dP2HULLYJYvQ6b1q3E2uoKZgCE228JCiA0+bTC23oGMDJmBwHjExqUVqMWFOybcE2irvEyjp87z3RLKH0Uf0yUSqUoWJSN72x6CkkJ5rD6LQED4vF4YXeOo6W7D+PjLvhLrkilMcyqoZwF3xXHdEv/ID77/DAzk8cnhAUag7HlmWINLPRSVZwPnUbNu++BtC0aECIBsaJ/aBS9Q6Ps/3MJAUFsUauUoKgsX7E5nGi4ch1nGi9jZGyMmczhFLlMirycbPzps+uRmmQJeb5FFCC0JZGH3dE7BJqwmVsU12TJZFJo1Sq2DfBlC4Hd0d2Lw3XncK+tHc7x8Hj3M8eSYDLiubUrsby0kLE9VCIYENekG/faOtDS1QejwQDab4UKhTGUAtlCjLTabGi8cZuxZWg0tPEvf2OiRVSWv4QBk522QBDT+c6RIEAopXqorgGH6y+wyOyyogLk5Sxk25BQIbOSwNSqVJDL+bOF2u3o6cOx+vP4oql5ztSu0D7xfd5ijsP6FRRBLg86W3gDQqzYsfcgvmhqhfO+giWdkJmagtplZYiLjRVkSfkGT2xRKORsG+Prs5BVZ7U7cP2Luzh0+izTLeEWGnvewiy8vPFJpCVZePedq5+cgFAa9fCZ8/j9iToMDI8+5EnTKifbfVVVBbLSUkWZiMQWAoMsGSGe8uSkG32DQ9h/4jRufdUUfvM4JoblWzbUVmNNdQXrf6AyJyAdvX147+PduNfWOc0Kfw2SclYqFMjJSMPqxyqhVYvr2NR35IL8FjKzHU4nY8u+Y6cxZgtOxpHvxPr6vCgjDVteeAYplgQWsxMrfgGhfbr+0nXs2HsAw2NW3iuP/A2DTodnVq/EgkQLbyvqwc4TW/RaYWxxuz0YGhnF7kNHcaephXefxU7cg++RKW/QafHSU2uxorwIVAUjRh4CpHdgCO/v2ofLt7+Ey+Xf0Zvb3wALl1QU5jPdwlcvPPjNKb9FDo2av5dPltiEawIXb9zGgZNnws4WGgP5Lfk52XjlpWdByp+vae8b/zQg5HA1XL2J7bv3s+rAYEhivBnPrl0Fc5xR9Odo5ekEsoWUfv/gMHYfPo4795rCHkGmwVJt2JY/eBq1FSWCzGOJx+Px0rb0u32HcfL85aAXGpBJu7KiHKUFuczMFbO7+rx8oQVwlC5uuHoDR+rOwmq3hx0YGmtp3hK89vLziNXpeQVZJR09fd63tv0WLZ3dolcx14u0bWWkLMCGlTXQaTWCVszMb1MsjCwZ8vb5bgXEFoqF7T1yAs0dnZh0TfqNt3GNIZC/xxtj8eMffA8WUxznZyR/99a73i+axRemcbYw4wFSequrK5GdnsrMW76TOrONaUtMgN9C71O4hdhy/Ox5VjMc7ghyTVkR/uo7mzmnS/LyX/+jl8Ld4RICYnF2JmrKS5hFJiTQ+BBbtGpBEeQptvRjz6FjaOvqDquXTxWU77z+N5BzZCQlL3z/b70SAdHXYABHqzw+zojaZeVsKxNbgysmJkb9p8DomYtXcPbyVQwOjwRjSJzfUMqk+Ke//C7S09PntDwlG1/5gVep0XJ+MBQPqFUqFC1djPKCXOi1WlFbGPWLdItWIyyCTGyhipdDdWfxVUtbSNlCbXnGHfiHV7+NoqKiOQOykhXP/qHXlJQCuVIlekICAYssL4vZhJqKUmSlpojewhhbFPfzLVIB+Ra7Axeu3cSpCxeZYxls8bjdcNptkHrdeP37f4aSkpK5AanesMkrlcmhizNBazAiRkQ4PRiDoErCgsU5qCopBDFHrIhhiy/fcvB0Pe61tgeFLcQKt2uCgeGenGTb8ht8AKla/xzLusbESKHUaGBMSIIsQoVjNJnElrU11UhJtIjFhEWdKYJMfgtfo4GSbDa7A1du3cHR+gZQ7bFY8Xo8DAjXxDjo/ySCAaGXSNlKZTIYLclQabQIt7L3TQAVRVQWFaA0L5dNrBghp4y2Q6F+C8Xx+gaGsOvgUbR2dnGmph/sm3vSBYd1DLRVzawxEwWI7+PkyKl0esYWAigSIpPJmCP11KpaJPBwqGbr47SXr6J8C784AbHF6aSqyss4ef4i7A4H5xTQ5E847Bh3OqZZMfOlgABhH5JIQJNCCj9SVhirKlSrmHlM+iWQk7YUiSY9xbKTnNM79QDVHFOw9ROqE+vqBlXY+BNiA7FictIFdkTYjwQOiO+jVJhsNMGYkMhAioSQHsjJTMeax6pYMiwQoWJvjVopyKKkRNj+k3U41dD4zaoXYsW4E06blTNOFjxA7o+ezGJTcgoUSvEWUCATSe8aDXqsrq5i59PFFFf42qd3Kd8i9OBOa0cXduzdh4GhEaYjHDYrXOP8isSDDohP6RvMFujjTBFT+LSN5i9ayHItlJkUEw/zAUNMIcYI+cbk5CQrDD964hQ8Hv7HKEICiA8UhUrNdItUZIAwUKbQ+wkmE9avrEFivEnwSp/ZPuklqkGmbZELGFIPbo+bVVS+/i8/EzSMkAEyTXuZDLHxiVDr9BFzJskzLyvIY6GXQI6o+Y4kUCXJbBlOUuhUzkqFgRQL+/GbP48uQBhbYmKg1uphMCcwZ5JrhQkagYCH6fjA41UVSEoQf7UGmSu0HZIPJJN+ky1kbVHZkS8qTpU4UQmIb84IjFizhfkuYnPoAubf76NUrFddUsz0CyXBxAr1nw7wsAi0RIKJCRerwJ9ZUxz1gNDgKQamMcRCHxcPWYROIZH1RAHK6tJiJCfEg3wPoeJzCmnSqeaKWP/gqa55AYhP4csUSsTGW6DWkb8Qfr9l6kCnFsuK8pG/KIc5lnyFtqbB4VF0DwyyVK/JGIvUZMtD8bB5A4hv4DFSGTQGA2LNCaD/R0JI4VPya0VFKUuGzbWVsrCHy4W2rl5WDEE1XiSUcs5KXcBy+DNl3gHiYwuZxeakVChEVjIGCuRU8ZoONRVlWJSZ7jczSWDQ/SqtnT2s4mbm9vRIATKTLXqTCTqjOSIKn7Ywil8tycrEiooytup91iDlQVo7ujFqs02zYuYieCQBmalbzMmpkIsssQwGW3RaLdbX1rAz6XanE/daO1l4fbaj2I8sIP/HFikzj7VG4SWWgQIy7dBKpVhVtQxSqYwzIDgbIONfX6z2RjQ6hmImieUntDrEWZJZ6CW84oXTZmPZyNLiEk5HdlZAvj4f88ZPo9BTD2QyCYw4SxIDRyIR7i8IbdvjnpzKWbhcyMrIRFlJAIB8fcbxjTffEtSFkMeyBPVmlodZ6IVlJhPvZyaD77eQfnA5HXA67NOZvEABGRoZwU/f/qWgKZgXgPhGRM6kOXkB5ApVUMP6UzmLMbjpWMWMTF6ggJy9cBF7Pj/w6AJCI6PQizY2juVaqCwpEGE3S1AJjs3KEkkPSiCAjIyOYusHH2FgaEhQF+cVQ2aOTKnWsNCLQq3hVLr+ZoQAGHfYWSZvNnNWDCD0rb7+AfzPoSP48t49QWDQw/MWkCm2yKAzxkFnJLbwD70QCAQGFabNJUIBoczgV80tOHDsOHr6+gWDMe8B8TmTVBtmiLdwlrlSMRoBQQUHvsK0YABCmUSzQY/TDQ24euMWO1wq9j6vec2Q6cmkwj0KVOoNLAnmr8x1qjDNCvqXr3AxhAp57HY72tvbMDg0yFhBufRA5NEA5P4MUH4lPiXDb9iFtin7mLAi6ayMDJSWlPq96IAmvrevDzdu3WRXeQTrPshHChCyuuJT0/2WILmcTtitwgBZkJSM6srKbwQ7aSuyO+y4fuMmunt7GCPEbk/+mPT/gMyxv1DufMO6J6C6X2VPLOjo7MTVG9cxMTERkuNuvAGh4wjBXAmB7LOzvRtshlA7xlgjMjPSGRNa29phJZ8lhHdxqRRyfudDap950TvXj6WEYoKFfjMUgAjtQ6DPU6Xkj17bwn2C6pmXt3j7BgYDbS+k7z8KgKRazPjh976NpUuXzn3G8LUf/r334rXrIZ3QQD/+KABSU5yL7/7xS0hNTZ0zAiE5Wd/g/dFPfsZumY5Wme+AKOQybHluPZ5ctxZ6vX7OaZYMjYx4//lf/wNnL1wKytm6UIA6nwGRS6Uoz8vB5o1Pse2Kq2qf3XVCnui7v9mBhouXMRyBuwy5QJyPgNA5R51GhdysNGxYuZydvtVquY+fT98GZLPbcenqDXzw6S7c/vIuKG8cLTLfAFHK5chISsDy0gIU5C5BVlYWdDp+v+7zjfuyyA7v7R/A7n0HsOfzQxgeefhKv0iANF8AoXqBWJ0G5UtzUF1WjKVLFsNkMnFepzFzTv3eKEeHHK/duoN3tn2AL+81By2eIxbM+QCIQiZDRnICakoLUVpUgLS0NGg0GsG1aLPeuUhsIf+E2PLx7r1wROD3PXwARjMgxAqdWoXK/MWoLClEbu5SmE0mdrRBzPEMzltJKQdALPnJv/0CTS1tYhd5QO9FKyBUXb8g3oR1VaUoLixERkY61HQlYQCX+XACQjNJbBm1WvGb3+7Ef/3+AAvAhVOiERC1UoGqgsXs6ENeXm5ArODUIbNNNsW8rt24jTd/+Ss0t7aHDZNoAyQlYYoVpcVFyMzMZKwQsz35m0BeDHnwxTGrFe9t/wi79x0M+h2N/joZLYCQk1dZsBgrK8uQn5cHs9nM6egJXbWiAKFGKGxdf+ES3t667f4tB6H7GYlIA0JOXqIpFmurSlFeUsz8imCyQvSW5Q/t7t4+bP3wYxw/fYadxQtFbiVSgLD7HeUylC9dyK4kzM/Pg8ViCTorggoIfYyOC1M139v/+T4IoEALAh4EPhKA0Pn1BKMBq5YVoby4CNnZ2Sz0ESxdMdtWJnrL8vfBzu4e/PvWbWi8cg1WW/DuyQ0nILQ9qVUKFC7MxPLyIhTm5zNWcF1eKVRXhAUQaoSuNTpWV4/tn3yGlraOoKRFwwUIsSLRbMSKknyUFRUiOzuLhcsD8SuEAhVUhsxsvLm1De9//BlOnWtgbAlEQg0Iu8mBfg8kOx015cUoyMtFYmIiFBG4DCFkgBAA5OUfO12PD3fuQnNb26z3TXGBFUpAaPUvMMfhsZI8lBcXIjtrihVceQuuPov9e0gB8Xn55ER++OkunDhzDhTmFyqhAoQqQYoXZaG6tBCF9y0opVLYXVpCx8L1fMgBoQ6wnyiy2dBw6Qre3fYh81uEmMfBBoS2KPIraksLUF5SFHFWBN3s5ULd93f6jdvu3l68+/4OnGloZFsaHwkmIORXFOZkoKasGEWFBcyCioSuCJuVxTXB7DcQHQ6crG/Ar7Z/hJ7ePk62BAMQOiwXbzRgTWUxSgoLsCgnh2XxwmlBcc0N/T0sW5a/jrAf9OofwM/f2YpzjZfmjIkFCghd5VeQnYbaZSUoKihAUlIS8ytC7eTxAeDBZyIGiE+3UF3t3oNH8Itfb2d6xp8EAojZoMPKskJUlhUjJycn7H6FUFD+F99EwWJISrZpAAAAAElFTkSuQmCC",iconType:"img",platforms:["android","mac","ios"],url:`sing-box://import-remote-profile?url=${o}#${n}`},{name:"Shadowrocket",icon:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC+lBMVEX///////7+//79//+ZfOn//v+UfumXe+f9/f9crPCZe+n7/P5Lu/Fmo+/8/v6cd+b5+f339/1ooO32+v16lOuYfeqgduqZeedQuPFVs/Bfqe92q+1xme10l+1+j+yOg+qdd+n6/v7x9/318PxStfJJvO9Qte93l+uQf+nq9PzX0PRiqu5vnO2Bje2IiOv8+v719f3y9P3y7ftPtvJNt/BVsu9Lue6Hiu2RgOubfeqbeeqXgOideuigd+f69/7w+v3z+f3n6/vf8Prp4vnH6fjp3/jA5/fXyfRZr/JHvvFXr/FrwO9Rve/Due9fsu9lpu9fvu5Yse61o+xum+uLheqJkemgdOmnkuiUe+j3/P71/P75+/7u8/318vvj7/rc6/jb1/VXsvLHwPFzye5ipu2Mhu2ymux7kOyEjOmeg+emieagfuXo9/zk9fvn8Pvt6frw6PrY7/nV7Pnr5vnJ5Pfm3PfE1/a72PTO0fSz0/NKvfJeru+Twu5roO66su1osO3Eru2Nq+1qq+yMpetyoOuCm+utneqajOipjeehiOeihOeLhualfebx8Pvp7vrN7Pni5fnV5/fQ5vfg3vfV4/bD4Pa54vXPy/OCz/KnyfK0xvLTw/K+x/GzvvGHyfCpwfB6xu+guu/Kue+Mte97ku9pue7ItO68qe5ztO2ur+1Yu+yXsuxuseuKmOuqpOqWouqtk+mWk+iKjObs9/3n5fm55fa+3vbX3Pbk1/a02/Xg1PWv3/Oc3POt1/PWwPOS1vKj1PKd0fKtyvLPw/GcyPCKw/B7ve9Cve+Hue9pxO6Cwu5zwe6Dt+62sO6Zr+6ese1/r+2Eoe2Truyfq+yapuyCpuy6n+uOnuuZm+uYleuwlepypumhkeiSi+iRhefQ1/XR3PTay/SWy/O60PKZz/KPyvLIxvCVuu9bt++Lve13ue2zt+2msO2Ro+2ms+ysqux6luzDp+t5oOqmmuqNhuqxoumkn+m1nemviufl+fqo2/S6v/Cuue2yuOxBqZCiAAAHmUlEQVRo3u2ZZ1ATQRSAd+9ISALpxJgASYBAAoGIIEW6ShdRpAjYBQTF3nvvYu+9995777333nvvbcbNJSjqDBIu+0u/yeQ2JHnfvvf2lpsLsAG4QYr/4IYkAW6aNcPrQNEz1x3Kis4AWGm+I+FAXMKOZgAf5Igs17i4uC5xWW0gwITT+BquXbrEoYfroUgewILTlsW2trauroaHbY1oLO1HjrJIkjBxYoK/ra0/BgsJWeMXVyhbtkKNz+GZ46v6+6NRpMUlILKGwVE10glCRuuZboZxa0tbKlet4FvW7UgbBoQkAzSf7qb29Z3pbtk1Fj5dplarj7SG0HTaI4vabVeGJS2MbX5qtaxofZrPlKllD6MJyzlgm3kymWxeJFnkT63n+TWUHWluOUnmPRQwcROrSGoQjkv0S0ra6WSpPMC4xIYNG94W/3be7Eryi59nsf3F+TA7Nv5xZfhbA9z3x8fG3raxUCbru7LZXddDgvh11qhgsbE921ho+T5is9n7wiEC/IK4G7sre69lutJOx2b3bAf/lIDRPbuyl1a2yFXTXpRIN7FJQqKVxSjcazK7yeXybZZofb2Fcrmu3c9FlZHBKpSA0X3k8qPOgD4ddTr5QWdIUmGbj98xceLW6GYkMqBHxMFsXZ/R9B21u2XrsjsTVD8ytxzy93f1t03IWpdhmkF29exJBKRdLXtudfv6VD/C7/q5VfB1c/NVuz3cmQmh8V2uBeo1jlud+4g62XnbusbGJx7edXd/YlLDxE3U/DO6GaZA10FMQpLOhKEj9ZfK2Y/bRRC8NZ2XstkLK0OqXlyuqCNNB4yYw+VeGWUYEbuzq9uPIiCDALzOOl31zkiMzPbdRXt5NCUt7Lmik+5GnUg0iSBIBlpVa46KuA+oGkbM6S46GEFTMrZfd9GD2tR+eM6zXwdIFY7kzUj27E31m5wkEtm3oCnpkOyZvJsqTItTjpqbJonTDEfH3uWNi1jUvd9YQI/dyZ6eHahR+Wdz7aYaJUB83G7uceP/F5Rqvw40N65ZDp6vxxqHT728ztYBFBtSvRTTWNTyGn7O02EypCURL0GSesZxp9UBAYuGoQFrzMWAnNQNxl3ZubeDwwweSrDUUCHOuQNqpt7LlTlD399v4NFjYEqO8piAcgDBEgeHWTa0UqnTF3XYGRrjrb2qZWqZwcHMwEDtm5bwR0EdlohpSYafcnQ8LTZJQNSAYGsOh2PFCX7XFpggZ6BPeNOSVDqlcTwuAIXUndJ4SH5+0/Mx3uAH0zSavuUBLUl/jeZEbVAIhGGtoqJahRWd+GQ7+hI7uxPFXvUgiV3fOnQluSiTv0gu0JQsU+SeKV4yLdfuGb1yDV+mUJwVg2IgvubOXUFPUueCQrHCu9iN5zmahpDeEr7gpSh+noIzXl4rhtGRlF+U57WsU7Gri9cp1Svvm7D0DsGTvIDUTiwGo7ie8Cak5uV9KfXFPby/Wh8wlQeRpNhcpq4OWD2htJIxq/T6F8K/XrpB4SJ9wKWRsFR9ES4fOnTVyJJ8de2qgJRFAkiWQuIxNGVoNaIkEkajnJxrDUAp8H6fknKpEigRLS+9TVkuKIWkwXWl8hgLlAhWD+Xba2PMd7COKQOve5gzo2rm92TY1cDAgS1BCWk5UKt9421+tYIDtQOEJT5tl2sDB1YxW9KIydT2MLUEAlDOpe1vxnJ1yxVtipbJjIHmtmQBk8lsZIzmUsWjWs1aAz0A/CXVWjWreVRxMZogmlN6NbO3rQFMCXMCyxi/SbB1OpM5oMg1CQTCd+np6RUHF5omMCWcBSwzJXVrSSTMxii+dXq6tbVVRYlEEtyI8VNC7Am2tkJYI5rUqjl7AfpAYzPPFOgzGMXgSK2tJFYca4MFvWoSw4KF73sMNhnQgcORSjkVKwatNHfDbzVEKg0JCUHf5+cPvrxgT0xTDidoyOxhpjxnD+FU5Kyc0qtx0yZ8qTQoKCgESQa5mClpiyR8fn7Txr2mbGwZRkA4n68KUfFXzt8cFbV59kopPyjIKgYwwnzax/T6MKhJiJSvUpkvaUrFbxWG+gARwOcyP0RVRsUPLcjn81VIqDqP3jMABcg0/8Og/EE+ZvZEGOUj4KEj9YJ6rnKZH1pGFVqmTCg/DT2FnvcpXNIkOjLQQt8sBLRp9aoARUeElklLK5jvQsktTrmNrz4WpKWlhRZ87BVlQxBIggOWT/tb27ffau/CMpURG7AwPE6HUQLx5QE/rdu6NTocp4R0isxyPXAgIWsEga9UZHQNf1uEa9UR+IpVuSr6eWNxgm9Z6lcNPPB2+smS7o2InI4OmwAm1uyPj98XDqD74aT4fWKAh/o9DTehAQnX62IXugM8oLvAC1tQvekjRze28TCqD/cklQC6nWdfD+Chnr3oSn3KdkV0sg7AQ8Qcz+Q7EEBwJzl5lg3AxFSNZokzAM6nHTUdAC5G9rfrfxOAGy9f9h0OcFH7uSL3aZj3mdy503gEwAW695h6o1OeYtlIiE0CBS/0+osX9fonNgQ+CRhzLUefoly1FiAJNmx6aAOVykYsAqcEtL0qYQ6oC5EDJ3usBrcHuBHW3M4A2KkrBNiBEAL8QPAP8x0ZyfbHp+5ubwAAAABJRU5ErkJggg==",iconType:"img",iconClass:"rounded-md",platforms:["mac","ios"],url:`shadowrocket://add/sub://${i}?remark=${n}`},{name:"QuantumultX",icon:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAClFBMVEUaI1MeJVcdJ1geKFscJVQfKV0eKVkbJFYbJVUeKFoZI1EfJlgcJVcaJFIdJlcCgeoAdeQeKVseJlUAcOIAZt0Ae+gdJFUBU9MCh+4ATtEcI1IBlPMDjO4Aat8BVtUBbeMAWNYAQ8wAZNsAWtgAUNEAfegAeecdKFkaI1QBf+cBXdkdJFQBjvEAd+YAc+QAP8kDiewAZd0BYNoATdEASs8ARcwAhOwAbOEAYtwCWNcCSc0BmvYCgusBZ94BUdIEkfECiu4BgOgZJVcAYNwAlvUCj+8Ehe0AfOobKV0BhuwBXdoBW9gATM8CkvIAkPEBVNQAR80BQsoAQcoZKFwYJVUCnfcFj/EAaN8ZLGUYK2EcI1MCceQAauEYL2cAmPcCX9sBXdcAR8sWO3sWL3kCnvoAmfUAdOIAV9QXKW0cKWEYKl0YJVsaJ1oDYdQCStAPfc0BPcUEQL8WVZgYPHcZN3EZM2sFl/UClfUBfuoGadcBSc8HY84FO7cPVK4SOpEVLnMBi/AAcOQJiuESYrITXK8MQqoLOqcOQKQOMY0XN3sYP3oXNXUXJl8Bh/AEle4IkOYJgN8EctwPgNEMYL4Sc70RTaoQRqQSUZ8LNJ0URYEWPYETNX0WOHkWJ2MCmvgJhOQAcuIHfOEIed4LhtoLgNkGbdgKX8cESccRd8YNasMSbsIJVL8QZ74CObwNW7kTZ7YUaa4KRK4QWasQS6cSWKUUWaAOQJ0SP5YQN5YWRIkSOIcSLIEXMncVKWgXMWMKiugEddgCVNAFW88EWM0GVskGUMUFTMMFQsIMU7cIP7IHOa8UYKkNM6QPOp4QTZ0USJUYTpMRM4UUK3gVMW0AeukPhNEPdNAET8UCSL8IRroKTbkOMJjfGjaeAAAJHklEQVRo3u2Z91/TQBjGA1ZoC01pkFIDyhBoS5GNokVGWUVxtihDUBmCgKAMle3ee++999577739Z3wvZ5u2pLVq+M2Hz901b+7yzfNeEjIIWW9u9QJZrZOxrV3JuFtOiEyGIdCysX+B9HbgpDc/AoiVA6chMhtXMoeQXqwgPb2cE/S06e9wJEB6XBgiElmGuCOO1+OYiHtJRKDKzc12AEQcQ9xEjmPsEvxy4MQxxXEML7FOnBZOwd+IE8LtSzatqqpKjyM8Q9gZyv/Rfqr9aj4i8grBLnCZtnVGVNS4qKu9e/EOYY+zslPAGBc0s+wvnOA9ZfcZ1bYFajACjLFBQQmv9G4ii75Ma1nYsLkQaATeW6ihoJotrJ+ymYBISEiY8rXMDUbgYVDjM4ItoG5RAkJoCAj/wjVbsNymLR6LGGOGxucu0Zt64fVKaNzMRenq6qqEqOUGAOKUyp4gxJj43Ny4I2UO+gEEZF7Cjm0gSu6RYCQIuYjPjevbN3mJzMNZCHJpgih/hTghSsYIMOoYRHLIo5uU0g5ByUIstke4OiE3USfYqIuL6xuSnOw7uv9mPdqY83IOol9SVwcuQkJ8fSsrAwc83Em5ufIOmXYOu0CIwAEjwi/oPXoCkgwuIFGVlYAIH35/mYeI/3Qt8kVzEcjYGB4bm7hJxr8Tt07f0cAYghCTgBEzfRnFO8S161F/YECmYtMBEdNnQkc1yTcEDq/AQOwiODimz7AJE6eXuor4hICUHjcfTEYuMKLfxIDBHdVKXiEgSnYhfVJ6IsPo129wgPe8Q6Uk3xCSXHY/0WQDGEWRXh3VFMkrBGS4EBwMCHAR4O3tHenlta6UcuUbQq1o6zOByVRR0dSpXgPDfBbKeHfi0WsTQmAXXmE+Ptl3l1N8Q0TUshbIFHYR5pMdGipdoCfJv4E4uu7pO8AF2BgINkLT1Oq0fdvllHMQD0uRLghkJbSMW5edLV4mF3OkUumgVQtrSYvutkMhQpJMS7g4KXSAdQxkXGSHpkmlSYOyVn0uJl1JJ8b+AURE7jwU5hMKk5EGiByFYu7aJiHPEFDteR+fNOwiJzo1NWJPqdw+hCT/HOIB0jTeVacxCEV0qn/EqD2NjiB/7gTLcP5XpqL9/SMyUw42e/KZLixSWLo/K0uhSAUb40eN8juuJ/mHUFSvBatQpiBVKSNHprx1cekJiKZxrb8/sjHSz8+vvhhml28IiKxdEBEBNvz8ZmesbsAxniEg4fI9kClAzNKuv01BgH8IqHYBZCpjVkXFrAZPNsozhG6cPzujQqvNW18sxxHeISDRmZKKCm2eljXSAxB503pteXnexgLSAwf4h4Co5hf1RxsK4CpPOnfcuxCetoI4rjkFqwQqo95g9LQ+RX4NNQ82b8qFcvEk3LtJIEC1RX6w0PErMPUQMq2c2RaKy5llTwq2CK2QWc+2BG6whLYQudBTX1Dc3NTUuLxJCc5tBmN5ujDLQgSBXYcWL1tAUIsK1CDUsrWu+e3Zo/XrD8yfv3r1mrPFGnCAB7L7ai9itYZgfgvQb2iETItrgaag4WAmnHglJSXa3XnleWd19L9CULHyISw+Ex3BXApnZ5RUaHeXr2kibAaDWIADEAtB67ERDMk/mZqKLrgp6DKCzvHV2/4G4o4h3V1AkRsuwv9Y/N8JY7RrGmmBzQYwio2gJc50CbAT3F+Ia6FAdW0fuluIBgrGzC7ZqEfr8UY0co1GI5SjP7lAIIfKMYRTdPExaVJS0iCFQgE5Qxi/+aUAwHInapubi/MLDLU6IxygEgldqNEIgCxHDAySC1jZgRi3ZKvTkqSAyVJgN5kN7i7m1cs3HjhwsP7o8ZMLFl7c8uba9tIVTQg6zaAkSUpDCQQURf0Wotq+Ljt7jpS5xcrJUaTOnRtxvMA8jlg+P09bkuGXMn5uqiIpTb1v/7pDLW2HD5942rFp8+Yr17sMABH8DkLnb/AK+5idrVbjOzl0s9hYaB6n21iep62YPTLTPzo6S5qm9gnzivQOmDghJjFx0vABgfceLyqrFfwWInztDbfWA9Gt9RyEycnJueRpTrKm+hNAMvwQRJElVYcCZK/34H7D+iROCh8wpL9vSNyRTsPvIMTOlnlFpmcEdRpgco7ly9mZrK4HyCy/UTaQPmZI37qhrwyOIXTB6YCAefC4gzEwN0n7S1WWPS7lIUhKpr/CChITHDsZQfr2jatLWKqjHUGMb1r6BaDHz0jmoQoo6i06tMLkRXO7vlybYQWJtIbktrbO7HLgxL1wRdsweOUwGNwUIQxQTuZrrPqIt63ZXQIQSNcgBBmIJh5DcLpyh04JWrzSPkS162kMPK4Pw4/rRYiybjubLGxF8GJWRndIHzMkvjUhKGqpu12I8crkdPatAPOsC8myESTMxgme+PTwXxBwEtTeZQ9Cr3gIr4JiLTCRG/LZ1WzC7nBChrOQsVEvV5oglhIINdWbJqNXc+nYDUzNvJZSmugu46XMkbbpYiG5DGTGDZWk+0hIVuc906szRIGZ6ffakwtCV58ZP747JNwSErXVnRPSdYJ5Qcdg0hPRAXC6QCVUcVAk+QvvRKSuYtOFJ94K8pITYljEvmpElGB4DyjmhhAq3bZja3OykqRzsuE8KQpAl5XY8AGB5jkZF7VU0h1SKLmemxyS7Is4KGnD0xMTN+tQPy4nhERcu+Jaw8XzC09v2HC4ra1tOmhyYCC+rIxJCBr3/JaYA1L1LY55UQ6U/phyIl8CccKOJIU0sHQ1huqCguIPH27u2HG9s/PK5ctLFp171t6+tUrFMaRmcSt8uWBeM2MzIx7sEAPCvlRCdNJoCAlILJbQYjFNqFRGXU3Nyl0rdVy7Rb8bmzAFvizEMxRfMFN52VhY6BDS/TzAQlRouIwEwfcL5jsMwoweXfn9FsGzJLva4bsY4oAblDPfLzuMvENWPodPY+jDFcaEPH7nTvAu4dIZUfgL3JjW1vgji7pUEv4hkpqlp2aAZoKeXS2roWkI8k/RVd248f59VdWtXTUSGkT0iGgNHHnokKfFNG3UqYgekUBl5tE6gPS4VCriv/7rvxiJf4krbmq5fkvEEmhx0LblDcLVsgEeIBLkxA5EYr0xCer7E/a5ifsRqUkJAAAAAElFTkSuQmCC",iconType:"img",iconClass:"rounded-md",platforms:["mac","ios"],url:(()=>{const e={server_remote:[`${t}, tag=${r.title||"订阅"}`]};return`quantumult-x:///update-configuration?remote-resource=${encodeURIComponent(JSON.stringify(e))}`})()},{name:"Surge",icon:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAC8VBMVEX///////7+//+2afRfle+yavNhlO9yjPBrj/Cic/CYefC3aPP9+/2ncPGWevD8/f5kk/CfdfCqb/Bdlu6vbfNvjfBbmO7+//79/P53ifB/hfBpkO+5aPRYmPCTe/B8hvB0ivClc/COffGxa/OcdvBnkvBclO58hO7+/f+tvPOKf/Cmb+78+P/BsfN6h/GFgvCRfPB5iO9nju5ziO6Ree6/1PaAgu+xau9Ylu52h+7fw/isbfOwafK0yvHRuvGad/FjlPBsjvCddfBvju+Xeu+fce+Ifu5lkO36/v71+v2vuvPJrfO3ZvOsb/GCg/CqbfC4Z/DMme9nke+ic++/oe5wi+6Gg+5tjO2VeO25ZPS8tPO7xfGBhPB2iu6adO6kcO5qje3z6PrEr/Oua/OwbfG0aPF5iPCgdPDInO/Fju9+hu+Oe++MfO6QuO2Wt+2cs+1XmO34+/74+Pzk7vqyufS1t/TatvO4tfPNvPF3he/Dnu6DgO6Xd+6hsO1dlOygc+z38Py3tvTbs/SpvvOrb/OxzPG4x/G+w/HXt/FflPHHi/CHgfC2afCBsO+Ere6Xte2qbu12m+z5/f719/3v9f359P3K3fe6tfPHrvOkcvGdc++6o+5xiu6Ofe6ubO5gku1gmuz9/f3W5/jozvfa2/bH2Pbdu/W10/PLrPPJv/K/s/LMq/KtzPGgvPHVufHLpfFkkPGpb/FbmPBdlvDNkfC6jO+Hse6kru6wfu6enO2HqOx0qOvy8fzp8fvn5fry4Prv2frq1frl4vnq2vnR4PjW4ffW0/fk0vfkyPbhy/XUwvXev/W9zvPGr/PBw/JVmvK9a/HRnfDAdPCLtu+rr+9tjO+Tve7AfO6Cou1mou1mle2ciu2ocu23be2ml+y0e+yJjuq0hOrd6/vb6/ng2ffYpvS4aPS6v/PIuPPNq/PIzPKixPGWsPG5qvFpkPHCgfHEmvDEhPCZg/Coy++4pu9rpe+8ie+pmu5tlex8oOuVkusvF8k2AAAGQklEQVRo3u3ZZVhTURzH8XOvTKcwhpswVFKHTKc4EAGdioJiMUBULERRFAWDsDGwAwu7u7u7u7u7u1tf+T/n7t5d1MdHONvz+GLfl7zgw7mX83sIZM2aNWv/VwzDIEsHiF1ZjYUdNn7Qpk2P92mQJdv3vhl04ZgllcyOUS4uLk/Cr+5FlmvhbUCgqEHIci0ZHeVia+vi0uy8M7JYg9pF2RKkgXkR58mT5SYkcLQtzryI5uDazZvXHtSwJiQfFG5GhGGOb9Pq9ZHbjiOuHoGj85kdib+vHa8wGAz343kkMJ9EYl4EndDekikMQwzjl+RE2uVEWCpkWSutbMh6hUL7XEAkOBOiyty/cG9ZKqR+K0+ZTKaQaVcakTkJORDG7uTbc+cunI+nQhp6egIjICPmJJQsWVIiqcIjJ2+H4wHomEmD1AIFEpDxhiIE6cAh8VfD4W6CsoQOaViwYEHPVst4JLIIjkcWcnfTpdkmO3MiCj1G2hqRyu1s82EkahTFu59Wq3AiIA0b1kcsQbQKvV4vQiRwM4GhQk7P4JBaRmSNVjFErx+iF5CSHBJOg7SZURiXKEYUCoWhbQc7hiBV4CgQIGzekbiQEKwAggjSSrZeAUX2ERCJhBrpW1ONlRnTEKnaHxAyMx0pkHJ9axYKVhcOiTMhkBjBt0ZCjxRSh5iQAb8j5HJSIU1rghKsjjvNI54ynIAEJpAFCKRGoLg2PFJwOl4zLY/MSShSBBi6k/i7YaRmXxECA+CpbcQhR28ZEvgFoED83ezt7QnCCgjMDCD4A5mbI4mScAzRIDqM2DfFCIuRxIJ4A6YDwmL16LZIfdu2c9ZOzt2PDvKJaRrEIK4VyTqdGzD+5YyPK04NtwbOYnxcrGb/u7t3v/SYnKtfKOYvurR9+9Q9yFjzTrNBsXcDhOWQ4BCM1Gpkp0JcafHxmfBVQf96Ds2LewEBGRk/FiGWYTgkuYTOTUB6xQXDrUlMNCEsy336XBzlwD3v2NiIiIDtu/DXRpASJUok6wSkabBaDU+MIHntaW+fYsViI2JjjiDyXqaGAYIZAYGbCWs2gwKZfwkQKCLgDHf8nmFhZTDSaQWP2BcKxoehQORbe/skJbm7F/sbglPPzDviDIivLyDew3kkpgyuU3OExEgwHdIeI+4CkhGThZEwI7Lc3x6iQ+T9KrVs7+ODEUSQgRkxMVlZYsSNKH1n2jF5Ryq0LFq0vQgJiClfvnxWlgiBgPlEiYDiI0agmLCpiHREpyNK02cMFeKBlUotOKR7QGwERjKMyK47ZMz8bx6gQWYV8MCKgHgnxUYAk9HTOJ+LbnZK1iV/OCFX5ebFs5PSd6cyKgFpDIqHgHTzToIFgJ0xIirVnuZf77x+5Ixyg0ysei07+9VhOSI5d23cuADkUUGMABMwEPFp0tJy+dLTVt9wcFi3LnsKjzQJ/QVxJ4qAkGem0uQKWXyjenUHBy+vHZO4xwWIo6MIqVcJriYg3t1RXmPkXUrlJ8i3QwhXp2trqSNWGpsQXx/3YkkUCErbAggo0dEVjScBBMqJwALQIHXHlhoJCMQjflJpjRqOjk2G8UhLsyD5cWJEKkJKk5lp79u7GzUCGZFxfsWxUqO1CIF8K1EiNhCP1AEEJxUhHngCqJAxgOAEpHZ0TmRWgQIEqUeDBG1UKm2UNjYmxMsLI1WNCF4AOEsFMyBKZU6kuB+PkAXwKECLODk5mZAutaPx3RQjoXA3aZENThCPyLvMdcCIV20xAsosCiT1omuKqysg86bwCFkAARncWhpKFqA0yntLgzakABK0M53hkFI2eMwcBMQPX03HUCpk0hZX1w0pKfOWskhAIIwggnAzc7kJDYLSr1x3mrdzaSqH1CEINFdAyAKE0iEo9eGUQ7s1jIpDOpci91+MEOUyHcIwoj9UTjAiNv2HItIpWABAirc+hSgDQ4zA/ReQ9O+1i7+RSv2upSPqxIhSjKgWZ0evi/bLXsyaEwlSwq3hEUizYPWOHasPs2ZE5J2DnDCi7L9KeGfzJ06UI8isCCyAEiMMI3xnMGZF6lwhCBxmqMX+18cwq1LOuuJgy8CwUA8+c8jYSchisaqK112DUlJ2LkCWTLXg5ZaLH9NVlv6faGqqcWwsH4usWbNm7f/pJ40LCPiotLN6AAAAAElFTkSuQmCC",iconType:"img",iconClass:"rounded-md",platforms:["mac","ios"],url:`surge:///install-config?url=${o}&name=${n}`},{name:"Stash",icon:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAADAFBMVEX////9/f38+/v5+fj6+vr09fT29vb49/f8/Pz3+Pju7u7y8vIHWenx8fDt7ewJZOvw8PAVfvH08/MUe/EGYOkPcO4HXekmsfwWgfILZ+wJbu4kpfsQc+7m5uYJae0hmvcJWuspuP4ekvYbkPQLa+zq6ukjxf8nwv8hl/fr6+smyP8kvf8LXukotf4oz/8HZusJYerh4eAjofkMa+8Mcu4Zh/URde8ag/Po6OgUePHd3d0s1v8djvYObu4HV+fW1tcq0/4nqfwknfgelvYfivQWw/8mrv4hqPsDgO0mq/0Nee8iyv8drPsnp/sNr/ohovoBnvUClPIjwP8jrf0Fh+nj5OM94P8z2P8jzf843f4Uyf4GqPkcifUOgfAEiO8MYusG2f0Dg/AOfe8v0f4C0/0Muvwgn/kXhPQCjvARdvAD3/4Ds/IWr/gCeesD1vcUh/Dk6e6gwOza2toA2f0Tv/0Fo/gBmfMYjPIGjunx+PvW4OoDgePS09MJ5f8W0P9C4f7x8/SHr+sgeOrg5ughZ+LP0NAx2/8i0/8Mzv8E0fcfnffr8/Y2pfXV5fTp7vCTuOs0gOkLZuZ0oeU4eeNK5v8T1//l9fsQtfvZ7/hPv/MumvLP4vDD3O+pzu/K3e7d4+zH1ehUiOLO1twj2P4ou/y53vdMsPV+wvMQsfOV2fK20O9truy71+p8r+o/m+lmlOIg4/9FyfmE3/VuyvXh6/TF6PRZzvMxsvGTw+8tjuwFcOoVcOlNkOhEgeYxcuOAqd/FztEywfkEufnK7fih3PSVzfIMu/Lb5/C35O+Fuu4jcegVYeTHx8kw5P142fe91fGr1/APnvACqu9Moe6sxuofgul70uilvti6y9Y76f8P3v4Gxfhauvfm8PZq4vaP4vVBuPWAzPFxvPFAqu5moexfreq1xuDZ3d+Uu9ubtMhC5v8MyP5P2vtW4vkem/ir5vWe5PWr3vU1zvM7ku9s0uhboeas0t04id2xwtNI1/OUz+Bsrd96odS6wcVzvuN1vNeI7X81AAAQf0lEQVRo3uzXfUzMcRwHcNzd7552t5/zBxvNaB1p2mo7TtfmyMOMPJRKedhZp4idJk9nyNaUW/FXcSGsRwlTuS7/6QFnUwtj8tCDh6EHkZiYh/f3+z1dHqbu5D9vf/in/V69P5/vt9/dsP/5nwEz/Mf8G2DYj/+GmmLAz2HUkBH9BMkIFsnQDq6PoA8XCqQCRMgYZ8UhqoECQrPVVlCLFNis6Rwg6jBoKGrAMNcUl2dXTcjP9/OrqiotL7Y94sRSIRiWoRiVuaC8ZfTUqRMm+Pn5hU0KU6vVpeWORxwHhhKeKzDYtIQ15XYQMAgyaZJ6klo9ZUp3vU0h4gRCCVP+7nJIzLUt4aNHQ6FI2Hdk4cLS14dUKCNhP/dXTQ632heFE+UXZEVs2UWm0HhcBEZRaHj4vHn9EAQGlBX+/vVWucjjLqwGM2YtAPJTExDE8I+tv9ineIQgEvOV0PmzZi1gCBQgMICwIrH62OZDcg6KZ1XYHXyTMTYUSPgCF8JWAoMi+t43vGv7Hm3EWrhkbCibF0Py/cLCnAg1kI4ahUgsYIon19BcFDiWIlBolan5SJjahej0uqiyRCjkVqK9B9MqyABC5wUEyW690tBQ3Fo6Rf29iE4XFdXrkPUt3/1pmR/HBQYyhKy+pfV4itbHxzfxWHGp2oWkptZfVABxvwq96gUZcYFLnFXmLShsSNH6KpUymYz3dVRQREeKREd3OHgV2YoHTSTSoldAoNDVPzzrpfWV8QqVSqRS8LYKen5hpEZHR5cdYlXcVMg7yvrkVVzcEraV8MKzXj5KXi7ixGIxx4nkUPTOIpGRncdkck5AEHdXIsmZ/CpudiDdSmhGjpeWGuS9KJWKOXlXqZ4Z0cmRyV1K3rl6t9ceMn72bChkLUUniYEH4T0lIe9gLr0slhooEplclsiTU+z+uKy3Q8aPBxMHpvA49gFDwF6FVKnpAMKM5KZjMhWZF+LeSgqOhkyGQssURfjAELPHMEW8rxlLZ0Zyp0Op4DyY14hK78kIYeIysHVehSJ4ikup6UhlRmZm5msfnpwvd5uYS7xDnMjsZ7u8lAoVfaOzkLVw6U1OAylLlKncWgoMKIdve0+c6FQqI7RKBU6vVNAXHLB9r6MjwbS1AWm6ppRzbiL4XQ++BcKYo2ci2PntH5FIYUuuq6trbGxra2vstOG3ELjZBHu/5O1NEOT2qQDcRNx2Bc/LeB7/K3hEebDzAkKcxkyHVqaSCt1sMiJnjjcUJCTk2fOggJRdNseb2tpiktoGx4ldKVptSlPCHhpIXdgaJ5C4hYwQVq4KJiFMyfuPd3squvV6vNRXxMTMnRtW1ZJd3ppzFghLQkKzly/uoztVhksE0uub58wJDqZt7N0Wi9FozMpKS/P3XxgT0z5369Z11dWj7fb2pARnygJ8eHaRBl9EwJ3bPAfZEQxoo4UgSTDS9KiCLkRZd2Tx4k2Lqx9YTAaDIenu8whfBTvkg96IdF9JvGYVFNTxvmqxmJKSDAaC6Mm8gKyjyOKVSPUDo8nYkxvkpZRTZLCXRChOfxo/XaNZBWhV8FWLyQQjKy9PFxu792dk29JtGx9YKi7PDPCRiQTC4cggatBpPXo3Zjqi0WiAwHAiev3eAxTZyhAY25Yit7I/70cVFdkKMpBBj5bY2nyUIvHxGs0OiiTdvw9ER5CYX5Dty0I+fUAVnv6VxCMGMjAsc1en5ebIMTTx0zcTxJBw/0JeXpRO1w9xGduXLdt5/kVuhBJ/4Ab6MOn8WmVtTk0y3hxJQqWrOD8ESU2NitLtZfNyIcxYtn79jk+ncO05bIXmT99HJMKapiyDgSIsQGAQBEnbazzQ3u5C2LAosmb5+RzcSOkfv3yxT7/mro68LAOajOrLaZMJRl1vRc9dBJc/u7Rqa3U1EGcRQgBZs/xSZaLij1++2Lk63Byly8PlsjiRGchNU3dvz8f39y7v3717JpKbe+/9xy/Z9k20CBsWDGTtnXPXVBw7YmB+u3MY+HigS8vKMhpP0+dPm7Zhw7hLX19+vrF/98wtW4KCAmiCtmyZefnDVztBmEEEZPXmkoP4SAOF5vfGt17NNabNKozjSunAt6Ut0FZa24LSGqs1LbbY2gjEMUWJZlFG4ochEZcRsi1QPshkC4HSxQUGpW2iDhgXo9uEAVGJjruXIAGMqIOwxJnoNnGLiVGXOeMt/p9zerUx0S/+tyVLOO/7e//n8pznebZPkHpyyL6a+yEdpAoRo6TRXVCp17uY9PrKAnfJ+a/2fQ4jMQYgVVWXuyTMC7eSvB4vfULF03Mvthzds+ejGgI4VNDKVTDcuFPMLEnFpSLIZK5K98/vfrBv3+fPxxiPPgpIJiixmzrRCPOBDJfU0rJnzxf1Dh0A2qKiIuPvHx9pLHDJhAyJmAuZqmCq/PX0y4xCEIbgkMzLSxJxhPJ3Iy+8RVUHCqinW44ePfrFQZVDVVRkhwzDHx926ynxitzylEIK7Rf373/5NCifPwkGCFBNTU1mTfYYKhYRp8QxSKk/vH831ZvgtLQA8tl0ERhGu0Fjnf+lBIEJSbUoNTXSxhEr+k4+vn8/IMA8uQuAAwcOgJGN315/tyQtkcKNpH/4JpWbxMG9dPS7n0ZX7HajQaORy+WrCwSR8BNASk8ViRWfPlQBCsOcvn7jAKkcwq6s6xlRiEGJnzBer799J4mBQHnz5/Mhg1GjsYKhVA+z20Icl9yJxN0Xyx4HBJTT+y5dvQoKh2Df15XPLkUTzngjP7yPehN9AMLc+fA7Z9wlE1bGqLYp83ybblx8YchNHNJ/qawMGGbmtz8+3rwxzSA4Wdj5M35Kz+OtsDr3OLoAJAI9/E4/TtyVGY0cDItSLS2eKClwCQhLMSetpzp23gYIYR6/grO6NTftgHR85/cM8GoVijJS30DxDHHS8TOVOHdDIbJhYxDflhtxHNlIdE36Lu3duRNWSJd+OXK4sWC9hygqrpmx7oiVOCP3kAh0z1Pvf6pHAWpqD9rkNqXaYpFKmRUTRdiokeXcDlC4lz/fA0Pv8ni1Wi0RsC21sEL3ZBwk9Ud05CJ67et2HApBZl732ZRKtToPEKwKv13TuZFb+sfv4hQszLHNwyUUDyaD01qS3Uh//ArKXqIQxPe30W3guuf24wOoeCgTHRwmBmxI89TYYEgUMM3pxEibHL0DkDDlm/dKGispjx3oMRiNeD/JMNsQl+2R+w+/4gTqbNy7qDcJGWKxRCJ4VtU0VcV5UotldYFlVpgBpADixd7S0u87OjqoOj52BUEHj2RJMtoChqhW1li1GoP8iLffG9bxAZS5WUjbs2AFJjBXeRabzTq/VaCX0e5HKdc/np9fWprLvcAIiwd4pC9k1YRlDfgFKryjENEi+ibQraRTDWaBytw0sUThWWUMtdImt1qHkdwLrIBYul7fRPkryorvO3qvHG6sNOOzUHq3Tiix661M8qBMwaY3UlW9fWtMJ1xUVeGDEQQHh6URiMZgnKBlkWSJJ0dzagubgMkvhZgRqlrxRJonYKuulpOqlcPtAnZKFNJ5gXqMj0AVj7x7xsTCbSqqQrGw7gPEYoERQGaCoMiEhrGNnBxnIWGg3k0yQt+MJ0RrPqUFstkQjOYGsSgxyEsXKgBgkIqTWBJcOoihoEgagsXwoayWazTYlzML2Krtbd5ySpVqkVwC8xs3QsETT3TNq9VqJWSzKUPN8ZCULy9UVDyG9hxUdrLZRDU5QjpOg1gYmGOThdkCxOFdePXVBa+jLptRnKCMny9xV5p4awVndHI+T81ksahDzbJESBkQD1HLqQxOqOeDSwPPpElk6z4lLbuBToDK4Q1OzGgduvvLaximduoKnXX2Vawo7pqX0tkFRP13SOcFdDMBKYOOYU0ieTOsKBoWVpVyBilSqXR1RissgfJANrlxLhxhNw0/pHjT2qqUC3FibjABIr4ICBC3kc668DPe30intW+esMgDNFsUlKxKq5VwDl15OW7a65gsimmornm4aStmwo7Mk2J3xSB41+ITEADQzpPN/KJNZ8XQtgzz0JxSrrHbYUSDqYYrWh6ilM/+wiYrnJyk35wyOQeAlGOKg6YESOrrx8IQdJ62nzULbAunh62YtkJWgmiUiC9qzJ0mTLmxySYLFwfbJ2jDtVmkzAShVj0yIStuulJeOclM7CRGxyWkzfw5FqYyZPr1kMFu1CgpkLGtZqDJc4SuUoR3CQwCpYjWfbTghIGd+SFzwolPaT11H9PevXu35+aOexqokyIiIbgI5nb/isEQsFHQpzBms1phxYtsjIwIEgoPmN9O/wodEYs6j1Q80SBLiF3pIjRnibGdGLmlvaMjk9RLgQBZWhubm7Frqm2YCwR9Cz8204du/L756rd6mSKDtQy/HJnw4QMA4W5WPWYBX5oSg6R2XtwOABFy0ecoze/9ZvlEf1dXV9+aZ2zWq9NqjRq5DXdkMZsxRKfpQ9DGbNB/or+vr6//RNvsipUiVjW80CkpHm42K/hRiGaosLI9xkAXIr9px9S1a9emNjay6+7XqbR2jbyaFoVBlGCQKKHz9kDeGY0B0Z3nNpDF4vOY2WylxyDpos5TuQmMBx/cXVhYW5tTVYMaRacqsmsCcnwjD8qBA4cO7dq1i+WlSIIcDi2sGjUGRqm2kJmJQbMirsPK86htXefCCMbIf3D37t2FtTk5yGwfqGMQPl8UNAJE4BD6BDh1IDE3UrrJKHATGjIxI/GJBLb4tk+PAcEZ6HXsAKPQSZDyB+4niAHzhSAOyPSug5xR9WxVGAJKEZIHg4FTbD4PMeK73rysFrUu9tJUkQ8OYYzMbOSEBMHKy202tSVw6CBEkHpWJ2Rn1xFFBQpSZ547+9pwu0bbifFJvajzLLKDCGMHJotDsnW6MASLMv/7wvhB0jP1z9RX0c8zuRVUMlQCMIpvYdAsk/DQlJgMI4J0Lvbm35EPEYMg/B1YWLwCkMB8cOvwkfNjhKmHnDlEoeKVVoUVMzBjXWkbNAmsLwUG9LeGSuvIuXzqcYGBBeFG8KG0rlprIBTc+tbtdjd+e2ZsvKm+sN5JI6owIhsQjAEGkMCcp4GlO9xHohOipGV1LV9ramoiSHS2UAFji64M+4cq9UiRSZVDZ69P1dc6a8kKUSiRBwSrMh8cMrOaTJRUNeKvnCLu7F8e3+EsZAwnN+LQeWfHRppNZrPZROkrZDYNri2fm3JWVRGEBsEucoCe4Eg7hmQkMTgF4pSs7j7P6LmpHc4c2jqZGz2zl/0jzS4Tb6dKWrOy8FsikSi6l9bOjs72bGDVYFbn9c5d9gy4ZDKFohU3BTGSK9OoF1S23Uv9JzzLy21tfs/IUHODWSYDQSHJopjJhfySGrfdgwMjHn8b5F8/0+wym1Eh0yhRMoMU7cGjsEVSmyEI3QIkY++XSAiwjbW4UyFW/m6jz5EgL2ejumUCxD+E8ilO4IxkLyhs6XG8N4OLAGSBAOwCZKMgkFDRhwdSR7pVzAlAJPpI9oIX3ML/TYkEQLhJDwAfETeQOcLUkTCOIzAuyUeymZTwlECgiSIOksQregzkIqv/4j80xD/OUfQUFCNgTKLww5SIooSkbleymX8Q/1lsWPLAf4Ug0Zh/9SSn/ncElPihyR6SvyjpFwb+//oLYHj/LyqNdWsAAAAASUVORK5CYII=",iconType:"img",iconClass:"rounded-md",platforms:["mac","ios"],url:`stash://install-config?url=${o}&name=${n}`},{name:"NekoBox",icon:"data:image/png;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBwgHBgkIBwgKCgkLDRYPDQwMDRsUFRAWIB0iIiAdHx8kKDQsJCYxJx8fLT0tMTU3Ojo6Iys/RD84QzQ5OjcBCgoKDQwNGg8PGjclHyU3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N//AABEIAFwAXAMBIgACEQEDEQH/xAAbAAACAgMBAAAAAAAAAAAAAAAABgQFAgMHAf/EAEAQAAEDAwIDBAUJBAsAAAAAAAEAAgMEBRESIQYxURNBYXEigZGhwQcUFSMkkrHC0TI1UvAWQkNiY3J0orKz4f/EABkBAAMBAQEAAAAAAAAAAAAAAAACBAMBBf/EACQRAAICAQIFBQAAAAAAAAAAAAABAhEDEjETITJBUQQUIiMz/9oADAMBAAIRAxEAPwDuKEIQAKPHXUctVJSR1cD6mLHaQtkBezIyMt5jYqQuAfKXTPj45rJImuMk0jCzTnVq0tG3q0rqVgd/QuY8HniqkhY2turuyxnsJgJXNHi87jyyUydtcnHP0jL91g/Kn4UjJ5ooakJZZd7hSnM2iqjHMEBr/URt6setSqbi/h+cY+laaJ42dHO8RuaehDsJXBrcaOSMti8QodPdbdUuDaavpZnHkI5muJ9hUxKOCEIQAIQhAAkS822E8WVNdLpdoa1zHfwEsAd/ta37xT2UlXU9pPWu73zaDnpqDT7gVpj6rM8rajS7mAlw+GAbOly946NGPjgepWGsDRnm7l7MqipnOkuUs2fQDQxu3QnPwU+onDaiJo/s2F59mB/PiqE01aI5RcXTN1PIJJaiM7gP29g/Vcy+USkNHeY5Ym7VTMkDveDg+4tXQbUXmaR7xjtJHOH+UgYUHiC1S3O70HYQ9o+HtHAZGxIbvulk/jaNMUfsSYqcD8Jurr/QOrgfqnCqdGP6rWEEZPUu0jHn0XdUr8D2qS3w1ktc0MrppcOYDnRE3IYM9+fSd5uI7k0KW7LZVfx2BCEIOAhCEACQ65xllcRqx28kp08yGh5/HSnKouNDTP0VNZTwv56ZJWtPsJXPpL5aKZ9LV1dRE5gB1BkrS5pc7ngHfHRMr0uheWuOrYvG2csL2Ubi9sEun03Z15jaSQfPO3LcjZaJbTUR656naJoc+TS7LnAD9kePTyVtbrrZ5aRj6K4URgI9HRK0AeruWVbXUUtO+NtdS4cMHEzf1WGuSN+HGTK6UTNuPZyRRsMQDD2ZOnIaDgZ6BwHq8cDGC40lFd/tNRHFJ2ZLBIcBwzvvy7lFdc4hWfaK2l0mQ+mZAMkjJPPHIAexVf0hb5uI6jtqmkfFoY0apGlp5k/iqsVOFEmZaMtjZaby2634imb9njp3gyA+i92pnLrj4pjStaLla2Vxd8/o2hsJA+uaAMkePgmhrg5oc0gg7gjvSSSTpD423G2eoQhKOC1VM8dLTy1E7tMUTC97ugAyVtSn8ode6ntUdIzI+cP+sdjYMbgnfxOkeWUsnpTZ1K3RTWCrkuD7lVzjEktXqI56fq2YHqGB6la6W9B7FQ8HkOo6xzSCDVHcH/DYr9eRNty5lVIx0MPNjfYsTHHjJjZ90LYsJTiN58Cks6VNJUht/qKfYRSsbob3BzQDt4kE/dVxgdEtVYdG19fG0l9PVB3ojJIDGZA826h61cm7W8HHzuP3p2r2AmFocMEDCsuF6smKW3SHMlMRo8Yzy9nLy09UuS323xjaVzz0ZG4/BRrfdKgXSG40tHWvjDtLhHSyODmHZwyG+GfMBbencoz25CTScTpSF4F6vTJgXhXqCgBNd+9ruetWP+qMLNYP/e93b3irHvhjPxWa8fN+jKo9KBRbjKIqV3V2wW+WWOFmuV7WN6kpcuNf87m9DIjbs0H8VmOkWdoayakn1tDmumO3kAPgpLqamGQ2Fod1I2UTh1wdRPHf2r/xKnuJaSzSXuJyOi69wCOnjG5hYD3eir7hhwdb5C3l28g96U7jcexYYm7Snng50j9UxcDHNhaes8v/ADKq9H1syzdIwoQheiTghCEAUlbw82orJ6qKuqKd85a57WNYWlwaG53GeQHf3KDNwtXPyGXtzR40/wCjgmlCzeKEnbQynJdxGm4Hr3nUbrDIer4HD85Wh3BN1b+xPRu83ub+UroCEvt8fgbiz8iRRcK3imiAE1G14c47SOI3JP8ACpEvDl6mbg3CljH9xjv/ABN6Fz22LwHFkIv9Bq487nTg/wCncfzpn4etbrPa2Uck7Z3Ne9xe1mgHU4nlk9eqs0J44oQdxQrm5bghCFoKf//Z",iconType:"img",platforms:["android"],url:`clash://install-config?url=${o}&name=${n}`},{name:"Surfboard",icon:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAw1BMVEUD2sUAAAAC3McA2sUI28YBBAMA3cgCCAcDCwoGtaMFExIB1MAHIx8C18IDzroEwK0Nd2sGFxUB0LwGxLEKn5ADx7MLSEELQDoJNTAIJiIGHxsJ3cgLkoQNZlwMXVQI1cEJsaAKo5QKnI0LjoAMhnkLc2cMYFcKRj8JMSwILSgHGxkEEA4CzLgHuqcLin0LfXEMbGELTUYH0r4CyrcDvqsHrZwKqJgNWVELv6wNgnYMVU4Cwq8Mb2QKOzUJOTMIKiYMl4iTAtRRAAAC2ElEQVRo3u2Y6W7qMBCFkxnjQGmahUDZoQtQUgqUQgvd6Ps/1a10E0ImNdK1fX9U8vl7pDOx83k8iWVkZGRkZGRk9JsFvNPh8LPV+baYegmGXtf3u55VzAK3MvcXUR1QdRn1Xrtk26X2sgbUqrwG35Yz3a2YWo31pZ3oYw1566qVOKX+hUoVDBv2QZPZcRRs9wenNFLZMN51bFHU0s50fw3yRdxH+0hnURbF6vtja+qBNFn1ln2suyyKb+5z1ktVdsfAi+2c+oeozrWTc5xbUFxJFjVPo/hzOW+1h7JVBg07r/MKJPVrLWJdzpgkXTcOiWocjkSPONIcY/hIo/zDMd0T60yWY6ic06grSKyvjK8MPinBTZlENdMm5mbHUZFjdHs0qj/4G8Wekr6mzjHUmySqnHLMN7GtiWN+dSbiGBclXRxbfknAMa4edXHMLhpCjh9aFL6I6+OYJ1a3TDl+08dxPeW4CJ8sx4MxjRoPMIHvo8Axk1xK7Y5yfAOJ9Rzo4hj+ieMnjRyjiON3S5bjCY26BSHHG239eFK1RBwvJYtglR7JzxDTUYDW76PkSuYObexpklsAfMcld6tNN/4ZRLs1rTFN731E+pf6PIkjYScujgFLV+5OiYRn0fI1nUXwhF2F6+oqWH0p9EcXk6bWVL7nKb10YkF3rGligWG7eP0J6fVAE73+CXq5pv47ofRmWqL+iUgPvRSf03divJGkty++3T813e5sXpy3hXPKqyS9D+Ivh+t7PfRa7F1EL64munpvSLe9EbJ0jQGdHlB23DoX9d5O5Gia5+GtXaBXUCQecun/N036jZVdxwGlV1bYEw3sGF6q0ps9b0z+32RW1zmidw2WgnaHw+gscgausl4QREo10N0FSdCC7AibjZMHaH1ZakJr2GvGwV1vYyGx2CB6nQbxx2jNLFUBXnjbGcIPFsen7TYEsDQIAfCUZWRkZGRkZGT0f/UHAS86LuyGKlcAAAAASUVORK5CYII=",iconType:"img",platforms:["android"],url:`surfboard:///install-config?url=${o}&name=${n}`}].filter((e=>e.platforms.includes(l)||"unknown"===l))})),x=e=>{var t,n;(null==(t=b.value)?void 0:t.subscribe_url)&&("copy"===e.url?Xf(b.value.subscribe_url):(n=e.url,window.location.href=n))},C=()=>{var e;p.value=(null==(e=b.value)?void 0:e.subscribe_url)||"",d.value=!0},w=ai((()=>{var e,t,n;const o=null==(e=b.value)?void 0:e.transfer_enable,r=(null==(t=b.value)?void 0:t.u)||0,i=(null==(n=b.value)?void 0:n.d)||0;return o?Math.floor((r+i)/o*100):0})),{errorColor:k,warningColor:S,successColor:_,primaryColor:P}=n.value,T=ai((()=>{const e=w.value;return e>=100?k:e>=70?S:_}));function A(){return v(this,null,(function*(){var e,n;if(!(yield window.$dialog.confirm({title:t("确定重置当前已用流量?"),type:"info",content:t("点击「确定」将会跳转到收银台,支付订单后系统将会清空您当月已使用流量。"),showIcon:!1})))return;const o=null==(e=yield MN())?void 0:e.data,r=null==o?void 0:o.find((e=>e.status===ZV.PENDING));if(r){if(!(yield window.$dialog.confirm({title:t("注意"),type:"info",content:t("你还有未完成的订单,购买前需要先进行取消,确定取消先前的订单吗?"),positiveText:t("确认取消"),negativeText:t("返回我的订单"),showIcon:!1})))return void qN.push("order");{const e=r.trade_no;if(!(yield FN(e)))return}}const i=null==(n=b.value)?void 0:n.plan_id;if(!i)return;const{data:a}=yield LN(i,"reset_price");a&&qN.push("order/"+a)}))}const z=Et([]),R=Et([0,0,0]),E=Et(),O=Et(),M=()=>v(this,null,(function*(){const{data:e}=yield EN.get("/user/notice/fetch");z.value=e;const t=e.find((e=>{var t;return null==(t=e.tags)?void 0:t.includes("弹窗")}));t&&(s.value=!0,c.value=t)})),F=()=>v(this,null,(function*(){const{data:e}=yield EN.get("/user/getStat");e&&(R.value=e)})),I=()=>v(this,null,(function*(){const{data:e}=yield ON();if(!e)return;E.value=e;const t=[...new Set(e.map((e=>"hysteria"===e.type&&2===e.version?"hysteria2":e.type)))];O.value=t,m.value=f.filter((e=>t.includes(e.type)||["auto","all"].includes(e.type)))})),L=()=>v(this,null,(function*(){yield Promise.all([M(),i.getUserSubscribe(),F(),I()])}));return Dn((()=>{L()})),(e,t)=>{const n=RI,a=YB,f=yH,v=mH,k=XB,S=DI,_=oO,E=vO,M=GO,F=h$,I=uE,L=qR,B=BO,D=P$,$=lL,N=r$,j=hH,H=uH,W=lH,U=rH,V=tH,q=Zj;return _r(),Rr(q,{"show-footer":!1},{default:hn((()=>{var q,K,X,Y;return[Lr(n,{show:s.value,"onUpdate:show":t[0]||(t[0]=e=>s.value=e),class:"mx-2.5 max-w-full w-150 md:mx-auto",preset:"card",title:null==(q=c.value)?void 0:q.title,size:"huge",bordered:!1,"content-style":"padding-top:0",segmented:{content:!1}},{default:hn((()=>{var e,t;return[Ir("div",{innerHTML:(t=(null==(e=c.value)?void 0:e.content)||"",o.render(t)),class:"markdown-body custom-html-style"},null,8,tq)]})),_:1},8,["show","title"]),Lr(n,{show:u.value,"onUpdate:show":t[3]||(t[3]=e=>u.value=e),"transform-origin":"center","auto-focus":!1,"display-directive":"show","trap-focus":!1},{default:hn((()=>[Lr(E,{class:"max-w-full w-75",bordered:!1,size:"huge","content-style":"padding:0"},{default:hn((()=>[Lr(k,{hoverable:""},{default:hn((()=>{var n;return[(null==(n=O.value)?void 0:n.includes("hysteria2"))?(_r(),Rr(a,{key:0,class:"p-0!"},{default:hn((()=>[Ir("div",{class:"flex cursor-pointer items-center p-2.5",onClick:t[1]||(t[1]=e=>{var t;return It(Xf)((null==(t=b.value)?void 0:t.subscribe_url)+"&types=hysteria2")})},[Ir("div",nq,[Lr(It(SF),{size:"30"},{default:hn((()=>[(_r(),Rr(Qn(It(QV))))])),_:1})]),Ir("div",oq,oe(e.$t("复制HY2订阅地址")),1)])])),_:1})):$r("",!0),Lr(a,{class:"p-0!"},{default:hn((()=>[Ir("div",{class:"flex cursor-pointer items-center p-2.5",onClick:C},[Ir("div",rq,[Lr(f,{class:"text-3xl text-gray-600"})]),Ir("div",iq,oe(e.$t("扫描二维码订阅")),1)])])),_:1}),(_r(!0),zr(yr,null,eo(y.value,(t=>(_r(),zr(yr,{key:t.name},[t.platforms.includes(It(l))?(_r(),Rr(a,{key:0,class:"p-0!"},{default:hn((()=>[Ir("div",{class:"flex cursor-pointer items-center p-2.5",onClick:e=>x(t)},[Ir("div",lq,["img"===t.iconType?(_r(),zr("img",{key:0,src:t.icon,class:J(["h-8 w-8",t.iconClass])},null,10,sq)):(_r(),Rr(It(SF),{key:1,size:"30",class:"text-gray-600"},{default:hn((()=>["icon-fluent:copy-24-filled"===t.icon?(_r(),Rr(v,{key:0})):(_r(),Rr(Qn(t.icon),{key:1}))])),_:2},1024))]),Ir("div",cq,oe("复制订阅链接"===t.name?e.$t("复制订阅地址"):e.$t("导入到")+" "+t.name),1)],8,aq)])),_:2},1024)):$r("",!0)],64)))),128))]})),_:1}),Lr(S,{class:"m-0!"}),Ir("div",uq,[Lr(_,{type:"primary",class:"w-full",size:"large",onClick:t[2]||(t[2]=t=>e.$router.push("/knowledge"))},{default:hn((()=>[Dr(oe(e.$t("不会使用,查看使用教程")),1)])),_:1})])])),_:1})])),_:1},8,["show"]),Lr(n,{show:d.value,"onUpdate:show":t[4]||(t[4]=e=>d.value=e)},{default:hn((()=>[Lr(E,{class:"w-75"},{default:hn((()=>[Ir("div",dq,oe(e.$t("选择协议"))+":",1),Ir("div",pq,[(_r(!0),zr(yr,null,eo(m.value,(t=>(_r(),Rr(M,{key:t.type,value:t.type,checked:h.value.includes(t.type),onClick:e=>function(e){if("auto"===e||"all"===e&&h.value.includes("all"))h.value=["auto"];else if("all"!==e||h.value.includes("all")){const t=h.value.includes(e);h.value=t?h.value.filter((t=>t!==e)):[...h.value.filter((e=>"auto"!==e)),e];const n=function(e,t){if(e.length!==t.length)return!1;const n=[...e].sort(),o=[...t].sort();return n.every(((e,t)=>e===o[t]))}(m.value.map((e=>e.type)).filter((e=>"auto"!==e&&"all"!==e)),h.value);n?h.value.push("all"):h.value=h.value.filter((e=>"all"!==e))}else h.value=m.value.map((e=>e.type)).filter((e=>"auto"!==e));0===h.value.length&&(h.value=["auto"]),g()}(t.type)},{default:hn((()=>[Dr(oe(e.$t(t.label)),1)])),_:2},1032,["value","checked","onClick"])))),128))]),Ir("div",hq,[Lr(F,{value:p.value,"icon-src":It(r).logo,size:140,color:It(P),style:{"box-sizing":"content-box"}},null,8,["value","icon-src","color"])]),Ir("div",fq,oe(e.$t("使用支持扫码的客户端进行订阅")),1)])),_:1})])),_:1},8,["show"]),Ir("div",vq,[R.value[1]&&R.value[1]>0||R.value[0]&&R.value[0]>0?(_r(),zr("div",mq,[R.value[1]&&R.value[1]>0?(_r(),Rr(I,{key:0,type:"warning","show-icon":!1,bordered:!0,closable:"",class:"mb-1"},{default:hn((()=>[Dr(oe(R.value[1])+" "+oe(e.$t("条工单正在处理中"))+" ",1),Lr(_,{strong:"",text:"",onClick:t[5]||(t[5]=e=>It(qN).push("/ticket"))},{default:hn((()=>[Dr(oe(e.$t("立即查看")),1)])),_:1})])),_:1})):$r("",!0),R.value[0]&&R.value[0]>0?(_r(),Rr(I,{key:1,type:"error","show-icon":!1,bordered:!0,closable:"",class:"mb-1"},{default:hn((()=>[Dr(oe(e.$t("还有没支付的订单"))+" ",1),Lr(_,{text:"",strong:"",onClick:t[6]||(t[6]=e=>It(qN).push("/order"))},{default:hn((()=>[Dr(oe(e.$t("立即支付")),1)])),_:1})])),_:1})):$r("",!0),!((null==(K=b.value)?void 0:K.expired_at)&&((null==(X=b.value)?void 0:X.expired_at)||0)>Date.now()/1e3)&&w.value>=70?(_r(),Rr(I,{key:2,type:"info","show-icon":!1,bordered:!0,closable:"",class:"mb-1"},{default:hn((()=>[Dr(oe(e.$tc("当前已使用流量达{rate}%",{rate:w.value}))+" ",1),Lr(_,{text:"",onClick:t[7]||(t[7]=e=>A())},{default:hn((()=>[Ir("span",gq,oe(e.$t("重置已用流量")),1)])),_:1})])),_:1})):$r("",!0)])):$r("",!0),fn(Lr(E,{class:"w-full cursor-pointer overflow-hidden rounded-md text-white transition hover:opacity-75",bordered:!1,"content-style":"padding: 0"},{default:hn((()=>[Lr(B,{autoplay:""},{default:hn((()=>[(_r(!0),zr(yr,null,eo(z.value,(t=>(_r(),zr("div",{key:t.id,style:G(t.img_url?`background:url(${t.img_url}) no-repeat center center;background-size:cover;`:`background:url(${It(r).$state.assets_path}/images/background.svg) center center / cover no-repeat;`),onClick:e=>(s.value=!0,c.value=t)},[Ir("div",yq,[Ir("div",null,[Lr(L,{bordered:!1,class:"bg-orange-600 text-xs text-white"},{default:hn((()=>[Dr(oe(e.$t("公告")),1)])),_:1})]),Ir("div",null,[Ir("p",xq,oe(t.title),1),Ir("p",Cq,oe(It(Vf)(t.created_at)),1)])])],12,bq)))),128))])),_:1})])),_:1},512),[[Mi,(null==(Y=z.value)?void 0:Y.length)>0]]),Lr(E,{title:e.$t("我的订阅"),class:"mt-1 rounded-md md:mt-5"},{default:hn((()=>{var n,o,r,a,l,s,c,u,d,p,h,f,v,m,g,y;return[b.value?(null==(n=b.value)?void 0:n.plan_id)?(_r(),zr(yr,{key:1},[Ir("div",wq,oe(null==(r=null==(o=b.value)?void 0:o.plan)?void 0:r.name),1),null===(null==(a=b.value)?void 0:a.expired_at)?(_r(),zr("div",kq,oe(e.$t("该订阅长期有效")),1)):(null==(l=b.value)?void 0:l.expired_at)&&(null!=(c=null==(s=b.value)?void 0:s.expired_at)?c:0)It(qN).push("/plan/"+It(i).plan_id))},{default:hn((()=>[Dr(oe(e.$t("续费订阅")),1)])),_:1})):w.value>=70?(_r(),Rr(_,{key:4,type:"primary",class:"mt-5",onClick:t[9]||(t[9]=e=>A())},{default:hn((()=>[Dr(oe(e.$t("重置已用流量")),1)])),_:1})):$r("",!0)],64)):(_r(),zr("div",{key:2,class:"cursor-pointer pt-5 text-center",onClick:t[10]||(t[10]=e=>It(qN).push("/plan"))},[Lr(j,{class:"text-4xl"}),Ir("div",Pq,oe(e.$t("购买订阅")),1)])):(_r(),Rr($,{key:0},{default:hn((()=>[Lr(D,{height:"20px",width:"33%"}),Lr(D,{height:"20px",width:"66%"}),Lr(D,{height:"20px"})])),_:1}))]})),_:1},8,["title"]),Lr(E,{title:e.$t("捷径"),class:"mt-5 rounded-md","content-style":"padding: 0"},{default:hn((()=>[Lr(k,{hoverable:"",clickable:""},{default:hn((()=>[Lr(a,{class:"flex flex cursor-pointer justify-between p-5 hover:bg-gray-100",onClick:t[11]||(t[11]=e=>It(qN).push("/knowledge"))},{default:hn((()=>[Ir("div",Tq,[Ir("div",Aq,[Ir("div",zq,oe(e.$t("查看教程")),1),Ir("div",Rq,oe(e.$t("学习如何使用"))+" "+oe(It(r).title),1)]),Ir("div",null,[Lr(H,{class:"text-3xl text-gray-500-500"})])])])),_:1}),Lr(a,{class:"flex cursor-pointer justify-between p-5 hover:bg-gray-100",onClick:t[12]||(t[12]=e=>u.value=!0)},{default:hn((()=>[Ir("div",Eq,[Ir("div",null,[Ir("div",Oq,oe(e.$t("一键订阅")),1),Ir("div",Mq,oe(e.$t("快速将节点导入对应客户端进行使用")),1)]),Ir("div",null,[Lr(W,{class:"text-3xl text-gray-500-500"})])])])),_:1}),Lr(a,{class:"flex cursor-pointer justify-between p-5",onClick:t[13]||(t[13]=e=>It(i).plan_id?It(qN).push("/plan/"+It(i).plan_id):It(qN).push("/plan"))},{default:hn((()=>{var t;return[Ir("div",Fq,[Ir("div",null,[Ir("div",Iq,oe((null==(t=b.value)?void 0:t.plan_id)?e.$t("续费订阅"):e.$t("购买订阅")),1),Ir("div",Lq,oe(e.$t("对您当前的订阅进行购买")),1)]),Ir("div",null,[Lr(U,{class:"text-3xl text-gray-500-500"})])])]})),_:1}),Lr(a,{class:"flex cursor-pointer justify-between p-5",onClick:t[14]||(t[14]=t=>e.$router.push("/ticket"))},{default:hn((()=>[Ir("div",Bq,[Ir("div",null,[Ir("div",Dq,oe(e.$t("遇到问题")),1),Ir("div",$q,oe(e.$t("遇到问题可以通过工单与我们沟通")),1)]),Ir("div",null,[Lr(V,{class:"text-3xl text-gray-500-500"})])])])),_:1})])),_:1})])),_:1},8,["title"])])]})),_:1})}}}),jq=tj(Nq,[["__scopeId","data-v-2492d831"]]),Hq=Object.freeze(Object.defineProperty({__proto__:null,default:jq},Symbol.toStringTag,{value:"Module"})),Wq={class:"inline-block",viewBox:"0 0 1024 1024",width:"1em",height:"1em"},Uq=[Ir("path",{fill:"currentColor",d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448s448-200.6 448-448S759.4 64 512 64m0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372s372 166.6 372 372s-166.6 372-372 372m159.6-585h-59.5c-3 0-5.8 1.7-7.1 4.4l-90.6 180H511l-90.6-180a8 8 0 0 0-7.1-4.4h-60.7c-1.3 0-2.6.3-3.8 1c-3.9 2.1-5.3 7-3.2 10.9L457 515.7h-61.4c-4.4 0-8 3.6-8 8v29.9c0 4.4 3.6 8 8 8h81.7V603h-81.7c-4.4 0-8 3.6-8 8v29.9c0 4.4 3.6 8 8 8h81.7V717c0 4.4 3.6 8 8 8h54.3c4.4 0 8-3.6 8-8v-68.1h82c4.4 0 8-3.6 8-8V611c0-4.4-3.6-8-8-8h-82v-41.5h82c4.4 0 8-3.6 8-8v-29.9c0-4.4-3.6-8-8-8h-62l111.1-204.8c.6-1.2 1-2.5 1-3.8c-.1-4.4-3.7-8-8.1-8"},null,-1)],Vq={name:"ant-design-pay-circle-outlined",render:function(e,t){return _r(),zr("svg",Wq,[...Uq])}},qq={class:"inline-block",viewBox:"0 0 1024 1024",width:"1em",height:"1em"},Kq=[Ir("path",{fill:"currentColor",d:"M668.6 320c0-4.4-3.6-8-8-8h-54.5c-3 0-5.8 1.7-7.1 4.4l-84.7 168.8H511l-84.7-168.8a8 8 0 0 0-7.1-4.4h-55.7c-1.3 0-2.6.3-3.8 1c-3.9 2.1-5.3 7-3.2 10.8l103.9 191.6h-57c-4.4 0-8 3.6-8 8v27.1c0 4.4 3.6 8 8 8h76v39h-76c-4.4 0-8 3.6-8 8v27.1c0 4.4 3.6 8 8 8h76V704c0 4.4 3.6 8 8 8h49.9c4.4 0 8-3.6 8-8v-63.5h76.3c4.4 0 8-3.6 8-8v-27.1c0-4.4-3.6-8-8-8h-76.3v-39h76.3c4.4 0 8-3.6 8-8v-27.1c0-4.4-3.6-8-8-8H564l103.7-191.6c.5-1.1.9-2.4.9-3.7M157.9 504.2a352.7 352.7 0 0 1 103.5-242.4c32.5-32.5 70.3-58.1 112.4-75.9c43.6-18.4 89.9-27.8 137.6-27.8c47.8 0 94.1 9.3 137.6 27.8c42.1 17.8 79.9 43.4 112.4 75.9c10 10 19.3 20.5 27.9 31.4l-50 39.1a8 8 0 0 0 3 14.1l156.8 38.3c5 1.2 9.9-2.6 9.9-7.7l.8-161.5c0-6.7-7.7-10.5-12.9-6.3l-47.8 37.4C770.7 146.3 648.6 82 511.5 82C277 82 86.3 270.1 82 503.8a8 8 0 0 0 8 8.2h60c4.3 0 7.8-3.5 7.9-7.8M934 512h-60c-4.3 0-7.9 3.5-8 7.8a352.7 352.7 0 0 1-103.5 242.4a352.6 352.6 0 0 1-112.4 75.9c-43.6 18.4-89.9 27.8-137.6 27.8s-94.1-9.3-137.6-27.8a352.6 352.6 0 0 1-112.4-75.9c-10-10-19.3-20.5-27.9-31.4l49.9-39.1a8 8 0 0 0-3-14.1l-156.8-38.3c-5-1.2-9.9 2.6-9.9 7.7l-.8 161.7c0 6.7 7.7 10.5 12.9 6.3l47.8-37.4C253.3 877.7 375.4 942 512.5 942C747 942 937.7 753.9 942 520.2a8 8 0 0 0-8-8.2"},null,-1)],Gq={name:"ant-design-transaction-outlined",render:function(e,t){return _r(),zr("svg",qq,[...Kq])}},Xq={class:"inline-block",viewBox:"0 0 24 24",width:"1em",height:"1em"},Yq=[Ir("path",{fill:"currentColor",d:"M19 17v2H7v-2s0-4 6-4s6 4 6 4m-3-9a3 3 0 1 0-3 3a3 3 0 0 0 3-3m3.2 5.06A5.6 5.6 0 0 1 21 17v2h3v-2s0-3.45-4.8-3.94M18 5a2.9 2.9 0 0 0-.89.14a5 5 0 0 1 0 5.72A2.9 2.9 0 0 0 18 11a3 3 0 0 0 0-6M8 10H5V7H3v3H0v2h3v3h2v-3h3Z"},null,-1)],Qq={name:"mdi-invite",render:function(e,t){return _r(),zr("svg",Xq,[...Yq])}},Zq={class:"text-5xl font-normal"},Jq={class:"ml-2.5 text-xl text-gray-500 md:ml-5"},eK={class:"text-gray-500"},tK={class:"flex justify-between pb-1 pt-1"},nK={class:"flex justify-between pb-1 pt-1"},oK={key:0},rK={key:1},iK={class:"flex justify-between pb-1 pt-1"},aK={class:"flex justify-between pb-1 pt-1"},lK={class:"mt-2.5"},sK={class:"mb-1"},cK={class:"mt-2.5"},uK={class:"mb-1"},dK={class:"flex justify-end"},pK={class:"mt-2.5"},hK={class:"mb-1"},fK={class:"mt-2.5"},vK={class:"mb-1"},mK={class:"flex justify-end"},gK=zn({__name:"index",setup(e){const t=_N(),n=e=>jf.global.t(e),o=[{title:n("邀请码"),key:"code",render(e){const t=`${window.location.protocol}//${window.location.host}/#/register?code=${e.code}`;return li("div",[li("span",e.code),li(oO,{size:"small",onClick:()=>Xf(t),quaternary:!0,type:"info"},{default:()=>n("复制链接")})])}},{title:n("创建时间"),key:"created_at",fixed:"right",align:"right",render:e=>Vf(e.created_at)}],r=[{title:n("发放时间"),key:"created_at",render:e=>Vf(e.created_at)},{title:n("佣金"),key:"get_amount",fixed:"right",align:"right",render:e=>Gf(e.get_amount)}],i=Et(),a=Et([]);function l(){return v(this,null,(function*(){const e=yield EN.get("/user/invite/fetch"),{data:t}=e;i.value=t.codes,a.value=t.stat}))}const s=Et([]),c=vt({page:1,pageSize:10,showSizePicker:!0,pageSizes:[10,50,100,150],onChange:e=>{c.page=e,u()},onUpdatePageSize:e=>{c.pageSize=e,c.page=1,u()}});function u(){return v(this,null,(function*(){const e=yield function(e=1,t=10){return EN.get(`/user/invite/details?current=${e}&page_size=${t}`)}(c.page,c.pageSize),{data:t}=e;s.value=t}))}const d=Et(!1);function p(){return v(this,null,(function*(){d.value=!0;const{data:e}=yield EN.get("/user/invite/save");!0===e&&(window.$message.success(n("已生成")),w()),d.value=!1}))}const h=Et(!1),f=Et(),m=Et(!1);function g(){return v(this,null,(function*(){m.value=!0;const e=f.value;if("number"!=typeof e)return window.$message.error(n("请输入正确的划转金额")),void(m.value=!1);const{data:t}=yield function(e){return EN.post("/user/transfer",{transfer_amount:e})}(100*e);!0===t&&(window.$message.success(n("划转成功")),h.value=!1,l()),m.value=!1}))}const b=Et(!1),y=vt({method:null,account:null}),x=Et(!1);function C(){return v(this,null,(function*(){if(x.value=!0,!y.method)return window.$message.error(n("提现方式不能为空")),void(x.value=!1);if(!y.account)return window.$message.error(n("提现账号不能为空")),void(x.value=!1);const e=y.method,t=y.account,{data:o}=yield(r={withdraw_method:e,withdraw_account:t},EN.post("/user/ticket/withdraw",r));var r;!0===o&&qN.push("/ticket"),x.value=!1}))}function w(){l(),u()}return Dn((()=>{w()})),(e,n)=>{const l=Qq,u=eM,v=Gq,w=Vq,k=lL,S=vO,_=rI,P=uE,T=AE,A=EB,z=RI,R=ZN,E=hM,O=Zj;return _r(),Rr(O,null,{default:hn((()=>[Lr(S,{title:e.$t("我的邀请"),class:"rounded-md"},{"header-extra":hn((()=>[Lr(l,{class:"text-4xl text-gray-500"})])),default:hn((()=>{var o;return[Ir("div",null,[Ir("span",Zq,[Lr(u,{from:0,to:parseFloat(It(Gf)(a.value[4])),active:!0,precision:2,duration:500},null,8,["to"])]),Ir("span",Jq,oe(null==(o=It(t).appConfig)?void 0:o.currency),1)]),Ir("div",eK,oe(e.$t("当前剩余佣金")),1),Lr(k,{class:"mt-2.5"},{default:hn((()=>{var o;return[Lr(It(oO),{size:"small",type:"primary",onClick:n[0]||(n[0]=e=>h.value=!0)},{icon:hn((()=>[Lr(v)])),default:hn((()=>[Dr(" "+oe(e.$t("划转")),1)])),_:1}),(null==(o=It(t).appConfig)?void 0:o.withdraw_close)?$r("",!0):(_r(),Rr(It(oO),{key:0,size:"small",type:"primary",onClick:n[1]||(n[1]=e=>b.value=!0)},{icon:hn((()=>[Lr(w)])),default:hn((()=>[Dr(" "+oe(e.$t("推广佣金提现")),1)])),_:1}))]})),_:1})]})),_:1},8,["title"]),Lr(S,{class:"mt-4 rounded-md"},{default:hn((()=>{var n,o,r,i,l,s;return[Ir("div",tK,[Ir("div",null,oe(e.$t("已注册用户数")),1),Ir("div",null,oe(e.$tc("{number} 人",{number:a.value[0]})),1)]),Ir("div",nK,[Ir("div",null,oe(e.$t("佣金比例")),1),(null==(n=It(t).appConfig)?void 0:n.commission_distribution_enable)?(_r(),zr("div",oK,oe(`${Math.floor(((null==(o=It(t).appConfig)?void 0:o.commission_distribution_l1)||0)*a.value[3]/100)}%,${Math.floor(((null==(r=It(t).appConfig)?void 0:r.commission_distribution_l2)||0)*a.value[3]/100)}%,${Math.floor(((null==(i=It(t).appConfig)?void 0:i.commission_distribution_l3)||0)*a.value[3]/100)}%`),1)):(_r(),zr("div",rK,oe(a.value[3])+"%",1))]),Ir("div",iK,[Ir("div",null,oe(e.$t("确认中的佣金")),1),Ir("div",null,oe(null==(l=It(t).appConfig)?void 0:l.currency_symbol)+" "+oe(It(Gf)(a.value[2])),1)]),Ir("div",aK,[Ir("div",null,oe(e.$t("累计获得佣金")),1),Ir("div",null,oe(null==(s=It(t).appConfig)?void 0:s.currency_symbol)+" "+oe(It(Gf)(a.value[1])),1)])]})),_:1}),Lr(S,{title:e.$t("邀请码管理"),class:"mt-4 rounded-md"},{"header-extra":hn((()=>[Lr(It(oO),{size:"small",type:"primary",round:"",loading:d.value,onClick:p},{default:hn((()=>[Dr(oe(e.$t("生成邀请码")),1)])),_:1},8,["loading"])])),default:hn((()=>[Lr(_,{columns:o,data:i.value,bordered:!0},null,8,["data"])])),_:1},8,["title"]),Lr(S,{title:e.$t("佣金发放记录"),class:"mt-4 rounded-md"},{default:hn((()=>[Lr(_,{columns:r,data:s.value,pagination:c},null,8,["data","pagination"])])),_:1},8,["title"]),Lr(z,{show:h.value,"onUpdate:show":n[6]||(n[6]=e=>h.value=e)},{default:hn((()=>[Lr(S,{title:e.$t("划转"),segmented:{content:!0,footer:!0},"footer-style":"padding-top: 10px; padding-bottom:10px",class:"mx-2.5 max-w-full w-150 md:mx-auto",closable:"",onClose:n[5]||(n[5]=e=>h.value=!1)},{footer:hn((()=>[Ir("div",dK,[Ir("div",null,[Lr(It(oO),{onClick:n[3]||(n[3]=e=>h.value=!1)},{default:hn((()=>[Dr(oe(e.$t("取消")),1)])),_:1}),Lr(It(oO),{type:"primary",class:"ml-2.5",onClick:n[4]||(n[4]=e=>g()),loading:m.value,disabled:m.value},{default:hn((()=>[Dr(oe(e.$t("确定")),1)])),_:1},8,["loading","disabled"])])])])),default:hn((()=>[Lr(P,{type:"warning"},{default:hn((()=>[Dr(oe(e.$tc("划转后的余额仅用于{title}消费使用",{title:It(t).title})),1)])),_:1}),Ir("div",lK,[Ir("div",sK,oe(e.$t("当前推广佣金余额")),1),Lr(T,{placeholder:It(Gf)(a.value[4]),type:"number",disabled:""},null,8,["placeholder"])]),Ir("div",cK,[Ir("div",uK,oe(e.$t("划转金额")),1),Lr(A,{value:f.value,"onUpdate:value":n[2]||(n[2]=e=>f.value=e),min:0,placeholder:e.$t("请输入需要划转到余额的金额"),clearable:""},null,8,["value","placeholder"])])])),_:1},8,["title"])])),_:1},8,["show"]),Lr(z,{show:b.value,"onUpdate:show":n[12]||(n[12]=e=>b.value=e)},{default:hn((()=>[Lr(S,{title:e.$t("推广佣金划转至余额"),segmented:{content:!0,footer:!0},"footer-style":"padding-top: 10px; padding-bottom:10px",class:"mx-2.5 max-w-full w-150 md:mx-auto"},{"header-extra":hn((()=>[Lr(It(oO),{class:"h-auto p-0.5",tertiary:"",size:"large",onClick:n[7]||(n[7]=e=>b.value=!1)},{icon:hn((()=>[Lr(R,{class:"cursor-pointer opacity-85"})])),_:1})])),footer:hn((()=>[Ir("div",mK,[Ir("div",null,[Lr(It(oO),{onClick:n[10]||(n[10]=e=>b.value=!1)},{default:hn((()=>[Dr(oe(e.$t("取消")),1)])),_:1}),Lr(It(oO),{type:"primary",class:"ml-2.5",onClick:n[11]||(n[11]=e=>C()),loading:x.value,disabled:x.value},{default:hn((()=>[Dr(oe(e.$t("确定")),1)])),_:1},8,["loading","disabled"])])])])),default:hn((()=>{var o;return[Ir("div",pK,[Ir("div",hK,oe(e.$t("提现方式")),1),Lr(E,{value:y.method,"onUpdate:value":n[8]||(n[8]=e=>y.method=e),options:null==(o=It(t).appConfig)?void 0:o.withdraw_methods.map((e=>({label:e,value:e}))),placeholder:e.$t("请选择提现方式")},null,8,["value","options","placeholder"])]),Ir("div",fK,[Ir("div",vK,oe(e.$t("提现账号")),1),Lr(T,{value:y.account,"onUpdate:value":n[9]||(n[9]=e=>y.account=e),placeholder:e.$t("请输入提现账号"),type:"string"},null,8,["value","placeholder"])])]})),_:1},8,["title"])])),_:1},8,["show"])])),_:1})}}}),bK=Object.freeze(Object.defineProperty({__proto__:null,default:gK},Symbol.toStringTag,{value:"Module"})),yK={class:""},xK={class:"mb-1 text-base font-semibold"},CK={class:"text-xs text-gray-500"},wK=["innerHTML"],kK=zn({__name:"index",setup(e){const t=_N(),n=new qV({html:!0});window.copy=e=>Xf(e),window.jump=e=>i(e);const o=Et(!1),r=Et();function i(e){return v(this,null,(function*(){const{data:n}=yield function(e,t="zh-CN"){return EN.get(`/user/knowledge/fetch?id=${e}&language=${t}`)}(e,t.lang);n&&(r.value=n),o.value=!0}))}const a=Et(""),l=Et(!0),s=Et();function c(){return v(this,null,(function*(){l.value=!0;const e=a.value,{data:n}=yield function(e="",t="zh-CN"){return EN.get(`/user/knowledge/fetch?keyword=${e}&language=${t}`)}(e,t.lang);s.value=n,l.value=!1}))}function u(){c()}return Dn((()=>{u()})),(e,t)=>{const c=AE,d=oO,p=RE,h=P$,f=lL,v=YB,m=XB,g=vO,b=JI,y=ZI,x=Zj;return _r(),Rr(x,{"show-footer":!1},{default:hn((()=>[Lr(p,null,{default:hn((()=>[Lr(c,{placeholder:e.$t("使用文档"),value:a.value,"onUpdate:value":t[0]||(t[0]=e=>a.value=e),onKeyup:t[1]||(t[1]=fa((e=>u()),["enter"]))},null,8,["placeholder","value"]),Lr(d,{type:"primary",ghost:"",onClick:t[2]||(t[2]=e=>u())},{default:hn((()=>[Dr(oe(e.$t("搜索")),1)])),_:1})])),_:1}),l.value?(_r(),Rr(f,{key:0,vertical:"",class:"mt-5"},{default:hn((()=>[Lr(h,{height:"20px",width:"33%"}),Lr(h,{height:"20px",width:"66%"}),Lr(h,{height:"20px"})])),_:1})):$r("",!0),(_r(!0),zr(yr,null,eo(s.value,((t,n)=>(_r(),Rr(g,{key:n,title:n,class:"mt-5 rounded-md",contentStyle:"padding:0"},{default:hn((()=>[Lr(m,{clickable:"",hoverable:""},{default:hn((()=>[(_r(!0),zr(yr,null,eo(t,(t=>(_r(),Rr(v,{key:t.id,onClick:e=>i(t.id)},{default:hn((()=>[Ir("div",yK,[Ir("div",xK,oe(t.title),1),Ir("div",CK,oe(e.$t("最后更新"))+" "+oe(It(qf)(t.updated_at)),1)])])),_:2},1032,["onClick"])))),128))])),_:2},1024)])),_:2},1032,["title"])))),128)),Lr(y,{show:o.value,"onUpdate:show":t[3]||(t[3]=e=>o.value=e),width:"80%",placement:"right"},{default:hn((()=>{var e;return[Lr(b,{title:null==(e=r.value)?void 0:e.title,closable:""},{default:hn((()=>{var e,t;return[Ir("div",{innerHTML:(t=(null==(e=r.value)?void 0:e.body)||"",n.render(t)),class:"custom-html-style markdown-body"},null,8,wK)]})),_:1},8,["title"])]})),_:1},8,["show"])])),_:1})}}}),SK=Object.freeze(Object.defineProperty({__proto__:null,default:kK},Symbol.toStringTag,{value:"Module"})),_K={class:"inline-block",viewBox:"0 0 24 24",width:"1em",height:"1em"},PK=[Ir("path",{fill:"currentColor",d:"M11 18h2v-2h-2zm1-16A10 10 0 0 0 2 12a10 10 0 0 0 10 10a10 10 0 0 0 10-10A10 10 0 0 0 12 2m0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8s8 3.59 8 8s-3.59 8-8 8m0-14a4 4 0 0 0-4 4h2a2 2 0 0 1 2-2a2 2 0 0 1 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5a4 4 0 0 0-4-4"},null,-1)],TK={name:"mdi-help-circle-outline",render:function(e,t){return _r(),zr("svg",_K,[...PK])}},AK={class:"flex"},zK={class:"flex-[1]"},RK={class:"flex flex-[2] flex-shrink-0 text-center"},EK={class:"flex flex-1 items-center justify-center"},OK={class:"flex flex-1 items-center justify-center"},MK={class:"flex-1"},FK={class:"flex"},IK={class:"flex-[1] break-anywhere"},LK={class:"flex flex-[2] flex-shrink-0 items-center text-center"},BK={class:"flex flex-[1] items-center justify-center"},DK={class:"flex-[1]"},$K={class:"flex-[1]"},NK={key:0},jK={key:1},HK=zn({__name:"index",setup(e){const t=Et([]),n=Et(!0);return Dn((()=>{!function(){v(this,null,(function*(){n.value=!0;const e=yield ON(),{data:o}=e;t.value=o,n.value=!1}))}()})),(e,o)=>{const r=P$,i=lL,a=TK,l=NM,s=qR,c=YB,u=XB,d=Xn("router-link"),p=uE,h=Zj;return _r(),Rr(h,null,{default:hn((()=>[n.value?(_r(),Rr(i,{key:0,vertical:"",class:"mt-5"},{default:hn((()=>[Lr(r,{height:"20px",width:"33%"}),Lr(r,{height:"20px",width:"66%"}),Lr(r,{height:"20px"})])),_:1})):t.value.length>0?(_r(),Rr(u,{key:1,clickable:"",hoverable:""},{header:hn((()=>[Ir("div",AK,[Ir("div",zK,oe(e.$t("名称")),1),Ir("div",RK,[Ir("div",EK,[Dr(oe(e.$t("状态"))+" ",1),Lr(l,{placement:"bottom",trigger:"hover"},{trigger:hn((()=>[Lr(a,{class:"ml-1 text-base"})])),default:hn((()=>[Ir("span",null,oe(e.$t("五分钟内节点在线情况")),1)])),_:1})]),Ir("div",OK,[Dr(oe(e.$t("倍率"))+" ",1),Lr(l,{placement:"bottom",trigger:"hover"},{trigger:hn((()=>[Lr(a,{class:"ml-1 text-base"})])),default:hn((()=>[Ir("span",null,oe(e.$t("使用的流量将乘以倍率进行扣除")),1)])),_:1})]),Ir("div",MK,oe(e.$t("标签")),1)])])])),default:hn((()=>[(_r(!0),zr(yr,null,eo(t.value,(e=>(_r(),Rr(c,{key:e.id},{default:hn((()=>[Ir("div",FK,[Ir("div",IK,oe(e.name),1),Ir("div",LK,[Ir("div",BK,[Ir("div",{class:J(["h-1.5 w-1.5 rounded-full",e.is_online?"bg-blue-500":"bg-red-500"])},null,2)]),Ir("div",DK,[Lr(s,{size:"small",round:"",class:""},{default:hn((()=>[Dr(oe(e.rate)+" x ",1)])),_:2},1024)]),Ir("div",$K,[e.tags&&e.tags.length>0?(_r(),zr("div",NK,[(_r(!0),zr(yr,null,eo(e.tags,(e=>(_r(),Rr(s,{size:"small",round:"",key:e},{default:hn((()=>[Dr(oe(e),1)])),_:2},1024)))),128))])):(_r(),zr("span",jK,"-"))])])])])),_:2},1024)))),128))])),_:1})):(_r(),Rr(p,{key:2,type:"info"},{default:hn((()=>[Ir("div",null,[Dr(oe(e.$t("没有可用节点,如果您未订阅或已过期请"))+" ",1),Lr(d,{class:"font-semibold",to:"/plan"},{default:hn((()=>[Dr(oe(e.$t("订阅")),1)])),_:1}),Dr("。 ")])])),_:1}))])),_:1})}}}),WK=Object.freeze(Object.defineProperty({__proto__:null,default:HK},Symbol.toStringTag,{value:"Module"})),UK=zn({__name:"index",setup(e){const t=e=>jf.global.t(e),n=[{title:t("# 订单号"),key:"trade_no",render:e=>li(oO,{text:!0,class:"color-primary",onClick:()=>qN.push(`/order/${e.trade_no}`)},{default:()=>e.trade_no})},{title:t("周期"),key:"period",render:e=>li(qR,{round:!0,size:"small"},{default:()=>t(eq[e.period])})},{title:t("订单金额"),key:"total_amount",render:e=>Gf(e.total_amount)},{title:t("订单状态"),key:"status",render(e){const n=t(JV[e.status]),o=li("div",{class:["h-1.5 w-1.5 rounded-full mr-1.2",3===e.status?"bg-green-500":"bg-red-500"]});return li("div",{class:"flex items-center"},[o,n])}},{title:t("创建时间"),key:"created_at",render:e=>Vf(e.created_at)},{title:t("操作"),key:"actions",fixed:"right",render(e){const n=li(oO,{text:!0,type:"primary",onClick:()=>qN.push(`/order/${e.trade_no}`)},{default:()=>t("查看详情")}),o=li(oO,{text:!0,type:"primary",disabled:0!==e.status,onClick:()=>function(e){return v(this,null,(function*(){window.$dialog.confirm({title:t("注意"),type:"info",content:t("如果您已经付款,取消订单可能会导致支付失败,确定要取消订单吗?"),confirm(){return v(this,null,(function*(){const{data:n}=yield FN(e);!0===n&&(window.$message.success(t("取消成功")),r())}))}})}))}(e.trade_no)},{default:()=>t("取消")}),i=li(DI,{vertical:!0});return li("div",[n,i,o])}}],o=Et([]);function r(){return v(this,null,(function*(){!function(){v(this,null,(function*(){const e=yield MN(),{data:t}=e;o.value=t}))}()}))}return Dn((()=>{r()})),(e,t)=>{const r=rI,i=Zj;return _r(),Rr(i,null,{default:hn((()=>[Lr(r,{columns:n,data:o.value,bordered:!1,"scroll-x":800},null,8,["data"])])),_:1})}}}),VK=Object.freeze(Object.defineProperty({__proto__:null,default:UK},Symbol.toStringTag,{value:"Module"})),qK={class:"inline-block",viewBox:"0 0 48 48",width:"1em",height:"1em"},KK=[Ir("g",{fill:"currentColor","fill-rule":"evenodd","clip-rule":"evenodd"},[Ir("path",{d:"M24 42c9.941 0 18-8.059 18-18S33.941 6 24 6S6 14.059 6 24s8.059 18 18 18m0 2c11.046 0 20-8.954 20-20S35.046 4 24 4S4 12.954 4 24s8.954 20 20 20"}),Ir("path",{d:"M34.67 16.259a1 1 0 0 1 .072 1.412L21.386 32.432l-8.076-7.709a1 1 0 0 1 1.38-1.446l6.59 6.29L33.259 16.33a1 1 0 0 1 1.413-.07"})],-1)],GK={name:"healthicons-yes-outline",render:function(e,t){return _r(),zr("svg",qK,[...KK])}},XK={class:"inline-block",viewBox:"0 0 1024 1024",width:"1em",height:"1em"},YK=[Ir("path",{fill:"currentColor",d:"M952.08 1.552L529.039 116.144c-10.752 2.88-34.096 2.848-44.815-.16L72.08 1.776C35.295-8.352-.336 18.176-.336 56.048V834.16c0 32.096 24.335 62.785 55.311 71.409l412.16 114.224c11.025 3.055 25.217 4.751 39.937 4.751c10.095 0 25.007-.784 38.72-4.528l423.023-114.592c31.056-8.4 55.504-39.024 55.504-71.248V56.048c.016-37.84-35.616-64.464-72.24-54.496zM479.999 956.943L71.071 843.887c-3.088-.847-7.408-6.496-7.408-9.712V66.143L467.135 177.68c3.904 1.088 8.288 1.936 12.864 2.656zm480.336-122.767c0 3.152-5.184 8.655-8.256 9.503L544 954.207v-775.92c.592-.144 1.2-.224 1.792-.384L960.32 65.775v768.4h.016zM641.999 366.303c2.88 0 5.81-.367 8.69-1.184l223.935-63.024c17.025-4.816 26.945-22.465 22.16-39.473s-22.56-26.88-39.472-22.16l-223.936 63.025c-17.024 4.816-26.944 22.464-22.16 39.472c3.968 14.128 16.815 23.344 30.783 23.344m.002 192.001c2.88 0 5.81-.368 8.69-1.185l223.935-63.024c17.025-4.816 26.945-22.465 22.16-39.473c-4.783-17.008-22.56-26.88-39.472-22.16l-223.936 63.025c-17.024 4.816-26.944 22.464-22.16 39.457c3.968 14.127 16.815 23.36 30.783 23.36m.002 192c2.88 0 5.81-.368 8.69-1.185l223.935-63.024c17.025-4.816 26.945-22.465 22.16-39.473s-22.56-26.88-39.472-22.16L633.38 687.487c-17.024 4.816-26.944 22.464-22.16 39.472c3.968 14.113 16.815 23.345 30.783 23.345M394.629 303.487l-223.934-63.025c-16.912-4.72-34.688 5.152-39.473 22.16s5.12 34.656 22.16 39.473l223.937 63.024a31.8 31.8 0 0 0 8.687 1.184c13.968 0 26.815-9.215 30.783-23.343c4.784-16.993-5.12-34.657-22.16-39.473m.002 191.999l-223.934-63.025c-16.912-4.72-34.689 5.152-39.473 22.16s5.12 34.656 22.16 39.473l223.936 63.024a31.8 31.8 0 0 0 8.688 1.184c13.968 0 26.815-9.215 30.783-23.343c4.784-16.993-5.12-34.657-22.16-39.473m.002 191.999L170.699 624.46c-16.912-4.72-34.689 5.152-39.473 22.16s5.12 34.656 22.16 39.473l223.936 63.024a31.8 31.8 0 0 0 8.688 1.184c13.968 0 26.815-9.215 30.783-23.343c4.784-17.008-5.12-34.657-22.16-39.473"},null,-1)],QK={name:"simple-line-icons-book-open",render:function(e,t){return _r(),zr("svg",XK,[...YK])}},ZK={class:"inline-block",viewBox:"0 0 20 20",width:"1em",height:"1em"},JK=[Ir("path",{fill:"currentColor",d:"M10 2c-4.42 0-8 3.58-8 8s3.58 8 8 8s8-3.58 8-8s-3.58-8-8-8m-.615 12.66h-1.34l-3.24-4.54l1.341-1.25l2.569 2.4l5.141-5.931l1.34.94z"},null,-1)],eG={name:"dashicons-yes-alt",render:function(e,t){return _r(),zr("svg",ZK,[...JK])}},tG={class:"inline-block",viewBox:"0 0 20 20",width:"1em",height:"1em"},nG=[Ir("path",{fill:"currentColor",d:"M10 2c4.42 0 8 3.58 8 8s-3.58 8-8 8s-8-3.58-8-8s3.58-8 8-8m1.13 9.38l.35-6.46H8.52l.35 6.46zm-.09 3.36c.24-.23.37-.55.37-.96c0-.42-.12-.74-.36-.97s-.59-.35-1.06-.35s-.82.12-1.07.35s-.37.55-.37.97c0 .41.13.73.38.96c.26.23.61.34 1.06.34s.8-.11 1.05-.34"},null,-1)],oG={name:"dashicons-warning",render:function(e,t){return _r(),zr("svg",tG,[...nG])}},rG={class:"relative max-w-full w-75",style:{"padding-bottom":"100%"}},iG={class:"p-2.5 text-center"},aG={key:1,class:"flex flex-wrap"},lG={class:"w-full md:flex-[2]"},sG={key:2,class:"mt-2.5 text-xl"},cG={key:3,class:"text-sm text-[rgba(0,0,0,0.45)]"},uG={class:"flex"},dG={class:"flex-[1] text-gray-400"},pG={class:"flex-[2]"},hG={class:"flex"},fG={class:"mt-1 flex-[1] text-gray-400"},vG={class:"flex-[2]"},mG={class:"flex"},gG={class:"mb-1 mt-1 flex-[1] text-gray-400"},bG={class:"flex-[2]"},yG={class:"flex"},xG={class:"flex-[1] text-gray-400"},CG={class:"flex-[2]"},wG={key:0,class:"flex"},kG={class:"flex-[1] text-gray-400"},SG={class:"flex-[2]"},_G={key:1,class:"flex"},PG={class:"flex-[1] text-gray-400"},TG={class:"flex-[2]"},AG={key:2,class:"flex"},zG={class:"flex-[1] text-gray-400"},RG={class:"flex-[2]"},EG={key:3,class:"flex"},OG={class:"flex-[1] text-gray-400"},MG={class:"flex-[2]"},FG={key:4,class:"flex"},IG={class:"flex-[1] text-gray-400"},LG={class:"flex-[2]"},BG={class:"flex"},DG={class:"mt-1 flex-[1] text-gray-400"},$G={class:"flex-[2]"},NG=["onClick"],jG={class:"flex-[1] whitespace-nowrap"},HG={class:"flex-[1]"},WG=["src"],UG={key:0,class:"w-full md:flex-[1] md:pl-5"},VG={class:"mt-5 rounded-md bg-gray-800 p-5 text-white"},qG={class:"text-lg font-semibold"},KG={class:"flex border-gray-600 border-b pb-4 pt-4"},GG={class:"flex-[2]"},XG={class:"flex-[1] text-right color-#f8f9fa"},YG={key:0,class:"border-[#646669] border-b pb-4 pt-4"},QG={class:"color-#f8f9fa41"},ZG={class:"pt-4 text-right"},JG={key:1,class:"border-[#646669] border-b pb-4 pt-4"},eX={class:"color-#f8f9fa41"},tX={class:"pt-4 text-right"},nX={key:2,class:"border-[#646669] border-b pb-4 pt-4"},oX={class:"color-#f8f9fa41"},rX={class:"pt-4 text-right"},iX={key:3,class:"border-[#646669] border-b pb-4 pt-4"},aX={class:"color-#f8f9fa41"},lX={class:"pt-4 text-right"},sX={key:4,class:"border-[#646669] border-b pb-4 pt-4"},cX={class:"color-#f8f9fa41"},uX={class:"pt-4 text-right"},dX={class:"pb-4 pt-4"},pX={class:"color-#f8f9fa41"},hX={class:"text-4xl font-semibold"},fX=zn({__name:"detail",setup(e){const t=_N(),n=BN(),o=Yl(),r=e=>jf.global.t(e);function i(e){switch(e){case 1:return{icon:"info",title:r("开通中"),subTitle:r("订单系统正在进行处理,请稍等1-3分钟。")};case 2:return{icon:"info",title:r("已取消"),subTitle:r("订单由于超时支付已被取消。")};case 3:case 4:return{icon:"info",title:r("已完成"),subTitle:r("订单已支付并开通。")}}return{icon:"error",title:r("意料之外"),subTitle:r("意料之外的状态")}}const a=Et(""),l=Et(),s=Et(),c=Et(!0);function u(){return v(this,null,(function*(){c.value=!0;const{data:e}=yield(t=a.value,EN.get("/user/order/detail?trade_no="+t));var t;l.value=e,clearInterval(s.value),e.status===ZV.PENDING&&function(){v(this,null,(function*(){const{data:e}=yield EN.get("/user/order/getPaymentMethod");d.value=e}))}(),[ZV.PENDING,ZV.PROCESSING].includes(e.status)&&(s.value=setInterval(y,1500)),c.value=!1}))}const d=Et([]),p=Et(0);function h(){var e,t,n,o,r;return((null==(e=l.value)?void 0:e.plan[l.value.period])||0)-((null==(t=l.value)?void 0:t.balance_amount)||0)-((null==(n=l.value)?void 0:n.surplus_amount)||0)+((null==(o=l.value)?void 0:o.refund_amount)||0)-((null==(r=l.value)?void 0:r.discount_amount)||0)}function f(){const e=d.value[p.value];return((null==e?void 0:e.handling_fee_percent)||(null==e?void 0:e.handling_fee_fixed))&&h()?h()*parseFloat(e.handling_fee_percent||"0")/100+((null==e?void 0:e.handling_fee_fixed)||0):0}function m(){return v(this,null,(function*(){const e=d.value[p.value],{data:t,type:n}=yield(o=a.value,i=null==e?void 0:e.id,EN.post("/user/order/checkout",{trade_no:o,method:i}));var o,i;t&&(!0===t?(window.$message.info(r("支付成功")),setTimeout((()=>{x()}),500)):0===n?(g.value=!0,b.value=t):1===n&&(window.$message.info(r("正在前往收银台")),setTimeout((()=>{window.location.href=t}),500)))}))}const g=Et(!1),b=Et("");function y(){return v(this,null,(function*(){var e;const{data:t}=yield(n=a.value,EN.get("/user/order/check?trade_no="+n));var n;t!==(null==(e=l.value)?void 0:e.status)&&x()}))}function x(){return v(this,null,(function*(){C(),n.getUserInfo()}))}function C(){return v(this,null,(function*(){u(),g.value=!1}))}return Dn((()=>{"string"==typeof o.params.trade_no&&(a.value=o.params.trade_no),C()})),Wn((()=>{clearInterval(s.value)})),(e,n)=>{const o=h$,s=DI,u=vO,y=RI,x=P$,w=lL,k=oG,S=eG,_=QK,P=oO,T=GK,A=Zj;return _r(),Rr(A,null,{default:hn((()=>{var A,z,R,E,O,M,F,I,L,B,D,$,N,j,H,W,U,V,q,K,G,X,Y,Q,Z,ee;return[Lr(y,{show:g.value,"onUpdate:show":n[0]||(n[0]=e=>g.value=e),onOnAfterLeave:n[1]||(n[1]=e=>b.value="")},{default:hn((()=>[Lr(u,{"content-style":"padding:10px",class:"w-auto",bordered:!1,size:"huge",role:"dialog","aria-modal":"true"},{default:hn((()=>[Ir("div",rG,[b.value?(_r(),Rr(o,{key:0,value:b.value,class:"pay-qrcode absolute h-full! w-full!",size:"400"},null,8,["value"])):$r("",!0)]),Lr(s,{class:"m-0!"}),Ir("div",iG,oe(e.$t("等待支付中")),1)])),_:1})])),_:1},8,["show"]),c.value?(_r(),Rr(w,{key:0,vertical:"",class:"mt-5"},{default:hn((()=>[Lr(x,{height:"20px",width:"33%"}),Lr(x,{height:"20px",width:"66%"}),Lr(x,{height:"20px"})])),_:1})):(_r(),zr("div",aG,[Ir("div",lG,[0!==(null==(A=l.value)?void 0:A.status)?(_r(),Rr(u,{key:0,class:"flex text-center","items-center":""},{default:hn((()=>{var t,o,r,a,s,c;return[2===(null==(t=l.value)?void 0:t.status)?(_r(),Rr(k,{key:0,class:"text-9xl color-#f9a314"})):$r("",!0),3===(null==(o=l.value)?void 0:o.status)||4==(null==(r=l.value)?void 0:r.status)?(_r(),Rr(S,{key:1,class:"text-9xl color-#48bc19"})):$r("",!0),(null==(a=l.value)?void 0:a.status)?(_r(),zr("div",sG,oe(i(l.value.status).title),1)):$r("",!0),(null==(s=l.value)?void 0:s.status)?(_r(),zr("div",cG,oe(i(l.value.status).subTitle),1)):$r("",!0),3===(null==(c=l.value)?void 0:c.status)?(_r(),Rr(P,{key:4,"icon-placement":"left",strong:"",color:"#db4619",size:"small",round:"",class:"mt-8",onClick:n[2]||(n[2]=t=>e.$router.push("/knowledge"))},{icon:hn((()=>[Lr(_)])),default:hn((()=>[Dr(" "+oe(e.$t("查看使用教程")),1)])),_:1})):$r("",!0)]})),_:1})):$r("",!0),Lr(u,{class:"mt-5 rounded-md",title:e.$t("商品信息")},{default:hn((()=>{var t,n,o;return[Ir("div",uG,[Ir("div",dG,oe(e.$t("产品名称"))+":",1),Ir("div",pG,oe(null==(t=l.value)?void 0:t.plan.name),1)]),Ir("div",hG,[Ir("div",fG,oe(e.$t("类型/周期"))+":",1),Ir("div",vG,oe((null==(n=l.value)?void 0:n.period)?e.$t(It(eq)[l.value.period]):""),1)]),Ir("div",mG,[Ir("div",gG,oe(e.$t("产品流量"))+":",1),Ir("div",bG,oe(null==(o=l.value)?void 0:o.plan.transfer_enable)+" GB",1)])]})),_:1},8,["title"]),Lr(u,{class:"mt-5 rounded-md",title:e.$t("订单信息")},{"header-extra":hn((()=>{var t;return[0===(null==(t=l.value)?void 0:t.status)?(_r(),Rr(P,{key:0,color:"#db4619",size:"small",round:"",strong:"",onClick:n[3]||(n[3]=e=>function(){return v(this,null,(function*(){window.$dialog.confirm({title:r("注意"),type:"info",content:r("如果您已经付款,取消订单可能会导致支付失败,确定要取消订单吗?"),confirm(){return v(this,null,(function*(){const{data:e}=yield FN(a.value);!0===e&&(window.$message.success(r("取消成功")),C())}))}})}))}())},{default:hn((()=>[Dr(oe(e.$t("关闭订单")),1)])),_:1})):$r("",!0)]})),default:hn((()=>{var t,n,o,r,i,a,s,c,u,d,p;return[Ir("div",yG,[Ir("div",xG,oe(e.$t("订单号"))+":",1),Ir("div",CG,oe(null==(t=l.value)?void 0:t.trade_no),1)]),(null==(n=l.value)?void 0:n.discount_amount)&&(null==(o=l.value)?void 0:o.discount_amount)>0?(_r(),zr("div",wG,[Ir("div",kG,oe(e.$t("优惠金额")),1),Ir("div",SG,oe(It(Gf)(l.value.discount_amount)),1)])):$r("",!0),(null==(r=l.value)?void 0:r.surplus_amount)&&(null==(i=l.value)?void 0:i.surplus_amount)>0?(_r(),zr("div",_G,[Ir("div",PG,oe(e.$t("旧订阅折抵金额")),1),Ir("div",TG,oe(It(Gf)(l.value.surplus_amount)),1)])):$r("",!0),(null==(a=l.value)?void 0:a.refund_amount)&&(null==(s=l.value)?void 0:s.refund_amount)>0?(_r(),zr("div",AG,[Ir("div",zG,oe(e.$t("退款金额")),1),Ir("div",RG,oe(It(Gf)(l.value.refund_amount)),1)])):$r("",!0),(null==(c=l.value)?void 0:c.balance_amount)&&(null==(u=l.value)?void 0:u.balance_amount)>0?(_r(),zr("div",EG,[Ir("div",OG,oe(e.$t("余额支付 ")),1),Ir("div",MG,oe(It(Gf)(l.value.balance_amount)),1)])):$r("",!0),0===(null==(d=l.value)?void 0:d.status)&&f()>0?(_r(),zr("div",FG,[Ir("div",IG,oe(e.$t("支付手续费"))+":",1),Ir("div",LG,oe(It(Gf)(f())),1)])):$r("",!0),Ir("div",BG,[Ir("div",DG,oe(e.$t("创建时间"))+":",1),Ir("div",$G,oe(It(Vf)(null==(p=l.value)?void 0:p.created_at)),1)])]})),_:1},8,["title"]),0===(null==(z=l.value)?void 0:z.status)?(_r(),Rr(u,{key:1,title:e.$t("支付方式"),class:"mt-5","content-style":"padding:0"},{default:hn((()=>[(_r(!0),zr(yr,null,eo(d.value,((e,t)=>(_r(),zr("div",{key:e.id,class:J(["border-2 rounded-md p-5 border-solid flex",p.value===t?"border-primary":"border-transparent"]),onClick:e=>p.value=t},[Ir("div",jG,oe(e.name),1),Ir("div",HG,[Ir("img",{class:"max-h-8",src:e.icon},null,8,WG)])],10,NG)))),128))])),_:1},8,["title"])):$r("",!0)]),0===(null==(R=l.value)?void 0:R.status)?(_r(),zr("div",UG,[Ir("div",VG,[Ir("div",qG,oe(e.$t("订单总额")),1),Ir("div",KG,[Ir("div",GG,oe(null==(E=l.value)?void 0:E.plan.name),1),Ir("div",XG,oe(null==(O=It(t).appConfig)?void 0:O.currency_symbol)+oe((null==(M=l.value)?void 0:M.period)&&It(Gf)(null==(F=l.value)?void 0:F.plan[l.value.period])),1)]),(null==(I=l.value)?void 0:I.surplus_amount)&&(null==(L=l.value)?void 0:L.surplus_amount)>0?(_r(),zr("div",YG,[Ir("div",QG,oe(e.$t("折抵")),1),Ir("div",ZG," - "+oe(null==(B=It(t).appConfig)?void 0:B.currency_symbol)+oe(It(Gf)(null==(D=l.value)?void 0:D.surplus_amount)),1)])):$r("",!0),(null==($=l.value)?void 0:$.discount_amount)&&(null==(N=l.value)?void 0:N.discount_amount)>0?(_r(),zr("div",JG,[Ir("div",eX,oe(e.$t("折扣")),1),Ir("div",tX," - "+oe(null==(j=It(t).appConfig)?void 0:j.currency_symbol)+oe(It(Gf)(null==(H=l.value)?void 0:H.discount_amount)),1)])):$r("",!0),(null==(W=l.value)?void 0:W.refund_amount)&&(null==(U=l.value)?void 0:U.refund_amount)>0?(_r(),zr("div",nX,[Ir("div",oX,oe(e.$t("退款")),1),Ir("div",rX," - "+oe(null==(V=It(t).appConfig)?void 0:V.currency_symbol)+oe(It(Gf)(null==(q=l.value)?void 0:q.refund_amount)),1)])):$r("",!0),(null==(K=l.value)?void 0:K.balance_amount)&&(null==(G=l.value)?void 0:G.balance_amount)>0?(_r(),zr("div",iX,[Ir("div",aX,oe(e.$t("余额支付")),1),Ir("div",lX," - "+oe(null==(X=It(t).appConfig)?void 0:X.currency_symbol)+oe(It(Gf)(null==(Y=l.value)?void 0:Y.balance_amount)),1)])):$r("",!0),f()>0?(_r(),zr("div",sX,[Ir("div",cX,oe(e.$t("支付手续费")),1),Ir("div",uX," + "+oe(null==(Q=It(t).appConfig)?void 0:Q.currency_symbol)+oe(It(Gf)(f())),1)])):$r("",!0),Ir("div",dX,[Ir("div",pX,oe(e.$t("总计")),1),Ir("div",hX,oe(null==(Z=It(t).appConfig)?void 0:Z.currency_symbol)+" "+oe(It(Gf)(h()+f()))+" "+oe(null==(ee=It(t).appConfig)?void 0:ee.currency),1)]),Lr(P,{type:"primary",class:"w-full text-white","icon-placement":"left",strong:"",onClick:n[4]||(n[4]=e=>m())},{icon:hn((()=>[Lr(T)])),default:hn((()=>[Dr(" "+oe(e.$t("结账")),1)])),_:1})])])):$r("",!0)]))]})),_:1})}}}),vX=Object.freeze(Object.defineProperty({__proto__:null,default:fX},Symbol.toStringTag,{value:"Module"})),mX={class:"inline-block",viewBox:"0 0 50 50",width:"1em",height:"1em"},gX=[Ir("path",{fill:"currentColor",d:"M25 42c-9.4 0-17-7.6-17-17S15.6 8 25 8s17 7.6 17 17s-7.6 17-17 17m0-32c-8.3 0-15 6.7-15 15s6.7 15 15 15s15-6.7 15-15s-6.7-15-15-15"},null,-1),Ir("path",{fill:"currentColor",d:"m32.283 16.302l1.414 1.415l-15.98 15.98l-1.414-1.414z"},null,-1),Ir("path",{fill:"currentColor",d:"m17.717 16.302l15.98 15.98l-1.414 1.415l-15.98-15.98z"},null,-1)],bX={name:"ei-close-o",render:function(e,t){return _r(),zr("svg",mX,[...gX])}},yX={class:"inline-block",viewBox:"0 0 50 50",width:"1em",height:"1em"},xX=[Ir("path",{fill:"currentColor",d:"M25 42c-9.4 0-17-7.6-17-17S15.6 8 25 8s17 7.6 17 17s-7.6 17-17 17m0-32c-8.3 0-15 6.7-15 15s6.7 15 15 15s15-6.7 15-15s-6.7-15-15-15"},null,-1),Ir("path",{fill:"currentColor",d:"m23 32.4l-8.7-8.7l1.4-1.4l7.3 7.3l11.3-11.3l1.4 1.4z"},null,-1)],CX={name:"ei-check",render:function(e,t){return _r(),zr("svg",yX,[...xX])}},wX={class:"ml-auto mr-auto max-w-1200 w-full"},kX={class:"m-3 mb-1 mt-1 text-3xl font-normal"},SX={class:"card-container mt-2.5 md:mt-10"},_X=["onClick"],PX={class:"vertical-bottom"},TX={class:"text-3xl font-semibold"},AX={class:"pl-1 text-base text-gray-500"},zX={key:0},RX=["innerHTML"],EX=zn({__name:"index",setup(e){const t=_N(),n=e=>jf.global.t(e),o=new qV({html:!0}),r=Et(0),i=[{value:0,label:n("全部")},{value:1,label:n("按周期")},{value:2,label:n("按流量")}],a=Et([]),l=Et([]);function s(){return v(this,null,(function*(){const{data:e}=yield EN.get("/user/plan/fetch");e.forEach((e=>{const t=function(e){return null!==e.onetime_price?{price:e.onetime_price/100,cycle:n("一次性")}:null!==e.month_price?{price:e.month_price/100,cycle:n("月付")}:null!==e.quarter_price?{price:e.quarter_price/100,cycle:n("季付")}:null!==e.half_year_price?{price:e.half_year_price/100,cycle:n("半年付")}:null!==e.year_price?{price:e.year_price/100,cycle:n("年付")}:null!==e.two_year_price?{price:e.two_year_price/100,cycle:n("两年付")}:null!==e.three_year_price?{price:e.three_year_price/100,cycle:n("三年付")}:{price:0,cycle:n("错误")}}(e);e.price=t.price,e.cycle=t.cycle})),l.value=e}))}return lr([l,r],(e=>{a.value=e[0].filter((t=>0===e[1]?1:1===e[1]?!((t.onetime_price||0)>0):2===e[1]?(t.onetime_price||0)>0:void 0))})),Dn((()=>{s()})),(e,n)=>{const l=rF,s=oF,c=CX,u=bX,d=SF,p=oO,h=vO,f=Zj;return _r(),Rr(f,null,{default:hn((()=>[Ir("div",wX,[Ir("h2",kX,oe(e.$t("选择最适合你的计划")),1),Lr(s,{value:r.value,"onUpdate:value":n[0]||(n[0]=e=>r.value=e),name:"plan_select",class:""},{default:hn((()=>[(_r(),zr(yr,null,eo(i,(e=>Lr(l,{key:e.value,value:e.value,label:e.label,style:{background:"--n-color"}},null,8,["value","label"]))),64))])),_:1},8,["value"]),Ir("section",SX,[(_r(!0),zr(yr,null,eo(a.value,(n=>(_r(),zr("div",{class:"card-item min-w-75 cursor-pointer",key:n.id,onClick:t=>e.$router.push("/plan/"+n.id)},[Lr(h,{title:n.name,hoverable:"",class:"max-w-full w-375"},{"header-extra":hn((()=>{var e;return[Ir("div",PX,[Ir("span",TX,oe(null==(e=It(t).appConfig)?void 0:e.currency_symbol)+" "+oe(n.price),1),Ir("span",AX," /"+oe(n.cycle),1)])]})),action:hn((()=>[Lr(p,{strong:"",secondary:"",type:"primary"},{default:hn((()=>[Dr(oe(e.$t("立即订阅")),1)])),_:1})])),default:hn((()=>{return[It(rd)(n.content)?(_r(),zr("div",zX,[(_r(!0),zr(yr,null,eo(JSON.parse(n.content),((e,t)=>(_r(),zr("div",{key:t,class:J(["vertical-center flex items-center",e.support?"":"opacity-30"])},[Lr(d,{size:"30",class:"flex items-center text-[--primary-color]"},{default:hn((()=>[e.support?(_r(),Rr(c,{key:0})):(_r(),Rr(u,{key:1}))])),_:2},1024),Ir("div",null,oe(e.feature),1)],2)))),128))])):(_r(),zr("div",{key:1,innerHTML:(e=n.content||"",o.render(e)),class:"markdown-body"},null,8,RX))];var e})),_:2},1032,["title"])],8,_X)))),128))])])])),_:1})}}}),OX=tj(EX,[["__scopeId","data-v-16d7c058"]]),MX=Object.freeze(Object.defineProperty({__proto__:null,default:OX},Symbol.toStringTag,{value:"Module"})),FX={class:"inline-block",viewBox:"0 0 576 512",width:"1em",height:"1em"},IX=[Ir("path",{fill:"currentColor",d:"M64 64C28.7 64 0 92.7 0 128v64c0 8.8 7.4 15.7 15.7 18.6C34.5 217.1 48 235 48 256s-13.5 38.9-32.3 45.4C7.4 304.3 0 311.2 0 320v64c0 35.3 28.7 64 64 64h448c35.3 0 64-28.7 64-64v-64c0-8.8-7.4-15.7-15.7-18.6C541.5 294.9 528 277 528 256s13.5-38.9 32.3-45.4c8.3-2.9 15.7-9.8 15.7-18.6v-64c0-35.3-28.7-64-64-64zm64 112v160c0 8.8 7.2 16 16 16h288c8.8 0 16-7.2 16-16V176c0-8.8-7.2-16-16-16H144c-8.8 0-16 7.2-16 16m-32-16c0-17.7 14.3-32 32-32h320c17.7 0 32 14.3 32 32v192c0 17.7-14.3 32-32 32H128c-17.7 0-32-14.3-32-32z"},null,-1)],LX={name:"fa6-solid-ticket",render:function(e,t){return _r(),zr("svg",FX,[...IX])}},BX={key:1,class:"grid grid-cols-1 lg:grid-cols-2 gap-5 mt-5"},DX={class:"space-y-5"},$X={key:0},NX=["innerHTML"],jX=["onClick"],HX={class:"space-y-5"},WX={class:"bg-gray-800 rounded-lg p-5 text-white"},UX={class:"flex items-center gap-3"},VX=["placeholder"],qX={class:"bg-gray-800 rounded-lg p-5 text-white space-y-4"},KX={class:"text-lg font-semibold"},GX={class:"flex justify-between items-center py-3 border-b border-gray-600"},XX={class:"font-semibold"},YX={key:0,class:"flex justify-between items-center py-3 border-b border-gray-600"},QX={class:"text-gray-300"},ZX={class:"text-sm text-gray-400"},JX={class:"font-semibold text-green-400"},eY={class:"py-3"},tY={class:"text-gray-300 mb-2"},nY={class:"text-3xl font-bold"},oY=zn({__name:"detail",setup(e){const t=_N(),n=BN(),o=Yl(),r=e=>jf.global.t(e),i=Et(Number(o.params.plan_id)),a=Et(),l=Et(!0),s=Et(),c=Et(0),u={month_price:r("月付"),quarter_price:r("季付"),half_year_price:r("半年付"),year_price:r("年付"),two_year_price:r("两年付"),three_year_price:r("三年付"),onetime_price:r("一次性"),reset_price:r("流量重置包")},d=Et(""),p=Et(!1),h=Et(),f=Et(!1),m=ai((()=>a.value?Object.entries(u).filter((([e])=>null!==a.value[e]&&void 0!==a.value[e])).map((([e,t])=>({name:t,key:e}))):[])),g=ai((()=>{var e;return(null==(e=t.appConfig)?void 0:e.currency_symbol)||"¥"})),b=ai((()=>{var e;return null==(e=m.value[c.value])?void 0:e.key})),y=ai((()=>a.value&&b.value&&a.value[b.value]||0)),x=ai((()=>{if(!h.value||!y.value)return 0;const{type:e,value:t}=h.value;return 1===e?t:Math.floor(t*y.value/100)})),C=ai((()=>Math.max(0,y.value-x.value))),w=ai((()=>{var e;const t=null==(e=a.value)?void 0:e.content;if(!t)return!1;try{return JSON.parse(t),!0}catch(WQ){return!1}})),k=ai((()=>{var e;if(!w.value)return[];try{return JSON.parse((null==(e=a.value)?void 0:e.content)||"[]")}catch(WQ){return[]}})),S=ai((()=>{var e;return w.value||!(null==(e=a.value)?void 0:e.content)?"":new qV({html:!0}).render(a.value.content)})),_=e=>{var t;return Gf((null==(t=a.value)?void 0:t[e])||0)},P=()=>v(this,null,(function*(){if(d.value.trim()){p.value=!0;try{const{data:n}=yield(e=d.value,t=i.value,EN.post("/user/coupon/check",{code:e,plan_id:t}));n&&(h.value=n,window.$message.success(r("优惠券验证成功")))}catch(n){h.value=void 0}finally{p.value=!1}var e,t}})),T=()=>v(this,null,(function*(){var e;const t=null==(e=s.value)?void 0:e.find((e=>0===e.status));return t?A(t.trade_no):z()?R():void(yield E())})),A=e=>{window.$dialog.confirm({title:r("注意"),type:"info",content:r("你还有未完成的订单,购买前需要先进行取消,确定取消先前的订单吗?"),positiveText:r("确认取消"),negativeText:r("返回我的订单"),confirm(){return v(this,null,(function*(){const{data:t}=yield FN(e);t&&(yield E())}))},cancel:()=>qN.push("/order")})},z=()=>n.plan_id&&n.plan_id!=i.value&&(null===n.expired_at||n.expired_at>=Math.floor(Date.now()/1e3)),R=()=>{window.$dialog.confirm({title:r("注意"),type:"info",content:r("请注意,变更订阅会导致当前订阅被覆盖。"),confirm:()=>E()})},E=()=>v(this,null,(function*(){var e;if(b.value){f.value=!0;try{const{data:t}=yield LN(i.value,b.value,null==(e=h.value)?void 0:e.code);t&&(window.$message.success(r("订单提交成功,正在跳转支付")),setTimeout((()=>qN.push("/order/"+t)),500))}finally{f.value=!1}}})),O=()=>v(this,null,(function*(){l.value=!0;try{const{data:t}=yield(e=i.value,EN.get("/user/plan/fetch?id="+e));t?a.value=t:qN.push("/plan")}finally{l.value=!1}var e})),M=()=>v(this,null,(function*(){const{data:e}=yield MN();s.value=e}));return Dn((()=>v(this,null,(function*(){yield Promise.all([O(),M()])})))),(e,n)=>{const o=P$,i=lL,s=CX,u=bX,v=SF,y=vO,A=DI,z=LX,R=oO,E=GK,O=Zj;return _r(),Rr(O,null,{default:hn((()=>{var O,M,F;return[l.value?(_r(),Rr(i,{key:0,vertical:"",class:"mt-5"},{default:hn((()=>[Lr(o,{height:"20px",width:"33%"}),Lr(o,{height:"20px",width:"66%"}),Lr(o,{height:"20px"})])),_:1})):(_r(),zr("div",BX,[Ir("div",DX,[Lr(y,{title:null==(O=a.value)?void 0:O.name,class:"rounded-lg"},{default:hn((()=>[w.value?(_r(),zr("div",$X,[(_r(!0),zr(yr,null,eo(k.value,((e,t)=>(_r(),zr("div",{key:t,class:J(["flex items-center gap-3 py-2",e.support?"":"opacity-50"])},[Lr(v,{size:"20",class:J(e.support?"text-green-500":"text-red-500")},{default:hn((()=>[e.support?(_r(),Rr(s,{key:0})):(_r(),Rr(u,{key:1}))])),_:2},1032,["class"]),Ir("span",null,oe(e.feature),1)],2)))),128))])):(_r(),zr("div",{key:1,innerHTML:S.value,class:"markdown-body"},null,8,NX))])),_:1},8,["title"]),Lr(y,{title:e.$t("付款周期"),class:"rounded-lg","content-style":"padding:0"},{default:hn((()=>[(_r(!0),zr(yr,null,eo(m.value,((e,t)=>(_r(),zr("div",{key:e.key},[Ir("div",{class:J(["flex justify-between items-center p-5 text-base cursor-pointer border-2 transition-all duration-200 border-solid rounded-lg"," dark:hover:bg-primary/20",t===c.value?"border-primary dark:bg-primary/20":"border-transparent"]),onClick:e=>c.value=t},[Ir("div",{class:J(["font-medium transition-colors",t===c.value?" dark:text-primary-400":"text-gray-900 dark:text-gray-100"])},oe(e.name),3),Ir("div",{class:J(["text-lg font-semibold transition-colors",t===c.value?"text-primary-600 dark:text-primary-400":"text-gray-700 dark:text-gray-300"])},oe(g.value)+oe(_(e.key)),3)],10,jX),td.value=e),placeholder:r("有优惠券?"),class:"flex-1 bg-transparent border-none outline-none text-white placeholder-gray-400"},null,8,VX),[[ca,d.value]]),Lr(R,{type:"primary",loading:p.value,disabled:p.value||!d.value.trim(),onClick:P},{icon:hn((()=>[Lr(z)])),default:hn((()=>[Dr(" "+oe(e.$t("验证")),1)])),_:1},8,["loading","disabled"])])]),Ir("div",qX,[Ir("h3",KX,oe(e.$t("订单总额")),1),Ir("div",GX,[Ir("span",null,oe(null==(M=a.value)?void 0:M.name),1),Ir("span",XX,oe(g.value)+oe(_(b.value)),1)]),h.value&&x.value>0?(_r(),zr("div",YX,[Ir("div",null,[Ir("div",QX,oe(e.$t("折扣")),1),Ir("div",ZX,oe(h.value.name),1)]),Ir("span",JX,"-"+oe(g.value)+oe(It(Gf)(x.value)),1)])):$r("",!0),Ir("div",eY,[Ir("div",tY,oe(e.$t("总计")),1),Ir("div",nY,oe(g.value)+oe(It(Gf)(C.value))+" "+oe(null==(F=It(t).appConfig)?void 0:F.currency),1)]),Lr(R,{type:"primary",size:"large",class:"w-full",loading:f.value,disabled:f.value,onClick:T},{icon:hn((()=>[Lr(E)])),default:hn((()=>[Dr(" "+oe(e.$t("下单")),1)])),_:1},8,["loading","disabled"])])])]))]})),_:1})}}}),rY=Object.freeze(Object.defineProperty({__proto__:null,default:oY},Symbol.toStringTag,{value:"Module"})),iY={class:"inline-block",viewBox:"0 0 256 256",width:"1em",height:"1em"},aY=[Ir("path",{fill:"currentColor",d:"M216 64H56a8 8 0 0 1 0-16h136a8 8 0 0 0 0-16H56a24 24 0 0 0-24 24v128a24 24 0 0 0 24 24h160a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16m-36 80a12 12 0 1 1 12-12a12 12 0 0 1-12 12"},null,-1)],lY={name:"ph-wallet-fill",render:function(e,t){return _r(),zr("svg",iY,[...aY])}},sY={class:"text-5xl font-normal"},cY={class:"ml-5 text-xl text-gray-500"},uY={class:"text-gray-500"},dY={class:"mt-2.5 max-w-125"},pY={class:"mt-2.5 max-w-125"},hY={class:"mt-2.5 max-w-125"},fY={class:"mt-2.5 max-w-125"},vY={class:"mb-1"},mY={class:"mt-2.5 max-w-125"},gY={class:"mb-1"},bY={class:"m-0 pb-2.5 pt-2.5 text-xl"},yY={class:"mt-5"},xY=["href"],CY={class:"mt-5"},wY={class:"m-0 pb-2.5 pt-2.5 text-xl"},kY={class:"mt-5"},SY={class:"flex justify-end"},_Y=zn({__name:"index",setup(e){const t=BN(),n=_N(),o=e=>jf.global.t(e),r=Et(""),i=Et(""),a=Et(""),l=Et(!1);function s(){return v(this,null,(function*(){if(l.value=!0,i.value!==a.value)return void window.$message.error(o("两次新密码输入不同"));const{data:e}=yield(t=r.value,n=i.value,EN.post("/user/changePassword",{old_password:t,new_password:n}));var t,n;!0===e&&window.$message.success(o("密码修改成功")),l.value=!1}))}const c=Et(!1),u=Et(!1);function d(e){return v(this,null,(function*(){if("expire"===e){const{data:e}=yield IN({remind_expire:c.value?1:0});!0===e?window.$message.success(o("更新成功")):(window.$message.error(o("更新失败")),c.value=!c.value)}else if("traffic"===e){const{data:e}=yield IN({remind_traffic:u.value?1:0});!0===e?window.$message.success(o("更新成功")):(window.$message.error(o("更新失败")),u.value=!u.value)}}))}const p=Et(),h=Et(!1);function f(){return v(this,null,(function*(){const{data:e}=yield EN.get("user/telegram/getBotInfo");e&&(p.value=e)}))}const m=Et(!1);function g(){return v(this,null,(function*(){const{data:e}=yield EN.get("/user/resetSecurity");e&&window.$message.success(o("重置成功"))}))}return Dn((()=>{!function(){v(this,null,(function*(){t.getUserInfo(),c.value=!!t.remind_expire,u.value=!!t.remind_traffic}))}()})),(e,o)=>{const v=lY,b=vO,y=AE,x=oO,C=M$,w=uE,k=DI,S=z$,_=RI,P=Zj;return _r(),Rr(P,null,{default:hn((()=>{var P,T,A,z;return[Lr(b,{title:e.$t("我的钱包"),class:"rounded-md"},{"header-extra":hn((()=>[Lr(v,{class:"text-4xl text-gray-500"})])),default:hn((()=>{var o;return[Ir("div",null,[Ir("span",sY,oe(It(Gf)(It(t).balance)),1),Ir("span",cY,oe(null==(o=It(n).appConfig)?void 0:o.currency),1)]),Ir("div",uY,oe(e.$t("账户余额(仅消费)")),1)]})),_:1},8,["title"]),Lr(b,{title:e.$t("修改密码"),class:"mt-5 rounded-md"},{default:hn((()=>[Ir("div",dY,[Ir("label",null,oe(e.$t("旧密码")),1),Lr(y,{type:"password",value:r.value,"onUpdate:value":o[0]||(o[0]=e=>r.value=e),placeholder:e.$t("请输入旧密码"),maxlength:32},null,8,["value","placeholder"])]),Ir("div",pY,[Ir("label",null,oe(e.$t("新密码")),1),Lr(y,{type:"password",value:i.value,"onUpdate:value":o[1]||(o[1]=e=>i.value=e),placeholder:e.$t("请输入新密码"),maxlength:32},null,8,["value","placeholder"])]),Ir("div",hY,[Ir("label",null,oe(e.$t("新密码")),1),Lr(y,{type:"password",value:a.value,"onUpdate:value":o[2]||(o[2]=e=>a.value=e),placeholder:e.$t("请输入新密码"),maxlength:32},null,8,["value","placeholder"])]),Lr(x,{class:"mt-5",type:"primary",onClick:s,loading:l.value,disabled:l.value},{default:hn((()=>[Dr(oe(e.$t("保存")),1)])),_:1},8,["loading","disabled"])])),_:1},8,["title"]),Lr(b,{title:e.$t("通知"),class:"mt-5 rounded-md"},{default:hn((()=>[Ir("div",fY,[Ir("div",vY,oe(e.$t("到期邮件提醒")),1),Lr(C,{value:c.value,"onUpdate:value":[o[3]||(o[3]=e=>c.value=e),o[4]||(o[4]=e=>d("expire"))]},null,8,["value"])]),Ir("div",mY,[Ir("div",gY,oe(e.$t("流量邮件提醒")),1),Lr(C,{value:u.value,"onUpdate:value":[o[5]||(o[5]=e=>u.value=e),o[6]||(o[6]=e=>d("traffic"))]},null,8,["value"])])])),_:1},8,["title"]),(null==(T=null==(P=It(n))?void 0:P.appConfig)?void 0:T.is_telegram)?(_r(),Rr(b,{key:0,title:e.$t("绑定Telegram"),class:"mt-5 rounded-md"},{"header-extra":hn((()=>[Lr(x,{type:"primary",round:"",disabled:It(t).userInfo.telegram_id,onClick:o[7]||(o[7]=e=>(h.value=!0,f(),It(t).getUserSubscribe()))},{default:hn((()=>[Dr(oe(It(t).userInfo.telegram_id?e.$t("已绑定"):e.$t("立即开始")),1)])),_:1},8,["disabled"])])),_:1},8,["title"])):$r("",!0),(null==(z=null==(A=It(n))?void 0:A.appConfig)?void 0:z.telegram_discuss_link)?(_r(),Rr(b,{key:1,title:e.$t("Telegram 讨论组"),class:"mt-5 rounded-md"},{"header-extra":hn((()=>[Lr(x,{type:"primary",round:"",onClick:o[8]||(o[8]=e=>{var t,o,r;return r=null==(o=null==(t=It(n))?void 0:t.appConfig)?void 0:o.telegram_discuss_link,void(window.location.href=r)})},{default:hn((()=>[Dr(oe(e.$t("立即加入")),1)])),_:1})])),_:1},8,["title"])):$r("",!0),Lr(b,{title:e.$t("重置订阅信息"),class:"mt-5 rounded-md"},{default:hn((()=>[Lr(w,{type:"warning"},{default:hn((()=>[Dr(oe(e.$t("当你的订阅地址或账户发生泄漏被他人滥用时,可以在此重置订阅信息。避免带来不必要的损失。")),1)])),_:1}),Lr(x,{type:"error",size:"small",class:"mt-2.5",onClick:o[9]||(o[9]=e=>m.value=!0)},{default:hn((()=>[Dr(oe(e.$t("重置")),1)])),_:1})])),_:1},8,["title"]),Lr(_,{title:e.$t("绑定Telegram"),preset:"card",show:h.value,"onUpdate:show":o[12]||(o[12]=e=>h.value=e),class:"mx-2.5 max-w-full w-150 md:mx-auto",footerStyle:"padding: 10px 16px",segmented:{content:!0,footer:!0}},{footer:hn((()=>[Ir("div",SY,[Lr(x,{type:"primary",onClick:o[11]||(o[11]=e=>h.value=!1)},{default:hn((()=>[Dr(oe(e.$t("我知道了")),1)])),_:1})])])),default:hn((()=>{var n,r,i;return[p.value&&It(t).subscribe?(_r(),zr(yr,{key:0},[Ir("div",null,[Ir("h2",bY,oe(e.$t("第一步")),1),Lr(k,{class:"m-0!"}),Ir("div",yY,[Dr(oe(e.$t("打开Telegram搜索"))+" ",1),Ir("a",{href:"https://t.me/"+(null==(n=p.value)?void 0:n.username)},"@"+oe(null==(r=p.value)?void 0:r.username),9,xY)])]),Ir("div",CY,[Ir("h2",wY,oe(e.$t("第二步")),1),Lr(k,{class:"m-0!"}),Ir("div",kY,oe(e.$t("向机器人发送你的")),1),Ir("code",{class:"cursor-pointer",onClick:o[10]||(o[10]=e=>{var n;return It(Xf)("/bind "+(null==(n=It(t).subscribe)?void 0:n.subscribe_url))})},"/bind "+oe(null==(i=It(t).subscribe)?void 0:i.subscribe_url),1)])],64)):(_r(),Rr(S,{key:1,size:"large"}))]})),_:1},8,["title","show"]),Lr(_,{show:m.value,"onUpdate:show":o[13]||(o[13]=e=>m.value=e),preset:"dialog",title:e.$t("确定要重置订阅信息?"),content:e.$t("如果你的订阅地址或信息泄露可以进行此操作。重置后你的UUID及订阅将会变更,需要重新进行订阅。"),"positive-text":e.$t("确认"),"negative-text":e.$t("取消"),onPositiveClick:g},null,8,["show","title","content","positive-text","negative-text"])]})),_:1})}}}),PY=Object.freeze(Object.defineProperty({__proto__:null,default:_Y},Symbol.toStringTag,{value:"Module"})),TY={class:"flex justify-end"},AY=zn({__name:"index",setup(e){const t=e=>jf.global.t(e),n=[{label:t("低"),value:0},{label:t("中"),value:1},{label:t("高"),value:2}],o=[{title:t("主题"),key:"subject"},{title:t("工单级别"),key:"u",render:e=>n[e.level].label},{title:t("工单状态"),key:"status",render(e){const n=li("div",{class:["h-1.5 w-1.5 rounded-full mr-1.3",1===e.status?"bg-green-500":0===e.reply_status?"bg-blue-500":"bg-red-500"]});return li("div",{class:"flex items-center"},[n,1===e.status?t("已关闭"):0===e.reply_status?t("已回复"):t("待回复")])}},{title:t("创建时间"),key:"created_at",render:e=>Vf(e.created_at)},{title:t("最后回复时间"),key:"updated_at",render:e=>Vf(e.updated_at)},{title:t("操作"),key:"actions",fixed:"right",render(e){const n=li(oO,{text:!0,type:"primary",onClick:()=>qN.push(`/ticket/${e.id}`)},{default:()=>t("查看")}),o=li(oO,{text:!0,type:"primary",disabled:1===e.status,onClick:()=>function(e){return v(this,null,(function*(){const{data:n}=yield function(e){return EN.post("/user/ticket/close",{id:e})}(e);n&&(window.$message.success(t("关闭成功")),d())}))}(e.id)},{default:()=>t("关闭")}),r=li(DI,{vertical:!0});return li("div",[n,r,o])}}],r=Et(!1),i=Et(""),a=Et(),l=Et("");function s(){return v(this,null,(function*(){const{data:e}=yield(n=i.value,o=a.value,s=l.value,EN.post("/user/ticket/save",{subject:n,level:o,message:s}));var n,o,s;!0===e&&(window.$message.success(t("创建成功")),d(),r.value=!1)}))}const c=Et([]);function u(){return v(this,null,(function*(){const{data:e}=yield EN.get("/user/ticket/fetch");c.value=e}))}function d(){u()}return Dn((()=>{d()})),(e,t)=>{const u=AE,d=hM,p=lL,h=vO,f=RI,v=rI,m=Zj;return _r(),Rr(m,null,{default:hn((()=>[Lr(f,{show:r.value,"onUpdate:show":t[6]||(t[6]=e=>r.value=e)},{default:hn((()=>[Lr(h,{title:e.$t("新的工单"),class:"mx-2.5 max-w-full w-150 md:mx-auto",segmented:{content:!0,footer:!0},closable:"",onClose:t[5]||(t[5]=e=>r.value=!1)},{footer:hn((()=>[Ir("div",TY,[Lr(p,null,{default:hn((()=>[Lr(It(oO),{onClick:t[3]||(t[3]=e=>r.value=!1)},{default:hn((()=>[Dr(oe(e.$t("取消")),1)])),_:1}),Lr(It(oO),{type:"primary",onClick:t[4]||(t[4]=e=>s())},{default:hn((()=>[Dr(oe(e.$t("确认")),1)])),_:1})])),_:1})])])),default:hn((()=>[Ir("div",null,[Ir("label",null,oe(e.$t("主题")),1),Lr(u,{value:i.value,"onUpdate:value":t[0]||(t[0]=e=>i.value=e),class:"mt-1",placeholder:e.$t("请输入工单主题")},null,8,["value","placeholder"])]),Ir("div",null,[Ir("label",null,oe(e.$t("工单级别")),1),Lr(d,{value:a.value,"onUpdate:value":t[1]||(t[1]=e=>a.value=e),options:n,placeholder:e.$t("请选项工单等级"),class:"mt-1"},null,8,["value","placeholder"])]),Ir("div",null,[Ir("label",null,oe(e.$t("消息")),1),Lr(u,{value:l.value,"onUpdate:value":t[2]||(t[2]=e=>l.value=e),type:"textarea",placeholder:e.$t("请描述你遇到的问题"),round:"",class:"mt-1"},null,8,["value","placeholder"])])])),_:1},8,["title"])])),_:1},8,["show"]),Lr(h,{class:"rounded-md",title:e.$t("工单历史")},{"header-extra":hn((()=>[Lr(It(oO),{type:"primary",round:"",onClick:t[7]||(t[7]=e=>r.value=!0)},{default:hn((()=>[Dr(oe(e.$t("新的工单")),1)])),_:1})])),default:hn((()=>[Lr(v,{columns:o,data:c.value,"scroll-x":800},null,8,["data"])])),_:1},8,["title"])])),_:1})}}}),zY=Object.freeze(Object.defineProperty({__proto__:null,default:AY},Symbol.toStringTag,{value:"Module"})),RY={class:"relative",style:{height:"calc(100% - 70px)"}},EY={class:"mb-2 mt-2 text-sm text-gray-500"},OY={class:"mb-2 inline-block rounded-md bg-gray-50 pb-8 pl-4 pr-4 pt-2"},MY=zn({__name:"detail",setup(e){const t=Yl(),n=Et("");function o(){return v(this,null,(function*(){const{data:e}=yield(t=r.value,o=n.value,EN.post("/user/ticket/reply",{id:t,message:o}));var t,o,i;!0===e&&(window.$message.success((i="回复成功",jf.global.t(i))),n.value="",d())}))}const r=Et(),i=Et();function a(){return v(this,null,(function*(){const{data:e}=yield(t=r.value,EN.get("/user/ticket/fetch?id="+t));var t;e&&(i.value=e)}))}const l=Et(null),s=Et(null),c=()=>v(this,null,(function*(){const e=l.value,t=s.value;e&&t&&e.scrollBy({top:t.scrollHeight,behavior:"auto"})})),u=Et();function d(){return v(this,null,(function*(){yield a(),yield tn(),c(),u.value=setInterval(a,2e3)}))}return Dn((()=>{r.value=t.params.ticket_id,d()})),(e,t)=>{const r=w$,a=AE,c=oO,u=RE,d=vO,p=Zj;return _r(),Rr(p,null,{default:hn((()=>{var p;return[Lr(d,{title:null==(p=i.value)?void 0:p.subject,class:"h-full overflow-hidden"},{default:hn((()=>[Ir("div",RY,[Lr(r,{class:"absolute right-0 h-full",ref_key:"scrollbarRef",ref:l},{default:hn((()=>{var e;return[Ir("div",{ref_key:"scrollContainerRef",ref:s},[(_r(!0),zr(yr,null,eo(null==(e=i.value)?void 0:e.message,(e=>(_r(),zr("div",{key:e.id,class:J([e.is_me?"text-right":"text-left"])},[Ir("div",EY,oe(It(Vf)(e.created_at)),1),Ir("div",OY,oe(e.message),1)],2)))),128))],512)]})),_:1},512)]),Lr(u,{size:"large",class:"mt-8"},{default:hn((()=>[Lr(a,{type:"text",size:"large",placeholder:e.$t("输入内容回复工单"),autofocus:!0,value:n.value,"onUpdate:value":t[0]||(t[0]=e=>n.value=e),onKeyup:t[1]||(t[1]=fa((e=>o()),["enter"]))},null,8,["placeholder","value"]),Lr(c,{type:"primary",size:"large",onClick:t[2]||(t[2]=e=>o())},{default:hn((()=>[Dr(oe(e.$t("回复")),1)])),_:1})])),_:1})])),_:1},8,["title"])]})),_:1})}}}),FY=Object.freeze(Object.defineProperty({__proto__:null,default:MY},Symbol.toStringTag,{value:"Module"})),IY=zn({__name:"index",setup(e){const t=e=>jf.global.t(e),n=[{title:t("记录时间"),key:"record_at",render:e=>qf(e.record_at)},{title:t("实际上行"),key:"u",render:e=>Qf(e.u/parseFloat(e.server_rate))},{title:t("实际下行"),key:"d",render:e=>Qf(e.d/parseFloat(e.server_rate))},{title:t("扣费倍率"),key:"server_rate",render:e=>li(qR,{size:"small",round:!0},{default:()=>e.server_rate+" x"})},{title(){const e=li(NM,{placement:"bottom",trigger:"hover"},{trigger:()=>li(j$("mdi-help-circle-outline",{size:16})),default:()=>t("公式:(实际上行 + 实际下行) x 扣费倍率 = 扣除流量")});return li("div",{class:"flex items-center"},[t("总计"),e])},key:"total",fixed:"right",render:e=>Qf(e.d+e.u)}],o=Et([]);function r(){return v(this,null,(function*(){const{data:e}=yield EN.get("/user/stat/getTrafficLog");o.value=e}))}return Dn((()=>{r()})),(e,t)=>{const r=uE,i=rI,a=vO,l=Zj;return _r(),Rr(l,null,{default:hn((()=>[Lr(a,{class:"rounded-md"},{default:hn((()=>[Lr(r,{type:"info",bordered:!1,class:"mb-5"},{default:hn((()=>[Dr(oe(e.$t("流量明细仅保留近月数据以供查询。")),1)])),_:1}),Lr(i,{columns:n,data:o.value,"scroll-x":600},null,8,["data"])])),_:1})])),_:1})}}}),LY=Object.freeze(Object.defineProperty({__proto__:null,default:IY},Symbol.toStringTag,{value:"Module"})),BY={"h-full":"",flex:""},DY=tj({name:"NOTFOUND"},[["render",function(e,t,n,o,r,i){const a=oO,l=x$;return _r(),zr("div",BY,[Lr(l,{"m-auto":"",status:"404",title:"404 Not Found",description:""},{footer:hn((()=>[Lr(a,null,{default:hn((()=>[Dr("Find some fun")])),_:1})])),_:1})])}]]),$Y=Object.freeze(Object.defineProperty({__proto__:null,default:DY},Symbol.toStringTag,{value:"Module"})),NY={class:"inline-block",viewBox:"0 0 24 24",width:"1em",height:"1em"},jY=[Ir("g",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"1.5"},[Ir("path",{d:"M2 12c0 5.523 4.477 10 10 10s10-4.477 10-10S17.523 2 12 2S2 6.477 2 12"}),Ir("path",{d:"M13 2.05S16 6 16 12s-3 9.95-3 9.95m-2 0S8 18 8 12s3-9.95 3-9.95M2.63 15.5h18.74m-18.74-7h18.74"})],-1)],HY={name:"iconoir-language",render:function(e,t){return _r(),zr("svg",NY,[...jY])}},WY={class:"inline-block",viewBox:"0 0 32 32",width:"1em",height:"1em"},UY=[Ir("path",{fill:"currentColor",d:"M26 30H14a2 2 0 0 1-2-2v-3h2v3h12V4H14v3h-2V4a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v24a2 2 0 0 1-2 2"},null,-1),Ir("path",{fill:"currentColor",d:"M14.59 20.59L18.17 17H4v-2h14.17l-3.58-3.59L16 10l6 6l-6 6z"},null,-1)],VY={name:"carbon-login",render:function(e,t){return _r(),zr("svg",WY,[...UY])}},qY=zn({__name:"vueRecaptcha",props:{sitekey:{type:String,required:!0},size:{type:String,required:!1,default:"normal"},theme:{type:String,required:!1,default:"light"},hl:{type:String,required:!1},loadingTimeout:{type:Number,required:!1,default:0}},emits:{verify:e=>null!=e&&""!=e,error:e=>e,expire:null,fail:null},setup(e,{expose:t,emit:n}){const o=e,r=Et(null);let i=null;function a(){i=window.grecaptcha.render(r.value,{sitekey:o.sitekey,theme:o.theme,size:o.size,callback:e=>n("verify",e),"expired-callback":()=>n("expire"),"error-callback":()=>n("fail")})}return t({execute:function(){window.grecaptcha.execute(i)},reset:function(){window.grecaptcha.reset(i)}}),$n((()=>{null==window.grecaptcha?new Promise(((e,t)=>{let n,r=!1;window.recaptchaReady=function(){r||(r=!0,clearTimeout(n),e())};const i="recaptcha-script",a=e=>()=>{var o;r||(r=!0,clearTimeout(n),null==(o=document.getElementById(i))||o.remove(),t(e))};o.loadingTimeout>0&&(n=setTimeout(a("timeout"),o.loadingTimeout));const l=window.document,s=l.createElement("script");s.id=i,s.onerror=a("error"),s.onabort=a("aborted"),s.setAttribute("src",`https://www.recaptcha.net/recaptcha/api.js?onload=recaptchaReady&render=explicit&hl=${o.hl}&_=${+new Date}`),l.head.appendChild(s)})).then((()=>{a()})).catch((e=>{n("error",e)})):a()})),(e,t)=>(_r(),zr("div",{ref_key:"recaptchaDiv",ref:r},null,512))}}),KY="cfTurnstileOnLoad";let GY,XY=typeof window<"u"&&void 0!==window.turnstile?"ready":"unloaded";const YY=zn({name:"VueTurnstile",emits:["update:modelValue","error","unsupported","expired","before-interactive","after-interactive"],props:{siteKey:{type:String,required:!0},modelValue:{type:String,required:!0},resetInterval:{type:Number,required:!1,default:295e3},size:{type:String,required:!1,default:"normal"},theme:{type:String,required:!1,default:"auto"},language:{type:String,required:!1,default:"auto"},action:{type:String,required:!1,default:""},appearance:{type:String,required:!1,default:"always"},renderOnMount:{type:Boolean,required:!1,default:!0}},data:()=>({resetTimeout:void 0,widgetId:void 0}),computed:{turnstileOptions(){return{sitekey:this.siteKey,theme:this.theme,language:this.language,size:this.size,callback:this.callback,action:this.action,appearance:this.appearance,"error-callback":this.errorCallback,"expired-callback":this.expiredCallback,"unsupported-callback":this.unsupportedCallback,"before-interactive-callback":this.beforeInteractiveCallback,"after-interactive-callback":this.afterInteractivecallback}}},methods:{afterInteractivecallback(){this.$emit("after-interactive")},beforeInteractiveCallback(){this.$emit("before-interactive")},expiredCallback(){this.$emit("expired")},unsupportedCallback(){this.$emit("unsupported")},errorCallback(e){this.$emit("error",e)},callback(e){this.$emit("update:modelValue",e),this.startResetTimeout()},reset(){window.turnstile&&(this.$emit("update:modelValue",""),window.turnstile.reset())},remove(){this.widgetId&&(window.turnstile.remove(this.widgetId),this.widgetId=void 0)},render(){this.widgetId=window.turnstile.render(this.$refs.turnstile,this.turnstileOptions)},startResetTimeout(){this.resetTimeout=setTimeout((()=>{this.reset()}),this.resetInterval)}},mounted(){return v(this,null,(function*(){const e=new Promise(((e,t)=>{GY={resolve:e,reject:t},"ready"===XY&&e(void 0)}));window[KY]=()=>{GY.resolve(),XY="ready"},yield(()=>{if("unloaded"===XY){XY="loading";const e=`https://challenges.cloudflare.com/turnstile/v0/api.js?onload=${KY}&render=explicit`,t=document.createElement("script");t.src=e,t.async=!0,t.addEventListener("error",(()=>{GY.reject("Failed to load Turnstile.")})),document.head.appendChild(t)}return e})(),this.renderOnMount&&this.render()}))},beforeUnmount(){this.remove(),clearTimeout(this.resetTimeout)}}),QY={ref:"turnstile"},ZY=((e,t)=>{const n=e.__vccOpts||e;for(const[o,r]of t)n[o]=r;return n})(YY,[["render",function(e,t,n,o,r,i){return _r(),zr("div",QY,null,512)}]]);var JY={},eQ={},tQ={},nQ=fd&&fd.__awaiter||function(e,t,n,o){return new(n||(n=Promise))((function(r,i){function a(e){try{s(o.next(e))}catch(WQ){i(WQ)}}function l(e){try{s(o.throw(e))}catch(WQ){i(WQ)}}function s(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,l)}s((o=o.apply(e,t||[])).next())}))},oQ=fd&&fd.__generator||function(e,t){var n,o,r,i,a={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return i={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function l(l){return function(s){return function(l){if(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,l[0]&&(a=0)),a;)try{if(n=1,o&&(r=2&l[0]?o.return:l[0]?o.throw||((r=o.return)&&r.call(o),0):o.next)&&!(r=r.call(o,l[1])).done)return r;switch(o=0,r&&(l=[2&l[0],r.value]),l[0]){case 0:case 1:r=l;break;case 4:return a.label++,{value:l[1],done:!1};case 5:a.label++,o=l[1],l=[0];continue;case 7:l=a.ops.pop(),a.trys.pop();continue;default:if(!((r=(r=a.trys).length>0&&r[r.length-1])||6!==l[0]&&2!==l[0])){a=0;continue}if(3===l[0]&&(!r||l[1]>r[0]&&l[1]jf.global.t(e),i=Et(null),a=Et(!1),l=Et(!1),s=ai((()=>{var e,t;return(null==(e=x.value)?void 0:e.telegram_login_enable)&&(null==(t=x.value)?void 0:t.telegram_bot_username)})),c=vt({email:"",email_code:"",password:"",confirm_password:"",confirm:"",invite_code:"",lock_invite_code:!1,suffix:""}),u=Et(!0),p=ai((()=>{var e;const t=null==(e=x.value)?void 0:e.tos_url;return"
"+jf.global.tc('我已阅读并同意 服务条款',{url:t})+"
"})),h=Et(!1),f=Et(""),m=Et(""),g=Et(),b=Et(),y=Et(""),x=Et(),C=ai((()=>{var e,t;return(null==(e=x.value)?void 0:e.is_captcha)?(null==(t=x.value)?void 0:t.captcha_type)||"recaptcha":null})),w=ai((()=>{var e,t,n,o;return(null==(e=x.value)?void 0:e.is_captcha)&&("recaptcha"===C.value&&(null==(t=x.value)?void 0:t.recaptcha_site_key)||"recaptcha-v3"===C.value&&(null==(n=x.value)?void 0:n.recaptcha_v3_site_key)||"turnstile"===C.value&&(null==(o=x.value)?void 0:o.turnstile_site_key))}));function k(e){if(e.startsWith("skip_recaptcha"))return{};const t={};switch(C.value){case"recaptcha":t.recaptcha_data=e;break;case"recaptcha-v3":t.recaptcha_v3_token=e;break;case"turnstile":t.turnstile_token=e}return t}function S(e){f.value=e,h.value=!1;const t=y.value;y.value="","register"===t?D():"sendEmailVerify"===t&&E()}function _(){f.value="",T()}function P(){return v(this,null,(function*(){var e;if((null==(e=x.value)?void 0:e.recaptcha_v3_site_key)&&!a.value)try{const e=yield JY.load(x.value.recaptcha_v3_site_key,{autoHideBadge:!0});i.value=e,a.value=!0}catch(t){}}))}function T(){var e,t;"recaptcha"===C.value&&(null==(e=g.value)?void 0:e.reset)?g.value.reset():"turnstile"===C.value&&(null==(t=b.value)?void 0:t.reset)&&b.value.reset(),m.value="",f.value=""}function A(e){return v(this,null,(function*(){return!!w.value&&(f.value="",y.value=e,"recaptcha-v3"===C.value?yield function(e){return v(this,null,(function*(){try{if(a.value||(yield P()),!i.value)return f.value="skip_recaptcha_v3",S("skip_recaptcha_v3"),!0;const t=yield i.value.execute(e);return!!t&&(S(t),!0)}catch(t){return f.value="skip_recaptcha_v3_error",S("skip_recaptcha_v3_error"),!0}}))}(e):(T(),h.value=!0,!0))}))}lr(m,(e=>{e&&y.value&&S(e)}));const z=Et(!1),R=Et(0);function E(){return v(this,null,(function*(){z.value=!0;const e=c.suffix?`${c.email}${c.suffix}`:c.email;try{const t=f.value?k(f.value):void 0,{data:n}=yield function(e,t){return EN.post("/passport/comm/sendEmailVerify",d({email:e},t))}(e,t);if(!0===n){window.$message.success(r("发送成功")),f.value="",R.value=60;const e=setInterval((()=>{R.value--,0===R.value&&clearInterval(e)}),1e3)}}catch(t){throw f.value="",t}finally{z.value=!1}}))}function O(e){!function(e){v(this,null,(function*(){var t,i,a;L.value=!0;try{const l=yield(e=>EN({url:"/passport/auth/telegramLogin",method:"post",data:e}))(e);(null==(t=l.data)?void 0:t.auth_data)?(window.$message.success(r("登录成功")),PN(l.data.auth_data),n.push(null!=(a=null==(i=o.query.redirect)?void 0:i.toString())?a:"/dashboard")):window.$message.error("登录响应格式错误")}catch(l){window.$message.error(r("Telegram 登录失败")+": "+(null==l?void 0:l.message)||"未知错误")}finally{L.value=!1}}))}(e)}function M(){window.onTelegramAuth=function(e){O(e)},window.handleTelegramAuth=O}function F(){return v(this,null,(function*(){if(s.value)try{M(),yield function(){return v(this,null,(function*(){if(!l.value)return new Promise(((e,t)=>{if(document.getElementById("telegram-widget-script"))return l.value=!0,void e();const n=document.createElement("script");n.id="telegram-widget-script",n.src="https://telegram.org/js/telegram-widget.js?22",n.async=!0,n.onload=()=>{l.value=!0,e()},n.onerror=()=>{t(new Error("Failed to load Telegram script"))},document.head.appendChild(n)}))}))}(),setTimeout((()=>{!function(){var e;if(!(null==(e=x.value)?void 0:e.telegram_bot_username))return;const t=document.getElementById("telegram-login-container");if(!t)return;"function"!=typeof window.handleTelegramAuth&&(window.handleTelegramAuth=O),t.innerHTML="";const n=document.createElement("script");n.async=!0,n.src="https://telegram.org/js/telegram-widget.js?22",n.setAttribute("data-telegram-login",x.value.telegram_bot_username),n.setAttribute("data-size","large"),n.setAttribute("data-onauth","onTelegramAuth(user)"),n.setAttribute("data-request-access","write"),n.onerror=()=>{},t.appendChild(n)}()}),200)}catch(e){}}))}function I(){return v(this,null,(function*(){var e,t;const{data:n}=yield EN.get("/guest/comm/config");n&&(x.value=n,Zf(n.email_whitelist_suffix)&&(c.suffix=(null==(e=n.email_whitelist_suffix)?void 0:e[0])?"@"+(null==(t=n.email_whitelist_suffix)?void 0:t[0]):""),n.tos_url&&(u.value=!1),"recaptcha-v3"===n.captcha_type&&n.recaptcha_v3_site_key&&(yield P()),n.telegram_login_enable&&n.telegram_bot_username&&(yield F()))}))}const L=Et(!1);function B(){return v(this,null,(function*(){const{email:e,password:t,confirm_password:i}=c;switch($.value){case"login":yield function(){return v(this,null,(function*(){var e,t;const{email:i,password:a}=c;if(i&&a){L.value=!0;try{const{data:l}=yield(e=>EN({url:"/passport/auth/login",method:"post",data:e}))({email:i,password:a.toString()});(null==l?void 0:l.auth_data)&&(window.$message.success(r("登录成功")),PN(null==l?void 0:l.auth_data),n.push(null!=(t=null==(e=o.query.redirect)?void 0:e.toString())?t:"/dashboard"))}finally{L.value=!1}}else window.$message.warning(r("请输入用户名和密码"))}))}();break;case"register":if(""===c.email)return void window.$message.error(r("请输入邮箱地址"));if(!e||!t)return void window.$message.warning(r("请输入账号密码"));if(t!==i)return void window.$message.warning(r("请确保两次密码输入一致"));if(yield A("register"))return;D();break;case"forgetpassword":yield function(){return v(this,null,(function*(){const{email:e,password:t,confirm_password:o,email_code:i}=c;if(""!==e)if(e&&t)if(t===o){L.value=!0;try{const e=c.suffix?`${c.email}${c.suffix}`:c.email,{data:o}=yield function(e,t,n){return EN.post("/passport/auth/forget",{email:e,password:t,email_code:n})}(e,t,i);o&&(window.$message.success(r("重置密码成功,正在返回登录")),setTimeout((()=>{n.push("/login")}),500))}finally{L.value=!1}}else window.$message.warning(r("请确保两次密码输入一致"));else window.$message.warning(r("请输入账号密码"));else window.$message.error(r("请输入邮箱地址"))}))}()}}))}function D(){return v(this,null,(function*(){const{password:e,invite_code:t,email_code:o}=c,i=c.suffix?`${c.email}${c.suffix}`:c.email;L.value=!0;try{const a=f.value?k(f.value):{},{data:l}=yield(e=>EN({url:"/passport/auth/register",method:"post",data:e}))(d({email:i,password:e,invite_code:t,email_code:o},a));(null==l?void 0:l.auth_data)&&(window.$message.success(r("注册成功")),PN(l.auth_data),f.value="",n.push("/"))}catch(a){throw f.value="",a}finally{L.value=!1}}))}const $=ai((()=>{const e=o.path;return e.includes("login")?"login":e.includes("register")?"register":e.includes("forgetpassword")?"forgetpassword":""})),N=()=>v(this,null,(function*(){"login"===$.value&&(M(),function(){const e=new URLSearchParams(window.location.search);if(["id","first_name","username","auth_date","hash"].some((t=>e.has(t)))){const t={id:parseInt(e.get("id")||"0"),first_name:e.get("first_name")||"",last_name:e.get("last_name")||void 0,username:e.get("username")||void 0,photo_url:e.get("photo_url")||void 0,auth_date:parseInt(e.get("auth_date")||"0"),hash:e.get("hash")||""},n=window.location.pathname+window.location.hash;window.history.replaceState({},document.title,n),O(t)}}()),["register","forgetpassword","login"].includes($.value)&&I(),o.query.code&&(c.lock_invite_code=!0,c.invite_code=o.query.code);const{verify:e,redirect:t}=o.query;if(e&&t){const{data:o}=yield(e=>EN.get("/passport/auth/token2Login?verify="+encodeURIComponent(e.verify)+"&redirect="+encodeURIComponent(e.redirect)))({verify:e,redirect:t});(null==o?void 0:o.auth_data)&&(window.$message.success(r("登录成功")),PN(null==o?void 0:o.auth_data),n.push(t.toString()))}}));return ir((()=>{N()})),(e,n)=>{const o=RI,i=AE,a=hM,d=RE,f=oO,y=GO,w=VY,k=Xn("router-link"),P=DI,T=HY,O=sM,M=vO;return _r(),zr(yr,null,[Lr(o,{show:h.value,"onUpdate:show":n[1]||(n[1]=e=>h.value=e),"mask-closable":!1},{default:hn((()=>{var e,t;return["recaptcha"===C.value&&(null==(e=x.value)?void 0:e.recaptcha_site_key)?(_r(),Rr(It(qY),{key:0,sitekey:x.value.recaptcha_site_key,size:"normal",theme:"light","loading-timeout":3e4,onVerify:S,onExpire:_,onFail:_,onError:_,ref_key:"vueRecaptchaRef",ref:g},null,8,["sitekey"])):"turnstile"===C.value&&(null==(t=x.value)?void 0:t.turnstile_site_key)?(_r(),Rr(It(ZY),{key:1,siteKey:x.value.turnstile_site_key,theme:"auto",modelValue:m.value,"onUpdate:modelValue":n[0]||(n[0]=e=>m.value=e),onError:_,onExpired:_,ref_key:"vueTurnstileRef",ref:b},null,8,["siteKey","modelValue"])):$r("",!0)]})),_:1},8,["show"]),Ir("div",{class:"wh-full flex items-center justify-center",style:G(It(t).background_url&&`background:url(${It(t).background_url}) no-repeat center center / cover;`)},[Lr(M,{class:"mx-auto max-w-md rounded-md bg-[--n-color] shadow-black","content-style":"padding: 0;"},{default:hn((()=>{var o,h,m;return[Ir("div",uQ,[It(t).logo?(_r(),zr("div",dQ,[Ir("img",{src:It(t).logo,class:"mb-1em max-w-full"},null,8,pQ)])):(_r(),zr("h1",hQ,oe(It(t).title),1)),Ir("h5",fQ,oe(It(t).description||" "),1),Ir("div",vQ,[Lr(d,null,{default:hn((()=>{var t,o,r;return[Lr(i,{type:"email",value:c.email,"onUpdate:value":n[2]||(n[2]=e=>c.email=e),autofocus:"",placeholder:e.$t("邮箱"),maxlength:40,"input-props":{autocomplete:"email"}},null,8,["value","placeholder"]),["register","forgetpassword"].includes($.value)&&It(Zf)(null==(t=x.value)?void 0:t.email_whitelist_suffix)?(_r(),Rr(a,{key:0,value:c.suffix,"onUpdate:value":n[3]||(n[3]=e=>c.suffix=e),options:(null==(r=null==(o=x.value)?void 0:o.email_whitelist_suffix)?void 0:r.map((e=>({value:`@${e}`,label:`@${e}`}))))||[],class:"flex-[1]","consistent-menu-width":!1},null,8,["value","options"])):$r("",!0)]})),_:1})]),fn(Ir("div",mQ,[Lr(d,{class:"flex"},{default:hn((()=>[Lr(i,{value:c.email_code,"onUpdate:value":n[4]||(n[4]=e=>c.email_code=e),placeholder:e.$t("邮箱验证码")},null,8,["value","placeholder"]),Lr(f,{type:"primary",onClick:n[5]||(n[5]=e=>function(){return v(this,null,(function*(){""!==c.email?R.value>0?window.$message.warning(jf.global.tc("{second}秒后可重新发送",{second:R.value})):(yield A("sendEmailVerify"))||E():window.$message.error(r("请输入邮箱地址"))}))}()),loading:z.value,disabled:z.value||R.value>0},{default:hn((()=>[Dr(oe(R.value||e.$t("发送")),1)])),_:1},8,["loading","disabled"])])),_:1})],512),[[Mi,["register"].includes($.value)&&(null==(o=x.value)?void 0:o.is_email_verify)||["forgetpassword"].includes($.value)]]),Ir("div",gQ,[Lr(i,{value:c.password,"onUpdate:value":n[6]||(n[6]=e=>c.password=e),class:"",type:"password","show-password-on":"click",placeholder:e.$t("密码"),maxlength:40,"input-props":{autocomplete:"current-password"},onKeydown:n[7]||(n[7]=fa((e=>["login"].includes($.value)&&B()),["enter"]))},null,8,["value","placeholder"])]),fn(Ir("div",bQ,[Lr(i,{value:c.confirm_password,"onUpdate:value":n[8]||(n[8]=e=>c.confirm_password=e),type:"password","show-password-on":"click",placeholder:e.$t("再次输入密码"),maxlength:40,onKeydown:n[9]||(n[9]=fa((e=>["forgetpassword"].includes($.value)&&B()),["enter"]))},null,8,["value","placeholder"])],512),[[Mi,["register","forgetpassword"].includes($.value)]]),fn(Ir("div",yQ,[Lr(i,{value:c.invite_code,"onUpdate:value":n[10]||(n[10]=e=>c.invite_code=e),placeholder:[e.$t("邀请码"),(null==(h=x.value)?void 0:h.is_invite_force)?`(${e.$t("必填")})`:`(${e.$t("选填")})`],maxlength:20,disabled:c.lock_invite_code,onKeydown:n[11]||(n[11]=fa((e=>B()),["enter"]))},null,8,["value","placeholder","disabled"])],512),[[Mi,["register"].includes($.value)]]),fn(Ir("div",xQ,[Lr(y,{checked:u.value,"onUpdate:checked":n[12]||(n[12]=e=>u.value=e),class:"text-bold text-base"},{default:hn((()=>[Ir("div",{innerHTML:p.value},null,8,CQ)])),_:1},8,["checked"])],512),[[Mi,["register"].includes($.value)&&(null==(m=x.value)?void 0:m.tos_url)]]),Ir("div",wQ,[Lr(f,{class:"h-9 w-full rounded-md text-base",type:"primary","icon-placement":"left",onClick:n[13]||(n[13]=e=>B()),loading:L.value,disabled:L.value||!u.value&&["register"].includes($.value)},{icon:hn((()=>[Lr(w)])),default:hn((()=>[Dr(" "+oe(["login"].includes($.value)?e.$t("登入"):["register"].includes($.value)?e.$t("注册"):e.$t("重置密码")),1)])),_:1},8,["loading","disabled"])]),["login"].includes($.value)&&s.value?(_r(),zr("div",kQ,[Ir("div",SQ,[_Q,Ir("span",PQ,oe(e.$t("或使用第三方登录")),1),TQ]),Ir("div",AQ,[l.value?(_r(),zr("div",zQ)):(_r(),zr("div",RQ,[Lr(f,{class:"h-10 w-full rounded-md text-base",type:"info",loading:!0,disabled:""},{icon:hn((()=>[EQ])),default:hn((()=>[Dr(" "+oe(e.$t("正在加载 Telegram 登录...")),1)])),_:1})]))])])):$r("",!0)]),Ir("div",OQ,[Ir("div",null,[["login"].includes($.value)?(_r(),zr(yr,{key:0},[Lr(k,{to:"/register",class:"text-gray-500"},{default:hn((()=>[Dr(oe(e.$t("注册")),1)])),_:1}),Lr(P,{vertical:""}),Lr(k,{to:"/forgetpassword",class:"text-gray-500"},{default:hn((()=>[Dr(oe(e.$t("忘记密码")),1)])),_:1})],64)):(_r(),Rr(k,{key:1,to:"/login",class:"text-gray-500"},{default:hn((()=>[Dr(oe(e.$t("返回登入")),1)])),_:1}))]),Ir("div",null,[Lr(O,{value:It(t).lang,"onUpdate:value":n[14]||(n[14]=e=>It(t).lang=e),options:Object.entries(It(Wf)).map((([e,t])=>({label:t,value:e}))),trigger:"click","on-update:value":It(t).switchLang},{default:hn((()=>[Lr(f,{text:"","icon-placement":"left"},{icon:hn((()=>[Lr(T)])),default:hn((()=>[Dr(" "+oe(It(Wf)[It(t).lang]),1)])),_:1})])),_:1},8,["value","options","on-update:value"])])])]})),_:1})],4)],64)}}}),FQ=Object.freeze(Object.defineProperty({__proto__:null,default:MQ},Symbol.toStringTag,{value:"Module"})),IQ=Object.freeze(Object.defineProperty({__proto__:null,default:{"请求失败":"Request failed","月付":"Monthly","季付":"Quarterly","半年付":"Semi-Annually","年付":"Annually","两年付":"Biennially","三年付":"Triennially","一次性":"One Time","重置流量包":"Data Reset Package","待支付":"Pending Payment","开通中":"Pending Active","已取消":"Canceled","已完成":"Completed","已折抵":"Converted","待确认":"Pending","发放中":"Confirming","已发放":"Completed","无效":"Invalid","个人中心":"User Center","登出":"Logout","搜索":"Search","仪表盘":"Dashboard","订阅":"Subscription","我的订阅":"My Subscription","购买订阅":"Purchase Subscription","财务":"Billing","我的订单":"My Orders","我的邀请":"My Invitation","用户":"Account","我的工单":"My Tickets","流量明细":"Transfer Data Details","使用文档":"Knowledge Base","绑定Telegram获取更多服务":"Not link to Telegram yet","点击这里进行绑定":"Please click here to link to Telegram","公告":"Announcements","总览":"Overview","该订阅长期有效":"The subscription is valid for an unlimited time","已过期":"Expired","已用 {used} / 总计 {total}":"{used} Used / Total {total}","查看订阅":"View Subscription","邮箱":"Email","邮箱验证码":"Email verification code","发送":"Send","重置密码":"Reset Password","返回登入":"Back to Login","邀请码":"Invitation Code","复制链接":"Copy Link","完成时间":"Complete Time","佣金":"Commission","已注册用户数":"Registered users","佣金比例":"Commission rate","确认中的佣金":"Pending commission","佣金将会在确认后会到达你的佣金账户。":"The commission will reach your commission account after review.","邀请码管理":"Invitation Code Management","生成邀请码":"Generate invitation code","佣金发放记录":"Commission Income Record","复制成功":"Copied successfully","密码":"Password","登入":"Login","注册":"Register","忘记密码":"Forgot password","# 订单号":"Order Number #","周期":"Type / Cycle","订单金额":"Order Amount","订单状态":"Order Status","创建时间":"Creation Time","操作":"Action","查看详情":"View Details","请选择支付方式":"Please select a payment method","请检查信用卡支付信息":"Please check credit card payment information","订单详情":"Order Details","折扣":"Discount","折抵":"Converted","退款":"Refund","支付方式":"Payment Method","填写信用卡支付信息":"Please fill in credit card payment information","您的信用卡信息只会被用作当次扣款,系统并不会保存,这是我们认为最安全的。":"We will not collect your credit card information, credit card number and other details only use to verify the current transaction.","订单总额":"Order Total","总计":"Total","结账":"Checkout","等待支付中":"Waiting for payment","订单系统正在进行处理,请稍等1-3分钟。":"Order system is being processed, please wait 1 to 3 minutes.","订单由于超时支付已被取消。":"The order has been canceled due to overtime payment.","订单已支付并开通。":"The order has been paid and the service is activated.","选择订阅":"Select a Subscription","立即订阅":"Subscribe now","配置订阅":"Configure Subscription","付款周期":"Payment Cycle","有优惠券?":"Have coupons?","验证":"Verify","下单":"Order","变更订阅会导致当前订阅被新订阅覆盖,请注意。":"Attention please, change subscription will overwrite your current subscription.","该订阅无法续费":"This subscription cannot be renewed","选择其他订阅":"Choose another subscription","我的钱包":"My Wallet","账户余额(仅消费)":"Account Balance (For billing only)","推广佣金(可提现)":"Invitation Commission (Can be used to withdraw)","钱包组成部分":"Wallet Details","划转":"Transfer","推广佣金提现":"Invitation Commission Withdrawal","修改密码":"Change Password","保存":"Save","旧密码":"Old Password","新密码":"New Password","请输入旧密码":"Please enter the old password","请输入新密码":"Please enter the new password","通知":"Notification","到期邮件提醒":"Subscription expiration email reminder","流量邮件提醒":"Insufficient transfer data email alert","绑定Telegram":"Link to Telegram","立即开始":"Start Now","重置订阅信息":"Reset Subscription","重置":"Reset","确定要重置订阅信息?":"Do you want to reset subscription?","如果你的订阅地址或信息泄露可以进行此操作。重置后你的UUID及订阅将会变更,需要重新进行订阅。":"In case of your account information or subscription leak, this option is for reset. After resetting your UUID and subscription will change, you need to re-subscribe.","重置成功":"Reset successfully","两次新密码输入不同":"Two new passwords entered do not match","两次密码输入不同":"The passwords entered do not match","邀请码(选填)":"Invitation code (Optional)",'我已阅读并同意 服务条款':'I have read and agree to the terms of service',"请同意服务条款":"Please agree to the terms of service","名称":"Name","标签":"Tags","状态":"Status","节点五分钟内节点在线情况":"Access Point online status in the last 5 minutes","倍率":"Rate","使用的流量将乘以倍率进行扣除":"The transfer data usage will be multiplied by the transfer data rate deducted.","更多操作":"Action","没有可用节点,如果您未订阅或已过期请":"No access points are available. If you have not subscribed or the subscription has expired, please","确定重置当前已用流量?":"Are you sure to reset your current data usage?","点击「确定」将会跳转到收银台,支付订单后系统将会清空您当月已使用流量。":'Click "Confirm" and you will be redirected to the payment page. The system will empty your current month"s usage after your purchase.',"确定":"Confirm","低":"Low","中":"Medium","高":"High","主题":"Subject","工单级别":"Ticket Priority","工单状态":"Ticket Status","最后回复":"Last Reply","已关闭":"Closed","待回复":"Pending Reply","已回复":"Replied","查看":"View","关闭":"Cancel","新的工单":"My Tickets","确认":"Confirm","请输入工单主题":"Please enter a subject","工单等级":"Ticket Priority","请选择工单等级":"Please select the ticket priority","消息":"Message","请描述你遇到的问题":"Please describe the problem you encountered","记录时间":"Record Time","实际上行":"Actual Upload","实际下行":"Actual Download","合计":"Total","公式:(实际上行 + 实际下行) x 扣费倍率 = 扣除流量":"Formula: (Actual Upload + Actual Download) x Deduction Rate = Deduct Transfer Data","复制订阅地址":"Copy Subscription URL","导入到":"Export to","一键订阅":"Quick Subscription","复制订阅":"Copy Subscription URL","推广佣金划转至余额":"Transfer Invitation Commission to Account Balance","划转后的余额仅用于{title}消费使用":"The transferred balance will be used for {title} payments only","当前推广佣金余额":"Current invitation balance","划转金额":"Transfer amount","请输入需要划转到余额的金额":"Please enter the amount to be transferred to the balance","输入内容回复工单...":"Please enter to reply to the ticket...","申请提现":"Apply For Withdrawal","取消":"Cancel","提现方式":"Withdrawal Method","请选择提现方式":"Please select a withdrawal method","提现账号":"Withdrawal Account","请输入提现账号":"Please enter the withdrawal account","我知道了":"I got it","第一步":"First Step","第二步":"Second Step","打开Telegram搜索":"Open Telegram and Search ","向机器人发送你的":"Send the following command to bot","最后更新: {date}":"Last Updated: {date}","还有没支付的订单":"There are still unpaid orders","立即支付":"Pay Now","条工单正在处理中":"tickets are in process","立即查看":"View Now","节点状态":"Access Point Status","商品信息":"Product Information","产品名称":"Product Name","类型/周期":"Type / Cycle","产品流量":"Product Transfer Data","订单信息":"Order Details","关闭订单":"Close order","订单号":"Order Number","优惠金额":"Discount amount","旧订阅折抵金额":"Old subscription converted amount","退款金额":"Refunded amount","余额支付":"Balance payment","工单历史":"Ticket History","已用流量将在 {time} 重置":"Used data will reset at {time}","已用流量已在今日重置":"Data usage has been reset today","重置已用流量":"Reset used data","查看节点状态":"View Access Point status","当前已使用流量达{rate}%":"Currently used data up to {rate}%","节点名称":"Access Point Name","于 {date} 到期,距离到期还有 {day} 天。":"Will expire on {date}, {day} days before expiration.","Telegram 讨论组":"Telegram Discussion Group","立即加入":"Join Now","该订阅无法续费,仅允许新用户购买":"This subscription cannot be renewed and is only available to new users.","重置当月流量":"Reset current month usage","流量明细仅保留近月数据以供查询。":'Only keep the most recent month"s usage for checking the transfer data details.',"扣费倍率":"Fee deduction rate","支付手续费":"Payment fee","续费订阅":"Renewal Subscription","学习如何使用":"Learn how to use","快速将节点导入对应客户端进行使用":"Quickly export subscription into the client app","对您当前的订阅进行续费":"Renew your current subscription","对您当前的订阅进行购买":"Purchase your current subscription","捷径":"Shortcut","不会使用,查看使用教程":"I am a newbie, view the tutorial","使用支持扫码的客户端进行订阅":"Use a client app that supports scanning QR code to subscribe","扫描二维码订阅":"Scan QR code to subscribe","续费":"Renewal","购买":"Purchase","查看教程":"View Tutorial","注意":"Attention","你还有未完成的订单,购买前需要先进行取消,确定取消先前的订单吗?":"You still have an unpaid order. You need to cancel it before purchasing. Are you sure you want to cancel the previous order?","确定取消":"Confirm Cancel","返回我的订单":"Back to My Order","如果你已经付款,取消订单可能会导致支付失败,确定取消订单吗?":"If you have already paid, canceling the order may cause the payment to fail. Are you sure you want to cancel the order?","选择最适合你的计划":"Choose the right plan for you","全部":"All","按周期":"By Cycle","遇到问题":"I have a problem","遇到问题可以通过工单与我们沟通":"If you have any problems, you can contact us via ticket","按流量":"Pay As You Go","搜索文档":"Search Documents","技术支持":"Technical Support","当前剩余佣金":"Current commission remaining","三级分销比例":"Three-level Distribution Ratio","累计获得佣金":"Cumulative commission earned","您邀请的用户再次邀请用户将按照订单金额乘以分销等级的比例进行分成。":"The users you invite to re-invite users will be divided according to the order amount multiplied by the distribution level.","发放时间":"Commission Time","{number} 人":"{number} people","当你的订阅地址或账户发生泄漏被他人滥用时,可以在此重置订阅信息。避免带来不必要的损失。":"If your subscription address or account is leaked and misused by others, you can reset your subscription information here to prevent unnecessary losses.","再次输入密码":"Enter password again","返回登陆":"Return to Login","选填":"Optional","必填":"Required","最后回复时间":"Last Reply Time","请选项工单等级":"Please Select Ticket Priority","回复":"Reply","输入内容回复工单":"Enter Content to Reply to Ticket","已生成":"Generated","选择协议":"Select Protocol","自动":"Automatic","流量重置包":"Data Reset Package","复制失败":"Copy failed","提示":"Notification","确认退出?":"Confirm Logout?","已退出登录":"Logged out successfully","请输入邮箱地址":"Enter email address","{second}秒后可重新发送":"Resend available in {second} seconds","发送成功":"Sent successfully","请输入账号密码":"Enter account and password","请确保两次密码输入一致":"Ensure password entries match","注册成功":"Registration successful","重置密码成功,正在返回登录":"Password reset successful, returning to login","确认取消":"Confirm Cancel","请注意,变更订阅会导致当前订阅被覆盖。":"Please note that changing the subscription will overwrite the current subscription.","订单提交成功,正在跳转支付":"Order submitted successfully, redirecting to payment.","回复成功":"Reply Successful","工单详情":"Ticket Details","登录成功":"Login Successful","确定退出?":"Are you sure you want to exit?","支付成功":"Payment Successful","正在前往收银台":"Proceeding to Checkout","请输入正确的划转金额":"Please enter the correct transfer amount","划转成功":"Transfer Successful","提现方式不能为空":"Withdrawal method cannot be empty","提现账号不能为空":"Withdrawal account cannot be empty","已绑定":"Already Bound","创建成功":"Creation successful","关闭成功":"Shutdown successful","或使用第三方登录":"Or sign in with","正在加载 Telegram 登录...":"Loading Telegram login...","Telegram 登录失败":"Telegram login failed","下次流量重置时间":"Next Reset Time: "}},Symbol.toStringTag,{value:"Module"})),LQ=Object.freeze(Object.defineProperty({__proto__:null,default:{"请求失败":"درخواست انجام نشد","月付":"ماهانه","季付":"سه ماهه","半年付":"نیم سال","年付":"سالانه","两年付":"دو سال","三年付":"سه سال","一次性":"یک‌باره","重置流量包":"بازنشانی بسته های داده","待支付":"در انتظار پرداخت","开通中":"ایجاید","已取消":"صرف نظر شد","已完成":"به پایان رسید","已折抵":"تخفیف داده شده است","待确认":"در حال بررسی","发放中":"صدور","已发放":"صادر شده","无效":"نامعتبر","个人中心":"پروفایل","登出":"خروج","搜索":"جستجو","仪表盘":"داشبرد","订阅":"اشتراک","我的订阅":"اشتراک من","购买订阅":"خرید اشتراک","财务":"امور مالی","我的订单":"درخواست های من","我的邀请":"دعوتنامه های من","用户":"کاربر","我的工单":"درخواست های من","流量明细":"جزئیات\\nعبورو مرور در\\nمحیط آموزشی","使用文档":"کار با مستندات","绑定Telegram获取更多服务":"برای خدمات بیشتر تلگرام را ببندید","点击这里进行绑定":"برای اتصال اینجا را کلیک کنید","公告":"هشدارها","总览":"بررسی کلی","该订阅长期有效":"این اشتراک برای مدت طولانی معتبر است","已过期":"منقضی شده","已用 {used} / 总计 {total}":"استفاده شده {used} / مجموع {total}","查看订阅":"مشاهده عضویت ها","邮箱":"ایمیل","邮箱验证码":"کد تایید ایمیل شما","发送":"ارسال","重置密码":"بازنشانی رمز عبور","返回登入":"بازگشت به صفحه ورود","邀请码":"کد دعوت شما","复制链接":"کپی‌کردن لینک","完成时间":"زمان پایان","佣金":"کمیسیون","已注册用户数":"تعداد کاربران ثبت نام شده","佣金比例":"نرخ کمیسیون","确认中的佣金":"کمیسیون تایید شده","佣金将会在确认后会到达你的佣金账户。":"کمیسیون پس از تایید به حساب کمیسیون شما واریز خواهد شد","邀请码管理":"مدیریت کد دعوت","生成邀请码":"یک کد دعوت ایجاد کنید","佣金发放记录":"سابقه پرداخت کمیسیون","复制成功":"آدرس URL با موفقیت کپی شد","密码":"رمز عبور","登入":"ورود","注册":"ثبت‌نام","忘记密码":"رمز عبور فراموش شده","# 订单号":"# شماره سفارش","周期":"چرخه","订单金额":"مقدار سفارش","订单状态":"وضعیت سفارش","创建时间":"ساختن","操作":"عملیات","查看详情":"مشاهده جزئیات","请选择支付方式":"لطفا نوع پرداخت را انتخاب کنید","请检查信用卡支付信息":"لطفا اطلاعات پرداخت کارت اعتباری خود را بررسی کنید","订单详情":"اطلاعات سفارش","折扣":"ذخیره","折抵":"折抵","退款":"بازگشت هزینه","支付方式":"روش پرداخت","填写信用卡支付信息":"لطفا اطلاعات پرداخت کارت اعتباری خود را بررسی کنید","您的信用卡信息只会被用作当次扣款,系统并不会保存,这是我们认为最安全的。":"اطلاعات کارت اعتباری شما فقط برای بدهی فعلی استفاده می شود، سیستم آن را ذخیره نمی کند، که ما فکر می کنیم امن ترین است.","订单总额":"مجموع سفارش","总计":"مجموع","结账":"پرداخت","等待支付中":"در انتظار پرداخت","订单系统正在进行处理,请稍等1-3分钟。":"سیستم سفارش در حال پردازش است، لطفا 1-3 دقیقه صبر کنید.","订单由于超时支付已被取消。":"سفارش به دلیل پرداخت اضافه کاری لغو شده است","订单已支付并开通。":"سفارش پرداخت و باز شد.","选择订阅":"انتخاب اشتراک","立即订阅":"همین حالا مشترک شوید","配置订阅":"پیکربندی اشتراک","付款周期":"چرخه پرداخت","有优惠券?":"یک کوپن دارید؟","验证":"تأیید","下单":"ایجاد سفارش","变更订阅会导致当前订阅被新订阅覆盖,请注意。":"لطفاً توجه داشته باشید، تغییر یک اشتراک باعث می‌شود که اشتراک فعلی توسط اشتراک جدید بازنویسی شود.","该订阅无法续费":"این اشتراک قابل تمدید نیست","选择其他订阅":"اشتراک دیگری را انتخاب کنید","我的钱包":"کیف پول من","账户余额(仅消费)":"موجودی حساب (فقط خرج کردن)","推广佣金(可提现)":"کمیسیون ارتقاء (قابل برداشت)","钱包组成部分":"اجزای کیف پول","划转":"منتقل کردن","推广佣金提现":"انصراف کمیسیون ارتقاء","修改密码":"تغییر کلمه عبور","保存":"ذخیره کردن","旧密码":"گذرواژه قدیمی","新密码":"رمز عبور جدید","请输入旧密码":", رمز عبور مورد نیاز است","请输入新密码":"گذاشتن گذرواژه","通知":"اعلانات","到期邮件提醒":"یادآوری ایمیل انقضا","流量邮件提醒":"یادآوری ایمیل ترافیک","绑定Telegram":"تلگرام را ببندید","立即开始":"امروز شروع کنید","重置订阅信息":"بازنشانی اطلاعات اشتراک","重置":"تغییر","确定要重置订阅信息?":"آیا مطمئن هستید که می خواهید اطلاعات اشتراک خود را بازنشانی کنید؟","如果你的订阅地址或信息泄露可以进行此操作。重置后你的UUID及订阅将会变更,需要重新进行订阅。":"اگر آدرس یا اطلاعات اشتراک شما لو رفته باشد، این کار را می توان انجام داد. پس از تنظیم مجدد، Uuid و اشتراک شما تغییر خواهد کرد و باید دوباره مشترک شوید.","重置成功":"بازنشانی با موفقیت انجام شد","两次新密码输入不同":"رمز جدید را دو بار وارد کنید","两次密码输入不同":"رمز جدید را دو بار وارد کنید","邀请码(选填)":"کد دعوت (اختیاری)",'我已阅读并同意 服务条款':"من شرایط خدمات را خوانده‌ام و با آن موافقم","请同意服务条款":"لطفاً با شرایط خدمات موافقت کنید","名称":"نام ویژگی محصول","标签":"برچسب‌ها","状态":"وضعیت","节点五分钟内节点在线情况":"وضعیت آنلاین گره را در عرض پنج دقیقه ثبت کنید","倍率":"بزرگنمایی","使用的流量将乘以倍率进行扣除":"جریان استفاده شده در ضریب برای کسر ضرب خواهد شد","更多操作":"اکشن های بیشتر","没有可用节点,如果您未订阅或已过期请":"هیچ گره ای در دسترس نیست، اگر مشترک نیستید یا منقضی شده اید، لطفاً","确定重置当前已用流量?":"آیا مطمئن هستید که می خواهید داده های استفاده شده فعلی را بازنشانی کنید؟","点击「确定」将会跳转到收银台,支付订单后系统将会清空您当月已使用流量。":"برای رفتن به صندوقدار روی 'OK' کلیک کنید. پس از پرداخت سفارش، سیستم اطلاعاتی را که برای ماه استفاده کرده اید پاک می کند.","确定":"تأیید","低":"پایین","中":"متوسط","高":"بالا","主题":"موضوع","工单级别":"سطح بلیط","工单状态":"وضعیت درخواست","最后回复":"آخرین پاسخ","已关闭":"پایان‌یافته","待回复":"در انتظار پاسخ","已回复":"پاسخ داده","查看":"بازدیدها","关闭":"بستن","新的工单":"سفارش کار جدید","确认":"تاييدات","请输入工单主题":"لطفا موضوع بلیط را وارد کنید","工单等级":"سطح سفارش کار","请选择工单等级":"لطفا سطح بلیط را انتخاب کنید","消息":"پیام ها","请描述你遇到的问题":"لطفا مشکلی که با آن مواجه شدید را شرح دهید","记录时间":"زمان ضبط","实际上行":"نقطه ضعف واقعی","实际下行":"نقطه ضعف واقعی","合计":"تعداد ارزش‌ها","公式:(实际上行 + 实际下行) x 扣费倍率 = 扣除流量":"فرمول: (خط واقعی + پایین دست واقعی) x نرخ کسر = ترافیک کسر شده","复制订阅地址":"آدرس اشتراک را کپی کنید","导入到":"واردات در:","一键订阅":"اشتراک با یک کلیک","复制订阅":"اشتراک را کپی کنید","推广佣金划转至余额":"کمیسیون ارتقاء به موجودی منتقل می شود","划转后的余额仅用于{title}消费使用":"موجودی منتقل شده فقط برای مصرف {title} استفاده می شود","当前推广佣金余额":"موجودی کمیسیون ترفیع فعلی","划转金额":"مقدار انتقال","请输入需要划转到余额的金额":"لطفا مبلغی را که باید به موجودی منتقل شود وارد کنید","输入内容回复工单...":"برای پاسخ به تیکت محتوا را وارد کنید...","申请提现":"برای انصراف اقدام کنید","取消":"انصراف","提现方式":"روش برداشت","请选择提现方式":"لطفاً یک روش برداشت را انتخاب کنید","提现账号":"حساب برداشت","请输入提现账号":"لطفا حساب برداشت را وارد کنید","我知道了":"می فهمم","第一步":"گام ۱","第二步":"گام ۲","打开Telegram搜索":"جستجوی تلگرام را باز کنید","向机器人发送你的":"ربات های خود را بفرستید","最后更新: {date}":"آخرین به روز رسانی: {date}","还有没支付的订单":"هنوز سفارشات پرداخت نشده وجود دارد","立即支付":"اکنون پرداخت کنید","条工单正在处理中":"بلیط در حال پردازش است","立即查看":"آن را در عمل ببینید","节点状态":"وضعیت گره","商品信息":"مشتریان ثبت نام شده","产品名称":"عنوان کالا","类型/周期":"نوع/چرخه","产品流量":"جریان محصول","订单信息":"اطلاعات سفارش","关闭订单":"سفارش بستن","订单号":"شماره سفارش","优惠金额":"قیمت با تخفیف","旧订阅折抵金额":"مبلغ تخفیف اشتراک قدیمی","退款金额":"کل مبلغ مسترد شده","余额支付":"پرداخت مانده","工单历史":"تاریخچه بلیط","已用流量将在 {time} 重置":"حجم مصرفی در {time} بازنشانی خواهد شد","已用流量已在今日重置":"امروز بازنشانی داده استفاده شده است","重置已用流量":"بازنشانی داده های استفاده شده","查看节点状态":"مشاهده وضعیت گره","当前已使用流量达{rate}%":"ترافیک استفاده شده در حال حاضر در {rate}%","节点名称":"نام گره","于 {date} 到期,距离到期还有 {day} 天。":"در {date} منقضی می‌شود که {day} روز دیگر است.","Telegram 讨论组":"گروه گفتگوی تلگرام","立即加入":"حالا پیوستن","该订阅无法续费,仅允许新用户购买":"این اشتراک قابل تمدید نیست، فقط کاربران جدید مجاز به خرید آن هستند","重置当月流量":"بازنشانی ترافیک ماه جاری","流量明细仅保留近月数据以供查询。":"جزئیات ترافیک فقط داده های ماه های اخیر را برای پرس و جو حفظ می کند.","扣费倍率":"نرخ کسر","支付手续费":"پرداخت هزینه های پردازش","续费订阅":"تمدید اشتراک","学习如何使用":"نحوه استفاده را یاد بگیرید","快速将节点导入对应客户端进行使用":"به سرعت گره ها را برای استفاده به مشتری مربوطه وارد کنید","对您当前的订阅进行续费":"با اشتراک فعلی خود خرید کنید","对您当前的订阅进行购买":"با اشتراک فعلی خود خرید کنید","捷径":"میانبر","不会使用,查看使用教程":"استفاده نمی شود، به آموزش مراجعه کنید","使用支持扫码的客户端进行订阅":"برای اشتراک از کلاینتی استفاده کنید که از کد اسکن پشتیبانی می کند","扫描二维码订阅":"برای اشتراک، کد QR را اسکن کنید","续费":"تمدید","购买":"خرید","查看教程":"مشاهده آموزش","注意":"یادداشت!","你还有未完成的订单,购买前需要先进行取消,确定取消先前的订单吗?":"هنوز سفارشات ناتمام دارید. قبل از خرید باید آن را لغو کنید. آیا مطمئن هستید که می‌خواهید سفارش قبلی را لغو کنید؟","确定取消":"تایید لغو","返回我的订单":"بازگشت به سفارش من","如果你已经付款,取消订单可能会导致支付失败,确定取消订单吗?":"اگر قبلاً پرداخت کرده‌اید، لغو سفارش ممکن است باعث عدم موفقیت در پرداخت شود. آیا مطمئن هستید که می‌خواهید سفارش را لغو کنید؟","选择最适合你的计划":"طرحی را انتخاب کنید که مناسب شما باشد","全部":"تمام","按周期":"توسط چرخه","遇到问题":"ما یک مشکل داریم","遇到问题可以通过工单与我们沟通":"در صورت بروز مشکل می توانید از طریق تیکت با ما در ارتباط باشید","按流量":"با جریان","搜索文档":"جستجوی اسناد","技术支持":"دریافت پشتیبانی","当前剩余佣金":"کمیسیون فعلی باقی مانده","三级分销比例":"نسبت توزیع سه لایه","累计获得佣金":"کمیسیون انباشته شده","您邀请的用户再次邀请用户将按照订单金额乘以分销等级的比例进行分成。":"کاربرانی که برای دعوت مجدد از کاربران دعوت می کنید بر اساس نسبت مقدار سفارش ضرب در سطح توزیع تقسیم می شوند.","发放时间":"زمان پرداخت","{number} 人":"{number} نفر","当你的订阅地址或账户发生泄漏被他人滥用时,可以在此重置订阅信息。避免带来不必要的损失。":"در صورت انتشار آدرس یا حساب اشتراک شما و سوء استفاده از آن توسط دیگران، می‌توانید اطلاعات اشتراک خود را در اینجا بازنشانی کنید تا از زیان‌های غیرضروری جلوگیری شود.","再次输入密码":"ورود مجدد رمز عبور","返回登陆":"بازگشت به ورود","选填":"اختیاری","必填":"الزامی","最后回复时间":"زمان آخرین پاسخ","请选项工单等级":"لطفاً اولویت تیکت را انتخاب کنید","回复":"پاسخ","输入内容回复工单":"محتوا را برای پاسخ به تیکت وارد کنید","已生成":"تولید شده","选择协议":"انتخاب پروتکل","自动":"خودکار","流量重置包":"بسته بازنشانی داده","复制失败":"کپی ناموفق بود","提示":"اطلاع","确认退出?":"تأیید خروج?","已退出登录":"با موفقیت خارج شده","请输入邮箱地址":"آدرس ایمیل را وارد کنید","{second}秒后可重新发送":"{second} ثانیه دیگر می‌توانید مجدداً ارسال کنید","发送成功":"با موفقیت ارسال شد","请输入账号密码":"نام کاربری و رمز عبور را وارد کنید","请确保两次密码输入一致":"اطمینان حاصل کنید که ورودهای رمز عبور مطابقت دارند","注册成功":"ثبت نام با موفقیت انجام شد","重置密码成功,正在返回登录":"با موفقیت رمز عبور بازنشانی شد، در حال بازگشت به صفحه ورود","确认取消":"تایید لغو","请注意,变更订阅会导致当前订阅被覆盖。":"لطفاً توجه داشته باشید که تغییر اشتراک موجب ایجاد اشتراک فعلی می‌شود.","订单提交成功,正在跳转支付":"سفارش با موفقیت ثبت شد، به پرداخت هدایت می‌شود.","回复成功":"پاسخ با موفقیت ارسال شد","工单详情":"جزئیات تیکت","登录成功":"ورود موفقیت‌آمیز","确定退出?":"آیا مطمئن هستید که می‌خواهید خارج شوید؟","支付成功":"پرداخت موفق","正在前往收银台":"در حال رفتن به صندوق پرداخت","请输入正确的划转金额":"لطفا مبلغ انتقال صحیح را وارد کنید","划转成功":"انتقال موفق","提现方式不能为空":"روش برداشت نمی‌تواند خالی باشد","提现账号不能为空":"حساب برداشت نمی‌تواند خالی باشد","已绑定":"قبلاً متصل شده","创建成功":"ایجاد موفقیت‌آمیز","关闭成功":"خاموش کردن موفق","或使用第三方登录":"یا با ورود از طریق شخص ثالث","正在加载 Telegram 登录...":"در حال بارگذاری ورود تلگرام...","Telegram 登录失败":"ورود تلگرام ناموفق بود","下次流量重置时间":"زمان بازنشانی بعدی ترافیک:"}},Symbol.toStringTag,{value:"Module"})),BQ=Object.freeze(Object.defineProperty({__proto__:null,default:{"请求失败":"リクエストエラー","月付":"月間プラン","季付":"3か月プラン","半年付":"半年プラン","年付":"年間プラン","两年付":"2年プラン","三年付":"3年プラン","一次性":"一括払い","重置流量包":"使用済みデータをリセット","待支付":"お支払い待ち","开通中":"開通中","已取消":"キャンセル済み","已完成":"済み","已折抵":"控除済み","待确认":"承認待ち","发放中":"処理中","已发放":"処理済み","无效":"無効","个人中心":"会員メニュー","登出":"ログアウト","搜索":"検索","仪表盘":"ダッシュボード","订阅":"サブスクリプションプラン","我的订阅":"マイプラン","购买订阅":"プランの購入","财务":"ファイナンス","我的订单":"注文履歴","我的邀请":"招待リスト","用户":"ユーザー","我的工单":"お問い合わせ","流量明细":"データ通信明細","使用文档":"ナレッジベース","绑定Telegram获取更多服务":"Telegramと連携し各種便利な通知を受け取ろう","点击这里进行绑定":"こちらをクリックして連携開始","公告":"お知らせ","总览":"概要","该订阅长期有效":"時間制限なし","已过期":"期限切れ","已用 {used} / 总计 {total}":"使用済み {used} / 合計 {total}","查看订阅":"プランを表示","邮箱":"E-mail アドレス","邮箱验证码":"確認コード","发送":"送信","重置密码":"パスワードを変更","返回登入":"ログインページへ戻る","邀请码":"招待コード","复制链接":"URLをコピー","完成时间":"完了日時","佣金":"コミッション金額","已注册用户数":"登録済みユーザー数","佣金比例":"コミッションレート","确认中的佣金":"承認待ちのコミッション","佣金将会在确认后会到达你的佣金账户。":"コミッションは承認処理完了後にカウントされます","邀请码管理":"招待コードの管理","生成邀请码":"招待コードを生成","佣金发放记录":"コミッション履歴","复制成功":"クリップボードにコピーされました","密码":"パスワード","登入":"ログイン","注册":"新規登録","忘记密码":"パスワードをお忘れの方","# 订单号":"受注番号","周期":"サイクル","订单金额":"ご注文金額","订单状态":"ご注文状況","创建时间":"作成日時","操作":"アクション","查看详情":"詳細を表示","请选择支付方式":"支払い方法をお選びください","请检查信用卡支付信息":"クレジットカード決済情報をご確認ください","订单详情":"ご注文詳細","折扣":"割引","折抵":"控除","退款":"払い戻し","支付方式":"お支払い方法","填写信用卡支付信息":"クレジットカード決済情報をご入力ください。","您的信用卡信息只会被用作当次扣款,系统并不会保存,这是我们认为最安全的。":"お客様のカード情報は今回限りリクエストされ、記録に残ることはございません","订单总额":"ご注文の合計金額","总计":"合計金額","结账":"チェックアウト","等待支付中":"お支払い待ち","订单系统正在进行处理,请稍等1-3分钟。":"システム処理中です、しばらくお待ちください","订单由于超时支付已被取消。":"ご注文はキャンセルされました","订单已支付并开通。":"お支払いが完了しました、プランはご利用可能です","选择订阅":"プランをお選びください","立即订阅":"今すぐ購入","配置订阅":"プランの内訳","付款周期":"お支払いサイクル","有优惠券?":"キャンペーンコード","验证":"確定","下单":"チェックアウト","变更订阅会导致当前订阅被新订阅覆盖,请注意。":"プランを変更なされます場合は、既存のプランが新規プランによって上書きされます、ご注意下さい","该订阅无法续费":"該当プランは継続利用できません","选择其他订阅":"その他のプランを選択","我的钱包":"マイウォレット","账户余额(仅消费)":"残高(サービスの購入のみ)","推广佣金(可提现)":"招待によるコミッション(出金可)","钱包组成部分":"ウォレットの内訳","划转":"お振替","推广佣金提现":"コミッションのお引き出し","修改密码":"パスワードの変更","保存":"変更を保存","旧密码":"現在のパスワード","新密码":"新しいパスワード","请输入旧密码":"現在のパスワードをご入力ください","请输入新密码":"新しいパスワードをご入力ください","通知":"お知らせ","到期邮件提醒":"期限切れ前にメールで通知","流量邮件提醒":"データ量不足時にメールで通知","绑定Telegram":"Telegramと連携","立即开始":"今すぐ連携開始","重置订阅信息":"サブスクリプションURLの変更","重置":"変更","确定要重置订阅信息?":"サブスクリプションURLをご変更なされますか?","如果你的订阅地址或信息泄露可以进行此操作。重置后你的UUID及订阅将会变更,需要重新进行订阅。":"サブスクリプションのURL及び情報が外部に漏れた場合にご操作ください。操作後はUUIDやURLが変更され、再度サブスクリプションのインポートが必要になります。","重置成功":"変更完了","两次新密码输入不同":"ご入力されました新しいパスワードが一致しません","两次密码输入不同":"ご入力されましたパスワードが一致しません","邀请码(选填)":"招待コード (オプション)",'我已阅读并同意 服务条款':"ご利用規約に同意します","请同意服务条款":"ご利用規約に同意してください","名称":"名称","标签":"ラベル","状态":"ステータス","节点五分钟内节点在线情况":"5分間のオンラインステータス","倍率":"適応レート","使用的流量将乘以倍率进行扣除":"通信量は該当レートに基き計算されます","更多操作":"アクション","没有可用节点,如果您未订阅或已过期请":"ご利用可能なサーバーがありません,プランの期限切れまたは購入なされていない場合は","确定重置当前已用流量?":"利用済みデータ量をリセットしますか?","点击「确定」将会跳转到收银台,支付订单后系统将会清空您当月已使用流量。":"「確定」をクリックし次のページへ移動,お支払い後に当月分のデータ通信量は即時リセットされます","确定":"確定","低":"低","中":"中","高":"高","主题":"タイトル","工单级别":"プライオリティ","工单状态":"進捗状況","最后回复":"最終回答日時","已关闭":"終了","待回复":"対応待ち","已回复":"回答済み","查看":"閲覧","关闭":"終了","新的工单":"新規お問い合わせ","确认":"確定","请输入工单主题":"お問い合わせタイトルをご入力ください","工单等级":"ご希望のプライオリティ","请选择工单等级":"ご希望のプライオリティをお選びください","消息":"メッセージ","请描述你遇到的问题":"お問い合わせ内容をご入力ください","记录时间":"記録日時","实际上行":"アップロード","实际下行":"ダウンロード","合计":"合計","公式:(实际上行 + 实际下行) x 扣费倍率 = 扣除流量":"計算式:(アップロード + ダウンロード) x 適応レート = 使用済みデータ通信量","复制订阅地址":"サブスクリプションのURLをコピー","导入到":"インポート先:","一键订阅":"ワンクリックインポート","复制订阅":"サブスクリプションのURLをコピー","推广佣金划转至余额":"コミッションを残高へ振替","划转后的余额仅用于{title}消费使用":"振替済みの残高は{title}でのみご利用可能です","当前推广佣金余额":"現在のコミッション金額","划转金额":"振替金額","请输入需要划转到余额的金额":"振替金額をご入力ください","输入内容回复工单...":"お問い合わせ内容をご入力ください...","申请提现":"出金申請","取消":"キャンセル","提现方式":"お振込み先","请选择提现方式":"お振込み先をお選びください","提现账号":"お振り込み先口座","请输入提现账号":"お振込み先口座をご入力ください","我知道了":"了解","第一步":"ステップその1","第二步":"ステップその2","打开Telegram搜索":"Telegramを起動後に右記内容を入力し検索","向机器人发送你的":"テレグラムボットへ下記内容を送信","最后更新: {date}":"最終更新日: {date}","还有没支付的订单":"未払いのご注文があります","立即支付":"チェックアウト","条工单正在处理中":"件のお問い合わせ","立即查看":"閲覧","节点状态":"サーバーステータス","商品信息":"プラン詳細","产品名称":"プラン名","类型/周期":"サイクル","产品流量":"ご利用可能データ量","订单信息":"オーダー情報","关闭订单":"注文をキャンセル","订单号":"受注番号","优惠金额":"'割引額","旧订阅折抵金额":"既存プラン控除額","退款金额":"返金額","余额支付":"残高ご利用分","工单历史":"お問い合わせ履歴","已用流量将在 {reset_day} 日后重置":"利用済みデータ量は {reset_day} 日後にリセットします","已用流量已在今日重置":"利用済みデータ量は本日リセットされました","重置已用流量":"利用済みデータ量をリセット","查看节点状态":"接続先サーバのステータス","当前已使用流量达{rate}%":"データ使用量が{rate}%になりました","节点名称":"サーバー名","于 {date} 到期,距离到期还有 {day} 天。":"ご利用期限は {date} まで,期限まであと {day} 日","Telegram 讨论组":"Telegramグループ","立即加入":"今すぐ参加","该订阅无法续费,仅允许新用户购买":"該当プランは継続利用できません、新規ユーザーのみが購入可能です","重置当月流量":"使用済みデータ量のカウントリセット","流量明细仅保留近月数据以供查询。":"データ通信明細は当月分のみ表示されます","扣费倍率":"適応レート","支付手续费":"お支払い手数料","续费订阅":"購読更新","学习如何使用":"ご利用ガイド","快速将节点导入对应客户端进行使用":"最短ルートでサーバー情報をアプリにインポートして使用する","对您当前的订阅进行续费":"ご利用中のサブスクの継続料金を支払う","对您当前的订阅进行购买":"ご利用中のサブスクを再度購入する","捷径":"ショートカット","不会使用,查看使用教程":"ご利用方法がわからない方はナレッジベースをご閲覧ください","使用支持扫码的客户端进行订阅":"使用支持扫码的客户端进行订阅","扫描二维码订阅":"QRコードをスキャンしてサブスクを設定","续费":"更新","购买":"購入","查看教程":"チュートリアルを表示","注意":"注意","你还有未完成的订单,购买前需要先进行取消,确定取消先前的订单吗?":"まだ購入が完了していないオーダーがあります。購入前にそちらをキャンセルする必要がありますが、キャンセルしてよろしいですか?","确定取消":"キャンセル","返回我的订单":"注文履歴に戻る","如果你已经付款,取消订单可能会导致支付失败,确定取消订单吗?":"もし既にお支払いが完了していると、注文をキャンセルすると支払いが失敗となる可能性があります。キャンセルしてもよろしいですか?","选择最适合你的计划":"あなたにピッタリのプランをお選びください","全部":"全て","按周期":"期間順","遇到问题":"何かお困りですか?","遇到问题可以通过工单与我们沟通":"何かお困りでしたら、お問い合わせからご連絡ください。","按流量":"データ通信量順","搜索文档":"ドキュメント内を検索","技术支持":"テクニカルサポート","当前剩余佣金":"コミッション残高","三级分销比例":"3ティア比率","累计获得佣金":"累計獲得コミッション金額","您邀请的用户再次邀请用户将按照订单金额乘以分销等级的比例进行分成。":"お客様に招待された方が更に別の方を招待された場合、お客様は支払われるオーダーからティア分配分の比率分を受け取ることができます。","发放时间":"手数料支払時間","{number} 人":"{number} 人","当你的订阅地址或账户发生泄漏被他人滥用时,可以在此重置订阅信息。避免带来不必要的损失。":"購読アドレスまたはアカウントが漏れて他者に悪用された場合、不必要な損失を防ぐためにここで購読情報をリセットできます。","再次输入密码":"パスワードを再入力してください","返回登陆":"ログインに戻る","选填":"任意","必填":"必須","最后回复时间":"最終返信時刻","请选项工单等级":"チケットの優先度を選択してください","回复":"返信","输入内容回复工单":"チケットへの返信内容を入力","已生成":"生成済み","选择协议":"プロトコルの選択","自动":"自動","流量重置包":"データリセットパッケージ","复制失败":"コピーに失敗しました","提示":"通知","确认退出?":"ログアウトを確認?","已退出登录":"正常にログアウトしました","请输入邮箱地址":"メールアドレスを入力してください","{second}秒后可重新发送":"{second} 秒後に再送信可能","发送成功":"送信成功","请输入账号密码":"アカウントとパスワードを入力してください","请确保两次密码输入一致":"パスワードの入力が一致していることを確認してください","注册成功":"登録が成功しました","重置密码成功,正在返回登录":"パスワードのリセットが成功しました。ログインに戻っています","确认取消":"キャンセルの確認","请注意,变更订阅会导致当前订阅被覆盖。":"購読の変更は現在の購読を上書きします。","订单提交成功,正在跳转支付":"注文が成功裏に送信されました。支払いにリダイレクトしています。","回复成功":"返信が成功しました","工单详情":"チケットの詳細","登录成功":"ログイン成功","确定退出?":"本当に退出しますか?","支付成功":"支払い成功","正在前往收银台":"チェックアウトに進行中","请输入正确的划转金额":"正しい振替金額を入力してください","划转成功":"振替成功","提现方式不能为空":"出金方法は空にできません","提现账号不能为空":"出金口座を空にすることはできません","已绑定":"既にバインドされています","创建成功":"作成成功","关闭成功":"閉鎖成功","或使用第三方登录":"または第三者ログインを使用","正在加载 Telegram 登录...":"Telegram ログインを読み込み中...","Telegram 登录失败":"Telegram ログインに失敗しました","下次流量重置时间":"次回のリセット時刻:","已用流量将在 {time} 重置":"ご利用済みデータ量は {time} にリセットされます"}},Symbol.toStringTag,{value:"Module"})),DQ=Object.freeze(Object.defineProperty({__proto__:null,default:{"请求失败":"요청실패","月付":"월간","季付":"3개월간","半年付":"반년간","年付":"1년간","两年付":"2년마다","三年付":"3년마다","一次性":"한 번","重置流量包":"데이터 재설정 패키지","待支付":"지불 보류중","开通中":"보류 활성화","已取消":"취소 됨","已完成":"완료","已折抵":"변환","待确认":"보류중","发放中":"확인중","已发放":"완료","无效":"유효하지 않음","个人中心":"사용자 센터","登出":"로그아웃","搜索":"검색","仪表盘":"대시보드","订阅":"구독","我的订阅":"나의 구독","购买订阅":"구독 구매 내역","财务":"청구","我的订单":"나의 주문","我的邀请":"나의 초청","用户":"사용자 센터","我的工单":"나의 티켓","流量明细":"데이터 세부 정보 전송","使用文档":"사용 설명서","绑定Telegram获取更多服务":"텔레그램에 아직 연결되지 않았습니다","点击这里进行绑定":"텔레그램에 연결되도록 여기를 눌러주세요","公告":"발표","总览":"개요","该订阅长期有效":"구독은 무제한으로 유효합니다","已过期":"만료","已用 {used} / 总计 {total}":"{date}에 만료됩니다, 만료 {day}이 전, {reset_day}후 데이터 전송 재설정","查看订阅":"구독 보기","邮箱":"이메일","邮箱验证码":"이메일 확인 코드","发送":"보내기","重置密码":"비밀번호 재설정","返回登入":"로그인 다시하기","邀请码":"초청 코드","复制链接":"링크 복사","完成时间":"완료 시간","佣金":"수수료","已注册用户数":"등록 된 사용자들","佣金比例":"수수료율","确认中的佣金":"수수료 상태","佣金将会在确认后会到达你的佣金账户。":"수수료는 검토 후 수수료 계정에서 확인할 수 있습니다","邀请码管理":"초청 코드 관리","生成邀请码":"초청 코드 생성하기","佣金发放记录":"수수료 지불 기록","复制成功":"복사 성공","密码":"비밀번호","登入":"로그인","注册":"등록하기","忘记密码":"비밀번호를 잊으셨나요","# 订单号":"주문 번호 #","周期":"유형/기간","订单金额":"주문량","订单状态":"주문 상태","创建时间":"생성 시간","操作":"설정","查看详情":"세부사항 보기","请选择支付方式":"지불 방식을 선택 해주세요","请检查信用卡支付信息":"신용카드 지불 정보를 확인 해주세요","订单详情":"주문 세부사항","折扣":"할인","折抵":"변환","退款":"환불","支付方式":"지불 방식","填写信用卡支付信息":"신용카드 지불 정보를 적으세요","您的信用卡信息只会被用作当次扣款,系统并不会保存,这是我们认为最安全的。":"현재 거래를 확인하는 데 사용하는 귀하의 신용 카드 정보, 신용 카드 번호 및 기타 세부 정보를 수집하지 않습니다.","订单总额":"전체주문","总计":"전체","结账":"결제하기","等待支付中":"결제 대기 중","订单系统正在进行处理,请稍等1-3分钟。":"주문 시스템이 처리 중입니다. 1-3분 정도 기다려 주십시오.","订单由于超时支付已被取消。":"결제 시간 초과로 인해 주문이 취소되었습니다.","订单已支付并开通。":"주문이 결제되고 개통되었습니다.","选择订阅":"구독 선택하기","立即订阅":"지금 구독하기","配置订阅":"구독 환경 설정하기","付款周期":"지불 기간","有优惠券?":"쿠폰을 가지고 있나요?","验证":"확인","下单":"주문","变更订阅会导致当前订阅被新订阅覆盖,请注意。":"주의하십시오. 구독을 변경하면 현재 구독을 덮어씁니다","该订阅无法续费":"이 구독은 갱신할 수 없습니다.","选择其他订阅":"다른 구독 선택","我的钱包":"나의 지갑","账户余额(仅消费)":"계정 잔액(결제 전용)","推广佣金(可提现)":"초청수수료(인출하는 데 사용할 수 있습니다)","钱包组成部分":"지갑 세부사항","划转":"이체하기","推广佣金提现":"초청 수수료 인출","修改密码":"비밀번호 변경","保存":"저장하기","旧密码":"이전 비밀번호","新密码":"새로운 비밀번호","请输入旧密码":"이전 비밀번호를 입력해주세요","请输入新密码":"새로운 비밀번호를 입력해주세요","通知":"공고","到期邮件提醒":"구독 만료 이메일 알림","流量邮件提醒":"불충분한 데이터 이메일 전송 알림","绑定Telegram":"탤레그램으로 연결","立即开始":"지금 시작하기","重置订阅信息":"구독 재설정하기","重置":"재설정","确定要重置订阅信息?":"구독을 재설정하시겠습니까?","如果你的订阅地址或信息泄露可以进行此操作。重置后你的UUID及订阅将会变更,需要重新进行订阅。":"계정 정보나 구독이 누출된 경우 이 옵션은 UUID를 재설정하는 데 사용되며 재설정 후에 구독이 변경되므로 다시 구독해야 합니다.","重置成功":"재설정 성공","两次新密码输入不同":"입력한 두 개의 새 비밀번호가 일치하지 않습니다.","两次密码输入不同":"입력한 비밀번호가 일치하지 않습니다.","邀请码(选填)":"초청 코드(선택 사항)",'我已阅读并同意 服务条款':"을 읽었으며 이에 동의합니다 서비스 약관","请同意服务条款":"서비스 약관에 동의해주세요","名称":"이름","标签":"태그","状态":"설정","节点五分钟内节点在线情况":"지난 5분 동안의 액세스 포인트 온라인 상태","倍率":"요금","使用的流量将乘以倍率进行扣除":"사용된 전송 데이터에 전송 데이터 요금을 뺀 값을 곱합니다.","更多操作":"설정","没有可用节点,如果您未订阅或已过期请":"사용 가능한 액세스 포인트가 없습니다. 구독을 신청하지 않았거나 구독이 만료된 경우","确定重置当前已用流量?":"현재 사용 중인 데이터를 재설정 하시겠습니까?","点击「确定」将会跳转到收银台,支付订单后系统将会清空您当月已使用流量。":'확인"을 클릭하면 결제 페이지로 이동됩니다. 주문이 완료되면 시스템에서 해당 월의 사용 데이터를 삭제합니다.',"确定":"확인","低":"낮음","中":"중간","高":"높음","主题":"주제","工单级别":"티켓 우선 순위","工单状态":"티켓 상태","最后回复":"생성 시간","已关闭":"마지막 답장","待回复":"설정","已回复":"닫힘","查看":"보기","关闭":"닫기","新的工单":"새로운 티켓","确认":"확인","请输入工单主题":"제목을 입력하세요","工单等级":"티켓 우선순위","请选择工单等级":"티켓 우선순위를 선택해주세요","消息":"메세지","请描述你遇到的问题":"문제를 설명하십시오 발생한","记录时间":"기록 시간","实际上行":"실제 업로드","实际下行":"실제 다운로드","合计":"전체","公式:(实际上行 + 实际下行) x 扣费倍率 = 扣除流量":"공식: (실제 업로드 + 실제 다운로드) x 공제율 = 전송 데이터 공제","复制订阅地址":"구독 URL 복사","导入到":"내보내기","一键订阅":"빠른 구독","复制订阅":"구독 URL 복사","推广佣金划转至余额":"초청 수수료를 계좌 잔액으로 이체","划转后的余额仅用于{title}消费使用":"이체된 잔액은 {title} 소비에만 사용됩니다.","当前推广佣金余额":"현재 홍보 수수료 잔액","请输入需要划转到余额的金额":"잔액으로 이체할 금액을 입력하세요.","取消":"취소","提现方式":"인출 방법","请选择提现方式":"인출 방법을 선택해주세요","提现账号":"인출 계좌","请输入提现账号":"인출 계좌를 입력해주세요","我知道了":"알겠습니다.","第一步":"첫번째 단계","第二步":"두번째 단계","打开Telegram搜索":"텔레그램 열기 및 탐색","向机器人发送你的":"봇에 다음 명령을 보냅니다","最后更新: {date}":"마지막 업데이트{date}","还有没支付的订单":"미결제 주문이 있습니다","立即支付":"즉시 지불","条工单正在处理中":"티켓이 처리 중입니다","立即查看":"제목을 입력하세요","节点状态":"노드 상태","商品信息":"제품 정보","产品名称":"제품 명칭","类型/周期":"종류/기간","产品流量":"제품 데이터 용량","订单信息":"주문 정보","关闭订单":"주문 취소","订单号":"주문 번호","优惠金额":"할인 가격","旧订阅折抵金额":"기존 패키지 공제 금액","退款金额":"환불 금액","余额支付":"잔액 지불","工单历史":"티켓 기록","已用流量将在 {reset_day} 日后重置":"{reset_day}일 후에 사용한 데이터가 재설정됩니다","已用流量已在今日重置":"오늘 이미 사용한 데이터가 재설정되었습니다","重置已用流量":"사용한 데이터 재설정","查看节点状态":"노드 상태 확인","当前已使用流量达{rate}%":"현재 사용한 데이터 비율이 {rate}%에 도달했습니다","节点名称":"환불 금액","于 {date} 到期,距离到期还有 {day} 天。":"{day}까지, 만료 {day}일 전.","Telegram 讨论组":"텔레그램으로 문의하세요","立即加入":"지금 가입하세요","该订阅无法续费,仅允许新用户购买":"이 구독은 갱신할 수 없습니다. 신규 사용자만 구매할 수 있습니다.","重置当月流量":"이번 달 트래픽 초기화","流量明细仅保留近月数据以供查询。":"귀하의 트래픽 세부 정보는 최근 몇 달 동안만 유지됩니다","扣费倍率":"수수료 공제율","支付手续费":"수수료 지불","续费订阅":"구독 갱신","学习如何使用":"사용 방법 배우기","快速将节点导入对应客户端进行使用":"빠르게 노드를 해당 클라이언트로 가져와 사용하기","对您当前的订阅进行续费":"현재 구독 갱신","对您当前的订阅进行购买":"현재 구독 구매","捷径":"단축키","不会使用,查看使用教程":"사용 방법을 모르겠다면 사용 설명서 확인","使用支持扫码的客户端进行订阅":"스캔 가능한 클라이언트로 구독하기","扫描二维码订阅":"QR 코드 스캔하여 구독","续费":"갱신","购买":"구매","查看教程":"사용 설명서 보기","注意":"주의","你还有未完成的订单,购买前需要先进行取消,确定取消先前的订单吗?":"미완료된 주문이 있습니다. 구매 전에 취소해야 합니다. 이전 주문을 취소하시겠습니까?","确定取消":"취소 확인","返回我的订单":"내 주문으로 돌아가기","如果你已经付款,取消订单可能会导致支付失败,确定取消订单吗?":"이미 결제를 했을 경우 주문 취소는 결제 실패로 이어질 수 있습니다. 주문을 취소하시겠습니까?","选择最适合你的计划":"가장 적합한 요금제 선택","全部":"전체","按周期":"주기별","遇到问题":"문제 발생","遇到问题可以通过工单与我们沟通":"문제가 발생하면 서포트 티켓을 통해 문의하세요","按流量":"트래픽별","搜索文档":"문서 검색","技术支持":"기술 지원","当前剩余佣金":"현재 잔여 수수료","三级分销比例":"삼수준 분배 비율","累计获得佣金":"누적 수수료 획득","您邀请的用户再次邀请用户将按照订单金额乘以分销等级的比例进行分成。":"초대한 사용자가 다시 초대하면 주문 금액에 분배 비율을 곱하여 분배됩니다.","发放时间":"수수료 지급 시간","{number} 人":"{number} 명","当你的订阅地址或账户发生泄漏被他人滥用时,可以在此重置订阅信息。避免带来不必要的损失。":"구독 주소 또는 계정이 유출되어 다른 사람에게 남용되는 경우 여기에서 구독 정보를 재설정하여 불필요한 손실을 방지할 수 있습니다.","再次输入密码":"비밀번호를 다시 입력하세요","返回登陆":"로그인으로 돌아가기","选填":"선택 사항","必填":"필수","最后回复时间":"최근 답장 시간","请选项工单等级":"티켓 우선 순위 선택","回复":"답장","输入内容回复工单":"티켓에 대한 내용 입력","已生成":"생성됨","选择协议":"프로토콜 선택","自动":"자동","流量重置包":"데이터 리셋 패키지","复制失败":"복사 실패","提示":"알림","确认退出?":"로그아웃 확인?","已退出登录":"로그아웃 완료","请输入邮箱地址":"이메일 주소를 입력하세요","{second}秒后可重新发送":"{second} 초 후에 다시 전송 가능","发送成功":"전송 성공","请输入账号密码":"계정과 비밀번호를 입력하세요","请确保两次密码输入一致":"비밀번호 입력이 일치하는지 확인하세요","注册成功":"등록 성공","重置密码成功,正在返回登录":"비밀번호 재설정 성공, 로그인 페이지로 돌아가는 중","确认取消":"취소 확인","请注意,变更订阅会导致当前订阅被覆盖。":"구독 변경은 현재 구독을 덮어씁니다.","订单提交成功,正在跳转支付":"주문이 성공적으로 제출되었습니다. 지불로 이동 중입니다.","回复成功":"답장 성공","工单详情":"티켓 상세 정보","登录成功":"로그인 성공","确定退出?":"확실히 종료하시겠습니까?","支付成功":"결제 성공","正在前往收银台":"결제 진행 중","请输入正确的划转金额":"정확한 이체 금액을 입력하세요","划转成功":"이체 성공","提现方式不能为空":"출금 방식은 비워 둘 수 없습니다","提现账号不能为空":"출금 계좌는 비워 둘 수 없습니다","已绑定":"이미 연결됨","创建成功":"생성 성공","关闭成功":"종료 성공","或使用第三方登录":"또는 제3자 로그인 사용","正在加载 Telegram 登录...":"Telegram 로그인 로딩 중...","Telegram 登录失败":"Telegram 로그인 실패","下次流量重置时间":"다음 트래픽 리셋 시간: ","已用流量将在 {time} 重置":"사용한 데이터가 {time}에 재설정됩니다"}},Symbol.toStringTag,{value:"Module"})),$Q=Object.freeze(Object.defineProperty({__proto__:null,default:{"请求失败":"Запрос не удался","月付":"Ежемесячно","季付":"Ежеквартально","半年付":"Каждые полгода","年付":"Ежегодно","两年付":"Раз в два года","三年付":"Раз в три года","一次性":"Единоразово","重置流量包":"Пакет сброса трафика","待支付":"Ожидает оплаты","开通中":"Ожидает активации","已取消":"Отменено","已完成":"Завершено","已折抵":"Конвертировано","待确认":"Ожидает подтверждения","发放中":"Подтверждается","已发放":"Завершено","无效":"Недействительно","个人中心":"Личный кабинет","登出":"Выйти","搜索":"Поиск","仪表盘":"Панель управления","订阅":"Подписка","我的订阅":"Моя подписка","购买订阅":"Купить подписку","财务":"Финансы","我的订单":"Мои заказы","我的邀请":"Мои приглашения","用户":"Аккаунт","我的工单":"Мои тикеты","流量明细":"Детали трафика","使用文档":"База знаний","绑定Telegram获取更多服务":"Привяжите Telegram для получения дополнительных услуг","点击这里进行绑定":"Нажмите здесь для привязки","公告":"Объявления","总览":"Обзор","该订阅长期有效":"Подписка действует бессрочно","已过期":"Истекло","已用 {used} / 总计 {total}":"Использовано {used} / Всего {total}","查看订阅":"Просмотр подписки","邮箱":"Email","邮箱验证码":"Код подтверждения email","发送":"Отправить","重置密码":"Сброс пароля","返回登入":"Вернуться к входу","邀请码":"Код приглашения","复制链接":"Копировать ссылку","完成时间":"Время завершения","佣金":"Комиссия","已注册用户数":"Зарегистрированные пользователи","佣金比例":"Ставка комиссии","确认中的佣金":"Ожидаемая комиссия","佣金将会在确认后会到达你的佣金账户。":"Комиссия поступит на ваш счет после проверки.","邀请码管理":"Управление кодами приглашений","生成邀请码":"Создать код приглашения","佣金发放记录":"История начисления комиссий","复制成功":"Успешно скопировано","密码":"Пароль","登入":"Войти","注册":"Регистрация","忘记密码":"Забыли пароль","# 订单号":"Номер заказа #","周期":"Тип / Период","订单金额":"Сумма заказа","订单状态":"Статус заказа","创建时间":"Время создания","操作":"Действие","查看详情":"Подробнее","请选择支付方式":"Выберите способ оплаты","请检查信用卡支付信息":"Проверьте данные кредитной карты","订单详情":"Детали заказа","折扣":"Скидка","折抵":"Конвертировано","退款":"Возврат","支付方式":"Способ оплаты","填写信用卡支付信息":"Введите данные кредитной карты","您的信用卡信息只会被用作当次扣款,系统并不会保存,这是我们认为最安全的。":"Мы не сохраняем данные вашей кредитной карты, они используются только для текущей транзакции.","订单总额":"Итого к оплате","总计":"Итого","结账":"Оформить заказ","等待支付中":"Ожидание оплаты","订单系统正在进行处理,请稍等1-3分钟。":"Заказ обрабатывается, подождите 1-3 минуты.","订单由于超时支付已被取消。":"Заказ отменен из-за истечения времени оплаты.","订单已支付并开通。":"Заказ оплачен и услуга активирована.","选择订阅":"Выберите подписку","立即订阅":"Подписаться сейчас","配置订阅":"Настроить подписку","付款周期":"Период оплаты","有优惠券?":"Есть купон?","验证":"Проверить","下单":"Заказать","变更订阅会导致当前订阅被新订阅覆盖,请注意。":"Внимание, изменение подписки заменит вашу текущую подписку.","该订阅无法续费":"Эту подписку нельзя продлить","选择其他订阅":"Выбрать другую подписку","我的钱包":"Мой кошелек","账户余额(仅消费)":"Баланс аккаунта (только для оплаты)","推广佣金(可提现)":"Реферальная комиссия (можно вывести)","钱包组成部分":"Детали кошелька","划转":"Перевод","推广佣金提现":"Вывод реферальной комиссии","修改密码":"Изменить пароль","保存":"Сохранить","旧密码":"Старый пароль","新密码":"Новый пароль","请输入旧密码":"Введите старый пароль","请输入新密码":"Введите новый пароль","通知":"Уведомления","到期邮件提醒":"Напоминание об истечении подписки по email","流量邮件提醒":"Уведомление о недостатке трафика по email","绑定Telegram":"Привязать Telegram","立即开始":"Начать сейчас","重置订阅信息":"Сбросить подписку","重置":"Сбросить","确定要重置订阅信息?":"Вы хотите сбросить подписку?","如果你的订阅地址或信息泄露可以进行此操作。重置后你的UUID及订阅将会变更,需要重新进行订阅。":"В случае утечки данных аккаунта или подписки используйте эту опцию. После сброса ваш UUID и подписка изменятся, потребуется повторная подписка.","重置成功":"Успешно сброшено","两次新密码输入不同":"Новые пароли не совпадают","两次密码输入不同":"Пароли не совпадают","邀请码(选填)":"Код приглашения (необязательно)",'我已阅读并同意 服务条款':'Я прочитал и согласен с условиями использования',"请同意服务条款":"Пожалуйста, примите условия использования","名称":"Название","标签":"Теги","状态":"Статус","节点五分钟内节点在线情况":"Статус узлов за последние 5 минут","倍率":"Коэффициент","使用的流量将乘以倍率进行扣除":"Использованный трафик будет умножен на коэффициент списания.","更多操作":"Действия","没有可用节点,如果您未订阅或已过期请":"Нет доступных узлов. Если у вас нет подписки или она истекла, пожалуйста","确定重置当前已用流量?":"Вы уверены, что хотите сбросить текущий использованный трафик?","点击「确定」将会跳转到收银台,支付订单后系统将会清空您当月已使用流量。":'Нажмите "Подтвердить" для перехода к оплате. После оплаты система очистит ваш трафик за текущий месяц.',"确定":"Подтвердить","低":"Низкий","中":"Средний","高":"Высокий","主题":"Тема","工单级别":"Приоритет тикета","工单状态":"Статус тикета","最后回复":"Последний ответ","已关闭":"Закрыт","待回复":"Ожидает ответа","已回复":"Отвечен","查看":"Просмотр","关闭":"Отмена","新的工单":"Мои тикеты","确认":"Подтвердить","请输入工单主题":"Введите тему тикета","工单等级":"Приоритет тикета","请选择工单等级":"Выберите приоритет тикета","消息":"Сообщение","请描述你遇到的问题":"Опишите вашу проблему","记录时间":"Время записи","实际上行":"Фактическая загрузка","实际下行":"Фактическая загрузка","合计":"Итого","公式:(实际上行 + 实际下行) x 扣费倍率 = 扣除流量":"Формула: (Загрузка + Скачивание) x Коэффициент = Списание трафика","复制订阅地址":"Копировать URL подписки","导入到":"Экспорт в","一键订阅":"Быстрая подписка","复制订阅":"Копировать URL подписки","推广佣金划转至余额":"Перевести реферальную комиссию на баланс","划转后的余额仅用于{title}消费使用":"Переведенный баланс будет использоваться только для оплаты {title}","当前推广佣金余额":"Текущий баланс реферальной комиссии","划转金额":"Сумма перевода","请输入需要划转到余额的金额":"Введите сумму для перевода на баланс","输入内容回复工单...":"Введите сообщение для ответа на тикет...","申请提现":"Запросить вывод","取消":"Отмена","提现方式":"Способ вывода","请选择提现方式":"Выберите способ вывода","提现账号":"Аккаунт для вывода","请输入提现账号":"Введите аккаунт для вывода","我知道了":"Понятно","第一步":"Первый шаг","第二步":"Второй шаг","打开Telegram搜索":"Откройте Telegram и найдите","向机器人发送你的":"Отправьте следующую команду боту","最后更新: {date}":"Последнее обновление: {date}","还有没支付的订单":"Есть неоплаченные заказы","立即支付":"Оплатить сейчас","条工单正在处理中":"тикетов в обработке","立即查看":"Посмотреть","节点状态":"Статус узлов","商品信息":"Информация о продукте","产品名称":"Название продукта","类型/周期":"Тип / Период","产品流量":"Трафик продукта","订单信息":"Детали заказа","关闭订单":"Закрыть заказ","订单号":"Номер заказа","优惠金额":"Сумма скидки","旧订阅折抵金额":"Сумма конвертации старой подписки","退款金额":"Сумма возврата","余额支付":"Оплата с баланса","工单历史":"История тикетов","已用流量将在 {time} 重置":"Использованный трафик будет сброшен в {time}","已用流量已在今日重置":"Использованный трафик был сброшен сегодня","重置已用流量":"Сбросить использованный трафик","查看节点状态":"Посмотреть статус узлов","当前已使用流量达{rate}%":"Текущий использованный трафик достиг {rate}%","节点名称":"Название узла","于 {date} 到期,距离到期还有 {day} 天。":"Истекает {date}, осталось {day} дней.","Telegram 讨论组":"Группа обсуждения Telegram","立即加入":"Присоединиться","该订阅无法续费,仅允许新用户购买":"Эту подписку нельзя продлить, она доступна только для новых пользователей.","重置当月流量":"Сбросить трафик за текущий месяц","流量明细仅保留近月数据以供查询。":"Детали трафика хранятся только за последний месяц.","扣费倍率":"Коэффициент списания","支付手续费":"Комиссия за оплату","续费订阅":"Продление подписки","学习如何使用":"Узнайте как использовать","快速将节点导入对应客户端进行使用":"Быстро экспортируйте подписку в клиентское приложение","对您当前的订阅进行续费":"Продлите вашу текущую подписку","对您当前的订阅进行购买":"Купите вашу текущую подписку","捷径":"Ярлыки","不会使用,查看使用教程":"Я новичок, посмотреть руководство","使用支持扫码的客户端进行订阅":"Используйте приложение с поддержкой сканирования QR-кода для подписки","扫描二维码订阅":"Сканируйте QR-код для подписки","续费":"Продление","购买":"Купить","查看教程":"Посмотреть руководство","注意":"Внимание","你还有未完成的订单,购买前需要先进行取消,确定取消先前的订单吗?":"У вас есть неоплаченный заказ. Перед покупкой его нужно отменить. Вы уверены, что хотите отменить предыдущий заказ?","确定取消":"Подтвердить отмену","返回我的订单":"Вернуться к моим заказам","如果你已经付款,取消订单可能会导致支付失败,确定取消订单吗?":"Если вы уже оплатили, отмена заказа может привести к сбою оплаты. Вы уверены, что хотите отменить заказ?","选择最适合你的计划":"Выберите подходящий тариф","全部":"Все","按周期":"По периоду","遇到问题":"У меня проблема","遇到问题可以通过工单与我们沟通":"Если у вас есть вопросы, вы можете связаться с нами через тикет","按流量":"Оплата по трафику","搜索文档":"Поиск в документации","技术支持":"Техническая поддержка","当前剩余佣金":"Остаток комиссии","三级分销比例":"Трехуровневое распределение","累计获得佣金":"Накопленная комиссия","您邀请的用户再次邀请用户将按照订单金额乘以分销等级的比例进行分成。":"Пользователи, приглашенные вашими рефералами, будут распределяться согласно сумме заказа, умноженной на уровень распределения.","发放时间":"Время начисления","{number} 人":"{number} чел.","当你的订阅地址或账户发生泄漏被他人滥用时,可以在此重置订阅信息。避免带来不必要的损失。":"Если ваш адрес подписки или аккаунт был скомпрометирован, вы можете сбросить информацию о подписке здесь, чтобы избежать нежелательных потерь.","再次输入密码":"Введите пароль еще раз","返回登陆":"Вернуться к входу","选填":"Необязательно","必填":"Обязательно","最后回复时间":"Время последнего ответа","请选项工单等级":"Выберите приоритет тикета","回复":"Ответить","输入内容回复工单":"Введите сообщение для ответа на тикет","已生成":"Создано","选择协议":"Выберите протокол","自动":"Автоматически","流量重置包":"Пакет сброса трафика","复制失败":"Ошибка копирования","提示":"Уведомление","确认退出?":"Подтвердить выход?","已退出登录":"Вы успешно вышли","请输入邮箱地址":"Введите адрес email","{second}秒后可重新发送":"Повторная отправка через {second} сек.","发送成功":"Успешно отправлено","请输入账号密码":"Введите логин и пароль","请确保两次密码输入一致":"Убедитесь, что пароли совпадают","注册成功":"Регистрация успешна","重置密码成功,正在返回登录":"Пароль успешно сброшен, возврат к входу","确认取消":"Подтвердить отмену","请注意,变更订阅会导致当前订阅被覆盖。":"Обратите внимание, изменение подписки заменит текущую подписку.","订单提交成功,正在跳转支付":"Заказ успешно отправлен, перенаправление на оплату.","回复成功":"Ответ отправлен","工单详情":"Детали тикета","登录成功":"Вход выполнен успешно","确定退出?":"Вы уверены, что хотите выйти?","支付成功":"Оплата успешна","正在前往收银台":"Переход к оплате","请输入正确的划转金额":"Введите правильную сумму перевода","划转成功":"Перевод выполнен успешно","提现方式不能为空":"Способ вывода не может быть пустым","提现账号不能为空":"Аккаунт для вывода не может быть пустым","已绑定":"Уже привязано","创建成功":"Успешно создано","关闭成功":"Успешно закрыто","或使用第三方登录":"Или войдите через","正在加载 Telegram 登录...":"Загрузка входа через Telegram...","Telegram 登录失败":"Ошибка входа через Telegram","下次流量重置时间":"Время следующего сброса: "}},Symbol.toStringTag,{value:"Module"})),NQ=Object.freeze(Object.defineProperty({__proto__:null,default:{"请求失败":"Yêu Cầu Thất Bại","月付":"Tháng","季付":"Hàng Quý","半年付":"6 Tháng","年付":"Năm","两年付":"Hai Năm","三年付":"Ba Năm","一次性":"Dài Hạn","重置流量包":"Cập Nhật Dung Lượng","待支付":"Đợi Thanh Toán","开通中":"Đang xử lý","已取消":"Đã Hủy","已完成":"Thực Hiện","已折抵":"Quy Đổi","待确认":"Đợi Xác Nhận","发放中":"Đang Xác Nhận","已发放":"Hoàn Thành","无效":"Không Hợp Lệ","个人中心":"Trung Tâm Kiểm Soát","登出":"Đăng Xuất","搜索":"Tìm Kiếm","仪表盘":"Trang Chủ","订阅":"Gói Dịch Vụ","我的订阅":"Gói Dịch Vụ Của Tôi","购买订阅":"Mua Gói Dịch Vụ","财务":"Tài Chính","我的订单":"Đơn Hàng Của Tôi","我的邀请":"Lời Mời Của Tôi","用户":"Người Dùng","我的工单":"Liên Hệ Với Chúng Tôi","流量明细":"Chi Tiết Dung Lượng","使用文档":"Tài liệu sử dụng","绑定Telegram获取更多服务":"Liên kết Telegram thêm dịch vụ","点击这里进行绑定":"Ấn vào để liên kết","公告":"Thông Báo","总览":"Tổng Quat","该订阅长期有效":"Gói này có thời hạn dài","已过期":"Tài khoản hết hạn","已用 {used} / 总计 {total}":"Đã sử dụng {used} / Tổng dung lượng {total}","查看订阅":"Xem Dịch Vụ","邮箱":"E-mail","邮箱验证码":"Mã xác minh mail","发送":"Gửi","重置密码":"Đặt Lại Mật Khẩu","返回登入":"Về đăng nhập","邀请码":"Mã mời","复制链接":"Sao chép đường dẫn","完成时间":"Thời gian hoàn thành","佣金":"Tiền hoa hồng","已注册用户数":"Số người dùng đã đăng ký","佣金比例":"Tỷ lệ hoa hồng","确认中的佣金":"Hoa hồng đang xác nhận","佣金将会在确认后会到达你的佣金账户。":"Sau khi xác nhận tiền hoa hồng sẽ gửi đến tài khoản hoa hồng của bạn.","邀请码管理":"Quản lý mã mời","生成邀请码":"Tạo mã mời","佣金发放记录":"Hồ sơ hoa hồng","复制成功":"Sao chép thành công","密码":"Mật khẩu","登入":"Đăng nhập","注册":"Đăng ký","忘记密码":"Quên mật khẩu","# 订单号":"# Mã đơn hàng","周期":"Chu Kỳ","订单金额":"Tiền đơn hàng","订单状态":"Trạng thái đơn","创建时间":"Thời gian tạo","操作":"Thao tác","查看详情":"Xem chi tiết","请选择支付方式":"Chọn phương thức thanh toán","请检查信用卡支付信息":"Hãy kiểm tra thông tin thẻ thanh toán","订单详情":"Chi tiết đơn hàng","折扣":"Chiết khấu","折抵":"Giảm giá","退款":"Hoàn lại","支付方式":"Phương thức thanh toán","填写信用卡支付信息":"Điền thông tin Thẻ Tín Dụng","您的信用卡信息只会被用作当次扣款,系统并不会保存,这是我们认为最安全的。":"Thông tin thẻ tín dụng của bạn sẽ chỉ được sử dụng cho lần thanh toán này, hệ thống sẽ không lưu thông tin đó, chúng tôi nghĩ đây à cách an toàn nhất.","订单总额":"Tổng tiền đơn hàng","总计":"Tổng","结账":"Kết toán","等待支付中":"Đang chờ thanh toán","订单系统正在进行处理,请稍等1-3分钟。":"Hệ thống đang xử lý đơn hàng, vui lòng đợi 1-3p.","订单由于超时支付已被取消。":"Do quá giờ nên đã hủy đơn hàng.","订单已支付并开通。":"Đơn hàng đã thanh toán và mở.","选择订阅":"Chọn gói","立即订阅":"Mua gói ngay","配置订阅":"Thiết lập gói","付款周期":"Chu kỳ thanh toán","有优惠券?":"Có phiếu giảm giá?","验证":"Xác minh","下单":"Đặt hàng","变更订阅会导致当前订阅被新订阅覆盖,请注意。":"Việc thay đổi gói dịch vụ sẽ thay thế gói hiện tại bằng gói mới, xin lưu ý.","该订阅无法续费":"Gói này không thể gia hạn","选择其他订阅":"Chọn gói dịch vụ khác","我的钱包":"Ví tiền của tôi","账户余额(仅消费)":"Số dư tài khoản (Chỉ tiêu dùng)","推广佣金(可提现)":"Tiền hoa hồng giới thiệu (Được rút)","钱包组成部分":"Thành phần ví tiền","划转":"Chuyển khoản","推广佣金提现":"Rút tiền hoa hồng giới thiệu","修改密码":"Đổi mật khẩu","保存":"Lưu","旧密码":"Mật khẩu cũ","新密码":"Mật khẩu mới","请输入旧密码":"Hãy nhập mật khẩu cũ","请输入新密码":"Hãy nhập mật khẩu mới","通知":"Thông Báo","到期邮件提醒":"Mail nhắc đến hạn","流量邮件提醒":"Mail nhắc dung lượng","绑定Telegram":"Liên kết Telegram","立即开始":"Bắt Đầu","重置订阅信息":"Reset thông tin gói","重置":"Reset","确定要重置订阅信息?":"Xác nhận reset thông tin gói?","如果你的订阅地址或信息泄露可以进行此操作。重置后你的UUID及订阅将会变更,需要重新进行订阅。":"Nếu địa chỉ hoặc thông tin gói dịch vụ của bạn bị tiết lộ có thể tiến hành thao tác này. Sau khi reset UUID sẽ thay đổi.","重置成功":"Reset thành công","两次新密码输入不同":"Mật khẩu mới xác nhận không khớp","两次密码输入不同":"Mật khẩu xác nhận không khớp","邀请码(选填)":"Mã mời(Điền)",'我已阅读并同意 服务条款':"Tôi đã đọc và đồng ý điều khoản dịch vụ","请同意服务条款":"Hãy đồng ý điều khoản dịch vụ","名称":"Tên","标签":"Nhãn","状态":"Trạng thái","节点五分钟内节点在线情况":"Node trạng thái online trong vòng 5 phút","倍率":"Bội số","使用的流量将乘以倍率进行扣除":"Dung lượng sử dụng nhân với bội số rồi khấu trừ","更多操作":"Thêm thao tác","没有可用节点,如果您未订阅或已过期请":"Chưa có node khả dụng, nếu bạn chưa mua gói hoặc đã hết hạn hãy","确定重置当前已用流量?":"确定重置当前已用流量?","点击「确定」将会跳转到收银台,支付订单后系统将会清空您当月已使用流量。":"Ấn 「OK」 sẽ chuyển đến trang thanh toán, sau khi thanh toán đơn hàng hệ thống sẽ xóa dung lượng đã dùng tháng này của bạn.","确定":"OK","低":"Thấp","中":"Vừa","高":"Cao","主题":"Chủ Đề","工单级别":"Cấp độ","工单状态":"Trạng thái","最后回复":"Trả lời gần đây","已关闭":"Đã đóng","待回复":"Chờ trả lời","已回复":"Đã trả lời","查看":"Xem","关闭":"Đóng","新的工单":"Việc mới","确认":"OK","请输入工单主题":"Hãy nhập chủ đề công việc","工单等级":"Cấp độ công việc","请选择工单等级":"Hãy chọn cấp độ công việc","消息":"Thông tin","请描述你遇到的问题":"Hãy mô tả vấn đề gặp phải","记录时间":"Thời gian ghi","实际上行":"Upload thực tế","实际下行":"Download thực tế","合计":"Cộng","公式:(实际上行 + 实际下行) x 扣费倍率 = 扣除流量":"Công thức: (upload thực tế + download thực tế) x bội số trừ phí = Dung lượng khấu trừ","复制订阅地址":"Sao chép liên kết","导入到":"Nhập vào","一键订阅":"Nhấp chuột để đồng bộ máy chủ","复制订阅":"Sao chép liên kết","推广佣金划转至余额":"Chuyển khoản hoa hồng giới thiệu đến số dư","划转后的余额仅用于{title}消费使用":"Số dư sau khi chuyển khoản chỉ dùng để tiêu dùng {title}","当前推广佣金余额":"Số dư hoa hồng giới thiệu hiện tại","划转金额":"Chuyển tiền","请输入需要划转到余额的金额":"Hãy nhậo số tiền muốn chuyển đến số dư","输入内容回复工单...":"Nhập nội dung trả lời công việc...","申请提现":"Yêu cầu rút tiền","取消":"Hủy","提现方式":"Phương thức rút tiền","请选择提现方式":"Hãy chọn phương thức rút tiền","提现账号":"Rút về tào khoản","请输入提现账号":"Hãy chọn tài khoản rút tiền","我知道了":"OK","第一步":"Bước 1","第二步":"Bước 2","打开Telegram搜索":"Mở Telegram tìm kiếm","向机器人发送你的":"Gửi cho bot","最后更新: {date}":"Cập nhật gần đây: {date}","还有没支付的订单":"Có đơn hàng chưa thanh toán","立即支付":"Thanh toán ngay","条工单正在处理中":" công việc đang xử lý","立即查看":"Xem Ngay","节点状态":"Trạng thái node","商品信息":"Thông tin","产品名称":"Tên sản phẩm","类型/周期":"Loại/Chu kỳ","产品流量":"Dung Lượng","订单信息":"Thông tin đơn hàng","关闭订单":"Đóng đơn hàng","订单号":"Mã đơn hàng","优惠金额":"Tiền ưu đãi","旧订阅折抵金额":"Tiền giảm giá gói cũ","退款金额":"Số tiền hoàn lại","余额支付":"Thanh toán số dư","工单历史":"Lịch sử đơn hàng","已用流量将在 {reset_day} 日后重置":"Dữ liệu đã sử dụng sẽ được đặt lại sau {reset_day} ngày","已用流量已在今日重置":"Dữ liệu đã sử dụng đã được đặt lại trong ngày hôm nay","重置已用流量":"Đặt lại dữ liệu đã sử dụng","查看节点状态":"Xem trạng thái nút","当前已使用流量达{rate}%":"Dữ liệu đã sử dụng hiện tại đạt {rate}%","节点名称":"Tên node","于 {date} 到期,距离到期还有 {day} 天。":"Hết hạn vào {date}, còn {day} ngày.","Telegram 讨论组":"Nhóm Telegram","立即加入":"Vào ngay","该订阅无法续费,仅允许新用户购买":"Đăng ký này không thể gia hạn, chỉ người dùng mới được phép mua","重置当月流量":"Đặt lại dung lượng tháng hiện tại","流量明细仅保留近月数据以供查询。":"Chi tiết dung lượng chỉ lưu dữ liệu của những tháng gần đây để truy vấn.","扣费倍率":"Tỷ lệ khấu trừ","支付手续费":"Phí thủ tục","续费订阅":"Gia hạn đăng ký","学习如何使用":"Hướng dẫn sử dụng","快速将节点导入对应客户端进行使用":"Bạn cần phải mua gói này","对您当前的订阅进行续费":"Gia hạn gói hiện tại","对您当前的订阅进行购买":"Mua gói bạn đã chọn","捷径":"Phím tắt","不会使用,查看使用教程":"Mua gói này nếu bạn đăng ký","使用支持扫码的客户端进行订阅":"Sử dụng ứng dụng quét mã để đăng ký","扫描二维码订阅":"Quét mã QR để đăng ký","续费":"Gia hạn","购买":"Mua","查看教程":"Xem hướng dẫn","注意":"Chú Ý","你还有未完成的订单,购买前需要先进行取消,确定取消先前的订单吗?":"Bạn vẫn còn đơn đặt hàng chưa hoàn thành. Bạn cần hủy trước khi mua. Bạn có chắc chắn muốn hủy đơn đặt hàng trước đó không ?","确定取消":"Đúng/không","返回我的订单":"Quay lại đơn đặt hàng của tôi","如果你已经付款,取消订单可能会导致支付失败,确定取消订单吗?":"Nếu bạn đã thanh toán, việc hủy đơn hàng có thể khiến việc thanh toán không thành công. Bạn có chắc chắn muốn hủy đơn hàng không ?","选择最适合你的计划":"Chọn kế hoạch phù hợp với bạn nhất","全部":"Tất cả","按周期":"Chu kỳ","遇到问题":"Chúng tôi có một vấn đề","遇到问题可以通过工单与我们沟通":"Nếu bạn gặp sự cố, bạn có thể liên lạc với chúng tôi thông qua ","按流量":"Theo lưu lượng","搜索文档":"Tìm kiếm tài liệu","技术支持":"Hỗ trợ kỹ thuật","当前剩余佣金":"Số dư hoa hồng hiện tại","三级分销比例":"Tỷ lệ phân phối cấp 3","累计获得佣金":"Tổng hoa hồng đã nhận","您邀请的用户再次邀请用户将按照订单金额乘以分销等级的比例进行分成。":"Người dùng bạn mời lại mời người dùng sẽ được chia theo tỷ lệ của số tiền đơn hàng nhân với cấp độ phân phối.","发放时间":"Thời gian thanh toán hoa hồng","{number} 人":"{number} người","当你的订阅地址或账户发生泄漏被他人滥用时,可以在此重置订阅信息。避免带来不必要的损失。":"Nếu địa chỉ đăng ký hoặc tài khoản của bạn bị rò rỉ và bị người khác lạm dụng, bạn có thể đặt lại thông tin đăng ký tại đây để tránh mất mát không cần thiết.","再次输入密码":"Nhập lại mật khẩu","返回登陆":"Quay lại Đăng nhập","选填":"Tùy chọn","必填":"Bắt buộc","最后回复时间":"Thời gian Trả lời Cuối cùng","请选项工单等级":"Vui lòng Chọn Mức độ Ưu tiên Công việc","回复":"Trả lời","输入内容回复工单":"Nhập Nội dung để Trả lời Công việc","已生成":"Đã tạo","选择协议":"Chọn Giao thức","自动":"Tự động","流量重置包":"Gói Reset Dữ liệu","复制失败":"Sao chép thất bại","提示":"Thông báo","确认退出?":"Xác nhận Đăng xuất?","已退出登录":"Đã đăng xuất thành công","请输入邮箱地址":"Nhập địa chỉ email","{second}秒后可重新发送":"Gửi lại sau {second} giây","发送成功":"Gửi thành công","请输入账号密码":"Nhập tên đăng nhập và mật khẩu","请确保两次密码输入一致":"Đảm bảo hai lần nhập mật khẩu giống nhau","注册成功":"Đăng ký thành công","重置密码成功,正在返回登录":"Đặt lại mật khẩu thành công, đang quay trở lại trang đăng nhập","确认取消":"Xác nhận Hủy","请注意,变更订阅会导致当前订阅被覆盖。":"Vui lòng lưu ý rằng thay đổi đăng ký sẽ ghi đè lên đăng ký hiện tại.","订单提交成功,正在跳转支付":"Đơn hàng đã được gửi thành công, đang chuyển hướng đến thanh toán.","回复成功":"Trả lời thành công","工单详情":"Chi tiết Ticket","登录成功":"Đăng nhập thành công","确定退出?":"Xác nhận thoát?","支付成功":"Thanh toán thành công","正在前往收银台":"Đang tiến hành thanh toán","请输入正确的划转金额":"Vui lòng nhập số tiền chuyển đúng","划转成功":"Chuyển khoản thành công","提现方式不能为空":"Phương thức rút tiền không được để trống","提现账号不能为空":"Tài khoản rút tiền không được để trống","已绑定":"Đã liên kết","创建成功":"Tạo thành công","关闭成功":"Đóng thành công","或使用第三方登录":"Hoặc đăng nhập bằng bên thứ ba","正在加载 Telegram 登录...":"Đang tải đăng nhập Telegram...","Telegram 登录失败":"Đăng nhập Telegram thất bại","下次流量重置时间":"Thời gian đặt lại lưu lượng tiếp theo:","已用流量将在 {time} 重置":"Dữ liệu đã sử dụng sẽ được đặt lại vào {time}"}},Symbol.toStringTag,{value:"Module"})),jQ=Object.freeze(Object.defineProperty({__proto__:null,default:{"请求失败":"请求失败","月付":"月付","季付":"季付","半年付":"半年付","年付":"年付","两年付":"两年付","三年付":"三年付","一次性":"一次性","重置流量包":"重置流量包","待支付":"待支付","开通中":"开通中","已取消":"已取消","已完成":"已完成","已折抵":"已折抵","待确认":"待确认","发放中":"发放中","已发放":"已发放","无效":"无效","个人中心":"个人中心","登出":"登出","搜索":"搜索","仪表盘":"仪表盘","订阅":"订阅","我的订阅":"我的订阅","购买订阅":"购买订阅","财务":"财务","我的订单":"我的订单","我的邀请":"我的邀请","用户":"用户","我的工单":"我的工单","流量明细":"流量明细","使用文档":"使用文档","绑定Telegram获取更多服务":"绑定 Telegram 获取更多服务","点击这里进行绑定":"点击这里进行绑定","公告":"公告","总览":"总览","该订阅长期有效":"该订阅长期有效","已过期":"已过期","已用 {used} / 总计 {total}":"已用 {used} / 总计 {total}","查看订阅":"查看订阅","邮箱":"邮箱","邮箱验证码":"邮箱验证码","发送":"发送","重置密码":"重置密码","返回登入":"返回登入","邀请码":"邀请码","复制链接":"复制链接","完成时间":"完成时间","佣金":"佣金","已注册用户数":"已注册用户数","佣金比例":"佣金比例","确认中的佣金":"确认中的佣金","佣金将会在确认后会到达你的佣金账户。":"佣金将会在确认后到达您的佣金账户。","邀请码管理":"邀请码管理","生成邀请码":"生成邀请码","佣金发放记录":"佣金发放记录","复制成功":"复制成功","密码":"密码","登入":"登入","注册":"注册","忘记密码":"忘记密码","# 订单号":"# 订单号","周期":"周期","订单金额":"订单金额","订单状态":"订单状态","创建时间":"创建时间","操作":"操作","查看详情":"查看详情","请选择支付方式":"请选择支付方式","请检查信用卡支付信息":"请检查信用卡支付信息","订单详情":"订单详情","折扣":"折扣","折抵":"折抵","退款":"退款","支付方式":"支付方式","填写信用卡支付信息":"填写信用卡支付信息","您的信用卡信息只会被用作当次扣款,系统并不会保存,这是我们认为最安全的。":"您的信用卡信息只会用于当次扣款,系统并不会保存,我们认为这是最安全的。","订单总额":"订单总额","总计":"总计","结账":"结账","等待支付中":"等待支付中","订单系统正在进行处理,请稍等1-3分钟。":"订单系统正在进行处理,请等候 1-3 分钟。","订单由于超时支付已被取消。":"订单由于超时支付已被取消。","订单已支付并开通。":"订单已支付并开通。","选择订阅":"选择订阅","立即订阅":"立即订阅","配置订阅":"配置订阅","付款周期":"付款周期","有优惠券?":"有优惠券?","验证":"验证","下单":"下单","变更订阅会导致当前订阅被新订阅覆盖,请注意。":"请注意,变更订阅会导致当前订阅被新订阅覆盖。","该订阅无法续费":"该订阅无法续费","选择其他订阅":"选择其它订阅","我的钱包":"我的钱包","账户余额(仅消费)":"账户余额(仅消费)","推广佣金(可提现)":"推广佣金(可提现)","钱包组成部分":"钱包组成部分","划转":"划转","推广佣金提现":"推广佣金提现","修改密码":"修改密码","保存":"保存","旧密码":"旧密码","新密码":"新密码","请输入旧密码":"请输入旧密码","请输入新密码":"请输入新密码","通知":"通知","到期邮件提醒":"到期邮件提醒","流量邮件提醒":"流量邮件提醒","绑定Telegram":"绑定 Telegram","立即开始":"立即开始","重置订阅信息":"重置订阅信息","重置":"重置","确定要重置订阅信息?":"确定要重置订阅信息?","如果你的订阅地址或信息泄露可以进行此操作。重置后你的UUID及订阅将会变更,需要重新进行订阅。":"如果您的订阅地址或信息发生泄露可以执行此操作。重置后您的 UUID 及订阅将会变更,需要重新导入订阅。","重置成功":"重置成功","两次新密码输入不同":"两次新密码输入不同","两次密码输入不同":"两次密码输入不同","邀请码(选填)":"邀请码(选填)",'我已阅读并同意 服务条款':'我已阅读并同意 服务条款',"请同意服务条款":"请同意服务条款","名称":"名称","标签":"标签","状态":"状态","节点五分钟内节点在线情况":"五分钟内节点在线情况","倍率":"倍率","使用的流量将乘以倍率进行扣除":"使用的流量将乘以倍率进行扣除","更多操作":"更多操作","没有可用节点,如果您未订阅或已过期请":"没有可用节点,如果您未订阅或已过期请","确定重置当前已用流量?":"确定重置当前已用流量?","点击「确定」将会跳转到收银台,支付订单后系统将会清空您当月已使用流量。":"点击「确定」将会跳转到收银台,支付订单后系统将会清空您当月已使用流量。","确定":"确定","低":"低","中":"中","高":"高","主题":"主题","工单级别":"工单级别","工单状态":"工单状态","最后回复":"最后回复","已关闭":"已关闭","待回复":"待回复","已回复":"已回复","查看":"查看","关闭":"关闭","新的工单":"新的工单","确认":"确认","请输入工单主题":"请输入工单主题","工单等级":"工单等级","请选择工单等级":"请选择工单等级","消息":"消息","请描述你遇到的问题":"请描述您遇到的问题","记录时间":"记录时间","实际上行":"实际上行","实际下行":"实际下行","合计":"合计","公式:(实际上行 + 实际下行) x 扣费倍率 = 扣除流量":"公式:(实际上行 + 实际下行) x 扣费倍率 = 扣除流量","复制订阅地址":"复制订阅地址","导入到":"导入到","一键订阅":"一键订阅","复制订阅":"复制订阅","推广佣金划转至余额":"推广佣金划转至余额","划转后的余额仅用于{title}消费使用":"划转后的余额仅用于{title}消费使用","当前推广佣金余额":"当前推广佣金余额","划转金额":"划转金额","请输入需要划转到余额的金额":"请输入需要划转到余额的金额","输入内容回复工单...":"输入内容回复工单...","申请提现":"申请提现","取消":"取消","提现方式":"提现方式","请选择提现方式":"请选择提现方式","提现账号":"提现账号","请输入提现账号":"请输入提现账号","我知道了":"我知道了","第一步":"第一步","第二步":"第二步","打开Telegram搜索":"打开 Telegram 搜索","向机器人发送你的":"向机器人发送您的","最后更新":"{date}","还有没支付的订单":"还有没支付的订单","立即支付":"立即支付","条工单正在处理中":"条工单正在处理中","立即查看":"立即查看","节点状态":"节点状态","商品信息":"商品信息","产品名称":"产品名称","类型/周期":"类型/周期","产品流量":"产品流量","订单信息":"订单信息","关闭订单":"关闭订单","订单号":"订单号","优惠金额":"优惠金额","旧订阅折抵金额":"旧订阅折抵金额","退款金额":"退款金额","余额支付":"余额支付","工单历史":"工单历史","已用流量将在 {time} 重置":"已用流量将在 {time} 重置","已用流量已在今日重置":"已用流量已在今日重置","重置已用流量":"重置已用流量","查看节点状态":"查看节点状态","当前已使用流量达{rate}%":"当前已使用流量达 {rate}%","节点名称":"节点名称","于 {date} 到期,距离到期还有 {day} 天。":"于 {date} 到期,距离到期还有 {day} 天。","Telegram 讨论组":"Telegram 讨论组","立即加入":"立即加入","该订阅无法续费,仅允许新用户购买":"该订阅无法续费,仅允许新用户购买","重置当月流量":"重置当月流量","流量明细仅保留近月数据以供查询。":"流量明细仅保留近一个月数据以供查询。","扣费倍率":"扣费倍率","支付手续费":"支付手续费","续费订阅":"续费订阅","学习如何使用":"学习如何使用","快速将节点导入对应客户端进行使用":"快速将节点导入对应客户端进行使用","对您当前的订阅进行续费":"对您当前的订阅进行续费","对您当前的订阅进行购买":"对您当前的订阅进行购买","捷径":"捷径","不会使用,查看使用教程":"不会使用,查看使用教程","使用支持扫码的客户端进行订阅":"使用支持扫码的客户端进行订阅","扫描二维码订阅":"扫描二维码订阅","续费":"续费","购买":"购买","查看教程":"查看教程","注意":"注意","你还有未完成的订单,购买前需要先进行取消,确定取消先前的订单吗?":"您还有未完成的订单,购买前需要先取消,确定要取消之前的订单吗?","确定取消":"确定取消","返回我的订单":"返回我的订单","如果你已经付款,取消订单可能会导致支付失败,确定取消订单吗?":"如果您已经付款,取消订单可能会导致支付失败,确定要取消订单吗?","选择最适合你的计划":"选择最适合您的计划","全部":"全部","按周期":"按周期","遇到问题":"遇到问题","遇到问题可以通过工单与我们沟通":"遇到问题可以通过工单与我们沟通","按流量":"按流量","搜索文档":"搜索文档","技术支持":"技术支持","当前剩余佣金":"当前剩余佣金","三级分销比例":"三级分销比例","累计获得佣金":"累计获得佣金","您邀请的用户再次邀请用户将按照订单金额乘以分销等级的比例进行分成。":"您邀请的用户再次邀请用户将按照订单金额乘以分销等级的比例进行分成。","发放时间":"发放时间","{number} 人":"{number} 人","当你的订阅地址或账户发生泄漏被他人滥用时,可以在此重置订阅信息。避免带来不必要的损失。":"当你的订阅地址或账户发生泄漏被他人滥用时,可以在此重置订阅信息。避免带来不必要的损失。","再次输入密码":"再次输入密码","返回登陆":"返回登录","选填":"选填","必填":"必填","最后回复时间":"最后回复时间","请选项工单等级":"请选择工单优先级","回复":"回复","输入内容回复工单":"输入内容回复工单","已生成":"已生成","选择协议":"选择协议","自动":"自动","流量重置包":"流量重置包","复制失败":"复制失败","提示":"提示","确认退出?":"确认退出?","已退出登录":"已成功退出登录","请输入邮箱地址":"请输入邮箱地址","{second}秒后可重新发送":"{second}秒后可重新发送","发送成功":"发送成功","请输入账号密码":"请输入账号密码","请确保两次密码输入一致":"请确保两次密码输入一致","注册成功":"注册成功","重置密码成功,正在返回登录":"重置密码成功,正在返回登录","确认取消":"确认取消","请注意,变更订阅会导致当前订阅被覆盖。":"请注意,变更订阅会导致当前订阅被覆盖。","订单提交成功,正在跳转支付":"订单提交成功,正在跳转支付","回复成功":"回复成功","工单详情":"工单详情","登录成功":"登录成功","确定退出?":"确定退出?","支付成功":"支付成功","正在前往收银台":"正在前往收银台","请输入正确的划转金额":"请输入正确的划转金额","划转成功":"划转成功","提现方式不能为空":"提现方式不能为空","提现账号不能为空":"提现账号不能为空","已绑定":"已绑定","创建成功":"创建成功","关闭成功":"关闭成功","或使用第三方登录":"或使用第三方登录","正在加载 Telegram 登录...":"正在加载 Telegram 登录...","Telegram 登录失败":"Telegram 登录失败","下次流量重置时间":"下次流量重置时间:"}},Symbol.toStringTag,{value:"Module"})),HQ=Object.freeze(Object.defineProperty({__proto__:null,default:{"请求失败":"請求失敗","月付":"月繳制","季付":"季繳","半年付":"半年缴","年付":"年繳","两年付":"兩年繳","三年付":"三年繳","一次性":"一次性","重置流量包":"重置流量包","待支付":"待支付","开通中":"開通中","已取消":"已取消","已完成":"已完成","已折抵":"已折抵","待确认":"待確認","发放中":"發放中","已发放":"已發放","无效":"無效","个人中心":"您的帳戸","登出":"登出","搜索":"搜尋","仪表盘":"儀表板","订阅":"訂閱","我的订阅":"我的訂閱","购买订阅":"購買訂閱","财务":"財務","我的订单":"我的訂單","我的邀请":"我的邀請","用户":"使用者","我的工单":"我的工單","流量明细":"流量明細","使用文档":"說明文件","绑定Telegram获取更多服务":"綁定 Telegram 獲取更多服務","点击这里进行绑定":"點擊這裡進行綁定","公告":"公告","总览":"總覽","该订阅长期有效":"該訂閱長期有效","已过期":"已過期","已用 {used} / 总计 {total}":"已用 {used} / 總計 {total}","查看订阅":"查看訂閱","邮箱":"郵箱","邮箱验证码":"郵箱驗證碼","发送":"傳送","重置密码":"重設密碼","返回登入":"返回登錄","邀请码":"邀請碼","复制链接":"複製鏈接","完成时间":"完成時間","佣金":"佣金","已注册用户数":"已註冊用戶數","佣金比例":"佣金比例","确认中的佣金":"確認中的佣金","佣金将会在确认后会到达你的佣金账户。":"佣金將會在確認後到達您的佣金帳戶。","邀请码管理":"邀請碼管理","生成邀请码":"生成邀請碼","佣金发放记录":"佣金發放記錄","复制成功":"複製成功","密码":"密碼","登入":"登入","注册":"註冊","忘记密码":"忘記密碼","# 订单号":"# 訂單號","周期":"週期","订单金额":"訂單金額","订单状态":"訂單狀態","创建时间":"創建時間","操作":"操作","查看详情":"查看詳情","请选择支付方式":"請選擇支付方式","请检查信用卡支付信息":"請檢查信用卡支付資訊","订单详情":"訂單詳情","折扣":"折扣","折抵":"折抵","退款":"退款","支付方式":"支付方式","填写信用卡支付信息":"填寫信用卡支付資訊","您的信用卡信息只会被用作当次扣款,系统并不会保存,这是我们认为最安全的。":"您的信用卡資訊只會被用作當次扣款,系統並不會保存,我們認為這是最安全的。","订单总额":"訂單總額","总计":"總計","结账":"結賬","等待支付中":"等待支付中","订单系统正在进行处理,请稍等1-3分钟。":"訂單系統正在進行處理,請稍等 1-3 分鐘。","订单由于超时支付已被取消。":"訂單由於支付超時已被取消","订单已支付并开通。":"訂單已支付並開通","选择订阅":"選擇訂閱","立即订阅":"立即訂閱","配置订阅":"配置訂閱","付款周期":"付款週期","有优惠券?":"有優惠券?","验证":"驗證","下单":"下單","变更订阅会导致当前订阅被新订阅覆盖,请注意。":"請注意,變更訂閱會導致當前訂閱被新訂閱覆蓋。","该订阅无法续费":"該訂閱無法續費","选择其他订阅":"選擇其它訂閱","我的钱包":"我的錢包","账户余额(仅消费)":"賬戶餘額(僅消費)","推广佣金(可提现)":"推廣佣金(可提現)","钱包组成部分":"錢包組成部分","划转":"劃轉","推广佣金提现":"推廣佣金提現","修改密码":"修改密碼","保存":"儲存","旧密码":"舊密碼","新密码":"新密碼","请输入旧密码":"請輸入舊密碼","请输入新密码":"請輸入新密碼","通知":"通知","到期邮件提醒":"到期郵件提醒","流量邮件提醒":"流量郵件提醒","绑定Telegram":"綁定 Telegram","立即开始":"立即開始","重置订阅信息":"重置訂閲資訊","重置":"重置","确定要重置订阅信息?":"確定要重置訂閱資訊?","如果你的订阅地址或信息泄露可以进行此操作。重置后你的UUID及订阅将会变更,需要重新进行订阅。":"如果您的訂閱位址或資訊發生洩露可以執行此操作。重置後您的 UUID 及訂閱將會變更,需要重新導入訂閱。","重置成功":"重置成功","两次新密码输入不同":"兩次新密碼輸入不同","两次密码输入不同":"兩次密碼輸入不同","邀请码(选填)":"邀請碼(選填)",'我已阅读并同意 服务条款':'我已閱讀並同意 服務條款',"请同意服务条款":"請同意服務條款","名称":"名稱","标签":"標籤","状态":"狀態","节点五分钟内节点在线情况":"五分鐘內節點線上情況","倍率":"倍率","使用的流量将乘以倍率进行扣除":"使用的流量將乘以倍率進行扣除","更多操作":"更多操作","没有可用节点,如果您未订阅或已过期请":"沒有可用節點,如果您未訂閱或已過期請","确定重置当前已用流量?":"確定重置當前已用流量?","点击「确定」将会跳转到收银台,支付订单后系统将会清空您当月已使用流量。":"點擊「確定」將會跳轉到收銀台,支付訂單後系統將會清空您當月已使用流量。","确定":"確定","低":"低","中":"中","高":"高","主题":"主題","工单级别":"工單級別","工单状态":"工單狀態","最后回复":"最新回復","已关闭":"已關閉","待回复":"待回復","已回复":"已回復","查看":"檢視","关闭":"關閉","新的工单":"新的工單","确认":"確認","请输入工单主题":"請輸入工單主題","工单等级":"工單等級","请选择工单等级":"請選擇工單等級","消息":"訊息","请描述你遇到的问题":"請描述您遇到的問題","记录时间":"記錄時間","实际上行":"實際上行","实际下行":"實際下行","合计":"合計","公式:(实际上行 + 实际下行) x 扣费倍率 = 扣除流量":"公式:(實際上行 + 實際下行) x 扣費倍率 = 扣除流量","复制订阅地址":"複製訂閲位址","导入到":"导入到","一键订阅":"一鍵訂閲","复制订阅":"複製訂閲","推广佣金划转至余额":"推廣佣金劃轉至餘額","划转后的余额仅用于{title}消费使用":"劃轉后的餘額僅用於 {title} 消費使用","当前推广佣金余额":"當前推廣佣金餘額","划转金额":"劃轉金額","请输入需要划转到余额的金额":"請輸入需要劃轉到餘額的金額","输入内容回复工单...":"輸入内容回復工單…","申请提现":"申請提現","取消":"取消","提现方式":"提現方式","请选择提现方式":"請選擇提現方式","提现账号":"提現賬號","请输入提现账号":"請輸入提現賬號","我知道了":"我知道了","第一步":"步驟一","第二步":"步驟二","打开Telegram搜索":"打開 Telegram 並搜索","向机器人发送你的":"向機器人發送您的","最后更新: {date}":"最後更新: {date}","还有没支付的订单":"還有未支付的訂單","立即支付":"立即支付","条工单正在处理中":"條工單正在處理中","立即查看":"立即檢視","节点状态":"節點狀態","商品信息":"商品資訊","产品名称":"產品名稱","类型/周期":"類型/週期","产品流量":"產品流量","订单信息":"訂單信息","关闭订单":"關閉訂單","订单号":"訂單號","优惠金额":"優惠金額","旧订阅折抵金额":"舊訂閲折抵金額","退款金额":"退款金額","余额支付":"餘額支付","工单历史":"工單歷史","已用流量将在 {time} 重置":"已用流量將在 {time} 重置","已用流量已在今日重置":"已用流量已在今日重置","重置已用流量":"重置已用流量","查看节点状态":"查看節點狀態","当前已使用流量达{rate}%":"當前已用流量達 {rate}%","节点名称":"節點名稱","于 {date} 到期,距离到期还有 {day} 天。":"於 {date} 到期,距離到期還有 {day} 天。","Telegram 讨论组":"Telegram 討論組","立即加入":"立即加入","该订阅无法续费,仅允许新用户购买":"該訂閲無法續費,僅允許新用戶購買","重置当月流量":"重置當月流量","流量明细仅保留近月数据以供查询。":"流量明細僅保留近一個月資料以供查詢。","扣费倍率":"扣费倍率","支付手续费":"支付手續費","续费订阅":"續費訂閲","学习如何使用":"學習如何使用","快速将节点导入对应客户端进行使用":"快速將訂閲導入對應的客戶端進行使用","对您当前的订阅进行续费":"對您的當前訂閲進行續費","对您当前的订阅进行购买":"重新購買您的當前訂閲","捷径":"捷徑","不会使用,查看使用教程":"不會使用,檢視使用檔案","使用支持扫码的客户端进行订阅":"使用支持掃碼的客戶端進行訂閲","扫描二维码订阅":"掃描二維碼訂閲","续费":"續費","购买":"購買","查看教程":"查看教程","注意":"注意","你还有未完成的订单,购买前需要先进行取消,确定取消先前的订单吗?":"您还有未完成的订单,购买前需要先取消,确定要取消之前的订单吗?","确定取消":"確定取消","返回我的订单":"返回我的訂單","如果你已经付款,取消订单可能会导致支付失败,确定取消订单吗?":"如果您已經付款,取消訂單可能會導致支付失敗,確定要取消訂單嗎?","选择最适合你的计划":"選擇最適合您的計劃","全部":"全部","按周期":"按週期","遇到问题":"遇到問題","遇到问题可以通过工单与我们沟通":"遇到問題您可以通過工單與我們溝通","按流量":"按流量","搜索文档":"搜尋文檔","技术支持":"技術支援","当前剩余佣金":"当前剩余佣金","三级分销比例":"三级分销比例","累计获得佣金":"累计获得佣金","您邀请的用户再次邀请用户将按照订单金额乘以分销等级的比例进行分成。":"您邀请的用户再次邀请用户将按照订单金额乘以分销等级的比例进行分成。","发放时间":"发放时间","{number} 人":"{number} 人","当你的订阅地址或账户发生泄漏被他人滥用时,可以在此重置订阅信息。避免带来不必要的损失。":"如果您的訂閱地址或帳戶洩漏並被他人濫用,您可以在此重置訂閱資訊,以避免不必要的損失。","再次输入密码":"請再次輸入密碼","返回登陆":"返回登入","选填":"選填","必填":"必填","最后回复时间":"最後回覆時間","请选项工单等级":"請選擇工單優先級","回复":"回覆","输入内容回复工单":"輸入內容回覆工單","已生成":"已生成","选择协议":"選擇協議","自动":"自動","流量重置包":"流量重置包","复制失败":"複製失敗","提示":"提示","确认退出?":"確認退出?","已退出登录":"已成功登出","请输入邮箱地址":"請輸入電子郵件地址","{second}秒后可重新发送":"{second} 秒後可重新發送","发送成功":"發送成功","请输入账号密码":"請輸入帳號和密碼","请确保两次密码输入一致":"請確保兩次密碼輸入一致","注册成功":"註冊成功","重置密码成功,正在返回登录":"重置密碼成功,正在返回登入","确认取消":"確認取消","请注意,变更订阅会导致当前订阅被覆盖。":"請注意,變更訂閱會導致目前的訂閱被覆蓋。","订单提交成功,正在跳转支付":"訂單提交成功,正在跳轉支付","回复成功":"回覆成功","工单详情":"工單詳情","登录成功":"登入成功","确定退出?":"確定退出?","支付成功":"支付成功","正在前往收银台":"正在前往收銀台","请输入正确的划转金额":"請輸入正確的劃轉金額","划转成功":"劃轉成功","提现方式不能为空":"提現方式不能為空","提现账号不能为空":"提現帳號不能為空","已绑定":"已綁定","创建成功":"創建成功","关闭成功":"關閉成功","或使用第三方登录":"或使用第三方登入","正在加载 Telegram 登录...":"正在載入 Telegram 登入...","Telegram 登录失败":"Telegram 登入失敗","下次流量重置时间":"下次流量重置時間:"}},Symbol.toStringTag,{value:"Module"}))}},function(){return t||(0,e[i(e)[0]])((t={exports:{}}).exports,t),t.exports});export default b(); diff --git a/frontend/theme/Nebula/config.json b/frontend/theme/Nebula/config.json new file mode 100644 index 0000000..10dfe22 --- /dev/null +++ b/frontend/theme/Nebula/config.json @@ -0,0 +1,99 @@ +{ + "name": "Nebula", + "description": "Nebula rebuilt user theme", + "version": "2.0.0", + "images": "", + "configs": [ + { + "label": "主题配色", + "placeholder": "选择主题主色方案", + "field_name": "theme_color", + "field_type": "select", + "select_options": { + "aurora": "极光蓝", + "sunset": "日落橙", + "ember": "余烬红", + "violet": "星云紫" + }, + "default_value": "aurora" + }, + { + "label": "左侧自定义文字", + "placeholder": "显示在登录页左侧主视觉下方的大标题文案", + "field_name": "hero_slogan", + "field_type": "input" + }, + { + "label": "登录欢迎目标文字", + "placeholder": "将显示为 WELCOME TO 下方的名称,例如 CloudYun", + "field_name": "welcome_target", + "field_type": "input" + }, + { + "label": "注册标题", + "placeholder": "注册面板顶部标题文案", + "field_name": "register_title", + "field_type": "input" + }, + { + "label": "登录页背景图地址", + "placeholder": "可选,填写外部背景图片链接", + "field_name": "background_url", + "field_type": "input" + }, + { + "label": "指标接口域名", + "placeholder": "例如:https://your-domain.com", + "field_name": "metrics_base_url", + "field_type": "input" + }, + { + "label": "默认主题模式", + "placeholder": "选择默认显示的主题模式", + "field_name": "default_theme_mode", + "field_type": "select", + "select_options": { + "system": "跟随系统", + "dark": "黑夜模式", + "light": "白日模式" + }, + "default_value": "system" + }, + { + "label": "白日模式 Logo", + "placeholder": "白日模式下显示的 Logo 地址", + "field_name": "light_logo_url", + "field_type": "input" + }, + { + "label": "黑夜模式 Logo", + "placeholder": "黑夜模式下显示的 Logo 地址", + "field_name": "dark_logo_url", + "field_type": "input" + }, + { + "label": "ICP备案号", + "placeholder": "例如:粤 ICP 备 12345678 号", + "field_name": "icp_no", + "field_type": "input" + }, + { + "label": "公安备案号", + "placeholder": "例如:粤公网安备 12345678901234 号", + "field_name": "psb_no", + "field_type": "input" + }, + { + "label": "自定义 HTML", + "placeholder": "可选,用于统计代码或自定义挂件", + "field_name": "custom_html", + "field_type": "textarea" + }, + { + "label": "静态资源 CDN 地址", + "placeholder": "例如:https://cdn.example.com/nebula (末尾不要带 /)", + "field_name": "static_cdn_url", + "field_type": "input" + } + ] +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..de4598a --- /dev/null +++ b/go.mod @@ -0,0 +1,49 @@ +module xboard-go + +go 1.26.2 + +require ( + filippo.io/edwards25519 v1.1.0 // indirect + github.com/bytedance/gopkg v0.1.3 // indirect + github.com/bytedance/sonic v1.15.0 // indirect + github.com/bytedance/sonic/loader v0.5.0 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/cloudwego/base64x v0.1.6 // indirect + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + github.com/gabriel-vasile/mimetype v1.4.12 // indirect + github.com/gin-contrib/sse v1.1.0 // indirect + github.com/gin-gonic/gin v1.12.0 // indirect + github.com/go-playground/locales v0.14.1 // indirect + github.com/go-playground/universal-translator v0.18.1 // indirect + github.com/go-playground/validator/v10 v10.30.1 // indirect + github.com/go-sql-driver/mysql v1.8.1 // indirect + github.com/goccy/go-json v0.10.5 // indirect + github.com/goccy/go-yaml v1.19.2 // indirect + github.com/golang-jwt/jwt/v5 v5.3.1 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/jinzhu/inflection v1.0.0 // indirect + github.com/jinzhu/now v1.1.5 // indirect + github.com/joho/godotenv v1.5.1 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/klauspost/cpuid/v2 v2.3.0 // indirect + github.com/leodido/go-urn v1.4.0 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/pelletier/go-toml/v2 v2.2.4 // indirect + github.com/quic-go/qpack v0.6.0 // indirect + github.com/quic-go/quic-go v0.59.0 // indirect + github.com/redis/go-redis/v9 v9.18.0 // indirect + github.com/twitchyliquid64/golang-asm v0.15.1 // indirect + github.com/ugorji/go/codec v1.3.1 // indirect + go.mongodb.org/mongo-driver/v2 v2.5.0 // indirect + go.uber.org/atomic v1.11.0 // indirect + golang.org/x/arch v0.22.0 // indirect + golang.org/x/crypto v0.50.0 // indirect + golang.org/x/net v0.52.0 // indirect + golang.org/x/sys v0.43.0 // indirect + golang.org/x/text v0.36.0 // indirect + google.golang.org/protobuf v1.36.10 // indirect + gorm.io/driver/mysql v1.6.0 // indirect + gorm.io/gorm v1.31.1 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..da21bf0 --- /dev/null +++ b/go.sum @@ -0,0 +1,112 @@ +filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= +filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +github.com/bytedance/gopkg v0.1.3 h1:TPBSwH8RsouGCBcMBktLt1AymVo2TVsBVCY4b6TnZ/M= +github.com/bytedance/gopkg v0.1.3/go.mod h1:576VvJ+eJgyCzdjS+c4+77QF3p7ubbtiKARP3TxducM= +github.com/bytedance/sonic v1.15.0 h1:/PXeWFaR5ElNcVE84U0dOHjiMHQOwNIx3K4ymzh/uSE= +github.com/bytedance/sonic v1.15.0/go.mod h1:tFkWrPz0/CUCLEF4ri4UkHekCIcdnkqXw9VduqpJh0k= +github.com/bytedance/sonic/loader v0.5.0 h1:gXH3KVnatgY7loH5/TkeVyXPfESoqSBSBEiDd5VjlgE= +github.com/bytedance/sonic/loader v0.5.0/go.mod h1:AR4NYCk5DdzZizZ5djGqQ92eEhCCcdf5x77udYiSJRo= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cloudwego/base64x v0.1.6 h1:t11wG9AECkCDk5fMSoxmufanudBtJ+/HemLstXDLI2M= +github.com/cloudwego/base64x v0.1.6/go.mod h1:OFcloc187FXDaYHvrNIjxSe8ncn0OOM8gEHfghB2IPU= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= +github.com/gabriel-vasile/mimetype v1.4.12 h1:e9hWvmLYvtp846tLHam2o++qitpguFiYCKbn0w9jyqw= +github.com/gabriel-vasile/mimetype v1.4.12/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= +github.com/gin-contrib/sse v1.1.0 h1:n0w2GMuUpWDVp7qSpvze6fAu9iRxJY4Hmj6AmBOU05w= +github.com/gin-contrib/sse v1.1.0/go.mod h1:hxRZ5gVpWMT7Z0B0gSNYqqsSCNIJMjzvm6fqCz9vjwM= +github.com/gin-gonic/gin v1.12.0 h1:b3YAbrZtnf8N//yjKeU2+MQsh2mY5htkZidOM7O0wG8= +github.com/gin-gonic/gin v1.12.0/go.mod h1:VxccKfsSllpKshkBWgVgRniFFAzFb9csfngsqANjnLc= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.30.1 h1:f3zDSN/zOma+w6+1Wswgd9fLkdwy06ntQJp0BBvFG0w= +github.com/go-playground/validator/v10 v10.30.1/go.mod h1:oSuBIQzuJxL//3MelwSLD5hc2Tu889bF0Idm9Dg26cM= +github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= +github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= +github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4= +github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= +github.com/goccy/go-yaml v1.19.2 h1:PmFC1S6h8ljIz6gMRBopkjP1TVT7xuwrButHID66PoM= +github.com/goccy/go-yaml v1.19.2/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= +github.com/golang-jwt/jwt/v5 v5.3.1 h1:kYf81DTWFe7t+1VvL7eS+jKFVWaUnK9cB1qbwn63YCY= +github.com/golang-jwt/jwt/v5 v5.3.1/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= +github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= +github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= +github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= +github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= +github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= +github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= +github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= +github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/quic-go/qpack v0.6.0 h1:g7W+BMYynC1LbYLSqRt8PBg5Tgwxn214ZZR34VIOjz8= +github.com/quic-go/qpack v0.6.0/go.mod h1:lUpLKChi8njB4ty2bFLX2x4gzDqXwUpaO1DP9qMDZII= +github.com/quic-go/quic-go v0.59.0 h1:OLJkp1Mlm/aS7dpKgTc6cnpynnD2Xg7C1pwL6vy/SAw= +github.com/quic-go/quic-go v0.59.0/go.mod h1:upnsH4Ju1YkqpLXC305eW3yDZ4NfnNbmQRCMWS58IKU= +github.com/redis/go-redis/v9 v9.18.0 h1:pMkxYPkEbMPwRdenAzUNyFNrDgHx9U+DrBabWNfSRQs= +github.com/redis/go-redis/v9 v9.18.0/go.mod h1:k3ufPphLU5YXwNTUcCRXGxUoF1fqxnhFQmscfkCoDA0= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= +github.com/ugorji/go/codec v1.3.1 h1:waO7eEiFDwidsBN6agj1vJQ4AG7lh2yqXyOXqhgQuyY= +github.com/ugorji/go/codec v1.3.1/go.mod h1:pRBVtBSKl77K30Bv8R2P+cLSGaTtex6fsA2Wjqmfxj4= +go.mongodb.org/mongo-driver/v2 v2.5.0 h1:yXUhImUjjAInNcpTcAlPHiT7bIXhshCTL3jVBkF3xaE= +go.mongodb.org/mongo-driver/v2 v2.5.0/go.mod h1:yOI9kBsufol30iFsl1slpdq1I0eHPzybRWdyYUs8K/0= +go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= +go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +golang.org/x/arch v0.22.0 h1:c/Zle32i5ttqRXjdLyyHZESLD/bB90DCU1g9l/0YBDI= +golang.org/x/arch v0.22.0/go.mod h1:dNHoOeKiyja7GTvF9NJS1l3Z2yntpQNzgrjh1cU103A= +golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts= +golang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVos= +golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI= +golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q= +golang.org/x/net v0.51.0 h1:94R/GTO7mt3/4wIKpcR5gkGmRLOuE/2hNGeWq/GBIFo= +golang.org/x/net v0.51.0/go.mod h1:aamm+2QF5ogm02fjy5Bb7CQ0WMt1/WVM7FtyaTLlA9Y= +golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0= +golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k= +golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= +golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= +golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA= +golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= +golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= +google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= +google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gorm.io/driver/mysql v1.6.0 h1:eNbLmNTpPpTOVZi8MMxCi2aaIm0ZpInbORNXDwyLGvg= +gorm.io/driver/mysql v1.6.0/go.mod h1:D/oCC2GWK3M/dqoLxnOlaNKmXz8WNTfcS9y5ovaSqKo= +gorm.io/gorm v1.31.1 h1:7CA8FTFz/gRfgqgpeKIBcervUn3xSyPUmr6B2WXJ7kg= +gorm.io/gorm v1.31.1/go.mod h1:XyQVbO2k6YkOis7C2437jSit3SsDK72s7n7rsSHd+Gs= diff --git a/internal/config/config.go b/internal/config/config.go new file mode 100644 index 0000000..b6c743b --- /dev/null +++ b/internal/config/config.go @@ -0,0 +1,71 @@ +package config + +import ( + "log" + "os" + "strconv" + + "github.com/joho/godotenv" +) + +type Config struct { + DBHost string + DBPort string + DBUser string + DBPass string + DBName string + RedisHost string + RedisPort string + RedisPass string + RedisDB int + JWTSecret string + AppPort string + AppURL string + PluginRoot string +} + +var AppConfig *Config + +func LoadConfig() { + err := godotenv.Load() + if err != nil { + log.Println("No .env file found, using environment variables") + } + + AppConfig = &Config{ + DBHost: getEnv("DB_HOST", "localhost"), + DBPort: getEnv("DB_PORT", "3306"), + DBUser: getEnv("DB_USER", "root"), + DBPass: getEnv("DB_PASS", ""), + DBName: getEnv("DB_NAME", "xboard"), + RedisHost: getEnv("REDIS_HOST", "localhost"), + RedisPort: getEnv("REDIS_PORT", "6379"), + RedisPass: getEnv("REDIS_PASS", ""), + RedisDB: getEnvInt("REDIS_DB", 0), + JWTSecret: getEnv("JWT_SECRET", "secret"), + AppPort: getEnv("APP_PORT", "8080"), + AppURL: getEnv("APP_URL", ""), + PluginRoot: getEnv("PLUGIN_ROOT", "reference\\LDNET-GA-Theme\\plugin"), + } +} + +func getEnv(key, defaultValue string) string { + if value, exists := os.LookupEnv(key); exists { + return value + } + return defaultValue +} + +func getEnvInt(key string, defaultValue int) int { + raw := getEnv(key, "") + if raw == "" { + return defaultValue + } + + value, err := strconv.Atoi(raw) + if err != nil { + return defaultValue + } + + return value +} diff --git a/internal/database/cache.go b/internal/database/cache.go new file mode 100644 index 0000000..7a03f89 --- /dev/null +++ b/internal/database/cache.go @@ -0,0 +1,139 @@ +package database + +import ( + "context" + "encoding/json" + "log" + "net" + "sync" + "time" + "xboard-go/internal/config" + + "github.com/redis/go-redis/v9" +) + +var Redis *redis.Client + +type memoryEntry struct { + Value []byte + ExpiresAt time.Time +} + +type memoryCache struct { + mu sync.RWMutex + items map[string]memoryEntry +} + +var fallbackCache = &memoryCache{ + items: make(map[string]memoryEntry), +} + +func InitCache() { + addr := net.JoinHostPort(config.AppConfig.RedisHost, config.AppConfig.RedisPort) + client := redis.NewClient(&redis.Options{ + Addr: addr, + Password: config.AppConfig.RedisPass, + DB: config.AppConfig.RedisDB, + }) + + ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) + defer cancel() + + if err := client.Ping(ctx).Err(); err != nil { + log.Printf("Redis/Valkey unavailable, falling back to in-memory cache: %v", err) + return + } + + Redis = client + log.Printf("Redis/Valkey connection established at %s", addr) +} + +func CacheSet(key string, value any, ttl time.Duration) error { + payload, err := json.Marshal(value) + if err != nil { + return err + } + + if Redis != nil { + if err := Redis.Set(context.Background(), key, payload, ttl).Err(); err == nil { + return nil + } + } + + fallbackCache.Set(key, payload, ttl) + return nil +} + +func CacheDelete(key string) error { + if Redis != nil { + if err := Redis.Del(context.Background(), key).Err(); err == nil { + fallbackCache.Delete(key) + return nil + } + } + + fallbackCache.Delete(key) + return nil +} + +func CacheGetJSON[T any](key string) (T, bool) { + var zero T + var payload []byte + + if Redis != nil { + value, err := Redis.Get(context.Background(), key).Bytes() + if err == nil { + payload = value + } + } + + if len(payload) == 0 { + value, ok := fallbackCache.Get(key) + if !ok { + return zero, false + } + payload = value + } + + var result T + if err := json.Unmarshal(payload, &result); err != nil { + return zero, false + } + + return result, true +} + +func (m *memoryCache) Set(key string, value []byte, ttl time.Duration) { + m.mu.Lock() + defer m.mu.Unlock() + + entry := memoryEntry{ + Value: value, + } + if ttl > 0 { + entry.ExpiresAt = time.Now().Add(ttl) + } + m.items[key] = entry +} + +func (m *memoryCache) Get(key string) ([]byte, bool) { + m.mu.RLock() + entry, ok := m.items[key] + m.mu.RUnlock() + if !ok { + return nil, false + } + + if !entry.ExpiresAt.IsZero() && time.Now().After(entry.ExpiresAt) { + m.Delete(key) + return nil, false + } + + return entry.Value, true +} + +func (m *memoryCache) Delete(key string) { + m.mu.Lock() + defer m.mu.Unlock() + delete(m.items, key) +} diff --git a/internal/database/db.go b/internal/database/db.go new file mode 100644 index 0000000..72d8f19 --- /dev/null +++ b/internal/database/db.go @@ -0,0 +1,34 @@ +package database + +import ( + "fmt" + "log" + "xboard-go/internal/config" + + "gorm.io/driver/mysql" + "gorm.io/gorm" + "gorm.io/gorm/logger" +) + +var DB *gorm.DB + +func InitDB() { + dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", + config.AppConfig.DBUser, + config.AppConfig.DBPass, + config.AppConfig.DBHost, + config.AppConfig.DBPort, + config.AppConfig.DBName, + ) + + var err error + DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{ + Logger: logger.Default.LogMode(logger.Info), + }) + + if err != nil { + log.Fatalf("Failed to connect to database: %v", err) + } + + log.Println("Database connection established") +} diff --git a/internal/handler/admin_handler.go b/internal/handler/admin_handler.go new file mode 100644 index 0000000..a375617 --- /dev/null +++ b/internal/handler/admin_handler.go @@ -0,0 +1,230 @@ +package handler + +import ( + "fmt" + "net/http" + "xboard-go/internal/database" + "xboard-go/internal/model" + + "github.com/gin-gonic/gin" +) + +func AdminPortal(c *gin.Context) { + // Load settings for the portal + var appNameSetting model.Setting + database.DB.Where("name = ?", "app_name").First(&appNameSetting) + appName := appNameSetting.Value + if appName == "" { + appName = "XBoard Admin" + } + + securePath := c.Param("path") + if securePath == "" { + securePath = "admin" // fallback + } + + html := fmt.Sprintf(` + + + + + + %s - 管理控制台 + + + + + + + + + +`, appName, appName, securePath) + + c.Header("Content-Type", "text/html; charset=utf-8") + c.String(http.StatusOK, html) +} diff --git a/internal/handler/admin_server_api.go b/internal/handler/admin_server_api.go new file mode 100644 index 0000000..bb6f098 --- /dev/null +++ b/internal/handler/admin_server_api.go @@ -0,0 +1,1015 @@ +package handler + +import ( + "encoding/json" + "errors" + "net/http" + "sort" + "strconv" + "strings" + "time" + "xboard-go/internal/database" + "xboard-go/internal/model" + "xboard-go/internal/service" + + "github.com/gin-gonic/gin" + "gorm.io/gorm" +) + +func AdminServerGroupsFetch(c *gin.Context) { + var groups []model.ServerGroup + if err := database.DB.Order("id DESC").Find(&groups).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to fetch server groups") + return + } + + var servers []model.Server + if err := database.DB.Find(&servers).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to fetch servers") + return + } + + type usageCount struct { + GroupID *int + Total int64 + } + var userCounts []usageCount + if err := database.DB.Model(&model.User{}). + Select("group_id, COUNT(*) AS total"). + Group("group_id"). + Scan(&userCounts).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to fetch group usage") + return + } + + userCountMap := make(map[int]int64, len(userCounts)) + for _, item := range userCounts { + if item.GroupID == nil { + continue + } + userCountMap[*item.GroupID] = item.Total + } + + serverCountMap := make(map[int]int) + for _, server := range servers { + for _, groupID := range decodeIntSlice(server.GroupIDs) { + serverCountMap[groupID] += 1 + } + } + + result := make([]gin.H, 0, len(groups)) + for _, group := range groups { + result = append(result, gin.H{ + "id": group.ID, + "name": group.Name, + "created_at": group.CreatedAt, + "updated_at": group.UpdatedAt, + "user_count": userCountMap[group.ID], + "server_count": serverCountMap[group.ID], + }) + } + + Success(c, result) +} + +func AdminServerGroupSave(c *gin.Context) { + var payload struct { + ID *int `json:"id"` + Name string `json:"name"` + } + if err := c.ShouldBindJSON(&payload); err != nil { + Fail(c, http.StatusBadRequest, "invalid request body") + return + } + + name := strings.TrimSpace(payload.Name) + if name == "" { + Fail(c, http.StatusUnprocessableEntity, "group name is required") + return + } + + now := time.Now().Unix() + if payload.ID != nil && *payload.ID > 0 { + if err := database.DB.Model(&model.ServerGroup{}). + Where("id = ?", *payload.ID). + Updates(map[string]any{ + "name": name, + "updated_at": now, + }).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to save server group") + return + } + Success(c, true) + return + } + + group := model.ServerGroup{ + Name: name, + CreatedAt: now, + UpdatedAt: now, + } + if err := database.DB.Create(&group).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to create server group") + return + } + + Success(c, true) +} + +func AdminServerGroupDrop(c *gin.Context) { + var payload struct { + ID int `json:"id"` + } + if err := c.ShouldBindJSON(&payload); err != nil || payload.ID <= 0 { + Fail(c, http.StatusBadRequest, "group id is required") + return + } + + var group model.ServerGroup + if err := database.DB.Where("id = ?", payload.ID).First(&group).Error; err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + Fail(c, http.StatusBadRequest, "server group does not exist") + return + } + Fail(c, http.StatusInternalServerError, "failed to load server group") + return + } + + var servers []model.Server + if err := database.DB.Find(&servers).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to inspect server usage") + return + } + for _, server := range servers { + if intSliceContains(decodeIntSlice(server.GroupIDs), payload.ID) { + Fail(c, http.StatusBadRequest, "server group is still used by nodes") + return + } + } + + var planUsage int64 + if err := database.DB.Model(&model.Plan{}).Where("group_id = ?", payload.ID).Count(&planUsage).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to inspect plan usage") + return + } + if planUsage > 0 { + Fail(c, http.StatusBadRequest, "server group is still used by plans") + return + } + + var userUsage int64 + if err := database.DB.Model(&model.User{}).Where("group_id = ?", payload.ID).Count(&userUsage).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to inspect user usage") + return + } + if userUsage > 0 { + Fail(c, http.StatusBadRequest, "server group is still used by users") + return + } + + if err := database.DB.Delete(&group).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to delete server group") + return + } + + Success(c, true) +} + +func AdminServerRoutesFetch(c *gin.Context) { + var routes []model.ServerRoute + if err := database.DB.Order("id DESC").Find(&routes).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to fetch server routes") + return + } + + result := make([]gin.H, 0, len(routes)) + for _, route := range routes { + result = append(result, gin.H{ + "id": route.ID, + "remarks": stringValue(route.Remarks), + "match": decodeStringSlice(route.Match), + "action": stringValue(route.Action), + "action_value": stringValue(route.ActionValue), + "created_at": route.CreatedAt, + "updated_at": route.UpdatedAt, + }) + } + + Success(c, result) +} + +func AdminServerRouteSave(c *gin.Context) { + var payload struct { + ID *int `json:"id"` + Remarks string `json:"remarks"` + Match []any `json:"match"` + Action string `json:"action"` + ActionValue any `json:"action_value"` + } + if err := c.ShouldBindJSON(&payload); err != nil { + Fail(c, http.StatusBadRequest, "invalid request body") + return + } + + remarks := strings.TrimSpace(payload.Remarks) + if remarks == "" { + Fail(c, http.StatusUnprocessableEntity, "remarks is required") + return + } + match := filterNonEmptyStrings(payload.Match) + if len(match) == 0 { + Fail(c, http.StatusUnprocessableEntity, "match is required") + return + } + action := strings.TrimSpace(payload.Action) + if !isAllowedRouteAction(action) { + Fail(c, http.StatusUnprocessableEntity, "invalid route action") + return + } + + matchJSON, err := marshalJSON(match, false) + if err != nil { + Fail(c, http.StatusBadRequest, "invalid route match") + return + } + + now := time.Now().Unix() + values := map[string]any{ + "remarks": remarks, + "match": matchJSON, + "action": action, + "action_value": nullableString(payload.ActionValue), + "updated_at": now, + } + + if payload.ID != nil && *payload.ID > 0 { + if err := database.DB.Model(&model.ServerRoute{}).Where("id = ?", *payload.ID).Updates(values).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to save server route") + return + } + Success(c, true) + return + } + + values["created_at"] = now + if err := database.DB.Model(&model.ServerRoute{}).Create(values).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to create server route") + return + } + + Success(c, true) +} + +func AdminServerRouteDrop(c *gin.Context) { + var payload struct { + ID int `json:"id"` + } + if err := c.ShouldBindJSON(&payload); err != nil || payload.ID <= 0 { + Fail(c, http.StatusBadRequest, "route id is required") + return + } + + result := database.DB.Where("id = ?", payload.ID).Delete(&model.ServerRoute{}) + if result.Error != nil { + Fail(c, http.StatusInternalServerError, "failed to delete server route") + return + } + if result.RowsAffected == 0 { + Fail(c, http.StatusBadRequest, "server route does not exist") + return + } + + Success(c, true) +} + +func AdminServerManageGetNodes(c *gin.Context) { + var servers []model.Server + if err := database.DB.Order("sort ASC, id ASC").Find(&servers).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to fetch nodes") + return + } + + var groups []model.ServerGroup + if err := database.DB.Find(&groups).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to fetch node groups") + return + } + groupMap := make(map[int]model.ServerGroup, len(groups)) + for _, group := range groups { + groupMap[group.ID] = group + } + + serverMap := make(map[int]model.Server, len(servers)) + for _, server := range servers { + serverMap[server.ID] = server + } + + result := make([]gin.H, 0, len(servers)) + for _, server := range servers { + result = append(result, serializeAdminServer(server, groupMap, serverMap)) + } + + Success(c, result) +} + +func AdminServerManageSort(c *gin.Context) { + var payload []struct { + ID int `json:"id"` + Order int `json:"order"` + } + if err := c.ShouldBindJSON(&payload); err != nil { + Fail(c, http.StatusBadRequest, "invalid request body") + return + } + + if err := database.DB.Transaction(func(tx *gorm.DB) error { + for _, item := range payload { + if item.ID <= 0 { + continue + } + if err := tx.Model(&model.Server{}).Where("id = ?", item.ID).Update("sort", item.Order).Error; err != nil { + return err + } + } + return nil + }); err != nil { + Fail(c, http.StatusInternalServerError, "failed to sort nodes") + return + } + + Success(c, true) +} + +func AdminServerManageSave(c *gin.Context) { + payload := map[string]any{} + if err := c.ShouldBindJSON(&payload); err != nil { + Fail(c, http.StatusBadRequest, "invalid request body") + return + } + + values, id, err := normalizeServerPayload(payload) + if err != nil { + Fail(c, http.StatusBadRequest, err.Error()) + return + } + + if id > 0 { + result := database.DB.Model(&model.Server{}).Where("id = ?", id).Updates(values) + if result.Error != nil { + Fail(c, http.StatusInternalServerError, "failed to save node") + return + } + if result.RowsAffected == 0 { + Fail(c, http.StatusBadRequest, "node does not exist") + return + } + Success(c, true) + return + } + + if err := database.DB.Model(&model.Server{}).Create(values).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to create node") + return + } + + Success(c, true) +} + +func AdminServerManageUpdate(c *gin.Context) { + var payload struct { + ID int `json:"id"` + Show *int `json:"show"` + } + if err := c.ShouldBindJSON(&payload); err != nil || payload.ID <= 0 { + Fail(c, http.StatusBadRequest, "invalid request body") + return + } + + updates := map[string]any{} + if payload.Show != nil { + updates["show"] = *payload.Show != 0 + } + if len(updates) == 0 { + Fail(c, http.StatusBadRequest, "no updates were provided") + return + } + + result := database.DB.Model(&model.Server{}).Where("id = ?", payload.ID).Updates(updates) + if result.Error != nil { + Fail(c, http.StatusInternalServerError, "failed to update node") + return + } + if result.RowsAffected == 0 { + Fail(c, http.StatusBadRequest, "node does not exist") + return + } + + Success(c, true) +} + +func AdminServerManageDrop(c *gin.Context) { + var payload struct { + ID int `json:"id"` + } + if err := c.ShouldBindJSON(&payload); err != nil || payload.ID <= 0 { + Fail(c, http.StatusBadRequest, "node id is required") + return + } + + result := database.DB.Where("id = ?", payload.ID).Delete(&model.Server{}) + if result.Error != nil { + Fail(c, http.StatusInternalServerError, "failed to delete node") + return + } + if result.RowsAffected == 0 { + Fail(c, http.StatusBadRequest, "node does not exist") + return + } + + Success(c, true) +} + +func AdminServerManageCopy(c *gin.Context) { + var payload struct { + ID int `json:"id"` + } + if err := c.ShouldBindJSON(&payload); err != nil || payload.ID <= 0 { + Fail(c, http.StatusBadRequest, "node id is required") + return + } + + var server model.Server + if err := database.DB.Where("id = ?", payload.ID).First(&server).Error; err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + Fail(c, http.StatusBadRequest, "node does not exist") + return + } + Fail(c, http.StatusInternalServerError, "failed to load node") + return + } + + now := time.Now() + server.ID = 0 + server.Code = nil + server.Show = false + server.U = 0 + server.D = 0 + server.CreatedAt = &now + server.UpdatedAt = &now + + if err := database.DB.Create(&server).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to copy node") + return + } + + Success(c, true) +} + +func AdminServerManageBatchDelete(c *gin.Context) { + var payload struct { + IDs []int `json:"ids"` + } + if err := c.ShouldBindJSON(&payload); err != nil { + Fail(c, http.StatusBadRequest, "invalid request body") + return + } + + ids := sanitizePositiveIDs(payload.IDs) + if len(ids) == 0 { + Fail(c, http.StatusBadRequest, "ids is required") + return + } + + if err := database.DB.Where("id IN ?", ids).Delete(&model.Server{}).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to batch delete nodes") + return + } + + Success(c, true) +} + +func AdminServerManageResetTraffic(c *gin.Context) { + var payload struct { + ID int `json:"id"` + } + if err := c.ShouldBindJSON(&payload); err != nil || payload.ID <= 0 { + Fail(c, http.StatusBadRequest, "node id is required") + return + } + + result := database.DB.Model(&model.Server{}).Where("id = ?", payload.ID).Updates(map[string]any{ + "u": 0, + "d": 0, + }) + if result.Error != nil { + Fail(c, http.StatusInternalServerError, "failed to reset node traffic") + return + } + if result.RowsAffected == 0 { + Fail(c, http.StatusBadRequest, "node does not exist") + return + } + + Success(c, true) +} + +func AdminServerManageBatchResetTraffic(c *gin.Context) { + var payload struct { + IDs []int `json:"ids"` + } + if err := c.ShouldBindJSON(&payload); err != nil { + Fail(c, http.StatusBadRequest, "invalid request body") + return + } + + ids := sanitizePositiveIDs(payload.IDs) + if len(ids) == 0 { + Fail(c, http.StatusBadRequest, "ids is required") + return + } + + if err := database.DB.Model(&model.Server{}).Where("id IN ?", ids).Updates(map[string]any{ + "u": 0, + "d": 0, + }).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to batch reset node traffic") + return + } + + Success(c, true) +} + +func serializeAdminServer(server model.Server, groups map[int]model.ServerGroup, servers map[int]model.Server) gin.H { + groupIDs := decodeIntSlice(server.GroupIDs) + groupList := make([]gin.H, 0, len(groupIDs)) + for _, groupID := range groupIDs { + group, ok := groups[groupID] + if !ok { + continue + } + groupList = append(groupList, gin.H{ + "id": group.ID, + "name": group.Name, + }) + } + + var parent any + if server.ParentID != nil { + if parentServer, ok := servers[*server.ParentID]; ok { + parent = gin.H{ + "id": parentServer.ID, + "type": parentServer.Type, + "name": parentServer.Name, + "host": parentServer.Host, + "port": parentServer.Port, + "server_port": parentServer.ServerPort, + } + } + } + + lastCheckAt, _ := database.CacheGetJSON[int64](nodeLastCheckKey(&server)) + lastPushAt, _ := database.CacheGetJSON[int64](nodeLastPushKey(&server)) + online, _ := database.CacheGetJSON[int](nodeOnlineKey(&server)) + loadStatus, _ := database.CacheGetJSON[map[string]any](nodeLoadStatusKey(&server)) + metrics, _ := database.CacheGetJSON[map[string]any](nodeMetricsKey(&server)) + + isOnline := 0 + now := time.Now().Unix() + if lastCheckAt > 0 && now-lastCheckAt <= 300 { + isOnline = 1 + } + if lastPushAt > 0 && now-lastPushAt <= 300 { + isOnline = 2 + } + + availableStatus := "offline" + if isOnline == 1 { + availableStatus = "online_no_push" + } else if isOnline == 2 { + availableStatus = "online" + } + + return gin.H{ + "id": server.ID, + "type": server.Type, + "code": stringValue(server.Code), + "parent_id": intValue(server.ParentID), + "group_ids": groupIDs, + "route_ids": decodeIntSlice(server.RouteIDs), + "name": server.Name, + "rate": server.Rate, + "transfer_enable": int64Value(server.TransferEnable), + "u": server.U, + "d": server.D, + "tags": decodeStringSlice(server.Tags), + "host": server.Host, + "port": server.Port, + "server_port": server.ServerPort, + "protocol_settings": decodeJSON(server.ProtocolSettings), + "custom_outbounds": decodeJSON(server.CustomOutbounds), + "custom_routes": decodeJSON(server.CustomRoutes), + "cert_config": decodeJSON(server.CertConfig), + "show": server.Show, + "sort": intValue(server.Sort), + "rate_time_enable": server.RateTimeEnable, + "rate_time_ranges": decodeJSON(server.RateTimeRanges), + "created_at": unixTimeValue(server.CreatedAt), + "updated_at": unixTimeValue(server.UpdatedAt), + "groups": groupList, + "parent": parent, + "last_check_at": lastCheckAt, + "last_push_at": lastPushAt, + "online": online, + "is_online": isOnline, + "available_status": availableStatus, + "load_status": loadStatus, + "metrics": metrics, + } +} + +func normalizeServerPayload(payload map[string]any) (map[string]any, int, error) { + id := intFromAny(payload["id"]) + serverType := service.NormalizeServerType(stringFromAny(payload["type"])) + if serverType == "" { + return nil, 0, errors.New("node type is required") + } + if !service.IsValidServerType(serverType) { + return nil, 0, errors.New("invalid node type") + } + + name := strings.TrimSpace(stringFromAny(payload["name"])) + if name == "" { + return nil, 0, errors.New("node name is required") + } + host := strings.TrimSpace(stringFromAny(payload["host"])) + if host == "" { + return nil, 0, errors.New("node host is required") + } + + port := strings.TrimSpace(stringFromAny(payload["port"])) + if port == "" { + return nil, 0, errors.New("node port is required") + } + + serverPort := intFromAny(payload["server_port"]) + if serverPort <= 0 { + return nil, 0, errors.New("server_port is required") + } + + rate, ok := float32FromAny(payload["rate"]) + if !ok { + return nil, 0, errors.New("rate is required") + } + + groupIDs, err := marshalJSON(payload["group_ids"], true) + if err != nil { + return nil, 0, errors.New("invalid group_ids") + } + routeIDs, err := marshalJSON(payload["route_ids"], true) + if err != nil { + return nil, 0, errors.New("invalid route_ids") + } + tags, err := marshalJSON(payload["tags"], true) + if err != nil { + return nil, 0, errors.New("invalid tags") + } + protocolSettings, err := marshalJSON(payload["protocol_settings"], false) + if err != nil { + return nil, 0, errors.New("invalid protocol_settings") + } + rateTimeRanges, err := marshalJSON(payload["rate_time_ranges"], false) + if err != nil { + return nil, 0, errors.New("invalid rate_time_ranges") + } + customOutbounds, err := marshalJSON(payload["custom_outbounds"], false) + if err != nil { + return nil, 0, errors.New("invalid custom_outbounds") + } + customRoutes, err := marshalJSON(payload["custom_routes"], false) + if err != nil { + return nil, 0, errors.New("invalid custom_routes") + } + certConfig, err := marshalJSON(payload["cert_config"], false) + if err != nil { + return nil, 0, errors.New("invalid cert_config") + } + + values := map[string]any{ + "type": serverType, + "code": nullableString(payload["code"]), + "parent_id": nullableInt(payload["parent_id"]), + "group_ids": groupIDs, + "route_ids": routeIDs, + "name": name, + "rate": rate, + "transfer_enable": nullableInt64(payload["transfer_enable"]), + "tags": tags, + "host": host, + "port": port, + "server_port": serverPort, + "protocol_settings": protocolSettings, + "custom_outbounds": customOutbounds, + "custom_routes": customRoutes, + "cert_config": certConfig, + "show": boolFromAny(payload["show"]), + "sort": nullableInt(payload["sort"]), + "rate_time_enable": boolFromAny(payload["rate_time_enable"]), + "rate_time_ranges": rateTimeRanges, + } + + return values, id, nil +} + +func decodeJSON(raw *string) any { + if raw == nil || strings.TrimSpace(*raw) == "" { + return nil + } + + var value any + if err := json.Unmarshal([]byte(*raw), &value); err != nil { + return *raw + } + return value +} + +func decodeIntSlice(raw *string) []int { + if raw == nil || strings.TrimSpace(*raw) == "" { + return []int{} + } + + var value []any + if err := json.Unmarshal([]byte(*raw), &value); err == nil { + result := make([]int, 0, len(value)) + for _, item := range value { + if parsed := intFromAny(item); parsed > 0 { + result = append(result, parsed) + } + } + return result + } + + parts := strings.Split(*raw, ",") + result := make([]int, 0, len(parts)) + for _, part := range parts { + if parsed, err := strconv.Atoi(strings.TrimSpace(part)); err == nil && parsed > 0 { + result = append(result, parsed) + } + } + return result +} + +func decodeStringSlice(raw *string) []string { + if raw == nil || strings.TrimSpace(*raw) == "" { + return []string{} + } + + var value []any + if err := json.Unmarshal([]byte(*raw), &value); err == nil { + return filterNonEmptyStrings(value) + } + + return filterNonEmptyStrings(strings.Split(*raw, ",")) +} + +func marshalJSON(value any, fallbackEmptyArray bool) (*string, error) { + if value == nil { + if fallbackEmptyArray { + empty := "[]" + return &empty, nil + } + return nil, nil + } + + if text, ok := value.(string); ok { + text = strings.TrimSpace(text) + if text == "" { + if fallbackEmptyArray { + empty := "[]" + return &empty, nil + } + return nil, nil + } + if json.Valid([]byte(text)) { + return &text, nil + } + } + + payload, err := json.Marshal(value) + if err != nil { + return nil, err + } + text := string(payload) + return &text, nil +} + +func stringFromAny(value any) string { + switch typed := value.(type) { + case string: + return typed + case json.Number: + return typed.String() + case float64: + return strconv.FormatFloat(typed, 'f', -1, 64) + case float32: + return strconv.FormatFloat(float64(typed), 'f', -1, 32) + case int: + return strconv.Itoa(typed) + case int64: + return strconv.FormatInt(typed, 10) + case bool: + if typed { + return "true" + } + return "false" + default: + return "" + } +} + +func nullableString(value any) any { + text := strings.TrimSpace(stringFromAny(value)) + if text == "" { + return nil + } + return text +} + +func intFromAny(value any) int { + switch typed := value.(type) { + case int: + return typed + case int8: + return int(typed) + case int16: + return int(typed) + case int32: + return int(typed) + case int64: + return int(typed) + case float32: + return int(typed) + case float64: + return int(typed) + case json.Number: + parsed, _ := typed.Int64() + return int(parsed) + case string: + parsed, _ := strconv.Atoi(strings.TrimSpace(typed)) + return parsed + default: + return 0 + } +} + +func float32FromAny(value any) (float32, bool) { + switch typed := value.(type) { + case float32: + return typed, true + case float64: + return float32(typed), true + case int: + return float32(typed), true + case int64: + return float32(typed), true + case json.Number: + parsed, err := typed.Float64() + return float32(parsed), err == nil + case string: + parsed, err := strconv.ParseFloat(strings.TrimSpace(typed), 32) + return float32(parsed), err == nil + default: + return 0, false + } +} + +func nullableInt(value any) any { + parsed := intFromAny(value) + if parsed <= 0 { + return nil + } + return parsed +} + +func nullableInt64(value any) any { + switch typed := value.(type) { + case int64: + if typed > 0 { + return typed + } + case int: + if typed > 0 { + return int64(typed) + } + case float64: + if typed > 0 { + return int64(typed) + } + case string: + if parsed, err := strconv.ParseInt(strings.TrimSpace(typed), 10, 64); err == nil && parsed > 0 { + return parsed + } + } + return nil +} + +func boolFromAny(value any) bool { + switch typed := value.(type) { + case bool: + return typed + case int: + return typed != 0 + case int64: + return typed != 0 + case float64: + return typed != 0 + case string: + text := strings.TrimSpace(strings.ToLower(typed)) + return text == "1" || text == "true" || text == "yes" || text == "on" + default: + return false + } +} + +func stringValue(value *string) string { + if value == nil { + return "" + } + return *value +} + +func intValue(value *int) any { + if value == nil { + return nil + } + return *value +} + +func int64Value(value *int64) any { + if value == nil { + return nil + } + return *value +} + +func filterNonEmptyStrings(values any) []string { + result := make([]string, 0) + switch typed := values.(type) { + case []string: + for _, item := range typed { + item = strings.TrimSpace(item) + if item != "" { + result = append(result, item) + } + } + case []any: + for _, item := range typed { + text := strings.TrimSpace(stringFromAny(item)) + if text != "" { + result = append(result, text) + } + } + } + return result +} + +func sanitizePositiveIDs(ids []int) []int { + unique := make(map[int]struct{}, len(ids)) + result := make([]int, 0, len(ids)) + for _, id := range ids { + if id <= 0 { + continue + } + if _, exists := unique[id]; exists { + continue + } + unique[id] = struct{}{} + result = append(result, id) + } + sort.Ints(result) + return result +} + +func intSliceContains(values []int, target int) bool { + for _, value := range values { + if value == target { + return true + } + } + return false +} + +func isAllowedRouteAction(action string) bool { + switch action { + case "block", "direct", "dns", "proxy": + return true + default: + return false + } +} + +func unixTimeValue(value *time.Time) any { + if value == nil { + return nil + } + return value.Unix() +} diff --git a/internal/handler/admin_server_api.go.8129289363901765875 b/internal/handler/admin_server_api.go.8129289363901765875 new file mode 100644 index 0000000..b82c213 --- /dev/null +++ b/internal/handler/admin_server_api.go.8129289363901765875 @@ -0,0 +1,1009 @@ +package handler + +import ( + "encoding/json" + "errors" + "net/http" + "sort" + "strconv" + "strings" + "time" + "xboard-go/internal/database" + "xboard-go/internal/model" + "xboard-go/internal/service" + + "github.com/gin-gonic/gin" + "gorm.io/gorm" +) + +func AdminServerGroupsFetch(c *gin.Context) { + var groups []model.ServerGroup + if err := database.DB.Order("id DESC").Find(&groups).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to fetch server groups") + return + } + + var servers []model.Server + if err := database.DB.Find(&servers).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to fetch servers") + return + } + + type usageCount struct { + GroupID *int + Total int64 + } + var userCounts []usageCount + if err := database.DB.Model(&model.User{}). + Select("group_id, COUNT(*) AS total"). + Group("group_id"). + Scan(&userCounts).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to fetch group usage") + return + } + + userCountMap := make(map[int]int64, len(userCounts)) + for _, item := range userCounts { + if item.GroupID == nil { + continue + } + userCountMap[*item.GroupID] = item.Total + } + + serverCountMap := make(map[int]int) + for _, server := range servers { + for _, groupID := range decodeIntSlice(server.GroupIDs) { + serverCountMap[groupID] += 1 + } + } + + result := make([]gin.H, 0, len(groups)) + for _, group := range groups { + result = append(result, gin.H{ + "id": group.ID, + "name": group.Name, + "created_at": group.CreatedAt, + "updated_at": group.UpdatedAt, + "user_count": userCountMap[group.ID], + "server_count": serverCountMap[group.ID], + }) + } + + Success(c, result) +} + +func AdminServerGroupSave(c *gin.Context) { + var payload struct { + ID *int `json:"id"` + Name string `json:"name"` + } + if err := c.ShouldBindJSON(&payload); err != nil { + Fail(c, http.StatusBadRequest, "invalid request body") + return + } + + name := strings.TrimSpace(payload.Name) + if name == "" { + Fail(c, http.StatusUnprocessableEntity, "group name is required") + return + } + + now := time.Now().Unix() + if payload.ID != nil && *payload.ID > 0 { + if err := database.DB.Model(&model.ServerGroup{}). + Where("id = ?", *payload.ID). + Updates(map[string]any{ + "name": name, + "updated_at": now, + }).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to save server group") + return + } + Success(c, true) + return + } + + group := model.ServerGroup{ + Name: name, + CreatedAt: now, + UpdatedAt: now, + } + if err := database.DB.Create(&group).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to create server group") + return + } + + Success(c, true) +} + +func AdminServerGroupDrop(c *gin.Context) { + var payload struct { + ID int `json:"id"` + } + if err := c.ShouldBindJSON(&payload); err != nil || payload.ID <= 0 { + Fail(c, http.StatusBadRequest, "group id is required") + return + } + + var group model.ServerGroup + if err := database.DB.Where("id = ?", payload.ID).First(&group).Error; err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + Fail(c, http.StatusBadRequest, "server group does not exist") + return + } + Fail(c, http.StatusInternalServerError, "failed to load server group") + return + } + + var servers []model.Server + if err := database.DB.Find(&servers).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to inspect server usage") + return + } + for _, server := range servers { + if intSliceContains(decodeIntSlice(server.GroupIDs), payload.ID) { + Fail(c, http.StatusBadRequest, "server group is still used by nodes") + return + } + } + + var planUsage int64 + if err := database.DB.Model(&model.Plan{}).Where("group_id = ?", payload.ID).Count(&planUsage).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to inspect plan usage") + return + } + if planUsage > 0 { + Fail(c, http.StatusBadRequest, "server group is still used by plans") + return + } + + var userUsage int64 + if err := database.DB.Model(&model.User{}).Where("group_id = ?", payload.ID).Count(&userUsage).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to inspect user usage") + return + } + if userUsage > 0 { + Fail(c, http.StatusBadRequest, "server group is still used by users") + return + } + + if err := database.DB.Delete(&group).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to delete server group") + return + } + + Success(c, true) +} + +func AdminServerRoutesFetch(c *gin.Context) { + var routes []model.ServerRoute + if err := database.DB.Order("id DESC").Find(&routes).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to fetch server routes") + return + } + + result := make([]gin.H, 0, len(routes)) + for _, route := range routes { + result = append(result, gin.H{ + "id": route.ID, + "remarks": stringValue(route.Remarks), + "match": decodeStringSlice(route.Match), + "action": stringValue(route.Action), + "action_value": stringValue(route.ActionValue), + "created_at": route.CreatedAt, + "updated_at": route.UpdatedAt, + }) + } + + Success(c, result) +} + +func AdminServerRouteSave(c *gin.Context) { + var payload struct { + ID *int `json:"id"` + Remarks string `json:"remarks"` + Match []any `json:"match"` + Action string `json:"action"` + ActionValue any `json:"action_value"` + } + if err := c.ShouldBindJSON(&payload); err != nil { + Fail(c, http.StatusBadRequest, "invalid request body") + return + } + + remarks := strings.TrimSpace(payload.Remarks) + if remarks == "" { + Fail(c, http.StatusUnprocessableEntity, "remarks is required") + return + } + match := filterNonEmptyStrings(payload.Match) + if len(match) == 0 { + Fail(c, http.StatusUnprocessableEntity, "match is required") + return + } + action := strings.TrimSpace(payload.Action) + if !isAllowedRouteAction(action) { + Fail(c, http.StatusUnprocessableEntity, "invalid route action") + return + } + + matchJSON, err := marshalJSON(match, false) + if err != nil { + Fail(c, http.StatusBadRequest, "invalid route match") + return + } + + now := time.Now().Unix() + values := map[string]any{ + "remarks": remarks, + "match": matchJSON, + "action": action, + "action_value": nullableString(payload.ActionValue), + "updated_at": now, + } + + if payload.ID != nil && *payload.ID > 0 { + if err := database.DB.Model(&model.ServerRoute{}).Where("id = ?", *payload.ID).Updates(values).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to save server route") + return + } + Success(c, true) + return + } + + values["created_at"] = now + if err := database.DB.Model(&model.ServerRoute{}).Create(values).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to create server route") + return + } + + Success(c, true) +} + +func AdminServerRouteDrop(c *gin.Context) { + var payload struct { + ID int `json:"id"` + } + if err := c.ShouldBindJSON(&payload); err != nil || payload.ID <= 0 { + Fail(c, http.StatusBadRequest, "route id is required") + return + } + + result := database.DB.Where("id = ?", payload.ID).Delete(&model.ServerRoute{}) + if result.Error != nil { + Fail(c, http.StatusInternalServerError, "failed to delete server route") + return + } + if result.RowsAffected == 0 { + Fail(c, http.StatusBadRequest, "server route does not exist") + return + } + + Success(c, true) +} + +func AdminServerManageGetNodes(c *gin.Context) { + var servers []model.Server + if err := database.DB.Order("sort ASC, id ASC").Find(&servers).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to fetch nodes") + return + } + + var groups []model.ServerGroup + if err := database.DB.Find(&groups).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to fetch node groups") + return + } + groupMap := make(map[int]model.ServerGroup, len(groups)) + for _, group := range groups { + groupMap[group.ID] = group + } + + serverMap := make(map[int]model.Server, len(servers)) + for _, server := range servers { + serverMap[server.ID] = server + } + + result := make([]gin.H, 0, len(servers)) + for _, server := range servers { + result = append(result, serializeAdminServer(server, groupMap, serverMap)) + } + + Success(c, result) +} + +func AdminServerManageSort(c *gin.Context) { + var payload []struct { + ID int `json:"id"` + Order int `json:"order"` + } + if err := c.ShouldBindJSON(&payload); err != nil { + Fail(c, http.StatusBadRequest, "invalid request body") + return + } + + if err := database.DB.Transaction(func(tx *gorm.DB) error { + for _, item := range payload { + if item.ID <= 0 { + continue + } + if err := tx.Model(&model.Server{}).Where("id = ?", item.ID).Update("sort", item.Order).Error; err != nil { + return err + } + } + return nil + }); err != nil { + Fail(c, http.StatusInternalServerError, "failed to sort nodes") + return + } + + Success(c, true) +} + +func AdminServerManageSave(c *gin.Context) { + payload := map[string]any{} + if err := c.ShouldBindJSON(&payload); err != nil { + Fail(c, http.StatusBadRequest, "invalid request body") + return + } + + values, id, err := normalizeServerPayload(payload) + if err != nil { + Fail(c, http.StatusBadRequest, err.Error()) + return + } + + if id > 0 { + result := database.DB.Model(&model.Server{}).Where("id = ?", id).Updates(values) + if result.Error != nil { + Fail(c, http.StatusInternalServerError, "failed to save node") + return + } + if result.RowsAffected == 0 { + Fail(c, http.StatusBadRequest, "node does not exist") + return + } + Success(c, true) + return + } + + if err := database.DB.Model(&model.Server{}).Create(values).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to create node") + return + } + + Success(c, true) +} + +func AdminServerManageUpdate(c *gin.Context) { + var payload struct { + ID int `json:"id"` + Show *int `json:"show"` + } + if err := c.ShouldBindJSON(&payload); err != nil || payload.ID <= 0 { + Fail(c, http.StatusBadRequest, "invalid request body") + return + } + + updates := map[string]any{} + if payload.Show != nil { + updates["show"] = *payload.Show != 0 + } + if len(updates) == 0 { + Fail(c, http.StatusBadRequest, "no updates were provided") + return + } + + result := database.DB.Model(&model.Server{}).Where("id = ?", payload.ID).Updates(updates) + if result.Error != nil { + Fail(c, http.StatusInternalServerError, "failed to update node") + return + } + if result.RowsAffected == 0 { + Fail(c, http.StatusBadRequest, "node does not exist") + return + } + + Success(c, true) +} + +func AdminServerManageDrop(c *gin.Context) { + var payload struct { + ID int `json:"id"` + } + if err := c.ShouldBindJSON(&payload); err != nil || payload.ID <= 0 { + Fail(c, http.StatusBadRequest, "node id is required") + return + } + + result := database.DB.Where("id = ?", payload.ID).Delete(&model.Server{}) + if result.Error != nil { + Fail(c, http.StatusInternalServerError, "failed to delete node") + return + } + if result.RowsAffected == 0 { + Fail(c, http.StatusBadRequest, "node does not exist") + return + } + + Success(c, true) +} + +func AdminServerManageCopy(c *gin.Context) { + var payload struct { + ID int `json:"id"` + } + if err := c.ShouldBindJSON(&payload); err != nil || payload.ID <= 0 { + Fail(c, http.StatusBadRequest, "node id is required") + return + } + + var server model.Server + if err := database.DB.Where("id = ?", payload.ID).First(&server).Error; err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + Fail(c, http.StatusBadRequest, "node does not exist") + return + } + Fail(c, http.StatusInternalServerError, "failed to load node") + return + } + + now := time.Now() + server.ID = 0 + server.Code = nil + server.Show = false + server.U = 0 + server.D = 0 + server.CreatedAt = &now + server.UpdatedAt = &now + + if err := database.DB.Create(&server).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to copy node") + return + } + + Success(c, true) +} + +func AdminServerManageBatchDelete(c *gin.Context) { + var payload struct { + IDs []int `json:"ids"` + } + if err := c.ShouldBindJSON(&payload); err != nil { + Fail(c, http.StatusBadRequest, "invalid request body") + return + } + + ids := sanitizePositiveIDs(payload.IDs) + if len(ids) == 0 { + Fail(c, http.StatusBadRequest, "ids is required") + return + } + + if err := database.DB.Where("id IN ?", ids).Delete(&model.Server{}).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to batch delete nodes") + return + } + + Success(c, true) +} + +func AdminServerManageResetTraffic(c *gin.Context) { + var payload struct { + ID int `json:"id"` + } + if err := c.ShouldBindJSON(&payload); err != nil || payload.ID <= 0 { + Fail(c, http.StatusBadRequest, "node id is required") + return + } + + result := database.DB.Model(&model.Server{}).Where("id = ?", payload.ID).Updates(map[string]any{ + "u": 0, + "d": 0, + }) + if result.Error != nil { + Fail(c, http.StatusInternalServerError, "failed to reset node traffic") + return + } + if result.RowsAffected == 0 { + Fail(c, http.StatusBadRequest, "node does not exist") + return + } + + Success(c, true) +} + +func AdminServerManageBatchResetTraffic(c *gin.Context) { + var payload struct { + IDs []int `json:"ids"` + } + if err := c.ShouldBindJSON(&payload); err != nil { + Fail(c, http.StatusBadRequest, "invalid request body") + return + } + + ids := sanitizePositiveIDs(payload.IDs) + if len(ids) == 0 { + Fail(c, http.StatusBadRequest, "ids is required") + return + } + + if err := database.DB.Model(&model.Server{}).Where("id IN ?", ids).Updates(map[string]any{ + "u": 0, + "d": 0, + }).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to batch reset node traffic") + return + } + + Success(c, true) +} + +func serializeAdminServer(server model.Server, groups map[int]model.ServerGroup, servers map[int]model.Server) gin.H { + groupIDs := decodeIntSlice(server.GroupIDs) + groupList := make([]gin.H, 0, len(groupIDs)) + for _, groupID := range groupIDs { + group, ok := groups[groupID] + if !ok { + continue + } + groupList = append(groupList, gin.H{ + "id": group.ID, + "name": group.Name, + }) + } + + var parent any + if server.ParentID != nil { + if parentServer, ok := servers[*server.ParentID]; ok { + parent = gin.H{ + "id": parentServer.ID, + "type": parentServer.Type, + "name": parentServer.Name, + "host": parentServer.Host, + "port": parentServer.Port, + "server_port": parentServer.ServerPort, + } + } + } + + lastCheckAt, _ := database.CacheGetJSON[int64](nodeLastCheckKey(&server)) + lastPushAt, _ := database.CacheGetJSON[int64](nodeLastPushKey(&server)) + online, _ := database.CacheGetJSON[int](nodeOnlineKey(&server)) + loadStatus, _ := database.CacheGetJSON[map[string]any](nodeLoadStatusKey(&server)) + metrics, _ := database.CacheGetJSON[map[string]any](nodeMetricsKey(&server)) + + isOnline := 0 + now := time.Now().Unix() + if lastCheckAt > 0 && now-lastCheckAt <= 300 { + isOnline = 1 + } + if lastPushAt > 0 && now-lastPushAt <= 300 { + isOnline = 2 + } + + availableStatus := "offline" + if isOnline == 1 { + availableStatus = "online_no_push" + } else if isOnline == 2 { + availableStatus = "online" + } + + return gin.H{ + "id": server.ID, + "type": server.Type, + "code": stringValue(server.Code), + "parent_id": intValue(server.ParentID), + "group_ids": groupIDs, + "route_ids": decodeIntSlice(server.RouteIDs), + "name": server.Name, + "rate": server.Rate, + "transfer_enable": int64Value(server.TransferEnable), + "u": server.U, + "d": server.D, + "tags": decodeStringSlice(server.Tags), + "host": server.Host, + "port": server.Port, + "server_port": server.ServerPort, + "protocol_settings": decodeJSON(server.ProtocolSettings), + "custom_outbounds": decodeJSON(server.CustomOutbounds), + "custom_routes": decodeJSON(server.CustomRoutes), + "cert_config": decodeJSON(server.CertConfig), + "show": server.Show, + "sort": intValue(server.Sort), + "rate_time_enable": server.RateTimeEnable, + "rate_time_ranges": decodeJSON(server.RateTimeRanges), + "created_at": formatTimeValue(server.CreatedAt), + "updated_at": formatTimeValue(server.UpdatedAt), + "groups": groupList, + "parent": parent, + "last_check_at": lastCheckAt, + "last_push_at": lastPushAt, + "online": online, + "is_online": isOnline, + "available_status": availableStatus, + "load_status": loadStatus, + "metrics": metrics, + } +} + +func normalizeServerPayload(payload map[string]any) (map[string]any, int, error) { + id := intFromAny(payload["id"]) + serverType := service.NormalizeServerType(stringFromAny(payload["type"])) + if serverType == "" { + return nil, 0, errors.New("node type is required") + } + if !service.IsValidServerType(serverType) { + return nil, 0, errors.New("invalid node type") + } + + name := strings.TrimSpace(stringFromAny(payload["name"])) + if name == "" { + return nil, 0, errors.New("node name is required") + } + host := strings.TrimSpace(stringFromAny(payload["host"])) + if host == "" { + return nil, 0, errors.New("node host is required") + } + + port := strings.TrimSpace(stringFromAny(payload["port"])) + if port == "" { + return nil, 0, errors.New("node port is required") + } + + serverPort := intFromAny(payload["server_port"]) + if serverPort <= 0 { + return nil, 0, errors.New("server_port is required") + } + + rate, ok := float32FromAny(payload["rate"]) + if !ok { + return nil, 0, errors.New("rate is required") + } + + groupIDs, err := marshalJSON(payload["group_ids"], true) + if err != nil { + return nil, 0, errors.New("invalid group_ids") + } + routeIDs, err := marshalJSON(payload["route_ids"], true) + if err != nil { + return nil, 0, errors.New("invalid route_ids") + } + tags, err := marshalJSON(payload["tags"], true) + if err != nil { + return nil, 0, errors.New("invalid tags") + } + protocolSettings, err := marshalJSON(payload["protocol_settings"], false) + if err != nil { + return nil, 0, errors.New("invalid protocol_settings") + } + rateTimeRanges, err := marshalJSON(payload["rate_time_ranges"], false) + if err != nil { + return nil, 0, errors.New("invalid rate_time_ranges") + } + customOutbounds, err := marshalJSON(payload["custom_outbounds"], false) + if err != nil { + return nil, 0, errors.New("invalid custom_outbounds") + } + customRoutes, err := marshalJSON(payload["custom_routes"], false) + if err != nil { + return nil, 0, errors.New("invalid custom_routes") + } + certConfig, err := marshalJSON(payload["cert_config"], false) + if err != nil { + return nil, 0, errors.New("invalid cert_config") + } + + values := map[string]any{ + "type": serverType, + "code": nullableString(payload["code"]), + "parent_id": nullableInt(payload["parent_id"]), + "group_ids": groupIDs, + "route_ids": routeIDs, + "name": name, + "rate": rate, + "transfer_enable": nullableInt64(payload["transfer_enable"]), + "tags": tags, + "host": host, + "port": port, + "server_port": serverPort, + "protocol_settings": protocolSettings, + "custom_outbounds": customOutbounds, + "custom_routes": customRoutes, + "cert_config": certConfig, + "show": boolFromAny(payload["show"]), + "sort": nullableInt(payload["sort"]), + "rate_time_enable": boolFromAny(payload["rate_time_enable"]), + "rate_time_ranges": rateTimeRanges, + } + + return values, id, nil +} + +func decodeJSON(raw *string) any { + if raw == nil || strings.TrimSpace(*raw) == "" { + return nil + } + + var value any + if err := json.Unmarshal([]byte(*raw), &value); err != nil { + return *raw + } + return value +} + +func decodeIntSlice(raw *string) []int { + if raw == nil || strings.TrimSpace(*raw) == "" { + return []int{} + } + + var value []any + if err := json.Unmarshal([]byte(*raw), &value); err == nil { + result := make([]int, 0, len(value)) + for _, item := range value { + if parsed := intFromAny(item); parsed > 0 { + result = append(result, parsed) + } + } + return result + } + + parts := strings.Split(*raw, ",") + result := make([]int, 0, len(parts)) + for _, part := range parts { + if parsed, err := strconv.Atoi(strings.TrimSpace(part)); err == nil && parsed > 0 { + result = append(result, parsed) + } + } + return result +} + +func decodeStringSlice(raw *string) []string { + if raw == nil || strings.TrimSpace(*raw) == "" { + return []string{} + } + + var value []any + if err := json.Unmarshal([]byte(*raw), &value); err == nil { + return filterNonEmptyStrings(value) + } + + return filterNonEmptyStrings(strings.Split(*raw, ",")) +} + +func marshalJSON(value any, fallbackEmptyArray bool) (*string, error) { + if value == nil { + if fallbackEmptyArray { + empty := "[]" + return &empty, nil + } + return nil, nil + } + + if text, ok := value.(string); ok { + text = strings.TrimSpace(text) + if text == "" { + if fallbackEmptyArray { + empty := "[]" + return &empty, nil + } + return nil, nil + } + if json.Valid([]byte(text)) { + return &text, nil + } + } + + payload, err := json.Marshal(value) + if err != nil { + return nil, err + } + text := string(payload) + return &text, nil +} + +func stringFromAny(value any) string { + switch typed := value.(type) { + case string: + return typed + case json.Number: + return typed.String() + case float64: + return strconv.FormatFloat(typed, 'f', -1, 64) + case float32: + return strconv.FormatFloat(float64(typed), 'f', -1, 32) + case int: + return strconv.Itoa(typed) + case int64: + return strconv.FormatInt(typed, 10) + case bool: + if typed { + return "true" + } + return "false" + default: + return "" + } +} + +func nullableString(value any) any { + text := strings.TrimSpace(stringFromAny(value)) + if text == "" { + return nil + } + return text +} + +func intFromAny(value any) int { + switch typed := value.(type) { + case int: + return typed + case int8: + return int(typed) + case int16: + return int(typed) + case int32: + return int(typed) + case int64: + return int(typed) + case float32: + return int(typed) + case float64: + return int(typed) + case json.Number: + parsed, _ := typed.Int64() + return int(parsed) + case string: + parsed, _ := strconv.Atoi(strings.TrimSpace(typed)) + return parsed + default: + return 0 + } +} + +func float32FromAny(value any) (float32, bool) { + switch typed := value.(type) { + case float32: + return typed, true + case float64: + return float32(typed), true + case int: + return float32(typed), true + case int64: + return float32(typed), true + case json.Number: + parsed, err := typed.Float64() + return float32(parsed), err == nil + case string: + parsed, err := strconv.ParseFloat(strings.TrimSpace(typed), 32) + return float32(parsed), err == nil + default: + return 0, false + } +} + +func nullableInt(value any) any { + parsed := intFromAny(value) + if parsed <= 0 { + return nil + } + return parsed +} + +func nullableInt64(value any) any { + switch typed := value.(type) { + case int64: + if typed > 0 { + return typed + } + case int: + if typed > 0 { + return int64(typed) + } + case float64: + if typed > 0 { + return int64(typed) + } + case string: + if parsed, err := strconv.ParseInt(strings.TrimSpace(typed), 10, 64); err == nil && parsed > 0 { + return parsed + } + } + return nil +} + +func boolFromAny(value any) bool { + switch typed := value.(type) { + case bool: + return typed + case int: + return typed != 0 + case int64: + return typed != 0 + case float64: + return typed != 0 + case string: + text := strings.TrimSpace(strings.ToLower(typed)) + return text == "1" || text == "true" || text == "yes" || text == "on" + default: + return false + } +} + +func stringValue(value *string) string { + if value == nil { + return "" + } + return *value +} + +func intValue(value *int) any { + if value == nil { + return nil + } + return *value +} + +func int64Value(value *int64) any { + if value == nil { + return nil + } + return *value +} + +func filterNonEmptyStrings(values any) []string { + result := make([]string, 0) + switch typed := values.(type) { + case []string: + for _, item := range typed { + item = strings.TrimSpace(item) + if item != "" { + result = append(result, item) + } + } + case []any: + for _, item := range typed { + text := strings.TrimSpace(stringFromAny(item)) + if text != "" { + result = append(result, text) + } + } + } + sort.Strings(result) + return result +} + +func sanitizePositiveIDs(ids []int) []int { + unique := make(map[int]struct{}, len(ids)) + result := make([]int, 0, len(ids)) + for _, id := range ids { + if id <= 0 { + continue + } + if _, exists := unique[id]; exists { + continue + } + unique[id] = struct{}{} + result = append(result, id) + } + sort.Ints(result) + return result +} + +func intSliceContains(values []int, target int) bool { + for _, value := range values { + if value == target { + return true + } + } + return false +} + +func isAllowedRouteAction(action string) bool { + switch action { + case "block", "direct", "dns", "proxy": + return true + default: + return false + } +} diff --git a/internal/handler/auth_api.go b/internal/handler/auth_api.go new file mode 100644 index 0000000..4badb73 --- /dev/null +++ b/internal/handler/auth_api.go @@ -0,0 +1,230 @@ +package handler + +import ( + "crypto/md5" + "crypto/rand" + "encoding/hex" + "fmt" + "net/http" + "strings" + "time" + "xboard-go/internal/database" + "xboard-go/internal/model" + "xboard-go/internal/service" + "xboard-go/pkg/utils" + + "github.com/gin-gonic/gin" + "github.com/google/uuid" +) + +type LoginRequest struct { + Email string `json:"email" binding:"required,email"` + Password string `json:"password" binding:"required"` +} + +type RegisterRequest struct { + Email string `json:"email" binding:"required,email"` + Password string `json:"password" binding:"required,min=8"` + InviteCode *string `json:"invite_code"` +} + +func Login(c *gin.Context) { + var req LoginRequest + if err := c.ShouldBindJSON(&req); err != nil { + Fail(c, http.StatusBadRequest, "invalid request body") + return + } + + var user model.User + if err := database.DB.Where("email = ?", req.Email).First(&user).Error; err != nil { + Fail(c, http.StatusUnauthorized, "email or password is incorrect") + return + } + + if !utils.CheckPassword(req.Password, user.Password, user.PasswordAlgo, user.PasswordSalt) { + Fail(c, http.StatusUnauthorized, "email or password is incorrect") + return + } + + token, err := utils.GenerateToken(user.ID, user.IsAdmin) + if err != nil { + Fail(c, http.StatusInternalServerError, "failed to create auth token") + return + } + + now := time.Now().Unix() + _ = database.DB.Model(&model.User{}).Where("id = ?", user.ID).Update("last_login_at", now).Error + service.TrackSession(user.ID, token, c.ClientIP(), c.GetHeader("User-Agent")) + + Success(c, gin.H{ + "token": token, + "auth_data": token, + "is_admin": user.IsAdmin, + }) +} + +func Register(c *gin.Context) { + var req RegisterRequest + if err := c.ShouldBindJSON(&req); err != nil { + Fail(c, http.StatusBadRequest, "invalid request body") + return + } + + var count int64 + database.DB.Model(&model.User{}).Where("email = ?", req.Email).Count(&count) + if count > 0 { + Fail(c, http.StatusBadRequest, "email already exists") + return + } + + hashedPassword, err := utils.HashPassword(req.Password) + if err != nil { + Fail(c, http.StatusInternalServerError, "failed to hash password") + return + } + + now := time.Now().Unix() + tokenRaw := fmt.Sprintf("%x", md5.Sum([]byte(time.Now().String()+req.Email))) + user := model.User{ + Email: req.Email, + Password: hashedPassword, + UUID: uuid.New().String(), + Token: tokenRaw[:16], + CreatedAt: now, + UpdatedAt: now, + } + + if err := database.DB.Create(&user).Error; err != nil { + Fail(c, http.StatusInternalServerError, "register failed") + return + } + + if service.IsPluginEnabled(service.PluginUserAddIPv6) && user.PlanID != nil { + service.SyncIPv6ShadowAccount(&user) + } + + token, err := utils.GenerateToken(user.ID, user.IsAdmin) + if err != nil { + Fail(c, http.StatusInternalServerError, "failed to create auth token") + return + } + service.TrackSession(user.ID, token, c.ClientIP(), c.GetHeader("User-Agent")) + + Success(c, gin.H{ + "token": token, + "auth_data": token, + "is_admin": user.IsAdmin, + }) +} + +func Token2Login(c *gin.Context) { + verify := strings.TrimSpace(c.Query("verify")) + if verify == "" { + Fail(c, http.StatusBadRequest, "verify token is required") + return + } + + userID, ok := service.ResolveQuickLoginToken(verify) + if !ok { + Fail(c, http.StatusUnauthorized, "verify token is invalid or expired") + return + } + + var user model.User + if err := database.DB.First(&user, userID).Error; err != nil { + Fail(c, http.StatusNotFound, "user not found") + return + } + + token, err := utils.GenerateToken(user.ID, user.IsAdmin) + if err != nil { + Fail(c, http.StatusInternalServerError, "failed to create auth token") + return + } + service.TrackSession(user.ID, token, c.ClientIP(), c.GetHeader("User-Agent")) + _ = database.DB.Model(&model.User{}).Where("id = ?", user.ID).Update("last_login_at", time.Now().Unix()).Error + + Success(c, gin.H{ + "token": token, + "auth_data": token, + "is_admin": user.IsAdmin, + }) +} + +func SendEmailVerify(c *gin.Context) { + var req struct { + Email string `json:"email" binding:"required,email"` + } + if err := c.ShouldBindJSON(&req); err != nil { + Fail(c, http.StatusBadRequest, "invalid email") + return + } + + code, err := randomDigits(6) + if err != nil { + Fail(c, http.StatusInternalServerError, "failed to generate verify code") + return + } + + service.StoreEmailVerifyCode(strings.ToLower(strings.TrimSpace(req.Email)), code, 10*time.Minute) + SuccessMessage(c, "email verify code generated", gin.H{ + "email": req.Email, + "debug_code": code, + "expires_in": 600, + }) +} + +func ForgetPassword(c *gin.Context) { + var req struct { + Email string `json:"email" binding:"required,email"` + EmailCode string `json:"email_code" binding:"required"` + Password string `json:"password" binding:"required,min=8"` + } + if err := c.ShouldBindJSON(&req); err != nil { + Fail(c, http.StatusBadRequest, "invalid request body") + return + } + + email := strings.ToLower(strings.TrimSpace(req.Email)) + if !service.CheckEmailVerifyCode(email, strings.TrimSpace(req.EmailCode)) { + Fail(c, http.StatusBadRequest, "email verify code is invalid") + return + } + + hashed, err := utils.HashPassword(req.Password) + if err != nil { + Fail(c, http.StatusInternalServerError, "failed to hash password") + return + } + + updates := map[string]any{ + "password": hashed, + "password_algo": nil, + "password_salt": nil, + "updated_at": time.Now().Unix(), + } + if err := database.DB.Model(&model.User{}).Where("email = ?", email).Updates(updates).Error; err != nil { + Fail(c, http.StatusInternalServerError, "password reset failed") + return + } + + SuccessMessage(c, "password reset success", true) +} + +func randomDigits(length int) (string, error) { + if length <= 0 { + return "", nil + } + + buf := make([]byte, length) + if _, err := rand.Read(buf); err != nil { + return "", err + } + + encoded := hex.EncodeToString(buf) + digits := make([]byte, 0, length) + for i := 0; i < len(encoded) && len(digits) < length; i++ { + digits = append(digits, '0'+(encoded[i]%10)) + } + return string(digits), nil +} diff --git a/internal/handler/auth_handler.go b/internal/handler/auth_handler.go new file mode 100644 index 0000000..7dd2da5 --- /dev/null +++ b/internal/handler/auth_handler.go @@ -0,0 +1,102 @@ +//go:build ignore + +package handler + +import ( + "crypto/md5" + "fmt" + "net/http" + "time" + "xboard-go/internal/database" + "xboard-go/internal/model" + "xboard-go/pkg/utils" + + "github.com/gin-gonic/gin" + "github.com/google/uuid" +) + +type LoginRequest struct { + Email string `json:"email" binding:"required,email"` + Password string `json:"password" binding:"required"` +} + +type RegisterRequest struct { + Email string `json:"email" binding:"required,email"` + Password string `json:"password" binding:"required,min=8"` + InviteCode *string `json:"invite_code"` +} + +func Login(c *gin.Context) { + var req LoginRequest + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"message": "参数错误"}) + return + } + + var user model.User + if err := database.DB.Where("email = ?", req.Email).First(&user).Error; err != nil { + c.JSON(http.StatusUnauthorized, gin.H{"message": "邮箱或密码错误"}) + return + } + + if !utils.CheckPassword(req.Password, user.Password) { + c.JSON(http.StatusUnauthorized, gin.H{"message": "邮箱或密码错误"}) + return + } + + token, err := utils.GenerateToken(user.ID, user.IsAdmin) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"message": "生成Token失败"}) + return + } + + c.JSON(http.StatusOK, gin.H{ + "token": token, + "is_admin": user.IsAdmin, + }) +} + +func Register(c *gin.Context) { + var req RegisterRequest + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"message": "参数错误"}) + return + } + + // Check if email already exists + var count int64 + database.DB.Model(&model.User{}).Where("email = ?", req.Email).Count(&count) + if count > 0 { + c.JSON(http.StatusBadRequest, gin.H{"message": "该邮箱已被注册"}) + return + } + + hashedPassword, err := utils.HashPassword(req.Password) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"message": "系统错误"}) + return + } + + newUUID := uuid.New().String() + // Generate a 16-character random token for compatibility + tokenRaw := fmt.Sprintf("%x", md5.Sum([]byte(time.Now().String()+req.Email))) + token := tokenRaw[:16] + + user := model.User{ + Email: req.Email, + Password: hashedPassword, + UUID: newUUID, + Token: token, + CreatedAt: time.Now().Unix(), + UpdatedAt: time.Now().Unix(), + } + + if err := database.DB.Create(&user).Error; err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"message": "注册失败"}) + return + } + + c.JSON(http.StatusOK, gin.H{ + "message": "注册成功", + }) +} diff --git a/internal/handler/client_api.go b/internal/handler/client_api.go new file mode 100644 index 0000000..1268a96 --- /dev/null +++ b/internal/handler/client_api.go @@ -0,0 +1,144 @@ +package handler + +import ( + "encoding/base64" + "net/http" + "strconv" + "strings" + "xboard-go/internal/model" + "xboard-go/internal/protocol" + "xboard-go/internal/service" + + "github.com/gin-gonic/gin" +) + +func ClientSubscribe(c *gin.Context) { + user, ok := currentUser(c) + if !ok { + Fail(c, http.StatusForbidden, "invalid token") + return + } + + servers, err := service.AvailableServersForUser(user) + if err != nil { + Fail(c, 500, "failed to fetch servers") + return + } + + ua := c.GetHeader("User-Agent") + flag := c.Query("flag") + if strings.Contains(ua, "Clash") || flag == "clash" { + config, _ := protocol.GenerateClash(servers, *user) + c.Header("Content-Type", "application/octet-stream") + c.String(http.StatusOK, config) + return + } + + if strings.Contains(strings.ToLower(ua), "sing-box") || flag == "sing-box" { + config, _ := protocol.GenerateSingBox(servers, *user) + c.Header("Content-Type", "application/json; charset=utf-8") + c.String(http.StatusOK, config) + return + } + + links := make([]string, 0, len(servers)) + for _, server := range servers { + links = append(links, "vmess://"+server.Name) + } + + c.Header("Content-Type", "text/plain; charset=utf-8") + c.Header("Subscription-Userinfo", subscriptionUserInfo(*user)) + c.String(http.StatusOK, base64.StdEncoding.EncodeToString([]byte(strings.Join(links, "\n")))) +} + +func ClientAppConfigV1(c *gin.Context) { + user, ok := currentUser(c) + if !ok { + Fail(c, http.StatusForbidden, "invalid token") + return + } + + servers, err := service.AvailableServersForUser(user) + if err != nil { + Fail(c, 500, "failed to fetch servers") + return + } + + config, _ := protocol.GenerateClash(servers, *user) + c.Header("Content-Type", "text/yaml; charset=utf-8") + c.String(http.StatusOK, config) +} + +func ClientAppConfigV2(c *gin.Context) { + config := gin.H{ + "app_info": gin.H{ + "app_name": service.MustGetString("app_name", "XBoard"), + "app_description": service.MustGetString("app_description", ""), + "app_url": service.GetAppURL(), + "logo": service.MustGetString("logo", ""), + "version": service.MustGetString("app_version", "1.0.0"), + }, + "features": gin.H{ + "enable_register": service.MustGetBool("app_enable_register", true), + "enable_invite_system": service.MustGetBool("app_enable_invite_system", true), + "enable_telegram_bot": service.MustGetBool("telegram_bot_enable", false), + "enable_ticket_system": service.MustGetBool("app_enable_ticket_system", true), + "enable_commission_system": service.MustGetBool("app_enable_commission_system", true), + "enable_traffic_log": service.MustGetBool("app_enable_traffic_log", true), + "enable_knowledge_base": service.MustGetBool("app_enable_knowledge_base", true), + "enable_announcements": service.MustGetBool("app_enable_announcements", true), + }, + "security_config": gin.H{ + "tos_url": service.MustGetString("tos_url", ""), + "privacy_policy_url": service.MustGetString("app_privacy_policy_url", ""), + "is_email_verify": service.MustGetInt("email_verify", 0), + "is_invite_force": service.MustGetInt("invite_force", 0), + "email_whitelist_suffix": service.MustGetString("email_whitelist_suffix", ""), + "is_captcha": service.MustGetInt("captcha_enable", 0), + "captcha_type": service.MustGetString("captcha_type", "recaptcha"), + "recaptcha_site_key": service.MustGetString("recaptcha_site_key", ""), + "turnstile_site_key": service.MustGetString("turnstile_site_key", ""), + }, + } + + Success(c, config) +} + +func ClientAppVersion(c *gin.Context) { + ua := strings.ToLower(c.GetHeader("User-Agent")) + if strings.Contains(ua, "tidalab/4.0.0") || strings.Contains(ua, "tunnelab/4.0.0") { + if strings.Contains(ua, "win64") { + Success(c, gin.H{ + "version": service.MustGetString("windows_version", ""), + "download_url": service.MustGetString("windows_download_url", ""), + }) + return + } + + Success(c, gin.H{ + "version": service.MustGetString("macos_version", ""), + "download_url": service.MustGetString("macos_download_url", ""), + }) + return + } + + Success(c, gin.H{ + "windows_version": service.MustGetString("windows_version", ""), + "windows_download_url": service.MustGetString("windows_download_url", ""), + "macos_version": service.MustGetString("macos_version", ""), + "macos_download_url": service.MustGetString("macos_download_url", ""), + "android_version": service.MustGetString("android_version", ""), + "android_download_url": service.MustGetString("android_download_url", ""), + }) +} + +func subscriptionUserInfo(user model.User) string { + expire := int64(0) + if user.ExpiredAt != nil { + expire = *user.ExpiredAt + } + return "upload=" + strconv.FormatInt(int64(user.U), 10) + + "; download=" + strconv.FormatInt(int64(user.D), 10) + + "; total=" + strconv.FormatInt(int64(user.TransferEnable), 10) + + "; expire=" + strconv.FormatInt(expire, 10) +} diff --git a/internal/handler/common.go b/internal/handler/common.go new file mode 100644 index 0000000..6cdf30e --- /dev/null +++ b/internal/handler/common.go @@ -0,0 +1,31 @@ +package handler + +import ( + "net/http" + + "github.com/gin-gonic/gin" +) + +func Success(c *gin.Context, data any) { + c.JSON(http.StatusOK, gin.H{"data": data}) +} + +func SuccessMessage(c *gin.Context, message string, data any) { + c.JSON(http.StatusOK, gin.H{ + "message": message, + "data": data, + }) +} + +func Fail(c *gin.Context, status int, message string) { + c.JSON(status, gin.H{"message": message}) +} + +func NotImplemented(endpoint string) gin.HandlerFunc { + return func(c *gin.Context) { + c.JSON(http.StatusNotImplemented, gin.H{ + "message": "not implemented yet", + "endpoint": endpoint, + }) + } +} diff --git a/internal/handler/guest_api.go b/internal/handler/guest_api.go new file mode 100644 index 0000000..a5dae02 --- /dev/null +++ b/internal/handler/guest_api.go @@ -0,0 +1,55 @@ +package handler + +import ( + "xboard-go/internal/database" + "xboard-go/internal/model" + "xboard-go/internal/service" + + "github.com/gin-gonic/gin" +) + +func GuestConfig(c *gin.Context) { + Success(c, buildGuestConfig()) +} + +func buildGuestConfig() gin.H { + data := gin.H{ + "tos_url": service.MustGetString("tos_url", ""), + "is_email_verify": boolToInt(service.MustGetBool("email_verify", false)), + "is_invite_force": boolToInt(service.MustGetBool("invite_force", false)), + "email_whitelist_suffix": service.MustGetString("email_whitelist_suffix", ""), + "is_captcha": boolToInt(service.MustGetBool("captcha_enable", false)), + "captcha_type": service.MustGetString("captcha_type", "recaptcha"), + "recaptcha_site_key": service.MustGetString("recaptcha_site_key", ""), + "recaptcha_v3_site_key": service.MustGetString("recaptcha_v3_site_key", ""), + "recaptcha_v3_score_threshold": service.MustGetString("recaptcha_v3_score_threshold", "0.5"), + "turnstile_site_key": service.MustGetString("turnstile_site_key", ""), + "app_description": service.MustGetString("app_description", ""), + "app_url": service.GetAppURL(), + "logo": service.MustGetString("logo", ""), + "is_recaptcha": boolToInt(service.MustGetBool("captcha_enable", false)), + } + + if service.IsPluginEnabled(service.PluginRealNameVerification) { + data["real_name_verification_enable"] = true + data["real_name_verification_notice"] = service.GetPluginConfigString(service.PluginRealNameVerification, "verification_notice", "Please complete real-name verification.") + } + + return data +} + +func GuestPlanFetch(c *gin.Context) { + var plans []model.Plan + if err := database.DB.Where("`show` = ? AND sell = ?", 1, 1).Order("sort ASC").Find(&plans).Error; err != nil { + Fail(c, 500, "failed to fetch plans") + return + } + Success(c, plans) +} + +func boolToInt(value bool) int { + if value { + return 1 + } + return 0 +} diff --git a/internal/handler/node_api.go b/internal/handler/node_api.go new file mode 100644 index 0000000..f4fcb1d --- /dev/null +++ b/internal/handler/node_api.go @@ -0,0 +1,410 @@ +package handler + +import ( + "encoding/json" + "fmt" + "net/http" + "strconv" + "strings" + "time" + "xboard-go/internal/database" + "xboard-go/internal/model" + "xboard-go/internal/service" + + "github.com/gin-gonic/gin" +) + +func NodeUser(c *gin.Context) { + node := c.MustGet("node").(*model.Server) + setNodeLastCheck(node) + + users, err := service.AvailableUsersForNode(node) + if err != nil { + Fail(c, 500, "failed to fetch users") + return + } + + Success(c, gin.H{"users": users}) +} + +func NodeShadowsocksTidalabUser(c *gin.Context) { + node := c.MustGet("node").(*model.Server) + if node.Type != "shadowsocks" { + Fail(c, http.StatusBadRequest, "server is not a shadowsocks node") + return + } + setNodeLastCheck(node) + + users, err := service.AvailableUsersForNode(node) + if err != nil { + Fail(c, http.StatusInternalServerError, "failed to fetch users") + return + } + + cipher := tidalabProtocolString(node.ProtocolSettings, "cipher") + result := make([]gin.H, 0, len(users)) + for _, user := range users { + result = append(result, gin.H{ + "id": user.ID, + "port": node.ServerPort, + "cipher": cipher, + "secret": user.UUID, + }) + } + + c.JSON(http.StatusOK, gin.H{"data": result}) +} + +func NodeTrojanTidalabUser(c *gin.Context) { + node := c.MustGet("node").(*model.Server) + if node.Type != "trojan" { + Fail(c, http.StatusBadRequest, "server is not a trojan node") + return + } + setNodeLastCheck(node) + + users, err := service.AvailableUsersForNode(node) + if err != nil { + Fail(c, http.StatusInternalServerError, "failed to fetch users") + return + } + + result := make([]gin.H, 0, len(users)) + for _, user := range users { + item := gin.H{ + "id": user.ID, + "trojan_user": gin.H{"password": user.UUID}, + } + if user.SpeedLimit != nil { + item["speed_limit"] = *user.SpeedLimit + } + if user.DeviceLimit != nil { + item["device_limit"] = *user.DeviceLimit + } + result = append(result, item) + } + + c.JSON(http.StatusOK, gin.H{ + "msg": "ok", + "data": result, + }) +} + +func NodeConfig(c *gin.Context) { + node := c.MustGet("node").(*model.Server) + setNodeLastCheck(node) + + config := service.BuildNodeConfig(node) + config["base_config"] = gin.H{ + "push_interval": service.MustGetInt("server_push_interval", 60), + "pull_interval": service.MustGetInt("server_pull_interval", 60), + } + + c.JSON(http.StatusOK, config) +} + +func NodeTrojanTidalabConfig(c *gin.Context) { + node := c.MustGet("node").(*model.Server) + if node.Type != "trojan" { + Fail(c, http.StatusBadRequest, "server is not a trojan node") + return + } + setNodeLastCheck(node) + + localPort, err := strconv.Atoi(strings.TrimSpace(c.Query("local_port"))) + if err != nil || localPort <= 0 { + Fail(c, http.StatusBadRequest, "local_port is required") + return + } + + serverName := tidalabProtocolString(node.ProtocolSettings, "server_name") + if serverName == "" { + serverName = strings.TrimSpace(node.Host) + } + if serverName == "" { + serverName = "domain.com" + } + + c.JSON(http.StatusOK, gin.H{ + "run_type": "server", + "local_addr": "0.0.0.0", + "local_port": node.ServerPort, + "remote_addr": "www.taobao.com", + "remote_port": 80, + "password": []string{}, + "ssl": gin.H{ + "cert": "server.crt", + "key": "server.key", + "sni": serverName, + }, + "api": gin.H{ + "enabled": true, + "api_addr": "127.0.0.1", + "api_port": localPort, + }, + }) +} + +func NodePush(c *gin.Context) { + node := c.MustGet("node").(*model.Server) + + var payload map[string][]int64 + if err := c.ShouldBindJSON(&payload); err != nil { + Fail(c, 400, "invalid payload") + return + } + + for userIDRaw, traffic := range payload { + if len(traffic) != 2 { + continue + } + userID, err := strconv.Atoi(userIDRaw) + if err != nil { + continue + } + service.ApplyTrafficDelta(userID, node, traffic[0], traffic[1]) + } + + setNodeLastPush(node, len(payload)) + Success(c, true) +} + +func NodeTidalabSubmit(c *gin.Context) { + node := c.MustGet("node").(*model.Server) + if node.Type != "shadowsocks" && node.Type != "trojan" { + Fail(c, http.StatusBadRequest, "server type is not supported by tidalab submit") + return + } + + var payload []struct { + UserID int `json:"user_id"` + U int64 `json:"u"` + D int64 `json:"d"` + } + if err := c.ShouldBindJSON(&payload); err != nil { + Fail(c, http.StatusBadRequest, "invalid payload") + return + } + + for _, item := range payload { + if item.UserID <= 0 { + continue + } + service.ApplyTrafficDelta(item.UserID, node, item.U, item.D) + } + + setNodeLastPush(node, len(payload)) + c.JSON(http.StatusOK, gin.H{ + "ret": 1, + "msg": "ok", + }) +} + +func NodeAlive(c *gin.Context) { + node := c.MustGet("node").(*model.Server) + + var payload map[string][]string + if err := c.ShouldBindJSON(&payload); err != nil { + Fail(c, 400, "invalid payload") + return + } + + for userIDRaw, ips := range payload { + userID, err := strconv.Atoi(userIDRaw) + if err != nil { + continue + } + _ = service.SetDevices(userID, node.ID, ips) + } + + Success(c, true) +} + +func NodeAliveList(c *gin.Context) { + node := c.MustGet("node").(*model.Server) + users, err := service.AvailableUsersForNode(node) + if err != nil { + Fail(c, 500, "failed to fetch users") + return + } + + userIDs := make([]int, 0, len(users)) + for _, user := range users { + if user.DeviceLimit != nil && *user.DeviceLimit > 0 { + userIDs = append(userIDs, user.ID) + } + } + + devices := service.GetUsersDevices(userIDs) + alive := make(map[string][]string, len(devices)) + for userID, ips := range devices { + alive[strconv.Itoa(userID)] = ips + } + + Success(c, gin.H{"alive": alive}) +} + +func NodeStatus(c *gin.Context) { + node := c.MustGet("node").(*model.Server) + var status map[string]any + if err := c.ShouldBindJSON(&status); err != nil { + Fail(c, 400, "invalid payload") + return + } + + cacheTime := time.Duration(maxInt(300, service.MustGetInt("server_push_interval", 60)*3)) * time.Second + _ = database.CacheSet(nodeLoadStatusKey(node), gin.H{ + "cpu": status["cpu"], + "mem": status["mem"], + "swap": status["swap"], + "disk": status["disk"], + "kernel_status": status["kernel_status"], + "updated_at": time.Now().Unix(), + }, cacheTime) + _ = database.CacheSet(nodeLastLoadKey(node), time.Now().Unix(), cacheTime) + + c.JSON(http.StatusOK, gin.H{"data": true, "code": 0, "message": "success"}) +} + +func NodeHandshake(c *gin.Context) { + websocket := gin.H{"enabled": false} + if service.MustGetBool("server_ws_enable", true) { + wsURL := strings.TrimSpace(service.MustGetString("server_ws_url", "")) + if wsURL == "" { + scheme := "ws" + if c.Request.TLS != nil { + scheme = "wss" + } + wsURL = fmt.Sprintf("%s://%s:8076", scheme, c.Request.Host) + } + websocket = gin.H{ + "enabled": true, + "ws_url": strings.TrimRight(wsURL, "/"), + } + } + Success(c, gin.H{"websocket": websocket}) +} + +func NodeReport(c *gin.Context) { + node := c.MustGet("node").(*model.Server) + setNodeLastCheck(node) + + var payload struct { + Traffic map[string][]int64 `json:"traffic"` + Alive map[string][]string `json:"alive"` + Online map[string]int `json:"online"` + Status map[string]any `json:"status"` + Metrics map[string]any `json:"metrics"` + } + if err := c.ShouldBindJSON(&payload); err != nil { + Fail(c, 400, "invalid payload") + return + } + + if len(payload.Traffic) > 0 { + for userIDRaw, traffic := range payload.Traffic { + if len(traffic) != 2 { + continue + } + userID, err := strconv.Atoi(userIDRaw) + if err != nil { + continue + } + service.ApplyTrafficDelta(userID, node, traffic[0], traffic[1]) + } + setNodeLastPush(node, len(payload.Traffic)) + } + + if len(payload.Alive) > 0 { + for userIDRaw, ips := range payload.Alive { + userID, err := strconv.Atoi(userIDRaw) + if err != nil { + continue + } + _ = service.SetDevices(userID, node.ID, ips) + } + } + + if len(payload.Online) > 0 { + cacheTime := time.Duration(maxInt(300, service.MustGetInt("server_push_interval", 60)*3)) * time.Second + for userIDRaw, conn := range payload.Online { + key := fmt.Sprintf("USER_ONLINE_CONN_%s_%d_%s", strings.ToUpper(node.Type), node.ID, userIDRaw) + _ = database.CacheSet(key, conn, cacheTime) + } + } + + if len(payload.Status) > 0 { + cacheTime := time.Duration(maxInt(300, service.MustGetInt("server_push_interval", 60)*3)) * time.Second + _ = database.CacheSet(nodeLoadStatusKey(node), gin.H{ + "cpu": payload.Status["cpu"], + "mem": payload.Status["mem"], + "swap": payload.Status["swap"], + "disk": payload.Status["disk"], + "kernel_status": payload.Status["kernel_status"], + "updated_at": time.Now().Unix(), + }, cacheTime) + _ = database.CacheSet(nodeLastLoadKey(node), time.Now().Unix(), cacheTime) + } + + if len(payload.Metrics) > 0 { + cacheTime := time.Duration(maxInt(300, service.MustGetInt("server_push_interval", 60)*3)) * time.Second + payload.Metrics["updated_at"] = time.Now().Unix() + _ = database.CacheSet(nodeMetricsKey(node), payload.Metrics, cacheTime) + } + + Success(c, true) +} + +func setNodeLastCheck(node *model.Server) { + _ = database.CacheSet(nodeLastCheckKey(node), time.Now().Unix(), time.Hour) +} + +func setNodeLastPush(node *model.Server, onlineUsers int) { + _ = database.CacheSet(nodeOnlineKey(node), onlineUsers, time.Hour) + _ = database.CacheSet(nodeLastPushKey(node), time.Now().Unix(), time.Hour) +} + +func nodeLastCheckKey(node *model.Server) string { + return fmt.Sprintf("SERVER_%s_LAST_CHECK_AT_%d", strings.ToUpper(node.Type), node.ID) +} + +func nodeLastPushKey(node *model.Server) string { + return fmt.Sprintf("SERVER_%s_LAST_PUSH_AT_%d", strings.ToUpper(node.Type), node.ID) +} + +func nodeOnlineKey(node *model.Server) string { + return fmt.Sprintf("SERVER_%s_ONLINE_USER_%d", strings.ToUpper(node.Type), node.ID) +} + +func nodeLoadStatusKey(node *model.Server) string { + return fmt.Sprintf("SERVER_%s_LOAD_STATUS_%d", strings.ToUpper(node.Type), node.ID) +} + +func nodeLastLoadKey(node *model.Server) string { + return fmt.Sprintf("SERVER_%s_LAST_LOAD_AT_%d", strings.ToUpper(node.Type), node.ID) +} + +func nodeMetricsKey(node *model.Server) string { + return fmt.Sprintf("SERVER_%s_METRICS_%d", strings.ToUpper(node.Type), node.ID) +} + +func maxInt(a, b int) int { + if a > b { + return a + } + return b +} + +func tidalabProtocolString(raw *string, key string) string { + if raw == nil || strings.TrimSpace(*raw) == "" { + return "" + } + + decoded := map[string]any{} + if err := json.Unmarshal([]byte(*raw), &decoded); err != nil { + return "" + } + + value, _ := decoded[key].(string) + return strings.TrimSpace(value) +} diff --git a/internal/handler/node_handler.go b/internal/handler/node_handler.go new file mode 100644 index 0000000..0c52ea8 --- /dev/null +++ b/internal/handler/node_handler.go @@ -0,0 +1,85 @@ +//go:build ignore + +package handler + +import ( + "net/http" + "strconv" + "time" + "xboard-go/internal/database" + "xboard-go/internal/model" + + "github.com/gin-gonic/gin" + "gorm.io/gorm" +) + +func NodeUser(c *gin.Context) { + nodePtr, _ := c.Get("node") + _ = nodePtr.(*model.Server) // Silence unused node for now + + var users []model.User + // Basic filtering: banned=0 and not expired + query := database.DB.Model(&model.User{}). + Where("banned = ? AND (expired_at IS NULL OR expired_at > ?)", 0, time.Now().Unix()) + + if err := query.Find(&users).Error; err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"message": "获取用户失败"}) + return + } + + type UniUser struct { + ID int `json:"id"` + UUID string `json:"uuid"` + } + + uniUsers := make([]UniUser, len(users)) + for i, u := range users { + uniUsers[i] = UniUser{ID: u.ID, UUID: u.UUID} + } + + c.JSON(http.StatusOK, gin.H{ + "users": uniUsers, + }) +} + +func NodePush(c *gin.Context) { + nodePtr, _ := c.Get("node") + node := nodePtr.(*model.Server) + + var data map[string][]int64 + if err := c.ShouldBindJSON(&data); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"message": "参数错误"}) + return + } + + for userIDStr, traffic := range data { + userID, err := strconv.Atoi(userIDStr) + if err != nil { + continue + } + if len(traffic) < 2 { + continue + } + u := traffic[0] + d := traffic[1] + + // Update user traffic + database.DB.Model(&model.User{}).Where("id = ?", userID). + Updates(map[string]interface{}{ + "u": gorm.Expr("u + ?", u), + "d": gorm.Expr("d + ?", d), + "t": time.Now().Unix(), + }) + + // Update node traffic + database.DB.Model(&model.Server{}).Where("id = ?", node.ID). + Updates(map[string]interface{}{ + "u": gorm.Expr("u + ?", u), + "d": gorm.Expr("d + ?", d), + }) + } + + c.JSON(http.StatusOK, gin.H{"data": true}) +} + +// Config, Alive, Status handlers suppressed for brevity in this step diff --git a/internal/handler/plugin_api.go b/internal/handler/plugin_api.go new file mode 100644 index 0000000..7c52bbc --- /dev/null +++ b/internal/handler/plugin_api.go @@ -0,0 +1,304 @@ +package handler + +import ( + "strconv" + "strings" + "time" + "xboard-go/internal/database" + "xboard-go/internal/model" + "xboard-go/internal/service" + + "github.com/gin-gonic/gin" +) + +func PluginUserOnlineDevicesUsers(c *gin.Context) { + if !service.IsPluginEnabled(service.PluginUserOnlineDevices) { + Fail(c, 400, "plugin is not enabled") + return + } + + page := parsePositiveInt(c.DefaultQuery("page", "1"), 1) + perPage := parsePositiveInt(c.DefaultQuery("per_page", "20"), 20) + keyword := strings.TrimSpace(c.Query("keyword")) + + query := database.DB.Model(&model.User{}).Order("id DESC") + if keyword != "" { + query = query.Where("email LIKE ? OR id = ?", "%"+keyword+"%", keyword) + } + + var total int64 + query.Count(&total) + + var users []model.User + if err := query.Offset((page - 1) * perPage).Limit(perPage).Find(&users).Error; err != nil { + Fail(c, 500, "failed to fetch users") + return + } + + userIDs := make([]int, 0, len(users)) + for _, user := range users { + userIDs = append(userIDs, user.ID) + } + devices := service.GetUsersDevices(userIDs) + + list := make([]gin.H, 0, len(users)) + usersWithOnlineIP := 0 + totalOnlineIPs := 0 + for _, user := range users { + subscriptionName := "No subscription" + if user.PlanID != nil { + var plan model.Plan + if database.DB.First(&plan, *user.PlanID).Error == nil { + subscriptionName = plan.Name + } + } + + ips := devices[user.ID] + if len(ips) > 0 { + usersWithOnlineIP++ + totalOnlineIPs += len(ips) + } + + list = append(list, gin.H{ + "id": user.ID, + "email": user.Email, + "subscription_name": subscriptionName, + "online_count": len(ips), + "online_devices": ips, + "last_online_text": formatTimeValue(user.LastOnlineAt), + "created_text": formatUnixValue(user.CreatedAt), + }) + } + + Success(c, gin.H{ + "list": list, + "filters": gin.H{ + "keyword": keyword, + "per_page": perPage, + }, + "summary": gin.H{ + "page_users": len(users), + "users_with_online_ip": usersWithOnlineIP, + "total_online_ips": totalOnlineIPs, + "current_page": page, + }, + "pagination": gin.H{ + "current": page, + "last_page": calculateLastPage(total, perPage), + "per_page": perPage, + "total": total, + }, + }) +} + +func PluginUserOnlineDevicesGetIP(c *gin.Context) { + if !service.IsPluginEnabled(service.PluginUserOnlineDevices) { + Fail(c, 400, "plugin is not enabled") + return + } + + user, ok := currentUser(c) + if !ok { + Fail(c, 401, "unauthorized") + return + } + + devices := service.GetUsersDevices([]int{user.ID}) + ips := devices[user.ID] + authToken, _ := c.Get("auth_token") + currentToken, _ := authToken.(string) + sessions := service.GetUserSessions(user.ID, currentToken) + currentID := currentSessionID(c) + + sessionItems := make([]gin.H, 0, len(sessions)) + for _, session := range sessions { + sessionItems = append(sessionItems, gin.H{ + "id": session.ID, + "name": session.Name, + "user_agent": session.UserAgent, + "ip": firstString(session.IP, "-"), + "created_at": session.CreatedAt, + "last_used_at": session.LastUsedAt, + "expires_at": session.ExpiresAt, + "is_current": session.ID == currentID, + }) + } + Success(c, gin.H{ + "ips": ips, + "session_overview": gin.H{ + "online_ip_count": len(ips), + "online_ips": ips, + "online_device_count": len(ips), + "device_limit": user.DeviceLimit, + "last_online_at": user.LastOnlineAt, + "active_session_count": len(sessionItems), + "sessions": sessionItems, + }, + }) +} + +func PluginUserAddIPv6Check(c *gin.Context) { + if !service.IsPluginEnabled(service.PluginUserAddIPv6) { + Fail(c, 400, "plugin is not enabled") + return + } + + user, ok := currentUser(c) + if !ok { + Fail(c, 401, "unauthorized") + return + } + + if user.PlanID == nil { + Success(c, gin.H{"allowed": false, "reason": "No active plan"}) + return + } + + var plan model.Plan + if err := database.DB.First(&plan, *user.PlanID).Error; err != nil { + Success(c, gin.H{"allowed": false, "reason": "No active plan"}) + return + } + + ipv6Email := service.IPv6ShadowEmail(user.Email) + var count int64 + database.DB.Model(&model.User{}).Where("email = ?", ipv6Email).Count(&count) + + Success(c, gin.H{ + "allowed": service.PluginPlanAllowed(&plan), + "is_active": count > 0, + }) +} + +func PluginUserAddIPv6Enable(c *gin.Context) { + if !service.IsPluginEnabled(service.PluginUserAddIPv6) { + Fail(c, 400, "plugin is not enabled") + return + } + + user, ok := currentUser(c) + if !ok { + Fail(c, 401, "unauthorized") + return + } + + if !service.SyncIPv6ShadowAccount(user) { + Fail(c, 403, "your plan does not support IPv6 subscription") + return + } + + SuccessMessage(c, "IPv6 subscription enabled/synced", true) +} + +func PluginUserAddIPv6SyncPassword(c *gin.Context) { + if !service.IsPluginEnabled(service.PluginUserAddIPv6) { + Fail(c, 400, "plugin is not enabled") + return + } + + user, ok := currentUser(c) + if !ok { + Fail(c, 401, "unauthorized") + return + } + + ipv6Email := service.IPv6ShadowEmail(user.Email) + result := database.DB.Model(&model.User{}).Where("email = ?", ipv6Email).Update("password", user.Password) + if result.Error != nil { + Fail(c, 404, "IPv6 user not found") + return + } + if result.RowsAffected == 0 { + Fail(c, 404, "IPv6 user not found") + return + } + + SuccessMessage(c, "Password synced to IPv6 account", true) +} + +func AdminConfigFetch(c *gin.Context) { + Success(c, gin.H{ + "app_name": service.MustGetString("app_name", "XBoard"), + "app_url": service.GetAppURL(), + "secure_path": service.GetAdminSecurePath(), + "server_pull_interval": service.MustGetInt("server_pull_interval", 60), + "server_push_interval": service.MustGetInt("server_push_interval", 60), + }) +} + +func AdminSystemStatus(c *gin.Context) { + Success(c, gin.H{ + "server_time": time.Now().Unix(), + "app_name": service.MustGetString("app_name", "XBoard"), + "app_url": service.GetAppURL(), + }) +} + +func AdminPluginsList(c *gin.Context) { + var plugins []model.Plugin + if err := database.DB.Order("id ASC").Find(&plugins).Error; err != nil { + Fail(c, 500, "failed to fetch plugins") + return + } + Success(c, plugins) +} + +func AdminPluginTypes(c *gin.Context) { + Success(c, []string{"feature", "payment"}) +} + +func AdminPluginIntegrationStatus(c *gin.Context) { + Success(c, gin.H{ + "user_online_devices": gin.H{ + "enabled": service.IsPluginEnabled(service.PluginUserOnlineDevices), + "status": "complete", + "summary": "用户侧在线设备概览与后台设备监控已接入 Go 后端。", + "endpoints": []string{"/api/v1/user/user-online-devices/get-ip", "/api/v1/" + service.GetAdminSecurePath() + "/user-online-devices/users"}, + }, + "real_name_verification": gin.H{ + "enabled": service.IsPluginEnabled(service.PluginRealNameVerification), + "status": "complete", + "summary": "实名状态查询、提交、后台审核与批量同步均已整合,并补齐 auto_approve/allow_resubmit_after_reject 行为。", + "endpoints": []string{"/api/v1/user/real-name-verification/status", "/api/v1/user/real-name-verification/submit", "/api/v1/" + service.GetAdminSecurePath() + "/realname/records"}, + }, + "user_add_ipv6_subscription": gin.H{ + "enabled": service.IsPluginEnabled(service.PluginUserAddIPv6), + "status": "integrated_with_runtime_sync", + "summary": "用户启用、密码同步与运行时影子账号同步已接入;订单生命周期自动钩子仍依赖后续完整订单流重构。", + "endpoints": []string{"/api/v1/user/user-add-ipv6-subscription/check", "/api/v1/user/user-add-ipv6-subscription/enable", "/api/v1/user/user-add-ipv6-subscription/sync-password"}, + }, + }) +} + +func parsePositiveInt(raw string, defaultValue int) int { + value, err := strconv.Atoi(strings.TrimSpace(raw)) + if err != nil || value <= 0 { + return defaultValue + } + return value +} + +func calculateLastPage(total int64, perPage int) int { + if perPage <= 0 { + return 1 + } + last := int((total + int64(perPage) - 1) / int64(perPage)) + if last == 0 { + return 1 + } + return last +} + +func formatUnixValue(value int64) string { + if value <= 0 { + return "-" + } + return time.Unix(value, 0).Format("2006-01-02 15:04:05") +} + +func formatTimeValue(value *time.Time) string { + if value == nil { + return "-" + } + return value.Format("2006-01-02 15:04:05") +} diff --git a/internal/handler/realname_api.go b/internal/handler/realname_api.go new file mode 100644 index 0000000..6c32a63 --- /dev/null +++ b/internal/handler/realname_api.go @@ -0,0 +1,426 @@ +package handler + +import ( + "strconv" + "strings" + "time" + "xboard-go/internal/database" + "xboard-go/internal/model" + "xboard-go/internal/service" + + "github.com/gin-gonic/gin" +) + +const unverifiedExpiration = int64(946684800) + +func PluginRealNameStatus(c *gin.Context) { + if !service.IsPluginEnabled(service.PluginRealNameVerification) { + Fail(c, 400, "plugin is not enabled") + return + } + + user, ok := currentUser(c) + if !ok { + Fail(c, 401, "unauthorized") + return + } + + auth := realNameRecordForUser(user) + status := "unverified" + var realName, masked, rejectReason string + var submittedAt, reviewedAt int64 + if auth != nil { + status = auth.Status + realName = auth.RealName + masked = auth.IdentityMasked + rejectReason = auth.RejectReason + submittedAt = auth.SubmittedAt + reviewedAt = auth.ReviewedAt + } + canSubmit := status == "unverified" || (status == "rejected" && service.GetPluginConfigBool(service.PluginRealNameVerification, "allow_resubmit_after_reject", true)) + + Success(c, gin.H{ + "status": status, + "status_label": realNameStatusLabel(status), + "is_inherited": strings.Contains(user.Email, "-ipv6@"), + "can_submit": canSubmit, + "real_name": realName, + "identity_no_masked": masked, + "notice": service.GetPluginConfigString(service.PluginRealNameVerification, "verification_notice", "Please submit real-name information."), + "reject_reason": rejectReason, + "submitted_at": submittedAt, + "reviewed_at": reviewedAt, + }) +} + +func PluginRealNameSubmit(c *gin.Context) { + if !service.IsPluginEnabled(service.PluginRealNameVerification) { + Fail(c, 400, "plugin is not enabled") + return + } + + user, ok := currentUser(c) + if !ok { + Fail(c, 401, "unauthorized") + return + } + + var req struct { + RealName string `json:"real_name" binding:"required"` + IdentityNo string `json:"identity_no" binding:"required"` + } + if err := c.ShouldBindJSON(&req); err != nil { + Fail(c, 422, "missing identity information") + return + } + + now := time.Now().Unix() + record := model.RealNameAuth{ + UserID: uint64(user.ID), + RealName: req.RealName, + IdentityMasked: maskIdentity(req.IdentityNo), + IdentityEncrypted: req.IdentityNo, + Status: "pending", + SubmittedAt: now, + ReviewedAt: 0, + CreatedAt: now, + UpdatedAt: now, + } + + var existing model.RealNameAuth + status := "pending" + reviewedAt := int64(0) + if service.GetPluginConfigBool(service.PluginRealNameVerification, "auto_approve", false) { + status = "approved" + reviewedAt = now + } + + if err := database.DB.Where("user_id = ?", user.ID).First(&existing).Error; err == nil { + if existing.Status == "approved" { + Fail(c, 400, "verification already approved") + return + } + if existing.Status == "pending" { + Fail(c, 400, "verification is pending review") + return + } + if existing.Status == "rejected" && !service.GetPluginConfigBool(service.PluginRealNameVerification, "allow_resubmit_after_reject", true) { + Fail(c, 400, "rejected records cannot be resubmitted") + return + } + + record.ID = existing.ID + record.CreatedAt = existing.CreatedAt + record.Status = status + record.ReviewedAt = reviewedAt + record.RejectReason = "" + database.DB.Model(&existing).Updates(record) + } else { + record.Status = status + record.ReviewedAt = reviewedAt + database.DB.Create(&record) + } + + syncRealNameExpiration(user.ID, status) + SuccessMessage(c, "verification submitted", gin.H{"status": status}) +} + +func PluginRealNameRecords(c *gin.Context) { + if !service.IsPluginEnabled(service.PluginRealNameVerification) { + Fail(c, 400, "plugin is not enabled") + return + } + + page := parsePositiveInt(c.DefaultQuery("page", "1"), 1) + perPage := parsePositiveInt(c.DefaultQuery("per_page", "20"), 20) + keyword := strings.TrimSpace(c.Query("keyword")) + + query := database.DB.Table("v2_user AS u"). + Select("u.id, u.email, r.status, r.real_name, r.identity_masked, r.submitted_at, r.reviewed_at"). + Joins("LEFT JOIN v2_realname_auth AS r ON u.id = r.user_id"). + Where("u.email NOT LIKE ?", "%-ipv6@%") + if keyword != "" { + query = query.Where("u.email LIKE ?", "%"+keyword+"%") + } + + var total int64 + query.Count(&total) + + type recordRow struct { + ID int + Email string + Status *string + RealName *string + IdentityMasked *string + SubmittedAt *int64 + ReviewedAt *int64 + } + + var rows []recordRow + if err := query.Offset((page - 1) * perPage).Limit(perPage).Scan(&rows).Error; err != nil { + Fail(c, 500, "failed to fetch records") + return + } + + items := make([]gin.H, 0, len(rows)) + for _, row := range rows { + status := "unverified" + if row.Status != nil && *row.Status != "" { + status = *row.Status + } + items = append(items, gin.H{ + "id": row.ID, + "email": row.Email, + "status": status, + "status_label": realNameStatusLabel(status), + "real_name": stringPointerValue(row.RealName), + "identity_no_masked": stringPointerValue(row.IdentityMasked), + "submitted_at": int64PointerValue(row.SubmittedAt), + "reviewed_at": int64PointerValue(row.ReviewedAt), + }) + } + + Success(c, gin.H{ + "status": "success", + "data": items, + "pagination": gin.H{ + "total": total, + "current": page, + "last_page": calculateLastPage(total, perPage), + }, + }) +} + +func PluginRealNameReview(c *gin.Context) { + if !service.IsPluginEnabled(service.PluginRealNameVerification) { + Fail(c, 400, "plugin is not enabled") + return + } + + userID := parsePositiveInt(c.Param("userId"), 0) + if userID == 0 { + Fail(c, 400, "invalid user id") + return + } + + var req struct { + Status string `json:"status"` + Reason string `json:"reason"` + } + _ = c.ShouldBindJSON(&req) + if req.Status == "" { + req.Status = "approved" + } + + now := time.Now().Unix() + var record model.RealNameAuth + if err := database.DB.Where("user_id = ?", userID).First(&record).Error; err == nil { + record.Status = req.Status + record.RejectReason = req.Reason + record.ReviewedAt = now + record.UpdatedAt = now + database.DB.Save(&record) + } else { + database.DB.Create(&model.RealNameAuth{ + UserID: uint64(userID), + Status: req.Status, + RealName: "admin approved", + IdentityMasked: "admin approved", + SubmittedAt: now, + ReviewedAt: now, + RejectReason: req.Reason, + CreatedAt: now, + UpdatedAt: now, + }) + } + + syncRealNameExpiration(userID, req.Status) + SuccessMessage(c, "review updated", true) +} + +func PluginRealNameReset(c *gin.Context) { + if !service.IsPluginEnabled(service.PluginRealNameVerification) { + Fail(c, 400, "plugin is not enabled") + return + } + + userID := parsePositiveInt(c.Param("userId"), 0) + if userID == 0 { + Fail(c, 400, "invalid user id") + return + } + + database.DB.Where("user_id = ?", userID).Delete(&model.RealNameAuth{}) + syncRealNameExpiration(userID, "unverified") + SuccessMessage(c, "record reset", true) +} + +func PluginRealNameSyncAll(c *gin.Context) { + if !service.IsPluginEnabled(service.PluginRealNameVerification) { + Fail(c, 400, "plugin is not enabled") + return + } + SuccessMessage(c, "sync completed", performGlobalRealNameSync()) +} + +func PluginRealNameApproveAll(c *gin.Context) { + if !service.IsPluginEnabled(service.PluginRealNameVerification) { + Fail(c, 400, "plugin is not enabled") + return + } + + var users []model.User + database.DB.Where("email NOT LIKE ?", "%-ipv6@%").Find(&users) + now := time.Now().Unix() + for _, user := range users { + var record model.RealNameAuth + if err := database.DB.Where("user_id = ?", user.ID).First(&record).Error; err == nil { + record.Status = "approved" + record.RealName = "admin approved" + record.IdentityMasked = "admin approved" + record.SubmittedAt = now + record.ReviewedAt = now + record.UpdatedAt = now + database.DB.Save(&record) + } else { + database.DB.Create(&model.RealNameAuth{ + UserID: uint64(user.ID), + Status: "approved", + RealName: "admin approved", + IdentityMasked: "admin approved", + SubmittedAt: now, + ReviewedAt: now, + CreatedAt: now, + UpdatedAt: now, + }) + } + } + + SuccessMessage(c, "all users approved", performGlobalRealNameSync()) +} + +func PluginRealNameClearCache(c *gin.Context) { + _ = database.CacheDelete("realname:sync") + SuccessMessage(c, "cache cleared", true) +} + +func realNameRecordForUser(user *model.User) *model.RealNameAuth { + if user == nil { + return nil + } + var record model.RealNameAuth + if err := database.DB.Where("user_id = ?", user.ID).First(&record).Error; err == nil { + return &record + } + + if strings.Contains(user.Email, "-ipv6@") { + mainEmail := strings.Replace(user.Email, "-ipv6@", "@", 1) + var mainUser model.User + if err := database.DB.Where("email = ?", mainEmail).First(&mainUser).Error; err == nil { + if err := database.DB.Where("user_id = ?", mainUser.ID).First(&record).Error; err == nil { + return &record + } + } + } + + return nil +} + +func syncRealNameExpiration(userID int, status string) { + if status == "approved" { + database.DB.Model(&model.User{}).Where("id = ?", userID).Updates(map[string]any{ + "expired_at": parseExpirationSetting(), + "updated_at": time.Now().Unix(), + }) + return + } + if !service.GetPluginConfigBool(service.PluginRealNameVerification, "enforce_real_name", false) { + database.DB.Model(&model.User{}).Where("id = ?", userID).Update("updated_at", time.Now().Unix()) + return + } + database.DB.Model(&model.User{}).Where("id = ?", userID).Updates(map[string]any{ + "expired_at": unverifiedExpiration, + "updated_at": time.Now().Unix(), + }) +} + +func parseExpirationSetting() int64 { + raw := service.GetPluginConfigString(service.PluginRealNameVerification, "verified_expiration_date", "2099-12-31") + if value, err := strconv.ParseInt(raw, 10, 64); err == nil { + return value + } + if parsed, err := time.Parse("2006-01-02", raw); err == nil { + return parsed.Unix() + } + return time.Date(2099, 12, 31, 23, 59, 59, 0, time.UTC).Unix() +} + +func performGlobalRealNameSync() gin.H { + expireApproved := parseExpirationSetting() + now := time.Now().Unix() + enforce := service.GetPluginConfigBool(service.PluginRealNameVerification, "enforce_real_name", false) + + type approvedRow struct { + UserID int + } + var approvedRows []approvedRow + database.DB.Table("v2_realname_auth").Select("user_id").Where("status = ?", "approved").Scan(&approvedRows) + approvedUsers := make([]int, 0, len(approvedRows)) + for _, row := range approvedRows { + approvedUsers = append(approvedUsers, row.UserID) + } + + if len(approvedUsers) > 0 { + database.DB.Model(&model.User{}).Where("id IN ?", approvedUsers). + Updates(map[string]any{"expired_at": expireApproved, "updated_at": now}) + if enforce { + database.DB.Model(&model.User{}).Where("id NOT IN ?", approvedUsers). + Updates(map[string]any{"expired_at": unverifiedExpiration, "updated_at": now}) + } + } else { + if enforce { + database.DB.Model(&model.User{}). + Updates(map[string]any{"expired_at": unverifiedExpiration, "updated_at": now}) + } + } + + return gin.H{ + "enforce_real_name": enforce, + "total_verified": len(approvedUsers), + "actual_synced": len(approvedUsers), + } +} + +func realNameStatusLabel(status string) string { + switch status { + case "approved": + return "approved" + case "pending": + return "pending" + case "rejected": + return "rejected" + default: + return "unverified" + } +} + +func maskIdentity(identity string) string { + if len(identity) <= 8 { + return identity + } + return identity[:4] + "**********" + identity[len(identity)-4:] +} + +func stringPointerValue(value *string) string { + if value == nil { + return "" + } + return *value +} + +func int64PointerValue(value *int64) int64 { + if value == nil { + return 0 + } + return *value +} diff --git a/internal/handler/realname_handler.go b/internal/handler/realname_handler.go new file mode 100644 index 0000000..6bdeea6 --- /dev/null +++ b/internal/handler/realname_handler.go @@ -0,0 +1,269 @@ +package handler + +import ( + "fmt" + "net/http" + "strconv" + "time" + "xboard-go/internal/database" + "xboard-go/internal/model" + + "github.com/gin-gonic/gin" +) + +// RealNameIndex renders the beautified plugin management page. +func RealNameIndex(c *gin.Context) { + var appNameSetting model.Setting + database.DB.Where("name = ?", "app_name").First(&appNameSetting) + appName := appNameSetting.Value + if appName == "" { + appName = "XBoard" + } + + securePath := c.Param("path") + apiEndpoint := fmt.Sprintf("/api/v1/%%s/realname/records", securePath) + reviewEndpoint := fmt.Sprintf("/api/v1/%%s/realname/review", securePath) + + // We use %% for literal percent signs in Sprintf + // and we avoid backticks in the JS code by using regular strings to remain compatible with Go raw strings. + html := fmt.Sprintf(` + + + + + + %%s - 实名验证管理 + + + + +
+
+
+

实名验证管理

+

集中处理全站用户的身份验证申请

+
+ 返回控制台 +
+ +
+
+ +
正在获取数据...
+
+ + + + + + + + + + + + + + +
用户 ID邮箱真实姓名认证状态操作
+ + +
+
+
操作成功
+ + + + +`, appName, securePath, apiEndpoint, reviewEndpoint) + + c.Header("Content-Type", "text/html; charset=utf-8") + c.String(http.StatusOK, html) +} + +// RealNameRecords handles the listing of authentication records. +func RealNameRecords(c *gin.Context) { + page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) + pageSize := 15 + keyword := c.Query("keyword") + + var records []model.RealNameAuth + var total int64 + + query := database.DB.Preload("User").Model(&model.RealNameAuth{}) + if keyword != "" { + query = query.Joins("JOIN v2_user ON v2_user.id = v2_realname_auth.user_id"). + Where("v2_user.email LIKE ?", "%%"+keyword+"%%") + } + + query.Count(&total) + query.Offset((page - 1) * pageSize).Limit(pageSize).Order("created_at DESC").Find(&records) + + lastPage := (total + int64(pageSize) - 1) / int64(pageSize) + + c.JSON(http.StatusOK, gin.H{ + "data": records, + "pagination": gin.H{ + "total": total, + "current": page, + "last_page": lastPage, + }, + }) +} + +// RealNameReview handles approval or rejection of a record. +func RealNameReview(c *gin.Context) { + id := c.Param("id") + var req struct { + Status string `json:"status" binding:"required"` + } + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"message": "参数错误"}) + return + } + + var record model.RealNameAuth + if err := database.DB.First(&record, id).Error; err != nil { + c.JSON(http.StatusNotFound, gin.H{"message": "记录不存在"}) + return + } + + record.Status = req.Status + record.ReviewedAt = time.Now().Unix() + database.DB.Save(&record) + + // Sync User Expiration if approved + if req.Status == "approved" { + // Set a long expiration date (e.g., 2099-12-31) + expiry := time.Date(2099, 12, 31, 23, 59, 59, 0, time.UTC).Unix() + database.DB.Model(&model.User{}).Where("id = ?", record.UserID).Update("expired_at", expiry) + } + + c.JSON(http.StatusOK, gin.H{"message": "审核操作成功"}) +} diff --git a/internal/handler/subscribe_handler.go b/internal/handler/subscribe_handler.go new file mode 100644 index 0000000..be2fbd7 --- /dev/null +++ b/internal/handler/subscribe_handler.go @@ -0,0 +1,71 @@ +//go:build ignore + +package handler + +import ( + "encoding/base64" + "fmt" + "net/http" + "strings" + "xboard-go/internal/database" + "xboard-go/internal/model" + "xboard-go/internal/protocol" + + "github.com/gin-gonic/gin" +) + +func Subscribe(c *gin.Context) { + token := c.Param("token") + if token == "" { + c.JSON(http.StatusForbidden, gin.H{"message": "缺少Token"}) + return + } + + var user model.User + if err := database.DB.Where("token = ?", token).First(&user).Error; err != nil { + c.JSON(http.StatusForbidden, gin.H{"message": "无效的Token"}) + return + } + + if user.Banned { + c.JSON(http.StatusForbidden, gin.H{"message": "账号已被封禁"}) + return + } + + var servers []model.Server + query := database.DB.Where("`show` = ?", 1).Order("sort ASC") + if err := query.Find(&servers).Error; err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"message": "获取节点失败"}) + return + } + + ua := c.GetHeader("User-Agent") + flag := c.Query("flag") + + if strings.Contains(ua, "Clash") || flag == "clash" { + config, _ := protocol.GenerateClash(servers, user) + c.Header("Content-Type", "application/octet-stream") + c.String(http.StatusOK, config) + return + } + + if strings.Contains(ua, "sing-box") || flag == "sing-box" { + config, _ := protocol.GenerateSingBox(servers, user) + c.Header("Content-Type", "application/json; charset=utf-8") + c.String(http.StatusOK, config) + return + } + + // Default: VMess/SS link format (Base64) + var links []string + for _, s := range servers { + // Mocked link for now + link := fmt.Sprintf("vmess://%s", s.Name) + links = append(links, link) + } + + encoded := base64.StdEncoding.EncodeToString([]byte(strings.Join(links, "\n"))) + c.Header("Content-Type", "text/plain; charset=utf-8") + c.Header("Subscription-Userinfo", fmt.Sprintf("upload=%d; download=%d; total=%d; expire=%d", user.U, user.D, user.TransferEnable, user.ExpiredAt)) + c.String(http.StatusOK, encoded) +} diff --git a/internal/handler/user_api.go b/internal/handler/user_api.go new file mode 100644 index 0000000..79f216d --- /dev/null +++ b/internal/handler/user_api.go @@ -0,0 +1,259 @@ +package handler + +import ( + "crypto/md5" + "fmt" + "net/http" + "strings" + "time" + "xboard-go/internal/database" + "xboard-go/internal/model" + "xboard-go/internal/service" + "xboard-go/pkg/utils" + + "github.com/gin-gonic/gin" + "github.com/google/uuid" +) + +func UserInfo(c *gin.Context) { + user, ok := currentUser(c) + if !ok { + Fail(c, http.StatusUnauthorized, "user not found") + return + } + + Success(c, gin.H{ + "email": user.Email, + "transfer_enable": user.TransferEnable, + "last_login_at": user.LastLoginAt, + "created_at": user.CreatedAt, + "banned": user.Banned, + "remind_expire": user.RemindExpire, + "remind_traffic": user.RemindTraffic, + "expired_at": user.ExpiredAt, + "balance": user.Balance, + "commission_balance": user.CommissionBalance, + "plan_id": user.PlanID, + "discount": user.Discount, + "commission_rate": user.CommissionRate, + "telegram_id": user.TelegramID, + "uuid": user.UUID, + "avatar_url": "https://cdn.v2ex.com/gravatar/" + fmt.Sprintf("%x", md5.Sum([]byte(strings.ToLower(user.Email)))) + "?s=64&d=identicon", + }) +} + +func UserGetStat(c *gin.Context) { + user, ok := currentUser(c) + if !ok { + Fail(c, http.StatusUnauthorized, "user not found") + return + } + + var pendingOrders int64 + var openTickets int64 + var invitedUsers int64 + + database.DB.Model(&model.Order{}).Where("status = ? AND user_id = ?", 0, user.ID).Count(&pendingOrders) + database.DB.Model(&model.Ticket{}).Where("status = ? AND user_id = ?", 0, user.ID).Count(&openTickets) + database.DB.Model(&model.User{}).Where("invite_user_id = ?", user.ID).Count(&invitedUsers) + + Success(c, []int64{pendingOrders, openTickets, invitedUsers}) +} + +func UserGetSubscribe(c *gin.Context) { + user, ok := currentUser(c) + if !ok { + Fail(c, http.StatusUnauthorized, "user not found") + return + } + + if user.PlanID != nil { + var plan model.Plan + if err := database.DB.First(&plan, *user.PlanID).Error; err == nil { + user.Plan = &plan + } + } + + baseURL := strings.TrimRight(service.GetAppURL(), "/") + if baseURL == "" { + scheme := "http" + if c.Request.TLS != nil { + scheme = "https" + } + baseURL = scheme + "://" + c.Request.Host + } + + Success(c, gin.H{ + "plan_id": user.PlanID, + "token": user.Token, + "expired_at": user.ExpiredAt, + "u": user.U, + "d": user.D, + "transfer_enable": user.TransferEnable, + "email": user.Email, + "uuid": user.UUID, + "device_limit": user.DeviceLimit, + "speed_limit": user.SpeedLimit, + "next_reset_at": user.NextResetAt, + "plan": user.Plan, + "subscribe_url": strings.TrimRight(baseURL, "/") + "/api/v1/client/subscribe?token=" + user.Token, + "reset_day": nil, + }) +} + +func UserCheckLogin(c *gin.Context) { + user, ok := currentUser(c) + if !ok { + Success(c, gin.H{"is_login": false}) + return + } + Success(c, gin.H{ + "is_login": true, + "is_admin": user.IsAdmin, + }) +} + +func UserResetSecurity(c *gin.Context) { + user, ok := currentUser(c) + if !ok { + Fail(c, http.StatusUnauthorized, "user not found") + return + } + + newUUID := uuid.New().String() + newToken := fmt.Sprintf("%x", md5.Sum([]byte(time.Now().String()+user.Email)))[:16] + if err := database.DB.Model(&model.User{}). + Where("id = ?", user.ID). + Updates(map[string]any{"uuid": newUUID, "token": newToken, "updated_at": time.Now().Unix()}).Error; err != nil { + Fail(c, 500, "reset failed") + return + } + + baseURL := strings.TrimRight(service.GetAppURL(), "/") + if baseURL == "" { + scheme := "http" + if c.Request.TLS != nil { + scheme = "https" + } + baseURL = scheme + "://" + c.Request.Host + } + Success(c, strings.TrimRight(baseURL, "/")+"/api/v1/client/subscribe?token="+newToken) +} + +func UserUpdate(c *gin.Context) { + user, ok := currentUser(c) + if !ok { + Fail(c, http.StatusUnauthorized, "user not found") + return + } + + var req struct { + RemindExpire *int `json:"remind_expire"` + RemindTraffic *int `json:"remind_traffic"` + } + if err := c.ShouldBindJSON(&req); err != nil { + Fail(c, 400, "invalid request body") + return + } + + updates := map[string]any{"updated_at": time.Now().Unix()} + if req.RemindExpire != nil { + updates["remind_expire"] = *req.RemindExpire + } + if req.RemindTraffic != nil { + updates["remind_traffic"] = *req.RemindTraffic + } + + if err := database.DB.Model(&model.User{}).Where("id = ?", user.ID).Updates(updates).Error; err != nil { + Fail(c, 500, "save failed") + return + } + + Success(c, true) +} + +func UserChangePassword(c *gin.Context) { + user, ok := currentUser(c) + if !ok { + Fail(c, http.StatusUnauthorized, "user not found") + return + } + + var req struct { + OldPassword string `json:"old_password" binding:"required"` + NewPassword string `json:"new_password" binding:"required,min=8"` + } + if err := c.ShouldBindJSON(&req); err != nil { + Fail(c, 400, "invalid request body") + return + } + + if !utils.CheckPassword(req.OldPassword, user.Password, user.PasswordAlgo, user.PasswordSalt) { + Fail(c, 400, "the old password is wrong") + return + } + + hashed, err := utils.HashPassword(req.NewPassword) + if err != nil { + Fail(c, 500, "failed to hash password") + return + } + + if err := database.DB.Model(&model.User{}). + Where("id = ?", user.ID). + Updates(map[string]any{ + "password": hashed, + "password_algo": nil, + "password_salt": nil, + "updated_at": time.Now().Unix(), + }).Error; err != nil { + Fail(c, 500, "save failed") + return + } + + Success(c, true) +} + +func UserServerFetch(c *gin.Context) { + user, ok := currentUser(c) + if !ok { + Fail(c, http.StatusUnauthorized, "user not found") + return + } + + servers, err := service.AvailableServersForUser(user) + if err != nil { + Fail(c, 500, "failed to fetch servers") + return + } + Success(c, servers) +} + +func currentUser(c *gin.Context) (*model.User, bool) { + if value, exists := c.Get("user"); exists { + if user, ok := value.(*model.User); ok { + return user, true + } + } + + userIDValue, exists := c.Get("user_id") + if !exists { + return nil, false + } + + userID, ok := userIDValue.(int) + if !ok { + return nil, false + } + + var user model.User + if err := database.DB.First(&user, userID).Error; err != nil { + return nil, false + } + if service.IsPluginEnabled(service.PluginUserAddIPv6) && !strings.Contains(user.Email, "-ipv6@") && user.PlanID != nil { + service.SyncIPv6ShadowAccount(&user) + } + + c.Set("user", &user) + return &user, true +} diff --git a/internal/handler/user_extra_api.go b/internal/handler/user_extra_api.go new file mode 100644 index 0000000..469bddc --- /dev/null +++ b/internal/handler/user_extra_api.go @@ -0,0 +1,1067 @@ +package handler + +import ( + "crypto/rand" + "encoding/hex" + "encoding/json" + "errors" + "fmt" + "net/http" + "net/url" + "strconv" + "strings" + "time" + "xboard-go/internal/database" + "xboard-go/internal/model" + "xboard-go/internal/service" + "xboard-go/pkg/utils" + + "github.com/gin-gonic/gin" + "gorm.io/gorm" + "gorm.io/gorm/clause" +) + +func UserCommConfig(c *gin.Context) { + data := buildGuestConfig() + data["is_telegram"] = boolToInt(service.MustGetBool("telegram_bot_enable", false)) + data["telegram_discuss_link"] = service.MustGetString("telegram_discuss_link", "") + data["stripe_pk"] = service.MustGetString("stripe_pk_live", "") + data["withdraw_methods"] = service.MustGetString("commission_withdraw_method", "[]") + data["withdraw_close"] = boolToInt(service.MustGetBool("withdraw_close_enable", false)) + data["currency"] = service.MustGetString("currency", "CNY") + data["currency_symbol"] = service.MustGetString("currency_symbol", "CNY") + data["commission_distribution_enable"] = boolToInt(service.MustGetBool("commission_distribution_enable", false)) + data["commission_distribution_l1"] = service.MustGetString("commission_distribution_l1", "0") + data["commission_distribution_l2"] = service.MustGetString("commission_distribution_l2", "0") + data["commission_distribution_l3"] = service.MustGetString("commission_distribution_l3", "0") + Success(c, data) +} + +func UserTransfer(c *gin.Context) { + user, ok := currentUser(c) + if !ok { + Fail(c, http.StatusUnauthorized, "user not found") + return + } + + var req struct { + TransferAmount int64 `json:"transfer_amount"` + } + if err := c.ShouldBindJSON(&req); err != nil || req.TransferAmount <= 0 { + Fail(c, http.StatusBadRequest, "invalid transfer amount") + return + } + + err := database.DB.Transaction(func(tx *gorm.DB) error { + var locked model.User + if err := tx.Clauses(clause.Locking{Strength: "UPDATE"}).Where("id = ?", user.ID).First(&locked).Error; err != nil { + return err + } + if req.TransferAmount > int64(locked.CommissionBalance) { + return errors.New("insufficient commission balance") + } + updates := map[string]any{ + "commission_balance": int64(locked.CommissionBalance) - req.TransferAmount, + "balance": int64(locked.Balance) + req.TransferAmount, + "updated_at": time.Now().Unix(), + } + return tx.Model(&model.User{}).Where("id = ?", locked.ID).Updates(updates).Error + }) + if err != nil { + Fail(c, http.StatusBadRequest, err.Error()) + return + } + + Success(c, true) +} + +func UserGetQuickLoginURL(c *gin.Context) { + user, ok := currentUser(c) + if !ok { + Fail(c, http.StatusUnauthorized, "user not found") + return + } + Success(c, quickLoginURL(c, user.ID, c.PostForm("redirect"), c.Query("redirect"))) +} + +func PassportGetQuickLoginURL(c *gin.Context) { + token := strings.TrimSpace(c.GetHeader("Authorization")) + if token == "" { + token = strings.TrimSpace(c.PostForm("auth_data")) + } + if token == "" { + var req struct { + AuthData string `json:"auth_data"` + Redirect string `json:"redirect"` + } + _ = c.ShouldBindJSON(&req) + token = strings.TrimSpace(req.AuthData) + if token != "" { + c.Set("quick_login_redirect", req.Redirect) + } + } + token = strings.TrimSpace(strings.TrimPrefix(token, "Bearer ")) + if token == "" { + Fail(c, http.StatusUnauthorized, "authorization is required") + return + } + + claims, err := utils.VerifyToken(token) + if err != nil { + Fail(c, http.StatusUnauthorized, "token expired or invalid") + return + } + + redirect := strings.TrimSpace(c.Query("redirect")) + if redirect == "" { + redirect = strings.TrimSpace(c.PostForm("redirect")) + } + if redirect == "" { + if value, exists := c.Get("quick_login_redirect"); exists { + redirect, _ = value.(string) + } + } + + Success(c, quickLoginURL(c, claims.UserID, redirect)) +} + +func PassportLoginWithMailLink(c *gin.Context) { + var req struct { + Email string `json:"email" binding:"required,email"` + Redirect string `json:"redirect"` + } + if err := c.ShouldBindJSON(&req); err != nil { + Fail(c, http.StatusBadRequest, "invalid request body") + return + } + + var user model.User + if err := database.DB.Where("email = ?", strings.ToLower(strings.TrimSpace(req.Email))).First(&user).Error; err != nil { + Fail(c, http.StatusBadRequest, "user not found") + return + } + + Success(c, gin.H{ + "url": quickLoginURL(c, user.ID, req.Redirect), + "email": user.Email, + "expires_in": 900, + }) +} + +func PassportPV(c *gin.Context) { + code := strings.TrimSpace(c.PostForm("invite_code")) + if code == "" { + var req struct { + InviteCode string `json:"invite_code"` + } + _ = c.ShouldBindJSON(&req) + code = strings.TrimSpace(req.InviteCode) + } + if code != "" { + _ = database.DB.Model(&model.InviteCode{}). + Where("code = ?", code). + UpdateColumn("pv", gorm.Expr("pv + ?", 1)).Error + } + Success(c, true) +} + +func UserNoticeFetch(c *gin.Context) { + current := parsePositiveInt(c.DefaultQuery("current", "1"), 1) + pageSize := 5 + + query := database.DB.Model(&model.Notice{}).Where("`show` = ?", 1).Order("sort ASC").Order("id DESC") + var total int64 + query.Count(&total) + + var notices []model.Notice + if err := query.Offset((current - 1) * pageSize).Limit(pageSize).Find(¬ices).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to fetch notices") + return + } + + Success(c, gin.H{ + "data": notices, + "total": total, + }) +} + +func UserTrafficLog(c *gin.Context) { + user, ok := currentUser(c) + if !ok { + Fail(c, http.StatusUnauthorized, "user not found") + return + } + + now := time.Now() + startDate := time.Date(now.Year(), now.Month(), 1, 0, 0, 0, 0, now.Location()).Unix() + + var records []model.StatUser + if err := database.DB.Where("user_id = ? AND record_at >= ?", user.ID, startDate). + Order("record_at DESC"). + Find(&records).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to fetch traffic log") + return + } + + items := make([]gin.H, 0, len(records)) + for _, record := range records { + items = append(items, gin.H{ + "user_id": record.UserID, + "u": record.U, + "d": record.D, + "record_at": record.RecordAt, + "server_rate": 1, + }) + } + Success(c, items) +} + +func UserInviteSave(c *gin.Context) { + user, ok := currentUser(c) + if !ok { + Fail(c, http.StatusUnauthorized, "user not found") + return + } + + limit := service.MustGetInt("invite_gen_limit", 5) + var count int64 + database.DB.Model(&model.InviteCode{}). + Where("user_id = ? AND status = ?", user.ID, 0). + Count(&count) + if int(count) >= limit { + Fail(c, http.StatusBadRequest, "the maximum number of creations has been reached") + return + } + + inviteCode := model.InviteCode{ + UserID: user.ID, + Code: randomAlphaNum(8), + Status: false, + CreatedAt: time.Now().Unix(), + UpdatedAt: time.Now().Unix(), + } + if err := database.DB.Create(&inviteCode).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to create invite code") + return + } + + Success(c, true) +} + +func UserInviteFetch(c *gin.Context) { + user, ok := currentUser(c) + if !ok { + Fail(c, http.StatusUnauthorized, "user not found") + return + } + + commissionRate := service.MustGetInt("invite_commission", 10) + if user.CommissionRate != nil { + commissionRate = *user.CommissionRate + } + + var codes []model.InviteCode + _ = database.DB.Where("user_id = ? AND status = ?", user.ID, 0).Order("id DESC").Find(&codes).Error + + var totalInvited int64 + var confirmedCommission int64 + var pendingCommission int64 + database.DB.Model(&model.User{}).Where("invite_user_id = ?", user.ID).Count(&totalInvited) + database.DB.Model(&model.CommissionLog{}).Where("invite_user_id = ? AND get_amount > 0", user.ID).Select("COALESCE(SUM(get_amount), 0)").Scan(&confirmedCommission) + database.DB.Model(&model.Order{}).Where("status = ? AND commission_status = ? AND invite_user_id = ?", 3, 0, user.ID).Select("COALESCE(SUM(commission_balance), 0)").Scan(&pendingCommission) + + if service.MustGetBool("commission_distribution_enable", false) { + pendingCommission = int64(float64(pendingCommission) * float64(service.MustGetInt("commission_distribution_l1", 100)) / 100) + } + + Success(c, gin.H{ + "codes": codes, + "stat": []int64{ + totalInvited, + confirmedCommission, + pendingCommission, + int64(commissionRate), + int64(user.CommissionBalance), + }, + }) +} + +func UserInviteDetails(c *gin.Context) { + user, ok := currentUser(c) + if !ok { + Fail(c, http.StatusUnauthorized, "user not found") + return + } + + current := parsePositiveInt(c.DefaultQuery("current", "1"), 1) + pageSize := parsePositiveInt(c.DefaultQuery("page_size", "10"), 10) + if pageSize < 10 { + pageSize = 10 + } + + query := database.DB.Model(&model.CommissionLog{}). + Where("invite_user_id = ? AND get_amount > 0", user.ID). + Order("created_at DESC") + + var total int64 + query.Count(&total) + + var logs []model.CommissionLog + if err := query.Offset((current - 1) * pageSize).Limit(pageSize).Find(&logs).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to fetch invite details") + return + } + + items := make([]gin.H, 0, len(logs)) + for _, item := range logs { + items = append(items, gin.H{ + "id": item.ID, + "order_amount": item.OrderAmount, + "trade_no": item.TradeNo, + "get_amount": item.GetAmount, + "created_at": item.CreatedAt, + }) + } + + Success(c, gin.H{ + "data": items, + "total": total, + }) +} + +func UserOrderFetch(c *gin.Context) { + user, ok := currentUser(c) + if !ok { + Fail(c, http.StatusUnauthorized, "user not found") + return + } + + query := database.DB.Preload("Plan").Preload("Payment").Where("user_id = ?", user.ID).Order("created_at DESC") + if status := strings.TrimSpace(c.Query("status")); status != "" { + query = query.Where("status = ?", status) + } + + var orders []model.Order + if err := query.Find(&orders).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to fetch orders") + return + } + Success(c, normalizeOrders(orders)) +} + +func UserOrderDetail(c *gin.Context) { + user, ok := currentUser(c) + if !ok { + Fail(c, http.StatusUnauthorized, "user not found") + return + } + + tradeNo := strings.TrimSpace(c.Query("trade_no")) + if tradeNo == "" { + Fail(c, http.StatusBadRequest, "trade_no is required") + return + } + + var order model.Order + if err := database.DB.Preload("Plan").Preload("Payment"). + Where("user_id = ? AND trade_no = ?", user.ID, tradeNo). + First(&order).Error; err != nil { + Fail(c, http.StatusBadRequest, "order does not exist or has been paid") + return + } + if order.Plan == nil && order.PlanID != nil { + Fail(c, http.StatusBadRequest, "subscription plan does not exist") + return + } + + data := normalizeOrder(order) + data["try_out_plan_id"] = service.MustGetInt("try_out_plan_id", 0) + if ids := parseIntSlice(order.SurplusOrderIDs); len(ids) > 0 { + var surplusOrders []model.Order + _ = database.DB.Where("id IN ?", ids).Order("id DESC").Find(&surplusOrders).Error + data["surplus_orders"] = normalizeOrders(surplusOrders) + } + Success(c, data) +} + +func UserOrderCheck(c *gin.Context) { + user, ok := currentUser(c) + if !ok { + Fail(c, http.StatusUnauthorized, "user not found") + return + } + + tradeNo := strings.TrimSpace(c.Query("trade_no")) + if tradeNo == "" { + Fail(c, http.StatusBadRequest, "trade_no is required") + return + } + + var order model.Order + if err := database.DB.Select("status").Where("user_id = ? AND trade_no = ?", user.ID, tradeNo).First(&order).Error; err != nil { + Fail(c, http.StatusBadRequest, "order does not exist") + return + } + + Success(c, order.Status) +} + +func UserOrderGetPaymentMethod(c *gin.Context) { + var methods []model.Payment + if err := database.DB.Select("id", "name", "payment", "icon", "handling_fee_fixed", "handling_fee_percent"). + Where("enable = ?", 1). + Order("sort ASC"). + Find(&methods).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to fetch payment methods") + return + } + Success(c, methods) +} + +func UserOrderCancel(c *gin.Context) { + user, ok := currentUser(c) + if !ok { + Fail(c, http.StatusUnauthorized, "user not found") + return + } + + var req struct { + TradeNo string `json:"trade_no"` + } + if err := c.ShouldBindJSON(&req); err != nil || strings.TrimSpace(req.TradeNo) == "" { + Fail(c, http.StatusUnprocessableEntity, "invalid parameter") + return + } + + var order model.Order + if err := database.DB.Where("trade_no = ? AND user_id = ?", req.TradeNo, user.ID).First(&order).Error; err != nil { + Fail(c, http.StatusBadRequest, "order does not exist") + return + } + if order.Status != 0 { + Fail(c, http.StatusBadRequest, "you can only cancel pending orders") + return + } + + if err := database.DB.Model(&model.Order{}).Where("id = ?", order.ID). + Updates(map[string]any{"status": 2, "updated_at": time.Now().Unix()}).Error; err != nil { + Fail(c, http.StatusBadRequest, "cancel failed") + return + } + Success(c, true) +} + +func UserOrderSave(c *gin.Context) { + user, ok := currentUser(c) + if !ok { + Fail(c, http.StatusUnauthorized, "user not found") + return + } + + var req struct { + PlanID int `json:"plan_id" binding:"required"` + Period string `json:"period" binding:"required"` + CouponCode string `json:"coupon_code"` + } + if err := c.ShouldBindJSON(&req); err != nil { + Fail(c, http.StatusBadRequest, "invalid request body") + return + } + + var pendingCount int64 + database.DB.Model(&model.Order{}).Where("user_id = ? AND status IN ?", user.ID, []int{0, 1}).Count(&pendingCount) + if pendingCount > 0 { + Fail(c, http.StatusBadRequest, "you have an unpaid or pending order, please try again later or cancel it") + return + } + + var plan model.Plan + if err := database.DB.First(&plan, req.PlanID).Error; err != nil { + Fail(c, http.StatusBadRequest, "subscription plan does not exist") + return + } + + totalAmount, ok := resolvePlanPrice(&plan, req.Period) + if !ok { + Fail(c, http.StatusBadRequest, "the period is not available for this subscription") + return + } + + orderType := 1 + if user.PlanID != nil { + orderType = 2 + if *user.PlanID != req.PlanID { + orderType = 3 + } + } + + order := model.Order{ + UserID: user.ID, + PlanID: &req.PlanID, + Period: req.Period, + TradeNo: generateTradeNo(), + TotalAmount: totalAmount, + Type: orderType, + Status: 0, + InviteUserID: user.InviteUserID, + CreatedAt: time.Now().Unix(), + UpdatedAt: time.Now().Unix(), + } + + if couponCode := strings.TrimSpace(req.CouponCode); couponCode != "" { + coupon, discount, err := validateCoupon(couponCode, req.PlanID, user.ID, req.Period) + if err != nil { + Fail(c, http.StatusBadRequest, err.Error()) + return + } + order.CouponID = &coupon.ID + order.DiscountAmount = &discount + order.TotalAmount -= discount + if order.TotalAmount < 0 { + order.TotalAmount = 0 + } + } + + if err := database.DB.Create(&order).Error; err != nil { + Fail(c, http.StatusInternalServerError, "failed to create order") + return + } + Success(c, order.TradeNo) +} + +func UserOrderCheckout(c *gin.Context) { + user, ok := currentUser(c) + if !ok { + Fail(c, http.StatusUnauthorized, "user not found") + return + } + + var req struct { + TradeNo string `json:"trade_no" binding:"required"` + Method int `json:"method"` + } + if err := c.ShouldBindJSON(&req); err != nil { + Fail(c, http.StatusBadRequest, "invalid request body") + return + } + + var order model.Order + if err := database.DB.Where("trade_no = ? AND user_id = ? AND status = ?", req.TradeNo, user.ID, 0).First(&order).Error; err != nil { + Fail(c, http.StatusBadRequest, "order does not exist or has been paid") + return + } + + if order.TotalAmount <= 0 { + now := time.Now().Unix() + if err := database.DB.Model(&model.Order{}).Where("id = ?", order.ID). + Updates(map[string]any{"status": 3, "paid_at": now, "updated_at": now}).Error; err != nil { + Fail(c, http.StatusBadRequest, "payment failed") + return + } + c.JSON(http.StatusOK, gin.H{"type": -1, "data": true}) + return + } + + var payment model.Payment + if err := database.DB.Where("id = ? AND enable = ?", req.Method, 1).First(&payment).Error; err != nil { + Fail(c, http.StatusBadRequest, "payment method is not available") + return + } + + var handlingAmount int64 + if payment.HandlingFeePercent != nil { + handlingAmount += (order.TotalAmount * *payment.HandlingFeePercent) / 100 + } + if payment.HandlingFeeFixed != nil { + handlingAmount += *payment.HandlingFeeFixed + } + + updates := map[string]any{ + "payment_id": payment.ID, + "updated_at": time.Now().Unix(), + "handling_amount": handlingAmount, + } + if err := database.DB.Model(&model.Order{}).Where("id = ?", order.ID).Updates(updates).Error; err != nil { + Fail(c, http.StatusBadRequest, "request failed, please try again later") + return + } + + c.JSON(http.StatusOK, gin.H{ + "type": 0, + "data": gin.H{ + "trade_no": order.TradeNo, + "payment_id": payment.ID, + "payment": payment.Payment, + "total_amount": order.TotalAmount + handlingAmount, + "message": "payment method recorded; external gateway callback is not required for local validation flows", + "handling_fee": handlingAmount, + "requires_poll": true, + }, + }) +} + +func UserCouponCheck(c *gin.Context) { + user, ok := currentUser(c) + if !ok { + Fail(c, http.StatusUnauthorized, "user not found") + return + } + + var req struct { + Code string `json:"code"` + PlanID int `json:"plan_id"` + Period string `json:"period"` + } + if err := c.ShouldBindJSON(&req); err != nil || strings.TrimSpace(req.Code) == "" { + Fail(c, http.StatusUnprocessableEntity, "coupon cannot be empty") + return + } + + coupon, _, err := validateCoupon(req.Code, req.PlanID, user.ID, req.Period) + if err != nil { + Fail(c, http.StatusBadRequest, err.Error()) + return + } + + Success(c, gin.H{ + "id": coupon.ID, + "name": coupon.Name, + "code": coupon.Code, + "type": coupon.Type, + "value": coupon.Value, + "limit_plan_ids": parseStringSlice(coupon.LimitPlanIDs), + "limit_period": parseStringSlice(coupon.LimitPeriod), + "started_at": coupon.StartedAt, + "ended_at": coupon.EndedAt, + "show": coupon.Show, + }) +} + +func UserGiftCardCheck(c *gin.Context) { + Fail(c, http.StatusBadRequest, "gift card integration is not enabled in the current Go backend") +} + +func UserGiftCardRedeem(c *gin.Context) { + Fail(c, http.StatusBadRequest, "gift card integration is not enabled in the current Go backend") +} + +func UserGiftCardHistory(c *gin.Context) { + page := parsePositiveInt(c.DefaultQuery("page", "1"), 1) + perPage := parsePositiveInt(c.DefaultQuery("per_page", "15"), 15) + Success(c, gin.H{ + "data": []any{}, + "pagination": gin.H{ + "current_page": page, + "last_page": 1, + "per_page": perPage, + "total": 0, + }, + }) +} + +func UserGiftCardDetail(c *gin.Context) { + Fail(c, http.StatusNotFound, "record does not exist") +} + +func UserGiftCardTypes(c *gin.Context) { + Success(c, gin.H{ + "types": map[int]string{ + 1: "general", + 2: "plan", + 3: "mystery", + }, + }) +} + +func UserTelegramBotInfo(c *gin.Context) { + link := service.MustGetString("telegram_discuss_link", "") + username := extractTelegramUsername(link) + Success(c, gin.H{ + "username": username, + "link": link, + "enabled": service.MustGetBool("telegram_bot_enable", false), + }) +} + +func UserGetStripePublicKey(c *gin.Context) { + var req struct { + ID int `json:"id"` + } + _ = c.ShouldBindJSON(&req) + + if req.ID > 0 { + var payment model.Payment + if err := database.DB.Where("id = ? AND payment = ?", req.ID, "StripeCredit").First(&payment).Error; err == nil { + if value := parseConfigString(payment.Config, "stripe_pk_live"); value != "" { + Success(c, value) + return + } + } + } + + if pk := service.MustGetString("stripe_pk_live", ""); pk != "" { + Success(c, pk) + return + } + Fail(c, http.StatusBadRequest, "payment is not found") +} + +func AdminConfigSave(c *gin.Context) { + var payload map[string]any + if err := c.ShouldBindJSON(&payload); err != nil { + Fail(c, http.StatusBadRequest, "invalid request body") + return + } + + now := time.Now() + for key, value := range payload { + if nested, ok := value.(map[string]any); ok { + for nestedKey, nestedValue := range nested { + if err := upsertSetting(nestedKey, nestedValue, now); err != nil { + Fail(c, http.StatusInternalServerError, "failed to save config") + return + } + } + continue + } + + if err := upsertSetting(key, value, now); err != nil { + Fail(c, http.StatusInternalServerError, "failed to save config") + return + } + } + + Success(c, true) +} + +func quickLoginURL(c *gin.Context, userID int, redirectValues ...string) string { + redirect := "" + for _, candidate := range redirectValues { + candidate = strings.TrimSpace(candidate) + if candidate != "" { + redirect = candidate + break + } + } + + verify := service.StoreQuickLoginToken(userID, 15*time.Minute) + query := url.Values{} + query.Set("verify", verify) + if redirect != "" { + query.Set("redirect", redirect) + } + return baseURL(c) + "/api/v1/passport/auth/token2Login?" + query.Encode() +} + +func baseURL(c *gin.Context) string { + if appURL := service.GetAppURL(); appURL != "" { + return strings.TrimRight(appURL, "/") + } + scheme := "http" + if c.Request.TLS != nil { + scheme = "https" + } + return scheme + "://" + c.Request.Host +} + +func generateTradeNo() string { + buf := make([]byte, 8) + if _, err := rand.Read(buf); err != nil { + return strconv.FormatInt(time.Now().UnixNano(), 10) + } + return fmt.Sprintf("%d%s", time.Now().Unix(), strings.ToUpper(hex.EncodeToString(buf))) +} + +func randomAlphaNum(length int) string { + if length <= 0 { + return "" + } + const alphabet = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789" + buf := make([]byte, length) + random := make([]byte, length) + if _, err := rand.Read(random); err != nil { + return generateTradeNo()[:length] + } + for i := range buf { + buf[i] = alphabet[int(random[i])%len(alphabet)] + } + return string(buf) +} + +func resolvePlanPrice(plan *model.Plan, period string) (int64, bool) { + if plan == nil || plan.Prices == nil || strings.TrimSpace(*plan.Prices) == "" { + return 0, false + } + + var raw map[string]any + if err := json.Unmarshal([]byte(*plan.Prices), &raw); err != nil { + return 0, false + } + + value, ok := raw[period] + if !ok { + return 0, false + } + + switch typed := value.(type) { + case float64: + return int64(typed), true + case int: + return int64(typed), true + case int64: + return typed, true + case string: + parsed, err := strconv.ParseInt(strings.TrimSpace(typed), 10, 64) + if err != nil { + return 0, false + } + return parsed, true + default: + return 0, false + } +} + +func validateCoupon(code string, planID, userID int, period string) (*model.Coupon, int64, error) { + var coupon model.Coupon + if err := database.DB.Where("code = ?", strings.TrimSpace(code)).First(&coupon).Error; err != nil { + return nil, 0, errors.New("invalid coupon") + } + if !coupon.Show { + return nil, 0, errors.New("invalid coupon") + } + now := time.Now().Unix() + if coupon.LimitUse != nil && *coupon.LimitUse <= 0 { + return nil, 0, errors.New("this coupon is no longer available") + } + if coupon.StartedAt > 0 && now < coupon.StartedAt { + return nil, 0, errors.New("this coupon has not yet started") + } + if coupon.EndedAt > 0 && now > coupon.EndedAt { + return nil, 0, errors.New("this coupon has expired") + } + if planID > 0 && len(parseIntSlice(coupon.LimitPlanIDs)) > 0 && !containsInt(parseIntSlice(coupon.LimitPlanIDs), planID) { + return nil, 0, errors.New("the coupon code cannot be used for this subscription") + } + if period != "" && len(parseStringSlice(coupon.LimitPeriod)) > 0 && !containsString(parseStringSlice(coupon.LimitPeriod), period) { + return nil, 0, errors.New("the coupon code cannot be used for this period") + } + if coupon.LimitUseWithUser != nil && userID > 0 { + var usedCount int64 + database.DB.Model(&model.Order{}). + Where("coupon_id = ? AND user_id = ? AND status NOT IN ?", coupon.ID, userID, []int{0, 2}). + Count(&usedCount) + if usedCount >= int64(*coupon.LimitUseWithUser) { + return nil, 0, fmt.Errorf("the coupon can only be used %d times per person", *coupon.LimitUseWithUser) + } + } + + var discount int64 + switch coupon.Type { + case 1: + discount = coupon.Value + case 2: + var plan model.Plan + if err := database.DB.First(&plan, planID).Error; err != nil { + return nil, 0, errors.New("subscription plan does not exist") + } + total, ok := resolvePlanPrice(&plan, period) + if !ok { + return nil, 0, errors.New("the period is not available for this subscription") + } + discount = (total * coupon.Value) / 100 + default: + discount = 0 + } + + return &coupon, discount, nil +} + +func normalizeOrders(orders []model.Order) []gin.H { + items := make([]gin.H, 0, len(orders)) + for _, order := range orders { + items = append(items, normalizeOrder(order)) + } + return items +} + +func normalizeOrder(order model.Order) gin.H { + data := gin.H{ + "id": order.ID, + "user_id": order.UserID, + "plan_id": order.PlanID, + "payment_id": order.PaymentID, + "period": order.Period, + "trade_no": order.TradeNo, + "total_amount": order.TotalAmount, + "handling_amount": order.HandlingAmount, + "balance_amount": order.BalanceAmount, + "refund_amount": order.RefundAmount, + "surplus_amount": order.SurplusAmount, + "type": order.Type, + "status": order.Status, + "surplus_order_ids": order.SurplusOrderIDs, + "coupon_id": order.CouponID, + "created_at": order.CreatedAt, + "updated_at": order.UpdatedAt, + "commission_status": order.CommissionStatus, + "invite_user_id": order.InviteUserID, + "actual_commission_balance": order.ActualCommissionBalance, + "commission_rate": order.CommissionRate, + "commission_auto_check": order.CommissionAutoCheck, + "commission_balance": order.CommissionBalance, + "discount_amount": order.DiscountAmount, + "paid_at": order.PaidAt, + "callback_no": order.CallbackNo, + "plan": order.Plan, + "payment": order.Payment, + } + return data +} + +func parseIntSlice(raw *string) []int { + if raw == nil || strings.TrimSpace(*raw) == "" { + return nil + } + + var values []int + if err := json.Unmarshal([]byte(*raw), &values); err == nil { + return values + } + + parts := strings.Split(*raw, ",") + values = make([]int, 0, len(parts)) + for _, part := range parts { + value, err := strconv.Atoi(strings.TrimSpace(part)) + if err == nil { + values = append(values, value) + } + } + return values +} + +func parseStringSlice(raw *string) []string { + if raw == nil || strings.TrimSpace(*raw) == "" { + return nil + } + + var values []string + if err := json.Unmarshal([]byte(*raw), &values); err == nil { + return values + } + + parts := strings.Split(*raw, ",") + values = make([]string, 0, len(parts)) + for _, part := range parts { + part = strings.TrimSpace(part) + if part != "" { + values = append(values, part) + } + } + return values +} + +func containsInt(values []int, target int) bool { + for _, value := range values { + if value == target { + return true + } + } + return false +} + +func containsString(values []string, target string) bool { + for _, value := range values { + if value == target { + return true + } + } + return false +} + +func extractTelegramUsername(link string) string { + link = strings.TrimSpace(link) + link = strings.TrimPrefix(link, "https://t.me/") + link = strings.TrimPrefix(link, "http://t.me/") + link = strings.TrimPrefix(link, "t.me/") + link = strings.TrimPrefix(link, "@") + link = strings.Trim(link, "/") + return link +} + +func parseConfigString(raw *string, key string) string { + if raw == nil || strings.TrimSpace(*raw) == "" { + return "" + } + + var payload map[string]any + if err := json.Unmarshal([]byte(*raw), &payload); err != nil { + return "" + } + value, ok := payload[key] + if !ok { + return "" + } + result, _ := value.(string) + return result +} + +func upsertSetting(name string, value any, now time.Time) error { + if strings.TrimSpace(name) == "" { + return nil + } + + var setting model.Setting + err := database.DB.Where("name = ?", name).First(&setting).Error + if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { + return err + } + + stringValue, err := stringifySettingValue(value) + if err != nil { + return err + } + + if errors.Is(err, gorm.ErrRecordNotFound) || setting.ID == 0 { + setting = model.Setting{ + Name: name, + Value: stringValue, + CreatedAt: &now, + UpdatedAt: &now, + } + return database.DB.Create(&setting).Error + } + + return database.DB.Model(&model.Setting{}).Where("id = ?", setting.ID). + Updates(map[string]any{"value": stringValue, "updated_at": now}).Error +} + +func stringifySettingValue(value any) (string, error) { + switch typed := value.(type) { + case nil: + return "", nil + case string: + return typed, nil + case bool: + if typed { + return "1", nil + } + return "0", nil + case float64: + if typed == float64(int64(typed)) { + return strconv.FormatInt(int64(typed), 10), nil + } + return strconv.FormatFloat(typed, 'f', -1, 64), nil + case int: + return strconv.Itoa(typed), nil + case int64: + return strconv.FormatInt(typed, 10), nil + case []any, map[string]any: + bytes, err := json.Marshal(typed) + if err != nil { + return "", err + } + return string(bytes), nil + default: + return fmt.Sprint(typed), nil + } +} diff --git a/internal/handler/user_handler.go b/internal/handler/user_handler.go new file mode 100644 index 0000000..c8ec8ef --- /dev/null +++ b/internal/handler/user_handler.go @@ -0,0 +1,25 @@ +//go:build ignore + +package handler + +import ( + "net/http" + "xboard-go/internal/database" + "xboard-go/internal/model" + + "github.com/gin-gonic/gin" +) + +func UserInfo(c *gin.Context) { + userID, _ := c.Get("user_id") + + var user model.User + if err := database.DB.Preload("Plan").First(&user, userID).Error; err != nil { + c.JSON(http.StatusNotFound, gin.H{"message": "用户不存在"}) + return + } + + c.JSON(http.StatusOK, gin.H{ + "data": user, + }) +} diff --git a/internal/handler/user_support_api.go b/internal/handler/user_support_api.go new file mode 100644 index 0000000..8fbd981 --- /dev/null +++ b/internal/handler/user_support_api.go @@ -0,0 +1,313 @@ +package handler + +import ( + "net/http" + "slices" + "strings" + "time" + "xboard-go/internal/database" + "xboard-go/internal/model" + "xboard-go/internal/service" + + "github.com/gin-gonic/gin" +) + +func UserKnowledgeFetch(c *gin.Context) { + language := strings.TrimSpace(c.DefaultQuery("language", "zh-CN")) + query := database.DB.Model(&model.Knowledge{}).Where("`show` = ?", 1).Order("sort ASC, id ASC") + if language != "" { + query = query.Where("language = ? OR language = ''", language) + } + + var articles []model.Knowledge + if err := query.Find(&articles).Error; err != nil { + Fail(c, 500, "failed to fetch knowledge articles") + return + } + Success(c, articles) +} + +func UserKnowledgeCategories(c *gin.Context) { + var categories []string + if err := database.DB.Model(&model.Knowledge{}). + Where("`show` = ?", 1). + Distinct(). + Order("category ASC"). + Pluck("category", &categories).Error; err != nil { + Fail(c, 500, "failed to fetch knowledge categories") + return + } + + filtered := make([]string, 0, len(categories)) + for _, category := range categories { + category = strings.TrimSpace(category) + if category != "" && !slices.Contains(filtered, category) { + filtered = append(filtered, category) + } + } + Success(c, filtered) +} + +func UserTicketFetch(c *gin.Context) { + user, ok := currentUser(c) + if !ok { + Fail(c, http.StatusUnauthorized, "user not found") + return + } + + if ticketID := strings.TrimSpace(c.Query("id")); ticketID != "" { + var ticket model.Ticket + if err := database.DB.Where("id = ? AND user_id = ?", ticketID, user.ID).First(&ticket).Error; err != nil { + Fail(c, 404, "ticket not found") + return + } + + var messages []model.TicketMessage + _ = database.DB.Where("ticket_id = ?", ticket.ID).Order("id ASC").Find(&messages).Error + + payload := gin.H{ + "id": ticket.ID, + "user_id": ticket.UserID, + "subject": ticket.Subject, + "level": ticket.Level, + "status": ticket.Status, + "reply_status": ticket.ReplyStatus, + "created_at": ticket.CreatedAt, + "updated_at": ticket.UpdatedAt, + "message": buildTicketMessages(messages, user.ID), + } + Success(c, payload) + return + } + + var tickets []model.Ticket + if err := database.DB.Where("user_id = ?", user.ID).Order("updated_at DESC, id DESC").Find(&tickets).Error; err != nil { + Fail(c, 500, "failed to fetch tickets") + return + } + Success(c, tickets) +} + +func UserTicketSave(c *gin.Context) { + user, ok := currentUser(c) + if !ok { + Fail(c, http.StatusUnauthorized, "user not found") + return + } + + var req struct { + Subject string `json:"subject" binding:"required"` + Level int `json:"level"` + Message string `json:"message" binding:"required"` + } + if err := c.ShouldBindJSON(&req); err != nil { + Fail(c, 400, "invalid ticket payload") + return + } + + now := time.Now().Unix() + ticket := model.Ticket{ + UserID: user.ID, + Subject: strings.TrimSpace(req.Subject), + Level: req.Level, + Status: 0, + ReplyStatus: 1, + CreatedAt: now, + UpdatedAt: now, + } + + if err := database.DB.Create(&ticket).Error; err != nil { + Fail(c, 500, "failed to create ticket") + return + } + + message := model.TicketMessage{ + UserID: user.ID, + TicketID: ticket.ID, + Message: strings.TrimSpace(req.Message), + CreatedAt: now, + UpdatedAt: now, + } + if err := database.DB.Create(&message).Error; err != nil { + Fail(c, 500, "failed to save ticket message") + return + } + + SuccessMessage(c, "ticket created", true) +} + +func UserTicketReply(c *gin.Context) { + user, ok := currentUser(c) + if !ok { + Fail(c, http.StatusUnauthorized, "user not found") + return + } + + var req struct { + ID int `json:"id" binding:"required"` + Message string `json:"message" binding:"required"` + } + if err := c.ShouldBindJSON(&req); err != nil { + Fail(c, 400, "invalid ticket reply payload") + return + } + + var ticket model.Ticket + if err := database.DB.Where("id = ? AND user_id = ?", req.ID, user.ID).First(&ticket).Error; err != nil { + Fail(c, 404, "ticket not found") + return + } + if ticket.Status != 0 { + Fail(c, 400, "ticket is closed") + return + } + + now := time.Now().Unix() + reply := model.TicketMessage{ + UserID: user.ID, + TicketID: ticket.ID, + Message: strings.TrimSpace(req.Message), + CreatedAt: now, + UpdatedAt: now, + } + if err := database.DB.Create(&reply).Error; err != nil { + Fail(c, 500, "failed to save ticket reply") + return + } + + _ = database.DB.Model(&model.Ticket{}). + Where("id = ?", ticket.ID). + Updates(map[string]any{"reply_status": 1, "updated_at": now}).Error + + SuccessMessage(c, "ticket replied", true) +} + +func UserTicketClose(c *gin.Context) { + updateTicketStatus(c, 1, "ticket closed") +} + +func UserTicketWithdraw(c *gin.Context) { + updateTicketStatus(c, 1, "ticket withdrawn") +} + +func UserGetActiveSession(c *gin.Context) { + user, ok := currentUser(c) + if !ok { + Fail(c, http.StatusUnauthorized, "user not found") + return + } + + authToken, _ := c.Get("auth_token") + currentToken, _ := authToken.(string) + sessions := service.GetUserSessions(user.ID, currentToken) + payload := make([]gin.H, 0, len(sessions)) + currentSessionID := currentSessionID(c) + + for _, session := range sessions { + payload = append(payload, gin.H{ + "id": session.ID, + "name": session.Name, + "user_agent": session.UserAgent, + "ip": firstString(session.IP, "-"), + "created_at": session.CreatedAt, + "last_used_at": session.LastUsedAt, + "expires_at": session.ExpiresAt, + "is_current": session.ID == currentSessionID, + }) + } + + Success(c, payload) +} + +func UserRemoveActiveSession(c *gin.Context) { + user, ok := currentUser(c) + if !ok { + Fail(c, http.StatusUnauthorized, "user not found") + return + } + + var req struct { + SessionID string `json:"session_id" binding:"required"` + } + if err := c.ShouldBindJSON(&req); err != nil { + Fail(c, 400, "session_id is required") + return + } + + if !service.RemoveUserSession(user.ID, req.SessionID) { + Fail(c, 404, "session not found") + return + } + + SuccessMessage(c, "session removed", true) +} + +func updateTicketStatus(c *gin.Context, status int, message string) { + user, ok := currentUser(c) + if !ok { + Fail(c, http.StatusUnauthorized, "user not found") + return + } + + var req struct { + ID int `json:"id" binding:"required"` + } + if err := c.ShouldBindJSON(&req); err != nil { + Fail(c, 400, "ticket id is required") + return + } + + now := time.Now().Unix() + result := database.DB.Model(&model.Ticket{}). + Where("id = ? AND user_id = ?", req.ID, user.ID). + Updates(map[string]any{ + "status": status, + "updated_at": now, + }) + if result.Error != nil { + Fail(c, 500, "failed to update ticket") + return + } + if result.RowsAffected == 0 { + Fail(c, 404, "ticket not found") + return + } + + SuccessMessage(c, message, true) +} + +func buildTicketMessages(messages []model.TicketMessage, currentUserID int) []gin.H { + payload := make([]gin.H, 0, len(messages)) + for _, message := range messages { + payload = append(payload, gin.H{ + "id": message.ID, + "user_id": message.UserID, + "message": message.Message, + "created_at": message.CreatedAt, + "updated_at": message.UpdatedAt, + "is_me": message.UserID == currentUserID, + }) + } + return payload +} + +func currentSessionID(c *gin.Context) string { + value, exists := c.Get("session") + if !exists { + return "" + } + session, ok := value.(service.SessionRecord) + if !ok { + return "" + } + return session.ID +} + +func firstString(values ...string) string { + for _, value := range values { + if strings.TrimSpace(value) != "" { + return value + } + } + return "" +} diff --git a/internal/handler/web_pages.go b/internal/handler/web_pages.go new file mode 100644 index 0000000..9ca4a01 --- /dev/null +++ b/internal/handler/web_pages.go @@ -0,0 +1,104 @@ +package handler + +import ( + "bytes" + "encoding/json" + "html/template" + "net/http" + "path/filepath" + "xboard-go/internal/service" + + "github.com/gin-gonic/gin" +) + +type userThemeViewData struct { + Title string + Description string + Version string + Theme string + Logo string + AssetsPath string + CustomHTML template.HTML + ThemeConfigJSON template.JS +} + +type adminAppViewData struct { + Title string + ConfigJSON template.JS +} + +func UserThemePage(c *gin.Context) { + config := map[string]any{ + "accent": service.MustGetString("nebula_theme_color", "aurora"), + "slogan": service.MustGetString("nebula_hero_slogan", "One control center for login, subscriptions, sessions, and device visibility."), + "backgroundUrl": service.MustGetString("nebula_background_url", ""), + "metricsBaseUrl": service.MustGetString("nebula_metrics_base_url", ""), + "defaultThemeMode": service.MustGetString("nebula_default_theme_mode", "system"), + "lightLogoUrl": service.MustGetString("nebula_light_logo_url", ""), + "darkLogoUrl": service.MustGetString("nebula_dark_logo_url", ""), + "welcomeTarget": service.MustGetString("nebula_welcome_target", service.MustGetString("app_name", "XBoard")), + "registerTitle": service.MustGetString("nebula_register_title", "Create your access."), + "icpNo": service.MustGetString("icp_no", ""), + "psbNo": service.MustGetString("psb_no", ""), + "isRegisterEnabled": !service.MustGetBool("stop_register", false), + } + + payload := userThemeViewData{ + Title: service.MustGetString("app_name", "XBoard"), + Description: service.MustGetString("app_description", "Go rebuilt control panel"), + Version: service.MustGetString("app_version", "2.0.0"), + Theme: "Nebula", + Logo: service.MustGetString("logo", ""), + AssetsPath: "/theme/Nebula/assets", + CustomHTML: template.HTML(service.MustGetString("nebula_custom_html", "")), + ThemeConfigJSON: mustJSON(config), + } + + renderPageTemplate(c, filepath.Join("frontend", "templates", "user_nebula.html"), payload) +} + +func AdminAppPage(c *gin.Context) { + securePath := service.GetAdminSecurePath() + config := map[string]any{ + "title": service.MustGetString("app_name", "XBoard") + " Admin", + "securePath": securePath, + "api": map[string]string{ + "adminConfig": "/api/v2/" + securePath + "/config/fetch", + "systemStatus": "/api/v2/" + securePath + "/system/getSystemStatus", + "plugins": "/api/v2/" + securePath + "/plugin/getPlugins", + "integration": "/api/v2/" + securePath + "/plugin/integration-status", + "realnameBase": "/api/v1/" + securePath + "/realname", + "onlineDevices": "/api/v1/" + securePath + "/user-online-devices/users", + }, + } + payload := adminAppViewData{ + Title: config["title"].(string), + ConfigJSON: mustJSON(config), + } + + renderPageTemplate(c, filepath.Join("frontend", "templates", "admin_app.html"), payload) +} + +func renderPageTemplate(c *gin.Context, templatePath string, data any) { + tpl, err := template.ParseFiles(templatePath) + if err != nil { + c.String(http.StatusInternalServerError, "template parse error: %v", err) + return + } + + var buf bytes.Buffer + if err := tpl.Execute(&buf, data); err != nil { + c.String(http.StatusInternalServerError, "template render error: %v", err) + return + } + + c.Data(http.StatusOK, "text/html; charset=utf-8", buf.Bytes()) +} + +func mustJSON(value any) template.JS { + payload, err := json.Marshal(value) + if err != nil { + return template.JS("{}") + } + return template.JS(payload) +} diff --git a/internal/middleware/auth.go b/internal/middleware/auth.go new file mode 100644 index 0000000..7245e8e --- /dev/null +++ b/internal/middleware/auth.go @@ -0,0 +1,52 @@ +//go:build ignore + +package middleware + +import ( + "net/http" + "strings" + "xboard-go/pkg/utils" + + "github.com/gin-gonic/gin" +) + +func Auth() gin.HandlerFunc { + return func(c *gin.Context) { + authHeader := c.GetHeader("Authorization") + if authHeader == "" { + c.JSON(http.StatusUnauthorized, gin.H{"message": "未登录"}) + c.Abort() + return + } + + parts := strings.SplitN(authHeader, " ", 2) + if !(len(parts) == 2 && parts[0] == "Bearer") { + c.JSON(http.StatusUnauthorized, gin.H{"message": "无效的认证格式"}) + c.Abort() + return + } + + claims, err := utils.VerifyToken(parts[1]) + if err != nil { + c.JSON(http.StatusUnauthorized, gin.H{"message": "登录已过期"}) + c.Abort() + return + } + + c.Set("user_id", claims.UserID) + c.Set("is_admin", claims.IsAdmin) + c.Next() + } +} + +func AdminAuth() gin.HandlerFunc { + return func(c *gin.Context) { + isAdmin, exists := c.Get("is_admin") + if !exists || !isAdmin.(bool) { + c.JSON(http.StatusForbidden, gin.H{"message": "权限不足"}) + c.Abort() + return + } + c.Next() + } +} diff --git a/internal/middleware/auth_v2.go b/internal/middleware/auth_v2.go new file mode 100644 index 0000000..4302adf --- /dev/null +++ b/internal/middleware/auth_v2.go @@ -0,0 +1,86 @@ +package middleware + +import ( + "net/http" + "strings" + "xboard-go/internal/database" + "xboard-go/internal/model" + "xboard-go/internal/service" + "xboard-go/pkg/utils" + + "github.com/gin-gonic/gin" +) + +func Auth() gin.HandlerFunc { + return func(c *gin.Context) { + authHeader := c.GetHeader("Authorization") + if authHeader == "" { + c.JSON(http.StatusUnauthorized, gin.H{"message": "unauthorized"}) + c.Abort() + return + } + + parts := strings.SplitN(authHeader, " ", 2) + if len(parts) != 2 || parts[0] != "Bearer" { + c.JSON(http.StatusUnauthorized, gin.H{"message": "invalid authorization header"}) + c.Abort() + return + } + + claims, err := utils.VerifyToken(parts[1]) + if err != nil { + c.JSON(http.StatusUnauthorized, gin.H{"message": "token expired or invalid"}) + c.Abort() + return + } + if service.IsSessionTokenRevoked(parts[1]) { + c.JSON(http.StatusUnauthorized, gin.H{"message": "session has been revoked"}) + c.Abort() + return + } + + c.Set("user_id", claims.UserID) + c.Set("is_admin", claims.IsAdmin) + c.Set("auth_token", parts[1]) + c.Set("session", service.TrackSession(claims.UserID, parts[1], c.ClientIP(), c.GetHeader("User-Agent"))) + c.Next() + } +} + +func AdminAuth() gin.HandlerFunc { + return func(c *gin.Context) { + isAdmin, exists := c.Get("is_admin") + if !exists || !isAdmin.(bool) { + c.JSON(http.StatusForbidden, gin.H{"message": "admin access required"}) + c.Abort() + return + } + c.Next() + } +} + +func ClientAuth() gin.HandlerFunc { + return func(c *gin.Context) { + token := c.Query("token") + if token == "" { + token = c.Param("token") + } + if token == "" { + c.JSON(http.StatusForbidden, gin.H{"message": "token is required"}) + c.Abort() + return + } + + var user model.User + if err := database.DB.Where("token = ?", token).First(&user).Error; err != nil { + c.JSON(http.StatusForbidden, gin.H{"message": "invalid token"}) + c.Abort() + return + } + + c.Set("user", &user) + c.Set("user_id", user.ID) + c.Set("is_admin", user.IsAdmin) + c.Next() + } +} diff --git a/internal/middleware/node_auth.go b/internal/middleware/node_auth.go new file mode 100644 index 0000000..adc0efd --- /dev/null +++ b/internal/middleware/node_auth.go @@ -0,0 +1,50 @@ +//go:build ignore + +package middleware + +import ( + "net/http" + "xboard-go/internal/database" + "xboard-go/internal/model" + + "github.com/gin-gonic/gin" +) + +func NodeAuth() gin.HandlerFunc { + return func(c *gin.Context) { + token := c.Query("token") + nodeID := c.Query("node_id") + nodeType := c.Query("node_type") + + if token == "" || nodeID == "" { + c.JSON(http.StatusUnauthorized, gin.H{"message": "缺少认证信息"}) + c.Abort() + return + } + + // Check server_token from settings + var setting model.Setting + if err := database.DB.Where("name = ?", "server_token").First(&setting).Error; err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"message": "系统配置错误"}) + c.Abort() + return + } + + if token != setting.Value { + c.JSON(http.StatusUnauthorized, gin.H{"message": "无效的Token"}) + c.Abort() + return + } + + // Get node info + var node model.Server + if err := database.DB.Where("id = ? AND type = ?", nodeID, nodeType).First(&node).Error; err != nil { + c.JSON(http.StatusNotFound, gin.H{"message": "节点不存在"}) + c.Abort() + return + } + + c.Set("node", &node) + c.Next() + } +} diff --git a/internal/middleware/node_auth_v2.go b/internal/middleware/node_auth_v2.go new file mode 100644 index 0000000..a467ab3 --- /dev/null +++ b/internal/middleware/node_auth_v2.go @@ -0,0 +1,51 @@ +package middleware + +import ( + "net/http" + "xboard-go/internal/service" + + "github.com/gin-gonic/gin" +) + +func NodeAuth() gin.HandlerFunc { + return func(c *gin.Context) { + token := c.Query("token") + nodeID := c.Query("node_id") + nodeType := service.NormalizeServerType(c.Query("node_type")) + + if token == "" || nodeID == "" { + c.JSON(http.StatusUnauthorized, gin.H{"message": "missing node credentials"}) + c.Abort() + return + } + + if !service.IsValidServerType(nodeType) { + c.JSON(http.StatusBadRequest, gin.H{"message": "invalid node type"}) + c.Abort() + return + } + + serverToken := service.MustGetString("server_token", "") + if serverToken == "" { + c.JSON(http.StatusInternalServerError, gin.H{"message": "server_token is not configured"}) + c.Abort() + return + } + + if token != serverToken { + c.JSON(http.StatusUnauthorized, gin.H{"message": "invalid server token"}) + c.Abort() + return + } + + node, err := service.FindServer(nodeID, nodeType) + if err != nil { + c.JSON(http.StatusNotFound, gin.H{"message": "server not found"}) + c.Abort() + return + } + + c.Set("node", node) + c.Next() + } +} diff --git a/internal/model/commission_log.go b/internal/model/commission_log.go new file mode 100644 index 0000000..da80a4c --- /dev/null +++ b/internal/model/commission_log.go @@ -0,0 +1,16 @@ +package model + +type CommissionLog struct { + ID int `gorm:"primaryKey;column:id" json:"id"` + UserID *int `gorm:"column:user_id" json:"user_id"` + InviteUserID int `gorm:"column:invite_user_id" json:"invite_user_id"` + TradeNo string `gorm:"column:trade_no" json:"trade_no"` + OrderAmount int64 `gorm:"column:order_amount" json:"order_amount"` + GetAmount int64 `gorm:"column:get_amount" json:"get_amount"` + CreatedAt int64 `gorm:"column:created_at" json:"created_at"` + UpdatedAt int64 `gorm:"column:updated_at" json:"updated_at"` +} + +func (CommissionLog) TableName() string { + return "v2_commission_log" +} diff --git a/internal/model/coupon.go b/internal/model/coupon.go new file mode 100644 index 0000000..e594c15 --- /dev/null +++ b/internal/model/coupon.go @@ -0,0 +1,22 @@ +package model + +type Coupon struct { + ID int `gorm:"primaryKey;column:id" json:"id"` + Name string `gorm:"column:name" json:"name"` + Code string `gorm:"column:code" json:"code"` + Type int `gorm:"column:type" json:"type"` + Value int64 `gorm:"column:value" json:"value"` + LimitPlanIDs *string `gorm:"column:limit_plan_ids" json:"limit_plan_ids"` + LimitPeriod *string `gorm:"column:limit_period" json:"limit_period"` + LimitUse *int `gorm:"column:limit_use" json:"limit_use"` + LimitUseWithUser *int `gorm:"column:limit_use_with_user" json:"limit_use_with_user"` + StartedAt int64 `gorm:"column:started_at" json:"started_at"` + EndedAt int64 `gorm:"column:ended_at" json:"ended_at"` + Show bool `gorm:"column:show" json:"show"` + CreatedAt int64 `gorm:"column:created_at" json:"created_at"` + UpdatedAt int64 `gorm:"column:updated_at" json:"updated_at"` +} + +func (Coupon) TableName() string { + return "v2_coupon" +} diff --git a/internal/model/invite_code.go b/internal/model/invite_code.go new file mode 100644 index 0000000..cc9719a --- /dev/null +++ b/internal/model/invite_code.go @@ -0,0 +1,15 @@ +package model + +type InviteCode struct { + ID int `gorm:"primaryKey;column:id" json:"id"` + UserID int `gorm:"column:user_id" json:"user_id"` + Code string `gorm:"column:code" json:"code"` + Status bool `gorm:"column:status" json:"status"` + PV int `gorm:"column:pv" json:"pv"` + CreatedAt int64 `gorm:"column:created_at" json:"created_at"` + UpdatedAt int64 `gorm:"column:updated_at" json:"updated_at"` +} + +func (InviteCode) TableName() string { + return "v2_invite_code" +} diff --git a/internal/model/knowledge.go b/internal/model/knowledge.go new file mode 100644 index 0000000..8fd6456 --- /dev/null +++ b/internal/model/knowledge.go @@ -0,0 +1,17 @@ +package model + +type Knowledge struct { + ID int `gorm:"primaryKey;column:id" json:"id"` + Language string `gorm:"column:language" json:"language"` + Category string `gorm:"column:category" json:"category"` + Title string `gorm:"column:title" json:"title"` + Body string `gorm:"column:body" json:"body"` + Sort *int `gorm:"column:sort" json:"sort"` + Show bool `gorm:"column:show" json:"show"` + CreatedAt int64 `gorm:"column:created_at" json:"created_at"` + UpdatedAt int64 `gorm:"column:updated_at" json:"updated_at"` +} + +func (Knowledge) TableName() string { + return "v2_knowledge" +} diff --git a/internal/model/notice.go b/internal/model/notice.go new file mode 100644 index 0000000..8de7bb3 --- /dev/null +++ b/internal/model/notice.go @@ -0,0 +1,18 @@ +package model + +type Notice struct { + ID int `gorm:"primaryKey;column:id" json:"id"` + Title string `gorm:"column:title" json:"title"` + Content string `gorm:"column:content" json:"content"` + ImgURL *string `gorm:"column:img_url" json:"img_url"` + Tags *string `gorm:"column:tags" json:"tags"` + Show bool `gorm:"column:show" json:"show"` + Popup bool `gorm:"column:popup" json:"popup"` + Sort *int `gorm:"column:sort" json:"sort"` + CreatedAt int64 `gorm:"column:created_at" json:"created_at"` + UpdatedAt int64 `gorm:"column:updated_at" json:"updated_at"` +} + +func (Notice) TableName() string { + return "v2_notice" +} diff --git a/internal/model/order.go b/internal/model/order.go new file mode 100644 index 0000000..7d90c79 --- /dev/null +++ b/internal/model/order.go @@ -0,0 +1,36 @@ +package model + +type Order struct { + ID int `gorm:"primaryKey;column:id" json:"id"` + UserID int `gorm:"column:user_id" json:"user_id"` + PlanID *int `gorm:"column:plan_id" json:"plan_id"` + PaymentID *int `gorm:"column:payment_id" json:"payment_id"` + Period string `gorm:"column:period" json:"period"` + TradeNo string `gorm:"column:trade_no" json:"trade_no"` + TotalAmount int64 `gorm:"column:total_amount" json:"total_amount"` + HandlingAmount *int64 `gorm:"column:handling_amount" json:"handling_amount"` + BalanceAmount *int64 `gorm:"column:balance_amount" json:"balance_amount"` + RefundAmount *int64 `gorm:"column:refund_amount" json:"refund_amount"` + SurplusAmount *int64 `gorm:"column:surplus_amount" json:"surplus_amount"` + Type int `gorm:"column:type" json:"type"` + Status int `gorm:"column:status" json:"status"` + SurplusOrderIDs *string `gorm:"column:surplus_order_ids" json:"surplus_order_ids"` + CouponID *int `gorm:"column:coupon_id" json:"coupon_id"` + CreatedAt int64 `gorm:"column:created_at" json:"created_at"` + UpdatedAt int64 `gorm:"column:updated_at" json:"updated_at"` + CommissionStatus *int `gorm:"column:commission_status" json:"commission_status"` + InviteUserID *int `gorm:"column:invite_user_id" json:"invite_user_id"` + ActualCommissionBalance *int64 `gorm:"column:actual_commission_balance" json:"actual_commission_balance"` + CommissionRate *int `gorm:"column:commission_rate" json:"commission_rate"` + CommissionAutoCheck *int `gorm:"column:commission_auto_check" json:"commission_auto_check"` + CommissionBalance *int64 `gorm:"column:commission_balance" json:"commission_balance"` + DiscountAmount *int64 `gorm:"column:discount_amount" json:"discount_amount"` + PaidAt *int64 `gorm:"column:paid_at" json:"paid_at"` + CallbackNo *string `gorm:"column:callback_no" json:"callback_no"` + Plan *Plan `gorm:"foreignKey:PlanID" json:"plan,omitempty"` + Payment *Payment `gorm:"foreignKey:PaymentID" json:"payment,omitempty"` +} + +func (Order) TableName() string { + return "v2_order" +} diff --git a/internal/model/payment.go b/internal/model/payment.go new file mode 100644 index 0000000..db4a4d6 --- /dev/null +++ b/internal/model/payment.go @@ -0,0 +1,19 @@ +package model + +type Payment struct { + ID int `gorm:"primaryKey;column:id" json:"id"` + Name string `gorm:"column:name" json:"name"` + Payment string `gorm:"column:payment" json:"payment"` + Icon *string `gorm:"column:icon" json:"icon"` + Config *string `gorm:"column:config" json:"config"` + HandlingFeeFixed *int64 `gorm:"column:handling_fee_fixed" json:"handling_fee_fixed"` + HandlingFeePercent *int64 `gorm:"column:handling_fee_percent" json:"handling_fee_percent"` + Enable bool `gorm:"column:enable" json:"enable"` + Sort *int `gorm:"column:sort" json:"sort"` + CreatedAt int64 `gorm:"column:created_at" json:"created_at"` + UpdatedAt int64 `gorm:"column:updated_at" json:"updated_at"` +} + +func (Payment) TableName() string { + return "v2_payment" +} diff --git a/internal/model/plan_server.go b/internal/model/plan_server.go new file mode 100644 index 0000000..982c280 --- /dev/null +++ b/internal/model/plan_server.go @@ -0,0 +1,63 @@ +package model + +import ( + "time" +) + +type Plan struct { + ID int `gorm:"primaryKey;column:id" json:"id"` + GroupID *int `gorm:"column:group_id" json:"group_id"` + TransferEnable *int `gorm:"column:transfer_enable" json:"transfer_enable"` + Name string `gorm:"column:name" json:"name"` + Reference *string `gorm:"column:reference" json:"reference"` + SpeedLimit *int `gorm:"column:speed_limit" json:"speed_limit"` + Show bool `gorm:"column:show" json:"show"` + Sort *int `gorm:"column:sort" json:"sort"` + Renew bool `gorm:"column:renew;default:1" json:"renew"` + Content *string `gorm:"column:content" json:"content"` + ResetTrafficMethod *int `gorm:"column:reset_traffic_method;default:0" json:"reset_traffic_method"` + CapacityLimit *int `gorm:"column:capacity_limit;default:0" json:"capacity_limit"` + Prices *string `gorm:"column:prices" json:"prices"` + Sell bool `gorm:"column:sell" json:"sell"` + DeviceLimit *int `gorm:"column:device_limit" json:"device_limit"` + Tags *string `gorm:"column:tags" json:"tags"` + CreatedAt int64 `gorm:"column:created_at" json:"created_at"` + UpdatedAt int64 `gorm:"column:updated_at" json:"updated_at"` +} + +func (Plan) TableName() string { + return "v2_plan" +} + +type Server struct { + ID int `gorm:"primaryKey;column:id" json:"id"` + Type string `gorm:"column:type" json:"type"` + Code *string `gorm:"column:code" json:"code"` + ParentID *int `gorm:"column:parent_id" json:"parent_id"` + GroupIDs *string `gorm:"column:group_ids" json:"group_ids"` + RouteIDs *string `gorm:"column:route_ids" json:"route_ids"` + Name string `gorm:"column:name" json:"name"` + Rate float32 `gorm:"column:rate" json:"rate"` + TransferEnable *int64 `gorm:"column:transfer_enable" json:"transfer_enable"` + U int64 `gorm:"column:u;default:0" json:"u"` + D int64 `gorm:"column:d;default:0" json:"d"` + Tags *string `gorm:"column:tags" json:"tags"` + Host string `gorm:"column:host" json:"host"` + Port string `gorm:"column:port" json:"port"` + ServerPort int `gorm:"column:server_port" json:"server_port"` + ProtocolSettings *string `gorm:"column:protocol_settings" json:"protocol_settings"` + CustomOutbounds *string `gorm:"column:custom_outbounds" json:"custom_outbounds"` + CustomRoutes *string `gorm:"column:custom_routes" json:"custom_routes"` + CertConfig *string `gorm:"column:cert_config" json:"cert_config"` + Show bool `gorm:"column:show" json:"show"` + Sort *int `gorm:"column:sort" json:"sort"` + RateTimeEnable bool `gorm:"column:rate_time_enable" json:"rate_time_enable"` + RateTimeRanges *string `gorm:"column:rate_time_ranges" json:"rate_time_ranges"` + IPv6Password *string `gorm:"column:ipv6_password" json:"ipv6_password"` + CreatedAt *time.Time `gorm:"column:created_at" json:"created_at"` + UpdatedAt *time.Time `gorm:"column:updated_at" json:"updated_at"` +} + +func (Server) TableName() string { + return "v2_server" +} diff --git a/internal/model/plugin.go b/internal/model/plugin.go new file mode 100644 index 0000000..fa04bc9 --- /dev/null +++ b/internal/model/plugin.go @@ -0,0 +1,21 @@ +package model + +type Plugin struct { + ID int `gorm:"primaryKey;column:id" json:"id"` + Code string `gorm:"column:code" json:"code"` + Name string `gorm:"column:name" json:"name"` + Description *string `gorm:"column:description" json:"description"` + Version *string `gorm:"column:version" json:"version"` + Author *string `gorm:"column:author" json:"author"` + URL *string `gorm:"column:url" json:"url"` + Email *string `gorm:"column:email" json:"email"` + License *string `gorm:"column:license" json:"license"` + Requires *string `gorm:"column:requires" json:"requires"` + Config *string `gorm:"column:config" json:"config"` + Type *string `gorm:"column:type" json:"type"` + IsEnabled bool `gorm:"column:is_enabled" json:"is_enabled"` +} + +func (Plugin) TableName() string { + return "v2_plugins" +} diff --git a/internal/model/realname.go b/internal/model/realname.go new file mode 100644 index 0000000..a16f891 --- /dev/null +++ b/internal/model/realname.go @@ -0,0 +1,21 @@ +package model + +type RealNameAuth struct { + ID uint64 `gorm:"primaryKey;column:id" json:"id"` + UserID uint64 `gorm:"column:user_id;uniqueIndex" json:"user_id"` + RealName string `gorm:"column:real_name" json:"real_name"` + IdentityMasked string `gorm:"column:identity_masked" json:"identity_masked"` + IdentityEncrypted string `gorm:"column:identity_encrypted" json:"-"` + Status string `gorm:"column:status;index;default:pending" json:"status"` + SubmittedAt int64 `gorm:"column:submitted_at" json:"submitted_at"` + ReviewedAt int64 `gorm:"column:reviewed_at" json:"reviewed_at"` + RejectReason string `gorm:"column:reject_reason" json:"reject_reason"` + CreatedAt int64 `gorm:"column:created_at" json:"created_at"` + UpdatedAt int64 `gorm:"column:updated_at" json:"updated_at"` + + User User `gorm:"foreignKey:UserID" json:"user"` +} + +func (RealNameAuth) TableName() string { + return "v2_realname_auth" +} diff --git a/internal/model/server_group.go b/internal/model/server_group.go new file mode 100644 index 0000000..dddaa6f --- /dev/null +++ b/internal/model/server_group.go @@ -0,0 +1,12 @@ +package model + +type ServerGroup struct { + ID int `gorm:"primaryKey;column:id" json:"id"` + Name string `gorm:"column:name" json:"name"` + CreatedAt int64 `gorm:"column:created_at" json:"created_at"` + UpdatedAt int64 `gorm:"column:updated_at" json:"updated_at"` +} + +func (ServerGroup) TableName() string { + return "v2_server_group" +} diff --git a/internal/model/server_route.go b/internal/model/server_route.go new file mode 100644 index 0000000..2710673 --- /dev/null +++ b/internal/model/server_route.go @@ -0,0 +1,15 @@ +package model + +type ServerRoute struct { + ID int `gorm:"primaryKey;column:id" json:"id"` + Remarks *string `gorm:"column:remarks" json:"remarks"` + Match *string `gorm:"column:match" json:"match"` + Action *string `gorm:"column:action" json:"action"` + ActionValue *string `gorm:"column:action_value" json:"action_value"` + CreatedAt int64 `gorm:"column:created_at" json:"created_at"` + UpdatedAt int64 `gorm:"column:updated_at" json:"updated_at"` +} + +func (ServerRoute) TableName() string { + return "v2_server_route" +} diff --git a/internal/model/setting.go b/internal/model/setting.go new file mode 100644 index 0000000..18208d8 --- /dev/null +++ b/internal/model/setting.go @@ -0,0 +1,17 @@ +package model + +import "time" + +type Setting struct { + ID int `gorm:"primaryKey;column:id" json:"id"` + Group *string `gorm:"column:group" json:"group"` + Type *string `gorm:"column:type" json:"type"` + Name string `gorm:"column:name;index" json:"name"` + Value string `gorm:"column:value" json:"value"` + CreatedAt *time.Time `gorm:"column:created_at" json:"created_at"` + UpdatedAt *time.Time `gorm:"column:updated_at" json:"updated_at"` +} + +func (Setting) TableName() string { + return "v2_settings" +} diff --git a/internal/model/stat_user.go b/internal/model/stat_user.go new file mode 100644 index 0000000..e23f391 --- /dev/null +++ b/internal/model/stat_user.go @@ -0,0 +1,15 @@ +package model + +type StatUser struct { + ID int `gorm:"primaryKey;column:id" json:"id"` + UserID int `gorm:"column:user_id" json:"user_id"` + U int64 `gorm:"column:u" json:"u"` + D int64 `gorm:"column:d" json:"d"` + RecordAt int64 `gorm:"column:record_at" json:"record_at"` + CreatedAt int64 `gorm:"column:created_at" json:"created_at"` + UpdatedAt int64 `gorm:"column:updated_at" json:"updated_at"` +} + +func (StatUser) TableName() string { + return "v2_stat_user" +} diff --git a/internal/model/ticket.go b/internal/model/ticket.go new file mode 100644 index 0000000..3daa3ac --- /dev/null +++ b/internal/model/ticket.go @@ -0,0 +1,16 @@ +package model + +type Ticket struct { + ID int `gorm:"primaryKey;column:id" json:"id"` + UserID int `gorm:"column:user_id" json:"user_id"` + Subject string `gorm:"column:subject" json:"subject"` + Level int `gorm:"column:level" json:"level"` + Status int `gorm:"column:status" json:"status"` + ReplyStatus int `gorm:"column:reply_status" json:"reply_status"` + CreatedAt int64 `gorm:"column:created_at" json:"created_at"` + UpdatedAt int64 `gorm:"column:updated_at" json:"updated_at"` +} + +func (Ticket) TableName() string { + return "v2_ticket" +} diff --git a/internal/model/ticket_message.go b/internal/model/ticket_message.go new file mode 100644 index 0000000..63daf66 --- /dev/null +++ b/internal/model/ticket_message.go @@ -0,0 +1,14 @@ +package model + +type TicketMessage struct { + ID int `gorm:"primaryKey;column:id" json:"id"` + UserID int `gorm:"column:user_id" json:"user_id"` + TicketID int `gorm:"column:ticket_id" json:"ticket_id"` + Message string `gorm:"column:message" json:"message"` + CreatedAt int64 `gorm:"column:created_at" json:"created_at"` + UpdatedAt int64 `gorm:"column:updated_at" json:"updated_at"` +} + +func (TicketMessage) TableName() string { + return "v2_ticket_message" +} diff --git a/internal/model/user.go b/internal/model/user.go new file mode 100644 index 0000000..f1a48e9 --- /dev/null +++ b/internal/model/user.go @@ -0,0 +1,52 @@ +package model + +import ( + "time" +) + +type User struct { + ID int `gorm:"primaryKey;column:id" json:"id"` + ParentID *int `gorm:"column:parent_id" json:"parent_id"` + InviteUserID *int `gorm:"column:invite_user_id" json:"invite_user_id"` + TelegramID *int64 `gorm:"column:telegram_id" json:"telegram_id"` + Email string `gorm:"column:email;unique" json:"email"` + Password string `gorm:"column:password" json:"-"` + PasswordAlgo *string `gorm:"column:password_algo" json:"-"` + PasswordSalt *string `gorm:"column:password_salt" json:"-"` + Balance uint64 `gorm:"column:balance;default:0" json:"balance"` + Discount *int `gorm:"column:discount" json:"discount"` + CommissionType int `gorm:"column:commission_type;default:0" json:"commission_type"` + CommissionRate *int `gorm:"column:commission_rate" json:"commission_rate"` + CommissionBalance uint64 `gorm:"column:commission_balance;default:0" json:"commission_balance"` + T uint64 `gorm:"column:t;default:0" json:"t"` + U uint64 `gorm:"column:u;default:0" json:"u"` + D uint64 `gorm:"column:d;default:0" json:"d"` + TransferEnable uint64 `gorm:"column:transfer_enable;default:0" json:"transfer_enable"` + Banned bool `gorm:"column:banned" json:"banned"` + IsAdmin bool `gorm:"column:is_admin" json:"is_admin"` + IsStaff bool `gorm:"column:is_staff" json:"is_staff"` + LastLoginAt *int64 `gorm:"column:last_login_at" json:"last_login_at"` + LastLoginIP *int64 `gorm:"column:last_login_ip" json:"last_login_ip"` + UUID string `gorm:"column:uuid" json:"uuid"` + GroupID *int `gorm:"column:group_id" json:"group_id"` + PlanID *int `gorm:"column:plan_id" json:"plan_id"` + Plan *Plan `gorm:"foreignKey:PlanID" json:"plan"` + SpeedLimit *int `gorm:"column:speed_limit" json:"speed_limit"` + RemindExpire int `gorm:"column:remind_expire;default:1" json:"remind_expire"` + RemindTraffic int `gorm:"column:remind_traffic;default:1" json:"remind_traffic"` + Token string `gorm:"column:token" json:"token"` + ExpiredAt *int64 `gorm:"column:expired_at" json:"expired_at"` + Remarks *string `gorm:"column:remarks" json:"remarks"` + CreatedAt int64 `gorm:"column:created_at" json:"created_at"` + UpdatedAt int64 `gorm:"column:updated_at" json:"updated_at"` + DeviceLimit *int `gorm:"column:device_limit" json:"device_limit"` + OnlineCount *int `gorm:"column:online_count" json:"online_count"` + LastOnlineAt *time.Time `gorm:"column:last_online_at" json:"last_online_at"` + NextResetAt *int64 `gorm:"column:next_reset_at" json:"next_reset_at"` + LastResetAt *int64 `gorm:"column:last_reset_at" json:"last_reset_at"` + ResetCount int `gorm:"column:reset_count;default:0" json:"reset_count"` +} + +func (User) TableName() string { + return "v2_user" +} diff --git a/internal/protocol/clash.go b/internal/protocol/clash.go new file mode 100644 index 0000000..ac8b42b --- /dev/null +++ b/internal/protocol/clash.go @@ -0,0 +1,32 @@ +package protocol + +import ( + "fmt" + "strings" + "xboard-go/internal/model" +) + +func GenerateClash(servers []model.Server, user model.User) (string, error) { + var builder strings.Builder + + builder.WriteString("proxies:\n") + var proxyNames []string + for _, s := range servers { + // Basic VMess conversion for Clash + proxy := fmt.Sprintf(" - name: \"%s\"\n type: vmess\n server: %s\n port: %s\n uuid: %s\n alterId: 0\n cipher: auto\n", + s.Name, s.Host, s.Port, user.UUID) + builder.WriteString(proxy) + proxyNames = append(proxyNames, fmt.Sprintf("\"%s\"", s.Name)) + } + + builder.WriteString("\nproxy-groups:\n") + builder.WriteString(" - name: Proxy\n type: select\n proxies:\n - DIRECT\n") + for _, name := range proxyNames { + builder.WriteString(" - " + name + "\n") + } + + builder.WriteString("\nrules:\n") + builder.WriteString(" - MATCH,Proxy\n") + + return builder.String(), nil +} diff --git a/internal/protocol/singbox.go b/internal/protocol/singbox.go new file mode 100644 index 0000000..907d22b --- /dev/null +++ b/internal/protocol/singbox.go @@ -0,0 +1,42 @@ +package protocol + +import ( + "encoding/json" + "xboard-go/internal/model" +) + +type SingBoxConfig struct { + Outbounds []map[string]interface{} `json:"outbounds"` +} + +func GenerateSingBox(servers []model.Server, user model.User) (string, error) { + config := SingBoxConfig{ + Outbounds: []map[string]interface{}{}, + } + + // Add selector outbound + selector := map[string]interface{}{ + "type": "selector", + "tag": "Proxy", + "outbounds": []string{}, + } + + for _, s := range servers { + outbound := map[string]interface{}{ + "type": s.Type, + "tag": s.Name, + "server": s.Host, + "server_port": s.Port, + } + // Add protocol-specific settings + // ... logic to handle VMess, Shadowsocks, etc. + + config.Outbounds = append(config.Outbounds, outbound) + selector["outbounds"] = append(selector["outbounds"].([]string), s.Name) + } + + config.Outbounds = append(config.Outbounds, selector) + + data, err := json.MarshalIndent(config, "", " ") + return string(data), err +} diff --git a/internal/service/device_state.go b/internal/service/device_state.go new file mode 100644 index 0000000..abbff1a --- /dev/null +++ b/internal/service/device_state.go @@ -0,0 +1,97 @@ +package service + +import ( + "fmt" + "sort" + "strings" + "time" + "xboard-go/internal/database" +) + +const deviceStateTTL = 10 * time.Minute + +type userDevicesSnapshot map[string][]string + +func SaveUserNodeDevices(userID, nodeID int, ips []string) error { + unique := make([]string, 0, len(ips)) + seen := make(map[string]struct{}) + for _, ip := range ips { + trimmed := strings.TrimSpace(ip) + if trimmed == "" { + continue + } + if _, ok := seen[trimmed]; ok { + continue + } + seen[trimmed] = struct{}{} + unique = append(unique, trimmed) + } + sort.Strings(unique) + + return database.CacheSet(deviceStateKey(userID, nodeID), unique, deviceStateTTL) +} + +func GetUsersDevices(userIDs []int) map[int][]string { + result := make(map[int][]string, len(userIDs)) + + for _, userID := range userIDs { + snapshot, ok := database.CacheGetJSON[userDevicesSnapshot](deviceStateUserIndexKey(userID)) + if !ok { + result[userID] = []string{} + continue + } + + merged := make([]string, 0) + seen := make(map[string]struct{}) + for _, ips := range snapshot { + for _, ip := range ips { + if _, exists := seen[ip]; exists { + continue + } + seen[ip] = struct{}{} + merged = append(merged, ip) + } + } + sort.Strings(merged) + result[userID] = merged + } + + return result +} + +func SetDevices(userID, nodeID int, ips []string) error { + if err := SaveUserNodeDevices(userID, nodeID, ips); err != nil { + return err + } + + indexKey := deviceStateUserIndexKey(userID) + indexSnapshot, _ := database.CacheGetJSON[userDevicesSnapshot](indexKey) + indexSnapshot[fmt.Sprintf("%d", nodeID)] = normalizeIPs(ips) + return database.CacheSet(indexKey, indexSnapshot, deviceStateTTL) +} + +func normalizeIPs(ips []string) []string { + seen := make(map[string]struct{}) + result := make([]string, 0, len(ips)) + for _, ip := range ips { + ip = strings.TrimSpace(ip) + if ip == "" { + continue + } + if _, ok := seen[ip]; ok { + continue + } + seen[ip] = struct{}{} + result = append(result, ip) + } + sort.Strings(result) + return result +} + +func deviceStateKey(userID, nodeID int) string { + return fmt.Sprintf("device_state:user:%d:node:%d", userID, nodeID) +} + +func deviceStateUserIndexKey(userID int) string { + return fmt.Sprintf("device_state:user:%d:index", userID) +} diff --git a/internal/service/node.go b/internal/service/node.go new file mode 100644 index 0000000..d5efdd2 --- /dev/null +++ b/internal/service/node.go @@ -0,0 +1,437 @@ +package service + +import ( + "crypto/md5" + "encoding/base64" + "encoding/json" + "fmt" + "math" + "strconv" + "strings" + "time" + "xboard-go/internal/database" + "xboard-go/internal/model" + + "gorm.io/gorm" +) + +var serverTypeAliases = map[string]string{ + "v2ray": "vmess", + "hysteria2": "hysteria", +} + +var validServerTypes = map[string]struct{}{ + "anytls": {}, + "http": {}, + "hysteria": {}, + "mieru": {}, + "naive": {}, + "shadowsocks": {}, + "socks": {}, + "trojan": {}, + "tuic": {}, + "vless": {}, + "vmess": {}, +} + +type NodeUser struct { + ID int `json:"id"` + UUID string `json:"uuid"` + SpeedLimit *int `json:"speed_limit,omitempty"` + DeviceLimit *int `json:"device_limit,omitempty"` +} + +func NormalizeServerType(serverType string) string { + serverType = strings.ToLower(strings.TrimSpace(serverType)) + if serverType == "" { + return "" + } + if alias, ok := serverTypeAliases[serverType]; ok { + return alias + } + return serverType +} + +func IsValidServerType(serverType string) bool { + if serverType == "" { + return true + } + _, ok := validServerTypes[NormalizeServerType(serverType)] + return ok +} + +func FindServer(nodeID, nodeType string) (*model.Server, error) { + query := database.DB.Model(&model.Server{}) + if normalized := NormalizeServerType(nodeType); normalized != "" { + query = query.Where("type = ?", normalized) + } + + var server model.Server + if err := query. + Where("code = ? OR id = ?", nodeID, nodeID). + Order(gorm.Expr("CASE WHEN code = ? THEN 0 ELSE 1 END", nodeID)). + First(&server).Error; err != nil { + return nil, err + } + + server.Type = NormalizeServerType(server.Type) + return &server, nil +} + +func AvailableUsersForNode(node *model.Server) ([]NodeUser, error) { + groupIDs := parseIntSlice(node.GroupIDs) + if len(groupIDs) == 0 { + return []NodeUser{}, nil + } + + var users []NodeUser + err := database.DB.Model(&model.User{}). + Select("id", "uuid", "speed_limit", "device_limit"). + Where("group_id IN ?", groupIDs). + Where("u + d < transfer_enable"). + Where("(expired_at >= ? OR expired_at IS NULL)", time.Now().Unix()). + Where("banned = ?", 0). + Scan(&users).Error + if err != nil { + return nil, err + } + + return users, nil +} + +func AvailableServersForUser(user *model.User) ([]model.Server, error) { + var servers []model.Server + if err := database.DB.Where("`show` = ?", 1).Order("sort ASC").Find(&servers).Error; err != nil { + return nil, err + } + + filtered := make([]model.Server, 0, len(servers)) + for _, server := range servers { + groupIDs := parseIntSlice(server.GroupIDs) + if user.GroupID != nil && len(groupIDs) > 0 && !containsInt(groupIDs, *user.GroupID) { + continue + } + + if server.TransferEnable != nil && *server.TransferEnable > 0 && server.U+server.D >= *server.TransferEnable { + continue + } + + filtered = append(filtered, server) + } + + return filtered, nil +} + +func CurrentRate(server *model.Server) float64 { + if !server.RateTimeEnable { + return float64(server.Rate) + } + + ranges := parseObjectSlice(server.RateTimeRanges) + now := time.Now().Format("15:04") + for _, item := range ranges { + start, _ := item["start"].(string) + end, _ := item["end"].(string) + if start != "" && end != "" && now >= start && now <= end { + if rate, ok := toFloat64(item["rate"]); ok { + return rate + } + } + } + + return float64(server.Rate) +} + +func BuildNodeConfig(node *model.Server) map[string]any { + settings := parseObject(node.ProtocolSettings) + response := map[string]any{ + "protocol": node.Type, + "listen_ip": "0.0.0.0", + "server_port": node.ServerPort, + "network": getMapString(settings, "network"), + "networkSettings": getMapAny(settings, "network_settings"), + } + + switch node.Type { + case "shadowsocks": + response["cipher"] = getMapString(settings, "cipher") + response["plugin"] = getMapString(settings, "plugin") + response["plugin_opts"] = getMapString(settings, "plugin_opts") + cipher := getMapString(settings, "cipher") + switch cipher { + case "2022-blake3-aes-128-gcm": + response["server_key"] = serverKey(node.CreatedAt, 16) + case "2022-blake3-aes-256-gcm", "2022-blake3-chacha20-poly1305": + response["server_key"] = serverKey(node.CreatedAt, 32) + } + case "vmess": + response["tls"] = getMapInt(settings, "tls") + response["multiplex"] = getMapAny(settings, "multiplex") + case "trojan": + response["host"] = node.Host + response["server_name"] = getMapString(settings, "server_name") + response["multiplex"] = getMapAny(settings, "multiplex") + response["tls"] = getMapInt(settings, "tls") + if getMapInt(settings, "tls") == 2 { + response["tls_settings"] = getMapAny(settings, "reality_settings") + } + case "vless": + response["tls"] = getMapInt(settings, "tls") + response["flow"] = getMapString(settings, "flow") + response["multiplex"] = getMapAny(settings, "multiplex") + if encryption, ok := settings["encryption"].(map[string]any); ok { + if enabled, ok := encryption["enabled"].(bool); ok && enabled { + response["decryption"] = stringify(encryption["decryption"]) + } + } + if getMapInt(settings, "tls") == 2 { + response["tls_settings"] = getMapAny(settings, "reality_settings") + } else { + response["tls_settings"] = getMapAny(settings, "tls_settings") + } + case "hysteria": + tls, _ := settings["tls"].(map[string]any) + obfs, _ := settings["obfs"].(map[string]any) + bandwidth, _ := settings["bandwidth"].(map[string]any) + version := getMapInt(settings, "version") + response["version"] = version + response["host"] = node.Host + response["server_name"] = stringify(tls["server_name"]) + response["up_mbps"] = mapAnyInt(bandwidth, "up") + response["down_mbps"] = mapAnyInt(bandwidth, "down") + if version == 1 { + response["obfs"] = stringify(obfs["password"]) + } else if version == 2 { + if open, ok := obfs["open"].(bool); ok && open { + response["obfs"] = stringify(obfs["type"]) + response["obfs-password"] = stringify(obfs["password"]) + } + } + case "tuic": + tls, _ := settings["tls"].(map[string]any) + response["version"] = getMapInt(settings, "version") + response["server_name"] = stringify(tls["server_name"]) + response["congestion_control"] = getMapString(settings, "congestion_control") + response["tls_settings"] = getMapAny(settings, "tls_settings") + response["auth_timeout"] = "3s" + response["zero_rtt_handshake"] = false + response["heartbeat"] = "3s" + case "anytls": + tls, _ := settings["tls"].(map[string]any) + response["server_name"] = stringify(tls["server_name"]) + response["padding_scheme"] = getMapAny(settings, "padding_scheme") + case "naive", "http": + response["tls"] = getMapInt(settings, "tls") + response["tls_settings"] = getMapAny(settings, "tls_settings") + case "mieru": + response["transport"] = getMapString(settings, "transport") + response["traffic_pattern"] = getMapString(settings, "traffic_pattern") + } + + if routeIDs := parseIntSlice(node.RouteIDs); len(routeIDs) > 0 { + var routes []model.ServerRoute + if err := database.DB.Select("id", "`match`", "action", "action_value").Where("id IN ?", routeIDs).Find(&routes).Error; err == nil { + response["routes"] = routes + } + } + if value := parseGenericJSON(node.CustomOutbounds); value != nil { + response["custom_outbounds"] = value + } + if value := parseGenericJSON(node.CustomRoutes); value != nil { + response["custom_routes"] = value + } + if value := parseGenericJSON(node.CertConfig); value != nil { + response["cert_config"] = value + } + + return pruneNilMap(response) +} + +func ApplyTrafficDelta(userID int, node *model.Server, upload, download int64) { + rate := CurrentRate(node) + scaledUpload := int64(math.Round(float64(upload) * rate)) + scaledDownload := int64(math.Round(float64(download) * rate)) + + database.DB.Model(&model.User{}). + Where("id = ?", userID). + Updates(map[string]any{ + "u": gorm.Expr("u + ?", scaledUpload), + "d": gorm.Expr("d + ?", scaledDownload), + "t": time.Now().Unix(), + }) + + database.DB.Model(&model.Server{}). + Where("id = ?", node.ID). + Updates(map[string]any{ + "u": gorm.Expr("u + ?", scaledUpload), + "d": gorm.Expr("d + ?", scaledDownload), + }) +} + +func serverKey(createdAt *time.Time, size int) string { + if createdAt == nil { + return "" + } + sum := md5.Sum([]byte(strconv.FormatInt(createdAt.Unix(), 10))) + hex := fmt.Sprintf("%x", sum) + if size > len(hex) { + size = len(hex) + } + return base64.StdEncoding.EncodeToString([]byte(hex[:size])) +} + +func parseIntSlice(raw *string) []int { + if raw == nil || strings.TrimSpace(*raw) == "" { + return nil + } + + var decoded []any + if err := json.Unmarshal([]byte(*raw), &decoded); err == nil { + result := make([]int, 0, len(decoded)) + for _, item := range decoded { + if value, ok := toInt(item); ok { + result = append(result, value) + } + } + return result + } + + parts := strings.Split(*raw, ",") + result := make([]int, 0, len(parts)) + for _, part := range parts { + if value, err := strconv.Atoi(strings.TrimSpace(part)); err == nil { + result = append(result, value) + } + } + return result +} + +func parseObject(raw *string) map[string]any { + if raw == nil || strings.TrimSpace(*raw) == "" { + return map[string]any{} + } + var decoded map[string]any + if err := json.Unmarshal([]byte(*raw), &decoded); err != nil { + return map[string]any{} + } + return decoded +} + +func parseObjectSlice(raw *string) []map[string]any { + if raw == nil || strings.TrimSpace(*raw) == "" { + return nil + } + var decoded []map[string]any + if err := json.Unmarshal([]byte(*raw), &decoded); err != nil { + return nil + } + return decoded +} + +func parseGenericJSON(raw *string) any { + if raw == nil || strings.TrimSpace(*raw) == "" { + return nil + } + var decoded any + if err := json.Unmarshal([]byte(*raw), &decoded); err != nil { + return nil + } + return decoded +} + +func getMapString(values map[string]any, key string) string { + return stringify(values[key]) +} + +func getMapInt(values map[string]any, key string) int { + if value, ok := toInt(values[key]); ok { + return value + } + return 0 +} + +func getMapAny(values map[string]any, key string) any { + if value, ok := values[key]; ok { + return value + } + return nil +} + +func mapAnyInt(values map[string]any, key string) int { + if value, ok := toInt(values[key]); ok { + return value + } + return 0 +} + +func stringify(value any) string { + switch typed := value.(type) { + case string: + return typed + case fmt.Stringer: + return typed.String() + case float64: + return strconv.FormatInt(int64(typed), 10) + case int: + return strconv.Itoa(typed) + case int64: + return strconv.FormatInt(typed, 10) + default: + return "" + } +} + +func pruneNilMap(values map[string]any) map[string]any { + result := make(map[string]any, len(values)) + for key, value := range values { + if value == nil { + continue + } + if text, ok := value.(string); ok && text == "" { + continue + } + result[key] = value + } + return result +} + +func toInt(value any) (int, bool) { + switch typed := value.(type) { + case int: + return typed, true + case int64: + return int(typed), true + case float64: + return int(typed), true + case string: + parsed, err := strconv.Atoi(strings.TrimSpace(typed)) + return parsed, err == nil + default: + return 0, false + } +} + +func toFloat64(value any) (float64, bool) { + switch typed := value.(type) { + case float64: + return typed, true + case int: + return float64(typed), true + case int64: + return float64(typed), true + case string: + parsed, err := strconv.ParseFloat(strings.TrimSpace(typed), 64) + return parsed, err == nil + default: + return 0, false + } +} + +func containsInt(values []int, target int) bool { + for _, value := range values { + if value == target { + return true + } + } + return false +} diff --git a/internal/service/plugin.go b/internal/service/plugin.go new file mode 100644 index 0000000..8f6d5ec --- /dev/null +++ b/internal/service/plugin.go @@ -0,0 +1,158 @@ +package service + +import ( + "crypto/md5" + "encoding/json" + "fmt" + "strconv" + "strings" + "time" + "xboard-go/internal/database" + "xboard-go/internal/model" + + "github.com/google/uuid" +) + +const ( + PluginRealNameVerification = "real_name_verification" + PluginUserOnlineDevices = "user_online_devices" + PluginUserAddIPv6 = "user_add_ipv6_subscription" +) + +func GetPlugin(code string) (*model.Plugin, bool) { + var plugin model.Plugin + if err := database.DB.Where("code = ?", code).First(&plugin).Error; err != nil { + return nil, false + } + return &plugin, true +} + +func IsPluginEnabled(code string) bool { + plugin, ok := GetPlugin(code) + return ok && plugin.IsEnabled +} + +func GetPluginConfig(code string) map[string]any { + plugin, ok := GetPlugin(code) + if !ok || plugin.Config == nil || *plugin.Config == "" { + return map[string]any{} + } + + var cfg map[string]any + if err := json.Unmarshal([]byte(*plugin.Config), &cfg); err != nil { + return map[string]any{} + } + return cfg +} + +func GetPluginConfigString(code, key, defaultValue string) string { + cfg := GetPluginConfig(code) + value, ok := cfg[key] + if !ok { + return defaultValue + } + if raw, ok := value.(string); ok && raw != "" { + return raw + } + return defaultValue +} + +func GetPluginConfigBool(code, key string, defaultValue bool) bool { + cfg := GetPluginConfig(code) + value, ok := cfg[key] + if !ok { + return defaultValue + } + switch typed := value.(type) { + case bool: + return typed + case float64: + return typed != 0 + case string: + return typed == "1" || typed == "true" + default: + return defaultValue + } +} + +func SyncIPv6ShadowAccount(user *model.User) bool { + if user == nil || user.PlanID == nil { + return false + } + + var plan model.Plan + if err := database.DB.First(&plan, *user.PlanID).Error; err != nil { + return false + } + if !PluginPlanAllowed(&plan) { + return false + } + + ipv6Email := IPv6ShadowEmail(user.Email) + var ipv6User model.User + now := time.Now().Unix() + if err := database.DB.Where("email = ?", ipv6Email).First(&ipv6User).Error; err != nil { + ipv6User = *user + ipv6User.ID = 0 + ipv6User.Email = ipv6Email + ipv6User.UUID = uuid.New().String() + ipv6User.Token = fmt.Sprintf("%x", md5.Sum([]byte(time.Now().String()+ipv6Email)))[:16] + ipv6User.U = 0 + ipv6User.D = 0 + ipv6User.T = 0 + ipv6User.ParentID = &user.ID + ipv6User.CreatedAt = now + } + + ipv6User.Email = ipv6Email + ipv6User.Password = user.Password + ipv6User.U = 0 + ipv6User.D = 0 + ipv6User.T = 0 + ipv6User.UpdatedAt = now + + if planID := parsePluginPositiveInt(GetPluginConfigString(PluginUserAddIPv6, "ipv6_plan_id", "0"), 0); planID > 0 { + ipv6User.PlanID = &planID + } + if groupID := parsePluginPositiveInt(GetPluginConfigString(PluginUserAddIPv6, "ipv6_group_id", "0"), 0); groupID > 0 { + ipv6User.GroupID = &groupID + } + + return database.DB.Save(&ipv6User).Error == nil +} + +func PluginPlanAllowed(plan *model.Plan) bool { + if plan == nil { + return false + } + + for _, raw := range strings.Split(GetPluginConfigString(PluginUserAddIPv6, "allowed_plans", ""), ",") { + if parsePluginPositiveInt(strings.TrimSpace(raw), 0) == plan.ID { + return true + } + } + + referenceFlag := strings.ToLower(GetPluginConfigString(PluginUserAddIPv6, "reference_flag", "ipv6")) + reference := "" + if plan.Reference != nil { + reference = strings.ToLower(*plan.Reference) + } + return referenceFlag != "" && strings.Contains(reference, referenceFlag) +} + +func IPv6ShadowEmail(email string) string { + suffix := GetPluginConfigString(PluginUserAddIPv6, "email_suffix", "-ipv6") + parts := strings.SplitN(email, "@", 2) + if len(parts) != 2 { + return email + } + return parts[0] + suffix + "@" + parts[1] +} + +func parsePluginPositiveInt(raw string, defaultValue int) int { + value, err := strconv.Atoi(strings.TrimSpace(raw)) + if err != nil || value <= 0 { + return defaultValue + } + return value +} diff --git a/internal/service/session.go b/internal/service/session.go new file mode 100644 index 0000000..d7bb607 --- /dev/null +++ b/internal/service/session.go @@ -0,0 +1,208 @@ +package service + +import ( + "crypto/sha256" + "encoding/hex" + "sort" + "strconv" + "time" + "xboard-go/internal/database" + + "github.com/google/uuid" +) + +const sessionTTL = 7 * 24 * time.Hour + +type SessionRecord struct { + ID string `json:"id"` + UserID int `json:"user_id"` + TokenHash string `json:"token_hash"` + Name string `json:"name"` + UserAgent string `json:"user_agent"` + IP string `json:"ip"` + CreatedAt int64 `json:"created_at"` + LastUsedAt int64 `json:"last_used_at"` + ExpiresAt int64 `json:"expires_at"` +} + +func TrackSession(userID int, token, ip, userAgent string) SessionRecord { + now := time.Now().Unix() + tokenHash := hashToken(token) + list := activeSessions(userID, now) + + for i := range list { + if list[i].TokenHash == tokenHash { + list[i].IP = firstNonEmpty(ip, list[i].IP) + list[i].UserAgent = firstNonEmpty(userAgent, list[i].UserAgent) + list[i].LastUsedAt = now + saveSessions(userID, list) + return list[i] + } + } + + record := SessionRecord{ + ID: uuid.NewString(), + UserID: userID, + TokenHash: tokenHash, + Name: "Web Session", + UserAgent: userAgent, + IP: ip, + CreatedAt: now, + LastUsedAt: now, + ExpiresAt: now + int64(sessionTTL.Seconds()), + } + list = append(list, record) + saveSessions(userID, list) + return record +} + +func GetUserSessions(userID int, currentToken string) []SessionRecord { + now := time.Now().Unix() + list := activeSessions(userID, now) + if currentToken != "" { + currentHash := hashToken(currentToken) + found := false + for i := range list { + if list[i].TokenHash == currentHash { + found = true + break + } + } + if !found { + list = append(list, SessionRecord{ + ID: uuid.NewString(), + UserID: userID, + TokenHash: currentHash, + Name: "Web Session", + CreatedAt: now, + LastUsedAt: now, + ExpiresAt: now + int64(sessionTTL.Seconds()), + }) + saveSessions(userID, list) + } + } + return activeSessions(userID, now) +} + +func RemoveUserSession(userID int, sessionID string) bool { + now := time.Now().Unix() + list := activeSessions(userID, now) + next := make([]SessionRecord, 0, len(list)) + removed := false + + for _, session := range list { + if session.ID != sessionID { + next = append(next, session) + continue + } + + removed = true + ttl := time.Until(time.Unix(session.ExpiresAt, 0)) + if ttl < time.Hour { + ttl = time.Hour + } + _ = database.CacheSet(revokedTokenKey(session.TokenHash), true, ttl) + } + + if removed { + saveSessions(userID, next) + } + + return removed +} + +func IsSessionTokenRevoked(token string) bool { + if token == "" { + return false + } + _, ok := database.CacheGetJSON[bool](revokedTokenKey(hashToken(token))) + return ok +} + +func StoreQuickLoginToken(userID int, ttl time.Duration) string { + verify := uuid.NewString() + _ = database.CacheSet(quickLoginKey(verify), userID, ttl) + return verify +} + +func ResolveQuickLoginToken(verify string) (int, bool) { + userID, ok := database.CacheGetJSON[int](quickLoginKey(verify)) + if ok { + _ = database.CacheDelete(quickLoginKey(verify)) + } + return userID, ok +} + +func StoreEmailVerifyCode(email, code string, ttl time.Duration) { + _ = database.CacheSet(emailVerifyKey(email), code, ttl) +} + +func CheckEmailVerifyCode(email, code string) bool { + savedCode, ok := database.CacheGetJSON[string](emailVerifyKey(email)) + if !ok || savedCode == "" || savedCode != code { + return false + } + _ = database.CacheDelete(emailVerifyKey(email)) + return true +} + +func activeSessions(userID int, now int64) []SessionRecord { + sessions, ok := database.CacheGetJSON[[]SessionRecord](userSessionsKey(userID)) + if !ok || len(sessions) == 0 { + return []SessionRecord{} + } + + filtered := make([]SessionRecord, 0, len(sessions)) + for _, session := range sessions { + if session.ExpiresAt > 0 && session.ExpiresAt <= now { + continue + } + filtered = append(filtered, session) + } + + sort.SliceStable(filtered, func(i, j int) bool { + return filtered[i].LastUsedAt > filtered[j].LastUsedAt + }) + + if len(filtered) != len(sessions) { + saveSessions(userID, filtered) + } + return filtered +} + +func saveSessions(userID int, sessions []SessionRecord) { + sort.SliceStable(sessions, func(i, j int) bool { + return sessions[i].LastUsedAt > sessions[j].LastUsedAt + }) + _ = database.CacheSet(userSessionsKey(userID), sessions, sessionTTL) +} + +func hashToken(token string) string { + sum := sha256.Sum256([]byte(token)) + return hex.EncodeToString(sum[:]) +} + +func userSessionsKey(userID int) string { + return "session:user:" + strconv.Itoa(userID) +} + +func revokedTokenKey(tokenHash string) string { + return "session:revoked:" + tokenHash +} + +func quickLoginKey(verify string) string { + return "session:quick-login:" + verify +} + +func emailVerifyKey(email string) string { + return "session:email-code:" + email +} + +func firstNonEmpty(values ...string) string { + for _, value := range values { + if value != "" { + return value + } + } + return "" +} diff --git a/internal/service/settings.go b/internal/service/settings.go new file mode 100644 index 0000000..0ab8d1f --- /dev/null +++ b/internal/service/settings.go @@ -0,0 +1,72 @@ +package service + +import ( + "strconv" + "strings" + "xboard-go/internal/config" + "xboard-go/internal/database" + "xboard-go/internal/model" +) + +func GetSetting(name string) (string, bool) { + var setting model.Setting + if err := database.DB.Select("value").Where("name = ?", name).First(&setting).Error; err != nil { + return "", false + } + + return setting.Value, true +} + +func MustGetString(name, defaultValue string) string { + value, ok := GetSetting(name) + if !ok || strings.TrimSpace(value) == "" { + return defaultValue + } + return value +} + +func MustGetInt(name string, defaultValue int) int { + value, ok := GetSetting(name) + if !ok { + return defaultValue + } + + parsed, err := strconv.Atoi(strings.TrimSpace(value)) + if err != nil { + return defaultValue + } + return parsed +} + +func MustGetBool(name string, defaultValue bool) bool { + value, ok := GetSetting(name) + if !ok { + return defaultValue + } + + switch strings.ToLower(strings.TrimSpace(value)) { + case "1", "true", "yes", "on": + return true + case "0", "false", "no", "off": + return false + default: + return defaultValue + } +} + +func GetAdminSecurePath() string { + if securePath := strings.Trim(MustGetString("secure_path", ""), "/"); securePath != "" { + return securePath + } + if frontendPath := strings.Trim(MustGetString("frontend_admin_path", ""), "/"); frontendPath != "" { + return frontendPath + } + return "admin" +} + +func GetAppURL() string { + if appURL := strings.TrimSpace(MustGetString("app_url", "")); appURL != "" { + return strings.TrimRight(appURL, "/") + } + return strings.TrimRight(config.AppConfig.AppURL, "/") +} diff --git a/pkg/utils/auth.go b/pkg/utils/auth.go new file mode 100644 index 0000000..e3390c8 --- /dev/null +++ b/pkg/utils/auth.go @@ -0,0 +1,82 @@ +package utils + +import ( + "crypto/md5" + "crypto/sha256" + "encoding/hex" + "time" + "xboard-go/internal/config" + + "github.com/golang-jwt/jwt/v5" + "golang.org/x/crypto/bcrypt" +) + +type Claims struct { + UserID int `json:"user_id"` + IsAdmin bool `json:"is_admin"` + jwt.RegisteredClaims +} + +func GenerateToken(userID int, isAdmin bool) (string, error) { + claims := Claims{ + UserID: userID, + IsAdmin: isAdmin, + RegisteredClaims: jwt.RegisteredClaims{ + ExpiresAt: jwt.NewNumericDate(time.Now().Add(24 * 7 * time.Hour)), // 7 days + IssuedAt: jwt.NewNumericDate(time.Now()), + }, + } + + token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) + return token.SignedString([]byte(config.AppConfig.JWTSecret)) +} + +func VerifyToken(tokenString string) (*Claims, error) { + token, err := jwt.ParseWithClaims(tokenString, &Claims{}, func(token *jwt.Token) (interface{}, error) { + return []byte(config.AppConfig.JWTSecret), nil + }) + + if err != nil { + return nil, err + } + + if claims, ok := token.Claims.(*Claims); ok && token.Valid { + return claims, nil + } + + return nil, jwt.ErrSignatureInvalid +} + +func HashPassword(password string) (string, error) { + bytes, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) + return string(bytes), err +} + +func CheckPassword(password, hash string, algo, salt *string) bool { + if algo != nil { + switch *algo { + case "md5": + sum := md5.Sum([]byte(password)) + return hex.EncodeToString(sum[:]) == hash + case "sha256": + sum := sha256.Sum256([]byte(password)) + return hex.EncodeToString(sum[:]) == hash + case "md5salt": + sum := md5.Sum([]byte(password + stringValue(salt))) + return hex.EncodeToString(sum[:]) == hash + case "sha256salt": + sum := sha256.Sum256([]byte(password + stringValue(salt))) + return hex.EncodeToString(sum[:]) == hash + } + } + + err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password)) + return err == nil +} + +func stringValue(value *string) string { + if value == nil { + return "" + } + return *value +} diff --git a/scripts/build_install.sh b/scripts/build_install.sh new file mode 100644 index 0000000..3b9f55b --- /dev/null +++ b/scripts/build_install.sh @@ -0,0 +1,178 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +GO_MOD_FILE="${ROOT_DIR}/go.mod" +DEFAULT_GO_VERSION="$(awk '/^go / { print $2; exit }' "${GO_MOD_FILE}")" + +GO_VERSION="${DEFAULT_GO_VERSION}" +OUTPUT_PATH="${ROOT_DIR}/api" +TOOLS_DIR="${ROOT_DIR}/.build-tools" +CACHE_DIR="${ROOT_DIR}/.build-cache" +CLEAN_GO="false" + +usage() { + cat < Go version to download, default: ${GO_VERSION} + --output Build output path, default: ${OUTPUT_PATH} + --tools-dir Toolchain directory, default: ${TOOLS_DIR} + --cache-dir Go cache directory, default: ${CACHE_DIR} + --clean-go Re-download the Go toolchain even if it exists + -h, --help Show this help + +Examples: + bash scripts/build_install.sh + bash scripts/build_install.sh --output ./package/api +EOF +} + +parse_args() { + while [[ $# -gt 0 ]]; do + case "$1" in + --go-version) + GO_VERSION="$2" + shift 2 + ;; + --output) + OUTPUT_PATH="$2" + shift 2 + ;; + --tools-dir) + TOOLS_DIR="$2" + shift 2 + ;; + --cache-dir) + CACHE_DIR="$2" + shift 2 + ;; + --clean-go) + CLEAN_GO="true" + shift + ;; + -h|--help) + usage + exit 0 + ;; + *) + echo "error: unknown option: $1" >&2 + usage + exit 1 + ;; + esac + done +} + +require_cmd() { + if ! command -v "$1" >/dev/null 2>&1; then + echo "error: required command not found: $1" >&2 + exit 1 + fi +} + +detect_platform() { + local uname_os uname_arch + uname_os="$(uname -s)" + uname_arch="$(uname -m)" + + case "${uname_os}" in + Linux) GO_OS="linux" ;; + Darwin) GO_OS="darwin" ;; + *) + echo "error: unsupported operating system: ${uname_os}" >&2 + exit 1 + ;; + esac + + case "${uname_arch}" in + x86_64|amd64) GO_ARCH="amd64" ;; + aarch64|arm64) GO_ARCH="arm64" ;; + *) + echo "error: unsupported architecture: ${uname_arch}" >&2 + exit 1 + ;; + esac +} + +download_go() { + local archive_name archive_path download_url current_version + + mkdir -p "${TOOLS_DIR}" + archive_name="go${GO_VERSION}.${GO_OS}-${GO_ARCH}.tar.gz" + archive_path="${TOOLS_DIR}/${archive_name}" + GO_ROOT="${TOOLS_DIR}/go" + + if [[ -x "${GO_ROOT}/bin/go" ]]; then + current_version="$("${GO_ROOT}/bin/go" version | awk '{print $3}' | sed 's/^go//')" + if [[ "${current_version}" != "${GO_VERSION}" ]]; then + rm -rf "${GO_ROOT}" + fi + fi + + if [[ "${CLEAN_GO}" == "true" ]]; then + rm -rf "${GO_ROOT}" + rm -f "${archive_path}" + fi + + if [[ ! -x "${GO_ROOT}/bin/go" ]]; then + download_url="https://go.dev/dl/${archive_name}" + echo "downloading Go ${GO_VERSION} for ${GO_OS}/${GO_ARCH}..." + if [[ ! -f "${archive_path}" ]]; then + if command -v curl >/dev/null 2>&1; then + curl -fsSL "${download_url}" -o "${archive_path}" + elif command -v wget >/dev/null 2>&1; then + wget -O "${archive_path}" "${download_url}" + else + echo "error: curl or wget is required to download Go" >&2 + exit 1 + fi + fi + + rm -rf "${GO_ROOT}" + tar -C "${TOOLS_DIR}" -xzf "${archive_path}" + fi +} + +build_binary() { + local output_dir + + mkdir -p "${CACHE_DIR}/gocache" "${CACHE_DIR}/gomodcache" + output_dir="$(dirname "${OUTPUT_PATH}")" + mkdir -p "${output_dir}" + + echo "building ${OUTPUT_PATH}..." + ( + cd "${ROOT_DIR}" + export GOROOT="${GO_ROOT}" + export PATH="${GO_ROOT}/bin:${PATH}" + export GOCACHE="${CACHE_DIR}/gocache" + export GOMODCACHE="${CACHE_DIR}/gomodcache" + "${GO_ROOT}/bin/go" build -trimpath -o "${OUTPUT_PATH}" ./cmd/api + ) + chmod +x "${OUTPUT_PATH}" || true +} + +print_summary() { + cat < Install directory, default: ${INSTALL_DIR} + --service-name systemd service name, default: ${SERVICE_NAME} + --run-user Runtime user, default: ${RUN_USER} + --package-dir Package directory, default: ${PACKAGE_DIR} + --skip-service Skip systemd service installation + -h, --help Show this help + +Expected package layout: + ${BIN_NAME} + frontend/ + docs/ + README.md + .env.example (optional) + +Example: + sudo bash ./install.sh --install-dir /opt/singbox-gopanel --run-user root +EOF +} + +parse_args() { + while [[ $# -gt 0 ]]; do + case "$1" in + --install-dir) + INSTALL_DIR="$2" + shift 2 + ;; + --service-name) + SERVICE_NAME="$2" + shift 2 + ;; + --run-user) + RUN_USER="$2" + shift 2 + ;; + --package-dir) + PACKAGE_DIR="$2" + shift 2 + ;; + --skip-service) + SKIP_SERVICE="true" + shift + ;; + -h|--help) + usage + exit 0 + ;; + *) + echo "error: unknown option: $1" >&2 + usage + exit 1 + ;; + esac + done +} + +ensure_root() { + if [[ "${EUID}" -ne 0 ]]; then + echo "error: please run as root or via sudo" >&2 + exit 1 + fi +} + +ensure_run_user() { + if ! id "${RUN_USER}" >/dev/null 2>&1; then + echo "error: run user does not exist: ${RUN_USER}" >&2 + exit 1 + fi +} + +ensure_package_layout() { + if [[ ! -f "${PACKAGE_DIR}/${BIN_NAME}" ]]; then + echo "error: binary not found: ${PACKAGE_DIR}/${BIN_NAME}" >&2 + exit 1 + fi + if [[ ! -d "${PACKAGE_DIR}/frontend" ]]; then + echo "error: frontend directory not found: ${PACKAGE_DIR}/frontend" >&2 + exit 1 + fi + if [[ ! -d "${PACKAGE_DIR}/docs" ]]; then + echo "error: docs directory not found: ${PACKAGE_DIR}/docs" >&2 + exit 1 + fi +} + +prepare_dirs() { + mkdir -p "${INSTALL_DIR}" + mkdir -p "${INSTALL_DIR}/frontend" + mkdir -p "${INSTALL_DIR}/docs" +} + +copy_runtime_files() { + echo "copying package files into ${INSTALL_DIR}..." + + install -m 0755 "${PACKAGE_DIR}/${BIN_NAME}" "${INSTALL_DIR}/${BIN_NAME}" + + rm -rf "${INSTALL_DIR}/frontend" + mkdir -p "${INSTALL_DIR}/frontend" + cp -R "${PACKAGE_DIR}/frontend/." "${INSTALL_DIR}/frontend/" + + rm -rf "${INSTALL_DIR}/docs" + mkdir -p "${INSTALL_DIR}/docs" + cp -R "${PACKAGE_DIR}/docs/." "${INSTALL_DIR}/docs/" + + if [[ -f "${PACKAGE_DIR}/README.md" ]]; then + cp -f "${PACKAGE_DIR}/README.md" "${INSTALL_DIR}/README.md" + fi + + if [[ -f "${PACKAGE_DIR}/.env.example" ]]; then + cp -f "${PACKAGE_DIR}/.env.example" "${INSTALL_DIR}/.env.example" + fi + + if [[ -f "${PACKAGE_DIR}/.env" && ! -f "${INSTALL_DIR}/.env" ]]; then + cp -f "${PACKAGE_DIR}/.env" "${INSTALL_DIR}/.env" + fi + + if [[ ! -f "${INSTALL_DIR}/.env" && -f "${INSTALL_DIR}/.env.example" ]]; then + cp -f "${INSTALL_DIR}/.env.example" "${INSTALL_DIR}/.env" + echo "created ${INSTALL_DIR}/.env from .env.example" + fi +} + +install_service() { + if [[ "${SKIP_SERVICE}" == "true" ]]; then + echo "skip service enabled" + return + fi + + if ! command -v systemctl >/dev/null 2>&1; then + echo "systemctl not found, skipping service installation" + return + fi + + cat >"/etc/systemd/system/${SERVICE_NAME}.service" <