pac-proxy-cli 0.1.7 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.env CHANGED
@@ -1,3 +1 @@
1
- # 远程代理服务器地址(用于登录、PAC 同步等)
2
- # 面板通过 /api/config 读取此配置,前端不展示该地址
3
- PROXY_SERVER_URL=http://ah.lonae.com:3890
1
+ REMOTE_SERVER_URL=http://proxy.ah.lonae.com
package/README.md CHANGED
@@ -1,103 +1,111 @@
1
- # PAC Proxy CLI
1
+ # pac-proxy-cli
2
2
 
3
- 本机 HTTP 代理 + Web 管理面板。可搭配本地 SOCKS5 使用,或连接远程代理服务器;支持 PAC 规则、系统代理一键设置与流量查看。
3
+ 本机运行的 PAC / 全局代理 / 抓包 工具,提供 Web 界面与本地代理服务。支持设置系统代理、PAC 规则、HTTPS 抓包和查看流量记录。
4
4
 
5
- ---
5
+ ## 功能特性
6
6
 
7
- ## 安装
7
+ - **多种代理模式**:全局代理、PAC 代理、抓包代理,一键切换。
8
+ - **PAC 规则**:按域名/URL 规则匹配,选择「代理」或「直连」,支持优先级
9
+ - **上游代理**:支持 SOCKS5 / HTTP 上游,本地将 SOCKS5 转为 HTTP 代理并按规则转发
10
+ - **流量记录**:查看经本机代理的请求;抓包模式下可查看解密后的请求/响应、搜索与筛选
11
+ - **抓包代理 (MITM)**:HTTPS 解密、自动生成 CA 证书供下载安装,便于本地调试与分析
12
+ - **本地 / 远程模式**:本地模式配置仅存本机;远程模式需登录,PAC 规则可同步云端
8
13
 
9
- ```bash
10
- npm install -g pac-proxy-cli
11
- ```
14
+ ## 环境要求
15
+
16
+ - **Node.js** >= 18
17
+ - 系统代理自动设置支持:**macOS**、**Windows**、**Linux(GNOME,gsettings)**
12
18
 
13
- 或使用 npx 直接运行(不全局安装):
19
+ ## 启动
20
+
21
+ 确保本机已安装 Node.js 18 及以上,在终端执行:
14
22
 
15
23
  ```bash
16
- npx pac-proxy-cli start -s 127.0.0.1:1080
24
+ npx pac-proxy serve --port 5174
17
25
  ```
18
26
 
19
- ---
20
-
21
- ## 使用方式
27
+ 不指定 `--port` 时默认使用 5174。启动后会输出控制台地址,例如:
22
28
 
23
- ### 方式一:上游为本地 SOCKS5
29
+ ```
30
+ 控制台已启动: http://127.0.0.1:5174
31
+ ```
24
32
 
25
- 本机已有 SOCKS5 代理(例如 `ssh -D 1080 user@server`)时,让本工具作为 HTTP 代理并打开管理面板:
33
+ 在浏览器中打开该地址即可使用。如需长期使用,也可全局安装后直接运行:
26
34
 
27
35
  ```bash
28
- pac-proxy start -s 127.0.0.1:1080
36
+ npm install -g pac-proxy-cli
37
+ pac-proxy serve --port 5174
29
38
  ```
30
39
 
31
- - HTTP 代理默认:`127.0.0.1:3893`
32
- - 面板默认:`http://127.0.0.1:3892`(启动后会自动打开浏览器)
33
-
34
- ### 方式二:上游为远程代理服务器
40
+ ## 使用说明
35
41
 
36
- 若你有可用的远程代理服务器地址:
42
+ ### 1. 选择运行模式
37
43
 
38
- **命令行指定**
39
-
40
- ```bash
41
- pac-proxy start --server http://你的服务器地址:端口
42
- ```
44
+ 首次访问会进入「选择运行模式」:
43
45
 
44
- 此时流量会经该远程服务器转发;是否允许走代理由服务器端校验(例如仅特定账户可用)。
46
+ - **本地模式**:无需登录,所有配置保存在本机(默认目录 `~/.pac-proxy`)
47
+ - **远程模式**:需注册/登录,PAC 规则与云端同步(依赖远程服务地址配置)
45
48
 
46
- ---
49
+ 选择后进入控制台,之后可在顶部「切换模式」中更改。
47
50
 
48
- ## Web 面板功能
51
+ ### 2. 代理设置
49
52
 
50
- ### 模式选择
53
+ **代理设置** 页可进行:
51
54
 
52
- - **本地模式**:PAC 规则只保存在本机,无需登录。
53
- - **云端模式**:登录后可将 PAC 规则同步到远程服务器,并可从服务器拉取规则到本机。
55
+ | 操作 | 说明 |
56
+ |------------|------|
57
+ | **全局代理** | 系统代理指向本机代理端口,所有 HTTP/HTTPS 经本地转发(可配置上游) |
58
+ | **PAC 代理** | 系统使用自动代理配置(PAC),由本机提供 PAC 脚本,按规则决定代理或直连 |
59
+ | **抓包代理** | 与全局类似,但流量经 MITM 解密,可查看请求/响应内容;需安装 CA 证书 |
60
+ | **清除代理设置** | 关闭系统代理并停止本地代理服务 |
54
61
 
55
- ### 首页:系统代理
62
+ - **上游代理地址**:如 `socks5://127.0.0.1:1080` 或 `http://proxy.example.com:8080`,留空则直连
63
+ - **HTTP/HTTPS 代理端口**:本地代理监听端口,默认 5175 / 5176
64
+ - 保存后若开启「自动设置系统代理」,会尝试写入系统代理(支持 macOS / Windows / Linux GNOME)
56
65
 
57
- - **应用系统代理(PAC)**:把系统代理设为当前面板提供的 PAC 地址(多数系统可自动配置)。
58
- - **清除系统代理**:取消系统代理设置。
66
+ 若自动设置失败,页面会提示错误原因,可改为手动在系统或浏览器中设置代理为 `127.0.0.1:端口`。
59
67
 
60
- PAC 决定「哪些网站走代理、哪些直连」,规则在「PAC 规则」页管理。
68
+ ### 3. PAC 规则
61
69
 
62
- ### PAC 规则
70
+ **PAC 规则** 页管理「代理 / 直连」规则:
63
71
 
64
- - 新增、编辑、删除规则,按类型(按 Host / 按 URL / 默认)和顺序匹配。
65
- - **本地模式**:规则仅存本机,立即生效。
66
- - **云端模式**:可「从服务器拉取」、编辑后「保存到服务器」;拉取后在本机生效,需在首页重新「应用系统代理」以确保系统使用最新规则。
67
- - **复制 / 导出**:仅导出「走代理」且启用的规则(每行一个匹配模式),可粘贴或导入到 Shadowsocks 等客户端的自定义规则中使用。
72
+ - 每条规则包含:匹配模式(如 `*.google.com`)、动作(代理 / 直连)、优先级
73
+ - 按优先级从高到低匹配,命中则按该条动作执行
74
+ - 本地模式下规则保存在本机;远程模式下规则与云端同步
68
75
 
69
- ### 流量
76
+ ### 4. 流量记录
70
77
 
71
- 查看经本机代理的请求列表(方法、URL、状态码等元数据),便于排查或确认是否走代理。不记录 HTTPS 正文。
78
+ **流量记录** 页可查看经本机代理的请求:
72
79
 
73
- ---
80
+ - **非抓包模式**:列表展示时间、类型、方法、URL、动作(代理/直连),最多保留 500 条
81
+ - **抓包模式**:展示更详细列表,支持按 URL 搜索、按方法/状态码/类型筛选、排序与分页;点击「详情」可查看请求/响应头与 body(可复制 URL)
74
82
 
75
- ## 常用命令
83
+ ### 5. 抓包代理与 CA 证书
76
84
 
77
- | 命令 | 说明 |
78
- |------|------|
79
- | `pac-proxy start` | 启动 HTTP 代理 + 面板。未指定 `-s` 时上游为远程服务器:优先用 `--server`,否则用 `.env` 的 `PROXY_SERVER_URL`;都未配置则需加 `-s` 指定 SOCKS5 |
80
- | `pac-proxy start -s <host:port>` | 指定上游为本地 SOCKS5(如 `127.0.0.1:1080`) |
81
- | `pac-proxy start --server <url>` | 指定上游为远程代理服务器地址;未指定时兜底使用 `.env` 的 `PROXY_SERVER_URL` |
82
- | `pac-proxy panel` | 仅启动 Web 面板,不启动代理 |
85
+ 选择「抓包代理」并保存后:
83
86
 
84
- **可选参数(start):**
87
+ 1. 系统代理会指向本机抓包代理端口,所有流量经本地解密
88
+ 2. 首次产生 HTTPS 请求后,会在默认数据目录下生成根 CA
89
+ 3. 在代理设置页点击 **下载 CA 证书**,将证书安装到系统或浏览器「受信任的根证书」
90
+ 4. 安装后即可正常访问 HTTPS 站点,并在「流量记录」中查看解密后的请求/响应
85
91
 
86
- - `-p, --port <数字>`:HTTP 代理端口,默认 3893
87
- - `--panel-port <数字>`:面板端口,默认 3892
88
- - `--server <url>`:上游远程代理服务器地址;为空时使用 `.env` 的 `PROXY_SERVER_URL`
89
- - `--no-open`:启动时不自动打开浏览器
92
+ **注意**:CA 仅限本机抓包使用,请勿安装到他人设备或生产环境。
90
93
 
91
- ---
94
+ ## 系统代理支持说明
92
95
 
93
- ## 配置说明
96
+ | 平台 | 说明 |
97
+ |------|------|
98
+ | **macOS** | 通过 `networksetup` 设置;若遇权限问题,可配置 sudo 免密或手动在 系统设置 → 网络 → 代理 中设置 |
99
+ | **Windows** | 通过注册表写入;失败时可手动在 设置 → 网络和 Internet → 代理 中设置 |
100
+ | **Linux** | 仅支持 **GNOME**(`gsettings`);需在图形会话中运行。KDE / XFCE 等请手动在系统设置中配置代理 |
94
101
 
95
- - **PROXY_SERVER_URL**(在 `.env` 中):远程代理服务器地址。使用「方式二」且未传 `--server` 时以该值为上游;面板的登录、PAC 同步也会连到该地址。
96
- - 修改端口或服务器地址后,需重新启动 `pac-proxy start` 或 `pac-proxy panel`。
102
+ ## 环境变量
97
103
 
98
- ---
104
+ | 变量 | 说明 |
105
+ |------|------|
106
+ | `PAC_PROXY_HOME` | 数据与配置根目录,默认 `~/.pac-proxy` |
107
+ | `REMOTE_SERVER_URL` | 远程模式下的服务端地址(需在运行目录的 .env 或 .env.local 中配置,供登录与 PAC 规则同步) |
99
108
 
100
- ## 注意事项
109
+ ## 许可证
101
110
 
