From d8a3c6db71d24a0c2c58593600f797c6f65439ff Mon Sep 17 00:00:00 2001 From: xgp2012 <2820567502@qq.com> Date: Sun, 27 Sep 2026 08:44:57 +0800 Subject: [PATCH 01/10] Rewrite admin console as Nuxt 4 + fuxsto-design SPA (NewAPI-style UI, transitions); delete old single-file frontend --- .dockerignore | 3 + .github/workflows/ci.yml | 36 + .github/workflows/release.yml | 35 +- .gitignore | 8 + DEVELOPMENT.md | 340 + Dockerfile | 11 + README.md | 10 +- buildadmin.sh | 19 + server/adminui/200.html | 1 + server/adminui/404.html | 1 + server/adminui/_nuxt/--2IuJIQ.js | 1 + server/adminui/_nuxt/B3nLMP91.js | 1 + server/adminui/_nuxt/BB0691XW.js | 1 + server/adminui/_nuxt/BT-50xGH.js | 3 + server/adminui/_nuxt/BZ_oP5sc.js | 1 + server/adminui/_nuxt/BaMR1-Wb.js | 1 + server/adminui/_nuxt/Biiz67gC.js | 1 + server/adminui/_nuxt/BkiPxbt6.js | 1 + server/adminui/_nuxt/BnbMNd1_.js | 1 + server/adminui/_nuxt/Bq3ByqkD.js | 1 + server/adminui/_nuxt/C1UVkkyo.js | 1 + server/adminui/_nuxt/C2auVMGT.js | 1 + server/adminui/_nuxt/C5KwrKiw.js | 1 + server/adminui/_nuxt/C7_xDZuo.js | 1 + server/adminui/_nuxt/C9QLCt9z.js | 1 + server/adminui/_nuxt/CDZnUJxo.js | 2 + server/adminui/_nuxt/CLabUxWX.js | 1 + server/adminui/_nuxt/CU1Fk5fy.js | 1 + server/adminui/_nuxt/CaMPYMl_.js | 1 + server/adminui/_nuxt/ChxjuxiH.js | 1 + server/adminui/_nuxt/Cjk4IpeB.js | 1 + server/adminui/_nuxt/Cv1xSm-v.js | 1 + server/adminui/_nuxt/CxZD5dLJ.js | 2 + server/adminui/_nuxt/Cy6fBfr9.js | 1 + server/adminui/_nuxt/D50T9Hbc.js | 1 + server/adminui/_nuxt/DKXNkI4w.js | 1 + server/adminui/_nuxt/DZrj6clu.js | 1 + server/adminui/_nuxt/DfpAeMWm.js | 1 + server/adminui/_nuxt/Dqnn4udu.js | 1 + server/adminui/_nuxt/Dy1Pnbdd.js | 1 + server/adminui/_nuxt/O7BxGEKD.js | 1 + server/adminui/_nuxt/YiEwAvN-.js | 1 + server/adminui/_nuxt/builds/latest.json | 1 + .../b4330c23-46d5-4186-b165-8700b0c274d9.json | 1 + server/adminui/_nuxt/entry.B7QGlukW.css | 2 + server/adminui/_nuxt/error-404.Bb87HomL.css | 1 + server/adminui/_nuxt/error-500.Bwd7zAaE.css | 1 + server/adminui/_nuxt/zZGEHylc.js | 1 + server/adminui/config/index.html | 1 + server/adminui/debug/index.html | 1 + server/adminui/devices/index.html | 1 + server/adminui/health/index.html | 1 + server/adminui/index.html | 943 +- server/adminui/logs/index.html | 1 + server/adminui/stats/index.html | 1 + server/adminui/tokens/index.html | 1 + server/adminui/upstreams/index.html | 1 + server/adminui_test.go | 66 + server/handler_admin.go | 60 + server/server.go | 21 +- web/app/app.vue | 7 + web/app/assets/css/main.css | 72 + web/app/components/DialogPanel.vue | 31 + web/app/components/Field.vue | 12 + web/app/components/StatTile.vue | 10 + web/app/composables/useApi.ts | 86 + web/app/composables/useUi.ts | 43 + web/app/layouts/default.vue | 177 + web/app/pages/config.vue | 124 + web/app/pages/debug.vue | 102 + web/app/pages/devices.vue | 220 + web/app/pages/health.vue | 188 + web/app/pages/index.vue | 80 + web/app/pages/logs.vue | 123 + web/app/pages/stats.vue | 175 + web/app/pages/tokens.vue | 103 + web/app/pages/upstreams.vue | 302 + web/app/types/api.ts | 242 + web/app/utils/format.ts | 34 + web/nuxt.config.ts | 62 + web/package-lock.json | 10016 ++++++++++++++++ web/package.json | 28 + web/tsconfig.json | 3 + 83 files changed, 12891 insertions(+), 954 deletions(-) create mode 100644 DEVELOPMENT.md create mode 100644 buildadmin.sh create mode 100644 server/adminui/200.html create mode 100644 server/adminui/404.html create mode 100644 server/adminui/_nuxt/--2IuJIQ.js create mode 100644 server/adminui/_nuxt/B3nLMP91.js create mode 100644 server/adminui/_nuxt/BB0691XW.js create mode 100644 server/adminui/_nuxt/BT-50xGH.js create mode 100644 server/adminui/_nuxt/BZ_oP5sc.js create mode 100644 server/adminui/_nuxt/BaMR1-Wb.js create mode 100644 server/adminui/_nuxt/Biiz67gC.js create mode 100644 server/adminui/_nuxt/BkiPxbt6.js create mode 100644 server/adminui/_nuxt/BnbMNd1_.js create mode 100644 server/adminui/_nuxt/Bq3ByqkD.js create mode 100644 server/adminui/_nuxt/C1UVkkyo.js create mode 100644 server/adminui/_nuxt/C2auVMGT.js create mode 100644 server/adminui/_nuxt/C5KwrKiw.js create mode 100644 server/adminui/_nuxt/C7_xDZuo.js create mode 100644 server/adminui/_nuxt/C9QLCt9z.js create mode 100644 server/adminui/_nuxt/CDZnUJxo.js create mode 100644 server/adminui/_nuxt/CLabUxWX.js create mode 100644 server/adminui/_nuxt/CU1Fk5fy.js create mode 100644 server/adminui/_nuxt/CaMPYMl_.js create mode 100644 server/adminui/_nuxt/ChxjuxiH.js create mode 100644 server/adminui/_nuxt/Cjk4IpeB.js create mode 100644 server/adminui/_nuxt/Cv1xSm-v.js create mode 100644 server/adminui/_nuxt/CxZD5dLJ.js create mode 100644 server/adminui/_nuxt/Cy6fBfr9.js create mode 100644 server/adminui/_nuxt/D50T9Hbc.js create mode 100644 server/adminui/_nuxt/DKXNkI4w.js create mode 100644 server/adminui/_nuxt/DZrj6clu.js create mode 100644 server/adminui/_nuxt/DfpAeMWm.js create mode 100644 server/adminui/_nuxt/Dqnn4udu.js create mode 100644 server/adminui/_nuxt/Dy1Pnbdd.js create mode 100644 server/adminui/_nuxt/O7BxGEKD.js create mode 100644 server/adminui/_nuxt/YiEwAvN-.js create mode 100644 server/adminui/_nuxt/builds/latest.json create mode 100644 server/adminui/_nuxt/builds/meta/b4330c23-46d5-4186-b165-8700b0c274d9.json create mode 100644 server/adminui/_nuxt/entry.B7QGlukW.css create mode 100644 server/adminui/_nuxt/error-404.Bb87HomL.css create mode 100644 server/adminui/_nuxt/error-500.Bwd7zAaE.css create mode 100644 server/adminui/_nuxt/zZGEHylc.js create mode 100644 server/adminui/config/index.html create mode 100644 server/adminui/debug/index.html create mode 100644 server/adminui/devices/index.html create mode 100644 server/adminui/health/index.html create mode 100644 server/adminui/logs/index.html create mode 100644 server/adminui/stats/index.html create mode 100644 server/adminui/tokens/index.html create mode 100644 server/adminui/upstreams/index.html create mode 100644 server/adminui_test.go create mode 100644 web/app/app.vue create mode 100644 web/app/assets/css/main.css create mode 100644 web/app/components/DialogPanel.vue create mode 100644 web/app/components/Field.vue create mode 100644 web/app/components/StatTile.vue create mode 100644 web/app/composables/useApi.ts create mode 100644 web/app/composables/useUi.ts create mode 100644 web/app/layouts/default.vue create mode 100644 web/app/pages/config.vue create mode 100644 web/app/pages/debug.vue create mode 100644 web/app/pages/devices.vue create mode 100644 web/app/pages/health.vue create mode 100644 web/app/pages/index.vue create mode 100644 web/app/pages/logs.vue create mode 100644 web/app/pages/stats.vue create mode 100644 web/app/pages/tokens.vue create mode 100644 web/app/pages/upstreams.vue create mode 100644 web/app/types/api.ts create mode 100644 web/app/utils/format.ts create mode 100644 web/nuxt.config.ts create mode 100644 web/package-lock.json create mode 100644 web/package.json create mode 100644 web/tsconfig.json diff --git a/.dockerignore b/.dockerignore index b7d4337..860832d 100644 --- a/.dockerignore +++ b/.dockerignore @@ -8,3 +8,6 @@ liapi liapi.exe SECURITY.md CONTRIBUTING.md +web/node_modules +web/.nuxt +web/.output diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3d1daf1..986c0ad 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,8 +6,38 @@ on: pull_request: jobs: + frontend: + runs-on: ubuntu-latest + defaults: + run: + working-directory: web + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: '22' + + - name: Install deps + run: npm ci + + - name: Typecheck + run: npm run typecheck + + - name: Build admin SPA + run: npm run build + + # Hand the freshly built assets to the Go job so embedding is verified + # against current sources (the committed copy is only a fallback). + - uses: actions/upload-artifact@v4 + with: + name: adminui + path: server/adminui + if-no-files-found: error + test: runs-on: ubuntu-latest + needs: frontend steps: - uses: actions/checkout@v4 @@ -16,6 +46,12 @@ jobs: go-version: 'stable' cache: true + - name: Use freshly built admin UI + uses: actions/download-artifact@v4 + with: + name: adminui + path: server/adminui + - name: Format check run: | out=$(gofmt -l .) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 11cf62c..36d9fbd 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,6 +9,25 @@ permissions: contents: write jobs: + # ── 0. 构建管理台 SPA(go:embed 依赖它)──────────────── + build-frontend: + runs-on: ubuntu-latest + defaults: + run: + working-directory: web + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: '22' + - run: npm ci + - run: npm run build + - uses: actions/upload-artifact@v4 + with: + name: adminui + path: server/adminui + if-no-files-found: error + # ── 1. 枚举平台,分流到 Linux / macOS runner ───────── list-targets: runs-on: ubuntu-latest @@ -34,7 +53,7 @@ jobs: # ── 2a. Linux runner ───────────────────────────────── build-linux: - needs: list-targets + needs: [list-targets, build-frontend] runs-on: ubuntu-latest strategy: fail-fast: false @@ -48,6 +67,12 @@ jobs: go-version: stable cache: false + - name: Use freshly built admin UI + uses: actions/download-artifact@v4 + with: + name: adminui + path: server/adminui + # ★ 只在 Android 平台启用 NDK 缓存 - name: Cache Android NDK if: startsWith(matrix.target.goos, 'android') @@ -74,7 +99,7 @@ jobs: # ── 2b. macOS runner(仅 iOS)───────────────────────── build-macos: - needs: list-targets + needs: [list-targets, build-frontend] runs-on: macos-latest strategy: fail-fast: false @@ -88,6 +113,12 @@ jobs: go-version: stable cache: false + - name: Use freshly built admin UI + uses: actions/download-artifact@v4 + with: + name: adminui + path: server/adminui + - name: Build continue-on-error: true env: diff --git a/.gitignore b/.gitignore index 3c43037..d940ac1 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,11 @@ **/health_state.json **/relay.jsonl* /android-ndk-*/ + +# Nuxt admin SPA (web/) — build artifacts only; source is committed. +/web/node_modules/ +/web/.nuxt/ +/web/.output/ +/web/dist/ +/web/node_modules/.cache/ +*.tsbuildinfo diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md new file mode 100644 index 0000000..6596673 --- /dev/null +++ b/DEVELOPMENT.md @@ -0,0 +1,340 @@ +# Liapi 开发文档 + +> 面向贡献者与维护者的开发指南。功能规格与配置字段见 [README.md](README.md); +> 协作规范见 [CONTRIBUTING.md](CONTRIBUTING.md);安全策略见 [SECURITY.md](SECURITY.md)。 + +--- + +## 0. 铁律(Must Follow) + +> **任何上传至仓库的内容,必须推送到 `https://github.com/LiStudioorg/liapi` 仓库的 `beta` 分支,严禁推送到 `main` 分支。** + +- 所有 commit / push 一律以 `beta` 为目标分支,`main` 分支禁止直接写入。 +- 当前工作分支即 `beta`(`git branch --show-current` 应为 `beta`)。 +- 提交前务必确认目标分支: + + ```bash + git branch --show-current # 期望输出:beta + git push origin beta # 只推 beta,禁止 git push origin main + ``` + +- 合并到 `main`(如需要)只能通过受控的 Pull Request 由维护者执行,开发者本人不得直接推送。 + +--- + +## 1. 项目定位 + +Liapi 是自托管、OpenAI 兼容的 API 网关:对外暴露 `/v1/*`,对内聚合多个上游 +(OpenAI / Claude / OpenRouter / 硅基流动 / Ollama…),统一 **鉴权、路由、日志、 +限流、配额、故障转移、可观测**。 + +| 是 | 不是 | +|---|---| +| 自托管 HTTP 服务 | 多租户 SaaS | +| OpenAI 兼容网关 | 不做注册 / 支付 / 发票 | +| 统一鉴权 + 路由 + 限流 + 日志 | 不做模型推理 | + +- **技术栈:Go 1.22+(约定 `go 1.22`)/ 纯标准库,零第三方依赖。** +- `go.mod` 必须保持 stdlib-only,这是硬约束(见 CONTRIBUTING)。 +- 单个二进制 + 内嵌管理台(`//go:embed`),`go build` 一步出产物。 + +--- + +## 2. 架构总览 + +``` + ┌──────────────────────────────────────┐ + │ liapi │ + 客户端 ────────────► │ /v1/* 业务入口(OpenAI 兼容) │ + (SDK / base_url) │ ├─ 客户端鉴权(token / device / 策略) │ + │ ├─ 限流 + 日配额 │ + │ ├─ 别名解析 / 参数覆写 │ + │ ├─ 路由(fallback / priority / │ + │ │ latency / cost / group) │ + │ ├─ 转发 + 重试 + 故障转移 │ + │ │ ├─ 流式(SSE) / 非流式 │ + │ │ └─ 用量抽取 │ + │ └─ 日志(JSONL + 环形缓冲) │ + │ │ + │ /admin/api/* 管理接口(独立鉴权) │ + │ / 内嵌管理台(单文件) │ + │ /metrics Prometheus 文本 │ + │ │ + │ 后台 goroutine:健康探测 / 配额清理 / │ + │ 告警 / 日志保留 │ + └──────────────────────────────────────┘ + │ │ │ + ┌────┴───┐ ┌───┴─────┐ ┌──┴──────┐ + │ OpenAI │ │OpenRouter│ │ Ollama │ ... + └────────┘ └─────────┘ └─────────┘ +``` + +**关键设计(改动时务必保持):** + +1. 上游 `base_url` **自带版本前缀**(如 `https://api.openai.com/v1`);转发路径 = + `base_url`(去尾斜杠)+ 客户端路径去掉 `/v1` 前缀(`relativePath`)。 +2. 客户端 token 与上游 API Key **完全分离**:前者校验入站,后者只注入出站。 +3. 故障转移决策必须在**首次 `WriteHeader` 之前**完成;一旦写响应头不再切换上游。 +4. 流式转发**不设 `http.Client.Timeout`**;非流式用 `context.WithTimeout`, + 流式用空闲看门狗(`stream_idle_timeout`),靠客户端断开驱动结束。 + +--- + +## 3. 目录结构 + +``` +liapi/ +├── go.mod # module liapi / go 1.22(零依赖) +├── main.go # 入口:加载配置、装配依赖、启动 HTTP、优雅退出 +├── config/ +│ ├── config.go # Config/Upstream/Device/AliasRule/... + 默认值 + Validate + 原子 Save +│ ├── holder.go # 配置 Holder(RWMutex,热重载单一数据源) +│ └── interop.go # OneAPI channels 导入 +├── common/ +│ ├── errors.go # OpenAI 错误格式 {"error":{...}} 与写出 +│ └── token.go # 常量时间比较 / SHA-256 / 脱敏 +├── auth/ +│ ├── auth.go # 客户端 token / 设备 token 校验 +│ └── admin.go # 管理 token 校验 + 每 IP 失败锁定 +├── routing/ +│ └── router.go # 别名解析 + 候选收集 + fallback/strategy/group/健康过滤 +├── relay/ +│ ├── relay.go # 转发主循环(重试 / 故障转移 / 失败分类) +│ ├── stream.go # SSE 流式复制(Flusher) +│ ├── usage.go # 用量抽取(OpenAI / Anthropic 两套字段) +│ └── http.go # 头透传、响应头清洗、尾缓冲 +├── server/ +│ ├── server.go # ServeMux 路由注册 + admin 中间件(IP/锁定/限流/token) +│ ├── handler_v1.go # /v1/* 业务实现 +│ ├── handler_admin.go # /admin/api/* 实现 + SPA 静态托管 +│ ├── requestid.go # X-Request-ID 中间件 +│ └── adminui/ # 管理台构建产物(go:embed all:adminui),勿手改 +├── web/ # 管理台源码(Nuxt 4 + fuxsto-design,独立于 Go) +│ ├── nuxt.config.ts # ssr:false + nitro.preset=static,产物输出到 ../server/adminui +│ ├── package.json # Nuxt 4 / Vue 3 / Tailwind v4 / fuxsto-design +│ └── app/ +│ ├── app.vue # 根组件 +│ ├── layouts/default.vue # NewAPI 风格侧边栏 + 顶栏 + 路由过渡 +│ ├── pages/*.vue # 概览/上游/令牌/设备/统计/日志/健康/配置/调试 +│ ├── components/ # Field / DialogPanel / StatTile +│ ├── composables/ # useApi(admin token + fetch)/ useUi(toast/confirm) +│ ├── types/api.ts # 与 Go 端 JSON 契约对应的类型 +│ └── assets/css/main.css +├── stats/ +│ ├── logger.go # JSONL 写入 + 环形缓冲 + 保留策略 +│ ├── limiter.go # 滑动窗口限流 +│ ├── quota.go # 每日配额 + 告警阈值 +│ ├── health.go # 后台健康探测 + 持久化 +│ ├── totals.go # 原子聚合计数 +│ ├── aggregate.go # 统计聚合(分维度 / 分位数) +│ ├── metrics.go # Prometheus 指标 +│ ├── alerts.go # Webhook / Bark 告警 + 去重 +│ └── audit.go # 管理端访问审计环 +└── .github/workflows/{ci,release}.yml +``` + +--- + +## 4. 核心数据流 + +### 4.1 请求链路(以 `POST /v1/chat/completions` 为例) + +``` +RequestID 中间件(生成/回显 X-Request-ID) + ├─ 客户端鉴权:Authorization: Bearer → x-api-key → ?token= + │ 常量时间比较;设备 token 仅比对 SHA-256;策略校验(过期 / IP 白名单) + ├─ 限流:滑动窗口(全局 rate_limit_per_minute / 设备 rpm / 策略 rpm)→ 429 + ├─ 日配额:daily_per_token / 设备 daily → 超额 429 + 告警 + ├─ 读 body(MaxBytesReader)→ 413;非法 JSON → 400 + ├─ 解析 model / stream;缺 model → 400 + ├─ 别名解析(aliases / alias_rules)+ 参数覆写 → 最终 model + ├─ 路由:group 过滤 → fallbacks 链 或 strategy 排序 → 健康过滤 + ├─ 转发主循环(重试 + 故障转移) + ├─ 回写:SSE 流式 / 普通复制(清洗响应头) + ├─ 用量抽取(usage)→ totals / aggregate + └─ 写日志(JSONL + 环形缓冲) +``` + +### 4.2 路由(`routing/router.go`) + +1. **别名**:`aliases[model]` 精确优先;否则首条匹配的 `alias_rules`(精确或正则), + 并带回 `params` 覆写。 +2. **候选**:遍历启用上游,按 `group` 与 `Matches(model)`(支持 `"*"` 兜底)过滤。 +3. **排序**: + - 若 `fallbacks[model]` 存在 → 按显式链顺序(仅保留匹配到的上游)。 + - 否则按 `priority` 升序分组,组内按 `route_strategy`: + - `""`/`priority`:`weight` 加权随机(展开 → 洗牌 → 去重保序)。 + - `latency`:`weight * (1000 / max(latency_ms, 50))`,clamp 到 `[1,1000]` 后加权随机。 + - `cost`:按 `prices[model].Input` 升序;无价目则退化为 `priority`。 +4. **健康过滤**:`skip_unhealthy=true` 时剔除不健康上游;若全被剔除则**回退全量** + (防止全挂不可用)。 + +### 4.3 转发与故障转移(`relay/relay.go`) + +失败分类 `failKind`:`failNetwork`(连接失败,安全重试)、`failTimeout` +(可能已入账)、`failUpstream`(429/5xx)。 + +| 情况 | 处理 | +|---|---| +| `2xx` | 回写并向客户端返回;结束 | +| `4xx`(≠429) | **不切换**,原样透传上游错误 | +| `429` / `5xx` | 同上游重试(受 `upstream.retry` 限制),再切换下一候选 | +| 网络错误 | 同上游重试(安全),再切换 | +| 超时 | 仅当 `retry_on_timeout=true` 才重试/切换(防重复计费) | +| 客户端断开 | 记 `499`,立即停止,**绝不重试** | + +- 单上游重试有 `250ms * attempt` 的退避。 +- 每次重试/切换通过 `OnEvent` 上报指标与告警。 + +### 4.4 流式(`relay/stream.go`) + +- 以响应 `Content-Type` 含 `text/event-stream` 判断流式。 +- 逐行读 + 每行 `http.Flusher.Flush()`;客户端 `Write` 出错即停止并关闭上游 body。 +- 响应头清洗:**删除 `Content-Length / Transfer-Encoding / Connection`**,其余透传。 +- 空闲看门狗按 `stream_idle_timeout` 断开长时间无数据连接。 + +--- + +## 5. 配置与热重载 + +- 全部配置由管理台(`http://:8787/`)编辑,保存即热重载。 +- `config.json` 只作首次引导(自动生成、含随机 `admin_token`),权限强制 `0600`; + Windows 跳过权限校验,可用 `LIAPI_SKIP_PERM_CHECK=1` 临时绕过。 +- 保存流程(`config.Save`):临时文件 → `fsync` → `os.Rename` 原子替换 → 再次 `chmod 0600`。 +- 热重载:`Holder.Set(newCfg)`;所有请求**每次现取** `holder.Get()`,不缓存。 +- 管理台是 Nuxt 生成的静态 SPA,产物位于 `server/adminui/`,由 + `server/server.go` 的 `//go:embed all:adminui` 打包进二进制; + `handler_admin.go` 的 `adminUI` 负责静态资源 + SPA 回退(未知路径 → `index.html`)。 +- 构建产物**已提交**(CI/Docker 可在无 Node 环境下 `go build`); + 改动 `web/` 后必须运行 `./buildadmin.sh` 并提交 `server/adminui/`。 + +--- + +## 6. 安全约定(不可违背) + +1. **永不记录密钥**:token 用 `common.MaskToken` 脱敏;`api_key` 一律不入日志。 + 设备 token 只存 SHA-256(`token_hash`),明文仅在创建/轮换时返回一次。 +2. **常量时间比较**:token 校验用 SHA-256 摘要 + `subtle.ConstantTimeCompare`。 +3. **管理面三层防护**:IP 白名单(`admin_allow_ips`)→ 每 IP 失败锁定 → 每 IP 限流 + (`admin_rate_per_minute`)→ admin token。每次尝试写入审计环。 +4. **X-Forwarded-For 仅在配置白名单时信任**(防伪造)。 +5. 日志文件 `0600`;配置文件 `0600`。 + +--- + +## 7. 开发环境与常用命令 + +```bash +git clone https://github.com/LiStudioorg/liapi.git +cd liapi +git checkout beta # 铁律:工作在 beta 分支 +go test ./... +go build -o liapi . +./liapi -config config.json # 首次运行生成 config.json(0600),打印 admin_token +``` + +冒烟: + +```bash +curl http://localhost:8787/v1/models -H "Authorization: Bearer sk-client-aaa" +curl http://localhost:8787/v1/chat/completions -H "Authorization: Bearer sk-client-aaa" \ + -d '{"model":"gpt-4o","messages":[{"role":"user","content":"hi"}]}' -N +``` + +全新装配依赖关系(`main.go`): + +``` +config.Load → Holder → stats.NewLogger / NewLimiter / NewTotals + → relay.New(holder) → stats.NewHealth(holder, relay.Client()) + → routing.NewRouter(holder, health) → auth.NewClient / NewAdmin(holder) + → server.New(...) → health.Start(ctx) → http.Server +``` + +--- + +## 7.1 管理台前端(Nuxt 4 + fuxsto-design) + +管理台源码在 `web/`,与 Go 代码完全解耦;**唯一契约是 `/admin/api/*` 的 JSON**。 + +- 技术栈:Nuxt 4(`ssr: false`)+ Vue 3 + Tailwind CSS v4 + `fuxsto-design` 组件库。 +- 构建:`nuxt generate` + `nitro.preset=static`,`output.publicDir` 指向 + `../server/adminui`,产出纯静态 SPA(客户端路由)。 +- 布局参考 NewApi:左侧固定侧边栏 + 顶栏,页面切换带过渡动画 + (`pageTransition`,`mode: out-in`)。 +- API 客户端:`app/composables/useApi.ts`——admin token 存 `localStorage`, + 请求带 `Authorization: Bearer `,401 时提示重新输入。 +- 类型契约:`app/types/api.ts`,字段须与 `server/handler_admin.go` 保持一致。 + +常用命令(在 `web/` 内): + +```bash +npm install # 安装依赖(首次) +npm run dev # 开发服务器(默认 3000,需自行代理 /admin/api 到 8787) +npm run typecheck # vue-tsc 类型检查 +npm run build # 生成静态产物到 server/adminui +``` + +或在仓库根执行 `./buildadmin.sh` 一键构建。 + +--- + +## 8. 提交前检查清单(本地 = CI 同等要求) + +```bash +gofmt -l . # 必须无输出 +go vet ./... +go test ./... +go build ./... + +cd web && npm run typecheck && npm run build # 前端(改了 web/ 时) +``` + +`.github/workflows/ci.yml` 在**所有分支** push 与 PR 上运行:先构建前端 SPA +(`frontend` job),再以其产物运行 Go 的 format/vet/test/build(`test` job)。 +`.github/workflows/release.yml` 在 tag push 时先构建前端,再经 `buildrelease.sh` +交叉编译,版本注入 `-X main.version=`。 + +**推送:** + +```bash +git branch --show-current # 必须是 beta +git add +git commit -m "..." +git push origin beta # 只推 beta +``` + +--- + +## 9. 测试指南 + +- 测试与被测文件同目录:`foo.go` → `foo_test.go`。 +- 需覆盖的核心逻辑:路由(fallback 链、策略、别名、group、健康过滤)、 + 重试/故障转移分类、限流/配额窗口、配置校验、设备鉴权。 +- HTTP/转发类测试用 `httptest` 起假上游(可注入失败/延迟/SSE)。 +- 时间相关逻辑用注入时钟(如 `SetNow`),**不要**用 `time.Sleep`。 +- 临时产物(health/log 文件)写入临时目录,勿污染仓库。 + +--- + +## 10. 发布流程 + +1. 维护者切 tag(如 `vX.Y.Z`)并推送。 +2. `release.yml` 枚举 `go tool dist list`,Linux/macOS runner 并行交叉编译 + (Android 下载/缓存 NDK;iOS 用 Xcode clang 输出 c-archive)。 +3. 汇总产物 + `checksums.txt`,用 `softprops/action-gh-release` 发布 Release。 + +> 注意:发布/合并涉及 `main` 的操作只能由维护者通过受控流程执行; +> 日常开发一律停留在 `beta`(见第 0 节铁律)。 + +--- + +## 11. 修改配置 schema 的注意事项 + +- 新增/变更字段:同步更新 `config/config.go` 的 struct 与 `Validate()`, + 并在 `README.md` 字段表补充说明与迁移影响。 +- 未讨论不得改动 `go` directive。 +- 保持零第三方依赖;确需功能时优先在树内实现。 + +--- + +*本文档随开发演进修订。功能规格以 README 为准,协作规范以 CONTRIBUTING 为准。* diff --git a/Dockerfile b/Dockerfile index 8259d53..43eb5a8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,20 @@ +# ---- frontend (Nuxt admin SPA) ---- +FROM node:22-alpine AS frontend +WORKDIR /web +COPY web/package.json web/package-lock.json* ./ +RUN npm ci +COPY web/ ./ +# Outputs to ../server/adminui relative to web/ +RUN npm run build + # ---- build ---- FROM golang:1.22-alpine AS build WORKDIR /src COPY go.mod ./ RUN go mod download 2>/dev/null || true COPY . . +# Overlay the freshly built admin SPA over whatever is committed. +COPY --from=frontend /server/adminui ./server/adminui RUN CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o /out/liapi . # ---- run ---- diff --git a/README.md b/README.md index 20936b4..8d73e98 100644 --- a/README.md +++ b/README.md @@ -374,7 +374,7 @@ return failAll(lastErr) # 502 或透传最后一次的 sta | 路径 | 方法 | 说明 | |---|---|---| -| `/` | GET | 管理台单页(go:embed,含设备/统计/配置编辑);`/admin` 301 → `/` | +| `/` | GET | 管理台 SPA(Nuxt 静态构建,go:embed;含设备/统计/配置编辑);`/admin` 301 → `/` | | `/admin/api/overview` | GET | 请求数 / 成功率 / 平均延迟 / token 量 / 费用 / 故障转移数 | | `/admin/api/upstreams` | GET | 上游列表(api_key 脱敏) | | `/admin/api/upstreams` | POST | 新增上游 | @@ -449,6 +449,11 @@ docker build -t liapi . && docker run -p 8787:8787 -v "$PWD/data:/data" liapi 单 HTML(CSS+JS 内联),`go:embed` 进二进制,零构建。Tabs:概览 / 上游 / 令牌 / 日志 / 调试 / 健康。 +> **v2**:管理台已重写为 Nuxt 4 + fuxsto-design 的静态 SPA(源码在 `web/`, +> 产物在 `server/adminui/`,`go:embed all:adminui` 打包;构建见 `./buildadmin.sh`)。 +> 布局参考 NewApi(侧边栏 + 顶栏 + 页面过渡动画),功能覆盖概览 / 上游 / 令牌 / +> 设备 / 统计 / 日志 / 健康 / 配置 / 调试。 + ### P1-9 配置热重载 - 所有请求从 `Holder.Get()` 现取,不缓存。 @@ -556,7 +561,8 @@ config/holder.go server/server.go relay/relay.go auth/auth.go stats/logger.go relay/stream.go auth/admin.go stats/limiter.go relay/usage.go common/errors.go stats/health.go relay/http.go -common/token.go stats/totals.go adminui/index.html +common/token.go stats/totals.go server/adminui/ (SPA) + web/ (Nuxt 源码) ``` --- diff --git a/buildadmin.sh b/buildadmin.sh new file mode 100644 index 0000000..13b3f6d --- /dev/null +++ b/buildadmin.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +# Build the Nuxt admin SPA into server/adminui so the Go binary can embed it. +# The generated assets ARE committed (CI/Docker build Go without Node), so run +# this whenever the frontend changes and commit the result. +set -euo pipefail + +here="$(cd "$(dirname "$0")" && pwd)" +web="$here/web" + +if [ ! -d "$web/node_modules" ]; then + echo "==> installing frontend deps (npm ci)" + (cd "$web" && npm ci) +fi + +echo "==> building admin SPA (nuxt generate)" +(cd "$web" && npm run build) + +echo "==> done. Output embedded from server/adminui/" +echo " Remember to commit server/adminui/ changes." diff --git a/server/adminui/200.html b/server/adminui/200.html new file mode 100644 index 0000000..075ee7b --- /dev/null +++ b/server/adminui/200.html @@ -0,0 +1 @@ +Liapi Admin
\ No newline at end of file diff --git a/server/adminui/404.html b/server/adminui/404.html new file mode 100644 index 0000000..14870e3 --- /dev/null +++ b/server/adminui/404.html @@ -0,0 +1 @@ +Liapi Admin
\ No newline at end of file diff --git a/server/adminui/_nuxt/--2IuJIQ.js b/server/adminui/_nuxt/--2IuJIQ.js new file mode 100644 index 0000000..48e55d3 --- /dev/null +++ b/server/adminui/_nuxt/--2IuJIQ.js @@ -0,0 +1 @@ +import{$ as e,A as t,C as n,E as r,J as i,K as a,M as o,Rt as ee,S as s,St as c,T as te,Vt as l,X as ne,Z as u,_ as d,ct as f,ht as p,ot as re,w as m}from"./BT-50xGH.js";import{n as h}from"./CxZD5dLJ.js";import{f as ie}from"./Dy1Pnbdd.js";import{n as ae}from"#entry";import{c as g,l as _,r as v,t as y}from"./C7_xDZuo.js";import{t as b}from"./D50T9Hbc.js";var x=g(`chart-column`,[[`path`,{d:`M3 3v16a2 2 0 0 0 2 2h16`,key:`c24i48`}],[`path`,{d:`M18 17V9`,key:`2bz60n`}],[`path`,{d:`M13 17V5`,key:`1frdt8`}],[`path`,{d:`M8 17v-3`,key:`17ska0`}]]),S=g(`circle-user`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`circle`,{cx:`12`,cy:`10`,r:`3`,key:`ilqhr7`}],[`path`,{d:`M7 20.662V19a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v1.662`,key:`154egf`}]]),C=g(`flask-conical`,[[`path`,{d:`M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2`,key:`18mbvz`}],[`path`,{d:`M6.453 15h11.094`,key:`3shlmq`}],[`path`,{d:`M8.5 2h7`,key:`csnxdl`}]]),w=g(`gauge`,[[`path`,{d:`m12 14 4-4`,key:`9kzdfg`}],[`path`,{d:`M3.34 19a10 10 0 1 1 17.32 0`,key:`19p75a`}]]),T=g(`key-round`,[[`path`,{d:`M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z`,key:`1s6t7t`}],[`circle`,{cx:`16.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`w0ekpg`}]]),E=g(`layout-dashboard`,[[`rect`,{width:`7`,height:`9`,x:`3`,y:`3`,rx:`1`,key:`10lvy0`}],[`rect`,{width:`7`,height:`5`,x:`14`,y:`3`,rx:`1`,key:`16une8`}],[`rect`,{width:`7`,height:`9`,x:`14`,y:`12`,rx:`1`,key:`1hutg5`}],[`rect`,{width:`7`,height:`5`,x:`3`,y:`16`,rx:`1`,key:`ldoo1y`}]]),D=g(`log-out`,[[`path`,{d:`m16 17 5-5-5-5`,key:`1bji2h`}],[`path`,{d:`M21 12H9`,key:`dn1m92`}],[`path`,{d:`M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4`,key:`1uf3rs`}]]),O=g(`menu`,[[`path`,{d:`M4 5h16`,key:`1tepv9`}],[`path`,{d:`M4 12h16`,key:`1lakjw`}],[`path`,{d:`M4 19h16`,key:`1djgab`}]]),k=g(`moon`,[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]),A=g(`scroll-text`,[[`path`,{d:`M15 12h-5`,key:`r7krc0`}],[`path`,{d:`M15 8h-5`,key:`1khuty`}],[`path`,{d:`M19 17V5a2 2 0 0 0-2-2H4`,key:`zz82l3`}],[`path`,{d:`M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3`,key:`1ph1d7`}]]),j=g(`settings-2`,[[`path`,{d:`M14 17H5`,key:`gfn3mx`}],[`path`,{d:`M19 7h-9`,key:`6i9tg`}],[`circle`,{cx:`17`,cy:`17`,r:`3`,key:`18b49y`}],[`circle`,{cx:`7`,cy:`7`,r:`3`,key:`dfmy0x`}]]),M=g(`server`,[[`rect`,{width:`20`,height:`8`,x:`2`,y:`2`,rx:`2`,ry:`2`,key:`ngkwjq`}],[`rect`,{width:`20`,height:`8`,x:`2`,y:`14`,rx:`2`,ry:`2`,key:`iecqi9`}],[`line`,{x1:`6`,x2:`6.01`,y1:`6`,y2:`6`,key:`16zg32`}],[`line`,{x1:`6`,x2:`6.01`,y1:`18`,y2:`18`,key:`nzw8ys`}]]),N=g(`smartphone`,[[`rect`,{width:`14`,height:`20`,x:`5`,y:`2`,rx:`2`,ry:`2`,key:`1yt0o3`}],[`path`,{d:`M12 18h.01`,key:`mhygvu`}]]),P=g(`sun`,[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m17.66 17.66 1.41 1.41`,key:`ptbguv`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}],[`path`,{d:`m19.07 4.93-1.41 1.41`,key:`1shlcs`}]]),F={class:`flex min-h-screen bg-background text-foreground`},oe={class:`flex h-16 items-center gap-2.5 border-b border-border px-5`},I={class:`grid h-8 w-8 place-items-center rounded-lg bg-primary text-primary-foreground`},L={class:`flex-1 space-y-1 overflow-y-auto p-3`},R={class:`border-t border-border p-3`},z={class:`flex min-w-0 flex-1 flex-col`},B={class:`sticky top-0 z-20 flex h-16 items-center gap-3 border-b border-border bg-background/80 px-4 backdrop-blur-md sm:px-6`},V={class:`text-base font-semibold tracking-tight`},H={class:`ml-auto flex items-center gap-2`},U=[`title`],W={class:`hidden sm:inline`},G={class:`flex-1 p-4 sm:p-6`},K=o({__name:`default`,setup(o){let{token:g,loadToken:K,setToken:q,clearToken:J}=_(),Y=ie(),X=[{to:`/`,label:`概览`,icon:E},{to:`/upstreams`,label:`上游`,icon:M},{to:`/tokens`,label:`令牌`,icon:T},{to:`/devices`,label:`设备`,icon:N},{to:`/stats`,label:`统计`,icon:x},{to:`/logs`,label:`日志`,icon:A},{to:`/health`,label:`健康`,icon:b},{to:`/config`,label:`配置`,icon:j},{to:`/debug`,label:`调试`,icon:C}],Z=p(!1),Q=p(!0);a(()=>{K();let e=localStorage.getItem(`liapi_theme`);Q.value=!e||e===`dark`,$()});function $(){document.documentElement.classList.toggle(`dark`,Q.value),localStorage.setItem(`liapi_theme`,Q.value?`dark`:`light`)}function se(){Q.value=!Q.value,$()}function ce(){let e=window.prompt(`请输入 admin token`,g.value);e!==null&&(q(e),e.trim()&&y.success(`token 已更新`))}re(()=>Y.path,()=>{Z.value=!1});let le=s(()=>X.find(e=>e.to===Y.path)?.label||`概览`);return(a,o)=>{let s=ae;return i(),r(`div`,F,[n(`aside`,{class:ee([`fixed inset-y-0 left-0 z-40 flex w-60 shrink-0 flex-col border-r border-border bg-background transition-transform duration-300 lg:static lg:translate-x-0`,c(Z)?`translate-x-0`:`-translate-x-full`])},[n(`div`,oe,[n(`div`,I,[t(c(w),{size:18})]),o[3]||=n(`div`,{class:`leading-tight`},[n(`div`,{class:`text-sm font-semibold tracking-tight`},`Liapi`),n(`div`,{class:`text-[11px] text-muted-foreground`},`API Gateway`)],-1)]),n(`nav`,L,[(i(),r(d,null,ne(X,r=>t(s,{key:r.to,to:r.to,class:`group flex items-center gap-3 rounded-lg px-3 py-2 text-sm font-medium text-muted-foreground transition-all duration-200 hover:bg-muted hover:text-foreground`,"active-class":`!bg-muted !text-foreground`,"exact-active-class":r.to===`/`?`!bg-muted !text-foreground`:``},{default:f(()=>[(i(),m(e(r.icon),{size:17,class:`transition-transform duration-200 group-hover:scale-110`})),n(`span`,null,l(r.label),1)]),_:2},1032,[`to`,`exact-active-class`])),64))]),n(`div`,R,[n(`button`,{class:`flex w-full items-center gap-3 rounded-lg px-3 py-2 text-sm text-muted-foreground transition-colors hover:bg-muted hover:text-foreground`,onClick:o[0]||=(...e)=>c(J)&&c(J)(...e)},[t(c(D),{size:16}),o[4]||=n(`span`,null,`清除 Token`,-1)])])],2),t(h,{name:`fade`},{default:f(()=>[c(Z)?(i(),r(`div`,{key:0,class:`fixed inset-0 z-30 bg-black/40 lg:hidden`,onClick:o[1]||=e=>Z.value=!1})):te(``,!0)]),_:1}),n(`div`,z,[n(`header`,B,[n(`button`,{class:`grid h-9 w-9 place-items-center rounded-lg text-muted-foreground transition-colors hover:bg-muted hover:text-foreground lg:hidden`,onClick:o[2]||=e=>Z.value=!c(Z)},[(i(),m(e(c(Z)?c(v):c(O)),{size:19}))]),n(`h1`,V,l(c(le)),1),n(`div`,H,[n(`button`,{class:`grid h-9 w-9 place-items-center rounded-lg text-muted-foreground transition-colors hover:bg-muted hover:text-foreground`,title:c(Q)?`切换到亮色`:`切换到暗色`,onClick:se},[(i(),m(e(c(Q)?c(P):c(k)),{size:18}))],8,U),n(`button`,{class:`flex items-center gap-2 rounded-lg border border-border px-3 py-1.5 text-xs font-medium text-muted-foreground transition-colors hover:bg-muted hover:text-foreground`,onClick:ce},[t(c(S),{size:15}),n(`span`,W,l(c(g)?`已认证`:`设置 Token`),1)])])]),n(`main`,G,[u(a.$slots,`default`)])])])}}});export{K as default}; \ No newline at end of file diff --git a/server/adminui/_nuxt/B3nLMP91.js b/server/adminui/_nuxt/B3nLMP91.js new file mode 100644 index 0000000..fc353ee --- /dev/null +++ b/server/adminui/_nuxt/B3nLMP91.js @@ -0,0 +1 @@ +import{A as e,C as t,E as n,J as r,Vt as i,ct as a,k as o}from"./BT-50xGH.js";import{t as s}from"./DKXNkI4w.js";import{n as c,t as l}from"#entry";var u={class:`antialiased bg-white dark:bg-[#020420] dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-[#020420] tracking-wide`},d={class:`max-w-520px text-center`},f=[`textContent`],p=[`textContent`],m=[`textContent`],h={class:`flex items-center justify-center w-full`},g=l({__name:`error-404`,props:{appName:{type:String,default:`Nuxt`},status:{type:Number,default:404},statusText:{type:String,default:`Page not found`},description:{type:String,default:`Sorry, the page you are looking for could not be found.`},backHome:{type:String,default:`Go back home`}},setup(l){let g=l;return s({title:`${g.status} - ${g.statusText} | ${g.appName}`,script:[{innerHTML:`!function(){let e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(let e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver(e=>{for(let t of e)if("childList"===t.type)for(let e of t.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)}).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;let r=function(e){let r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),r.credentials="use-credentials"===e.crossOrigin?"include":"anonymous"===e.crossOrigin?"omit":"same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:`*,:after,:before{box-sizing:border-box;border-style:solid;border-width:0;border-color:var(--un-default-border-color,#e5e7eb)}:after,:before{--un-content:""}html{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}h1,h2{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}h1,h2,p{margin:0}*,:after,:before{--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 #0000;--un-ring-shadow:0 0 #0000;--un-shadow-inset: ;--un-shadow:0 0 #0000;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:#93c5fd80;--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: }`}]}),(s,g)=>{let _=c;return r(),n(`div`,u,[t(`div`,d,[t(`h1`,{class:`font-semibold leading-none mb-4 sm:text-[110px] tabular-nums text-[80px]`,textContent:i(l.status)},null,8,f),t(`h2`,{class:`font-semibold mb-2 sm:text-3xl text-2xl`,textContent:i(l.statusText)},null,8,p),t(`p`,{class:`mb-4 px-2 text-[#64748B] text-md`,textContent:i(l.description)},null,8,m),t(`div`,h,[e(_,{to:`/`,class:`font-medium hover:text-[#00DC82] text-sm underline underline-offset-3`},{default:a(()=>[o(i(l.backHome),1)]),_:1})])])])}}},[[`__scopeId`,`data-v-b8cc6c10`]]);export{g as default}; \ No newline at end of file diff --git a/server/adminui/_nuxt/BB0691XW.js b/server/adminui/_nuxt/BB0691XW.js new file mode 100644 index 0000000..2f770fc --- /dev/null +++ b/server/adminui/_nuxt/BB0691XW.js @@ -0,0 +1 @@ +import{A as e,C as t,J as n,K as r,M as i,St as a,ct as o,ft as s,ht as c,k as l,w as u}from"./BT-50xGH.js";import{c as d,l as f}from"./C7_xDZuo.js";import{t as p}from"./C2auVMGT.js";import{t as m}from"./Biiz67gC.js";import{i as h,r as g,t as _}from"./CLabUxWX.js";import{t as v}from"./Bq3ByqkD.js";var y=d(`file-braces`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1`,key:`1oajmo`}],[`path`,{d:`M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1`,key:`mpwhp6`}]]),b=d(`save`,[[`path`,{d:`M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z`,key:`1c8476`}],[`path`,{d:`M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7`,key:`1ydtos`}],[`path`,{d:`M7 3v4a1 1 0 0 0 1 1h7`,key:`t51u73`}]]),x=d(`upload`,[[`path`,{d:`M12 3v12`,key:`1x0j5s`}],[`path`,{d:`m17 8-5-5-5 5`,key:`7q97r8`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}]]),S={class:`flex flex-wrap items-center gap-2 px-5 py-4`},C={class:`ml-auto flex flex-wrap items-center gap-2`},w={class:`inline-flex cursor-pointer items-center gap-2 rounded-lg border border-border px-3 py-1.5 text-xs font-medium transition-colors hover:bg-muted`},T={class:`inline-flex cursor-pointer items-center gap-2 rounded-lg border border-border px-3 py-1.5 text-xs font-medium transition-colors hover:bg-muted`},E={class:`px-5 pb-5`},D=i({__name:`config`,setup(i){let{request:d,download:D,setToken:O}=f(),{toast:k,confirm:A,handleError:j}=_(),M=c(``),N=c(!1),P=c(!0);async function F(){P.value=!0;try{let e=await d(`/config`);M.value=JSON.stringify(e,null,2)}catch(e){j(e,O)}finally{P.value=!1}}r(F);async function I(){try{JSON.parse(M.value)}catch(e){k.error(`不是合法 JSON: `+e.message);return}if(await A(`保存并热重载`,`校验失败将保留当前配置。`)){N.value=!0;try{await d(`/config`,{method:`POST`,body:M.value}),k.success(`已保存并热重载`),await F()}catch(e){j(e,O)}finally{N.value=!1}}}async function L(){try{await D(`/config/export`,`liapi-config.json`)}catch(e){j(e,O)}}async function R(e,t){let n=await e.text();if(await A(`导入配置`,t===`oneapi`?`从 OneAPI 导入?仅替换 upstreams,其余配置保持不变。`:`导入并覆盖全部配置?当前配置将被替换(校验失败则不替换)。`,{danger:t!==`oneapi`}))try{await d(t===`oneapi`?`/config/import?format=oneapi`:`/config/import`,{method:`POST`,body:n}),k.success(t===`oneapi`?`OneAPI 上游已导入`:`导入成功`),await F()}catch(e){j(e,O)}}function z(e,t){let n=e.target,r=n.files?.[0];r&&R(r,t),n.value=``}return(r,i)=>(n(),u(a(g),{padding:`none`},{header:o(()=>[t(`div`,S,[i[8]||=t(`h2`,{class:`text-sm font-semibold`},`配置(在线编辑 + 热重载)`,-1),t(`div`,C,[e(a(h),{variant:`outline`,size:`sm`,icon:a(m),loading:a(P),onClick:F},{default:o(()=>[...i[3]||=[l(` 重新加载 `,-1)]]),_:1},8,[`icon`,`loading`]),e(a(h),{variant:`primary`,size:`sm`,icon:a(b),loading:a(N),onClick:I},{default:o(()=>[...i[4]||=[l(` 保存并热重载 `,-1)]]),_:1},8,[`icon`,`loading`]),e(a(h),{variant:`outline`,size:`sm`,icon:a(p),onClick:L},{default:o(()=>[...i[5]||=[l(` 导出 JSON `,-1)]]),_:1},8,[`icon`]),t(`label`,w,[e(a(x),{size:15}),i[6]||=l(` 导入 JSON `,-1),t(`input`,{type:`file`,accept:`.json,application/json`,class:`hidden`,onChange:i[0]||=e=>z(e,`liapi`)},null,32)]),t(`label`,T,[e(a(y),{size:15}),i[7]||=l(` 导入 OneAPI `,-1),t(`input`,{type:`file`,accept:`.json,application/json`,class:`hidden`,onChange:i[1]||=e=>z(e,`oneapi`)},null,32)])])])]),default:o(()=>[t(`div`,E,[i[9]||=t(`p`,{class:`mb-3 text-xs text-muted-foreground`},` 「重新加载」拉取的配置中密钥已脱敏,保存时脱敏值会自动还原为原密钥。 「导出 JSON」包含完整密钥(含 admin_token / api_key),请妥善保管。 OneAPI 导入仅替换 upstreams 列表,其余配置保持不变。 `,-1),e(a(v),{modelValue:a(M),"onUpdate:modelValue":i[2]||=e=>s(M)?M.value=e:null,rows:22,resize:`vertical`,placeholder:`{ }`,class:`font-mono text-xs`},null,8,[`modelValue`])])]),_:1}))}});export{D as default}; \ No newline at end of file diff --git a/server/adminui/_nuxt/BT-50xGH.js b/server/adminui/_nuxt/BT-50xGH.js new file mode 100644 index 0000000..be9c98c --- /dev/null +++ b/server/adminui/_nuxt/BT-50xGH.js @@ -0,0 +1,3 @@ +var e=Error.captureStackTrace,t=class t extends Error{name;code;docs;fix;sources;data;get why(){return this.message}constructor(n,r=t){super(n.why,{cause:n.cause}),this.code=this.name=n.code,this.fix=n.fix,this.docs=n.docs,this.sources=n.sources,this.data=n.data,e?.(this,r)}toJSON(){return{name:this.name,why:this.why,fix:this.fix,docs:this.docs,sources:this.sources,cause:this.cause,data:this.data,stack:this.stack}}};function n(e,t){return typeof e==`string`?`${e}/${t.toLowerCase()}`:e?.(t)}function r(e={}){let{docsBase:r,reporters:i=[]}=e;return new Proxy({},{get(e,a){if(typeof a!=`string`)return;let o=(e={},s={})=>{let c=n(r,a),l=new t({code:a,why:c??``,docs:c,cause:e.cause,sources:e.sources},o);for(let e of i)e(l,s);return l};return o}})}function i(e){return`https://nuxt.com/docs/4.x/errors/${e.replace(`NUXT_`,``).toLowerCase()}`}var a=[e=>{console.error(`[${e.name}]`)}],o=r({docsBase:i,reporters:a});function s(e){let t=Object.create(null);for(let n of e.split(`,`))t[n]=1;return e=>e in t}var c={},l=[],u=()=>{},d=()=>!1,f=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),p=e=>e.startsWith(`onUpdate:`),m=Object.assign,h=(e,t)=>{let n=e.indexOf(t);n>-1&&e.splice(n,1)},g=Object.prototype.hasOwnProperty,_=(e,t)=>g.call(e,t),v=Array.isArray,y=e=>te(e)===`[object Map]`,b=e=>te(e)===`[object Set]`,x=e=>te(e)===`[object Date]`,S=e=>te(e)===`[object RegExp]`,C=e=>typeof e==`function`,w=e=>typeof e==`string`,T=e=>typeof e==`symbol`,E=e=>typeof e==`object`&&!!e,D=e=>(E(e)||C(e))&&C(e.then)&&C(e.catch),ee=Object.prototype.toString,te=e=>ee.call(e),ne=e=>te(e).slice(8,-1),re=e=>te(e)===`[object Object]`,ie=e=>w(e)&&e!==`NaN`&&e[0]!==`-`&&``+parseInt(e,10)===e,ae=s(`,key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted`),oe=e=>{let t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},O=/-\w/g,k=oe(e=>e.replace(O,e=>e.slice(1).toUpperCase())),se=/\B([A-Z])/g,ce=oe(e=>e.replace(se,`-$1`).toLowerCase()),le=oe(e=>e.charAt(0).toUpperCase()+e.slice(1)),ue=oe(e=>e?`on${le(e)}`:``),A=(e,t)=>!Object.is(e,t),de=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},pe=e=>{let t=parseFloat(e);return isNaN(t)?e:t},me=e=>{let t=w(e)?Number(e):NaN;return isNaN(t)?e:t},he,ge=()=>he||=typeof globalThis<`u`?globalThis:typeof self<`u`?self:typeof window<`u`?window:typeof global<`u`?global:{};function _e(e){if(v(e)){let t={};for(let n=0;ne.startsWith(`/*`)?``:e).split(ve).forEach(e=>{if(e){let n=e.split(ye);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}function Se(e){let t=``;if(w(e))t=e;else if(v(e))for(let n=0;n!!(e&&e.__v_isRef===!0),Ne=e=>w(e)?e:e==null?``:v(e)||E(e)&&(e.toString===ee||!C(e.toString))?Me(e)?Ne(e.value):JSON.stringify(e,Pe,2):String(e),Pe=(e,t)=>Me(t)?Pe(e,t.value):y(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((e,[t,n],r)=>(e[Fe(t,r)+` =>`]=n,e),{})}:b(t)?{[`Set(${t.size})`]:[...t.values()].map(e=>Fe(e))}:T(t)?Fe(t):E(t)&&!v(t)&&!re(t)?String(t):t,Fe=(e,t=``)=>T(e)?`Symbol(${e.description??t})`:e,j,Ie=class{constructor(e=!1){this.detached=e,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!e&&j&&(j.active?(this.parent=j,this.index=(j.scopes||(j.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let e,t;if(this.scopes){let n=this.scopes.slice();for(e=0,t=n.length;e0&&--this._on===0){if(j===this)j=this.prevScope;else{let e=j;for(;e;){if(e.prevScope===this){e.prevScope=this.prevScope;break}e=e.prevScope}}this.prevScope=void 0}}stop(e){if(this._active){this._active=!1;let t,n;for(t=0,n=this.effects.length;t0)return;if(We){let e=We;for(We=void 0;e;){let t=e.next;e.next=void 0,e.flags&=-9,e=t}}let e;for(;Ue;){let t=Ue;for(Ue=void 0;t;){let n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(t){e||=t}t=n}}if(e)throw e}function Je(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Ye(e){let t,n=e.depsTail,r=n;for(;r;){let e=r.prevDep;r.version===-1?(r===n&&(n=e),Qe(r),$e(r)):t=r,r.dep.activeLink=r.prevActiveLink,r.prevActiveLink=void 0,r=e}e.deps=t,e.depsTail=n}function Xe(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Ze(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Ze(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===it)||(e.globalVersion=it,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Xe(e))))return;e.flags|=2;let t=e.dep,n=M,r=N;M=e,N=!0;try{Je(e);let n=e.fn(e._value);(t.version===0||A(n,e._value))&&(e.flags|=128,e._value=n,t.version++)}catch(e){throw t.version++,e}finally{M=n,N=r,Ye(e),e.flags&=-3}}function Qe(e,t=!1){let{dep:n,prevSub:r,nextSub:i}=e;if(r&&(r.nextSub=i,e.prevSub=void 0),i&&(i.prevSub=r,e.nextSub=void 0),n.subs===e&&(n.subs=r,!r&&n.computed)){n.computed.flags&=-5;for(let e=n.computed.deps;e;e=e.nextDep)Qe(e,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function $e(e){let{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}var N=!0,et=[];function tt(){et.push(N),N=!1}function nt(){let e=et.pop();N=e===void 0||e}function rt(e){let{cleanup:t}=e;if(e.cleanup=void 0,t){let e=M;M=void 0;try{t()}finally{M=e}}}var it=0,at=class{constructor(e,t){this.sub=e,this.dep=t,this.version=t.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}},ot=class{constructor(e){this.computed=e,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(e){if(!M||!N||M===this.computed)return;let t=this.activeLink;if(t===void 0||t.sub!==M)t=this.activeLink=new at(M,this),M.deps?(t.prevDep=M.depsTail,M.depsTail.nextDep=t,M.depsTail=t):M.deps=M.depsTail=t,st(t);else if(t.version===-1&&(t.version=this.version,t.nextDep)){let e=t.nextDep;e.prevDep=t.prevDep,t.prevDep&&(t.prevDep.nextDep=e),t.prevDep=M.depsTail,t.nextDep=void 0,M.depsTail.nextDep=t,M.depsTail=t,M.deps===t&&(M.deps=e)}return t}trigger(e){this.version++,it++,this.notify(e)}notify(e){Ke();try{for(let e=this.subs;e;e=e.prevSub)e.sub.notify()&&e.sub.dep.notify()}finally{qe()}}};function st(e){if(e.dep.sc++,e.sub.flags&4){let t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let e=t.deps;e;e=e.nextDep)st(e)}let n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}var ct=new WeakMap,lt=Symbol(``),ut=Symbol(``),dt=Symbol(``);function P(e,t,n){if(N&&M){let t=ct.get(e);t||ct.set(e,t=new Map);let r=t.get(n);r||(t.set(n,r=new ot),r.map=t,r.key=n),r.track()}}function ft(e,t,n,r,i,a){let o=ct.get(e);if(!o){it++;return}let s=e=>{e&&e.trigger()};if(Ke(),t===`clear`)o.forEach(s);else{let i=v(e),a=i&&ie(n);if(i&&n===`length`){let e=Number(r);o.forEach((t,n)=>{(n===`length`||n===dt||!T(n)&&n>=e)&&s(t)})}else switch((n!==void 0||o.has(void 0))&&s(o.get(n)),a&&s(o.get(dt)),t){case`add`:i?a&&s(o.get(`length`)):(s(o.get(lt)),y(e)&&s(o.get(ut)));break;case`delete`:i||(s(o.get(lt)),y(e)&&s(o.get(ut)));break;case`set`:y(e)&&s(o.get(lt))}}qe()}function pt(e,t){let n=ct.get(e);return n&&n.get(t)}function mt(e){let t=L(e);return t===e||(P(t,`iterate`,dt),I(e))?t:F(e)?en(e)?t.map(e=>rn(R(e))):t.map(rn):t.map(R)}function ht(e){return P(e=L(e),`iterate`,dt),e}function gt(e,t){return F(e)?rn(en(e)?R(t):t):R(t)}var _t={__proto__:null,[Symbol.iterator](){return vt(this,Symbol.iterator,e=>gt(this,e))},concat(...e){return mt(this).concat(...e.map(e=>v(e)?mt(e):e))},entries(){return vt(this,`entries`,e=>(e[1]=gt(this,e[1]),e))},every(e,t){return bt(this,`every`,e,t,void 0,arguments)},filter(e,t){return bt(this,`filter`,e,t,e=>e.map(e=>gt(this,e)),arguments)},find(e,t){return bt(this,`find`,e,t,e=>gt(this,e),arguments)},findIndex(e,t){return bt(this,`findIndex`,e,t,void 0,arguments)},findLast(e,t){return bt(this,`findLast`,e,t,e=>gt(this,e),arguments)},findLastIndex(e,t){return bt(this,`findLastIndex`,e,t,void 0,arguments)},forEach(e,t){return bt(this,`forEach`,e,t,void 0,arguments)},includes(...e){return St(this,`includes`,e)},indexOf(...e){return St(this,`indexOf`,e)},join(e){return mt(this).join(e)},lastIndexOf(...e){return St(this,`lastIndexOf`,e)},map(e,t){return bt(this,`map`,e,t,void 0,arguments)},pop(){return Ct(this,`pop`)},push(...e){return Ct(this,`push`,e)},reduce(e,...t){return xt(this,`reduce`,e,t)},reduceRight(e,...t){return xt(this,`reduceRight`,e,t)},shift(){return Ct(this,`shift`)},some(e,t){return bt(this,`some`,e,t,void 0,arguments)},splice(...e){return Ct(this,`splice`,e)},toReversed(){return mt(this).toReversed()},toSorted(e){return mt(this).toSorted(e)},toSpliced(...e){return mt(this).toSpliced(...e)},unshift(...e){return Ct(this,`unshift`,e)},values(){return vt(this,`values`,e=>gt(this,e))}};function vt(e,t,n){let r=ht(e),i=r[t]();return r!==e&&!I(e)&&(i._next=i.next,i.next=()=>{let e=i._next();return e.done||(e.value=n(e.value)),e}),i}var yt=Array.prototype;function bt(e,t,n,r,i,a){let o=ht(e),s=o!==e&&!I(e),c=o[t];if(c!==yt[t]){let t=c.apply(e,a);return s?R(t):t}let l=n;o!==e&&(s?l=function(t,r){return n.call(this,gt(e,t),r,e)}:n.length>2&&(l=function(t,r){return n.call(this,t,r,e)}));let u=c.call(o,l,r);return s&&i?i(u):u}function xt(e,t,n,r){let i=ht(e),a=i!==e&&!I(e),o=n,s=!1;i!==e&&(a?(s=r.length===0,o=function(t,r,i){return s&&(s=!1,t=gt(e,t)),n.call(this,t,gt(e,r),i,e)}):n.length>3&&(o=function(t,r,i){return n.call(this,t,r,i,e)}));let c=i[t](o,...r);return s?gt(e,c):c}function St(e,t,n){let r=L(e);P(r,`iterate`,dt);let i=r[t](...n);return(i===-1||i===!1)&&tn(n[0])?(n[0]=L(n[0]),r[t](...n)):i}function Ct(e,t,n=[]){tt(),Ke();let r=L(e)[t].apply(e,n);return qe(),nt(),r}var wt=s(`__proto__,__v_isRef,__isVue`),Tt=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!==`arguments`&&e!==`caller`).map(e=>Symbol[e]).filter(T));function Et(e){T(e)||(e=String(e));let t=L(this);return P(t,`has`,e),t.hasOwnProperty(e)}var Dt=class{constructor(e=!1,t=!1){this._isReadonly=e,this._isShallow=t}get(e,t,n){if(t===`__v_skip`)return e.__v_skip;let r=this._isReadonly,i=this._isShallow;if(t===`__v_isReactive`)return!r;if(t===`__v_isReadonly`)return r;if(t===`__v_isShallow`)return i;if(t===`__v_raw`)return n===(r?i?qt:Kt:i?Gt:Wt).get(e)||Object.getPrototypeOf(e)===Object.getPrototypeOf(n)?e:void 0;let a=v(e);if(!r){let e;if(a&&(e=_t[t]))return e;if(t===`hasOwnProperty`)return Et}let o=Reflect.get(e,t,z(e)?e:n);if((T(t)?Tt.has(t):wt(t))||(r||P(e,`get`,t),i))return o;if(z(o)){let e=a&&ie(t)?o:o.value;return r&&E(e)?Zt(e):e}return E(o)?r?Zt(o):Yt(o):o}},Ot=class extends Dt{constructor(e=!1){super(!1,e)}set(e,t,n,r){let i=e[t],a=v(e)&&ie(t);if(!this._isShallow){let e=F(i);if(!I(n)&&!F(n)&&(i=L(i),n=L(n)),!a&&z(i)&&!z(n))return e||(i.value=n),!0}let o=a?Number(t)e,Ft=e=>Reflect.getPrototypeOf(e);function It(e,t,n){return function(...r){let i=this.__v_raw,a=L(i),o=y(a),s=e===`entries`||e===Symbol.iterator&&o,c=e===`keys`&&o,l=i[e](...r),u=n?Pt:t?rn:R;return!t&&P(a,`iterate`,c?ut:lt),m(Object.create(l),{next(){let{value:e,done:t}=l.next();return t?{value:e,done:t}:{value:s?[u(e[0]),u(e[1])]:u(e),done:t}}})}}function Lt(e){return function(...t){return e===`delete`?!1:e===`clear`?void 0:this}}function Rt(e,t){let n={get(n){let r=this.__v_raw,i=L(r),a=L(n);e||(A(n,a)&&P(i,`get`,n),P(i,`get`,a));let{has:o}=Ft(i),s=t?Pt:e?rn:R;if(o.call(i,n))return s(r.get(n));if(o.call(i,a))return s(r.get(a));r!==i&&r.get(n)},get size(){let t=this.__v_raw;return!e&&P(L(t),`iterate`,lt),t.size},has(t){let n=this.__v_raw,r=L(n),i=L(t);return e||(A(t,i)&&P(r,`has`,t),P(r,`has`,i)),t===i?n.has(t):n.has(t)||n.has(i)},forEach(n,r){let i=this,a=i.__v_raw,o=L(a),s=t?Pt:e?rn:R;return!e&&P(o,`iterate`,lt),a.forEach((e,t)=>n.call(r,s(e),s(t),i))}};return m(n,e?{add:Lt(`add`),set:Lt(`set`),delete:Lt(`delete`),clear:Lt(`clear`)}:{add(e){let n=L(this),r=Ft(n),i=L(e),a=!t&&!I(e)&&!F(e)?i:e;return r.has.call(n,a)||A(e,a)&&r.has.call(n,e)||A(i,a)&&r.has.call(n,i)||(n.add(a),ft(n,`add`,a,a)),this},set(e,n){!t&&!I(n)&&!F(n)&&(n=L(n));let r=L(this),{has:i,get:a}=Ft(r),o=i.call(r,e);o||=(e=L(e),i.call(r,e));let s=a.call(r,e);return r.set(e,n),o?A(n,s)&&ft(r,`set`,e,n,s):ft(r,`add`,e,n),this},delete(e){let t=L(this),{has:n,get:r}=Ft(t),i=n.call(t,e);i||=(e=L(e),n.call(t,e));let a=r?r.call(t,e):void 0,o=t.delete(e);return i&&ft(t,`delete`,e,void 0,a),o},clear(){let e=L(this),t=e.size!==0,n=e.clear();return t&&ft(e,`clear`,void 0,void 0,void 0),n}}),[`keys`,`values`,`entries`,Symbol.iterator].forEach(r=>{n[r]=It(r,e,t)}),n}function zt(e,t){let n=Rt(e,t);return(t,r,i)=>r===`__v_isReactive`?!e:r===`__v_isReadonly`?e:r===`__v_raw`?t:Reflect.get(_(n,r)&&r in t?n:t,r,i)}var Bt={get:zt(!1,!1)},Vt={get:zt(!1,!0)},Ht={get:zt(!0,!1)},Ut={get:zt(!0,!0)},Wt=new WeakMap,Gt=new WeakMap,Kt=new WeakMap,qt=new WeakMap;function Jt(e){switch(e){case`Object`:case`Array`:return 1;case`Map`:case`Set`:case`WeakMap`:case`WeakSet`:return 2;default:return 0}}function Yt(e){return F(e)?e:$t(e,!1,At,Bt,Wt)}function Xt(e){return $t(e,!1,Mt,Vt,Gt)}function Zt(e){return $t(e,!0,jt,Ht,Kt)}function Qt(e){return $t(e,!0,Nt,Ut,qt)}function $t(e,t,n,r,i){if(!E(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;let a=i.get(e);if(a)return a;let o=Jt(ne(e));if(o===0)return e;let s=new Proxy(e,o===2?r:n);return i.set(e,s),s}function en(e){return F(e)?en(e.__v_raw):!!(e&&e.__v_isReactive)}function F(e){return!!(e&&e.__v_isReadonly)}function I(e){return!!(e&&e.__v_isShallow)}function tn(e){return e?!!e.__v_raw:!1}function L(e){let t=e&&e.__v_raw;return t?L(t):e}function nn(e){return!_(e,`__v_skip`)&&Object.isExtensible(e)&&fe(e,`__v_skip`,!0),e}var R=e=>E(e)?Yt(e):e,rn=e=>E(e)?Zt(e):e;function z(e){return e?e.__v_isRef===!0:!1}function an(e){return sn(e,!1)}function on(e){return sn(e,!0)}function sn(e,t){return z(e)?e:new cn(e,t)}var cn=class{constructor(e,t){this.dep=new ot,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=t?e:L(e),this._value=t?e:R(e),this.__v_isShallow=t}get value(){return this.dep.track(),this._value}set value(e){let t=this._rawValue,n=this.__v_isShallow||I(e)||F(e);e=n?e:L(e),A(e,t)&&(this._rawValue=e,this._value=n?e:R(e),this.dep.trigger())}};function ln(e){return z(e)?e.value:e}function un(e){return C(e)?e():ln(e)}var dn={get:(e,t,n)=>t===`__v_raw`?e:ln(Reflect.get(e,t,n)),set:(e,t,n,r)=>{let i=e[t];return z(i)&&!z(n)?(i.value=n,!0):Reflect.set(e,t,n,r)}};function fn(e){return en(e)?e:new Proxy(e,dn)}var pn=class{constructor(e,t,n){this._object=e,this._defaultValue=n,this.__v_isRef=!0,this._value=void 0,this._key=T(t)?t:String(t),this._raw=L(e);let r=!0,i=e;if(!v(e)||T(this._key)||!ie(this._key))do r=!tn(i)||I(i);while(r&&(i=i.__v_raw));this._shallow=r}get value(){let e=this._object[this._key];return this._shallow&&(e=ln(e)),this._value=e===void 0?this._defaultValue:e}set value(e){if(this._shallow&&z(this._raw[this._key])){let t=this._object[this._key];if(z(t)){t.value=e;return}}this._object[this._key]=e}get dep(){return pt(this._raw,this._key)}},mn=class{constructor(e){this._getter=e,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}};function hn(e,t,n){return z(e)?e:C(e)?new mn(e):E(e)&&arguments.length>1?gn(e,t,n):an(e)}function gn(e,t,n){return new pn(e,t,n)}var _n=class{constructor(e,t,n){this.fn=e,this.setter=t,this._value=void 0,this.dep=new ot(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=it-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!t,this.isSSR=n}notify(){if(this.flags|=16,!(this.flags&8)&&M!==this)return Ge(this,!0),!0}get value(){let e=this.dep.track();return Ze(this),e&&(e.version=this.dep.version),this._value}set value(e){this.setter&&this.setter(e)}};function vn(e,t,n=!1){let r,i;return C(e)?r=e:(r=e.get,i=e.set),new _n(r,i,n)}var yn={},bn=new WeakMap,xn=void 0;function Sn(e,t=!1,n=xn){if(n){let t=bn.get(n);t||bn.set(n,t=[]),t.push(e)}}function Cn(e,t,n=c){let{immediate:r,deep:i,once:a,scheduler:o,augmentJob:s,call:l}=n,d=e=>i?e:I(e)||i===!1||i===0?wn(e,1):wn(e),f,p,m,g,_=!1,y=!1;if(z(e)?(p=()=>e.value,_=I(e)):en(e)?(p=()=>d(e),_=!0):v(e)?(y=!0,_=e.some(e=>en(e)||I(e)),p=()=>e.map(e=>{if(z(e))return e.value;if(en(e))return d(e);if(C(e))return l?l(e,2):e()})):p=C(e)?t?l?()=>l(e,2):e:()=>{if(m){tt();try{m()}finally{nt()}}let t=xn;xn=f;try{return l?l(e,3,[g]):e(g)}finally{xn=t}}:u,t&&i){let e=p,t=i===!0?1/0:i;p=()=>wn(e(),t)}let b=Re(),x=()=>{f.stop(),b&&b.active&&h(b.effects,f)};if(a&&t){let e=t;t=(...t)=>{let n=e(...t);return x(),n}}let S=y?Array(e.length).fill(yn):yn,w=e=>{if(f.flags&1&&(f.dirty||e)){if(t){let n=f.run();if(e||i||_||(y?n.some((e,t)=>A(e,S[t])):A(n,S))){m&&m();let e=xn;xn=f;try{let e=[n,S===yn?void 0:y&&S[0]===yn?[]:S,g];S=n,l?l(t,3,e):t(...e)}finally{xn=e}}}else f.run()}};return s&&s(w),f=new Ve(p),f.scheduler=o?()=>o(w,!1):w,g=e=>Sn(e,!1,f),m=f.onStop=()=>{let e=bn.get(f);if(e){if(l)l(e,4);else for(let t of e)t();bn.delete(f)}},t?r?w(!0):S=f.run():o?o(w.bind(null,!0),!0):f.run(),x.pause=f.pause.bind(f),x.resume=f.resume.bind(f),x.stop=x,x}function wn(e,t=1/0,n){if(t<=0||!E(e)||e.__v_skip||(n||=new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,z(e))wn(e.value,t,n);else if(v(e))for(let r=0;r{wn(e,t,n)});else if(re(e)){for(let r in e)wn(e[r],t,n);for(let r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&wn(e[r],t,n)}return e}function Tn(e,t,n,r){try{return r?e(...r):e()}catch(e){Dn(e,t,n)}}function En(e,t,n,r){if(C(e)){let i=Tn(e,t,n,r);return i&&D(i)&&i.catch(e=>{Dn(e,t,n)}),i}if(v(e)){let i=[];for(let a=0;a>>1,i=B[r],a=Hn(i);a=Hn(n)?B.push(e):B.splice(In(t),0,e),e.flags|=1,Rn()}}function Rn(){Pn||=Nn.then(Un)}function zn(e){if(!v(e))jn&&e.id===-1?jn.splice(Mn+1,0,e):e.flags&1||(An.push(e),e.flags|=1);else for(let t=0;tHn(e)-Hn(t));if(An.length=0,jn){for(let t=0;te.id==null?e.flags&2?-1:1/0:e.id;function Un(e){try{for(kn=0;kn{r._d&&ho(-1);let i=Gn(t),a=uo.length,o;try{o=e(...n)}finally{for(let e=uo.length;e>a;e--)po();Gn(i),r._d&&ho(1)}return o};return r._n=!0,r._c=!0,r._d=!0,r}function qn(e,t){if(V===null)return e;let n=qo(V),r=e.dirs||=[];for(let e=0;e1)return n&&C(t)?t.call(r&&r.proxy):t}}function Zn(){return!!(Po()||oa)}var Qn=Symbol.for(`v-scx`),$n=()=>Xn(Qn);function er(e,t){return nr(e,null,t)}function tr(e,t,n){return nr(e,t,n)}function nr(e,t,n=c){let{immediate:r,deep:i,flush:a,once:o}=n,s=m({},n),l=t&&r||!t&&a!==`post`,d;if(Bo){if(a===`sync`){let e=$n();d=e.__watcherHandles||=[]}else if(!l){let e=()=>{};return e.stop=u,e.resume=u,e.pause=u,e}}let f=$;s.call=(e,t,n)=>En(e,f,t,n);let p=!1;a===`post`?s.scheduler=e=>{G(e,f&&f.suspense)}:a!==`sync`&&(p=!0,s.scheduler=(e,t)=>{t?e():Ln(e)}),s.augmentJob=e=>{t&&(e.flags|=4),p&&(e.flags|=2,f&&(e.id=f.uid,e.i=f))};let h=Cn(e,t,s);return Bo&&(d?d.push(h):l&&h()),h}function rr(e,t,n){let r=this.proxy,i=w(e)?e.includes(`.`)?ir(r,e):()=>r[e]:e.bind(r,r),a;C(t)?a=t:(a=t.handler,n=t);let o=Lo(this),s=nr(i,a.bind(r),n);return o(),s}function ir(e,t){let n=t.split(`.`);return()=>{let t=e;for(let e=0;ee.__isTeleport,cr=e=>e&&(e.disabled||e.disabled===``),lr=e=>e&&(e.defer||e.defer===``),ur=e=>typeof SVGElement<`u`&&e instanceof SVGElement,dr=e=>typeof MathMLElement==`function`&&e instanceof MathMLElement,fr=(e,t)=>{let n=e&&e.to;return w(n)?t?t(n):null:n},pr={name:`Teleport`,__isTeleport:!0,process(e,t,n,r,i,a,o,s,c,l){let{mc:u,pc:d,pbc:f,o:{insert:p,querySelector:m,createText:h,createComment:g,parentNode:_}}=l,v=cr(t.props),{dynamicChildren:y}=t,b=(e,t,n)=>{e.shapeFlag&16&&u(e.children,t,n,i,a,o,s,c)},x=(e=t)=>{let n=cr(e.props),r=e.target=fr(e.props,m),a=vr(r,e,h,p);r&&(o!==`svg`&&ur(r)?o=`svg`:o!==`mathml`&&dr(r)&&(o=`mathml`),i&&i.isCE&&(i.ce._teleportTargets||(i.ce._teleportTargets=new Set)).add(r),n||(b(e,r,a),_r(e,!1)))},S=e=>{let t=()=>{if(ar.get(e)===t){if(ar.delete(e),cr(e.props)){let t=_(e.el)||n;b(e,t,e.anchor),_r(e,!0)}x(e)}};ar.set(e,t),G(t,a)};if(e==null){let e=t.el=h(``),i=t.anchor=h(``);if(p(e,n,r),p(i,n,r),lr(t.props)||a&&a.pendingBranch){S(t);return}v&&(b(t,n,i),_r(t,!0)),x()}else{t.el=e.el;let r=t.anchor=e.anchor,u=ar.get(e);if(u){u.flags|=8,ar.delete(e),S(t);return}t.targetStart=e.targetStart;let p=t.target=e.target,h=t.targetAnchor=e.targetAnchor,g=cr(e.props),_=g?n:p,b=g?r:h;if(o===`svg`||ur(p)?o=`svg`:(o===`mathml`||dr(p))&&(o=`mathml`),y?(f(e.dynamicChildren,y,_,i,a,o,s),Wa(e,t,!0)):c||d(e,t,_,b,i,a,o,s,!1),v)g?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):mr(t,n,r,l,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){let e=fr(t.props,m);e&&(t.target=e,mr(t,e,null,l,0))}else g&&mr(t,p,h,l,1);_r(t,v)}},remove(e,t,n,{um:r,o:{remove:i}},a){let{shapeFlag:o,children:s,anchor:c,targetStart:l,targetAnchor:u,target:d,props:f}=e,p=cr(f),m=a||!p,h=ar.get(e);if(h&&(h.flags|=8,ar.delete(e)),d&&(i(l),i(u)),a&&i(c),!h&&(p||d)&&o&16)for(let e=0;e{e.isMounted=!0}),bi(()=>{e.isUnmounting=!0}),e}var U=[Function,Array],xr={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:U,onEnter:U,onAfterEnter:U,onEnterCancelled:U,onBeforeLeave:U,onLeave:U,onAfterLeave:U,onLeaveCancelled:U,onBeforeAppear:U,onAppear:U,onAfterAppear:U,onAppearCancelled:U},Sr=e=>{let t=e.subTree;return t.component?Sr(t.component):t},Cr={name:`BaseTransition`,props:xr,setup(e,{slots:t}){let n=Po(),r=br();return()=>{let i=t.default&&jr(t.default(),!0),a=i&&i.length?wr(i):n.subTree?Do():void 0;if(!a)return;let o=L(e),{mode:s}=o;if(r.isLeaving)return Or(a);let c=kr(a);if(!c)return Or(a);let l=Dr(c,o,r,n,e=>l=e);c.type!==q&&Ar(c,l);let u=n.subTree&&kr(n.subTree);if(u&&u.type!==q&&!Y(u,c)&&Sr(n).type!==q){let e=Dr(u,o,r,n);if(Ar(u,e),s===`out-in`&&c.type!==q)return r.isLeaving=!0,e.afterLeave=()=>{r.isLeaving=!1,n.job.flags&8||n.update(),delete e.afterLeave,u=void 0},Or(a);s===`in-out`&&c.type!==q?e.delayLeave=(e,t,n)=>{let i=Er(r,u);i[String(u.key)]=u,e[H]=()=>{t(),e[H]=void 0,delete l.delayedLeave,u=void 0},l.delayedLeave=()=>{n(),delete l.delayedLeave,u=void 0}}:u=void 0}else u&&=void 0;return a}}};function wr(e){let t=e[0];if(e.length>1){for(let n of e)if(n.type!==q){t=n;break}}return t}var Tr=Cr;function Er(e,t){let{leavingVNodes:n}=e,r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function Dr(e,t,n,r,i){let{appear:a,mode:o,persisted:s=!1,onBeforeEnter:c,onEnter:l,onAfterEnter:u,onEnterCancelled:d,onBeforeLeave:f,onLeave:p,onAfterLeave:m,onLeaveCancelled:h,onBeforeAppear:g,onAppear:_,onAfterAppear:y,onAppearCancelled:b}=t,x=String(e.key),S=Er(n,e),C=(e,t)=>{e&&En(e,r,9,t)},w=(e,t)=>{let n=t[1];C(e,t),v(e)?e.every(e=>e.length<=1)&&n():e.length<=1&&n()},T={mode:o,persisted:s,beforeEnter(t){let r=c;if(!n.isMounted){if(a)r=g||c;else return}t[H]&&t[H](!0);let i=S[x];i&&Y(e,i)&&i.el[H]&&i.el[H](),C(r,[t])},enter(t){if(S[x]===e)return;let r=l,i=u,o=d;if(!n.isMounted){if(a)r=_||l,i=y||u,o=b||d;else return}let s=!1;t[yr]=e=>{s||(s=!0,C(e?o:i,[t]),T.delayedLeave&&T.delayedLeave(),t[yr]=void 0)};let c=t[yr].bind(null,!1);r?w(r,[t,c]):c()},leave(t,r){let i=String(e.key);if(t[yr]&&t[yr](!0),n.isUnmounting)return r();C(f,[t]);let a=!1;t[H]=n=>{a||(a=!0,r(),C(n?h:m,[t]),t[H]=void 0,S[i]===e&&delete S[i])};let o=t[H].bind(null,!1);S[i]=e,p?w(p,[t,o]):o()},clone(e){let a=Dr(e,t,n,r,i);return i&&i(a),a}};return T}function Or(e){if(ai(e))return e=To(e),e.children=null,e}function kr(e){if(!ai(e))return sr(e.type)&&e.children?wr(e.children):e;if(e.component)return e.component.subTree;let{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&C(n.default))return n.default()}}function Ar(e,t){if(e.shapeFlag&6&&e.component){e.transition=t;let n=e.component.subTree;Ar(sr(n.type)&&kr(n)||n,t)}else e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function jr(e,t=!1,n){let r=[],i=0;for(let a=0;a1)for(let e=0;eLr(e,t&&(v(t)?t[a]:t),n,r,i));return}if(ni(r)&&!i){r.shapeFlag&512&&r.type.__asyncResolved&&r.component.subTree.component&&Lr(e,t,n,r.component.subTree);return}let a=r.shapeFlag&4?qo(r.component):r.el,o=i?null:a,{i:s,r:l}=e,u=t&&t.r,f=s.refs===c?s.refs={}:s.refs,p=s.setupState,m=L(p),g=p===c?d:e=>!Fr(f,e)&&_(m,e),y=(e,t)=>!(t&&Fr(f,t));if(u!=null&&u!==l){if(Rr(t),w(u))f[u]=null,g(u)&&(p[u]=null);else if(z(u)){let e=t;y(u,e.k)&&(u.value=null),e.k&&(f[e.k]=null)}}if(C(l))Tn(l,s,12,[o,f]);else{let t=w(l),r=z(l);if(t||r){let s=()=>{if(e.f){let n=t?g(l)?p[l]:f[l]:y(l)||!e.k?l.value:f[e.k];if(i)v(n)&&h(n,a);else if(v(n))n.includes(a)||n.push(a);else if(t)f[l]=[a],g(l)&&(p[l]=f[l]);else{let t=[a];y(l,e.k)&&(l.value=t),e.k&&(f[e.k]=t)}}else t?(f[l]=o,g(l)&&(p[l]=o)):r&&(y(l,e.k)&&(l.value=o),e.k&&(f[e.k]=o))};if(o){let t=()=>{s(),Ir.delete(e)};t.id=-1,Ir.set(e,t),G(t,n)}else Rr(e),s()}}}function Rr(e){let t=Ir.get(e);t&&(t.flags|=8,Ir.delete(e))}var zr=!1,Br=()=>{zr||=(console.error(`Hydration completed but contains mismatches.`),!0)},Vr=e=>e.namespaceURI.includes(`svg`)&&e.tagName!==`foreignObject`,Hr=e=>e.namespaceURI.includes(`MathML`),Ur=e=>{if(e.nodeType===1){if(Vr(e))return`svg`;if(Hr(e))return`mathml`}},Wr=e=>e.nodeType===8;function Gr(e){let{mt:t,p:n,o:{patchProp:r,createText:i,nextSibling:a,parentNode:o,remove:s,insert:c,createComment:l}}=e,u=(e,t)=>{if(!t.hasChildNodes()){n(null,e,t),Vn(),t._vnode=e;return}d(t.firstChild,e,null,null,null),Vn(),t._vnode=e},d=(n,r,s,l,u,f=!1)=>{f||=!!r.dynamicChildren;let b=Wr(n)&&n.data===`[`,x=()=>g(n,r,s,l,u,b),{type:S,ref:C,shapeFlag:w,patchFlag:T}=r,E=n.nodeType;r.el=n,T===-2&&(f=!1,r.dynamicChildren=null);let D=null;switch(S){case co:E===3?(n.data!==r.children&&(Br(),n.data=r.children),D=a(n)):r.children===``?(c(r.el=i(``),o(n),n),D=n):D=x();break;case q:y(n)?(D=a(n),v(r.el=n.content.firstChild,n,s)):D=E!==8||b?x():a(n);break;case lo:if(b&&(n=a(n),E=n.nodeType),E===1||E===3){D=n;let e=!r.children.length;for(let t=0;t{o||=!!t.dynamicChildren;let{type:c,dynamicProps:l,props:u,patchFlag:d,shapeFlag:p,dirs:h,transition:g}=t,_=c===`input`||c===`option`,b=!!l;if(_||b||d!==-1){h&&Jn(t,null,n,`created`);let c=!1;if(y(e)){c=Ua(null,g)&&n&&n.vnode.props&&n.vnode.props.appear;let r=e.content.firstChild;if(c){let e=r.getAttribute(`class`);e&&(r.$cls=e),g.beforeEnter(r)}v(r,e,n),t.el=e=r}if(p&16&&!(u&&(u.innerHTML||u.textContent))){let r=m(e.firstChild,t,e,n,i,a,o);for(r&&!Xr(e,1)&&Br();r;){let e=r;r=r.nextSibling,s(e)}}else if(p&8){let n=t.children;n[0]===` +`&&(e.tagName===`PRE`||e.tagName===`TEXTAREA`)&&(n=n.slice(1));let{textContent:r}=e;r!==n&&r!==n.replace(/\r\n|\r/g,` +`)&&(Xr(e,0)||Br(),e.textContent=t.children)}if(u){if(_||b||!o||d&48){let t=e.tagName.includes(`-`),i=e.namespaceURI.includes(`svg`)?`svg`:e.namespaceURI.includes(`MathML`)?`mathml`:void 0;for(let a in u)if(_&&(a.endsWith(`value`)||a===`indeterminate`)||f(a)&&!ae(a)||a[0]===`.`||t&&!ae(a)||l&&l.includes(a)){if(qr(e,a,u[a]))continue;r(e,a,null,u[a],i,n)}}else if(u.onClick)r(e,`onClick`,null,u.onClick,void 0,n);else if(d&4&&en(u.style))for(let e in u.style)u.style[e]}let x;(x=u&&u.onVnodeBeforeMount)&&Q(x,n,t),h&&Jn(t,null,n,`beforeMount`),((x=u&&u.onVnodeMounted)||h||c)&&ao(()=>{x&&Q(x,n,t),c&&g.enter(e),h&&Jn(t,null,n,`mounted`)},i)}return e.nextSibling},m=(e,t,r,o,s,l,u)=>{u||=!!t.dynamicChildren;let f=t.children,p=f.length,m=!1;for(let t=0;t{let{slotScopeIds:u}=t;u&&(i=i?i.concat(u):u);let d=o(e),f=m(a(e),t,d,n,r,i,s);return f&&Wr(f)&&f.data===`]`?a(t.anchor=f):(Br(),c(t.anchor=l(`]`),d,f),f)},g=(e,t,r,i,c,l)=>{if(Qr(e,t)||Br(),t.el=null,l){let t=_(e);for(;;){let n=a(e);if(n&&n!==t)s(n);else break}}let u=a(e),d=o(e);return s(e),n(null,t,d,u,r,i,Ur(d),c),r&&(r.vnode.el=t.el,ya(r,t.el)),u},_=(e,t=`[`,n=`]`)=>{let r=0;for(;e;)if(e=a(e),e&&Wr(e)&&(e.data===t&&r++,e.data===n)){if(r===0)return a(e);r--}return e},v=(e,t,n)=>{let r=t.parentNode;r&&r.replaceChild(e,t);let i=n;for(;i;)i.vnode.el===t&&(i.vnode.el=i.subTree.el=e),i=i.parent},y=e=>e.nodeType===1&&e.tagName===`TEMPLATE`;return[u,d]}var Kr=new Set([`src`,`srcset`,`href`,`poster`]);function qr(e,t,n){return Kr.has(t)?e.getAttribute(t)===(n==null?null:`${n}`):!1}var Jr=`data-allow-mismatch`,Yr={0:`text`,1:`children`,2:`class`,3:`style`,4:`attribute`};function Xr(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(Jr);)e=e.parentElement;return Zr(e&&e.getAttribute(Jr),t)}function Zr(e,t){if(e==null)return!1;if(e===``)return!0;{let n=e.split(`,`);return t===0&&n.includes(`children`)?!0:n.includes(Yr[t])}}function Qr(e,t){return Xr(e.parentElement,1)||$r(e)||ei(t)}function $r(e){return e.nodeType===1&&Zr(e.getAttribute(Jr),1)}function ei({props:e}){let t=e&&e[Jr];return typeof t==`string`&&Zr(t,1)}ge().requestIdleCallback,ge().cancelIdleCallback;function ti(e,t){if(Wr(e)&&e.data===`[`){let n=1,r=e.nextSibling;for(;r;){if(r.nodeType===1){if(t(r)===!1)break}else if(Wr(r)){if(r.data===`]`){if(--n===0)break}else r.data===`[`&&n++}r=r.nextSibling}}else t(e)}var ni=e=>!!e.type.__asyncLoader;function ri(e){C(e)&&(e={loader:e});let{loader:t,loadingComponent:n,errorComponent:r,delay:i=200,hydrate:a,timeout:o,suspensible:s=!0,onError:c}=e,l=null,u,d=0,f=()=>(d++,l=null,p()),p=()=>{let e;return l||(e=l=t().catch(e=>{if(e=e instanceof Error?e:Error(String(e)),c)return new Promise((t,n)=>{c(e,()=>t(f()),()=>n(e),d+1)});throw e}).then(t=>e!==l&&l?l:(t&&(t.__esModule||t[Symbol.toStringTag]===`Module`)&&(t=t.default),u=t,t)))};return Mr({name:`AsyncComponentWrapper`,__asyncLoader:p,__asyncHydrate(e,t,n){let r=e.isConnected,i=!1;(t.bu||=[]).push(()=>i=!0);let o=()=>{i||!e.parentNode||r&&!e.isConnected||n()},s=a?()=>{let n=a(o,t=>ti(e,t));n&&(t.bum||=[]).push(n)}:o;u?s():p().then(()=>!t.isUnmounted&&s())},get __asyncResolved(){return u},setup(){let e=$;if(Pr(e),u)return()=>ii(u,e);let t=t=>{l=null,Dn(t,e,13,!r)};if(s&&e.suspense||Bo)return p().then(t=>()=>ii(t,e)).catch(e=>(t(e),()=>r?X(r,{error:e}):null));let a=an(!1),c=an(),d=an(!!i),f,m;return xi(()=>{f!=null&&clearTimeout(f),m!=null&&clearTimeout(m)}),i&&(m=setTimeout(()=>{e.isUnmounted||(d.value=!1)},i)),o!=null&&(f=setTimeout(()=>{if(!e.isUnmounted&&!a.value&&!c.value){let e=Error(`Async component timed out after ${o}ms.`);t(e),c.value=e}},o)),p().then(()=>{e.isUnmounted||(a.value=!0,e.parent&&ai(e.parent.vnode)&&e.parent.update())}).catch(n=>{if(e.isUnmounted){l=null;return}t(n),c.value=n}),()=>{if(a.value&&u)return ii(u,e);if(c.value&&r)return X(r,{error:c.value});if(n&&!d.value)return ii(n,e)}}})}function ii(e,t){let{ref:n,props:r,children:i,ce:a}=t.vnode,o=X(e,r,i);return o.ref=n,o.ce=a,delete t.vnode.ce,o}var ai=e=>e.type.__isKeepAlive,oi={name:`KeepAlive`,__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){let n=Po(),r=n.ctx;if(!r.renderer)return()=>{let e=t.default&&t.default();return e&&e.length===1?e[0]:e};let i=new Map,a=new Set,o=null,s=n.suspense,{renderer:{p:c,m:l,um:u,o:{createElement:d}}}=r,f=d(`div`);r.activate=(e,t,n,r,i)=>{let a=e.component;l(e,t,n,0,s),c(a.vnode,e,t,n,a,s,r,e.slotScopeIds,i),G(()=>{a.isDeactivated=!1,a.a&&de(a.a);let t=e.props&&e.props.onVnodeMounted;t&&Q(t,a.parent,e)},s)},r.deactivate=e=>{let t=e.component;qa(t.m),qa(t.a),l(e,f,null,1,s),G(()=>{t.da&&de(t.da);let n=e.props&&e.props.onVnodeUnmounted;n&&Q(n,t.parent,e),t.isDeactivated=!0},s)};function p(e){fi(e),u(e,n,s,!0)}function m(e){i.forEach((t,n)=>{let r=Jo(ni(t)?t.type.__asyncResolved||{}:t.type);r&&!e(r)&&h(n)})}function h(e){let t=i.get(e);t&&(!o||!Y(t,o))?p(t):o&&fi(o),i.delete(e),a.delete(e)}tr(()=>[e.include,e.exclude],([e,t])=>{e&&m(t=>si(e,t)),t&&m(e=>!si(t,e))},{flush:`post`,deep:!0});let g=null,_=()=>{g!=null&&(Ya(n.subTree.type)?G(()=>{let e=pi(n.subTree);e.component&&i.set(g,e)},n.subTree.suspense):i.set(g,pi(n.subTree)))};return _i(_),yi(_),bi(()=>{i.forEach(e=>{let{subTree:t,suspense:r}=n,i=pi(t);if(e.type===i.type&&e.key===i.key){fi(i);let e=i.component.da;e&&G(e,r);return}p(e)})}),()=>{if(g=null,!t.default)return o=null;let n=t.default(),r=n[0];if(n.length>1)return o=null,n;if(!yo(r)||!(r.shapeFlag&4)&&!(r.shapeFlag&128))return o=null,r;let s=pi(r);if(s.type===q)return o=null,s;let c=s.type,l=Jo(ni(s)?s.type.__asyncResolved||{}:c),{include:u,exclude:d,max:f}=e;if(u&&(!l||!si(u,l))||d&&l&&si(d,l))return s.shapeFlag&=-257,o=s,r;let p=s.key==null?c:s.key,m=i.get(p);return s.el&&(s=To(s),r.shapeFlag&128&&(r.ssContent=s)),g=p,m?(s.el=m.el,s.component=m.component,s.transition&&Ar(s,s.transition),s.shapeFlag|=512,a.delete(p),a.add(p)):(a.add(p),f&&a.size>parseInt(f,10)&&h(a.values().next().value)),s.shapeFlag|=256,o=s,Ya(r.type)?r:s}}};function si(e,t){return v(e)?e.some(e=>si(e,t)):w(e)?e.split(`,`).includes(t):S(e)?(e.lastIndex=0,e.test(t)):!1}function ci(e,t){ui(e,`a`,t)}function li(e,t){ui(e,`da`,t)}function ui(e,t,n=$){let r=e.__wdc||=()=>{let t=n;for(;t;){if(t.isDeactivated)return;t=t.parent}return e()};if(mi(t,r,n),n){let e=n.parent;for(;e&&e.parent;)ai(e.parent.vnode)&&di(r,t,n,e),e=e.parent}}function di(e,t,n,r){let i=mi(t,e,r,!0);xi(()=>{h(r[t],i)},n)}function fi(e){e.shapeFlag&=-257,e.shapeFlag&=-513}function pi(e){return e.shapeFlag&128?e.ssContent:e}function mi(e,t,n=$,r=!1){if(n){let i=n[e]||(n[e]=[]),a=t.__weh||=(...r)=>{tt();let i=Lo(n),a=En(t,n,e,r);return i(),nt(),a};return r?i.unshift(a):i.push(a),a}}var hi=e=>(t,n=$)=>{(!Bo||e===`sp`)&&mi(e,(...e)=>t(...e),n)},gi=hi(`bm`),_i=hi(`m`),vi=hi(`bu`),yi=hi(`u`),bi=hi(`bum`),xi=hi(`um`),Si=hi(`sp`),Ci=hi(`rtg`),wi=hi(`rtc`);function Ti(e,t=$){mi(`ec`,e,t)}var Ei=`components`;function Di(e,t){return Ai(Ei,e,!0,t)||e}var Oi=Symbol.for(`v-ndc`);function ki(e){return w(e)?Ai(Ei,e,!1)||e:e||Oi}function Ai(e,t,n=!0,r=!1){let i=V||$;if(i){let n=i.type;if(e===Ei){let e=Jo(n,!1);if(e&&(e===t||e===k(t)||e===le(k(t))))return n}let a=ji(i[e]||n[e],t)||ji(i.appContext[e],t);return!a&&r?n:a}}function ji(e,t){return e&&(e[t]||e[k(t)]||e[le(k(t))])}function Mi(e,t,n,r){let i,a=n&&n[r],o=v(e);if(o||w(e)){let n=o&&en(e),r=!1,s=!1;n&&(r=!I(e),s=F(e),e=ht(e)),i=Array(e.length);for(let n=0,o=e.length;nt(e,n,void 0,a&&a[n]));else{let n=Object.keys(e);i=Array(n.length);for(let r=0,o=n.length;r0;return t!=="default"&&(e.name=t),fo(),vo(K,null,[X(`slot`,e,r&&r())],i?-2:64)}let o=e[t];o&&o._c&&(o._d=!1);let s=uo.length;fo();let c;try{let i=o&&Pi(o(n)),s=n.key||a||i&&i.key;c=vo(K,{key:(s&&!T(s)?s:`_${t}`)+(!i&&r?`_fb`:``)},i||(r?r():[]),i&&e._===1?64:-2)}catch(e){for(let e=uo.length;e>s;e--)po();throw e}finally{o&&o._c&&(o._d=!0)}return!i&&c.scopeId&&(c.slotScopeIds=[c.scopeId+`-s`]),c}function Pi(e){return e.some(e=>!yo(e)||!(e.type===q||e.type===K&&!Pi(e.children)))?e:null}var Fi=e=>e?zo(e)?qo(e):Fi(e.parent):null,Ii=m(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=>Fi(e.parent),$root:e=>Fi(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Ji(e),$forceUpdate:e=>e.f||=()=>{Ln(e.update)},$nextTick:e=>e.n||=Fn.bind(e.proxy),$watch:e=>rr.bind(e)}),Li=(e,t)=>e!==c&&!e.__isScriptSetup&&_(e,t),Ri={get({_:e},t){if(t===`__v_skip`)return!0;let{ctx:n,setupState:r,data:i,props:a,accessCache:o,type:s,appContext:l}=e;if(t[0]!==`$`){let e=o[t];if(e!==void 0)switch(e){case 1:return r[t];case 2:return i[t];case 4:return n[t];case 3:return a[t]}else if(Li(r,t))return o[t]=1,r[t];else if(i!==c&&_(i,t))return o[t]=2,i[t];else if(_(a,t))return o[t]=3,a[t];else if(n!==c&&_(n,t))return o[t]=4,n[t];else Ui&&(o[t]=0)}let u=Ii[t],d,f;if(u)return t===`$attrs`&&P(e.attrs,`get`,``),u(e);if((d=s.__cssModules)&&(d=d[t]))return d;if(n!==c&&_(n,t))return o[t]=4,n[t];if(f=l.config.globalProperties,_(f,t))return f[t]},set({_:e},t,n){let{data:r,setupState:i,ctx:a}=e;return Li(i,t)?(i[t]=n,!0):r!==c&&_(r,t)?(r[t]=n,!0):_(e.props,t)||t[0]===`$`&&t.slice(1)in e?!1:(a[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:i,props:a,type:o}},s){let l;return!!(n[s]||e!==c&&s[0]!==`$`&&_(e,s)||Li(t,s)||_(a,s)||_(r,s)||_(Ii,s)||_(i.config.globalProperties,s)||(l=o.__cssModules)&&l[s])},defineProperty(e,t,n){return n.get==null?_(n,`value`)&&this.set(e,t,n.value,null):e._.accessCache[t]=0,Reflect.defineProperty(e,t,n)}};function zi(){return Vi(`useSlots`).slots}function Bi(){return Vi(`useAttrs`).attrs}function Vi(e){let t=Po();return t.setupContext||=Ko(t)}function Hi(e){return v(e)?e.reduce((e,t)=>(e[t]=null,e),{}):e}var Ui=!0;function Wi(e){let t=Ji(e),n=e.proxy,r=e.ctx;Ui=!1,t.beforeCreate&&Ki(t.beforeCreate,e,`bc`);let{data:i,computed:a,methods:o,watch:s,provide:c,inject:l,created:d,beforeMount:f,mounted:p,beforeUpdate:m,updated:h,activated:g,deactivated:_,beforeDestroy:y,beforeUnmount:b,destroyed:x,unmounted:S,render:w,renderTracked:T,renderTriggered:D,errorCaptured:ee,serverPrefetch:te,expose:ne,inheritAttrs:re,components:ie,directives:ae,filters:oe}=t;if(l&&Gi(l,r,null),o)for(let e in o){let t=o[e];C(t)&&(r[e]=t.bind(n))}if(i){let t=i.call(n,n);E(t)&&(e.data=Yt(t))}if(Ui=!0,a)for(let e in a){let t=a[e],i=Xo({get:C(t)?t.bind(n,n):C(t.get)?t.get.bind(n,n):u,set:!C(t)&&C(t.set)?t.set.bind(n):u});Object.defineProperty(r,e,{enumerable:!0,configurable:!0,get:()=>i.value,set:e=>i.value=e})}if(s)for(let e in s)qi(s[e],r,n,e);if(c){let e=C(c)?c.call(n):c;Reflect.ownKeys(e).forEach(t=>{Yn(t,e[t])})}d&&Ki(d,e,`c`);function O(e,t){v(t)?t.forEach(t=>e(t.bind(n))):t&&e(t.bind(n))}if(O(gi,f),O(_i,p),O(vi,m),O(yi,h),O(ci,g),O(li,_),O(Ti,ee),O(wi,T),O(Ci,D),O(bi,b),O(xi,S),O(Si,te),v(ne)){if(ne.length){let t=e.exposed||={};ne.forEach(e=>{Object.defineProperty(t,e,{get:()=>n[e],set:t=>n[e]=t,enumerable:!0})})}else e.exposed||={}}w&&e.render===u&&(e.render=w),re!=null&&(e.inheritAttrs=re),ie&&(e.components=ie),ae&&(e.directives=ae),te&&Pr(e)}function Gi(e,t,n=u){v(e)&&(e=$i(e));for(let n in e){let r=e[n],i;i=E(r)?`default`in r?Xn(r.from||n,r.default,!0):Xn(r.from||n):Xn(r),z(i)?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>i.value,set:e=>i.value=e}):t[n]=i}}function Ki(e,t,n){En(v(e)?e.map(e=>e.bind(t.proxy)):e.bind(t.proxy),t,n)}function qi(e,t,n,r){let i=r.includes(`.`)?ir(n,r):()=>n[r];if(w(e)){let n=t[e];C(n)&&tr(i,n)}else if(C(e))tr(i,e.bind(n));else if(E(e)){if(v(e))e.forEach(e=>qi(e,t,n,r));else{let r=C(e.handler)?e.handler.bind(n):t[e.handler];C(r)&&tr(i,r,e)}}}function Ji(e){let t=e.type,{mixins:n,extends:r}=t,{mixins:i,optionsCache:a,config:{optionMergeStrategies:o}}=e.appContext,s=a.get(t),c;return s?c=s:!i.length&&!n&&!r?c=t:(c={},i.length&&i.forEach(e=>Yi(c,e,o,!0)),Yi(c,t,o)),E(t)&&a.set(t,c),c}function Yi(e,t,n,r=!1){let{mixins:i,extends:a}=t;a&&Yi(e,a,n,!0),i&&i.forEach(t=>Yi(e,t,n,!0));for(let i in t)if(!(r&&i===`expose`)){let r=Xi[i]||n&&n[i];e[i]=r?r(e[i],t[i]):t[i]}return e}var Xi={data:Zi,props:ta,emits:ta,methods:ea,computed:ea,beforeCreate:W,created:W,beforeMount:W,mounted:W,beforeUpdate:W,updated:W,beforeDestroy:W,beforeUnmount:W,destroyed:W,unmounted:W,activated:W,deactivated:W,errorCaptured:W,serverPrefetch:W,components:ea,directives:ea,watch:na,provide:Zi,inject:Qi};function Zi(e,t){return t?e?function(){return m(C(e)?e.call(this,this):e,C(t)?t.call(this,this):t)}:t:e}function Qi(e,t){return ea($i(e),$i(t))}function $i(e){if(v(e)){let t={};for(let n=0;nt===`modelValue`||t===`model-value`?e.modelModifiers:e[`${t}Modifiers`]||e[`${k(t)}Modifiers`]||e[`${ce(t)}Modifiers`];function ca(e,t,...n){if(e.isUnmounted)return;let r=e.vnode.props||c,i=n,a=t.startsWith(`update:`),o=a&&sa(r,t.slice(7));o&&(o.trim&&(i=n.map(e=>w(e)?e.trim():e)),o.number&&(i=i.map(pe)));let s,l=r[s=ue(t)]||r[s=ue(k(t))];!l&&a&&(l=r[s=ue(ce(t))]),l&&En(l,e,6,i);let u=r[s+`Once`];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[s])return;e.emitted[s]=!0,En(u,e,6,i)}}var la=new WeakMap;function ua(e,t,n=!1){let r=n?la:t.emitsCache,i=r.get(e);if(i!==void 0)return i;let a=e.emits,o={},s=!1;if(!C(e)){let r=e=>{let n=ua(e,t,!0);n&&(s=!0,m(o,n))};!n&&t.mixins.length&&t.mixins.forEach(r),e.extends&&r(e.extends),e.mixins&&e.mixins.forEach(r)}return!a&&!s?(E(e)&&r.set(e,null),null):(v(a)?a.forEach(e=>o[e]=null):m(o,a),E(e)&&r.set(e,o),o)}function da(e,t){return!e||!f(t)?!1:(t=t.slice(2),t=t===`Once`?t:t.replace(/Once$/,``),_(e,t[0].toLowerCase()+t.slice(1))||_(e,ce(t))||_(e,t))}function fa(e){let{type:t,vnode:n,proxy:r,withProxy:i,propsOptions:[a],slots:o,attrs:s,emit:c,render:l,renderCache:u,props:d,data:f,setupState:m,ctx:h,inheritAttrs:g}=e,_=Gn(e),v,y;try{if(n.shapeFlag&4){let e=i||r,t=e;v=Z(l.call(t,e,u,d,m,f,h)),y=s}else{let e=t;v=Z(e.length>1?e(d,{attrs:s,slots:o,emit:c}):e(d,null)),y=t.props?s:ma(s)}}catch(t){uo.length=0,Dn(t,e,1),v=X(q)}let b=v;if(y&&g!==!1){let e=Object.keys(y),{shapeFlag:t}=b;e.length&&t&7&&(a&&e.some(p)&&(y=ha(y,a)),b=To(b,y,!1,!0))}return n.dirs&&(b=To(b,null,!1,!0),b.dirs=b.dirs?b.dirs.concat(n.dirs):n.dirs),n.transition&&Ar(sr(b.type)&&kr(b)||b,n.transition),v=b,Gn(_),v}function pa(e,t=!0){let n;for(let t=0;t{let t;for(let n in e)(n===`class`||n===`style`||f(n))&&((t||={})[n]=e[n]);return t},ha=(e,t)=>{let n={};for(let r in e)(!p(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function ga(e,t,n){let{props:r,children:i,component:a}=e,{props:o,children:s,patchFlag:c}=t,l=a.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return r?_a(r,o,l):!!o;if(c&8){let e=t.dynamicProps;for(let t=0;tObject.create(ba),Sa=e=>Object.getPrototypeOf(e)===ba;function Ca(e,t,n,r=!1){let i={},a=xa();e.propsDefaults=Object.create(null),Ta(e,t,i,a);for(let t in e.propsOptions[0])t in i||(i[t]=void 0);e.props=n?r?i:Xt(i):e.type.props?i:a,e.attrs=a}function wa(e,t,n,r){let{props:i,attrs:a,vnode:{patchFlag:o}}=e,s=L(i),[c]=e.propsOptions,l=!1;if((r||o>0)&&!(o&16)){if(o&8){let n=e.vnode.dynamicProps;for(let r=0;r{u=!0;let[n,r]=Oa(e,t,!0);m(o,n),r&&s.push(...r)};!n&&t.mixins.length&&t.mixins.forEach(r),e.extends&&r(e.extends),e.mixins&&e.mixins.forEach(r)}if(!a&&!u)return E(e)&&r.set(e,l),l;if(v(a))for(let e=0;ee===`_`||e===`_ctx`||e===`$stable`,ja=e=>v(e)?e.map(Z):[Z(e)],Ma=(e,t,n)=>{if(t._n)return t;let r=Kn((...e)=>ja(t(...e)),n);return r._c=!1,r},Na=(e,t,n)=>{let r=e._ctx;for(let n in e){if(Aa(n))continue;let i=e[n];if(C(i))t[n]=Ma(n,i,r);else if(i!=null){let e=ja(i);t[n]=()=>e}}},Pa=(e,t)=>{let n=ja(t);e.slots.default=()=>n},Fa=(e,t,n)=>{for(let r in t)(n||!Aa(r))&&(e[r]=t[r])},Ia=(e,t,n)=>{let r=e.slots=xa();if(e.vnode.shapeFlag&32){let e=t._;e?(Fa(r,t,n),n&&fe(r,`_`,e,!0)):Na(t,r)}else t&&Pa(e,t)},La=(e,t,n)=>{let{vnode:r,slots:i}=e,a=!0,o=c;if(r.shapeFlag&32){let e=t._;e?n&&e===1?a=!1:Fa(i,t,n):(a=!t.$stable,Na(t,i)),o=t}else t&&(Pa(e,t),o={default:1});if(a)for(let e in i)!Aa(e)&&o[e]==null&&delete i[e]},G=ao;function Ra(e){return Ba(e)}function za(e){return Ba(e,Gr)}function Ba(e,t){let n=ge();n.__VUE__=!0;let{insert:r,remove:i,patchProp:a,createElement:o,createText:s,createComment:d,setText:f,setElementText:p,parentNode:m,nextSibling:h,setScopeId:g=u,insertStaticContent:_}=e,v=(e,t,n,r=null,i=null,a=null,o=void 0,s=null,c=!!t.dynamicChildren)=>{if(e===t)return;e&&!Y(e,t)&&(r=ve(e),fe(e,i,a,!0),e=null),t.patchFlag===-2&&(c=!1,t.dynamicChildren=null),t.dynamicChildren&&e&&e.dynamicChildren&&e.dynamicChildren.hasOnce&&(t.dynamicChildren===l&&(t.dynamicChildren=[]),t.dynamicChildren.hasOnce=!0);let{type:u,ref:d,shapeFlag:f}=t;switch(u){case co:y(e,t,n,r);break;case q:b(e,t,n,r);break;case lo:e??x(t,n,r,o);break;case K:re(e,t,n,r,i,a,o,s,c);break;default:f&1?w(e,t,n,r,i,a,o,s,c):f&6?ie(e,t,n,r,i,a,o,s,c):(f&64||f&128)&&u.process(e,t,n,r,i,a,o,s,c,xe)}d!=null&&i?Lr(d,e&&e.ref,a,t||e,!t):d==null&&e&&e.ref!=null&&Lr(e.ref,null,a,e,!0)},y=(e,t,n,i)=>{if(e==null)r(t.el=s(t.children),n,i);else{let n=t.el=e.el;t.children!==e.children&&f(n,t.children)}},b=(e,t,n,i)=>{e==null?r(t.el=d(t.children||``),n,i):t.el=e.el},x=(e,t,n,r)=>{[e.el,e.anchor]=_(e.children,t,n,r,e.el,e.anchor)},S=({el:e,anchor:t},n,i)=>{let a;for(;e&&e!==t;)a=h(e),r(e,n,i),e=a;r(t,n,i)},C=({el:e,anchor:t})=>{let n;for(;e&&e!==t;)n=h(e),i(e),e=n;i(t)},w=(e,t,n,r,i,a,o,s,c)=>{if(t.type===`svg`?o=`svg`:t.type===`math`&&(o=`mathml`),e==null)T(t,n,r,i,a,o,s,c);else{let n=e.el&&e.el._isVueCE?e.el:null;try{n&&n._beginPatch(),ee(e,t,i,a,o,s,c)}finally{n&&n._endPatch()}}},T=(e,t,n,i,s,c,l,u)=>{let d,f,{props:m,shapeFlag:h,transition:g,dirs:_}=e;if(d=e.el=o(e.type,c,m&&m.is,m),h&8?p(d,e.children):h&16&&D(e.children,d,null,i,s,Va(e,c),l,u),_&&Jn(e,null,i,`created`),E(d,e,e.scopeId,l,i),m){for(let e in m)e!==`value`&&!ae(e)&&a(d,e,null,m[e],c,i);`value`in m&&a(d,`value`,null,m.value,c),(f=m.onVnodeBeforeMount)&&Q(f,i,e)}_&&Jn(e,null,i,`beforeMount`);let v=Ua(s,g);v&&g.beforeEnter(d),r(d,t,n),((f=m&&m.onVnodeMounted)||v||_)&&G(()=>{try{f&&Q(f,i,e),v&&g.enter(d),_&&Jn(e,null,i,`mounted`)}finally{}},s)},E=(e,t,n,r,i)=>{if(n&&g(e,n),r)for(let t=0;t{for(let l=c;l{let l=t.el=e.el,{patchFlag:u,dynamicChildren:d,dirs:f}=t;u|=e.patchFlag&16;let m=e.props||c,h=t.props||c,g;if(n&&Ha(n,!1),(g=h.onVnodeBeforeUpdate)&&Q(g,n,t,e),f&&Jn(t,e,n,`beforeUpdate`),n&&Ha(n,!0),d&&(!e.dynamicChildren||e.dynamicChildren.length!==d.length)&&(u=0,s=!1,d=null),(m.innerHTML&&h.innerHTML==null||m.textContent&&h.textContent==null)&&p(l,``),d?te(e.dynamicChildren,d,l,n,r,Va(t,i),o):s||ce(e,t,l,null,n,r,Va(t,i),o,!1),u>0){if(u&16)ne(l,m,h,n,i);else if(u&2&&m.class!==h.class&&a(l,`class`,null,h.class,i),u&4&&a(l,`style`,m.style,h.style,i),u&8){let e=t.dynamicProps;for(let t=0;t{g&&Q(g,n,t,e),f&&Jn(t,e,n,`updated`)},r)},te=(e,t,n,r,i,a,o)=>{for(let s=0;s{if(t!==n){if(t!==c)for(let o in t)!ae(o)&&!(o in n)&&a(e,o,t[o],null,i,r);for(let o in n){if(ae(o))continue;let s=n[o],c=t[o];s!==c&&o!==`value`&&a(e,o,c,s,i,r)}`value`in n&&a(e,`value`,t.value,n.value,i)}},re=(e,t,n,i,a,o,c,l,u)=>{let d=t.el=e?e.el:s(``),f=t.anchor=e?e.anchor:s(``),{patchFlag:p,dynamicChildren:m,slotScopeIds:h}=t;h&&(l=l?l.concat(h):h),e==null?(r(d,n,i),r(f,n,i),D(t.children||[],n,f,a,o,c,l,u)):p>0&&p&64&&m&&e.dynamicChildren&&e.dynamicChildren.length===m.length?(te(e.dynamicChildren,m,n,a,o,c,l),(t.key!=null||a&&t===a.subTree)&&Wa(e,t,!0)):ce(e,t,n,f,a,o,c,l,u)},ie=(e,t,n,r,i,a,o,s,c)=>{t.slotScopeIds=s,e==null?t.shapeFlag&512?i.ctx.activate(t,n,r,o,c):oe(t,n,r,i,a,o,c):O(e,t,c)},oe=(e,t,n,r,i,a,o)=>{let s=e.component=No(e,r,i);if(ai(e)&&(s.ctx.renderer=xe),Vo(s,!1,o),s.asyncDep){if(i&&i.registerDep(s,k,o),!e.el){let r=s.subTree=X(q);b(null,r,t,n),e.placeholder=r.el}}else k(s,e,t,n,i,a,o)},O=(e,t,n)=>{let r=t.component=e.component;if(ga(e,t,n)){if(r.asyncDep&&!r.asyncResolved){t.el=e.el,se(r,t,n);return}r.next=t,r.update()}else t.el=e.el,r.vnode=t},k=(e,t,n,r,i,a,o)=>{let s=()=>{if(e.isMounted){let{next:t,bu:n,u:r,parent:s,vnode:c}=e;{let n=Ka(e);if(n){t&&(t.el=c.el,se(e,t,o)),n.asyncDep.then(()=>{G(()=>{e.isUnmounted||l()},i)});return}}let u=t,d;Ha(e,!1),t?(t.el=c.el,se(e,t,o)):t=c,n&&de(n),(d=t.props&&t.props.onVnodeBeforeUpdate)&&Q(d,s,t,c),Ha(e,!0);let f=fa(e),p=e.subTree;e.subTree=f,v(p,f,m(p.el),ve(p),e,i,a),t.el=f.el,u===null&&ya(e,f.el),r&&G(r,i),(d=t.props&&t.props.onVnodeUpdated)&&G(()=>Q(d,s,t,c),i)}else{let o,{el:s,props:c}=t,{bm:l,m:u,parent:d,root:f,type:p}=e,m=ni(t);if(Ha(e,!1),l&&de(l),!m&&(o=c&&c.onVnodeBeforeMount)&&Q(o,d,t),Ha(e,!0),s&&Ce){let t=()=>{e.subTree=fa(e),Ce(s,e.subTree,e,i,null)};m&&p.__asyncHydrate?p.__asyncHydrate(s,e,t):t()}else{f.ce&&f.ce._hasShadowRoot()&&f.ce._injectChildStyle(p,e.parent?e.parent.type:void 0);let o=e.subTree=fa(e);v(null,o,n,r,e,i,a),t.el=o.el}if(u&&G(u,i),!m&&(o=c&&c.onVnodeMounted)){let e=t;G(()=>Q(o,d,e),i)}(t.shapeFlag&256||d&&ni(d.vnode)&&d.vnode.shapeFlag&256)&&e.a&&G(e.a,i),e.isMounted=!0,t=n=r=null}};e.scope.on();let c=e.effect=new Ve(s);e.scope.off();let l=e.update=c.run.bind(c),u=e.job=c.runIfDirty.bind(c);u.i=e,u.id=e.uid,c.scheduler=()=>Ln(u),Ha(e,!0),l()},se=(e,t,n)=>{t.component=e;let r=e.vnode.props;e.vnode=t,e.next=null,wa(e,t.props,r,n),La(e,t.children,n),tt(),Bn(e),nt()},ce=(e,t,n,r,i,a,o,s,c=!1)=>{let l=e&&e.children,u=e?e.shapeFlag:0,d=t.children,{patchFlag:f,shapeFlag:m}=t;if(f>0){if(f&128){ue(l,d,n,r,i,a,o,s,c);return}if(f&256){le(l,d,n,r,i,a,o,s,c);return}}m&8?(u&16&&_e(l,i,a),d!==l&&p(n,d)):u&16?m&16?ue(l,d,n,r,i,a,o,s,c):_e(l,i,a,!0):(u&8&&p(n,``),m&16&&D(d,n,r,i,a,o,s,c))},le=(e,t,n,r,i,a,o,s,c)=>{e||=l,t||=l;let u=e.length,d=t.length,f=Math.min(u,d),p=0;for(;pd?_e(e,i,a,!0,!1,f):D(t,n,r,i,a,o,s,c,f)},ue=(e,t,n,r,i,a,o,s,c)=>{let u=0,d=t.length,f=e.length-1,p=d-1;for(;u<=f&&u<=p;){let r=e[u],l=t[u]=c?Oo(t[u]):Z(t[u]);if(Y(r,l))v(r,l,n,null,i,a,o,s,c);else break;u++}for(;u<=f&&u<=p;){let r=e[f],l=t[p]=c?Oo(t[p]):Z(t[p]);if(Y(r,l))v(r,l,n,null,i,a,o,s,c);else break;f--,p--}if(u>f){if(u<=p){let e=p+1,l=ep)for(;u<=f;)fe(e[u],i,a,!0),u++;else{let m=u,h=u,g=new Map;for(u=h;u<=p;u++){let e=t[u]=c?Oo(t[u]):Z(t[u]);e.key!=null&&g.set(e.key,u)}let _,y=0,b=p-h+1,x=!1,S=0,C=Array(b);for(u=0;u=b){fe(r,i,a,!0);continue}let l;if(r.key!=null)l=g.get(r.key);else for(_=h;_<=p;_++)if(C[_-h]===0&&Y(r,t[_])){l=_;break}l===void 0?fe(r,i,a,!0):(C[l-h]=u+1,l>=S?S=l:x=!0,v(r,t[l],n,null,i,a,o,s,c),y++)}let w=x?Ga(C):l;for(_=w.length-1,u=b-1;u>=0;u--){let e=h+u,l=t[e],f=t[e+1],p=e+1{let{el:s,type:c,transition:l,children:u,shapeFlag:d}=e;if(d&6){A(e.component.subTree,t,n,a);return}if(d&128){e.suspense.move(t,n,a);return}if(d&64){c.move(e,t,n,xe);return}if(c===K){r(s,t,n);for(let e=0;el.enter(s),o));else{let{leave:a,delayLeave:o,afterLeave:c}=l,u=()=>{e.ctx.isUnmounted?i(s):r(s,t,n)},d=()=>{let e=s._isLeaving||!!s[H];s._isLeaving&&s[H](!0),l.persisted&&!e?u():a(s,()=>{u(),c&&c()})};o?o(s,u,d):d()}}else r(s,t,n)},fe=(e,t,n,r=!1,i=!1)=>{let{type:a,props:o,ref:s,children:c,dynamicChildren:l,shapeFlag:u,patchFlag:d,dirs:f,cacheIndex:p,memo:m}=e;if((d===-2||l&&l.hasOnce)&&(i=!1),s!=null&&(tt(),Lr(s,null,n,e,!0),nt()),p!=null&&(!e.ctx||e.ctx===t)&&(t.renderCache[p]=void 0),u&256){t.ctx.deactivate(e);return}let h=u&1&&f,g=!ni(e),_;if(g&&(_=o&&o.onVnodeBeforeUnmount)&&Q(_,t,e),u&6)he(e.component,n,r);else{if(u&128){e.suspense.unmount(n,r);return}h&&Jn(e,null,t,`beforeUnmount`),u&64?e.type.remove(e,t,n,xe,r):l&&!l.hasOnce&&(a!==K||d>0&&d&64)?_e(l,t,n,!1,!0):(a===K&&d&384||!i&&u&16)&&_e(c,t,n),r&&pe(e)}let v=m!=null&&p==null;(g&&(_=o&&o.onVnodeUnmounted)||h||v)&&G(()=>{_&&Q(_,t,e),h&&Jn(e,null,t,`unmounted`),v&&(e.el=null)},n)},pe=e=>{let{type:t,el:n,anchor:r,transition:a}=e;if(t===K){me(n,r);return}if(t===lo){C(e),a&&!a.persisted&&a.afterLeave&&a.afterLeave();return}let o=()=>{i(n),a&&!a.persisted&&a.afterLeave&&a.afterLeave()};if(e.shapeFlag&1&&a&&!a.persisted){let{leave:t,delayLeave:r}=a,i=()=>t(n,o);r?r(e.el,o,i):i()}else o()},me=(e,t)=>{let n;for(;e!==t;)n=h(e),i(e),e=n;i(t)},he=(e,t,n)=>{let{bum:r,scope:i,job:a,subTree:o,um:s,m:c,a:l}=e;qa(c),qa(l),r&&de(r),i.stop(),a?(a.flags|=8,fe(o,e,t,n)):e.vnode.el&&o&&(o.transition=e.vnode.transition,fe(o,e,t,n)),s&&G(s,t),G(()=>{e.isUnmounted=!0},t)},_e=(e,t,n,r=!1,i=!1,a=0)=>{for(let o=a;o{if(e.shapeFlag&6)return ve(e.component.subTree);if(e.shapeFlag&128)return e.suspense.next();let t=h(e.anchor||e.el),n=t&&t[or];return n?h(n):t},ye=!1,be=(e,t,n)=>{let r;e==null?t._vnode&&(fe(t._vnode,null,null,!0),r=t._vnode.component):v(t._vnode||null,e,t,null,null,null,n),t._vnode=e,ye||=(ye=!0,Bn(r),Vn(),!1)},xe={p:v,um:fe,m:A,r:pe,mt:oe,mc:D,pc:ce,pbc:te,n:ve,o:e},Se,Ce;return t&&([Se,Ce]=t(xe)),{render:be,hydrate:Se,createApp:aa(be,Se)}}function Va({type:e,props:t},n){return n===`svg`&&e===`foreignObject`||n===`mathml`&&e===`annotation-xml`&&t&&t.encoding&&t.encoding.includes(`html`)?void 0:n}function Ha({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Ua(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Wa(e,t,n=!1){let r=e.children,i=t.children;if(v(r)&&v(i))for(let e=0;e>1,e[n[s]]0&&(t[r]=n[a-1]),n[a]=r)}}for(a=n.length,o=n[a-1];a-->0;)n[a]=o,o=t[o];return n}function Ka(e){let t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Ka(t)}function qa(e){if(e)for(let t=0;te.__isSuspense,Xa=0,Za={name:`Suspense`,__isSuspense:!0,process(e,t,n,r,i,a,o,s,c,l){if(e==null)$a(t,n,r,i,a,o,s,c,l);else{if(a&&a.deps>0&&!e.suspense.isInFallback&&!a.isHydrating){t.suspense=e.suspense,t.suspense.vnode=t,t.el=e.el;return}eo(e,t,n,r,i,o,s,c,l)}},hydrate:no,normalize:ro};function Qa(e,t){let n=e.props&&e.props[t];C(n)&&n()}function $a(e,t,n,r,i,a,o,s,c){let{p:l,o:{createElement:u}}=c,d=u(`div`),f=e.suspense=to(e,i,r,t,d,n,a,o,s,c);l(null,f.pendingBranch=e.ssContent,d,null,r,f,a,o),f.deps>0?(Qa(e,`onPending`),Qa(e,`onFallback`),l(null,e.ssFallback,t,n,r,null,a,o),oo(f,e.ssFallback)):f.resolve(!1,!0)}function eo(e,t,n,r,i,a,o,s,{p:c,um:l,o:{createElement:u}}){let d=t.suspense=e.suspense;d.vnode=t,t.el=e.el;let f=t.ssContent,p=t.ssFallback,{activeBranch:m,pendingBranch:h,isInFallback:g,isHydrating:_}=d;if(h)d.pendingBranch=f,Y(h,f)?(d.deps++,c(h,f,_?n:d.hiddenContainer,null,i,d,a,o,s),d.deps--,d.deps<=0?d.resolve():g&&!_&&!d.isFallbackMountPending&&(c(m,p,n,r,i,null,a,o,s),oo(d,p))):(d.pendingId=Xa++,_?(d.isHydrating=!1,d.activeBranch=h):l(h,i,d),d.deps=0,d.effects.length=0,d.hiddenContainer=u(`div`),g?(c(null,f,d.hiddenContainer,null,i,d,a,o,s),d.deps<=0?d.resolve():d.isFallbackMountPending||(c(m,p,n,r,i,null,a,o,s),oo(d,p))):m&&Y(m,f)?(c(m,f,n,r,i,d,a,o,s),d.resolve(!0)):(c(null,f,d.hiddenContainer,null,i,d,a,o,s),d.deps<=0&&d.resolve()));else if(m&&Y(m,f))c(m,f,n,r,i,d,a,o,s),oo(d,f);else if(Qa(t,`onPending`),d.pendingBranch=f,d.pendingId=f.shapeFlag&512?f.component.suspenseId:Xa++,c(null,f,d.hiddenContainer,null,i,d,a,o,s),d.deps<=0)d.resolve();else{let{timeout:e,pendingId:t}=d;e>0?setTimeout(()=>{d.pendingId===t&&d.fallback(p)},e):e===0&&d.fallback(p)}}function to(e,t,n,r,i,a,o,s,c,l,u=!1){let{p:d,m:f,um:p,n:m,o:{parentNode:h,remove:g}}=l,_,v=so(e);v&&t&&t.pendingBranch&&(_=t.pendingId,t.deps++);let y=e.props?me(e.props.timeout):void 0,b=a,x={vnode:e,parent:t,parentComponent:n,namespace:o,container:r,hiddenContainer:i,deps:0,pendingId:Xa++,timeout:typeof y==`number`?y:-1,activeBranch:null,isFallbackMountPending:!1,pendingBranch:null,isInFallback:!u,isHydrating:u,isUnmounted:!1,effects:[],resolve(e=!1,n=!1){let{vnode:r,activeBranch:i,pendingBranch:o,pendingId:s,effects:c,parentComponent:l,container:u,isInFallback:d}=x,g=!1;if(x.isHydrating)x.isHydrating=!1;else if(!e){g=i&&o.transition&&o.transition.mode===`out-in`;let e=!1;g&&(i.transition.afterLeave=()=>{s===x.pendingId&&(f(o,u,a===b&&!e?m(i):a,0),zn(c),d&&r.ssFallback&&(r.ssFallback.el=null))}),i&&!x.isFallbackMountPending&&(h(i.el)===u&&(a=m(i),e=!0),p(i,l,x,!0),!g&&d&&r.ssFallback&&G(()=>r.ssFallback.el=null,x)),g||f(o,u,a,0)}x.isFallbackMountPending=!1,oo(x,o),x.pendingBranch=null,x.isInFallback=!1;let y=x.parent,S=!1;for(;y;){if(y.pendingBranch){for(let e=0;e{if(x.isFallbackMountPending=!1,!x.isInFallback)return;let e=x.vnode.ssFallback;d(null,e,i,o,r,null,a,s,c),oo(x,e)},u=e.transition&&e.transition.mode===`out-in`;u&&(x.isFallbackMountPending=!0,n.transition.afterLeave=l),x.isInFallback=!0,p(n,r,null,!0),u||l()},move(e,t,n){x.activeBranch&&f(x.activeBranch,e,t,n),x.container=e},next(){return x.activeBranch&&m(x.activeBranch)},registerDep(e,t,n){let r=!!x.pendingBranch;r&&x.deps++;let i=e.vnode.el;e.asyncDep.catch(t=>{Dn(t,e,0)}).then(a=>{if(e.isUnmounted||x.isUnmounted||x.pendingId!==e.suspenseId)return;if(Ro(),i&&!e.scope.active){r&&--x.deps===0&&x.resolve();return}e.asyncResolved=!0;let{vnode:s}=e;Uo(e,a,!1),i&&(s.el=i);let c=!i&&e.subTree.el;t(e,s,h(i||e.subTree.el),i?null:m(e.subTree),x,o,n),c&&(s.placeholder=null,g(c)),ya(e,s.el),r&&--x.deps===0&&x.resolve()})},unmount(e,t){x.isUnmounted=!0,x.activeBranch&&p(x.activeBranch,n,e,t),x.pendingBranch&&p(x.pendingBranch,n,e,t)}};return x}function no(e,t,n,r,i,a,o,s,c){let l=t.suspense=to(t,r,n,e.parentNode,document.createElement(`div`),null,i,a,o,s,!0),u=c(e,l.pendingBranch=t.ssContent,n,l,a,o);return l.deps===0&&l.resolve(!1,!0),u}function ro(e){let{shapeFlag:t,children:n}=e,r=t&32;e.ssContent=io(r?n.default:n),e.ssFallback=r?io(n.fallback):X(q)}function io(e){let t;if(C(e)){let n=mo&&e._c;n&&(e._d=!1,fo()),e=e(),n&&(e._d=!0,t=J,po())}return v(e)&&(e=pa(e)),e=Z(e),t&&!e.dynamicChildren&&(e.dynamicChildren=t.filter(t=>t!==e)),e}function ao(e,t){t&&t.pendingBranch?v(e)?t.effects.push(...e):t.effects.push(e):zn(e)}function oo(e,t){e.activeBranch=t;let{vnode:n,parentComponent:r}=e,i=t.el;for(;!i&&t.component;)t=t.component.subTree,i=t.el;n.el=i,r&&r.subTree===n&&(r.vnode.el=i,ya(r,i))}function so(e){let t=e.props&&e.props.suspensible;return t!=null&&t!==!1}var K=Symbol.for(`v-fgt`),co=Symbol.for(`v-txt`),q=Symbol.for(`v-cmt`),lo=Symbol.for(`v-stc`),uo=[],J=null;function fo(e=!1){uo.push(J=e?null:[])}function po(){uo.pop(),J=uo[uo.length-1]||null}var mo=1;function ho(e,t=!1){mo+=e,e<0&&J&&t&&(J.hasOnce=!0)}function go(e){return e.dynamicChildren=mo>0?J||l:null,po(),mo>0&&J&&J.push(e),e}function _o(e,t,n,r,i,a){return go(So(e,t,n,r,i,a,!0))}function vo(e,t,n,r,i){return go(X(e,t,n,r,i,!0))}function yo(e){return e?e.__v_isVNode===!0:!1}function Y(e,t){return e.type===t.type&&e.key===t.key}var bo=({key:e})=>e??null,xo=({ref:e,ref_key:t,ref_for:n})=>(typeof e==`number`&&(e=``+e),e==null?null:w(e)||z(e)||C(e)?{i:V,r:e,k:t,f:!!n}:e);function So(e,t=null,n=null,r=0,i=null,a=e===K?0:1,o=!1,s=!1){let c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&bo(t),ref:t&&xo(t),scopeId:Wn,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:a,patchFlag:r,dynamicProps:i,dynamicChildren:null,appContext:null,ctx:V};return s?(ko(c,n),a&128&&e.normalize(c)):n&&(c.shapeFlag|=w(n)?8:16),mo>0&&!o&&J&&(c.patchFlag>0||a&6)&&c.patchFlag!==32&&J.push(c),c}var X=Co;function Co(e,t=null,n=null,r=0,i=null,a=!1){if((!e||e===Oi)&&(e=q),yo(e)){let r=To(e,t,!0);return n&&ko(r,n),mo>0&&!a&&J&&(r.shapeFlag&6?J[J.indexOf(e)]=r:J.push(r)),r.patchFlag=-2,r}if(Yo(e)&&(e=e.__vccOpts),t){t=wo(t);let{class:e,style:n}=t;e&&!w(e)&&(t.class=Se(e)),E(n)&&(tn(n)&&!v(n)&&(n=m({},n)),t.style=_e(n))}let o=w(e)?1:Ya(e)?128:sr(e)?64:E(e)?4:C(e)?2:0;return So(e,t,n,r,i,o,a,!0)}function wo(e){return e?tn(e)||Sa(e)?m({},e):e:null}function To(e,t,n=!1,r=!1){let{props:i,ref:a,patchFlag:o,children:s,transition:c}=e,l=t?Ao(i||{},t):i,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&bo(l),ref:t&&t.ref?n&&a?v(a)?a.concat(xo(t)):[a,xo(t)]:xo(t):a,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:s,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==K?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&To(e.ssContent),ssFallback:e.ssFallback&&To(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce,cacheIndex:e.cacheIndex};return c&&r&&Ar(u,c.clone(u)),u}function Eo(e=` `,t=0){return X(co,null,e,t)}function Do(e=``,t=!1){return t?(fo(),vo(q,null,e)):X(q,null,e)}function Z(e){return e==null||typeof e==`boolean`?X(q):v(e)?X(K,null,e.slice()):yo(e)?Oo(e):X(co,null,String(e))}function Oo(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:To(e)}function ko(e,t){let n=0,{shapeFlag:r}=e;if(t==null)t=null;else if(v(t))n=16;else if(typeof t==`object`){if(r&65){let n=t.default;n&&(n._c&&(n._d=!1),ko(e,n()),n._c&&(n._d=!0));return}{n=32;let r=t._;!r&&!Sa(t)?t._ctx=V:r===3&&V&&(V.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}}else if(C(t)){if(r&65){ko(e,{default:t});return}t={default:t,_ctx:V},n=32}else t=String(t),r&64?(n=16,t=[Eo(t)]):n=8;e.children=t,e.shapeFlag|=n}function Ao(...e){let t={};for(let n=0;n$||V,Fo,Io;{let e=ge(),t=(t,n)=>{let r;return(r=e[t])||(r=e[t]=[]),r.push(n),e=>{r.length>1?r.forEach(t=>t(e)):r[0](e)}};Fo=t(`__VUE_INSTANCE_SETTERS__`,e=>$=e),Io=t(`__VUE_SSR_SETTERS__`,e=>Bo=e)}var Lo=e=>{let t=$;return Fo(e),e.scope.on(),()=>{e.scope.off(),Fo(t)}},Ro=()=>{$&&$.scope.off(),Fo(null)};function zo(e){return e.vnode.shapeFlag&4}var Bo=!1;function Vo(e,t=!1,n=!1){t&&Io(t);let{props:r,children:i}=e.vnode,a=zo(e);Ca(e,r,a,t),Ia(e,i,n||t);let o=a?Ho(e,t):void 0;return t&&Io(!1),o}function Ho(e,t){let n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Ri);let{setup:r}=n;if(r){tt();let n=e.setupContext=r.length>1?Ko(e):null,i=Lo(e),a=Tn(r,e,0,[e.props,n]),o=D(a);if(nt(),i(),(o||e.sp)&&!ni(e)&&Pr(e),o){if(a.then(Ro,Ro),t)return a.then(n=>{Io(!0);try{Uo(e,n,t)}finally{Io(!1)}}).catch(t=>{Dn(t,e,0)});e.asyncDep=a}else Uo(e,a,t)}else Wo(e,t)}function Uo(e,t,n){C(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:E(t)&&(e.setupState=fn(t)),Wo(e,n)}function Wo(e,t,n){let r=e.type;e.render||=r.render||u;{let t=Lo(e);tt();try{Wi(e)}finally{nt(),t()}}}var Go={get(e,t){return P(e,`get`,``),e[t]}};function Ko(e){return{attrs:new Proxy(e.attrs,Go),slots:e.slots,emit:e.emit,expose:t=>{e.exposed=t||{}}}}function qo(e){return e.exposed?e.exposeProxy||=new Proxy(fn(nn(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Ii)return Ii[n](e)},has(e,t){return t in e||t in Ii}}):e.proxy}function Jo(e,t=!0){return C(e)?e.displayName||e.name:e.name||t&&e.__name}function Yo(e){return C(e)&&`__vccOpts`in e}var Xo=(e,t)=>vn(e,t,Bo);function Zo(e,t,n){try{ho(-1);let r=arguments.length;return r===2?E(t)&&!v(t)?yo(t)?X(e,null,[t]):X(e,t):X(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&yo(n)&&(n=[n]),X(e,t,n))}finally{ho(1)}}var Qo=`3.5.43`;function $o(e,t={},n){for(let r in e){let i=e[r],a=n?`${n}:${r}`:r;typeof i==`object`&&i?$o(i,t,a):typeof i==`function`&&(t[a]=i)}return t}var es=(()=>{if(console.createTask)return console.createTask;let e={run:e=>e()};return()=>e})();function ts(e,t,n,r){for(let i=n;ie[i](...t)):e[i](...t);if(n&&typeof n.then==`function`)return Promise.resolve(n).then(()=>ts(e,t,i+1,r))}catch(e){return Promise.reject(e)}}function ns(e,t,n){if(e.length>0)return ts(e,t,0,es(n))}function rs(e,t,n){if(e.length>0){let r=es(n);return Promise.all(e.map(e=>r.run(()=>e(...t))))}}function is(e,t){for(let n of[...e])n(t)}var as=class{_hooks;_before;_after;_deprecatedHooks;_deprecatedMessages;constructor(){this._hooks={},this._before=void 0,this._after=void 0,this._deprecatedMessages=void 0,this._deprecatedHooks={},this.hook=this.hook.bind(this),this.callHook=this.callHook.bind(this),this.callHookWith=this.callHookWith.bind(this)}hook(e,t,n={}){if(!e||typeof t!=`function`)return()=>{};let r=e,i;for(;this._deprecatedHooks[e];)i=this._deprecatedHooks[e],e=i.to;if(i&&!n.allowDeprecated){let e=i.message;e||=`${r} hook has been deprecated`+(i.to?`, please use ${i.to}`:``),this._deprecatedMessages||=new Set,this._deprecatedMessages.has(e)||(console.warn(e),this._deprecatedMessages.add(e))}if(!t.name)try{Object.defineProperty(t,"name",{get:()=>`_`+e.replace(/\W+/g,`_`)+`_hook_cb`,configurable:!0})}catch{}return this._hooks[e]=this._hooks[e]||[],this._hooks[e].push(t),()=>{t&&=(this.removeHook(e,t),void 0)}}hookOnce(e,t){let n,r=(...e)=>(typeof n==`function`&&n(),n=void 0,r=void 0,t(...e));return n=this.hook(e,r),n}removeHook(e,t){let n=this._hooks[e];if(n){let r=n.indexOf(t);r!==-1&&n.splice(r,1),n.length===0&&(this._hooks[e]=void 0)}}clearHook(e){this._hooks[e]=void 0}deprecateHook(e,t){this._deprecatedHooks[e]=typeof t==`string`?{to:t}:t;let n=this._hooks[e]||[];this._hooks[e]=void 0;for(let t of n)this.hook(e,t)}deprecateHooks(e){for(let t in e)this.deprecateHook(t,e[t])}addHooks(e){let t=$o(e),n=Object.keys(t).map(e=>this.hook(e,t[e]));return()=>{for(let e of n)e();n.length=0}}removeHooks(e){let t=$o(e);for(let e in t)this.removeHook(e,t[e])}removeAllHooks(){this._hooks={}}callHook(e,...t){return this.callHookWith(ns,e,t)}callHookParallel(e,...t){return this.callHookWith(rs,e,t)}callHookWith(e,t,n){let r=this._before||this._after?{name:t,args:n,context:{}}:void 0;this._before&&is(this._before,r);let i=e(this._hooks[t]?[...this._hooks[t]]:[],n,t);return i instanceof Promise?i.finally(()=>{this._after&&r&&is(this._after,r)}):(this._after&&r&&is(this._after,r),i)}beforeEach(e){return this._before=this._before||[],this._before.push(e),()=>{if(this._before!==void 0){let t=this._before.indexOf(e);t!==-1&&this._before.splice(t,1)}}}afterEach(e){return this._after=this._after||[],this._after.push(e),()=>{if(this._after!==void 0){let t=this._after.indexOf(e);t!==-1&&this._after.splice(t,1)}}}};function os(){return new as}var ss=class{_hooks;constructor(){this._hooks={}}hook(e,t){return!e||typeof t!=`function`?()=>{}:(this._hooks[e]=this._hooks[e]||[],this._hooks[e].push(t),()=>{t&&=(this.removeHook(e,t),void 0)})}removeHook(e,t){let n=this._hooks[e];if(n){let r=n.indexOf(t);r!==-1&&n.splice(r,1),n.length===0&&(this._hooks[e]=void 0)}}callHook(e,...t){let n=this._hooks[e];if(n&&n.length!==0)return ts(n.slice(),t,0)}};function cs(){return globalThis.AsyncLocalStorage||globalThis.process?.getBuiltinModule?.(`node:async_hooks`)?.AsyncLocalStorage}var ls=globalThis.WeakRef||class{#e;constructor(e){this.#e=e}deref(){return this.#e}};function us(e={}){let t,n=!1,r=e=>{if(t&&t!==e)throw Error(`Context conflict`)},i;if(e.asyncContext){let t=e.AsyncLocalStorage||cs();t?i=new t:console.warn("[unctx] `AsyncLocalStorage` is not provided.")}let a=e=>i&&typeof e==`object`&&e?{__unctx_weak:new ls(e)}:e,o=e=>e&&e.__unctx_weak?e.__unctx_weak.deref():e,s=()=>{if(i){let e=i.getStore();if(e!==void 0)return o(e)}return t};return{use:()=>{let e=s();if(e===void 0)throw Error(`Context is not available`);return e},tryUse:()=>s()??null,set:(e,i)=>{i||r(e),t=e,n=!0},unset:()=>{t=void 0,n=!1},call:(e,o)=>{r(e),t=e;try{return i?i.run(a(e),o):o()}finally{n||(t=void 0)}},async callAsync(e,r){t=e;let o=()=>{t=e},s=()=>t===e?o:void 0;_s.add(s);try{let o=i?i.run(a(e),r):r();return n||(t=void 0),await o}finally{_s.delete(s)}}}}function ds(e={}){let t={};return{get(n,r={}){return t[n]||(t[n]=us({...e,...r})),t[n]}}}var fs=typeof globalThis<`u`?globalThis:typeof self<`u`?self:typeof global<`u`?global:typeof window<`u`?window:{},ps=`__unctx__`,ms=fs[ps]||(fs[ps]=ds()),hs=(e,t={})=>ms.get(e,t),gs=`__unctx_async_handlers__`,_s=fs[gs]||(fs[gs]=new Set);function vs(e){let t=[];for(let e of _s){let n=e();n&&t.push(n)}let n=()=>{for(let e of t)e()},r=e();return r&&typeof r==`object`&&`catch`in r&&(r=r.catch(e=>{throw n(),e})),[r,n]}var ys={name:`page`,mode:`out-in`},bs={meta:[{charset:`utf-8`},{name:`viewport`,content:`width=device-width, initial-scale=1`},{name:`color-scheme`,content:`dark light`}],link:[],style:[],script:[],noscript:[],title:`Liapi Admin`,htmlAttrs:{lang:`zh-CN`}},xs={id:`__nuxt-loader`},Ss={componentName:`NuxtLink`,prefetch:!0,prefetchOn:{visibility:!0}},Cs=`#__nuxt`,ws=`nuxt-app`,Ts=36e5,Es=`vite:preloadError`;function Ds(e=`nuxt-app`){return hs(e,{asyncContext:!1})}var Os=`__nuxt_plugin`;function ks(e){let t=0,n={_id:e.id||`nuxt-app`,_scope:Le(),provide:void 0,versions:{get nuxt(){return`4.5.2`},get vue(){return n.vueApp.version}},payload:Xt({...e.ssrContext?.payload||{},data:Xt({}),state:Yt({}),once:new Set,_errors:Xt({})}),static:{data:{}},runWithContext(e){return n._scope.active&&!Re()?n._scope.run(()=>Ns(n,e)):Ns(n,e)},isHydrating:!0,deferHydration(){if(!n.isHydrating)return()=>{};t++;let e=!1;return()=>{if(!e&&(e=!0,t--,t===0))return n.isHydrating=!1,n.callHook(`app:suspense:resolve`)}},_asyncDataPromises:{},_asyncData:Xt({}),_state:Xt({}),_payloadRevivers:{},...e};{let e=window.__NUXT__;if(e)for(let t in e)switch(t){case`data`:case`state`:case`_errors`:Object.assign(n.payload[t],e[t]);break;default:n.payload[t]=e[t]}}n.hooks=os(),n.hook=n.hooks.hook;{let e=n.hooks.callHook;n.hooks.callHook=(t,...n)=>Promise.resolve().then(()=>e(t,...n))}n.callHook=n.hooks.callHook,n.provide=(e,t)=>{let r=`$`+e;Ls(n,r,t),Ls(n.vueApp.config.globalProperties,r,t)},Ls(n.vueApp,`$nuxt`,n),Ls(n.vueApp.config.globalProperties,`$nuxt`,n);{window.addEventListener(Es,e=>{n.callHook(`app:chunkError`,{error:e.payload}),e.payload?.message?.includes(`Unable to preload CSS`)&&e.preventDefault()}),window.useNuxtApp||=Fs;let e=n.hook(`app:error`,(...e)=>{o.NUXT_E1005({cause:e.length>1?e:e[0]})});n.hook(`app:mounted`,e)}let r=n.payload.config;return n.provide(`config`,r),n}async function As(e,t){if(typeof t==`function`){let{provide:n}=await e.runWithContext(()=>t(e))||{};if(n&&typeof n==`object`)for(let t in n)e.provide(t,n[t])}}async function js(e,t){let n;for(let r of t)try{await As(e,r)}catch(t){if(!e.payload.error)throw t;n||=t}if(n)throw e.payload.error||n}function Ms(e){if(typeof e==`function`)return e;let t=e._name||e.name;return delete e.name,Object.assign(e.setup||(()=>{}),e,{[Os]:!0,_name:t})}function Ns(e,t,n){return Ds(e._id).set(e),e.vueApp.runWithContext(()=>n?t(...n):t())}function Ps(e){let t;return Zn()&&(t=Po()?.appContext.app.$nuxt),t||=Ds(e).tryUse(),t||null}function Fs(e){let t=Ps(e);if(!t)throw o.NUXT_E1001();return t}function Is(e){return Fs().$config}function Ls(e,t,n){Object.defineProperty(e,t,{get:()=>n})}export{ki as $,X as A,C as At,Ao as B,_e as Bt,So as C,k as Ct,za as D,Ee as Dt,_o as E,ce as Et,wo as F,w as Ft,Ti as G,a as Gt,ci as H,me as Ht,Zo as I,T as It,fo as J,_i as K,r as Kt,Zn as L,pe as Lt,Mr as M,E as Mt,Po as N,f as Nt,Ra as O,de as Ot,jr as P,Te as Pt,Di as Q,Xn as R,Se as Rt,Xo as S,ln as St,Do as T,m as Tt,bi as U,o as Ut,Fn as V,Ne as Vt,li as W,i as Wt,Mi as X,Yn as Y,Ni as Z,K as _,Qt as _t,Is as a,br as at,gr as b,hn as bt,ys as c,Kn as ct,Ts as d,F as dt,Dr as et,Cs as f,z as ft,xr as g,Xt as gt,Tr as h,an as ht,Fs as i,zi as it,ri as j,p as jt,Eo as k,v as kt,xs as l,qn as lt,ss as m,Yt as mt,ks as n,Bi as nt,bs as o,tr as ot,vs as p,ze as pt,yi as q,Ms as r,Nr as rt,ws as s,er as st,js as t,Ar as tt,Ss as u,Re as ut,oi as v,on as vt,vo as w,le as wt,En as x,un as xt,Za as y,L as yt,yo as z,Ce as zt}; \ No newline at end of file diff --git a/server/adminui/_nuxt/BZ_oP5sc.js b/server/adminui/_nuxt/BZ_oP5sc.js new file mode 100644 index 0000000..167b233 --- /dev/null +++ b/server/adminui/_nuxt/BZ_oP5sc.js @@ -0,0 +1 @@ +import{$ as e,A as t,B as n,Bt as r,C as i,E as a,J as o,K as s,M as c,Rt as l,S as u,St as d,T as f,ct as p,ht as m,nt as h,ot as g,w as _}from"./BT-50xGH.js";import{n as v}from"./CxZD5dLJ.js";import{c as y,n as b,o as x}from"./C7_xDZuo.js";import{t as S}from"./YiEwAvN-.js";var C=y(`eye-off`,[[`path`,{d:`M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49`,key:`ct8e1f`}],[`path`,{d:`M14.084 14.158a3 3 0 0 1-4.242-4.242`,key:`151rxh`}],[`path`,{d:`M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143`,key:`13bj9a`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]),w=y(`eye`,[[`path`,{d:`M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0`,key:`1nclc0`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),T=[`type`,`value`,`placeholder`,`disabled`,`readonly`],E={key:0,class:`absolute inset-0 z-20 flex items-center justify-center bg-background/20 dark:bg-background/10 backdrop-blur-[1px] rounded-[inherit] overflow-hidden pointer-events-none`},D=c({inheritAttrs:!1,__name:`Input`,props:{modelValue:{default:``},type:{default:`text`},placeholder:{default:``},size:{default:`md`},disabled:{type:Boolean,default:!1},readonly:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},clearable:{type:Boolean,default:!1},error:{type:Boolean,default:!1},prefixIcon:{default:null},suffixIcon:{default:null},animate:{type:Boolean,default:!0},delay:{default:0},entryClass:{default:``}},emits:[`update:modelValue`,`change`,`clear`,`focus`,`blur`],setup(c,{emit:y}){let D=c,O=y,k=m(!1),A=m(!1),j=m(null),M=m(!1);g(()=>D.error,e=>{e&&(M.value=!0,setTimeout(()=>{M.value=!1},350))});let N=u(()=>D.type===`password`?A.value?`text`:`password`:D.type),{handleBlurValidate:P,handleChangeValidate:F}=S(),I=h(),L=u(()=>I.class),R=u(()=>I.style),{class:z,style:B,...V}=I,H=e=>{let t=e.target.value;O(`update:modelValue`,t),O(`change`,t),F()},U=()=>{O(`update:modelValue`,``),O(`change`,``),O(`clear`),F(),j.value?.focus()};s(()=>{D.animate&&setTimeout(()=>{k.value=!0},D.delay)});let W=u(()=>{let e=D.disabled||D.loading;return b(`relative flex items-center w-full border rounded-base transition-all duration-200 overflow-hidden bg-background`,{"h-8 px-2.5 text-xs":D.size===`sm`,"h-10 px-3.5 text-sm":D.size===`md`,"h-12 px-4 text-base":D.size===`lg`},D.error?`border-destructive text-destructive focus-within:ring-2 focus-within:ring-destructive/20`:`border-border hover:border-border/80 focus-within:border-primary focus-within:ring-2 focus-within:ring-primary/15`,M.value?`animate-shake`:``,e?`opacity-60 cursor-not-allowed pointer-events-none bg-muted/30`:``)}),G=u(()=>D.animate?D.entryClass?k.value?D.entryClass:`opacity-0`:b(`transform transition-all duration-700 ease-swift`,k.value?`opacity-100 translate-y-0 scale-100 blur-none`:`opacity-0 translate-y-1.5 scale-98 blur-md pointer-events-none`):``),K=u(()=>b({"w-3.5 h-3.5":D.size===`sm`,"w-4 h-4":D.size===`md`,"w-4.5 h-4.5":D.size===`lg`}));return(s,c)=>(o(),a(`div`,{class:l([[G.value,L.value],`w-full`]),style:r(R.value)},[i(`div`,{class:l(W.value)},[i(`div`,{class:l([`flex items-center gap-2 w-full h-full transition-all duration-300 ease-smooth`,D.loading?`opacity-35 blur-[1.5px] scale-[0.99] select-none`:`opacity-100 blur-none scale-100`])},[D.prefixIcon?(o(),_(e(D.prefixIcon),{key:0,class:l([K.value,`text-muted-foreground shrink-0`])},null,8,[`class`])):f(``,!0),i(`input`,n({ref_key:`inputRef`,ref:j},V,{type:N.value,value:D.modelValue,placeholder:D.placeholder,disabled:D.disabled||D.loading,readonly:D.readonly,onInput:H,onFocus:c[0]||=e=>O(`focus`,e),onBlur:c[1]||=e=>{d(P)(),O(`blur`,e)},class:`w-full h-full bg-transparent border-none outline-none text-foreground placeholder:text-muted-foreground/60 font-medium`}),null,16,T),t(v,{name:`icon-pop`},{default:p(()=>[D.clearable&&D.modelValue!==``&&!D.disabled&&!D.loading?(o(),a(`button`,{key:0,type:`button`,onClick:U,class:`text-muted-foreground hover:text-foreground transition-colors shrink-0 p-0.5 active:scale-90`},[t(d(x),{class:l(K.value)},null,8,[`class`])])):f(``,!0)]),_:1}),D.type===`password`&&!D.disabled&&!D.loading?(o(),a(`button`,{key:1,type:`button`,onClick:c[2]||=e=>A.value=!A.value,class:`text-muted-foreground hover:text-foreground transition-colors shrink-0 p-0.5 active:scale-90 overflow-hidden`},[t(v,{name:`icon-flip`,mode:`out-in`},{default:p(()=>[(o(),_(e(A.value?d(C):d(w)),{key:A.value?`eye-off`:`eye`,class:l(K.value)},null,8,[`class`]))]),_:1})])):f(``,!0),D.suffixIcon&&D.type!==`password`?(o(),_(e(D.suffixIcon),{key:2,class:l([K.value,`text-muted-foreground shrink-0`])},null,8,[`class`])):f(``,!0)],2),t(v,{name:`fade`},{default:p(()=>[D.loading?(o(),a(`div`,E,[...c[3]||=[i(`div`,{class:`absolute inset-0 overflow-hidden pointer-events-none rounded-[inherit]`},[i(`div`,{class:`w-[200%] h-full bg-gradient-to-r from-transparent via-foreground/[0.08] to-transparent animate-kinetic-shimmer rounded-[inherit]`})],-1)]])):f(``,!0)]),_:1})],2)],6))}});export{D as t}; \ No newline at end of file diff --git a/server/adminui/_nuxt/BaMR1-Wb.js b/server/adminui/_nuxt/BaMR1-Wb.js new file mode 100644 index 0000000..59da09c --- /dev/null +++ b/server/adminui/_nuxt/BaMR1-Wb.js @@ -0,0 +1 @@ +import{A as e,C as t,E as n,J as r,K as i,M as a,St as o,Vt as s,ct as c,ht as l,k as u}from"./BT-50xGH.js";import{c as d,l as f}from"./C7_xDZuo.js";import{t as p}from"./D50T9Hbc.js";import{t as m}from"./ChxjuxiH.js";import{t as h}from"./Biiz67gC.js";import{i as g,r as _,t as v}from"./CLabUxWX.js";import{t as y}from"./CaMPYMl_.js";import{r as b}from"./zZGEHylc.js";var x=d(`shield-check`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),S={class:`space-y-4`},C={class:`flex items-center justify-between gap-3 px-5 py-4`},w={class:`flex items-center gap-2`},T={class:`px-5 pb-5`},E={class:`text-xs text-muted-foreground`},D={class:`flex items-center justify-between gap-3 px-5 py-4`},O={class:`px-5 pb-5`},k={class:`text-xs text-muted-foreground`},A={class:`flex items-center justify-between gap-3 px-5 py-4`},j={class:`flex items-center gap-2`},M={class:`px-5 pb-5`},N={class:`text-xs text-muted-foreground`},P=a({__name:`health`,setup(a){let{request:d,setToken:P}=f(),{toast:F,handleError:I}=v(),L=l([]),R=l([]),z=l([]),B=l(!0),V=l(!1);async function H(){try{let[e,t,n]=await Promise.all([d(`/health`),d(`/health/history?n=50`),d(`/audit?n=50`)]);L.value=e,R.value=t,z.value=n}catch(e){I(e,P)}finally{B.value=!1}}i(H);async function U(){V.value=!0;try{await d(`/health/probe`,{method:`POST`,body:`{}`}),F.success(`探测完成`),await H()}catch(e){I(e,P)}finally{V.value=!1}}let W=[{key:`name`,title:`上游`},{key:`ok`,title:`状态`,width:90},{key:`latency_ms`,title:`延迟`,width:90},{key:`consecutive_failures`,title:`连续失败`,width:90},{key:`last_check`,title:`最后检查`,width:180},{key:`error`,title:`错误`}],G=[{key:`time`,title:`时间`,width:90},{key:`name`,title:`上游`},{key:`ok`,title:`状态`,width:80},{key:`latency_ms`,title:`延迟`,width:80},{key:`source`,title:`来源`,width:80},{key:`error`,title:`错误`}],K=[{key:`time`,title:`时间`,width:90},{key:`ip`,title:`IP`,width:140},{key:`method`,title:`方法`,width:80},{key:`path`,title:`路径`},{key:`ok`,title:`结果`,width:80},{key:`reason`,title:`原因`}];return(i,a)=>(r(),n(`div`,S,[e(o(_),{padding:`none`},{header:c(()=>[t(`div`,C,[t(`div`,w,[e(o(p),{size:16,class:`text-muted-foreground`}),a[0]||=t(`h2`,{class:`text-sm font-semibold`},`上游健康状态`,-1)]),e(o(g),{variant:`primary`,size:`sm`,icon:o(h),loading:o(V),onClick:U},{default:c(()=>[...a[1]||=[u(` 立即探测 `,-1)]]),_:1},8,[`icon`,`loading`])])]),default:c(()=>[t(`div`,T,[e(o(m),{columns:W,data:o(L),size:`sm`,hover:``,loading:o(B),"empty-text":`没有启用的上游。`},{"cell-ok":c(({row:t})=>[e(o(y),{size:`sm`,variant:t.ok?`primary`:`outline`},{default:c(()=>[u(s(t.ok?`正常`:`异常`),1)]),_:2},1032,[`variant`])]),"cell-latency_ms":c(({row:e})=>[u(s(e.latency_ms)+`ms`,1)]),"cell-error":c(({row:e})=>[t(`span`,E,s(e.error),1)]),_:1},8,[`data`,`loading`])])]),_:1}),e(o(_),{padding:`none`},{header:c(()=>[t(`div`,D,[a[3]||=t(`h2`,{class:`text-sm font-semibold`},`探测历史`,-1),e(o(g),{variant:`outline`,size:`sm`,icon:o(h),onClick:H},{default:c(()=>[...a[2]||=[u(` 刷新 `,-1)]]),_:1},8,[`icon`])])]),default:c(()=>[t(`div`,O,[e(o(m),{columns:G,data:o(R),size:`sm`,hover:``,loading:o(B),"empty-text":`暂无探测记录。`},{"cell-time":c(({row:e})=>[u(s(o(b)(e.time)),1)]),"cell-ok":c(({row:t})=>[e(o(y),{size:`sm`,variant:t.ok?`primary`:`outline`},{default:c(()=>[u(s(t.ok?`正常`:`异常`),1)]),_:2},1032,[`variant`])]),"cell-latency_ms":c(({row:e})=>[u(s(e.latency_ms)+`ms`,1)]),"cell-source":c(({row:t})=>[e(o(y),{size:`sm`,variant:t.manual?`secondary`:`outline`},{default:c(()=>[u(s(t.manual?`手动`:`定时`),1)]),_:2},1032,[`variant`])]),"cell-error":c(({row:e})=>[t(`span`,k,s(e.error),1)]),_:1},8,[`data`,`loading`])])]),_:1}),e(o(_),{padding:`none`},{header:c(()=>[t(`div`,A,[t(`div`,j,[e(o(x),{size:16,class:`text-muted-foreground`}),a[4]||=t(`h2`,{class:`text-sm font-semibold`},`管理端审计日志`,-1)]),e(o(g),{variant:`outline`,size:`sm`,icon:o(h),onClick:H},{default:c(()=>[...a[5]||=[u(` 刷新 `,-1)]]),_:1},8,[`icon`])])]),default:c(()=>[t(`div`,M,[e(o(m),{columns:K,data:o(z),size:`sm`,hover:``,loading:o(B),"empty-text":`暂无审计记录。`},{"cell-time":c(({row:e})=>[u(s(o(b)(e.time)),1)]),"cell-ok":c(({row:t})=>[e(o(y),{size:`sm`,variant:t.ok?`primary`:`outline`},{default:c(()=>[u(s(t.ok?`成功`:`拒绝`),1)]),_:2},1032,[`variant`])]),"cell-reason":c(({row:e})=>[t(`span`,N,s(e.reason),1)]),_:1},8,[`data`,`loading`])])]),_:1})]))}});export{P as default}; \ No newline at end of file diff --git a/server/adminui/_nuxt/Biiz67gC.js b/server/adminui/_nuxt/Biiz67gC.js new file mode 100644 index 0000000..4ae5216 --- /dev/null +++ b/server/adminui/_nuxt/Biiz67gC.js @@ -0,0 +1 @@ +import{c as e}from"./C7_xDZuo.js";var t=e(`refresh-cw`,[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]);export{t}; \ No newline at end of file diff --git a/server/adminui/_nuxt/BkiPxbt6.js b/server/adminui/_nuxt/BkiPxbt6.js new file mode 100644 index 0000000..0a6970f --- /dev/null +++ b/server/adminui/_nuxt/BkiPxbt6.js @@ -0,0 +1 @@ +import{$ as e,A as t,C as n,E as r,J as i,K as a,M as o,Rt as s,S as c,St as l,T as u,Vt as d,Z as f,ct as p,ht as m,k as h,w as g}from"./BT-50xGH.js";import{n as _}from"./CxZD5dLJ.js";import{c as v,n as y}from"./C7_xDZuo.js";import{n as b}from"./ChxjuxiH.js";var x=v(`plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]),S=v(`trash-2`,[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]]),C={key:0,class:`relative flex items-center justify-center`},w=[`src`],T={class:`space-y-1 max-w-sm`},E={class:`font-extrabold text-sm text-foreground tracking-tight`},D={key:0,class:`text-xs text-muted-foreground leading-relaxed`},O={key:0,class:`pt-2`},k={key:0,class:`absolute inset-0 z-20 flex items-center justify-center bg-background/20 dark:bg-background/10 backdrop-blur-[1px] rounded-[inherit] overflow-hidden pointer-events-none`},A=o({__name:`Empty`,props:{title:{default:`暂无数据`},description:{default:``},icon:{default:null},image:{default:``},size:{default:`md`},variant:{default:`default`},loading:{type:Boolean,default:!1},animate:{type:Boolean,default:!0},delay:{default:0},entryClass:{default:``}},setup(o){let v=o,x=m(!1),S=m(!1);a(()=>{v.animate&&setTimeout(()=>{x.value=!0},v.delay)});let A=c(()=>y(`relative flex flex-col items-center justify-center text-center select-none overflow-hidden transition-all duration-300 w-full`,{"p-6 gap-3":v.size===`sm`,"p-10 gap-4":v.size===`md`,"p-14 gap-6":v.size===`lg`},{"bg-transparent":v.variant==="default","bg-background border border-border/80 shadow-sm rounded-base":v.variant===`card`,"bg-muted/10 border-2 border-dashed border-border/80 rounded-base":v.variant===`dashed`})),j=c(()=>y({"w-8 h-8":v.size===`sm`,"w-12 h-12":v.size===`md`,"w-16 h-16":v.size===`lg`})),M=c(()=>v.animate?v.entryClass?x.value?v.entryClass:`opacity-0`:y(`transform transition-all duration-700 ease-swift`,x.value?`opacity-100 translate-y-0 scale-100 blur-none`:`opacity-0 translate-y-2 scale-98 blur-md pointer-events-none`):``);return(a,o)=>(i(),r(`div`,{class:s([A.value,M.value])},[n(`div`,{class:s([`flex flex-col items-center justify-center gap-3 w-full transition-all duration-300 ease-smooth`,v.loading?`opacity-30 blur-[2px] scale-[0.98]`:`opacity-100 blur-none scale-100`])},[f(a.$slots,`icon`,{},()=>[v.image?(i(),r(`div`,C,[S.value?u(``,!0):(i(),r(`div`,{key:0,class:s([j.value,`absolute inset-0 bg-muted-foreground/20 animate-pulse rounded-base`])},null,2)),n(`img`,{src:v.image,alt:`empty`,onLoad:o[0]||=e=>S.value=!0,class:s([j.value,`object-contain transition-all duration-500`,S.value?`opacity-100 blur-none scale-100`:`opacity-0 blur-sm scale-105`])},null,42,w)])):(i(),g(e(v.icon||l(b)),{key:1,class:s([j.value,`text-muted-foreground/40 stroke-[1.3]`])},null,8,[`class`]))]),n(`div`,T,[n(`h4`,E,[f(a.$slots,`title`,{},()=>[h(d(v.title),1)])]),v.description||a.$slots.description?(i(),r(`p`,D,[f(a.$slots,`description`,{},()=>[h(d(v.description),1)])])):u(``,!0)]),a.$slots.default||a.$slots.extra?(i(),r(`div`,O,[f(a.$slots,`extra`,{},()=>[f(a.$slots,`default`)])])):u(``,!0)],2),t(_,{name:`fade`},{default:p(()=>[v.loading?(i(),r(`div`,k,[...o[1]||=[n(`div`,{class:`absolute inset-0 overflow-hidden rounded-[inherit]`},[n(`div`,{class:`w-[200%] h-full bg-gradient-to-r from-transparent via-foreground/[0.08] to-transparent animate-kinetic-shimmer rounded-[inherit]`})],-1)]])):u(``,!0)]),_:1})],2))}});export{S as n,x as r,A as t}; \ No newline at end of file diff --git a/server/adminui/_nuxt/BnbMNd1_.js b/server/adminui/_nuxt/BnbMNd1_.js new file mode 100644 index 0000000..a6361db --- /dev/null +++ b/server/adminui/_nuxt/BnbMNd1_.js @@ -0,0 +1 @@ +import{A as e,C as t,E as n,J as r,K as i,M as a,S as o,St as s,T as c,Vt as l,X as ee,_ as u,ct as d,ft as f,ht as p,k as m,lt as h,w as g}from"./BT-50xGH.js";import{s as _}from"./CxZD5dLJ.js";import{l as v}from"./C7_xDZuo.js";import{t as y}from"./ChxjuxiH.js";import{t as b}from"./C2auVMGT.js";import{t as x}from"./Biiz67gC.js";import{t as te}from"./DfpAeMWm.js";import{i as S,r as C,t as w}from"./CLabUxWX.js";import{t as T}from"./CaMPYMl_.js";import{n as E,t as D}from"./zZGEHylc.js";var O={class:`rounded-xl border border-border bg-muted/40 px-3 py-2.5`},k={class:`text-[11px] text-muted-foreground`},A={class:`mt-0.5 truncate text-lg font-semibold`},ne=Object.assign(a({__name:`StatTile`,props:{label:{},value:{}},setup(e){return(i,a)=>(r(),n(`div`,O,[t(`div`,k,l(e.label),1),t(`div`,A,l(e.value),1)]))}}),{__name:`StatTile`}),j={class:`space-y-4`},M={class:`flex flex-wrap items-center gap-3 px-5 py-4`},N={class:`ml-auto flex flex-wrap items-center gap-2`},P={class:`w-32`},F={class:`space-y-5 px-5 pb-5`},I={key:0,class:`grid grid-cols-2 gap-3 sm:grid-cols-4 lg:grid-cols-7`},L={class:`font-medium`},R={class:`grid grid-cols-1 gap-4 lg:grid-cols-2`},z={key:0,class:`flex flex-wrap gap-2`},B={key:1,class:`text-sm text-muted-foreground`},V=a({__name:`stats`,setup(a){let{request:O,download:k,setToken:A}=v(),{handleError:V,toast:re}=w(),H=p(`model`),U=p(``),W=p(``),G=p(null),K=p([]),q=p(!0),J=[{label:`按模型`,value:`model`},{label:`按设备`,value:`device`},{label:`按天`,value:`day`}],Y=[{key:`key`,title:`Key`},{key:`requests`,title:`请求`,width:80},{key:`success`,title:`成功`,width:80},{key:`errors`,title:`错误`,width:70},{key:`io`,title:`in/out`,width:130},{key:`cost`,title:`费用`,width:90},{key:`avg_latency_ms`,title:`avg`,width:70},{key:`p50_ms`,title:`P50`,width:60},{key:`p90_ms`,title:`P90`,width:60},{key:`p99_ms`,title:`P99`,width:60}];async function X(){q.value=!0;try{let e=`group_by=`+encodeURIComponent(H.value);U.value&&(e+=`&from=`+U.value),W.value&&(e+=`&to=`+W.value);let[t,n]=await Promise.all([O(`/stats?`+e),O(`/stats/devices?n=10`).catch(()=>[])]);G.value=t,K.value=n}catch(e){V(e,A)}finally{q.value=!1}}i(X);let Z=o(()=>G.value?.total),Q=o(()=>Object.entries(G.value?.error_codes||{}).sort((e,t)=>e[0].localeCompare(t[0])));function ie(e){let t=`format=`+e+`&group_by=`+encodeURIComponent(H.value);return U.value&&(t+=`&from=`+U.value),W.value&&(t+=`&to=`+W.value),t}async function $(e){try{await k(`/stats/export?`+ie(e),e===`csv`?`liapi-stats.csv`:`liapi-stats.json`)}catch(e){V(e,A)}}return(i,a)=>{let o=ne;return r(),n(`div`,j,[e(s(C),{padding:`none`},{header:d(()=>[t(`div`,M,[a[8]||=t(`h2`,{class:`text-sm font-semibold`},`用量统计`,-1),t(`div`,N,[t(`div`,P,[e(s(te),{modelValue:s(H),"onUpdate:modelValue":a[0]||=e=>f(H)?H.value=e:null,options:J,size:`sm`,onChange:X},null,8,[`modelValue`])]),h(t(`input`,{"onUpdate:modelValue":a[1]||=e=>f(U)?U.value=e:null,type:`date`,class:`rounded-lg border border-border bg-background px-3 py-1.5 text-sm outline-none focus:border-ring`},null,512),[[_,s(U)]]),h(t(`input`,{"onUpdate:modelValue":a[2]||=e=>f(W)?W.value=e:null,type:`date`,class:`rounded-lg border border-border bg-background px-3 py-1.5 text-sm outline-none focus:border-ring`},null,512),[[_,s(W)]]),e(s(S),{variant:`outline`,size:`sm`,icon:s(x),onClick:X},{default:d(()=>[...a[5]||=[m(` 查询 `,-1)]]),_:1},8,[`icon`]),e(s(S),{variant:`outline`,size:`sm`,icon:s(b),onClick:a[3]||=e=>$(`csv`)},{default:d(()=>[...a[6]||=[m(` CSV `,-1)]]),_:1},8,[`icon`]),e(s(S),{variant:`outline`,size:`sm`,icon:s(b),onClick:a[4]||=e=>$(`json`)},{default:d(()=>[...a[7]||=[m(` JSON `,-1)]]),_:1},8,[`icon`])])])]),default:d(()=>[t(`div`,F,[s(Z)?(r(),n(`div`,I,[e(o,{label:`总请求`,value:s(E)(s(Z).requests)},null,8,[`value`]),e(o,{label:`成功`,value:s(E)(s(Z).success)},null,8,[`value`]),e(o,{label:`错误`,value:s(E)(s(Z).errors)},null,8,[`value`]),e(o,{label:`费用(元)`,value:s(D)(s(Z).cost)},null,8,[`value`]),e(o,{label:`P50`,value:s(Z).p50_ms+`ms`},null,8,[`value`]),e(o,{label:`P90`,value:s(Z).p90_ms+`ms`},null,8,[`value`]),e(o,{label:`P99`,value:s(Z).p99_ms+`ms`},null,8,[`value`])])):c(``,!0),e(s(y),{columns:Y,data:s(G)?.rows||[],size:`sm`,hover:``,loading:s(q),"empty-text":`所选区间暂无数据。`},{"cell-key":d(({row:e})=>[t(`span`,L,l(e.key),1)]),"cell-io":d(({row:e})=>[m(l(s(E)(e.in_tokens))+`/`+l(s(E)(e.out_tokens)),1)]),"cell-cost":d(({row:e})=>[m(l(s(D)(e.cost)),1)]),_:1},8,[`data`,`loading`]),t(`div`,R,[t(`div`,null,[a[9]||=t(`h3`,{class:`mb-2 text-sm font-semibold`},`设备排行`,-1),e(s(y),{columns:[{key:`key`,title:`设备/Token`},{key:`requests`,title:`请求`,width:80},{key:`io`,title:`in/out`,width:130},{key:`cost`,title:`费用`,width:90}],data:s(K),size:`sm`,hover:``,"empty-text":`暂无数据。`},{"cell-io":d(({row:e})=>[m(l(s(E)(e.in_tokens))+`/`+l(s(E)(e.out_tokens)),1)]),"cell-cost":d(({row:e})=>[m(l(s(D)(e.cost)),1)]),_:1},8,[`data`])]),t(`div`,null,[a[10]||=t(`h3`,{class:`mb-2 text-sm font-semibold`},`错误码分布`,-1),s(Q).length?(r(),n(`div`,z,[(r(!0),n(u,null,ee(s(Q),([e,t])=>(r(),g(s(T),{key:e,variant:`secondary`},{default:d(()=>[m(` HTTP `+l(e)+` · `+l(t),1)]),_:2},1024))),128))])):(r(),n(`p`,B,`无错误`))])])])]),_:1})])}}});export{V as default}; \ No newline at end of file diff --git a/server/adminui/_nuxt/Bq3ByqkD.js b/server/adminui/_nuxt/Bq3ByqkD.js new file mode 100644 index 0000000..bb2d31f --- /dev/null +++ b/server/adminui/_nuxt/Bq3ByqkD.js @@ -0,0 +1 @@ +import{A as e,C as t,E as n,J as r,K as i,M as a,Rt as o,S as s,St as c,T as l,V as u,Vt as d,ct as f,ht as p,ot as m}from"./BT-50xGH.js";import{n as h}from"./CxZD5dLJ.js";import{n as g,o as _}from"./C7_xDZuo.js";import{t as v}from"./Cv1xSm-v.js";import{t as y}from"./YiEwAvN-.js";function b(e,t){let n=s(()=>e()||t());return{isInactive:n,inactiveClasses:s(()=>n.value?`opacity-60 cursor-not-allowed pointer-events-none bg-muted/30`:``)}}var x={class:`flex items-start gap-2 w-full h-full transition-all duration-300`},S=[`value`,`placeholder`,`rows`,`maxlength`,`disabled`,`readonly`],C={key:0,class:`flex justify-end px-3.5 pb-1.5 pt-0.5 text-[10px] font-bold text-muted-foreground/70 select-none`},w={key:0,class:`absolute inset-0 z-20 flex items-center justify-center bg-background/20 dark:bg-background/10 backdrop-blur-[1px] rounded-[inherit] overflow-hidden pointer-events-none`},T=a({__name:`Textarea`,props:{modelValue:{default:``},placeholder:{default:``},rows:{default:3},maxlength:{default:void 0},showCount:{type:Boolean,default:!1},autoSize:{type:[Boolean,Object],default:!1},size:{default:`md`},disabled:{type:Boolean,default:!1},readonly:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},clearable:{type:Boolean,default:!1},error:{type:Boolean,default:!1},resize:{default:`none`},animate:{type:Boolean,default:!0},delay:{default:0},entryClass:{default:``}},emits:[`update:modelValue`,`change`,`clear`,`focus`,`blur`,`keydown`],setup(a,{emit:T}){let E=a,D=T,{entryClasses:O}=v(()=>E.animate,()=>E.delay,()=>E.entryClass),{isInactive:k,inactiveClasses:A}=b(()=>E.disabled,()=>E.loading),{handleBlurValidate:j,handleChangeValidate:M}=y(),N=p(null),P=p(!1),F=null;m(()=>E.error,e=>{e&&(P.value=!0,F&&clearTimeout(F),F=setTimeout(()=>{P.value=!1},350))});let I=e=>{let t=e.target.value;E.maxlength!==void 0&&t.length>E.maxlength||(D(`update:modelValue`,t),D(`change`,t),M())},L=e=>D(`focus`,e),R=e=>{D(`blur`,e),j()},z=e=>D(`keydown`,e),B=()=>{D(`update:modelValue`,``),D(`change`,``),D(`clear`),N.value?.focus()},V=s(()=>({sm:{minH:`min-h-[5rem]`,text:`text-xs`,pad:`px-2.5 py-2`},md:{minH:`min-h-[6.5rem]`,text:`text-sm`,pad:`px-3.5 py-2.5`},lg:{minH:`min-h-[8rem]`,text:`text-base`,pad:`px-4 py-3`}})[E.size]),H=async()=>{let e=N.value;if(!e||!E.autoSize)return;await u(),e.style.height=`auto`;let t=typeof E.autoSize==`object`?E.autoSize:{},n=Number.parseFloat(getComputedStyle(e).lineHeight)||20,r=t.minRows??E.rows,i=t.maxRows,a=r*n+2,o=i?i*n+2:1/0,s=e.scrollHeight;so&&(s=o),e.style.height=`${s}px`};m(()=>E.modelValue,()=>{E.autoSize&&H()}),m(()=>E.autoSize,()=>{E.autoSize&&H()}),i(()=>{E.autoSize&&H(),E.resize===`none`&&N.value?.style.setProperty(`resize`,`none`)});let U=s(()=>String(E.modelValue??``)),W=s(()=>E.maxlength===void 0?`${U.value.length}`:`${U.value.length} / ${E.maxlength}`),G=s(()=>g(`relative flex flex-col w-full border rounded-base transition-all duration-200 overflow-hidden bg-background`,V.value.minH,E.error?`border-destructive text-destructive focus-within:ring-2 focus-within:ring-destructive/20`:`border-border hover:border-border/80 focus-within:border-primary focus-within:ring-2 focus-within:ring-primary/15`,P.value?`animate-shake`:``,A.value,`transition-all duration-200`)),K=s(()=>g(`w-full h-full bg-transparent border-none outline-none text-foreground placeholder:text-muted-foreground/60 font-medium align-top`,V.value.text,V.value.pad,{"resize-none":E.resize===`none`,"resize-y":E.resize===`vertical`,"resize-x":E.resize===`horizontal`,resize:E.resize===`both`},E.loading?`opacity-35 blur-[1.5px] scale-[0.99] select-none`:`opacity-100 blur-none scale-100`,`transition-all duration-300 ease-smooth`)),q=s(()=>g({"w-3.5 h-3.5":E.size===`sm`,"w-4 h-4":E.size===`md`,"w-4.5 h-4.5":E.size===`lg`}));return(i,a)=>(r(),n(`div`,{class:o([c(O),`w-full`])},[t(`div`,{class:o(G.value)},[t(`div`,x,[t(`textarea`,{ref_key:`textareaRef`,ref:N,value:U.value,placeholder:E.placeholder,rows:E.rows,maxlength:E.maxlength,disabled:E.disabled||E.loading,readonly:E.readonly,class:o([K.value,`grow`]),onInput:I,onFocus:L,onBlur:R,onKeydown:z},null,42,S),e(h,{name:`icon-pop`},{default:f(()=>[E.clearable&&U.value!==``&&!E.disabled&&!E.loading?(r(),n(`button`,{key:0,type:`button`,onClick:B,class:`text-muted-foreground hover:text-foreground transition-colors shrink-0 p-1 mt-1 active:scale-90`,"aria-label":`清空`},[e(c(_),{class:o(q.value)},null,8,[`class`])])):l(``,!0)]),_:1})]),E.showCount?(r(),n(`div`,C,d(W.value),1)):l(``,!0),e(h,{name:`fade`},{default:f(()=>[E.loading?(r(),n(`div`,w,[...a[0]||=[t(`div`,{class:`absolute inset-0 overflow-hidden rounded-[inherit]`},[t(`div`,{class:`w-[200%] h-full bg-gradient-to-r from-transparent via-foreground/[0.08] to-transparent animate-kinetic-shimmer rounded-[inherit]`})],-1)]])):l(``,!0)]),_:1})],2)],2))}});export{T as t}; \ No newline at end of file diff --git a/server/adminui/_nuxt/C1UVkkyo.js b/server/adminui/_nuxt/C1UVkkyo.js new file mode 100644 index 0000000..a888060 --- /dev/null +++ b/server/adminui/_nuxt/C1UVkkyo.js @@ -0,0 +1 @@ +import{$ as e,A as t,Bt as n,C as r,E as i,J as a,K as o,M as s,Rt as c,S as l,St as u,T as d,U as f,Vt as p,X as m,Z as h,_ as g,ct as _,ht as v,ot as y,w as b}from"./BT-50xGH.js";import{n as x}from"./CxZD5dLJ.js";import"./Dy1Pnbdd.js";import{l as S,n as C}from"./C7_xDZuo.js";import{r as w,t as T}from"./CLabUxWX.js";import{n as E,t as D}from"./zZGEHylc.js";var O={class:`min-w-0 flex flex-col gap-0.5`},k={key:0,class:`absolute inset-0 z-20 flex items-center justify-center bg-background/20 dark:bg-background/10 backdrop-blur-[1px] overflow-hidden pointer-events-none rounded-[inherit]`},A=s({__name:`Statistic`,props:{title:{default:``},value:{default:0},precision:{default:0},groupSeparator:{type:Boolean,default:!0},prefix:{default:``},suffix:{default:``},prefixIcon:{default:null},from:{default:0},duration:{default:600},direction:{default:`horizontal`},size:{default:`md`},loading:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},animate:{type:Boolean,default:!0},delay:{default:0},entryClass:{default:``}},setup(n){let s=n,m=v(!1),h=v(Number(s.from??0)),g=null;y(()=>s.value,e=>{let t=Number(e)||0,n=h.value,r=s.duration,i=performance.now();g&&cancelAnimationFrame(g);let a=e=>{let o=Math.min(1,(e-i)/r),s=1-(1-o)**3;h.value=n+(t-n)*s,o<1?g=requestAnimationFrame(a):h.value=t};g=requestAnimationFrame(a)},{immediate:!0}),f(()=>{g&&cancelAnimationFrame(g)});let S=l(()=>{let[e,t]=h.value.toFixed(s.precision).split(`.`),n=e??``,r=n;return s.groupSeparator&&(r=n.replace(/\B(?=(\d{3})+(?!\d))/g,`,`)),t===void 0?r:`${r}.${t}`});o(()=>{s.animate&&setTimeout(()=>{m.value=!0},s.delay)});let w=l(()=>{switch(s.size){case`sm`:return`text-[11px]`;case`lg`:return`text-sm`;default:return`text-xs`}}),T=l(()=>{switch(s.size){case`sm`:return`text-lg`;case`lg`:return`text-3xl`;default:return`text-2xl`}}),E=l(()=>{switch(s.size){case`sm`:return`w-4 h-4`;case`lg`:return`w-7 h-7`;default:return`w-5 h-5`}}),D=l(()=>s.animate?s.entryClass?m.value?s.entryClass:`opacity-0`:C(`transform transition-all duration-700 ease-swift`,m.value?`opacity-100 translate-y-0 scale-100 blur-none`:`opacity-0 translate-y-1.5 scale-98 blur-md pointer-events-none`):``);return(n,o)=>(a(),i(`div`,{class:c(u(C)(`relative w-fit select-none transition-all duration-300 rounded-base`,s.direction===`horizontal`?`flex items-center gap-3`:`flex flex-col items-start gap-1`,s.disabled?`opacity-50 pointer-events-none grayscale`:``,D.value))},[s.prefixIcon?(a(),i(`div`,{key:0,class:c([`shrink-0 flex items-center justify-center text-primary`,E.value])},[(a(),b(e(s.prefixIcon),{class:c(E.value)},null,8,[`class`]))],2)):d(``,!0),r(`div`,O,[r(`span`,{class:c([`text-muted-foreground font-bold`,w.value])},p(s.title),3),r(`div`,{class:c([`flex items-baseline gap-1 font-mono font-extrabold text-foreground`,s.loading?`opacity-35 blur-[1.5px] scale-[0.99] pointer-events-none`:``])},[s.prefix?(a(),i(`span`,{key:0,class:c([`text-muted-foreground font-bold`,w.value])},p(s.prefix),3)):d(``,!0),r(`span`,{class:c([`tabular-nums`,T.value])},p(S.value),3),s.suffix?(a(),i(`span`,{key:1,class:c([`text-muted-foreground font-bold`,w.value])},p(s.suffix),3)):d(``,!0)],2)]),t(x,{name:`fade`},{default:_(()=>[s.loading?(a(),i(`div`,k,[...o[0]||=[r(`div`,{class:`absolute inset-0 overflow-hidden rounded-[inherit]`},[r(`div`,{class:`w-[200%] h-full bg-gradient-to-r from-transparent via-foreground/[0.08] to-transparent animate-kinetic-shimmer rounded-[inherit]`})],-1)]])):d(``,!0)]),_:1})],2))}}),j={key:0},M={class:`flex-1 min-w-0 flex flex-col gap-2`},N=`absolute inset-0 overflow-hidden pointer-events-none rounded-[inherit]`,P=`w-[200%] h-full bg-gradient-to-r from-transparent via-foreground/[0.08] to-transparent animate-kinetic-shimmer`,F=s({__name:`Skeleton`,props:{loading:{type:Boolean,default:void 0},rows:{default:3},title:{type:Boolean,default:!0},avatar:{type:Boolean,default:!1},size:{default:`md`},width:{default:`100%`},height:{default:``},round:{type:Boolean,default:!1},animated:{type:Boolean,default:!0},animate:{type:Boolean,default:!0},delay:{default:0},entryClass:{default:``}},setup(e){let t=e,s=v(!1);o(()=>{t.animate&&setTimeout(()=>{s.value=!0},t.delay)});let f=l(()=>t.loading!==!1),p=e=>typeof e==`number`?`${e}px`:e,_=l(()=>C(`relative overflow-hidden rounded-base bg-muted/70 dark:bg-muted/50`,t.round?`rounded-full`:``)),y=l(()=>C(_.value,`rounded-full shrink-0`,t.size===`lg`?`w-14 h-14`:t.size===`sm`?`w-8 h-8`:`w-10 h-10`)),b=l(()=>C(_.value,t.size===`lg`?`h-5 w-2/3`:t.size===`sm`?`h-3 w-1/2`:`h-4 w-1/2`)),x=l(()=>C(_.value,t.size===`lg`?`h-4`:t.size===`sm`?`h-2.5`:`h-3`,`w-full`)),S=l(()=>C(`w-full flex`,t.size===`lg`?`gap-4`:t.size===`sm`?`gap-2`:`gap-3`)),w=l(()=>({width:p(t.width)})),T=l(()=>t.height?{height:p(t.height)}:{}),E=l(()=>t.animate?t.entryClass?s.value?t.entryClass:`opacity-0`:C(`transform transition-all duration-700 ease-swift`,s.value?`opacity-100 translate-y-0 scale-100 blur-none`:`opacity-0 translate-y-1.5 scale-98 blur-md pointer-events-none`):``);return(e,o)=>(a(),i(`div`,{class:c(u(C)(`w-full`,E.value)),style:n(w.value)},[f.value?(a(),i(`div`,{key:1,class:c(S.value),style:n(T.value),"aria-hidden":`true`},[t.avatar?(a(),i(`div`,{key:0,class:c(y.value)},[t.animated?(a(),i(`div`,{key:0,class:c(N)},[r(`div`,{class:c(P)})])):d(``,!0)],2)):d(``,!0),r(`div`,M,[t.title?(a(),i(`div`,{key:0,class:c(b.value)},[t.animated?(a(),i(`div`,{key:0,class:c(N)},[r(`div`,{class:c(P)})])):d(``,!0)],2)):d(``,!0),(a(!0),i(g,null,m(t.rows,e=>(a(),i(`div`,{key:e,class:c(x.value),style:n(e===t.rows?{width:`40%`}:{})},[t.animated?(a(),i(`div`,{key:0,class:c(N)},[r(`div`,{class:c(P)})])):d(``,!0)],6))),128))])],6)):(a(),i(`div`,j,[h(e.$slots,`default`)]))],6))}}),I=globalThis.setInterval,L={class:`space-y-4`},R={key:0,class:`grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-4`},z={key:1,class:`grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5`},B=s({__name:`index`,setup(e){let{request:n,setToken:r}=S(),{handleError:s}=T(),c=v(null),d=v(!0);async function p(){try{c.value=await n(`/overview`)}catch(e){s(e,r)}finally{d.value=!1}}o(()=>{p();let e=I(p,4e3);f(()=>clearInterval(e))});let h=l(()=>{let e=c.value;return e?[{title:`请求数`,value:E(e.requests),suffix:``},{title:`成功率`,value:(e.success_rate||0).toFixed(1),suffix:`%`},{title:`平均延迟`,value:e.avg_latency_ms||0,suffix:`ms`},{title:`in_token`,value:E(e.in_tokens)},{title:`out_token`,value:E(e.out_tokens)},{title:`费用(元)`,value:D(e.cost)},{title:`今日费用`,value:D(e.cost_today)},{title:`客户端错误`,value:E(e.client_errors)},{title:`上游错误`,value:E(e.upstream_errors)},{title:`故障转移`,value:E(e.failovers)},{title:`多模态部件`,value:E(e.multimodal)},{title:`上游数`,value:E(e.upstreams)},{title:`客户端 Token`,value:E(e.client_tokens)},{title:`设备数`,value:E(e.devices)},{title:`模型数`,value:E(e.models)},{title:`丢弃日志`,value:E(e.dropped_logs)}]:[]});return(e,n)=>(a(),i(`div`,L,[u(d)&&!u(c)?(a(),i(`div`,R,[(a(),i(g,null,m(8,e=>t(u(F),{key:e,class:`h-[88px] rounded-xl`})),64))])):(a(),i(`div`,z,[(a(!0),i(g,null,m(u(h),(e,n)=>(a(),b(u(w),{key:e.title,padding:`md`,"hover-shadow":``,class:`transition-transform duration-200 hover:-translate-y-0.5`},{default:_(()=>[t(u(A),{title:e.title,value:e.value,suffix:e.suffix,size:`md`,animate:``,delay:n*25},null,8,[`title`,`value`,`suffix`,`delay`])]),_:2},1024))),128))]))]))}});export{B as default}; \ No newline at end of file diff --git a/server/adminui/_nuxt/C2auVMGT.js b/server/adminui/_nuxt/C2auVMGT.js new file mode 100644 index 0000000..7ef1c27 --- /dev/null +++ b/server/adminui/_nuxt/C2auVMGT.js @@ -0,0 +1 @@ +import{c as e}from"./C7_xDZuo.js";var t=e(`download`,[[`path`,{d:`M12 15V3`,key:`m9g1x1`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`path`,{d:`m7 10 5 5 5-5`,key:`brsn70`}]]);export{t}; \ No newline at end of file diff --git a/server/adminui/_nuxt/C5KwrKiw.js b/server/adminui/_nuxt/C5KwrKiw.js new file mode 100644 index 0000000..097ac93 --- /dev/null +++ b/server/adminui/_nuxt/C5KwrKiw.js @@ -0,0 +1 @@ +import{A as e,C as t,J as n,K as r,M as i,St as a,Vt as o,ct as s,ft as c,ht as l,k as u,w as d}from"./BT-50xGH.js";import{l as f}from"./C7_xDZuo.js";import{t as p}from"./ChxjuxiH.js";import{t as m}from"./BZ_oP5sc.js";import{t as h}from"./Biiz67gC.js";import{t as g}from"./DfpAeMWm.js";import{i as _,r as v,t as y}from"./CLabUxWX.js";import{t as b}from"./CaMPYMl_.js";import{i as x,n as S,r as C}from"./zZGEHylc.js";var w={class:`flex flex-wrap items-center gap-3 px-5 py-4`},T={class:`ml-auto flex flex-wrap items-center gap-2`},E={class:`w-64`},D={class:`w-32`},O={class:`px-5 pb-5`},k={class:`text-xs text-muted-foreground`},A={class:`text-xs text-muted-foreground`},j=i({__name:`logs`,setup(i){let{request:j,setToken:M}=f(),{handleError:N}=y(),P=l([]),F=l(!0),I=l(``),L=l(``),R=[{label:`全部状态`,value:``},{label:`200`,value:`200`},{label:`400`,value:`400`},{label:`401`,value:`401`},{label:`429`,value:`429`},{label:`500`,value:`500`},{label:`502`,value:`502`},{label:`504`,value:`504`}],z=[{key:`time`,title:`时间`,width:90},{key:`token`,title:`Token`,width:110},{key:`model`,title:`模型`},{key:`upstream`,title:`上游`,width:120},{key:`status`,title:`状态`,width:80},{key:`stream`,title:`流`,width:50},{key:`latency_ms`,title:`延迟`,width:80},{key:`io`,title:`in/out`,width:110},{key:`error`,title:`错误`}],B;async function V(){try{let e=`/logs?n=200`;I.value.trim()&&(e+=`&q=`+encodeURIComponent(I.value.trim())),L.value&&(e+=`&status=`+encodeURIComponent(L.value)),P.value=await j(e)}catch(e){N(e,M)}finally{F.value=!1}}function H(){clearTimeout(B),B=setTimeout(V,300)}return r(V),(r,i)=>(n(),d(a(v),{padding:`none`},{header:s(()=>[t(`div`,w,[i[3]||=t(`h2`,{class:`text-sm font-semibold`},`最近日志`,-1),t(`div`,T,[t(`div`,E,[e(a(m),{modelValue:a(I),"onUpdate:modelValue":i[0]||=e=>c(I)?I.value=e:null,size:`sm`,placeholder:`搜索 model / 上游 / 错误 / token…`,onInput:H},null,8,[`modelValue`])]),t(`div`,D,[e(a(g),{modelValue:a(L),"onUpdate:modelValue":i[1]||=e=>c(L)?L.value=e:null,options:R,size:`sm`,onChange:V},null,8,[`modelValue`])]),e(a(_),{variant:`outline`,size:`sm`,icon:a(h),onClick:V},{default:s(()=>[...i[2]||=[u(` 刷新 `,-1)]]),_:1},8,[`icon`])])])]),default:s(()=>[t(`div`,O,[e(a(p),{columns:z,data:a(P),size:`sm`,hover:``,loading:a(F),"empty-text":`暂无日志。`},{"cell-time":s(({row:e})=>[u(o(a(C)(e.time)),1)]),"cell-token":s(({row:e})=>[t(`span`,k,o(e.token),1)]),"cell-upstream":s(({row:e})=>[u(o(e.upstream||`-`),1)]),"cell-status":s(({row:t})=>[e(a(b),{size:`sm`,variant:a(x)(t.status)===`success`?`primary`:`outline`},{default:s(()=>[u(o(t.status),1)]),_:2},1032,[`variant`])]),"cell-stream":s(({row:e})=>[u(o(e.stream?`Y`:``),1)]),"cell-latency_ms":s(({row:e})=>[u(o(e.latency_ms)+`ms`,1)]),"cell-io":s(({row:e})=>[u(o(a(S)(e.in_tokens))+`/`+o(a(S)(e.out_tokens)),1)]),"cell-error":s(({row:e})=>[t(`span`,A,o(e.error),1)]),_:1},8,[`data`,`loading`])])]),_:1}))}});export{j as default}; \ No newline at end of file diff --git a/server/adminui/_nuxt/C7_xDZuo.js b/server/adminui/_nuxt/C7_xDZuo.js new file mode 100644 index 0000000..61ed31a --- /dev/null +++ b/server/adminui/_nuxt/C7_xDZuo.js @@ -0,0 +1 @@ +import{$ as e,A as t,C as n,E as r,Gt as i,I as a,J as o,Kt as s,M as c,Rt as l,St as u,T as d,Vt as ee,Wt as f,X as te,_ as p,bt as m,ct as h,ft as ne,i as g,mt as _,w as re}from"./BT-50xGH.js";import{o as v,r as y}from"./CxZD5dLJ.js";var b=s({docsBase:f,reporters:i}),x=`$s`;function ie(...e){let t=typeof e[e.length-1]==`string`?e.pop():void 0;typeof e[0]!=`string`&&e.unshift(t);let[n,r]=e;if(!n||typeof n!=`string`)throw b.NUXT_E7009({key:n});if(r!==void 0&&typeof r!=`function`)throw b.NUXT_E7007({type:typeof r});let i=x+n,a=g(),o=m(a.payload.state,i);if(r&&(a._state[i]??={_default:r}),o.value===void 0&&r){let e=r();if(ne(e))return a.payload.state[i]=e,e;o.value=e}return o}var S=`liapi_admin_token`,C=()=>ie(`admin-token`,()=>``);function ae(){let e=C();function t(){e.value||=localStorage.getItem(S)||``}function n(t){e.value=t.trim(),e.value?localStorage.setItem(S,e.value):localStorage.removeItem(S)}function r(){n(``)}async function i(n,r={}){t();let i=new Headers(r.headers||{});return!i.has(`Content-Type`)&&r.body&&i.set(`Content-Type`,`application/json`),e.value&&i.set(`Authorization`,`Bearer ${e.value}`),fetch(`/admin/api`+n,{...r,headers:i})}async function a(e,t={}){let n;try{n=await i(e,t)}catch(e){throw Error(`网络错误: `+e.message)}let r=await n.text(),a={};if(r)try{a=JSON.parse(r)}catch{a={raw:r}}if(n.status===401){let e=Error(`unauthorized`);throw e.unauthorized=!0,e}if(!n.ok){let e=a.error?.message||r||`HTTP `+n.status;throw Error(e)}return a}async function o(e,t){let n=await i(e);if(!n.ok)throw Error(`HTTP `+n.status);let r=await n.blob(),a=URL.createObjectURL(r),o=document.createElement(`a`);o.href=a,o.download=t,o.click(),URL.revokeObjectURL(a)}return{token:e,loadToken:t,setToken:n,clearToken:r,request:a,download:o}}var oe=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},w=e=>e===``,T=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),E=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),D=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase()),se=e=>{let t=D(e);return t.charAt(0).toUpperCase()+t.slice(1)},O={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":2,"stroke-linecap":`round`,"stroke-linejoin":`round`},ce=({name:e,iconNode:t,absoluteStrokeWidth:n,"absolute-stroke-width":r,strokeWidth:i,"stroke-width":o,size:s=O.width,color:c=O.stroke,...l},{slots:u})=>a(`svg`,{...O,...l,width:s,height:s,stroke:c,"stroke-width":w(n)||w(r)||n===!0||r===!0?Number(i||o||O[`stroke-width`])*24/Number(s):i||o||O[`stroke-width`],class:T(`lucide`,l.class,...e?[`lucide-${E(se(e))}-icon`,`lucide-${E(e)}`]:[`lucide-icon`]),...!u.default&&!oe(l)&&{"aria-hidden":`true`}},[...t.map(e=>a(...e)),...u.default?[u.default()]:[]]),k=(e,t)=>(n,{slots:r,attrs:i})=>a(ce,{...i,...n,iconNode:t,name:e},r),le=k(`circle-check`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),A=k(`circle-x`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m15 9-6 6`,key:`1uzhvr`}],[`path`,{d:`m9 9 6 6`,key:`z0biqf`}]]),j=k(`info`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 16v-4`,key:`1dtifu`}],[`path`,{d:`M12 8h.01`,key:`e9boi3`}]]),M=k(`triangle-alert`,[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,key:`wmoenq`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),N=k(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]);function P(e){var t,n,r=``;if(typeof e==`string`||typeof e==`number`)r+=e;else if(typeof e==`object`){if(Array.isArray(e)){var i=e.length;for(t=0;t{let n=Array(e.length+t.length);for(let t=0;t({classGroupId:e,validator:t}),L=(e=new Map,t=null,n)=>({nextPart:e,validators:t,classGroupId:n}),R=`-`,z=[],de=`arbitrary..`,fe=e=>{let t=he(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:e=>{if(e.startsWith(`[`)&&e.endsWith(`]`))return me(e);let n=e.split(R);return pe(n,+(n[0]===``&&n.length>1),t)},getConflictingClassGroupIds:(e,t)=>{if(t){let t=r[e],i=n[e];return t?i?ue(i,t):t:i||z}return n[e]||z}}},pe=(e,t,n)=>{if(e.length-t===0)return n.classGroupId;let r=e[t],i=n.nextPart.get(r);if(i){let n=pe(e,t+1,i);if(n)return n}let a=n.validators;if(a===null)return;let o=t===0?e.join(R):e.slice(t).join(R),s=a.length;for(let e=0;ee.slice(1,-1).indexOf(`:`)===-1?void 0:(()=>{let t=e.slice(1,-1),n=t.indexOf(`:`),r=t.slice(0,n);return r?de+r:void 0})(),he=e=>{let{theme:t,classGroups:n}=e;return ge(n,t)},ge=(e,t)=>{let n=L();for(let r in e){let i=e[r];_e(i,n,r,t)}return n},_e=(e,t,n,r)=>{let i=e.length;for(let a=0;a{if(typeof e==`string`){ye(e,t,n);return}if(typeof e==`function`){be(e,t,n,r);return}xe(e,t,n,r)},ye=(e,t,n)=>{let r=e===``?t:Se(t,e);r.classGroupId=n},be=(e,t,n,r)=>{if(Ce(e)){_e(e(r),t,n,r);return}t.validators===null&&(t.validators=[]),t.validators.push(I(n,e))},xe=(e,t,n,r)=>{let i=Object.entries(e),a=i.length;for(let e=0;e{let n=e,r=t.split(R),i=r.length;for(let e=0;e`isThemeGetter`in e&&e.isThemeGetter===!0,we=e=>{if(e<1)return{get:()=>void 0,set:()=>{}};let t=0,n=Object.create(null),r=Object.create(null),i=(i,a)=>{n[i]=a,t++,t>e&&(t=0,r=n,n=Object.create(null))};return{get(e){let t=n[e];if(t!==void 0)return t;if((t=r[e])!==void 0)return i(e,t),t},set(e,t){e in n?n[e]=t:i(e,t)}}},Te=`!`,Ee=`:`,De=[],Oe=(e,t,n,r,i)=>({modifiers:e,hasImportantModifier:t,baseClassName:n,maybePostfixModifierPosition:r,isExternal:i}),ke=e=>{let{prefix:t,experimentalParseClassName:n}=e,r=e=>{let t=[],n=0,r=0,i=0,a,o=e.length;for(let s=0;si?a-i:void 0;return Oe(t,l,c,u)};if(t){let e=t+Ee,n=r;r=t=>t.startsWith(e)?n(t.slice(e.length)):Oe(De,!1,t,void 0,!0)}if(n){let e=r;r=t=>n({className:t,parseClassName:e})}return r},Ae=e=>{let t=new Map;return e.orderSensitiveModifiers.forEach((e,n)=>{t.set(e,1e6+n)}),e=>{let n=[],r=[];for(let i=0;i0&&(r.sort(),n.push(...r),r=[]),n.push(a)):r.push(a)}return r.length>0&&(r.sort(),n.push(...r)),n}},je=e=>({cache:we(e.cacheSize),parseClassName:ke(e),sortModifiers:Ae(e),postfixLookupClassGroupIds:Me(e),...fe(e)}),Me=e=>{let t=Object.create(null),n=e.postfixLookupClassGroups;if(n)for(let e=0;e{let{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:i,sortModifiers:a,postfixLookupClassGroupIds:o}=t,s=[],c=e.trim().split(Ne),l=``;for(let e=c.length-1;e>=0;--e){let t=c[e],{isExternal:u,modifiers:d,hasImportantModifier:ee,baseClassName:f,maybePostfixModifierPosition:te}=n(t);if(u){l=t+(l.length>0?` `+l:l);continue}let p=!!te,m;if(p){m=r(f.substring(0,te));let e=m&&o[m]?r(f):void 0;e&&e!==m&&(m=e,p=!1)}else m=r(f);if(!m){if(!p){l=t+(l.length>0?` `+l:l);continue}if(m=r(f),!m){l=t+(l.length>0?` `+l:l);continue}p=!1}let h=d.length===0?``:d.length===1?d[0]:a(d).join(`:`),ne=ee?h+Te:h,g=ne+m;if(s.indexOf(g)>-1)continue;s.push(g);let _=i(m,p);for(let e=0;e<_.length;++e){let t=_[e];s.push(ne+t)}l=t+(l.length>0?` `+l:l)}return l},Fe=(...e)=>{let t=0,n,r,i=``;for(;t{if(typeof e==`string`)return e;let t,n=``;for(let r=0;r{let n,r,i,a,o=o=>(n=je(t.reduce((e,t)=>t(e),e())),r=n.cache.get,i=n.cache.set,a=s,s(o)),s=e=>{let t=r(e);if(t)return t;let a=Pe(e,n);return i(e,a),a};return a=o,(...e)=>a(Fe(...e))},Re=[],B=e=>{let t=t=>t[e]||Re;return t.isThemeGetter=!0,t.themeKey=e,t},ze=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,Be=/^\((?:(\w[\w-]*):)?(.+)\)$/i,Ve=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,He=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,Ue=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,We=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix|color|light-dark)\(.+\)$/,Ge=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,Ke=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,V=e=>Ve.test(e),H=e=>!!e&&!Number.isNaN(Number(e)),U=e=>!!e&&Number.isInteger(Number(e)),qe=e=>e.endsWith(`%`)&&H(e.slice(0,-1)),W=e=>He.test(e),Je=()=>!0,Ye=e=>Ue.test(e)&&!We.test(e),Xe=()=>!1,Ze=e=>Ge.test(e),Qe=e=>Ke.test(e),$e=e=>!G(e)&&!q(e),et=e=>e.startsWith(`@container`)&&(e[10]===`/`&&e[11]!==void 0||e[11]===`s`&&e[16]!==void 0&&e.startsWith(`-size/`,10)||e[11]===`n`&&e[18]!==void 0&&e.startsWith(`-normal/`,10)),tt=e=>Y(e,gt,Xe),G=e=>ze.test(e),K=e=>Y(e,_t,Ye),nt=e=>Y(e,vt,H),rt=e=>Y(e,bt,Je),it=e=>Y(e,yt,Xe),at=e=>Y(e,mt,Xe),ot=e=>Y(e,ht,Qe),st=e=>Y(e,xt,Ze),q=e=>Be.test(e),J=e=>X(e,_t),ct=e=>X(e,yt),lt=e=>X(e,mt),ut=e=>X(e,gt),dt=e=>X(e,ht),ft=e=>X(e,xt,!0),pt=e=>X(e,bt,!0),Y=(e,t,n)=>{let r=ze.exec(e);return r?r[1]?t(r[1]):n(r[2]):!1},X=(e,t,n=!1)=>{let r=Be.exec(e);return r?r[1]?t(r[1]):n:!1},mt=e=>e===`position`||e===`percentage`,ht=e=>e===`image`||e===`url`,gt=e=>e===`length`||e===`size`||e===`bg-size`,_t=e=>e===`length`,vt=e=>e===`number`,yt=e=>e===`family-name`,bt=e=>e===`number`||e===`weight`,xt=e=>e===`shadow`,St=Le(()=>{let e=B(`color`),t=B(`font`),n=B(`text`),r=B(`font-weight`),i=B(`tracking`),a=B(`leading`),o=B(`breakpoint`),s=B(`container`),c=B(`spacing`),l=B(`radius`),u=B(`shadow`),d=B(`inset-shadow`),ee=B(`text-shadow`),f=B(`drop-shadow`),te=B(`blur`),p=B(`perspective`),m=B(`aspect`),h=B(`ease`),ne=B(`animate`),g=()=>[`auto`,`avoid`,`all`,`avoid-page`,`page`,`left`,`right`,`column`],_=()=>[`center`,`top`,`bottom`,`left`,`right`,`top-left`,`left-top`,`top-right`,`right-top`,`bottom-right`,`right-bottom`,`bottom-left`,`left-bottom`],re=()=>[..._(),q,G],v=()=>[`auto`,`hidden`,`clip`,`visible`,`scroll`],y=()=>[`auto`,`contain`,`none`],b=()=>[q,G,c],x=()=>[V,`full`,`auto`,...b()],ie=()=>[U,`none`,`subgrid`,q,G],S=()=>[`auto`,{span:[`full`,U,q,G]},U,q,G],C=()=>[U,`auto`,q,G],ae=()=>[`auto`,`min`,`max`,`fr`,q,G],oe=()=>[`start`,`end`,`center`,`between`,`around`,`evenly`,`stretch`,`baseline`,`center-safe`,`end-safe`],w=()=>[`start`,`end`,`center`,`stretch`,`center-safe`,`end-safe`],T=()=>[`auto`,...b()],E=()=>[V,`auto`,`full`,`dvw`,`dvh`,`lvw`,`lvh`,`svw`,`svh`,`min`,`max`,`fit`,...b()],D=()=>[s,V,`screen`,`full`,`dvw`,`lvw`,`svw`,`min`,`max`,`fit`,...b()],se=()=>[V,`screen`,`full`,`lh`,`dvh`,`lvh`,`svh`,`min`,`max`,`fit`,...b()],O=()=>[e,q,G],ce=()=>[..._(),lt,at,{position:[q,G]}],k=()=>[`no-repeat`,{repeat:[``,`x`,`y`,`space`,`round`]}],le=()=>[`auto`,`cover`,`contain`,ut,tt,{size:[q,G]}],A=()=>[qe,J,K],j=()=>[``,`none`,`full`,l,q,G],M=()=>[``,H,J,K],N=()=>[`solid`,`dashed`,`dotted`,`double`],P=()=>[`normal`,`multiply`,`screen`,`overlay`,`darken`,`lighten`,`color-dodge`,`color-burn`,`hard-light`,`soft-light`,`difference`,`exclusion`,`hue`,`saturation`,`color`,`luminosity`],F=()=>[H,qe,lt,at],ue=()=>[``,`none`,te,q,G],I=()=>[`none`,H,q,G],L=()=>[`none`,H,q,G],R=()=>[H,q,G],z=()=>[V,`full`,...b()];return{cacheSize:500,theme:{animate:[`spin`,`ping`,`pulse`,`bounce`],aspect:[`video`],blur:[W],breakpoint:[W],color:[Je],container:[W],"drop-shadow":[W],ease:[`in`,`out`,`in-out`],font:[$e],"font-weight":[`thin`,`extralight`,`light`,`normal`,`medium`,`semibold`,`bold`,`extrabold`,`black`],"inset-shadow":[W],leading:[`none`,`tight`,`snug`,`normal`,`relaxed`,`loose`],perspective:[`dramatic`,`near`,`normal`,`midrange`,`distant`,`none`],radius:[W],shadow:[W],spacing:[`px`,H],text:[W],"text-shadow":[W],tracking:[`tighter`,`tight`,`normal`,`wide`,`wider`,`widest`]},classGroups:{aspect:[{aspect:[`auto`,`square`,V,G,q,m]}],container:[`container`],"container-type":[{"@container":[``,`normal`,`size`,q,G]}],"container-named":[et],columns:[{columns:[H,`auto`,G,q,s]}],"break-after":[{"break-after":g()}],"break-before":[{"break-before":g()}],"break-inside":[{"break-inside":[`auto`,`avoid`,`avoid-page`,`avoid-column`]}],"box-decoration":[{"box-decoration":[`slice`,`clone`]}],box:[{box:[`border`,`content`]}],display:[`block`,`inline-block`,`inline`,`flex`,`inline-flex`,`table`,`inline-table`,`table-caption`,`table-cell`,`table-column`,`table-column-group`,`table-footer-group`,`table-header-group`,`table-row-group`,`table-row`,`flow-root`,`grid`,`inline-grid`,`contents`,`list-item`,`hidden`],sr:[`sr-only`,`not-sr-only`],float:[{float:[`right`,`left`,`none`,`start`,`end`]}],clear:[{clear:[`left`,`right`,`both`,`none`,`start`,`end`]}],isolation:[`isolate`,`isolation-auto`],"object-fit":[{object:[`contain`,`cover`,`fill`,`none`,`scale-down`]}],"object-position":[{object:re()}],overflow:[{overflow:v()}],"overflow-x":[{"overflow-x":v()}],"overflow-y":[{"overflow-y":v()}],overscroll:[{overscroll:y()}],"overscroll-x":[{"overscroll-x":y()}],"overscroll-y":[{"overscroll-y":y()}],position:[`static`,`fixed`,`absolute`,`relative`,`sticky`],inset:[{inset:x()}],"inset-x":[{"inset-x":x()}],"inset-y":[{"inset-y":x()}],start:[{"inset-s":x(),start:x()}],end:[{"inset-e":x(),end:x()}],"inset-bs":[{"inset-bs":x()}],"inset-be":[{"inset-be":x()}],top:[{top:x()}],right:[{right:x()}],bottom:[{bottom:x()}],left:[{left:x()}],visibility:[`visible`,`invisible`,`collapse`],z:[{z:[U,`auto`,q,G]}],basis:[{basis:[V,`full`,`auto`,s,...b()]}],"flex-direction":[{flex:[`row`,`row-reverse`,`col`,`col-reverse`]}],"flex-wrap":[{flex:[`nowrap`,`wrap`,`wrap-reverse`]}],flex:[{flex:[H,V,`auto`,`initial`,`none`,G]}],grow:[{grow:[``,H,q,G]}],shrink:[{shrink:[``,H,q,G]}],order:[{order:[U,`first`,`last`,`none`,q,G]}],"grid-cols":[{"grid-cols":ie()}],"col-start-end":[{col:S()}],"col-start":[{"col-start":C()}],"col-end":[{"col-end":C()}],"grid-rows":[{"grid-rows":ie()}],"row-start-end":[{row:S()}],"row-start":[{"row-start":C()}],"row-end":[{"row-end":C()}],"grid-flow":[{"grid-flow":[`row`,`col`,`dense`,`row-dense`,`col-dense`]}],"auto-cols":[{"auto-cols":ae()}],"auto-rows":[{"auto-rows":ae()}],gap:[{gap:b()}],"gap-x":[{"gap-x":b()}],"gap-y":[{"gap-y":b()}],"justify-content":[{justify:[...oe(),`normal`]}],"justify-items":[{"justify-items":[...w(),`normal`]}],"justify-self":[{"justify-self":[`auto`,...w()]}],"align-content":[{content:[`normal`,...oe()]}],"align-items":[{items:[...w(),{baseline:[``,`last`]}]}],"align-self":[{self:[`auto`,...w(),{baseline:[``,`last`]}]}],"place-content":[{"place-content":oe()}],"place-items":[{"place-items":[...w(),`baseline`]}],"place-self":[{"place-self":[`auto`,...w()]}],p:[{p:b()}],px:[{px:b()}],py:[{py:b()}],ps:[{ps:b()}],pe:[{pe:b()}],pbs:[{pbs:b()}],pbe:[{pbe:b()}],pt:[{pt:b()}],pr:[{pr:b()}],pb:[{pb:b()}],pl:[{pl:b()}],m:[{m:T()}],mx:[{mx:T()}],my:[{my:T()}],ms:[{ms:T()}],me:[{me:T()}],mbs:[{mbs:T()}],mbe:[{mbe:T()}],mt:[{mt:T()}],mr:[{mr:T()}],mb:[{mb:T()}],ml:[{ml:T()}],"space-x":[{"space-x":b()}],"space-x-reverse":[`space-x-reverse`],"space-y":[{"space-y":b()}],"space-y-reverse":[`space-y-reverse`],size:[{size:E()}],"inline-size":[{inline:[`auto`,...D()]}],"min-inline-size":[{"min-inline":[`auto`,...D()]}],"max-inline-size":[{"max-inline":[`none`,...D()]}],"block-size":[{block:[`auto`,...se()]}],"min-block-size":[{"min-block":[`auto`,...se()]}],"max-block-size":[{"max-block":[`none`,...se()]}],w:[{w:[s,`screen`,...E()]}],"min-w":[{"min-w":[s,`screen`,`none`,...E()]}],"max-w":[{"max-w":[s,`screen`,`none`,`prose`,{screen:[o]},...E()]}],h:[{h:[`screen`,`lh`,...E()]}],"min-h":[{"min-h":[`screen`,`lh`,`none`,...E()]}],"max-h":[{"max-h":[`screen`,`lh`,`none`,...E()]}],"font-size":[{text:[`base`,n,J,K]}],"font-smoothing":[`antialiased`,`subpixel-antialiased`],"font-style":[`italic`,`not-italic`],"font-weight":[{font:[r,pt,rt]}],"font-stretch":[{"font-stretch":[`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`normal`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`,qe,G]}],"font-family":[{font:[ct,it,t]}],"font-features":[{"font-features":[G]}],"fvn-normal":[`normal-nums`],"fvn-ordinal":[`ordinal`],"fvn-slashed-zero":[`slashed-zero`],"fvn-figure":[`lining-nums`,`oldstyle-nums`],"fvn-spacing":[`proportional-nums`,`tabular-nums`],"fvn-fraction":[`diagonal-fractions`,`stacked-fractions`],tracking:[{tracking:[i,q,G]}],"line-clamp":[{"line-clamp":[H,`none`,q,nt]}],leading:[{leading:[`none`,a,...b()]}],"list-image":[{"list-image":[`none`,q,G]}],"list-style-position":[{list:[`inside`,`outside`]}],"list-style-type":[{list:[`disc`,`decimal`,`none`,q,G]}],"text-alignment":[{text:[`left`,`center`,`right`,`justify`,`start`,`end`]}],"placeholder-color":[{placeholder:O()}],"text-color":[{text:O()}],"text-decoration":[`underline`,`overline`,`line-through`,`no-underline`],"text-decoration-style":[{decoration:[...N(),`wavy`]}],"text-decoration-thickness":[{decoration:[H,`from-font`,`auto`,q,K]}],"text-decoration-color":[{decoration:O()}],"underline-offset":[{"underline-offset":[H,`auto`,q,G]}],"text-transform":[`uppercase`,`lowercase`,`capitalize`,`normal-case`],"text-overflow":[`truncate`,`text-ellipsis`,`text-clip`],"text-wrap":[{text:[`wrap`,`nowrap`,`balance`,`pretty`]}],indent:[{indent:b()}],"tab-size":[{tab:[U,q,G]}],"vertical-align":[{align:[`baseline`,`top`,`middle`,`bottom`,`text-top`,`text-bottom`,`sub`,`super`,q,G]}],whitespace:[{whitespace:[`normal`,`nowrap`,`pre`,`pre-line`,`pre-wrap`,`break-spaces`]}],break:[{break:[`normal`,`words`,`all`,`keep`]}],wrap:[{wrap:[`break-word`,`anywhere`,`normal`]}],hyphens:[{hyphens:[`none`,`manual`,`auto`]}],content:[{content:[`none`,q,G]}],"bg-attachment":[{bg:[`fixed`,`local`,`scroll`]}],"bg-clip":[{"bg-clip":[`border`,`padding`,`content`,`text`]}],"bg-origin":[{"bg-origin":[`border`,`padding`,`content`]}],"bg-position":[{bg:ce()}],"bg-repeat":[{bg:k()}],"bg-size":[{bg:le()}],"bg-image":[{bg:[`none`,{linear:[{to:[`t`,`tr`,`r`,`br`,`b`,`bl`,`l`,`tl`]},U,q,G],radial:[``,q,G],conic:[``,U,q,G]},dt,ot]}],"bg-color":[{bg:O()}],"gradient-from-pos":[{from:A()}],"gradient-via-pos":[{via:A()}],"gradient-to-pos":[{to:A()}],"gradient-from":[{from:O()}],"gradient-via":[{via:O()}],"gradient-to":[{to:O()}],rounded:[{rounded:j()}],"rounded-s":[{"rounded-s":j()}],"rounded-e":[{"rounded-e":j()}],"rounded-t":[{"rounded-t":j()}],"rounded-r":[{"rounded-r":j()}],"rounded-b":[{"rounded-b":j()}],"rounded-l":[{"rounded-l":j()}],"rounded-ss":[{"rounded-ss":j()}],"rounded-se":[{"rounded-se":j()}],"rounded-ee":[{"rounded-ee":j()}],"rounded-es":[{"rounded-es":j()}],"rounded-tl":[{"rounded-tl":j()}],"rounded-tr":[{"rounded-tr":j()}],"rounded-br":[{"rounded-br":j()}],"rounded-bl":[{"rounded-bl":j()}],"border-w":[{border:M()}],"border-w-x":[{"border-x":M()}],"border-w-y":[{"border-y":M()}],"border-w-s":[{"border-s":M()}],"border-w-e":[{"border-e":M()}],"border-w-bs":[{"border-bs":M()}],"border-w-be":[{"border-be":M()}],"border-w-t":[{"border-t":M()}],"border-w-r":[{"border-r":M()}],"border-w-b":[{"border-b":M()}],"border-w-l":[{"border-l":M()}],"divide-x":[{"divide-x":M()}],"divide-x-reverse":[`divide-x-reverse`],"divide-y":[{"divide-y":M()}],"divide-y-reverse":[`divide-y-reverse`],"border-style":[{border:[...N(),`hidden`,`none`]}],"divide-style":[{divide:[...N(),`hidden`,`none`]}],"border-color":[{border:O()}],"border-color-x":[{"border-x":O()}],"border-color-y":[{"border-y":O()}],"border-color-s":[{"border-s":O()}],"border-color-e":[{"border-e":O()}],"border-color-bs":[{"border-bs":O()}],"border-color-be":[{"border-be":O()}],"border-color-t":[{"border-t":O()}],"border-color-r":[{"border-r":O()}],"border-color-b":[{"border-b":O()}],"border-color-l":[{"border-l":O()}],"divide-color":[{divide:O()}],"outline-style":[{outline:[...N(),`none`,`hidden`]}],"outline-offset":[{"outline-offset":[H,q,G]}],"outline-w":[{outline:[``,H,J,K]}],"outline-color":[{outline:O()}],shadow:[{shadow:[``,`inner`,`none`,u,ft,st]}],"shadow-color":[{shadow:O()}],"inset-shadow":[{"inset-shadow":[`none`,d,ft,st]}],"inset-shadow-color":[{"inset-shadow":O()}],"ring-w":[{ring:M()}],"ring-w-inset":[`ring-inset`],"ring-color":[{ring:O()}],"ring-offset-w":[{"ring-offset":[H,K]}],"ring-offset-color":[{"ring-offset":O()}],"inset-ring-w":[{"inset-ring":M()}],"inset-ring-color":[{"inset-ring":O()}],"text-shadow":[{"text-shadow":[`none`,ee,ft,st]}],"text-shadow-color":[{"text-shadow":O()}],opacity:[{opacity:[H,q,G]}],"mix-blend":[{"mix-blend":[...P(),`plus-darker`,`plus-lighter`]}],"bg-blend":[{"bg-blend":P()}],"mask-clip":[{"mask-clip":[`border`,`padding`,`content`,`fill`,`stroke`,`view`]},`mask-no-clip`],"mask-composite":[{mask:[`add`,`subtract`,`intersect`,`exclude`]}],"mask-image-linear-pos":[{"mask-linear":[H]}],"mask-image-linear-from-pos":[{"mask-linear-from":F()}],"mask-image-linear-to-pos":[{"mask-linear-to":F()}],"mask-image-linear-from-color":[{"mask-linear-from":O()}],"mask-image-linear-to-color":[{"mask-linear-to":O()}],"mask-image-t-from-pos":[{"mask-t-from":F()}],"mask-image-t-to-pos":[{"mask-t-to":F()}],"mask-image-t-from-color":[{"mask-t-from":O()}],"mask-image-t-to-color":[{"mask-t-to":O()}],"mask-image-r-from-pos":[{"mask-r-from":F()}],"mask-image-r-to-pos":[{"mask-r-to":F()}],"mask-image-r-from-color":[{"mask-r-from":O()}],"mask-image-r-to-color":[{"mask-r-to":O()}],"mask-image-b-from-pos":[{"mask-b-from":F()}],"mask-image-b-to-pos":[{"mask-b-to":F()}],"mask-image-b-from-color":[{"mask-b-from":O()}],"mask-image-b-to-color":[{"mask-b-to":O()}],"mask-image-l-from-pos":[{"mask-l-from":F()}],"mask-image-l-to-pos":[{"mask-l-to":F()}],"mask-image-l-from-color":[{"mask-l-from":O()}],"mask-image-l-to-color":[{"mask-l-to":O()}],"mask-image-x-from-pos":[{"mask-x-from":F()}],"mask-image-x-to-pos":[{"mask-x-to":F()}],"mask-image-x-from-color":[{"mask-x-from":O()}],"mask-image-x-to-color":[{"mask-x-to":O()}],"mask-image-y-from-pos":[{"mask-y-from":F()}],"mask-image-y-to-pos":[{"mask-y-to":F()}],"mask-image-y-from-color":[{"mask-y-from":O()}],"mask-image-y-to-color":[{"mask-y-to":O()}],"mask-image-radial":[{"mask-radial":[q,G]}],"mask-image-radial-from-pos":[{"mask-radial-from":F()}],"mask-image-radial-to-pos":[{"mask-radial-to":F()}],"mask-image-radial-from-color":[{"mask-radial-from":O()}],"mask-image-radial-to-color":[{"mask-radial-to":O()}],"mask-image-radial-shape":[{"mask-radial":[`circle`,`ellipse`]}],"mask-image-radial-size":[{"mask-radial":[{closest:[`side`,`corner`],farthest:[`side`,`corner`]}]}],"mask-image-radial-pos":[{"mask-radial-at":_()}],"mask-image-conic-pos":[{"mask-conic":[H]}],"mask-image-conic-from-pos":[{"mask-conic-from":F()}],"mask-image-conic-to-pos":[{"mask-conic-to":F()}],"mask-image-conic-from-color":[{"mask-conic-from":O()}],"mask-image-conic-to-color":[{"mask-conic-to":O()}],"mask-mode":[{mask:[`alpha`,`luminance`,`match`]}],"mask-origin":[{"mask-origin":[`border`,`padding`,`content`,`fill`,`stroke`,`view`]}],"mask-position":[{mask:ce()}],"mask-repeat":[{mask:k()}],"mask-size":[{mask:le()}],"mask-type":[{"mask-type":[`alpha`,`luminance`]}],"mask-image":[{mask:[`none`,q,G]}],filter:[{filter:[``,`none`,q,G]}],blur:[{blur:ue()}],brightness:[{brightness:[H,q,G]}],contrast:[{contrast:[H,q,G]}],"drop-shadow":[{"drop-shadow":[``,`none`,f,ft,st]}],"drop-shadow-color":[{"drop-shadow":O()}],grayscale:[{grayscale:[``,H,q,G]}],"hue-rotate":[{"hue-rotate":[H,q,G]}],invert:[{invert:[``,H,q,G]}],saturate:[{saturate:[H,q,G]}],sepia:[{sepia:[``,H,q,G]}],"backdrop-filter":[{"backdrop-filter":[``,`none`,q,G]}],"backdrop-blur":[{"backdrop-blur":ue()}],"backdrop-brightness":[{"backdrop-brightness":[H,q,G]}],"backdrop-contrast":[{"backdrop-contrast":[H,q,G]}],"backdrop-grayscale":[{"backdrop-grayscale":[``,H,q,G]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[H,q,G]}],"backdrop-invert":[{"backdrop-invert":[``,H,q,G]}],"backdrop-opacity":[{"backdrop-opacity":[H,q,G]}],"backdrop-saturate":[{"backdrop-saturate":[H,q,G]}],"backdrop-sepia":[{"backdrop-sepia":[``,H,q,G]}],"border-collapse":[{border:[`collapse`,`separate`]}],"border-spacing":[{"border-spacing":b()}],"border-spacing-x":[{"border-spacing-x":b()}],"border-spacing-y":[{"border-spacing-y":b()}],"table-layout":[{table:[`auto`,`fixed`]}],caption:[{caption:[`top`,`bottom`]}],transition:[{transition:[``,`all`,`colors`,`opacity`,`shadow`,`transform`,`none`,q,G]}],"transition-behavior":[{transition:[`normal`,`discrete`]}],duration:[{duration:[H,`initial`,q,G]}],ease:[{ease:[`linear`,`initial`,h,q,G]}],delay:[{delay:[H,q,G]}],animate:[{animate:[`none`,ne,q,G]}],backface:[{backface:[`hidden`,`visible`]}],perspective:[{perspective:[p,q,G]}],"perspective-origin":[{"perspective-origin":re()}],rotate:[{rotate:I()}],"rotate-x":[{"rotate-x":I()}],"rotate-y":[{"rotate-y":I()}],"rotate-z":[{"rotate-z":I()}],scale:[{scale:L()}],"scale-x":[{"scale-x":L()}],"scale-y":[{"scale-y":L()}],"scale-z":[{"scale-z":L()}],"scale-3d":[`scale-3d`],skew:[{skew:R()}],"skew-x":[{"skew-x":R()}],"skew-y":[{"skew-y":R()}],transform:[{transform:[q,G,``,`none`,`gpu`,`cpu`]}],"transform-origin":[{origin:re()}],"transform-style":[{transform:[`3d`,`flat`]}],translate:[{translate:z()}],"translate-x":[{"translate-x":z()}],"translate-y":[{"translate-y":z()}],"translate-z":[{"translate-z":z()}],"translate-none":[`translate-none`],zoom:[{zoom:[U,q,G]}],accent:[{accent:O()}],appearance:[{appearance:[`none`,`auto`]}],"caret-color":[{caret:O()}],"color-scheme":[{scheme:[`normal`,`dark`,`light`,`light-dark`,`only-dark`,`only-light`]}],cursor:[{cursor:[`auto`,`default`,`pointer`,`wait`,`text`,`move`,`help`,`not-allowed`,`none`,`context-menu`,`progress`,`cell`,`crosshair`,`vertical-text`,`alias`,`copy`,`no-drop`,`grab`,`grabbing`,`all-scroll`,`col-resize`,`row-resize`,`n-resize`,`e-resize`,`s-resize`,`w-resize`,`ne-resize`,`nw-resize`,`se-resize`,`sw-resize`,`ew-resize`,`ns-resize`,`nesw-resize`,`nwse-resize`,`zoom-in`,`zoom-out`,q,G]}],"field-sizing":[{"field-sizing":[`fixed`,`content`]}],"pointer-events":[{"pointer-events":[`auto`,`none`]}],resize:[{resize:[`none`,``,`y`,`x`]}],"scroll-behavior":[{scroll:[`auto`,`smooth`]}],"scrollbar-thumb-color":[{"scrollbar-thumb":O()}],"scrollbar-track-color":[{"scrollbar-track":O()}],"scrollbar-gutter":[{"scrollbar-gutter":[`auto`,`stable`,`both`]}],"scrollbar-w":[{scrollbar:[`auto`,`thin`,`none`]}],"scroll-m":[{"scroll-m":b()}],"scroll-mx":[{"scroll-mx":b()}],"scroll-my":[{"scroll-my":b()}],"scroll-ms":[{"scroll-ms":b()}],"scroll-me":[{"scroll-me":b()}],"scroll-mbs":[{"scroll-mbs":b()}],"scroll-mbe":[{"scroll-mbe":b()}],"scroll-mt":[{"scroll-mt":b()}],"scroll-mr":[{"scroll-mr":b()}],"scroll-mb":[{"scroll-mb":b()}],"scroll-ml":[{"scroll-ml":b()}],"scroll-p":[{"scroll-p":b()}],"scroll-px":[{"scroll-px":b()}],"scroll-py":[{"scroll-py":b()}],"scroll-ps":[{"scroll-ps":b()}],"scroll-pe":[{"scroll-pe":b()}],"scroll-pbs":[{"scroll-pbs":b()}],"scroll-pbe":[{"scroll-pbe":b()}],"scroll-pt":[{"scroll-pt":b()}],"scroll-pr":[{"scroll-pr":b()}],"scroll-pb":[{"scroll-pb":b()}],"scroll-pl":[{"scroll-pl":b()}],"snap-align":[{snap:[`start`,`end`,`center`,`align-none`]}],"snap-stop":[{snap:[`normal`,`always`]}],"snap-type":[{snap:[`none`,`x`,`y`,`both`]}],"snap-strictness":[{snap:[`mandatory`,`proximity`]}],touch:[{touch:[`auto`,`none`,`manipulation`]}],"touch-x":[{"touch-pan":[`x`,`left`,`right`]}],"touch-y":[{"touch-pan":[`y`,`up`,`down`]}],"touch-pz":[`touch-pinch-zoom`],select:[{select:[`none`,`text`,`all`,`auto`]}],"will-change":[{"will-change":[`auto`,`scroll`,`contents`,`transform`,q,G]}],fill:[{fill:[`none`,...O()]}],"stroke-w":[{stroke:[H,J,K,nt]}],stroke:[{stroke:[`none`,...O()]}],"forced-color-adjust":[{"forced-color-adjust":[`auto`,`none`]}]},conflictingClassGroups:{"container-named":[`container-type`],overflow:[`overflow-x`,`overflow-y`],overscroll:[`overscroll-x`,`overscroll-y`],inset:[`inset-x`,`inset-y`,`inset-bs`,`inset-be`,`start`,`end`,`top`,`right`,`bottom`,`left`],"inset-x":[`start`,`end`,`right`,`left`],"inset-y":[`inset-bs`,`inset-be`,`top`,`bottom`],flex:[`basis`,`grow`,`shrink`],gap:[`gap-x`,`gap-y`],p:[`px`,`py`,`ps`,`pe`,`pbs`,`pbe`,`pt`,`pr`,`pb`,`pl`],px:[`ps`,`pe`,`pr`,`pl`],py:[`pbs`,`pbe`,`pt`,`pb`],m:[`mx`,`my`,`ms`,`me`,`mbs`,`mbe`,`mt`,`mr`,`mb`,`ml`],mx:[`ms`,`me`,`mr`,`ml`],my:[`mbs`,`mbe`,`mt`,`mb`],size:[`w`,`h`],"font-size":[`leading`],"fvn-normal":[`fvn-ordinal`,`fvn-slashed-zero`,`fvn-figure`,`fvn-spacing`,`fvn-fraction`],"fvn-ordinal":[`fvn-normal`],"fvn-slashed-zero":[`fvn-normal`],"fvn-figure":[`fvn-normal`],"fvn-spacing":[`fvn-normal`],"fvn-fraction":[`fvn-normal`],"line-clamp":[`display`,`overflow`],rounded:[`rounded-s`,`rounded-e`,`rounded-t`,`rounded-r`,`rounded-b`,`rounded-l`,`rounded-ss`,`rounded-se`,`rounded-ee`,`rounded-es`,`rounded-tl`,`rounded-tr`,`rounded-br`,`rounded-bl`],"rounded-s":[`rounded-ss`,`rounded-es`],"rounded-e":[`rounded-se`,`rounded-ee`],"rounded-t":[`rounded-tl`,`rounded-tr`],"rounded-r":[`rounded-tr`,`rounded-br`],"rounded-b":[`rounded-br`,`rounded-bl`],"rounded-l":[`rounded-tl`,`rounded-bl`],"border-spacing":[`border-spacing-x`,`border-spacing-y`],"border-w":[`border-w-x`,`border-w-y`,`border-w-s`,`border-w-e`,`border-w-bs`,`border-w-be`,`border-w-t`,`border-w-r`,`border-w-b`,`border-w-l`],"border-w-x":[`border-w-s`,`border-w-e`,`border-w-r`,`border-w-l`],"border-w-y":[`border-w-bs`,`border-w-be`,`border-w-t`,`border-w-b`],"border-color":[`border-color-x`,`border-color-y`,`border-color-s`,`border-color-e`,`border-color-bs`,`border-color-be`,`border-color-t`,`border-color-r`,`border-color-b`,`border-color-l`],"border-color-x":[`border-color-s`,`border-color-e`,`border-color-r`,`border-color-l`],"border-color-y":[`border-color-bs`,`border-color-be`,`border-color-t`,`border-color-b`],translate:[`translate-x`,`translate-y`,`translate-none`],"translate-none":[`translate`,`translate-x`,`translate-y`,`translate-z`],"scroll-m":[`scroll-mx`,`scroll-my`,`scroll-ms`,`scroll-me`,`scroll-mbs`,`scroll-mbe`,`scroll-mt`,`scroll-mr`,`scroll-mb`,`scroll-ml`],"scroll-mx":[`scroll-ms`,`scroll-me`,`scroll-mr`,`scroll-ml`],"scroll-my":[`scroll-mbs`,`scroll-mbe`,`scroll-mt`,`scroll-mb`],"scroll-p":[`scroll-px`,`scroll-py`,`scroll-ps`,`scroll-pe`,`scroll-pbs`,`scroll-pbe`,`scroll-pt`,`scroll-pr`,`scroll-pb`,`scroll-pl`],"scroll-px":[`scroll-ps`,`scroll-pe`,`scroll-pr`,`scroll-pl`],"scroll-py":[`scroll-pbs`,`scroll-pbe`,`scroll-pt`,`scroll-pb`],touch:[`touch-x`,`touch-y`,`touch-pz`],"touch-x":[`touch`],"touch-y":[`touch`],"touch-pz":[`touch`]},conflictingClassGroupModifiers:{"font-size":[`leading`]},postfixLookupClassGroups:[`container-type`],orderSensitiveModifiers:[`*`,`**`,`after`,`backdrop`,`before`,`details-content`,`file`,`first-letter`,`first-line`,`marker`,`placeholder`,`selection`]}});function Ct(...e){return St(F(e))}var wt={class:`fixed top-6 left-0 right-0 z-[99999] flex flex-col items-center gap-3 pointer-events-none px-4`,"aria-live":`polite`,"aria-atomic":`false`},Tt=[`role`],Et={class:`text-sm font-semibold leading-none tracking-tight`},Dt=[`onClick`],Ot=c({__name:`MessageContainer`,props:{messages:{}},emits:[`remove`],setup(i,{emit:a}){let s=i,c=a,f={info:j,success:le,warning:M,error:A},m=e=>{switch(e){case`error`:return`border-destructive/50 bg-background/60 text-destructive dark:bg-background/80`;case`warning`:return`border-warning/50 bg-background/60 text-warning dark:bg-background/80`;case`success`:return`border-success/50 bg-background/60 text-success dark:bg-background/80`;default:return`border-border bg-background/60 text-foreground dark:bg-background/80`}};return(i,a)=>(o(),r(`div`,wt,[t(y,{name:`message-flip`,tag:`div`,class:`flex flex-col items-center gap-3`},{default:h(()=>[(o(!0),r(p,null,te(s.messages,i=>(o(),r(`div`,{key:i.id,class:l([`pointer-events-auto max-w-xl w-fit flex items-center gap-3 px-4 py-3 shadow-[0_8px_30px_rgba(0,0,0,0.08)] rounded-base border backdrop-blur-md`,u(Ct)(m(i.type),i.class)]),role:i.type===`error`?`alert`:void 0},[(o(),re(e(i.icon||f[i.type||`info`]),{class:`w-4 h-4 shrink-0`})),n(`span`,Et,ee(i.content),1),i.closable?(o(),r(`button`,{key:0,onClick:e=>c(`remove`,i.id),class:`ml-2 p-0.5 rounded-[calc(var(--radius)-4px)] hover:bg-muted/80 transition-colors active:scale-90`,"aria-label":`关闭`},[t(u(N),{class:`w-3.5 h-3.5 opacity-60`})],8,Dt)):d(``,!0)],10,Tt))),128))]),_:1})]))}}),Z=_([]),kt=!1,Q=new Map,At=()=>`message_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,jt=()=>{if(kt)return;let e=document.createElement(`div`);e.className=`fuxsto-message-wrapper`,document.body.appendChild(e);let n=t(Ot,{messages:Z,onRemove:Mt});v(n,e),kt=!0},Mt=e=>{let t=Q.get(e);t&&(clearTimeout(t),Q.delete(e));let n=Z.findIndex(t=>t.id===e);n!==-1&&Z.splice(n,1)},$=e=>{kt||jt();let t=typeof e==`string`?{content:e}:e,n=t.id||At(),r=t.duration===void 0?3e3:t.duration,i=t.type||`info`,a=Z.find(e=>e.content===t.content&&(e.type||`info`)===i);if(a?.id){let e=a.id;if(r>0){let t=Q.get(e);t&&clearTimeout(t),Q.set(e,setTimeout(()=>Mt(e),r))}return e}let o={...t,id:n,type:i};if(Z.push(o),Z.length>5){let e=Z.shift();if(e?.id){let t=Q.get(e.id);t&&clearTimeout(t),Q.delete(e.id)}}return r>0&&Q.set(n,setTimeout(()=>Mt(n),r)),n};$.info=(e,t)=>$({content:e,type:`info`,...t}),$.success=(e,t)=>$({content:e,type:`success`,...t}),$.warning=(e,t)=>$({content:e,type:`warning`,...t}),$.error=(e,t)=>$({content:e,type:`error`,...t});export{j as a,k as c,M as i,ae as l,Ct as n,A as o,N as r,le as s,$ as t}; \ No newline at end of file diff --git a/server/adminui/_nuxt/C9QLCt9z.js b/server/adminui/_nuxt/C9QLCt9z.js new file mode 100644 index 0000000..da1569d --- /dev/null +++ b/server/adminui/_nuxt/C9QLCt9z.js @@ -0,0 +1 @@ +import{A as e,C as t,E as n,J as r,K as i,M as a,St as o,T as s,Vt as c,X as l,_ as u,ct as d,ft as f,ht as p,k as m,w as h}from"./BT-50xGH.js";import{n as g}from"./CxZD5dLJ.js";import{c as _,l as v}from"./C7_xDZuo.js";import{t as y}from"./BZ_oP5sc.js";import{i as b,r as x,t as S}from"./CLabUxWX.js";import{t as C}from"./Bq3ByqkD.js";import{n as w,t as T}from"./Dqnn4udu.js";var E=_(`send`,[[`path`,{d:`M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z`,key:`1ffxy3`}],[`path`,{d:`m21.854 2.147-10.94 10.939`,key:`12cjpa`}]]),D={class:`space-y-1 px-5 pb-5`},O=[`value`],k={class:`flex items-center gap-4 pt-3`},A={class:`flex items-center gap-2 text-sm`},j={class:`ml-auto`},M={key:0,class:`mt-3 max-h-[420px] overflow-auto rounded-lg border border-border bg-muted/40 p-3 text-xs leading-relaxed break-all whitespace-pre-wrap`},N=`liapi-model-list`,P=a({__name:`debug`,setup(a){let{request:_,setToken:P}=v(),{handleError:F}=S(),I=p(``),L=p(`[{"role":"user","content":"你好,用一句话介绍自己。"}]`),R=p(!1),z=p(!1),B=p(``),V=p(!1),H=p([]);i(async()=>{try{let e=await _(`/config`),t=new Set;for(let n of e.upstreams||[])if(!n.disabled)for(let e of n.models||[])e!==`*`&&t.add(e);for(let n of Object.keys(e.aliases||{}))t.add(n);H.value=[...t].sort()}catch{}});async function U(){let e;try{e=JSON.parse(L.value)}catch(e){V.value=!0,B.value=`messages 不是合法 JSON: `+e.message;return}z.value=!0,V.value=!0,B.value=`请求中...`;try{let t=await _(`/test`,{method:`POST`,body:JSON.stringify({model:I.value.trim(),messages:e,stream:R.value})});B.value=JSON.stringify(t,null,2)}catch(e){B.value=`错误: `+e.message}finally{z.value=!1}}return(i,a)=>{let p=T;return r(),h(o(x),{padding:`none`},{header:d(()=>[...a[3]||=[t(`div`,{class:`px-5 py-4`},[t(`h2`,{class:`text-sm font-semibold`},`调试:发送一条请求`),t(`p`,{class:`text-xs text-muted-foreground`},` 直接走完整转发链路(别名 / 路由 / 故障转移),用于连通性排查 `)],-1)]]),default:d(()=>[t(`div`,D,[e(p,{label:`model`},{default:d(()=>[e(o(y),{modelValue:o(I),"onUpdate:modelValue":a[0]||=e=>f(I)?I.value=e:null,list:N,placeholder:`gpt-4o`},null,8,[`modelValue`]),t(`datalist`,{id:N},[(r(!0),n(u,null,l(o(H),e=>(r(),n(`option`,{key:e,value:e},null,8,O))),128))])]),_:1}),e(p,{label:`messages (JSON 数组)`},{default:d(()=>[e(o(C),{modelValue:o(L),"onUpdate:modelValue":a[1]||=e=>f(L)?L.value=e:null,rows:5,class:`font-mono text-xs`},null,8,[`modelValue`])]),_:1}),t(`div`,k,[t(`label`,A,[e(o(w),{modelValue:o(R),"onUpdate:modelValue":a[2]||=e=>f(R)?R.value=e:null},null,8,[`modelValue`]),a[4]||=m(),a[5]||=t(`span`,null,`stream`,-1)]),t(`div`,j,[e(o(b),{variant:`primary`,size:`md`,icon:o(E),loading:o(z),onClick:U},{default:d(()=>[...a[6]||=[m(` 发送 `,-1)]]),_:1},8,[`icon`,`loading`])])]),e(g,{name:`fade`},{default:d(()=>[o(V)?(r(),n(`pre`,M,c(o(B)),1)):s(``,!0)]),_:1})])]),_:1})}}});export{P as default}; \ No newline at end of file diff --git a/server/adminui/_nuxt/CDZnUJxo.js b/server/adminui/_nuxt/CDZnUJxo.js new file mode 100644 index 0000000..d33d1fd --- /dev/null +++ b/server/adminui/_nuxt/CDZnUJxo.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./BB0691XW.js","./BT-50xGH.js","./C7_xDZuo.js","./CxZD5dLJ.js","./C2auVMGT.js","./Biiz67gC.js","./CLabUxWX.js","./Bq3ByqkD.js","./Cv1xSm-v.js","./YiEwAvN-.js","./C9QLCt9z.js","./BZ_oP5sc.js","./Dqnn4udu.js","./CU1Fk5fy.js","./ChxjuxiH.js","./BkiPxbt6.js","./CaMPYMl_.js","./O7BxGEKD.js","./BaMR1-Wb.js","./D50T9Hbc.js","./zZGEHylc.js","./C5KwrKiw.js","./DfpAeMWm.js","./BnbMNd1_.js","./Cy6fBfr9.js","./Cjk4IpeB.js","./C1UVkkyo.js","./Dy1Pnbdd.js","./--2IuJIQ.js","./B3nLMP91.js","./DKXNkI4w.js","./error-404.Bb87HomL.css","./DZrj6clu.js","./error-500.Bwd7zAaE.css"])))=>i.map(i=>d[i]); +import{$ as e,A as t,B as n,E as r,F as i,G as a,Gt as o,I as s,J as c,K as l,Kt as u,L as d,M as f,Q as p,R as m,S as h,St as g,T as _,U as v,Ut as y,V as b,Wt as ee,Y as x,_ as te,a as S,c as C,ct as w,d as T,dt as E,f as ne,gt as re,ht as ie,i as D,j as ae,l as oe,m as se,mt as O,n as ce,o as le,ot as ue,p as k,r as A,t as de,u as j,v as M,vt as fe,w as N,y as pe,z as me,zt as he}from"./BT-50xGH.js";import{a as ge,i as _e,n as ve,t as ye}from"./CxZD5dLJ.js";import{C as be,D as xe,E as Se,O as Ce,S as we,T as Te,_ as Ee,a as De,b as Oe,c as ke,d as Ae,f as je,g as Me,h as Ne,i as Pe,k as P,l as Fe,m as Ie,n as Le,o as Re,p as F,r as ze,s as Be,t as Ve,u as He,v as Ue,w as We,x as Ge,y as Ke}from"./Dy1Pnbdd.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var qe=/"(?:_|\\u0{2}5[Ff]){2}(?:p|\\u0{2}70)(?:r|\\u0{2}72)(?:o|\\u0{2}6[Ff])(?:t|\\u0{2}74)(?:o|\\u0{2}6[Ff])(?:_|\\u0{2}5[Ff]){2}"\s*:/,Je=/"(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)"\s*:/,Ye=/^\s*["[{]|^\s*-?\d{1,16}(\.\d{1,17})?([Ee][+-]?\d+)?\s*$/;function Xe(e,t){if(e===`__proto__`||e===`constructor`&&t&&typeof t==`object`&&`prototype`in t){Ze(e);return}return t}function Ze(e){console.warn(`[destr] Dropping "${e}" key to prevent prototype pollution.`)}function Qe(e,t={}){if(typeof e!=`string`)return e;if(e[0]===`"`&&e[e.length-1]===`"`&&e.indexOf(`\\`)===-1)return e.slice(1,-1);let n=e.trim();if(n.length<=9)switch(n.toLowerCase()){case`true`:return!0;case`false`:return!1;case`undefined`:return;case`null`:return null;case`nan`:return NaN;case`infinity`:return 1/0;case`-infinity`:return-1/0}if(!Ye.test(e)){if(t.strict)throw SyntaxError(`[destr] Invalid JSON`);return e}try{if(qe.test(e)||Je.test(e)){if(t.strict)throw Error(`[destr] Possible prototype pollution`);return JSON.parse(e,Xe)}return JSON.parse(e)}catch(n){if(t.strict)throw n;return e}}var $e=class extends Error{constructor(e,t){super(e,t),this.name=`FetchError`,t?.cause&&!this.cause&&(this.cause=t.cause)}};function et(e){let t=e.error?.message||e.error?.toString()||``,n=e.request?.method||e.options?.method||`GET`,r=e.request?.url||String(e.request)||`/`,i=new $e(`${`[${n}] ${JSON.stringify(r)}`}: ${e.response?`${e.response.status} ${e.response.statusText}`:``}${t?` ${t}`:``}`,e.error?{cause:e.error}:void 0);for(let t of[`request`,`options`,`response`])Object.defineProperty(i,t,{get(){return e[t]}});for(let[t,n]of[[`data`,`_data`],[`status`,`status`],[`statusCode`,`status`],[`statusText`,`statusText`],[`statusMessage`,`statusText`]])Object.defineProperty(i,t,{get(){return e.response&&e.response[n]}});return i}var tt=new Set(Object.freeze([`PATCH`,`POST`,`PUT`,`DELETE`]));function nt(e=`GET`){return tt.has(e.toUpperCase())}function rt(e){if(e===void 0)return!1;let t=typeof e;return t===`string`||t===`number`||t===`boolean`||t===null?!0:t===`object`?Array.isArray(e)?!0:e.buffer||e instanceof FormData||e instanceof URLSearchParams?!1:e.constructor&&e.constructor.name===`Object`||typeof e.toJSON==`function`:!1}var it=new Set([`image/svg`,`application/xml`,`application/xhtml`,`application/html`]),at=/^application\/(?:[\w!#$%&*.^`~-]*\+)?json(;.+)?$/i;function ot(e=``){if(!e)return`json`;let t=e.split(`;`).shift()||``;return at.test(t)?`json`:t===`text/event-stream`?`stream`:it.has(t)||t.startsWith(`text/`)?`text`:`blob`}function st(e,t,n,r){let i=ct(t?.headers??e?.headers,n?.headers,r),a;return(n?.query||n?.params||t?.params||t?.query)&&(a={...n?.params,...n?.query,...t?.params,...t?.query}),{...n,...t,query:a,params:a,headers:i}}function ct(e,t,n){if(!t)return new n(e);let r=new n(t);if(e)for(let[t,i]of Symbol.iterator in e||Array.isArray(e)?e:new n(e))r.set(t,i);return r}async function lt(e,t){if(t){if(Array.isArray(t))for(let n of t)await n(e);else await t(e)}}var ut=new Set([408,409,425,429,500,502,503,504]),dt=new Set([101,204,205,304]);function ft(e={}){let{fetch:t=globalThis.fetch,Headers:n=globalThis.Headers,AbortController:r=globalThis.AbortController}=e;async function i(e){let t=e.error&&e.error.name===`AbortError`&&!e.options.timeout||!1;if(e.options.retry!==!1&&!t){let t;t=typeof e.options.retry==`number`?e.options.retry:+!nt(e.options.method);let n=e.response&&e.response.status||500;if(t>0&&(Array.isArray(e.options.retryStatusCodes)?e.options.retryStatusCodes.includes(n):ut.has(n))){let n=typeof e.options.retryDelay==`function`?e.options.retryDelay(e):e.options.retryDelay||0;return n>0&&await new Promise(e=>setTimeout(e,n)),a(e.request,{...e.options,retry:t-1})}}let n=et(e);throw Error.captureStackTrace&&Error.captureStackTrace(n,a),n}let a=async function(a,o={}){let s={request:a,options:st(a,o,e.defaults,n),response:void 0,error:void 0};if(s.options.method&&(s.options.method=s.options.method.toUpperCase()),s.options.onRequest&&(await lt(s,s.options.onRequest),s.options.headers instanceof n||(s.options.headers=new n(s.options.headers||{}))),typeof s.request==`string`&&(s.options.baseURL&&(s.request=Ge(s.request,s.options.baseURL)),s.options.query&&(s.request=we(s.request,s.options.query),delete s.options.query),`query`in s.options&&delete s.options.query,`params`in s.options&&delete s.options.params),s.options.body&&nt(s.options.method)){if(rt(s.options.body)){let e=s.options.headers.get(`content-type`);typeof s.options.body!=`string`&&(s.options.body=e===`application/x-www-form-urlencoded`?new URLSearchParams(s.options.body).toString():JSON.stringify(s.options.body)),e||s.options.headers.set(`content-type`,`application/json`),s.options.headers.has(`accept`)||s.options.headers.set(`accept`,`application/json`)}else(`pipeTo`in s.options.body&&typeof s.options.body.pipeTo==`function`||typeof s.options.body.pipe==`function`)&&(`duplex`in s.options||(s.options.duplex=`half`))}let c;if(!s.options.signal&&s.options.timeout){let e=new r;c=setTimeout(()=>{let t=Error(`[TimeoutError]: The operation was aborted due to timeout`);t.name=`TimeoutError`,t.code=23,e.abort(t)},s.options.timeout),s.options.signal=e.signal}try{s.response=await t(s.request,s.options)}catch(e){return s.error=e,s.options.onRequestError&&await lt(s,s.options.onRequestError),await i(s)}finally{c&&clearTimeout(c)}if((s.response.body||s.response._bodyInit)&&!dt.has(s.response.status)&&s.options.method!==`HEAD`){let e=(s.options.parseResponse?`json`:s.options.responseType)||ot(s.response.headers.get(`content-type`)||``);switch(e){case`json`:{let e=await s.response.text(),t=s.options.parseResponse||Qe;s.response._data=t(e);break}case`stream`:s.response._data=s.response.body||s.response._bodyInit;break;default:s.response._data=await s.response[e]()}}return s.options.onResponse&&await lt(s,s.options.onResponse),!s.options.ignoreResponseError&&s.response.status>=400&&s.response.status<600?(s.options.onResponseError&&await lt(s,s.options.onResponseError),await i(s)):s.response},o=async function(e,t){return(await a(e,t))._data};return o.raw=a,o.native=(...e)=>t(...e),o.create=(t={},n={})=>ft({...e,...n,defaults:{...e.defaults,...n.defaults,...t}}),o}var pt=(function(){if(typeof globalThis<`u`)return globalThis;if(typeof self<`u`)return self;if(typeof window<`u`)return window;if(typeof global<`u`)return global;throw Error(`unable to locate global object`)})(),mt=pt.fetch?(...e)=>pt.fetch(...e):()=>Promise.reject(Error(`[ofetch] global.fetch is not supported!`)),ht=pt.Headers,gt=pt.AbortController,_t=ft({fetch:mt,Headers:ht,AbortController:gt}),vt=()=>window?.__NUXT__?.config||window?.useNuxtApp?.().payload?.config,yt=()=>vt().app,bt=()=>yt().baseURL,xt=()=>yt().buildAssetsDir,St=(...e)=>Ue(Ct(),xt(),...e),Ct=(...e)=>{let t=yt(),n=t.cdnURL||t.baseURL;return e.length?Ue(n,...e):n};globalThis.__buildAssetsURL=St,globalThis.__publicAssetsURL=Ct,globalThis.$fetch||(globalThis.$fetch=_t.create({baseURL:bt()}));var wt=globalThis.$fetch;`global`in globalThis||(globalThis.global=globalThis);function Tt(e,t){t.push(le),e.vueApp.use(t);let n=!0,r=()=>{n=!1,t.render()};t.hooks?.hook(`dom:beforeRender`,e=>{e.shouldRender=!n}),e.hooks.hook(`page:start`,()=>{n=!0}),e.hooks.hook(`page:finish`,()=>{e.isHydrating||r()}),e.hooks.hook(`app:error`,r),e.hooks.hook(`app:suspense:resolve`,r);let i=t.push.bind(t);t.push=((t,n)=>{let r=i(t,n),a=r.dispose.bind(r);return r.dispose=()=>{let t=e[`~transitionPromise`];t?t.finally(a):a()},r})}function Et(e,t){if(typeof t==`function`&&t.key&&e.plugins.has(t.key))return;let n=typeof t==`function`?t(e):t,r=n.key||String(e.plugins.size+1);if(!e.plugins.get(r)){e.plugins.set(r,n);for(let t in n.hooks||{})e.hooks?.hook(t,n.hooks[t])}}function Dt(e,t={}){let n=!t.document,r=new Map,i={_entryCount:1,_h:0,plugins:new Map,resolvedOptions:t,ssr:n,entries:r,hooks:void 0,render:()=>e(i),use:e=>Et(i,e),push(e,t){let a=t?._index??i._entryCount++,o=t?{...t}:{};delete o.head,delete o.onRendered,delete o._index;let s={_i:a,input:e,options:o};return r.set(a,s),{_i:a,dispose(){r.delete(a)},patch(e){n?(s.input=e,delete s._tags):s._pending=e,r.has(a)||r.set(a,s)}}}};return t.init?.forEach(e=>e&&i.push(e)),i}var Ot=new Set([`link`,`style`,`script`,`noscript`]),kt=new Set([`title`,`titleTemplate`,`script`,`style`,`noscript`]),At=new Set([`base`,`meta`,`link`,`style`,`script`,`noscript`]),jt=new Set([`title`,`base`,`htmlAttrs`,`bodyAttrs`,`meta`,`link`,`style`,`script`,`noscript`]),Mt=new Set([`base`,`title`,`titleTemplate`,`bodyAttrs`,`htmlAttrs`,`templateParams`]),Nt=new Set([`key`,`tagPosition`,`tagPriority`,`tagDuplicateStrategy`,`innerHTML`,`textContent`,`processTemplateParams`]),Pt=new Set([`templateParams`,`htmlAttrs`,`bodyAttrs`]),Ft=new Set([`theme-color`,`google-site-verification`,`author`,`og:locale:alternate`,`og:image`,`og:video`,`og:audio`,`article:author`,`article:tag`,`book:author`,`book:tag`,`twitter:image`]),It={critical:-8,high:-1,low:2},Lt=e=>typeof e==`number`?Number.isFinite(e):e;function Rt(e){return e===`__proto__`||e===`constructor`||e===`prototype`}function zt(e){let t=new se;for(let n in e||{})t.hook(n,e[n]);return t}function I(e,t,n){if(e.hooks?._hooks?.[t]?.length)return e.hooks?.callHook(t,n)}function Bt(e,t,n){let r=e.push,i=e;i.ssr=!1,i.hooks=t,i.dirty=!!i.dirty,i.use=e=>Et(i,e),i.render=()=>n(i);function a(){t.callHook(`entries:updated`,i),i._b||i.render()}return i.invalidate=()=>{for(let e of i.entries.values())delete e._tags;i.dirty=!0,a()},i.push=(n,o)=>{let s=o?.onRendered?t.hook(`dom:rendered`,o.onRendered):void 0,c=r(n,o),l=e.entries.get(c._i);return l&&(l._o=n),i.dirty=!0,a(),{_i:c._i,patch(e){c.patch(e),i.dirty=!0,a()},dispose(){s?.(),e.entries.has(c._i)&&(c.dispose(),i.invalidate())}}},i}var Vt=/^(?:viewport|description|keywords|robots)$/,Ht=[`name`,`property`,`http-equiv`];function Ut(e){let t=e.indexOf(`:`);if(t===-1)return!1;let n=e.slice(t+1);return Ft.has(n)||n.startsWith(`og:image:`)||n.startsWith(`og:video:`)||n.startsWith(`og:audio:`)||n.startsWith(`twitter:image:`)}function Wt(e){let{props:t,tag:n,key:r}=e;if(Mt.has(n))return n;if(n===`link`){if(t.rel===`canonical`)return`canonical`;if(t.rel===`alternate`&&t.hreflang)return`alternate:${t.hreflang}`}if(t.charset)return`charset`;if(n===`meta`)for(let e of Ht){let n=t[e];if(n!==void 0)return`meta:${n}${(typeof n!=`string`||!n.includes(`:`))&&!Vt.test(n)&&r?`:key:${r}`:``}`}return r?`${n}:key:${r}`:t.id?`${n}:id:${t.id}`:n===`link`&&t.rel&&t.href?`link:${t.rel}:${t.href}`:kt.has(n)&&(e.textContent||e.innerHTML)?`${n}:content:${e.textContent||e.innerHTML}`:void 0}function Gt(e){let t=e._h||e._d||e.textContent||e.innerHTML;if(t)return t;let n=Object.keys(e.props).sort(),r=`${e.tag}:`,i=``;for(let t of n)r+=`${i}${t}:${String(e.props[t])}`,i=`,`;return r}function Kt(e,t,n){if(n===`_resolver`)return e;typeof e==`function`&&(!n||n!==`titleTemplate`&&!n.startsWith(`on`))&&(e=e());let r=t?t(n,e):e;if(Array.isArray(r)){let e;for(let n=0;n/=\x00-\x1F\x7F]/;function Jt(e,t){let n=e===`style`,r=n?new Map:new Set,i=e=>{if(e){if(n){let t=e.indexOf(`:`);t>0&&r.set(e.slice(0,t).trim(),e.slice(t+1).trim())}else e.split(` `).forEach(e=>e&&r.add(e))}};if(typeof t==`string`)(n?t.split(`;`):[t]).forEach(i);else if(Array.isArray(t))t.forEach(i);else if(t&&typeof t==`object`)for(let e in t){let a=t[e];a&&a!==`false`&&(n?r.set(e.trim(),String(a)):i(e))}return r}function Yt(e,t){if(e.props=e.props||{},!t)return e;if(e.tag===`templateParams`)return e.props=t,e;let n=At.has(e.tag)||e.tag===`htmlAttrs`||e.tag===`bodyAttrs`;for(let r in t){if(Rt(r))continue;let i=r.startsWith(`data-`),a=n&&!Nt.has(r),o=a&&!i?r.toLowerCase():r;if(a&&(!o||qt.test(o)))continue;let s=t[r];if(s===null)e.props[o]=null;else if(r===`class`||r===`style`)e.props[r]=Jt(r,s);else if(Nt.has(r)){if((r===`textContent`||r===`innerHTML`)&&typeof s==`object`){let n=t.type||`application/json`;(n.endsWith(`json`)||n===`speculationrules`||n===`importmap`)&&(e.props.type=n,e[r]=JSON.stringify(s))}else e[r]=s}else if(s!==void 0){let t=String(s),n=e.tag===`meta`&&o===`content`;e.props[o]=t===`true`||t===``?i||n?t:!0:!s&&i&&t===`false`?`false`:s}}return e}function Xt(e,t){let n;return t.length&&(n=(e,n)=>{for(let r=0;re._w===t._w?e._p-t._p:e._w-t._w,rn=()=>100;function an(e){for(let t in e)return!1;return!0}var on=/^tags:|:render/;function sn(e,t){let n=(t[`entries:resolve`]?.length||0)+(t[`entries:normalize`]?.length||0);if(e._h!==n){e._h=n;for(let t of e.entries.values())delete t._tags}}function cn(e){for(let t=0;t>10==i._p>>10&&n.tag===`meta`&&Ut(r)?(e.tagMap.set(r,Object.assign([...Array.isArray(i)?i:[i],n],n)),t=!0):(n._w===i._w?n._p>i._p:n._wt?(typeof e==`string`?e:JSON.stringify(e)).replace(en,`\\u003C`):typeof e==`string`?e.replace(tn,`<\\/script`):e;n={...n},r&&(n.innerHTML=i(r)),n.textContent&&(n.textContent=i(n.textContent)),n._d=Wt(n)}e[t++]=n}}return e.length=t,e}function pn(e,t){let n=t?.tagWeight??e.resolvedOptions._tagWeight??rn,r={tagMap:new Map,tags:[]},i=e.hooks?._hooks||{};sn(e,i);for(let t of e.entries.values())t._pending!==void 0&&(t.input=t._pending,delete t._pending,delete t._tags,delete t._precomputedTags);let a;(i[`entries:resolve`]?.length||i[`entries:normalize`]?.length)&&(a=[...e.entries.values()],i[`entries:resolve`]?.length&&I(e,`entries:resolve`,{entries:a,...r})),sn(e,i);for(let t of a||e.entries.values()){let a=t._tags;if(!a){if(t._precomputedTags&&n===e.resolvedOptions._tagWeight&&!i[`entries:normalize`]?.length&&!i[`entries:resolve`]?.length&&(!t.options||an(t.options)))a=t._precomputedTags;else{if(a=$t(t.input,e.resolvedOptions.propResolvers||[]),t.options&&!an(t.options))for(let e of a)Object.assign(e,t.options);if(i[`entries:normalize`]?.length){let n={tags:a,entry:t};I(e,`entries:normalize`,n),a=n.tags}for(let e=0;evn(t,e)}function gn(e){for(let t of e.entries.values())if(t._pending!==void 0)return!0;return!1}function _n(e,t){let n={_d:t,_t:t.title,_e:new Map([[`htmlAttrs`,t.documentElement],[`bodyAttrs`,t.body]]),_p:{},_s:{},_l:new Map};for(let t of e.entries.values())if(t._o!==void 0){let e=t._o;for(let t of[`bodyAttrs`,`htmlAttrs`]){let r=e[t]?.class;if(typeof r==`string`){let e=n._e.get(t);for(let i of r.split(mn))i&&(n._p[`${t}:attr:class:${i}`]=()=>e.classList.remove(i))}}}return n}function vn(e,t={}){let n=t.document||e.resolvedOptions.document,r=e._dom;if(!n||e._du||r&&r._d===n&&!e.dirty&&!gn(e))return!1;let i=n.defaultView;e._du=!0;let a=!1;try{let o=function(e,t,n){d._s[e]=!n&&f[e]||t,delete f[e]},s=function(e,t,n,r,i,a){let s=`${e}:event:${t}`,c=d._l.get(s);if(c&&c[0]===a&&c[1]===n&&c[2]===r){o(s,c[4]);return}c?.[4]();let l=`data-${t}`,u=(e=>r.call(i,e)),f=()=>{a.removeEventListener(n,u),i.getAttribute(l)===``&&i.removeAttribute(l),d._l.get(s)?.[3]===u&&d._l.delete(s)};a.addEventListener(n,u),d._l.set(s,[a,n,r,u,f]),i.setAttribute(l,``),o(s,f,!0)},c=function({id:e,$el:t,tag:n}){if(d._e.set(e,t),!n.tag.endsWith(`Attrs`)){let r=n.textContent;r!=null&&r!==``&&(r!==t.textContent&&(t.textContent=r),o(`${e}:text`,()=>{t.textContent===r&&(t.textContent=``)},!0));let i=n.innerHTML;i!=null&&i!==``&&(i!==t.innerHTML&&(t.innerHTML=i),o(`${e}:html`,()=>{t.innerHTML===i&&(t.innerHTML=``)},!0));let a=`${e}:el`;o(a,f[a]||(()=>{t?.remove(),d._e.delete(e)}))}for(let r in n.props){let a=n.props[r];if(r[0]===`o`&&r[1]===`n`&&typeof a==`function`){let o=r.slice(2);t?.dataset?.[`${r}fired`]&&a.call(t,new((i?.Event)||Event)(o)),s(e,r,o,a,t,n.tag===`bodyAttrs`&&i?i:t);continue}let c=`${e}:attr:${r}`;if(r===`class`&&a)for(let e of a){let n=`${c}:${e}`;o(n,f[n]||(()=>t.classList.remove(e))),t.classList.contains(e)||t.classList.add(e)}else if(r===`style`&&a)for(let[e,n]of a){let r=`${c}:${e}`;o(r,f[r]||(()=>t.style.removeProperty(e))),t.style.setProperty(e,n)}else a!==!1&&a!==null&&(t.getAttribute(r)!==a&&t.setAttribute(r,a===!0?``:String(a)),o(c,f[c]||(()=>t.removeAttribute(r))))}},l={shouldRender:!0,tags:[]};if(I(e,`dom:beforeRender`,l),!l.shouldRender)return!1;let u=r;if(u?._d!==n){if(u){for(let e in u._s)u._s[e]();for(let e in u._p)u._p[e]();u._s=u._p={},u._e.clear(),u._l.clear()}u=void 0}u?u._p=u._s:u=_n(e,n),u._s={};let d=u,f=d._p,p=[],m={};e.dirty=!1;let h=pn(e,t.tagWeight?{tagWeight:t.tagWeight}:void 0),g=[],_={};for(let e of h){let t=_[e._d]||0,r=(t?`${e._d}:${t}`:e._d)||e._h,i={tag:e,id:r,shouldRender:!0};if(e.tag===`meta`&&e._d&&Ut(e._d)&&(_[e._d]=t+1),g.push(i),e.tag===`title`){n.title=e.textContent,o(`title:`,()=>n.title=d._t);continue}i.$el=d._e.get(r),i.$el?c(i):At.has(e.tag)&&p.push(i)}if(p.length){let e=new Set(d._e.values());for(let t of[...n.body.children,...n.head.children]){let n=t.tagName.toLowerCase();if(!At.has(n)||e.has(t))continue;let r={innerHTML:t.innerHTML};for(let e of t.getAttributeNames())r[e]=t.getAttribute(e);let i=Yt({tag:n,props:{}},r);i.key=t.getAttribute(`data-hid`)||void 0;let a=Wt(i)||Gt(i),o=a,s=1;for(;d._e.has(o);)o=`${a}:${s++}`;d._e.set(o,t)}}for(let e of p){let t=d._e.get(e.id);e.$el=t||n.createElement(e.tag.tag),c(e),t||(m[e.tag.tagPosition||`head`]??=n.createDocumentFragment()).appendChild(e.$el)}m.head&&n.head.appendChild(m.head),m.bodyOpen&&n.body.insertBefore(m.bodyOpen,n.body.firstChild),m.bodyClose&&n.body.appendChild(m.bodyClose);for(let e in f)f[e]();e._dom=d,a=!0,I(e,`dom:rendered`,{renders:g})}catch(t){throw e.dirty=!0,t}finally{e._du=!1}return a&&(e.dirty||gn(e))&&vn(e,t),a}var yn=e=>typeof e.tagPriority==`number`?e.tagPriority:100+(It[e.tagPriority]||0);function bn(e={}){e.document=e.document||(typeof window<`u`?document:void 0);let t=e.render||hn({document:e.document}),n=Bt(Dt(t,{document:e.document,propResolvers:e.propResolvers,_tagWeight:yn,init:[]}),zt(e.hooks),t);return e.plugins?.forEach(e=>n.use(e)),e.init?.forEach(e=>e&&n.push(e)),n}var xn=`usehead`;function Sn(){if(d()){let e=m(xn);if(e)return e}throw Error(`useHead() was called without provide context, ensure you call it through the setup() function.`)}function Cn(e){return{install(t){t.config.globalProperties.$unhead=e,t.config.globalProperties.$head=e,t.provide(xn,e)}}.install}function wn(e,t){return t&&typeof e==`function`&&(e.key=t),e}var Tn=/\\/g,En=/{if(e===kn||!a.includes(e))return e;let n=An(t,e.slice(1),r);return n===void 0?e:n}).trim(),o&&(e=e.split(kn).map(e=>e.trim()).filter(e=>e!==``).join(n?` ${n} `:` `)),e}var Mn=(e,t)=>e._w===t._w?e._p-t._p:e._w-t._w,Nn=e=>e.includes(`:key`)?e:e.split(`:`).join(`:key:`),Pn=wn({key:`aliasSorting`,hooks:{"tags:resolve":e=>{let t=!1;for(let n of e.tags){let r=n.tagPriority;if(!r)continue;let i=String(r);if(i.startsWith(`before:`)){let r=Nn(i.slice(7)),a=e.tagMap.get(r);a&&(typeof a.tagPriority==`number`&&(n.tagPriority=a.tagPriority),n._p=a._p-1,t=!0)}else if(i.startsWith(`after:`)){let r=Nn(i.slice(6)),a=e.tagMap.get(r);a&&(typeof a.tagPriority==`number`&&(n.tagPriority=a.tagPriority),n._p=a._p+1,t=!0)}}t&&(e.tags=e.tags.sort(Mn))}}}),Fn=wn({key:`deprecations`,hooks:{"entries:normalize":({tags:e})=>{for(let t of e)t.props.children&&(t.innerHTML=t.props.children,delete t.props.children),t.props.hid&&(t.key=t.props.hid,delete t.props.hid),t.props.vmid&&(t.key=t.props.vmid,delete t.props.vmid),`body`in t.props&&(t.props.body&&(t.tagPosition=`bodyClose`),delete t.props.body),t.props.renderPriority!=null&&(t.tagPriority=t.props.renderPriority,delete t.props.renderPriority)}}});function L(e){return typeof e?.then==`function`}var In=256;function Ln(e,t){if(t===e.length)return;if(t===In){let n=Array(e.length),r=!1;for(;tObject.fromEntries(t.map((t,n)=>[t,e[n]])))}return e}var zn=wn(e=>{let t=new WeakMap;return{key:`promises`,hooks:{"entries:resolve":n=>{for(let r=n.entries.length-1;r>=0;r--){let i=n.entries[r],a=i.input;if(t.get(i)===a){n.entries.splice(r,1);continue}let o=R(a);if(!L(o)){t.delete(i);continue}t.set(i,a),n.entries.splice(r,1),Promise.resolve(o).then(n=>{t.get(i)===a&&(t.delete(i),i.input=n,delete i._tags,e.invalidate?.())},()=>{t.get(i)===a&&t.delete(i)})}}}}},`promises`),Bn={meta:`content`,link:`href`,htmlAttrs:`lang`},Vn=[`innerHTML`,`textContent`];function Hn(e,t,n,r=!1){return typeof e==`string`&&e.includes(`%`)?jn(e,t,n,r):e}var Un=wn(e=>({key:`template-params`,hooks:{"tags:resolve":({tagMap:t,tags:n})=>{let r=t.get(`templateParams`)?.props||{},i=r.separator||`|`;delete r.separator,r.pageTitle=Hn(r.pageTitle||e._title||``,r,i);for(let e of n){if(e.processTemplateParams===!1)continue;let t=Bn[e.tag];if(t&&typeof e.props[t]==`string`)e.props[t]=Hn(e.props[t],r,i);else if(e.processTemplateParams||e.tag===`titleTemplate`||e.tag===`title`)for(let t of Vn)typeof e[t]==`string`&&(e[t]=Hn(e[t],r,i,e.tag===`script`&&typeof e.props.type==`string`&&e.props.type.endsWith(`json`)))}e._templateParams=r,e._separator=i},"tags:afterResolve":({tagMap:t})=>{let n=t.get(`title`);n?.textContent&&n.processTemplateParams!==!1&&(n.textContent=Hn(n.textContent,e._templateParams,e._separator))}}}),`template-params`);function Wn(e={}){let t=hn(),n,r=0;return n=bn({render:()=>{let e=++r;setTimeout(()=>{e===r&&t(n)},0)},...e}),n.install=Cn(n),n}var Gn={disableDefaults:!0,plugins:[Fn,zn,Un,Pn]},Kn=A({name:`nuxt:head`,enforce:`pre`,setup(e){Tt(e,Wn(Gn))}}),qn=/(:\w+)\([^)]+\)/g,Jn=/(:\w+)[?+*]/g,Yn=/:\w+/g,Xn=(e,t)=>t.path.replace(qn,`$1`).replace(Jn,`$1`).replace(Yn,t=>e.params[t.slice(1)]?.toString()||``),Zn=(e,t)=>{let n=e.route.matched.find(t=>t.components?.default===e.Component.type),r=t??n?.meta.key??(n&&Xn(e.route,n));return typeof r==`function`?r(e.route):r},Qn=(e,t)=>({default:()=>e?s(M,e===!0?{}:e,t):t});function $n(e){return Array.isArray(e)?e:[e]}var z=typeof document<`u`;function er(e){return typeof e==`object`||`displayName`in e||`props`in e||`__vccOpts`in e}function tr(e){return e.__esModule||e[Symbol.toStringTag]===`Module`||e.default&&er(e.default)}var B=Object.assign;function nr(e,t){let n={};for(let r in t){let i=t[r];n[r]=V(i)?i.map(e):e(i)}return n}var rr=()=>{},V=Array.isArray;function ir(e,t){let n={};for(let r in e)n[r]=r in t?t[r]:e[r];return n}var ar=/#/g,or=/&/g,sr=/\//g,cr=/=/g,lr=/\?/g,ur=/\+/g,dr=/%5B/g,fr=/%5D/g,pr=/%5E/g,mr=/%60/g,hr=/%7B/g,gr=/%7C/g,_r=/%7D/g,vr=/%20/g;function yr(e){return e==null?``:encodeURI(``+e).replace(gr,`|`).replace(dr,`[`).replace(fr,`]`)}function br(e){return yr(e).replace(hr,`{`).replace(_r,`}`).replace(pr,`^`)}function xr(e){return yr(e).replace(ur,`%2B`).replace(vr,`+`).replace(ar,`%23`).replace(or,`%26`).replace(mr,"`").replace(hr,`{`).replace(_r,`}`).replace(pr,`^`)}function Sr(e){return xr(e).replace(cr,`%3D`)}function Cr(e){return yr(e).replace(ar,`%23`).replace(lr,`%3F`)}function wr(e){return Cr(e).replace(sr,`%2F`)}function Tr(e){if(e==null)return null;try{return decodeURIComponent(``+e)}catch{}return``+e}var Er=/\/$/,Dr=e=>e.replace(Er,``);function Or(e,t,n=`/`){let r,i={},a=``,o=``,s=t.indexOf(`#`),c=t.indexOf(`?`);return c=s>=0&&c>s?-1:c,c>=0&&(r=t.slice(0,c),a=t.slice(c,s>0?s:t.length),i=e(a.slice(1))),s>=0&&(r||=t.slice(0,s),o=t.slice(s,t.length)),r=Fr(r??t,n),{fullPath:r+a+o,path:r,query:i,hash:Tr(o)}}function kr(e,t){let n=t.query?e(t.query):``;return t.path+(n&&`?`)+n+(t.hash||``)}function Ar(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||`/`}function jr(e,t,n){let r=t.matched.length-1,i=n.matched.length-1;return r>-1&&r===i&&H(t.matched[r],n.matched[i])&&Mr(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function H(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Mr(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!Nr(e[n],t[n]))return!1;return!0}function Nr(e,t){return V(e)?Pr(e,t):V(t)?Pr(t,e):e?.valueOf()===t?.valueOf()}function Pr(e,t){return V(t)?e.length===t.length&&e.every((e,n)=>e===t[n]):e.length===1&&e[0]===t}function Fr(e,t){if(e.startsWith(`/`))return e;if(!e)return t;let n=t.split(`/`),r=e.split(`/`),i=r[r.length-1];(i===`..`||i===`.`)&&r.push(``);let a=n.length-1,o,s;for(o=0;o1&&a--;else break}return n.slice(0,a).join(`/`)+`/`+r.slice(o).join(`/`)}var U={path:`/`,name:void 0,params:{},query:{},hash:``,fullPath:`/`,matched:[],meta:{},redirectedFrom:void 0},Ir=function(e){return e.pop=`pop`,e.push=`push`,e}({}),Lr=function(e){return e.back=`back`,e.forward=`forward`,e.unknown=``,e}({});function Rr(e){if(!e){if(z){let t=document.querySelector(`base`);e=t&&t.getAttribute(`href`)||`/`,e=e.replace(/^\w+:\/\/[^\/]+/,``)}else e=`/`}return e[0]!==`/`&&e[0]!==`#`&&(e=`/`+e),Dr(e)}var zr=/^[^#]+#/;function Br(e,t){return e.replace(zr,`#`)+t}function Vr(e,t){let n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}var Hr=()=>({left:window.scrollX,top:window.scrollY});function Ur(e){let t;if(`el`in e){let n=e.el,r=typeof n==`string`&&n.startsWith(`#`),i=typeof n==`string`?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!i)return;t=Vr(i,e)}else t=e;`scrollBehavior`in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left==null?window.scrollX:t.left,t.top==null?window.scrollY:t.top)}function Wr(e,t){return(history.state?history.state.position-t:-1)+e}var Gr=new Map;function Kr(e,t){Gr.set(e,t)}function qr(e){let t=Gr.get(e);return Gr.delete(e),t}function Jr(e){return typeof e==`string`||e&&typeof e==`object`}function Yr(e){return typeof e==`string`||typeof e==`symbol`}var W=function(e){return e[e.MATCHER_NOT_FOUND=1]=`MATCHER_NOT_FOUND`,e[e.NAVIGATION_GUARD_REDIRECT=2]=`NAVIGATION_GUARD_REDIRECT`,e[e.NAVIGATION_ABORTED=4]=`NAVIGATION_ABORTED`,e[e.NAVIGATION_CANCELLED=8]=`NAVIGATION_CANCELLED`,e[e.NAVIGATION_DUPLICATED=16]=`NAVIGATION_DUPLICATED`,e}({}),Xr=Symbol(``);W.MATCHER_NOT_FOUND,W.NAVIGATION_GUARD_REDIRECT,W.NAVIGATION_ABORTED,W.NAVIGATION_CANCELLED,W.NAVIGATION_DUPLICATED;function G(e,t){return B(Error(),{type:e,[Xr]:!0},t)}function K(e,t){return e instanceof Error&&Xr in e&&(t==null||!!(e.type&t))}function Zr(e){let t={};if(e===``||e===`?`)return t;let n=(e[0]===`?`?e.slice(1):e).split(`&`);for(let e=0;ee&&xr(e)):[r&&xr(r)]).forEach(e=>{e!==void 0&&(t+=(t.length?`&`:``)+n,e!=null&&(t+=`=`+e))})}return t}function $r(e){let t={};for(let n in e){let r=e[n];r!==void 0&&(t[n]=V(r)?r.map(e=>e==null?null:``+e):r==null?r:``+r)}return t}var ei=Symbol(``),ti=Symbol(``),ni=Symbol(``),ri=Symbol(``),ii=Symbol(``);function ai(){let e=[];function t(t){return e.push(t),()=>{let n=e.indexOf(t);n>-1&&e.splice(n,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function q(e,t,n,r,i,a=e=>e()){let o=r&&(r.enterCallbacks[i]=r.enterCallbacks[i]||[]);return()=>new Promise((s,c)=>{let l=e=>{e===!1?c(G(W.NAVIGATION_ABORTED,{from:n,to:t})):e instanceof Error?c(e):Jr(e)?c(G(W.NAVIGATION_GUARD_REDIRECT,{from:t,to:e})):(o&&r.enterCallbacks[i]===o&&typeof e==`function`&&o.push(e),s())},u=a(()=>e.call(r&&r.instances[i],t,n,l)),d=Promise.resolve(u);e.length<3&&(d=d.then(l)),d.catch(e=>c(e))})}function oi(e,t,n,r,i=e=>e()){let a=[];for(let o of e)for(let e in o.components){let s=o.components[e];if(t===`beforeRouteEnter`||o.instances[e]){if(er(s)){let c=(s.__vccOpts||s)[t];c&&a.push(q(c,n,r,o,e,i))}else{let c=s();a.push(()=>c.then(a=>{if(!a)throw Error(`Couldn't resolve component "${e}" at "${o.path}"`);let s=tr(a)?a.default:a;o.mods[e]=a,o.components[e]=s;let c=(s.__vccOpts||s)[t];return c&&q(c,n,r,o,e,i)()}))}}}return a}function si(e,t){let n=[],r=[],i=[],a=Math.max(t.matched.length,e.matched.length);for(let o=0;oH(e,a))?r.push(a):n.push(a));let s=e.matched[o];s&&(t.matched.find(e=>H(e,s))||i.push(s))}return[n,r,i]}var ci=()=>location.protocol+`//`+location.host;function li(e,t){let{pathname:n,search:r,hash:i}=t,a=e.indexOf(`#`);if(a>-1){let t=i.includes(e.slice(a))?e.slice(a).length:1,n=i.slice(t);return n[0]!==`/`&&(n=`/`+n),Ar(n,``)}return Ar(n,e)+r+i}function ui(e,t,n,r){let i=[],a=[],o=null,s=({state:a})=>{let s=li(e,location),c=n.value,l=t.value,u=0;if(a){if(n.value=s,t.value=a,o&&o===c){o=null;return}u=l?a.position-l.position:0}else r(s);i.forEach(e=>{e(n.value,c,{delta:u,type:Ir.pop,direction:u?u>0?Lr.forward:Lr.back:Lr.unknown})})};function c(){o=n.value}function l(e){i.push(e);let t=()=>{let t=i.indexOf(e);t>-1&&i.splice(t,1)};return a.push(t),t}function u(){if(document.visibilityState===`hidden`){let{history:e}=window;if(!e.state)return;e.replaceState(B({},e.state,{scroll:Hr()}),``)}}function d(){for(let e of a)e();a=[],window.removeEventListener(`popstate`,s),window.removeEventListener(`pagehide`,u),document.removeEventListener(`visibilitychange`,u)}return window.addEventListener(`popstate`,s),window.addEventListener(`pagehide`,u),document.addEventListener(`visibilitychange`,u),{pauseListeners:c,listen:l,destroy:d}}function di(e,t,n,r=!1,i=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:i?Hr():null}}function fi(e){let{history:t,location:n}=window,r={value:li(e,n)},i={value:t.state};i.value||a(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function a(r,a,o){let s=e.indexOf(`#`),c=s>-1?(n.host&&document.querySelector(`base`)?e:e.slice(s))+r:ci()+e+r;try{t[o?`replaceState`:`pushState`](a,``,c),i.value=a}catch(e){console.error(e),n[o?`replace`:`assign`](c)}}function o(e,n){a(e,B({},t.state,di(i.value.back,e,i.value.forward,!0),n,{position:i.value.position}),!0),r.value=e}function s(e,n){let o=B({},i.value,t.state,{forward:e,scroll:Hr()});a(o.current,o,!0),a(e,B({},di(r.value,e,null),{position:o.position+1},n),!1),r.value=e}return{location:r,state:i,push:s,replace:o}}function pi(e){e=Rr(e);let t=fi(e),n=ui(e,t.state,t.location,t.replace);function r(e,t=!0){t||n.pauseListeners(),history.go(e)}let i=B({location:``,base:e,go:r,createHref:Br.bind(null,e)},t,n);return Object.defineProperty(i,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(i,"state",{enumerable:!0,get:()=>t.state.value}),i}var J=function(e){return e[e.Static=0]=`Static`,e[e.Param=1]=`Param`,e[e.Group=2]=`Group`,e}({}),Y=function(e){return e[e.Static=0]=`Static`,e[e.Param=1]=`Param`,e[e.ParamRegExp=2]=`ParamRegExp`,e[e.ParamRegExpEnd=3]=`ParamRegExpEnd`,e[e.EscapeNext=4]=`EscapeNext`,e}(Y||{}),mi={type:J.Static,value:``},hi=/[a-zA-Z0-9_]/;function gi(e){if(!e)return[[]];if(e===`/`)return[[mi]];if(!e.startsWith(`/`))throw Error(`Invalid path "${e}"`);function t(e){throw Error(`ERR (${n})/"${l}": ${e}`)}let n=Y.Static,r=n,i=[],a;function o(){a&&i.push(a),a=[]}let s=0,c,l=``,u=``;function d(){l&&=(n===Y.Static?a.push({type:J.Static,value:l}):n===Y.Param||n===Y.ParamRegExp||n===Y.ParamRegExpEnd?(a.length>1&&(c===`*`||c===`+`)&&t(`A repeatable param (${l}) must be alone in its segment. eg: '/:ids+.`),a.push({type:J.Param,value:l,regexp:u,repeatable:c===`*`||c===`+`,optional:c===`*`||c===`?`})):t(`Invalid state to consume buffer`),``)}function f(){l+=c}for(;st.length?t.length===1&&t[0]===X.Static+X.Segment?1:-1:0}function Si(e,t){let n=0,r=e.score,i=t.score;for(;n0&&t[t.length-1]<0}var wi={strict:!1,end:!0,sensitive:!1};function Ti(e,t,n){let r=B(bi(gi(e.path),n),{record:e,parent:t,children:[],alias:[]});return t&&!r.record.aliasOf==!t.record.aliasOf&&t.children.push(r),r}function Ei(e,t){let n=[],r=new Map;t=ir(wi,t);function i(e){return r.get(e)}function a(e,n,r){let i=!r,s=Oi(e);s.aliasOf=r&&r.record;let l=ir(t,e),u=[s];if(`alias`in e){let t=typeof e.alias==`string`?[e.alias]:e.alias;for(let e of t)u.push(Oi(B({},s,{components:r?r.record.components:s.components,path:e,aliasOf:r?r.record:s})))}let d,f;for(let t of u){let{path:u}=t;if(n&&u[0]!==`/`){let e=n.record.path,r=e[e.length-1]===`/`?``:`/`;t.path=n.record.path+(u&&r+u)}if(d=Ti(t,n,l),r?r.alias.push(d):(f||=d,f!==d&&f.alias.push(d),i&&e.name&&!Ai(d)&&o(e.name)),Pi(d)&&c(d),s.children){let e=s.children;for(let t=0;t{o(f)}:rr}function o(e){if(Yr(e)){let t=r.get(e);t&&(r.delete(e),n.splice(n.indexOf(t),1),t.children.forEach(o),t.alias.forEach(o))}else{let t=n.indexOf(e);t>-1&&(n.splice(t,1),e.record.name&&r.delete(e.record.name),e.children.forEach(o),e.alias.forEach(o))}}function s(){return n}function c(e){let t=Mi(e,n);n.splice(t,0,e),e.record.name&&!Ai(e)&&r.set(e.record.name,e)}function l(e,t){let i,a={},o,s;if(`name`in e&&e.name){if(i=r.get(e.name),!i)throw G(W.MATCHER_NOT_FOUND,{location:e});s=i.record.name,a=B(Di(t.params,i.keys.filter(e=>!e.optional).concat(i.parent?i.parent.keys.filter(e=>e.optional):[]).map(e=>e.name)),e.params&&Di(e.params,i.keys.map(e=>e.name))),o=i.stringify(a)}else if(e.path!=null)o=e.path,i=n.find(e=>e.re.test(o)),i&&(a=i.parse(o),s=i.record.name);else{if(i=t.name?r.get(t.name):n.find(e=>e.re.test(t.path)),!i)throw G(W.MATCHER_NOT_FOUND,{location:e,currentLocation:t});s=i.record.name,a=B({},t.params,e.params),o=i.stringify(a)}let c=[],l=i;for(;l;)c.unshift(l.record),l=l.parent;return{name:s,path:o,params:a,matched:c,meta:ji(c)}}e.forEach(e=>a(e));function u(){n.length=0,r.clear()}return{addRoute:a,resolve:l,removeRoute:o,clearRoutes:u,getRoutes:s,getRecordMatcher:i}}function Di(e,t){let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}function Oi(e){let t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:ki(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:`components`in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function ki(e){let t={},n=e.props||!1;if(`component`in e)t.default=n;else for(let r in e.components)t[r]=typeof n==`object`?n[r]:n;return t}function Ai(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function ji(e){return e.reduce((e,t)=>B(e,t.meta),{})}function Mi(e,t){let n=0,r=t.length;for(;n!==r;){let i=n+r>>1;Si(e,t[i])<0?r=i:n=i+1}let i=Ni(e);return i&&(r=t.lastIndexOf(i,r-1)),r}function Ni(e){let t=e;for(;t=t.parent;)if(Pi(t)&&Si(e,t)===0)return t}function Pi({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Fi(e){let t=m(ni),n=m(ri),r=h(()=>{let n=g(e.to);return t.resolve(n)}),i=h(()=>{let{matched:e}=r.value,{length:t}=e,i=e[t-1],a=n.matched;if(!i||!a.length)return-1;let o=a.findIndex(H.bind(null,i));if(o>-1)return o;let s=Bi(e[t-2]);return t>1&&Bi(i)===s&&a[a.length-1].path!==s?a.findIndex(H.bind(null,e[t-2])):o}),a=h(()=>i.value>-1&&zi(n.params,r.value.params)),o=h(()=>i.value>-1&&i.value===n.matched.length-1&&Mr(n.params,r.value.params));function s(n={}){if(Ri(n)){let n=t[g(e.replace)?`replace`:`push`](g(e.to)).catch(rr);return e.viewTransition&&typeof document<`u`&&`startViewTransition`in document&&document.startViewTransition(()=>n),n}return Promise.resolve()}return{route:r,href:h(()=>r.value.href),isActive:a,isExactActive:o,navigate:s}}function Ii(e){return e.length===1?e[0]:e}var Li=f({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`},viewTransition:Boolean},useLink:Fi,setup(e,{slots:t}){let n=O(Fi(e)),{options:r}=m(ni),i=h(()=>({[Vi(e.activeClass,r.linkActiveClass,`router-link-active`)]:n.isActive,[Vi(e.exactActiveClass,r.linkExactActiveClass,`router-link-exact-active`)]:n.isExactActive}));return()=>{let r=t.default&&Ii(t.default(n));return e.custom?r:s(`a`,{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:i.value},r)}}});function Ri(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&(e.button===void 0||e.button===0)){if(e.currentTarget&&e.currentTarget.getAttribute){let t=e.currentTarget.getAttribute(`target`);if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function zi(e,t){for(let n in t){let r=t[n],i=e[n];if(typeof r==`string`){if(r!==i)return!1}else if(!V(i)||i.length!==r.length||r.some((e,t)=>e.valueOf()!==i[t].valueOf()))return!1}return!0}function Bi(e){return e?e.aliasOf?e.aliasOf.path:e.path:``}var Vi=(e,t,n)=>e??t??n,Hi=f({name:`RouterView`,inheritAttrs:!1,props:{name:{type:String,default:`default`},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){let r=m(ii),i=h(()=>e.route||r.value),a=m(ti,0),o=h(()=>{let e=g(a),{matched:t}=i.value,n;for(;(n=t[e])&&!n.components;)e++;return e}),c=h(()=>i.value.matched[o.value]);x(ti,h(()=>o.value+1)),x(ei,c),x(ii,i);let l=ie();return ue(()=>[l.value,c.value,e.name],([e,t,n],[r,i,a])=>{t&&(t.instances[n]=e,i&&i!==t&&e&&e===r&&(t.leaveGuards.size||(t.leaveGuards=i.leaveGuards),t.updateGuards.size||(t.updateGuards=i.updateGuards))),e&&t&&(!i||!H(t,i)||!r)&&(t.enterCallbacks[n]||[]).forEach(t=>t(e))},{flush:`post`}),()=>{let r=i.value,a=e.name,o=c.value,u=o&&o.components[a];if(!u)return Ui(n.default,{Component:u,route:r});let d=o.props[a],f=d?d===!0?r.params:typeof d==`function`?d(r):d:null,p=s(u,B({},f,t,{onVnodeUnmounted:e=>{e.component.isUnmounted&&(o.instances[a]=null)},ref:l}));return Ui(n.default,{Component:p,route:r})||p}}});function Ui(e,t){if(!e)return null;let n=e(t);return n.length===1?n[0]:n}var Wi=Hi;function Gi(e){let t=Ei(e.routes,e),n=e.parseQuery||Zr,r=e.stringifyQuery||Qr,i=e.history,a=ai(),o=ai(),s=ai(),c=fe(U),l=U;z&&e.scrollBehavior&&`scrollRestoration`in history&&(history.scrollRestoration=`manual`);let u=nr.bind(null,e=>``+e),d=nr.bind(null,wr),f=nr.bind(null,Tr);function p(e,n){let r,i;return Yr(e)?(r=t.getRecordMatcher(e),i=n):i=e,t.addRoute(i,r)}function m(e){let n=t.getRecordMatcher(e);n&&t.removeRoute(n)}function h(){return t.getRoutes().map(e=>e.record)}function _(e){return!!t.getRecordMatcher(e)}function v(e,a){if(a=B({},a||c.value),typeof e==`string`){let r=Or(n,e,a.path),o=t.resolve({path:r.path},a),s=i.createHref(r.fullPath);return B(r,o,{params:f(o.params),hash:Tr(r.hash),redirectedFrom:void 0,href:s})}let o;if(e.path!=null)o=B({},e,{path:Or(n,e.path,a.path).path});else{let t=B({},e.params);for(let e in t)t[e]??delete t[e];o=B({},e,{params:d(t)}),a.params=d(a.params)}let s=t.resolve(o,a),l=e.hash||``;s.params=u(f(s.params));let p=kr(r,B({},e,{hash:br(l),path:s.path})),m=i.createHref(p);return B({fullPath:p,hash:l,query:r===Qr?$r(e.query):e.query||{}},s,{redirectedFrom:void 0,href:m})}function y(e){return typeof e==`string`?Or(n,e,c.value.path):B({},e)}function ee(e,t){if(l!==e)return G(W.NAVIGATION_CANCELLED,{from:t,to:e})}function x(e){return C(e)}function te(e){return x(B(y(e),{replace:!0}))}function S(e,t){let n=e.matched[e.matched.length-1];if(n&&n.redirect){let{redirect:r}=n,i=typeof r==`function`?r(e,t):r;return typeof i==`string`&&(i=i.includes(`?`)||i.includes(`#`)?i=y(i):{path:i},i.params={}),B({query:e.query,hash:e.hash,params:i.path==null?e.params:{}},i)}}function C(e,t){let n=l=v(e),i=c.value,a=e.state,o=e.force,s=e.replace===!0,u=S(n,i);if(u)return C(B(y(u),{state:typeof u==`object`?B({},a,u.state):a,force:o,replace:s}),t||n);let d=n;d.redirectedFrom=t;let f;return!o&&jr(r,i,n)&&(f=G(W.NAVIGATION_DUPLICATED,{to:d,from:i}),k(i,i,!0,!1)),(f?Promise.resolve(f):E(d,i)).catch(e=>K(e)?K(e,W.NAVIGATION_GUARD_REDIRECT)?e:ue(e):ce(e,d,i)).then(e=>{if(e){if(K(e,W.NAVIGATION_GUARD_REDIRECT))return C(B({replace:s},y(e.to),{state:typeof e.to==`object`?B({},a,e.to.state):a,force:o}),t||d)}else e=ie(d,i,!0,s,a);return ne(d,i,e),e})}function w(e,t){let n=ee(e,t);return n?Promise.reject(n):Promise.resolve()}function T(e){let t=j.values().next().value;return t&&typeof t.runWithContext==`function`?t.runWithContext(e):e()}function E(e,t){let n,[r,i,s]=si(e,t);n=oi(r.reverse(),`beforeRouteLeave`,e,t);for(let i of r)i.leaveGuards.forEach(r=>{n.push(q(r,e,t))});let c=w.bind(null,e,t);return n.push(c),N(n).then(()=>{n=[];for(let r of a.list())n.push(q(r,e,t));return n.push(c),N(n)}).then(()=>{n=oi(i,`beforeRouteUpdate`,e,t);for(let r of i)r.updateGuards.forEach(r=>{n.push(q(r,e,t))});return n.push(c),N(n)}).then(()=>{n=[];for(let r of s)if(r.beforeEnter){if(V(r.beforeEnter))for(let i of r.beforeEnter)n.push(q(i,e,t));else n.push(q(r.beforeEnter,e,t))}return n.push(c),N(n)}).then(()=>(e.matched.forEach(e=>e.enterCallbacks={}),n=oi(s,`beforeRouteEnter`,e,t,T),n.push(c),N(n))).then(()=>{n=[];for(let r of o.list())n.push(q(r,e,t));return n.push(c),N(n)}).catch(e=>K(e,W.NAVIGATION_CANCELLED)?e:Promise.reject(e))}function ne(e,t,n){s.list().forEach(r=>T(()=>r(e,t,n)))}function ie(e,t,n,r,a){let o=ee(e,t);if(o)return o;let s=t===U,l=z?history.state:{};n&&(r||s?i.replace(e.fullPath,B({scroll:s&&l&&l.scroll},a)):i.push(e.fullPath,a)),c.value=e,k(e,t,n,s),ue()}let D;function ae(){D||=i.listen((e,t,n)=>{if(!M.listening)return;let r=v(e),a=S(r,M.currentRoute.value);if(a){C(B(a,{replace:!0,force:!0}),r).catch(rr);return}l=r;let o=c.value;z&&Kr(Wr(o.fullPath,n.delta),Hr()),E(r,o).catch(e=>K(e,W.NAVIGATION_ABORTED|W.NAVIGATION_CANCELLED)?e:K(e,W.NAVIGATION_GUARD_REDIRECT)?(C(B(y(e.to),{force:!0}),r).then(e=>{K(e,W.NAVIGATION_ABORTED|W.NAVIGATION_DUPLICATED)&&!n.delta&&n.type===Ir.pop&&i.go(-1,!1)}).catch(rr),Promise.reject()):(n.delta&&i.go(-n.delta,!1),ce(e,r,o))).then(e=>{e||=ie(r,o,!1),e&&(n.delta&&!K(e,W.NAVIGATION_CANCELLED)?i.go(-n.delta,!1):n.type===Ir.pop&&K(e,W.NAVIGATION_ABORTED|W.NAVIGATION_DUPLICATED)&&i.go(-1,!1)),ne(r,o,e)}).catch(rr)})}let oe=ai(),se=ai(),O;function ce(e,t,n){ue(e);let r=se.list();return r.length?r.forEach(r=>r(e,t,n)):console.error(e),Promise.reject(e)}function le(){return O&&c.value!==U?Promise.resolve():new Promise((e,t)=>{oe.add([e,t])})}function ue(e){return O||(O=!e,ae(),oe.list().forEach(([t,n])=>e?n(e):t()),oe.reset()),e}function k(t,n,r,i){let{scrollBehavior:a}=e;if(!z||!a)return Promise.resolve();let o=!r&&qr(Wr(t.fullPath,0))||(i||!r)&&history.state&&history.state.scroll||null;return b().then(()=>a(t,n,o)).then(e=>e&&Ur(e)).catch(e=>ce(e,t,n))}let A=e=>i.go(e),de,j=new Set,M={currentRoute:c,listening:!0,addRoute:p,removeRoute:m,clearRoutes:t.clearRoutes,hasRoute:_,getRoutes:h,resolve:v,options:e,push:x,replace:te,go:A,back:()=>A(-1),forward:()=>A(1),beforeEach:a.add,beforeResolve:o.add,afterEach:s.add,onError:se.add,isReady:le,install(e){e.component(`RouterLink`,Li),e.component(`RouterView`,Wi),e.config.globalProperties.$router=M,Object.defineProperty(e.config.globalProperties,"$route",{enumerable:!0,get:()=>g(c)}),z&&!de&&c.value===U&&(de=!0,x(i.location).catch(e=>{}));let t={};for(let e in U)Object.defineProperty(t,e,{get:()=>c.value[e],enumerable:!0});e.provide(ni,M),e.provide(ri,re(t)),e.provide(ii,c);let n=e.unmount;j.add(e),e.unmount=function(){j.delete(e),j.size<1&&(l=U,D&&D(),D=null,c.value=U,de=!1,O=!1),n()}}};function N(e){return e.reduce((e,t)=>e.then(()=>T(t)),Promise.resolve())}return M}function Ki(e){return m(ri)}var qi=(e,t)=>({default:()=>e?s(ve,e===!0?{}:e,t):t.default?.()}),Ji=/(:\w+)\([^)]+\)/g,Yi=/(:\w+)[?+*]/g,Xi=/:\w+/g;function Zi(e){let t=e?.meta.key??e.path.replace(Ji,`$1`).replace(Yi,`$1`).replace(Xi,t=>e.params[t.slice(1)]?.toString()||``);return typeof t==`function`?t(e):t}function Qi(e,t){return e===t||t===U?!1:Zi(e)!==Zi(t)||!e.matched.every((e,n)=>e.components&&e.components.default===t.matched[n]?.components?.default)}function $i(e){return Array.isArray(e)?e:[e]}function ea(e){let t=[];for(let n of e)n&&t.push({...n,onAfterLeave:n.onAfterLeave?$i(n.onAfterLeave):void 0,onBeforeLeave:n.onBeforeLeave?$i(n.onBeforeLeave):void 0});return Ie(...t)}var ta={scrollBehavior(e,t,n){let r=D(),i=F(),a=i.options?.scrollBehaviorType??`auto`;return e.path.replace(/\/$/,``)===t.path.replace(/\/$/,``)?t.hash&&!e.hash?n??{left:0,top:0}:e.hash?{el:e.hash,top:na(e.hash),behavior:a}:!1:(typeof e.meta.scrollToTop==`function`?e.meta.scrollToTop(e,t):e.meta.scrollToTop)===!1?!1:t===U?ra(e,t,n,a):new Promise(o=>{let s=()=>{requestAnimationFrame(()=>{if(i.currentRoute.value.fullPath!==e.fullPath){o(!1);return}o(ra(e,t,n,a))})};r.hooks.hookOnce(`page:loading:end`,()=>{let e=r[`~transitionPromise`];e?e.then(s):s()})})}};function na(e){try{let t=document.querySelector(e);if(t)return(Number.parseFloat(getComputedStyle(t).scrollMarginTop)||0)+(Number.parseFloat(getComputedStyle(document.documentElement).scrollPaddingTop)||0)}catch{}return 0}function ra(e,t,n,r){return n||(e.hash?{el:e.hash,top:na(e.hash),behavior:Qi(e,t)?r:`instant`}:{left:0,top:0})}var Z={hashMode:!1,scrollBehaviorType:`auto`,...ta},ia=ke(async e=>{let t,n;if(!e.meta?.validate)return;let r=([t,n]=k(()=>Promise.resolve(e.meta.validate(e))),t=await t,n(),t);if(r!==!0)return Pe({fatal:!0,status:r&&(r.status||r.statusCode)||404,statusText:r&&(r.statusText||r.statusMessage)||`Page Not Found: ${e.fullPath}`,data:{path:e.fullPath}})},1),aa=u({docsBase:ee,reporters:o}),oa=(e,t)=>[],sa=oa,ca=function(e){if(!e.includes(`%`))return e;let t=e.indexOf(`?`),n=t===-1?e:e.slice(0,t);try{return t===-1?decodeURI(n):decodeURI(n)+e.slice(t)}catch{return e}},la=(e,t)=>{if(typeof e!=`string`)return e;let n=ca(e);return t?n.toLowerCase():n},ua=e=>Z.sensitive?Ie({},...oa(``,la(e,!1)).map(e=>e.data).reverse()):Ie({},...sa(``,la(e,!0)).map(e=>e.data).reverse()),da=`modulepreload`,fa=function(e,t){return new URL(e,t).href},pa={},Q=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=fa(t,n),t=s(t),t in pa)return;pa[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:da,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}).filter(e=>e!==void 0))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},ma=wt,ha=ua,ga;function _a(){let e;return e=ma(St(`builds/meta/${S().app.buildId}.json`),{responseType:`json`}).then(e=>{if(!e||typeof e!=`object`||!Array.isArray(e.prerendered))throw aa.NUXT_E5004();return e}),ga=e,e.catch(t=>{ga===e&&(ga=void 0),aa.NUXT_E5002({cause:t})}),e}function va(){return ga||_a()}function ya(e){let t=typeof e==`string`?e:e.path;try{return ha(t)}catch(e){return aa.NUXT_E5003({path:t,cause:e}),{}}}var ba=[ia,ke(e=>{let t=ya({path:e.path});if(t.redirect){let n=t.redirect.includes(`#`)?t.redirect:t.redirect+e.hash;return Ne(n,{acceptRelative:!0})?(window.location.href=n,!1):n}})],xa={},Sa=[{name:`config`,path:`/config`,component:()=>Q(()=>import(`./BB0691XW.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9]),import.meta.url)},{name:`debug`,path:`/debug`,component:()=>Q(()=>import(`./C9QLCt9z.js`),__vite__mapDeps([10,1,3,2,11,9,6,7,8,12]),import.meta.url)},{name:`devices`,path:`/devices`,component:()=>Q(()=>import(`./CU1Fk5fy.js`),__vite__mapDeps([13,1,3,2,14,11,9,15,5,6,16,8,12,17]),import.meta.url)},{name:`health`,path:`/health`,component:()=>Q(()=>import(`./BaMR1-Wb.js`),__vite__mapDeps([18,1,2,3,19,14,5,6,16,20]),import.meta.url)},{name:`logs`,path:`/logs`,component:()=>Q(()=>import(`./C5KwrKiw.js`),__vite__mapDeps([21,1,2,3,14,11,9,5,22,6,16,20]),import.meta.url)},{name:`stats`,path:`/stats`,component:()=>Q(()=>import(`./BnbMNd1_.js`),__vite__mapDeps([23,1,3,2,14,4,5,22,9,6,16,20]),import.meta.url)},{name:`tokens`,path:`/tokens`,component:()=>Q(()=>import(`./Cy6fBfr9.js`),__vite__mapDeps([24,1,3,2,14,11,9,15,6]),import.meta.url)},{name:`upstreams`,path:`/upstreams`,component:()=>Q(()=>import(`./Cjk4IpeB.js`),__vite__mapDeps([25,1,2,3,14,11,9,15,6,16,12,17]),import.meta.url)},{name:`index`,path:`/`,component:()=>Q(()=>import(`./C1UVkkyo.js`),__vite__mapDeps([26,1,3,27,2,6,20]),import.meta.url)}];function Ca(e,t,n){let{pathname:r,search:i,hash:a}=t,o=e.indexOf(`#`);if(o>-1){let t=a.includes(e.slice(o))?e.slice(o).length:1,n=a.slice(t);return n[0]!==`/`&&(n=`/`+n),We(n,``)}let s=We(r,e),c=!n||Me(s,n)?s:n;return c+(c.includes(`?`)?``:i)+a}var wa=A({name:`nuxt:router`,enforce:`pre`,async setup(e){let t,n,r=S().app.baseURL,i=Z.history?.(r)??pi(r),a=Z.routes?([t,n]=k(()=>Z.routes(Sa)),t=await t,n(),t??Sa):Sa,o,s=Gi({...Z,scrollBehavior:(e,t,n)=>{if(t===U){o=n;return}if(Z.scrollBehavior){if(s.options.scrollBehavior=Z.scrollBehavior,`scrollRestoration`in window.history){let e=s.beforeEach(()=>{e(),window.history.scrollRestoration=`manual`})}return Z.scrollBehavior(e,U,o||n)}},history:i,routes:a});`scrollRestoration`in window.history&&(window.history.scrollRestoration=`auto`),e.vueApp.use(s);let c=fe(s.currentRoute.value);s.afterEach((e,t)=>{c.value=t}),Object.defineProperty(e.vueApp.config.globalProperties,"previousRoute",{get:()=>c.value});let l=Ca(r,window.location,e.payload.path),u=fe(s.currentRoute.value),d=()=>{u.value=s.currentRoute.value};s.afterEach((e,t)=>{let n=e.matched.at(-1)?.components?.default,r=t.matched.at(-1)?.components?.default;if(n===r){Zn({route:e,Component:{type:n}})===Zn({route:t,Component:{type:r}})&&d();return}e.matched.lengthe.components?.default===t.matched[n]?.components?.default)&&d()});let f={sync:d};for(let e in u.value)Object.defineProperty(f,e,{get:()=>u.value[e],enumerable:!0});e._route=re(f),e._middleware||={global:[],named:{}};let p=Be();s.afterEach(async(t,n,r)=>{delete e._processingMiddleware,!e.isHydrating&&p.value&&await e.runWithContext(ze),r&&await e.callHook(`page:loading:end`)});try{[t,n]=k(()=>s.isReady()),await t,n()}catch(r){[t,n]=k(()=>Le(e,r)),await t,n()}let m=l===s.currentRoute.value.fullPath?s.currentRoute.value:s.resolve(l),h=s.currentRoute.value.fullPath,g=e.isHydrating&&e.payload.prerenderedAt&&e.payload.path&&l!==e.payload.path&&Me(s.currentRoute.value.path,e.payload.path);d();function _(t){!e.isHydrating&&t.fullPath!==Ca(r,window.location)&&i.push(t.fullPath)}let v=e.payload.state._layout;return s.beforeEach(async(t,n)=>{await e.callHook(`page:loading:start`),t.meta=O(t.meta),e.isHydrating&&v&&!E(t.meta.layout)&&(t.meta.layout=v),e._processingMiddleware=!0;{let r=new Set([...ba,...e._middleware.global]);for(let e of t.matched){let t=e.meta.middleware;if(t)for(let e of $n(t))r.add(e)}let i=ya({path:t.path});if(i.appMiddleware)for(let e in i.appMiddleware)i.appMiddleware[e]?r.add(e):r.delete(e);for(let i of r){let r=typeof i==`string`?e._middleware.named[i]||await xa[i]?.().then(e=>e.default||e):i;if(!r)throw Se.NUXT_E2004({entry:String(i),validMiddleware:void 0});try{let i=await e.runWithContext(()=>r(t,n));if(!e.payload.serverRendered&&e.isHydrating&&(i===!1||i instanceof Error)){let t=i||Pe({status:404,statusText:`Page Not Found: ${l}`});return await e.runWithContext(()=>Re(t)),!1}if(i===!0)continue;if(i===!1)return i;if(i)return De(i)&&i.fatal&&(await e.runWithContext(()=>Re(i)),_(t)),i}catch(n){let r=Pe(n);return r.fatal&&(await e.runWithContext(()=>Re(r)),_(t)),r}}}}),s.onError(async()=>{delete e._processingMiddleware,await e.callHook(`page:loading:end`)}),s.afterEach(t=>{if(t.matched.length===0&&!p.value)return e.runWithContext(()=>Re(Pe({status:404,fatal:!1,statusText:`Page not found: ${t.fullPath}`,data:{path:t.fullPath}})))}),e.hooks.hookOnce(`app:created`,async()=>{try{if(`name`in m&&(m.name=void 0),s.currentRoute.value.fullPath===h){if(g){let t=s.resolve(e.payload.path);`name`in t&&(t.name=void 0),await s.replace({...t,force:!0});let n=()=>{e[`~restoreDeferredRoute`]&&(e[`~restoreDeferredRoute`]=void 0,s.currentRoute.value=s.resolve(l),d(),s.replace({...m,force:!0}).catch(()=>{}))};e[`~restoreDeferredRoute`]=n,e.hooks.hookOnce(`app:suspense:resolve`,n)}else await s.replace({...m,force:!0})}s.options.scrollBehavior=Z.scrollBehavior}catch(t){await Le(e,t)}}),{provide:{router:s}}}},1),Ta=globalThis.requestIdleCallback||(e=>{let t=Date.now(),n={didTimeout:!1,timeRemaining:()=>Math.max(0,50-(Date.now()-t))};return setTimeout(()=>{e(n)},1)}),Ea=globalThis.cancelIdleCallback||(e=>{clearTimeout(e)}),Da=e=>{let t=D();t.isHydrating?t.hooks.hookOnce(`app:suspense:resolve`,()=>{Ta(()=>e())}):Ta(()=>e())},Oa=A(()=>{let e=F();Da(()=>{e.beforeResolve(async()=>{await new Promise(e=>{setTimeout(e,100),requestAnimationFrame(()=>{setTimeout(e,0)})})})})}),ka=A(e=>{let t;async function n(){let r;try{r=await va()}catch(e){let t=e;if(!(`status`in t&&(t.status===404||t.status===403)))throw t}t&&clearTimeout(t),t=setTimeout(n,T);try{let n=await wt(St(`builds/latest.json`)+`?${Date.now()}`);n.id!==r?.id&&(e.hooks.callHook(`app:manifest:update`,n),t&&clearTimeout(t))}catch{}}Da(()=>{t=setTimeout(n,T)})});function Aa(e={}){let t=e.path||window.location.pathname,n=new URL(t,window.location.href);if(n.host!==window.location.host)throw Se.NUXT_E2010({path:t});if(n.protocol&&Ee(n.protocol))throw Se.NUXT_E2002({toPath:t,protocol:n.protocol});let r={};try{r=JSON.parse(sessionStorage.getItem(`nuxt:reload`)||`{}`)}catch{}if(e.force||r?.path!==t||r?.expires{t=!1}),e.hook(`app:chunkError`,()=>{t&&ye(navigator.userAgent)&&Aa()})}}),Ma=A({name:`nuxt:chunk-reload`,setup(e){let t=F(),n=S(),r=new Set;t.beforeEach(()=>{r.clear()}),e.hook(`app:chunkError`,({error:e})=>{r.add(e)});function i(e){Aa({path:Ke(n.app.baseURL,e.fullPath),persistState:!0})}e.hook(`app:manifest:update`,()=>{t.beforeResolve(i)}),t.onError((e,t)=>{r.has(e)&&i(t)})}});function Na(e){if(e?.__asyncLoader&&!e.__asyncResolved)return e.__asyncLoader()}async function Pa(e,t=F()){let{path:n,matched:r}=t.resolve(e);if(!r.length||(t._routePreloaded||=new Set,t._routePreloaded.has(n)))return;let i=t._preloadPromises||=[];if(i.length>4)return Promise.all(i).then(()=>Pa(e,t));t._routePreloaded.add(n);for(let e of r){let t=e.components?.default;if(typeof t!=`function`)continue;let n=Promise.resolve(t()).catch(()=>{}).finally(()=>i.splice(i.indexOf(n),1));i.push(n)}await Promise.all(i)}var Fa=(...e)=>e.find(e=>e!==void 0);function Ia(e){let t=e.replace(/[\u0000-\u001F\s]+/g,``);for(;t.toLowerCase().startsWith(`view-source:`);)t=t.slice(12);let n=t.indexOf(`:`);return n>0&&Ee(t.slice(0,n+1))?null:e}function La(e){let t=e.componentName||`NuxtLink`;function n(e){return typeof e==`string`&&e.startsWith(`#`)}function r(t,n,r){let i=r??e.trailingSlash;if(!t||i!==`append`&&i!==`remove`)return t;if(typeof t==`string`)return za(t,i);let a=`path`in t&&t.path!==void 0?t.path:n(t).path;return{...t,name:void 0,path:za(a,i)}}function i(t){let i=F(),a=S(),o=h(()=>!!g(t.target)&&g(t.target)!==`_self`),s=h(()=>{let e=g(t.to)||g(t.href)||``;return typeof e==`string`&&Ne(e,{acceptRelative:!0})}),c=p(`RouterLink`),l=c&&typeof c!=`string`?c.useLink:void 0,u=h(()=>{if(g(t.external))return!0;let e=g(t.to)||g(t.href)||``;return typeof e==`object`?!1:e===``||s.value}),d=h(()=>{let e=g(t.to)||g(t.href)||``;return u.value?e:r(e,i.resolve,g(t.trailingSlash))}),f=u.value?void 0:l?.({...t,to:d,viewTransition:g(t.viewTransition)}),m=h(()=>{let r=g(t.trailingSlash)??e.trailingSlash;if(!d.value||s.value||n(d.value)){let e=d.value;return typeof e==`string`?Ia(e):e}if(u.value){let e=typeof d.value==`object`&&`path`in d.value?Ae(d.value):d.value,t=typeof e==`object`?i.resolve(e).href:e,n=typeof t==`string`?Ia(t):t;return n===null?null:za(n,r)}return typeof d.value==`object`?i.resolve(d.value)?.href??null:za(Ke(a.app.baseURL,d.value),r)});return{to:d,hasTarget:o,isAbsoluteUrl:s,isExternal:u,href:m,isActive:f?.isActive??h(()=>d.value===i.currentRoute.value.path),isExactActive:f?.isExactActive??h(()=>d.value===i.currentRoute.value.path),route:f?.route??h(()=>i.resolve(d.value)),async navigate(e){m.value!==null&&await He(m.value,{replace:g(t.replace),external:u.value||o.value})}}}return f({name:t,props:{to:{type:[String,Object],default:void 0,required:!1},href:{type:[String,Object],default:void 0,required:!1},target:{type:String,default:void 0,required:!1},rel:{type:String,default:void 0,required:!1},noRel:{type:Boolean,default:void 0,required:!1},prefetch:{type:Boolean,default:void 0,required:!1},prefetchOn:{type:[String,Object],default:void 0,required:!1},noPrefetch:{type:Boolean,default:void 0,required:!1},activeClass:{type:String,default:void 0,required:!1},exactActiveClass:{type:String,default:void 0,required:!1},prefetchedClass:{type:String,default:void 0,required:!1},replace:{type:Boolean,default:void 0,required:!1},ariaCurrentValue:{type:String,default:void 0,required:!1},external:{type:Boolean,default:void 0,required:!1},custom:{type:Boolean,default:void 0,required:!1},trailingSlash:{type:String,default:void 0,required:!1}},useLink:i,setup(t,{slots:r}){let a=F(),{to:o,href:c,navigate:u,isExternal:d,hasTarget:f,isAbsoluteUrl:m}=i(t),h=fe(!1),g=ie(null),_=e=>{g.value=t.custom?e?.$el?.nextElementSibling:e?.$el};function y(n){return!!(!h.value&&(typeof t.prefetchOn==`string`?t.prefetchOn===n:t.prefetchOn?.[n]??e.prefetchOn?.[n])&&(t.prefetch??e.prefetch)!==!1&&t.noPrefetch!==!0&&t.target!==`_blank`&&!Ha())}async function b(e=D()){if(h.value||c.value===null)return;h.value=!0;let t=typeof o.value==`string`?o.value:d.value?Ae(o.value):a.resolve(o.value).fullPath,n=d.value?new URL(t,window.location.href).href:t;await Promise.all([e.hooks.callHook(`link:prefetch`,n)?.catch(()=>{}),!d.value&&!f.value&&Pa(o.value,a).catch(()=>{})])}if(!t.custom&&y(`visibility`)){let e=D(),t,n=null;l(()=>{let r=Ba();Da(()=>{t=Ta(()=>{g?.value?.tagName&&(n=r.observe(g.value,async()=>{n?.(),n=null,await b(e)}))})})}),v(()=>{t&&Ea(t),n?.(),n=null})}return()=>{let i=t.target||null,l=Fa(t.noRel?``:t.rel,e.externalRelAttribute,m.value||f.value?`noopener noreferrer`:``)||null,v=e=>({href:c.value,navigate:u,get route(){if(!c.value)return;let e=new URL(c.value,window.location.href);return{path:e.pathname,fullPath:e.pathname,get query(){return Oe(e.search)},hash:e.hash,params:{},name:void 0,matched:[],redirectedFrom:void 0,meta:{},href:c.value}},rel:l,target:i,isExternal:d.value||f.value,isActive:!1,isExactActive:!1,...e,prefetch:b,prefetched:h.value,shouldPrefetch:y});if(!d.value&&!f.value&&!n(o.value)){let n={ref:_,to:o.value,activeClass:t.activeClass||e.activeClass,exactActiveClass:t.exactActiveClass||e.exactActiveClass,replace:t.replace,ariaCurrentValue:t.ariaCurrentValue,custom:t.custom};return t.custom||(y(`interaction`)&&(n.onPointerenter=b.bind(null,void 0),n.onFocus=b.bind(null,void 0)),h.value&&(n.class=t.prefetchedClass||e.prefetchedClass),n.rel=t.rel||void 0),s(p(`RouterLink`),n,t.custom&&r.default?{default:e=>r.default(v(e))}:r.default)}return t.custom?r.default?r.default(v()):null:s(`a`,{ref:g,href:c.value||null,rel:l,target:i,onClick:async e=>{if(!(d.value||f.value)){e.preventDefault();try{let e=Fe(c.value??``);return await(t.replace?a.replace(e):a.push(e))}finally{if(n(o.value)){let e=o.value.slice(1),t=e;try{t=decodeURIComponent(e)}catch{}document.getElementById(t)?.focus()}}}}},r.default?.())}}})}var Ra=La(j);function za(e,t){if(t!==`append`&&t!==`remove`)return e;let n=t===`append`?be:Te;return Ne(e)&&!e.startsWith(`http`)?e:n(e,!0)}function Ba(){let e=D();if(e._observer)return e._observer;let t=null,n=new Map;return e._observer={observe:(e,r)=>(t||=new IntersectionObserver(e=>{for(let t of e){let e=n.get(t.target);(t.isIntersecting||t.intersectionRatio>0)&&e&&e()}}),n.set(e,r),t.observe(e),()=>{n.delete(e),t?.unobserve(e),n.size===0&&(t?.disconnect(),t=null)})}}var Va=/2g/;function Ha(){let e=navigator.connection;return!!(e&&(e.saveData||Va.test(e.effectiveType)))}var Ua=A({name:`nuxt:island-link-navigation`,setup(e){}}),Wa=A({name:`nuxt:global-components`}),$={default:ae(()=>Q(()=>import(`./--2IuJIQ.js`).then(e=>e.default||e),__vite__mapDeps([28,1,3,27,2,19]),import.meta.url))},Ga=[Kn,wa,Oa,ka,ja,Ma,Ua,Wa,A({name:`nuxt:prefetch`,setup(e){let t=F();e.hooks.hook(`app:mounted`,()=>{t.beforeEach(async e=>{let t=e?.meta?.layout;t&&typeof $[t]==`function`&&await $[t]()})}),e.hooks.hook(`link:prefetch`,e=>{if(Ne(e))return;let n=t.resolve(e);if(!n)return;let r=n.meta.layout,i=$n(n.meta.middleware).filter(e=>typeof e==`string`);for(let e of i){let t=xa[e];typeof t==`function`&&t()}typeof r==`string`&&r in $&&Na($[r])})}})],Ka=(e=`RouteProvider`)=>f({name:e,props:{route:{type:Object,required:!0},vnode:Object,vnodeRef:Object,renderKey:String,trackRootNodes:Boolean,routeRecord:Object},setup(e){let t=e.renderKey,n=e.route,r={};for(let i in e.route)Object.defineProperty(r,i,{get:()=>t===e.renderKey?e.route[i]:n[i],enumerable:!0});return x(P,re(r)),()=>e.vnode?s(e.vnode,{ref:e.vnodeRef}):e.vnode}}),qa=Ka(),Ja=new WeakMap,Ya=f({name:`NuxtPage`,inheritAttrs:!1,props:{name:{type:String},transition:{type:[Boolean,Object],default:void 0},keepalive:{type:[Boolean,Object],default:void 0},route:{type:Object},pageKey:{type:[Function,String],default:null}},setup(e,{attrs:t,slots:n,expose:r}){let i=D(),a=ie(),o=m(P,null),c=new Set,l;r({pageRef:a});let u=m(xe,null),d,f=i.deferHydration(),p=!1,h=!1,g,_=0;if(i.isHydrating){let e=i.hooks.hookOnce(`app:error`,f),t=F().beforeEach(()=>{e(),t()})}e.pageKey&&ue(()=>e.pageKey,(e,t)=>{e!==t&&i.callHook(`page:loading:start`)});let y=!1;{let e=F().beforeResolve(()=>{y=!1});v(()=>{e(),f()})}return()=>s(Wi,{name:e.name,route:e.route,...t},{default:Qa(t=>{let r=Xa(o,t.route,t.Component),m=o&&o.matched.length===t.route.matched.length;if(!t.Component){if(d&&!m&&!eo(d))return d;f();return}if(d&&u&&!eo(d)&&!u.isCurrent(t.route))return d;if(r&&o&&(!u||u?.isCurrent(o)))return(m||d)&&!eo(d)?d:null;let v=Zn(t,e.pageKey),ee=Za(o,t.route,t.Component);!i.isHydrating&&l===v&&!ee&&b(()=>{y||(y=!0,i.callHook(`page:loading:end`))}),p&&l!==v&&h&&_++,l=v;let x=!!(e.transition??t.route.meta.pageTransition??C),te=x&&ea([e.transition,t.route.meta.pageTransition,C,{onAfterLeave(){i[`~transitionFinish`]?.(),delete i[`~transitionFinish`],delete i[`~transitionPromise`],i.callHook(`page:transition:finish`,t.Component)}}]),S=e.keepalive??t.route.meta.keepalive??!1,w=t.Component.type,T=w.name||w.__name;t.route.meta.keepalive&&T&&c.add(T);let E;if(c.size>0&&e.keepalive==null&&(!S||typeof S==`object`&&S&&S.include)){let e=typeof S==`object`&&S?{...S}:{},t=e.include?Array.isArray(e.include)?e.include:[e.include]:[];E={...e,include:Array.from(new Set([...t,...c]))}}else E=S;return d=qi(x&&te,Qn(E,s(pe,{key:_,suspensible:!0,onPending:()=>{p=!0,x&&!i[`~transitionPromise`]&&(i[`~transitionPromise`]=new Promise(e=>{i[`~transitionFinish`]=e})),g=i.callHook(`page:start`,t.Component)},onResolve:async()=>{p=!1,h=!0,i.isHydrating&&i[`~restoreDeferredRoute`]?.();try{await b(),i._route.sync?.(),await g,await i.callHook(`page:finish`,t.Component),!y&&!ee&&(y=!0,await i.callHook(`page:loading:end`))}finally{f()}}},{default:()=>{let e={key:v||void 0,vnode:n.default?$a(n.default,t):t.Component,route:t.route,renderKey:v||void 0,trackRootNodes:x,vnodeRef:a,routeRecord:void 0};if(!E)return s(qa,e);let r=w,i=Ja.get(r);return i||(i=Ka(T),Ja.set(r,i)),s(i,e)}}))).default(),d})})}});function Xa(e,t,n){if(!e)return!1;let r=t.matched.findIndex(e=>e.components?.default===n?.type);if(r===-1)return!1;let i=t.matched.slice(0,r).filter(e=>e.components?.default);if(!i.length)return!1;let a=e.matched.filter(e=>e.components?.default);return i.some((e,t)=>e.components?.default!==a[t]?.components?.default)||n&&Zn({route:t,Component:n})!==Zn({route:e,Component:n})}function Za(e,t,n){return e?t.matched.findIndex(e=>e.components?.default===n?.type){let n=e(t);return Array.isArray(n)?n:n==null||!me(n)?[_()]:[n]});return t._n=!0,t}function $a(e,t){let n=e(t);return n.length===1?s(n[0]):s(te,void 0,n)}function eo(e){return!!e&&(!!e.suspense?.isUnmounted||!!e.component?.isUnmounted)}var to=ua;function no(e,t){return g(t)??e?.meta.layout??to(e?.path??`/`).appLayout??`default`}var ro=f({name:`LayoutLoader`,inheritAttrs:!1,props:{name:String,layoutProps:Object},setup(e,t){return()=>s($[e.name],e.layoutProps,t.slots)}}),io=f({name:`NuxtLayout`,inheritAttrs:!1,props:{name:{type:[String,Boolean,Object],default:null},fallback:{type:[String,Object],default:null}},setup(e,t){let r=D(),i=m(P),a=!i||i===je()?Ki():i,o=h(()=>{let t=no(a,e.name);return t&&!(t in $)&&e.fallback&&(t=g(e.fallback)),t});x(Ce,o);let c=fe();t.expose({layoutRef:c});let l=r.deferHydration();if(r.isHydrating){let e=r.hooks.hookOnce(`app:error`,l),t=F().beforeEach(()=>{e(),t()})}let u;return()=>{let i=!!o.value&&o.value in $&&!!(a?.meta.layoutTransition??!1),d=i&&ea([a?.meta.layoutTransition,!1,{onBeforeLeave(){r[`~transitionPromise`]=new Promise(e=>{r[`~transitionFinish`]=e})},onAfterLeave(){r[`~transitionFinish`]?.(),delete r[`~transitionFinish`],delete r[`~transitionPromise`]}}]),f=u;return u=o.value,qi(d,{default:()=>s(pe,{suspensible:!0,onResolve:async()=>{await b(l)}},{default:()=>s(ao,{layoutProps:n(t.attrs,a.meta.layoutProps??{},{ref:c}),key:o.value||void 0,name:o.value,shouldProvide:!e.name,isRenderingNewLayout:e=>e!==f&&e===o.value,hasTransition:i},t.slots)})}).default()}}}),ao=f({name:`NuxtLayoutProvider`,inheritAttrs:!1,props:{name:{type:[String,Boolean]},layoutProps:{type:Object},hasTransition:{type:Boolean},shouldProvide:{type:Boolean},isRenderingNewLayout:{type:Function,required:!0}},setup(e,t){let n=e.name;e.shouldProvide&&x(xe,{isCurrent:e=>n===!1||n===no(e)});let r=m(P),i=r&&r===je(),a=m(xe,null);if(i){let t=Ki(),n={};for(let i in t){let o=i;Object.defineProperty(n,o,{enumerable:!0,get:()=>e.isRenderingNewLayout(e.name)&&(!a||a.isCurrent(t))?t[o]:r[o]})}x(P,re(n))}return()=>!n||typeof n==`string`&&!(n in $)?t.slots.default?.():s(ro,{key:n,layoutProps:e.layoutProps,name:n},t.slots)}}),oo=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},so={},co={class:`min-h-screen bg-background text-foreground`};function lo(e,n){let i=Ya,a=io;return c(),r(`div`,co,[t(a,null,{default:w(()=>[t(i)]),_:1})])}var uo=oo(so,[[`render`,lo]]),fo={__name:`nuxt-error-page`,props:{error:Object},setup(e){let t=e.error,n=Number(t.statusCode||500),r=n===404,a=t.statusMessage??(r?`Page Not Found`:`Internal Server Error`),o=t.message||t.toString(),s=ae(()=>Q(()=>import(`./B3nLMP91.js`),__vite__mapDeps([29,1,30,31]),import.meta.url)),l=ae(()=>Q(()=>import(`./DZrj6clu.js`),__vite__mapDeps([32,1,30,33]),import.meta.url)),u=r?s:l;return(e,t)=>(c(),N(g(u),he(i({status:g(n),statusText:g(a),statusCode:g(n),statusMessage:g(a),description:g(o),stack:g(void 0)})),null,16))}},po=()=>null,mo={key:0},ho={__name:`nuxt-root`,setup(t){let n=D(),i=n.deferHydration();if(n.isHydrating){let e=n.hooks.hookOnce(`app:error`,i),t=F().beforeEach(()=>{e(),t()})}window.location.pathname,x(P,je()),n.hooks.callHookWith(e=>e.map(e=>e()),`vue:setup`,[]);let o=Be();function s(e,t,r){let i=n.vueApp.config.errorHandler;if(i&&!i.__nuxt_default)try{i(e,t,r)}catch(e){console.error("[nuxt] Error in `app.config.errorHandler`",e)}}return a((e,t,r)=>{if(n.hooks.callHook(`vue:error`,e,t,r)?.catch(e=>console.error("[nuxt] Error in `vue:error` hook",e)),ye(navigator.userAgent))return Ve(n,e),!1;if(De(e)&&(e.fatal||e.unhandled))return n.runWithContext(()=>Re(e)),s(e,t,r),!1}),(t,n)=>(c(),N(pe,{onResolve:g(i)},{default:w(()=>[g(!1)?(c(),r(`div`,mo)):g(o)?(c(),N(g(fo),{key:1,error:g(o)},null,8,[`error`])):g(!1)?(c(),N(g(po),{key:2,context:g(!1)},null,8,[`context`])):g(!1)?(c(),N(e(g(!1)),{key:3})):(c(),N(g(uo),{key:4}))]),_:1},8,[`onResolve`]))}},go;{let e;go=async function(){if(e)return e;let t=!!(window.__NUXT__?.serverRendered??document.getElementById(`__NUXT_DATA__`)?.dataset.ssr===`true`),n=t?ge(ho):_e(ho),r=ce({vueApp:n});async function i(e){await r.callHook(`app:error`,e),r.payload.error||=Pe(e)}i.__nuxt_default=!0,n.config.errorHandler=i,r.hook(`app:suspense:resolve`,()=>{n.config.errorHandler===i&&(n.config.errorHandler=void 0)}),!t&&oe.id&&r.hook(`app:suspense:resolve`,()=>{document.getElementById(oe.id)?.remove()});try{await de(r,Ga)}catch(e){i(e)}try{await r.hooks.callHook(`app:created`,n),await r.hooks.callHook(`app:beforeMount`,n),n.mount(ne),await r.hooks.callHook(`app:mounted`,n),await b()}catch(e){i(e)}return n},e=go().catch(e=>{throw y.NUXT_E1009({cause:e}),e})}export{Kt as a,Sn as i,Ra as n,xn as r,oo as t}; \ No newline at end of file diff --git a/server/adminui/_nuxt/CLabUxWX.js b/server/adminui/_nuxt/CLabUxWX.js new file mode 100644 index 0000000..e0ba480 --- /dev/null +++ b/server/adminui/_nuxt/CLabUxWX.js @@ -0,0 +1 @@ +import{$ as e,A as t,Bt as n,C as r,E as i,I as a,J as o,K as s,M as c,R as l,Rt as u,S as d,St as f,T as p,U as m,V as h,Vt as g,Z as _,b as v,ct as y,ht as b,it as x,k as S,mt as C,nt as w,ot as T,rt as E,w as D,xt as O}from"./BT-50xGH.js";import{i as k,l as A,n as j}from"./CxZD5dLJ.js";import{a as M,i as N,n as P,o as F,r as I,s as L,t as R}from"./C7_xDZuo.js";var z=[`type`,`disabled`],B={key:0,class:`absolute inset-0 z-20 flex items-center justify-center bg-background/20 dark:bg-background/10 backdrop-blur-[1px]`},V=c({__name:`Button`,props:{variant:{default:void 0},size:{default:void 0},disabled:{type:Boolean,default:void 0},loading:{type:Boolean,default:!1},danger:{type:Boolean,default:!1},icon:{default:null},iconPosition:{default:`left`},suffixIcon:{default:null},round:{type:Boolean,default:!1},animate:{type:Boolean,default:!0},delay:{default:0},entryClass:{default:``}},setup(a){let c=a,g=x(),v=w().type??`button`,S=b(!1),C=l(`FuxstoButtonGroup`,null),E=d(()=>c.disabled===void 0?C?.disabled!==void 0&&C.disabled:c.disabled),O=d(()=>c.size===void 0?C?.size===void 0?`md`:C.size:c.size),k=d(()=>c.variant===void 0?C?.variant===void 0?`primary`:C.variant:c.variant),A=d(()=>!g.default&&c.icon&&!c.suffixIcon),M=b(null),N=b(null),F=b(0),I=b(!0),L=b(null),R=b(!1),V=(e,t,n)=>{let r=M.value;if(!r||e===t||Math.abs(e-t)<2){n&&n();return}R.value=!0,L.value=`${e}px`;let i=r.animate([{width:`${e}px`},{width:`${t}px`}],{duration:320,easing:`cubic-bezier(0.25, 1, 0.5, 1)`});i.onfinish=()=>{R.value=!1,L.value=null,F.value=t,n&&n()}};T(()=>c.loading,async e=>{if(M.value){if(e){let e=M.value.offsetWidth;L.value=`${e}px`,F.value=e}else{await h();let e=M.value.offsetWidth,t=F.value;Math.abs(t-e)>2?V(t,e):(L.value=null,F.value=e)}}}),s(()=>{if(c.animate&&setTimeout(()=>{S.value=!0},c.delay),M.value){F.value=M.value.offsetWidth;let e=new ResizeObserver(()=>{if(I.value){I.value=!1;return}if(R.value||c.loading)return;let e=M.value?.offsetWidth||0;if(Math.abs(F.value-e)<=2){F.value=e;return}let t=F.value;V(t,e)});N.value&&e.observe(N.value),m(()=>{e.disconnect()})}});let H=d(()=>{let e=E.value||c.loading;return P(`relative inline-flex items-center justify-center h-fit w-fit select-none font-bold overflow-hidden border`,`transition-all duration-300 ease-smooth will-change-[border-radius,width]`,C?.isGroup?P(`rounded-none first:rounded-l-base last:rounded-r-base`):c.round?`rounded-full`:`rounded-base`,{"bg-primary text-primary-foreground border-transparent hover:opacity-90":k.value===`primary`&&!e&&!c.danger,"bg-destructive text-destructive-foreground border-transparent hover:opacity-90":k.value===`primary`&&!e&&c.danger,"bg-muted-foreground/20 text-muted-foreground/60 border-transparent":k.value===`primary`&&e,"bg-secondary text-secondary-foreground hover:bg-secondary/80 border-border/40":k.value===`secondary`&&!e&&!c.danger,"bg-destructive/10 text-destructive border-destructive/20 hover:bg-destructive/20":k.value===`secondary`&&!e&&c.danger,"bg-secondary/40 text-muted-foreground/50 border-border/20":k.value===`secondary`&&e,"bg-background text-foreground border-border hover:bg-muted/80 hover:border-border/80":k.value===`outline`&&!e&&!c.danger,"bg-destructive/5 text-destructive border-destructive/30 hover:bg-destructive/10 hover:border-destructive/60":k.value===`outline`&&!e&&c.danger,"bg-background/40 text-muted-foreground/40 border-border/30":k.value===`outline`&&e,"bg-transparent text-foreground border-transparent hover:bg-muted/50":k.value===`ghost`&&!e&&!c.danger,"bg-transparent text-destructive border-transparent hover:bg-destructive/10":k.value===`ghost`&&!e&&c.danger,"bg-transparent text-muted-foreground/40 border-transparent":k.value===`ghost`&&e,"bg-background/40 backdrop-blur-md text-foreground border-white/20 dark:border-white/10 hover:bg-white/10":k.value===`glass`&&!e,"bg-background/10 backdrop-blur-sm text-muted-foreground/30 border-white/5":k.value===`glass`&&e},A.value?{"p-1.5 aspect-square":O.value===`sm`,"p-2.5 aspect-square":O.value===`md`,"p-3.5 aspect-square":O.value===`lg`}:{"px-3.5 py-1.5 text-xs":O.value===`sm`,"px-5 py-2.5 text-sm":O.value===`md`,"px-7 py-3 text-base":O.value===`lg`},e?`cursor-not-allowed`:`cursor-pointer active:scale-[0.96]`,c.animate?c.entryClass?S.value?c.entryClass:`opacity-0`:P(`transform transition-all duration-700 ease-swift`,S.value?`opacity-100 translate-y-0 scale-100 blur-none`:`opacity-0 translate-y-1.5 scale-96 blur-md pointer-events-none`):``)}),U=d(()=>P(`flex items-center justify-center gap-2 transition-all duration-300 ease-smooth whitespace-nowrap`,c.loading?`opacity-25 blur-[2.5px] scale-95`:`opacity-100 blur-none scale-100`)),W=d(()=>P({"w-3.5 h-3.5":O.value===`sm`,"w-4 h-4":O.value===`md`,"w-4.5 h-4.5":O.value===`lg`}));return(a,s)=>(o(),i(`button`,{ref_key:`btnContainer`,ref:M,type:f(v),class:u(H.value),disabled:E.value||c.loading,style:n(L.value?{width:L.value}:{})},[r(`span`,{ref_key:`btnContent`,ref:N,class:u(U.value)},[c.icon&&c.iconPosition===`left`?(o(),D(e(c.icon),{key:0,class:u(W.value)},null,8,[`class`])):p(``,!0),a.$slots.default?_(a.$slots,`default`,{},void 0,void 0,1):p(``,!0),c.suffixIcon||c.icon&&c.iconPosition===`right`?(o(),D(e(c.suffixIcon||c.icon),{key:2,class:u(W.value)},null,8,[`class`])):p(``,!0)],2),t(j,{name:`fade`},{default:y(()=>[c.loading?(o(),i(`div`,B,[...s[0]||=[r(`div`,{class:`absolute inset-0 overflow-hidden pointer-events-none`},[r(`div`,{class:`w-[200%] h-full bg-gradient-to-r from-transparent via-foreground/[0.12] to-transparent animate-kinetic-shimmer`})],-1)]])):p(``,!0)]),_:1})],14,z))}}),H={class:`h-auto w-full`},U={class:`font-bold text-sm w-full flex items-center justify-between gap-4`},W={class:`relative z-10 w-full`},G={key:0,class:`absolute inset-0 z-20 flex items-center justify-center bg-background/20 dark:bg-background/10 backdrop-blur-[1px] rounded-[inherit] overflow-hidden pointer-events-none`},K=c({__name:`Card`,props:{variant:{default:`default`},shadow:{default:`none`},hoverShadow:{type:Boolean,default:!1},interactive:{default:`none`},bordered:{type:Boolean,default:!0},glass:{type:Boolean,default:!1},padding:{default:`md`},animate:{type:Boolean,default:!0},delay:{default:0},entryClass:{default:``},loading:{type:Boolean,default:!1}},setup(e){let a=e,c=b(!1),l=b(null),f=b(null);T(()=>a.loading,e=>{e&&l.value?f.value=`${l.value.offsetHeight}px`:f.value=null}),s(()=>{a.animate&&setTimeout(()=>{c.value=!0},a.delay)});let m=d(()=>P(`relative h-fit w-full rounded-base overflow-hidden transition-all duration-300 ease-out`,a.bordered?a.glass?`border border-white/10 dark:border-white/5`:`border border-border/60`:`border-transparent`,{"bg-background text-foreground":a.variant==="default"&&!a.glass,"bg-background/70 text-foreground":a.variant==="default"&&a.glass,"bg-primary text-primary-foreground border-transparent":a.variant===`primary`,"bg-secondary text-secondary-foreground":a.variant===`secondary`&&!a.glass,"bg-secondary/40 text-secondary-foreground":a.variant===`secondary`&&a.glass,"bg-muted/60 text-muted-foreground":a.variant===`muted`&&!a.glass,"bg-muted/30 text-muted-foreground":a.variant===`muted`&&a.glass},a.glass?`backdrop-blur-lg`:``,{"shadow-none":a.shadow===`none`,"shadow-[0_2px_8px_rgba(0,0,0,0.015)] dark:shadow-none":a.shadow===`sm`,"shadow-[0_4px_16px_rgba(0,0,0,0.02),0_1px_4px_rgba(0,0,0,0.01)] dark:shadow-none":a.shadow===`md`,"shadow-[0_12px_32px_rgba(0,0,0,0.03),0_2px_8px_rgba(0,0,0,0.01)] dark:shadow-none":a.shadow===`lg`},a.hoverShadow&&!a.loading?`hover:shadow-[0_16px_36px_rgba(0,0,0,0.04),0_2px_12px_rgba(0,0,0,0.01)] dark:hover:shadow-none`:``,{"hover:scale-[1.006]":a.interactive===`lift`&&!a.loading,"active:scale-[0.993]":a.interactive!==`none`&&!a.loading},{"p-0":a.padding===`none`,"p-3.5":a.padding===`sm`,"p-5":a.padding===`md`,"p-7":a.padding===`lg`},a.animate?a.entryClass?c.value?a.entryClass:`opacity-0`:P(`transform transition-all duration-700 ease-swift`,c.value?`opacity-100 translate-y-0 scale-100 blur-none`:`opacity-0 translate-y-2 scale-98 blur-md pointer-events-none`):``));return(e,s)=>(o(),i(`div`,{ref_key:`cardContainer`,ref:l,class:u(m.value),style:n(f.value?{height:f.value}:{})},[r(`div`,H,[e.$slots.header?(o(),i(`div`,{key:0,class:u([a.padding===`none`?`p-4 border-b border-border/40`:`mb-3.5 pb-3 border-b border-border/40`,`w-full`])},[r(`div`,U,[_(e.$slots,`header`)])],2)):p(``,!0),r(`div`,W,[_(e.$slots,`default`)]),e.$slots.footer?(o(),i(`div`,{key:1,class:u([a.padding===`none`?`p-4 border-t border-border/40`:`mt-3.5 pt-3 border-t border-border/40`,`w-full`])},[_(e.$slots,`footer`)],2)):p(``,!0)]),t(j,{name:`fade`},{default:y(()=>[a.loading?(o(),i(`div`,G,[...s[0]||=[r(`div`,{class:`absolute inset-0 overflow-hidden rounded-[inherit]`},[r(`div`,{class:`w-[200%] h-full bg-gradient-to-r from-transparent via-foreground/[0.08] to-transparent animate-kinetic-shimmer rounded-[inherit]`})],-1)]])):p(``,!0)]),_:1})],6))}}),q=[`a[href]`,`button:not([disabled])`,`input:not([disabled])`,`select:not([disabled])`,`textarea:not([disabled])`,`[tabindex]:not([tabindex="-1"])`].join(`, `);function J(e){return Array.from(e.querySelectorAll(q)).filter(e=>{if(e.getAttribute(`aria-hidden`)===`true`)return!1;let t=window.getComputedStyle(e);return t.display!==`none`&&t.visibility!==`hidden`})}function Y(e,t,n={}){let{restore:r=!0}=n,i=null,a=!1,o=t=>{if(t.key!==`Tab`)return;let n=e.value;if(!n)return;let r=J(n);if(r.length===0){t.preventDefault();return}let i=document.activeElement,a=r[0],o=r[r.length-1],s=!i||!n.contains(i);t.shiftKey?(i===a||s)&&(t.preventDefault(),o.focus()):(i===o||s)&&(t.preventDefault(),a.focus())},s=()=>{let t=e.value;if(!t)return;let n=J(t)[0];n?n.focus():t.focus()},c=()=>{a||typeof document>`u`||(a=!0,i=document.activeElement,document.addEventListener(`keydown`,o,!0),s())},l=()=>{if(!a)return;a=!1,document.removeEventListener(`keydown`,o,!0);let e=i;i=null,r&&e&&typeof e.focus==`function`&&e.isConnected&&e.focus()};return T(()=>O(t),e=>{e?h(c):l()},{immediate:!0}),m(()=>{a&&(a=!1,document.removeEventListener(`keydown`,o,!0),i=null)}),{activate:c,deactivate:l}}var X=0,Z=``;function Q(){X===0&&(Z=document.body.style.overflow,document.body.style.overflow=`hidden`),X++}function ee(){X!==0&&(X--,X===0&&(document.body.style.overflow=Z))}var te={key:0,class:`fixed inset-0 z-[99999] flex items-center justify-center p-4 overflow-y-auto pointer-events-none`},ne=[`aria-labelledby`,`aria-describedby`],re={key:0,class:`w-full flex items-center justify-between pr-3`},ie={key:1,class:`flex items-start gap-3.5 pr-6`},ae={class:`space-y-1`},oe=[`id`],se=[`id`],ce=[`disabled`],le={key:1,class:`flex items-center justify-end gap-2.5 px-4.5 py-3.5 sm:px-5 sm:py-3.5 bg-muted/20 border-t border-border/40`},ue={key:0,class:`absolute inset-0 z-20 flex items-center justify-center bg-background/20 dark:bg-background/10 backdrop-blur-[1px] rounded-[inherit] overflow-hidden pointer-events-none`},de=c({__name:`Dialog`,props:{open:{type:Boolean,default:!1},title:{default:``},description:{default:``},size:{default:`md`},confirmText:{default:`确认`},cancelText:{default:`取消`},confirmVariant:{default:`primary`},cancelVariant:{default:`secondary`},showConfirm:{type:Boolean,default:!0},showCancel:{type:Boolean,default:!0},danger:{type:Boolean,default:!1},closable:{type:Boolean,default:!0},maskClosable:{type:Boolean,default:!0},escClosable:{type:Boolean,default:!0},loading:{type:Boolean,default:!1},type:{default:`none`},icon:{default:null}},emits:[`update:open`,`confirm`,`cancel`,`close`],setup(n,{emit:a}){let c=n,l=a,h=x(),C=b(null),w=E(),O=E();Y(C,d(()=>c.open));function k(){if(!h.default)return!1;let e=h.default();return!e||e.length===0?!1:e.some(e=>typeof e.children!=`string`||e.children.trim().length>0)}let R=e=>{typeof document<`u`&&(e?Q():ee())};T(()=>c.open,e=>{R(e)});let z=()=>{c.loading||(l(`update:open`,!1),l(`close`))},B=()=>{c.maskClosable&&z()},H=e=>l(`confirm`,e),U=e=>{c.loading||(l(`cancel`,e),z())},W=e=>{c.open&&c.escClosable&&e.key===`Escape`&&z()};s(()=>{window.addEventListener(`keydown`,W),c.open&&R(!0)}),m(()=>{window.removeEventListener(`keydown`,W),R(!1)});let G=d(()=>P(`relative w-full h-fit bg-background border border-border/80 shadow-[0_20px_50px_rgba(0,0,0,0.2)] rounded-base overflow-hidden transition-all duration-300 pointer-events-auto flex flex-col`,{"max-w-sm":c.size===`sm`,"max-w-md":c.size===`md`,"max-w-lg":c.size===`lg`,"max-w-2xl":c.size===`xl`,"max-w-[calc(100vw-2rem)] min-h-[calc(100vh-2rem)]":c.size===`full`})),K={info:M,success:L,warning:N,error:F,none:null},q=d(()=>{switch(c.type){case`error`:return`text-destructive`;case`warning`:return`text-warning`;case`success`:return`text-success`;default:return`text-primary`}});return(n,a)=>(o(),D(v,{to:`body`},[t(j,{name:`dialog-mask`,appear:``},{default:y(()=>[c.open?(o(),i(`div`,{key:0,class:`fixed inset-0 z-[99998] bg-background/60 dark:bg-background/40 backdrop-blur-md`,onClick:B})):p(``,!0)]),_:1}),t(j,{name:`dialog-pop`,appear:``},{default:y(()=>[c.open?(o(),i(`div`,te,[r(`div`,{ref_key:`panelRef`,ref:C,class:u(G.value),role:`dialog`,"aria-modal":`true`,"aria-labelledby":f(w),"aria-describedby":c.description||n.$slots.description?f(O):void 0,tabindex:`-1`,onClick:a[0]||=A(()=>{},[`stop`])},[r(`div`,{class:u([`flex items-start justify-between p-4.5 sm:p-5`,k()?`border-b border-border/40 pb-4`:`pb-4.5`])},[n.$slots.header?(o(),i(`div`,re,[_(n.$slots,`header`)])):(o(),i(`div`,ie,[c.icon||c.type!==`none`&&K[c.type]?(o(),D(e(c.icon||K[c.type]),{key:0,class:u([`w-5 h-5 shrink-0 mt-0.5`,c.icon?`text-primary`:q.value])},null,8,[`class`])):p(``,!0),r(`div`,ae,[r(`h3`,{id:f(w),class:`font-extrabold text-sm sm:text-base text-foreground tracking-tight leading-tight`},[_(n.$slots,`title`,{},()=>[S(g(c.title),1)])],8,oe),c.description||n.$slots.description?(o(),i(`p`,{key:0,id:f(O),class:`text-xs text-muted-foreground leading-relaxed break-words`},[_(n.$slots,`description`,{},()=>[S(g(c.description),1)])],8,se)):p(``,!0)])])),c.closable?(o(),i(`button`,{key:2,type:`button`,"aria-label":`关闭`,onClick:z,disabled:c.loading,class:`p-1 rounded-[calc(var(--radius)-4px)] text-muted-foreground hover:bg-muted transition-colors active:scale-90 shrink-0 ml-auto`},[t(f(I),{class:`w-4 h-4`})],8,ce)):p(``,!0)],2),k()?(o(),i(`div`,{key:0,class:u([`p-5 text-xs text-muted-foreground leading-relaxed transition-all duration-300`,c.loading?`opacity-35 blur-[1.5px] scale-[0.99] select-none pointer-events-none`:`opacity-100 blur-none scale-100`])},[_(n.$slots,`default`)],2)):p(``,!0),c.showCancel||c.showConfirm||n.$slots.footer?(o(),i(`div`,le,[_(n.$slots,`footer`,{},()=>[c.showCancel?(o(),D(V,{key:0,variant:c.cancelVariant,size:`sm`,disabled:c.loading,onClick:U},{default:y(()=>[S(g(c.cancelText),1)]),_:1},8,[`variant`,`disabled`])):p(``,!0),c.showConfirm?(o(),D(V,{key:1,variant:c.danger?`outline`:c.confirmVariant,danger:c.danger,size:`sm`,loading:c.loading,onClick:H},{default:y(()=>[S(g(c.confirmText),1)]),_:1},8,[`variant`,`danger`,`loading`])):p(``,!0)])])):p(``,!0),t(j,{name:`fade`},{default:y(()=>[c.loading?(o(),i(`div`,ue,[...a[1]||=[r(`div`,{class:`absolute inset-0 overflow-hidden rounded-[inherit]`},[r(`div`,{class:`w-[200%] h-full bg-gradient-to-r from-transparent via-foreground/[0.08] to-transparent animate-kinetic-shimmer rounded-[inherit]`})],-1)]])):p(``,!0)]),_:1})],10,ne)])):p(``,!0)]),_:3})]))}}),$=e=>{let t=typeof e==`string`?{content:e}:e,n=document.createElement(`div`);document.body.appendChild(n);let r=C({open:!0,loading:!1,...t}),i=null,o=()=>{r.open=!1,setTimeout(()=>{i&&i.unmount(),n.remove(),t.onClose&&t.onClose()},450)},s=async e=>{if(t.onConfirm){let e=t.onConfirm();if(e instanceof Promise){r.loading=!0;try{let t=await e;r.loading=!1,t!==!1&&o()}catch{r.loading=!1}return}e!==!1&&o()}else o()},c=()=>{t.onCancel&&t.onCancel(),o()},l={};return r.content&&(l.default=()=>typeof r.content==`function`?r.content():(r.content,r.content)),i=k({setup(){return()=>a(de,{...r,"onUpdate:open":e=>{e||o()},onConfirm:s,onCancel:c,onClose:o},l)}}),i.mount(n),{close:o,setLoading:e=>{r.loading=e}}};$.confirm=e=>$({type:`warning`,...typeof e==`string`?{content:e}:e}),$.warning=e=>$({type:`warning`,danger:!0,...typeof e==`string`?{content:e}:e}),$.error=e=>$({type:`error`,danger:!0,...typeof e==`string`?{content:e}:e}),$.success=e=>$({type:`success`,...typeof e==`string`?{content:e}:e});function fe(){let e={success:e=>R.success(e),error:e=>R.error(e),warning:e=>R.warning(e),info:e=>R.info(e)};function t(e,t,n={}){return new Promise(r=>{$.confirm({title:e,description:t,danger:n.danger,confirmText:n.confirmText||`确认`,cancelText:`取消`,onConfirm:()=>r(!0),onCancel:()=>r(!1),onClose:()=>r(!1)})})}function n(t,n){let r=t;if(r.unauthorized){let e=window.prompt(`请输入 admin token`);e&&n(e);return}e.error(r.message||String(t))}return{toast:e,confirm:t,handleError:n}}export{V as i,$ as n,K as r,fe as t}; \ No newline at end of file diff --git a/server/adminui/_nuxt/CU1Fk5fy.js b/server/adminui/_nuxt/CU1Fk5fy.js new file mode 100644 index 0000000..ec809c4 --- /dev/null +++ b/server/adminui/_nuxt/CU1Fk5fy.js @@ -0,0 +1 @@ +import{$ as e,A as t,C as n,E as r,J as i,K as a,M as o,Rt as s,S as c,St as l,T as u,Vt as d,Z as f,ct as p,ft as m,ht as h,k as g,mt as _,w as v}from"./BT-50xGH.js";import{n as y}from"./CxZD5dLJ.js";import{a as b,i as x,l as S,n as C,o as w,r as T,s as E}from"./C7_xDZuo.js";import{t as D}from"./ChxjuxiH.js";import{t as O}from"./BZ_oP5sc.js";import{n as k,r as A,t as j}from"./BkiPxbt6.js";import{t as M}from"./Biiz67gC.js";import{i as N,r as P,t as F}from"./CLabUxWX.js";import{t as I}from"./CaMPYMl_.js";import{t as L}from"./Cv1xSm-v.js";import{n as R,t as z}from"./Dqnn4udu.js";import{t as B}from"./O7BxGEKD.js";var V=[`role`],H={class:`flex-1 min-w-0 space-y-1`},U={key:0,class:`text-sm font-bold text-foreground leading-snug`},W={key:1,class:`text-xs text-muted-foreground leading-relaxed`},G={key:0,class:`absolute inset-0 z-20 flex items-center justify-center bg-background/20 dark:bg-background/10 backdrop-blur-[1px] rounded-[inherit] overflow-hidden pointer-events-none`},K=o({__name:`Alert`,props:{type:{default:`info`},banner:{type:Boolean,default:!1},title:{default:``},description:{default:``},showIcon:{type:Boolean,default:!0},closable:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},animate:{type:Boolean,default:!0},delay:{default:0},entryClass:{default:``},onClose:{type:Function,default:void 0}},emits:[`close`],setup(a,{emit:o}){let m=a,_=o,{entryClasses:S}=L(()=>m.animate,()=>m.delay,()=>m.entryClass),D=h(!0),O=h(!1),k=h(null),A={info:{icon:b,classes:{base:`bg-primary/5 border-primary/20 text-foreground`,icon:`text-primary`}},success:{icon:E,classes:{base:`bg-success/5 border-success/20 text-foreground`,icon:`text-success`}},warning:{icon:x,classes:{base:`bg-warning/5 border-warning/25 text-foreground`,icon:`text-warning`}},error:{icon:w,classes:{base:`bg-destructive/5 border-destructive/20 text-foreground`,icon:`text-destructive`}}},j=c(()=>A[m.type]),M=c(()=>j.value.icon),N=()=>{if(O.value)return;let e=k.value;if(!e){D.value=!1;return}O.value=!0,_(`close`),m.onClose?.();let t=e.offsetHeight;e.style.transition=`none`,e.style.height=`${t}px`,e.style.opacity=`1`,e.offsetHeight,e.style.transition=`height 0.32s cubic-bezier(0.16,1,0.3,1), opacity 0.32s cubic-bezier(0.16,1,0.3,1), padding 0.32s cubic-bezier(0.16,1,0.3,1)`,e.style.height=`0px`,e.style.opacity=`0`},P=e=>{e.propertyName===`height`&&O.value&&(D.value=!1)},F=c(()=>C(`relative w-full flex items-start gap-2.5 p-3 border overflow-hidden rounded-base transition-all duration-300`,j.value.classes.base,m.banner?`rounded-none`:``,m.closable?`pr-9`:``)),I=c(()=>C(`shrink-0 mt-0.5`,j.value.classes.icon));return(a,o)=>(i(),r(`div`,{class:s([l(S),`w-full`])},[t(y,{name:`fade`},{default:p(()=>[D.value?(i(),r(`div`,{key:0,ref_key:`boxRef`,ref:k,class:s(F.value),role:m.type===`error`||m.type===`warning`?`alert`:`status`,onTransitionend:P},[m.showIcon?(i(),v(e(M.value),{key:0,class:s(l(C)(I.value,`w-4.5 h-4.5`)),"stroke-width":2},null,8,[`class`])):u(``,!0),n(`div`,H,[m.title?(i(),r(`div`,U,[f(a.$slots,`title`,{},()=>[g(d(m.title),1)])])):u(``,!0),m.description||a.$slots.default?(i(),r(`div`,W,[f(a.$slots,`default`,{},()=>[g(d(m.description),1)])])):u(``,!0)]),f(a.$slots,`extra`),m.closable?(i(),r(`button`,{key:1,type:`button`,class:`absolute top-3 right-3 z-10 shrink-0 text-muted-foreground hover:text-foreground transition-colors duration-200 cursor-pointer active:scale-90`,onClick:N,"aria-label":`关闭`},[t(l(T),{class:`w-4 h-4`,"stroke-width":2.5})])):u(``,!0),t(y,{name:`fade`},{default:p(()=>[m.loading?(i(),r(`div`,G,[...o[0]||=[n(`div`,{class:`absolute inset-0 overflow-hidden rounded-[inherit]`},[n(`div`,{class:`w-[200%] h-full bg-gradient-to-r from-transparent via-foreground/[0.08] to-transparent animate-kinetic-shimmer rounded-[inherit]`})],-1)]])):u(``,!0)]),_:1})],42,V)):u(``,!0)]),_:3})],2))}}),q={class:`flex items-center justify-between gap-3 px-5 py-4`},J={class:`space-y-4 px-5 pb-5`},Y={class:`mt-1 block break-all text-xs`},X={class:`text-xs`},Z={class:`text-xs text-muted-foreground`},Q={class:`flex justify-end gap-1`},$={class:`grid grid-cols-1 gap-x-6 gap-y-1 sm:grid-cols-2`},ee={class:`flex items-center pt-6`},te={class:`flex items-center gap-2 text-sm`},ne={class:`flex justify-end gap-2`},re=o({__name:`devices`,setup(e){let{request:r,setToken:o}=S(),{toast:s,confirm:c,handleError:f}=F(),y=h([]),b=h(!0),x=h(!1),C=h(!1),w=h(``),T=h(``),E=_({id:``,name:``,note:``,rpm:0,daily:0,disabled:!1}),L=[{key:`id`,title:`ID`},{key:`name`,title:`名称`},{key:`rpm`,title:`RPM`,width:80},{key:`daily`,title:`每日`,width:80},{key:`token_hint`,title:`Token`,width:130},{key:`status`,title:`状态`,width:90},{key:`actions`,title:``,width:110,align:`right`}];async function V(){try{y.value=await r(`/devices`)}catch(e){f(e,o)}finally{b.value=!1}}a(V);function H(){Object.assign(E,{id:``,name:``,note:``,rpm:0,daily:0,disabled:!1}),C.value=!0}async function U(){x.value=!0;try{let e=await r(`/devices`,{method:`POST`,body:JSON.stringify({id:E.id.trim(),name:E.name.trim(),note:E.note.trim(),rpm:Number(E.rpm)||0,daily:Number(E.daily)||0,disabled:E.disabled})});C.value=!1,e.token&&(T.value=`设备已创建`,w.value=e.token),s.success(`设备已创建`),await V()}catch(e){f(e,o)}finally{x.value=!1}}async function W(e){if(await c(`轮换 Token`,`轮换 ${e} 的 token?旧 token 立即失效。`,{danger:!0}))try{let t=await r(`/devices/`+encodeURIComponent(e)+`/rotate`,{method:`POST`,body:`{}`});t.token&&(T.value=`已轮换`,w.value=t.token),s.success(`已轮换`),await V()}catch(e){f(e,o)}}async function G(e){if(await c(`删除设备`,`确定删除设备 ${e}?`,{danger:!0}))try{await r(`/devices/`+encodeURIComponent(e),{method:`DELETE`}),s.success(`已删除`),await V()}catch(e){f(e,o)}}return(e,r)=>{let a=z,o=B;return i(),v(l(P),{padding:`none`},{header:p(()=>[n(`div`,q,[r[10]||=n(`div`,null,[n(`h2`,{class:`text-sm font-semibold`},`设备`),n(`p`,{class:`text-xs text-muted-foreground`},` Token 仅存 SHA-256 哈希,明文只显示一次 `)],-1),t(l(N),{variant:`primary`,size:`sm`,icon:l(A),onClick:H},{default:p(()=>[...r[9]||=[g(` 新建设备 `,-1)]]),_:1},8,[`icon`])])]),default:p(()=>[n(`div`,J,[l(w)?(i(),v(l(K),{key:0,type:`warning`,title:`此 token 只显示一次,请立即保存`,closable:``,onClose:r[0]||=e=>w.value=``},{default:p(()=>[n(`code`,Y,d(l(w)),1)]),_:1})):u(``,!0),l(y).length||l(b)?(i(),v(l(D),{key:1,columns:L,data:l(y),"row-key":`id`,size:`sm`,hover:``,loading:l(b),"empty-text":`还没有设备,点「新建设备」签发 token。`},{"cell-id":p(({row:e})=>[n(`code`,X,d(e.id),1)]),"cell-name":p(({row:e})=>[g(d(e.name||`-`),1)]),"cell-rpm":p(({row:e})=>[g(d(e.rpm>0?e.rpm:`全局`),1)]),"cell-daily":p(({row:e})=>[g(d(e.daily>0?e.daily:`全局`),1)]),"cell-token_hint":p(({row:e})=>[n(`span`,Z,d(e.token_hint),1)]),"cell-status":p(({row:e})=>[e.disabled?(i(),v(l(I),{key:0,size:`sm`,variant:`outline`},{default:p(()=>[...r[11]||=[g(`disabled`,-1)]]),_:1})):(i(),v(l(I),{key:1,size:`sm`,variant:`primary`},{default:p(()=>[...r[12]||=[g(`启用`,-1)]]),_:1}))]),"cell-actions":p(({row:e})=>[n(`div`,Q,[t(l(N),{variant:`ghost`,size:`sm`,icon:l(M),onClick:t=>W(e.id)},null,8,[`icon`,`onClick`]),t(l(N),{variant:`ghost`,size:`sm`,danger:``,icon:l(k),onClick:t=>G(e.id)},null,8,[`icon`,`onClick`])])]),_:1},8,[`data`,`loading`])):(i(),v(l(j),{key:2,title:`还没有设备`,description:`点「新建设备」签发 token。`}))]),t(o,{open:l(C),"onUpdate:open":r[8]||=e=>m(C)?C.value=e:null,title:`新建设备`,size:`lg`},{footer:p(()=>[n(`div`,ne,[t(l(N),{variant:`outline`,size:`sm`,onClick:r[7]||=e=>C.value=!1},{default:p(()=>[...r[15]||=[g(`取消`,-1)]]),_:1}),t(l(N),{variant:`primary`,size:`sm`,loading:l(x),onClick:U},{default:p(()=>[...r[16]||=[g(` 创建 `,-1)]]),_:1},8,[`loading`])])]),default:p(()=>[n(`div`,$,[t(a,{label:`id(留空自动生成)`},{default:p(()=>[t(l(O),{modelValue:l(E).id,"onUpdate:modelValue":r[1]||=e=>l(E).id=e,placeholder:`phone-01`},null,8,[`modelValue`])]),_:1}),t(a,{label:`名称`},{default:p(()=>[t(l(O),{modelValue:l(E).name,"onUpdate:modelValue":r[2]||=e=>l(E).name=e,placeholder:`我的手机`},null,8,[`modelValue`])]),_:1}),t(a,{label:`备注`},{default:p(()=>[t(l(O),{modelValue:l(E).note,"onUpdate:modelValue":r[3]||=e=>l(E).note=e},null,8,[`modelValue`])]),_:1}),t(a,{label:`RPM(0=用全局)`},{default:p(()=>[t(l(O),{modelValue:l(E).rpm,"onUpdate:modelValue":r[4]||=e=>l(E).rpm=e,type:`number`},null,8,[`modelValue`])]),_:1}),t(a,{label:`每日上限(0=用全局)`},{default:p(()=>[t(l(O),{modelValue:l(E).daily,"onUpdate:modelValue":r[5]||=e=>l(E).daily=e,type:`number`},null,8,[`modelValue`])]),_:1}),n(`div`,ee,[n(`label`,te,[t(l(R),{modelValue:l(E).disabled,"onUpdate:modelValue":r[6]||=e=>l(E).disabled=e},null,8,[`modelValue`]),r[13]||=g(),r[14]||=n(`span`,null,`disabled`,-1)])])])]),_:1},8,[`open`])]),_:1})}}});export{re as default}; \ No newline at end of file diff --git a/server/adminui/_nuxt/CaMPYMl_.js b/server/adminui/_nuxt/CaMPYMl_.js new file mode 100644 index 0000000..a8c0cc2 --- /dev/null +++ b/server/adminui/_nuxt/CaMPYMl_.js @@ -0,0 +1 @@ +import{$ as e,A as t,Bt as n,C as r,E as i,J as a,K as o,M as s,R as c,Rt as l,S as u,St as d,T as f,U as p,V as m,Z as h,ct as g,ht as _,it as v,w as y}from"./BT-50xGH.js";import{n as b}from"./CxZD5dLJ.js";import{n as x,r as S}from"./C7_xDZuo.js";var C={key:0,class:`relative flex items-center justify-center shrink-0`},ee=[`src`],w={key:2,class:`leading-none tracking-tight`},T={key:3,class:`relative flex items-center justify-center shrink-0`},E=[`src`],D=[`disabled`],O={key:0,class:`absolute inset-0 z-20 flex items-center justify-center bg-background/20 dark:bg-background/10 backdrop-blur-[1px] rounded-[inherit] overflow-hidden pointer-events-none`},k=s({__name:`Chip`,props:{variant:{default:void 0},size:{default:void 0},selectable:{type:Boolean,default:!1},selected:{type:Boolean,default:void 0},value:{default:void 0},closable:{type:Boolean,default:!1},disabled:{type:Boolean,default:void 0},loading:{type:Boolean,default:void 0},round:{type:Boolean,default:!1},icon:{default:null},avatar:{default:``},suffixIcon:{default:null},suffixAvatar:{default:``},animate:{type:Boolean,default:!0},delay:{default:0},entryClass:{default:``}},emits:[`click`,`select`,`update:selected`,`close`],setup(s,{emit:k}){let A=s,j=k;v();let M=_(!1),N=_(!1),P=_(!1),F=c(`FuxstoChipGroup`,null),I=u(()=>A.variant||F?.variant.value||`secondary`),L=u(()=>A.size||F?.size.value||`md`),R=u(()=>A.disabled??F?.disabled.value??!1),z=u(()=>A.loading??F?.loading.value??!1),B=u(()=>{if(F&&A.value!==void 0){let e=F.modelValue.value;return F.multiple.value&&Array.isArray(e)?e.includes(A.value):e===A.value}return A.selected||!1}),V=_(null),H=_(null),U=_(0),W=_(!0),G=_(null),K=_(!1),q=(e,t,n)=>{let r=V.value;if(!r||e===t){n&&n();return}K.value=!0,G.value=`${e}px`;let i=r.animate([{width:`${e}px`},{width:`${t}px`}],{duration:300,easing:`cubic-bezier(0.25, 1, 0.5, 1)`});i.onfinish=()=>{K.value=!1,G.value=null,n&&n()}},J=null,Y=null;o(()=>{if(A.animate&&(Y=setTimeout(()=>{M.value=!0},A.delay)),V.value&&H.value){U.value=V.value.offsetWidth;let e=new ResizeObserver(()=>{if(W.value){W.value=!1;return}if(z.value||K.value)return;let e=G.value;G.value=null,m(()=>{if(!V.value)return;let t=V.value.offsetWidth;G.value=e,U.value!==0&&Math.abs(U.value-t)>1&&q(U.value,t,()=>{U.value=t})})});e.observe(H.value),J=e}}),p(()=>{J?.disconnect(),J=null,Y!==null&&(clearTimeout(Y),Y=null)});let X=e=>{if(!(R.value||z.value)){if(j(`click`,e),F){if(A.value===void 0){console.warn(`[fuxsto-design] Chip 在 ChipGroup 内使用时必须传 value,否则点击不会生效。`);return}F.updateGroupValue(A.value)}else if(A.selectable||A.selected!==void 0){let e=!B.value;j(`update:selected`,e),j(`select`,e)}}},Z=e=>{e.stopPropagation(),!(R.value||z.value)&&j(`close`,e)},te=u(()=>{let e=A.selectable||A.selected!==void 0||F||A.closable;return x(`relative inline-flex items-center justify-center w-fit h-fit select-none font-bold overflow-hidden border transition-all duration-300 ease-smooth`,A.round?`rounded-full`:`rounded-base`,{"px-2 py-1 text-[11px] gap-1.5":L.value===`sm`,"px-2.5 py-1.5 text-xs gap-2":L.value===`md`,"px-3.5 py-2 text-sm gap-2.5":L.value===`lg`},B.value?I.value===`outline`||I.value===`primary`?`bg-primary/10 border-primary text-primary shadow-sm`:`bg-primary text-primary-foreground border-primary shadow-sm`:{"bg-background text-foreground border-border/80 hover:border-border":I.value==="default","bg-secondary text-secondary-foreground border-border/30 hover:bg-secondary/80":I.value===`secondary`,"bg-transparent text-foreground border-border/80 hover:bg-muted/50":I.value===`outline`,"bg-transparent text-foreground border-transparent hover:bg-muted/50":I.value===`ghost`,"bg-background/40 backdrop-blur-md text-foreground border-white/20 dark:border-white/10 hover:bg-white/10":I.value===`glass`,"bg-primary text-primary-foreground border-transparent":I.value===`primary`},R.value||z.value?`opacity-40 grayscale cursor-not-allowed pointer-events-none`:e?`cursor-pointer active:scale-[0.97]`:``)}),Q=u(()=>x(`rounded-full object-cover shrink-0 transition-transform duration-200`,{"w-3.5 h-3.5":L.value===`sm`,"w-4 h-4":L.value===`md`,"w-4.5 h-4.5":L.value===`lg`})),$=u(()=>x(`shrink-0 transition-transform duration-200`,{"w-3 h-3":L.value===`sm`,"w-3.5 h-3.5":L.value===`md`,"w-4 h-4":L.value===`lg`})),ne=u(()=>A.animate?A.entryClass?M.value?A.entryClass:`opacity-0`:x(`transform transition-all duration-700 ease-swift`,M.value?`opacity-100 translate-y-0 scale-100 blur-none`:`opacity-0 translate-y-1.5 scale-96 blur-md pointer-events-none`):``);return(o,s)=>(a(),i(`div`,{class:l([ne.value,`inline-block align-middle rounded-[inherit]`])},[r(`div`,{ref_key:`chipContainerRef`,ref:V,class:l(te.value),style:n(G.value?{width:G.value}:{}),onClick:X},[r(`span`,{ref_key:`chipContentRef`,ref:H,class:l([`inline-flex items-center whitespace-nowrap transition-all duration-300 ease-smooth`,[L.value===`sm`?`gap-1.5`:L.value===`md`?`gap-2`:`gap-2.5`,z.value?`opacity-30 blur-[1.5px] scale-95`:`opacity-100 blur-none scale-100`]])},[A.avatar?(a(),i(`div`,C,[N.value?f(``,!0):(a(),i(`div`,{key:0,class:l([Q.value,`absolute inset-0 bg-muted-foreground/20 animate-pulse rounded-full`])},null,2)),r(`img`,{src:A.avatar,alt:`avatar`,onLoad:s[0]||=e=>N.value=!0,class:l([Q.value,N.value?`opacity-100 blur-none scale-100`:`opacity-0 blur-sm scale-105`])},null,42,ee)])):A.icon?(a(),y(e(A.icon),{key:1,class:l($.value)},null,8,[`class`])):f(``,!0),o.$slots.default?(a(),i(`span`,w,[h(o.$slots,`default`)])):f(``,!0),A.suffixAvatar?(a(),i(`div`,T,[P.value?f(``,!0):(a(),i(`div`,{key:0,class:l([Q.value,`absolute inset-0 bg-muted-foreground/20 animate-pulse rounded-full`])},null,2)),r(`img`,{src:A.suffixAvatar,alt:`suffix-avatar`,onLoad:s[1]||=e=>P.value=!0,class:l([Q.value,P.value?`opacity-100 blur-none scale-100`:`opacity-0 blur-sm scale-105`])},null,42,E)])):A.suffixIcon?(a(),y(e(A.suffixIcon),{key:4,class:l($.value)},null,8,[`class`])):f(``,!0),A.closable?(a(),i(`button`,{key:5,type:`button`,onClick:Z,disabled:R.value||z.value,class:`p-0.5 rounded-full hover:bg-black/10 dark:hover:bg-white/20 transition-colors active:scale-90 ml-0.5 shrink-0`},[t(d(S),{class:l([$.value,`stroke-[2.5]`])},null,8,[`class`])],8,D)):f(``,!0)],2),t(b,{name:`fade`},{default:g(()=>[z.value?(a(),i(`div`,O,[...s[2]||=[r(`div`,{class:`absolute inset-0 overflow-hidden pointer-events-none rounded-[inherit]`},[r(`div`,{class:`w-[200%] h-full bg-gradient-to-r from-transparent via-foreground/[0.08] to-transparent animate-kinetic-shimmer rounded-[inherit]`})],-1)]])):f(``,!0)]),_:1})],6)],2))}});export{k as t}; \ No newline at end of file diff --git a/server/adminui/_nuxt/ChxjuxiH.js b/server/adminui/_nuxt/ChxjuxiH.js new file mode 100644 index 0000000..390aaec --- /dev/null +++ b/server/adminui/_nuxt/ChxjuxiH.js @@ -0,0 +1 @@ +import{$ as e,A as t,B as n,Bt as r,C as i,E as a,J as o,K as s,M as c,R as l,Rt as u,S as d,St as f,T as p,Vt as m,X as h,Z as g,_,ct as v,ht as y,k as b,nt as x,w as S}from"./BT-50xGH.js";import{l as C,n as w}from"./CxZD5dLJ.js";import{c as T,n as E}from"./C7_xDZuo.js";var D=T(`check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]),O=T(`chevron-down`,[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]),k=T(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),A=T(`chevron-up`,[[`path`,{d:`m18 15-6-6-6 6`,key:`153udz`}]]),j=T(`inbox`,[[`polyline`,{points:`22 12 16 12 14 15 10 15 8 12 2 12`,key:`o97t9d`}],[`path`,{d:`M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z`,key:`oot6mr`}]]),M=T(`minus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}]]),N=[`checked`,`indeterminate`,`disabled`],P={key:0,class:`absolute inset-0 z-20 flex items-center justify-center bg-background/20 dark:bg-background/10 backdrop-blur-[1px] rounded-[inherit] overflow-hidden pointer-events-none`},F={key:0,class:`text-xs font-bold text-foreground`},I=c({inheritAttrs:!1,__name:`Checkbox`,props:{modelValue:{type:[Boolean,Array],default:!1},value:{default:!0},indeterminate:{type:Boolean,default:!1},size:{default:void 0},disabled:{type:Boolean,default:void 0},loading:{type:Boolean,default:void 0},error:{type:Boolean,default:void 0},animate:{type:Boolean,default:!0},delay:{default:0},entryClass:{default:``}},emits:[`update:modelValue`,`change`],setup(r,{emit:c}){let m=r,h=c,_=y(!1),b=x(),C=d(()=>{let e={};for(let t in b)t.startsWith(`aria-`)&&(e[t]=b[t]);return e}),T=d(()=>{let e={};for(let t in b)t.startsWith(`aria-`)||(e[t]=b[t]);return e}),O=l(`FuxstoCheckboxGroup`,null),k=d(()=>O?O.modelValue.value.includes(m.value):Array.isArray(m.modelValue)?m.modelValue.includes(m.value):!!m.modelValue),A=d(()=>m.disabled===void 0?O?.disabled.value!==void 0&&O.disabled.value:m.disabled),j=d(()=>m.loading===void 0?O?.loading.value!==void 0&&O.loading.value:m.loading),I=d(()=>m.error===void 0?O?.error.value!==void 0&&O.error.value:m.error),L=d(()=>m.size===void 0?O?.size.value===void 0?`md`:O.size.value:m.size),R=()=>{if(!(A.value||j.value)){if(O)O.updateValue(m.value);else{let e=!k.value;h(`update:modelValue`,e),h(`change`,e)}}};s(()=>{m.animate&&setTimeout(()=>{_.value=!0},m.delay)});let z=d(()=>E(`relative flex items-center justify-center rounded-[calc(var(--radius)-3px)] border transition-all duration-200 shrink-0 bg-background overflow-hidden peer-focus-visible:outline-2 peer-focus-visible:outline-offset-2 peer-focus-visible:outline-ring`,{"w-4 h-4":L.value===`sm`,"w-5 h-5":L.value===`md`,"w-6 h-6":L.value===`lg`},I.value?`border-destructive text-destructive`:k.value||m.indeterminate?`bg-primary border-primary text-primary-foreground`:`border-border hover:border-border/80`,A.value||j.value?`opacity-50 cursor-not-allowed pointer-events-none`:`cursor-pointer`)),B=d(()=>E(`transform transition-all duration-200 ease-spring`,{"w-3 h-3":L.value===`sm`,"w-3.5 h-3.5":L.value===`md`,"w-4 h-4":L.value===`lg`},k.value||m.indeterminate?`scale-100 opacity-100`:`scale-0 opacity-0`)),V=d(()=>m.animate?m.entryClass?_.value?m.entryClass:`opacity-0`:E(`transform transition-all duration-700 ease-swift`,_.value?`opacity-100 translate-y-0 scale-100 blur-none`:`opacity-0 translate-y-1.5 scale-98 blur-md pointer-events-none`):``);return(r,s)=>(o(),a(`label`,n({class:f(E)(`inline-flex items-center gap-2 select-none cursor-pointer`,A.value?`cursor-not-allowed`:``,V.value)},T.value),[i(`input`,n({type:`checkbox`,class:`peer sr-only`},C.value,{checked:k.value,indeterminate:m.indeterminate,disabled:A.value||j.value,onChange:R}),null,16,N),i(`div`,{class:u(z.value)},[i(`div`,{class:u([`w-full h-full flex items-center justify-center transition-all duration-300`,j.value?`opacity-30 blur-[1px] scale-95`:`opacity-100 blur-none scale-100`])},[(o(),S(e(m.indeterminate?f(M):f(D)),{class:u(B.value),"stroke-width":`3`},null,8,[`class`]))],2),t(w,{name:`fade`},{default:v(()=>[j.value?(o(),a(`div`,P,[...s[0]||=[i(`div`,{class:`absolute inset-0 overflow-hidden pointer-events-none rounded-[inherit]`},[i(`div`,{class:`w-[200%] h-full bg-gradient-to-r from-transparent via-foreground/[0.08] to-transparent animate-kinetic-shimmer rounded-[inherit]`})],-1)]])):p(``,!0)]),_:1})],2),r.$slots.default?(o(),a(`span`,F,[g(r.$slots,`default`)])):p(``,!0)],16))}}),L={class:`w-full text-left border-collapse select-none`},R={class:`bg-muted/40 border-b border-border/60 text-muted-foreground font-bold uppercase tracking-wider text-[10px]`},z=[`onClick`],B={key:1,class:`flex flex-col -space-y-1 shrink-0 ml-0.5`},V=[`onClick`],H=[`onClick`],U={type:`button`,class:`p-0.5 rounded text-muted-foreground hover:text-foreground transition-transform duration-300`},W={key:0,class:`bg-muted/20`},G=[`colspan`],K={class:`expanded-inner-wrapper overflow-hidden`},q={class:`p-4`},J={key:0},Y=[`colspan`],X={class:`flex flex-col items-center justify-center gap-2`},Z={class:`text-xs font-bold`},Q=((e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n})(c({__name:`Table`,props:{columns:{},data:{},rowKey:{default:`id`},size:{default:`md`},bordered:{type:Boolean,default:!0},rounded:{type:Boolean,default:!0},striped:{type:Boolean,default:!1},hover:{type:Boolean,default:!0},selectable:{type:Boolean,default:!1},selectedRowKeys:{default:()=>[]},expandable:{type:Boolean,default:!1},emptyText:{default:`暂无数据`},loading:{type:Boolean,default:!1},loadingRowKeys:{default:()=>[]},animate:{type:Boolean,default:!0},delay:{default:0},entryClass:{default:``}},emits:[`update:selectedRowKeys`,`selection-change`,`sort-change`,`row-click`],setup(n,{emit:c}){let l=n,x=c,T=y(!1),D=y(null),M=y(null),N=y(new Set),P=d(()=>{if(!D.value||!M.value)return l.data;let e=l.columns.find(e=>e.key===D.value);return!e||!e.sortable?l.data:[...l.data].sort((t,n)=>{if(typeof e.sortable==`function`){let r=e.sortable(t,n);return M.value===`asc`?r:-r}let r=t[D.value],i=n[D.value];if(r===i)return 0;let a=r>i?1:-1;return M.value===`asc`?a:-a})}),F=d(()=>l.data.length!==0&&l.data.every(e=>l.selectedRowKeys.includes(e[l.rowKey]))),Q=d(()=>{let e=l.data.filter(e=>l.selectedRowKeys.includes(e[l.rowKey])).length;return e>0&&e{if(l.loading)return;let e=[];F.value||(e=l.data.map(e=>e[l.rowKey])),x(`update:selectedRowKeys`,e),x(`selection-change`,l.data.filter(t=>e.includes(t[l.rowKey])),e)},te=e=>{if(l.loading||l.loadingRowKeys.includes(e[l.rowKey]))return;let t=e[l.rowKey],n=[...l.selectedRowKeys],r=n.indexOf(t);r===-1?n.push(t):n.splice(r,1),x(`update:selectedRowKeys`,n),x(`selection-change`,l.data.filter(e=>n.includes(e[l.rowKey])),n)},ne=e=>{e.sortable&&!l.loading&&(D.value===e.key?M.value===`asc`?M.value=`desc`:(D.value=null,M.value=null):(D.value=e.key,M.value=`asc`),x(`sort-change`,e,M.value))},re=(e,t)=>{if(t.stopPropagation(),l.loading||l.loadingRowKeys.includes(e[l.rowKey]))return;let n=e[l.rowKey];N.value.has(n)?N.value.delete(n):N.value.add(n)},ie=(e,t)=>{let n=e.querySelector(`.expanded-inner-wrapper`);if(!n){t();return}n.style.height=`0px`,n.style.overflow=`hidden`,n.style.opacity=`0`;let r=n.scrollHeight,i=n.animate([{height:`0px`,opacity:0},{height:`${r}px`,opacity:1}],{duration:300,easing:`cubic-bezier(0.25, 1, 0.5, 1)`});i.onfinish=()=>{n.style.height=``,n.style.overflow=``,n.style.opacity=``,t()}},ae=(e,t)=>{let n=e.querySelector(`.expanded-inner-wrapper`);if(!n){t();return}let r=n.offsetHeight;n.style.height=`${r}px`,n.style.overflow=`hidden`,n.offsetHeight;let i=n.animate([{height:`${r}px`,opacity:1},{height:`0px`,opacity:0}],{duration:280,easing:`cubic-bezier(0.25, 1, 0.5, 1)`});i.onfinish=()=>{n.style.height=`0px`,t()}};s(()=>{l.animate&&setTimeout(()=>{T.value=!0},l.delay)});let $=d(()=>{switch(l.size){case`sm`:return`px-3 py-2 text-[11px] whitespace-nowrap`;case`lg`:return`px-5 py-4 text-sm whitespace-nowrap`;default:return`px-4 py-3 text-xs whitespace-nowrap`}}),oe=d(()=>l.animate?l.entryClass?T.value?l.entryClass:`opacity-0`:E(`transform transition-all duration-700 ease-swift`,T.value?`opacity-100 translate-y-0 scale-100 blur-none`:`opacity-0 translate-y-2 scale-98 blur-md pointer-events-none`):``);return(n,s)=>(o(),a(`div`,{class:u(f(E)(`relative w-full overflow-hidden`,l.rounded?`rounded-base`:`rounded-none`,oe.value))},[i(`div`,{class:u([`w-full overflow-x-auto scrollbar-none bg-background transition-all duration-300`,[l.bordered?`border border-border/80`:``,l.rounded?`rounded-base`:`rounded-none`]])},[i(`table`,L,[i(`thead`,null,[i(`tr`,R,[l.selectable?(o(),a(`th`,{key:0,class:u([$.value,`w-10 text-center`])},[t(I,{"model-value":F.value,indeterminate:Q.value,size:l.size===`lg`?`md`:`sm`,disabled:l.loading||l.data.length===0,onChange:ee},null,8,[`model-value`,`indeterminate`,`size`,`disabled`])],2)):p(``,!0),l.expandable?(o(),a(`th`,{key:1,class:u([$.value,`w-8`])},null,2)):p(``,!0),(o(!0),a(_,null,h(l.columns,n=>(o(),a(`th`,{key:n.key,class:u([$.value,n.sortable?`cursor-pointer hover:bg-muted/80 transition-colors`:``,n.align===`center`?`text-center`:n.align===`right`?`text-right`:`text-left`]),style:r(n.width?{width:typeof n.width==`number`?`${n.width}px`:n.width}:{}),onClick:e=>ne(n)},[i(`div`,{class:u([`inline-flex items-center gap-1.5 whitespace-nowrap`,n.align===`center`?`justify-center`:n.align===`right`?`justify-end`:`justify-start`])},[n.icon?(o(),S(e(n.icon),{key:0,class:`w-3.5 h-3.5 text-primary shrink-0`})):p(``,!0),i(`span`,null,m(n.title),1),n.sortable?(o(),a(`div`,B,[t(f(A),{class:u([`w-3 h-3 transition-colors`,D.value===n.key&&M.value===`asc`?`text-primary stroke-[3]`:`text-muted-foreground/40`])},null,8,[`class`]),t(f(O),{class:u([`w-3 h-3 transition-colors`,D.value===n.key&&M.value===`desc`?`text-primary stroke-[3]`:`text-muted-foreground/40`])},null,8,[`class`])])):p(``,!0)],2)],14,z))),128))])]),i(`tbody`,{class:u([`divide-y divide-border/40 font-medium text-foreground transition-all duration-300 ease-smooth`,l.loading?`opacity-35 blur-[1.5px] scale-[0.99] select-none pointer-events-none`:`opacity-100 blur-none scale-100`])},[(o(!0),a(_,null,h(P.value,(e,c)=>(o(),a(_,{key:e[l.rowKey]||c},[i(`tr`,{class:u([`relative transition-colors duration-150 animate-row-fade`,[l.hover?`hover:bg-muted/40 cursor-pointer`:``,l.striped&&c%2==1?`bg-secondary/30 dark:bg-muted/25`:`bg-background`,l.selectedRowKeys.includes(e[l.rowKey])?`bg-primary/5 dark:bg-primary/10`:``,l.loadingRowKeys.includes(e[l.rowKey])?`opacity-35 blur-[1px] select-none pointer-events-none row-loading`:``]]),style:r({"--row-delay":`${c*40}ms`}),onClick:t=>x(`row-click`,e,c,t)},[l.selectable?(o(),a(`td`,{key:0,class:u([$.value,`w-10 text-center`]),onClick:s[0]||=C(()=>{},[`stop`])},[t(I,{"model-value":l.selectedRowKeys.includes(e[l.rowKey]),size:l.size===`lg`?`md`:`sm`,disabled:l.loading||l.loadingRowKeys.includes(e[l.rowKey]),onChange:t=>te(e)},null,8,[`model-value`,`size`,`disabled`,`onChange`])],2)):p(``,!0),l.expandable?(o(),a(`td`,{key:1,class:u([$.value,`w-8 text-center`]),onClick:C(t=>re(e,t),[`stop`])},[i(`button`,U,[t(f(k),{class:u([`w-3.5 h-3.5 transition-transform duration-300`,N.value.has(e[l.rowKey])?`rotate-90 text-primary`:`rotate-0`])},null,8,[`class`])])],10,H)):p(``,!0),(o(!0),a(_,null,h(l.columns,t=>(o(),a(`td`,{key:t.key,class:u([$.value,t.align===`center`?`text-center`:t.align===`right`?`text-right`:`text-left`])},[g(n.$slots,`cell-${t.key}`,{row:e,column:t,value:e[t.key],index:c},()=>[b(m(e[t.key]!==void 0&&e[t.key]!==null?e[t.key]:`-`),1)],!0)],2))),128))],14,V),t(w,{css:!1,onEnter:ie,onLeave:ae},{default:v(()=>[l.expandable&&N.value.has(e[l.rowKey])?(o(),a(`tr`,W,[i(`td`,{colspan:l.columns.length+ +!!l.selectable+1,class:`p-0 border-b border-border/40 overflow-hidden`},[i(`div`,K,[i(`div`,q,[g(n.$slots,`expandedRow`,{row:e,index:c},void 0,!0)])])],8,G)])):p(``,!0)]),_:2},1024)],64))),128)),P.value.length===0?(o(),a(`tr`,J,[i(`td`,{colspan:l.columns.length+ +!!l.selectable+ +!!l.expandable,class:`py-12 text-center text-muted-foreground`},[i(`div`,X,[t(f(j),{class:`w-8 h-8 text-muted-foreground/30 stroke-[1.5]`}),i(`span`,Z,m(l.emptyText),1)])],8,Y)])):p(``,!0)],2)])],2),t(w,{name:`fade`},{default:v(()=>[l.loading?(o(),a(`div`,{key:0,class:u([`absolute inset-0 z-20 flex items-center justify-center bg-background/20 dark:bg-background/10 backdrop-blur-[1px] overflow-hidden pointer-events-none transition-all duration-300 will-change-[opacity]`,l.rounded?`rounded-base`:`rounded-none`])},[i(`div`,{class:u([`absolute inset-0 overflow-hidden`,l.rounded?`rounded-base`:`rounded-none`])},[...s[1]||=[i(`div`,{class:`w-[200%] h-full bg-gradient-to-r from-transparent via-foreground/[0.08] to-transparent animate-kinetic-shimmer`},null,-1)]],2)],2)):p(``,!0)]),_:1})],2))}}),[[`__scopeId`,`data-v-f7880f7d`]]);export{D as i,j as n,O as r,Q as t}; \ No newline at end of file diff --git a/server/adminui/_nuxt/Cjk4IpeB.js b/server/adminui/_nuxt/Cjk4IpeB.js new file mode 100644 index 0000000..bcedf98 --- /dev/null +++ b/server/adminui/_nuxt/Cjk4IpeB.js @@ -0,0 +1 @@ +import{A as e,C as t,E as n,J as r,K as i,M as a,St as o,Vt as s,X as c,_ as l,ct as u,ft as d,ht as f,k as p,mt as m,w as h}from"./BT-50xGH.js";import{c as g,l as ee}from"./C7_xDZuo.js";import{t as _}from"./ChxjuxiH.js";import{t as v}from"./BZ_oP5sc.js";import{n as y,r as b,t as x}from"./BkiPxbt6.js";import{i as S,r as C,t as w}from"./CLabUxWX.js";import{t as T}from"./CaMPYMl_.js";import{n as E,t as D}from"./Dqnn4udu.js";import{t as te}from"./O7BxGEKD.js";var ne=g(`pencil`,[[`path`,{d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z`,key:`1a8usu`}],[`path`,{d:`m15 5 4 4`,key:`1mk7zo`}]]),O={class:`flex items-center justify-between gap-3 px-5 py-4`},k={class:`px-5 pb-5`},A={class:`font-medium`},j={class:`text-xs text-muted-foreground`},M={class:`flex flex-wrap gap-1`},N={key:0,class:`text-xs text-muted-foreground`},P={key:2,class:`text-xs text-muted-foreground`},F={class:`flex justify-end gap-1`},I={class:`grid grid-cols-1 gap-x-6 gap-y-1 sm:grid-cols-2`},L={class:`flex items-center gap-6 pt-2 sm:col-span-2`},R={class:`flex items-center gap-2 text-sm`},z={class:`flex items-center gap-2 text-sm`},B={class:`flex justify-end gap-2`},V=a({__name:`upstreams`,setup(a){let{request:g,setToken:V}=ee(),{toast:H,confirm:U,handleError:W}=w(),G=f([]),K=f({}),q=f(!0),J=f(!1),Y=f(!1),X=f(null),Z=m({name:``,base_url:``,api_key:``,models:``,health_path:``,retry:0,priority:1,weight:1,disabled:!1,inject_usage:!1,group:``,model_map:``}),re=[{key:`name`,title:`名称`},{key:`base_url`,title:`Base URL`},{key:`models`,title:`模型`},{key:`priority`,title:`优先级`,width:70},{key:`weight`,title:`权重`,width:60},{key:`key`,title:`Key`,width:130},{key:`status`,title:`状态`,width:90},{key:`actions`,title:``,width:120,align:`right`}];async function Q(){try{let[e,t]=await Promise.all([g(`/upstreams`),g(`/health`).catch(()=>[])]);G.value=e,K.value=Object.fromEntries(t.map(e=>[e.name,e]))}catch(e){W(e,V)}finally{q.value=!1}}i(Q);function $(e){e?(X.value=e.name,Object.assign(Z,{name:e.name,base_url:e.base_url||``,api_key:e.api_key||``,models:(e.models||[]).join(`,`),health_path:e.health_path||``,retry:e.retry||0,priority:e.priority||1,weight:e.weight||1,disabled:!!e.disabled,inject_usage:!!e.inject_usage,group:e.group||``,model_map:e.model_map?JSON.stringify(e.model_map):``})):(X.value=null,Object.assign(Z,{name:``,base_url:``,api_key:``,models:``,health_path:``,retry:0,priority:1,weight:1,disabled:!1,inject_usage:!1,group:``,model_map:``})),Y.value=!0}async function ie(){let e=Z.models.split(`,`).map(e=>e.trim()).filter(Boolean),t={name:Z.name.trim(),base_url:Z.base_url.trim(),models:e,health_path:Z.health_path.trim(),retry:Number(Z.retry)||0,priority:Number(Z.priority)||0,weight:Math.max(1,Number(Z.weight)||1),disabled:Z.disabled,inject_usage:Z.inject_usage,group:Z.group.trim()},n=Z.model_map.trim();if(n)try{t.model_map=JSON.parse(n)}catch{H.error(`model_map 不是合法 JSON`);return}Z.api_key&&(t.api_key=Z.api_key),J.value=!0;try{let e=X.value?`/upstreams/`+encodeURIComponent(X.value):`/upstreams`;await g(e,{method:X.value?`PUT`:`POST`,body:JSON.stringify(t)}),H.success(`已保存`),Y.value=!1,await Q()}catch(e){W(e,V)}finally{J.value=!1}}async function ae(e){if(await U(`删除上游`,`确定删除上游 ${e} ?`,{danger:!0}))try{await g(`/upstreams/`+encodeURIComponent(e),{method:`DELETE`}),H.success(`已删除`),await Q()}catch(e){W(e,V)}}return(i,a)=>{let f=D,m=te;return r(),h(o(C),{padding:`none`},{header:u(()=>[t(`div`,O,[a[16]||=t(`div`,null,[t(`h2`,{class:`text-sm font-semibold`},`上游配置`),t(`p`,{class:`text-xs text-muted-foreground`},` 聚合多个上游,统一路由 / 重试 / 故障转移 `)],-1),e(o(S),{variant:`primary`,size:`sm`,icon:o(b),onClick:a[0]||=e=>$()},{default:u(()=>[...a[15]||=[p(` 新增上游 `,-1)]]),_:1},8,[`icon`])])]),default:u(()=>[t(`div`,k,[o(G).length||o(q)?(r(),h(o(_),{key:0,columns:re,data:o(G),"row-key":`name`,size:`sm`,hover:``,loading:o(q),"empty-text":`还没有上游,点「新增上游」添加。`},{"cell-name":u(({row:e})=>[t(`span`,A,s(e.name),1)]),"cell-base_url":u(({row:e})=>[t(`span`,j,s(e.base_url),1)]),"cell-models":u(({row:e})=>[t(`div`,M,[(r(!0),n(l,null,c(e.models,e=>(r(),h(o(T),{key:e,size:`sm`,variant:`secondary`},{default:u(()=>[p(s(e),1)]),_:2},1024))),128))])]),"cell-priority":u(({row:e})=>[p(s(e.priority),1)]),"cell-weight":u(({row:e})=>[p(s(e.weight),1)]),"cell-key":u(({row:e})=>[e.has_api_key?(r(),n(`span`,N,s(e.api_key),1)):(r(),h(o(T),{key:1,size:`sm`,variant:`outline`,class:`text-warning`},{default:u(()=>[...a[17]||=[p(`无 key`,-1)]]),_:1}))]),"cell-status":u(({row:e})=>[e.disabled?(r(),h(o(T),{key:0,size:`sm`,variant:`outline`},{default:u(()=>[...a[18]||=[p(`disabled`,-1)]]),_:1})):o(K)[e.name]?(r(),h(o(T),{key:1,size:`sm`,variant:o(K)[e.name]?.ok?`primary`:`secondary`},{default:u(()=>[p(s(o(K)[e.name]?.ok?`正常`:`异常`),1)]),_:2},1032,[`variant`])):(r(),n(`span`,P,`—`))]),"cell-actions":u(({row:n})=>[t(`div`,F,[e(o(S),{variant:`ghost`,size:`sm`,icon:o(ne),onClick:e=>$(n)},null,8,[`icon`,`onClick`]),e(o(S),{variant:`ghost`,size:`sm`,danger:``,icon:o(y),onClick:e=>ae(n.name)},null,8,[`icon`,`onClick`])])]),_:1},8,[`data`,`loading`])):(r(),h(o(x),{key:1,title:`还没有上游`,description:`点右上角「新增上游」添加第一个上游。`}))]),e(m,{open:o(Y),"onUpdate:open":a[14]||=e=>d(Y)?Y.value=e:null,title:o(X)?`编辑上游`:`新增上游`,size:`lg`},{footer:u(()=>[t(`div`,B,[e(o(S),{variant:`outline`,size:`sm`,onClick:a[13]||=e=>Y.value=!1},{default:u(()=>[...a[22]||=[p(`取消`,-1)]]),_:1}),e(o(S),{variant:`primary`,size:`sm`,loading:o(J),onClick:ie},{default:u(()=>[...a[23]||=[p(` 保存 `,-1)]]),_:1},8,[`loading`])])]),default:u(()=>[t(`div`,I,[e(f,{label:`name *`},{default:u(()=>[e(o(v),{modelValue:o(Z).name,"onUpdate:modelValue":a[1]||=e=>o(Z).name=e,placeholder:`openai-main`},null,8,[`modelValue`])]),_:1}),e(f,{label:`base_url *(带版本前缀,无尾斜杠)`},{default:u(()=>[e(o(v),{modelValue:o(Z).base_url,"onUpdate:modelValue":a[2]||=e=>o(Z).base_url=e,placeholder:`https://api.openai.com/v1`},null,8,[`modelValue`])]),_:1}),e(f,{label:`api_key(留空=保留原值)`},{default:u(()=>[e(o(v),{modelValue:o(Z).api_key,"onUpdate:modelValue":a[3]||=e=>o(Z).api_key=e,type:`password`,placeholder:`sk-...`},null,8,[`modelValue`])]),_:1}),e(f,{label:`models *(逗号分隔,* 兜底)`},{default:u(()=>[e(o(v),{modelValue:o(Z).models,"onUpdate:modelValue":a[4]||=e=>o(Z).models=e,placeholder:`gpt-4o,gpt-4o-mini`},null,8,[`modelValue`])]),_:1}),e(f,{label:`health_path`},{default:u(()=>[e(o(v),{modelValue:o(Z).health_path,"onUpdate:modelValue":a[5]||=e=>o(Z).health_path=e,placeholder:`/v1/models`},null,8,[`modelValue`])]),_:1}),e(f,{label:`retry(0-10)`},{default:u(()=>[e(o(v),{modelValue:o(Z).retry,"onUpdate:modelValue":a[6]||=e=>o(Z).retry=e,type:`number`},null,8,[`modelValue`])]),_:1}),e(f,{label:`priority(越小越优先)`},{default:u(()=>[e(o(v),{modelValue:o(Z).priority,"onUpdate:modelValue":a[7]||=e=>o(Z).priority=e,type:`number`},null,8,[`modelValue`])]),_:1}),e(f,{label:`weight`},{default:u(()=>[e(o(v),{modelValue:o(Z).weight,"onUpdate:modelValue":a[8]||=e=>o(Z).weight=e,type:`number`},null,8,[`modelValue`])]),_:1}),e(f,{label:`group(配合 X-Route-Group 路由)`},{default:u(()=>[e(o(v),{modelValue:o(Z).group,"onUpdate:modelValue":a[9]||=e=>o(Z).group=e,placeholder:`如 free / pro`},null,8,[`modelValue`])]),_:1}),e(f,{label:`model_map(JSON:公开名→上游真实名)`},{default:u(()=>[e(o(v),{modelValue:o(Z).model_map,"onUpdate:modelValue":a[10]||=e=>o(Z).model_map=e,placeholder:`{"gpt-4o":"gpt-4o-2024-11-20"}`},null,8,[`modelValue`])]),_:1}),t(`div`,L,[t(`label`,R,[e(o(E),{modelValue:o(Z).disabled,"onUpdate:modelValue":a[11]||=e=>o(Z).disabled=e},null,8,[`modelValue`]),a[19]||=p(),a[20]||=t(`span`,null,`disabled`,-1)]),t(`label`,z,[e(o(E),{modelValue:o(Z).inject_usage,"onUpdate:modelValue":a[12]||=e=>o(Z).inject_usage=e},null,8,[`modelValue`]),a[21]||=t(`span`,null,`流式注入 include_usage`,-1)])])])]),_:1},8,[`open`,`title`])]),_:1})}}});export{V as default}; \ No newline at end of file diff --git a/server/adminui/_nuxt/Cv1xSm-v.js b/server/adminui/_nuxt/Cv1xSm-v.js new file mode 100644 index 0000000..8256dfc --- /dev/null +++ b/server/adminui/_nuxt/Cv1xSm-v.js @@ -0,0 +1 @@ +import{K as e,S as t,ht as n}from"./BT-50xGH.js";import{n as r}from"./C7_xDZuo.js";function i(i,a,o){let s=n(!1);return e(()=>{i()&&setTimeout(()=>{s.value=!0},a())}),{isAnimateActive:s,entryClasses:t(()=>{if(!i())return``;let e=o();return e?s.value?e:`opacity-0`:r(`transform transition-all duration-700 ease-swift`,s.value?`opacity-100 translate-y-0 scale-100 blur-none`:`opacity-0 translate-y-1.5 scale-98 blur-md pointer-events-none`)})}}export{i as t}; \ No newline at end of file diff --git a/server/adminui/_nuxt/CxZD5dLJ.js b/server/adminui/_nuxt/CxZD5dLJ.js new file mode 100644 index 0000000..6e220d4 --- /dev/null +++ b/server/adminui/_nuxt/CxZD5dLJ.js @@ -0,0 +1,2 @@ +import{A as e,At as t,Ct as n,D as r,Dt as i,Et as a,Ft as o,Ht as s,I as c,It as l,Lt as u,Mt as d,N as f,Nt as p,O as m,Ot as ee,P as te,Pt as h,Tt as g,_,at as v,et as y,g as ne,h as re,jt as b,kt as x,q as S,tt as C,wt as w,x as ie,yt as ae}from"./BT-50xGH.js";var T=void 0,E=typeof window<`u`&&window.trustedTypes;if(E)try{T=E.createPolicy(`vue`,{createHTML:e=>e})}catch{}var D=T?e=>T.createHTML(e):e=>e,oe=`http://www.w3.org/2000/svg`,se=`http://www.w3.org/1998/Math/MathML`,O=typeof document<`u`?document:null,ce=O&&O.createElement(`template`),le={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{let t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{let i=t===`svg`?O.createElementNS(oe,e):t===`mathml`?O.createElementNS(se,e):n?O.createElement(e,{is:n}):O.createElement(e);return e===`select`&&r&&r.multiple!=null&&i.setAttribute(`multiple`,r.multiple),i},createText:e=>O.createTextNode(e),createComment:e=>O.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>O.querySelector(e),setScopeId(e,t){e.setAttribute(t,``)},insertStaticContent(e,t,n,r,i,a){let o=n?n.previousSibling:t.lastChild;if(i&&(i===a||i.nextSibling))for(;t.insertBefore(i.cloneNode(!0),n),i!==a&&(i=i.nextSibling););else{ce.innerHTML=D(r===`svg`?`${e}`:r===`mathml`?`${e}`:e);let i=ce.content;if(r===`svg`||r===`mathml`){let e=i.firstChild;for(;e.firstChild;)i.appendChild(e.firstChild);i.removeChild(e)}t.insertBefore(i,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},k=`transition`,A=`animation`,j=Symbol(`_vtc`),ue={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},de=g({},ne,ue),fe=(e=>(e.displayName=`Transition`,e.props=de,e))((e,{slots:t})=>c(re,P(e),t)),M=(e,t=[])=>{x(e)?e.forEach(e=>e(...t)):e&&e(...t)},N=e=>e?x(e)?e.some(e=>e.length>1):e.length>1:!1;function P(e){let t={};for(let n in e)n in ue||(t[n]=e[n]);if(e.css===!1)return t;let{name:n=`v`,type:r,duration:i,enterFromClass:a=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:s=`${n}-enter-to`,appearFromClass:c=a,appearActiveClass:l=o,appearToClass:u=s,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:f=`${n}-leave-active`,leaveToClass:p=`${n}-leave-to`}=e,m=pe(i),ee=m&&m[0],te=m&&m[1],{onBeforeEnter:h,onEnter:_,onEnterCancelled:v,onLeave:y,onLeaveCancelled:ne,onBeforeAppear:re=h,onAppear:b=_,onAppearCancelled:x=v}=t,S=(e,t,n,r)=>{e._enterCancelled=r,L(e,t?u:s),L(e,t?l:o),n&&n()},C=(e,t)=>{e._isLeaving=!1,L(e,d),L(e,p),L(e,f),t&&t()},w=e=>(t,n)=>{let i=e?b:_,o=()=>S(t,e,n);M(i,[t,o]),R(()=>{L(t,e?c:a),I(t,e?u:s),N(i)||z(t,r,ee,o)})};return g(t,{onBeforeEnter(e){M(h,[e]),I(e,a),I(e,o)},onBeforeAppear(e){M(re,[e]),I(e,c),I(e,l)},onEnter:w(!1),onAppear:w(!0),onLeave(e,t){e._isLeaving=!0;let n=()=>C(e,t);I(e,d),e._enterCancelled?(I(e,f),U(e)):(U(e),I(e,f)),R(()=>{e._isLeaving&&(L(e,d),I(e,p),N(y)||z(e,r,te,n))}),M(y,[e,n])},onEnterCancelled(e){S(e,!1,void 0,!0),M(v,[e])},onAppearCancelled(e){S(e,!0,void 0,!0),M(x,[e])},onLeaveCancelled(e){C(e),M(ne,[e])}})}function pe(e){if(e==null)return null;if(d(e))return[F(e.enter),F(e.leave)];{let t=F(e);return[t,t]}}function F(e){return s(e)}function I(e,t){t.split(/\s+/).forEach(t=>t&&e.classList.add(t)),(e[j]||(e[j]=new Set)).add(t)}function L(e,t){t.split(/\s+/).forEach(t=>t&&e.classList.remove(t));let n=e[j];n&&(n.delete(t),n.size||(e[j]=void 0))}function R(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}var me=0;function z(e,t,n,r){let i=e._endId=++me,a=()=>{i===e._endId&&r()};if(n!=null)return setTimeout(a,n);let{type:o,timeout:s,propCount:c}=B(e,t);if(!o)return r();let l=o+`end`,u=0,d=()=>{e.removeEventListener(l,f),a()},f=t=>{t.target===e&&++u>=c&&d()};setTimeout(()=>{u(n[e]||``).split(`, `),i=r(`${k}Delay`),a=r(`${k}Duration`),o=V(i,a),s=r(`${A}Delay`),c=r(`${A}Duration`),l=V(s,c),u=null,d=0,f=0;t===k?o>0&&(u=k,d=o,f=a.length):t===A?l>0&&(u=A,d=l,f=c.length):(d=Math.max(o,l),u=d>0?o>l?k:A:null,f=u?u===k?a.length:c.length:0);let p=u===k&&/\b(?:transform|all)(?:,|$)/.test(r(`${k}Property`).toString());return{type:u,timeout:d,propCount:f,hasTransform:p}}function V(e,t){for(;e.lengthH(t)+H(e[n])))}function H(e){return e===`auto`?0:Number(e.slice(0,-1).replace(`,`,`.`))*1e3}function U(e){return(e?e.ownerDocument:document).body.offsetHeight}function he(e,t,n){let r=e[j];r&&(t=(t?[t,...r]:[...r]).join(` `)),t==null?e.removeAttribute(`class`):n?e.setAttribute(`class`,t):e.className=t}var W=Symbol(`_vod`),ge=Symbol(`_vsh`),_e=Symbol(``),ve=/(?:^|;)\s*display\s*:/;function ye(e,t,n){let r=e.style,i=o(n),a=!1;if(n&&!i){if(t){if(o(t))for(let e of t.split(`;`)){let t=e.slice(0,e.indexOf(`:`)).trim();n[t]??K(r,t,``)}else for(let e in t)n[e]??K(r,e,``)}for(let i in n){i===`display`&&(a=!0);let s=n[i];s==null?K(r,i,``):Se(e,i,!o(t)&&t?t[i]:void 0,s)||K(r,i,s)}}else if(i){if(t!==n){let e=r[_e];e&&(n+=`;`+e),r.cssText=n,a=ve.test(n)}}else t&&e.removeAttribute(`style`);W in e&&(e[W]=a?r.display:``,e[ge]&&(r.display=`none`))}var G=/\s*!important$/;function K(e,t,n){if(x(n))n.forEach(n=>K(e,t,n));else if(n??=``,t.startsWith(`--`))G.test(n)?e.setProperty(t,n.replace(G,``),`important`):e.setProperty(t,n);else{let r=xe(e,t);G.test(n)?e.setProperty(a(r),n.replace(G,``),`important`):e[r]=n}}var be=[`Webkit`,`Moz`,`ms`],q={};function xe(e,t){let r=q[t];if(r)return r;let i=n(t);if(i!==`filter`&&i in e)return q[t]=i;i=w(i);for(let n=0;nMe||=(Ne.then(()=>Me=0),Date.now());function Fe(e,t){let n=e=>{if(!e._vts)e._vts=Date.now();else if(e._vts<=n.attached)return;let r=n.value;if(x(r)){let n=e.stopImmediatePropagation;e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0};let i=r.slice(),a=[e];for(let n=0;ne.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Le=(e,t,r,i,a,s)=>{let c=a===`svg`;t===`class`?he(e,i,c):t===`style`?ye(e,r,i):p(t)?b(t)||Oe(e,t,r,i,s):(t[0]===`.`?(t=t.slice(1),1):t[0]===`^`?(t=t.slice(1),0):Re(e,t,i,c))?(Te(e,t,i),!e.tagName.includes(`-`)&&(t===`value`||t===`checked`||t===`selected`)&&we(e,t,i,c,s,t!==`value`)):e._isVueCE&&(ze(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!o(i)))?Te(e,n(t),i,s,t):(t===`true-value`?e._trueValue=i:t===`false-value`&&(e._falseValue=i),we(e,t,i,c))};function Re(e,n,r,i){if(i)return!!(n===`innerHTML`||n===`textContent`||n in e&&Ie(n)&&t(r));if(n===`spellcheck`||n===`draggable`||n===`translate`||n===`autocorrect`||n===`sandbox`&&e.tagName===`IFRAME`||n===`form`||n===`list`&&e.tagName===`INPUT`||n===`type`&&e.tagName===`TEXTAREA`)return!1;if(n===`width`||n===`height`){let t=e.tagName;if(t===`IMG`||t===`VIDEO`||t===`CANVAS`||t===`SOURCE`)return!1}return Ie(n)&&o(r)?!1:n in e}function ze(e,t){let r=e._def.props;if(!r)return!1;let i=n(t);return Array.isArray(r)?r.some(e=>n(e)===i):Object.keys(r).some(e=>n(e)===i)}var Be=new WeakMap,Ve=new WeakMap,Y=Symbol(`_moveCb`),He=Symbol(`_enterCb`),Ue=(e=>(delete e.props.mode,e))({name:`TransitionGroup`,props:g({},de,{tag:String,moveClass:String}),setup(t,{slots:n}){let r=f(),i=v(),a,o;return S(()=>{if(!a.length)return;let e=t.moveClass||`${t.name||`v`}-move`;if(!Je(a[0].el,r.vnode.el,e)){a=[];return}a.forEach(We),a.forEach(Ge);let n=a.filter(Ke);U(r.vnode.el),n.forEach(t=>{let n=t.el,r=n.style;I(n,e),r.transform=r.webkitTransform=r.transitionDuration=``;let i=n[Y]=t=>{t&&t.target!==n||(!t||t.propertyName.endsWith(`transform`))&&(n.removeEventListener(`transitionend`,i),n[Y]=null,L(n,e))};n.addEventListener(`transitionend`,i)}),a=[]}),()=>{let s=ae(t),c=P(s),l=s.tag||_;if(a=[],o)for(let e=0;e{e.split(/\s+/).forEach(e=>e&&r.classList.remove(e))}),n.split(/\s+/).forEach(e=>e&&r.classList.add(e)),r.style.display=`none`;let a=t.nodeType===1?t:t.parentNode;a.appendChild(r);let{hasTransform:o}=B(r);return a.removeChild(r),o}var Ye=e=>{let t=e.props[`onUpdate:modelValue`]||!1;return x(t)?e=>ee(t,e):t};function Xe(e){e.target.composing=!0}function Ze(e){let t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event(`input`)))}var X=Symbol(`_assign`),Z=Symbol(`_initialValue`);function Q(e,t,n){return t&&(e=e.trim()),n&&(e=u(e)),e}var Qe={created(e,{modifiers:{lazy:t,trim:n,number:r}},i){e.parentNode&&(e.type===`text`?e[Z]=e.defaultValue.replace(/[\r\n]/g,``):e.type===`textarea`&&(e[Z]=e.defaultValue.replace(/\r\n?/g,` +`))),e[X]=Ye(i);let a=r||i.props&&i.props.type===`number`;J(e,t?`change`:`input`,t=>{t.target.composing||e[X](Q(e.value,n,a))}),(n||a)&&J(e,`change`,()=>{e.value=Q(e.value,n,a)}),t||(J(e,`compositionstart`,Xe),J(e,`compositionend`,Ze),J(e,`change`,Ze))},mounted(e,{value:t,modifiers:{trim:n,number:r}}){let i=t??``,a=e[Z];delete e[Z],a!==void 0&&(e.type===`text`||e.type===`textarea`)&&e.value!==a?e[X](Q(e.value,n,r)):e.value=i},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:r,trim:i,number:a}},o){if(e[X]=Ye(o),e.composing)return;let s=(a||e.type===`number`)&&!/^0\d/.test(e.value)?u(e.value):e.value,c=t??``;if(s===c)return;let l=e.getRootNode();(l instanceof Document||l instanceof ShadowRoot)&&l.activeElement===e&&e.type!==`range`&&(r&&t===n||i&&e.value.trim()===c)||(e.value=c)}},$e=[`ctrl`,`shift`,`alt`,`meta`],et={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&&e.button!==0,middle:e=>`button`in e&&e.button!==1,right:e=>`button`in e&&e.button!==2,exact:(e,t)=>$e.some(n=>e[`${n}Key`]&&!t.includes(n))},tt=(e,t)=>{if(!e)return e;let n=e._withMods||={},r=t.join(`.`);return n[r]||(n[r]=((n,...r)=>{for(let e=0;e{let n=e._withKeys||={},r=t.join(`.`);return n[r]||(n[r]=(n=>{if(!(`key`in n))return;let r=a(n.key);if(t.some(e=>e===r||nt[e]===r))return e(n)}))},it=g({patchProp:Le},le),$,at=!1;function ot(){return $||=m(it)}function st(){return $=at?$:r(it),at=!0,$}var ct=((...e)=>{ot().render(...e)}),lt=((...e)=>{let n=ot().createApp(...e),{mount:r}=n;return n.mount=e=>{let i=ft(e);if(!i)return;let a=n._component;!t(a)&&!a.render&&!a.template&&(a.template=i.innerHTML),i.nodeType===1&&(i.textContent=``);let o=r(i,!1,dt(i));return i instanceof Element&&(i.removeAttribute(`v-cloak`),i.setAttribute(`data-v-app`,``)),o},n}),ut=((...e)=>{let t=st().createApp(...e),{mount:n}=t;return t.mount=e=>{let t=ft(e);if(t)return n(t,!0,dt(t))},t});function dt(e){if(e instanceof SVGElement)return`svg`;if(typeof MathMLElement==`function`&&e instanceof MathMLElement)return`mathml`}function ft(e){return o(e)?document.querySelector(e):e}var pt=/bot\b|chrome-lighthouse|facebookexternalhit|google\b/i;function mt(e){return pt.test(e)}import.meta.url.replace(/\/app\/.*$/,`/`);export{ut as a,rt as c,lt as i,tt as l,fe as n,ct as o,Ue as r,Qe as s,mt as t}; \ No newline at end of file diff --git a/server/adminui/_nuxt/Cy6fBfr9.js b/server/adminui/_nuxt/Cy6fBfr9.js new file mode 100644 index 0000000..2524f87 --- /dev/null +++ b/server/adminui/_nuxt/Cy6fBfr9.js @@ -0,0 +1 @@ +import{A as e,C as t,J as n,K as r,M as i,St as a,Vt as o,ct as s,ft as c,ht as l,k as u,w as d}from"./BT-50xGH.js";import{c as f}from"./CxZD5dLJ.js";import{l as p}from"./C7_xDZuo.js";import{t as m}from"./ChxjuxiH.js";import{t as h}from"./BZ_oP5sc.js";import{n as g,r as _,t as v}from"./BkiPxbt6.js";import{i as y,r as b,t as x}from"./CLabUxWX.js";var S={class:`space-y-4 px-5 pb-5`},C={class:`flex max-w-md gap-2`},w={class:`text-xs`},T=i({__name:`tokens`,setup(i){let{request:T,setToken:E}=p(),{toast:D,confirm:O,handleError:k}=x(),A=l([]),j=l(!0),M=l(``),N=[{key:`masked`,title:`Token`},{key:`actions`,title:``,width:80,align:`right`}];async function P(){try{A.value=await T(`/tokens`)}catch(e){k(e,E)}finally{j.value=!1}}r(P);async function F(){let e=M.value.trim();if(!e)return D.warning(`请输入 token`);try{await T(`/tokens`,{method:`POST`,body:JSON.stringify({token:e})}),M.value=``,D.success(`已添加`),await P()}catch(e){k(e,E)}}async function I(e){if(await O(`删除令牌`,`确定删除该 token?`,{danger:!0}))try{await T(`/tokens/delete`,{method:`POST`,body:JSON.stringify({token:e})}),D.success(`已删除`),await P()}catch(e){k(e,E)}}return(r,i)=>(n(),d(a(b),{padding:`none`},{header:s(()=>[...i[1]||=[t(`div`,{class:`px-5 py-4`},[t(`h2`,{class:`text-sm font-semibold`},`客户端令牌`),t(`p`,{class:`text-xs text-muted-foreground`},` 明文列表,兼容旧版;新接入推荐用「设备」 `)],-1)]]),default:s(()=>[t(`div`,S,[t(`div`,C,[e(a(h),{modelValue:a(M),"onUpdate:modelValue":i[0]||=e=>c(M)?M.value=e:null,placeholder:`输入新 token (如 sk-client-xxxx)`,onKeydown:f(F,[`enter`])},null,8,[`modelValue`]),e(a(y),{variant:`primary`,size:`md`,icon:a(_),onClick:F},{default:s(()=>[...i[2]||=[u(`添加`,-1)]]),_:1},8,[`icon`])]),a(A).length||a(j)?(n(),d(a(m),{key:0,columns:N,data:a(A),size:`sm`,hover:``,loading:a(j),"empty-text":`还没有客户端令牌。`},{"cell-masked":s(({row:e})=>[t(`code`,w,o(e.masked),1)]),"cell-actions":s(({row:t})=>[e(a(y),{variant:`ghost`,size:`sm`,danger:``,icon:a(g),onClick:e=>I(t.full)},null,8,[`icon`,`onClick`])]),_:1},8,[`data`,`loading`])):(n(),d(a(v),{key:1,title:`还没有客户端令牌`}))])]),_:1}))}});export{T as default}; \ No newline at end of file diff --git a/server/adminui/_nuxt/D50T9Hbc.js b/server/adminui/_nuxt/D50T9Hbc.js new file mode 100644 index 0000000..7199541 --- /dev/null +++ b/server/adminui/_nuxt/D50T9Hbc.js @@ -0,0 +1 @@ +import{c as e}from"./C7_xDZuo.js";var t=e(`activity`,[[`path`,{d:`M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2`,key:`169zse`}]]);export{t}; \ No newline at end of file diff --git a/server/adminui/_nuxt/DKXNkI4w.js b/server/adminui/_nuxt/DKXNkI4w.js new file mode 100644 index 0000000..b39185d --- /dev/null +++ b/server/adminui/_nuxt/DKXNkI4w.js @@ -0,0 +1 @@ +import{Gt as e,H as t,Kt as n,L as r,N as i,R as a,U as o,W as s,Wt as c,ft as l,ht as u,i as d,st as f,ut as p,xt as m}from"./BT-50xGH.js";import{a as h,i as g}from"#entry";var _=Object.assign((e,t)=>l(t)?m(t):t,{_static:!0});function v(e,t={}){let n=t.head||g();return n.ssr?n.push(e||{},t):y(n,e,t)}function y(e,n,r={}){let a=p();if(a&&!a.active)return{patch(){},dispose(){},_i:-1};let c=u(!1);if(r.onRendered&&a){let e=r.onRendered;r={...r,onRendered:t=>a.run(()=>e(t))}}let l;return f(()=>{let t=c.value?{}:h(n,_);l?l.patch(t):l=e.push(t,r)}),i()&&(o(()=>{l.dispose()}),s(()=>{c.value=!0}),t(()=>{c.value=!1})),l}var b=n({docsBase:c,reporters:e});function x(e){let t=e||d();return t.ssrContext?.head||t.runWithContext(()=>{if(r()){let e=a(`usehead`);if(!e)throw b.NUXT_E6001();return e}})}function S(e,t={}){return v(e,{head:t.head||x(t.nuxt),...t})}export{S as t}; \ No newline at end of file diff --git a/server/adminui/_nuxt/DZrj6clu.js b/server/adminui/_nuxt/DZrj6clu.js new file mode 100644 index 0000000..900941a --- /dev/null +++ b/server/adminui/_nuxt/DZrj6clu.js @@ -0,0 +1 @@ +import{C as e,E as t,J as n,Vt as r}from"./BT-50xGH.js";import{t as i}from"./DKXNkI4w.js";import{t as a}from"#entry";var o={class:`antialiased bg-white dark:bg-[#020420] dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-[#020420] tracking-wide`},s={class:`max-w-520px text-center`},c=[`textContent`],l=[`textContent`],u=[`textContent`],d=a({__name:`error-500`,props:{appName:{type:String,default:`Nuxt`},status:{type:Number,default:500},statusText:{type:String,default:`Internal server error`},description:{type:String,default:`This page is temporarily unavailable.`},refresh:{type:String,default:`Refresh this page`}},setup(a){let d=a;return i({title:`${d.status} - ${d.statusText} | ${d.appName}`,script:[{innerHTML:`!function(){let e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(let e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver(e=>{for(let t of e)if("childList"===t.type)for(let e of t.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)}).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;let r=function(e){let r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),r.credentials="use-credentials"===e.crossOrigin?"include":"anonymous"===e.crossOrigin?"omit":"same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:`*,:after,:before{box-sizing:border-box;border-style:solid;border-width:0;border-color:var(--un-default-border-color,#e5e7eb)}:after,:before{--un-content:""}html{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}h1,h2{font-size:inherit;font-weight:inherit}h1,h2,p{margin:0}*,:after,:before{--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 #0000;--un-ring-shadow:0 0 #0000;--un-shadow-inset: ;--un-shadow:0 0 #0000;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:#93c5fd80;--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: }`}]}),(i,d)=>(n(),t(`div`,o,[e(`div`,s,[e(`h1`,{class:`font-semibold leading-none mb-4 sm:text-[110px] tabular-nums text-[80px]`,textContent:r(a.status)},null,8,c),e(`h2`,{class:`font-semibold mb-2 sm:text-3xl text-2xl`,textContent:r(a.statusText)},null,8,l),e(`p`,{class:`mb-4 px-2 text-[#64748B] text-md`,textContent:r(a.description)},null,8,u)])]))}},[[`__scopeId`,`data-v-f91406c7`]]);export{d as default}; \ No newline at end of file diff --git a/server/adminui/_nuxt/DfpAeMWm.js b/server/adminui/_nuxt/DfpAeMWm.js new file mode 100644 index 0000000..f54a0d3 --- /dev/null +++ b/server/adminui/_nuxt/DfpAeMWm.js @@ -0,0 +1 @@ +import{A as e,Bt as t,C as n,E as r,J as i,K as a,M as o,Rt as s,S as c,St as l,T as u,U as d,Vt as f,X as p,_ as m,_t as h,b as g,ct as _,ht as v,lt as y,ot as b,pt as x,ut as S,vt as C,w,xt as T}from"./BT-50xGH.js";import{n as E,s as D}from"./CxZD5dLJ.js";import{c as O,n as k,o as ee}from"./C7_xDZuo.js";import{i as te,r as ne}from"./ChxjuxiH.js";import{t as re}from"./YiEwAvN-.js";var ie=O(`search`,[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]),A=Math.min,j=Math.max,M=Math.round,N=Math.floor,P=e=>({x:e,y:e}),ae={left:`right`,right:`left`,bottom:`top`,top:`bottom`};function oe(e,t,n){return j(e,A(t,n))}function F(e,t){return typeof e==`function`?e(t):e}function I(e){return e.split(`-`)[0]}function L(e){return e.split(`-`)[1]}function se(e){return e===`x`?`y`:`x`}function ce(e){return e===`y`?`height`:`width`}function R(e){let t=e[0];return t===`t`||t===`b`?`y`:`x`}function le(e){return se(R(e))}function ue(e,t,n){n===void 0&&(n=!1);let r=L(e),i=le(e),a=ce(i),o=i===`x`?r===(n?`end`:`start`)?`right`:`left`:r===`start`?`bottom`:`top`;return t.reference[a]>t.floating[a]&&(o=z(o)),[o,z(o)]}function de(e){let t=z(e);return[fe(e),t,fe(t)]}function fe(e){return e.includes(`start`)?e.replace(`start`,`end`):e.replace(`end`,`start`)}var pe=[`left`,`right`],me=[`right`,`left`],he=[`top`,`bottom`],ge=[`bottom`,`top`];function _e(e,t,n){switch(e){case`top`:case`bottom`:return n?t?me:pe:t?pe:me;case`left`:case`right`:return t?he:ge;default:return[]}}function ve(e,t,n,r){let i=L(e),a=_e(I(e),n===`start`,r);return i&&(a=a.map(e=>e+`-`+i),t&&(a=a.concat(a.map(fe)))),a}function z(e){let t=I(e);return ae[t]+e.slice(t.length)}function ye(e){return{top:e.top??0,right:e.right??0,bottom:e.bottom??0,left:e.left??0}}function be(e){return typeof e==`number`?{top:e,right:e,bottom:e,left:e}:ye(e)}function B(e){let{x:t,y:n,width:r,height:i}=e;return{width:r,height:i,top:n,left:t,right:t+r,bottom:n+i,x:t,y:n}}function xe(e,t,n){let{reference:r,floating:i}=e,a=R(t),o=le(t),s=ce(o),c=I(t),l=a===`y`,u=r.x+r.width/2-i.width/2,d=r.y+r.height/2-i.height/2,f=r[s]/2-i[s]/2,p;switch(c){case`top`:p={x:u,y:r.y-i.height};break;case`bottom`:p={x:u,y:r.y+r.height};break;case`right`:p={x:r.x+r.width,y:d};break;case`left`:p={x:r.x-i.width,y:d};break;default:p={x:r.x,y:r.y}}let m=L(t);return m&&(p[o]+=f*(m===`end`?1:-1)*(n&&l?-1:1)),p}async function Se(e,t){t===void 0&&(t={});let{x:n,y:r,platform:i,rects:a,elements:o,strategy:s}=e,{boundary:c=`clippingAncestors`,rootBoundary:l=`viewport`,elementContext:u=`floating`,altBoundary:d=!1,padding:f=0}=F(t,e),p=be(f),m=o[d?u===`floating`?`reference`:`floating`:u],h=B(await i.getClippingRect({element:await(i.isElement==null?void 0:i.isElement(m))??!0?m:m.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(o.floating)),boundary:c,rootBoundary:l,strategy:s})),g=u===`floating`?{x:n,y:r,width:a.floating.width,height:a.floating.height}:a.reference,_=await(i.getOffsetParent==null?void 0:i.getOffsetParent(o.floating)),v=await(i.isElement==null?void 0:i.isElement(_))&&await(i.getScale==null?void 0:i.getScale(_))||{x:1,y:1},y=B(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:o,rect:g,offsetParent:_,strategy:s}):g);return{top:(h.top-y.top+p.top)/v.y,bottom:(y.bottom-h.bottom+p.bottom)/v.y,left:(h.left-y.left+p.left)/v.x,right:(y.right-h.right+p.right)/v.x}}var Ce=50,we=async(e,t,n)=>{let{placement:r=`bottom`,strategy:i=`absolute`,middleware:a=[],platform:o}=n,s=o.detectOverflow?o:{...o,detectOverflow:Se},c=await(o.isRTL==null?void 0:o.isRTL(t)),l=await o.getElementRects({reference:e,floating:t,strategy:i}),{x:u,y:d}=xe(l,r,c),f=r,p=0,m={};for(let n=0;ne<=0)){let e=(i.flip?.index||0)+1,t=S[e];if(t&&(u!==`alignment`||_===R(t)||T.every(e=>R(e.placement)!==_||e.overflows[0]>0)))return{data:{index:e,overflows:T},reset:{placement:t}};let n=T.filter(e=>e.overflows[0]<=0).sort((e,t)=>e.overflows[1]-t.overflows[1])[0]?.placement;if(!n)switch(f){case`bestFit`:{let e=T.filter(e=>{if(x){let t=R(e.placement);return t===_||t===`y`}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,t)=>e+t,0)]).sort((e,t)=>e[1]-t[1])[0]?.[0];e&&(n=e);break}case`initialPlacement`:n=o}if(r!==n)return{reset:{placement:n}}}return{}}}},Ee=new Set([`left`,`top`]);async function De(e,t){let{placement:n,platform:r,elements:i}=e,a=await(r.isRTL==null?void 0:r.isRTL(i.floating)),o=I(n),s=L(n),c=R(n)===`y`,l=Ee.has(o)?-1:1,u=a&&c?-1:1,d=F(t,e),{mainAxis:f,crossAxis:p,alignmentAxis:m}=typeof d==`number`?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return s&&typeof m==`number`&&(p=s===`end`?m*-1:m),c?{x:p*u,y:f*l}:{x:f*l,y:p*u}}var Oe=function(e){return e===void 0&&(e=0),{name:`offset`,options:e,async fn(t){var n;let{x:r,y:i,placement:a,middlewareData:o}=t,s=await De(t,e);return a===o.offset?.placement&&(n=o.arrow)!=null&&n.alignmentOffset?{}:{x:r+s.x,y:i+s.y,data:{...s,placement:a}}}}},ke=function(e){return e===void 0&&(e={}),{name:`shift`,options:e,async fn(t){let{x:n,y:r,placement:i,platform:a}=t,{mainAxis:o=!0,crossAxis:s=!1,limiter:c={fn:e=>{let{x:t,y:n}=e;return{x:t,y:n}}},...l}=F(e,t),u={x:n,y:r},d=await a.detectOverflow(t,l),f=R(i),p=se(f),m=u[p],h=u[f],g=(e,t)=>oe(t+d[e===`y`?`top`:`left`],t,t-d[e===`y`?`bottom`:`right`]);o&&(m=g(p,m)),s&&(h=g(f,h));let _=c.fn({...t,[p]:m,[f]:h});return{..._,data:{x:_.x-n,y:_.y-r,enabled:{[p]:o,[f]:s}}}}}},Ae=function(e){return e===void 0&&(e={}),{name:`size`,options:e,async fn(t){let{placement:n,rects:r,platform:i,elements:a}=t,{apply:o=()=>{},...s}=F(e,t),c=await i.detectOverflow(t,s),l=I(n),u=L(n),d=R(n)===`y`,{width:f,height:p}=r.floating,m,h;l===`top`||l===`bottom`?(m=l,h=u===(await(i.isRTL==null?void 0:i.isRTL(a.floating))?`start`:`end`)?`left`:`right`):(h=l,m=u===`end`?`top`:`bottom`);let g=p-c.top-c.bottom,_=f-c.left-c.right,v=A(p-c[m],g),y=A(f-c[h],_),b=t.middlewareData.shift,x=!b,S=v,C=y;b!=null&&b.enabled.x&&(C=_),b!=null&&b.enabled.y&&(S=g),x&&!u&&(d?C=f-2*j(c.left,c.right):S=p-2*j(c.top,c.bottom)),await o({...t,availableWidth:C,availableHeight:S});let w=await i.getDimensions(a.floating);return f!==w.width||p!==w.height?{reset:{rects:!0}}:{}}}};function V(){return typeof window<`u`}function H(e){return je(e)?(e.nodeName||``).toLowerCase():`#document`}function U(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function W(e){return((je(e)?e.ownerDocument:e.document)||window.document)?.documentElement}function je(e){return V()?e instanceof Node||e instanceof U(e).Node:!1}function G(e){return V()?e instanceof Element||e instanceof U(e).Element:!1}function K(e){return V()?e instanceof HTMLElement||e instanceof U(e).HTMLElement:!1}function Me(e){return!V()||typeof ShadowRoot>`u`?!1:e instanceof ShadowRoot||e instanceof U(e).ShadowRoot}function Ne(e){let{overflow:t,overflowX:n,overflowY:r,display:i}=Y(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&i!==`inline`&&i!==`contents`}function Pe(e){return/^(table|td|th)$/.test(H(e))}function Fe(e){try{if(e.matches(`:popover-open`))return!0}catch{}try{return e.matches(`:modal`)}catch{return!1}}var Ie=/transform|translate|scale|rotate|perspective|filter/,Le=/paint|layout|strict|content/,q=e=>!!e&&e!==`none`,Re;function ze(e){let t=G(e)?Y(e):e;return q(t.transform)||q(t.translate)||q(t.scale)||q(t.rotate)||q(t.perspective)||!Ve()&&(q(t.backdropFilter)||q(t.filter))||Ie.test(t.willChange||``)||Le.test(t.contain||``)}function Be(e){let t=X(e);for(;K(t)&&!J(t);){if(ze(t))return t;if(Fe(t))return null;t=X(t)}return null}function Ve(){return Re??=typeof CSS<`u`&&CSS.supports&&CSS.supports(`-webkit-backdrop-filter`,`none`),Re}function J(e){return/^(html|body|#document)$/.test(H(e))}function Y(e){return U(e).getComputedStyle(e)}function He(e){return G(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function X(e){if(H(e)===`html`)return e;let t=e.assignedSlot||e.parentNode||Me(e)&&e.host||W(e);return Me(t)?t.host:t}function Ue(e){let t=X(e);return J(t)?(e.ownerDocument||e).body:K(t)&&Ne(t)?t:Ue(t)}function Z(e,t,n){t===void 0&&(t=[]),n===void 0&&(n=!0);let r=Ue(e),i=r===e.ownerDocument?.body,a=U(r);if(i){let e=We(a);return t.concat(a,a.visualViewport||[],Ne(r)?r:[],e&&n?Z(e):[])}return t.concat(r,Z(r,[],n))}function We(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function Ge(e){let t=Y(e),n=parseFloat(t.width)||0,r=parseFloat(t.height)||0,i=K(e),a=i?e.offsetWidth:n,o=i?e.offsetHeight:r,s=M(n)!==a||M(r)!==o;return s&&(n=a,r=o),{width:n,height:r,$:s}}function Ke(e){return G(e)?e:e.contextElement}function Q(e){let t=Ke(e);if(!K(t))return P(1);let n=t.getBoundingClientRect(),{width:r,height:i,$:a}=Ge(t),o=(a?M(n.width):n.width)/r,s=(a?M(n.height):n.height)/i;return(!o||!Number.isFinite(o))&&(o=1),(!s||!Number.isFinite(s))&&(s=1),{x:o,y:s}}var qe=P(0);function Je(e){let t=U(e);return!Ve()||!t.visualViewport?qe:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function Ye(e,t,n){return t===void 0&&(t=!1),!!n&&t&&n===U(e)}function $(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);let i=e.getBoundingClientRect(),a=Ke(e),o=P(1);t&&(r?G(r)&&(o=Q(r)):o=Q(e));let s=Ye(a,n,r)?Je(a):P(0),c=(i.left+s.x)/o.x,l=(i.top+s.y)/o.y,u=i.width/o.x,d=i.height/o.y;if(a&&r){let e=U(a),t=G(r)?U(r):r,n=e,i=We(n);for(;i&&t!==n;){let e=Q(i),t=i.getBoundingClientRect(),r=Y(i),a=t.left+(i.clientLeft+parseFloat(r.paddingLeft))*e.x,o=t.top+(i.clientTop+parseFloat(r.paddingTop))*e.y;c*=e.x,l*=e.y,u*=e.x,d*=e.y,c+=a,l+=o,n=U(i),i=We(n)}}return B({width:u,height:d,x:c,y:l})}function Xe(e,t){let n=He(e).scrollLeft;return t?t.left+n:$(W(e)).left+n}function Ze(e,t){let n=e.getBoundingClientRect();return{x:n.left+t.scrollLeft-Xe(e,n),y:n.top+t.scrollTop}}function Qe(e){let{elements:t,rect:n,offsetParent:r,strategy:i}=e,a=i===`fixed`,o=W(r),s=t?Fe(t.floating):!1;if(r===o||s&&a)return n;let c={scrollLeft:0,scrollTop:0},l=P(1),u=P(0),d=K(r);if((d||!a)&&((H(r)!==`body`||Ne(o))&&(c=He(r)),d)){let e=$(r);l=Q(r),u.x=e.x+r.clientLeft,u.y=e.y+r.clientTop}let f=o&&!d&&!a?Ze(o,c):P(0);return{width:n.width*l.x,height:n.height*l.y,x:n.x*l.x-c.scrollLeft*l.x+u.x+f.x,y:n.y*l.y-c.scrollTop*l.y+u.y+f.y}}function $e(e){return e.getClientRects?Array.from(e.getClientRects()):[]}function et(e){let t=He(e),n=e.ownerDocument.body,r=j(e.scrollWidth,e.clientWidth,n.scrollWidth,n.clientWidth),i=j(e.scrollHeight,e.clientHeight,n.scrollHeight,n.clientHeight),a=-t.scrollLeft+Xe(e),o=-t.scrollTop;return Y(n).direction===`rtl`&&(a+=j(e.clientWidth,n.clientWidth)-r),{width:r,height:i,x:a,y:o}}var tt=25;function nt(e,t,n){n===void 0&&(n=`viewport`);let r=n===`layoutViewport`,i=U(e),a=W(e),o=i.visualViewport,s=a.clientWidth,c=a.clientHeight,l=0,u=0;if(o){let e=!Ve()||t===`fixed`;r?e||(l=-o.offsetLeft,u=-o.offsetTop):(s=o.width,c=o.height,e&&(l=o.offsetLeft,u=o.offsetTop))}if(Xe(a)<=0){let e=a.ownerDocument,t=e.body,n=getComputedStyle(t),r=e.compatMode===`CSS1Compat`&&parseFloat(n.marginLeft)+parseFloat(n.marginRight)||0,i=Math.abs(a.clientWidth-t.clientWidth-r),o=getComputedStyle(a).scrollbarGutter===`stable both-edges`?i/2:i;o<=tt&&(s-=o)}return{width:s,height:c,x:l,y:u}}function rt(e,t){let n=$(e,!0,t===`fixed`),r=n.top+e.clientTop,i=n.left+e.clientLeft,a=Q(e);return{width:e.clientWidth*a.x,height:e.clientHeight*a.y,x:i*a.x,y:r*a.y}}function it(e,t,n){let r;if(t===`viewport`||t===`layoutViewport`)r=nt(e,n,t);else if(t===`document`)r=et(W(e));else if(G(t))r=rt(t,n);else{let n=Je(e);r={x:t.x-n.x,y:t.y-n.y,width:t.width,height:t.height}}return B(r)}function at(e,t){let n=t.get(e);if(n)return n;let r=Z(e,[],!1).filter(e=>G(e)&&H(e)!==`body`),i=null,a=Y(e).position===`fixed`,o=a?X(e):e;for(;G(o)&&!J(o);){let e=Y(o),t=ze(o),n=i?i.position:a?`fixed`:``;!t&&(n===`fixed`||n===`absolute`&&e.position===`static`)?r=r.filter(e=>e!==o):i=e,o=X(o)}return t.set(e,r),r}function ot(e){let{element:t,boundary:n,rootBoundary:r,strategy:i}=e,a=[...n===`clippingAncestors`?Fe(t)?[]:at(t,this._c):[].concat(n),r],o=it(t,a[0],i),s=o.top,c=o.right,l=o.bottom,u=o.left;for(let e=1;e{s(!1,1e-7)},1e3)}y=!1}try{r=new IntersectionObserver(b,{...v,root:a.ownerDocument})}catch{r=new IntersectionObserver(b,v)}r.observe(e)}let c=U(e),l=()=>s(n);return c.addEventListener(`resize`,l),s(!0),()=>{c.removeEventListener(`resize`,l),o()}}function _t(e,t,n,r){r===void 0&&(r={});let{ancestorScroll:i=!0,ancestorResize:a=!0,elementResize:o=typeof ResizeObserver==`function`,layoutShift:s=typeof IntersectionObserver==`function`,animationFrame:c=!1}=r,l=Ke(e),u=i||a?[...l?Z(l):[],...t?Z(t):[]]:[];u.forEach(e=>{i&&e.addEventListener(`scroll`,n),a&&e.addEventListener(`resize`,n)});let d=l&&s?gt(l,n,a):null,f=-1,p=null;o&&(p=new ResizeObserver(e=>{let[r]=e;r&&r.target===l&&p&&t&&(p.unobserve(t),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var e;(e=p)==null||e.observe(t)})),n()}),l&&!c&&p.observe(l),t&&p.observe(t));let m,h=c?$(e):null;c&&g();function g(){let t=$(e);h&&!ht(h,t)&&n(),h=t,m=requestAnimationFrame(g)}return n(),()=>{var e;u.forEach(e=>{i&&e.removeEventListener(`scroll`,n),a&&e.removeEventListener(`resize`,n)}),d?.(),(e=p)==null||e.disconnect(),p=null,c&&cancelAnimationFrame(m)}}var vt=Oe,yt=ke,bt=Te,xt=Ae,St=(e,t,n)=>{let r=new Map,i=n??{},a={...mt,...i.platform,_c:r};return we(e,t,{...i,platform:a})};function Ct(e){return typeof e==`object`&&!!e&&`$el`in e}function wt(e){if(Ct(e)){let t=e.$el;return je(t)&&H(t)===`#comment`?null:t}return e}function Tt(e){return typeof window>`u`?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function Et(e,t){let n=Tt(e);return Math.round(t*n)/n}function Dt(e,t,n){n===void 0&&(n={});let r=n.whileElementsMounted,i=c(()=>T(n.open)??!0),a=c(()=>T(n.middleware)),o=c(()=>T(n.placement)??`bottom`),s=c(()=>T(n.strategy)??`absolute`),l=c(()=>T(n.transform)??!0),u=c(()=>wt(e.value)),d=c(()=>wt(t.value)),f=v(0),p=v(0),m=v(s.value),g=v(o.value),_=C({}),y=v(!1),w=c(()=>{let e={position:m.value,left:`0`,top:`0`};if(!d.value)return e;let t=Et(d.value,f.value),n=Et(d.value,p.value);return l.value?{...e,transform:`translate(`+t+`px, `+n+`px)`,...Tt(d.value)>=1.5&&{willChange:`transform`}}:{position:m.value,left:t+`px`,top:n+`px`}}),E;function D(){if(u.value==null||d.value==null)return;let e=i.value;St(u.value,d.value,{middleware:a.value,placement:o.value,strategy:s.value}).then(t=>{f.value=t.x,p.value=t.y,m.value=t.strategy,g.value=t.placement,_.value=t.middlewareData,y.value=e!==!1})}function O(){typeof E==`function`&&(E(),E=void 0)}function k(){if(O(),r===void 0){D();return}if(u.value!=null&&d.value!=null){E=r(u.value,d.value,D);return}}function ee(){i.value||(y.value=!1)}return b([a,o,s,i],D,{flush:`sync`}),b([u,d],k,{flush:`sync`}),b(i,ee,{flush:`sync`}),S()&&x(O),{x:h(f),y:h(p),strategy:h(m),placement:h(g),middlewareData:h(_),isPositioned:h(y),floatingStyles:w,update:D}}var Ot={key:0,class:`font-bold text-foreground truncate`},kt={key:1,class:`text-muted-foreground/60 font-medium truncate`},At={class:`flex items-center gap-1.5 shrink-0 ml-2`},jt={key:0,class:`absolute inset-0 z-20 flex items-center justify-center bg-background/20 dark:bg-background/10 backdrop-blur-[1px] rounded-[inherit] overflow-hidden pointer-events-none`},Mt={key:0,class:`p-1 border-b border-border/40 mb-1 flex items-center gap-2`},Nt={class:`max-h-56 overflow-y-auto space-y-0.5 scrollbar-none`},Pt=[`onClick`],Ft={key:0,class:`p-3 text-center text-xs text-muted-foreground`},It=o({__name:`Select`,props:{modelValue:{default:``},options:{default:()=>[]},placeholder:{default:`请选择...`},size:{default:`md`},disabled:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},clearable:{type:Boolean,default:!1},searchable:{type:Boolean,default:!1},error:{type:Boolean,default:!1},animate:{type:Boolean,default:!0},delay:{default:0},entryClass:{default:``}},emits:[`update:modelValue`,`change`,`clear`],setup(o,{emit:h}){let b=o,x=h,S=v(!1),C=v(!1),T=v(``),O=v(null),A=v(null),{x:j,y:M,strategy:N}=Dt(O,A,{placement:`bottom-start`,whileElementsMounted:_t,middleware:[vt(6),bt(),yt({padding:8}),xt({apply({rects:e,elements:t}){e.reference.width>0&&(t.floating.style.width=`${e.reference.width}px`)}})]}),P=c(()=>({position:N.value,left:`${j.value??0}px`,top:`${M.value??0}px`})),ae=c(()=>b.options.find(e=>e.value===b.modelValue)),oe=c(()=>!b.searchable||!T.value?b.options:b.options.filter(e=>e.label.toLowerCase().includes(T.value.toLowerCase()))),F=()=>{b.disabled||b.loading||(S.value=!S.value)},{handleChangeValidate:I}=re(),L=e=>{e.disabled||(x(`update:modelValue`,e.value),x(`change`,e),S.value=!1,T.value=``,I())},se=e=>{e.stopPropagation(),x(`update:modelValue`,``),x(`clear`),I()},ce=e=>{let t=O.value;S.value&&t&&!t.contains(e.target)&&A.value&&!A.value.contains(e.target)&&(S.value=!1)};a(()=>{document.addEventListener(`mousedown`,ce),b.animate&&setTimeout(()=>{C.value=!0},b.delay)}),d(()=>{document.removeEventListener(`mousedown`,ce)});let R=c(()=>{let e=b.disabled||b.loading;return k(`relative flex items-center justify-between w-full border rounded-base transition-all duration-200 select-none bg-background overflow-hidden cursor-pointer`,{"h-8 px-2.5 text-xs":b.size===`sm`,"h-10 px-3.5 text-sm":b.size===`md`,"h-12 px-4 text-base":b.size===`lg`},b.error?`border-destructive text-destructive`:`border-border hover:border-border/80 focus-within:border-primary`,S.value?`border-primary ring-2 ring-primary/15`:``,e?`opacity-60 cursor-not-allowed pointer-events-none bg-muted/30`:``)}),le=c(()=>k({"w-3.5 h-3.5":b.size===`sm`,"w-4 h-4":b.size===`md`,"w-4.5 h-4.5":b.size===`lg`})),ue=c(()=>b.animate?b.entryClass?C.value?b.entryClass:`opacity-0`:k(`transform transition-all duration-700 ease-swift`,C.value?`opacity-100 translate-y-0 scale-100 blur-none`:`opacity-0 translate-y-1.5 scale-98 blur-md pointer-events-none`):``);return(a,o)=>(i(),r(`div`,{class:s([ue.value,`w-full`])},[n(`div`,{ref_key:`triggerRef`,ref:O,class:s(R.value),onClick:F},[n(`div`,{class:s([`flex items-center justify-between w-full h-full transition-all duration-300`,b.loading?`opacity-35 blur-[1.5px] scale-[0.99]`:`opacity-100 blur-none scale-100`])},[ae.value?(i(),r(`span`,Ot,f(ae.value.label),1)):(i(),r(`span`,kt,f(b.placeholder),1)),n(`div`,At,[e(E,{name:`icon-pop`},{default:_(()=>[b.clearable&&b.modelValue!==``&&!b.disabled&&!b.loading?(i(),r(`button`,{key:0,type:`button`,onClick:se,class:`text-muted-foreground hover:text-foreground transition-colors p-0.5 active:scale-90 shrink-0`},[e(l(ee),{class:s(le.value)},null,8,[`class`])])):u(``,!0)]),_:1}),e(l(ne),{class:s([le.value,`text-muted-foreground transition-transform duration-300 shrink-0`]),style:t({transform:S.value?`rotate(180deg)`:`rotate(0deg)`})},null,8,[`class`,`style`])])],2),e(E,{name:`fade`},{default:_(()=>[b.loading?(i(),r(`div`,jt,[...o[1]||=[n(`div`,{class:`absolute inset-0 overflow-hidden rounded-[inherit]`},[n(`div`,{class:`w-[200%] h-full bg-gradient-to-r from-transparent via-foreground/[0.08] to-transparent animate-kinetic-shimmer rounded-[inherit]`})],-1)]])):u(``,!0)]),_:1})],2),(i(),w(g,{to:`body`},[e(E,{name:`dropdown`},{default:_(()=>[S.value&&!b.loading?(i(),r(`div`,{key:0,ref_key:`panelRef`,ref:A,style:t(P.value),class:`z-[99999] pointer-events-auto bg-background text-foreground border border-border/80 shadow-[0_12px_40px_rgba(0,0,0,0.14)] rounded-base p-1 overflow-hidden`},[b.searchable?(i(),r(`div`,Mt,[e(l(ie),{class:`w-3.5 h-3.5 text-muted-foreground ml-1.5 shrink-0`}),y(n(`input`,{"onUpdate:modelValue":o[0]||=e=>T.value=e,placeholder:`搜索选项...`,class:`w-full bg-transparent border-none outline-none text-xs py-1 text-foreground placeholder:text-muted-foreground/60 font-medium`},null,512),[[D,T.value]])])):u(``,!0),n(`div`,Nt,[(i(!0),r(m,null,p(oe.value,e=>(i(),r(`div`,{key:e.value,onClick:t=>L(e),class:s([`flex items-center justify-between px-3 py-2 text-xs font-bold rounded-[calc(var(--radius)-4px)] cursor-pointer transition-colors`,l(k)(e.value===b.modelValue?`bg-secondary text-secondary-foreground`:`hover:bg-muted text-foreground`,e.disabled?`opacity-40 cursor-not-allowed pointer-events-none`:``)])},[n(`span`,null,f(e.label),1),e.value===b.modelValue?(i(),w(l(te),{key:0,class:`w-3.5 h-3.5 text-primary shrink-0`})):u(``,!0)],10,Pt))),128)),oe.value.length===0?(i(),r(`div`,Ft,` 未找到匹配选项 `)):u(``,!0)])],4)):u(``,!0)]),_:1})]))],2))}});export{It as t}; \ No newline at end of file diff --git a/server/adminui/_nuxt/Dqnn4udu.js b/server/adminui/_nuxt/Dqnn4udu.js new file mode 100644 index 0000000..254d1e1 --- /dev/null +++ b/server/adminui/_nuxt/Dqnn4udu.js @@ -0,0 +1 @@ +import{A as e,B as t,C as n,E as r,J as i,K as a,M as o,Rt as s,S as c,T as l,Vt as u,Z as d,ct as f,ht as p,nt as m}from"./BT-50xGH.js";import{n as h}from"./CxZD5dLJ.js";import{n as g}from"./C7_xDZuo.js";import{t as _}from"./YiEwAvN-.js";var v=[`aria-checked`,`aria-busy`,`disabled`],y={key:0,class:`absolute inset-0 z-500 flex items-center justify-center bg-background/20 dark:bg-background/10 backdrop-blur-[1px] rounded-[inherit] overflow-hidden pointer-events-none`},b=o({inheritAttrs:!1,__name:`Switch`,props:{modelValue:{type:Boolean,default:!1},size:{default:`md`},disabled:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},animate:{type:Boolean,default:!0},delay:{default:0},entryClass:{default:``}},emits:[`update:modelValue`,`change`],setup(o,{emit:u}){let b=o,x=u,S=p(!1),{handleChangeValidate:C}=_(),w=m(),T=c(()=>{let e={};for(let t in w)t.startsWith(`aria-`)&&(e[t]=w[t]);return e}),E=c(()=>{let e={};for(let t in w)t.startsWith(`aria-`)||(e[t]=w[t]);return e}),D=()=>{if(b.disabled||b.loading)return;let e=!b.modelValue;x(`update:modelValue`,e),x(`change`,e),C()};a(()=>{b.animate&&setTimeout(()=>{S.value=!0},b.delay)});let O=c(()=>g(`relative inline-flex shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-300 ease-in-out select-none overflow-hidden p-0 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring`,{"w-8 h-4.5":b.size===`sm`,"w-11 h-6":b.size===`md`,"w-14 h-7.5":b.size===`lg`},b.modelValue?`bg-primary`:`bg-muted-foreground/30`,b.disabled||b.loading?`opacity-60 cursor-not-allowed pointer-events-none`:``)),k=c(()=>g(`pointer-events-none inline-block rounded-full bg-background shadow-md transform transition-transform duration-300 ease-spring`,{"w-3.5 h-3.5":b.size===`sm`,"w-5 h-5":b.size===`md`,"w-6.5 h-6.5":b.size===`lg`},b.modelValue?b.size===`sm`?`translate-x-3.5`:b.size===`md`?`translate-x-5`:`translate-x-6.5`:`translate-x-0`)),A=c(()=>b.animate?b.entryClass?S.value?b.entryClass:`opacity-0`:g(`transform transition-all duration-700 ease-swift`,S.value?`opacity-100 translate-y-0 scale-100 blur-none`:`opacity-0 translate-y-1.5 scale-98 blur-md pointer-events-none`):``);return(a,c)=>(i(),r(`div`,t({class:[A.value,`inline-flex items-center`]},E.value),[n(`button`,t({type:`button`,role:`switch`,"aria-checked":o.modelValue,"aria-busy":b.loading||void 0,disabled:b.disabled||b.loading,class:O.value},T.value,{onClick:D}),[n(`div`,{class:s([k.value,`flex items-center justify-center transition-all duration-300`])},[d(a.$slots,`thumb`)],2),e(h,{name:`fade`},{default:f(()=>[b.loading?(i(),r(`div`,y,[...c[0]||=[n(`div`,{class:`absolute inset-0 overflow-hidden rounded-[inherit]`},[n(`div`,{class:`w-[200%] h-full bg-gradient-to-r from-transparent via-foreground/[0.08] to-transparent animate-kinetic-shimmer rounded-[inherit]`})],-1)]])):l(``,!0)]),_:1})],16,v)],16))}}),x={class:`mb-3`},S={class:`mb-1.5 block text-xs font-medium text-muted-foreground`},C=Object.assign(o({__name:`Field`,props:{label:{}},setup(e){return(t,a)=>(i(),r(`div`,x,[n(`label`,S,u(e.label),1),d(t.$slots,`default`)]))}}),{__name:`Field`});export{b as n,C as t}; \ No newline at end of file diff --git a/server/adminui/_nuxt/Dy1Pnbdd.js b/server/adminui/_nuxt/Dy1Pnbdd.js new file mode 100644 index 0000000..46cd241 --- /dev/null +++ b/server/adminui/_nuxt/Dy1Pnbdd.js @@ -0,0 +1 @@ +import{Gt as e,Kt as t,L as n,N as r,R as i,Ut as a,Wt as o,bt as s,i as c,ut as l}from"./BT-50xGH.js";import{t as u}from"./CxZD5dLJ.js";var d=Symbol(`layout-meta`),ee=Symbol(`layout`),f=Symbol(`route`),p=t({docsBase:o,reporters:e});String.fromCharCode;var m=/#/g,h=/&/g,te=/\//g,g=/=/g,_=/\?/g,v=/\+/g,ne=/%5e/gi,re=/%60/gi,ie=/%7c/gi,ae=/%20/gi,oe=/%2f/gi,se=/%252f/gi;function y(e){return encodeURI(``+e).replace(ie,`|`)}function b(e){return y(typeof e==`string`?e:JSON.stringify(e)).replace(v,`%2B`).replace(ae,`+`).replace(m,`%23`).replace(h,`%26`).replace(re,"`").replace(ne,`^`).replace(te,`%2F`)}function x(e){return b(e).replace(g,`%3D`)}function S(e){return y(e).replace(m,`%23`).replace(_,`%3F`).replace(se,`%2F`).replace(h,`%26`).replace(v,`%2B`)}function C(e=``){try{return decodeURIComponent(``+e)}catch{return``+e}}function ce(e){return C(e.replace(oe,`%252F`))}function w(e){return C(e.replace(v,` `))}function T(e){return C(e.replace(v,` `))}function E(e=``){let t=Object.create(null);e[0]===`?`&&(e=e.slice(1));for(let n of e.split(`&`)){let e=n.match(/([^=]+)=?(.*)/)||[];if(e.length<2)continue;let r=w(e[1]);if(r===`__proto__`||r===`constructor`)continue;let i=T(e[2]||``);t[r]===void 0?t[r]=i:Array.isArray(t[r])?t[r].push(i):t[r]=[t[r],i]}return t}function le(e,t){return(typeof t==`number`||typeof t==`boolean`)&&(t=String(t)),t?Array.isArray(t)?t.map(t=>`${x(e)}=${b(t)}`).join(`&`):`${x(e)}=${b(t)}`:x(e)}function ue(e){return Object.keys(e).filter(t=>e[t]!==void 0).map(t=>le(t,e[t])).filter(Boolean).join(`&`)}var de=/^[\s\w\0+.-]{2,}:([/\\]{1,2})/,fe=/^[\s\w\0+.-]{2,}:([/\\]{2})?/,pe=/^([/\\]\s*){2,}[^/\\]/,me=/^[\s\0]*(blob|data|javascript|vbscript):$/i,he=/\/$|\/\?|\/#/,ge=/^\.?\//;function D(e,t={}){return typeof t==`boolean`&&(t={acceptRelative:t}),t.strict?de.test(e):fe.test(e)||(t.acceptRelative?pe.test(e):!1)}function O(e){return!!e&&me.test(e)}function k(e=``,t){return t?he.test(e):e.endsWith(`/`)}function A(e=``,t){if(!t)return(k(e)?e.slice(0,-1):e)||`/`;if(!k(e,!0))return e||`/`;let n=e,r=``,i=e.indexOf(`#`);i!==-1&&(n=e.slice(0,i),r=e.slice(i));let[a,...o]=n.split(`?`);return((a.endsWith(`/`)?a.slice(0,-1):a)||`/`)+(o.length>0?`?${o.join(`?`)}`:``)+r}function j(e=``,t){if(!t)return e.endsWith(`/`)?e:e+`/`;if(k(e,!0))return e||`/`;let n=e,r=``,i=e.indexOf(`#`);if(i!==-1&&(n=e.slice(0,i),r=e.slice(i),!n))return r;let[a,...o]=n.split(`?`);return a+`/`+(o.length>0?`?${o.join(`?`)}`:``)+r}function M(e,t){if(F(t)||D(e))return e;let n=A(t);if(e.startsWith(n)){let t=e[n.length];if(!t||t===`/`||t===`?`)return e}return L(n,e)}function N(e,t){if(F(t))return e;let n=A(t);if(!e.startsWith(n))return e;let r=e[n.length];return r&&r!==`/`&&r!==`?`?e:`/`+e.slice(n.length).replace(/^\/+/,``)}function P(e,t){let n=B(e);return n.search=ue({...E(n.search),...t}),ve(n)}function F(e){return!e||e===`/`}function I(e){return e&&e!==`/`}function L(e,...t){let n=e||``;for(let e of t.filter(e=>I(e)))if(n){let t=e.replace(ge,``);n=j(n)+t}else n=e;return n}function _e(...e){let t=/\/(?!\/)/,n=e.filter(Boolean),r=[],i=0;for(let e of n)if(e&&e!==`/`){for(let[n,a]of e.split(t).entries())if(a&&a!==`.`){if(a===`..`){if(r.length===1&&D(r[0]))continue;r.pop(),i--;continue}if(n===1&&r[r.length-1]?.endsWith(`:/`)){r[r.length-1]+=`/`+a;continue}r.push(a),i++}}let a=r.join(`/`);return i>=0?n[0]?.startsWith(`/`)&&!a.startsWith(`/`)?a=`/`+a:n[0]?.startsWith(`./`)&&!a.startsWith(`./`)&&(a=`./`+a):a=`../`.repeat(-1*i)+a,n[n.length-1]?.endsWith(`/`)&&!a.endsWith(`/`)&&(a+=`/`),a}function R(e,t){return C(A(e))===C(A(t))}var z=Symbol.for(`ufo:protocolRelative`);function B(e=``,t){let n=e.match(/^[\s\0]*(blob:|data:|javascript:|vbscript:)(.*)/i);if(n){let[,e,t=``]=n;return{protocol:e.toLowerCase(),pathname:t,href:e+t,auth:``,host:``,search:``,hash:``}}if(!D(e,{acceptRelative:!0}))return t?B(t+e):V(e);let[,r=``,i,a=``]=e.replace(/\\/g,`/`).match(/^[\s\0]*([\w+.-]{2,}:)?\/\/([^/@]+@)?(.*)/)||[],[,o=``,s=``]=a.match(/([^#/?]*)(.*)?/)||[];r===`file:`&&(s=s.replace(/\/(?=[A-Za-z]:)/,``));let{pathname:c,search:l,hash:u}=V(s);return{protocol:r.toLowerCase(),auth:i?i.slice(0,Math.max(0,i.length-1)):``,host:o,pathname:c,search:l,hash:u,[z]:!r}}function V(e=``){let[t=``,n=``,r=``]=(e.match(/([^#?]*)(\?[^#]*)?(#.*)?/)||[]).splice(1);return{pathname:t,search:n,hash:r}}function ve(e){let t=e.pathname||``,n=e.search?(e.search.startsWith(`?`)?``:`?`)+e.search:``,r=e.hash||``,i=e.auth?e.auth+`@`:``,a=e.host||``;return(e.protocol||e[z]?(e.protocol||``)+`//`:``)+i+a+t+n+r}function H(e){if(typeof e!=`object`||!e)return!1;let t=Object.getPrototypeOf(e);return t!==null&&t!==Object.prototype&&Object.getPrototypeOf(t)!==null||Symbol.iterator in e?!1:Symbol.toStringTag in e?Object.prototype.toString.call(e)===`[object Module]`:!0}function U(e,t,n=`.`,r){if(!H(t))return U(e,{},n,r);let i={...t};for(let t of Object.keys(e)){if(t===`__proto__`||t===`constructor`)continue;let a=e[t];a!=null&&(r&&r(i,t,a,n)||(i[t]=Array.isArray(a)&&Array.isArray(i[t])?[...a,...i[t]]:H(a)&&H(i[t])?U(a,i[t],(n?`${n}.`:``)+t.toString(),r):a))}return i}function ye(e){return(...t)=>t.reduce((t,n)=>U(t,n,``,e),{})}var be=ye();function xe(e,t){try{return t in e}catch{return!1}}var W=class extends Error{static __h3_error__=!0;statusCode=500;fatal=!1;unhandled=!1;statusMessage;data;cause;constructor(e,t={}){super(e,t),t.cause&&!this.cause&&(this.cause=t.cause)}toJSON(){let e={message:this.message,statusCode:K(this.statusCode,500)};return this.statusMessage&&(e.statusMessage=G(this.statusMessage)),this.data!==void 0&&(e.data=this.data),e}};function Se(e){if(typeof e==`string`)return new W(e);if(Ce(e))return e;let t=new W(e.message??e.statusMessage??``,{cause:e.cause||e});if(xe(e,`stack`))try{Object.defineProperty(t,"stack",{get(){return e.stack}})}catch{try{t.stack=e.stack}catch{}}if(e.data&&(t.data=e.data),e.statusCode?t.statusCode=K(e.statusCode,t.statusCode):e.status&&(t.statusCode=K(e.status,t.statusCode)),e.statusMessage?t.statusMessage=e.statusMessage:e.statusText&&(t.statusMessage=e.statusText),t.statusMessage){let e=t.statusMessage;G(t.statusMessage)!==e&&console.warn("[h3] Please prefer using `message` for longer error messages instead of `statusMessage`. In the future, `statusMessage` will be sanitized by default.")}return e.fatal!==void 0&&(t.fatal=e.fatal),e.unhandled!==void 0&&(t.unhandled=e.unhandled),t}function Ce(e){return e?.constructor?.__h3_error__===!0}var we=/[^\u0009\u0020-\u007E]/g;function G(e=``){return e.replace(we,``)}function K(e,t=200){return!e||(typeof e==`string`&&(e=Number.parseInt(e,10)),e<100||e>999)?t:e}globalThis.Headers,globalThis.Response;var q=()=>c()?.$router;function Te(e){let t=e.scope,n=l();for(;n;){if(n===t)return!0;n=n.parent}return!1}var Ee=(()=>{if(n()){let e=r();if(!e||Te(e))return i(f,c()._route)}return c()._route});function De(e){return e}var Oe=()=>{try{if(c()._processingMiddleware)return!0}catch{return!1}return!1},ke=(e,t)=>{e||=`/`;let n=typeof e==`string`?e:`path`in e?J(e):q().resolve(e).href;if(t?.open){let{protocol:e}=new URL(n,window.location.href);if(e&&O(e))throw p.NUXT_E2002({toPath:n,protocol:e});let{target:r=`_blank`,windowFeatures:i={}}=t.open,a=[];for(let[e,t]of Object.entries(i))t!==void 0&&a.push(`${e.toLowerCase()}=${t}`);return open(n,r,a.join(`, `)),Promise.resolve()}let r=D(n,{acceptRelative:!0}),i=t?.external||r;if(i){if(!t?.external)throw p.NUXT_E2001({toPath:n});let{protocol:e}=new URL(n,window.location.href);if(e&&O(e))throw p.NUXT_E2002({toPath:n,protocol:e})}let a=Oe();if(!i&&a){if(t?.replace){if(typeof e==`string`){let{pathname:t,search:n,hash:r}=B(e);return{path:t,...n&&{query:E(n)},...r&&{hash:r},replace:!0}}return{...e,replace:!0}}return e}let o=q(),s=c();if(i)return s._scope.stop(),t?.replace?location.replace(n):location.href=n,a?s.isHydrating?new Promise(()=>{}):!1:Promise.resolve();let l=typeof e==`string`?Y(e):e;return t?.replace?o.replace(l):o.push(l)};function J(e){return P(e.path||``,e.query||{})+(e.hash||``)}function Y(e){let t=B(e);return S(ce(t.pathname))+t.search+t.hash}var Ae=`__nuxt_error`,X=()=>s(c().payload,`error`),Z=e=>{let t=$(e);try{let e=X();c().hooks.callHook(`app:error`,t),e.value||=t}catch{throw t}return t},Q=(e,t)=>{let n=e.callHook(`app:error`,$(t));return a.NUXT_E1012({userAgent:navigator.userAgent,cause:t}),n},je=async(e,t)=>{if(u(navigator.userAgent)){await Q(e,t);return}await e.runWithContext(()=>Z(t))},Me=async(e={})=>{let t=c(),n=X();t.callHook(`app:error:cleared`,e),e.redirect&&await q().replace(e.redirect),n.value=void 0},Ne=e=>!!e&&typeof e==`object`&&`__nuxt_error`in e,$=e=>{typeof e!=`string`&&e.statusText&&(e.message??=e.statusText);let t=Se(e);return Object.defineProperty(t,Ae,{value:!0,configurable:!1,writable:!1}),Object.defineProperty(t,"status",{get:()=>t.statusCode,configurable:!0}),Object.defineProperty(t,"statusText",{get:()=>t.statusMessage,configurable:!0}),t};export{j as C,d as D,p as E,ee as O,P as S,A as T,O as _,Ne as a,E as b,De as c,J as d,Ee as f,R as g,D as h,$ as i,f as k,Y as l,be as m,je as n,Z as o,q as p,Me as r,X as s,Q as t,ke as u,_e as v,N as w,M as x,L as y}; \ No newline at end of file diff --git a/server/adminui/_nuxt/O7BxGEKD.js b/server/adminui/_nuxt/O7BxGEKD.js new file mode 100644 index 0000000..1c2916e --- /dev/null +++ b/server/adminui/_nuxt/O7BxGEKD.js @@ -0,0 +1 @@ +import{J as e,M as t,St as n,Z as r,ct as i,w as a}from"./BT-50xGH.js";import{n as o}from"./CLabUxWX.js";var s=Object.assign(t({__name:`DialogPanel`,props:{open:{type:Boolean},title:{},description:{},size:{}},emits:[`update:open`],setup(t,{emit:s}){let c=s;return(s,l)=>(e(),a(n(o),{open:t.open,title:t.title,description:t.description,size:t.size||`md`,"show-confirm":!1,"show-cancel":!1,closable:``,"onUpdate:open":l[0]||=e=>c(`update:open`,e)},{footer:i(()=>[r(s.$slots,`footer`)]),default:i(()=>[r(s.$slots,`default`)]),_:3},8,[`open`,`title`,`description`,`size`]))}}),{__name:`DialogPanel`});export{s as t}; \ No newline at end of file diff --git a/server/adminui/_nuxt/YiEwAvN-.js b/server/adminui/_nuxt/YiEwAvN-.js new file mode 100644 index 0000000..37e7ab0 --- /dev/null +++ b/server/adminui/_nuxt/YiEwAvN-.js @@ -0,0 +1 @@ +import{R as e}from"./BT-50xGH.js";var t=`FuxstoFormItemContext`;function n(){let n=e(t,null),r=e(`FuxstoFormContext`,null);return{isInFormItem:!!n,handleBlurValidate:async()=>{n&&await n.validate(`blur`)},handleChangeValidate:async()=>{n&&await n.validate(`change`)},validate:async()=>!n||n.validate(),getFieldValue:()=>n?n.getValue():void 0,formSize:r?.size,formDisabled:r?.disabled}}export{n as t}; \ No newline at end of file diff --git a/server/adminui/_nuxt/builds/latest.json b/server/adminui/_nuxt/builds/latest.json new file mode 100644 index 0000000..a9d8f7a --- /dev/null +++ b/server/adminui/_nuxt/builds/latest.json @@ -0,0 +1 @@ +{"id":"b4330c23-46d5-4186-b165-8700b0c274d9","timestamp":1790469404853} \ No newline at end of file diff --git a/server/adminui/_nuxt/builds/meta/b4330c23-46d5-4186-b165-8700b0c274d9.json b/server/adminui/_nuxt/builds/meta/b4330c23-46d5-4186-b165-8700b0c274d9.json new file mode 100644 index 0000000..0e0d774 --- /dev/null +++ b/server/adminui/_nuxt/builds/meta/b4330c23-46d5-4186-b165-8700b0c274d9.json @@ -0,0 +1 @@ +{"id":"b4330c23-46d5-4186-b165-8700b0c274d9","timestamp":1790469404853,"prerendered":[]} \ No newline at end of file diff --git a/server/adminui/_nuxt/entry.B7QGlukW.css b/server/adminui/_nuxt/entry.B7QGlukW.css new file mode 100644 index 0000000..f415ad8 --- /dev/null +++ b/server/adminui/_nuxt/entry.B7QGlukW.css @@ -0,0 +1,2 @@ +/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */ +@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-pan-x:initial;--tw-pan-y:initial;--tw-pinch-zoom:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:host,:root{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-zinc-50:oklch(98.5% 0 none);--color-zinc-900:oklch(21% .006 285.885);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--text-xs:.75rem;--text-xs--line-height:1.33333;--text-sm:.875rem;--text-sm--line-height:1.42857;--text-base:1rem;--text-base--line-height:1.5;--text-lg:1.125rem;--text-lg--line-height:1.55556;--text-xl:1.25rem;--text-xl--line-height:1.4;--text-2xl:1.5rem;--text-2xl--line-height:1.33333;--text-3xl:1.875rem;--text-3xl--line-height:1.2;--text-4xl:2.25rem;--text-4xl--line-height:1.11111;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-tight:-.025em;--tracking-wider:.05em;--leading-tight:1.25;--leading-snug:1.375;--leading-normal:1.5;--leading-relaxed:1.625;--leading-loose:2;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-sm:8px;--blur-md:12px;--blur-lg:16px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-background:var(--background);--color-foreground:var(--foreground);--color-primary:var(--primary);--color-primary-foreground:var(--primary-foreground);--color-secondary:var(--secondary);--color-secondary-foreground:var(--secondary-foreground);--color-muted:var(--muted);--color-muted-foreground:var(--muted-foreground);--color-destructive:var(--destructive);--color-destructive-foreground:var(--destructive-foreground);--color-success:var(--success);--color-warning:var(--warning);--color-border:var(--border);--color-ring:var(--ring);--radius-base:var(--radius);--ease-smooth:cubic-bezier(.25, 1, .5, 1);--ease-swift:cubic-bezier(.16, 1, .3, 1);--ease-spring:cubic-bezier(.34, 1.56, .64, 1)}}@layer base{*,::backdrop,:after,:before{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}:host,html{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden}.absolute,.sr-only{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.inset-x-2{inset-inline:calc(var(--spacing)*2)}.-top-1{top:calc(var(--spacing)*-1)}.-top-1\.5{top:calc(var(--spacing)*-1.5)}.-top-2{top:calc(var(--spacing)*-2)}.top-0{top:0}.top-0\.5{top:calc(var(--spacing)*.5)}.top-1\/2{top:50%}.top-2\.5{top:calc(var(--spacing)*2.5)}.top-3{top:calc(var(--spacing)*3)}.top-6{top:calc(var(--spacing)*6)}.top-full{top:100%}.-right-0\.5{right:calc(var(--spacing)*-.5)}.-right-1{right:calc(var(--spacing)*-1)}.-right-1\.5{right:calc(var(--spacing)*-1.5)}.-right-2{right:calc(var(--spacing)*-2)}.right-0{right:0}.right-1\.5{right:calc(var(--spacing)*1.5)}.right-3{right:calc(var(--spacing)*3)}.right-full{right:100%}.-bottom-0\.5{bottom:calc(var(--spacing)*-.5)}.bottom-0{bottom:0}.bottom-0\.5{bottom:calc(var(--spacing)*.5)}.bottom-1\.5{bottom:calc(var(--spacing)*1.5)}.bottom-3{bottom:calc(var(--spacing)*3)}.bottom-6{bottom:calc(var(--spacing)*6)}.bottom-full{bottom:100%}.left-0{left:0}.left-1\.5{left:calc(var(--spacing)*1.5)}.left-1\/2{left:50%}.left-\[5px\]{left:5px}.left-full{left:100%}.isolate{isolation:isolate}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-500{z-index:500}.z-\[9999\]{z-index:9999}.z-\[99998\]{z-index:99998}.z-\[99999\]{z-index:99999}.z-\[999999\]{z-index:999999}.order-first{order:-9999}.order-last{order:9999}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.m-0{margin:0}.m-auto{margin:auto}.mx-1{margin-inline:var(--spacing)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-auto{margin-inline:auto}.my-0{margin-block:0}.my-4{margin-block:calc(var(--spacing)*4)}.my-6{margin-block:calc(var(--spacing)*6)}.mt-0{margin-top:0}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-2\.5{margin-top:calc(var(--spacing)*2.5)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-3\.5{margin-top:calc(var(--spacing)*3.5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-\[1px\]{margin-top:1px}.mr-0{margin-right:0}.mr-1\.5{margin-right:calc(var(--spacing)*1.5)}.mr-2{margin-right:calc(var(--spacing)*2)}.mb-0{margin-bottom:0}.mb-1{margin-bottom:var(--spacing)}.mb-1\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3\.5{margin-bottom:calc(var(--spacing)*3.5)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.ml-0\.5{margin-left:calc(var(--spacing)*.5)}.ml-1{margin-left:var(--spacing)}.ml-1\.5{margin-left:calc(var(--spacing)*1.5)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-auto{margin-left:auto}.ml-px{margin-left:1px}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.aspect-square{aspect-ratio:1}.\!h-8{height:calc(var(--spacing)*8)!important}.h-0{height:0}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-1\/2{height:50%}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-4\.5{height:calc(var(--spacing)*4.5)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-6\.5{height:calc(var(--spacing)*6.5)}.h-7{height:calc(var(--spacing)*7)}.h-7\.5{height:calc(var(--spacing)*7.5)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-11{height:calc(var(--spacing)*11)}.h-12{height:calc(var(--spacing)*12)}.h-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-20{height:calc(var(--spacing)*20)}.h-40{height:calc(var(--spacing)*40)}.h-\[2\.5px\]{height:2.5px}.h-auto{height:auto}.h-fit{height:fit-content}.h-full{height:100%}.max-h-28{max-height:calc(var(--spacing)*28)}.max-h-52{max-height:calc(var(--spacing)*52)}.max-h-56{max-height:calc(var(--spacing)*56)}.max-h-\[35vh\]{max-height:35vh}.max-h-\[50vh\]{max-height:50vh}.max-h-\[75vh\]{max-height:75vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.min-h-\[5rem\]{min-height:5rem}.min-h-\[6\.5rem\]{min-height:6.5rem}.min-h-\[8rem\]{min-height:8rem}.min-h-\[calc\(100vh-2rem\)\]{min-height:calc(100vh - 2rem)}.\!w-8{width:calc(var(--spacing)*8)!important}.w-0{width:0}.w-0\.5{width:calc(var(--spacing)*.5)}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-1\/2{width:50%}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-2\/3{width:66.6667%}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-4{width:calc(var(--spacing)*4)}.w-4\.5{width:calc(var(--spacing)*4.5)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-6\.5{width:calc(var(--spacing)*6.5)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-11{width:calc(var(--spacing)*11)}.w-12{width:calc(var(--spacing)*12)}.w-14{width:calc(var(--spacing)*14)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-36{width:calc(var(--spacing)*36)}.w-40{width:calc(var(--spacing)*40)}.w-72{width:calc(var(--spacing)*72)}.w-\[1px\]{width:1px}.w-\[20px\]{width:20px}.w-\[200\%\]{width:200%}.w-\[250px\]{width:250px}.w-\[290px\]{width:290px}.w-\[330px\]{width:330px}.w-fit{width:fit-content}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-\[85vw\]{max-width:85vw}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.min-w-0{min-width:0}.min-w-\[2\.6rem\]{min-width:2.6rem}.min-w-\[2rem\]{min-width:2rem}.min-w-\[3\.5rem\]{min-width:3.5rem}.min-w-\[3rem\]{min-width:3rem}.min-w-\[16px\]{min-width:16px}.min-w-\[20px\]{min-width:20px}.min-w-\[24px\]{min-width:24px}.min-w-\[32px\]{min-width:32px}.min-w-\[180px\]{min-width:180px}.min-w-\[200px\]{min-width:200px}.min-w-fit{min-width:fit-content}.min-w-max{min-width:max-content}.flex-1{flex:1}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.border-collapse{border-collapse:collapse}.origin-center{transform-origin:50%}.origin-top-left{transform-origin:0 0}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.translate-x-0{translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:0px}.translate-x-3\.5{--tw-translate-x:calc(var(--spacing)*3.5)}.translate-x-3\.5,.translate-x-5{translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-5{--tw-translate-x:calc(var(--spacing)*5)}.translate-x-6\.5{--tw-translate-x:calc(var(--spacing)*6.5)}.-translate-y-1\.5,.translate-x-6\.5{translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\.5{--tw-translate-y:calc(var(--spacing)*-1.5)}.-translate-y-1\/2{--tw-translate-y:-50%}.-translate-y-1\/2,.translate-y-0{translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-0{--tw-translate-y:0px}.translate-y-1{--tw-translate-y:var(--spacing)}.translate-y-1,.translate-y-1\.5{translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-1\.5{--tw-translate-y:calc(var(--spacing)*1.5)}.translate-y-2{--tw-translate-y:calc(var(--spacing)*2);translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-0{--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%}.scale-0,.scale-50{scale:var(--tw-scale-x) var(--tw-scale-y)}.scale-50{--tw-scale-x:50%;--tw-scale-y:50%;--tw-scale-z:50%}.scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%}.scale-95,.scale-96{scale:var(--tw-scale-x) var(--tw-scale-y)}.scale-96{--tw-scale-x:96%;--tw-scale-y:96%;--tw-scale-z:96%}.scale-98{--tw-scale-x:98%;--tw-scale-y:98%;--tw-scale-z:98%}.scale-100,.scale-98{scale:var(--tw-scale-x) var(--tw-scale-y)}.scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%}.scale-105{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%}.scale-105,.scale-125{scale:var(--tw-scale-x) var(--tw-scale-y)}.scale-125{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%}.scale-\[0\.98\]{scale:.98}.scale-\[0\.99\]{scale:.99}.-rotate-90{rotate:-90deg}.rotate-0{rotate:0deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.rotate-\[135deg\]{rotate:135deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-crosshair{cursor:crosshair}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-zoom-in{cursor:zoom-in}.touch-pan-y{--tw-pan-y:pan-y;touch-action:var(--tw-pan-x,) var(--tw-pan-y,) var(--tw-pinch-zoom,)}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-x{resize:horizontal}.resize-y{resize:vertical}.scrollbar-none{scrollbar-width:none}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-3\.5{gap:calc(var(--spacing)*3.5)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}:where(.-space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing)*-1*var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing)*-1*(1 - var(--tw-space-y-reverse)))}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing)*.5*var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing)*.5*(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing)*var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing)*(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing)*1.5*var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing)*1.5*(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing)*5*var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing)*5*(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing)*6*var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing)*6*(1 - var(--tw-space-y-reverse)))}:where(.-space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(var(--spacing)*-2*var(--tw-space-x-reverse));margin-inline-end:calc(var(--spacing)*-2*(1 - var(--tw-space-x-reverse)))}:where(.-space-x-\[1px\]>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(-1px*var(--tw-space-x-reverse));margin-inline-end:calc(-1px*(1 - var(--tw-space-x-reverse)))}.gap-y-0\.5{row-gap:calc(var(--spacing)*.5)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}:where(.divide-border\/40>:not(:last-child)){border-color:var(--color-border)}@supports (color:color-mix(in lab,red,red)){:where(.divide-border\/40>:not(:last-child)){border-color:color-mix(in oklab,var(--color-border) 40%,transparent)}}:where(.divide-border\/50>:not(:last-child)){border-color:var(--color-border)}@supports (color:color-mix(in lab,red,red)){:where(.divide-border\/50>:not(:last-child)){border-color:color-mix(in oklab,var(--color-border) 50%,transparent)}}:where(.divide-border\/60>:not(:last-child)){border-color:var(--color-border)}@supports (color:color-mix(in lab,red,red)){:where(.divide-border\/60>:not(:last-child)){border-color:color-mix(in oklab,var(--color-border) 60%,transparent)}}.self-stretch{align-self:stretch}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.scroll-smooth{scroll-behavior:smooth}.rounded{border-radius:.25rem}.rounded-\[2px\]{border-radius:2px}.rounded-\[calc\(var\(--radius\)-2px\)\]{border-radius:calc(var(--radius) - 2px)}.rounded-\[calc\(var\(--radius\)-3px\)\]{border-radius:calc(var(--radius) - 3px)}.rounded-\[calc\(var\(--radius\)-4px\)\]{border-radius:calc(var(--radius) - 4px)}.rounded-\[calc\(var\(--radius\)-5px\)\]{border-radius:calc(var(--radius) - 5px)}.rounded-\[calc\(var\(--radius\)-6px\)\]{border-radius:calc(var(--radius) - 6px)}.rounded-\[inherit\]{border-radius:inherit}.rounded-base{border-radius:var(--radius-base)}.rounded-full{border-radius:2147483647px}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--radius-sm)}.rounded-t-base{border-top-left-radius:var(--radius-base);border-top-right-radius:var(--radius-base)}.border{border-width:1px}.border,.border-2{border-style:var(--tw-border-style)}.border-2{border-width:2px}.border-x-4{border-inline-style:var(--tw-border-style);border-inline-width:4px}.border-t{border-top-width:1px}.border-t,.border-t-4{border-top-style:var(--tw-border-style)}.border-t-4{border-top-width:4px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-width:1px}.border-l,.border-l-2{border-left-style:var(--tw-border-style)}.border-l-2{border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-solid{--tw-border-style:solid;border-style:solid}.border-border,.border-border\/20{border-color:var(--color-border)}@supports (color:color-mix(in lab,red,red)){.border-border\/20{border-color:color-mix(in oklab,var(--color-border) 20%,transparent)}}.border-border\/30{border-color:var(--color-border)}@supports (color:color-mix(in lab,red,red)){.border-border\/30{border-color:color-mix(in oklab,var(--color-border) 30%,transparent)}}.border-border\/40{border-color:var(--color-border)}@supports (color:color-mix(in lab,red,red)){.border-border\/40{border-color:color-mix(in oklab,var(--color-border) 40%,transparent)}}.border-border\/50{border-color:var(--color-border)}@supports (color:color-mix(in lab,red,red)){.border-border\/50{border-color:color-mix(in oklab,var(--color-border) 50%,transparent)}}.border-border\/60{border-color:var(--color-border)}@supports (color:color-mix(in lab,red,red)){.border-border\/60{border-color:color-mix(in oklab,var(--color-border) 60%,transparent)}}.border-border\/70{border-color:var(--color-border)}@supports (color:color-mix(in lab,red,red)){.border-border\/70{border-color:color-mix(in oklab,var(--color-border) 70%,transparent)}}.border-border\/80{border-color:var(--color-border)}@supports (color:color-mix(in lab,red,red)){.border-border\/80{border-color:color-mix(in oklab,var(--color-border) 80%,transparent)}}.border-destructive,.border-destructive\/20{border-color:var(--color-destructive)}@supports (color:color-mix(in lab,red,red)){.border-destructive\/20{border-color:color-mix(in oklab,var(--color-destructive) 20%,transparent)}}.border-destructive\/30{border-color:var(--color-destructive)}@supports (color:color-mix(in lab,red,red)){.border-destructive\/30{border-color:color-mix(in oklab,var(--color-destructive) 30%,transparent)}}.border-destructive\/50{border-color:var(--color-destructive)}@supports (color:color-mix(in lab,red,red)){.border-destructive\/50{border-color:color-mix(in oklab,var(--color-destructive) 50%,transparent)}}.border-primary,.border-primary\/20{border-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.border-primary\/20{border-color:color-mix(in oklab,var(--color-primary) 20%,transparent)}}.border-primary\/30{border-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.border-primary\/30{border-color:color-mix(in oklab,var(--color-primary) 30%,transparent)}}.border-primary\/40{border-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.border-primary\/40{border-color:color-mix(in oklab,var(--color-primary) 40%,transparent)}}.border-primary\/60{border-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.border-primary\/60{border-color:color-mix(in oklab,var(--color-primary) 60%,transparent)}}.border-success,.border-success\/20{border-color:var(--color-success)}@supports (color:color-mix(in lab,red,red)){.border-success\/20{border-color:color-mix(in oklab,var(--color-success) 20%,transparent)}}.border-success\/50{border-color:var(--color-success)}@supports (color:color-mix(in lab,red,red)){.border-success\/50{border-color:color-mix(in oklab,var(--color-success) 50%,transparent)}}.border-transparent{border-color:#0000}.border-warning,.border-warning\/25{border-color:var(--color-warning)}@supports (color:color-mix(in lab,red,red)){.border-warning\/25{border-color:color-mix(in oklab,var(--color-warning) 25%,transparent)}}.border-warning\/50{border-color:var(--color-warning)}@supports (color:color-mix(in lab,red,red)){.border-warning\/50{border-color:color-mix(in oklab,var(--color-warning) 50%,transparent)}}.border-white\/5{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.border-white\/5{border-color:color-mix(in oklab,var(--color-white) 5%,transparent)}}.border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.border-white\/10{border-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.border-white\/20{border-color:#fff3}@supports (color:color-mix(in lab,red,red)){.border-white\/20{border-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.border-x-transparent{border-inline-color:#0000}.border-t-primary{border-top-color:var(--color-primary)}.bg-\[\#7e22ce\]{background-color:#7e22ce}.bg-\[\#9be9a8\]{background-color:#9be9a8}.bg-\[\#30a14e\]{background-color:#30a14e}.bg-\[\#40a9ff\]{background-color:#40a9ff}.bg-\[\#40c463\]{background-color:#40c463}.bg-\[\#0064c8\]{background-color:#0064c8}.bg-\[\#216e39\]{background-color:#216e39}.bg-\[\#218bff\]{background-color:#218bff}.bg-\[\#9333ea\]{background-color:#9333ea}.bg-\[\#a855f7\]{background-color:#a855f7}.bg-\[\#c6e48b\]{background-color:#c6e48b}.bg-\[\#d8b4fe\]{background-color:#d8b4fe}.bg-\[\#ea580c\]{background-color:#ea580c}.bg-\[\#ebedf0\]{background-color:#ebedf0}.bg-\[\#f97316\]{background-color:#f97316}.bg-\[\#fb923c\]{background-color:#fb923c}.bg-\[\#fdba74\]{background-color:#fdba74}.bg-background,.bg-background\/10{background-color:var(--color-background)}@supports (color:color-mix(in lab,red,red)){.bg-background\/10{background-color:color-mix(in oklab,var(--color-background) 10%,transparent)}}.bg-background\/20{background-color:var(--color-background)}@supports (color:color-mix(in lab,red,red)){.bg-background\/20{background-color:color-mix(in oklab,var(--color-background) 20%,transparent)}}.bg-background\/25{background-color:var(--color-background)}@supports (color:color-mix(in lab,red,red)){.bg-background\/25{background-color:color-mix(in oklab,var(--color-background) 25%,transparent)}}.bg-background\/40{background-color:var(--color-background)}@supports (color:color-mix(in lab,red,red)){.bg-background\/40{background-color:color-mix(in oklab,var(--color-background) 40%,transparent)}}.bg-background\/50{background-color:var(--color-background)}@supports (color:color-mix(in lab,red,red)){.bg-background\/50{background-color:color-mix(in oklab,var(--color-background) 50%,transparent)}}.bg-background\/60{background-color:var(--color-background)}@supports (color:color-mix(in lab,red,red)){.bg-background\/60{background-color:color-mix(in oklab,var(--color-background) 60%,transparent)}}.bg-background\/70{background-color:var(--color-background)}@supports (color:color-mix(in lab,red,red)){.bg-background\/70{background-color:color-mix(in oklab,var(--color-background) 70%,transparent)}}.bg-background\/80{background-color:var(--color-background)}@supports (color:color-mix(in lab,red,red)){.bg-background\/80{background-color:color-mix(in oklab,var(--color-background) 80%,transparent)}}.bg-background\/90{background-color:var(--color-background)}@supports (color:color-mix(in lab,red,red)){.bg-background\/90{background-color:color-mix(in oklab,var(--color-background) 90%,transparent)}}.bg-black\/80{background-color:#000c}@supports (color:color-mix(in lab,red,red)){.bg-black\/80{background-color:color-mix(in oklab,var(--color-black) 80%,transparent)}}.bg-border\/70{background-color:var(--color-border)}@supports (color:color-mix(in lab,red,red)){.bg-border\/70{background-color:color-mix(in oklab,var(--color-border) 70%,transparent)}}.bg-border\/80{background-color:var(--color-border)}@supports (color:color-mix(in lab,red,red)){.bg-border\/80{background-color:color-mix(in oklab,var(--color-border) 80%,transparent)}}.bg-destructive,.bg-destructive\/5{background-color:var(--color-destructive)}@supports (color:color-mix(in lab,red,red)){.bg-destructive\/5{background-color:color-mix(in oklab,var(--color-destructive) 5%,transparent)}}.bg-destructive\/10{background-color:var(--color-destructive)}@supports (color:color-mix(in lab,red,red)){.bg-destructive\/10{background-color:color-mix(in oklab,var(--color-destructive) 10%,transparent)}}.bg-destructive\/80{background-color:var(--color-destructive)}@supports (color:color-mix(in lab,red,red)){.bg-destructive\/80{background-color:color-mix(in oklab,var(--color-destructive) 80%,transparent)}}.bg-foreground,.bg-foreground\/25{background-color:var(--color-foreground)}@supports (color:color-mix(in lab,red,red)){.bg-foreground\/25{background-color:color-mix(in oklab,var(--color-foreground) 25%,transparent)}}.bg-muted{background-color:var(--color-muted)}.bg-muted-foreground,.bg-muted-foreground\/10{background-color:var(--color-muted-foreground)}@supports (color:color-mix(in lab,red,red)){.bg-muted-foreground\/10{background-color:color-mix(in oklab,var(--color-muted-foreground) 10%,transparent)}}.bg-muted-foreground\/20{background-color:var(--color-muted-foreground)}@supports (color:color-mix(in lab,red,red)){.bg-muted-foreground\/20{background-color:color-mix(in oklab,var(--color-muted-foreground) 20%,transparent)}}.bg-muted-foreground\/25{background-color:var(--color-muted-foreground)}@supports (color:color-mix(in lab,red,red)){.bg-muted-foreground\/25{background-color:color-mix(in oklab,var(--color-muted-foreground) 25%,transparent)}}.bg-muted-foreground\/30{background-color:var(--color-muted-foreground)}@supports (color:color-mix(in lab,red,red)){.bg-muted-foreground\/30{background-color:color-mix(in oklab,var(--color-muted-foreground) 30%,transparent)}}.bg-muted-foreground\/40{background-color:var(--color-muted-foreground)}@supports (color:color-mix(in lab,red,red)){.bg-muted-foreground\/40{background-color:color-mix(in oklab,var(--color-muted-foreground) 40%,transparent)}}.bg-muted\/10{background-color:var(--color-muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/10{background-color:color-mix(in oklab,var(--color-muted) 10%,transparent)}}.bg-muted\/20{background-color:var(--color-muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/20{background-color:color-mix(in oklab,var(--color-muted) 20%,transparent)}}.bg-muted\/30{background-color:var(--color-muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/30{background-color:color-mix(in oklab,var(--color-muted) 30%,transparent)}}.bg-muted\/40{background-color:var(--color-muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/40{background-color:color-mix(in oklab,var(--color-muted) 40%,transparent)}}.bg-muted\/50{background-color:var(--color-muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/50{background-color:color-mix(in oklab,var(--color-muted) 50%,transparent)}}.bg-muted\/60{background-color:var(--color-muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/60{background-color:color-mix(in oklab,var(--color-muted) 60%,transparent)}}.bg-muted\/70{background-color:var(--color-muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/70{background-color:color-mix(in oklab,var(--color-muted) 70%,transparent)}}.bg-primary,.bg-primary\/5{background-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/5{background-color:color-mix(in oklab,var(--color-primary) 5%,transparent)}}.bg-primary\/10{background-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/10{background-color:color-mix(in oklab,var(--color-primary) 10%,transparent)}}.bg-primary\/50{background-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/50{background-color:color-mix(in oklab,var(--color-primary) 50%,transparent)}}.bg-secondary,.bg-secondary\/30{background-color:var(--color-secondary)}@supports (color:color-mix(in lab,red,red)){.bg-secondary\/30{background-color:color-mix(in oklab,var(--color-secondary) 30%,transparent)}}.bg-secondary\/40{background-color:var(--color-secondary)}@supports (color:color-mix(in lab,red,red)){.bg-secondary\/40{background-color:color-mix(in oklab,var(--color-secondary) 40%,transparent)}}.bg-secondary\/60{background-color:var(--color-secondary)}@supports (color:color-mix(in lab,red,red)){.bg-secondary\/60{background-color:color-mix(in oklab,var(--color-secondary) 60%,transparent)}}.bg-success,.bg-success\/5{background-color:var(--color-success)}@supports (color:color-mix(in lab,red,red)){.bg-success\/5{background-color:color-mix(in oklab,var(--color-success) 5%,transparent)}}.bg-success\/12{background-color:var(--color-success)}@supports (color:color-mix(in lab,red,red)){.bg-success\/12{background-color:color-mix(in oklab,var(--color-success) 12%,transparent)}}.bg-transparent{background-color:#0000}.bg-warning,.bg-warning\/5{background-color:var(--color-warning)}@supports (color:color-mix(in lab,red,red)){.bg-warning\/5{background-color:color-mix(in oklab,var(--color-warning) 5%,transparent)}}.bg-warning\/20{background-color:var(--color-warning)}@supports (color:color-mix(in lab,red,red)){.bg-warning\/20{background-color:color-mix(in oklab,var(--color-warning) 20%,transparent)}}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-\[linear-gradient\(45deg\,rgba\(255\,255\,255\,0\.15\)_25\%\,transparent_25\%\,transparent_50\%\,rgba\(255\,255\,255\,0\.15\)_50\%\,rgba\(255\,255\,255\,0\.15\)_75\%\,transparent_75\%\,transparent\)\]{background-image:linear-gradient(45deg,#ffffff26 25%,#0000 0 50%,#ffffff26 0 75%,#0000 0,#0000)}.from-foreground{--tw-gradient-from:var(--color-foreground)}.from-foreground,.from-transparent{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-transparent{--tw-gradient-from:transparent}.via-foreground\/\[0\.1\]{--tw-gradient-via:var(--color-foreground)}@supports (color:color-mix(in lab,red,red)){.via-foreground\/\[0\.1\]{--tw-gradient-via:color-mix(in oklab, var(--color-foreground) 10%, transparent)}}.via-foreground\/\[0\.1\]{--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-foreground\/\[0\.06\]{--tw-gradient-via:var(--color-foreground)}@supports (color:color-mix(in lab,red,red)){.via-foreground\/\[0\.06\]{--tw-gradient-via:color-mix(in oklab, var(--color-foreground) 6%, transparent)}}.via-foreground\/\[0\.06\]{--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-foreground\/\[0\.08\]{--tw-gradient-via:var(--color-foreground)}@supports (color:color-mix(in lab,red,red)){.via-foreground\/\[0\.08\]{--tw-gradient-via:color-mix(in oklab, var(--color-foreground) 8%, transparent)}}.via-foreground\/\[0\.08\]{--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-foreground\/\[0\.12\]{--tw-gradient-via:var(--color-foreground)}@supports (color:color-mix(in lab,red,red)){.via-foreground\/\[0\.12\]{--tw-gradient-via:color-mix(in oklab, var(--color-foreground) 12%, transparent)}}.via-foreground\/\[0\.12\],.via-primary{--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-primary{--tw-gradient-via:var(--color-primary)}.to-muted-foreground{--tw-gradient-to:var(--color-muted-foreground)}.to-muted-foreground,.to-transparent{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-transparent{--tw-gradient-to:transparent}.bg-\[length\:1rem_1rem\]{background-size:1rem 1rem}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.fill-none{fill:none}.stroke-\[1\.3\]{stroke-width:1.3px}.stroke-\[1\.5\]{stroke-width:1.5px}.stroke-\[2\.5\]{stroke-width:2.5px}.stroke-\[3\]{stroke-width:3px}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.p-2\.5{padding:calc(var(--spacing)*2.5)}.p-3{padding:calc(var(--spacing)*3)}.p-3\.5{padding:calc(var(--spacing)*3.5)}.p-4{padding:calc(var(--spacing)*4)}.p-4\.5{padding:calc(var(--spacing)*4.5)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.p-7{padding:calc(var(--spacing)*7)}.p-10{padding:calc(var(--spacing)*10)}.p-14{padding:calc(var(--spacing)*14)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-3\.5{padding-inline:calc(var(--spacing)*3.5)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-4\.5{padding-inline:calc(var(--spacing)*4.5)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-6\.5{padding-inline:calc(var(--spacing)*6.5)}.px-7{padding-inline:calc(var(--spacing)*7)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-3\.5{padding-block:calc(var(--spacing)*3.5)}.py-4{padding-block:calc(var(--spacing)*4)}.py-4\.5{padding-block:calc(var(--spacing)*4.5)}.py-5{padding-block:calc(var(--spacing)*5)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-12{padding-block:calc(var(--spacing)*12)}.pt-0\.5{padding-top:calc(var(--spacing)*.5)}.pt-1{padding-top:var(--spacing)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-3{padding-top:calc(var(--spacing)*3)}.pr-0{padding-right:0}.pr-3{padding-right:calc(var(--spacing)*3)}.pr-6{padding-right:calc(var(--spacing)*6)}.pr-9{padding-right:calc(var(--spacing)*9)}.pb-1\.5{padding-bottom:calc(var(--spacing)*1.5)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-4\.5{padding-bottom:calc(var(--spacing)*4.5)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pl-0{padding-left:0}.pl-1{padding-left:var(--spacing)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-bottom{vertical-align:bottom}.align-middle{vertical-align:middle}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.92em\]{font-size:.92em}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.leading-loose{--tw-leading:var(--leading-loose);line-height:var(--leading-loose)}.leading-none{--tw-leading:1;line-height:1}.leading-normal{--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-background{color:var(--color-background)}.text-border{color:var(--color-border)}.text-destructive{color:var(--color-destructive)}.text-destructive-foreground{color:var(--color-destructive-foreground)}.text-foreground,.text-foreground\/80{color:var(--color-foreground)}@supports (color:color-mix(in lab,red,red)){.text-foreground\/80{color:color-mix(in oklab,var(--color-foreground) 80%,transparent)}}.text-muted-foreground,.text-muted-foreground\/25{color:var(--color-muted-foreground)}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/25{color:color-mix(in oklab,var(--color-muted-foreground) 25%,transparent)}}.text-muted-foreground\/30{color:var(--color-muted-foreground)}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/30{color:color-mix(in oklab,var(--color-muted-foreground) 30%,transparent)}}.text-muted-foreground\/40{color:var(--color-muted-foreground)}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/40{color:color-mix(in oklab,var(--color-muted-foreground) 40%,transparent)}}.text-muted-foreground\/50{color:var(--color-muted-foreground)}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/50{color:color-mix(in oklab,var(--color-muted-foreground) 50%,transparent)}}.text-muted-foreground\/60{color:var(--color-muted-foreground)}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/60{color:color-mix(in oklab,var(--color-muted-foreground) 60%,transparent)}}.text-muted-foreground\/70{color:var(--color-muted-foreground)}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/70{color:color-mix(in oklab,var(--color-muted-foreground) 70%,transparent)}}.text-primary{color:var(--color-primary)}.text-primary-foreground{color:var(--color-primary-foreground)}.text-secondary{color:var(--color-secondary)}.text-secondary-foreground{color:var(--color-secondary-foreground)}.text-success{color:var(--color-success)}.text-transparent{color:#0000}.text-warning{color:var(--color-warning)}.text-white\/70{color:#ffffffb3}@supports (color:color-mix(in lab,red,red)){.text-white\/70{color:color-mix(in oklab,var(--color-white) 70%,transparent)}}.text-white\/90{color:#ffffffe6}@supports (color:color-mix(in lab,red,red)){.text-white\/90{color:color-mix(in oklab,var(--color-white) 90%,transparent)}}.text-zinc-50{color:var(--color-zinc-50)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-30{opacity:.3}.opacity-35{opacity:.35}.opacity-40{opacity:.4}.opacity-45{opacity:.45}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-65{opacity:.65}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a)}.shadow,.shadow-2xl{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040)}.shadow-\[0_0_0_3px_color-mix\(in_srgb\,var\(--primary\)_12\%\,transparent\)\]{--tw-shadow:0 0 0 3px var(--tw-shadow-color,var(--primary))}@supports (color:color-mix(in lab,red,red)){.shadow-\[0_0_0_3px_color-mix\(in_srgb\,var\(--primary\)_12\%\,transparent\)\]{--tw-shadow:0 0 0 3px var(--tw-shadow-color,color-mix(in srgb,var(--primary) 12%,transparent))}}.shadow-\[0_0_0_3px_color-mix\(in_srgb\,var\(--primary\)_12\%\,transparent\)\]{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_0_4px_color-mix\(in_srgb\,var\(--primary\)_18\%\,transparent\)\]{--tw-shadow:0 0 0 4px var(--tw-shadow-color,var(--primary))}@supports (color:color-mix(in lab,red,red)){.shadow-\[0_0_0_4px_color-mix\(in_srgb\,var\(--primary\)_18\%\,transparent\)\]{--tw-shadow:0 0 0 4px var(--tw-shadow-color,color-mix(in srgb,var(--primary) 18%,transparent))}}.shadow-\[0_0_0_4px_color-mix\(in_srgb\,var\(--primary\)_18\%\,transparent\)\]{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_2px_8px_color-mix\(in_srgb\,var\(--primary\)_18\%\,transparent\)\]{--tw-shadow:0 2px 8px var(--tw-shadow-color,var(--primary))}@supports (color:color-mix(in lab,red,red)){.shadow-\[0_2px_8px_color-mix\(in_srgb\,var\(--primary\)_18\%\,transparent\)\]{--tw-shadow:0 2px 8px var(--tw-shadow-color,color-mix(in srgb,var(--primary) 18%,transparent))}}.shadow-\[0_2px_8px_color-mix\(in_srgb\,var\(--primary\)_18\%\,transparent\)\],.shadow-\[0_2px_8px_rgba\(0\,0\,0\,0\.015\)\]{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_2px_8px_rgba\(0\,0\,0\,0\.015\)\]{--tw-shadow:0 2px 8px var(--tw-shadow-color,#00000004)}.shadow-\[0_4px_14px_rgba\(0\,0\,0\,0\.06\)\,0_1px_3px_rgba\(0\,0\,0\,0\.03\)\]{--tw-shadow:0 4px 14px var(--tw-shadow-color,#0000000f), 0 1px 3px var(--tw-shadow-color,#00000008);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_4px_16px_rgba\(0\,0\,0\,0\.02\)\,0_1px_4px_rgba\(0\,0\,0\,0\.01\)\]{--tw-shadow:0 4px 16px var(--tw-shadow-color,#00000005), 0 1px 4px var(--tw-shadow-color,#00000003)}.shadow-\[0_4px_16px_rgba\(0\,0\,0\,0\.02\)\,0_1px_4px_rgba\(0\,0\,0\,0\.01\)\],.shadow-\[0_8px_24px_rgba\(0\,0\,0\,0\.14\)\]{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_8px_24px_rgba\(0\,0\,0\,0\.14\)\]{--tw-shadow:0 8px 24px var(--tw-shadow-color,#00000024)}.shadow-\[0_8px_30px_rgba\(0\,0\,0\,0\.08\)\]{--tw-shadow:0 8px 30px var(--tw-shadow-color,#00000014)}.shadow-\[0_12px_32px_rgba\(0\,0\,0\,0\.03\)\,0_2px_8px_rgba\(0\,0\,0\,0\.01\)\],.shadow-\[0_8px_30px_rgba\(0\,0\,0\,0\.08\)\]{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_12px_32px_rgba\(0\,0\,0\,0\.03\)\,0_2px_8px_rgba\(0\,0\,0\,0\.01\)\]{--tw-shadow:0 12px 32px var(--tw-shadow-color,#00000008), 0 2px 8px var(--tw-shadow-color,#00000003)}.shadow-\[0_12px_36px_rgba\(0\,0\,0\,0\.14\)\]{--tw-shadow:0 12px 36px var(--tw-shadow-color,#00000024)}.shadow-\[0_12px_36px_rgba\(0\,0\,0\,0\.14\)\],.shadow-\[0_12px_40px_rgba\(0\,0\,0\,0\.14\)\,0_2px_6px_rgba\(0\,0\,0\,0\.04\)\]{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_12px_40px_rgba\(0\,0\,0\,0\.14\)\,0_2px_6px_rgba\(0\,0\,0\,0\.04\)\]{--tw-shadow:0 12px 40px var(--tw-shadow-color,#00000024), 0 2px 6px var(--tw-shadow-color,#0000000a)}.shadow-\[0_12px_40px_rgba\(0\,0\,0\,0\.14\)\]{--tw-shadow:0 12px 40px var(--tw-shadow-color,#00000024)}.shadow-\[0_12px_40px_rgba\(0\,0\,0\,0\.14\)\],.shadow-\[0_16px_40px_rgba\(0\,0\,0\,0\.2\)\]{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_16px_40px_rgba\(0\,0\,0\,0\.2\)\]{--tw-shadow:0 16px 40px var(--tw-shadow-color,#0003)}.shadow-\[0_16px_48px_rgba\(0\,0\,0\,0\.22\)\]{--tw-shadow:0 16px 48px var(--tw-shadow-color,#00000038)}.shadow-\[0_16px_48px_rgba\(0\,0\,0\,0\.22\)\],.shadow-\[0_20px_50px_rgba\(0\,0\,0\,0\.2\)\]{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_20px_50px_rgba\(0\,0\,0\,0\.2\)\]{--tw-shadow:0 20px 50px var(--tw-shadow-color,#0003)}.shadow-\[0_20px_60px_rgba\(0\,0\,0\,0\.24\)\]{--tw-shadow:0 20px 60px var(--tw-shadow-color,#0000003d)}.shadow-\[0_20px_60px_rgba\(0\,0\,0\,0\.24\)\],.shadow-lg{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a)}.shadow-md,.shadow-none{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a)}.shadow-sm,.shadow-xl{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor)}.ring-1,.ring-2{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor)}.ring-background{--tw-ring-color:var(--color-background)}.ring-primary,.ring-primary\/15{--tw-ring-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.ring-primary\/15{--tw-ring-color:color-mix(in oklab, var(--color-primary) 15%, transparent)}}.ring-primary\/40{--tw-ring-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.ring-primary\/40{--tw-ring-color:color-mix(in oklab, var(--color-primary) 40%, transparent)}}.ring-offset-1{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.ring-offset-background{--tw-ring-offset-color:var(--color-background)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px)}.blur,.blur-\[1\.5px\]{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.blur-\[1\.5px\]{--tw-blur:blur(1.5px)}.blur-\[1px\]{--tw-blur:blur(1px)}.blur-\[1px\],.blur-\[2\.5px\]{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.blur-\[2\.5px\]{--tw-blur:blur(2.5px)}.blur-\[2px\]{--tw-blur:blur(2px)}.blur-\[2px\],.blur-\[3px\]{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.blur-\[3px\]{--tw-blur:blur(3px)}.blur-md{--tw-blur:blur(var(--blur-md))}.blur-md,.blur-none{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.blur-none{--tw-blur:}.blur-sm{--tw-blur:blur(var(--blur-sm))}.blur-sm,.grayscale{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.grayscale{--tw-grayscale:grayscale(100%)}.grayscale-0{--tw-grayscale:grayscale(0%)}.filter,.grayscale-0{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-\[1\.5px\]{--tw-backdrop-blur:blur(1.5px)}.backdrop-blur-\[1\.5px\],.backdrop-blur-\[1px\]{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-\[1px\]{--tw-backdrop-blur:blur(1px)}.backdrop-blur-lg{--tw-backdrop-blur:blur(var(--blur-lg))}.backdrop-blur-lg,.backdrop-blur-md{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md))}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm))}.backdrop-blur-sm,.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events}.transition,.transition-all{transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to}.transition-colors,.transition-opacity{transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.duration-700{--tw-duration:.7s;transition-duration:.7s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.ease-smooth{--tw-ease:var(--ease-smooth);transition-timing-function:var(--ease-smooth)}.ease-spring{--tw-ease:var(--ease-spring);transition-timing-function:var(--ease-spring)}.ease-swift{--tw-ease:var(--ease-swift);transition-timing-function:var(--ease-swift)}.will-change-\[border-radius\,width\]{will-change:border-radius,width}.will-change-\[border-radius\]{will-change:border-radius}.will-change-\[opacity\]{will-change:opacity}.will-change-\[transform\,opacity\,filter\]{will-change:transform,opacity,filter}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.select-text{-webkit-user-select:text;user-select:text}.ring-inset{--tw-ring-inset:inset}.group-last\:hidden:is(:where(.group):last-child *){display:none}@media (hover:hover){.group-hover\:scale-125:is(:where(.group):hover *){--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.peer-focus-visible\:outline-2:is(:where(.peer):focus-visible~*){outline-style:var(--tw-outline-style);outline-width:2px}.peer-focus-visible\:outline-offset-2:is(:where(.peer):focus-visible~*){outline-offset:2px}.peer-focus-visible\:outline-ring:is(:where(.peer):focus-visible~*){outline-color:var(--color-ring)}.placeholder\:text-muted-foreground\/60::placeholder{color:var(--color-muted-foreground)}@supports (color:color-mix(in lab,red,red)){.placeholder\:text-muted-foreground\/60::placeholder{color:color-mix(in oklab,var(--color-muted-foreground) 60%,transparent)}}.first\:rounded-l-base:first-child{border-top-left-radius:var(--radius-base);border-bottom-left-radius:var(--radius-base)}.last\:rounded-r-base:last-child{border-top-right-radius:var(--radius-base);border-bottom-right-radius:var(--radius-base)}.focus-within\:scale-\[1\.03\]:focus-within{scale:1.03}.focus-within\:border-primary:focus-within{border-color:var(--color-primary)}.focus-within\:ring-2:focus-within{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-within\:ring-destructive\/20:focus-within{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab,red,red)){.focus-within\:ring-destructive\/20:focus-within{--tw-ring-color:color-mix(in oklab, var(--color-destructive) 20%, transparent)}}.focus-within\:ring-primary\/15:focus-within{--tw-ring-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.focus-within\:ring-primary\/15:focus-within{--tw-ring-color:color-mix(in oklab, var(--color-primary) 15%, transparent)}}@media (hover:hover){.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:scale-\[1\.006\]:hover{scale:1.006}.hover\:border-border:hover,.hover\:border-border\/80:hover{border-color:var(--color-border)}@supports (color:color-mix(in lab,red,red)){.hover\:border-border\/80:hover{border-color:color-mix(in oklab,var(--color-border) 80%,transparent)}}.hover\:border-destructive\/60:hover{border-color:var(--color-destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:border-destructive\/60:hover{border-color:color-mix(in oklab,var(--color-destructive) 60%,transparent)}}.hover\:border-primary\/40:hover{border-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.hover\:border-primary\/40:hover{border-color:color-mix(in oklab,var(--color-primary) 40%,transparent)}}.hover\:border-primary\/60:hover{border-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.hover\:border-primary\/60:hover{border-color:color-mix(in oklab,var(--color-primary) 60%,transparent)}}.hover\:bg-background\/80:hover{background-color:var(--color-background)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-background\/80:hover{background-color:color-mix(in oklab,var(--color-background) 80%,transparent)}}.hover\:bg-background\/90:hover{background-color:var(--color-background)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-background\/90:hover{background-color:color-mix(in oklab,var(--color-background) 90%,transparent)}}.hover\:bg-black\/10:hover{background-color:#0000001a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/10:hover{background-color:color-mix(in oklab,var(--color-black) 10%,transparent)}}.hover\:bg-destructive\/10:hover{background-color:var(--color-destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/10:hover{background-color:color-mix(in oklab,var(--color-destructive) 10%,transparent)}}.hover\:bg-destructive\/20:hover{background-color:var(--color-destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/20:hover{background-color:color-mix(in oklab,var(--color-destructive) 20%,transparent)}}.hover\:bg-foreground\/50:hover{background-color:var(--color-foreground)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-foreground\/50:hover{background-color:color-mix(in oklab,var(--color-foreground) 50%,transparent)}}.hover\:bg-muted:hover,.hover\:bg-muted\/30:hover{background-color:var(--color-muted)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/30:hover{background-color:color-mix(in oklab,var(--color-muted) 30%,transparent)}}.hover\:bg-muted\/40:hover{background-color:var(--color-muted)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/40:hover{background-color:color-mix(in oklab,var(--color-muted) 40%,transparent)}}.hover\:bg-muted\/50:hover{background-color:var(--color-muted)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab,var(--color-muted) 50%,transparent)}}.hover\:bg-muted\/60:hover{background-color:var(--color-muted)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/60:hover{background-color:color-mix(in oklab,var(--color-muted) 60%,transparent)}}.hover\:bg-muted\/70:hover{background-color:var(--color-muted)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/70:hover{background-color:color-mix(in oklab,var(--color-muted) 70%,transparent)}}.hover\:bg-muted\/80:hover{background-color:var(--color-muted)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/80:hover{background-color:color-mix(in oklab,var(--color-muted) 80%,transparent)}}.hover\:bg-secondary\/80:hover{background-color:var(--color-secondary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,var(--color-secondary) 80%,transparent)}}.hover\:bg-white\/10:hover{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/10:hover{background-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.hover\:bg-white\/20:hover{background-color:#fff3}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/20:hover{background-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.hover\:text-destructive:hover{color:var(--color-destructive)}.hover\:text-foreground:hover{color:var(--color-foreground)}.hover\:text-primary:hover,.hover\:text-primary\/80:hover{color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.hover\:text-primary\/80:hover{color:color-mix(in oklab,var(--color-primary) 80%,transparent)}}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-90:hover{opacity:.9}.hover\:shadow-\[0_16px_36px_rgba\(0\,0\,0\,0\.04\)\,0_2px_12px_rgba\(0\,0\,0\,0\.01\)\]:hover{--tw-shadow:0 16px 36px var(--tw-shadow-color,#0000000a), 0 2px 12px var(--tw-shadow-color,#00000003)}.hover\:ring-2:hover,.hover\:shadow-\[0_16px_36px_rgba\(0\,0\,0\,0\.04\)\,0_2px_12px_rgba\(0\,0\,0\,0\.01\)\]:hover{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:ring-2:hover{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor)}.hover\:ring-foreground\/20:hover{--tw-ring-color:var(--color-foreground)}@supports (color:color-mix(in lab,red,red)){.hover\:ring-foreground\/20:hover{--tw-ring-color:color-mix(in oklab, var(--color-foreground) 20%, transparent)}}.hover\:ring-offset-1:hover{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-primary\/20:focus-visible{--tw-ring-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-primary\/20:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-primary) 20%, transparent)}}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-ring:focus-visible{outline-color:var(--color-ring)}.active\:scale-90:active{--tw-scale-x:90%;--tw-scale-y:90%;--tw-scale-z:90%;scale:var(--tw-scale-x) var(--tw-scale-y)}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.active\:scale-\[0\.9\]:active{scale:.9}.active\:scale-\[0\.96\]:active{scale:.96}.active\:scale-\[0\.97\]:active{scale:.97}.active\:scale-\[0\.98\]:active{scale:.98}.active\:scale-\[0\.993\]:active{scale:.993}.active\:cursor-grabbing:active{cursor:grabbing}.active\:bg-muted\/80:active{background-color:var(--color-muted)}@supports (color:color-mix(in lab,red,red)){.active\:bg-muted\/80:active{background-color:color-mix(in oklab,var(--color-muted) 80%,transparent)}}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}@supports ((-webkit-backdrop-filter:var(--tw )) or (backdrop-filter:var(--tw ))){.supports-\[backdrop-filter\]\:bg-background\/60{background-color:var(--color-background)}@supports (color:color-mix(in lab,red,red)){.supports-\[backdrop-filter\]\:bg-background\/60{background-color:color-mix(in oklab,var(--color-background) 60%,transparent)}}}@media (width>=40rem){.sm\:right-6{right:calc(var(--spacing)*6)}.sm\:left-6{left:calc(var(--spacing)*6)}.sm\:left-auto{left:auto}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:inline{display:inline}.sm\:max-w-2xl{max-width:var(--container-2xl)}.sm\:max-w-\[360px\]{max-width:360px}.sm\:max-w-md{max-width:var(--container-md)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:max-w-xl{max-width:var(--container-xl)}.sm\:max-w-xs{max-width:var(--container-xs)}.sm\:translate-x-0{--tw-translate-x:0px;translate:var(--tw-translate-x) var(--tw-translate-y)}.sm\:items-end{align-items:flex-end}.sm\:items-start{align-items:flex-start}.sm\:p-5{padding:calc(var(--spacing)*5)}.sm\:px-5{padding-inline:calc(var(--spacing)*5)}.sm\:py-3\.5{padding-block:calc(var(--spacing)*3.5)}.sm\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}}@media (width>=48rem){.md\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}}@media (prefers-color-scheme:dark){.dark\:border-white\/5{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.dark\:border-white\/5{border-color:color-mix(in oklab,var(--color-white) 5%,transparent)}}}.dark\:border-white\/5:where(.dark,.dark *){border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.dark\:border-white\/5:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white) 5%,transparent)}}@media (prefers-color-scheme:dark){.dark\:border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\:border-white\/10{border-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}}.dark\:border-white\/10:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\:border-white\/10:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}@media (prefers-color-scheme:dark){.dark\:bg-\[\#161b22\]{background-color:#161b22}}.dark\:bg-\[\#161b22\]:where(.dark,.dark *){background-color:#161b22}@media (prefers-color-scheme:dark){.dark\:bg-background\/10{background-color:var(--color-background)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-background\/10{background-color:color-mix(in oklab,var(--color-background) 10%,transparent)}}}.dark\:bg-background\/10:where(.dark,.dark *){background-color:var(--color-background)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-background\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-background) 10%,transparent)}}@media (prefers-color-scheme:dark){.dark\:bg-background\/15{background-color:var(--color-background)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-background\/15{background-color:color-mix(in oklab,var(--color-background) 15%,transparent)}}}.dark\:bg-background\/15:where(.dark,.dark *){background-color:var(--color-background)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-background\/15:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-background) 15%,transparent)}}@media (prefers-color-scheme:dark){.dark\:bg-background\/30{background-color:var(--color-background)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-background\/30{background-color:color-mix(in oklab,var(--color-background) 30%,transparent)}}}.dark\:bg-background\/30:where(.dark,.dark *){background-color:var(--color-background)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-background\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-background) 30%,transparent)}}@media (prefers-color-scheme:dark){.dark\:bg-background\/40{background-color:var(--color-background)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-background\/40{background-color:color-mix(in oklab,var(--color-background) 40%,transparent)}}}.dark\:bg-background\/40:where(.dark,.dark *){background-color:var(--color-background)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-background\/40:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-background) 40%,transparent)}}@media (prefers-color-scheme:dark){.dark\:bg-background\/50{background-color:var(--color-background)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-background\/50{background-color:color-mix(in oklab,var(--color-background) 50%,transparent)}}}.dark\:bg-background\/50:where(.dark,.dark *){background-color:var(--color-background)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-background\/50:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-background) 50%,transparent)}}@media (prefers-color-scheme:dark){.dark\:bg-background\/60{background-color:var(--color-background)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-background\/60{background-color:color-mix(in oklab,var(--color-background) 60%,transparent)}}}.dark\:bg-background\/60:where(.dark,.dark *){background-color:var(--color-background)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-background\/60:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-background) 60%,transparent)}}@media (prefers-color-scheme:dark){.dark\:bg-background\/70{background-color:var(--color-background)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-background\/70{background-color:color-mix(in oklab,var(--color-background) 70%,transparent)}}}.dark\:bg-background\/70:where(.dark,.dark *){background-color:var(--color-background)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-background\/70:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-background) 70%,transparent)}}@media (prefers-color-scheme:dark){.dark\:bg-background\/80{background-color:var(--color-background)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-background\/80{background-color:color-mix(in oklab,var(--color-background) 80%,transparent)}}}.dark\:bg-background\/80:where(.dark,.dark *){background-color:var(--color-background)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-background\/80:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-background) 80%,transparent)}}@media (prefers-color-scheme:dark){.dark\:bg-muted\/25{background-color:var(--color-muted)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-muted\/25{background-color:color-mix(in oklab,var(--color-muted) 25%,transparent)}}}.dark\:bg-muted\/25:where(.dark,.dark *){background-color:var(--color-muted)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-muted\/25:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-muted) 25%,transparent)}}@media (prefers-color-scheme:dark){.dark\:bg-muted\/50{background-color:var(--color-muted)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-muted\/50{background-color:color-mix(in oklab,var(--color-muted) 50%,transparent)}}}.dark\:bg-muted\/50:where(.dark,.dark *){background-color:var(--color-muted)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-muted\/50:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-muted) 50%,transparent)}}@media (prefers-color-scheme:dark){.dark\:bg-primary\/10{background-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-primary\/10{background-color:color-mix(in oklab,var(--color-primary) 10%,transparent)}}}.dark\:bg-primary\/10:where(.dark,.dark *){background-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-primary\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-primary) 10%,transparent)}}@media (prefers-color-scheme:dark){.dark\:bg-zinc-50{background-color:var(--color-zinc-50)}}.dark\:bg-zinc-50:where(.dark,.dark *){background-color:var(--color-zinc-50)}@media (prefers-color-scheme:dark){.dark\:text-zinc-900{color:var(--color-zinc-900)}}.dark\:text-zinc-900:where(.dark,.dark *){color:var(--color-zinc-900)}@media (prefers-color-scheme:dark){.dark\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.dark\:shadow-none:where(.dark,.dark *){--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (prefers-color-scheme:dark){@media (hover:hover){.dark\:hover\:bg-destructive\/20:hover{background-color:var(--color-destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-destructive\/20:hover{background-color:color-mix(in oklab,var(--color-destructive) 20%,transparent)}}}}@media (hover:hover){.dark\:hover\:bg-destructive\/20:where(.dark,.dark *):hover{background-color:var(--color-destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-destructive\/20:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-destructive) 20%,transparent)}}}@media (prefers-color-scheme:dark){@media (hover:hover){.dark\:hover\:bg-white\/20:hover{background-color:#fff3}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-white\/20:hover{background-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}}}@media (hover:hover){.dark\:hover\:bg-white\/20:where(.dark,.dark *):hover{background-color:#fff3}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-white\/20:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}}@media (prefers-color-scheme:dark){@media (hover:hover){.dark\:hover\:shadow-none:hover{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}}@media (hover:hover){.dark\:hover\:shadow-none:where(.dark,.dark *):hover{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.\[\&_button\:not\(\:first-child\)\]\:-ml-px button:not(:first-child){margin-left:-1px}}@layer utilities{.fixed{position:fixed}.sticky{position:sticky}.inset-0{inset:0}.inset-y-0{inset-block:0}.top-0{top:0}.left-0{left:0}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:var(--spacing)}.mt-3{margin-top:calc(var(--spacing)*3)}.mb-1\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-flex{display:inline-flex}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-16{height:calc(var(--spacing)*16)}.h-\[88px\]{height:88px}.max-h-\[420px\]{max-height:420px}.min-h-screen{min-height:100vh}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-32{width:calc(var(--spacing)*32)}.w-60{width:calc(var(--spacing)*60)}.w-64{width:calc(var(--spacing)*64)}.w-full{width:100%}.max-w-md{max-width:var(--container-md)}.min-w-0{min-width:0}.flex-1{flex:1}.shrink-0{flex-shrink:0}.-translate-x-full{--tw-translate-x:-100%}.-translate-x-full,.translate-x-0{translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:0px}.cursor-pointer{cursor:pointer}.resize{resize:both}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-end{justify-content:flex-end}.gap-1{gap:var(--spacing)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing)*var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing)*(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing)*4*var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing)*4*(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing)*5*var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing)*5*(1 - var(--tw-space-y-reverse)))}.gap-x-6{-moz-column-gap:calc(var(--spacing)*6);column-gap:calc(var(--spacing)*6)}.gap-y-1{row-gap:var(--spacing)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-y-auto{overflow-y:auto}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-border{border-color:var(--color-border)}.\!bg-muted{background-color:var(--color-muted)!important}.bg-background,.bg-background\/80{background-color:var(--color-background)}@supports (color:color-mix(in lab,red,red)){.bg-background\/80{background-color:color-mix(in oklab,var(--color-background) 80%,transparent)}}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black) 40%,transparent)}}.bg-muted\/40{background-color:var(--color-muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/40{background-color:color-mix(in oklab,var(--color-muted) 40%,transparent)}}.bg-primary{background-color:var(--color-primary)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-4{padding-block:calc(var(--spacing)*4)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-3{padding-top:calc(var(--spacing)*3)}.pt-6{padding-top:calc(var(--spacing)*6)}.pb-5{padding-bottom:calc(var(--spacing)*5)}.font-mono{font-family:var(--font-mono)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[11px\]{font-size:11px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.break-all{word-break:break-all}.whitespace-pre-wrap{white-space:pre-wrap}.\!text-foreground{color:var(--color-foreground)!important}.text-foreground{color:var(--color-foreground)}.text-muted-foreground{color:var(--color-muted-foreground)}.text-primary-foreground{color:var(--color-primary-foreground)}.text-warning{color:var(--color-warning)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition-all{transition-property:all}.transition-all,.transition-colors{transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.outline-none{--tw-outline-style:none;outline-style:none}@media (hover:hover){.group-hover\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing)*-.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:bg-muted:hover{background-color:var(--color-muted)}.hover\:text-foreground:hover{color:var(--color-foreground)}}.focus\:border-ring:focus{border-color:var(--color-ring)}@media (width>=40rem){.sm\:col-span-2{grid-column:span 2/span 2}.sm\:inline{display:inline}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:p-6{padding:calc(var(--spacing)*6)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}}@media (width>=64rem){.lg\:static{position:static}.lg\:hidden{display:none}.lg\:translate-x-0{--tw-translate-x:0px;translate:var(--tw-translate-x) var(--tw-translate-y)}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}}@media (width>=80rem){.xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}}:root{--background:#fff;--foreground:#09090b;--primary:#18181b;--primary-foreground:#fafafa;--secondary:#f4f4f5;--secondary-foreground:#18181b;--muted:#f4f4f5;--muted-foreground:#71717a;--accent:#f4f4f5;--accent-foreground:#18181b;--destructive:#ef4444;--destructive-foreground:#fafafa;--success:#10b981;--success-foreground:#fafafa;--warning:#f59e0b;--warning-foreground:#18181b;--border:#e4e4e7;--input:#e4e4e7;--ring:#18181b;--radius:.5rem;--duration-fast:.15s;--duration-base:.25s;--duration-slow:.3s;--duration-slower:.4s;--duration-enter:.7s;--dark-background:#000;--dark-foreground:#fafafa;--dark-primary:#fafafa;--dark-primary-foreground:#18181b;--dark-secondary:#27272a;--dark-secondary-foreground:#fafafa;--dark-muted:#27272a;--dark-muted-foreground:#a1a1aa;--dark-accent:#27272a;--dark-accent-foreground:#fafafa;--dark-destructive:#7f1d1d;--dark-destructive-foreground:#fafafa;--dark-success:#059669;--dark-success-foreground:#fafafa;--dark-warning:#d97706;--dark-warning-foreground:#fff;--dark-border:#27272a;--dark-input:#27272a;--dark-ring:#d4d4d8}@media (prefers-color-scheme:dark){:root{--background:var(--dark-background);--foreground:var(--dark-foreground);--primary:var(--dark-primary);--primary-foreground:var(--dark-primary-foreground);--secondary:var(--dark-secondary);--secondary-foreground:var(--dark-secondary-foreground);--muted:var(--dark-muted);--muted-foreground:var(--dark-muted-foreground);--accent:var(--dark-accent);--accent-foreground:var(--dark-accent-foreground);--destructive:var(--dark-destructive);--destructive-foreground:var(--dark-destructive-foreground);--success:var(--dark-success);--success-foreground:var(--dark-success-foreground);--warning:var(--dark-warning);--warning-foreground:var(--dark-warning-foreground);--border:var(--dark-border);--input:var(--dark-input);--ring:var(--dark-ring)}}.dark{--background:var(--dark-background);--foreground:var(--dark-foreground);--primary:var(--dark-primary);--primary-foreground:var(--dark-primary-foreground);--secondary:var(--dark-secondary);--secondary-foreground:var(--dark-secondary-foreground);--muted:var(--dark-muted);--muted-foreground:var(--dark-muted-foreground);--accent:var(--dark-accent);--accent-foreground:var(--dark-accent-foreground);--destructive:var(--dark-destructive);--destructive-foreground:var(--dark-destructive-foreground);--success:var(--dark-success);--success-foreground:var(--dark-success-foreground);--warning:var(--dark-warning);--warning-foreground:var(--dark-warning-foreground);--border:var(--dark-border);--input:var(--dark-input);--ring:var(--dark-ring)}@keyframes kineticShimmer{0%{transform:translate(-100%)}45%{transform:translate(100%)}to{transform:translate(100%)}}.animate-kinetic-shimmer{animation:1.8s cubic-bezier(.85,0,.15,1) infinite kineticShimmer}.scrollbar-none::-webkit-scrollbar{display:none}.scrollbar-none{-ms-overflow-style:none;scrollbar-width:none}@keyframes fuxstoTextShimmer{0%{background-position:100% 0}to{background-position:-100% 0}}.fuxsto-text-shimmer{-webkit-text-fill-color:transparent;transition:color var(--duration-slower) ease,-webkit-text-fill-color var(--duration-slower) ease;background-image:linear-gradient(90deg,#8080804d,#808080b3 50%,#8080804d);background-size:200% 100%;-webkit-background-clip:text;background-clip:text;animation:1.4s ease-in-out infinite fuxstoTextShimmer;color:#0000!important}.fuxsto-streaming-outer{display:inline-block;overflow:hidden}.fuxsto-streaming-inner{align-items:baseline;line-height:1.5;display:inline-flex}.fuxsto-text-row{white-space:nowrap;isolation:isolate;align-items:baseline;display:inline-flex;position:relative}.fuxsto-text-cell{white-space:nowrap;vertical-align:baseline;will-change:width;width:auto;line-height:1.5;display:inline-block;overflow:hidden}.fuxsto-text-stable{width:auto;overflow:visible}.dot-pop-enter-active{transition:all var(--duration-slow) var(--ease-spring)}.dot-pop-leave-active{transition:all .2s ease-in}.dot-pop-enter-from,.dot-pop-leave-to{opacity:0;filter:blur(4px);transform:scale(.2)}.badge-pop-enter-active,.badge-pop-leave-active{transition:opacity var(--duration-slow) var(--ease-swift),transform var(--duration-slow) var(--ease-swift),filter var(--duration-slow) var(--ease-swift)}.badge-pop-enter-from,.badge-pop-leave-to{opacity:0;filter:blur(8px);transform:scale(.3)}.dropdown-enter-active,.dropdown-leave-active{transition:opacity var(--duration-slower) var(--ease-swift),transform var(--duration-slower) var(--ease-swift),filter var(--duration-slower) var(--ease-swift);transform-origin:0 0}.dropdown-enter-from,.dropdown-leave-to{opacity:0;filter:blur(16px);transform:scale(0)}.-webkit-touch-callout-none{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}@keyframes rowFade{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.animate-row-fade{animation:rowFade var(--duration-slow) var(--ease-swift) both;animation-delay:var(--row-delay,0s)}.chevron-enter-active,.chevron-leave-active{transition:all var(--duration-base) var(--ease-smooth)}.chevron-enter-from,.chevron-leave-to{opacity:0;transform:scale(.5)}.slide-forward-enter-active,.slide-forward-leave-active{transition:all var(--duration-slow) var(--ease-swift)}.slide-forward-enter-from{opacity:0;transform:translate(12px)}.slide-forward-leave-to{opacity:0;transform:translate(-12px)}.slide-backward-enter-active,.slide-backward-leave-active{transition:all var(--duration-slow) var(--ease-swift)}.slide-backward-enter-from{opacity:0;transform:translate(-12px)}.slide-backward-leave-to{opacity:0;transform:translate(12px)}@keyframes progressStripe{0%{background-position:1rem 0}to{background-position:0 0}}.animate-progress-stripe{animation:1s linear infinite progressStripe}.dialog-mask-enter-active,.dialog-mask-leave-active{transition:opacity var(--duration-slower) var(--ease-swift)}.dialog-mask-enter-from,.dialog-mask-leave-to{opacity:0}.dialog-pop-enter-active,.dialog-pop-leave-active{transition:opacity var(--duration-slower) var(--ease-swift),transform var(--duration-slower) var(--ease-swift),filter var(--duration-slower) var(--ease-swift)}.dialog-pop-enter-from,.dialog-pop-leave-to{opacity:0;filter:blur(16px);transform:scale(.92)}.drawer-mask-enter-active,.drawer-mask-leave-active{transition:opacity var(--duration-slower) var(--ease-swift)}.drawer-mask-enter-from,.drawer-mask-leave-to{opacity:0}.drawer-bottom-enter-active,.drawer-bottom-leave-active,.drawer-left-enter-active,.drawer-left-leave-active,.drawer-right-enter-active,.drawer-right-leave-active,.drawer-top-enter-active,.drawer-top-leave-active{transition:all var(--duration-slower) var(--ease-swift)}.drawer-right-enter-from,.drawer-right-leave-to{transform:translate(100%);box-shadow:0 20px 60px #0000}.drawer-left-enter-from,.drawer-left-leave-to{transform:translate(-100%);box-shadow:0 20px 60px #0000}.drawer-top-enter-from,.drawer-top-leave-to{transform:translateY(-100%);box-shadow:0 20px 60px #0000}.drawer-bottom-enter-from,.drawer-bottom-leave-to{transform:translateY(100%);box-shadow:0 20px 60px #0000}@keyframes tipPop{0%{opacity:0;filter:blur(4px);transform:scale(.85)}to{opacity:1;filter:blur();transform:scale(1)}}.animate-tip-pop{animation:tipPop var(--duration-slow) var(--ease-swift) forwards}.message-flip-enter-active,.message-flip-leave-active,.message-flip-move{transition:all var(--duration-slower) var(--ease-swift)}.message-flip-enter-from{opacity:0;filter:blur(15px);transform:translateY(-20px)scale(.5)}.message-flip-leave-to{opacity:0;filter:blur(10px);transform:translateY(-15px)scale(0)}.message-flip-leave-active{position:absolute}.pop-enter-active{transition:all var(--duration-slow) var(--ease-spring)}.pop-leave-active{transition:all .15s ease-in;position:absolute}.pop-enter-from{opacity:0;transform:scale(.3)translateY(4px)}.pop-leave-to{opacity:0;transform:scale(.8)}.notif-flip-right-enter-active,.notif-flip-right-leave-active,.notif-flip-right-move{transition:all var(--duration-slower) var(--ease-swift)}.notif-flip-right-enter-from{opacity:0;filter:blur(8px);transform:translate(40px)scale(.95)}.notif-flip-right-leave-to{opacity:0;filter:blur(4px);transform:translate(20px)scale(.95)}.notif-flip-right-leave-active{position:absolute}.notif-flip-left-enter-active,.notif-flip-left-leave-active,.notif-flip-left-move{transition:all var(--duration-slower) var(--ease-swift)}.notif-flip-left-enter-from{opacity:0;filter:blur(8px);transform:translate(-40px)scale(.95)}.notif-flip-left-leave-to{opacity:0;filter:blur(4px);transform:translate(-20px)scale(.95)}.notif-flip-left-leave-active{position:absolute}.notif-flip-top-enter-active,.notif-flip-top-leave-active,.notif-flip-top-move{transition:all var(--duration-slower) var(--ease-swift)}.notif-flip-top-enter-from{opacity:0;filter:blur(8px);transform:translateY(-40px)scale(.95)}.notif-flip-top-leave-to{opacity:0;filter:blur(4px);transform:translateY(-20px)scale(.95)}.notif-flip-top-leave-active{position:absolute}.notif-flip-bottom-enter-active,.notif-flip-bottom-leave-active,.notif-flip-bottom-move{transition:all var(--duration-slower) var(--ease-swift)}.notif-flip-bottom-enter-from{opacity:0;filter:blur(8px);transform:translateY(40px)scale(.95)}.notif-flip-bottom-leave-to{opacity:0;filter:blur(4px);transform:translateY(20px)scale(.95)}.notif-flip-bottom-leave-active{position:absolute}.popconfirm-scale-enter-active,.popconfirm-scale-leave-active{transition:opacity var(--duration-slower) var(--ease-swift),transform var(--duration-slower) var(--ease-swift),filter var(--duration-slower) var(--ease-swift)}.popconfirm-scale-enter-from,.popconfirm-scale-leave-to{opacity:0;filter:blur(10px);transform:scale(.9)}.tooltip-fade-enter-active,.tooltip-fade-leave-active{transition:opacity var(--duration-slower) var(--ease-swift),transform var(--duration-slower) var(--ease-swift),filter var(--duration-slower) var(--ease-swift)}.tooltip-fade-enter-from,.tooltip-fade-leave-to{opacity:0;filter:blur(8px);transform:scale(.88)}.icon-pop-enter-active,.icon-pop-leave-active{transition:all .22s var(--ease-spring)}.icon-pop-enter-from,.icon-pop-leave-to{opacity:0;transform:scale(.4)rotate(-45deg)}.icon-flip-enter-active,.icon-flip-leave-active{transition:all .2s var(--ease-swift)}.icon-flip-enter-from{opacity:0;transform:scale(.5)rotate(45deg)}.icon-flip-leave-to{opacity:0;transform:scale(.5)rotate(-45deg)}@keyframes shake{0%,to{transform:translate(0)}20%,60%{transform:translate(-4px)}40%,80%{transform:translate(4px)}}.animate-shake{animation:shake var(--duration-slow) cubic-bezier(.36,.07,.19,.97) both}.expand-error-enter-active,.expand-error-leave-active{transition:all var(--duration-slow) var(--ease-swift);max-height:30px;overflow:hidden}.expand-error-enter-from,.expand-error-leave-to{opacity:0;max-height:0;transform:translateY(-4px)}.backtop-fade-enter-active,.backtop-fade-leave-active{transition:opacity var(--duration-slower) var(--ease-swift),filter var(--duration-slower) var(--ease-swift)}.backtop-fade-enter-from,.backtop-fade-leave-to{opacity:0;filter:blur(12px)}.alert-expand-enter-active,.alert-expand-leave-active{transition:all var(--duration-slower) var(--ease-swift);overflow:hidden}.alert-expand-enter-from,.alert-expand-leave-to{opacity:0;max-height:0;transform:translateY(-4px)}.alert-icon-pop-enter-active,.alert-icon-pop-leave-active{transition:all var(--duration-slow) var(--ease-spring)}.alert-icon-pop-enter-from,.alert-icon-pop-leave-to{opacity:0;transform:scale(.4)}.calendar-cell-pop-enter-active,.calendar-cell-pop-leave-active{transition:all .2s var(--ease-spring)}.calendar-cell-pop-enter-from,.calendar-cell-pop-leave-to{opacity:0;transform:scale(.6)}.calendar-panel-enter-active{animation:calendarPanelIn .32s var(--ease-swift)}@keyframes calendarPanelIn{0%{opacity:0;transform:rotateX(12deg)translateY(-4px)scale(.97)}to{opacity:1;transform:rotateX(0)translateY(0)scale(1)}}@keyframes calendarMonthInRight{0%{opacity:0;transform:translate(28px)}to{opacity:1;transform:translate(0)}}@keyframes calendarMonthInLeft{0%{opacity:0;transform:translate(-28px)}to{opacity:1;transform:translate(0)}}.calendar-view-enter-right{animation:calendarMonthInRight .32s var(--ease-swift)}.calendar-view-enter-left{animation:calendarMonthInLeft .32s var(--ease-swift)}.time-option-in-enter-active{transition:all var(--duration-base) var(--ease-swift)}.time-option-in-enter-from{opacity:0;transform:translateY(6px)}.cascader-col-enter-active,.cascader-col-leave-active{transition:opacity var(--duration-slow) var(--ease-swift),transform var(--duration-slow) var(--ease-swift)}.cascader-col-enter-from{opacity:0;transform:translate(10px)}.cascader-col-leave-to{opacity:0;transform:translate(-10px)}.animate-cascader-col{animation:cascaderColIn .28s var(--ease-swift) both}@keyframes cascaderColIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.upload-drag-active{animation:1.4s ease-in-out infinite uploadBreath}@keyframes uploadBreath{0%,to{border-color:rgb(var(--ring-rgb,24,24,27));box-shadow:0 0 #18181b00}50%{border-color:rgb(var(--ring-rgb,24,24,27));box-shadow:0 0 0 6px #18181b1f}}.upload-flip-enter-active,.upload-flip-leave-active,.upload-flip-move{transition:all var(--duration-slow) var(--ease-swift)}.upload-flip-enter-from{opacity:0;transform:translateY(-10px)scale(.95)}.upload-flip-leave-to{opacity:0;transform:translateY(8px)scale(.92)}.upload-flip-leave-active{position:absolute}.slider-thumb-active{transform:scale(1.18)}.slider-thumb-pop{transition:transform .2s var(--ease-spring)}.slider-bubble-enter-active{transition:all .22s var(--ease-swift)}.slider-bubble-leave-active{transition:all .18s var(--ease-swift)}.slider-bubble-enter-from,.slider-bubble-leave-to{opacity:0;filter:blur(4px);transform:translate(-50%)scale(.6)}.rate-star-pop{animation:rateStarPop var(--duration-slow) var(--ease-spring) both}@keyframes rateStarPop{0%{transform:scale(.4)}60%{transform:scale(1.2)}to{transform:scale(1)}}.carousel-slide-enter-active,.carousel-slide-leave-active{transition:all .5s var(--ease-swift)}.carousel-slide-enter-from{opacity:0;transform:translate(40px)}.carousel-slide-leave-to{opacity:0;transform:translate(-40px)}.carousel-fade-enter-active,.carousel-fade-leave-active{transition:opacity .6s}.carousel-fade-enter-from,.carousel-fade-leave-to{opacity:0}.carousel-dot-active{background-color:var(--primary);transform:scale(1.2)}.carousel-arrow-enter-active,.carousel-arrow-leave-active{transition:opacity var(--duration-slow) var(--ease-swift),transform var(--duration-slow) var(--ease-swift),filter var(--duration-slow) var(--ease-swift)}.carousel-arrow-enter-from,.carousel-arrow-leave-to{opacity:0;filter:blur(6px);transform:translateY(-50%)scale(.9)}.image-mask-enter-active,.image-mask-leave-active{transition:opacity var(--duration-slower) var(--ease-swift)}.image-mask-enter-from,.image-mask-leave-to{opacity:0}.image-zoom-enter-active,.image-zoom-leave-active{transition:opacity .45s var(--ease-swift),transform .45s var(--ease-swift)}.image-zoom-enter-from,.image-zoom-leave-to{opacity:0;transform:scale(.92)}.image-toolbar-enter-active,.image-toolbar-leave-active{transition:opacity var(--duration-slow) var(--ease-swift),transform var(--duration-slow) var(--ease-swift),filter var(--duration-slow) var(--ease-swift)}.image-toolbar-enter-from,.image-toolbar-leave-to{opacity:0;filter:blur(8px);transform:translate(-50%,18px)scale(.85)}.transfer-flip-move{transition:transform .36s var(--ease-swift)}.transfer-flip-enter-active{transition:opacity .32s var(--ease-swift),transform .32s var(--ease-swift)}.transfer-flip-leave-active{width:100%;transition:opacity .28s var(--ease-swift),transform .28s var(--ease-swift),height .28s var(--ease-swift);will-change:height;position:absolute;overflow:hidden}.transfer-flip-enter-from{opacity:0;transform:translate(20px)scale(.94)}.transfer-flip-leave-to{opacity:0;height:0;transform:translate(-20px)scale(.94)}.tour-mask-enter-active,.tour-mask-leave-active{transition:opacity .45s var(--ease-swift)}.tour-mask-enter-from,.tour-mask-leave-to{opacity:0}.tour-step-enter-active,.tour-step-leave-active{transition:opacity var(--duration-slower) var(--ease-swift),transform var(--duration-slower) var(--ease-swift)}.tour-step-enter-from,.tour-step-leave-to{opacity:0;transform:translateY(12px)scale(.9)}.color-panel-enter-active{animation:colorPanelIn .32s var(--ease-swift)}@keyframes colorPanelIn{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.color-swatch-pop{animation:colorSwatchPop var(--duration-base) var(--ease-spring) both}@keyframes colorSwatchPop{0%{transform:scale(.6)}to{transform:scale(1)}}.tree-rows-transition{transition:grid-template-rows .32s var(--ease-swift);grid-template-rows:0fr;display:grid}.tree-rows-transition.is-open{grid-template-rows:1fr}.tree-rows-inner{min-height:0;overflow:hidden}.tree-node-item{animation:treeNodeIn .28s var(--ease-swift) both}@keyframes treeNodeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.count-flip-enter-active,.count-flip-leave-active{transition:all .32s var(--ease-swift)}.count-flip-enter-from{opacity:0;filter:blur(8px);transform:translateY(-12px)scale(.86)}.count-flip-leave-to{opacity:0;filter:blur(8px);transform:translateY(12px)scale(.86)}.copy-flip-enter-active,.copy-flip-leave-active,.copy-icon-flip-enter-active,.copy-icon-flip-leave-active{transition:opacity .28s var(--ease-swift),transform .32s var(--ease-spring),filter .28s var(--ease-swift)}.copy-flip-enter-from,.copy-icon-flip-enter-from{opacity:0;filter:blur(4px);transform:scale(.4)rotate(-90deg)}.copy-flip-leave-to,.copy-icon-flip-leave-to{opacity:0;filter:blur(4px);transform:scale(.4)rotate(90deg)}.anchor-item-active{color:var(--primary);font-weight:700}.anchor-item-enter-active{transition:color var(--duration-base) ease,padding-left var(--duration-base) ease}.fuxso-scroll::-webkit-scrollbar{width:8px;height:8px}.fuxso-scroll::-webkit-scrollbar-track{background:var(--scrollbar-track,#787882)}@supports (color:color-mix(in lab,red,red)){.fuxso-scroll::-webkit-scrollbar-track{background:color-mix(in srgb,var(--scrollbar-track,#787882) 5%,transparent)}}.fuxso-scroll::-webkit-scrollbar-track{border-radius:var(--radius)}.fuxso-scroll::-webkit-scrollbar-thumb{background:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.fuxso-scroll::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--muted-foreground) 30%,transparent)}}.fuxso-scroll::-webkit-scrollbar-thumb{border-radius:calc(var(--radius) - 2px)}.fuxso-scroll::-webkit-scrollbar-thumb:hover{background:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.fuxso-scroll::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb,var(--muted-foreground) 50%,transparent)}}.fuxso-scroll-thin::-webkit-scrollbar{width:5px;height:5px}.fuxso-scroll-thick::-webkit-scrollbar{width:12px;height:12px}.fuxso-scroll-autohide::-webkit-scrollbar-thumb{-webkit-transition:background-color var(--duration-slow);transition:background-color var(--duration-slow);background-color:#0000}.fuxso-scroll-autohide:hover::-webkit-scrollbar-thumb{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.fuxso-scroll-autohide:hover::-webkit-scrollbar-thumb{background-color:color-mix(in srgb,var(--muted-foreground) 30%,transparent)}}.fuxso-scroll-autohide:focus::-webkit-scrollbar-thumb{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.fuxso-scroll-autohide:focus::-webkit-scrollbar-thumb{background-color:color-mix(in srgb,var(--muted-foreground) 30%,transparent)}}.fuxso-scroll-autohide{scrollbar-color:transparent transparent}.fuxso-scroll-autohide:focus,.fuxso-scroll-autohide:hover{scrollbar-color:var(--muted-foreground) transparent}@supports (color:color-mix(in lab,red,red)){.fuxso-scroll-autohide:focus,.fuxso-scroll-autohide:hover{scrollbar-color:color-mix(in srgb,var(--muted-foreground) 30%,transparent) transparent}}.fuxso-scroll{scrollbar-width:thin;scrollbar-color:var(--muted-foreground) transparent}@supports (color:color-mix(in lab,red,red)){.fuxso-scroll{scrollbar-color:color-mix(in srgb,var(--muted-foreground) 30%,transparent) transparent}}@media (prefers-reduced-motion:reduce){*,:after,:before{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-pan-x{syntax:"*";inherits:false}@property --tw-pan-y{syntax:"*";inherits:false}@property --tw-pinch-zoom{syntax:"*";inherits:false}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(1turn)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}tr.row-loading>td[data-v-f7880f7d]{position:relative}tr.row-loading>td[data-v-f7880f7d]:after{content:"";pointer-events:none;background-color:var(--background);position:absolute;inset:0}@supports (color:color-mix(in lab,red,red)){tr.row-loading>td[data-v-f7880f7d]:after{background-color:color-mix(in srgb,var(--background) 20%,transparent)}}tr.row-loading>td[data-v-f7880f7d]:after{-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);background-image:linear-gradient(90deg,transparent,var(--foreground),transparent)}@supports (color:color-mix(in lab,red,red)){tr.row-loading>td[data-v-f7880f7d]:after{background-image:linear-gradient(90deg,transparent,color-mix(in srgb,var(--foreground) 8%,transparent),transparent)}}tr.row-loading>td[data-v-f7880f7d]:after{background-repeat:no-repeat;background-size:200% 100%;animation:1.6s linear infinite table-row-shimmer-f7880f7d}@keyframes table-row-shimmer-f7880f7d{0%{background-position:100% 0}to{background-position:-100% 0}}.tour-mask-enter-active[data-v-172e255d]{transition:opacity .32s cubic-bezier(.16,1,.3,1)}.tour-mask-leave-active[data-v-172e255d]{transition:opacity .24s cubic-bezier(.16,1,.3,1)}.tour-mask-enter-from[data-v-172e255d],.tour-mask-leave-to[data-v-172e255d]{opacity:0}.tour-mask-enter-active .tour-highlight[data-v-172e255d]{transition:opacity .32s cubic-bezier(.16,1,.3,1),transform .32s cubic-bezier(.16,1,.3,1)}.tour-mask-enter-from .tour-highlight[data-v-172e255d]{opacity:0;transform:scale(.92)}.tour-step-enter-active[data-v-172e255d]{transition:opacity .28s cubic-bezier(.16,1,.3,1),transform .28s cubic-bezier(.16,1,.3,1)}.tour-step-leave-active[data-v-172e255d]{transition:opacity .18s cubic-bezier(.16,1,.3,1),transform .18s cubic-bezier(.16,1,.3,1)}.tour-step-enter-from[data-v-172e255d]{opacity:0;transform:translateY(10px)scale(.96)}.tour-step-leave-to[data-v-172e255d]{opacity:0;transform:translateY(-8px)scale(.96)}:root{--liapi-accent:var(--color-primary,#6366f1)}#__nuxt,body,html{height:100%}body{-webkit-font-smoothing:antialiased;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif}.page-enter-active,.page-leave-active{transition:opacity .22s cubic-bezier(.4,0,.2,1),transform .22s cubic-bezier(.4,0,.2,1)}.page-enter-from{opacity:0;transform:translateY(8px)}.page-leave-to{opacity:0;transform:translateY(-6px)}.fade-enter-active,.fade-leave-active{transition:opacity .18s}.fade-enter-from,.fade-leave-to{opacity:0}*{scrollbar-width:thin}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-thumb{background:currentColor}@supports (color:color-mix(in lab,red,red)){::-webkit-scrollbar-thumb{background:color-mix(in oklab,currentColor 18%,transparent)}}::-webkit-scrollbar-thumb{border-radius:999px}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1} diff --git a/server/adminui/_nuxt/error-404.Bb87HomL.css b/server/adminui/_nuxt/error-404.Bb87HomL.css new file mode 100644 index 0000000..fbc7270 --- /dev/null +++ b/server/adminui/_nuxt/error-404.Bb87HomL.css @@ -0,0 +1 @@ +.grid[data-v-b8cc6c10]{display:grid}.mb-2[data-v-b8cc6c10]{margin-bottom:.5rem}.mb-4[data-v-b8cc6c10]{margin-bottom:1rem}.max-w-520px[data-v-b8cc6c10]{max-width:520px}.min-h-screen[data-v-b8cc6c10]{min-height:100vh}.w-full[data-v-b8cc6c10]{width:100%}.flex[data-v-b8cc6c10]{display:flex}.place-content-center[data-v-b8cc6c10]{place-content:center}.items-center[data-v-b8cc6c10]{align-items:center}.justify-center[data-v-b8cc6c10]{justify-content:center}.overflow-hidden[data-v-b8cc6c10]{overflow:hidden}.bg-white[data-v-b8cc6c10]{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.px-2[data-v-b8cc6c10]{padding-left:.5rem;padding-right:.5rem}.text-center[data-v-b8cc6c10]{text-align:center}.text-\[80px\][data-v-b8cc6c10]{font-size:80px}.text-2xl[data-v-b8cc6c10]{font-size:1.5rem;line-height:2rem}.text-sm[data-v-b8cc6c10]{font-size:.875rem;line-height:1.25rem}.text-\[\#020420\][data-v-b8cc6c10]{--un-text-opacity:1;color:rgb(2 4 32/var(--un-text-opacity))}.text-\[\#64748B\][data-v-b8cc6c10]{--un-text-opacity:1;color:rgb(100 116 139/var(--un-text-opacity))}.hover\:text-\[\#00DC82\][data-v-b8cc6c10]:hover{--un-text-opacity:1;color:rgb(0 220 130/var(--un-text-opacity))}.font-medium[data-v-b8cc6c10]{font-weight:500}.font-semibold[data-v-b8cc6c10]{font-weight:600}.leading-none[data-v-b8cc6c10]{line-height:1}.tracking-wide[data-v-b8cc6c10]{letter-spacing:.025em}.font-sans[data-v-b8cc6c10]{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.tabular-nums[data-v-b8cc6c10]{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal) var(--un-slashed-zero) var(--un-numeric-figure) var(--un-numeric-spacing) var(--un-numeric-fraction)}.underline[data-v-b8cc6c10]{text-decoration-line:underline}.underline-offset-3[data-v-b8cc6c10]{text-underline-offset:3px}.antialiased[data-v-b8cc6c10]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){.dark\:bg-\[\#020420\][data-v-b8cc6c10]{--un-bg-opacity:1;background-color:rgb(2 4 32/var(--un-bg-opacity))}.dark\:text-white[data-v-b8cc6c10]{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}}@media (width>=640px){.sm\:text-\[110px\][data-v-b8cc6c10]{font-size:110px}.sm\:text-3xl[data-v-b8cc6c10]{font-size:1.875rem;line-height:2.25rem}} diff --git a/server/adminui/_nuxt/error-500.Bwd7zAaE.css b/server/adminui/_nuxt/error-500.Bwd7zAaE.css new file mode 100644 index 0000000..1f3d214 --- /dev/null +++ b/server/adminui/_nuxt/error-500.Bwd7zAaE.css @@ -0,0 +1 @@ +.grid[data-v-f91406c7]{display:grid}.mb-2[data-v-f91406c7]{margin-bottom:.5rem}.mb-4[data-v-f91406c7]{margin-bottom:1rem}.max-w-520px[data-v-f91406c7]{max-width:520px}.min-h-screen[data-v-f91406c7]{min-height:100vh}.place-content-center[data-v-f91406c7]{place-content:center}.overflow-hidden[data-v-f91406c7]{overflow:hidden}.bg-white[data-v-f91406c7]{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.px-2[data-v-f91406c7]{padding-left:.5rem;padding-right:.5rem}.text-center[data-v-f91406c7]{text-align:center}.text-\[80px\][data-v-f91406c7]{font-size:80px}.text-2xl[data-v-f91406c7]{font-size:1.5rem;line-height:2rem}.text-\[\#020420\][data-v-f91406c7]{--un-text-opacity:1;color:rgb(2 4 32/var(--un-text-opacity))}.text-\[\#64748B\][data-v-f91406c7]{--un-text-opacity:1;color:rgb(100 116 139/var(--un-text-opacity))}.font-semibold[data-v-f91406c7]{font-weight:600}.leading-none[data-v-f91406c7]{line-height:1}.tracking-wide[data-v-f91406c7]{letter-spacing:.025em}.font-sans[data-v-f91406c7]{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.tabular-nums[data-v-f91406c7]{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal) var(--un-slashed-zero) var(--un-numeric-figure) var(--un-numeric-spacing) var(--un-numeric-fraction)}.antialiased[data-v-f91406c7]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){.dark\:bg-\[\#020420\][data-v-f91406c7]{--un-bg-opacity:1;background-color:rgb(2 4 32/var(--un-bg-opacity))}.dark\:text-white[data-v-f91406c7]{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}}@media (width>=640px){.sm\:text-\[110px\][data-v-f91406c7]{font-size:110px}.sm\:text-3xl[data-v-f91406c7]{font-size:1.875rem;line-height:2.25rem}} diff --git a/server/adminui/_nuxt/zZGEHylc.js b/server/adminui/_nuxt/zZGEHylc.js new file mode 100644 index 0000000..489c9a0 --- /dev/null +++ b/server/adminui/_nuxt/zZGEHylc.js @@ -0,0 +1 @@ +function e(e){let t=Number(e||0);return t>=1e9?(t/1e9).toFixed(2)+`B`:t>=1e6?(t/1e6).toFixed(2)+`M`:t>=1e3?(t/1e3).toFixed(2)+`K`:String(t)}function t(e){return Number(e||0).toFixed(4)}function n(e){return e?e.length>=19?e.slice(11,19):e:`-`}function r(e){return e>=200&&e<300?`success`:e>=400&&e<500?`warning`:`danger`}export{r as i,e as n,n as r,t}; \ No newline at end of file diff --git a/server/adminui/config/index.html b/server/adminui/config/index.html new file mode 100644 index 0000000..2d3170b --- /dev/null +++ b/server/adminui/config/index.html @@ -0,0 +1 @@ +Liapi Admin
\ No newline at end of file diff --git a/server/adminui/debug/index.html b/server/adminui/debug/index.html new file mode 100644 index 0000000..daf3aeb --- /dev/null +++ b/server/adminui/debug/index.html @@ -0,0 +1 @@ +Liapi Admin
\ No newline at end of file diff --git a/server/adminui/devices/index.html b/server/adminui/devices/index.html new file mode 100644 index 0000000..daf3aeb --- /dev/null +++ b/server/adminui/devices/index.html @@ -0,0 +1 @@ +Liapi Admin
\ No newline at end of file diff --git a/server/adminui/health/index.html b/server/adminui/health/index.html new file mode 100644 index 0000000..607fce7 --- /dev/null +++ b/server/adminui/health/index.html @@ -0,0 +1 @@ +Liapi Admin
\ No newline at end of file diff --git a/server/adminui/index.html b/server/adminui/index.html index e074a8b..14870e3 100644 --- a/server/adminui/index.html +++ b/server/adminui/index.html @@ -1,942 +1 @@ - - - - - -Liapi Admin - - - -
-

Liapi Admin

- - -
-
- -
-
-

概览

-
-
-
- - - - - - - - - - - - - - - - - -
-
- - - \ No newline at end of file +Liapi Admin
\ No newline at end of file diff --git a/server/adminui/logs/index.html b/server/adminui/logs/index.html new file mode 100644 index 0000000..607fce7 --- /dev/null +++ b/server/adminui/logs/index.html @@ -0,0 +1 @@ +Liapi Admin
\ No newline at end of file diff --git a/server/adminui/stats/index.html b/server/adminui/stats/index.html new file mode 100644 index 0000000..607fce7 --- /dev/null +++ b/server/adminui/stats/index.html @@ -0,0 +1 @@ +Liapi Admin
\ No newline at end of file diff --git a/server/adminui/tokens/index.html b/server/adminui/tokens/index.html new file mode 100644 index 0000000..3a79b70 --- /dev/null +++ b/server/adminui/tokens/index.html @@ -0,0 +1 @@ +Liapi Admin
\ No newline at end of file diff --git a/server/adminui/upstreams/index.html b/server/adminui/upstreams/index.html new file mode 100644 index 0000000..3a79b70 --- /dev/null +++ b/server/adminui/upstreams/index.html @@ -0,0 +1 @@ +Liapi Admin
\ No newline at end of file diff --git a/server/adminui_test.go b/server/adminui_test.go new file mode 100644 index 0000000..8d91dfe --- /dev/null +++ b/server/adminui_test.go @@ -0,0 +1,66 @@ +package server + +import ( + "net/http" + "strings" + "testing" +) + +// The admin UI is a Nuxt-generated static SPA embedded via go:embed. These +// tests pin the serving contract: / → index.html, /_nuxt/* → hashed assets, +// and any other GET path → index.html (client-side router fallback). +func TestAdminUIServesSPA(t *testing.T) { + srv, _ := newTestServer(t, nil) + + t.Run("root serves index.html", func(t *testing.T) { + rec := serve(srv, newRequest("GET", "/", "", "")) + if rec.Code != http.StatusOK { + t.Fatalf("status = %d, want 200", rec.Code) + } + if ct := rec.Header().Get("Content-Type"); !strings.Contains(ct, "text/html") { + t.Fatalf("content-type = %q, want text/html", ct) + } + if !strings.Contains(rec.Body.String(), "Liapi") { + t.Fatalf("index.html body missing expected marker") + } + }) + + t.Run("client route falls back to index.html", func(t *testing.T) { + rec := serve(srv, newRequest("GET", "/upstreams", "", "")) + if rec.Code != http.StatusOK { + t.Fatalf("status = %d, want 200", rec.Code) + } + if !strings.Contains(rec.Header().Get("Content-Type"), "text/html") { + t.Fatalf("content-type = %q, want text/html", rec.Header().Get("Content-Type")) + } + }) + + t.Run("admin redirects to root", func(t *testing.T) { + rec := serve(srv, newRequest("GET", "/admin", "", "")) + if rec.Code != http.StatusMovedPermanently { + t.Fatalf("status = %d, want 301", rec.Code) + } + }) + + t.Run("admin api still requires auth", func(t *testing.T) { + rec := serve(srv, newRequest("GET", "/admin/api/overview", "", "")) + if rec.Code != http.StatusUnauthorized { + t.Fatalf("status = %d, want 401", rec.Code) + } + }) +} + +func TestContentTypeFor(t *testing.T) { + cases := map[string]string{ + "index.html": "text/html; charset=utf-8", + "_nuxt/entry.abc.js": "text/javascript; charset=utf-8", + "_nuxt/entry.abc.css": "text/css; charset=utf-8", + "favicon.ico": "image/x-icon", + "logo.svg": "image/svg+xml", + } + for in, want := range cases { + if got := contentTypeFor(in); got != want { + t.Errorf("contentTypeFor(%q) = %q, want %q", in, got, want) + } + } +} diff --git a/server/handler_admin.go b/server/handler_admin.go index dfe55dd..446e4c9 100644 --- a/server/handler_admin.go +++ b/server/handler_admin.go @@ -6,6 +6,7 @@ import ( "fmt" "io" "net/http" + pathpkg "path" "strconv" "strings" "time" @@ -17,6 +18,20 @@ import ( ) func (s *Server) adminUI(w http.ResponseWriter, r *http.Request) { + path := strings.TrimPrefix(r.URL.Path, "/") + if path == "" { + path = "index.html" + } + + // Serve the exact asset when it exists in the embedded FS. + if data, err := ui.ReadFile("adminui/" + path); err == nil { + writeEmbedded(w, path, data) + return + } + + // SPA fallback: unknown paths are client-side routes → index.html. + // (Static asset paths like /_nuxt/*.js should never reach here, but if a + // hashed asset is missing, falling back to HTML keeps the app booting.) data, err := ui.ReadFile("adminui/index.html") if err != nil { http.Error(w, "admin ui not embedded", http.StatusInternalServerError) @@ -27,6 +42,51 @@ func (s *Server) adminUI(w http.ResponseWriter, r *http.Request) { _, _ = w.Write(data) } +// writeEmbedded serves an embedded asset with an appropriate content type and +// aggressive caching for immutable hashed assets under /_nuxt/. +func writeEmbedded(w http.ResponseWriter, path string, data []byte) { + switch { + case strings.HasPrefix(path, "_nuxt/"): + // Hashed filenames — safe to cache forever. + w.Header().Set("Cache-Control", "public, max-age=31536000, immutable") + default: + w.Header().Set("Cache-Control", "no-store") + } + w.Header().Set("Content-Type", contentTypeFor(path)) + _, _ = w.Write(data) +} + +// contentTypeFor maps a filename extension to a MIME type for the handful of +// asset kinds produced by the Nuxt build. +func contentTypeFor(path string) string { + switch strings.ToLower(pathpkg.Ext(path)) { + case ".html": + return "text/html; charset=utf-8" + case ".js", ".mjs": + return "text/javascript; charset=utf-8" + case ".css": + return "text/css; charset=utf-8" + case ".json": + return "application/json; charset=utf-8" + case ".svg": + return "image/svg+xml" + case ".png": + return "image/png" + case ".jpg", ".jpeg": + return "image/jpeg" + case ".ico": + return "image/x-icon" + case ".woff": + return "font/woff" + case ".woff2": + return "font/woff2" + case ".map": + return "application/json; charset=utf-8" + default: + return "application/octet-stream" + } +} + func (s *Server) adminOverview(w http.ResponseWriter, r *http.Request) { snap := s.totals.Snapshot() cfg := s.holder.Get() diff --git a/server/server.go b/server/server.go index 16f385b..0b25e36 100644 --- a/server/server.go +++ b/server/server.go @@ -16,7 +16,7 @@ import ( "liapi/stats" ) -//go:embed adminui/index.html +//go:embed all:adminui var ui embed.FS type Server struct { @@ -128,18 +128,18 @@ func (s *Server) Handler() http.Handler { // Observability (metrics token OR admin token) mux.HandleFunc("GET /metrics", s.handleMetrics) - // Admin UI at / (primary); /admin kept as redirect for old bookmarks. + // Admin UI: a Nuxt-generated static SPA embedded in the binary. + // / → index.html + // /_nuxt/ → hashed JS/CSS from the build + // / → index.html (client-side router handles it) + // /admin, /admin/ → 301 to / + // The moar-specific /admin/api/* and /v1/* patterns below take precedence. mux.HandleFunc("GET /{$}", s.adminUI) mux.HandleFunc("GET /admin", func(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, "/", http.StatusMovedPermanently) }) mux.HandleFunc("GET /admin/", func(w http.ResponseWriter, r *http.Request) { - // Only exact /admin/ (no API path) → redirect; API falls through below. - if r.URL.Path == "/admin/" { - http.Redirect(w, r, "/", http.StatusMovedPermanently) - return - } - s.adminUI(w, r) + http.Redirect(w, r, "/", http.StatusMovedPermanently) }) mux.HandleFunc("GET /admin/api/overview", s.requireAdmin(s.adminOverview)) mux.HandleFunc("GET /admin/api/upstreams", s.requireAdmin(s.adminListUpstreams)) @@ -168,6 +168,11 @@ func (s *Server) Handler() http.Handler { mux.HandleFunc("GET /admin/api/stats/export", s.requireAdmin(s.adminStatsExport)) mux.HandleFunc("GET /admin/api/stats/devices", s.requireAdmin(s.adminStatsDevices)) + // SPA catch-all: static assets + any client-side route fall back to the + // embedded index.html. Registered last; every more-specific pattern above + // (including all /v1/*, /metrics and /admin/api/*) wins over this. + mux.HandleFunc("GET /", s.adminUI) + // Request-ID middleware: echo X-Request-ID (generate when absent) on // every response so clients/logs/upstream headers correlate. return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { diff --git a/web/app/app.vue b/web/app/app.vue new file mode 100644 index 0000000..19e4fe0 --- /dev/null +++ b/web/app/app.vue @@ -0,0 +1,7 @@ + diff --git a/web/app/assets/css/main.css b/web/app/assets/css/main.css new file mode 100644 index 0000000..0b57224 --- /dev/null +++ b/web/app/assets/css/main.css @@ -0,0 +1,72 @@ +/* + * Liapi admin stylesheet. + * fuxsto-design compiles and ships all of its own component styles, so the + * consumer only needs plain Tailwind v4 + the library stylesheet. + */ +@import 'tailwindcss'; +@import 'fuxsto-design/styles'; + +/* + * Tailwind v4 auto-detects sources relative to this file. Explicitly include + * the Nuxt source tree so utility classes used in pages/components are kept. + */ +@source '../../app'; +@source '../../components'; +@source '../../layouts'; + +/* ---- liapi brand tokens (zinc monochrome, NewAPI-ish accent) ---- */ +:root { + --liapi-accent: var(--color-primary, #6366f1); +} + +html, +body, +#__nuxt { + height: 100%; +} + +body { + margin: 0; + font-family: + -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'PingFang SC', + 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif; + -webkit-font-smoothing: antialiased; +} + +/* Route + list transition helpers (smooth, GPU-friendly). */ +.page-enter-active, +.page-leave-active { + transition: + opacity 0.22s cubic-bezier(0.4, 0, 0.2, 1), + transform 0.22s cubic-bezier(0.4, 0, 0.2, 1); +} +.page-enter-from { + opacity: 0; + transform: translateY(8px); +} +.page-leave-to { + opacity: 0; + transform: translateY(-6px); +} + +.fade-enter-active, +.fade-leave-active { + transition: opacity 0.18s ease; +} +.fade-enter-from, +.fade-leave-to { + opacity: 0; +} + +/* Slim scrollbars to match the admin shell. */ +* { + scrollbar-width: thin; +} +*::-webkit-scrollbar { + width: 8px; + height: 8px; +} +*::-webkit-scrollbar-thumb { + background: color-mix(in oklab, currentColor 18%, transparent); + border-radius: 999px; +} diff --git a/web/app/components/DialogPanel.vue b/web/app/components/DialogPanel.vue new file mode 100644 index 0000000..78c963f --- /dev/null +++ b/web/app/components/DialogPanel.vue @@ -0,0 +1,31 @@ + + + diff --git a/web/app/components/Field.vue b/web/app/components/Field.vue new file mode 100644 index 0000000..55fac8a --- /dev/null +++ b/web/app/components/Field.vue @@ -0,0 +1,12 @@ + + + diff --git a/web/app/components/StatTile.vue b/web/app/components/StatTile.vue new file mode 100644 index 0000000..6594262 --- /dev/null +++ b/web/app/components/StatTile.vue @@ -0,0 +1,10 @@ + + + diff --git a/web/app/composables/useApi.ts b/web/app/composables/useApi.ts new file mode 100644 index 0000000..e501c94 --- /dev/null +++ b/web/app/composables/useApi.ts @@ -0,0 +1,86 @@ +import type { ApiError } from '~/types/api' + +const TOKEN_KEY = 'liapi_admin_token' + +export const useAdminToken = () => + useState('admin-token', () => '') + +export function useApi() { + const token = useAdminToken() + + const apiBase = '/admin/api' + + function loadToken() { + if (import.meta.client && !token.value) { + token.value = localStorage.getItem(TOKEN_KEY) || '' + } + } + + function setToken(value: string) { + token.value = value.trim() + if (import.meta.client) { + if (token.value) localStorage.setItem(TOKEN_KEY, token.value) + else localStorage.removeItem(TOKEN_KEY) + } + } + + function clearToken() { + setToken('') + } + + /** Raw fetch that attaches the admin bearer token. */ + async function raw(path: string, opts: RequestInit = {}): Promise { + loadToken() + const headers = new Headers(opts.headers || {}) + if (!headers.has('Content-Type') && opts.body) { + headers.set('Content-Type', 'application/json') + } + if (token.value) headers.set('Authorization', `Bearer ${token.value}`) + return fetch(apiBase + path, { ...opts, headers }) + } + + async function request(path: string, opts: RequestInit = {}): Promise { + let res: Response + try { + res = await raw(path, opts) + } catch (e) { + throw new Error('网络错误: ' + (e as Error).message) + } + const text = await res.text() + let data: any = {} + if (text) { + try { + data = JSON.parse(text) + } catch { + data = { raw: text } + } + } + if (res.status === 401) { + const err = new Error('unauthorized') as Error & { unauthorized?: boolean } + err.unauthorized = true + throw err + } + if (!res.ok) { + const apiErr = data as ApiError + const msg = + apiErr.error?.message || text || 'HTTP ' + res.status + throw new Error(msg) + } + return data as T + } + + /** Download a file with auth applied (stats/config export). */ + async function download(path: string, filename: string): Promise { + const res = await raw(path) + if (!res.ok) throw new Error('HTTP ' + res.status) + const blob = await res.blob() + const url = URL.createObjectURL(blob) + const a = document.createElement('a') + a.href = url + a.download = filename + a.click() + URL.revokeObjectURL(url) + } + + return { token, loadToken, setToken, clearToken, request, download } +} diff --git a/web/app/composables/useUi.ts b/web/app/composables/useUi.ts new file mode 100644 index 0000000..dae53ef --- /dev/null +++ b/web/app/composables/useUi.ts @@ -0,0 +1,43 @@ +import { Message, Dialog } from 'fuxsto-design' + +/** Thin wrappers so pages get consistent feedback + a promise-based confirm. */ +export function useUi() { + const toast = { + success: (m: string) => Message.success(m), + error: (m: string) => Message.error(m), + warning: (m: string) => Message.warning(m), + info: (m: string) => Message.info(m), + } + + function confirm( + title: string, + description: string, + opts: { danger?: boolean; confirmText?: string } = {}, + ): Promise { + return new Promise((resolve) => { + Dialog.confirm({ + title, + description, + danger: opts.danger, + confirmText: opts.confirmText || '确认', + cancelText: '取消', + onConfirm: () => resolve(true), + onCancel: () => resolve(false), + onClose: () => resolve(false), + }) + }) + } + + /** Handle API errors, auto-prompting for the admin token on 401. */ + function handleError(e: unknown, setToken: (v: string) => void) { + const err = e as Error & { unauthorized?: boolean } + if (err.unauthorized) { + const t = window.prompt('请输入 admin token') + if (t) setToken(t) + return + } + toast.error(err.message || String(e)) + } + + return { toast, confirm, handleError } +} diff --git a/web/app/layouts/default.vue b/web/app/layouts/default.vue new file mode 100644 index 0000000..d95fa19 --- /dev/null +++ b/web/app/layouts/default.vue @@ -0,0 +1,177 @@ + + + diff --git a/web/app/pages/config.vue b/web/app/pages/config.vue new file mode 100644 index 0000000..477a02b --- /dev/null +++ b/web/app/pages/config.vue @@ -0,0 +1,124 @@ + + +