102
- - 设置系统代理时,部分环境可能需要管理员权限;若自动设置失败,请到系统设置中手动填写 PAC 地址(面板首页会显示)。
103
- - 使用远程服务器时,登录与代理权限由服务器端控制;本工具只负责转发请求与同步 PAC 规则。
111
+ MIT
package/bin/cli.js ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+
3
+ import '../lib/index.js';
@@ -0,0 +1 @@
1
+ .app-layout[data-v-e7869e57]{display:flex;flex-direction:column;min-height:100vh}.topbar[data-v-e7869e57]{display:flex;align-items:center;gap:1rem;padding:.75rem 1.5rem;background:#f1f5f9;border-bottom:1px solid var(--border)}.logo[data-v-e7869e57]{font-weight:700;font-size:1.1rem}.mode-tag[data-v-e7869e57]{padding:.2rem .5rem;border-radius:4px;font-size:.8rem}.mode-tag.local[data-v-e7869e57]{background:#dbeafe;color:#1d4ed8}.mode-tag.remote[data-v-e7869e57]{background:#e9d5ff;color:#6b21a8}.switch-mode[data-v-e7869e57]{font-size:.85rem;color:var(--text-secondary)}.switch-mode[data-v-e7869e57]:hover{color:var(--btn-primary)}.top-nav[data-v-e7869e57]{display:flex;gap:1rem;margin-left:auto}.top-nav a[data-v-e7869e57]{color:var(--text-secondary)}.top-nav a.router-link-active[data-v-e7869e57]{color:var(--btn-primary);font-weight:500}.top-right[data-v-e7869e57]{margin-left:auto;display:flex;align-items:center;gap:.75rem}.username[data-v-e7869e57]{font-size:.9rem;color:var(--text-secondary)}.logout-btn[data-v-e7869e57]{font-size:.85rem;color:var(--text-secondary);background:none;border:none;cursor:pointer;padding:.25rem 0}.logout-btn[data-v-e7869e57]:hover{color:var(--btn-primary)}.sidebar[data-v-e7869e57]{position:fixed;left:0;top:49px;bottom:0;width:200px;background:#fff;border-right:1px solid var(--border);display:flex;flex-direction:column;z-index:10}.side-nav[data-v-e7869e57]{display:flex;flex-direction:column;padding:1rem 0}.side-nav a[data-v-e7869e57]{color:var(--text-primary);padding:.6rem 1.25rem;font-size:.95rem;border-left:3px solid transparent}.side-nav a[data-v-e7869e57]:hover{background:#f1f5f9;color:var(--btn-primary)}.side-nav a.active[data-v-e7869e57]{background:#eff6ff;color:var(--btn-primary);border-left-color:var(--btn-primary)}.main[data-v-e7869e57]{margin-left:200px;margin-top:49px;padding:1.5rem;min-height:calc(100vh - 49px)}.main.main-standalone[data-v-e7869e57]{margin-left:0;margin-top:0;padding:0;min-height:100vh}.mode-select[data-v-b465f762]{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--bg-main);padding:2rem}.card[data-v-b465f762]{background:var(--bg-card);border-radius:12px;padding:2.5rem;max-width:480px;width:100%;box-shadow:0 1px 3px #00000014}.card h1[data-v-b465f762]{font-size:1.5rem;margin-bottom:.5rem}.desc[data-v-b465f762]{color:var(--text-secondary);font-size:.95rem;margin-bottom:1.5rem}.options[data-v-b465f762]{display:flex;flex-direction:column;gap:1rem}.option[data-v-b465f762]{padding:1.25rem 1.5rem;border:2px solid var(--border);border-radius:var(--radius);background:#fff;text-align:left;transition:border-color .2s,background .2s}.option[data-v-b465f762]:hover{border-color:var(--btn-primary);background:#f8fafc}.option .title[data-v-b465f762]{display:block;font-weight:600;margin-bottom:.25rem}.option .sub[data-v-b465f762]{font-size:.9rem;color:var(--text-secondary)}.auth-page[data-v-be60da76]{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:2rem}.card[data-v-be60da76]{background:var(--bg-card);border-radius:12px;padding:2rem;max-width:400px;width:100%;box-shadow:0 1px 3px #00000014}.card h1[data-v-be60da76]{font-size:1.5rem;margin-bottom:.5rem}.desc[data-v-be60da76]{color:var(--text-secondary);font-size:.9rem;margin-bottom:1.5rem}.form[data-v-be60da76]{display:flex;flex-direction:column;gap:1rem}.field label[data-v-be60da76]{display:block;font-size:.9rem;margin-bottom:.35rem;color:var(--text-secondary)}.field input[data-v-be60da76]{width:100%;padding:.6rem .75rem;border:1px solid var(--border);border-radius:var(--radius)}.error[data-v-be60da76]{color:#dc2626;font-size:.9rem}.btn.primary[data-v-be60da76]{background:var(--btn-primary);color:#fff;padding:.65rem 1rem;font-weight:500}.btn.primary[data-v-be60da76]:hover:not(:disabled){background:var(--btn-primary-hover)}.btn.primary[data-v-be60da76]:disabled{opacity:.6;cursor:not-allowed}.footer[data-v-be60da76]{margin-top:1rem;font-size:.9rem;color:var(--text-secondary)}.auth-page[data-v-a1c8458c]{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:2rem}.card[data-v-a1c8458c]{background:var(--bg-card);border-radius:12px;padding:2rem;max-width:400px;width:100%;box-shadow:0 1px 3px #00000014}.card h1[data-v-a1c8458c]{font-size:1.5rem;margin-bottom:.5rem}.desc[data-v-a1c8458c]{color:var(--text-secondary);font-size:.9rem;margin-bottom:1.5rem}.form[data-v-a1c8458c]{display:flex;flex-direction:column;gap:1rem}.field label[data-v-a1c8458c]{display:block;font-size:.9rem;margin-bottom:.35rem;color:var(--text-secondary)}.field input[data-v-a1c8458c]{width:100%;padding:.6rem .75rem;border:1px solid var(--border);border-radius:var(--radius)}.error[data-v-a1c8458c]{color:#dc2626;font-size:.9rem}.success[data-v-a1c8458c]{color:#16a34a;font-size:.9rem}.btn.primary[data-v-a1c8458c]{background:var(--btn-primary);color:#fff;padding:.65rem 1rem;font-weight:500}.btn.primary[data-v-a1c8458c]:hover:not(:disabled){background:var(--btn-primary-hover)}.btn.primary[data-v-a1c8458c]:disabled{opacity:.6;cursor:not-allowed}.footer[data-v-a1c8458c]{margin-top:1rem;font-size:.9rem;color:var(--text-secondary)}.proxy-settings h2[data-v-9e948823]{font-size:1.25rem;margin-bottom:1rem}.card[data-v-9e948823]{background:var(--bg-card);border-radius:var(--radius);padding:1.5rem;margin-bottom:1.5rem;box-shadow:0 1px 2px #0000000d}.card h3[data-v-9e948823]{font-size:1rem;margin-bottom:.35rem}.page-desc[data-v-9e948823],.desc[data-v-9e948823]{color:var(--text-secondary);font-size:.9rem;margin-bottom:1rem}.saved-tip[data-v-9e948823]{color:var(--switch-on);font-size:.85rem;margin-top:.5rem}.proxy-buttons[data-v-9e948823]{display:flex;flex-wrap:wrap;gap:.75rem;margin-bottom:.25rem}.proxy-btn[data-v-9e948823]{padding:.5rem 1rem;font-size:.9rem;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-card);cursor:pointer;transition:background .2s,border-color .2s}.proxy-btn[data-v-9e948823]:hover:not(:disabled){background:var(--bg);border-color:var(--btn-primary)}.proxy-btn.active[data-v-9e948823]{background:var(--btn-primary);border-color:var(--btn-primary);color:#fff}.proxy-btn.active[data-v-9e948823]:hover:not(:disabled){background:var(--btn-primary-hover);border-color:var(--btn-primary-hover);color:#fff}.proxy-btn.clear.active[data-v-9e948823]{background:var(--text-secondary);border-color:var(--text-secondary);color:#fff}.proxy-btn.clear.active[data-v-9e948823]:hover:not(:disabled){background:#64748b;border-color:#64748b;color:#fff}.proxy-btn[data-v-9e948823]:disabled{opacity:.6;cursor:not-allowed}.ca-download[data-v-9e948823]{margin-top:1rem;padding-top:1rem;border-top:1px solid var(--border)}.ca-label[data-v-9e948823]{display:block;font-size:.9rem;color:var(--text-secondary);margin-bottom:.5rem}.btn-ca[data-v-9e948823]{display:inline-block;padding:.4rem .8rem;font-size:.9rem;background:var(--btn-primary);color:#fff;border-radius:var(--radius);text-decoration:none;margin-bottom:.5rem}.btn-ca[data-v-9e948823]:hover{background:var(--btn-primary-hover);color:#fff}.ca-hint[data-v-9e948823]{font-size:.85rem;color:var(--text-secondary);margin:0}.toggle-row[data-v-9e948823]{display:flex;align-items:center;justify-content:space-between;margin-bottom:.75rem}.toggle-row .select-inline[data-v-9e948823]{min-width:140px;height:2.25rem;padding:.35rem 2rem .35rem .75rem;font-size:.9rem;border:1px solid var(--border);border-radius:var(--radius);background-color:#fff;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%2364748b' d='M6 8L1 3h10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .6rem center}.toggle-row .select-inline[data-v-9e948823]:focus{outline:none;border-color:var(--btn-primary)}.toggle[data-v-9e948823]{width:44px;height:24px;border-radius:12px;background:var(--switch-off);padding:2px;transition:background .2s}.toggle.on[data-v-9e948823]{background:var(--switch-on)}.toggle .knob[data-v-9e948823]{display:block;width:20px;height:20px;border-radius:50%;background:#fff;transform:translate(0);transition:transform .2s}.toggle.on .knob[data-v-9e948823]{transform:translate(20px)}.field[data-v-9e948823]{margin-bottom:1rem}.field label[data-v-9e948823]{display:block;font-size:.9rem;margin-bottom:.35rem;color:var(--text-secondary)}.field input[data-v-9e948823],.field select[data-v-9e948823]{width:100%;padding:.5rem .75rem;border:1px solid var(--border);border-radius:var(--radius)}.row[data-v-9e948823]{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.actions[data-v-9e948823]{margin-top:1rem}.btn.primary[data-v-9e948823]{background:var(--btn-primary);color:#fff;padding:.5rem 1rem;font-size:.9rem}.btn.primary[data-v-9e948823]:hover:not(:disabled){background:var(--btn-primary-hover)}.btn.primary[data-v-9e948823]:disabled{opacity:.6;cursor:not-allowed}.status-card .status-line[data-v-9e948823]{margin-bottom:.5rem}.status-on[data-v-9e948823]{color:var(--switch-on);font-weight:600}.status-off[data-v-9e948823]{color:var(--text-secondary)}.status-port[data-v-9e948823]{margin-left:.5rem;color:var(--text-secondary);font-size:.9rem}.hint[data-v-9e948823]{font-size:.9rem;color:var(--text-secondary);margin-top:.5rem}.hint strong[data-v-9e948823]{color:var(--text-primary)}.hint.error[data-v-9e948823]{color:#dc2626}.pac-rules h2[data-v-22317bbc]{font-size:1.25rem;margin-bottom:1rem}.page-desc[data-v-22317bbc]{color:var(--text-secondary);font-size:.9rem;margin-bottom:1rem}.card[data-v-22317bbc]{background:var(--bg-card);border-radius:var(--radius);padding:1.5rem;box-shadow:0 1px 2px #0000000d}.desc[data-v-22317bbc]{color:var(--text-secondary);font-size:.9rem;margin-bottom:1rem}.actions.top[data-v-22317bbc]{margin-bottom:1rem;display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.btn.primary[data-v-22317bbc]{background:var(--btn-primary);color:#fff;padding:.5rem 1rem;font-size:.9rem}.copy-tip[data-v-22317bbc]{font-size:.85rem;color:var(--btn-primary)}.btn.small[data-v-22317bbc]{padding:.25rem .5rem;font-size:.85rem;margin-right:.5rem}.btn.small.danger[data-v-22317bbc]{background:#fef2f2;color:#dc2626}.btn.small.danger[data-v-22317bbc]:hover{background:#fee2e2}.table[data-v-22317bbc]{width:100%;border-collapse:collapse}.table th[data-v-22317bbc],.table td[data-v-22317bbc]{padding:.6rem .75rem;text-align:left;border-bottom:1px solid var(--border)}.table th[data-v-22317bbc]{font-weight:600;color:var(--text-secondary);font-size:.9rem}.table .empty[data-v-22317bbc]{color:var(--text-secondary);text-align:center}.modal[data-v-22317bbc]{position:fixed;top:0;right:0;bottom:0;left:0;background:#0006;display:flex;align-items:center;justify-content:center;z-index:100}.modal-content[data-v-22317bbc]{background:var(--bg-card);border-radius:var(--radius);padding:1.5rem;min-width:360px}.modal-content h3[data-v-22317bbc],.modal-content .field[data-v-22317bbc]{margin-bottom:1rem}.modal-content .field label[data-v-22317bbc]{display:block;font-size:.9rem;margin-bottom:.35rem;color:var(--text-secondary)}.modal-content .field input[data-v-22317bbc],.modal-content .field select[data-v-22317bbc]{width:100%;min-width:0;box-sizing:border-box;padding:.5rem .75rem;min-height:2.5rem;border:1px solid var(--border);border-radius:var(--radius);font-size:.95rem}.modal-content .field select[data-v-22317bbc]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%2364748b' d='M6 8L1 3h10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .6rem center;padding-right:2rem}.modal-actions[data-v-22317bbc]{display:flex;gap:.75rem;justify-content:flex-end;margin-top:1rem}.btn[data-v-22317bbc]{padding:.5rem 1rem;background:#f1f5f9}.btn.primary[data-v-22317bbc]{background:var(--btn-primary);color:#fff}.traffic-page h2[data-v-1ee1603b]{font-size:1.25rem;margin-bottom:1rem}.page-desc[data-v-1ee1603b]{color:var(--text-secondary);font-size:.9rem;margin-bottom:1rem}.card[data-v-1ee1603b]{background:var(--bg-card);border-radius:var(--radius);padding:1.5rem;box-shadow:0 1px 2px #0000000d}.capture-card[data-v-1ee1603b]{padding:1rem 1.5rem}.capture-banner[data-v-1ee1603b]{background:#eff6ff;color:#1e40af;padding:.5rem .75rem;border-radius:var(--radius);font-size:.9rem;margin-bottom:1rem}.toolbar[data-v-1ee1603b]{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;margin-bottom:1rem}.toolbar .search-input[data-v-1ee1603b],.toolbar .filter-select[data-v-1ee1603b],.toolbar .status-input[data-v-1ee1603b],.toolbar .sort-order-btn[data-v-1ee1603b],.toolbar .btn[data-v-1ee1603b]{box-sizing:border-box;height:2.25rem;padding:0 .6rem;border:1px solid var(--border);border-radius:var(--radius);font-size:.9rem;line-height:1.3}.toolbar .search-input[data-v-1ee1603b]{min-width:160px}.toolbar .filter-select[data-v-1ee1603b]{background:#fff;cursor:pointer;min-width:6rem}.toolbar .status-input[data-v-1ee1603b]{width:72px}.toolbar .sort-order-btn[data-v-1ee1603b]{background:#f8fafc;cursor:pointer;width:2.25rem;padding:0}.toolbar .btn[data-v-1ee1603b]{background:#f1f5f9}.actions.top[data-v-1ee1603b]{margin-bottom:1rem}.btn[data-v-1ee1603b]{padding:.5rem 1rem;font-size:.9rem;background:#f1f5f9}.btn.small[data-v-1ee1603b]{padding:.35rem .75rem;font-size:.85rem}.table-wrap[data-v-1ee1603b]{overflow-x:auto}.table[data-v-1ee1603b]{width:100%;border-collapse:collapse}.table th[data-v-1ee1603b],.table td[data-v-1ee1603b]{padding:.5rem .75rem;text-align:left;border-bottom:1px solid var(--border)}.table th[data-v-1ee1603b]{font-weight:600;color:var(--text-secondary);font-size:.9rem}.table .empty[data-v-1ee1603b]{color:var(--text-secondary);text-align:center}.url-cell[data-v-1ee1603b]{max-width:320px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.action-proxy[data-v-1ee1603b]{color:var(--btn-primary)}.action-direct[data-v-1ee1603b]{color:var(--text-secondary)}.row-clickable[data-v-1ee1603b]{cursor:pointer}.row-clickable[data-v-1ee1603b]:hover{background:#f8fafc}.method-tag[data-v-1ee1603b]{font-size:.8rem;padding:.15rem .4rem;border-radius:4px;font-weight:500}.method-tag.GET[data-v-1ee1603b]{background:#dbeafe;color:#1d4ed8}.method-tag.POST[data-v-1ee1603b]{background:#d1fae5;color:#047857}.method-tag.PUT[data-v-1ee1603b]{background:#fef3c7;color:#b45309}.method-tag.DELETE[data-v-1ee1603b]{background:#fee2e2;color:#b91c1c}.method-tag.HEAD[data-v-1ee1603b],.method-tag.OPTIONS[data-v-1ee1603b]{background:#f1f5f9;color:#64748b}.status-tag[data-v-1ee1603b]{font-size:.85rem;padding:.15rem .4rem;border-radius:4px}.status-2xx[data-v-1ee1603b]{background:#d1fae5;color:#047857}.status-3xx[data-v-1ee1603b]{background:#e0e7ff;color:#3730a3}.status-4xx[data-v-1ee1603b]{background:#fee2e2;color:#b91c1c}.status-5xx[data-v-1ee1603b]{background:#fecaca;color:#991b1b}.btn-link[data-v-1ee1603b]{background:none;border:none;color:var(--btn-primary);cursor:pointer;font-size:.9rem;padding:0}.btn-link[data-v-1ee1603b]:hover{text-decoration:underline}.pagination[data-v-1ee1603b]{margin-top:1rem;display:flex;align-items:center;gap:.75rem}.pagination-info[data-v-1ee1603b]{font-size:.9rem;color:var(--text-secondary)}.drawer-mask[data-v-1ee1603b]{position:fixed;top:0;right:0;bottom:0;left:0;background:#0000004d;z-index:100}.drawer[data-v-1ee1603b]{position:fixed;top:0;right:0;width:min(560px,100vw);height:100vh;background:var(--bg-card);box-shadow:-2px 0 12px #00000026;z-index:101;display:flex;flex-direction:column;overflow:hidden}.drawer-header[data-v-1ee1603b]{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem;border-bottom:1px solid var(--border);flex-shrink:0}.drawer-title[data-v-1ee1603b]{font-size:1rem;font-weight:600}.drawer-close[data-v-1ee1603b]{width:2rem;height:2rem;border:none;background:none;font-size:1.5rem;line-height:1;cursor:pointer;color:var(--text-secondary)}.drawer-close[data-v-1ee1603b]:hover{color:#0f172a}.drawer-url-section[data-v-1ee1603b]{margin-bottom:1.25rem;padding-bottom:1rem;border-bottom:1px solid var(--border)}.drawer-url-head[data-v-1ee1603b]{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:.35rem}.drawer-method-tag[data-v-1ee1603b]{font-size:.8rem;font-weight:600;padding:.15rem .4rem;border-radius:4px;background:#e2e8f0;color:#475569}.btn-copy-url[data-v-1ee1603b]{padding:.35rem .6rem;font-size:.85rem;border:1px solid var(--border);border-radius:var(--radius);background:#f1f5f9;cursor:pointer;color:var(--text-primary)}.btn-copy-url[data-v-1ee1603b]:hover{background:#e2e8f0}.drawer-url[data-v-1ee1603b]{margin:0;padding:.5rem .6rem;background:#f8fafc;border-radius:var(--radius);font-size:.85rem;line-height:1.4;white-space:pre-wrap;word-break:break-all;max-height:5rem;overflow:auto;user-select:text;-webkit-user-select:text}.drawer-tabs[data-v-1ee1603b]{display:flex;gap:.25rem;padding:.5rem 1rem;border-bottom:1px solid var(--border);flex-shrink:0}.drawer-tabs button[data-v-1ee1603b]{padding:.4rem .75rem;font-size:.9rem;border:none;background:none;border-radius:var(--radius);cursor:pointer;color:var(--text-secondary)}.drawer-tabs button.active[data-v-1ee1603b]{background:var(--btn-primary);color:#fff}.drawer-body[data-v-1ee1603b]{flex:1;overflow:auto;padding:1rem 1.25rem}.detail-section[data-v-1ee1603b]{margin-bottom:1.25rem}.detail-section h4[data-v-1ee1603b]{font-size:.85rem;margin-bottom:.35rem;color:var(--text-secondary)}.headers-pre[data-v-1ee1603b],.body-pre[data-v-1ee1603b]{margin:0;padding:.75rem;background:#f8fafc;border-radius:var(--radius);font-size:.8rem;line-height:1.4;overflow-x:auto;white-space:pre-wrap;word-break:break-all;max-height:280px;overflow-y:auto}:root{--bg-sidebar: #1e293b;--bg-sidebar-hover: #334155;--bg-sidebar-active: #2563eb;--text-sidebar: #e2e8f0;--text-sidebar-muted: #94a3b8;--bg-main: #f8fafc;--bg-card: #ffffff;--text-primary: #0f172a;--text-secondary: #64748b;--border: #e2e8f0;--switch-on: #22c55e;--switch-off: #cbd5e1;--btn-primary: #2563eb;--btn-primary-hover: #1d4ed8;--radius: 8px;--font: "DM Sans", -apple-system, BlinkMacSystemFont, sans-serif}*{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--font);background:var(--bg-main);color:var(--text-primary);line-height:1.5;min-height:100vh}#app{min-height:100vh;display:flex;flex-direction:column}button{font-family:inherit;cursor:pointer;border:none;border-radius:var(--radius)}input,select{font-family:inherit;border-radius:var(--radius)}a{color:var(--btn-primary);text-decoration:none}a:hover{text-decoration:underline}
@@ -0,0 +1,27 @@
1
+ (function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))s(o);new MutationObserver(o=>{for(const r of o)if(r.type==="childList")for(const i of r.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&s(i)}).observe(document,{childList:!0,subtree:!0});function n(o){const r={};return o.integrity&&(r.integrity=o.integrity),o.referrerPolicy&&(r.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?r.credentials="include":o.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function s(o){if(o.ep)return;o.ep=!0;const r=n(o);fetch(o.href,r)}})();/**
2
+ * @vue/shared v3.5.29
3
+ * (c) 2018-present Yuxi (Evan) You and Vue contributors
4
+ * @license MIT
5
+ **/function ks(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const ie={},Ft=[],ot=()=>{},rr=()=>!1,Gn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),$s=e=>e.startsWith("onUpdate:"),_e=Object.assign,js=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Ii=Object.prototype.hasOwnProperty,te=(e,t)=>Ii.call(e,t),H=Array.isArray,Bt=e=>_n(e)==="[object Map]",Wn=e=>_n(e)==="[object Set]",ao=e=>_n(e)==="[object Date]",G=e=>typeof e=="function",ge=e=>typeof e=="string",rt=e=>typeof e=="symbol",se=e=>e!==null&&typeof e=="object",ir=e=>(se(e)||G(e))&&G(e.then)&&G(e.catch),lr=Object.prototype.toString,_n=e=>lr.call(e),Ni=e=>_n(e).slice(8,-1),ar=e=>_n(e)==="[object Object]",Vs=e=>ge(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,sn=ks(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),qn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Mi=/-\w/g,Fe=qn(e=>e.replace(Mi,t=>t.slice(1).toUpperCase())),Di=/\B([A-Z])/g,Ut=qn(e=>e.replace(Di,"-$1").toLowerCase()),Jn=qn(e=>e.charAt(0).toUpperCase()+e.slice(1)),ls=qn(e=>e?`on${Jn(e)}`:""),wt=(e,t)=>!Object.is(e,t),An=(e,...t)=>{for(let n=0;n<e.length;n++)e[n](...t)},cr=(e,t,n,s=!1)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},zn=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let co;const Qn=()=>co||(co=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Hs(e){if(H(e)){const t={};for(let n=0;n<e.length;n++){const s=e[n],o=ge(s)?$i(s):Hs(s);if(o)for(const r in o)t[r]=o[r]}return t}else if(ge(e)||se(e))return e}const Ui=/;(?![^(]*\))/g,Li=/:([^]+)/,ki=/\/\*[^]*?\*\//g;function $i(e){const t={};return e.replace(ki,"").split(Ui).forEach(n=>{if(n){const s=n.split(Li);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Ce(e){let t="";if(ge(e))t=e;else if(H(e))for(let n=0;n<e.length;n++){const s=Ce(e[n]);s&&(t+=s+" ")}else if(se(e))for(const n in e)e[n]&&(t+=n+" ");return t.trim()}const ji="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",Vi=ks(ji);function ur(e){return!!e||e===""}function Hi(e,t){if(e.length!==t.length)return!1;let n=!0;for(let s=0;n&&s<e.length;s++)n=bn(e[s],t[s]);return n}function bn(e,t){if(e===t)return!0;let n=ao(e),s=ao(t);if(n||s)return n&&s?e.getTime()===t.getTime():!1;if(n=rt(e),s=rt(t),n||s)return e===t;if(n=H(e),s=H(t),n||s)return n&&s?Hi(e,t):!1;if(n=se(e),s=se(t),n||s){if(!n||!s)return!1;const o=Object.keys(e).length,r=Object.keys(t).length;if(o!==r)return!1;for(const i in e){const l=e.hasOwnProperty(i),a=t.hasOwnProperty(i);if(l&&!a||!l&&a||!bn(e[i],t[i]))return!1}}return String(e)===String(t)}function Fi(e,t){return e.findIndex(n=>bn(n,t))}const fr=e=>!!(e&&e.__v_isRef===!0),J=e=>ge(e)?e:e==null?"":H(e)||se(e)&&(e.toString===lr||!G(e.toString))?fr(e)?J(e.value):JSON.stringify(e,dr,2):String(e),dr=(e,t)=>fr(t)?dr(e,t.value):Bt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,o],r)=>(n[as(s,r)+" =>"]=o,n),{})}:Wn(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>as(n))}:rt(t)?as(t):se(t)&&!H(t)&&!ar(t)?String(t):t,as=(e,t="")=>{var n;return rt(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/**
6
+ * @vue/reactivity v3.5.29
7
+ * (c) 2018-present Yuxi (Evan) You and Vue contributors
8
+ * @license MIT
9
+ **/let Ne;class Bi{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.__v_skip=!0,this.parent=Ne,!t&&Ne&&(this.index=(Ne.scopes||(Ne.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t<n;t++)this.scopes[t].pause();for(t=0,n=this.effects.length;t<n;t++)this.effects[t].pause()}}resume(){if(this._active&&this._isPaused){this._isPaused=!1;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t<n;t++)this.scopes[t].resume();for(t=0,n=this.effects.length;t<n;t++)this.effects[t].resume()}}run(t){if(this._active){const n=Ne;try{return Ne=this,t()}finally{Ne=n}}}on(){++this._on===1&&(this.prevScope=Ne,Ne=this)}off(){this._on>0&&--this._on===0&&(Ne=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n<s;n++)this.effects[n].stop();for(this.effects.length=0,n=0,s=this.cleanups.length;n<s;n++)this.cleanups[n]();if(this.cleanups.length=0,this.scopes){for(n=0,s=this.scopes.length;n<s;n++)this.scopes[n].stop(!0);this.scopes.length=0}if(!this.detached&&this.parent&&!t){const o=this.parent.scopes.pop();o&&o!==this&&(this.parent.scopes[this.index]=o,o.index=this.index)}this.parent=void 0}}}function Ki(){return Ne}let ae;const cs=new WeakSet;class pr{constructor(t){this.fn=t,this.deps=void 0,this.depsTail=void 0,this.flags=5,this.next=void 0,this.cleanup=void 0,this.scheduler=void 0,Ne&&Ne.active&&Ne.effects.push(this)}pause(){this.flags|=64}resume(){this.flags&64&&(this.flags&=-65,cs.has(this)&&(cs.delete(this),this.trigger()))}notify(){this.flags&2&&!(this.flags&32)||this.flags&8||gr(this)}run(){if(!(this.flags&1))return this.fn();this.flags|=2,uo(this),mr(this);const t=ae,n=Ke;ae=this,Ke=!0;try{return this.fn()}finally{vr(this),ae=t,Ke=n,this.flags&=-3}}stop(){if(this.flags&1){for(let t=this.deps;t;t=t.nextDep)Ks(t);this.deps=this.depsTail=void 0,uo(this),this.onStop&&this.onStop(),this.flags&=-2}}trigger(){this.flags&64?cs.add(this):this.scheduler?this.scheduler():this.runIfDirty()}runIfDirty(){Ss(this)&&this.run()}get dirty(){return Ss(this)}}let hr=0,on,rn;function gr(e,t=!1){if(e.flags|=8,t){e.next=rn,rn=e;return}e.next=on,on=e}function Fs(){hr++}function Bs(){if(--hr>0)return;if(rn){let t=rn;for(rn=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;on;){let t=on;for(on=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function mr(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function vr(e){let t,n=e.depsTail,s=n;for(;s;){const o=s.prevDep;s.version===-1?(s===n&&(n=o),Ks(s),Gi(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=o}e.deps=t,e.depsTail=n}function Ss(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(yr(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function yr(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===pn)||(e.globalVersion=pn,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Ss(e))))return;e.flags|=2;const t=e.dep,n=ae,s=Ke;ae=e,Ke=!0;try{mr(e);const o=e.fn(e._value);(t.version===0||wt(o,e._value))&&(e.flags|=128,e._value=o,t.version++)}catch(o){throw t.version++,o}finally{ae=n,Ke=s,vr(e),e.flags&=-3}}function Ks(e,t=!1){const{dep:n,prevSub:s,nextSub:o}=e;if(s&&(s.nextSub=o,e.prevSub=void 0),o&&(o.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let r=n.computed.deps;r;r=r.nextDep)Ks(r,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Gi(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Ke=!0;const _r=[];function gt(){_r.push(Ke),Ke=!1}function mt(){const e=_r.pop();Ke=e===void 0?!0:e}function uo(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=ae;ae=void 0;try{t()}finally{ae=n}}}let pn=0;class Wi{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Gs{constructor(t){this.computed=t,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(t){if(!ae||!Ke||ae===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==ae)n=this.activeLink=new Wi(ae,this),ae.deps?(n.prevDep=ae.depsTail,ae.depsTail.nextDep=n,ae.depsTail=n):ae.deps=ae.depsTail=n,br(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=ae.depsTail,n.nextDep=void 0,ae.depsTail.nextDep=n,ae.depsTail=n,ae.deps===n&&(ae.deps=s)}return n}trigger(t){this.version++,pn++,this.notify(t)}notify(t){Fs();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Bs()}}}function br(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)br(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Es=new WeakMap,Nt=Symbol(""),ws=Symbol(""),hn=Symbol("");function be(e,t,n){if(Ke&&ae){let s=Es.get(e);s||Es.set(e,s=new Map);let o=s.get(n);o||(s.set(n,o=new Gs),o.map=s,o.key=n),o.track()}}function pt(e,t,n,s,o,r){const i=Es.get(e);if(!i){pn++;return}const l=a=>{a&&a.trigger()};if(Fs(),t==="clear")i.forEach(l);else{const a=H(e),f=a&&Vs(n);if(a&&n==="length"){const c=Number(s);i.forEach((p,g)=>{(g==="length"||g===hn||!rt(g)&&g>=c)&&l(p)})}else switch((n!==void 0||i.has(void 0))&&l(i.get(n)),f&&l(i.get(hn)),t){case"add":a?f&&l(i.get("length")):(l(i.get(Nt)),Bt(e)&&l(i.get(ws)));break;case"delete":a||(l(i.get(Nt)),Bt(e)&&l(i.get(ws)));break;case"set":Bt(e)&&l(i.get(Nt));break}}Bs()}function jt(e){const t=ee(e);return t===e?t:(be(t,"iterate",hn),He(e)?t:t.map(qe))}function Yn(e){return be(e=ee(e),"iterate",hn),e}function xt(e,t){return vt(e)?qt(Mt(e)?qe(t):t):qe(t)}const qi={__proto__:null,[Symbol.iterator](){return us(this,Symbol.iterator,e=>xt(this,e))},concat(...e){return jt(this).concat(...e.map(t=>H(t)?jt(t):t))},entries(){return us(this,"entries",e=>(e[1]=xt(this,e[1]),e))},every(e,t){return at(this,"every",e,t,void 0,arguments)},filter(e,t){return at(this,"filter",e,t,n=>n.map(s=>xt(this,s)),arguments)},find(e,t){return at(this,"find",e,t,n=>xt(this,n),arguments)},findIndex(e,t){return at(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return at(this,"findLast",e,t,n=>xt(this,n),arguments)},findLastIndex(e,t){return at(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return at(this,"forEach",e,t,void 0,arguments)},includes(...e){return fs(this,"includes",e)},indexOf(...e){return fs(this,"indexOf",e)},join(e){return jt(this).join(e)},lastIndexOf(...e){return fs(this,"lastIndexOf",e)},map(e,t){return at(this,"map",e,t,void 0,arguments)},pop(){return Zt(this,"pop")},push(...e){return Zt(this,"push",e)},reduce(e,...t){return fo(this,"reduce",e,t)},reduceRight(e,...t){return fo(this,"reduceRight",e,t)},shift(){return Zt(this,"shift")},some(e,t){return at(this,"some",e,t,void 0,arguments)},splice(...e){return Zt(this,"splice",e)},toReversed(){return jt(this).toReversed()},toSorted(e){return jt(this).toSorted(e)},toSpliced(...e){return jt(this).toSpliced(...e)},unshift(...e){return Zt(this,"unshift",e)},values(){return us(this,"values",e=>xt(this,e))}};function us(e,t,n){const s=Yn(e),o=s[t]();return s!==e&&!He(e)&&(o._next=o.next,o.next=()=>{const r=o._next();return r.done||(r.value=n(r.value)),r}),o}const Ji=Array.prototype;function at(e,t,n,s,o,r){const i=Yn(e),l=i!==e&&!He(e),a=i[t];if(a!==Ji[t]){const p=a.apply(e,r);return l?qe(p):p}let f=n;i!==e&&(l?f=function(p,g){return n.call(this,xt(e,p),g,e)}:n.length>2&&(f=function(p,g){return n.call(this,p,g,e)}));const c=a.call(i,f,s);return l&&o?o(c):c}function fo(e,t,n,s){const o=Yn(e);let r=n;return o!==e&&(He(e)?n.length>3&&(r=function(i,l,a){return n.call(this,i,l,a,e)}):r=function(i,l,a){return n.call(this,i,xt(e,l),a,e)}),o[t](r,...s)}function fs(e,t,n){const s=ee(e);be(s,"iterate",hn);const o=s[t](...n);return(o===-1||o===!1)&&Js(n[0])?(n[0]=ee(n[0]),s[t](...n)):o}function Zt(e,t,n=[]){gt(),Fs();const s=ee(e)[t].apply(e,n);return Bs(),mt(),s}const zi=ks("__proto__,__v_isRef,__isVue"),xr=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(rt));function Qi(e){rt(e)||(e=String(e));const t=ee(this);return be(t,"has",e),t.hasOwnProperty(e)}class Sr{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const o=this._isReadonly,r=this._isShallow;if(n==="__v_isReactive")return!o;if(n==="__v_isReadonly")return o;if(n==="__v_isShallow")return r;if(n==="__v_raw")return s===(o?r?il:Cr:r?Rr:wr).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const i=H(t);if(!o){let a;if(i&&(a=qi[n]))return a;if(n==="hasOwnProperty")return Qi}const l=Reflect.get(t,n,Se(t)?t:s);if((rt(n)?xr.has(n):zi(n))||(o||be(t,"get",n),r))return l;if(Se(l)){const a=i&&Vs(n)?l:l.value;return o&&se(a)?Mn(a):a}return se(l)?o?Mn(l):xn(l):l}}class Er extends Sr{constructor(t=!1){super(!1,t)}set(t,n,s,o){let r=t[n];const i=H(t)&&Vs(n);if(!this._isShallow){const f=vt(r);if(!He(s)&&!vt(s)&&(r=ee(r),s=ee(s)),!i&&Se(r)&&!Se(s))return f||(r.value=s),!0}const l=i?Number(n)<t.length:te(t,n),a=Reflect.set(t,n,s,Se(t)?t:o);return t===ee(o)&&(l?wt(s,r)&&pt(t,"set",n,s):pt(t,"add",n,s)),a}deleteProperty(t,n){const s=te(t,n);t[n];const o=Reflect.deleteProperty(t,n);return o&&s&&pt(t,"delete",n,void 0),o}has(t,n){const s=Reflect.has(t,n);return(!rt(n)||!xr.has(n))&&be(t,"has",n),s}ownKeys(t){return be(t,"iterate",H(t)?"length":Nt),Reflect.ownKeys(t)}}class Yi extends Sr{constructor(t=!1){super(!0,t)}set(t,n){return!0}deleteProperty(t,n){return!0}}const Xi=new Er,Zi=new Yi,el=new Er(!0);const Rs=e=>e,wn=e=>Reflect.getPrototypeOf(e);function tl(e,t,n){return function(...s){const o=this.__v_raw,r=ee(o),i=Bt(r),l=e==="entries"||e===Symbol.iterator&&i,a=e==="keys"&&i,f=o[e](...s),c=n?Rs:t?qt:qe;return!t&&be(r,"iterate",a?ws:Nt),_e(Object.create(f),{next(){const{value:p,done:g}=f.next();return g?{value:p,done:g}:{value:l?[c(p[0]),c(p[1])]:c(p),done:g}}})}}function Rn(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function nl(e,t){const n={get(o){const r=this.__v_raw,i=ee(r),l=ee(o);e||(wt(o,l)&&be(i,"get",o),be(i,"get",l));const{has:a}=wn(i),f=t?Rs:e?qt:qe;if(a.call(i,o))return f(r.get(o));if(a.call(i,l))return f(r.get(l));r!==i&&r.get(o)},get size(){const o=this.__v_raw;return!e&&be(ee(o),"iterate",Nt),o.size},has(o){const r=this.__v_raw,i=ee(r),l=ee(o);return e||(wt(o,l)&&be(i,"has",o),be(i,"has",l)),o===l?r.has(o):r.has(o)||r.has(l)},forEach(o,r){const i=this,l=i.__v_raw,a=ee(l),f=t?Rs:e?qt:qe;return!e&&be(a,"iterate",Nt),l.forEach((c,p)=>o.call(r,f(c),f(p),i))}};return _e(n,e?{add:Rn("add"),set:Rn("set"),delete:Rn("delete"),clear:Rn("clear")}:{add(o){!t&&!He(o)&&!vt(o)&&(o=ee(o));const r=ee(this);return wn(r).has.call(r,o)||(r.add(o),pt(r,"add",o,o)),this},set(o,r){!t&&!He(r)&&!vt(r)&&(r=ee(r));const i=ee(this),{has:l,get:a}=wn(i);let f=l.call(i,o);f||(o=ee(o),f=l.call(i,o));const c=a.call(i,o);return i.set(o,r),f?wt(r,c)&&pt(i,"set",o,r):pt(i,"add",o,r),this},delete(o){const r=ee(this),{has:i,get:l}=wn(r);let a=i.call(r,o);a||(o=ee(o),a=i.call(r,o)),l&&l.call(r,o);const f=r.delete(o);return a&&pt(r,"delete",o,void 0),f},clear(){const o=ee(this),r=o.size!==0,i=o.clear();return r&&pt(o,"clear",void 0,void 0),i}}),["keys","values","entries",Symbol.iterator].forEach(o=>{n[o]=tl(o,e,t)}),n}function Ws(e,t){const n=nl(e,t);return(s,o,r)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?s:Reflect.get(te(n,o)&&o in s?n:s,o,r)}const sl={get:Ws(!1,!1)},ol={get:Ws(!1,!0)},rl={get:Ws(!0,!1)};const wr=new WeakMap,Rr=new WeakMap,Cr=new WeakMap,il=new WeakMap;function ll(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function al(e){return e.__v_skip||!Object.isExtensible(e)?0:ll(Ni(e))}function xn(e){return vt(e)?e:qs(e,!1,Xi,sl,wr)}function Ar(e){return qs(e,!1,el,ol,Rr)}function Mn(e){return qs(e,!0,Zi,rl,Cr)}function qs(e,t,n,s,o){if(!se(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const r=al(e);if(r===0)return e;const i=o.get(e);if(i)return i;const l=new Proxy(e,r===2?s:n);return o.set(e,l),l}function Mt(e){return vt(e)?Mt(e.__v_raw):!!(e&&e.__v_isReactive)}function vt(e){return!!(e&&e.__v_isReadonly)}function He(e){return!!(e&&e.__v_isShallow)}function Js(e){return e?!!e.__v_raw:!1}function ee(e){const t=e&&e.__v_raw;return t?ee(t):e}function cl(e){return!te(e,"__v_skip")&&Object.isExtensible(e)&&cr(e,"__v_skip",!0),e}const qe=e=>se(e)?xn(e):e,qt=e=>se(e)?Mn(e):e;function Se(e){return e?e.__v_isRef===!0:!1}function Y(e){return Pr(e,!1)}function ul(e){return Pr(e,!0)}function Pr(e,t){return Se(e)?e:new fl(e,t)}class fl{constructor(t,n){this.dep=new Gs,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:ee(t),this._value=n?t:qe(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||He(t)||vt(t);t=s?t:ee(t),wt(t,n)&&(this._rawValue=t,this._value=s?t:qe(t),this.dep.trigger())}}function Dt(e){return Se(e)?e.value:e}const dl={get:(e,t,n)=>t==="__v_raw"?e:Dt(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const o=e[t];return Se(o)&&!Se(n)?(o.value=n,!0):Reflect.set(e,t,n,s)}};function Tr(e){return Mt(e)?e:new Proxy(e,dl)}class pl{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Gs(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=pn-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&ae!==this)return gr(this,!0),!0}get value(){const t=this.dep.track();return yr(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function hl(e,t,n=!1){let s,o;return G(e)?s=e:(s=e.get,o=e.set),new pl(s,o,n)}const Cn={},Dn=new WeakMap;let Tt;function gl(e,t=!1,n=Tt){if(n){let s=Dn.get(n);s||Dn.set(n,s=[]),s.push(e)}}function ml(e,t,n=ie){const{immediate:s,deep:o,once:r,scheduler:i,augmentJob:l,call:a}=n,f=D=>o?D:He(D)||o===!1||o===0?ht(D,1):ht(D);let c,p,g,v,O=!1,w=!1;if(Se(e)?(p=()=>e.value,O=He(e)):Mt(e)?(p=()=>f(e),O=!0):H(e)?(w=!0,O=e.some(D=>Mt(D)||He(D)),p=()=>e.map(D=>{if(Se(D))return D.value;if(Mt(D))return f(D);if(G(D))return a?a(D,2):D()})):G(e)?t?p=a?()=>a(e,2):e:p=()=>{if(g){gt();try{g()}finally{mt()}}const D=Tt;Tt=c;try{return a?a(e,3,[v]):e(v)}finally{Tt=D}}:p=ot,t&&o){const D=p,F=o===!0?1/0:o;p=()=>ht(D(),F)}const E=Ki(),C=()=>{c.stop(),E&&E.active&&js(E.effects,c)};if(r&&t){const D=t;t=(...F)=>{D(...F),C()}}let x=w?new Array(e.length).fill(Cn):Cn;const A=D=>{if(!(!(c.flags&1)||!c.dirty&&!D))if(t){const F=c.run();if(o||O||(w?F.some((ce,re)=>wt(ce,x[re])):wt(F,x))){g&&g();const ce=Tt;Tt=c;try{const re=[F,x===Cn?void 0:w&&x[0]===Cn?[]:x,v];x=F,a?a(t,3,re):t(...re)}finally{Tt=ce}}}else c.run()};return l&&l(A),c=new pr(p),c.scheduler=i?()=>i(A,!1):A,v=D=>gl(D,!1,c),g=c.onStop=()=>{const D=Dn.get(c);if(D){if(a)a(D,4);else for(const F of D)F();Dn.delete(c)}},t?s?A(!0):x=c.run():i?i(A.bind(null,!0),!0):c.run(),C.pause=c.pause.bind(c),C.resume=c.resume.bind(c),C.stop=C,C}function ht(e,t=1/0,n){if(t<=0||!se(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,Se(e))ht(e.value,t,n);else if(H(e))for(let s=0;s<e.length;s++)ht(e[s],t,n);else if(Wn(e)||Bt(e))e.forEach(s=>{ht(s,t,n)});else if(ar(e)){for(const s in e)ht(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&ht(e[s],t,n)}return e}/**
10
+ * @vue/runtime-core v3.5.29
11
+ * (c) 2018-present Yuxi (Evan) You and Vue contributors
12
+ * @license MIT
13
+ **/function Sn(e,t,n,s){try{return s?e(...s):e()}catch(o){Xn(o,t,n)}}function it(e,t,n,s){if(G(e)){const o=Sn(e,t,n,s);return o&&ir(o)&&o.catch(r=>{Xn(r,t,n)}),o}if(H(e)){const o=[];for(let r=0;r<e.length;r++)o.push(it(e[r],t,n,s));return o}}function Xn(e,t,n,s=!0){const o=t?t.vnode:null,{errorHandler:r,throwUnhandledErrorInProduction:i}=t&&t.appContext.config||ie;if(t){let l=t.parent;const a=t.proxy,f=`https://vuejs.org/error-reference/#runtime-${n}`;for(;l;){const c=l.ec;if(c){for(let p=0;p<c.length;p++)if(c[p](e,a,f)===!1)return}l=l.parent}if(r){gt(),Sn(r,null,10,[e,a,f]),mt();return}}vl(e,n,o,s,i)}function vl(e,t,n,s=!0,o=!1){if(o)throw e;console.error(e)}const Re=[];let nt=-1;const Kt=[];let St=null,Vt=0;const Or=Promise.resolve();let Un=null;function zs(e){const t=Un||Or;return e?t.then(this?e.bind(this):e):t}function yl(e){let t=nt+1,n=Re.length;for(;t<n;){const s=t+n>>>1,o=Re[s],r=gn(o);r<e||r===e&&o.flags&2?t=s+1:n=s}return t}function Qs(e){if(!(e.flags&1)){const t=gn(e),n=Re[Re.length-1];!n||!(e.flags&2)&&t>=gn(n)?Re.push(e):Re.splice(yl(t),0,e),e.flags|=1,Ir()}}function Ir(){Un||(Un=Or.then(Mr))}function _l(e){H(e)?Kt.push(...e):St&&e.id===-1?St.splice(Vt+1,0,e):e.flags&1||(Kt.push(e),e.flags|=1),Ir()}function po(e,t,n=nt+1){for(;n<Re.length;n++){const s=Re[n];if(s&&s.flags&2){if(e&&s.id!==e.uid)continue;Re.splice(n,1),n--,s.flags&4&&(s.flags&=-2),s(),s.flags&4||(s.flags&=-2)}}}function Nr(e){if(Kt.length){const t=[...new Set(Kt)].sort((n,s)=>gn(n)-gn(s));if(Kt.length=0,St){St.push(...t);return}for(St=t,Vt=0;Vt<St.length;Vt++){const n=St[Vt];n.flags&4&&(n.flags&=-2),n.flags&8||n(),n.flags&=-2}St=null,Vt=0}}const gn=e=>e.id==null?e.flags&2?-1:1/0:e.id;function Mr(e){try{for(nt=0;nt<Re.length;nt++){const t=Re[nt];t&&!(t.flags&8)&&(t.flags&4&&(t.flags&=-2),Sn(t,t.i,t.i?15:14),t.flags&4||(t.flags&=-2))}}finally{for(;nt<Re.length;nt++){const t=Re[nt];t&&(t.flags&=-2)}nt=-1,Re.length=0,Nr(),Un=null,(Re.length||Kt.length)&&Mr()}}let ke=null,Dr=null;function Ln(e){const t=ke;return ke=e,Dr=e&&e.type.__scopeId||null,t}function ft(e,t=ke,n){if(!t||e._n)return e;const s=(...o)=>{s._d&&Vn(-1);const r=Ln(t);let i;try{i=e(...o)}finally{Ln(r),s._d&&Vn(1)}return i};return s._n=!0,s._c=!0,s._d=!0,s}function Ae(e,t){if(ke===null)return e;const n=ns(ke),s=e.dirs||(e.dirs=[]);for(let o=0;o<t.length;o++){let[r,i,l,a=ie]=t[o];r&&(G(r)&&(r={mounted:r,updated:r}),r.deep&&ht(i),s.push({dir:r,instance:n,value:i,oldValue:void 0,arg:l,modifiers:a}))}return e}function At(e,t,n,s){const o=e.dirs,r=t&&t.dirs;for(let i=0;i<o.length;i++){const l=o[i];r&&(l.oldValue=r[i].value);let a=l.dir[s];a&&(gt(),it(a,n,8,[e.el,l,e,t]),mt())}}function Pn(e,t){if(xe){let n=xe.provides;const s=xe.parent&&xe.parent.provides;s===n&&(n=xe.provides=Object.create(s)),n[e]=t}}function Ge(e,t,n=!1){const s=ba();if(s||Gt){let o=Gt?Gt._context.provides:s?s.parent==null||s.ce?s.vnode.appContext&&s.vnode.appContext.provides:s.parent.provides:void 0;if(o&&e in o)return o[e];if(arguments.length>1)return n&&G(t)?t.call(s&&s.proxy):t}}const bl=Symbol.for("v-scx"),xl=()=>Ge(bl);function ln(e,t,n){return Ur(e,t,n)}function Ur(e,t,n=ie){const{immediate:s,deep:o,flush:r,once:i}=n,l=_e({},n),a=t&&s||!t&&r!=="post";let f;if(vn){if(r==="sync"){const v=xl();f=v.__watcherHandles||(v.__watcherHandles=[])}else if(!a){const v=()=>{};return v.stop=ot,v.resume=ot,v.pause=ot,v}}const c=xe;l.call=(v,O,w)=>it(v,c,O,w);let p=!1;r==="post"?l.scheduler=v=>{Ie(v,c&&c.suspense)}:r!=="sync"&&(p=!0,l.scheduler=(v,O)=>{O?v():Qs(v)}),l.augmentJob=v=>{t&&(v.flags|=4),p&&(v.flags|=2,c&&(v.id=c.uid,v.i=c))};const g=ml(e,t,l);return vn&&(f?f.push(g):a&&g()),g}function Sl(e,t,n){const s=this.proxy,o=ge(e)?e.includes(".")?Lr(s,e):()=>s[e]:e.bind(s,s);let r;G(t)?r=t:(r=t.handler,n=t);const i=En(this),l=Ur(o,r.bind(s),n);return i(),l}function Lr(e,t){const n=t.split(".");return()=>{let s=e;for(let o=0;o<n.length&&s;o++)s=s[n[o]];return s}}const El=Symbol("_vte"),wl=e=>e.__isTeleport,Rl=Symbol("_leaveCb");function Ys(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Ys(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function kr(e,t){return G(e)?_e({name:e.name},t,{setup:e}):e}function $r(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function ho(e,t){let n;return!!((n=Object.getOwnPropertyDescriptor(e,t))&&!n.configurable)}const kn=new WeakMap;function an(e,t,n,s,o=!1){if(H(e)){e.forEach((w,E)=>an(w,t&&(H(t)?t[E]:t),n,s,o));return}if(cn(s)&&!o){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&an(e,t,n,s.component.subTree);return}const r=s.shapeFlag&4?ns(s.component):s.el,i=o?null:r,{i:l,r:a}=e,f=t&&t.r,c=l.refs===ie?l.refs={}:l.refs,p=l.setupState,g=ee(p),v=p===ie?rr:w=>ho(c,w)?!1:te(g,w),O=(w,E)=>!(E&&ho(c,E));if(f!=null&&f!==a){if(go(t),ge(f))c[f]=null,v(f)&&(p[f]=null);else if(Se(f)){const w=t;O(f,w.k)&&(f.value=null),w.k&&(c[w.k]=null)}}if(G(a))Sn(a,l,12,[i,c]);else{const w=ge(a),E=Se(a);if(w||E){const C=()=>{if(e.f){const x=w?v(a)?p[a]:c[a]:O()||!e.k?a.value:c[e.k];if(o)H(x)&&js(x,r);else if(H(x))x.includes(r)||x.push(r);else if(w)c[a]=[r],v(a)&&(p[a]=c[a]);else{const A=[r];O(a,e.k)&&(a.value=A),e.k&&(c[e.k]=A)}}else w?(c[a]=i,v(a)&&(p[a]=i)):E&&(O(a,e.k)&&(a.value=i),e.k&&(c[e.k]=i))};if(i){const x=()=>{C(),kn.delete(e)};x.id=-1,kn.set(e,x),Ie(x,n)}else go(e),C()}}}function go(e){const t=kn.get(e);t&&(t.flags|=8,kn.delete(e))}Qn().requestIdleCallback;Qn().cancelIdleCallback;const cn=e=>!!e.type.__asyncLoader,jr=e=>e.type.__isKeepAlive;function Cl(e,t){Vr(e,"a",t)}function Al(e,t){Vr(e,"da",t)}function Vr(e,t,n=xe){const s=e.__wdc||(e.__wdc=()=>{let o=n;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(Zn(t,s,n),n){let o=n.parent;for(;o&&o.parent;)jr(o.parent.vnode)&&Pl(s,t,n,o),o=o.parent}}function Pl(e,t,n,s){const o=Zn(t,e,s,!0);Hr(()=>{js(s[t],o)},n)}function Zn(e,t,n=xe,s=!1){if(n){const o=n[e]||(n[e]=[]),r=t.__weh||(t.__weh=(...i)=>{gt();const l=En(n),a=it(t,n,e,i);return l(),mt(),a});return s?o.unshift(r):o.push(r),r}}const yt=e=>(t,n=xe)=>{(!vn||e==="sp")&&Zn(e,(...s)=>t(...s),n)},Tl=yt("bm"),Yt=yt("m"),Ol=yt("bu"),Il=yt("u"),Nl=yt("bum"),Hr=yt("um"),Ml=yt("sp"),Dl=yt("rtg"),Ul=yt("rtc");function Ll(e,t=xe){Zn("ec",e,t)}const kl="components";function $n(e,t){return jl(kl,e,!0,t)||e}const $l=Symbol.for("v-ndc");function jl(e,t,n=!0,s=!1){const o=ke||xe;if(o){const r=o.type;{const l=Ra(r,!1);if(l&&(l===t||l===Fe(t)||l===Jn(Fe(t))))return r}const i=mo(o[e]||r[e],t)||mo(o.appContext[e],t);return!i&&s?r:i}}function mo(e,t){return e&&(e[t]||e[Fe(t)]||e[Jn(Fe(t))])}function Cs(e,t,n,s){let o;const r=n,i=H(e);if(i||ge(e)){const l=i&&Mt(e);let a=!1,f=!1;l&&(a=!He(e),f=vt(e),e=Yn(e)),o=new Array(e.length);for(let c=0,p=e.length;c<p;c++)o[c]=t(a?f?qt(qe(e[c])):qe(e[c]):e[c],c,void 0,r)}else if(typeof e=="number"){o=new Array(e);for(let l=0;l<e;l++)o[l]=t(l+1,l,void 0,r)}else if(se(e))if(e[Symbol.iterator])o=Array.from(e,(l,a)=>t(l,a,void 0,r));else{const l=Object.keys(e);o=new Array(l.length);for(let a=0,f=l.length;a<f;a++){const c=l[a];o[a]=t(e[c],c,a,r)}}else o=[];return o}const As=e=>e?li(e)?ns(e):As(e.parent):null,un=_e(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>As(e.parent),$root:e=>As(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Br(e),$forceUpdate:e=>e.f||(e.f=()=>{Qs(e.update)}),$nextTick:e=>e.n||(e.n=zs.bind(e.proxy)),$watch:e=>Sl.bind(e)}),ds=(e,t)=>e!==ie&&!e.__isScriptSetup&&te(e,t),Vl={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:o,props:r,accessCache:i,type:l,appContext:a}=e;if(t[0]!=="$"){const g=i[t];if(g!==void 0)switch(g){case 1:return s[t];case 2:return o[t];case 4:return n[t];case 3:return r[t]}else{if(ds(s,t))return i[t]=1,s[t];if(o!==ie&&te(o,t))return i[t]=2,o[t];if(te(r,t))return i[t]=3,r[t];if(n!==ie&&te(n,t))return i[t]=4,n[t];Ps&&(i[t]=0)}}const f=un[t];let c,p;if(f)return t==="$attrs"&&be(e.attrs,"get",""),f(e);if((c=l.__cssModules)&&(c=c[t]))return c;if(n!==ie&&te(n,t))return i[t]=4,n[t];if(p=a.config.globalProperties,te(p,t))return p[t]},set({_:e},t,n){const{data:s,setupState:o,ctx:r}=e;return ds(o,t)?(o[t]=n,!0):s!==ie&&te(s,t)?(s[t]=n,!0):te(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(r[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:o,props:r,type:i}},l){let a;return!!(n[l]||e!==ie&&l[0]!=="$"&&te(e,l)||ds(t,l)||te(r,l)||te(s,l)||te(un,l)||te(o.config.globalProperties,l)||(a=i.__cssModules)&&a[l])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:te(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function vo(e){return H(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Ps=!0;function Hl(e){const t=Br(e),n=e.proxy,s=e.ctx;Ps=!1,t.beforeCreate&&yo(t.beforeCreate,e,"bc");const{data:o,computed:r,methods:i,watch:l,provide:a,inject:f,created:c,beforeMount:p,mounted:g,beforeUpdate:v,updated:O,activated:w,deactivated:E,beforeDestroy:C,beforeUnmount:x,destroyed:A,unmounted:D,render:F,renderTracked:ce,renderTriggered:re,errorCaptured:je,serverPrefetch:Be,expose:De,inheritAttrs:ze,components:Qe,directives:k,filters:L}=t;if(f&&Fl(f,s,null),i)for(const oe in i){const X=i[oe];G(X)&&(s[oe]=X.bind(n))}if(o){const oe=o.call(n,n);se(oe)&&(e.data=xn(oe))}if(Ps=!0,r)for(const oe in r){const X=r[oe],lt=G(X)?X.bind(n,n):G(X.get)?X.get.bind(n,n):ot,_t=!G(X)&&G(X.set)?X.set.bind(n):ot,Ye=ve({get:lt,set:_t});Object.defineProperty(s,oe,{enumerable:!0,configurable:!0,get:()=>Ye.value,set:Pe=>Ye.value=Pe})}if(l)for(const oe in l)Fr(l[oe],s,n,oe);if(a){const oe=G(a)?a.call(n):a;Reflect.ownKeys(oe).forEach(X=>{Pn(X,oe[X])})}c&&yo(c,e,"c");function ue(oe,X){H(X)?X.forEach(lt=>oe(lt.bind(n))):X&&oe(X.bind(n))}if(ue(Tl,p),ue(Yt,g),ue(Ol,v),ue(Il,O),ue(Cl,w),ue(Al,E),ue(Ll,je),ue(Ul,ce),ue(Dl,re),ue(Nl,x),ue(Hr,D),ue(Ml,Be),H(De))if(De.length){const oe=e.exposed||(e.exposed={});De.forEach(X=>{Object.defineProperty(oe,X,{get:()=>n[X],set:lt=>n[X]=lt,enumerable:!0})})}else e.exposed||(e.exposed={});F&&e.render===ot&&(e.render=F),ze!=null&&(e.inheritAttrs=ze),Qe&&(e.components=Qe),k&&(e.directives=k),Be&&$r(e)}function Fl(e,t,n=ot){H(e)&&(e=Ts(e));for(const s in e){const o=e[s];let r;se(o)?"default"in o?r=Ge(o.from||s,o.default,!0):r=Ge(o.from||s):r=Ge(o),Se(r)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>r.value,set:i=>r.value=i}):t[s]=r}}function yo(e,t,n){it(H(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Fr(e,t,n,s){let o=s.includes(".")?Lr(n,s):()=>n[s];if(ge(e)){const r=t[e];G(r)&&ln(o,r)}else if(G(e))ln(o,e.bind(n));else if(se(e))if(H(e))e.forEach(r=>Fr(r,t,n,s));else{const r=G(e.handler)?e.handler.bind(n):t[e.handler];G(r)&&ln(o,r,e)}}function Br(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:o,optionsCache:r,config:{optionMergeStrategies:i}}=e.appContext,l=r.get(t);let a;return l?a=l:!o.length&&!n&&!s?a=t:(a={},o.length&&o.forEach(f=>jn(a,f,i,!0)),jn(a,t,i)),se(t)&&r.set(t,a),a}function jn(e,t,n,s=!1){const{mixins:o,extends:r}=t;r&&jn(e,r,n,!0),o&&o.forEach(i=>jn(e,i,n,!0));for(const i in t)if(!(s&&i==="expose")){const l=Bl[i]||n&&n[i];e[i]=l?l(e[i],t[i]):t[i]}return e}const Bl={data:_o,props:bo,emits:bo,methods:nn,computed:nn,beforeCreate:Ee,created:Ee,beforeMount:Ee,mounted:Ee,beforeUpdate:Ee,updated:Ee,beforeDestroy:Ee,beforeUnmount:Ee,destroyed:Ee,unmounted:Ee,activated:Ee,deactivated:Ee,errorCaptured:Ee,serverPrefetch:Ee,components:nn,directives:nn,watch:Gl,provide:_o,inject:Kl};function _o(e,t){return t?e?function(){return _e(G(e)?e.call(this,this):e,G(t)?t.call(this,this):t)}:t:e}function Kl(e,t){return nn(Ts(e),Ts(t))}function Ts(e){if(H(e)){const t={};for(let n=0;n<e.length;n++)t[e[n]]=e[n];return t}return e}function Ee(e,t){return e?[...new Set([].concat(e,t))]:t}function nn(e,t){return e?_e(Object.create(null),e,t):t}function bo(e,t){return e?H(e)&&H(t)?[...new Set([...e,...t])]:_e(Object.create(null),vo(e),vo(t??{})):t}function Gl(e,t){if(!e)return t;if(!t)return e;const n=_e(Object.create(null),e);for(const s in t)n[s]=Ee(e[s],t[s]);return n}function Kr(){return{app:null,config:{isNativeTag:rr,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let Wl=0;function ql(e,t){return function(s,o=null){G(s)||(s=_e({},s)),o!=null&&!se(o)&&(o=null);const r=Kr(),i=new WeakSet,l=[];let a=!1;const f=r.app={_uid:Wl++,_component:s,_props:o,_container:null,_context:r,_instance:null,version:Aa,get config(){return r.config},set config(c){},use(c,...p){return i.has(c)||(c&&G(c.install)?(i.add(c),c.install(f,...p)):G(c)&&(i.add(c),c(f,...p))),f},mixin(c){return r.mixins.includes(c)||r.mixins.push(c),f},component(c,p){return p?(r.components[c]=p,f):r.components[c]},directive(c,p){return p?(r.directives[c]=p,f):r.directives[c]},mount(c,p,g){if(!a){const v=f._ceVNode||fe(s,o);return v.appContext=r,g===!0?g="svg":g===!1&&(g=void 0),e(v,c,g),a=!0,f._container=c,c.__vue_app__=f,ns(v.component)}},onUnmount(c){l.push(c)},unmount(){a&&(it(l,f._instance,16),e(null,f._container),delete f._container.__vue_app__)},provide(c,p){return r.provides[c]=p,f},runWithContext(c){const p=Gt;Gt=f;try{return c()}finally{Gt=p}}};return f}}let Gt=null;const Jl=(e,t)=>t==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Fe(t)}Modifiers`]||e[`${Ut(t)}Modifiers`];function zl(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||ie;let o=n;const r=t.startsWith("update:"),i=r&&Jl(s,t.slice(7));i&&(i.trim&&(o=n.map(c=>ge(c)?c.trim():c)),i.number&&(o=n.map(zn)));let l,a=s[l=ls(t)]||s[l=ls(Fe(t))];!a&&r&&(a=s[l=ls(Ut(t))]),a&&it(a,e,6,o);const f=s[l+"Once"];if(f){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,it(f,e,6,o)}}const Ql=new WeakMap;function Gr(e,t,n=!1){const s=n?Ql:t.emitsCache,o=s.get(e);if(o!==void 0)return o;const r=e.emits;let i={},l=!1;if(!G(e)){const a=f=>{const c=Gr(f,t,!0);c&&(l=!0,_e(i,c))};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!r&&!l?(se(e)&&s.set(e,null),null):(H(r)?r.forEach(a=>i[a]=null):_e(i,r),se(e)&&s.set(e,i),i)}function es(e,t){return!e||!Gn(t)?!1:(t=t.slice(2).replace(/Once$/,""),te(e,t[0].toLowerCase()+t.slice(1))||te(e,Ut(t))||te(e,t))}function xo(e){const{type:t,vnode:n,proxy:s,withProxy:o,propsOptions:[r],slots:i,attrs:l,emit:a,render:f,renderCache:c,props:p,data:g,setupState:v,ctx:O,inheritAttrs:w}=e,E=Ln(e);let C,x;try{if(n.shapeFlag&4){const D=o||s,F=D;C=st(f.call(F,D,c,p,v,g,O)),x=l}else{const D=t;C=st(D.length>1?D(p,{attrs:l,slots:i,emit:a}):D(p,null)),x=t.props?l:Yl(l)}}catch(D){fn.length=0,Xn(D,e,1),C=fe(Rt)}let A=C;if(x&&w!==!1){const D=Object.keys(x),{shapeFlag:F}=A;D.length&&F&7&&(r&&D.some($s)&&(x=Xl(x,r)),A=Jt(A,x,!1,!0))}return n.dirs&&(A=Jt(A,null,!1,!0),A.dirs=A.dirs?A.dirs.concat(n.dirs):n.dirs),n.transition&&Ys(A,n.transition),C=A,Ln(E),C}const Yl=e=>{let t;for(const n in e)(n==="class"||n==="style"||Gn(n))&&((t||(t={}))[n]=e[n]);return t},Xl=(e,t)=>{const n={};for(const s in e)(!$s(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Zl(e,t,n){const{props:s,children:o,component:r}=e,{props:i,children:l,patchFlag:a}=t,f=r.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return s?So(s,i,f):!!i;if(a&8){const c=t.dynamicProps;for(let p=0;p<c.length;p++){const g=c[p];if(Wr(i,s,g)&&!es(f,g))return!0}}}else return(o||l)&&(!l||!l.$stable)?!0:s===i?!1:s?i?So(s,i,f):!0:!!i;return!1}function So(e,t,n){const s=Object.keys(t);if(s.length!==Object.keys(e).length)return!0;for(let o=0;o<s.length;o++){const r=s[o];if(Wr(t,e,r)&&!es(n,r))return!0}return!1}function Wr(e,t,n){const s=e[n],o=t[n];return n==="style"&&se(s)&&se(o)?!bn(s,o):s!==o}function ea({vnode:e,parent:t},n){for(;t;){const s=t.subTree;if(s.suspense&&s.suspense.activeBranch===e&&(s.el=e.el),s===e)(e=t.vnode).el=n,t=t.parent;else break}}const qr={},Jr=()=>Object.create(qr),zr=e=>Object.getPrototypeOf(e)===qr;function ta(e,t,n,s=!1){const o={},r=Jr();e.propsDefaults=Object.create(null),Qr(e,t,o,r);for(const i in e.propsOptions[0])i in o||(o[i]=void 0);n?e.props=s?o:Ar(o):e.type.props?e.props=o:e.props=r,e.attrs=r}function na(e,t,n,s){const{props:o,attrs:r,vnode:{patchFlag:i}}=e,l=ee(o),[a]=e.propsOptions;let f=!1;if((s||i>0)&&!(i&16)){if(i&8){const c=e.vnode.dynamicProps;for(let p=0;p<c.length;p++){let g=c[p];if(es(e.emitsOptions,g))continue;const v=t[g];if(a)if(te(r,g))v!==r[g]&&(r[g]=v,f=!0);else{const O=Fe(g);o[O]=Os(a,l,O,v,e,!1)}else v!==r[g]&&(r[g]=v,f=!0)}}}else{Qr(e,t,o,r)&&(f=!0);let c;for(const p in l)(!t||!te(t,p)&&((c=Ut(p))===p||!te(t,c)))&&(a?n&&(n[p]!==void 0||n[c]!==void 0)&&(o[p]=Os(a,l,p,void 0,e,!0)):delete o[p]);if(r!==l)for(const p in r)(!t||!te(t,p))&&(delete r[p],f=!0)}f&&pt(e.attrs,"set","")}function Qr(e,t,n,s){const[o,r]=e.propsOptions;let i=!1,l;if(t)for(let a in t){if(sn(a))continue;const f=t[a];let c;o&&te(o,c=Fe(a))?!r||!r.includes(c)?n[c]=f:(l||(l={}))[c]=f:es(e.emitsOptions,a)||(!(a in s)||f!==s[a])&&(s[a]=f,i=!0)}if(r){const a=ee(n),f=l||ie;for(let c=0;c<r.length;c++){const p=r[c];n[p]=Os(o,a,p,f[p],e,!te(f,p))}}return i}function Os(e,t,n,s,o,r){const i=e[n];if(i!=null){const l=te(i,"default");if(l&&s===void 0){const a=i.default;if(i.type!==Function&&!i.skipFactory&&G(a)){const{propsDefaults:f}=o;if(n in f)s=f[n];else{const c=En(o);s=f[n]=a.call(null,t),c()}}else s=a;o.ce&&o.ce._setProp(n,s)}i[0]&&(r&&!l?s=!1:i[1]&&(s===""||s===Ut(n))&&(s=!0))}return s}const sa=new WeakMap;function Yr(e,t,n=!1){const s=n?sa:t.propsCache,o=s.get(e);if(o)return o;const r=e.props,i={},l=[];let a=!1;if(!G(e)){const c=p=>{a=!0;const[g,v]=Yr(p,t,!0);_e(i,g),v&&l.push(...v)};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}if(!r&&!a)return se(e)&&s.set(e,Ft),Ft;if(H(r))for(let c=0;c<r.length;c++){const p=Fe(r[c]);Eo(p)&&(i[p]=ie)}else if(r)for(const c in r){const p=Fe(c);if(Eo(p)){const g=r[c],v=i[p]=H(g)||G(g)?{type:g}:_e({},g),O=v.type;let w=!1,E=!0;if(H(O))for(let C=0;C<O.length;++C){const x=O[C],A=G(x)&&x.name;if(A==="Boolean"){w=!0;break}else A==="String"&&(E=!1)}else w=G(O)&&O.name==="Boolean";v[0]=w,v[1]=E,(w||te(v,"default"))&&l.push(p)}}const f=[i,l];return se(e)&&s.set(e,f),f}function Eo(e){return e[0]!=="$"&&!sn(e)}const Xs=e=>e==="_"||e==="_ctx"||e==="$stable",Zs=e=>H(e)?e.map(st):[st(e)],oa=(e,t,n)=>{if(t._n)return t;const s=ft((...o)=>Zs(t(...o)),n);return s._c=!1,s},Xr=(e,t,n)=>{const s=e._ctx;for(const o in e){if(Xs(o))continue;const r=e[o];if(G(r))t[o]=oa(o,r,s);else if(r!=null){const i=Zs(r);t[o]=()=>i}}},Zr=(e,t)=>{const n=Zs(t);e.slots.default=()=>n},ei=(e,t,n)=>{for(const s in t)(n||!Xs(s))&&(e[s]=t[s])},ra=(e,t,n)=>{const s=e.slots=Jr();if(e.vnode.shapeFlag&32){const o=t._;o?(ei(s,t,n),n&&cr(s,"_",o,!0)):Xr(t,s)}else t&&Zr(e,t)},ia=(e,t,n)=>{const{vnode:s,slots:o}=e;let r=!0,i=ie;if(s.shapeFlag&32){const l=t._;l?n&&l===1?r=!1:ei(o,t,n):(r=!t.$stable,Xr(t,o)),i=t}else t&&(Zr(e,t),i={default:1});if(r)for(const l in o)!Xs(l)&&i[l]==null&&delete o[l]},Ie=fa;function la(e){return aa(e)}function aa(e,t){const n=Qn();n.__VUE__=!0;const{insert:s,remove:o,patchProp:r,createElement:i,createText:l,createComment:a,setText:f,setElementText:c,parentNode:p,nextSibling:g,setScopeId:v=ot,insertStaticContent:O}=e,w=(u,d,m,y=null,S=null,_=null,I=void 0,T=null,P=!!d.dynamicChildren)=>{if(u===d)return;u&&!en(u,d)&&(y=b(u),Pe(u,S,_,!0),u=null),d.patchFlag===-2&&(P=!1,d.dynamicChildren=null);const{type:R,ref:V,shapeFlag:M}=d;switch(R){case ts:E(u,d,m,y);break;case Rt:C(u,d,m,y);break;case Tn:u==null&&x(d,m,y,I);break;case Me:Qe(u,d,m,y,S,_,I,T,P);break;default:M&1?F(u,d,m,y,S,_,I,T,P):M&6?k(u,d,m,y,S,_,I,T,P):(M&64||M&128)&&R.process(u,d,m,y,S,_,I,T,P,$)}V!=null&&S?an(V,u&&u.ref,_,d||u,!d):V==null&&u&&u.ref!=null&&an(u.ref,null,_,u,!0)},E=(u,d,m,y)=>{if(u==null)s(d.el=l(d.children),m,y);else{const S=d.el=u.el;d.children!==u.children&&f(S,d.children)}},C=(u,d,m,y)=>{u==null?s(d.el=a(d.children||""),m,y):d.el=u.el},x=(u,d,m,y)=>{[u.el,u.anchor]=O(u.children,d,m,y,u.el,u.anchor)},A=({el:u,anchor:d},m,y)=>{let S;for(;u&&u!==d;)S=g(u),s(u,m,y),u=S;s(d,m,y)},D=({el:u,anchor:d})=>{let m;for(;u&&u!==d;)m=g(u),o(u),u=m;o(d)},F=(u,d,m,y,S,_,I,T,P)=>{if(d.type==="svg"?I="svg":d.type==="math"&&(I="mathml"),u==null)ce(d,m,y,S,_,I,T,P);else{const R=u.el&&u.el._isVueCE?u.el:null;try{R&&R._beginPatch(),Be(u,d,S,_,I,T,P)}finally{R&&R._endPatch()}}},ce=(u,d,m,y,S,_,I,T)=>{let P,R;const{props:V,shapeFlag:M,transition:j,dirs:B}=u;if(P=u.el=i(u.type,_,V&&V.is,V),M&8?c(P,u.children):M&16&&je(u.children,P,null,y,S,ps(u,_),I,T),B&&At(u,null,y,"created"),re(P,u,u.scopeId,I,y),V){for(const le in V)le!=="value"&&!sn(le)&&r(P,le,null,V[le],_,y);"value"in V&&r(P,"value",null,V.value,_),(R=V.onVnodeBeforeMount)&&tt(R,y,u)}B&&At(u,null,y,"beforeMount");const Q=ca(S,j);Q&&j.beforeEnter(P),s(P,d,m),((R=V&&V.onVnodeMounted)||Q||B)&&Ie(()=>{R&&tt(R,y,u),Q&&j.enter(P),B&&At(u,null,y,"mounted")},S)},re=(u,d,m,y,S)=>{if(m&&v(u,m),y)for(let _=0;_<y.length;_++)v(u,y[_]);if(S){let _=S.subTree;if(d===_||oi(_.type)&&(_.ssContent===d||_.ssFallback===d)){const I=S.vnode;re(u,I,I.scopeId,I.slotScopeIds,S.parent)}}},je=(u,d,m,y,S,_,I,T,P=0)=>{for(let R=P;R<u.length;R++){const V=u[R]=T?dt(u[R]):st(u[R]);w(null,V,d,m,y,S,_,I,T)}},Be=(u,d,m,y,S,_,I)=>{const T=d.el=u.el;let{patchFlag:P,dynamicChildren:R,dirs:V}=d;P|=u.patchFlag&16;const M=u.props||ie,j=d.props||ie;let B;if(m&&Pt(m,!1),(B=j.onVnodeBeforeUpdate)&&tt(B,m,d,u),V&&At(d,u,m,"beforeUpdate"),m&&Pt(m,!0),(M.innerHTML&&j.innerHTML==null||M.textContent&&j.textContent==null)&&c(T,""),R?De(u.dynamicChildren,R,T,m,y,ps(d,S),_):I||X(u,d,T,null,m,y,ps(d,S),_,!1),P>0){if(P&16)ze(T,M,j,m,S);else if(P&2&&M.class!==j.class&&r(T,"class",null,j.class,S),P&4&&r(T,"style",M.style,j.style,S),P&8){const Q=d.dynamicProps;for(let le=0;le<Q.length;le++){const ne=Q[le],Te=M[ne],Oe=j[ne];(Oe!==Te||ne==="value")&&r(T,ne,Te,Oe,S,m)}}P&1&&u.children!==d.children&&c(T,d.children)}else!I&&R==null&&ze(T,M,j,m,S);((B=j.onVnodeUpdated)||V)&&Ie(()=>{B&&tt(B,m,d,u),V&&At(d,u,m,"updated")},y)},De=(u,d,m,y,S,_,I)=>{for(let T=0;T<d.length;T++){const P=u[T],R=d[T],V=P.el&&(P.type===Me||!en(P,R)||P.shapeFlag&198)?p(P.el):m;w(P,R,V,null,y,S,_,I,!0)}},ze=(u,d,m,y,S)=>{if(d!==m){if(d!==ie)for(const _ in d)!sn(_)&&!(_ in m)&&r(u,_,d[_],null,S,y);for(const _ in m){if(sn(_))continue;const I=m[_],T=d[_];I!==T&&_!=="value"&&r(u,_,T,I,S,y)}"value"in m&&r(u,"value",d.value,m.value,S)}},Qe=(u,d,m,y,S,_,I,T,P)=>{const R=d.el=u?u.el:l(""),V=d.anchor=u?u.anchor:l("");let{patchFlag:M,dynamicChildren:j,slotScopeIds:B}=d;B&&(T=T?T.concat(B):B),u==null?(s(R,m,y),s(V,m,y),je(d.children||[],m,V,S,_,I,T,P)):M>0&&M&64&&j&&u.dynamicChildren&&u.dynamicChildren.length===j.length?(De(u.dynamicChildren,j,m,S,_,I,T),(d.key!=null||S&&d===S.subTree)&&ti(u,d,!0)):X(u,d,m,V,S,_,I,T,P)},k=(u,d,m,y,S,_,I,T,P)=>{d.slotScopeIds=T,u==null?d.shapeFlag&512?S.ctx.activate(d,m,y,I,P):L(d,m,y,S,_,I,P):K(u,d,P)},L=(u,d,m,y,S,_,I)=>{const T=u.component=_a(u,y,S);if(jr(u)&&(T.ctx.renderer=$),xa(T,!1,I),T.asyncDep){if(S&&S.registerDep(T,ue,I),!u.el){const P=T.subTree=fe(Rt);C(null,P,d,m),u.placeholder=P.el}}else ue(T,u,d,m,S,_,I)},K=(u,d,m)=>{const y=d.component=u.component;if(Zl(u,d,m))if(y.asyncDep&&!y.asyncResolved){oe(y,d,m);return}else y.next=d,y.update();else d.el=u.el,y.vnode=d},ue=(u,d,m,y,S,_,I)=>{const T=()=>{if(u.isMounted){let{next:M,bu:j,u:B,parent:Q,vnode:le}=u;{const Ze=ni(u);if(Ze){M&&(M.el=le.el,oe(u,M,I)),Ze.asyncDep.then(()=>{Ie(()=>{u.isUnmounted||R()},S)});return}}let ne=M,Te;Pt(u,!1),M?(M.el=le.el,oe(u,M,I)):M=le,j&&An(j),(Te=M.props&&M.props.onVnodeBeforeUpdate)&&tt(Te,Q,M,le),Pt(u,!0);const Oe=xo(u),Xe=u.subTree;u.subTree=Oe,w(Xe,Oe,p(Xe.el),b(Xe),u,S,_),M.el=Oe.el,ne===null&&ea(u,Oe.el),B&&Ie(B,S),(Te=M.props&&M.props.onVnodeUpdated)&&Ie(()=>tt(Te,Q,M,le),S)}else{let M;const{el:j,props:B}=d,{bm:Q,m:le,parent:ne,root:Te,type:Oe}=u,Xe=cn(d);Pt(u,!1),Q&&An(Q),!Xe&&(M=B&&B.onVnodeBeforeMount)&&tt(M,ne,d),Pt(u,!0);{Te.ce&&Te.ce._hasShadowRoot()&&Te.ce._injectChildStyle(Oe);const Ze=u.subTree=xo(u);w(null,Ze,m,y,u,S,_),d.el=Ze.el}if(le&&Ie(le,S),!Xe&&(M=B&&B.onVnodeMounted)){const Ze=d;Ie(()=>tt(M,ne,Ze),S)}(d.shapeFlag&256||ne&&cn(ne.vnode)&&ne.vnode.shapeFlag&256)&&u.a&&Ie(u.a,S),u.isMounted=!0,d=m=y=null}};u.scope.on();const P=u.effect=new pr(T);u.scope.off();const R=u.update=P.run.bind(P),V=u.job=P.runIfDirty.bind(P);V.i=u,V.id=u.uid,P.scheduler=()=>Qs(V),Pt(u,!0),R()},oe=(u,d,m)=>{d.component=u;const y=u.vnode.props;u.vnode=d,u.next=null,na(u,d.props,y,m),ia(u,d.children,m),gt(),po(u),mt()},X=(u,d,m,y,S,_,I,T,P=!1)=>{const R=u&&u.children,V=u?u.shapeFlag:0,M=d.children,{patchFlag:j,shapeFlag:B}=d;if(j>0){if(j&128){_t(R,M,m,y,S,_,I,T,P);return}else if(j&256){lt(R,M,m,y,S,_,I,T,P);return}}B&8?(V&16&&Ve(R,S,_),M!==R&&c(m,M)):V&16?B&16?_t(R,M,m,y,S,_,I,T,P):Ve(R,S,_,!0):(V&8&&c(m,""),B&16&&je(M,m,y,S,_,I,T,P))},lt=(u,d,m,y,S,_,I,T,P)=>{u=u||Ft,d=d||Ft;const R=u.length,V=d.length,M=Math.min(R,V);let j;for(j=0;j<M;j++){const B=d[j]=P?dt(d[j]):st(d[j]);w(u[j],B,m,null,S,_,I,T,P)}R>V?Ve(u,S,_,!0,!1,M):je(d,m,y,S,_,I,T,P,M)},_t=(u,d,m,y,S,_,I,T,P)=>{let R=0;const V=d.length;let M=u.length-1,j=V-1;for(;R<=M&&R<=j;){const B=u[R],Q=d[R]=P?dt(d[R]):st(d[R]);if(en(B,Q))w(B,Q,m,null,S,_,I,T,P);else break;R++}for(;R<=M&&R<=j;){const B=u[M],Q=d[j]=P?dt(d[j]):st(d[j]);if(en(B,Q))w(B,Q,m,null,S,_,I,T,P);else break;M--,j--}if(R>M){if(R<=j){const B=j+1,Q=B<V?d[B].el:y;for(;R<=j;)w(null,d[R]=P?dt(d[R]):st(d[R]),m,Q,S,_,I,T,P),R++}}else if(R>j)for(;R<=M;)Pe(u[R],S,_,!0),R++;else{const B=R,Q=R,le=new Map;for(R=Q;R<=j;R++){const Ue=d[R]=P?dt(d[R]):st(d[R]);Ue.key!=null&&le.set(Ue.key,R)}let ne,Te=0;const Oe=j-Q+1;let Xe=!1,Ze=0;const Xt=new Array(Oe);for(R=0;R<Oe;R++)Xt[R]=0;for(R=B;R<=M;R++){const Ue=u[R];if(Te>=Oe){Pe(Ue,S,_,!0);continue}let et;if(Ue.key!=null)et=le.get(Ue.key);else for(ne=Q;ne<=j;ne++)if(Xt[ne-Q]===0&&en(Ue,d[ne])){et=ne;break}et===void 0?Pe(Ue,S,_,!0):(Xt[et-Q]=R+1,et>=Ze?Ze=et:Xe=!0,w(Ue,d[et],m,null,S,_,I,T,P),Te++)}const ro=Xe?ua(Xt):Ft;for(ne=ro.length-1,R=Oe-1;R>=0;R--){const Ue=Q+R,et=d[Ue],io=d[Ue+1],lo=Ue+1<V?io.el||si(io):y;Xt[R]===0?w(null,et,m,lo,S,_,I,T,P):Xe&&(ne<0||R!==ro[ne]?Ye(et,m,lo,2):ne--)}}},Ye=(u,d,m,y,S=null)=>{const{el:_,type:I,transition:T,children:P,shapeFlag:R}=u;if(R&6){Ye(u.component.subTree,d,m,y);return}if(R&128){u.suspense.move(d,m,y);return}if(R&64){I.move(u,d,m,$);return}if(I===Me){s(_,d,m);for(let M=0;M<P.length;M++)Ye(P[M],d,m,y);s(u.anchor,d,m);return}if(I===Tn){A(u,d,m);return}if(y!==2&&R&1&&T)if(y===0)T.beforeEnter(_),s(_,d,m),Ie(()=>T.enter(_),S);else{const{leave:M,delayLeave:j,afterLeave:B}=T,Q=()=>{u.ctx.isUnmounted?o(_):s(_,d,m)},le=()=>{_._isLeaving&&_[Rl](!0),M(_,()=>{Q(),B&&B()})};j?j(_,Q,le):le()}else s(_,d,m)},Pe=(u,d,m,y=!1,S=!1)=>{const{type:_,props:I,ref:T,children:P,dynamicChildren:R,shapeFlag:V,patchFlag:M,dirs:j,cacheIndex:B}=u;if(M===-2&&(S=!1),T!=null&&(gt(),an(T,null,m,u,!0),mt()),B!=null&&(d.renderCache[B]=void 0),V&256){d.ctx.deactivate(u);return}const Q=V&1&&j,le=!cn(u);let ne;if(le&&(ne=I&&I.onVnodeBeforeUnmount)&&tt(ne,d,u),V&6)Ct(u.component,m,y);else{if(V&128){u.suspense.unmount(m,y);return}Q&&At(u,null,d,"beforeUnmount"),V&64?u.type.remove(u,d,m,$,y):R&&!R.hasOnce&&(_!==Me||M>0&&M&64)?Ve(R,d,m,!1,!0):(_===Me&&M&384||!S&&V&16)&&Ve(P,d,m),y&&kt(u)}(le&&(ne=I&&I.onVnodeUnmounted)||Q)&&Ie(()=>{ne&&tt(ne,d,u),Q&&At(u,null,d,"unmounted")},m)},kt=u=>{const{type:d,el:m,anchor:y,transition:S}=u;if(d===Me){$t(m,y);return}if(d===Tn){D(u);return}const _=()=>{o(m),S&&!S.persisted&&S.afterLeave&&S.afterLeave()};if(u.shapeFlag&1&&S&&!S.persisted){const{leave:I,delayLeave:T}=S,P=()=>I(m,_);T?T(u.el,_,P):P()}else _()},$t=(u,d)=>{let m;for(;u!==d;)m=g(u),o(u),u=m;o(d)},Ct=(u,d,m)=>{const{bum:y,scope:S,job:_,subTree:I,um:T,m:P,a:R}=u;wo(P),wo(R),y&&An(y),S.stop(),_&&(_.flags|=8,Pe(I,u,d,m)),T&&Ie(T,d),Ie(()=>{u.isUnmounted=!0},d)},Ve=(u,d,m,y=!1,S=!1,_=0)=>{for(let I=_;I<u.length;I++)Pe(u[I],d,m,y,S)},b=u=>{if(u.shapeFlag&6)return b(u.component.subTree);if(u.shapeFlag&128)return u.suspense.next();const d=g(u.anchor||u.el),m=d&&d[El];return m?g(m):d};let U=!1;const N=(u,d,m)=>{let y;u==null?d._vnode&&(Pe(d._vnode,null,null,!0),y=d._vnode.component):w(d._vnode||null,u,d,null,null,null,m),d._vnode=u,U||(U=!0,po(y),Nr(),U=!1)},$={p:w,um:Pe,m:Ye,r:kt,mt:L,mc:je,pc:X,pbc:De,n:b,o:e};return{render:N,hydrate:void 0,createApp:ql(N)}}function ps({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 Pt({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function ca(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function ti(e,t,n=!1){const s=e.children,o=t.children;if(H(s)&&H(o))for(let r=0;r<s.length;r++){const i=s[r];let l=o[r];l.shapeFlag&1&&!l.dynamicChildren&&((l.patchFlag<=0||l.patchFlag===32)&&(l=o[r]=dt(o[r]),l.el=i.el),!n&&l.patchFlag!==-2&&ti(i,l)),l.type===ts&&(l.patchFlag===-1&&(l=o[r]=dt(l)),l.el=i.el),l.type===Rt&&!l.el&&(l.el=i.el)}}function ua(e){const t=e.slice(),n=[0];let s,o,r,i,l;const a=e.length;for(s=0;s<a;s++){const f=e[s];if(f!==0){if(o=n[n.length-1],e[o]<f){t[s]=o,n.push(s);continue}for(r=0,i=n.length-1;r<i;)l=r+i>>1,e[n[l]]<f?r=l+1:i=l;f<e[n[r]]&&(r>0&&(t[s]=n[r-1]),n[r]=s)}}for(r=n.length,i=n[r-1];r-- >0;)n[r]=i,i=t[i];return n}function ni(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:ni(t)}function wo(e){if(e)for(let t=0;t<e.length;t++)e[t].flags|=8}function si(e){if(e.placeholder)return e.placeholder;const t=e.component;return t?si(t.subTree):null}const oi=e=>e.__isSuspense;function fa(e,t){t&&t.pendingBranch?H(e)?t.effects.push(...e):t.effects.push(e):_l(e)}const Me=Symbol.for("v-fgt"),ts=Symbol.for("v-txt"),Rt=Symbol.for("v-cmt"),Tn=Symbol.for("v-stc"),fn=[];let $e=null;function W(e=!1){fn.push($e=e?null:[])}function da(){fn.pop(),$e=fn[fn.length-1]||null}let mn=1;function Vn(e,t=!1){mn+=e,e<0&&$e&&t&&($e.hasOnce=!0)}function ri(e){return e.dynamicChildren=mn>0?$e||Ft:null,da(),mn>0&&$e&&$e.push(e),e}function q(e,t,n,s,o,r){return ri(h(e,t,n,s,o,r,!0))}function pa(e,t,n,s,o){return ri(fe(e,t,n,s,o,!0))}function Hn(e){return e?e.__v_isVNode===!0:!1}function en(e,t){return e.type===t.type&&e.key===t.key}const ii=({key:e})=>e??null,On=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?ge(e)||Se(e)||G(e)?{i:ke,r:e,k:t,f:!!n}:e:null);function h(e,t=null,n=null,s=0,o=null,r=e===Me?0:1,i=!1,l=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ii(t),ref:t&&On(t),scopeId:Dr,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:r,patchFlag:s,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:ke};return l?(eo(a,n),r&128&&e.normalize(a)):n&&(a.shapeFlag|=ge(n)?8:16),mn>0&&!i&&$e&&(a.patchFlag>0||r&6)&&a.patchFlag!==32&&$e.push(a),a}const fe=ha;function ha(e,t=null,n=null,s=0,o=null,r=!1){if((!e||e===$l)&&(e=Rt),Hn(e)){const l=Jt(e,t,!0);return n&&eo(l,n),mn>0&&!r&&$e&&(l.shapeFlag&6?$e[$e.indexOf(e)]=l:$e.push(l)),l.patchFlag=-2,l}if(Ca(e)&&(e=e.__vccOpts),t){t=ga(t);let{class:l,style:a}=t;l&&!ge(l)&&(t.class=Ce(l)),se(a)&&(Js(a)&&!H(a)&&(a=_e({},a)),t.style=Hs(a))}const i=ge(e)?1:oi(e)?128:wl(e)?64:se(e)?4:G(e)?2:0;return h(e,t,n,s,o,i,r,!0)}function ga(e){return e?Js(e)||zr(e)?_e({},e):e:null}function Jt(e,t,n=!1,s=!1){const{props:o,ref:r,patchFlag:i,children:l,transition:a}=e,f=t?ma(o||{},t):o,c={__v_isVNode:!0,__v_skip:!0,type:e.type,props:f,key:f&&ii(f),ref:t&&t.ref?n&&r?H(r)?r.concat(On(t)):[r,On(t)]:On(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Me?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:a,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Jt(e.ssContent),ssFallback:e.ssFallback&&Jt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return a&&s&&Ys(c,a.clone(c)),c}function Le(e=" ",t=0){return fe(ts,null,e,t)}function Ro(e,t){const n=fe(Tn,null,e);return n.staticCount=t,n}function he(e="",t=!1){return t?(W(),pa(Rt,null,e)):fe(Rt,null,e)}function st(e){return e==null||typeof e=="boolean"?fe(Rt):H(e)?fe(Me,null,e.slice()):Hn(e)?dt(e):fe(ts,null,String(e))}function dt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Jt(e)}function eo(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(H(t))n=16;else if(typeof t=="object")if(s&65){const o=t.default;o&&(o._c&&(o._d=!1),eo(e,o()),o._c&&(o._d=!0));return}else{n=32;const o=t._;!o&&!zr(t)?t._ctx=ke:o===3&&ke&&(ke.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else G(t)?(t={default:t,_ctx:ke},n=32):(t=String(t),s&64?(n=16,t=[Le(t)]):n=8);e.children=t,e.shapeFlag|=n}function ma(...e){const t={};for(let n=0;n<e.length;n++){const s=e[n];for(const o in s)if(o==="class")t.class!==s.class&&(t.class=Ce([t.class,s.class]));else if(o==="style")t.style=Hs([t.style,s.style]);else if(Gn(o)){const r=t[o],i=s[o];i&&r!==i&&!(H(r)&&r.includes(i))&&(t[o]=r?[].concat(r,i):i)}else o!==""&&(t[o]=s[o])}return t}function tt(e,t,n,s=null){it(e,t,7,[n,s])}const va=Kr();let ya=0;function _a(e,t,n){const s=e.type,o=(t?t.appContext:e.appContext)||va,r={uid:ya++,vnode:e,type:s,parent:t,appContext:o,root:null,next:null,subTree:null,effect:null,update:null,job:null,scope:new Bi(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:t?t.provides:Object.create(o.provides),ids:t?t.ids:["",0,0],accessCache:null,renderCache:[],components:null,directives:null,propsOptions:Yr(s,o),emitsOptions:Gr(s,o),emit:null,emitted:null,propsDefaults:ie,inheritAttrs:s.inheritAttrs,ctx:ie,data:ie,props:ie,attrs:ie,slots:ie,refs:ie,setupState:ie,setupContext:null,suspense:n,suspenseId:n?n.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};return r.ctx={_:r},r.root=t?t.root:r,r.emit=zl.bind(null,r),e.ce&&e.ce(r),r}let xe=null;const ba=()=>xe||ke;let Fn,Is;{const e=Qn(),t=(n,s)=>{let o;return(o=e[n])||(o=e[n]=[]),o.push(s),r=>{o.length>1?o.forEach(i=>i(r)):o[0](r)}};Fn=t("__VUE_INSTANCE_SETTERS__",n=>xe=n),Is=t("__VUE_SSR_SETTERS__",n=>vn=n)}const En=e=>{const t=xe;return Fn(e),e.scope.on(),()=>{e.scope.off(),Fn(t)}},Co=()=>{xe&&xe.scope.off(),Fn(null)};function li(e){return e.vnode.shapeFlag&4}let vn=!1;function xa(e,t=!1,n=!1){t&&Is(t);const{props:s,children:o}=e.vnode,r=li(e);ta(e,s,r,t),ra(e,o,n||t);const i=r?Sa(e,t):void 0;return t&&Is(!1),i}function Sa(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Vl);const{setup:s}=n;if(s){gt();const o=e.setupContext=s.length>1?wa(e):null,r=En(e),i=Sn(s,e,0,[e.props,o]),l=ir(i);if(mt(),r(),(l||e.sp)&&!cn(e)&&$r(e),l){if(i.then(Co,Co),t)return i.then(a=>{Ao(e,a)}).catch(a=>{Xn(a,e,0)});e.asyncDep=i}else Ao(e,i)}else ai(e)}function Ao(e,t,n){G(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:se(t)&&(e.setupState=Tr(t)),ai(e)}function ai(e,t,n){const s=e.type;e.render||(e.render=s.render||ot);{const o=En(e);gt();try{Hl(e)}finally{mt(),o()}}}const Ea={get(e,t){return be(e,"get",""),e[t]}};function wa(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Ea),slots:e.slots,emit:e.emit,expose:t}}function ns(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Tr(cl(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in un)return un[n](e)},has(t,n){return n in t||n in un}})):e.proxy}function Ra(e,t=!0){return G(e)?e.displayName||e.name:e.name||t&&e.__name}function Ca(e){return G(e)&&"__vccOpts"in e}const ve=(e,t)=>hl(e,t,vn);function ci(e,t,n){try{Vn(-1);const s=arguments.length;return s===2?se(t)&&!H(t)?Hn(t)?fe(e,null,[t]):fe(e,t):fe(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&Hn(n)&&(n=[n]),fe(e,t,n))}finally{Vn(1)}}const Aa="3.5.29";/**
14
+ * @vue/runtime-dom v3.5.29
15
+ * (c) 2018-present Yuxi (Evan) You and Vue contributors
16
+ * @license MIT
17
+ **/let Ns;const Po=typeof window<"u"&&window.trustedTypes;if(Po)try{Ns=Po.createPolicy("vue",{createHTML:e=>e})}catch{}const ui=Ns?e=>Ns.createHTML(e):e=>e,Pa="http://www.w3.org/2000/svg",Ta="http://www.w3.org/1998/Math/MathML",ut=typeof document<"u"?document:null,To=ut&&ut.createElement("template"),Oa={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const o=t==="svg"?ut.createElementNS(Pa,e):t==="mathml"?ut.createElementNS(Ta,e):n?ut.createElement(e,{is:n}):ut.createElement(e);return e==="select"&&s&&s.multiple!=null&&o.setAttribute("multiple",s.multiple),o},createText:e=>ut.createTextNode(e),createComment:e=>ut.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>ut.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,o,r){const i=n?n.previousSibling:t.lastChild;if(o&&(o===r||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===r||!(o=o.nextSibling)););else{To.innerHTML=ui(s==="svg"?`<svg>${e}</svg>`:s==="mathml"?`<math>${e}</math>`:e);const l=To.content;if(s==="svg"||s==="mathml"){const a=l.firstChild;for(;a.firstChild;)l.appendChild(a.firstChild);l.removeChild(a)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Ia=Symbol("_vtc");function Na(e,t,n){const s=e[Ia];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Oo=Symbol("_vod"),Ma=Symbol("_vsh"),Da=Symbol(""),Ua=/(?:^|;)\s*display\s*:/;function La(e,t,n){const s=e.style,o=ge(n);let r=!1;if(n&&!o){if(t)if(ge(t))for(const i of t.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&In(s,l,"")}else for(const i in t)n[i]==null&&In(s,i,"");for(const i in n)i==="display"&&(r=!0),In(s,i,n[i])}else if(o){if(t!==n){const i=s[Da];i&&(n+=";"+i),s.cssText=n,r=Ua.test(n)}}else t&&e.removeAttribute("style");Oo in e&&(e[Oo]=r?s.display:"",e[Ma]&&(s.display="none"))}const Io=/\s*!important$/;function In(e,t,n){if(H(n))n.forEach(s=>In(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=ka(e,t);Io.test(n)?e.setProperty(Ut(s),n.replace(Io,""),"important"):e[s]=n}}const No=["Webkit","Moz","ms"],hs={};function ka(e,t){const n=hs[t];if(n)return n;let s=Fe(t);if(s!=="filter"&&s in e)return hs[t]=s;s=Jn(s);for(let o=0;o<No.length;o++){const r=No[o]+s;if(r in e)return hs[t]=r}return t}const Mo="http://www.w3.org/1999/xlink";function Do(e,t,n,s,o,r=Vi(t)){s&&t.startsWith("xlink:")?n==null?e.removeAttributeNS(Mo,t.slice(6,t.length)):e.setAttributeNS(Mo,t,n):n==null||r&&!ur(n)?e.removeAttribute(t):e.setAttribute(t,r?"":rt(n)?String(n):n)}function Uo(e,t,n,s,o){if(t==="innerHTML"||t==="textContent"){n!=null&&(e[t]=t==="innerHTML"?ui(n):n);return}const r=e.tagName;if(t==="value"&&r!=="PROGRESS"&&!r.includes("-")){const l=r==="OPTION"?e.getAttribute("value")||"":e.value,a=n==null?e.type==="checkbox"?"on":"":String(n);(l!==a||!("_value"in e))&&(e.value=a),n==null&&e.removeAttribute(t),e._value=n;return}let i=!1;if(n===""||n==null){const l=typeof e[t];l==="boolean"?n=ur(n):n==null&&l==="string"?(n="",i=!0):l==="number"&&(n=0,i=!0)}try{e[t]=n}catch{}i&&e.removeAttribute(o||t)}function Ot(e,t,n,s){e.addEventListener(t,n,s)}function $a(e,t,n,s){e.removeEventListener(t,n,s)}const Lo=Symbol("_vei");function ja(e,t,n,s,o=null){const r=e[Lo]||(e[Lo]={}),i=r[t];if(s&&i)i.value=s;else{const[l,a]=Va(t);if(s){const f=r[t]=Ba(s,o);Ot(e,l,f,a)}else i&&($a(e,l,i,a),r[t]=void 0)}}const ko=/(?:Once|Passive|Capture)$/;function Va(e){let t;if(ko.test(e)){t={};let s;for(;s=e.match(ko);)e=e.slice(0,e.length-s[0].length),t[s[0].toLowerCase()]=!0}return[e[2]===":"?e.slice(3):Ut(e.slice(2)),t]}let gs=0;const Ha=Promise.resolve(),Fa=()=>gs||(Ha.then(()=>gs=0),gs=Date.now());function Ba(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;it(Ka(s,n.value),t,5,[s])};return n.value=e,n.attached=Fa(),n}function Ka(e,t){if(H(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>o=>!o._stopped&&s&&s(o))}else return t}const $o=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Ga=(e,t,n,s,o,r)=>{const i=o==="svg";t==="class"?Na(e,s,i):t==="style"?La(e,n,s):Gn(t)?$s(t)||ja(e,t,n,s,r):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Wa(e,t,s,i))?(Uo(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Do(e,t,s,i,r,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!ge(s))?Uo(e,Fe(t),s,r,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Do(e,t,s,i))};function Wa(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&$o(t)&&G(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const o=e.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")return!1}return $o(t)&&ge(n)?!1:t in e}const Bn=e=>{const t=e.props["onUpdate:modelValue"]||!1;return H(t)?n=>An(t,n):t};function qa(e){e.target.composing=!0}function jo(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Wt=Symbol("_assign");function Vo(e,t,n){return t&&(e=e.trim()),n&&(e=zn(e)),e}const We={created(e,{modifiers:{lazy:t,trim:n,number:s}},o){e[Wt]=Bn(o);const r=s||o.props&&o.props.type==="number";Ot(e,t?"change":"input",i=>{i.target.composing||e[Wt](Vo(e.value,n,r))}),(n||r)&&Ot(e,"change",()=>{e.value=Vo(e.value,n,r)}),t||(Ot(e,"compositionstart",qa),Ot(e,"compositionend",jo),Ot(e,"change",jo))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:o,number:r}},i){if(e[Wt]=Bn(i),e.composing)return;const l=(r||e.type==="number")&&!/^0\d/.test(e.value)?zn(e.value):e.value,a=t??"";l!==a&&(document.activeElement===e&&e.type!=="range"&&(s&&t===n||o&&e.value.trim()===a)||(e.value=a))}},Nn={deep:!0,created(e,{value:t,modifiers:{number:n}},s){const o=Wn(t);Ot(e,"change",()=>{const r=Array.prototype.filter.call(e.options,i=>i.selected).map(i=>n?zn(Kn(i)):Kn(i));e[Wt](e.multiple?o?new Set(r):r:r[0]),e._assigning=!0,zs(()=>{e._assigning=!1})}),e[Wt]=Bn(s)},mounted(e,{value:t}){Ho(e,t)},beforeUpdate(e,t,n){e[Wt]=Bn(n)},updated(e,{value:t}){e._assigning||Ho(e,t)}};function Ho(e,t){const n=e.multiple,s=H(t);if(!(n&&!s&&!Wn(t))){for(let o=0,r=e.options.length;o<r;o++){const i=e.options[o],l=Kn(i);if(n)if(s){const a=typeof l;a==="string"||a==="number"?i.selected=t.some(f=>String(f)===String(l)):i.selected=Fi(t,l)>-1}else i.selected=t.has(l);else if(bn(Kn(i),t)){e.selectedIndex!==o&&(e.selectedIndex=o);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function Kn(e){return"_value"in e?e._value:e.value}const Ja=["ctrl","shift","alt","meta"],za={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)=>Ja.some(n=>e[`${n}Key`]&&!t.includes(n))},ss=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(o,...r)=>{for(let i=0;i<t.length;i++){const l=za[t[i]];if(l&&l(o,t))return}return e(o,...r)})},Qa=_e({patchProp:Ga},Oa);let Fo;function Ya(){return Fo||(Fo=la(Qa))}const Xa=(...e)=>{const t=Ya().createApp(...e),{mount:n}=t;return t.mount=s=>{const o=ec(s);if(!o)return;const r=t._component;!G(r)&&!r.render&&!r.template&&(r.template=o.innerHTML),o.nodeType===1&&(o.textContent="");const i=n(o,!1,Za(o));return o instanceof Element&&(o.removeAttribute("v-cloak"),o.setAttribute("data-v-app","")),i},t};function Za(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function ec(e){return ge(e)?document.querySelector(e):e}/*!
18
+ * vue-router v4.6.4
19
+ * (c) 2025 Eduardo San Martin Morote
20
+ * @license MIT
21
+ */const Ht=typeof document<"u";function fi(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function tc(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&fi(e.default)}const Z=Object.assign;function ms(e,t){const n={};for(const s in t){const o=t[s];n[s]=Je(o)?o.map(e):e(o)}return n}const dn=()=>{},Je=Array.isArray;function Bo(e,t){const n={};for(const s in e)n[s]=s in t?t[s]:e[s];return n}const di=/#/g,nc=/&/g,sc=/\//g,oc=/=/g,rc=/\?/g,pi=/\+/g,ic=/%5B/g,lc=/%5D/g,hi=/%5E/g,ac=/%60/g,gi=/%7B/g,cc=/%7C/g,mi=/%7D/g,uc=/%20/g;function to(e){return e==null?"":encodeURI(""+e).replace(cc,"|").replace(ic,"[").replace(lc,"]")}function fc(e){return to(e).replace(gi,"{").replace(mi,"}").replace(hi,"^")}function Ms(e){return to(e).replace(pi,"%2B").replace(uc,"+").replace(di,"%23").replace(nc,"%26").replace(ac,"`").replace(gi,"{").replace(mi,"}").replace(hi,"^")}function dc(e){return Ms(e).replace(oc,"%3D")}function pc(e){return to(e).replace(di,"%23").replace(rc,"%3F")}function hc(e){return pc(e).replace(sc,"%2F")}function yn(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const gc=/\/$/,mc=e=>e.replace(gc,"");function vs(e,t,n="/"){let s,o={},r="",i="";const l=t.indexOf("#");let a=t.indexOf("?");return a=l>=0&&a>l?-1:a,a>=0&&(s=t.slice(0,a),r=t.slice(a,l>0?l:t.length),o=e(r.slice(1))),l>=0&&(s=s||t.slice(0,l),i=t.slice(l,t.length)),s=bc(s??t,n),{fullPath:s+r+i,path:s,query:o,hash:yn(i)}}function vc(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Ko(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function yc(e,t,n){const s=t.matched.length-1,o=n.matched.length-1;return s>-1&&s===o&&zt(t.matched[s],n.matched[o])&&vi(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function zt(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function vi(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!_c(e[n],t[n]))return!1;return!0}function _c(e,t){return Je(e)?Go(e,t):Je(t)?Go(t,e):(e==null?void 0:e.valueOf())===(t==null?void 0:t.valueOf())}function Go(e,t){return Je(t)?e.length===t.length&&e.every((n,s)=>n===t[s]):e.length===1&&e[0]===t}function bc(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),s=e.split("/"),o=s[s.length-1];(o===".."||o===".")&&s.push("");let r=n.length-1,i,l;for(i=0;i<s.length;i++)if(l=s[i],l!==".")if(l==="..")r>1&&r--;else break;return n.slice(0,r).join("/")+"/"+s.slice(i).join("/")}const bt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let Ds=function(e){return e.pop="pop",e.push="push",e}({}),ys=function(e){return e.back="back",e.forward="forward",e.unknown="",e}({});function xc(e){if(!e)if(Ht){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),mc(e)}const Sc=/^[^#]+#/;function Ec(e,t){return e.replace(Sc,"#")+t}function wc(e,t){const n=document.documentElement.getBoundingClientRect(),s=e.getBoundingClientRect();return{behavior:t.behavior,left:s.left-n.left-(t.left||0),top:s.top-n.top-(t.top||0)}}const os=()=>({left:window.scrollX,top:window.scrollY});function Rc(e){let t;if("el"in e){const n=e.el,s=typeof n=="string"&&n.startsWith("#"),o=typeof n=="string"?s?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!o)return;t=wc(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function Wo(e,t){return(history.state?history.state.position-t:-1)+e}const Us=new Map;function Cc(e,t){Us.set(e,t)}function Ac(e){const t=Us.get(e);return Us.delete(e),t}function Pc(e){return typeof e=="string"||e&&typeof e=="object"}function yi(e){return typeof e=="string"||typeof e=="symbol"}let de=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}({});const _i=Symbol("");de.MATCHER_NOT_FOUND+"",de.NAVIGATION_GUARD_REDIRECT+"",de.NAVIGATION_ABORTED+"",de.NAVIGATION_CANCELLED+"",de.NAVIGATION_DUPLICATED+"";function Qt(e,t){return Z(new Error,{type:e,[_i]:!0},t)}function ct(e,t){return e instanceof Error&&_i in e&&(t==null||!!(e.type&t))}const Tc=["params","query","hash"];function Oc(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const n of Tc)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}function Ic(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let s=0;s<n.length;++s){const o=n[s].replace(pi," "),r=o.indexOf("="),i=yn(r<0?o:o.slice(0,r)),l=r<0?null:yn(o.slice(r+1));if(i in t){let a=t[i];Je(a)||(a=t[i]=[a]),a.push(l)}else t[i]=l}return t}function qo(e){let t="";for(let n in e){const s=e[n];if(n=dc(n),s==null){s!==void 0&&(t+=(t.length?"&":"")+n);continue}(Je(s)?s.map(o=>o&&Ms(o)):[s&&Ms(s)]).forEach(o=>{o!==void 0&&(t+=(t.length?"&":"")+n,o!=null&&(t+="="+o))})}return t}function Nc(e){const t={};for(const n in e){const s=e[n];s!==void 0&&(t[n]=Je(s)?s.map(o=>o==null?null:""+o):s==null?s:""+s)}return t}const Mc=Symbol(""),Jo=Symbol(""),rs=Symbol(""),no=Symbol(""),Ls=Symbol("");function tn(){let e=[];function t(s){return e.push(s),()=>{const o=e.indexOf(s);o>-1&&e.splice(o,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Et(e,t,n,s,o,r=i=>i()){const i=s&&(s.enterCallbacks[o]=s.enterCallbacks[o]||[]);return()=>new Promise((l,a)=>{const f=g=>{g===!1?a(Qt(de.NAVIGATION_ABORTED,{from:n,to:t})):g instanceof Error?a(g):Pc(g)?a(Qt(de.NAVIGATION_GUARD_REDIRECT,{from:t,to:g})):(i&&s.enterCallbacks[o]===i&&typeof g=="function"&&i.push(g),l())},c=r(()=>e.call(s&&s.instances[o],t,n,f));let p=Promise.resolve(c);e.length<3&&(p=p.then(f)),p.catch(g=>a(g))})}function _s(e,t,n,s,o=r=>r()){const r=[];for(const i of e)for(const l in i.components){let a=i.components[l];if(!(t!=="beforeRouteEnter"&&!i.instances[l]))if(fi(a)){const f=(a.__vccOpts||a)[t];f&&r.push(Et(f,n,s,i,l,o))}else{let f=a();r.push(()=>f.then(c=>{if(!c)throw new Error(`Couldn't resolve component "${l}" at "${i.path}"`);const p=tc(c)?c.default:c;i.mods[l]=c,i.components[l]=p;const g=(p.__vccOpts||p)[t];return g&&Et(g,n,s,i,l,o)()}))}}return r}function Dc(e,t){const n=[],s=[],o=[],r=Math.max(t.matched.length,e.matched.length);for(let i=0;i<r;i++){const l=t.matched[i];l&&(e.matched.find(f=>zt(f,l))?s.push(l):n.push(l));const a=e.matched[i];a&&(t.matched.find(f=>zt(f,a))||o.push(a))}return[n,s,o]}/*!
22
+ * vue-router v4.6.4
23
+ * (c) 2025 Eduardo San Martin Morote
24
+ * @license MIT
25
+ */let Uc=()=>location.protocol+"//"+location.host;function bi(e,t){const{pathname:n,search:s,hash:o}=t,r=e.indexOf("#");if(r>-1){let i=o.includes(e.slice(r))?e.slice(r).length:1,l=o.slice(i);return l[0]!=="/"&&(l="/"+l),Ko(l,"")}return Ko(n,e)+s+o}function Lc(e,t,n,s){let o=[],r=[],i=null;const l=({state:g})=>{const v=bi(e,location),O=n.value,w=t.value;let E=0;if(g){if(n.value=v,t.value=g,i&&i===O){i=null;return}E=w?g.position-w.position:0}else s(v);o.forEach(C=>{C(n.value,O,{delta:E,type:Ds.pop,direction:E?E>0?ys.forward:ys.back:ys.unknown})})};function a(){i=n.value}function f(g){o.push(g);const v=()=>{const O=o.indexOf(g);O>-1&&o.splice(O,1)};return r.push(v),v}function c(){if(document.visibilityState==="hidden"){const{history:g}=window;if(!g.state)return;g.replaceState(Z({},g.state,{scroll:os()}),"")}}function p(){for(const g of r)g();r=[],window.removeEventListener("popstate",l),window.removeEventListener("pagehide",c),document.removeEventListener("visibilitychange",c)}return window.addEventListener("popstate",l),window.addEventListener("pagehide",c),document.addEventListener("visibilitychange",c),{pauseListeners:a,listen:f,destroy:p}}function zo(e,t,n,s=!1,o=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:o?os():null}}function kc(e){const{history:t,location:n}=window,s={value:bi(e,n)},o={value:t.state};o.value||r(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function r(a,f,c){const p=e.indexOf("#"),g=p>-1?(n.host&&document.querySelector("base")?e:e.slice(p))+a:Uc()+e+a;try{t[c?"replaceState":"pushState"](f,"",g),o.value=f}catch(v){console.error(v),n[c?"replace":"assign"](g)}}function i(a,f){r(a,Z({},t.state,zo(o.value.back,a,o.value.forward,!0),f,{position:o.value.position}),!0),s.value=a}function l(a,f){const c=Z({},o.value,t.state,{forward:a,scroll:os()});r(c.current,c,!0),r(a,Z({},zo(s.value,a,null),{position:c.position+1},f),!1),s.value=a}return{location:s,state:o,push:l,replace:i}}function $c(e){e=xc(e);const t=kc(e),n=Lc(e,t.state,t.location,t.replace);function s(r,i=!0){i||n.pauseListeners(),history.go(r)}const o=Z({location:"",base:e,go:s,createHref:Ec.bind(null,e)},t,n);return Object.defineProperty(o,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(o,"state",{enumerable:!0,get:()=>t.state.value}),o}let It=function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e}({});var me=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}(me||{});const jc={type:It.Static,value:""},Vc=/[a-zA-Z0-9_]/;function Hc(e){if(!e)return[[]];if(e==="/")return[[jc]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(v){throw new Error(`ERR (${n})/"${f}": ${v}`)}let n=me.Static,s=n;const o=[];let r;function i(){r&&o.push(r),r=[]}let l=0,a,f="",c="";function p(){f&&(n===me.Static?r.push({type:It.Static,value:f}):n===me.Param||n===me.ParamRegExp||n===me.ParamRegExpEnd?(r.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${f}) must be alone in its segment. eg: '/:ids+.`),r.push({type:It.Param,value:f,regexp:c,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),f="")}function g(){f+=a}for(;l<e.length;){if(a=e[l++],a==="\\"&&n!==me.ParamRegExp){s=n,n=me.EscapeNext;continue}switch(n){case me.Static:a==="/"?(f&&p(),i()):a===":"?(p(),n=me.Param):g();break;case me.EscapeNext:g(),n=s;break;case me.Param:a==="("?n=me.ParamRegExp:Vc.test(a)?g():(p(),n=me.Static,a!=="*"&&a!=="?"&&a!=="+"&&l--);break;case me.ParamRegExp:a===")"?c[c.length-1]=="\\"?c=c.slice(0,-1)+a:n=me.ParamRegExpEnd:c+=a;break;case me.ParamRegExpEnd:p(),n=me.Static,a!=="*"&&a!=="?"&&a!=="+"&&l--,c="";break;default:t("Unknown state");break}}return n===me.ParamRegExp&&t(`Unfinished custom RegExp for param "${f}"`),p(),i(),o}const Qo="[^/]+?",Fc={sensitive:!1,strict:!1,start:!0,end:!0};var we=function(e){return e[e._multiplier=10]="_multiplier",e[e.Root=90]="Root",e[e.Segment=40]="Segment",e[e.SubSegment=30]="SubSegment",e[e.Static=40]="Static",e[e.Dynamic=20]="Dynamic",e[e.BonusCustomRegExp=10]="BonusCustomRegExp",e[e.BonusWildcard=-50]="BonusWildcard",e[e.BonusRepeatable=-20]="BonusRepeatable",e[e.BonusOptional=-8]="BonusOptional",e[e.BonusStrict=.7000000000000001]="BonusStrict",e[e.BonusCaseSensitive=.25]="BonusCaseSensitive",e}(we||{});const Bc=/[.+*?^${}()[\]/\\]/g;function Kc(e,t){const n=Z({},Fc,t),s=[];let o=n.start?"^":"";const r=[];for(const f of e){const c=f.length?[]:[we.Root];n.strict&&!f.length&&(o+="/");for(let p=0;p<f.length;p++){const g=f[p];let v=we.Segment+(n.sensitive?we.BonusCaseSensitive:0);if(g.type===It.Static)p||(o+="/"),o+=g.value.replace(Bc,"\\$&"),v+=we.Static;else if(g.type===It.Param){const{value:O,repeatable:w,optional:E,regexp:C}=g;r.push({name:O,repeatable:w,optional:E});const x=C||Qo;if(x!==Qo){v+=we.BonusCustomRegExp;try{`${x}`}catch(D){throw new Error(`Invalid custom RegExp for param "${O}" (${x}): `+D.message)}}let A=w?`((?:${x})(?:/(?:${x}))*)`:`(${x})`;p||(A=E&&f.length<2?`(?:/${A})`:"/"+A),E&&(A+="?"),o+=A,v+=we.Dynamic,E&&(v+=we.BonusOptional),w&&(v+=we.BonusRepeatable),x===".*"&&(v+=we.BonusWildcard)}c.push(v)}s.push(c)}if(n.strict&&n.end){const f=s.length-1;s[f][s[f].length-1]+=we.BonusStrict}n.strict||(o+="/?"),n.end?o+="$":n.strict&&!o.endsWith("/")&&(o+="(?:/|$)");const i=new RegExp(o,n.sensitive?"":"i");function l(f){const c=f.match(i),p={};if(!c)return null;for(let g=1;g<c.length;g++){const v=c[g]||"",O=r[g-1];p[O.name]=v&&O.repeatable?v.split("/"):v}return p}function a(f){let c="",p=!1;for(const g of e){(!p||!c.endsWith("/"))&&(c+="/"),p=!1;for(const v of g)if(v.type===It.Static)c+=v.value;else if(v.type===It.Param){const{value:O,repeatable:w,optional:E}=v,C=O in f?f[O]:"";if(Je(C)&&!w)throw new Error(`Provided param "${O}" is an array but it is not repeatable (* or + modifiers)`);const x=Je(C)?C.join("/"):C;if(!x)if(E)g.length<2&&(c.endsWith("/")?c=c.slice(0,-1):p=!0);else throw new Error(`Missing required param "${O}"`);c+=x}}return c||"/"}return{re:i,score:s,keys:r,parse:l,stringify:a}}function Gc(e,t){let n=0;for(;n<e.length&&n<t.length;){const s=t[n]-e[n];if(s)return s;n++}return e.length<t.length?e.length===1&&e[0]===we.Static+we.Segment?-1:1:e.length>t.length?t.length===1&&t[0]===we.Static+we.Segment?1:-1:0}function xi(e,t){let n=0;const s=e.score,o=t.score;for(;n<s.length&&n<o.length;){const r=Gc(s[n],o[n]);if(r)return r;n++}if(Math.abs(o.length-s.length)===1){if(Yo(s))return 1;if(Yo(o))return-1}return o.length-s.length}function Yo(e){const t=e[e.length-1];return e.length>0&&t[t.length-1]<0}const Wc={strict:!1,end:!0,sensitive:!1};function qc(e,t,n){const s=Kc(Hc(e.path),n),o=Z(s,{record:e,parent:t,children:[],alias:[]});return t&&!o.record.aliasOf==!t.record.aliasOf&&t.children.push(o),o}function Jc(e,t){const n=[],s=new Map;t=Bo(Wc,t);function o(p){return s.get(p)}function r(p,g,v){const O=!v,w=Zo(p);w.aliasOf=v&&v.record;const E=Bo(t,p),C=[w];if("alias"in p){const D=typeof p.alias=="string"?[p.alias]:p.alias;for(const F of D)C.push(Zo(Z({},w,{components:v?v.record.components:w.components,path:F,aliasOf:v?v.record:w})))}let x,A;for(const D of C){const{path:F}=D;if(g&&F[0]!=="/"){const ce=g.record.path,re=ce[ce.length-1]==="/"?"":"/";D.path=g.record.path+(F&&re+F)}if(x=qc(D,g,E),v?v.alias.push(x):(A=A||x,A!==x&&A.alias.push(x),O&&p.name&&!er(x)&&i(p.name)),Si(x)&&a(x),w.children){const ce=w.children;for(let re=0;re<ce.length;re++)r(ce[re],x,v&&v.children[re])}v=v||x}return A?()=>{i(A)}:dn}function i(p){if(yi(p)){const g=s.get(p);g&&(s.delete(p),n.splice(n.indexOf(g),1),g.children.forEach(i),g.alias.forEach(i))}else{const g=n.indexOf(p);g>-1&&(n.splice(g,1),p.record.name&&s.delete(p.record.name),p.children.forEach(i),p.alias.forEach(i))}}function l(){return n}function a(p){const g=Yc(p,n);n.splice(g,0,p),p.record.name&&!er(p)&&s.set(p.record.name,p)}function f(p,g){let v,O={},w,E;if("name"in p&&p.name){if(v=s.get(p.name),!v)throw Qt(de.MATCHER_NOT_FOUND,{location:p});E=v.record.name,O=Z(Xo(g.params,v.keys.filter(A=>!A.optional).concat(v.parent?v.parent.keys.filter(A=>A.optional):[]).map(A=>A.name)),p.params&&Xo(p.params,v.keys.map(A=>A.name))),w=v.stringify(O)}else if(p.path!=null)w=p.path,v=n.find(A=>A.re.test(w)),v&&(O=v.parse(w),E=v.record.name);else{if(v=g.name?s.get(g.name):n.find(A=>A.re.test(g.path)),!v)throw Qt(de.MATCHER_NOT_FOUND,{location:p,currentLocation:g});E=v.record.name,O=Z({},g.params,p.params),w=v.stringify(O)}const C=[];let x=v;for(;x;)C.unshift(x.record),x=x.parent;return{name:E,path:w,params:O,matched:C,meta:Qc(C)}}e.forEach(p=>r(p));function c(){n.length=0,s.clear()}return{addRoute:r,resolve:f,removeRoute:i,clearRoutes:c,getRoutes:l,getRecordMatcher:o}}function Xo(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function Zo(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:zc(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 zc(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="object"?n[s]:n;return t}function er(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Qc(e){return e.reduce((t,n)=>Z(t,n.meta),{})}function Yc(e,t){let n=0,s=t.length;for(;n!==s;){const r=n+s>>1;xi(e,t[r])<0?s=r:n=r+1}const o=Xc(e);return o&&(s=t.lastIndexOf(o,s-1)),s}function Xc(e){let t=e;for(;t=t.parent;)if(Si(t)&&xi(e,t)===0)return t}function Si({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function tr(e){const t=Ge(rs),n=Ge(no),s=ve(()=>{const a=Dt(e.to);return t.resolve(a)}),o=ve(()=>{const{matched:a}=s.value,{length:f}=a,c=a[f-1],p=n.matched;if(!c||!p.length)return-1;const g=p.findIndex(zt.bind(null,c));if(g>-1)return g;const v=nr(a[f-2]);return f>1&&nr(c)===v&&p[p.length-1].path!==v?p.findIndex(zt.bind(null,a[f-2])):g}),r=ve(()=>o.value>-1&&su(n.params,s.value.params)),i=ve(()=>o.value>-1&&o.value===n.matched.length-1&&vi(n.params,s.value.params));function l(a={}){if(nu(a)){const f=t[Dt(e.replace)?"replace":"push"](Dt(e.to)).catch(dn);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>f),f}return Promise.resolve()}return{route:s,href:ve(()=>s.value.href),isActive:r,isExactActive:i,navigate:l}}function Zc(e){return e.length===1?e[0]:e}const eu=kr({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:tr,setup(e,{slots:t}){const n=xn(tr(e)),{options:s}=Ge(rs),o=ve(()=>({[sr(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[sr(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const r=t.default&&Zc(t.default(n));return e.custom?r:ci("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:o.value},r)}}}),tu=eu;function nu(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){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function su(e,t){for(const n in t){const s=t[n],o=e[n];if(typeof s=="string"){if(s!==o)return!1}else if(!Je(o)||o.length!==s.length||s.some((r,i)=>r.valueOf()!==o[i].valueOf()))return!1}return!0}function nr(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const sr=(e,t,n)=>e??t??n,ou=kr({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=Ge(Ls),o=ve(()=>e.route||s.value),r=Ge(Jo,0),i=ve(()=>{let f=Dt(r);const{matched:c}=o.value;let p;for(;(p=c[f])&&!p.components;)f++;return f}),l=ve(()=>o.value.matched[i.value]);Pn(Jo,ve(()=>i.value+1)),Pn(Mc,l),Pn(Ls,o);const a=Y();return ln(()=>[a.value,l.value,e.name],([f,c,p],[g,v,O])=>{c&&(c.instances[p]=f,v&&v!==c&&f&&f===g&&(c.leaveGuards.size||(c.leaveGuards=v.leaveGuards),c.updateGuards.size||(c.updateGuards=v.updateGuards))),f&&c&&(!v||!zt(c,v)||!g)&&(c.enterCallbacks[p]||[]).forEach(w=>w(f))},{flush:"post"}),()=>{const f=o.value,c=e.name,p=l.value,g=p&&p.components[c];if(!g)return or(n.default,{Component:g,route:f});const v=p.props[c],O=v?v===!0?f.params:typeof v=="function"?v(f):v:null,E=ci(g,Z({},O,t,{onVnodeUnmounted:C=>{C.component.isUnmounted&&(p.instances[c]=null)},ref:a}));return or(n.default,{Component:E,route:f})||E}}});function or(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const ru=ou;function iu(e){const t=Jc(e.routes,e),n=e.parseQuery||Ic,s=e.stringifyQuery||qo,o=e.history,r=tn(),i=tn(),l=tn(),a=ul(bt);let f=bt;Ht&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const c=ms.bind(null,b=>""+b),p=ms.bind(null,hc),g=ms.bind(null,yn);function v(b,U){let N,$;return yi(b)?(N=t.getRecordMatcher(b),$=U):$=b,t.addRoute($,N)}function O(b){const U=t.getRecordMatcher(b);U&&t.removeRoute(U)}function w(){return t.getRoutes().map(b=>b.record)}function E(b){return!!t.getRecordMatcher(b)}function C(b,U){if(U=Z({},U||a.value),typeof b=="string"){const m=vs(n,b,U.path),y=t.resolve({path:m.path},U),S=o.createHref(m.fullPath);return Z(m,y,{params:g(y.params),hash:yn(m.hash),redirectedFrom:void 0,href:S})}let N;if(b.path!=null)N=Z({},b,{path:vs(n,b.path,U.path).path});else{const m=Z({},b.params);for(const y in m)m[y]==null&&delete m[y];N=Z({},b,{params:p(m)}),U.params=p(U.params)}const $=t.resolve(N,U),z=b.hash||"";$.params=c(g($.params));const u=vc(s,Z({},b,{hash:fc(z),path:$.path})),d=o.createHref(u);return Z({fullPath:u,hash:z,query:s===qo?Nc(b.query):b.query||{}},$,{redirectedFrom:void 0,href:d})}function x(b){return typeof b=="string"?vs(n,b,a.value.path):Z({},b)}function A(b,U){if(f!==b)return Qt(de.NAVIGATION_CANCELLED,{from:U,to:b})}function D(b){return re(b)}function F(b){return D(Z(x(b),{replace:!0}))}function ce(b,U){const N=b.matched[b.matched.length-1];if(N&&N.redirect){const{redirect:$}=N;let z=typeof $=="function"?$(b,U):$;return typeof z=="string"&&(z=z.includes("?")||z.includes("#")?z=x(z):{path:z},z.params={}),Z({query:b.query,hash:b.hash,params:z.path!=null?{}:b.params},z)}}function re(b,U){const N=f=C(b),$=a.value,z=b.state,u=b.force,d=b.replace===!0,m=ce(N,$);if(m)return re(Z(x(m),{state:typeof m=="object"?Z({},z,m.state):z,force:u,replace:d}),U||N);const y=N;y.redirectedFrom=U;let S;return!u&&yc(s,$,N)&&(S=Qt(de.NAVIGATION_DUPLICATED,{to:y,from:$}),Ye($,$,!0,!1)),(S?Promise.resolve(S):De(y,$)).catch(_=>ct(_)?ct(_,de.NAVIGATION_GUARD_REDIRECT)?_:_t(_):X(_,y,$)).then(_=>{if(_){if(ct(_,de.NAVIGATION_GUARD_REDIRECT))return re(Z({replace:d},x(_.to),{state:typeof _.to=="object"?Z({},z,_.to.state):z,force:u}),U||y)}else _=Qe(y,$,!0,d,z);return ze(y,$,_),_})}function je(b,U){const N=A(b,U);return N?Promise.reject(N):Promise.resolve()}function Be(b){const U=$t.values().next().value;return U&&typeof U.runWithContext=="function"?U.runWithContext(b):b()}function De(b,U){let N;const[$,z,u]=Dc(b,U);N=_s($.reverse(),"beforeRouteLeave",b,U);for(const m of $)m.leaveGuards.forEach(y=>{N.push(Et(y,b,U))});const d=je.bind(null,b,U);return N.push(d),Ve(N).then(()=>{N=[];for(const m of r.list())N.push(Et(m,b,U));return N.push(d),Ve(N)}).then(()=>{N=_s(z,"beforeRouteUpdate",b,U);for(const m of z)m.updateGuards.forEach(y=>{N.push(Et(y,b,U))});return N.push(d),Ve(N)}).then(()=>{N=[];for(const m of u)if(m.beforeEnter)if(Je(m.beforeEnter))for(const y of m.beforeEnter)N.push(Et(y,b,U));else N.push(Et(m.beforeEnter,b,U));return N.push(d),Ve(N)}).then(()=>(b.matched.forEach(m=>m.enterCallbacks={}),N=_s(u,"beforeRouteEnter",b,U,Be),N.push(d),Ve(N))).then(()=>{N=[];for(const m of i.list())N.push(Et(m,b,U));return N.push(d),Ve(N)}).catch(m=>ct(m,de.NAVIGATION_CANCELLED)?m:Promise.reject(m))}function ze(b,U,N){l.list().forEach($=>Be(()=>$(b,U,N)))}function Qe(b,U,N,$,z){const u=A(b,U);if(u)return u;const d=U===bt,m=Ht?history.state:{};N&&($||d?o.replace(b.fullPath,Z({scroll:d&&m&&m.scroll},z)):o.push(b.fullPath,z)),a.value=b,Ye(b,U,N,d),_t()}let k;function L(){k||(k=o.listen((b,U,N)=>{if(!Ct.listening)return;const $=C(b),z=ce($,Ct.currentRoute.value);if(z){re(Z(z,{replace:!0,force:!0}),$).catch(dn);return}f=$;const u=a.value;Ht&&Cc(Wo(u.fullPath,N.delta),os()),De($,u).catch(d=>ct(d,de.NAVIGATION_ABORTED|de.NAVIGATION_CANCELLED)?d:ct(d,de.NAVIGATION_GUARD_REDIRECT)?(re(Z(x(d.to),{force:!0}),$).then(m=>{ct(m,de.NAVIGATION_ABORTED|de.NAVIGATION_DUPLICATED)&&!N.delta&&N.type===Ds.pop&&o.go(-1,!1)}).catch(dn),Promise.reject()):(N.delta&&o.go(-N.delta,!1),X(d,$,u))).then(d=>{d=d||Qe($,u,!1),d&&(N.delta&&!ct(d,de.NAVIGATION_CANCELLED)?o.go(-N.delta,!1):N.type===Ds.pop&&ct(d,de.NAVIGATION_ABORTED|de.NAVIGATION_DUPLICATED)&&o.go(-1,!1)),ze($,u,d)}).catch(dn)}))}let K=tn(),ue=tn(),oe;function X(b,U,N){_t(b);const $=ue.list();return $.length?$.forEach(z=>z(b,U,N)):console.error(b),Promise.reject(b)}function lt(){return oe&&a.value!==bt?Promise.resolve():new Promise((b,U)=>{K.add([b,U])})}function _t(b){return oe||(oe=!b,L(),K.list().forEach(([U,N])=>b?N(b):U()),K.reset()),b}function Ye(b,U,N,$){const{scrollBehavior:z}=e;if(!Ht||!z)return Promise.resolve();const u=!N&&Ac(Wo(b.fullPath,0))||($||!N)&&history.state&&history.state.scroll||null;return zs().then(()=>z(b,U,u)).then(d=>d&&Rc(d)).catch(d=>X(d,b,U))}const Pe=b=>o.go(b);let kt;const $t=new Set,Ct={currentRoute:a,listening:!0,addRoute:v,removeRoute:O,clearRoutes:t.clearRoutes,hasRoute:E,getRoutes:w,resolve:C,options:e,push:D,replace:F,go:Pe,back:()=>Pe(-1),forward:()=>Pe(1),beforeEach:r.add,beforeResolve:i.add,afterEach:l.add,onError:ue.add,isReady:lt,install(b){b.component("RouterLink",tu),b.component("RouterView",ru),b.config.globalProperties.$router=Ct,Object.defineProperty(b.config.globalProperties,"$route",{enumerable:!0,get:()=>Dt(a)}),Ht&&!kt&&a.value===bt&&(kt=!0,D(o.location).catch($=>{}));const U={};for(const $ in bt)Object.defineProperty(U,$,{get:()=>a.value[$],enumerable:!0});b.provide(rs,Ct),b.provide(no,Ar(U)),b.provide(Ls,a);const N=b.unmount;$t.add(b),b.unmount=function(){$t.delete(b),$t.size<1&&(f=bt,k&&k(),k=null,a.value=bt,kt=!1,oe=!1),N()}}};function Ve(b){return b.reduce((U,N)=>U.then(()=>Be(N)),Promise.resolve())}return Ct}function is(){return Ge(rs)}function Ei(e){return Ge(no)}const ye=xn({mode:null,user:null,remoteBaseUrl:"",token:""});function so(){return Mn(ye)}function oo(e){ye.mode=e,typeof localStorage<"u"&&localStorage.setItem("pac_proxy_mode",e)}function wi(){if(typeof localStorage<"u"){const e=localStorage.getItem("pac_proxy_mode");(e==="local"||e==="remote")&&(ye.mode=e);const t=localStorage.getItem("pac_proxy_token");t&&(ye.token=t);const n=localStorage.getItem("pac_proxy_remote_base_url");if(n&&typeof n=="string"&&(ye.remoteBaseUrl=n),ye.mode==="remote"&&ye.token)try{const s=JSON.parse(atob(ye.token.split(".")[1]));ye.user={username:s.username}}catch{}}return ye.mode}function Ri(e){ye.user=e}function Ci(e){ye.remoteBaseUrl=e||"",typeof localStorage<"u"&&(e?localStorage.setItem("pac_proxy_remote_base_url",e):localStorage.removeItem("pac_proxy_remote_base_url"))}function Ai(e){ye.token=e,typeof localStorage<"u"&&(e?localStorage.setItem("pac_proxy_token",e):localStorage.removeItem("pac_proxy_token"))}function lu(){return ye.token||typeof localStorage<"u"&&localStorage.getItem("pac_proxy_token")}function au(){ye.token="",ye.user=null,ye.remoteBaseUrl="",ye.mode=null,typeof localStorage<"u"&&(localStorage.removeItem("pac_proxy_token"),localStorage.removeItem("pac_proxy_mode"),localStorage.removeItem("pac_proxy_remote_base_url"))}const cu=()=>{const e=lu(),t={"Content-Type":"application/json"};return e&&(t.Authorization="Bearer "+e),t};async function pe(e,t={}){const n=await fetch("/api/local"+e,{...t,headers:{"Content-Type":"application/json",...t.headers}});if(!n.ok)throw new Error((await n.json().catch(()=>({}))).error||n.statusText);return n.json()}async function bs(e,t,n={}){const s=(e||"").trim().replace(/\/$/,"");if(!s)throw new Error("未配置远程服务器地址。请在 packages/node-cli/.env 中配置 REMOTE_SERVER_URL(填 node-server 的地址,例如 http://127.0.0.1:3000),重启 node-cli 后重新登录。");const o=s+"/api"+t,r=await fetch(o,{...n,headers:{...cu(),...n.headers}});if(!r.ok)throw new Error((await r.json().catch(()=>({}))).error||r.statusText);return r.json()}function Pi(e,t){const n={getProxy:()=>pe("/proxy"),setProxy:s=>pe("/proxy",{method:"PUT",body:JSON.stringify(s)})};return e==="local"?{...n,getPacRules:()=>pe("/pac-rules"),setPacRules:s=>pe("/pac-rules",{method:"PUT",body:JSON.stringify(s)}),getConfig:()=>pe("/config")}:{...n,getPacRules:()=>bs(t,"/pac-rules"),setPacRules:async s=>{await bs(t,"/pac-rules",{method:"PUT",body:JSON.stringify(s)}),await pe("/pac-rules",{method:"PUT",body:JSON.stringify(s)})},getConfig:()=>bs(t,"/config")}}const Lt=(e,t)=>{const n=e.__vccOpts||e;for(const[s,o]of t)n[s]=o;return n},uu={class:"app-layout"},fu={key:0,class:"topbar"},du={class:"top-nav"},pu={key:0,class:"top-right"},hu={class:"username"},gu={key:1,class:"sidebar"},mu={class:"side-nav"},vu={__name:"App",setup(e){const t=Ei(),n=is(),s=so(),o=ve(()=>s.mode||"local"),r=ve(()=>o.value==="remote"),i=ve(()=>s.user),l=ve(()=>o.value==="local"?"本地模式":"远程模式"),a=ve(()=>t.path!=="/"),f=ve(()=>t.path!=="/"&&!t.path.startsWith("/login")&&!t.path.startsWith("/register")),c=ve(()=>t.path==="/"||t.path.startsWith("/login")||t.path.startsWith("/register"));async function p(){try{const g=await pe("/config");await pe("/config",{method:"PUT",body:JSON.stringify({...g,mode:"local"})})}catch{}au(),n.push("/")}return(g,v)=>{const O=$n("router-link"),w=$n("router-view");return W(),q("div",uu,[a.value?(W(),q("header",fu,[v[3]||(v[3]=h("span",{class:"logo"},"PAC 代理控制台",-1)),h("span",{class:Ce(["mode-tag",o.value])},J(l.value),3),fe(O,{to:"/",class:"switch-mode"},{default:ft(()=>[...v[0]||(v[0]=[Le("切换模式",-1)])]),_:1}),h("nav",du,[fe(O,{to:"/"},{default:ft(()=>[...v[1]||(v[1]=[Le("首页",-1)])]),_:1}),fe(O,{to:"/console"},{default:ft(()=>[...v[2]||(v[2]=[Le("控制台",-1)])]),_:1})]),r.value&&i.value?(W(),q("div",pu,[h("span",hu,J(i.value.username),1),h("button",{type:"button",class:"logout-btn",onClick:p},"退出登录")])):he("",!0)])):he("",!0),f.value?(W(),q("aside",gu,[h("nav",mu,[fe(O,{to:"/console/proxy","active-class":"active"},{default:ft(()=>[...v[4]||(v[4]=[Le("代理设置",-1)])]),_:1}),fe(O,{to:"/console/pac-rules","active-class":"active"},{default:ft(()=>[...v[5]||(v[5]=[Le("PAC 规则",-1)])]),_:1}),fe(O,{to:"/console/traffic","active-class":"active"},{default:ft(()=>[...v[6]||(v[6]=[Le("流量记录",-1)])]),_:1})])])):he("",!0),h("main",{class:Ce(["main",{"main-standalone":c.value}])},[fe(w)],2)])}}},yu=Lt(vu,[["__scopeId","data-v-e7869e57"]]),_u={class:"mode-select"},bu={class:"card"},xu={class:"options"},Su={__name:"ModeSelect",setup(e){const t=is();async function n(s){if(oo(s),s==="local"){try{const o=await pe("/config");await pe("/config",{method:"PUT",body:JSON.stringify({...o,mode:"local"})})}catch{}t.push("/console")}else t.push("/login")}return(s,o)=>(W(),q("div",_u,[h("div",bu,[o[4]||(o[4]=h("h1",null,"选择运行模式",-1)),o[5]||(o[5]=h("p",{class:"desc"},"请选择控制台使用方式,选择后可随时在设置中切换。",-1)),h("div",xu,[h("button",{class:"option local",onClick:o[0]||(o[0]=r=>n("local"))},[...o[2]||(o[2]=[h("span",{class:"title"},"本地模式",-1),h("span",{class:"sub"},"无需登录,配置保存在本机,由 node-cli 维护",-1)])]),h("button",{class:"option remote",onClick:o[1]||(o[1]=r=>n("remote"))},[...o[3]||(o[3]=[h("span",{class:"title"},"远程模式",-1),h("span",{class:"sub"},"需注册/登录,配置与数据保存在云端",-1)])])])])]))}},Eu=Lt(Su,[["__scopeId","data-v-b465f762"]]),wu={class:"auth-page"},Ru={class:"card"},Cu={class:"field"},Au={class:"field"},Pu={key:0,class:"error"},Tu=["disabled"],Ou={class:"footer"},Iu={__name:"Login",setup(e){const t=is(),n=Y(""),s=Y(""),o=Y(""),r=Y(""),i=Y(!1);Yt(async()=>{try{const a=await fetch("/api/local/remote-server-url"),{url:f}=await a.json();n.value=f||""}catch{n.value=""}});async function l(){if(r.value="",!n.value){r.value="请在 node-cli 目录下的 .env 中配置 REMOTE_SERVER_URL";return}i.value=!0;try{const a=n.value.replace(/\/$/,""),f=await fetch(a+"/api/auth/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:s.value,password:o.value})}),c=await f.json().catch(()=>({}));if(!f.ok)throw new Error(c.error||"登录失败");oo("remote"),Ci(a),Ai(c.token),Ri(c.user||{username:s.value});try{const p=await pe("/config");await pe("/config",{method:"PUT",body:JSON.stringify({...p,mode:"remote"})});const g=await fetch(a+"/api/pac-rules",{headers:{Authorization:"Bearer "+c.token}}).then(v=>v.json()).catch(()=>[]);Array.isArray(g)&&await pe("/pac-rules",{method:"PUT",body:JSON.stringify(g)})}catch{}t.push("/console")}catch(a){r.value=a.message}finally{i.value=!1}}return(a,f)=>{const c=$n("router-link");return W(),q("div",wu,[h("div",Ru,[f[6]||(f[6]=h("h1",null,"登录",-1)),f[7]||(f[7]=h("p",{class:"desc"},"远程模式需登录后使用云端配置。",-1)),h("form",{onSubmit:ss(l,["prevent"]),class:"form"},[h("div",Cu,[f[2]||(f[2]=h("label",null,"用户名",-1)),Ae(h("input",{"onUpdate:modelValue":f[0]||(f[0]=p=>s.value=p),type:"text",required:""},null,512),[[We,s.value]])]),h("div",Au,[f[3]||(f[3]=h("label",null,"密码",-1)),Ae(h("input",{"onUpdate:modelValue":f[1]||(f[1]=p=>o.value=p),type:"password",required:""},null,512),[[We,o.value]])]),r.value?(W(),q("p",Pu,J(r.value),1)):he("",!0),h("button",{type:"submit",class:"btn primary",disabled:i.value},"登录",8,Tu)],32),h("p",Ou,[f[5]||(f[5]=Le("还没有账号? ",-1)),fe(c,{to:"/register"},{default:ft(()=>[...f[4]||(f[4]=[Le("注册",-1)])]),_:1})])])])}}},Nu=Lt(Iu,[["__scopeId","data-v-be60da76"]]),Mu={class:"auth-page"},Du={class:"card"},Uu={class:"field"},Lu={class:"field"},ku={key:0,class:"error"},$u={key:1,class:"success"},ju=["disabled"],Vu={class:"footer"},Hu={__name:"Register",setup(e){const t=is(),n=Y(""),s=Y(""),o=Y(""),r=Y(""),i=Y(""),l=Y(!1);Yt(async()=>{try{const f=await fetch("/api/local/remote-server-url"),{url:c}=await f.json();n.value=c||""}catch{n.value=""}});async function a(){if(r.value="",i.value="",!n.value){r.value="请在 node-cli 目录下的 .env 中配置 REMOTE_SERVER_URL";return}l.value=!0;try{const f=n.value.replace(/\/$/,""),c=await fetch(f+"/api/auth/register",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:s.value,password:o.value})}),p=await c.json().catch(()=>({}));if(!c.ok)throw new Error(p.error||"注册失败");i.value="注册成功,正在自动登录…";const g=await fetch(f+"/api/auth/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:s.value,password:o.value})}),v=await g.json().catch(()=>({}));if(!g.ok)throw new Error(v.error||"自动登录失败");oo("remote"),Ci(f),Ai(v.token),Ri(v.user||{username:s.value}),i.value="注册成功,已自动登录";try{const O=await pe("/config");await pe("/config",{method:"PUT",body:JSON.stringify({...O,mode:"remote"})});const w=await fetch(f+"/api/pac-rules",{headers:{Authorization:"Bearer "+v.token}}).then(E=>E.json()).catch(()=>[]);Array.isArray(w)&&await pe("/pac-rules",{method:"PUT",body:JSON.stringify(w)})}catch{}t.push("/console")}catch(f){r.value=f.message}finally{l.value=!1}}return(f,c)=>{const p=$n("router-link");return W(),q("div",Mu,[h("div",Du,[c[6]||(c[6]=h("h1",null,"注册",-1)),c[7]||(c[7]=h("p",{class:"desc"},"注册后可在远程模式下同步配置。",-1)),h("form",{onSubmit:ss(a,["prevent"]),class:"form"},[h("div",Uu,[c[2]||(c[2]=h("label",null,"用户名",-1)),Ae(h("input",{"onUpdate:modelValue":c[0]||(c[0]=g=>s.value=g),type:"text",required:""},null,512),[[We,s.value]])]),h("div",Lu,[c[3]||(c[3]=h("label",null,"密码",-1)),Ae(h("input",{"onUpdate:modelValue":c[1]||(c[1]=g=>o.value=g),type:"password",required:""},null,512),[[We,o.value]])]),r.value?(W(),q("p",ku,J(r.value),1)):he("",!0),i.value?(W(),q("p",$u,J(i.value),1)):he("",!0),h("button",{type:"submit",class:"btn primary",disabled:l.value},"注册",8,ju)],32),h("p",Vu,[c[5]||(c[5]=Le("已有账号? ",-1)),fe(p,{to:"/login"},{default:ft(()=>[...c[4]||(c[4]=[Le("登录",-1)])]),_:1})])])])}}},Fu=Lt(Hu,[["__scopeId","data-v-a1c8458c"]]),Bu={class:"proxy-settings"},Ku={class:"card"},Gu={class:"proxy-buttons"},Wu=["disabled"],qu=["disabled"],Ju=["disabled"],zu=["disabled"],Qu={key:0,class:"saved-tip"},Yu={key:1,class:"ca-download"},Xu={class:"card"},Zu={class:"field"},ef={class:"row"},tf={class:"field"},nf={class:"field"},sf={class:"actions"},of=["disabled"],rf={key:0,class:"card status-card"},lf={class:"status-line"},af={key:0,class:"status-port"},cf={key:0,class:"hint"},uf={key:1,class:"hint error"},ff={key:2,class:"hint"},df={key:3,class:"hint"},pf="/api/local/ca-cert",hf={__name:"ProxySettings",setup(e){const t=so();function n(){return Pi(t.mode,t.remoteBaseUrl)}async function s(){return pe("/proxy")}async function o(w){return pe("/proxy",{method:"PUT",body:JSON.stringify(w)})}const r=Y({enabled:!1,mode:"pac",upstream:"socks5://127.0.0.1:1080",httpPort:5175,httpsPort:5176,applySystemProxy:!0}),i=Y(!1),l=Y(null),a=Y(!1);let f=null;async function c(){try{const w=await fetch("/api/local/proxy-status");l.value=await w.json()}catch{l.value={running:!1,port:null}}}function p(){a.value=!0,f&&clearTimeout(f),f=setTimeout(()=>{a.value=!1},2e3)}function g(){return{enabled:!!r.value.enabled,mode:r.value.mode||"pac",upstream:String(r.value.upstream??"").trim(),httpPort:Number(r.value.httpPort)||5175,httpsPort:Number(r.value.httpsPort)||5176,applySystemProxy:r.value.applySystemProxy!==!1}}async function v(w){if(!i.value){w==="clear"?(r.value.enabled=!1,r.value.applySystemProxy=!0):(r.value.enabled=!0,r.value.mode=w,r.value.applySystemProxy=!0),i.value=!0;try{const E=g();if(await o(E),t.mode==="remote")try{const C=await n().getPacRules();await pe("/pac-rules",{method:"PUT",body:JSON.stringify(C)})}catch{}await c(),p()}catch{}finally{i.value=!1}}}Yt(async()=>{try{const w=await s();if(r.value={...r.value,...w},t.mode==="remote")try{const E=await n().getPacRules();await pe("/pac-rules",{method:"PUT",body:JSON.stringify(E)})}catch{}await c()}catch{}});async function O(){i.value=!0;try{const w=g();if(await o(w),t.mode==="remote")try{const C=await n().getPacRules();await pe("/pac-rules",{method:"PUT",body:JSON.stringify(C)})}catch{}await c();const E=Number(w.httpPort)||5175;w.enabled?w.applySystemProxy?alert(`已保存,并已尝试自动设置系统代理(127.0.0.1:${E})。`):alert(`已保存。请将系统或浏览器代理设置为 127.0.0.1:${E}。`):alert("已保存")}catch(w){alert("保存失败:"+w.message)}finally{i.value=!1}}return(w,E)=>(W(),q("div",Bu,[E[19]||(E[19]=h("h2",null,"代理设置",-1)),E[20]||(E[20]=h("p",{class:"page-desc"},"代理配置仅保存在本机,与本地/远程模式无关。",-1)),h("div",Ku,[E[9]||(E[9]=h("h3",null,"代理模式",-1)),E[10]||(E[10]=h("p",{class:"desc"},"一键设置本机系统代理或清除(支持 macOS、Windows、Linux GNOME)。",-1)),h("div",Gu,[h("button",{class:Ce(["btn proxy-btn",{active:r.value.enabled&&r.value.mode==="global"}]),onClick:E[0]||(E[0]=C=>v("global")),disabled:i.value,type:"button"}," 全局代理 ",10,Wu),h("button",{class:Ce(["btn proxy-btn",{active:r.value.enabled&&r.value.mode==="pac"}]),onClick:E[1]||(E[1]=C=>v("pac")),disabled:i.value,type:"button"}," PAC 代理 ",10,qu),h("button",{class:Ce(["btn proxy-btn",{active:r.value.enabled&&r.value.mode==="mitm"}]),onClick:E[2]||(E[2]=C=>v("mitm")),disabled:i.value,type:"button"}," 抓包代理 ",10,Ju),h("button",{class:Ce(["btn proxy-btn clear",{active:!r.value.enabled}]),onClick:E[3]||(E[3]=C=>v("clear")),disabled:i.value,type:"button"}," 清除代理设置 ",10,zu)]),a.value?(W(),q("p",Qu,"已生效")):he("",!0),r.value.enabled&&r.value.mode==="mitm"?(W(),q("div",Yu,[E[7]||(E[7]=h("span",{class:"ca-label"},"CA 证书(用于解密 HTTPS,需安装到系统/浏览器信任):",-1)),h("a",{class:"btn btn-ca",href:pf,download:"pac-proxy-ca.crt",target:"_blank",rel:"noopener"},"下载 CA 证书"),E[8]||(E[8]=h("p",{class:"ca-hint"},"仅限本机抓包使用,请勿安装到他人设备或生产环境。",-1))])):he("",!0)]),h("div",Xu,[E[14]||(E[14]=h("h3",null,"上游代理与端口",-1)),E[15]||(E[15]=h("p",{class:"desc"},"上游代理地址(如 SOCKS5:socks5://127.0.0.1:1080、 http://proxy.xxxx.com)。本地模式下可将 SOCKS5 转为 HTTP 代理并根据规则执行策略。",-1)),h("div",Zu,[E[11]||(E[11]=h("label",null,"上游代理地址",-1)),Ae(h("input",{"onUpdate:modelValue":E[4]||(E[4]=C=>r.value.upstream=C),placeholder:"socks5://127.0.0.1:1080"},null,512),[[We,r.value.upstream]])]),h("div",ef,[h("div",tf,[E[12]||(E[12]=h("label",null,"HTTP 代理端口",-1)),Ae(h("input",{"onUpdate:modelValue":E[5]||(E[5]=C=>r.value.httpPort=C),type:"number",min:"1",max:"65535"},null,512),[[We,r.value.httpPort,void 0,{number:!0}]])]),h("div",nf,[E[13]||(E[13]=h("label",null,"HTTPS 代理端口",-1)),Ae(h("input",{"onUpdate:modelValue":E[6]||(E[6]=C=>r.value.httpsPort=C),type:"number",min:"1",max:"65535"},null,512),[[We,r.value.httpsPort,void 0,{number:!0}]])])]),h("div",sf,[h("button",{class:"btn primary",onClick:O,disabled:i.value},"保存设置",8,of)])]),l.value!==null?(W(),q("div",rf,[E[18]||(E[18]=h("h3",null,"代理状态",-1)),h("p",lf,[h("span",{class:Ce(l.value.running?"status-on":"status-off")},J(l.value.running?"运行中":"已关闭"),3),l.value.running?(W(),q("span",af,"端口 "+J(l.value.port),1)):he("",!0)]),l.value.running&&r.value.applySystemProxy&&l.value.systemProxyOk!==!1?(W(),q("p",cf," 已尝试自动设置"+J(r.value.mode==="pac"?" PAC 代理":r.value.mode==="mitm"?"抓包代理":"系统代理")+"(127.0.0.1:"+J(l.value.port)+")。若未生效请检查终端或下方提示。 ",1)):l.value.running&&r.value.applySystemProxy&&l.value.systemProxyError?(W(),q("p",uf," 自动设置系统代理失败:"+J(l.value.systemProxyError)+" 请手动在「系统设置 → 网络 → 代理」中设置,或关闭「自动设置系统代理」。 ",1)):l.value.running?(W(),q("p",ff,[E[16]||(E[16]=Le(" 请将系统或浏览器的 HTTP/HTTPS 代理设置为 ",-1)),h("strong",null,"127.0.0.1:"+J(l.value.port),1),E[17]||(E[17]=Le(",代理才会生效。 ",-1))])):r.value.enabled?(W(),q("p",df," 保存后若仍显示已关闭,请查看终端是否有「代理服务已启动」或端口占用报错。 ")):he("",!0)])):he("",!0)]))}},gf=Lt(hf,[["__scopeId","data-v-9e948823"]]),mf={class:"pac-rules"},vf={key:0,class:"page-desc"},yf={class:"card"},_f={class:"actions top"},bf=["disabled"],xf=["disabled"],Sf={key:0,class:"copy-tip"},Ef={class:"table"},wf=["onClick"],Rf=["onClick"],Cf={key:0},Af={class:"modal-content"},Pf={class:"field"},Tf={class:"field"},Of={class:"field"},If={class:"modal-actions"},Nf=["disabled"],Mf={__name:"PacRules",setup(e){const t=so();function n(){return Pi(t.mode,t.remoteBaseUrl)}const s=Y([]),o=Y(null),r=Y({pattern:"",action:"proxy",priority:0}),i=Y(!1),l=Y(!1),a=ve(()=>[...s.value].sort((C,x)=>(x.priority??0)-(C.priority??0)));Yt(f);async function f(){try{if(s.value=await n().getPacRules(),Array.isArray(s.value)||(s.value=[]),t.mode==="remote")try{await pe("/pac-rules",{method:"PUT",body:JSON.stringify(s.value)})}catch{}}catch{s.value=[]}}function c(C=null){C?r.value={id:C.id,pattern:C.pattern,action:C.action||"proxy",priority:C.priority??0}:r.value={pattern:"",action:"proxy",priority:0},o.value=!0}async function p(){const{id:C,pattern:x,action:A,priority:D}=r.value;if(!x.trim()){alert("请填写 URL 匹配字符");return}i.value=!0;try{let F=[...s.value];if(C){const ce=F.findIndex(re=>re.id===C);ce>=0&&(F[ce]={...F[ce],pattern:x.trim(),action:A,priority:D})}else F.push({id:String(Date.now()),pattern:x.trim(),action:A||"proxy",priority:Number(D)||0});await n().setPacRules(F),s.value=F,o.value=null}catch(F){alert("保存失败:"+F.message)}finally{i.value=!1}}async function g(C){if(!confirm("确定删除该规则?"))return;const x=s.value.filter(A=>A.id!==C.id);try{await n().setPacRules(x),s.value=x}catch(A){alert("删除失败:"+A.message)}}function v(){return JSON.stringify(s.value,null,2)}function O(){return s.value.map(C=>(C.pattern||"").trim()).filter(Boolean).join(`
26
+ `)}async function w(){if(s.value.length)try{await navigator.clipboard.writeText(O()),l.value=!0,setTimeout(()=>{l.value=!1},1500)}catch(C){alert("复制失败:"+C.message)}}function E(){if(!s.value.length)return;const C=new Blob([v()],{type:"application/json"}),x=URL.createObjectURL(C),A=document.createElement("a");A.href=x,A.download=`pac-rules-${new Date().toISOString().slice(0,10)}.json`,A.click(),URL.revokeObjectURL(x)}return(C,x)=>(W(),q("div",mf,[x[13]||(x[13]=h("h2",null,"PAC 规则",-1)),Dt(t).mode==="remote"?(W(),q("p",vf,"远程模式下规则保存在云端,PAC 模式时由本机按云端规则执行。")):he("",!0),h("div",yf,[x[8]||(x[8]=h("p",{class:"desc"},"管理 PAC 代理的匹配规则。按优先级从高到低匹配,命中后选择「代理」或「直连」。",-1)),h("div",_f,[h("button",{class:"btn primary",onClick:x[0]||(x[0]=A=>c())},"新增规则"),h("button",{class:"btn",onClick:w,disabled:!s.value.length},"复制",8,bf),h("button",{class:"btn",onClick:E,disabled:!s.value.length},"导出",8,xf),l.value?(W(),q("span",Sf,"已复制到剪贴板")):he("",!0)]),h("table",Ef,[x[7]||(x[7]=h("thead",null,[h("tr",null,[h("th",null,"URL 匹配字符"),h("th",null,"动作"),h("th",null,"优先级"),h("th",null,"操作")])],-1)),h("tbody",null,[(W(!0),q(Me,null,Cs(a.value,A=>(W(),q("tr",{key:A.id},[h("td",null,J(A.pattern),1),h("td",null,J(A.action==="proxy"?"代理":"直连"),1),h("td",null,J(A.priority),1),h("td",null,[h("button",{class:"btn small",onClick:D=>c(A)},"编辑",8,wf),h("button",{class:"btn small danger",onClick:D=>g(A)},"删除",8,Rf)])]))),128)),s.value.length?he("",!0):(W(),q("tr",Cf,[...x[6]||(x[6]=[h("td",{colspan:"4",class:"empty"},"暂无规则,请点击「新增规则」",-1)])]))])])]),o.value?(W(),q("div",{key:1,class:"modal",onClick:x[5]||(x[5]=ss(A=>o.value=null,["self"]))},[h("div",Af,[h("h3",null,J(o.value.id?"编辑规则":"新增规则"),1),h("div",Pf,[x[9]||(x[9]=h("label",null,"URL 匹配字符",-1)),Ae(h("input",{"onUpdate:modelValue":x[1]||(x[1]=A=>r.value.pattern=A),placeholder:"例如 *.google.com"},null,512),[[We,r.value.pattern]])]),h("div",Tf,[x[11]||(x[11]=h("label",null,"动作",-1)),Ae(h("select",{"onUpdate:modelValue":x[2]||(x[2]=A=>r.value.action=A)},[...x[10]||(x[10]=[h("option",{value:"proxy"},"代理",-1),h("option",{value:"direct"},"直连",-1)])],512),[[Nn,r.value.action]])]),h("div",Of,[x[12]||(x[12]=h("label",null,"优先级(数字越大越优先)",-1)),Ae(h("input",{"onUpdate:modelValue":x[3]||(x[3]=A=>r.value.priority=A),type:"number"},null,512),[[We,r.value.priority,void 0,{number:!0}]])]),h("div",If,[h("button",{class:"btn",onClick:x[4]||(x[4]=A=>o.value=null)},"取消"),h("button",{class:"btn primary",onClick:p,disabled:i.value},"保存",8,Nf)])])])):he("",!0)]))}},Df=Lt(Mf,[["__scopeId","data-v-22317bbc"]]),Uf={class:"traffic-page"},Lf={class:"page-desc"},kf={key:0,class:"card"},$f={class:"actions top"},jf=["disabled"],Vf={class:"table"},Hf={class:"url-cell"},Ff={key:0},Bf={key:1,class:"card capture-card"},Kf={class:"toolbar"},Gf=["title"],Wf=["disabled"],qf={class:"table-wrap"},Jf={class:"table capture-table"},zf=["onClick"],Qf=["title"],Yf=["onClick"],Xf={key:0},Zf={key:0,class:"pagination"},ed={class:"pagination-info"},td=["disabled"],nd=["disabled"],sd={key:3,class:"drawer"},od={class:"drawer-tabs"},rd={class:"drawer-body"},id={class:"drawer-url-section"},ld={class:"drawer-url-head"},ad={class:"drawer-method-tag"},cd={class:"drawer-url"},ud={class:"detail-section"},fd={class:"headers-pre"},dd={class:"detail-section"},pd={class:"body-pre"},hd={class:"detail-section"},gd={class:"headers-pre"},md={class:"detail-section"},vd={class:"body-pre"},xs=50,yd={__name:"Traffic",setup(e){const t=Y([]),n=Y(!1),s=Y(!1),o=Y(!1),r=Y([]),i=Y(0),l=Y(0),a=Y({q:"",method:"",status:"",type:"",sort:"time",order:"desc"});let f=null;const c=Y(null),p=Y("request"),g=Y(!1),v=Ei();function O(k){return k?new Date(k).toLocaleString("zh-CN",{hour12:!1}):"-"}function w(k){return!k||typeof k!="object"?"":Object.entries(k).map(([L,K])=>`${L}: ${K}`).join(`
27
+ `)}function E(k){if(k==null||k==="")return"(空)";const L=typeof k=="string"?k:String(k);try{const K=JSON.parse(L);return JSON.stringify(K,null,2)}catch{return L}}function C(k){return k>=200&&k<300?"status-2xx":k>=300&&k<400?"status-3xx":k>=400&&k<500?"status-4xx":k>=500?"status-5xx":""}async function x(){if(!o.value){o.value=!0;try{const L=await(await fetch("/api/local/proxy")).json();s.value=(L.mode||"")==="mitm"}catch{s.value=!1}finally{o.value=!1}}}async function A(){n.value=!0;try{const k=await fetch("/api/local/traffic");t.value=await k.json(),Array.isArray(t.value)||(t.value=[])}catch{t.value=[]}finally{n.value=!1}}function D(){f&&clearTimeout(f),f=setTimeout(F,300)}async function F(){n.value=!0;try{const k=new URLSearchParams;a.value.q&&k.set("q",a.value.q),a.value.method&&k.set("method",a.value.method);const L=String(a.value.status??"").trim();L!==""&&!Number.isNaN(Number(L))&&k.set("status",L),a.value.type&&k.set("type",a.value.type),k.set("sort",a.value.sort),k.set("order",a.value.order),k.set("limit",String(xs)),k.set("offset",String(l.value));const ue=await(await fetch("/api/local/capture?"+k.toString())).json();r.value=ue.list||[],i.value=ue.total??0}catch{r.value=[],i.value=0}finally{n.value=!1}}function ce(){l.value=Math.max(0,l.value-xs),F()}function re(){l.value+=xs,F()}function je(){a.value.order=a.value.order==="desc"?"asc":"desc",F()}function Be(k){c.value=k,p.value="request"}function De(){c.value=null}async function ze(){var k;if((k=c.value)!=null&&k.url)try{await navigator.clipboard.writeText(c.value.url),g.value=!0,setTimeout(()=>{g.value=!1},1500)}catch{alert("复制失败")}}async function Qe(){await x(),s.value?(l.value=0,await F()):await A()}return Yt(Qe),ln(()=>v.path,k=>{k==="/console/traffic"&&Qe()}),(k,L)=>(W(),q("div",Uf,[L[20]||(L[20]=h("h2",null,"流量记录",-1)),h("p",Lf,J(s.value?"抓包代理下可查看解密后的请求与响应。":"经本机代理的最近网络请求,最多保留 500 条。"),1),s.value?(W(),q("div",Bf,[L[14]||(L[14]=h("div",{class:"capture-banner"},"当前为抓包代理,可查看解密后的请求与响应。",-1)),h("div",Kf,[Ae(h("input",{"onUpdate:modelValue":L[0]||(L[0]=K=>a.value.q=K),type:"text",placeholder:"搜索 URL…",class:"search-input",onInput:D},null,544),[[We,a.value.q]]),Ae(h("select",{"onUpdate:modelValue":L[1]||(L[1]=K=>a.value.method=K),class:"filter-select",onChange:F},[...L[9]||(L[9]=[Ro('<option value="" data-v-1ee1603b>全部方法</option><option value="GET" data-v-1ee1603b>GET</option><option value="POST" data-v-1ee1603b>POST</option><option value="PUT" data-v-1ee1603b>PUT</option><option value="PATCH" data-v-1ee1603b>PATCH</option><option value="DELETE" data-v-1ee1603b>DELETE</option><option value="HEAD" data-v-1ee1603b>HEAD</option><option value="OPTIONS" data-v-1ee1603b>OPTIONS</option>',8)])],544),[[Nn,a.value.method]]),Ae(h("input",{"onUpdate:modelValue":L[2]||(L[2]=K=>a.value.status=K),type:"text",placeholder:"状态码",class:"status-input",onInput:D},null,544),[[We,a.value.status]]),Ae(h("select",{"onUpdate:modelValue":L[3]||(L[3]=K=>a.value.type=K),class:"filter-select",onChange:F},[...L[10]||(L[10]=[Ro('<option value="" data-v-1ee1603b>全部类型</option><option value="document" data-v-1ee1603b>document</option><option value="xhr" data-v-1ee1603b>xhr</option><option value="script" data-v-1ee1603b>script</option><option value="stylesheet" data-v-1ee1603b>stylesheet</option><option value="image" data-v-1ee1603b>image</option><option value="font" data-v-1ee1603b>font</option><option value="other" data-v-1ee1603b>other</option>',8)])],544),[[Nn,a.value.type]]),Ae(h("select",{"onUpdate:modelValue":L[4]||(L[4]=K=>a.value.sort=K),class:"filter-select",onChange:F},[...L[11]||(L[11]=[h("option",{value:"time"},"按时间",-1),h("option",{value:"method"},"按方法",-1),h("option",{value:"status"},"按状态",-1),h("option",{value:"url"},"按 URL",-1)])],544),[[Nn,a.value.sort]]),h("button",{type:"button",class:"sort-order-btn",onClick:je,title:a.value.order==="desc"?"倒序":"正序"},J(a.value.order==="desc"?"↓":"↑"),9,Gf),h("button",{class:"btn",onClick:F,disabled:n.value},"刷新",8,Wf)]),h("div",qf,[h("table",Jf,[L[13]||(L[13]=h("thead",null,[h("tr",null,[h("th",null,"时间"),h("th",null,"方法"),h("th",null,"URL"),h("th",null,"状态"),h("th",null,"类型"),h("th")])],-1)),h("tbody",null,[(W(!0),q(Me,null,Cs(r.value,K=>(W(),q("tr",{key:K.id,onClick:ue=>Be(K),class:"row-clickable"},[h("td",null,J(O(K.time)),1),h("td",null,[h("span",{class:Ce(["method-tag",K.method])},J(K.method),3)]),h("td",{class:"url-cell",title:K.url},J(K.url),9,Qf),h("td",null,[h("span",{class:Ce(["status-tag",C(K.statusCode)])},J(K.statusCode),3)]),h("td",null,J(K.type),1),h("td",null,[h("button",{type:"button",class:"btn-link",onClick:ss(ue=>Be(K),["stop"])},"详情",8,Yf)])],8,zf))),128)),!r.value.length&&!n.value?(W(),q("tr",Xf,[...L[12]||(L[12]=[h("td",{colspan:"6",class:"empty"},"暂无抓包记录,请通过抓包代理访问网页。",-1)])])):he("",!0)])])]),i.value>0?(W(),q("div",Zf,[h("span",ed,"共 "+J(i.value)+" 条",1),h("button",{class:"btn small",disabled:l.value<=0,onClick:ce},"上一页",8,td),h("button",{class:"btn small",disabled:l.value+r.value.length>=i.value,onClick:re},"下一页",8,nd)])):he("",!0)])):(W(),q("div",kf,[h("div",$f,[h("button",{class:"btn",onClick:A,disabled:n.value},"刷新",8,jf)]),h("table",Vf,[L[8]||(L[8]=h("thead",null,[h("tr",null,[h("th",null,"时间"),h("th",null,"类型"),h("th",null,"方法"),h("th",null,"URL / 主机"),h("th",null,"动作")])],-1)),h("tbody",null,[(W(!0),q(Me,null,Cs(t.value,K=>(W(),q("tr",{key:K.time+(K.url||"")},[h("td",null,J(O(K.time)),1),h("td",null,J(K.type),1),h("td",null,J(K.method),1),h("td",Hf,J(K.url),1),h("td",null,[h("span",{class:Ce(K.action==="proxy"?"action-proxy":"action-direct")},J(K.action==="proxy"?"代理":"直连"),3)])]))),128)),!t.value.length&&!n.value?(W(),q("tr",Ff,[...L[7]||(L[7]=[h("td",{colspan:"5",class:"empty"},"暂无记录,请确保代理已开启并有流量经过。",-1)])])):he("",!0)])])])),c.value?(W(),q("div",{key:2,class:"drawer-mask",onClick:De})):he("",!0),c.value?(W(),q("div",sd,[h("div",{class:"drawer-header"},[L[15]||(L[15]=h("span",{class:"drawer-title"},"详情",-1)),h("button",{type:"button",class:"drawer-close",onClick:De},"×")]),h("div",od,[h("button",{type:"button",class:Ce({active:p.value==="request"}),onClick:L[5]||(L[5]=K=>p.value="request")},"请求",2),h("button",{type:"button",class:Ce({active:p.value==="response"}),onClick:L[6]||(L[6]=K=>p.value="response")},"响应",2)]),h("div",rd,[h("div",id,[h("div",ld,[h("span",ad,J(c.value.method),1),h("button",{type:"button",class:"btn-copy-url",onClick:ze},J(g.value?"已复制":"复制 URL"),1)]),h("pre",cd,J(c.value.url),1)]),p.value==="request"?(W(),q(Me,{key:0},[h("div",ud,[L[16]||(L[16]=h("h4",null,"Request Headers",-1)),h("pre",fd,J(w(c.value.requestHeaders)),1)]),h("div",dd,[L[17]||(L[17]=h("h4",null,"Request Body",-1)),h("pre",pd,J(E(c.value.requestBody)),1)])],64)):(W(),q(Me,{key:1},[h("div",hd,[L[18]||(L[18]=h("h4",null,"Response Headers",-1)),h("pre",gd,J(w(c.value.responseHeaders)),1)]),h("div",md,[L[19]||(L[19]=h("h4",null,"Response Body",-1)),h("pre",vd,J(E(c.value.responseBody)),1)])],64))])])):he("",!0)]))}},_d=Lt(yd,[["__scopeId","data-v-1ee1603b"]]),bd=[{path:"/",name:"ModeSelect",component:Eu,meta:{title:"选择模式"}},{path:"/login",name:"Login",component:Nu,meta:{title:"登录"}},{path:"/register",name:"Register",component:Fu,meta:{title:"注册"}},{path:"/console",redirect:"/console/traffic"},{path:"/console/traffic",name:"Traffic",component:_d,meta:{title:"流量记录"}},{path:"/console/proxy",name:"ProxySettings",component:gf,meta:{title:"代理设置"}},{path:"/console/pac-rules",name:"PacRules",component:Df,meta:{title:"PAC 规则"}}],Ti=iu({history:$c(),routes:bd});Ti.beforeEach((e,t,n)=>{const s=wi();e.path!=="/"&&!e.path.startsWith("/login")&&!e.path.startsWith("/register")&&!s?n("/"):n()});wi();const Oi=Xa(yu);Oi.use(Ti);Oi.mount("#app");
@@ -0,0 +1,16 @@
1
+ <!DOCTYPE html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>PAC 代理控制台</title>
7
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
8
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
9
+ <link href="https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,400;0,9..40,500;0,9..40,600;0,9..40,700&display=swap" rel="stylesheet" />
10
+ <script type="module" crossorigin src="/assets/index-BeZfrxlH.js"></script>
11
+ <link rel="stylesheet" crossorigin href="/assets/index-BT0RwRSQ.css">
12
+ </head>
13
+ <body>
14
+ <div id="app"></div>
15
+ </body>
16
+ </html>